Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет Yuriy Al. Shirokov ([info]yushi)
@ 2003-06-07 20:41:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Настроение:Поганое
Музыка:The Doors

Вопрос: Perl, XML::Parser и русские буковки.
Опять про компы, да ещё длинно, да ещё вопрос - посему закатываю.



-Скажите, где у меня ошибка?
-В ДНК!

Старый анекдот.



Мы тут думаем над сайтом для нашей группы. В связи с этим хотелось найти какую-нибудь, типа, CMS со следующими странными свойствами:
-Open source. Думаю, понятно, почему.
-На Perl'е. Именно Perl, поскольку - поначалу, конечно - хотелось бы сидеть на бесплатном хостинге. А на многих бесплатных хостингах с возможностью запускать собственные скрипты почему-то не любят PHP.
-Чтобы не хотела MySQL - тоже по причине бесплатного хостинга
-Генерящая статический HTML - по многим причинам. Чтобы были человеческие URL, чтобы сервер особо не грузить и т.д.

Сформулировав эти требования, я радостно полез в сеть, думая, что сейчас найду кучу подобных уродцев, и останется только выбрать. Не тут-то было! Мне не удалось найти ни одной подобной программы.

По этому поводу первая часть вопроса: дорогие френды, не знает ли кто-нибудь какой-нибудь программы с вышеперчисленными свойствами? Если знаете, то подскажите, пожалуйста; а дальнейший бред лучше не читать. Спасибо.

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

Нет, я её даже почти написал. Но сегодня я наконец догадался проверить написанные скрипты не на своей машине (где всё работало), а на реальном web-сервере одного бесплатного хостинга. И облажался по полной.

Дело вот в чём. Я за каким-то хреном решил, что хранить часть информации будет удобно в XML, и, соответствено, надо использовать использовать модуль XML::Parser. И поначалу это казалось очень удачной идеей - до того момента, пока я не понял, что на моей машине русские буквы после любых парсеров остаются русскими буквами. А на сервере хостинг-провайдера превращаются в крокозябры.

Об этом надо было подумать заранее, потому что в документации на XML::Parser я, конечно, читал, что про существование русских кодировок он не знает вообще, а разобранные строки отдаёт в принципе только в UTF-8. Но меня смутило, что на локальной машине, несмотря на это, всё работало =(

Можно, конечно, плюнуть на это дело; можно всё переписать заново - но обидно, я уже потратил на это дело некоторое время, и вряд ли теперь у меня будет возможность ещё раз проделать такую работу. А главное, эта проблема наверняка решаема. Если кто-нибудь случайно знает, как на самом деле должны взаимодействовать XML::Parser и русские буквы, расскажите, plz.

ЗЫ Конечно, для таких вопросов есть специальные эхи, форумы и т.д.; но, честно говоря, ужасно стыдно лезть со своими идиотскими вопросами в места, где серьёзные люди обсуждают серьёзные проблемы. Я знаю, что "ответ в эхе - самовыражение, ответ лично - техническая поддержка"; этот вопрос я решил запостить на случай, если кто-нибудь хорошо знаком с предметом и ответ не потребует от него особенных усилий. Заранее спасибо ещё раз.


(Добавить комментарий)


(Анонимно)
2003-06-07 07:06 (ссылка)
1) В общем, можно обойтись без CMS. xsltproc + make + собственный простой dtd (или website docbook)
2) То, что XML::Parser Отдаёт строки в utf-8 это фича, а не бага ;) Бороться с этим не надо, надо этим ползоваться. Другое дело, что он для простых задач, пожалуй, излишен лучше пользоваться срудствами более высокого уровня (XSLT)
3) Лучше задать этот вопрос в какой-нибудь конференции, ответов действительно будет больше;)
4) Но можно также спросить и меня лично ;)
Антон boyarsh at ru dot echo dot fr

(Ответить)


[info]yushi@lj
2003-06-07 09:03 (ссылка)
1) В общем, можно обойтись без CMS. xsltproc + make + собственный простой dtd (или website docbook)

Но ведь, насколько я понимаю, с такой схемой довольно сложно организовать какие-либо средства взаимодействия с пользователем (вроде гостевой книги). Кроме того, не хочется собирать сайт на чьей-нибудь локальной машине, а потом в виде готовых HTML-файлов выкладывать в сеть - это означает, что обновлять сайт можно будет только с одного компьютера, а это неудобно. Я помню, как решена эта проблема на сайте АБ - с помощью CVS; но у нас сейчас нет машины, на которую можно было бы положить под CVS исходники сайта; а кроме того, это уменьшит удобство и надёжность - кроме сервера хостинг-провайдера, зависеть ещё и от машины, на которой поднята CVS?

2) То, что XML::Parser Отдаёт строки в utf-8 это фича, а не бага ;) Бороться с этим не надо, надо этим ползоваться.

