julik live

XMLRPC and Builder, a marriage made in heaven

This one is an example of why if you do XML you better do it right. I've written this blog with an aim for spotless MetaWeblog API support (I hate Web UI's and I own both MarsEdit and Ecto licenses). I also don't have an aversion to Dave Winer, and Atompub is not there yet IMO.

So I've implemented a small MetaWeblog responder based on Ruby's XML-RPC module. The module is somewhat antiquated and the docs are not always telling all that you might need, but there is a little problem which is actually very serious - it uses a bozo XML writer.

Recently I've posted an entry about caches. When I've posted it and retreived it via MarsEdit, everything went well. But then an update to MarsEdit came along, and lo and behold - the updated MarsEdit was not able to retreive the very entry the old one has made.

Error message

Hmm... let's see up close. I copied the XML response into a standalone XML document and ran it through xmllint.

invalid CDATA

Even more interesting. The character in question is ASCII 005, the ENQ character. Don't know how MacOS X managed to type it into the entry box in MarsEdit, but it certainly was there!

enq_char.png

This is an ASCII "control" non-printable character, and putting it into XML is anything but responsible. Even though it might be present in the blog entry itself, it should never bleed through into the XML representation for an RPC call! So I went out to investigate what writes XML for Ruby's XML RPC. I wish I didn't - to spare you a search, the file you need is create.rb.

Let's put it that way - the only sanitization done is replacing the obligatory entities. The rest.. well the rest is expected to somehow happen when you pass your results to XML RPC. The XML writer in Ruby's RPC works based on text concatenation.

More on this...

Suspects: Веб-стройка Юникод

ISOбражая умных

Мало того что официальный список стран ISO сделан в кодировке Latin-1. Мало того что в нем еще Windows line breaks. Главное (и некорректируемое тривиально) – все страны набраны В ВЕРХНЕМ РЕГИСТРЕ.

Просто таки приглашение чтобы сделать красивое такое меню выбора стран автоматически.

Если международная организация еще и предлагает приобрести Microsoft® Access 2000 database products, говорить и вовсе не о чем. Куда катится мир, я вас спрашиваю?

Suspects: Случайное Веб-стройка Юникод

RuTils перезжает на subversion

Всем кто пользовался рутилями из CVS рекомендуется обновить линки, поскольку оный CVS скоро прекратит свое существование. Mash, это и тебя касается!

В числе прочего это значит что теперь можно использовать рутили как плагин в рельсах прямо в своем дереве контроля.

Suspects: Веб-стройка Юникод

Дебилы"

Ruschki

Сразу видно.

Suspects: Юникод

Теперь все Rails-разработчики Unicode-enabled

С внесением в код Rails набора изменений 5223 мы можем ответственно заявить, что теперь мы предоставляем более чем пристойную поддержку Unicode в Rails, примерно на уровне MediaWiki. С опциональным бакендом на С для ускорения самых емких операций, полностью в нативном для Ruby UTF-8.

More on this...

Suspects: Веб-стройка Юникод

Почему мак-юзеры ненавидят Firefox

Ребята, то что пишут про внешний вид кнопок у Firefox на Маке - совершеннейшая лабуда. Да, кнопки - образец уродства (более того, стилизация контролов веб-страницей считается у макюзеров моветоном - и rightfully so).

То есть конечно это погано:

Firefox Bad Widgets

чего и говорить.

More on this...

Suspects: Веб-стройка Mac Юникод

Заапгрейд

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

More on this...

Suspects: Юникод

Rails show and tell

Cмотреть в изобилии тут. Чтобы меня окончательно запозорить ребята из Fingertips разместили и аудиозапись, которую можно послушать.

Смекалистый слушатель заметит, что я делаю ряд обидных фактических ошибок, и постепенно теряюсь в англоязычных идиомах пытаясь их склеить на голландский манер. Кстати да - такой у меня в жизни противный голос ;-)

173107876 Ae172C774A

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

Что говорит о том что у Rails-приложений которые не печатают по-русски еще eсть шанс.

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

А вот у других господ шанса нет:

