tag:blogger.com,1999:blog-10485619806481348392024-03-21T17:05:16.189-07:00AndipasРецепты на php, java script, jQueryUnknownnoreply@blogger.comBlogger51125tag:blogger.com,1999:blog-1048561980648134839.post-42325125890529786542021-09-08T23:32:00.005-07:002021-09-08T23:32:52.265-07:00Шпаргалка по GIT<p> </p><h3>Пример использования Git</h3>
<p></p>
<p>В первую очередь необходимо поставить Git:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer">pkg_add <span class="re5">-r</span> <span class="kw2">git</span></div></div>
<p>Затем создаем пару ssh ключей, если не создавали ее ранее:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">ssh-keygen</span><br />
<span class="kw2">cat</span> ~<span class="sy0">/</span>.ssh<span class="sy0">/</span>id_rsa.pub</div></div>
<p>Заходим на БитБакет, создаем git-репозиторий под новый проект, а в
свойствах аккаунта прописываем свой открытый ssh-ключ. Затем клонируем
репозиторий:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw3">cd</span> ~<span class="sy0">/</span>projects<span class="sy0">/</span>haskell<br />
<span class="kw2">git clone</span> <span class="kw2">git</span><span class="sy0">@</span>bitbucket.org:afiskon<span class="sy0">/</span>hs-textgen.git<br />
<span class="kw3">cd</span> hs-textgen</div></div>
<p>Делаем какие-то изменения:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw3">echo</span> <span class="kw3">test</span> <span class="sy0">></span> TODO.TXT</div></div>
<p>Добавляем новый файл в репозиторий и делаем коммит:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git add</span> TODO.TXT<br />
<span class="kw2">git commit</span> <span class="re5">-a</span></div></div>
<p>Поскольку я не указал описание коммита, запускается <a href="https://eax.me/vim-commands/">редактор VIM</a>, с помощью которого я и ввожу описание. Затем я отправляю все сделанные мною изменения на БитБакет:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git push</span> origin</div></div>
<p>Допустим, теперь я хочу сделать некоторые изменения в проекте, но не
уверен, выйдет ли из этого что-то хорошее. В таких случаях создается
новая ветка:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git branch</span> new_feature<br />
<span class="kw2">git checkout</span> new_feature</div></div>
<p>Работаем с этой веткой. Если ничего хорошего не вышло, возвращаемся к основной ветке (она же «trunk» или «ствол»):</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git checkout</span> master</div></div>
<p>Если вышло что-то хорошее, мержим ветку в master (о разрешении конфликтов рассказано в следующем параграфе):</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git commit</span> <span class="re5">-a</span> <span class="co0"># делаем коммит всех изменений в new_feature</span><br />
<span class="kw2">git checkout</span> master <span class="co0"># переключаемся на master</span><br />
<span class="kw2">git merge</span> new_feature <span class="co0"># мержим ветку new_feature</span></div></div>
<p>Не забываем время от времени отправлять наш код на BitBucket:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git push</span> origin</div></div>
<p>Если мы правим код с нескольких компьютеров, то перед началом работы
не забываем «накатить» в локальный репозиторий последнюю версию кода:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git pull</span> origin</div></div>
<p>Работа в команде мало чем отличается от описанного выше. Только
каждый программист должен работать со своей веткой, чтобы не мешать
другим программистам. Одна из классических ошибок при начале работы с
Git заключается в <span style="white-space: nowrap;">push’е</span> <em>всех веток</em>,
а не только той, с которой вы работали. Вообще я бы советовал первое
время перед выполнением каждого push делать паузу с тем, чтобы подумать,
что и куда сейчас уйдет. Для большей безопасности советую при генерации
ssh-ключей указать пароль. Тогда каждый запрос пароля со стороны Git
будет для вас сигналом «Эй, ты делаешь что-то, что затронет других».</p>
<p>Для работы с Git под Windows можно воспользоваться клиентом <a href="https://tortoisegit.org/">TortoiseGit</a>. Если память не подводит, для работы ему нужен <a href="https://gitforwindows.org/">Git for Windows</a>. Для генерации ключей можно воспользоваться утилитой <a href="https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html">PuTTyGen</a>. Только не забудьте экспортировать открытый ключ в правильном формате, «Conversions → Export OpenSSH key».</p>
<p>Следует отметить, что мне лично TortoiseGit показался не слишком
удобным. Возможно, это всего лишь дело привычки, но мне кажется намного
удобнее работать с Git из консоли, чем с помощью контекстного меню в
Проводнике.</p>
<h3>Шпаргалка по командам</h3>
<p>В этом параграфе приведена сухая шпаргалка по командам Git. Я далеко
не спец в этой системе контроля версий, так что ошибки в терминологии
или еще в чем-то вполне возможны. Если вы видите в этом разделе ошибку,
отпишитесь, пожалуйста, в комментариях.</p>
<p>Создать новый репозиторий:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git init</span> project-name</div></div>
<p>Если вы планируете клонировать его по ssh с удаленной машины, также скажите:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git config</span> <span class="re5">--bool</span> core.bare <span class="kw2">true</span></div></div>
<p>… иначе при git push вы будете получать странные ошибки вроде:</p>
<div class="codecolorer-container text default" style="overflow: auto; white-space: nowrap;"><div class="text codecolorer">Refusing to update checked out branch: refs/heads/master<br />
By default, updating the current branch in a non-bare repository<br />
is denied, because it will make the index and work tree inconsistent<br />
with what you pushed, and will require 'git reset --hard' to match<br />
the work tree to HEAD.</div></div>
<p>Клонировать репозиторий с удаленной машины:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git clone</span> <span class="kw2">git</span><span class="sy0">@</span>bitbucket.org:afiskon<span class="sy0">/</span>hs-textgen.git</div></div>
<p>Если хотим пушить один код в несколько репозиториев:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git remote</span> add remotename <span class="kw2">git</span><span class="sy0">@</span>gitlab.example.ru:repo.git</div></div>
<p>Добавить файл в репозиторий:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git add</span> text.txt</div></div>
<p>Удалить файл:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git rm</span> text.txt</div></div>
<p>Текущее состояние репозитория (изменения, неразрешенные конфликты и тп):</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git status</span></div></div>
<p>Сделать коммит:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git commit</span> <span class="re5">-a</span> <span class="re5">-m</span> <span class="st0">"Commit description"</span></div></div>
<p>Сделать коммит, введя его описание с помощью $EDITOR:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git commit</span> <span class="re5">-a</span></div></div>
<p>Замержить <em>все ветки</em> локального репозитория на удаленный репозиторий (аналогично вместо origin можно указать и remotename, см выше):</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git push</span> origin</div></div>
<p>Аналогично предыдущему, но делается пуш <em>только ветки master</em>:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git push</span> origin master</div></div>
<p>Запушить <em>текущую ветку</em>, не вводя целиком ее название:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git push</span> origin HEAD</div></div>
<p>Замержить все ветки с удаленного репозитория:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git pull</span> origin</div></div>
<p>Аналогично предыдущему, но накатывается только ветка master:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git pull</span> origin master</div></div>
<p>Накатить текущую ветку, не вводя ее длинное имя:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git pull</span> origin HEAD</div></div>
<p>Скачать все ветки с origin, но не мержить их в локальный репозиторий:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git fetch</span> origin</div></div>
<p>Аналогично предыдущему, но только для одной заданной ветки:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git fetch</span> origin master</div></div>
<p>Начать работать с веткой some_branch (уже существующей):</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git checkout</span> <span class="re5">-b</span> some_branch origin<span class="sy0">/</span>some_branch</div></div>
<p>Создать новый бранч (ответвится от текущего):</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git branch</span> some_branch</div></div>
<p>Переключиться на другую ветку (из тех, с которыми уже работаем):</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git checkout</span> some_branch</div></div>
<p>Получаем список веток, с которыми работаем:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git branch</span> <span class="co0"># звездочкой отмечена текущая ветвь</span></div></div>
<p>Просмотреть все существующие ветви:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git branch</span> <span class="re5">-a</span> <span class="co0"># | grep something</span></div></div>
<p>Замержить some_branch в текущую ветку:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git merge</span> some_branch</div></div>
<p>Удалить бранч (после мержа):</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git branch</span> <span class="re5">-d</span> some_branch</div></div>
<p>Просто удалить бранч (тупиковая ветвь):</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git branch</span> <span class="re5">-D</span> some_branch</div></div>
<p>История изменений:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git log</span></div></div>
<p>История изменений в обратном порядке:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git log</span> <span class="re5">--reverse</span></div></div>
<p>История конкретного файла:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git log</span> file.txt</div></div>
<p>Аналогично предыдущему, но с просмотром сделанных изменений:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git log</span> <span class="re5">-p</span> file.txt</div></div>
<p>История с именами файлов и псевдографическим изображением бранчей:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git log</span> <span class="re5">--stat</span> <span class="re5">--graph</span></div></div>
<p>Изменения, сделанные в заданном коммите:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git show</span> d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4</div></div>
<p>Посмотреть, кем в последний раз правилась каждая строка файла:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git blame</span> file.txt</div></div>
<p>Удалить бранч из репозитория на сервере:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git push</span> origin :branch-name</div></div>
<p>Откатиться к конкретному коммиту (хэш смотрим в «git log»):</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git reset</span> <span class="re5">--hard</span> d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4</div></div>
<p>Аналогично предыдущему, но файлы на диске остаются без изменений:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git reset</span> <span class="re5">--soft</span> d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4</div></div>
<p>Попытаться обратить заданный commit:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git revert</span> d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4</div></div>
<p>Просмотр изменений (суммарных, а не всех по очереди, как в «git log»):</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git diff</span> <span class="co0"># подробности см в "git diff --help"</span></div></div>
<p>Используем vimdiff в качестве программы для разрешения конфликтов (mergetool) по умолчанию:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git config</span> <span class="re5">--global</span> merge.tool vimdiff</div></div>
<p>Отключаем диалог «какой mergetool вы хотели бы использовать»:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git config</span> <span class="re5">--global</span> mergetool.prompt <span class="kw2">false</span></div></div>
<p>Отображаем табы как 4 пробела, например, в «git diff»:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git config</span> <span class="re5">--global</span> core.pager <span class="st_h">'less -x4'</span></div></div>
<p>Создание <em>глобального</em> <a href="https://git-scm.com/docs/gitignore">файла .gitignore</a>:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git config</span> <span class="re5">--global</span> core.excludesfile ~<span class="sy0">/</span>.gitignore_global</div></div>
<p>Разрешение конфликтов (когда оные возникают в результате мержа):</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git mergetool</span></div></div>
<p>Создание тэга:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git tag</span> some_tag <span class="co0"># за тэгом можно указать хэш коммита</span></div></div>
<p>Удаление untracked files:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git clean</span> <span class="re5">-f</span></div></div>
<p>«Упаковка» репозитория для увеличения скорости работы с ним:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git gc</span></div></div>
<p>Иногда требуется создать копию репозитория или перенести его с одной машины на другую. Это делается примерно так:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">mkdir</span> <span class="re5">-p</span> <span class="sy0">/</span>tmp<span class="sy0">/</span>git-copy<br />
<span class="kw3">cd</span> <span class="sy0">/</span>tmp<span class="sy0">/</span>git-copy<br />
<span class="kw2">git clone</span> <span class="re5">--bare</span> <span class="kw2">git</span><span class="sy0">@</span>example.com:afiskon<span class="sy0">/</span>cpp-opengl-tutorial1.git<br />
<span class="kw3">cd</span> cpp-opengl-tutorial1.git<br />
<span class="kw2">git push</span> <span class="re5">--mirror</span> <span class="kw2">git</span><span class="sy0">@</span>example.com:afiskon<span class="sy0">/</span>cpp-opengl-tutorial2.git</div></div>
<p>Следует отметить, что Git позволяет использовать короткую запись
хэшей. Вместо «d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4» можно писать
«d8578edf» или даже «d857».</p>
<p><em>Дополнение:</em> Также в 6-м пункте <a href="https://eax.me/mini-notes-issue-9/">Мини-заметок номер 9</a> приводится пример объединения коммитов с помощью <code class="codecolorer bash default"><span class="bash"><span class="kw2">git rebase</span></span></code>, а в 10-м пункте <a href="https://eax.me/mini-notes-issue-11/">Мини-заметок номер 11</a> вы найдете пример объединения двух репозиториев в один без потери истории.</p>
<h3>Работа с сабмодулями</h3>
<p>Более подробно сабмодули и зачем они нужны объясняется в заметке <a href="https://eax.me/opengl-simple-project/">Простой кроссплатформенный OpenGL-проект на C++</a>. Здесь упомянем самое главное.</p>
<p>Добавить сабмодуль:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git submodule</span> add https:<span class="sy0">//</span>github.com<span class="sy0">/</span>glfw<span class="sy0">/</span>glfw glfw</div></div>
<p>Инициализация сабмодулей:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git submodule</span> init</div></div>
<p>Обновление сабмодулей, например, если после <code class="codecolorer text default"><span class="text">git pull</span></code> поменялся коммит, на который смотрит сабмодуль:</p>
<div class="codecolorer-container bash default" style="overflow: auto; white-space: nowrap;"><div class="bash codecolorer"><span class="kw2">git submodule</span> update</div></div>
<p>Удаление сабмодуля производится так:</p>
<ol><li>Скажите <code class="codecolorer bash default"><span class="bash"><span class="kw2">git rm</span> <span class="re5">--cached</span> имя_сабмодуля</span></code>;</li><li>Удалите соответствующие строчки из файла .gitmodules;</li><li>Также грохните соответствующую секцию в .git/config;</li><li>Сделайте коммит;</li><li>Удалите файлы сабмодуля;</li><li>Удалите каталог .git/modules/имя_сабмодуля;</li></ol>
<h3>Дополнительные материалы</h3>
<p>В качестве источников дополнительной информации я бы рекомендовал следующие:</p>
<ul><li><a href="http://whygitisbetterthanx.com/">Why Git is Better than X</a>;</li><li><a href="http://habrahabr.ru/blogs/Git/104198/">Хабростатья «Почему Git?»</a>;</li><li><a href="http://habrahabr.ru/blogs/Git/80909/">Книга «Волшебство Git» на русском языке</a>;</li></ul><p> </p><p>Источник: <a href="https://eax.me/git-commands/" target="_blank">https://eax.me/git-commands/ <br /></a>Публикую
у себя, потому что домены авторов иногда не продлевается, а такой
контент исчезает. Blogspot работает и ничего не просит годами.<br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-9160362380619909712019-05-16T23:46:00.003-07:002019-05-16T23:53:31.445-07:00Подключение javascript в yii2<div class="pagetxt">
<h3>
Inline js</h3>
Во view можно подключить произвольный javascript код:<br />
<pre><code>
$var = 123;
//начало многосточной строки, можно использовать любые кавычки
$script = <<< JS
function foo() {
return $var; //можно использовать переменные
}
JS; //маркер конца строки, обязательно сразу, без пробелов и табуляции
$this->registerJs($script, yii\web\View::POS_READY);
</code>
</pre>
получим сразу перед закрытием body:<br />
<br />
<pre><code>
<script type="text/javascript">
jQuery(document).ready(function () {
function foo() {
return 123;
}
});</script>
</code>
</pre>
</div>
другие варианты места подключения скрипта: (<a href="http://www.yiiframework.com/doc-2.0/yii-web-view.html#registerJs()-detail" target="_blank">документация</a>)<br />
<ul>
<li><b>POS_HEAD</b>: перед тегом </head></li>
<li><b>POS_BEGIN</b>: после тэга <body></li>
<li><b>POS_END</b>: перед тэгом </body></li>
<li><b>POS_LOAD</b>: оборачивается в jQuery(window).<b>load</b>(). Note that by using this position, the method will automatically register the jQuery js file.</li>
<li><b>POS_READY</b>: оборачивается вjQuery(document).<b>ready</b>(). This is the default value. Note that by using this position, the method will automatically register the jQuery js file.</li>
</ul>
<br />
<h3>js-файл</h3>
<pre class="hljs php"><span class="hljs-variable">$this</span>->registerJsFile(<span class="hljs-string">'url/to/file.js'</span>, [<span class="hljs-string">'position'</span> => yii\web\View::POS_END]);</pre>
<pre class="hljs php"><a href="http://fncy.ru/yii2-javascript" target="_blank">источник</a> </pre>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-1971209645492900212019-05-07T00:41:00.000-07:002019-05-07T03:53:28.553-07:00Подсветка кода для bloggerПересмотрел кучу вариантов для подсветки кода в blogger, единственное на данный момент рабочее решение это <a href="https://highlightjs.org/" target="_blank">https://highlightjs.org</a><br />
<br />
О том как его добавить в блог читаем здесь - <a href="https://81code.blogspot.com/2016/04/syntax-highlighter-blogger.html" target="_blank">https://81code.blogspot.com/2016/04/syntax-highlighter-blogger.html</a><br />
<br />
Перед тем как вставить код, его нужно обработать например в <a href="https://www.freeformatter.com/html-escape.html" target="_blank">HTML Escape</a><br />
Еще для себя добавил плагин показа номеров строк - <a href="https://github.com/wcoder/highlightjs-line-numbers.js/" target="_blank">https://github.com/wcoder/highlightjs-line-numbers.js/</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-44128239436575107642019-05-06T23:51:00.000-07:002019-05-07T01:25:26.807-07:00Находим в тексте ссылки youtube и конвертим их в embed видеоКод:
<br />
<pre><code class="php">
function convertYoutube($string) {
return preg_replace(
"/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i",
"<iframe src=\"//www.youtube.com/embed/$2\" allowfullscreen></iframe>",
$string
);
}
</code>
</pre>
Источник: <a href="https://stackoverflow.com/questions/19050890/find-youtube-link-in-php-string-and-convert-it-into-embed-code/41910059" rel="nofollow" target="_blank">stackoverflow.com</a>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-67355243164261491222018-08-24T00:22:00.000-07:002019-05-07T00:31:25.785-07:00Republia - новая криптовалюта лучше чем EthereumПредыдущий мой пост про новую криптовалюту MinexCoin дал мне заработать на баунти компании неплохую сумму монет, при этом я затратил совсем немного времени. На пике за один MNX давали 60$. Сейчас цена монеты значительно просела, но это нормально на фоне падения цен на все крипто валюты. Мне нравиться MinexCoin своей открытостью и ясностью целей, на данный момент компания предлагает <a href="http://minexpay.com/?referralId=221" target="_blank">заказывать дебетовые (овердрафт) карты</a>, которые позволят легко выводить криптовалюту в фиат или совершать покупки за крипту с минимальной комиссией и вот уже скоро они должны выпустить первую партию карт.<br />
<br />
Новый интересный проект <b><a href="https://republia.io/" target="_blank">Republia</a></b> Co-founder которого является Данил Шуляев, сын СЕО MinexCoin Бориса Шуляева. Republia сейчас находиться в стадии <b>PRE SALE</b> это дает возможность купить монеток с бонусом в <b>25%</b>. Принимаются BTC, LTC, MNX, ETH, BCH не менее 100$. После PRE SALE их можно будет поставить на парковку и получать за это проценты.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://media.republia.io/public/img/brief/system.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="516" data-original-width="800" height="206" src="https://media.republia.io/public/img/brief/system.png" width="100%" /></a></div>
<br />
Также сейчас проходит баунти компания которая позволяет получить монеты <b>Republia</b> не вкладывая средства, а только немного своего времени. Регистрируйтесь, проходите небольшие задания и вам за это в награду дадут монет.<br />
<br />
Что касается громкого заголовка. Действительно ли <b>Republia </b>лучше чем Ethereum? Ethereum на данный момент 2 по капитализации криптовалюта и достигла она этого благодаря внедрению инновационных смарт контрактов на которых сейчас почти каждый день появляются новые криптовалюты - токены. Но у Ethereum есть проблемы, которые <b>Republia</b> намеревается решить. <b>БЛОКЧЕЙН СЛЕДУЮЩЕГО ПОКОЛЕНИЯ</b> - так написано у них на сайте и в белой бумаге. Расписаны проблемы которые есть на данный момент у криптовалют и как они собираются их решить. Приведу несколько цитат:<br />
<br />
<blockquote class="tr_bq">
<b>Rebublia Blockchain</b> состоит из многочисленных блокчейнов и решает
проблему низкой пропускной способности за счет динамически
увеличивающегося количества sidechains и введения мастер-нод и нод.</blockquote>
<blockquote class="tr_bq">
<b>ХАРДФОРКИ</b> В <b>Republia Ecosystem</b> все противоречия решаются через консенсус, что позволяет обновлять протокол автоматически. А благодаря тому, что протокол Republia делится на три слоя, есть возможность вносить изменения, не подвергая расколу всю систему.</blockquote>
<blockquote class="tr_bq">
<b>БЕЗОПАСНОСТЬ ДАННЫХ</b> Трехуровневая система безопасности (<b>Veracity System, CloudX и RepubliaID</b>) обеспечивает защищенность как средств, так и пользовательских данных.<br />
<br />
<b>УЯЗВИМОСТЬ СМАРТ-КОНТРАКТОВ</b> Язык функционального программирования <b>Michelson</b>, на котором написана <b>Republia VM</b>, позволяет проверить смарт-контракт до его запуска в сеть. А благодаря полноте по тьюрингу, смарт-контракт, созданный на платформе <b>Republia</b>, никогда не войдет в бесконечный цикл.<br />
<b><br /></b>
<b>ВЫСОЧАЙШАЯ ВОЛАТИЛЬНОСТЬ</b> <b>Republia Bank</b>, объединяя действующие механизмы работы мировых центробанков с блокчейн-технологиями, обеспечивает стабильность курса монеты <b>RPB </b>в рамках высоковолатильной среды. </blockquote>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5s06Udi9ePqq4AHcXskiohimQPiN0-NE8gIIk9RNTeXWYWoN95ivbev70j2ElWU-DaqbTTg5XPFTMZs77HeWXkysk7XozTrq5Z5QAk_Iw-cc-Vu5JqWMG4kEANDqa_eRSMdePTrmGS6I/s1600/Republia.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="662" data-original-width="1193" height="353" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5s06Udi9ePqq4AHcXskiohimQPiN0-NE8gIIk9RNTeXWYWoN95ivbev70j2ElWU-DaqbTTg5XPFTMZs77HeWXkysk7XozTrq5Z5QAk_Iw-cc-Vu5JqWMG4kEANDqa_eRSMdePTrmGS6I/s640/Republia.png" width="100%" /></a></div>
<div style="text-align: center;">
Более подробно можно ознакомиться на сайте проекта <a href="http://republia.io/">Republia.io</a> </div>
<br />
Если <b>Republia</b> сможет выполнить все свои планы, то по своим возможностям она будет лучше чем Ethereum. Сравнительно недавно в 2015 было ico Ethereum и 1 монету можно было купить за 7 рублей! В конце 2017 года за 1 Eth давали уже 1000$! Так что сейчас есть шанс повторить успех и даже превзойти его, время покажет.<br />
<br />
<br />
Меня этот проект очень заинтересовал и я сделал свой небольшой вклад, верю в проект и желаю ребятам удачи и терпения в выполнении их грандиозных целей!Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-38628171654009266002017-06-08T02:10:00.000-07:002017-06-08T02:11:00.017-07:00Minexcoin - новая эра крипто платежей! <h3 class="post-title entry-title" itemprop="name">
</h3>
<br />
Сейчас помимо самой известной валюты - биткоин,
существует много альткоинов, валют которые тоже имеют интерес у рядового
пользователя, но стоят значительно ниже.<br />
<br />
Некоторые из таких
монет можно собирать без вложений и потом на фоне роста продавать на
бирже в обмен на биткоины! Цена таких монет может варьироваться от 4 -5
цнтов до 50 долларов за 1 монету!<br />
<br />
Одной из таких монет является
Minexсoin - MNC Получить её можно бесплатно только на предстарте, а
именно до 13 июня 2017 года, в дальнейшем её можно будет только купить!<br />
<br />
Чтобы получить монету нужно перейти по ссылке <a href="https://vk.com/away.php?to=https%3A%2F%2Fminexcoin.com%2Fref%2F11079&post=6201302_476&cc_key=" target="_blank">https://minexcoin.com/ref/11079</a> и зарегистрироваться на сайте<br />
<br />
Подключить свой аккаунт Facebook или Twitter, подписаться на email-рассылку и проявлять активность в социальных сетях.<br />
<br />
Каждую
неделю Вы будете получать определенное количество монет исходя из вашей
активности, а после выхода на биржу обменяете их на биткоин! Вот так
все просто!<br />
Скопировал <a href="http://investmentsfree.blogspot.ru/2017/05/minexcoin.html" target="_blank">отсюда</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-78829489068803172492017-05-30T00:09:00.000-07:002017-05-30T00:09:03.670-07:00yii2 полезные мелочи<h2>
Как в yii2 проверить isNewRecord в afterSave()</h2>
<div class="pagetxt">
Теперь алгоритм проверки после сохранения такой:
<br />
<pre class="hljs php">app\models\Model
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">afterSave</span><span class="hljs-params">(<span class="hljs-variable">$insert</span>, <span class="hljs-variable">$changedAttributes</span>)</span>
</span>{
<span class="hljs-keyword">if</span> (<span class="hljs-variable">$insert</span>) {
<span class="hljs-comment">// Да это новая запись (insert)</span>
} <span class="hljs-keyword">else</span> {
<span class="hljs-comment">// Нет, старая (update)</span>
}
<span class="hljs-keyword">parent</span>::afterSave(<span class="hljs-variable">$insert</span>, <span class="hljs-variable">$changedAttributes</span>);
}
</pre>
</div>
<h2>
</h2>
<h2>
Не находит action из контроллера Not Found (#404)</h2>
<div class="small">
<span class="light"></span></div>
<div class="pagetxt">
В yii2 есть особенность с именование action в отличие от yii1:
<br />
в контроллере создаем action
<br />
<pre class="hljs php"><span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">actionLastNews</span><span class="hljs-params">()</span>
</span>{
<span class="hljs-comment">////</span>
}
</pre>
при стандартных rules этот экшн будет доступен по адресу: <code>/last-news</code>
<br />
Эта мелочь может попортить немало нервов.<br />
</div>
<br />
<h2>
Подключение javascript в yii2</h2>
<div class="pagetxt">
<h3>
Inline js</h3>
Во view можно подключить произвольный javascript код:
<br />
<pre class="hljs php"><span class="hljs-variable">$var</span> = <span class="hljs-number">123</span>;
<span class="hljs-comment">//начало многосточной строки, можно использовать любые кавычки</span>
<span class="hljs-variable">$script</span> = <<< JS
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">foo</span><span class="hljs-params">()</span> </span>{
<span class="hljs-keyword">return</span> <span class="hljs-variable">$var</span>; <span class="hljs-comment">//можно использовать переменные</span>
}
JS;
<span class="hljs-comment">//маркер конца строки, обязательно сразу, без пробелов и табуляции</span>
<span class="hljs-variable">$this</span>->registerJs(<span class="hljs-variable">$script</span>, yii\web\View::POS_READY);
</pre>
получим сразу перед закрытием body:
<br />
<pre class="hljs xml"><span class="hljs-tag"><<span class="hljs-title">script</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"text/javascript"</span>></span><span class="javascript">
jQuery(<span class="hljs-built_in">document</span>).ready(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">foo</span>(<span class="hljs-params"></span>) </span>{
<span class="hljs-keyword">return</span> <span class="hljs-number">123</span>;
}
});</span><span class="hljs-tag"></<span class="hljs-title">script</span>></span>
<span class="hljs-tag"></<span class="hljs-title">body</span>></span>
</pre>
другие варианты места подключения скрипта: (<a href="http://www.yiiframework.com/doc-2.0/yii-web-view.html#registerJs%28%29-detail" target="_blank">документация</a>)<br />
<ul>
<li><strong>POS_HEAD</strong></li>
<li><strong>POS_BEGIN</strong>: после тэга <body></body></li>
<li><strong>POS_END</strong>: перед тэгом </li>
</ul>
</div>
<li><strong>POS_LOAD</strong>: оборачивается в jQuery(window).<strong>load</strong>(). Note that by using this position, the method will automatically register the jQuery js file.</li>
<li><strong>POS_READY</strong>: оборачивается вjQuery(document).<strong>ready</strong>(). This is the default value. Note that by using this position, the method will automatically register the jQuery js file.</li>
<h3>
js-файл</h3>
<pre class="hljs php"><span class="hljs-variable">$this</span>->registerJsFile(<span class="hljs-string">'url/to/file.js'</span>, [<span class="hljs-string">'position'</span> => yii\web\View::POS_END]);</pre>
<pre class="hljs php"> </pre>
<pre class="hljs php">Скопировано <a href="http://fncy.ru/" target="_blank">отсюда</a> </pre>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-91068369555242485692016-12-29T00:14:00.001-08:002016-12-29T00:16:17.484-08:00Илон Маск об Искусственном Интеллекте<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/GdGyYI1KP5I/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/GdGyYI1KP5I?feature=player_embedded" style="clear: right; float: right;" width="100%"></iframe>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-4279335777772748602016-12-28T22:50:00.000-08:002016-12-29T00:15:00.438-08:005 лет независимости28 декабря 2016 года стукнуло 5 лет как вышел наш первый релиз <a href="https://open-real-estate.info/">CMS Open Real Estate</a>. С тех пор много чего было интересного и не очень. Трудно взбираться в гору, особенно в начале пути. Но мы смогли добиться относительной стабильности. Недавно я поймал себя на мысли, что фраза из сказки про Алису -<br />
<br />
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!<br />
<br />
очень точно передает нашу жизнь. И если прекратить бежать, то можно упасть. Поэтому нужно бежать всегда. Что я и делаю ) Но смотря на результаты, хотелось бы бежать быстрее. Все таки я бегу не так быстро.<br />
<br />
О становлении нашей компании с картинками можно почитать <a href="https://spark.ru/startup/open-real-estate/blog/19237/kak-mi-sozdavali-veb-studiyu-s-nulevim-byudzhetom-istoriya-i-itogi-5-let-raboti">здесь</a>.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-6717366513235431322016-08-25T08:29:00.001-07:002016-08-25T08:31:07.123-07:00Получаем координаты районов с помощью API OSMИтак, всё до безобразия просто, делаем запрос:<br />
<a href="http://nominatim.openstreetmap.org/search?format=json&q=%D0%9A%D1%80%D0%BE%D0%BD%D1%88%D1%82%D0%B0%D0%B4%D1%82%D1%81%D0%BA%D0%B8%D0%B9%20%D1%80%D0%B0%D0%B9%D0%BE%D0%BD,%20%D0%A1%D0%B0%D0%BD%D0%BA%D1%82-%D0%9F%D0%B5%D1%82%D0%B5%D1%80%D0%B1%D1%83%D1%80%D0%B3&polygon_geojson=1"><code>http://nominatim.openstreetmap.org/search?format=json&q=%D0%9A%D1%80%D0%BE%D0%BD%D1%88%D1%82%D0%B0%D0%B4%D1%82%D1%81%D0%BA%D0%B8%D0%B9%20%D1%80%D0%B0%D0%B9%D0%BE%D0%BD,%20%D0%A1%D0%B0%D0%BD%D0%BA%D1%82-%D0%9F%D0%B5%D1%82%D0%B5%D1%80%D0%B1%D1%83%D1%80%D0%B3&polygon_geojson=1</code></a><br />
Всё Получаем в ответ geojson (массив с географическими координатами) и делаем с ним что хотим.<br />
Например,
я решил обработать его в несколько ином виде, чтобы скармливать
Яндекс.Картам. Для этого я накидал простеньку функцию на PHP:<br />
<blockquote class="tr_bq">
<div class="container">
<div class="line number1 index0 alt2">
<code class="php keyword">function</code> <code class="php plain">areaCoordsParser(</code><code class="php variable">$search</code><code class="php plain">)</code></div>
<div class="line number2 index1 alt1">
<code class="php plain">{</code></div>
<div class="line number3 index2 alt2">
<code class="php spaces"> </code><code class="php variable">$query</code> <code class="php plain">= http_build_query([</code></div>
<div class="line number4 index3 alt1">
<code class="php spaces"> </code><code class="php string">'format'</code> <code class="php plain">=> </code><code class="php string">'json'</code><code class="php plain">,</code></div>
<div class="line number5 index4 alt2">
<code class="php spaces"> </code><code class="php string">'q'</code> <code class="php plain">=> </code><code class="php variable">$search</code><code class="php plain">,</code></div>
<div class="line number6 index5 alt1">
<code class="php spaces"> </code><code class="php string">'polygon_geojson'</code> <code class="php plain">=> 1,</code></div>
<div class="line number7 index6 alt2">
<code class="php spaces"> </code><code class="php plain">]);</code></div>
<div class="line number8 index7 alt1">
<code class="php spaces"> </code><code class="php variable">$url</code> <code class="php plain">= </code><code class="php string">"http://nominatim.openstreetmap.org/search?$query"</code><code class="php plain">;</code></div>
<div class="line number9 index8 alt2">
<code class="php spaces"> </code><code class="php variable">$response</code> <code class="php plain">= json_decode(</code><code class="php functions">file_get_contents</code><code class="php plain">(</code><code class="php variable">$url</code><code class="php plain">), true);</code></div>
<div class="line number10 index9 alt1">
<code class="php spaces"> </code><code class="php variable">$result</code> <code class="php plain">= [];</code></div>
<div class="line number11 index10 alt2">
</div>
<div class="line number12 index11 alt1">
<code class="php spaces"> </code><code class="php keyword">if</code> <code class="php plain">(</code><code class="php variable">$response</code><code class="php plain">[0][</code><code class="php string">'geojson'</code><code class="php plain">][</code><code class="php string">'type'</code><code class="php plain">] === </code><code class="php string">'MultiPolygon'</code><code class="php plain">) {</code></div>
<div class="line number13 index12 alt2">
<code class="php spaces"> </code><code class="php variable">$coords</code> <code class="php plain">= </code><code class="php variable">$response</code><code class="php plain">[0][</code><code class="php string">'geojson'</code><code class="php plain">][</code><code class="php string">'coordinates'</code><code class="php plain">];</code></div>
<div class="line number14 index13 alt1">
<code class="php spaces"> </code><code class="php keyword">foreach</code> <code class="php plain">(</code><code class="php variable">$coords</code> <code class="php keyword">as</code> <code class="php variable">$coord</code><code class="php plain">) {</code></div>
<div class="line number15 index14 alt2">
<code class="php spaces"> </code><code class="php variable">$temp</code> <code class="php plain">= [];</code></div>
<div class="line number16 index15 alt1">
<code class="php spaces"> </code><code class="php keyword">foreach</code> <code class="php plain">(</code><code class="php variable">$coord</code><code class="php plain">[0] </code><code class="php keyword">as</code> <code class="php variable">$item</code><code class="php plain">) {</code></div>
<div class="line number17 index16 alt2">
<code class="php spaces"> </code><code class="php variable">$temp</code><code class="php plain">[] = </code><code class="php functions">array_reverse</code><code class="php plain">(</code><code class="php variable">$item</code><code class="php plain">);</code></div>
<div class="line number18 index17 alt1">
<code class="php spaces"> </code><code class="php plain">}</code></div>
<div class="line number19 index18 alt2">
<code class="php spaces"> </code><code class="php variable">$result</code><code class="php plain">[] = </code><code class="php variable">$temp</code><code class="php plain">;</code></div>
<div class="line number20 index19 alt1">
<code class="php spaces"> </code><code class="php plain">}</code></div>
<div class="line number21 index20 alt2">
<code class="php spaces"> </code><code class="php plain">} </code><code class="php keyword">elseif</code> <code class="php plain">(</code><code class="php variable">$response</code><code class="php plain">[0][</code><code class="php string">'geojson'</code><code class="php plain">][</code><code class="php string">'type'</code><code class="php plain">] === </code><code class="php string">'Polygon'</code><code class="php plain">) {</code></div>
<div class="line number22 index21 alt1">
<code class="php spaces"> </code><code class="php variable">$coords</code> <code class="php plain">= </code><code class="php variable">$response</code><code class="php plain">[0][</code><code class="php string">'geojson'</code><code class="php plain">][</code><code class="php string">'coordinates'</code><code class="php plain">][0];</code></div>
<div class="line number23 index22 alt2">
<code class="php spaces"> </code><code class="php keyword">foreach</code> <code class="php plain">(</code><code class="php variable">$coords</code> <code class="php keyword">as</code> <code class="php variable">$coord</code><code class="php plain">) {</code></div>
<div class="line number24 index23 alt1">
<code class="php spaces"> </code><code class="php variable">$result</code><code class="php plain">[] = </code><code class="php functions">array_reverse</code><code class="php plain">(</code><code class="php variable">$coord</code><code class="php plain">);</code></div>
<div class="line number25 index24 alt2">
<code class="php spaces"> </code><code class="php plain">}</code></div>
<div class="line number26 index25 alt1">
<code class="php spaces"> </code><code class="php plain">}</code></div>
<div class="line number27 index26 alt2">
</div>
<div class="line number28 index27 alt1">
<code class="php spaces"> </code><code class="php keyword">return</code> <code class="php variable">$result</code><code class="php plain">;</code></div>
<div class="line number29 index28 alt2">
<code class="php plain">}</code></div>
<div class="line number30 index29 alt1">
</div>
<div class="line number31 index30 alt2">
<code class="php functions">echo</code> <code class="php plain">json_encode(areaCoordsParser(</code><code class="php string">'Адмиралтейский район, Санкт-Петербург'</code><code class="php plain">));</code></div>
</div>
</blockquote>
Источник - <a href="http://zabolotskikh.com/tips/kak-poluchit-koordinaty-rayonov/">http://zabolotskikh.com/tips/kak-poluchit-koordinaty-rayonov/</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-80284532825375570242013-02-20T21:57:00.001-08:002013-02-20T21:57:13.845-08:00Блоги о PHP<dl>
<dt><a href="http://www.zagirov.name/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACs0lEQVQ4jY3SQVLacBTH8RyhYFAgKCQkJQkJ/0BiUwydhICEGJQBRdSdXbj1Ei6s7tx5Aj2BW72C7QnUcbrVeZP1r4t27Ljz7T9vvm/mcYNB9BxFEUVRRMPhkIZxTEmS0GhzRJubWzQej2kymdB0OqWdnR2azWY0n+/S3t4eHRwcPHO9Xg+9fg9hGMK2bahqDaqqQtd16LqOer0OwzBgmiYYa4AxC37gYz6fY39/H5zv++QHPmzbxvn5OT4yR0dHGA4j7M52ifM8j7yOB8uycHZ29uEFnW/fsL29TZz71SX3qwvXdaHpGkRJhCRJqFarkGUZjuPg8fHxDT89PcHzPHieh8lkQlzLbpHt2HAcB86qg1arBWYxMMagqipubm7e8OvrK2azGXRdRxh2MZlMiWs0GsQsBta00Gw1YTs2VldXoWkaTn+cvks/Pj6Goij44rqI4/hvga7rVDfqMEwDZsMEsxg+1z4jSZJ3+PLyEqIogjGGMAyRJAnG4zFxNbVGNVWFpqnQ6hpkRUG73cbLy8sb/vnrJyqVCmq1Gta8NQwGA2xsbGBza4u4qlwlWa5CURTIioyiUMT9/f0bfnh4QKPRQEWswLZt+IGP9fV1DOMYo9GIuJXyClXECkRJRFEo4uLi4l16HMcolUqoG3W019oIggC9fg/RMEKSJMQJJYGWV5ZRFIo4/H74Dp+cnEAQBCyvLKNcLkOSRFTlKprNJoIgQBzHxOULeSoKRWQXsri7u/vQI11fX8OyLAwGA+Jyizlayi8hk83g9vb2Qwuurq6g6zq63S5xfI5HbjEHPscjk8ngU+YTsgtZ8DyPxaVF5Av5/2dUypAkCZIkwTAMhGEXXHYh+8znePpXQvlCngqFQiqUhLRcLqeiJKWyIqeapqWmaaZW00ptx047nQ71+/3ffwCPRjc8uZsQpQAAAABJRU5ErkJggg==">Статьи</a>
</dt>
<dt><a href="http://alt-f4.ru/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAP0lEQVQ4jWNgGOzgPwFMlAHkyNHbgFUMDP+x4Q4sGKcB2KxA04DOp5MBWLyAGY24DEAHONUNDgOIxcRYRF8AAPxVVHkBZ+fvAAAAAElFTkSuQmCC">Alt-F4 | Статьи, истории и блоги web-разработчиков</a>
</dt>
<dt><a href="http://www.google.com/profiles/CTAPbIuMABP" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADRUlEQVQ4jSXT60/VdQDH8c/vd7AlI4EHtjW0WCs1i7U2i8u54GWxYDVtpkabumX5JLs86oLYEgRDQjAIBbsYayTmCjDQMwsrtcgxUBdWkNyyJDkCB9jRw+/8vu8e8OD9D7y2tyTJiUFX/wipWxuJe/pzSo9fwiVGNDzB2ewsei0xa9u4Eq5sIpYYl5AkxRwwwLriU2hTEHtbFwte/I6//p0CEyPyWy/XE+JxJYzlwbVExBIhxTFkCwE4jsMDO9rRtk60vQfl/0jxN5fBgInBUE4OUVnEPCJqWUzKw5glBiVkXCAG3sIO7M0/Y2/vxH7hHJv2dwMOAFfXr2NGcWAJVx6mLfGPRJ/tQeACLkVNl9H6IHEvXcB+/nvyqzpxMXAbfnloGT/dcwctS5JpT02mK2kew7botYT6h29igNFwhGU72tBzp1mwOUiw5xoGqGs5zOI3UtFH6Xhq/ajay/yyJ8h6OY19DyeipVs+43jHFXANE1NRjpwZoG/kJi6GklN1qOgRPPVePIeyUG06qs3EOpCFqrOx9q5GCzceJWntx6x+vZE9DR1zajic6fsV+6370OHHUV06qk/HqvFh1fhQZQZWuR9rbwAtzW9g0YYvuDPvU5KfOsTgaBhjDMOhayypfxbVpGEfzMQ+6EU1GdgferEq/djlflSWge7P3U/Glk/Y+G4rr1X9QE/fOC4Gg8vY1Bg5R1/BqkhDtT5U7Z2r0o/2+dEeP2o8fZGxcRcDzE72Mnq1mYGeWm5N3wBgNuaQ2/gqVsVyVJ2BqrzY5ZnofR8q8SFcmP7vIt3NGQw2x/N3mxj52uZK03LCoT/BxPh9dIi7SrNRVSaeD3zYZX5UEkC7A+i2M0NXYzoT3wpz3sY5G0+kYz43jon+5jyMMZgYPHhgAypbgSq8qNTPvN1rsHYF0FRogD8aUrgVTCIcTGCqLZHJ1kRmTqRw/atHITpNxDEsLslDpZnYJatQqQ/7vZVopx85McPgya2EvkxgsuVuwq0LmTmRQvjYvYyfK8QATRdO4nnzMaxiL56ibLQrgAoC6J01c0c6MyHGzhcy0b6WcMuTTLQ/Q6S7mqgT4dLwAIvezkUFK7ALs1HhSrTThwpWIUn/A1g/hnpCRmiJAAAAAElFTkSuQmCC">Oleg Smirnoff - Профиль Google</a>
</dt>
<dt><a href="http://saintist.ru/2009/04/30/phpquery-shporgalka/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAJ0lEQVQ4jWOYe0HgPyWYAZlDLBhJBlAciFSPhZFowMDHAv0NIAcDAK92DC5SP1GSAAAAAElFTkSuQmCC">phpQuery шпоргалка | Блог saintista</a>
</dt>
<dt><a href="http://publitec.us/?p=395">Ускоряем JetBrains PhpStorm в “тяжелых” проектах</a>
</dt>
<dt><a href="http://jeck.ru/">Jeck labs</a>
</dt>
<dt><a href="http://teimos.ru/" icon="data:image/x-icon;base64,AAABAAEAEBACAAAAAACwAAAAFgAAACgAAAAQAAAAIAAAAAEAAQAAAAAAQAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAMB8NAAAAAAAAAAAAAOAAAADwAAAAOAAAP5wAAD+MAAAADAAAAAwAAD+MAAA/nAAAADgAAADwAAAA4AAAAAAAAAAAAAD//wAA//8AAP8fAAD/DwAA/8cAAMBjAADAcwAA//MAAP/zAADAcwAAwGMAAP/HAAD/DwAA/x8AAP//AAD//wAA">Блог Teimos'а</a>
</dt>
<dt><a href="http://dev100.blogspot.com/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAiUlEQVQ4jWNggIJ/aUz/ScEMyIBUzSiGkKsZbgiG4L6+//++vfv/798/BD637v+/IiEiDNjXh6oRGd/aR4QByDbPi4NgZLEmIwIGwBSuykOIzYtDiG9qwjAEuwGEMO0NQPYCDK/KI8IAbIEIwzDxb+/IjEYY3tdHRkKC2YymGbsB9MwPFOVImD4AmSK780dhlOYAAAAASUVORK5CYII=">W3 Kirby :)</a>
</dt>
<dt><a href="http://www.rulexec.name/2010_07_01_archive.html" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAiUlEQVQ4jWNggIJ/aUz/ScEMyIBUzSiGkKsZbgiG4L6+//++vfv/798/BD637v+/IiEiDNjXh6oRGd/aR4QByDbPi4NgZLEmIwIGwBSuykOIzYtDiG9qwjAEuwGEMO0NQPYCDK/KI8IAbIEIwzDxb+/IjEYY3tdHRkKC2YymGbsB9MwPFOVImD4AmSK780dhlOYAAAAASUVORK5CYII=">записки Rulexec: Июль 2010</a>
</dt>
<dt><a href="http://ekaragodin.blogspot.ru/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAiUlEQVQ4jWNggIJ/aUz/ScEMyIBUzSiGkKsZbgiG4L6+//++vfv/798/BD637v+/IiEiDNjXh6oRGd/aR4QByDbPi4NgZLEmIwIGwBSuykOIzYtDiG9qwjAEuwGEMO0NQPYCDK/KI8IAbIEIwzDxb+/IjEYY3tdHRkKC2YymGbsB9MwPFOVImD4AmSK780dhlOYAAAAASUVORK5CYII=">Блог программиста</a>
</dt>
<dt><a href="http://parsing-and-i.blogspot.com/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAiUlEQVQ4jWNggIJ/aUz/ScEMyIBUzSiGkKsZbgiG4L6+//++vfv/798/BD637v+/IiEiDNjXh6oRGd/aR4QByDbPi4NgZLEmIwIGwBSuykOIzYtDiG9qwjAEuwGEMO0NQPYCDK/KI8IAbIEIwzDxb+/IjEYY3tdHRkKC2YymGbsB9MwPFOVImD4AmSK780dhlOYAAAAASUVORK5CYII=">Парсинг от А до Я</a>
</dt>
<dt><a href="http://gautama-it.blogspot.com/2010/03/cms.html" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAiUlEQVQ4jWNggIJ/aUz/ScEMyIBUzSiGkKsZbgiG4L6+//++vfv/798/BD637v+/IiEiDNjXh6oRGd/aR4QByDbPi4NgZLEmIwIGwBSuykOIzYtDiG9qwjAEuwGEMO0NQPYCDK/KI8IAbIEIwzDxb+/IjEYY3tdHRkKC2YymGbsB9MwPFOVImD4AmSK780dhlOYAAAAASUVORK5CYII=">Gautama It: О стандартизации различных CMS.</a>
</dt>
<dt><a href="http://bolknote.ru/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADf0lEQVQ4jSXMW09bBQDA8fMRjInve9qDiXswzsREHhaMZmqCCZmymCFMcEOGMMiA2lJgUEpbWlp6v7fnAD29HMrWFjbcCCS2hIwB00AyjFMGjkFDAB0XL/Pvg78P8BNSShglHWUk7iMxFiWRCBOPR8hlUtzJKKSTEhPZFOn0KFHRhz/kxhNwY/c5cHjsCLIcZFQOoKQlUmMiuVwCJR6mu72ZusqLfPphKdWflWHRdZIcjRAIuPEHvbh8TuxuK0I2I5NMRkinh8ll49gHdagaaykvLeH82TOcP3uGc2+cpry0hI7mBsbiEoGAm7DoZ8g1iBCT/CQSYW7fGiWdDNOnaWZxOsvinXE6LlXQU1tJx6UKEmY9LVUX6W5rZCw1gt0xQFT0ISixCOmkxK2kiBxxErX381PhHvOKxPxIgPmol/mwhym7GVGn5cvyj5CCDqKiD5fHgrCxtoIc9uG29CO5LczlEqxOjbMxk2XObyVvN7DktbLgszExZKDzSiVOUzeyHESSPAgcvWA5P4vfaiJo1vFgIsXjSYXHishazM+yy8iK08TPkpcZhwFDfRWufg2ZtPR/cFLc4a+9IhwdkM/EKaREluIhIk21hGoqmNOreaD7FrH6AnLb1zhaanDr2knFvIhRB8Lhb1ucFHf4Z3ebR/ez5OUQy8MeQnWfE6i6wKrTwGT9ZWwflCBfqyZ0ow7jjSskh534fWaE46fPOVjfgOND1gr3KcQ8/DoeZC1sZdk1wHZMZEHdxqNOFSsWA7GmOiK97UxnY0zdTSC83Cryd3GXk+1nvCyus5gWWR0eYqqziQWbiSWLkYKqlZnr19gIeBG/+YqJoJXpbIyY7EE42VjnxdYmv2895d+9bfZXF5m19SFereRet5pcewux2kqUhlqkhhoUvQajugGV6iqarkYE9nfY2XzC8eE+Rwe7rM0XyIdcKOpmFNV1fgjYeeg0Ear/gttGLYGeVgLOPgYGtejNHQg7m084/vOQvcM/WH/2nOFQmKXsODNeGz8mgtwd0PKdpYtpt4ERgxq3UY3JqEZv7mDA1oswZPfgG0mQX/kFk0/m3XNlSE4/DzMZ8nKI70UXs34LGZsOT5+KQaMak7mTXoOGXoMW4Z33LnPqzTJeOf0+r73+Ca+eKuXttz7mrjLFZFzBfVNLwtiLo7WRoV4VNnMPemMX2h4VN3Ua/gN0ttjycDB2YAAAAABJRU5ErkJggg==">Мощь SVG и media queries | Евгений Степанищев | последние 15</a>
</dt>
<dt><a href="http://anton.shevchuk.name/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA5ElEQVQ4jbWQrU4DURCFP4PA1SEQWESbmopiAcFDkOC6rgmWsntvUl3Jm5DwBOwroJDQJ2jSqlPRu9vZuz8BNoyaOTnnzMyB/yp5pvLkfQwkj8ycB6zZNN7YMkue6Y82/uXkfj83GL4WV8kjOV6UMpZHeuKsS3hZER4NNma+axY73iqijAdjrM6c5PgywpvoKnvNtcUPTUZSEhZcdIgV4zHp3hAG4fcPeW5Dv9aME5PLCjk+A/Bt3nkP2DOAUka1UDOSgrwL4FyeYUlIuWp5ZVsNb8F5zf2R08ak20qOZRBPfiUE9nSK8Ku3aH6eAAAAAElFTkSuQmCC">Антон Шевчук: блог web-разработчика</a>
</dt>
<dd>Всё о web-разработке и продвижении сайтов
</dd>
<dt><a href="http://www.osipov.org.ru/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAeUlEQVQ4jbVSQQrAMAjLz3yaT/Np22WF1KZaChMEIWmMVuCnCABPygBgpwL5MedWxAD4VzvVyo0UGUQvMB5n6T5AJcC4dOEE7CK7mBqxQLXpI4HKBfNKAbWH7GLitEsSvAVvv4qcKky6CEojTnmN1RkfhYlxusXexwtjcF4Jxp3FCgAAAABJRU5ErkJggg==">Владимир Осипов</a>
</dt>
<dd>Владимир Осипов - личный блог
</dd>
<dt><a href="http://butjok.blog.ru/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABQklEQVQ4jY2TsUvDQBTG43Xs4tw/wMnVSXARRMHNwUEsZMrgYpeCBZGKEbspiEVc6qBgFVpBxcGqpTjVSaEghQqdXIpIoYvDz+ElJmcu1Acfl5f3fb/LQc6yvGJY9XvwfvvbWuEaGgb4bMPppPbq/2GAeg4KCejWdUhsoH0NtSyczcNuCvJKANWlIYBmUQKFRBAKr24SvgcxgKoDWRWvvLe+3RsArxXIeIaaaz7WwZR4HnYMgOKMDDMKDueg7ETljsm87BgAaylYUaLQJ2p1nJb53qwBsDEOtgoMl5twsw2VHLgTIn+Dkm0AHKUFYCu429d3dpLBzFYCjwC6L3KMRRXIVua+82wA+JCnc1gYCUJ/n0urWiT6I/V7sD4dgHwtj8LFVsSu34fBl4RbDek/OgJqNWRmCms3snkFjycRo6n83A8DfUEHXsGOTAAAAABJRU5ErkJggg==">Блог.ру - butjok - Бутёк здесь!</a>
</dt>
<dt><a href="http://www.simplecoding.org/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACFElEQVQ4jaWT309SYRyHz99TN/0BXXSRtWmt1ZptXtaaXdQaW7O11WrYzFYyE1lZuMQYDRIEjnD4IYJMpmlYnSB/m1bqSSqGQDbi8HTR1kSErfVcv9/n/byfd19B+F9KpRI7+bm9SjYjk828I7uV4FfhC7UQBEEQAFaWw0iuw/jEBvxiA36xHv/QcSRXHcPSaVKp+dqCoOckY+ELZDIb5PNpcrnv5PNpUpszeAYPMha5zK6w5QL/UD0vY9dQ1cpD62sJVpZDtRMszNlxWvfjcx9lNHSOWKSZ8Wgz8YkW3ss9pNN7d/FXsJXNsfZ5mqRsJD6pZTSkwWo9i6m/iefP9iGJTQyIw9hcXpIzs+UCVc0RGDqFspEAIJcHg8nLDZ0FvSnMwKAOp+0A+t6nXLndxdU7XbxNJHcmKOJ1HmLE18jqhyBTkw46e7R4pV6SspOAp5GQ7wy5bIalxSU02g6emG3lT1AUmWjoPH6xHtFxBJe9jqDnGCHfCWKjF/maWgSgpBYZcEt4g+FyAUCpBIVCESko0abvZmEhQaFQ3PP7KkrciScQQdPaycdP6xUDqlpkYirOGzlRXTA2PommtYNX06+B8uu/pTZpaevE0GepLlAUhVu6h1y/b8D8woXFIWKxu7HYRR4YzVy6eY+RaKy6AGB2bp4+q4OOR320dxu5a+ilvduI7nE/0nCY7R/5P4Ld2/iv/Aa8rR9NYpJsowAAAABJRU5ErkJggg==">Блог о программировании</a>
</dt>
<dt><a href="http://jacksoft.biz/2009/01/simpletds-13-jacksoftxeonix-mod-mysql/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACO0lEQVQ4ja3SP2gTcRQH8BdFRa04tGAoiEJxEhEJuMQhkwgO6uBaIjpItSBiB0EXB61Lh5hKS6W01eTCxfaanIlyuaRN0ktyyS/J3eVySWrzv43SpHFQB7X4czHhMrRm8MF3+cH78N7jBw4m0e+KRrW7JZIqHKNRro8kyR4A2APqmmcCTz28ZPKLuZmwUiRa4eQ84Y3LBCfniZBctKyk8i99ifR9DxIusJlML8ZYAwAAj0yTA+OWeSObUBal9SZuhVOK2Lkcdoezlff8xw259Z4sbn4JZyvj1FL4ZMckobXatWS53gacgRh+aDb36vX6I6SLvRQvfUJtpNrYZpDyhCTJ/W0gUty4kizXf6sB0oOOAgCQJNkTkguP1RMyvBSbE8XDXQEul/eENyFzamCKoGzXx8YO7ggwMRlTFHV+1r4wGs/XULy0+Utab+JkuY7Nr23szeHhcwCg2REQq1tYrDa+JkuNn2J1q/3G8ILwauaNvqP5HyscunX3nkmoNr6rVwhIq9N//0VXR9wbVAqDQqWB1YjF5TV2BQAAsEi5GslVOgDC7ZvsAAQV8C6I2oDJZDqwJOXuxAuf2818vrb97MXEbaDc3IDVau3zi2sP1CNySgkHkHLZi4SLy3H5OVqrJVqHDMqFb3P0h1mDwaAFOxMcZfiUy4PSmaCc/6EOi9ICi9ICw6eaLEo36RWUnX5L26bsC4M3hoaOA4AGCIejn+b5s7tl0S+dcfqipycs9CnjyIhWp9Ptg/9VfwB1al3UmLGypQAAAABJRU5ErkJggg==">SimpleTDS 1.3 - JackSoft&Xeonix MOD (MySQL) | JackSoft и SEO</a>
</dt>
<dt><a href="http://zhilinsky.ru/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACjUlEQVQ4jYWSUUhTURzGj0UQxWCF3M0N9iLhIvGhmDfwJZMuGiFqzB58GXNhIG4KOmwa2Jt7irTHYL2IMIS77Wze6X24LBFxXtnQq3ARRJwMHe6q21NQfL20NmbaH35v5/ud8/05hPyZQqFQWywWUSwWUSgUcHFxgfPzc5ydnUHTNOTzeWSzWRweHmJ/fx+qqkJRFJBKQWWwOpzL5XB0dISDgwPs7e1hd3cX6XS6LMhms7Wl8MnJSf3p6am5RCaTMWcyGbOqqmZVVc2Koti2trawublZFhwfH9/VNM2vaZpfluVbhBCCj6NBTA4J8A4IGHEKGOwTMND7TpZlSyqVwvr6elnwr4FvMI/Rt0BfO/DsEdDEAPV3ZkRRtCwvL0MQhP8IXj3N44EOMJEyRjIjiqIlHo+DUgoSCARuh8NhXSV+v1/n9Xp1X+32+4GuLj1M5HGlgFJqEQQBkUgEJB6Pzy4uLoJSCj7EI/AtgMkPk/BN+OCb8GH8/fh3MKSpWhCLxRAOh0EWFhbYYDDomJ+fd8zNzTnGxsccbrfb6xn2/BgeGYbH45kGQ+pRRxKoIwmYiJtSaolGowiFQpd30N3dzTidzu1+Vz9cLtcXQkhN9RlKqYVSelnAcRzT87pn295rh/2NfZYQUrOysnIvmUwaJUkySpJkjMVixmg0+iQSiYDn+bKAZVlD24s2heM4cO3cTOnmdDpNZVnG2toaEokERFFEqf9fQWNjo8Fms+00s81gWfZz5bNTqRTd2NjA6uoqJEnC0tISSv15ngfp7Ow0tD5vVaxWKxoeNnyq7jw1NXUjGAzevArS8bJjx2azwWQy5RiG8RsMhukqhq79bS0tLb+sVutPvV5/Fcnr8r8BPdba8OzjsJcAAAAASUVORK5CYII=">Блог интернет-разработчика</a>
</dt>
<dt><a href="http://programmerz.ru/post/execute_time.html">Время выполнения скрипта <> PHP <> Programmerz.Ru</a>
</dt>
<dt><a href="http://dumpz.org/13093/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABmUlEQVQ4jaWTzUoCURiGZ1PdTlTiYkiJMqlbGI3BIRpNHSpDSJcWlFPdgripgQxaCoLkpkV4A4Ubf8gM1E3TDARPCzPMpMQOfLvzPnDO9z6CMHSAOSBtm/Zdu9V9are6T7Zp3wFpYG74/mBwCtBrlYaZ1Q2SG0eE1+OE1+MkN47I6ga1SsMEdGBqODwNXBdyJVRPDMmhIothFJeG4tKQxTCSQ0X1xCjkSgDXwPQg4KyQK+F3hggsRtlc2hk5gcUofmeoD0n3wwvVx/r71vLer+FBiOqJUas0LGBWAM4yJ5dIDvXPcH8kh0rm5ALgXLBerfKBlEIWI2MDZDHCgZTCerXKQvu58xLy7qO4tbEBilsj5N2n/dx5mRgQXP0EmP99AnCeOb6Y/BOBhepD/X1reXeyNX4V6eoWnzP4Z5F8ziCFq1sAfbjKN3mjiLrSr3IExa2huDVkMdKr8kqMvFEEuAFmRvlwWq3UzaxukPAfsr0WZ3stTsJ/SFY3qPZkOv3mwQgr5wH9zbTvO61us9PqNt9M+/7Twh86fwBpLDYKpN1HdAAAAABJRU5ErkJggg==">Dumpz.org</a>
</dt>
<dt><a href="http://deer.org.ua/tags/javascript/framework/minijquery/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACfklEQVQ4jY2TXUiTYRTHjxcRXdRF7KILCZMSESMnq1ymr8vptnw3N3VzS6dulDg1W1nTlvqo7QNXStP2tjQRvLAP+tJKZZBvIJZ4KWEhfkV3EXgZ0cW/Gx3IHPiHc3MO/J7zP+c8ZLNaONqjzuepxJikx20CEZHRqIgL0hisnLWyTNSps5hJl8F2FP13degOCNzjfju2c+aaWuaos4hns7OjL95xquFlVtRf0WIH4IG/VJx4eQ0/Vz34NN2PudkBzEw50ddzGb5OHQZDVzEUrMDHySZMvXGKiUckOzst0Bq5oL+RPR2pYsGHrXC3VSDy2gmeL2TBgBm1dSXMqI1vj4iI0lOTmJ2XMcctH0dE5GrUQKM4JZbp5aKOV7KuWiXz2rPYpdyjzGSuZDdcbpaSlsFOSqUcVRlU8FVn4lFDFlwmKWz6HLzvLEC4iUPEo8JS2ID14VJsDJcg8mwAPq8HIUHA2to66ptugixWG9damYOWchnqzIWIeDUQGuRYDBVj5UlZNJYHS3H44H4QEYgICQkJOHYiDTF2RlvViHhUGO/Ix7SnCKtbgI0RI2qUx6OAQwf2ISkpmcUADPJE7rk7H19Dxcg7d4YFm/X4MWKMdjLfx2O+l8eX+2oYC07vPtxcWRpbErQY95uYRCLhAo4L+BY24HtYj8UBHp97izDUvMtVbut2YJR71X0Rg13VUY+pKcksMz2VtXV4mc1xK/5apVIpJ0tNZAsferAyG4LNqtnzXyEiIrtOjrEWBVYWJrC5PIP+e+2xk46ncl4hjrkUsCjTsfn7F/79/YPOloa9ARw2CzfXo4K53Cy+aC/E5Lu3EAQBQ9fzYDaVxK5rS/8Bj1M8N6P8R78AAAAASUVORK5CYII=">Deerua about Coding -> Заметки с тегом «minijQuery» @ deer.org.ua</a>
</dt>
<dt><a href="http://web-blog.org.ua/articles/massoviy-google-pr-checker-na-php" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjVJREFUeNqMks9LVFEUx7/3vh/jYOPM0JsfiIyhZekiKqxFZLYSWhUURIs2Qdto6z8QuAhalLiO2rZw10IQWoSVKAZJpE21sHR05jXvOb335t17uk9mwLGedOC7uHDP537v+R5GRGjXk9UAa45E1SO4IUFjDN9dwnmLY2VbpIWg4U1Hjq/d6Zlq9+g4UBoDJNCz4+NaQ9LYryb1z/8QWdunQs2TpfGCNr3/fgfAVN0VD2OLNs24AiONXQEog4apqDpDX1r7MNFvTMYCyo4cfGvLl06TrHpV4EiKI53RFIOBS1oZ6caNbgP1WMCSLe+7ElatEiKXN2Dl9ejCVprjRZbRQ2rKbUGdX+4AOGBXfGW7K8lQ6jPmiyabyel4HYZyw/0NBIS/qgOQMlk5EHR6IKcvnk3zq25AngoC0av/6N0rvv8wlGLPzQSHCfY+YzIvYwIZYy8VRGlH4ocBRrPa7Km8vlRzxUVdSGSVPx4FoNJJqCS6lBw6BKBzCiZ6tbuNBD/58VtwneoCoS1QCCRK6hMDClB1KX4GCzYpCJZvHjfvzX0OHuch3hDHpowbwEFANGVf7c6lLHvmlPTc3Lr/9PYx49bRJBOh/I8hspY8NfbRLH80VDTeLWyJBxtqOb7UJcotxQLaFTmOnJyxtCmPM3+1Ki6fSDMMqo2KFAuQLbGWlcj2cF6b3mmiuF6Tva++NhEpdgZFFV30+q6jlkc1J5ULk5E8Z2mzyz/DC59qsqIS7SD8EWAAVMv30820XWkAAAAASUVORK5CYII=">Блог программиста | Статьи | Другое | Массовый Google Page Rank Checker на PHP</a>
</dt>
<dt><a href="http://andruha-vorobyev.ru/spisok_dofollow_blogov" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADB0lEQVQ4jaXT60/TBxTG8d8fMZMlSwzG0Cm3MkRTFBouJioQL5vR4AqoaUDDxJVtumUUIjCWoZ0TMCBMiUCxSgleqsK41NqKXdsft8yhjJEJFloKbaEuOMF892ZZ+1pfnLefPDnnOYIgCEZBEErfcoyCIAilrjkRr8vBq2kbK9MOlmeHeO2bwDVup0fXwLBRz9JzC6sekdV5BytLY/wdmOQ/RCidd9tZmLUTcDoIvBBZnn9K3YUz7E6MY/uH4WRKJRR9nEJblYrA1CNWvIO8WQ4BfE4bfqcd/7Qd3/QQJd8cJzxsDbKojaRHxaBMS0G1Zwd5aTK0lYWsegf5xz8cBF7NiMz9buT5YD+NZ9WsD3uP6JgNREdGkCBZz/bID1DIt6BM3kau/CPMHTW88Y8EAX1dGQeSpOyRSkiPkBAfKSEpMYHa4pPUFOdjaPoOk66WXPlWsuUyTudk8jowFgSckybK8rPZFxtFtkxGQkQYX+Qd4vC2GGo+U/CHUUtz1VccSIhm3yYpJ/buwnqvOQh4Zh7jmRBR5exGEb8BxVYpWSlbUGftxHSxnJd/mnA/vU9fi4a8zDT2yuI5/klGyBI9NlxuC8/GezgiXUfFTjkFqZuoPpXDWNcVFsd78UwZGe1uwNJRT0Z8LKnSqCCw6LXjnjUz89cDFHHrOJeRjE51lK6WSno7zvGk7wqWW9VM2NsZaD9PecFhPk1NDAILbhuLC0OY+lrZn7wR5eZwGo9l0XnpW/S6crpbKxA7q7HdbKBFU8CdxlKayk4EgYB3kIBvlKlJK2XF+SRGvk9JVjq6ykKaLqjoaj6DeKsesb+ZZ9ZriPcvYtH/FJLANUDAO8KSd4yvi/KQxq1FdXAXNyu+pE1ThKFNg62/lSdWPaOPdNi7annYoQm5gvMh/gUHvrnfOPW5ktiYcEoKFbRXFaGvV2NorcJkaGTE0s6wuY1fu3+m98YPoT3o5sVkD55ZKz0GLcrMJK6qc9F+f4zOOjV3r53njvZHHv9ylWHzdQbuXcZ8u+F/4J3e+V+4qjtCTqCb5AAAAABJRU5ErkJggg==">Динамический список dofollow-блогов | Андрюха Воробьев – сила в желании - dofollow блог</a>
</dt>
<dt><a href="http://the33cows.com/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAdklEQVQ4ja2RUQ7AIAhDe3Rv3n1sLARK2cdITNSWhyAAEHtYzy8AZ9h0awiNJJnPXyCv+ZzDiAlShTU5nW9ANk37YXWqqTa+QLaRYwNI8wQodx0QYh6gmUnvPRsqpBaQ1d0rJGDq17XwJOtfUDCjoUHqkJQengvajKT3KF8REgAAAABJRU5ErkJggg==">33 коровы - RIA разработка, Flex, Action Script, AIR, Eclipse, Monkey script</a>
</dt>
<dt><a href="http://www.bagrincev.ru/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACgUlEQVQ4jYWTS09TQRiGT9z4R1y6culvcEXiDo0SNFIhGjREExObmKJYsFiKJVYEjUKQANIAcpG7hRYCpK0RkFJALS0tLeWc6ZzTc/leF0htAeO7nueZeWe+EYQjeemY9weWolAUDZ7JHTjrNmSzGaeOrjuWJlv4rriv4m8IsqwjGlWxMC/DUcPj/4Tt1fsNAAj5OAGaZiAe17C6KsM7y/DhHYPVLJ09JkjtUgF8ICAQEdpaGVZWOHw+hpEhEf1uRi5HypKDn1t4hI7wRAT/Eoe9OgX74ySKLlRh7o+gt4thqJ9Tx9tEjyAIglBv2Yu4uyXkS4gI25E9unnNni6+aC1/7RqDz8swPCjiYxdDeyvDwpxKNvPaOUEQBMFRs02fB9MIBniBSFEMxGIalpdlzHgYhgYk9HRKaGvJoLmBQ1UNPVfFUbvW21gbwvR4AtmsASKAMR2/fqoIBjimJiV86pPQ3SHhfXMGkyNZhEMpFFzm5qZUdHgCwzCQTKoIrytYXMhgbFREf6+EzjYGnycLmatobprJ5OBYVGo/fEoiAmM6tiNZLH/j8M4e9Hd3SwiHNCiKikbbKOVgUZS9+d051xGPqwiFZCwtckyMixjok6BphB9bu7Ba3EYOdjknyg53NgxCJqMjEVexsaEgGOCY8TB8mWYgIrheDOPRg45UQW9FVjVNI3BuIJ3WEYupCIcVfA1m4J1lMAzCbkLE/Ttv6F5ly8NjU7geiiKZ1BCLqdjaymLtu4yAn0PTCLqm47bJicpyJyoq7KdP/AdVt17FFTlbMIlT436YSuthKrXBdLXu/IlgfspKnu3cKKnD9StWlF5+SiWXnujFxeYz/wUFQfgN6QONzSKJdsMAAAAASUVORK5CYII=">Home page of Sb0y || Домашняя страничка Sb0я</a>
</dt>
<dt><a href="http://www.johnconde.net/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABuUlEQVQ4jZWRX0uacRTHfy/hp14df7ChFUZmVmo8+AdJBzKYzqQJG4wFMpsUKanQ6MY/d0Oftj3g49XUMgrWG8hggS/Ad+Br+XYR7Onpt8IdOFfnfD7ncA5jM0a92cB4PMas/VJomgarELAJAYfLhZ1cDr1+f3Zh5egInMiUSiT8H4JqVRKUymVZsLiygkazKRVsQpjgTPadDA+HZ7AJgZvRyFR88zYlTR+cDmTB0uoqsh/emwqhUAipTAbWRxvU6jWzILm1hRfz85hOp2Ds/urpdBrD83Ms+3zSBi21bQi+tVqwEKGtqmCMsXqtht9XV9gvlUAOhwRzIoyurw3By4UFeAN+MMZYpVLGr14PdqfznyAngnA6DVhVVXAidLo6VLUNXdcx53Y/CXMipLe3DcHrZBIWIpwO+niVSGBpbf1ZmBPh6/GxIdgIBsGJ4HC5pEs/TG8gAM/6vfygWDQEufznZ6dZiPBT08AYY/nCF3AiRONx8wvDm5tPChY9nr/NJz++gxPBardD73bMkovLS/gUBV6/Hz5FwUY4hGA0ikg8hlgigd1CAbe3f/Bx5xN29/ZQLB9iMpngDiVEGdpyMRmpAAAAAElFTkSuQmCC">John Conde .net</a>
</dt>
<dt><a href="http://blogfigaroo.ru/" icon="data:image/x-icon;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAFIAAFIAAFIAAFIAAFIAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAFIAAFIAAFIAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAAAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAAAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAAAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAAAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAAAAAFIAAAAAAAAAAAAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAFIAAFIAAAAAAFIAAFIAAFIAAAAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAAAAFIAAFIAAAAAAAAAAAAAAAAAAFIAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAFIAAFIAAFIAAFIAAFIAAFIAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAAAAAFIAAAAAAAAAAFIAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAAAAAFIAAAAAAAAAAAAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAAAAAFIAAAAAAAAAAAAAAAAAAAAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAAAAAFIAAFIAAFIAAFIAAFIAAFIAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAAAAAAAAAAAAAAAAAAAAAFIAAFIAAFIAAFIAAAAAAAAAAAAAAFIAAFIAAFIAAFIAAFIAAFIAAFIAAFIAAFIAAFIAAFIAAFIAAFIAAFIAAACAfwAAwP8AAOX/AADl/wAA5f8AAOX/AADl3wAAhF8AAKefAADAHwAA5Z8AAOXfAADl9wAA5AcAAOfDAACAAQAA">Дом Figaroo</a>
</dt>
<dt><a href="http://chikuyonok.ru/2010/07/simple-things/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAa0lEQVQ4jd3Syw3AIAgAUNwDNnMEYQb3YSLh7hrtwcRT1QPpoSXhyAs/gF9GwuIZ2ZTEOol1ZFMsngEgnYulVRK/nhKl1S2CxfOqeCKjkwXApkeATZfAmHkPkFh/DwiPEF4iRM84kcAjfTBu5BfIAddRRDAAAAAASUVORK5CYII=">От простого к сложному</a>
</dt>
<dt><a href="http://webpeppers.ru/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABRklEQVQ4jZ2RIWvDUBSF+wMmnph4oiYw0UFNZOQGE6vcPyiVpWKUiVBmRn9BqRq1T8YMnnw1hZjCrShkYpCJiCcqIiqumDgTbdKWJGuzC9dcON+959wG/lM/gFkZqEWARl0tfRF6kz7UXCG2cT1AvLHwXjuIkjifXQyYLRRc34MzcMHMNQDMsGsCrUNQEmE6VzCf4XkAJxb0MoJuudDXEqbtATYFLwk4d0G6IuibW2ghEQiJQAhoIUGDIYKmg7DbqwbwJt1tFRJKiJMO9kB1JcDfcTmA/DFMifgEIiXY2hIAM3Tb3W2pAGRWSi2kS8o9FzcLGCFhHjrAtiLEaDIteM8CDJoOorfxyQcKAHN3n1+QCXXTQeSPwIkte9gBQM/DnSDrlgv6Q3gAbBlhtw+zf5F5fIL90IVTKwHx+wzhPhw7NxeJjusXZIpKkF66+kEAAAAASUVORK5CYII=">Веб перцы - сделай свой сайт острее!</a>
</dt>
<dt><a href="http://brainlog.info/category/php-%d0%ba%d0%be%d0%b4%d0%b8%d0%bd%d0%b3/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACPklEQVQ4ja2SX0hTURzHz53NNbe7gjILFrGeequoh54CDYqkfKoeJPZiQiGF/YHMiB5ClECxsCgqsAKDUdJi9EeRZNgaekO4Td06txuyu+vaWqk37+bc7/56GJy82eilH5yXc77fz/me3/kR8r9L16kbMl1nQT3x0FDrn0Ly3I3CrO8IpdT2TzOk264Y03uzKK0HlFyw8JEHMeAA5Z0TDNkzU/jx2Fva/LW1A9MXAZMN0HXZBpsqCRBSXIdqygAlF6DkAkg23Vlhzv8c32Eo+wuYlwGlNfDslp2ZCSHgcXMMgJILIH3tqhmgnu9GzQ849whQcoFBeajZY2EAjiOgR3gGMD6tzS3Oi9sYIPvlwFtcSgB+72QiMeAAi+V3inG/w5Qin2juYYAFWj2CSwnA2QcmUdNxKwM86V5tBnzePsUAmZi3D7UXgLlxk+ib4IST9Va43mKD9KjTdFaIbZwXBMFKCCFEifV6UakFNABwerdJqEd4aD1VDkcProL+23a2n416ZthsKIqyLiPunMJMO6DWbwK0XSg3NVMNFZNkJupe+ny+MvaMyIfnh3OTGzRMNgIqtQzgv2sHjisCtm7mQI/wYFC+QCf6jpm+klJqGxu516BF3OnlCVBygTTkgIHeCtDE4ldGQ433U6mUc8VAUUpto6FX+yaDdYHFaKX+J2hO3JIaG2rpkGW5quRIE0KILMtVw8Ovq4Nv2i+FB073vB88czM42NkcDod3/fXmUiUIglVV1Yp4PG43NWxZ/QIPfciG6VsCYwAAAABJRU5ErkJggg==">Brain.log » php кодинг</a>
</dt>
<dt><a href="http://chodex.ru/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAaRJREFUeNpskkGrAVEUx+/zXkqp8REopWyMfIFZUOz4BrZKPfkCPoFmZc1m9naUBR9ATUgJxUaazVBKkXrvZ47mqXlncTr3nt+593/vOernzVarVbPZzOVyn54RsGTznVF+1G63I5EIfjqdPjwj8Dd9LKSUut/vpVJpu90OBoPFYpHP5788I2DJJikAMODnDd+e2bYdi8VUwHRdP51OAMh7SprP58h1HKdcLhuGIYThWTweZ8lBcNfrFWy5XH5QmkgkMpkMRKVS6ff7AuGz2SzeNM1Go9Hr9VzXPRwOKpVK8Q+I4d5utysyIDhVbiAlMcen02kVDodvtxsJaGqkgDQQZbKczWb48/msadpfAdKBeAkx8mzPpMCyLPzlcolGoyqZTG42G/mf3W4nqiioVquipNPp4AFEUqhYLA6HQzmYl0mA8Xo0sATd7/cEo9GoUCi8vpXWkBDprVZLarjteDxyG6n1eg0G/GxcvV73G4fnH6WAU8nyNjalua9Z4tEIq9Vqk8lkPB5L+/wPZZMUANj/wyetxQiCw6eC440Gf4qC4/0rwADW6n2ERqYcIgAAAABJRU5ErkJggg==">Chodex.ru - Linux, Php, Highload, Kohana, Android</a>
</dt>
<dt><a href="http://mabp.kiev.ua/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABpklEQVQ4jYWTv2tTURTHQ7ZsAVezODj66J414D8ghA7i/qAO0sVFElSoQ0EKQcFFQaQ6iWl1av2BJQ4BsRRssZS2Nko1jeS9vJ/n3E+Hmocvr68e+HDOvefyvffce0+BHDPGICKEcYyIYIw5dV1hckJVefBmCxHh8bpOEKOq+QIfvkXMtIWZdoQx5m+cZXv/MCvw2xEuPwwTjDGoauJvPllP5cMwTAtYTQ+r6WM1fW6/8rnU8Fhc7gIw1fCYanioCtVbu6kyCgDPPwZU7BEVe3Sy2zOXij3ivO2iqkku9xLL9SHlusvFq18BuPHIpVx3KNddrtx1kjhXoFQbUKoNWFlZBeD6fYdSbcDC082UzxUoWn2KVp9O5xMA9p0hRavP4msv5c8s4dy0w4VrBwCsfTlidq6NiDA71+Zn3+Ne6+Wpn6kAcHgUUJ33qc77qGoSTzJ+uowAQKsbJahqQqsbISKpcRzHWQER4e2eJvwZehhjWN0JebH0jrXvUSofBEFaACAIAjo/4v/S6/WyJxibqvL5YMTGLzK839g/u5n+tXEPjOvPa+djPOeMNBwHbxcAAAAASUVORK5CYII=">CTAPbIu_MABP's BLOG</a>
</dt>
<dt><a href="http://blog.gtalex.ru/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACBklEQVQ4jYWSUUgTcRzHx4rpQIjtNcNyB40tI8IkChuIwUGT7ep05LVWgiBESIIvSYgo+DDGZbgRyeIODDrYOBHh/iBxgSFWYAbBJSqY5VMP9uC08+G+PcwdHruzH/ye/r/fhx+f79/lsikicGohx+Lt+GVoMg1NphGmfI/sZi3VdvX0KBE52PXBdhJGqRdL8+xv22X55W0QkcOb53Fkhm6ikGORH75kgRilXhh7gzB0HveZ81Pm8lCqQSUih56uiwg2+jA5QqOQYzHLN0OTaRCRQ5jy41TdSSxO38D+9wQMnYcJkCaiICKHdH8IcxNXoOQZC0CTaXxZvAOvx73j9bh3qs4X0h0gIodPUgxG6TE+Kn0oZmNVAEd5tR63rbwNtRO7W0nomxy+fe50BlTqaV/LT6cUvs7EyxIP+1gQETi1mI0h/+wCZl4lTMgqYcoAnYeh82i7diZgC5gcoS0Ojl6y8LoVP+ajONh+iK3lQbio+rqIInRDEbqxryXwd+MuPhQeWADqdJcJyAw0YZZvxvup6/izfCi28rj7Kwljr78qhcr7PSaEFBPEcM9ZZAaakIoHyoCxJ61qZWhdiWJpLoliNgbpxS1zWUh3IBTwIUz5Eab8oCMNVpHBc741pwQiLfXw1pwwu7bGvXZsCkclrkjtWJHasf4u+v9/4JSCJtPYXGBtAf8Aq4e9tCkcn9wAAAAASUVORK5CYII=">GTAlex
о Заработке в сети интернет - способы, инструменты, SEO, раскрутка и
разработка сайтов, поисковая оптимизация, сателлиты, блоги, CMS движки</a>
</dt>
<dt><a href="http://itdumka.com.ua/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB0ElEQVQ4ja3TTUhUURjG8Uu0cme00kXBbIp0pQhW4Mzc0VFp6Cp0kZpBmCgbq6lxdK5TtokoSNC0bDGhBMFQVBBEFG3a9LFrEWUTJTROiPNxUa8flfPxbxEcu3WFpBbP5hzOD87D+0p2e4h/ifRfgI49RxmoURmoUemv7aBe6aa6swv14HkiWoxQaAyv7yIuV++fgLshyMdtu9ArbeiVNkbrXWy61YYUV9hx+RhLy98oFEvkCyUy2QWGhu7idPasAU0NQRLbqwVw6EA7UlxBiiuUXVdJTmcoFEum3L7zzPyFtr0BgnVegnVePC1H2HzzJ2LTOtG0GMPD9/g0NSOA1XyR4ydGrUvsPd3OSGw3XRf28fThTnHe2NjHu8mkQF6+mrQGon0KGBIYEtPvt5ju+qM3BJDTDWQ5vDHA57skgOWV7zQ3a1bA/nUBv39QAItLX3G7IxsDro09EMDnZBqHw7KDX4Fy7PYQDkcPgcAVjMUVAYyPP7Yu8UxkDUglynn+4i2pL1lW8wXxOJ2Zp7U1ag2c7FYFkHhdwWx6zjREOd3Af3hw/WWS5VM8ul/F1JutXB05R043yGTnSXxIMTHxBI/n7N9vo9MZRpbDptn/PT8AWqtvfx24ALoAAAAASUVORK5CYII=">Блог Герасимова Константина/Просмотр статей/</a>
</dt>
<dt><a href="http://clear.helldude.ru/sources/">PHP. Прелестный язык, на котором обычно пишут ногами » Исходники проектов</a>
</dt>
<dt><a href="http://blgo.ru/blog/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACuklEQVQ4jbWTv0sjeRjGnzhEDCZMjEpGz07TZBgVAleJ2CyKxVoICSiCcpjqYP2FhQvqwv4B4uGJeKUgGyGWNi6kUZtotLjDQ5QTNYVwmQkXozPzne9zleG4td0PvNUDD+/DwwO8QalUUh3HSQghUo7j/GxZ1tbd3d2BaZr5m5sbnp2dsVqtfgUA2LZtPD8/T1qW9WuxWMzncrnq/v4+19bWuLCwwFQqxf7+fsZiMTY1NbG+vp4AmM/nbwEAe3t7v+u6znA4zHA4zGg0yo2NDZ6enrKjo4MACIC6rnNmZoaKohAAd3Z2RCaTUbC9vX1QV1fHwcFBXl5e0vM8kqQQgtPT0wTAlZUVCiEohGCxWKRhGJyfn2e1Wv0Bh4eHW4FAgJubm5RS0nEcptNpTk1NsbW1lfF4nKZp1jSStCyLQ0NDdBznRxQKhY/RaJQTExMkSSklAdDn8xEAh4eH+fLyQtd1+YoQgrquUwjxHvf39xOGYTCRSNDzPEopGQgEagaaptG2bf6Xo6MjNjY20nGcSVQqFWN0dJTBYJBSSkop2dvbS5/PV7v19XW6rkvXdWnbNkOhECORCE3T/AAAWF5e/hsAn56eSJKLi4u1GH6/n5FIhPF4nG1tbezu7qZhGGxpaeHt7e0nAMDu7m4WAI+Pj5nNZplMJgmgVlkwGOTs7CwfHh7oeR5zuRyTySRPTk5+AQAUCoUPABiLxZhIJNjZ2UlVVbm0tMTr62sKIeh5HsvlMufm5mpfZbPZLwCAx8fHXlVVmU6neX5+zlKpxHK5zKurK15cXHBgYICqqtLv91PTNPb19clUKlUZGRmZBQBkMhmlq6vrn7GxMa6urvK1lZ6eHqlpmlBVVbS3t/8F4DOAdwC0bwY0Pj7+RygU8hoaGuzm5uY/FUX5DcBPABIAlLdG939a33T+3vwLdPjUrZA0MkMAAAAASUVORK5CYII=">Блог ГО: PHP, JavaScript, Memcached, Redis, Mercurial</a>
</dt>
<dt><a href="http://blog.nagaychenko.com/">За чистый и ясный код!</a>
</dt>
<dt><a href="http://n-professor.ru/klass-dlya-zagruzki-fajlov-na-server.html" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACbElEQVQ4jY3TX0hTARTH8RsSITZlmV7/bq67maZpdku9jSZzcxtohsbCMjF7yJqTkfWQQpRKkUWWqGklOMWi1h8LV84WgWhEIqT5YJQhNnUNE1tIrXT8enD3MqhkD5+Hcx6+T+cQANb4wmDVqPUWVXdZn6pSZ1bGs3vC10CFNdleYWVQYVXA8FwDvUU1vq8zKc3ngN4S69BbJCjrFcPQtwU5bUIw19Zr/x8YkNPol0nYuaw31qHrFYOluRG+SmBEWYshtRuvVMCAYhSDiupyc+xCaQ+F0h4KR3soqL0D73OlvJkCWTQXGGM6MLYLGMsA3irhepmOE48pHOkWcdStnsCPGrl0zqB0TJdkuD8Xy95MF++u/NXP9LlHGLC+PxNCbxKgyCT0EEDFBpar0wvd1QyWa2RYPC3HrC4Tc+2pWBrayXGaBSi9E40CL1ktYSuB3ydTilynaLDsx2jYGhPgGkzhfHsShZKOSOQbV+QZI6C87gk4D8cXOUsSwLIdSsJUfRwWXyRyFh5FoLAtHNk3wzhc4N3eTVsn8iVPJ3NE9i85Me5PuXGYrJPAad7Mmb8fhv0tJLKaQ1c0hULR7AmYtISf44CInD1I0aPZMceH1VT7x4aY1/MPRGB9vRuKvIaNyLjqUR+MzCby7zsYpom1oyoy4MMtYfxEO3VmqkNotRkFDntnyE/1pQ1LTB0fTB0fzEU+5P8KeLPVE/42U1TkTJdAOt5K7pGe49/bfjbQQdcGga4NgryRROoV/1VO2YtJS/ilnQ8gd9TwpNuqAg3JVbyHssvk7cQqgvT5mVjicmKduJIISb3ACya0hN8fvWteJyw5nTEAAAAASUVORK5CYII=">Записки профессора » Класс для загрузки файлов на сервер</a>
</dt>
<dt><a href="http://nicecoding.ru/">Записки о web-программировании</a>
</dt>
<dt><a href="http://zweroboy.net/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAYUlEQVQ4jbWTwQkAMQgE7Sk92ZPV7n2OEInRNcctLEhgxk8UeaMGdCprtgcik1lhGwBTJ3HboaiaC7J8EgQwLzjAnCCBa0EB5wICPgtIOBY04FLw208UqBe4oZHwIm/O+QEvLj82nU3hywAAAABJRU5ErkJggg==">Записки Зверобоя</a>
</dt>
<dt><a href="http://codestorage.ru/">Блог о веб-разработке</a>
</dt>
<dt><a href="http://jeka911.wordpress.com/" icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADQElEQVQ4jXWTT0yTdxzGfycPJl5NNDj7hjiTGc4mHLbsIMs2N4wZyYYZO6jLnBKCvh3NQqLZ5mDSYpVA4H3BzWlVOhShIHNQLShCaQtxTNrSLeWP0FmhBboChfL77DCzbLA9yXP6Ps/hm3weIdZJKarZraiaRVF1r0HV0wZVTyuq7lVUzaIU1exen/+XdqraycyS+tixy50uV3ByMDw2Hg+PjcddwcnBY5c7XZkl9bGdqnZyYzPvzCaDqndkn70W9EdiocbeJxQ1dPDu1zbe+OJ7PtXauOUO8Gt0bjT77LWgQdU7RN6ZTX/3DUbNuu+cfej3eGLhE62dN7+y/acr2/oBFvedsw8pqmYRQgiRUVyXlVlSH1tYSvmtdzyYHW4Ompsob+nD7HBjdrj5/LqLt8oaWV5ZBWBxeWUis6Q+9tKp2leEwahZC21O59KLY9/oU96ztlDW4kZKCYDpRg/7K27yeCIKwLO5Pyi0OZ2KqlmEwagHPOFpr6VjEIDHE8/JtTrIPd9KXygCQLnDQ+75Vkqb+gD48ecxPOFpr0HVngjFqKdW0muzeTU/MT6TILWa5kPdyYGLHVjuDCKlZOC3CLnWNj6q7wKg9NYAc8lUTDFqc0Ix6qm5ZCr2ge7i0sMgUkr07hEOXGjnpjuAlJLVdJpDVQ5ONT5i7PkCh2rvklheiSmqlhCKqoc84Wlvye0hjtj6Sa+tEYjEecfcTL8/zG1XP1JKzM0P+KFnkOq7Pj6ubv7HC6pWVWhzOtuGp3j/2z4847NIKTnd9JBah4vDX1aDlAyHIwQmohwsu8rVez4KbU6nwahZRUZxXdYuU8NMdH4p+FnrMBe6Q0gpic4nOXLRzuvFFcQSSeSa5IH/KYdrWonOLwZ2mRpmMorrsv7iX9WqcirsvmgilTA5hkmmVokuLPH2N3ZyTl+iZSAAUvLdo1GmYslEToXdZzBq1g0ov1p2fcQfiYfml1bpCT0jX7tHgd6J1j0CgD8SD71WfuOXDSivH9OJK133e0NTPmAWmO0NTflOXOm6/39j2iyE2CqEeFkIsXfLnuyj2/JN7TuOV05uLyhle0EpO45XTm7LN7Vv2ZN9VAix90V2qxBi85/2M201TFIPDwAAAABJRU5ErkJggg==">О PHP и о жизни…</a>
</dt>
</dl>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-76784572700837340832013-01-10T21:50:00.001-08:002013-01-10T21:50:19.296-08:00Шедеврально, я считаю!<iframe allowfullscreen="allowfullscreen" frameborder="0" height="315" src="http://www.youtube.com/embed/P99qJGrPNLs" width="560"></iframe>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-44616160261568140702012-07-05T00:50:00.000-07:002012-07-05T00:50:03.060-07:00Вывод даты словами PHP<table class="source-code" style="background-color: #fffff5; border: 1px #7f9db9 solid; font-size: 12px;">
<colgroup>
<col width="10"></col>
</colgroup>
<tbody>
<tr><td colspan="2" style="background-color: #f0f0f0;"><pre style="margin: 0px;">Код -<span style="color: #005500;"> пример #1</span></pre>
</td></tr>
<tr>
<td style="background-color: #f0f0f0; color: #495884; padding: 4px 3px 4px 3px; text-align: left; vertical-align: top;"><pre style="line-height: 15px; margin: 0px;">1
2
3
4
5
6
7</pre>
</td>
<td style="padding: 4px; vertical-align: top;"><pre style="color: #222222; line-height: 15px; margin: 0px;"><span style="color: #660000;">$date</span> = <span style="color: grey;">/* timestamp из БД */</span> ;
<span style="color: #660000;">$d</span> = time() - <span style="color: #660000;">$date</span>;
<span style="color: blue;">if</span> (<span style="color: #660000;">$d</span> < <span style="color: red;">60</span>) <span style="color: blue;">echo</span> <span style="color: #660000;">$d</span> . <span style="color: green;">' сек. назад'</span>;
<span style="color: blue;">elseif</span> (<span style="color: #660000;">$d</span> < <span style="color: red;">3600</span>) <span style="color: blue;">echo</span> round(<span style="color: #660000;">$d</span> / <span style="color: red;">60</span>) . <span style="color: green;">' мин. назад'</span>;
<span style="color: blue;">elseif</span> (<span style="color: #660000;">$d</span> < <span style="color: red;">86400</span>) <span style="color: blue;">echo</span> round(<span style="color: #660000;">$d</span> / <span style="color: red;">3600</span>) . <span style="color: green;">' ч. назад'</span>;
<span style="color: blue;">else</span> <span style="color: blue;">echo</span> round(<span style="color: #660000;">$d</span> / <span style="color: red;">86400</span>) . <span style="color: green;">' дн. назад'</span>;</pre>
</td>
</tr>
</tbody></table>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-12676817351595872582012-02-23T23:37:00.005-08:002012-02-23T23:51:43.719-08:00Вешаем Fancybox на кнопку buttonС помощью плагина <a href="http://fancyapps.com/fancybox/#docs">fancybox</a> можно делать замечательные галереи и попапы. В документации есть примеры. Но как повесить его на кнопку?
Вот так:
<table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5">
<colgroup>
<col width="10" />
</colgroup>
<tr><td colspan="2" style="background-color: #f0f0f0"><pre style="margin: 0px">Код -<span style="color: #050"> пример #1</span></pre></td></tr>
<tr>
<td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"><pre style="margin: 0px; line-height: 15px;">1<br />2<br />3<br />4<br /></pre></td>
<td style="vertical-align: top; padding: 4px;"><pre style="margin: 0px; line-height: 15px; color: #222"><span style="color: #009;"><form action=<span style="color: green">"/ACTION/FastFindObj"</span> method=<span style="color: green">"post"</span>></span>
<span style="color: #009;"><input name=<span style="color: green">"fastfind"</span> class=<span style="color: green">"fastfind"</span> value=<span style="color: green">"3463"</span> type=<span style="color: green">"text"</span>></span>
<span style="color: #009;"><input name=<span style="color: green">"weiter"</span> type=<span style="color: green">"submit"</span>></span>
<span style="color: #009;"></form></span></pre></td>
</tr>
</table>
<p>И используем:</p>
<table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5">
<colgroup>
<col width="10" />
</colgroup>
<tr><td colspan="2" style="background-color: #f0f0f0"><pre style="margin: 0px">Код -<span style="color: #050"> пример #1</span></pre></td></tr>
<tr>
<td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"><pre style="margin: 0px; line-height: 15px;">1<br />2<br />3<br />4<br /></pre></td>
<td style="vertical-align: top; padding: 4px;"><pre style="margin: 0px; line-height: 15px; color: #222"> $(<span style="color: green">"form"</span>).fancybox();
$(<span style="color: green">"input"</span>).fancybox();
$(<span style="color: green">"input[name='weiter']"</span>).fancybox();
</pre></td>
</tr>
</table>
<a href="http://stackoverflow.com/questions/969522/open-fancybox-or-equiv-from-form-input-type-submit">Больше примеров здесь </a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-60735064593709272672011-12-30T00:25:00.000-08:002011-12-31T00:14:42.313-08:00Бесплатная CMS Open Real Estate на YiiНедавно, мы выпустили бесплатную <a href="http://monoray.ru/products"><b>CMS Open Real Estate на Yii</b></a>. Открытый исходный код, open source. Это мой первый опыт, работы над open source проектом такого уровня.
<br><br>
В качестве системы контроля версий использовали Mercurial hg. По моему это самое лучшее решение, до этого пробовал CVS, SVN, GIT.
<br><br>
И самое главное набрался опыта работы с Yii framework и планирую продолжить работу с ним. Постепенно, понимаешь, насколько в нем все грамотно реализовано и сколько много труда в него вложено.Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-1048561980648134839.post-77735031298387557052011-10-21T23:23:00.000-07:002011-10-21T23:44:38.429-07:00Как в Denwer импортировать через консоль дамп базы mysqlПоражаюсь какой у блогера тупой WYSWIG приходится раставлять тег br руками для переносов, потому что если сделать перенос по умолчанию какой есть в настройках, получается УЖАС.
<br><br>
Иногда приходится импортировать большие дампы sql, через phpmyadmin делать это проблематично, т.к. по умолчанию стоит ограничение на файлы не больше 2Мб. Сегодня надо было импортировать 90Мб, через консоль импортировалось без проблем.
<br><br>
Win+R, cmd, Enter
<br><br>
p:
<br><br>
cd P:\usr\local\mysql5\bin\<br>
mysql_run_to_import_dumps.exe
<br><br>
mysql> \r base_name
<br><br>
mysql> \. dump_file
<br><br>
<br><br>
где p - виртуальный диск, создаваемый денвером<br>
base_name - имя базы<br>
dump_file - файл с дампом базы (включая путь)
<br><br>
Найдено <a href="http://antosha-bender.livejournal.com/43660.html">здесь</a> )Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-47497876965368571892011-10-14T00:00:00.000-07:002011-10-14T00:07:22.064-07:00Как получить выбранные элементы checkbox в массив jQuery<pre class="prettyprint lang-php">
var selectedItems = new Array();
$("input[@name='itemSelect[]']:checked").each(function() {selectedItems.push($(this).val());});
if (selectedItems .length == 0) {
alert("Please select item(s) to delete.");
} else {
$.ajax({
type: "POST",
url: "/ajax_do_something.php",
data: "items=" + selectedItems.join('|'),
dataType: "text",
success: function (request) {
document.location.reload();
},
error: function(request,error){
alert('Error deleting item(s), try again later.');
}
})
}
</pre>
Нашел <a href="http://blog.burcsade.com/2009/07/01/getting-selected-values-of-an-checkbox-array-with-jquery/">здесь</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-22912149427622409042011-08-03T00:36:00.000-07:002011-08-03T00:41:08.533-07:00Паттерн Одиночка - Singleton Pattern в PHP<table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5">
<colgroup>
<col width="10" />
</colgroup>
<tr><td colspan="2" style="background-color: #f0f0f0"><pre style="margin: 0px">Код -<span style="color: #050"> пример #1</span></pre></td></tr>
<tr>
<td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"><pre style="margin: 0px; line-height: 15px;">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br /></pre></td>
<td style="vertical-align: top; padding: 4px;"><pre style="margin: 0px; line-height: 15px; color: #222"><span style="color: red"><?php</span><span style="color: black">
<span style="color: #808080">// PHP5</span>
<span style="color: #0000ff">class</span> Logger {
<span style="color: #0000ff">static</span> <span style="color: #0000ff">private</span> <span style="color: #600">$instance</span> = <span style="color: #0000ff">NULL</span>;
<span style="color: #808080">/* Возвращаем ссылку на одиночку */</span>
<span style="color: #0000ff">static</span> <span style="color: #0000ff">function</span> getInstance() {
<span style="color: #808080">/* Если объект еще не создан, создаем */</span>
<span style="color: #0000ff">if</span> (<span style="color: #0000ff">self</span>::<span style="color: #600">$instance</span> == <span style="color: #0000ff">NULL</span>) {
<span style="color: #0000ff">self</span>::<span style="color: #600">$instance</span> = <span style="color: #0000ff">new</span> Logger();
}
<span style="color: #0000ff">return</span> <span style="color: #0000ff">self</span>::<span style="color: #600">$instance</span>;
}
<span style="color: #808080">/* Запрещаем прямое создание */</span>
<span style="color: #0000ff">private</span> <span style="color: #0000ff">function</span> __construct() {
}
<span style="color: #808080">/* Запрещаем клонирование */</span>
<span style="color: #0000ff">private</span> <span style="color: #0000ff">function</span> __clone() {
}
}</span><span style="color: red"></span></pre></td>
</tr>
</table>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-81886519156073838302011-05-31T23:50:00.000-07:002011-05-31T23:52:43.093-07:00Абстрактная фабрика - (Abstract Factory)<a href="http://andipas.blogspot.com/2011/05/php.html">Список паттернов</a>
<br />
<table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5">
<colgroup>
<col width="10" />
</colgroup>
<tr><td colspan="2" style="background-color: #f0f0f0"><pre style="margin: 0px">Код -<span style="color: #050"> пример #1</span></pre></td></tr>
<tr>
<td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"><pre style="margin: 0px; line-height: 15px;">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br /></pre></td>
<td style="vertical-align: top; padding: 4px;"><pre style="margin: 0px; line-height: 15px; color: #222"><?php
<span style="color: #808080">/*
Абстрактная фабрика - (Abstract Factory)
Фабрика должна возвращать объекты. Но так как она абстрактная, то изначально нужно
описать абстрактный класс фабрики, и абстрактные объекты которые она будет производить.
Дале мы описываем реализации классов фабрик на основе абстрактной фабрики и реализации класса объектов
которые она производит. Тем самым у нас есть различные варианты фабрик и объектов с одинковыми
интерфейсами, что может быть удобно.
Далее привожу код. Есть абстрактная фабрика машин. Абстрактный класс машин. Создаем классы фабрики
"ford" и "vaz" и классы ford_machine и vaz_machine. Фабрики будут производить объект "машины", но
свойство "начинака" этих "машин" будет отличаться, прям как в реальной жизни.
*/</span>
<span style="color: #0000ff">abstract</span> <span style="color: #0000ff">class</span> abstract_machine_factory {
<span style="color: #0000ff">function</span> generate_sedan() {
<span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> machine(<span style="color: green">'sedan'</span>);
}
<span style="color: #0000ff">function</span> generate_universal() {
<span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> machine(<span style="color: green">'universal'</span>);
}
<span style="color: #0000ff">function</span> generate_hatchback() {
<span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> machine(<span style="color: green">'hatchback'</span>);
}
}
<span style="color: #0000ff">abstract</span> <span style="color: #0000ff">class</span> abstract_machine {
<span style="color: #0000ff">protected</span> <span style="color: #600">$_param</span>;
<span style="color: #0000ff">function</span> __construct(<span style="color: #600">$type</span> = <span style="color: green">'sedan'</span>) {
<span style="color: #600">$this</span>->_param = <span style="color: #0000ff">array</span>();
<span style="color: #600">$this</span>->_param[<span style="color: green">'type'</span>] = <span style="color: #600">$type</span>;
}
<span style="color: #0000ff">function</span> run() {
<span style="color: #0000ff">echo</span> <span style="color: green">'brrrrrrrrrrrrrr ...'</span>;
}
<span style="color: #0000ff">function</span> get_all_param() {
<span style="color: #0000ff">return</span> <span style="color: #600">$this</span>->_param;
}
}
<span style="color: #0000ff">class</span> vaz_machine <span style="color: #0000ff">extends</span> abstract_machine {
<span style="color: #0000ff">function</span> __construct(<span style="color: #600">$type</span> = <span style="color: green">'sedan'</span>) {
parent::__construct(<span style="color: #600">$type</span>);
<span style="color: #600">$this</span>->_param[<span style="color: green">'firm'</span>] = <span style="color: green">'vaz'</span>;
}
<span style="color: #0000ff">function</span> run() {
<span style="color: #0000ff">echo</span> <span style="color: green">'tr tr pr tr tr pr ...'</span>;
}
}
<span style="color: #0000ff">class</span> vaz_factory <span style="color: #0000ff">extends</span> abstract_machine_factory {
<span style="color: #0000ff">function</span> generate_sedan() {
<span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> vaz_machine(<span style="color: green">'vedro'</span>);
}
<span style="color: #0000ff">function</span> generate_universal() {
<span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> vaz_machine(<span style="color: green">'taz'</span>);
}
<span style="color: #0000ff">function</span> generate_hatchback() {
<span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> vaz_machine(<span style="color: green">'korito'</span>);
}
}
<span style="color: #0000ff">class</span> ford_machine <span style="color: #0000ff">extends</span> abstract_machine {
<span style="color: #0000ff">function</span> __construct(<span style="color: #600">$type</span> = <span style="color: green">'sedan'</span>) {
parent::__construct(<span style="color: #600">$type</span>);
<span style="color: #600">$this</span>->_param[<span style="color: green">'firm'</span>] = <span style="color: green">'ford'</span>;
}
<span style="color: #0000ff">function</span> run() {
<span style="color: #0000ff">echo</span> <span style="color: green">'rrrrrrrrrrrrrrrrr ...'</span>;
}
}
<span style="color: #0000ff">class</span> ford_factory <span style="color: #0000ff">extends</span> abstract_machine_factory {
<span style="color: #0000ff">function</span> generate_sedan() {
<span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> ford_machine(<span style="color: green">'sedan'</span>, <span style="color: green">'ford'</span>);
}
<span style="color: #0000ff">function</span> generate_universal() {
<span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> ford_machine(<span style="color: green">'universal'</span>);
}
<span style="color: #0000ff">function</span> generate_hatchback() {
<span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> ford_machine(<span style="color: green">'hatchback'</span>);
}
}
<span style="color: #808080">/* Фабрика ford_factory производит машины */</span>
<span style="color: #600">$ford_factory</span> = <span style="color: #0000ff">new</span> ford_factory();
<span style="color: #600">$ford_machine</span> = <span style="color: #600">$ford_factory</span>->generate_sedan();
deb(<span style="color: #600">$ford_machine</span>->get_all_param());
deb(<span style="color: #600">$ford_machine</span>->run());
<span style="color: #808080">/* Фабрика vaz_factory производит машины, функции одинаковые но результат (объекты) разные */</span>
<span style="color: #600">$vaz_factory</span> = <span style="color: #0000ff">new</span> vaz_factory();
<span style="color: #600">$vaz_machine</span> = <span style="color: #600">$vaz_factory</span>->generate_sedan();
deb(<span style="color: #600">$vaz_machine</span>->get_all_param());
deb(<span style="color: #600">$vaz_machine</span>->run());
<span style="color: #808080">/* В результате мы видим на экране:
Array
(
[type] => sedan
[firm] => ford
)
rrrrrrrrrrrrrrrrr ...
Array
(
[type] => vedro
[firm] => vaz
)
tr tr pr tr tr pr ...
*/</span>
<span style="color: #0000ff">function</span> deb(<span style="color: #600">$mVar</span>) {
<span style="color: #0000ff">echo</span>(<span style="color: green">"<PRE>"</span>);
print_r(<span style="color: #600">$mVar</span>);
<span style="color: #0000ff">echo</span>(<span style="color: green">"</PRE>"</span>);
}
</pre></td>
</tr>
</table>
<br />
<a href="http://andipas.blogspot.com/2011/05/php.html">Список паттернов</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-47999892289643888802011-05-31T23:44:00.000-07:002011-08-03T00:42:11.483-07:00Паттерны проектирования с примерами PHPЧтобы получше разобраться с паттернами на PHP, решил их глубже изучить и написать простые примеры их реализации на PHP. Ниже список основных паттернов, буду по мере возможности добавлять ссылки на примеры с реализацией.<br><br><br>
<h2>Порождающие паттерны.</h2><br>
Эта одна из категорий на которые разбивают шаблоны проектирования. В свою очередь эту категорию делят еще на два типа — паттерны порождающие объекты и паттерны порождающие классы. Первые создаются с помощью другого объекта, вторые с помощью наследования изменяют класс создаваемого объекта.<br>
Основная идея порождающих паттернов заключается в том, что инстанцирование объектов происходит «за кадром», они скрывают в себе какие именно классы используются в приложении и детали их реализации, оставляя только интерфейсы к ним. По-идее это позволяет собрать полностью рабочее приложение из различных заготовленных заранее объектов, но по своему опыту скажу, что это практически невозможно без использования других типов шаблонов.<br>
<br>
Их всего 5:<br>
1. <a href="http://andipas.blogspot.com/2011/05/abstract-factory.html">Абстрактная фабрика (Abstract Factory)</a><br>
2. <a href="http://andipas.blogspot.com/2011/08/singleton-pattern-php.html">Одиночка</a> (Singleton)<br>
3. Прототип (Prototype)<br>
4. Строитель (Builder)<br>
5. Фабричный метод (Factory Method)<br>
<br><br>
<h2> Структурные паттерны.</h2><br>
Здесь также есть два типа — паттерны уровня класса и паттерны уровня объекта. Самым ярким примером первых, на мой взгляд является «Адаптер». Общий смысл его в том, что если вдруг у нас есть класс и его интерфейсы не совместимы с другими библиотеками в нашей системе, то что бы разрешить этот конфликт, мы не изменяем код этого класса, а пишем для него адаптер. Очень часто этот паттерн применяется при написании библиотек, которые позволяют работать с различными СУБД. Паттерны уровня объекта позволяют достичь большей гибкости в приложения во время его выполнения. Наиболее популярный из них - «Декоратор».<br>
<br>
Всего 7:<br>
1. Адаптер (Adapter)<br>
2. Декоратор (Decorator)<br>
3. Заместитель (Proxy)<br>
4. Компоновщик (Composite)<br>
5. Мост (Bridge)<br>
6. Приспособленец (Flyweight)<br>
7. Фасад (Facade)<br>
<br><br>
<h2> Паттерны поведения.</h2><br>
Основная идея паттернов этого типа — взаимодействие объектов и классов между собой. Но они также делятся на два уровня — паттерны поведения уровня класса и паттерны поведения уровня объекта. Здесь самое сложное это добиться наименьшей степени связанности компонентов системы друг с другом, потому что почти все объекты должны знать о существовании других и нести в себе эту информацию. Отсюда и появились такие сложные паттерны как «Посредник» и «Цепочка обязанностей».<br>
<br>
Их 11:<br>
1. Интерпретатор (Interpreter)<br>
2. Итератор (Iterator)<br>
3. Команда (Command)<br>
4. Наблюдатель (Observer)<br>
5. Посетитель (Visitor)<br>
6. Посредник (Mediator)<br>
7. Состояние (State)<br>
8. Стратегия (Strategy)<br>
9. Хранитель (Memento)<br>
10. Цепочка обязанностей (Chain of Responsibility)<br>
11. Шаблонный метод (Template Method)<br>
<br><br>
<a href="http://programmerz.ru/post/patter_types.html">скопипастил</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-76783298484541270092011-04-21T02:46:00.000-07:002011-04-21T02:47:16.899-07:00go.js - классы для JavaScript и другое<div style="PADDING-BOTTOM: 4px"><b>go.js - классы для JavaScript и другое</b></div> <div class="ExternalClass0BD7469EAB454D50971EB39C6189F378"> <div>- Эмуляция "классов"
- Наследовение
- Связывание методов с контекстом объекта
- Доступ к цепи предков и предыдущим реализациям методов
- Статические методы, абстрактные классы, разрушение объектов
- Печеньки
- Стопрацентнае, на, покрытие юнит-тестами
<a class="bb" href="http://code.google.com/p/go-js/downloads/list">Брать здесь</a> или <a class="bb" href="http://code.google.com/p/go-js/source/checkout">клонировать тут</a>
<h3>go.js - зачем оно нужно и как работает</h3> <p>go.js, это <tt>JavaScript</tt>-библиотека. </p> <p>Все популярные <tt>JavaScript</tt>-библиотеки акцентируют внимание на взаимодействии с <tt>DOM</tt>, визуальных эффектах и достижении кроссбраузерности. В этих областях они достигли больших высот и пытаться воспроизводить данный функционал самостоятельно, достаточно бессмысленно. Лучше взять тот же <tt>jQuery</tt>. </p> <p>go.js концентрируется на упрощении внутренних вещей языка, например, ООП. Подразумевается использование go.js вместе с какой-либо другой библиотекой. </p> <p>Почему не взять надстройку над ООП из тех же <tt>MooTools</tt> или <tt>Prototype</tt>? </p> <ol><li>Потому что брюзге-автору не нравятся многие моменты реализации этих надстроек. </li><li>Например, в <tt>jQuery</tt> нет вообще ничего для ООП, а переходить на другую библиотеку только из-за ООП глупо. Подключать же вслед за <tt>jQuery</tt> ещё и <tt>Prototype</tt> с его объёмами и конфликтами, тоже не рационально. </li></ol></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-59871980050467315942011-04-21T02:12:00.000-07:002011-04-21T02:33:21.439-07:00Определение IP пользователя PHP<pre class="brush: php">
function ip() {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-42469236341672631292011-02-05T00:04:00.000-08:002019-05-07T00:49:43.349-07:00Клиентская и серверная валидацияОдна из наиболее частых задач в web-разработке - создание форм и проверка их на корректность вводимых данных. Для того чтобы это все было более юзабильно, есть специальный <a class="external text" href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/" title="http://bassistance.de/jquery-plugins/jquery-plugin-validation/"><b>jQuery Validation Plugin</b></a>. Этот плагин позволяет на стороне клиента, проверять форму на корректность вводимых данных, соответственно не требуется перезагрузка страницы.<br />
<br />
Чтобы облегчить создание форм в web-приложениях, существуют различные библиотеки. Одна из них <b><a href="http://pear.php.net/package/HTML_QuickForm2">HTML_QuickForm2</a></b> и ее доработка <b><a href="http://jquickform.ru/">jQuickForm</a></b> которая должна была подружить, этот построитель форм с <b>jQuery Validation Plugin</b>. Вышло на мой взгляд не плохо, но слишком наворочено. К тому же автор давно не развивал это дополнение, последний раз когда я скачивал этот пакет, <a href="http://code.google.com/p/jquickform/issues/list">не работала клиентская валидация</a>, а ведь изначально именно для этого и был разработанн этот пакет.<br />
<br />
Я знаю что в разных фреймворках, есть свои библиотеки для облегчения работы с формами. Как правило без клиентской валидации. Я тоже написал свой класс для построения форм, но он требует доработки.<br />
<br />
У всех этих "помошников" построителей форм, есть минусы -
1. Необходимо разбиратся с интерфейсами классов, как правило, сделано удобно, разобраться можно быстро
2. Сложности кастомизации, изменения дизайна форм
3. Все эти надстройки жрут ресурсы<br />
<br />
После размышлений над этим, я создал небольшой класс, который занимается только <span style="font-weight: bold;">валидацией</span>, правила задаются аналогично <b>jQuery Validation Plugin. </b>Объект этого класса создает необходимый код JS для валидации на стороне клиента (если нужно) и также проверяет формы на стороне сервера по тем же правилам. Привожу пример -<br />
<br />
<pre>
<code class="php">
<?php
header("Content-Type: text/html; charset=utf-8");
require 'valid/Valid.php';
require 'valid/ValidLang.php';
$oValid = new Valid($l);
$oValid->addRule('login', 'required');
$oValid->addRule('login', 'minlength', 5);
$oValid->addRule('pass', 'required');
$oValid->addRule('pass', 'minlength', 5);
$oValid->addRule('re_pass', 'equalTo', 'pass');
$oValid->addRule('email', 'required');
$oValid->addRule('email', 'email');
if (isset($_POST['login'])) {
if ($oValid->check()) {
// Здесь можно проверить дополнительно, на повторный логин и мыло например
echo 'Валидация успешна';
// Сохраняем данные, редиректим если надо
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Valid - mini validator</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="STYLESHEET" type="text/css" href="css/eform.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script type="text/javascript">
!window.jQuery && document.write('<script src="js/jquery-1.4.3.min.js"><\/script>');
</script>
<script type="text/javascript" src="js/jquery.validate.pack.js"></script>
<script type="text/javascript" src="js/jquery.form.js"></script>
</head>
<body>
<form action="index.php" method="post" name="reg_form" id="reg_form" class="eForm">
<fieldset>
<legend><?php echo $l['index']['registration']; ?></legend>
<p>
<label for="login"><?php echo $l['index']['login']; ?></label>
<input type="text" id="login" name="login" value="<?php echo $oValid->getReq('login');?>" />
<?php echo $oValid->getErr('login');?>
</p>
<p>
<label for="pass"><?php echo $l['index']['pass']; ?></label>
<input type="password" id="pass" name="pass" value="" />
<?php echo $oValid->getErr('pass');?>
</p>
<p>
<label for="re_pass"><?php echo $l['index']['re_pass']; ?></label>
<input type="password" id="re_pass" name="re_pass" value="" />
<?php echo $oValid->getErr('re_pass');?>
</p>
<p>
<label for="email"><?php echo $l['index']['email']; ?></label>
<input type="text" id="email" name="email" value="<?php echo $oValid->getReq('email');?>" />
<?php echo $oValid->getErr('email');?>
</p>
<p>
<input type="submit" value="<?php echo $l['index']['registration']; ?>" class="noresize submit"/>
</p>
</fieldset>
</form>
<?php echo $oValid->getJS('reg_form'); ?>
</body>
</html>
</code>
</pre>
Пример реализации можно посмотреть в моем mini MVC framework, там уже реализована регистрация, авторизация - <a href="http://code.google.com/p/mfram/source/browse/">mFram</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-12562821730255857422011-02-02T03:02:00.000-08:002011-02-02T03:05:13.539-08:00Скролл к элементу DOM HTML<div class="text"> <p>Переход к элементу с определённым <code>id</code> достигается очень просто: даётся ссылка с <code>href="#id-элемента"</code>. Однако, иногда <code>id</code> у элемента нет. Используя jQuery перейти к определённому элементу можно так:</p> <div class="hl-code"><div class="javascript-hl-main"><pre><span class="javascript-hl-code">$</span><span class="javascript-hl-brackets">(</span><span class="javascript-hl-quotes">"</span><span class="javascript-hl-string">html,body</span><span class="javascript-hl-quotes">"</span><span class="javascript-hl-brackets">)</span><span class="javascript-hl-code">.</span><span class="javascript-hl-identifier">scrollTop</span><span class="javascript-hl-brackets">(</span><span class="javascript-hl-code">$</span><span class="javascript-hl-brackets">(</span><span class="javascript-hl-identifier">myElement</span><span class="javascript-hl-brackets">)</span><span class="javascript-hl-code">.</span><span class="javascript-hl-identifier">offset</span><span class="javascript-hl-brackets">(</span><span class="javascript-hl-brackets">)</span><span class="javascript-hl-code">.</span><span class="javascript-hl-identifier">top</span><span class="javascript-hl-brackets">)</span><span class="javascript-hl-code">;</span></pre></div></div> <div class="hl-code"><div class="javascript-hl-main"><pre><span class="javascript-hl-code">$</span><span class="javascript-hl-brackets">(</span><span class="javascript-hl-quotes">"</span><span class="javascript-hl-string">html,body</span><span class="javascript-hl-quotes">"</span><span class="javascript-hl-brackets">)</span><span class="javascript-hl-code">.</span><span class="javascript-hl-identifier">animate</span><span class="javascript-hl-brackets">(</span><span class="javascript-hl-brackets">{</span><span class="javascript-hl-identifier">scrollTop</span><span class="javascript-hl-code">: $</span><span class="javascript-hl-brackets">(</span><span class="javascript-hl-identifier">myElement</span><span class="javascript-hl-brackets">)</span><span class="javascript-hl-code">.</span><span class="javascript-hl-identifier">offset</span><span class="javascript-hl-brackets">(</span><span class="javascript-hl-brackets">)</span><span class="javascript-hl-code">.</span><span class="javascript-hl-identifier">top</span><span class="javascript-hl-brackets">}</span><span class="javascript-hl-code">, </span><span class="javascript-hl-number">1000</span><span class="javascript-hl-brackets">)</span><span class="javascript-hl-code">;
<a href="http://rmcreative.ru/blog/post/perekhodim-k-opredeljonnomu-dom-elementu#scroll-to-footer">Прочел у Sam-a</a>
</span></pre></div></div> </div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1048561980648134839.post-8041549686790401352011-02-01T21:52:00.000-08:002011-02-01T21:57:30.156-08:00Логирование ошибок в файл DenwerКак оказалось <a href="http://www.denwer.ru/">Denwer</a> не логирует php ошибки в файл, а штука очень даже нужная особенно на фоне борьбы с ошибками. Чтобы он начал логировать, нужно вставить вот такой фрагмент кода в файл .htaccess :
<blockquote>php_value error_reporting E_ALL<br>
php_value display_errors Off<br>
php_value display_startup_errors Off<br>
php_value log_errors On<br>
php_value log_errors_max_len 1024<br>
php_value ignore_repeated_errors Off<br>
php_value ignore_repeated_source Off<br>
php_value report_memleaks On<br>
php_value track_errors Off<br>
php_value html_errors Off<br>
php_value error_log "error.log"</blockquote>Unknownnoreply@blogger.com0