Web

Доверяй, но проверяй

liru-mail.png LiveInternet выкатил статистику по переходам из почтовых систем, которая удивила как минимум в двух местах:

  • Во-первых, доля Яндекса оказалась заниженной. Выяснилось, что в ряде случаев резался реферер, что в Яндекс.Почте быстро поправили.
  • Во-вторых, доля Гугл-почты оказалась просто неприлично низкой, меньше процента.

Впрочем, несложный эксперимент показал, что gmail.com тоже режет рефереры. Посылаем сами себе письмо со ссылкой на собственный сайт (логи которого доступны), жмем на нее и видим в логах:

91.78.182.177 - - [29/Oct/2008:12:50:09 +0300] "GET /2008/10/post.html HTTP/1.1"
 200 32630 "-" "Mozilla/4.0 (compatible; MSIE 7.0;...."
Другими словами, о доле Gmail по этой статистике судить никак нельзя. Раз в логах нет, значит и Javascript-счетчик реферера не увидит.

Чтобы два раза не вставать, пну еще и гиганта. Письмо с сабжектом "вот ссылка" и текстом из этой ссылки и подписи gmail.com положил в папку Spam.

К вопросу об опенсорсе

Drupal-овская Taxonomy import/export via XML в версии 1.1 работала. Я даже научился туда XML-и генерировать и было мне счастье.

А версию 1.2 они сломали (мотивируя починкой Security Advisory). Короткие таксономии работают, а попытка залить туда 200 терминов кончается фиаско.

А ведь это модуль не ежедневного использования, шансов на починку гораздо меньше чем обычно. И обычно то не чинят, а ради одноразовой штуки заморачиваться не хочется вовсе. Я вот перешел на CSV import, хотя он и менее удобен: присвоить ID терминам нельзя.

Про спам в каментах

Ответ по заявкам телезрителей (пришло в личную почту) на вопрос про сапам в комменатриях.

На удивление, простые народные средства помогают не тратить на эту проблему больше нескольких минут в день (на 5 сайтах с открытыми комментариями и приличным pagerank).

Хочется думать, что помогает в первую очередь бессмысленность спама по каментам: noindex+nofollow везде, отчего нет смысла тратить много усилий. Но безумные роботы таких тонкостей не знают и их реально много.

Натягивание Drupal на PostgreSQL

Несмотря на мой исходный пессимизм, появившееся неделю назад острое отвращение к MySQL заставило меня расчехлить напильник и наконец доработать Drupal 6.5 до устраивающей меня совместимости с PostgreSQL.

В настоящую минуту один из моих сайтов уже работает под PgSQL со всеми нужными мне модулями, а остальные будут переведены после нескольких дней тестирования первого.

Несмотря на мой исходный пессимизм, появившееся неделю назад острое отвращение к MySQL заставило меня расчехлить напильник и наконец доработать Drupal 6.5 до устраивающей меня совместимости с PostgreSQL.

В настоящую минуту один из моих сайтов уже работает под PgSQL со всеми нужными мне модулями, а остальные будут переведены после нескольких дней тестирования первого.

Drupal + PostgreSQL = еще один патч

В процессе попыток использования Drupal 6.5 с PostgreSQL выявилась мелкая неприятность: интерфейс к постгресу не вполне правильно эскейпит строки со спецсимволами. Постгрес хочет, чтобы ему давали в виде E '\r\n', а Друпал дает без E. Пожелание это новое, появилось в какой-то из восьмых версий, на функциональность не влияет, но противно забивать лог неизвестно чем.

Патч прилагается: drupal65-pgsql8x-patch2.diff.gz

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

Про Амазон и русские кредитки

Хваленые на Highload++ Amazon Web Services отказались скушать отечественную кредитку дебитовую Визу от ВТБ24. Внешне на сайте это никак не проявляется, однако банк отверг попытку списать с меня доллар, о чем прислал две SMS.

