Миграция 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.

Drupal: pathauto и транслитерация

В качестве короткой заметки на тему вчерашнего и ряда следующих текстов.

Для Drupal есть модуль Pathauto, который делает человеко понятные урлы: заменяет пробелы на минусы (или подчеркивания), меняет ужасные /taxonomy/term/NNN на /tags/имя-тега и так далее.

Все из себя настраиваемое и вообще хорошее, если бы не одно но:

  • Оно умеет транслитерацию (в частности, URL данного текста странслировался бы в ...i_transliteratsiya.....
  • Оно умеет формировать URL-ы из кучи макросов (дата, рубрика и все такое), этого богатства более чем хватает для жизни.
  • Но! Включение транслитерации - глобальное. Или мы транслитерируем все (URL заметок, теги и т.п.) или не транслитерируем ничего.
А у меня в блоге принято, что теги русские, а URL заметок - латинские.

Короче, патч: pathauto-transliterate.diff.gz

Если в паттерн для формирования URL включить текст 'no-transliterate-me', то данный текст будет удален, а то что осталось - не будет транслитерировано.

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

К сожалению, модуль написан достаточно плотно, транслитерация делается на очень ранней стадии, поэтому сделать более удобные макросы по месту [notr-macro] и [macro] - сходу не получилось.

Автор слышал о проблеме и справедливо замечает, что и размножение макросов и отдельные настройки для каждого типа данных - плохо. И я с ним согласен, но вот мне - надо,

При случае, подумаю про эту тему еще.

Миграция MovableType -> Drupal. День 1: постановка задачи

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

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

Короче, не нравится - не читайте :)

Статус этих записок

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

Зачем переезжать

Моя причина очень простая: мне надоело поддерживать две платформы (Drupal и Movable Type). При этом, по комплексу свойств Друпал побеждает, а значит с MT пора прощаться. А новогодние каникулы - хороший повод позаниматься чем-то полезным.

Коня и трепетную лань

opencl.jpg Мучал ATI Radeon HD5870 и NVidia GTX280 в одной машине на предмет взаимной поддержки OpenCL. Поддерживают. С оговорками, но жить можно. Написал на эту тему небольшой текст:

OpenCL, NVidia, ATI и все все все....

В процессе читал AMD-шные форумы, вычитал страшного, много думал:

OpenCL performance issues
There are known performance issues for HD4XXX series of cards on OpenCL and there is currently no plan to focus exclusively on improving performance for that family. The HD4XXX series was not designed for OpenCL whereas the HD5XXX series was. There will be performance improvements on this series because of improvements in the HD5XXX series, so it will get better, but it is not our focus.

For example, if you are using local memory, they are all currently emulated in global memory. So it is possible you are going out to main memory twice as often as you do on NVidia. This can cause a fairly large performance hit if the application is memory bound. On the HD5XXX series, local memory is mapped to hardware local and thus is many times faster than the HD4XXX series.

Короче, слушайте вашу группу валенки. Формально OpenCL на HD4xxx поддержан, а фактически нужно совершенно другой kernel писать, который локальную память не использует.

А 48xx - важный кусок рынка, их много навыпускали и формально они совсем неплохие. Теперь и в этом сорте не скажу чего придется разбираться. Хорошо хоть про 2xxx/3xxx просто рекомендовано забыть.

P.S. Сравнивая два SDK, видно что ATI в области GPGPU очень заметно отстает (disclaimer: это лично мое мнение по результатам одного дня изучения :). Речь именно о качестве SDK: документации, примерах и тому подобных вещах.

Когда был Ленин маленьким....

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

По блогам бегает боян: Сочинение ЕГЭ о Ленине (четверка:).

Ну, типа, смешно, да.

А вот тот же текст, но от 2000-го года: http://anekdot.ru/a/an0508/o000620;10.html.

ЕГЭ, говорите? В 2000-м году? А сколько лет этот текст мариновался, прежде чем на анекдот попал?

Ну ладно, бабушку-профессора развели, дали текст с анекдота.ру, сказали что coчинeниe о Лeнинe, написанное в рамках ЕГЭ в Волгограде, но не о бабушке речь.

Наука о контактах

Вот такие вот приятные сообщения стал я получать от системы.

Dec 15 07:39:40 home-gw kernel: ad2: TIMEOUT - FLUSHCACHE48 retrying (1 retry left)
Dec 15 08:02:37 home-gw kernel: ad2: TIMEOUT - FLUSHCACHE48 retrying (1 retry left)
Dec 15 08:31:23 home-gw kernel: ad2: TIMEOUT - FLUSHCACHE48 retrying (1 retry left)
Dec 15 08:55:29 home-gw kernel: ad2: TIMEOUT - FLUSHCACHE48 retrying (1 retry left)
Dec 15 08:58:23 home-gw kernel: ad2: TIMEOUT - FLUSHCACHE48 retrying (1 retry left)
Dec 15 09:01:10 home-gw root: ZFS: vdev I/O failure, zpool=zroot path=/dev/ad2p2 offset=412440274432 size=1536 error=5
Dec 15 09:01:10 home-gw kernel: ad2: TIMEOUT - WRITE_DMA48 retrying (1 retry left) LBA=805547573
Dec 15 09:01:10 home-gw kernel: ad2: FAILURE - WRITE_DMA48 
Как видно, несколько раз в час.

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

Вот и верь после этого в электронику.

Epson делает как ему сказано!

