Web

Q: nginx: rate limit, postgresql?

Вот так вот выглядит статистика веб-антиспама за последние месяцы на libraw.org:

На rawdigger.com еще показательнее:

И это только голова. В том смысле, что это - заблокированное Mollom, а там еще перед ним тоже есть слои антиспама.

Друпальское: img_assist to img src

Каждую осень у меня случается обострение и я хочу поапгрейдить свои сайты на Drupal6 на D7. Может и не каждую, но вот уже второй год.

В прошлый раз я выяснил, что за пять минут это не делается, за прошедшие ровно 11 месяцев все стало лучше:

  • Процедура апгрейда требует всего трех небольших правок. Если бы у меня был MySQL - и без них бы обошлось, но вот Postgres их все еще требует. Изобретать ничего не надо, все находится
  • ...

Друпальское: аккуратно разложенные грабли в pager

Для памяти, чтобы не забыть.

Со всей дури налетел на эту вот особенность: Pager missing if views is installed.

Причем, полдня происходила чистая мистика - меняешь тему оформления - появляется pager (в моем конкретном случае - в комментариях). Начинаешь разбираться, чем же она отличается от той, где листалки нету (ну там отладочная печать, то, се) - и вроде ничем не отличается.

Только вот в одном случае строится список комментариев с pager, а в другом - нет.

Когда в очередной раз обгуглился и нашел про Views, то конечно стало понятнее:

  • Блок Views с pager у меня таки был.
  • А в тех дизайнах, где pager под комментариями появлялся - просто не выводился этот блок из Views.
Штатное лечение - каждому pager во views - задать уникальный (по сайту) Pager ID, благо средства для этого есть. Риторический вопрос только один, а почему этот Pager ID сразу не формируется уникальным, ну там из ID view и номера блока в нем.....

На закуску хочу заметить, что вся эта конструкция, когда зовутся функции по именам (ну там themename_preprocess_html), а если такой нету, ну значит не судьба, - это очень гибко, но, блин, отлаживать это - это нечто.

Про Drupal7: ненависти (вместо любви) псто !

Только я собрался написать, что впечатления про Drupal7 более-менее положительные, все такое современное, с оверлеями и прочими понтами... как вдруг, внезапно, вылезла проблема:

Если пойти на сайт под D7 по битому URL somesite.domain/node/some-garbage

То вылезает PDO Exception, дескать к числовому полю ходят с символьным ID. Ну, как минимум под PostgreSQL вылезает, возможно MySQL к этому более толерантен (и мусор превращает, скажем, в 0, что не менее прекрасно).

В Drupal6 это место сделано куда разумнее, возвращается обычная страница...

Любви к Drupal7 псто!

Спасибо читателям, помогли разобраться с ненавистью к D7.

Докладываю

1. Кнопки 'Split summary at cursor'/галки 'Show summary at full view' - нету. Но жить можно с визуальным редактором: TinyMCE получает кнопку, аналогичную Split, галка 'Show summary' при этом какбэ по умолчанию, но если что-то написать в Summary, то в списках постов будет именно оно.

Логика чуть другая, но жить можно.

Со вставлением картинок тоже чуть иначе, но тоже жить можно:

  1. плагин Media - не нужен.
  2. ...

Ненависти к Drupal7 псто!

Поигрался с тестовым сайтом, поапгрейженным из Drupal6 в Drupal7, испытал мучительное недоумение.

Снес нахрен, поставил D7 с нуля, недоумение не стало менее мучительным.

