Первый русификатор для PsionКонстантин Салий kis@aha.ru
- Я жил (и живу) в Зеленограде, а работал (и работаю) в Москве, в середине Ленинского проспекта. Дорога в один конец - порядка двух часов, с пробками на Ленинградке - даже больше. В начале 1995 года у меня сложилась очень напряженная работа (с тех пор напруга только возрасла), времени было очень жаль, а доход стал настолько разумным, что стал подумывать о каком нибудь решении, позволяющем работать в дороге. Ноутбук отметался сразу - дорогой, тяжелый (а в транспорте и стоять приходится!)... Хотелось что-нибудь карманное, с двумя условиями: возможность набирать тексты разумных размеров (несколько килобайт) и затем перенос их на ПиСи.
Рынок палмтопов в Москве тогда был еще крайне беден. XTшки Hewlett-Packard не понравились именно своей ДОСовской основой: возможности, кроме минимальной потребности, как бы есть, а как их использовать? Где нарыть старого софта, чтобы использовать машинку по полной программе? Понимаете, нужен был либо совсем дешевый минималистский вариант, либо, если деньги солидные платить, то чтоб отрабатывал цену по полной программе...
Newton - кирпич с "тыкалкой", клавиатура удобней, да и на ПиСи не передашь...
Всерьез рассматривал варианты записных книжек Citizen и Casio. Цена казалась приемлема, возможности - подходящие... Но когда узнал, что кабель+софт для обмена с компьютером стОит, сколько сама книжка, стало грустно. И вот на Комтеке забрел в один дальний невзрачный угол... Надо сказать, что тот поход на Комтек, в отличие от предыдущих, был строго целевой: найти карманное решение проблемы. Так вот в том углу лежал Psion Series 3a 512Kb, представленный Торговым Домом Родити. Экспозиторы - Геннадий Борцов и Любовь Бровина - в оба уха расписывали достоинства машинки, но изделие говорило само за себя. Очень удобная клавиатура, прекрасный набор приложений, связь с ПК... Больше всего меня потрясла вытесняющая многозадачность и "отзывчивость" приложений. Процессор-то - хилый, а я - программист. Понятно было, что разработчики потрудились на славу, продукт - уникальный. Да еще встроенный язык программирования - можно и что-то свое написать! А время жизни от пары батареек - просто мечта! Но если так много возможностей, сразу возник вопрос: а по-русски можно? Не то, что очень надо, но ведь гораздо больше возможностей было бы! Ответ был неутешительным. Более того, мне объяснили, что такая красивая цена (435 долл.) - на грани себестоимости именно потому, что не берут без русского... И тогда мы заключили устный договор: после Комтека я беру машинку с кабелем, мне предоставляют всю имеющуюся документацию по программированию на C (SIBO C SDK), и я пытаюсь сделать русификатор. Что будет потом - посмотрим потом.
Конец недели был посвящен ползанию по Интернету (ох и медленно тогда это было!) в поисках информации о Псионах. Общее мнение мировой общественности меня еще больше убедило в верности решения, а вот что касается языка... В тогдашней версии FAQ news:comp.sys.psion (это потом произошло пиление на подгруппы) на вопрос "как изменить раскладку клавиатуры" ответ был прост: "не делается". И это с учетом того, что прошло 4 года с появления Series 3...
Комтек прошел, и после долгих разъездов по Москве (машинки - на Новом Арбате, кабели - на Сетуни) я получил свой комплект. В Родити мне дали SDK, 4 толстых тома... Но там не было ничего. Связался по электронной почте с программистами Псиона - говорят, не делается русификатор, не предусмотрено! Правда, показали мне некое решение от Офис-Клаба (они, вроде, первыми завезли в Москву S3, которые до сих пор можно встретить на вторичном рынке, новенькие - не далее, как этой весной привозили мне на русификацию!), которое позволяло писать русскими буквами, но только русскими, и только на S3... Такая кривизна никого не устраивала.
Тогда и была мною написана первая программа для Псиона - HexView, шестнадцатиричная смотрелка (впоследствии и редактор). С ее помощью скачал содержимое ПЗУ, вооружился дизассемблером... Через неделю имел откомментированные исходники всех интересных частей. Еще через неделю (начало июня) - первый прототип, написанный на OPL(!), жил у меня на машине.
Интересно то, что операционная система содержала-таки сервисы, созданные для программной локализации. Кстати, сделанные с ошибкой, которую пришлось потом обходить. Впоследствии я узнал, что это было не единственное, что создали программисты Псиона, о чем впоследствии не сохранилось у них ни документации, ни даже памяти - например, протокол обмена данными по последовательному порту также был ими утерян, и для PsiWin им пришлось написать новый протокол и отдельный драйвер...
Назад к прототипу... Он жил, но было понятно, что окончательный вариант надо писать на C и ассемблере, а SDK стоил _очень_ дорого, а предстояло сделать коммерческий продукт! Тогда и был заключен договор с Родити: они предоставляют средства разработки, я пишу русификатор, они получают права на его распространение. Был и материальный интерес: плата за русификатор окупала "железо", и оставалась еще вполне приличная сумма. Но, если честно, материальный интерес был не главным. За короткое время общения с Псионом я стал ревностным поклонником этой машинки, и мне очень хотелось, чтобы она получила распространение у нас в стране. Нашлись даже знакомые, которые были готовы ее купить... но только с русификатором!
Коммерческое начало русификатора не позволяло ограничиться только возможностью набора на русском языке на самом Псионе. Необходимо было также обеспечить обмен документами с ПК, печать на русифицированные принтеры (EPOC16 печатает только встроенными в принтер шрифтами) отправку факсов с помощью псионного факс-модема. Это потребовало дополнительных исследований и кодокопательств...
К началу августа RusLat 1.0 был готов по полной программе: использование русского языка во всех приложениях, печать, факсы, возможность обмена с ПК (тогда PsiWin еще не было). Пришлось написать еще несколько программ на OPL для работы с шрифтами (уже существовавшие редакторы шрифтов не устраивали). Собственно, изготовление и вылизывание шрифтов, экранных и для факса, заняло больше всего времени. В конце августа русификатор поступил в продажу, и моментально был продан весь склад Псионов! Эффект был ожидаемый, но масштабы - совсем неожиданны. Цена сильно возросла, но спрос стабильно превышал темпы завоза!
Тогда же в августе в Москве появились только что выпущенные новые модели, с 1 и 2мя мегабайтами. Пришлось выпустить версию 1.01 - новая версия ПЗУ была несовместима с 1.0, зато позволила лучше понять принципы внутреннего устройства... Версия 1.01 была, можно сказать, окончательной. На всякий случай она содержала проверку версии машинки и отказывалась работать на том, что не проходило через мои руки. Но отличия всех последующих версий были чисто косметические... Хотя не совсем так!
Было еще некоторое количество старых Series 3, которые тоже хотелось "окучить". Но они имели принципиальные отличия, настолько принципиальные, что русификатор для S3 вынужден обращаться к данным ядра операционной системы по абсолютным адресам. Получилась жесткая зависимость не от типа машинки, а от версии ПЗУ в ней. Правда, когда мне попала вторая разновидность ПЗУ, я написал некий поиск нужных мест, который оказался работоспособным. С тех пор русификатор работает на всех пробегавших мимо "трешках", но до сих пор я предупреждаю, что не гарантирую работоспособность на неизвестных версиях, пока не попробую.
Осенью, тесно общаясь с сотрудниками Родити (кстати, той же осенью ТД Родити прекратил свое существование), которые развивали псионное направление, я узнал удивительную вещь: оказывается, уже достаточно долгое время шла работа над полностью русифицированным Псионом! Работа шла безумно медленно. Сначала - со стороны переводчиков (Родити), потом - сам Псион утратил к этому интерес, и занимался ею по остаточному принципу. Я подключился к этой работе где-то в конце ноября. Посмотрев, как Псионные программисты сделали поддержку второго языка, я пришел в ужас: встроенная поддержка русского языка приводила к потенциальной несовместимости с мало-мальски культурно написанными программами, включая отдельные приложения (типа Psion Money) самого Псиона! Кроме того, русская версия базировалась на версии ПЗУ 3.21, а на тот период уже существовала 3.40, в которой, кроме поддержки большой памяти, было исправленно много ошибок, в том числе - и во встроенных приложениях. Понятно, что поддерживать в параллель две версии - русскую и "остальную" - в Псионе никто не собирался, отдача от русской версии была призрачна, и чем дальше - тем призрачней.
Я предложил другой вариант, фактически, записать RusLat в ПЗУ (с незначительными изменениями). Это бы позволило использовать самую последнюю версию ОС и приложений (а описания меню и диалогов и так можно было переводить - ресурсы отделены от кода). Более того, аналогичное решение тогда уже было применено в WorkAbout - он поддерживает 2 варианта таблиц клавиатур, с переключением по типу RusLat (т.е. одной из найденных и недокументированных функций). Псион отказался вносить изменения в проект... Даже минимальные изменения (вроде, чтобы горячие клавиши были независимы от текущего языка, а вместо частых кнопок "да/нет" использовать универсальные Enter/Esc) были отвергнуты.
Маленький нюанс, который может быть интересен. Когда передо мной стоял выбор кодировки для русификатора, я остановился на кодировке Windows (а кодировка европейских языков в Псионах была досовской) по двум причинам: чтобы облегчить обмен документами, и чтобы максимально сохранить возможность работы с поддерживаемыми не-английскими языками. При этом я исключил букву "ё". Ей даже посвящена отдельная глава в Руководстве Пользователя русификатора. Причина? Ее код совпадал с кодом символв (C)... А авторские права надо соблюдать! ;-Р
В процессе работы над русификатором (т.е. в процессе поиска дыр в ОС) в качестве побочного эффекта была найдена крайне неприятная дыра: возможность снятия пароля с Псиона. На тот период считалось, что парольная защита достаточно прочна, только полный ресет поможет (с потерей всех данных). Дыра была детально документирована и отослана в Псион, вместе с предложением по ее закрытию. Интересно, что, насколько мне известно, все машинки на EPOC16 до сих пор имеют эту дыру! Однако эта дыра полезна пользователям русификатора: если пароль набран по-русски, и русификатор "слетел" (не обязательно из-за недостатков русификатора!), то, как правило, набрать пароль уже нельзя. Причина в том, что пароль преобразуется в большие буквы без надстрочных и подстрочных знаков (типа "й" переходит в "И"), а русские буквы в основном накладываются на не-буквы. Таким образом, при отсутствии русификатора (=правильной таблицы) почти никакой символ не перейдет в код русских заглавных букв.
Насколько мне известно, до сих пор кроме меня никто не обладает программой снятия паролей, а я это делаю только для пользователей русификатора. Несмотря на выделенный текст в руководстве, случаи паролей по-русски бывают... Например, так: "новый русский" купил Псион с русификатором, посадил секретаршу вколотить свою записную книжку с контактами в базу данных, потом сунул книжку в шреддер, поставил пароль по-русски и отключил русификатор. Да, вот так, все сам своими руками и сделал! Через час он был у меня, предлагая что угодно за восстановление информации... Я его спрашиваю: Руководство читали? Да, говорит, читал, когда русификатор выгружал, прям по пунктам всё делал! "А про пароль читали?" "Читал..." Это, пожалуй, наиболее поучительная история, связанная с русификатором, хороший урок программистам: и в страшном сне не приснится то, на что способен пользователь в здравом рассудке!
Несколько месяцев назад ко мне обратился за помощью некий владелец 3а. Его проблема никак не была связана с русификатором. На его машинке я с удивлением обнаружил RusLat версии 1.0 (их было очень мало). Хозяин утверждал, что как купил ее летом 1995 года, так и пользуется... Я все-таки заодно обновил ему версию, так, на всякий случай. Говорят, русификатор работает и на 3mx, но я, к сожалению, ни разу не держал в руках это последнее изделие с EPOC16.
Что касается "технических историй" вокруг русификатора, поучителен глюк с пакетом PsiMail. Я занимался его тестированием с раннего этапа, в основном чтобы добиться корректной работы с русификатором и с русской 3а (которая тогда была в виде тестового образца). Подправить самому пару файлов, чтобы корректно отправлялись письма по-русски и читались русские веб-сайты все-таки пришлось. Но одно безобразие осталось непобедимым! Псионные программисты не придумали ничего лучше для рендеринга тега <hr>, как рисовать его псевдографикой! Это им показалось проще, чем линию нарисовать! Итог - наши пользователи вынужденны наблюдать тучу букв Д вместо горизонтальных линий :-( Есть в программистском мире вещи выше моего понимания...
Еще нетривиальная техническая деталь. В процессе исследований выяснилось, что, без дополнительных усилий, можно перевести на русский язык часть текстовых строк, типа названий месяцев и сообщений системы . Удобно, особенно для важных сообщений, которые появляются буквально на пару секунд (Замените резервный элемент!). Так вот поскольку русский язык много длиннее английского и не хотелось делать бессмысленных сокращений, пришлось шрифты делать не только красивыми читабельными, но и чтоб переведенные строки помещались в отведенных для них местах. Такой вот компромисс...
Вот, собственно, вкратце история создания RusLat для EPOC16 и немного вокруг нее. Я до сих пор считаю Псионные палмтопы наиболее совершенными изделиями в этой области. И, к сожалению, до сих пор считаю, что если бы отдел маркетинга Псиона был хоть чуть-чуть получше, Псион давно бы (заслуженно!) монополизировал мировой рынок карманных компьютеров.
Когда я еще боролся с дизассемблером, узнал, что чешские программисты сделали "чехификатор". Я попытался с ними связаться и предложить поделиться информацией, либо провести совместную разработку. Они отказались от совместных работ, а за свои познания запросили... ну очень много. Потом оказалось, что их решение было сильно привязано к ПЗУ (еще круче, чем у меня на "трешках"). С появлением 1-2Мб версий, а затем 3с и Siena, им пришлось много переделывать... Потом они обращались с предложением о сотрудничестве, но мне это было уже неинтересно. Но исторически на поле локализации Псионов они были первыми.
Жизнь сложилась так, что у меня было меньше месяца на написание русификатора для "пятерки", а остальными (mx и т.д.) я просто не занимался, и практически их не знаю. Так что про EPOC32 я знаю очень мало, минимум, необходимый для написания русификатора... да и еще меньше. Дело в том, что я начинал работать с тестовой машиной. Потом получил ПЗУ версии 1.00 - она отличалась от тестовой. Потом вышла 1.01, тоже с отличием, и я развил русификатор и на нее. А вот то, что в 1.01 появилась новая возможность, упрощающая локализацию, я пропустил за нехваткой времени. В результате та старая технология на mx и далее (ER5) не применима, а новую я знаю только по-наслышке. Кроме того, я так и не удосужился изучить ассемблер ARM, поэтому работал глазами и головой (дизассемблирование эмулятора много не дало - там несколько по-другому эта часть устроена). Это был мозговой штурм.
« Назад в каталог | Обсудить в конференции »
|