Skip to Content

Январь 2010

ljcomments2drupal 0.02

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

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

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

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

Таможня (не) берет добро

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

Несколько дней назад издание Сnews сообщило нам:

С начала 2010 г. товары, приобретаемые россиянами по почте в зарубежных интернет-магазинах и каталогах, приравнены к обычным международным отправлениям. Ранее же товары, пересылаемые от одной зарубежной организации в адрес нескольких лиц в России, приравнивались к импортируемому товару, который оформлять и растаможивать должно было уполномоченное лицо продавца в России, отмечается в сообщении.

Написано несколько загадочно, но так оно и оказалось на самом деле.

Цветовая, говорите, наука?

О сколько нам открытий чудных....
Пушкин
А ты, Вовочка, молчи, а то мы всю физику к ..уям сведем...
анекдот

О консенсусе

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

Ну вот есть файл (RGB), к нему прилагается профиль (ICC), следует ожидать что на одном и том же устройстве (LCD мониторе, чтобы быть конкретным) он при включенном Color Engine отобразится более-менее разумно и одинаково.

Естественно, предполагается что все необходимые условия соблюдены: монитор отпрофилирован, показываемые цветовые данные привязаны к цвету (снабжены профилем), условия наблюдения постоянные, программа показа розумиет ICC, наливай да пей бери и выводи.

Конечно, жизнь несколько богаче и 2.5 года назад я уже исследовал проблему точности CMM (Color Management Module) и написал про это серию статей. Но я наблюдал в эксперименте разумные ошибки - 5-6, а для хороших CMM и 8 бит данных сохранялись, отклонения от смены CMM в худшем случае были заметны глазом, но не были фатальными.

Однако свежее письмо в Colorsync users и прилагавшийся к нему файлик заставили пересмотреть вышеописанное мнение. Спасибо добрым людям, что обратили внимание, не дали пройти мимо.

Да, на картинке слева вы видите кусочек из этого файла, показанный на одном и том же мониторе, с одним и тем же профилем монитора, одним и тем же профилем при цветовых данных файла, одной и той же программой (Adobe Photoshop) с одними и теми же настройками за исключением одной....

Опять про wordstat

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

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

Курс по NVidia CUDA для всех желающих (Москва)

В прошлом году я прощелкал, а в этом - нет, успеваю анонсировать.

С 24 февраля по 12 мая, еженедельно, по вторникам, на ВМиК МГУ (Москва, Воробьевы горы, м. Университет) будет читаться курс программирования NVidia CUDA для всех желающих.

Процитирую из анонса:

Московский Государственный Университет им. М.В. Ломоносова совместно с компанией NVIDIA приглашает заинтересованных студентов пройти специализированный курс "Архитектура и программирование массивно-параллельных вычислительных систем" на основе технологии CUDA. В рамках курса вы узнаете о современных многоядерных архитектурах, моделях программирования и основополагающих принципах, лежащих в основе построения эффективных параллельных алгоритмов. Вы также познакомитесь с реализациями типичных алгоритмов и задач, возникающих в цифровой обработке сигналов, математическом моделировании и гидродинамике. По окончании курса вы сможете применить свои знания на практике уже сегодня при решении вычислительноемких задач в ваших курсовых и дипломных работах. Приобретенные знания необходимы для всех, кто планирует связать свое будущее с высокими технологиями и высокопроизводительными вычислениями. Всем студентам, успешно завершившим курс "Архитектура и программирование массивно-параллельных вычислительных систем" будут выданы дипломы.

Еще о Mirex Tilt-Shift адаптере

Про Mirex Tilt-Shift adapter я уже неоднократно здесь писал. Напомню на всякий случай, что этот адаптер позволяет ставить среднеформатную оптику на узкие камеры и получать уклон(ы) и подвижки. Уклон всегда перпендикулярен подвижке, но вся конструкция вращается (как в старых T/S-объективах Canon в заводской конфигурации).

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

Пришло время это все документировать.

AMD/ATI и GPGPU

Я как-то не уследил, потому что AMD/ATI-шными видеокартами начал интересоваться с выходом HD5xxx, а оказывается все очень весело. На gpgpu.ru это уже пообсуждали, ну я сюда наброшу, в более концентрированном виде.

Раньше высокоуровневым средством для разработки считалок на видеокартах у ATI был Brook+. Однако начиная с какой-то беты ATI Stream SDK 2.0 Brook из SDK исчез.

Читаем в ATI-шном форуме (это август-2009):

Yes, this SDK 2.0 beta is for CPU only. It focuses on OpenCL 1.0 for CPU. Brook+ is now available on SourceForge: http://sourceforge.net/projects/brookplus

Ну ладно, Stream SDK Beta-1 вообще не поддерживает никаких видеокарт, смешно.

ljcomments2drupal

LJ Sync за несколько дней эксплуатации совершено опротивел. Изрядную часть его достоинств я почикал, оставил только импорт комментариев, но и с этим оно справляется не на пятерку:

  • Комментарии с пустым сабжектом - так и оставляет пустым, в результате RSS без ссылок, список свежих комментариев - тоже без них. Поправить недолго, но...
  • Уведомления о ЖЖ-комментах приходят дважды, один раз из ЖЖ, второй раз из моего блога. Это, типа, фича.
  • Работает долго т.к. каждый раз разбирает многомегабайтный XML в котором весь мой ЖЖ за все времена.

