Ars Longa, Vita Brevis

Собрав большую статистику по спам-ботам, я решил несколько видоизменить плагин SJCaptcha — причем в сторону упрощения.

Причин тому несколько:

  1. Проверка FCrDNS оказалась черезмерно эффективной: да, она спасает от спам-ботов. Но, к сожалению, из-за большого радиуса кривизны рук некоторых провайдеров, которые не могут нормально PTR-записи прописать (или поставить им в соответствие A-записи), отсеиваются и вполне нормальные пользователи. Что обидно.
  2. Проверка A и MX-записей доменов, указанных в email, оказалась не очень эффективной: большинство спамеров хотя и используют несуществующие адреса, но указанные домены в природе всё же существуют. К тому же, реализация данной проверки не работает в Windows (особенности PHP)
  3. Собственно CAPTCHA оказалась очень эффективной — все "слишком умные" спамботы срезались именно на ней. К сожалению, при отключенных изображениях или использовании консольных браузеров она бесполезна. А если роль спам-бота играет человек, то она вообще никак помочь не сможет. Увы.

Читать статью «SJCaptcha Lite: невидимая защита от спама» полностью…

По долгу работы пришлось столкнуться в жизни с плагином Event Calendar. Скажу честно: если бы не жёсткий дедлайн, я бы не стал пытаться исправлять его и затачивать напильником под конкретные нужды, быстрее было бы переписать. Причина, по которой я не хотел бы его использовать — плагин не вышел из стадии RC3 с конца октября прошлого (2007) года и имеет одиннадцать открытых багов в багтрекере.

Сегодня я расскажу о такой интересной ошибке как "Unknown column 'wp_posts.ec3_sch.start' in 'order clause'". Читать статью «Исправляем Event Calendar 3.1.1 RC3 своими руками» полностью…

Иногда встречаются ситуации, когда приложению нужно использовать функциональность, встроенную в WordPress, но при этом по ряду причин не хочется подключать установленные плагины. Типичным примером может являться скрипт, запускаемый cron'ом и, например, рассылающий письма подписавшимся на рассылку пользователям.

Обычно, если нужно подключить WordPress к приложению, поступают так:

[-]
View Code PHP
<?php
    require_once(WORDPRESS_DIR . '/wp-config.php');
?>

После этого приложению становятся доступны все функции/переменные WordPress. Тем не менее, у этого подхода есть недостаток: он подключает все активные плагины. Плохо это может быть тем, что каждый плагин может иметь порядочную (в смысле потребляемых ресурсов) инициализационную секцию: например, цена подключения плагина Simple Forum может быть 70 лишних запросов к базе данных. Читать статью «Использование движка WordPress без плагинов из стороннего приложения» полностью…

В статье "Удаление старых версий статей из базы данных WordPress" я писал об особенности WordPress 2.6, а именно: о хранении старых версий статей в базе данных.

К сожалению, данная особенность WordPress очень смущает весьма популярный плагин Search Everything: при включённом поиске в тэгах или категориях из-за особенности запроса будут выдаваться статьи, помеченные как ревизии (старые версии, если говорить проще). Читать статью «Search Everything 4.7.1 и WordPress 2.6: отключаем поиск по старым версиям статей» полностью…

В предыдущей статье я писал про основные источники неправильной разметки в WordPress, среди которых оказалась встроенная в WordPress функция wpautop().

Для решения этой проблемы родилась идея написать плагин, который бы автоматически исправлял ошибки, вносимые функцией wpautop(). А также по возможности бы отключал её. В результате родился плагин FormatControl:

  • плагин заменяет wpautop() во всех фильтрах по умолчанию на свой (исправленный) обработчик; при этом новый фильтр не будет установлен, если какой-нибудь плагин уже убрал wpautop;
  • плагин позволяет отключить функцию wpautop() в пределах статьи путём задания дополнительного поля noautop со значением 1 (в целях совместимости с плагином WP Unformatted так же поддерживается поле sponge);
  • плагин позволяет отключить функцию wptexturize() (известную по замене прямых кавычек угловыми) в пределах статьи путём задания дополнительного поля notexturize со значением 1 (в целях совместимости с плагином WP Unformatted так же поддерживается поле sandpaper);
  • при установке своих фильтров-замен плагин добавляет их с тем же приоритетом, что был у заменяемого фильтра.

Скачать FormatControl для WordPress.

Стараниями Дмитрия Лялина я узнал про еще один плагин WordPress для подсветки синтаксиса — CodeColorer. Как и многие другие плагины (напрмер, WP CodeBox Эрика Вонга или мой CodeBox), CodeColorer использует в качестве движка библиотеку GeSHi. Читать статью «Обновление для CodeColorer 0.6.0» полностью…