У меня, по большому счету, требований очень мало:

  • Мне нужно писать тексты, причем я готов их прямо в HTML фигачить. От визивигов яваскриптовых - тошнит, если честно.
  • Мне нужно управлять текстом аннотации, которая на глагне показывается. И средств D6 мне более чем хватает (а там можно, если не доверяешь автомату, разделить текст на аннотацию и хвост,
  • ...

Drupal6 -> Drupal7

В очередной раз подошел к снаряду по имени Drupal7. Имею сказать:

1. Если у вас PostgreSQL, то даже Drupal 7.9 (текущий) не сможет поапгрейдиться гладко. Оно пытается сконвертировать поля типа text в тип bytea, а в PostgreSQL 9.1 (другие не пробовал) автоматического преобразования этих типов нет.

Лечение (применяется к базе PostgreSQL до апгрейда):

CREATE OR REPLACE FUNCTION text2bytea(text) RETURNS bytea AS
$BODY$
begin
 return convert_to
...

Про перевод часов, таймзону, PHP и Drupal

Вдруг кому поможет, поэтому тут (у меня теплится слабая надежда, что в ближайшие годы новых экспериментов с летним временем не будет, поэтому самому такие записки вроде не нужны).

PHP:

  1. У PHP база данных таймзон вшита в пузо и, конечно, не обновляется регулярно.
  2. Но есть pecl-timezonedb, который ее оверрайдит, со свежей базой (последняя имеет номер версии 2011.13), с этим расширением с таймзонами все станет отлично и любимая всеми Europe/Moscow будет работать как полагается по новым правилам.
  3. Но если вы живете под FreeBSD, то там /usr/ports/misc/pecl-timezonedb не обновлялся очень давно, посему:
    • Меняем там в Makefile 2010.9 на 2011.13
    • удаляем distinfo
    • make && make install
  4. Добавляем timezonedb.so в список extensions.ini (на FreeBSD это сделает make install)
  5. Перестартовываем PHP-fastcgi или Apache или что у вас там работает процесс-сервером для PHP
  6. Ура, можно накатить первый стакан.

Drupal 6:

  1. Сам по себе сразу начинает жить правильно (ну, насколько мне показалось). Т.е. таймзона меняется после апдейта PHP-timezonedb с +0300 на +0400 сама.
  2. Но! В Administer-Date-and-time есть настройка про User Configurable time-zone. Если она включена, то пользователю будут показываться даты-времена в его таймзоне. И весь созданный им контент будет иметь время создания рассчитанное из юзерской таймзоны.
  3. Но. Юзерская таймзона специфицирована в секундах смещения от UTC.
  4. Выходов два: или для всех российских пользователей взять и поправить скриптом (по хорошему, с учетом даты регистрации), или просто отменить настройку пользовательских таймзон. Я пошел по второму пути.

Об SSD

Чумовой мужик

Watch live streaming video from oreillyconfs at livestream.com

Сперто отсюда: It's the Fraking IOPS - 1 SSD is 44,000 IOPS, Hard Drive is 180 ...

О платформах и технологиях

Вот берем два Друпальских модуля внешней авторизации:

  • Facebook Connect - позволяет одним кликом создать аккаунт на друпальском сайте, все мгновенно.
  • OpenID - аккаунт создать позволяет, но не верифицированный, уйдет E-mail, на полученный линк надо будет кликнуть (да и то, эта функциональность не так давно появилась, раньше можно было только существующий аккаунт привязать к OpenID-URL).
И сначала я на поведение OpenID ругался (про себя, да и вслух), а потом осознал сермягу:
  • В случае Facebook (ЖЖ, Твиттера, Вконтакте, MailRU....) я доверяю (или не доверяю) конкретному сервису (платформе). А они, в свою очередь, пытаются (своими немаленькими ресурсами) отличить людей от роботов и все такое. Список доверенных - невелик, а если вдруг чего, то и отозвать доверие недолго.
  • В случае протокола (технологии) - доверие делегируется неизвестно кому. Какому-то Васе или Пете, который асилел OpenID-сервер поднять. Но я точно знаю, что средний спамер (что по каментам, что по почте) технологически гораздо продвинутее, чем просто средний Вася. Более того, спамеры на порядки активнее "просто пользователей".
Получается, доверять технологии - нельзя. Платформе, за которой стоят конкретные люди и силы, заинтересованные в хорошей работе платформы - можно. Платформа может быть распределенной, конечно, но не изолированными островками неизвестного количества.

Мораль: OpenID труп.

День друпала

В режиме записок для памяти, пусть проиндексируется и лежит.

В последнее время меня достал спам в каментах. Мало того, что пробивают капчу и статистический антиспам, по каким-то причинам даже то, что как спам детектируется - вызывало приход почтового уведомления. Воспроизвести не удалось (все что я писал "вроде спама" - просто ложилось в спам же, без уведомления), пришлось двигать мебель и менять девочек.

Для начала я попробовал поапгрейдиться на Drupal7, благо почти все нужные модули вроде бы уже...

Друпалеру на заметку

Если у вас по каким-то причинам есть запись в таблице node, но нет ни одной записи с таким nid в node_revisions, то у вас ВНЕЗАПНО начнут портиться права доступа. Причем rebuild permissions будут помогать ненадолго, до попытки создания очередной node.

Детектируется проблема элементарно:

 select nid from node n where not exists (select nid from node_revisions r where r.nid=n.nid);
Лечится - таким же...

Цирк-с-конями.рф

Цирк с конями Приколы в национальном домене продолжаются, я уже смеяться устал.

Комедия в бесконечном числе действий:

  1. Регламент регистрации в .РФ предусматривает отказ регистрации в случае, если нарушается нравственность и мораль. Список нарушений морали и нравственности установлен КЦ и широко обсуждался (гуглить по словам "ебля с перископом"), в том числе и в этом блоге.
  2. Прошел уже месяц с приключениями, блокировками и прочим боданием Руцентра и КЦ, аморальный список действует (в числе прочего, домен старые-бляди.рф довольно долго торчал в whois с личным E-mail Лесникова в контактных данных, недавно поменяли).
  3. ВНЕЗАПНО Руцентр вводит свой стоп-лист
  4. И начинает снимать с регистрации уже зарегистрированные домены.
  5. Которые ТУТ ЖЕ перехватывают другие регистраторы, а вы как думали.
Понятно, что у многих/большинства Руцентровских доменов Администратор - сам Руцентр, он может направить (сам себе?) письменное заявление о снятии с регистрации и снять. А владелец домена - при этом может пососать упса с витамином "С".

Попкорн кончается, надо бежать в магазин за новой дозой....

Про Drupal 7

По случаю выходных, помацал Drupal 7 (в связке с PostgreSQL 9, гулять так гулять). Внутрь особо не заглядывал, просто покрутил в руках на тестовом сервере.

Имею сказать:

  • Штука - работает. Ну то есть я пробовал свежую инсталляцию, а не апгрейд старой, с апгрейдом лично у меня будут проблемы.
  • Модулей, прямо скажем, не хватает. Я смотрел список используемых у меня на разных сайтах, дойдя до буквы I обнаружил уже две проблемы и остановился. Проблемы такие:
    • Нету inline tags, а я этот модуль использую для публикации через BlogAPI (собственно, BlogAPI тоже нет, но вроде есть какая-то замена). Как-то можно обойтись, что-то похакать, может быть в замене BlogAPI категории работают.
    • Нету GeSHi Filter (syntax highlighter для кусочков кода) и это уже совсем большая потеря. Замены есть и не одна, но все с другим синтаксисом, вместо <code> что-то еще, а это готовые тексты-каменты править.
В-общем, пусть поживет еще несколько месяцев без меня....

Про Amazon EC2

Развлекаюсь тут с Amazon EC2 и вот чего не могу понять

Хочется, на самом деле, SUSE 11.2, потому что весь девелопмент проекта на нем и бинарники, соответственно, переносимы без лишних ужимок (и почти гарантированно думать про это не надо)

Но! Я попробовал два готовых имаджа с SUSE нужной версии и нужной битности и оба не загрузились. На консоли неясное, по ssh не пускают. Попал на круглую сумму, центов на пять.

С Амазоновским AMI (Amazon Linux) - никаких проблем, но см. выше.

Риторический вопрос, это опять моральные индусы меня окружают или же просто два раза из двух не повезло?

Update: сошлись с ними на 12-й федоре. И проект собирается (gcc 4.4 из коробки и все такое) и имеющийся образ с EBS - загрузился.

Cheap SSL certificates

Вбиваешь в гугель то, что выше написано, и получаешь, в первом приближении, такое вот:
  • GoDaddy за $9.99-$13 (у разных реселлеров).
  • Rapid SSL за $14 (если на 5 лет).
Дальше не стал копаться.

Скажите, а в чем тут обман? У меня задача - заменить самогенеренные, чтобы броузеры и SVN-клиенты не ругались на левый сертификат, никакого е-коммерса. Заплатить за это $10-15 в год с сайта (SVN-репозитория) мне совершенно не жалко, но может быть вышезаявленная цель не будет достигнута? Четвертак - уже жалко :).