Верните wordstat!

Если кто знает, кого и как пнуть, вы там пните, не стесняйтесь.

А пока - Яндекс пролюбил wordstat.

Запрос икеа, частота 193 тысячи за месяц, все нормально, список слов:

Запрос 'икея', частота в полтора раза выше (304 тысячи), а вместо списка слов - хрен:

Про школьный интернет

Что бы не злопыхали злопыхатели, а успех школьного интернета совершенно очевиден. В 2.5 раза за год. Довольно случайно наткнулся именно на это слово, а оно - очень показательно.

для самостоятельного изучения

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

Жалко, что более длинных данных нет у Яндекса.

Drupal LJ Crossposter: маленький фикс

Как заметили внимательные читатели, при кросспоcте в ЖЖ иногда остается лишний 'Read More' он же lj-cut.

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

Автор исправил проблему в версии 1.6

Друпал - усугубляем бардак с алиасами

У меня исторически имеет место бардак с именами URL: все они порождены из заголовков записей, но

  • В большинстве случаев дефис заменен подчеркиванием (и в заголовок данной записи специально добавлен дефис, чтобы проверить).
  • В некоторых случаях дефис оставлен дефисом, это привет MovableType, настроенного по умолчанию из лета 2008 года.
  • В некоторых случаях дефис вовсе скушали, какая-то версия MT заменяла конструкцию ' - ' не на '___' и не на '_-_', а на '__'.
Причем, как выяснилось по логам, есть внешние ссылки на разные представления одного и того же, уж не знаю откуда они взялись.

Проблема лечится вот таким вот SQL-оператором (regexp_replace() - чисто постгресовское, MySQL-аналог найдите сами. Это только для nodes, с таксономией в моем случае проблем нет совсем.

  1.  insert into url_alias(src,language,dst) select src,language,regexp_replace(dst,'-','_','g') from url_alias where src like 'node%' and dst like '%-%';

Миграция Movable Type -> Drupal. Синхронизация с ЖЖ, наведение марафета, финал

Руководство по прыжкам с парашютом, издание второе, исправленное

Теги/рубрики/категории

При миграции контента с тегами и категориями был предложен такой метод

  1. Делаем категории тегами (чтобы не заполнять значения).
  2. Импортируем.
  3. Меняем тип таксономии категории на "Multiple select/Mandatory".
  4. Правим пути к категориям.

Увы, но где-то на этом пути теряются категории у изрядной части записей и теги - у единиц, повторный импорт лечит только частично. Я подозреваю, что крышу рвет, если есть теги, совпадающие с категориями, но не уточнял.Теги портит LJ Sync, пришлось его еще шашкой....

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

С шашкой на Drupal: LiveJournal Sync Ugly Hack

Синхронизация Drupal с ЖЖ оказалась гораздо более простым делом, чем в случае Movable Type:

Ну, если быть точным, то для LJ Sync нужно поставить еще патч из его pending patches, а то синхронизированное туда приезжает тут же обратно, второй копией.

А если быть совсем точным, то LJ Sync не работает с PostgreSQL. REPLACE INTO {table}, убил бы нафиг....

Но. LJSync делает куда больше чем не нужно:

  • Вытаскивает из ЖЖ записи, которые там появились независимо. Это хорошо, если есть адын standalone-блог и адын ЖЖ, но у меня два стандалона гадят в один ЖЖ.
  • Темизирует look-and-feel Друпала "под ЖЖ". С синенькими заголовками комментариев и заголовками записей в ЖЖ-шном духе.
  • Для всех ЖЖ-шных комментаторов заводится аккаунт на Друпале. Оно так и на MT у меня было, но на MT эти аккаунты были бесправные, а тут в них можно авторизоваться (если OpenID включить) ну и типа писать.
Всего этого я ну никак простить не мог.

Миграция MovableType -> Drupal. День 2: миграция контента и URL

Предуведомление

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

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

Кроме того, никакими enterprise-features, вроде транзакций или обработки ошибок я категорически не заморачивался. Предполагается, какбэ, что импортом данных мы занимаемся тихо в уголочке, поступлением новых данных на старый сайт можем управлять, а после завершения импорта просто подменим сайт на скаку.

Импорт записей

Задача: вытащить записи (посты) из БД MovableType и запихать их в БД Drupal в виде объектов типа Story. Создание Drupal-объекта связано с заполнением нескольких таблиц (node, node_revisions и прочие node_*, url_aliases), пополнением таблицы тегов, другими словами эту работу не хочется делать вручную (SQL-запросами), а хочется перевесить на внутреннюю механику Drupal (ведь при создании записи оно как-то само все делается...).

План работ тривиален и прост:

  • Ставим модули Table Wizard и Migrate.
  • Добавляем нужные поля в структуру данных записи Story (не вручную, включением готовых модулей).
  • Запускаем скрипт, который перенесет нам данные постов в БД Drupal.
  • Импортируем образованную таблицу с постами в Table Wizard.
  • Делаем импорт через Migrate.
  • Полируем результат.
Первый пункт особых вопросов вызвать не должен, обычные модули. За собой потянут Views и Schema, их тоже надо выкачать и поставить, до кучи полезен и Views UI.


.