Я бы с радостью, но на том сервере, который я использовал для экспериментов, всё должно быть в cp1251 (потому что у них баннеры в этой кодировке). Может, можно как-то перекодировать?

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

В том-то и дело, что для наших задач XSLT - вещь, с одной стороны, избыточная (для простого разделения дизайна и контента хватит и SSI), а с другой стороны - недостаточная (гостевую книгу или новости, обновляемые через Web, с помощью XSLT, afaik, сделать довольно тяжело). Кроме того, на сервере хостинг-провайдера должен быть какой-нибудь xsltproc, так ведь? а в нашем случае этого нет.

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

3) Лучше задать этот вопрос в какой-нибудь конференции, ответов действительно будет больше;)

Про конференции я уже писал - ламеров нигде не любят. =) Кроме того, я знаю, что мне посоветуют - платный хостинг. На который можно взгромоздить LRN или там PostNuke - да, в общем-то, при наличии php+MySQL выбор почти безграничный. Другое дело, что под наши задачи платных хостинг ну откровенно избыточен! Не готовы мы сейчас платить под $100 в год за эксперимент.

4) Но можно также спросить и меня лично ;)

Спасибо.

(Ответить) (Ветвь дискуссии)


(Анонимно)
2003-06-07 21:55 (ссылка)
1) посмотри в сторону XML::XSLT
2) 1. Text::Iconv
2. метод поддержки гостевой книги может отличаться от метода поддержки новостей и прочего контента. Я всё-таки настоятельно своетую глянуть в сторону XSLT так как самомописные преобразователи XML имеют тенденцию разрастаться и усложняться...

Антон

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi@lj
2003-06-08 00:34 (ссылка)
1) посмотри в сторону XML::XSLT 2) 1. Text::Iconv

На сервере, на котором я всё это безобразие гоняю, их нет... Да, видимо, попыток достановки модулей Perl'а из-под юзерского аккаунта мне не избежать...

2. метод поддержки гостевой книги может отличаться от метода поддержки новостей и прочего контента. Я всё-таки настоятельно своетую глянуть в сторону XSLT так как самомописные преобразователи XML имеют тенденцию разрастаться и усложняться...

Что чтения документации по XSLT мне не избежать, я уже понял... =) Другое дело, что в простых случаях для поддержания собственно контента, ИМХО, никакой XML вообще не нужен. Собственно, я его и не использовал, так что там нечему разрастаться и усложняться. Потребность в XML воникла как раз при попытке "малой кровью" написать скрипт обновления новостей через web и гостевую книгу. XSLT (afaik, опять же) для этих задач, в общем, не заточен...

Конечно, можно было выдумать собственный формат хранения этих данных и не мучаться - всё бы уже работало - уж DBM какой-нибудь есть просто на любом *nix'е. Но вот как разрастаются и усложняются доморощенные форматы, я знаю не по наслышке... Кроме того, меня купило, что через двадцать минут после прочтения доки на XML::Parser у меня был (якобы, как выяснилось) работоспособный код. Вот и возникло искушение в кои-то веки сделать всё по-человечески.

...Вообще, я понимаю, что совершил классическую ошибку ламера. В надежде сделать всё просто и быстро полез в малознакомую область и, естественно, облажался. Видимо, пора наконец сделать то, что надо было сделать с самого начала - ввести в Google что-нибудь вроде "Perl CGI CMS XML XSLT" и читать до просветления... =(

(Ответить) (Уровень выше)

Вести с полей.
[info]yushi@lj
2003-06-07 10:56 (ссылка)


В прошлой пятилетке советская экономика стояла на краю пропасти. А в этой
сделает большой шаг вперёд.
Старый анекдот.



Ага, мы движемся вперёд (см. эпиграф). Действительно, как и предполагал [info]max_ushakov@lj, смотреть надо было в сторону XML::Encoding. Даже не её самой, а, хм, продуктов её жизнедеятельности - откомпилированных кодовых таблиц. После того, как я подсунул в /cgi-bin своего сервера файл windows-1251.enc, скачанный отсюда (http://uucode.com/xml/perl/index.html) и заменил строку
<?xml version="1.0" encoding="ISO-8859-1"?>
на
<?xml version="1.0" encoding="windows-1251"?>
в самих xml-файлах, хаос поуменьшился - вместо безобразных крокозябр в неизвестной кодировке скрипт теперь выдаёт вполне читабельный текст... в Unicode. =) Как теперь заставить его перекодировать текст из UTF-8 обратно в CP1251?

(Ответить)


[info]yegor_@lj
2003-06-07 11:06 (ссылка)
А вот интересно, Юрка, можно на моем компе, постоянно подключенном быстро к сети со статическим IP-адресом, сделать WWW-сервер и что для этого нужно? Комп под виндоус, но FTP-сервер под ним уже есть.

(Ответить) (Ветвь дискуссии)


[info]yushi@lj
2003-06-07 12:43 (ссылка)
А чего конкретно-то хочется?

Вообще WWW-сервер поднять, даже под Виндами - это довольно просто. Тот же Apache вполне живёт на виндовых машинах. Другой вопрос - просто ли будет сделать так, чтобы он был виден снаружи и обеспечить относительную безопасность. Этот процесс под Linux'ом-то довольно смутно представляю, а под Виндой так просто никак.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]haron@lj
2003-06-07 13:01 (ссылка)
сделать так, чтобы он был виден снаружи

если машина стоит за файрволом - то открыть доступ на 80-й порт, если нет - то вообще ничего. По IP-адресу машина будет доступна.

и обеспечить относительную безопасность

наличие нормально настроенного Апача не сильно влияет на безопасность в виндах ;)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yegor_@lj
2003-06-08 07:08 (ссылка)
Понял! Спасибо. У меня, правда сейчас на этом компьютере стоят, извините за выражение, Win98 (единственное, что нашлось под рукой в этой стране), и под ними ничего делать не хочется. Может, у кого есть толстый канал и кто мне может на FTP залить XP, или к себе выложить? (Юрка, прости за оффтопик-дискуссию в твоей ленте) Если не найдется такого, то - уже осенью, когда вернусь из Москвы.