В Австралии и США большой популярностью пользуется плагин Clicky — Web Analytics 2.0. Как следует из названия, Clicky является еще одним сервисом для анализа статистики веб-сайта. Судя по приведённой на сайте таблице, Clicky, образно говоря, "затыкает за пояс" даже такого конкурента, как Google Analytics.

Себе на сайты я ставить Clicky не пытался, но наблюдал его в действии в проекте, над которым работаю. Могу сказать, что сервис действительно мощный и удобный, а плагин Clicky для WordPress относится к разряду "сконфигурировал и забыл".

Всё хорошо, но по традиции есть одно "но": если на странице используется, например, Prototype, то плагин начинает кидаться ошибками JavaScript. Читать статью «Clicky 0.3b для WordPress и проблемы с JavaScript» полностью…

В статье "CodeBox: подсветка синтаксиса для WordPress" я говорил, что вместо того, чтобы постоянно исправлять старые и новые баги в плагине WP CodeBox, я сделал форк, который будет жить своей жизнью, но при этом будет совместимым с WP CodeBox, чего бы Eric Wang там ни творил.

Обещания, как говорится, нужно держать :-) Сегодня у меня выдались пять часов свободного времени, и я занялся доработкой/исправлением плагина. Фактически, из исходного кода остались только имена параметров, всё остальное было переписано в "родном, мудром, обьектно-ориентированном" стиле.

В результате получился CodeBox 0.5 (функционально соответствующий WP CodeBox 1.2.2.1). К версии 1.0 планирую довести до ума поддержку TinyMCE (в своё время несовместимость WP CodeBox с TinyMCE привела к тому, что я не использую WYSIWYG), поменять кое-что в JavaScript, добавить новые опции и т.п. Поддержка интернационализации уже есть, осталось заняться переводом :-) Как говорится, планов очень много, где бы время взять?

Скачать CodeBox 0.5 для WordPress.

PS - по сравнению с предыдущей версией, плагин "похудел" практически на 200 килобайт. Работа идёт!

Два с половиной месяца назад я писал про альтернативную версию плагина ОднаКнопка для WordPress. Что же, пришла пора Русскому Программисту написать что-то своё.

В результате появился небольшой такой плагинчик, по функциональности идентичный (и в чём-то даже превосходящий) ОднуКнопку.

Достоинства:

  • не требует внешних скриптов (всё, что нужно для работы, присутствует на сервере);
  • запросы отсылаются непосредственно сервису закладок и никуда более — если у Вас паранойя, Вам это понравится (ОднаКнопка отсылает их еще и на свой сервер);
  • для отображения бокса с сервисами закладок используется XHTML-шаблон, который пользователь может переделать по своему вкусу;
  • очень легко добавлять новые сервисы закладок;
  • поддерживается больше сервисов закладок;
  • для добавления статьи (которая отображается шаблоном single.php) в сервис закладок не требуется поддержка JavaScript (любители Lynx, специально для вас);
  • все иконки сервисов закладок хранятся в одном файле (техника, известная как CSS rollovers); как следствие, для загрузки всех иконок требуется один запрос, а не двадцать четыре;
  • zero configuration — поставил и забыл.

Установка

Копируете файл onebutton.zip в каталог с плагинами WordPress (wp-content/plugins), разархивируете, после чего активируете в wp-admin/plugins.php.

Скачать плагин OneButton for WordPress.

История изменений:

  • Версия 0.2:
    • поддержка интернационализации;
    • поправлены иконки и недочеты в разметке (bersy, большое спасибо!);
    • улучшена поддержка Internet Explorer 6 (как я его не люблю!).
  • Версия 0.2.1:
    • добавлены новые сервисы закладок (RuCity, LinkStore, NewsLand);
    • исправлены потенциальные проблемы с форматированием (Настя, Alex, спасибо за тестирование!);
    • улучшена поддержка Internet Explorer 6 (как я его не люблю!).
  • Версия 0.3b — Alex, спасибо за идеи:
    • возможность открывать сервисы в новом окне (путём добавления в ссылку target="blank");
    • возможность добавлять отключать rel="nofollow" в ссылке на сервис;
    • возможность показывать кнопку только в полной версии статьи/страницы (в этом случае не подгружается ненужный более JavaScript — минус один запрос);
    • кнопка не должна попадать в фид или трэкбэк;
    • возможность выбора показываемых сервисов закладок.
  • Версия 0.3b2:
    • добавлены сервисы Lopas и Закладки I.UA (подсмотрено здесь);
    • автоматическое использование описания (мета-тэг description статьи) и тэгов (tags + category) для сервисов, которые это поддерживают (Закладки I.UA, Blink, Simpy, Spurl, Текст 2.0, RuCity).
  • Версия 0.3b3:
    • добавлены сервисы: Connotea, Bibsonomy, Trucking Bookmarks, Коммунизм и UCA закладки в UA.IX;
    • появилась возможность не показывать OneButton для выбранных статей (путём добавления поля disable_onebutton с ненулевым значением);
    • добавлена поддержка отключения иконок сервисов закладок.
