Что за проект я перевожу на UTF: FAQ

Wiki на UTF-8 (55.74КиБ) Из комментариев на одном из сайтов Димы видно, что люди делают какие-то совершенно дикие выводы относительно моей эпической борьбы с UTF-8 в PHP. Кстати, она окончена, остались мелочи, доделки и доводки. На скриншоте — уже бета.

Так что небольшое FAQ.

В: Долго ещё до конца сериала?
О: Следующая часть будет последней.

B: Что за проект переводится на UTF-8?
О: Это внутренняя Вики, основанная на ВаккоВики, дописанная за годы использования и интегрированная с остальными внутренними сервисами. Её нередко можно встретить на слайдах презентаций «Яндекса».

B: Зачем переводится?
О: Все остальные внутренние сервисы «Яндекса» на UTF-8, что делает задачу интеграции Вики иногда чрезвычайно сложной, кроме того, есть большая потребность научить нашу Вики работать не только с русскими и английским, но и с другими языками.

B: Нельзя ли переписать это всё на другой язык, где нет проблем с UTF-8?
О: Можно, но это человеко-годы, я справился намного быстрее.

В: Зачем нужно было всё автоматизировать?
О: Во-первых, автоматизированно было далеко не всё, некоторые места я искал в автоматическом режиме, а изменения приходилось вносить руками, во-вторых, всего было сделано несколько тысяч замен, можно ли такое количество заменить вручную, да ещё и не ошибиться?

В: Почему бы нанять сотню студентов, за копейки, чтобы они сделали замены руками?
О: За этими студентами нужно проверять работу, кто это будет делать? Я за собой вычитывал исходники, распечатывал листы diff'ов, уходил куда-нибудь в переговорку и работал с бумажками — выделял карандашом проблемные места, потом новая итерация. Со скриптом проще — в одинаковых ситуациях он споткнётся одинаково, сотня студентов споткнётся сотней разных способов.
11 ноября 2010 22:49

nudnik.ru (nudnik.ru)
11 ноября 2010, 23:57

В данном случае я соглашусь, что проще было переписать это всё в Вики 2.0

И даже не из-за UTF.

mkal.livejournal.com (инкогнито)
11 ноября 2010, 23:59

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

Zverik (инкогнито)
12 ноября 2010, 00:30

грузинский.
Болк, не планируешь все посты объединить в статью?

Ной (sad-wind.ya.ru)
12 ноября 2010, 01:35

Я могу оценить титанический труд, проделанный автором, но эта серия постов для меня - последний гвоздь в крышку PHP. То есть я, конечно воспользуюсь им, если это будет необходимо по работе, но по собственной воле - никогда.
*возвращается к написанию многоэтажных "SQL запросов" на Bash*

P.S. Может, я что-то пропустил, но почему был выбран именно UTF8, а не просто несжатый юникод?

vladon (vladon.ru)
12 ноября 2010, 07:12

Погоди, а как проблема с utf-8 решена в mediawiki?

bolk (bolknote.ru)
12 ноября 2010, 08:10, ответ предназначен Zverik

Болк, не планируешь все посты объединить в статью?
Длинноватая статья получится :) Её осилят единицы :) Разве что оглавление вынести.

bolk (bolknote.ru)
12 ноября 2010, 08:14, ответ предназначен Ной (sad-wind.ya.ru):

Я могу оценить титанический труд, проделанный автором, но эта серия постов для меня - последний гвоздь в крышку PHP. То есть я, конечно воспользуюсь им, если это будет необходимо по работе, но по собственной воле - никогда.
То, что они (авторы языка) настолько протянули с Unicode, совершенно не делает им чести. Поддержка Unicode сейчас уже необходимость. Мы тоже всё новое пишем исключительно на Python.
Может, я что-то пропустил, но почему был выбран именно UTF8, а не просто несжатый юникод?
Нам просто всё равно. Но так как наружу всё равно отдавать UTF-8, выбрали его.

bolk (bolknote.ru)
12 ноября 2010, 08:14, ответ предназначен vladon (vladon.ru):

Погоди, а как проблема с utf-8 решена в mediawiki?
Навалились всем могучим сообществом и решили, думаю так.

bolk (bolknote.ru)
12 ноября 2010, 09:02, ответ предназначен mkal.livejournal.com

Я распознал на скриншоте арабский, тайский (вроде) и японский. А что между арабским и тайским?
Идут: арабский, санскрит, лаосский. Под японским идут хвосты тайского, но его почти не видно.

Заголовок это две кодировки: грузинский и арабский.

Дмитрий Фантазеров (Смирнов) (fantaseour.ya.ru)
12 ноября 2010, 09:27, ответ предназначен Ной (sad-wind.ya.ru):