(Ответить) (Уровень выше)


(Анонимно)
2003-06-07 22:01 (ссылка)
Пойти на www.apache.org, взять бинарники для win32, поставить согласно инструкции, подписаться на соответстующий список рассылки по security (с анонсами дыр и заплаток) -- чтоб было безопасно ;)

Антон

(Ответить) (Уровень выше)


[info]yushi@lj
2003-06-07 12:42 (ссылка)
Я попытался использовать модуль Encode, но Perl на сервере такого не знает =( Нет никой возможности доставлять модули в свою домашнюю директорию под юзерским логином?

Да, и ещё - XML::Parser на локальной машине таки отдаёт мне текст в cp1251. Если исходить из документации на этот модуль, то это - глюк (только не очень понятно, этой сборки XML::Parser или Alt Linux в целом).

(Ответить) (Ветвь дискуссии)


(Анонимно)
2003-06-07 21:59 (ссылка)
perl 5.8? Там многое иначе с кодировками.

Антон

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi@lj
2003-06-08 00:35 (ссылка)
perl 5.8? Там многое иначе с кодировками.

Угу. А на сервере 5.005_03... Что, мягко выражаясь, не упрощает... =(

(Ответить) (Уровень выше)


(Анонимно)
2003-06-07 22:39 (ссылка)
А по поводу доустновки модулей спроси у groups.google.com в области *ru.perl -- там это вопрос обсуждался много раз.

Антон

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi@lj
2003-06-08 00:37 (ссылка)
А по поводу доустновки модулей спроси у groups.google.com в области *ru.perl -- там это вопрос обсуждался много раз.

О, значит, это может быть реально? Это здорово, спасибо.

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2003-06-08 08:25 (ссылка)
Может быть, а может и не быть. Как хосетр настроил. Если gcc недоступно тебе по правам -- обломишся.

Антон

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi@lj
2003-06-08 10:31 (ссылка)
gcc мне дают. И даже wget мне дают. И ftp-клиент. Сейчас попробую забрать Encode с CPAN и поставить.

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2003-06-08 20:33 (ссылка)
Ну тогда всё в твоих руках. Используя perl через CGI в качестве оболочки можно что угодно поставить ;)

Антон

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi@lj
2003-06-08 22:28 (ссылка)
Я обломался по самой идиотской причине - "out of memory" (по крайней мере, именно эту ошибку мне всё время выдают).

Вообще, судя по времени, которое на всё это затрачено, я явно на неправильном пути. Видимо, проще действительно будет поискать хостинг, на котором дают, XML::Sablotron или XML::XSLT и не писать ни с чем не совместимых неуклюжих монстров, изобретая велосипед. Вопрос только в том - бывает ли такое? Ведь сборка страниц на сервере нужна позарез всё равно...

(Ответить) (Уровень выше)


[info]max_ushakov@lj
2003-06-08 08:46 (ссылка)
Гм. А RTFM? http://search.cpan.org/author/JHI/perl-5.8.0/lib/CPAN.pm -- FAQ, пункт 5.

Насчёт gcc -- верно-то оно верно, но можно ведь скомпилировать и дома... Хотя это уже может быть весьма dirty trick (надо либо уравнять библиотеки, либо компилироваться статически, да ещё там, наверное, FreeBSD...).

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2003-06-08 20:35 (ссылка)
Можно-то оно можно. Но на получение идентичной среды может уйти просто гора времени. Та же ОС, тот же компилятор, тот же перл...

Антон

(Ответить) (Уровень выше)