И я вроде даже понимаю почему - при регистрации нет места для security code (CVV2), а без этого банк интернетные платежи не авторизует. Придется и дальше, как лоху, арендовать виртуальные серверы.

Вообще, для меня загадка, как можно реализовать автоматическое списывание платежей в подобных условиях: CVV2 сохранять нельзя (по правилам карточных систем), без него - не работает. Хотя PayPal это как-то делает.

Drupal + PostgreSQL: вторая попытка

Внезапно возникшее отвращение к MySQL (каменты тоже читать) заставило посмотреть на связку Drupal + PostgreSQL еще раз.

Если аккуратно, то все работает. Т.е. к core у меня и раньше претензий не было, а сломался я в модуле Backup-Restore. Сейчас - с минимальным набором 3rd-party (Tagadelic, Inline Tags, Site Menu, Pathauto, Transliteration) все вроде живет. Точнее, Transliteration не транслитерирует, но оно этого и с MySQL не делало, но всяких сообщений об ошибках и прочих безобразий пока нет, за исключением одного:

У меня на разных инсталляциях PostgreSQL стоит разный default client_charset. Где-то KOI8, где-то CP1251, но нигде не стоит UTF8 (базы все, естественно, в UTF). Это все по соображениям совместимости - много где живут скрипты многолетней давности и вставлять в каждый из них set client_charset мучительно.
Drupal о такой подлости не подозревает (MovableType - подозревает и выставляет), что лечится простым патчем:

drupal64.pgsql.diff.gz

Ваш MySQL - то еще Г...

Сегодня с утра один из моих сайтов запел, что Table '..../cache_block' is marked as crashed and should be repaired

Ну я ее, конечно REPAIR TABLE, но осадок остался. MySQL несколько месяцев никто не перезапускал, сервер тоже не падал:

12:21PM up 124 days, 21:33, 1 user, load averages: 3,48 3,59 3,63

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

Поставить mysqlcheck в крон?

Drupal: второй патч для noindex

Помимо стандартного HTML Filter, который пришлось править для защиты от ссылочного спама, в Drupal обнаружилось еще одно аналогичное место: заголовок комментария.

Для зарегистрированных на сайте пользователей, имя пользователя является ссылкой на профиль, если читающий не залогинен, то даже и ссылки нет. Для сторонних же пользователей, указавших при комментировании линк на сайт, имя является ссылкой на этот сайт. Конечно, эта ссылка защищена от гугла через rel=nofollow, но наши поисковики такого не понимают, а хотят noindex.

Патч: drupal-themeinc-noindex.diff.gz

Так как я не вижу никакого смысла в индексировании Яндексом юзерских ников анонимов, то ухищрения с яваскриптом не нужны, просто noindex и все.

Drupal, BlogAPI и теги

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

По идее, для этого предназначен Aggregator, но его интеграция с Taxonomy запланирована только в Drupal 7. Кроме того, pull мне очень не понравился, хочется push. Для push есть BlogAPI, там даже поддерживается установка категорий (тоже довольно диким способом, ибо информация о словарях недоступна, можно получить только список терминов), но вот установка тегов (т.е. терминов, которых в словаре может не быть) через стандартный BlogAPI невозможна. mt_tags - не поддерживаются и не обрабатываются.

Я уже почти поправил BlogAPI (всего то нужно задать один параметр конфигурации - в какой словарь класть теги, остальное все тривиально) и оно уже почти работало, но нашлось готовое решение.

Inline Tags делает все что нужно. Не стандартным путем (т.е. использовать готовое поле tags в blog-редакторе и передачу значений в mt_tags), но вполне приемлемым: список тегов пишется в [tags][/tags] и все работает (проверено).

Drupal: микроправки к BlogAPI

Все-таки Drupal пишут индусы. Пришлось по уши залезть в код, чтобы выяснить, отчего не работают metaWebLog.getCategories и mt.getCategoryList. Просто забыли проверить авторизацию, отчего, по счастью, просто все сломалось, а не стало отдавать все всем наружу. Не тестируют.