Два с половиной года назад защелка на передней панели Epson 3800 сломалась прямо в первый же день. И я вместо нее приклеил магнитики.

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

С Эпсона, очевидно, пузырь, а то я пойду судицца!

Про гамуты и прочий Advanced B&W у 3880 в сравнении с 3800 напишу недели через две, маловероятно что раньше....

root on ZFS

Для тонких ценителей.
zroot on / (zfs, local)
zroot/home on /home (zfs, local)
zroot/tmp on /tmp (zfs, local, nosuid)
zroot/usr on /usr (zfs, local)
..... и еще с десяток томов под разные нужды....
3 диска, RAIDZ1, 4 терабайта места, "домашний роутер".

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

В частности, расширять root pool нельзя, поэтому идея-фикс по переносу данных без многократного переписывания данных не проканала. А была она такая:

  • Было два двухтерабайтника в зеркале, место кончилось, купил третий.
  • Разбиваем зеркало, из двух дисков (один старый, один новый) делаем RAIDZ1, переписываем туда данные.
  • Добавляем второй старый диск в тот же RAID.
Увы, пришлось вылить на внешние диски, собрать массив, налить обратно....

По органолептическим ощущениям, диски сильно меньше нагружены, чем в gmirror, отчего меньше греются. Какой-то статистики наберу за неделю, расскажу....

Тариф "не лох"

Вниманию абонентов МТС, имеющих неиспользуемые симки: доставайте вазелин, нагибайтесь....

Наглише бабкен пиздунг-2

видео по теме.

В каком году нам обещают смену оператора с сохранением номера?

И канадской почты тоже остерегайтесь

canadapost.JPG Посылка из Канады:

  • Отправлено 27 сентября 2009.
  • Получено 03 декабря того же года.

Не, естественно наземка, самолеты так медленно не летают. А почему наземка? А потому:

  • Xpresspost (EMS) не возит в Россию.
  • Авиапочта - возит, но не страхует. А отправитель очень хотел страховки: Россия, медведи на улицах, балалайки, водка.

Судя по трекингу, посылка жалких 20 дней просто лежала на складе, потом 40 дней плыла морем, потом еще за 2 дня ехала в Москву (из Питера, наверное), а дальше все как обычно.

Список того, чего надо остерегаться на почтовых просторах - пополнен.

О несовершенстве мира

Второй день собираю Qt 4.6-RC при помощи VS2008, с каким-то очень переменным успехом:

Если собирать Qt SDK, то ломается при сборке вебкита, moc генерирует файл нулевого размера. Ошибка висит в Qt-шном багтрекере со статусом "не удалось воспроизвести", гугление показало что она бывала и на Qt 4.5.2, хотя у меня 4.5.2 собирался без проблем.

Кроме того, не срабатывали такие вот строчки:

#if QT_VERSION >= 0x040400
    void unsupportedContent(QNetworkReply *reply);
    void downloadRequested(const QNetworkRequest &request);
#endif
хотя версия у меня самая что ни есть 0x040600

При сборке варианта без Qtcreator наблюдался целый ворох странных проблем, тот же moc.exe создавался без прав на исполнение. По десятому разу вроде полегчало и конкретный WebKit вроде собрался без ручных пинков (с пинками, т.е. подменяя файл длины на нормальный - получалось и в первом случае, но неаккуратненько).

Одновременно узнал про jom, на 4-ядерном процессоре ошибки компиляции возникают вчетверо быстрее, ура!

Я вот как подумаю, сколько сил стоит поддержка Qt на всем чудовищном мировом зоопарке, так мне сразу хочется год эдак в 85-й.

Установка Snow Leopard на PC с помощью USB-флэшки

[Оглавление раздела Hackinthosh]

hackintosh1.jpg На неделю позже, чем обещал, но я добил этот текст!

После успешной установки Snow Leopard на PC я оказался завален почтой, общая суть которой сводилась к тому, что Prasys пишет не очень понятно, да и английского не розумию, напиши пожалуйста на русском (если честно, то после чтения Хакинтошных форумов у меня тоже временами складывается впечатление, что я тоже не понимаю английского).

Рекламируемый мной Empire EFI необычайно удобен, если все работает. Впрочем, судя по чехарде версий на сайте автора (за 2 недели с 1.00 до 1.07R2), да и по моему опыту, оно работает далеко не всегда.

Одна из наиболее частых проблем связана, к несчастью, именно с DVD-приводами. Современные чипсеты Intel не содержат старого (параллельного) контроллера ATA (PATA), интерфейс к старым DVD, дискам и т.п. делается контроллерами третьих фирм (чаще всего JMicron). В этом месте начинается секс с драйверами (kext, kernel extension), таймаутами, настройками и т.п.

Описанный ниже способ установки с USB-флэшки не использует DVD. Помимо этого, метод обладает рядом других достоинств:

  • Ставится быстрее. Большинство современных флэшек гораздо быстрее оптических приводов, особенно по скорости позиционирования.
  • Модификация загрузочных блоков, расширений и т.п. не требует перезаписи CD/DVD, а значит экспериментировать можно быстро.

Правда для изготовления загрузочной USB-флэшки нам потребуется работающая Mac OS. При реальной установке я все манипуляции делал на настоящем Маке, но при подготовке данного текста повторил это упражнение в Snow Leopard, установленном в виртуальной машине.

Pages

Subscribe to blog.lexa.ru: все статьи