CREATE TABLE `voydod`.`domains` (
  ...
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

Простите, это у меня такой глюк что в Узбекистане применяют (или по крайней мере раньше применяли) диакритику?

А дальше больше:

Так сложилось, что это единственная таблица с типом MyISAM. Первоначально поиск был реализован с помощью MySQL Full Text Search, а это возможно только с таблицами MyISAM.

И InnoDB, и UTF-8 полнотекстовым поиском в MySQL успешно поддерживаются, причем не два часа как. - схватили за нос, UTF8 поддерживается но не InnoDB

Suspects: Веб-стройка Юникод

Rails "show and tell meeting"

Если кто-то из местных местностей интересуется Ruby и Rails, все приглашаются в четверг на Rails Show&Tell Meeting в штаб-квартиру Greenpeace (а вы куда думали? в офис Большой И Богатой Java-корпорации? :-) на Ottho Heldringstraat 5.

Если вы придете, пожалуйста отметьтесь в комментариях на блоге Fingertips!

UPD: Программа мероприятия

Я буду в частности рассказывать про то как мы (не)используем Unicode в Rails и с чем его едят.

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

Suspects: Веб-стройка Юникод

И я буду смеяться над этим

Потому что это позорище.

Just a message to the managers of the django website : I get an error when I try to access the "Recent Code Changes" RSS feed (on the page http://www.djangoproject.com/weblog/)

the link generating the error is :
http://code.djangoproject.com/timeline... the error is : Ticket changes event provider (TicketModule) failed: UnicodeDecodeError: 'utf8' codec can't decode byte 0xe5 in position 11: unexpected end of data

Best,

Vlad.

Ответ не менее прекрасен.

Hi Vladikio,

That's a known issue, and it's happening because a ticket, or wiki change, or changeset (we don't know) a couple of weeks ago had a funky character in it. See the bug report at http://code.djangoproject.com/ticket/1983 . If you can isolate that funky character, that would be a huge help in fixing the problem.

Adrian

Весь мир это funky characters, если кто еще не понял.

Это тем, кто считает что в Python хороший unicode support и что TRAC - это круто. Ordinal not in range.

Technorati Tags: ,

Suspects: Веб-стройка Юникод

Рыдал

Отсюда

Просто win-1251 устоявшаяся кодировка для рунета. Работает без проблем. Включая и на любых хостингах. Со временем Юникод станет доминировать и в рунете, но только скорее всего уже не UTF-8, а полноценный UTF-16.

Зачем экономить? Давайте сразу программу "Каждому русскому блогу - UTF-32 до 2010 года". Ее правда придется совместить с программой "Умножь свою дисковую квоту на 4". Которую следует дополнить программой "каждому языку программирования по детектору BOM при чтении файлов, а каждому юзеру - конвертор шаблонов с добавлением BOM".

Нельзя позволять выбрать другую "рабочую" кодировку. Ни в каком софте. Никогда. Можно и нужно принимать и импортировать данные в любой кодировке. Ни один известный мне веб-софт не в состоянии корректно переключать рабочую кодировку с сохранением все зависящих от этого функций. Эта функциональность - B.A.D.

Если ваш хостер считает, что это не так - увольте его.

Suspects: Веб-стройка Юникод

Композиция, нормализация и уроды

В своих разговорах о Юникоде я не затронул несколько интересных моментов, о которых полезно знать. Кофейный столик "Юлик о Юникоде" продолжает прием посетителей.

Байт, кодпойнт, глиф

Юникод - многобайтовый способ кодирования текста. Текст состоит из codepoints (кодовых позиций), все позиции присутствуют в каталоге символов Unicode. Кодпойнты включают базовые компоненты графем и графемы в целом. При этом:

Каждый кодпойнт можно выразить в байтовом виде как минимум 5 разными способами

Один из них - UTF-8, в котором все латинские буквы заменены на однобайтовые ASCII-эквиваленты. Другие варианты - UTF-16 и UTF-32. UTF-16 - стандартный способ хранения Unicode-строк в операционных системах. InDesign импортирует тексты именно в UTF-16 например.

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

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

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

Как, спросите вы, кодпойнты "собираются" в то что мы называем "буквами"? Ответ - они компонуются.

More on this...

Suspects: Юникод

Unicode и Ruby

Следуя за длинным рантом рассказываю о том, как я расправляюсь с юникодом в Ruby "своим путем". Этот подход успешно применяется, в том числе в RuTils и на всех rails-работах, которые я выполняю.

Technorati Tags: , ,

More on this...

Suspects: Веб-стройка Mac Юникод

TrackDecode совместим с МТ 3.2

После апгрейда до МТ 3.2 и проведенных тестов выяснилось, что TrackDecode работает с новой версией в полном объеме (включая логгинг). Утащить плагин, позволяющий вам не думать о кодировках при получении трекбека на ваш MovableType-блог (плагин работает для всех блогов на одном установленном МТ), можно здесь.

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

Upd: Hooray.

Suspects: Веб-стройка Юникод

Сущностизм (или Yet Another Everything)

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

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

Technorati Tags: ,

More on this...

Suspects: Веб-стройка Любимое Юникод

Unicode и PostgreSQL

Эта часть Unicode-эпопепеи будет довольно короткой.

More on this...

Suspects: Веб-стройка Юникод

Unicode и PHP

Составлено с бесценной помощью Алексея 'huNTer' Колосова

В ближайшее время перекочует куда-нибудь в более подходящее для совместного редактирования место.

Если что-либо из указанного здесь не работает -- обязательно оставьте об этом сообщение в комментариях. Любые замечания и исправления приветствуются (не забудьте сообщить платформу и версию PHP). Все нижеописанное действует для PHP 4.

More on this...

Suspects: Веб-стройка Юникод

Нерусский трекбек

Трекбеки - очень полезная и нужная штука, позволяющая связать блоги (и в принципе сайты) друг с другом по принципу “статья-статья” получше вашего LiveJournal. Работает оная штука (вдруг кто не знает) так:

  • Владелец блога Х пишет статью, под названием “Y - полный идиот”. Хорошую и интересную. Среди прочего он ссылается на текст статьи Y, которую считает ну самым откровенным примером идиотизма Y в жизни.
  • Владелец блога Y немедленно получает оповещение о том, что X сослался на его статью и крушит ее в пух и прах. При этом под статьей Y появляется приписка “На сайте Х - есть статья, зовется - Y ничтожество!”
  • Владелец блога Y идет по линку, читает про себя статью, сию же секунду пишет ответный пасквиль ссылаясь на статью владельца блога X, о чем владелец блога X немедленно узнает тем же способом (стоит господину X поставить линк на господина Y).

А вот дальше наступает самое, пожалуй, интересное (правда, пока не реализованное в материале -- но скоро думаю будет). Господин Z заползает на сайты господина Y и начинает пролистывать фрагменты пасквилей господина X. После этого господин Z может (хитрым способом) подписаться на всю перестрелку пасквилями между господами X и Y а также (внимание!) на все записи других господ, которые ссылаются на пасквили господ X и Y.

Довольно толковое русское описание Trackback с точки зрения пользователя можно прочитать здесь.

Но не в рунете

Однако на подавляющем большинстве русских блогов трекбеки выключены. Почему? Блог, работающий в windows-1251, получая трекбек от блога в utf-8 его спокойненько берет и публикует as-is. Из этого, как вы догадываетесь, ровным счетом ничего хорошего не получается. Когда блог в windows-1251 сбирается ответить, получается еще хуже - win-1251 просто не видно (насколько я понял, это зависит от шрифта). Короче говоря, ничего хорошего. Будучи выпущено в RSS-фид (или любой другой “строгий” носитель) это ничего хорошего эффективно превращается в полный з[skip].

До сегодняшнего дня. Плагин для MT внутри (это кстати следует оценивать и как намек русским пользователем MT - включите прием trackback, время пришло иначе на что я потратил столько времени).

More on this...

Suspects: Веб-стройка Юникод

Проклятие русского апача

Недавно я позволил себе очень резкий наезд на блоги с некорректными RSS-фидами.

N.B. - срочно научиться не наезжать на людей.

Блог Azzie попал недавно в мое поле зрения, и я решил выяснить, что же такое с ним происходит (автор блога вряд ли виноват в этой ситуации - во всяком случае и фид и страницы закодированы правильно). Естественно, ответ на этот вопрос мне дал фалидатор фидов. Ответ переводится на русский как “проклятие русского Апача” (на него ссылался еще Влад Головач в своей заметке про CityDesk).

Виноваты кривые руки. Уверение для естествоиспытателей -- mod_charset и кодировка UTF-8 вместе не живут.

Если вы пользуетесь отечественным хостингом, можете быть уверены, что бы вы там не написали, ваш замечательный хостер как всегда умнее вас, и помимо отключения php_info (чтобы вы всю жизнь, чувствуя себя идиотом, гадали, какие модули есть в вашем PHP а каких нет) шлет перед вашими документами указание, что они в кодировке windows-1251. В документации и хелпе по вашему хостингу об этом как правило нету даже строчки. А на самом деле -- чистый саботаж.

More on this...

Suspects: Веб-стройка Юникод

Mac IE и UTF-8 - фикс найден

Итак, была известная проблема. При постинге комментариев из IE для Mac от браузера приходят данные формы в непонятной кодировке. Попытки решить проблему успехом не увенчались, пока не выяснилось следующее.

IE для Mac при отправке комментариев смотрит на шрифт, которым оформлена форма - если он не имеет русского ID, вместо русских букв отсылаются классические кракозябры. Поэтому я прошу всех делающих сайты в UTF (и желающих, чтобы текст от пользователей Mac IE прилетал в нормальном виде - некоторые из-за идиотов таки пользуются этим недобраузером, уверяю вас), добавить в свои стилевые таблицы следущее правило:

`* html input {

font-family: “Geneva CY”, “Helvetica CY”, “Priamoj Prop”, ваши шрифты от MS для форм, sans-serif;

}`

Вместо Geneva CY и пр. для Sans можно использовать Times CY для шрифта с засечками - но они по приоритету должны идти до шрифтов от MS.

Suspects: Веб-стройка Юникод

PHP - исходники в UTF-8...

Сегодня в очередной раз собрался “сломать орешек” - разобраться, почему не получалось у меня культурно записать RSS-feed с одного хорошего сайта

More on this...

Suspects: Веб-стройка Юникод

Aspirine not included.