Так вроде и в руби тоже есть проблемы с utf-8 и тамдаже конфликт на этой почве с отцом-основателем...

а в python все хорошо? символ по индексу в utf-8 строке ищется?

bolk (bolknote.ru)
12 ноября 2010, 09:33, ответ предназначен fantaseour.ya.ru:

а в python все хорошо? символ по индексу в utf-8 строке ищется?
В Python всё хорошо. Есть два типа строк — str (строка в однобайтной кодировке) и unicode (строка в Unicode). Всё, что есть в языке, в основном, понимает оба типа строк.

Выглядят они просто:
string = 'hi!' — это строка str
string = u'لغة تايلندية' — это строка unicode (начинается с «u»)

string[1] в обоих случаях вернёт правильный символ.

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

vladon (vladon.ru)
13 ноября 2010, 09:33, ответ предназначен bolk (bolknote.ru):

<blockquote>Навалились всем могучим сообществом и решили, думаю так.</blockquote>

А почему не взял их решение, а написал своё?

bolk (bolknote.ru)
13 ноября 2010, 10:13, ответ предназначен vladon (vladon.ru):

Ок, распишу. Правда, мне эта идея кажется странной. Что-то вроде «— моя Хонда тут застрял // — А почему вы не ездите на БеЛАЗе?»

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

Во-вторых, абсолютно разный язык разметки. Нужно сконвертировать десятки тысяч документов, плюс их ревизии. Одна разработка парсера существующей разметки с переводом её в (совершенно несовместимую) разметку MediaWiki — очень сложная задача.

В-третьих, у нас очень богатая интеграция с остальными внутренними сервисами.

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

В-пятых, есть определённые шаблоны использования нашей Вики, поддерживаются ли они в MediaWiki? Большой вопрос. Можно ли их туда внедрить? Тоже вопрос.

Думаю, если напрягусь, я вспомню ещё 2-3 причины, но и этих должно быть достаточно, не так ли?

vladon (vladon.ru)
13 ноября 2010, 15:17, ответ предназначен bolk (bolknote.ru):

нет-нет, я имел в виду не замену самой вики, а просто взять оттуда модуль работы с utf-8

bolk (bolknote.ru)
13 ноября 2010, 15:23, ответ предназначен vladon (vladon.ru):

А зачем он мне? Самый главный труд — это замены обычных вызовов на UTF-8-совместимые вызовы.

Searge (searge.name)
30 ноября 2010, 19:11, ответ предназначен mkal.livejournal.com

Бенгалор

etz (инкогнито)
13 января 2011, 17:22, ответ предназначен bolk (bolknote.ru):

А свои добавления и исправления в http://wackowiki.org сливали? Это которая "wackowiki.org R4.4.rc1 -> feature freeze" сегодня.

bolk (bolknote.ru)
13 января 2011, 18:55, ответ предназначен etz

Конечно нет. Наша Вики только основана на WackoWiki. За годы от той версии мало что осталось. Скоро, например, полностью будет переписан вики-парсер.

Азат Разетдинов (razetdinov.ya.ru)
26 июля 2012, 13:42, ответ предназначен bolk (bolknote.ru):

Не нашёл оглавления, надёргал сам. Положи куда-нибудь на память потомкам)
http://bolknote.ru/2010/09/08/~2704
http://bolknote.ru/2010/09/08/~2706
http://bolknote.ru/2010/09/08/~2707
http://bolknote.ru/2010/09/08/~2708
http://bolknote.ru/2010/09/09/~2714
http://bolknote.ru/2010/09/09/~2715
http://bolknote.ru/2010/09/13/~2719
http://bolknote.ru/2010/09/16/~2727
http://bolknote.ru/2010/09/18/~2728
http://bolknote.ru/2010/09/21/~2734
http://bolknote.ru/2010/10/04/~2757
http://bolknote.ru/2010/10/09/~2764
http://bolknote.ru/2010/10/13/~2769
http://bolknote.ru/2010/10/22/~2787
http://bolknote.ru/2010/11/11/~2807
http://bolknote.ru/2010/11/11/~2810
http://bolknote.ru/2010/11/30/~2828

bolk (bolknote.ru)
26 июля 2012, 15:27, ответ предназначен Азат Разетдинов (razetdinov.ya.ru):

Спасибо, но вот же: http://bolknote.ru/write/?issue_phputf8 :)

Азат Разетдинов (razetdinov.ya.ru)
26 июля 2012, 16:55, ответ предназначен bolk (bolknote.ru):

Мда, минут опять ушло, чтобы найти эту ссылку на сайте :)

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)