Патч: blogapi.diff.gz

Патч зашлю в Drupal сегодня.

Стандартное уведомление: если вы не знаете что такое патч, то он вам не нужен.

P.S. Работу с массивами в PHP проектировали ненатуралы.

Update: правка вошла в Drupal 6.5

nofollow-noindex патч для Drupal 6.4

Ссылками в комментариях спамят не только этот блог, но и мои сайты на Drupal (libraw.org,gpgpu.ru и так далее). В отличие от MovableType, антиспам-средства у Drupal развиты еще меньше, приходится пропускать без модерирования только зарегистрированных юзеров, но и это не вполне помогает.

Мировая часть проблемы в Drupal решена - ко всем ссылкам в юзерском контенте можно добавлять rel=nofollow, отчего спамить под гугл становится неинтересно. Остается яндекс, который rel=nofollow не понимает (насколько мне известно), но зато понимает "рамблеровский" (придуманный Димой Крюковым) тег <noindex>.

Сооответственно, нужно добавить три строчки кода к modules/filter/filter.module:

Сделано примерно так же, как для Movable Type:

  • Сама ссылка заменяется на явоскриптовую
  • В noscript,noindex, a.. rel=nofollow помещается слово [link] которое и становится ссылкой для Javascript-disabled people (стандартные стили у Drupal такие, что картинка переносится на новую строку и красивая стрелка не получается).

Стандартный дисклеймер. Если вы не знаете что такое патч, то вам все вышеописанное не нужно.

Ссылками в комментариях спамят не только этот блог, но и мои сайты на Drupal (libraw.org,gpgpu.ru и так далее). В отличие от MovableType, антиспам-средства у Drupal развиты еще меньше, приходится пропускать без модерирования только зарегистрированных юзеров, но и это не вполне помогает.

Мировая часть проблемы в Drupal решена - ко всем ссылкам в юзерском контенте можно добавлять rel=nofollow, отчего спамить под гугл становится неинтересно. Остается яндекс, который rel=nofollow не понимает (насколько мне известно), но зато понимает "рамблеровский" (придуманный Димой Крюковым) тег <noindex>.

Сооответственно, нужно добавить три строчки кода к modules/filter/filter.module:

Сделано примерно так же, как для Movable Type:

  • Сама ссылка заменяется на явоскриптовую
  • В noscript,noindex, a.. rel=nofollow помещается слово [link] которое и становится ссылкой для Javascript-disabled people (стандартные стили у Drupal такие, что картинка переносится на новую строку и красивая стрелка не получается).

Стандартный дисклеймер. Если вы не знаете что такое патч, то вам все вышеописанное не нужно.

nofollow-патч для MovableType, 3-я попытка

После высказанной критики, вчерашний патч пришлось усовершенствовать:

  • Картинка со ссылкой убирается в <noscript>, большинство посетителей ее не увидят.
  • Переход по ссылке делаем яваскриптом, через window.location=

Патч вот: patch-nofollow-img-js.gz

Понятно, что есть недостатки:

  • В статусной строке не отображается URL. Это тоже лечится яваскриптом, но уже лень т.к. просто присвоение windows.status= не работает в Firefox/Opera, нужно таймеры ставить.
  • Потерялось открытие ссылки в отдельном окне. Можно, наоборот, сделать через window.open, но тогда потеряется открытие в текущем. Счастья нет.

В этом блоге, впрочем, используется несколько другая версия патча, которая оставляет ссылки на мои сайты прямыми, а остальные открывает в новом окне. Не публикую т.к. не нашел разумного способа вытащить хотя бы URL текущего блога в том месте, где зовется nofollowfy();

MovableType: новый nofollow-патч, MT 4.21