Июнь 20, 2008

Патч для WassUp 1.6

Рубрика: Патчи
Метки: , , , , , ,
Vladimir

Недавно вышла очередная версия WassUp, и, что характерно, остались все старые проблемы. Для их решения готов новый патч :-) Но что меня очень разочаровывает, с разработчиками WassUp очень трудно разговаривать За последние несколько месяцев я им неоднократно говорил о различных багах, но они так и остались неисправленными.

Из-за проблем с производительностью я наконец-таки снёс WassUp (слишком много переделывать, чтобы исправить все проблемы, а написан он всё же кривовато), так что данный патч будет всё же последним. Читать статью «Патч для WassUp 1.6» полностью…

Меня всегда интересовало, насколько эффективно WordPress работает с базой данных, и насколько хорошо спроектирована база данных.

Практически в каждом проекте, над которым я работаю, я использую те или иные средства для анализа производительности скрипта и поиска его слабых мест. Для разработчиков не является секретом, что во многих случаях плохая производительность работы скрипта обусловлена низкой производительностью SQL-запросов. И, как правило, низкое быстродействие запросов связано с их неоптимальностью (что включает в себя отсутствие необходимых индексов в базе данных).

Однажды столкнувшись с ужасной производительностью WordPress и не имея возможности анализировать код десятка поставленных плагинов, я стал решать задачу иначе, в результате чего родился плагин для анализа SQL-запросов. Читать статью «SqlMon: плагин для анализа SQL-запросов» полностью…

Решив уделить пару часов оптимизации своего собственного блога, я с удивлением обнаружил, что страница может генерироваться несколько секунд (!). Отойдя от шока и выяснив, в чем там дело (этому можно будет посвятить отдельную статью), я быстро разобрался с запросами к базе данных и уменьшил общее время запросов в среднем до одной секунды (ну медленный у меня сервер).

Тем не менее, это заставило меня задуматься о том, как WordPress использует собственный кэш и что можно сделать, чтобы улучшить производительность. Читать статью «WP File Cache: замена WP_Object_Cache с поддержкой долговременного кэширования» полностью…

Небольшой плагин для любителей HTTPS — помещает панель управления WordPress (админку, если по-русски) за HTTPS. Shane, специально для тебя! :-)

Возможно, кому-нибудь даже пригодится. Скачать WP Secure Admin.

Update: специальный бонус: плагин WP Secure Login — безопасный логин/регистрация/восстановление пароля. Скачать WP Secure Login.

Июнь 1, 2008

Патч для WP WassUp 1.5.1

Рубрика: PHP, Патчи
Метки: , , , , ,
Vladimir

Сегодня явно день патчей :-)

Полтора месяца назад я уже писал про замечательный плагин Wassup, а также о его нелюбви к Windows. Помимо этой ошибки, я обратил внимание на нелюбовь плагина к строкам, состоящим из многобайтных символов (например, UTF-8).

Сегодняший патч исправляет:

  • проблему с разделителями каталогов (традиционно);
  • мелкие ошибки, связанные с невалидностью генерируемого HTML-кода;
  • добавляет поддержку строк, состоящим из многобайтных символов (поддержка таких строк требует наличия активированного расширения PHP mb_string);
  • добавляет rel="nofollow" к ссылкам в блоках типа 'Top 5 Referrers', 'Top 5 Search Terms'.

Скачать патч в формате unified diff.

Патч нужно применить рекурсивно к каталогу /wp-content/plugins/wassup.

Как-то на досуге я занялся анализом приходящего спама и обратил внимание, что практически 98% спама в комментариях приходят с IP-адресов, замеченных в рассылке спама по электронной почте. А спамеры обычно попадают в черные списки (blacklist).

DNSBLDNS blacklist или DNS blocklist — списки хостов, хранимые с использованием системы архитектуры DNS. Обычно используются для борьбы со спамом. Почтовый сервер обращается к DNSBL, и проверят в нём наличие IP-адреса клиента, с которого он принимает сообщение. При положительном ответе считается, что происходит попытка приёма спам-сообщения, и оно блокируется (не принимается сервером, и, как правило, отправителю отсылается уведомление об этом).

Идея состоит в том, чтобы написать расширение для WordPress, проверяющее наличие IP-адреса комментатора в чёрном списке. Читать статью «Использование DNSBL для борьбы со спамом в комментариях» полностью…