У GoDaddy - chained сертификаты, но мне не кажется, что в 2010-м году это должно создавать какие-то проблемы. У RapidSSL все обещано "совсем честным"....

Прощание с полимерами?

Просрали все полимеры!

Когда я работал в одном маленьком сумасш интернет-холдинге начальником Top100, меня очень интересовал вопрос: а что будет, если ужасный плоский рубрикатор Топ100 (из 50+ рубрик первого уровня) заменить на правильный иерархический?

Тогда у меня не хватило смелости принять это решение. Нет, если бы начальство велело, то я бы с превеликим удовольствием, но начальству было не до этого, а у меня не хватило силы воли, да и пользователи привыкли.

Прошло 8.5 лет и новое руководство Top100 таки решилось.

Вопрос про юзабилити поиска

Если вы читаете этот блог в виде в его каноническом виде, то вы, вероятно, заметили, что в левой колонке появилась форма поиска.

Если вы читате через ЖЖ, то таки придется открыть канонический вид.

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

Критика всплывающего окна и прочие наезды на javascript не принимаются, со временем я переделаю это нормальным модулем со всякими наворотами, заодно научусь делать модули под Друпал, но пока оверлей на jQuery оказался сильно быстрее, чем разбираться еще и в этом.

ljcomments2drupal 0.02

Первая (0.01-я) версия ljcomments2drupal оказалась, как любой скрипт на скорую руку, с ошибками.

Версия 0.02 исправляет известные на сегодня проблемы:

  • Если комментарий один (добавился один свежий), то неправильно импортировалось имя комментатора. Это фишка XML::Simple (разное поведение с одним значением и с несколькими), про которую я постоянно забываю.
  • Неправильно устанавливалась homepage автора комментария (ссылка на его ЖЖ).
  • Добавлен скрипт fixauthors.pl, который правит накопленные ошибки прямо в БД сайта.

Качаем новую версию тут: ljcomments2drupal-0.02.tar.gz

Опять про wordstat

Яндекс поправил проблему с Wordstat, о которой я писал на позапрошлой неделе, настало облегчение.

Но сам пример с икея/икеа настолько хорош, что заслуживает еще одной заметки.

На картинках ниже мы видим помесячное распределение частот для запросов "икея" (верхняя картинка) и "икеа" (нижняя).

Картина, надо сказать, очень любопытная:

  • "естественным" запросом
  • ...

Pages

Subscribe to Web