Поапгрейдил варез на MovableType 4.21 (коммерческий, раз уж его всем раздают). Работает. Стало местами поприятнее выглядеть, а так я кардинальной разницы не вижу. Ну плагин для тредовых комментариев теперь прямо в поставке, но он у меня и так был.

Раз уж засунул туда нос, переделал свой патч для <noindex>. У старого была проблема в том, что сам текст ссылки не индексировался Яндексом (ибо ссылка была запихана в noindex целиком). Теперь ссылка устроена иначе - текст подчеркивается, а сама ссылка теперь в иконке (позаимствованной у Википедии). Пример можно посмотреть в любых комментариях, например тут.

Скачать патч можно тут:

  • patch-nofollow-img.gz. Возможно, вам захочется поправить URL картинки, но это уже сами.

Чтобы два раза не вставать, полный список остальных моих патчей к MT 4.x:

  • patch-monday-mt41.gz делает понедельник первым днем недели в стандартном календаре.
  • patch-rudate.gz - русские названия дат (переведен блок для итальянского языка, его и нужно ставить в настройках блога).
  • patch-dirify.gz - добавляет русские буквы в таблицы "дирификации".

Все патчи подходят к 4.21

Был миллион? Нет миллиона!

Поковырял 10 минут детектор доменных паркингов на черном квадрате и все сломалось. Недавно отмечали миллион на квадрате, на прошлой неделе было еще чуть больше (1007012) "настоящих живых сайтов", а стало 928332.

Ну значит еще раз инфоповод будет, где-то осенью... Если, конечно, не выяснится, что паркингов еще больше.

1000x1000=1000000 или очередной юбилей

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

Автоматическое обновление черного квадрата позавчера поздравило меня с приездом и выдало круглую цифру. Позволю себе скриншот:

1000000.png
Торопитесь увидеть, это продержится до следующей среды, а потом их станет еще больше.

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

XMLRPC Proxy: вопрос И ОТВЕТ!

Мучаюсь тут с MetaWeblog API: мои перловые изделия ничего, кроме system.listMethods позвать толком не могут, подозреваю косяк с авторизацией, который побороть пока не сумел.

В то же время, всякие w.bloggar и прочие ScribeFire c этим сервером общаются почти нормально, во всяком случае и список блогов получить можно и запостить выходит.

Отсюда вопроc: а есть в природе какой-нибудь удобный отладочный XML-RPC proxy ? Google находит нечто невнятное на питоне, но я на нем плохо розумию.

UPDATE: вы не поверите, но проблема была в том, что у меня был числовой пароль. Эти перловые клиенты, не задумываясь, слали <int>пароль</int> вместо <string>

Синхронизация комментариев ЖЖ-&gt;MovableType

У меня уже более полугода работает скрипт синхронизации комментариев из ЖЖ в MovableType. Мне тут даже попеняли, что не делюсь с народом...

За полгода он никаких значимых проблем не создал, работает, а значит можно и опубликовать и даже версию 1.0 присвоить:

ljcomments2mt-1.0.tar.gz

Копия Readme прилагается.

Технологическое

К сведению читателей и комментаторов имеются следующие уведомления и напоминания:

1. Общий фид комментариев, который тут пару недель не работал, теперь снова работает:

http://blog.lexa.ru/comments.xml
Каменты временами жгут, рекомендую. В фид включены и те комментарии, которые сабмитят читатели через ЖЖ.

2. Желающие читать комментарии к конкретной записи могут это делать по RSS. Над формой комментария каждой записи есть ссылка
все комментарии к этой записи вы можете Subscribe to feed получать в RSS-потоке - вот это оно и есть.
Присылание комментариев по E-mail я пока не осилил и скорее всего осиливать не буду.

3. Временно, до апгрейда сервера (1-3 недели), публикация комментариев производится асинхронно. Комментарии будут появляться на сайте через 1-3 минуты, а комментаторов это избавит от ошибок Proxy timeout и прочих подобных.

Pages

Subscribe to Web