Monthly Archives: Январь 2007

Perl, DBI, utf8

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

Имевшийся готовый генератор html-галереи не подошел, потому что не умел коллекционировать теги и генерировать по ним тематические каталоги.

Поскольку требовалось сделать страницы в кодировке Windows (cp1251), то лучше всего и быстрее всего было бы сделать это на Visual FoxPro — потому что базу проектировать и пополнять удобно. А писать еще и интерфейс для ввода данных мне лень.

Но лицензионного VFP у меня нету (Windows, если поискать, найдется).

Первая приходящая на ум альтернатива — HSQLDB. Но уж больно она аскетична, да и не очень хочется на J2SE писать, для такого Perl больше подходит. И обратились мои взоры к хорошо знакомому MySQL 5, для которого имеется опять-таки свободный phpMyAdmin, который я и намерен использовать для ввода данных. А при необходимости в базе MySQL и файлы можно хранить будет (бэкапить все это хозяйство одним файлом проще).
Забил немного тестовых данных. Как и положено правильному юзеру, все таблицы в базе — в utf8.

Оказывается, Perl не понимает utf8. Задница.

Исследования показали, что в последние несколько месяцев сия проблема активно решалась, однако часть юзеров мигрировала на PostgreSQL, DBD-драйвер которого имел кривую, но работающую поддержку UTF.

Поставил свеженький драйвер DBI:mysql. Нашел. как это должно выглядеть в коде. Примерно так.


#!/usr/bin/perl
...
use DBI;
use encoding 'utf8';
...
$dbh = DBI->connect("DBI:mysql:$database:$hostname",$user, $password);
open(FL, "> catalog.html") || die "Can't open file \n";
binmode(FL, ":utf8");
print FL <<EOF;
абвгдеё\n
123456\n
EOF
$dbh->do("set character set utf8");
$dbh->do("set names utf8");
$statement="select * from tag";
$sth = $dbh->prepare($statement) or die "Can't prepare $statement: $dbh->errstr\n";
$rv = $sth->execute or die "can't execute the query: $sth->errstr";
while(@row = $sth->fetchrow_array) {
print FL "$row[0] $row[1]\n";
}
$sth->finish;
close FL;

Вот без SET NAMES — не работает.

Ну хорошо, хоть так.

1 комментарий

Filed under DBMS, design, drivers, internet, MySQL, Perl

Перерывы надо программировать

Workrave

Вот такая очень мотивирующая софтина. Программирует мини-перерывы, перерывы на чай/кофе и вообще полный рабочий день сидения за компьютером!

Очень полезно. Читайте СанПиН и программируйте свой отдых.

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

Более всего радует опенсорс и кроссплатформенность софтины.

Оставьте комментарий

Filed under Linux, opensource, organizer, PIM, Windows

Оптимизаторам

Иди в баню, оптимизатор

Оставьте комментарий

Filed under плакат, SEO

Ждем солярку.

Заказал диск с Solaris 10 — ждем-с.

Впечатления будут здесь.

3 комментария

Filed under Java, Solaris, Sun

Про коллективно создаваемый вебдваноль.

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

Все это очень спорно.
Огромное количество информации бесполезно в силу своей огромности.
Поисковики — да, это должно рулить.
Агрегаторы и т.д. и т.п. — сильно сомневаюсь.
Невозможно “носить с собой” горы информации. Надо иметь базовые знания, алгоритмы, и “средства получения ответов на постоянно возникающие вопросы”. А не нереальных размеров библиотеку (к тому же с непонятным уровнем доверия к информации, написанной тысячами неизвестных авторов).

1 комментарий

Filed under blogs, internet, web, web20