Про телефоны и Северную Корею (КНДР)

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

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

Дело было около 6-7 лет назад. Я тогда написал и выложил в общий доступ небольшую программку, которая позволяла распаковывать и упаковывать обратно языковые пакеты в прошивках сотовых телефонов Siemens. В принципе, в этом не было ничего особо сложного — использовался словарный алгоритм сжатия типа LZ78/LZW: для каждого языка хранился словарь, а каждая строка состояла из ссылок на элементы словаря — точные детали уж не упомню. Все это было оптимизировано для использования на 16-битных процессорах Siemens C167 — данные хранились 16-ти килобайтными сегментами для простоты адресации и все такое. Ассемблерный код распаковщика, достающего нужные строки по запросу, был достаточно компактным и не менялся начиная с моделей телефонов C35/S35 вплоть до заката самой компании, когда ее продали BenQ. А может и сейчас в каких-то остатках Infineon’а, на которых китайцы клепают свои дешевые телефоны, это используется. Менялся только формат заголовка (иногда даже между прошивками в одной модели) и поэтому в своей программе я сделал возможность задавать через конфиг разные варианты моделей телефонов и их прошивок. Мой алгоритм распаковки был полной калькой с Сименсовского, реализованный на VisualBasic. Упаковку пришлось писать уже самому, но так как программист из меня всегда был вполне посредственный, запаковывал он несколько хуже оригинального. 😉

Писал я все это для личного развлечения и забавы ради, однако, как это обычно и получается, если что-то делаешь более-менее неплохо, то рано или поздно найдутся люди, желающие за это заплатить. 🙂 На меня вышли сотрудники из небольшой фирмы по ремонту сотовых телефонов, объяснили их ситуацию и попросили помочь. А ситуация была в том, что к ним обратились представители КНДР и заказали сделать им телефон с интерфейсом на корейском языке. В Северной Корее GSM связь тогда только появлялась, а телефоны выдавали только чиновникам и гос.служащим. При этом все аппараты, естественно, были на английском языке — то бишь языке не то что потенциального, а реального противника, использовать который нормальному северо-корейскому партийному чиновнику конечно же зазорно. 🙂 Южно-корейские телефоны их тоже не устраивали — то ли язык там чем-то отличается, то ли в принципе не хотели принципиально взаимодействовать с «южанами» — у них там в КНДР с этим строго. 🙂 Так или иначе, но тех, кто решит им этот вопрос искали они у нас в стране. Я, конечно же, согласился. Хотя сейчас, по зрелому размышлению и умудренный опытом, понимаю, что денег попросил неприлично мало. С другой стороны — был я тогда еще несмышленым студентом, а работа была достаточно небольшая и в удовольствие. 🙂

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

С изображениями иероглифов было уже сложнее. Европейские прошивки имели слишком маленький размер символа — иероглиф туда просто не помещался, а ковырять из-за этого код было слишком долгим. Тогда я взял китайскую прошивку — в ней все как раз было на иероглифах и поэтому знакоместо было вполне здоровенным (16х12 пикселов, если мне память не изменяет). Но с ней возникла другая проблема — не было места под дополнительные изображения символов. Пришлось немного извращаться: заменять китайские иероглифы корейскими, а потом соответствующим образом подменять символы в тексте строк. Делать это пришлось еще и потому, что телефоны Siemens не поддерживали полноценный unicode. У них были своеобразные кодовые страницы — если в тексте строки встречается специальный служебный символ, то код следующих после него прибавляется к фиксированному (зашитому в прошивке) основанию и получается итоговый юникодовый символ, под который уже ищется изображения и который выводится пользователю. Так вот, для частей таблицы unicode с корейскими иероглифами таких заранее зашитых служебных символов для переключения не было.

В общем, проблему с местом удалось успешно решить, тем более, что китайские иероглифы, которые мы меняли, как я понял, лексически отличаются от корейских — обозначают целые слова, а не слоги (как в корейском), поэтому их намного больше и наши корейские заняли лишь часть имеющегося места… Кстати, сами картинки иероглифов корейцы тоже нарисовали очень быстро. Я сказал им для каждого использованного в строчках символа сделать bmp-файл с названием в виде кода этого символа в unicode и его изображением 16х12 — справились они с этим очень оперативно.

В общем-то, моей задачей было собрать все это воедино. Для редактирования языковых пакетов у меня уже была готовая программа. Я написал еще одну, которая вставляла в прошивку изображения корейских иероглифов на место китайских и соответствующим образом корректировала файл языкового пакета. В итоге «кореизация» китайской прошивки делалась буквально в три-четыре клика: достаточно выбрать нужные файлы/каталоги и нажать «Start».

Первый и последний раз, когда я видел самих корейских заказчиков был как раз на сдаче работы. Их было, если правильно помню, трое — один «главный» и двое русскоговорящих. Они очень хотели получить не просто переведенную прошивку, а возможность потом ее еще и менять. Сначала я не хотел отдавать непосредственно софт, а потом плюнул и все-таки отдал — сама программа для редактирования языковых пакетов и так лежала в интернете, а программа для замены китайских иероглифов корейскими все равно писалась специально для них и больше бы мне не пригодилась (да и представляла собой по сути надерганные из других моих же программ куски). Больше после этого я не видел ни этих корейцев, ни саму фирму, которая это заказала. Хотя вру — в фирме этой я потом случайно оказался с другом, чинившем там сотовый телефон. Работают люди как и раньше…

Вот такой вот любопытный опыт. Вряд ли сейчас кто-то  в КНДР ходит с телефоном с моей прошивкой (все-таки на данный момент эти телефоны сильно устарели), но когда-то — ходил и сознание этого греет мне душу — я люблю делать что-то, что имеет зримый и конкретный результат. Вряд ли они врали про всю эту тему с северной Кореей: у южной и своих телефонов хватало — им нет смысла нанимать русских программистов для таких хитрых переделок. А язык натурально корейский — его таким даже Гугл опознает. 🙂 Вот, скопировал пару фраз из языкового файла:
«우선권망»
«PIN을 입력하십시오:»
«SIM카드를 넣으십시오»

Интерфейс для IPTV STB D-Link DIB-120 с онлайн сервисом

Пост в внешним видом интерфейса и видео его работы я сделал как раз год назад.

Внешне за год практически ничего не изменилось, но внутренне все поменялось кардинально — и работает быстрее, и даже качество изображения на телевизоре лучше стало, так что пора записывать новое видео. Но это чуть позже — сначала все-таки хочется закончить работу над небольшим JavaScript UI фреймворком, оптимизированным специально для работы на приставках — после этого в очередной раз переделаю внешний вид, сделаю офигительный интерфейс для редактирования настроек и как раз и приступлю к активному наращиванию функционала… Но это чуть позже, но зато сейчас уже запустил в продакшн свой проект по IPTV — http://tiptv.ru/.

Если в тезисах: проект позволяет обойти трудности легального вещания IPTV в локальных сетях и дает возможность абонентам смотреть это самое вещание на экране телевизора. На самом сайте подробнее написано. А если провайдеру это не надо — абонент может сам купить себе приставку (на сайте планируется доставка), прошить прошивку и смотреть… В Москве это для очень многих актуально — D-Link DIB-120 продают везде и купить его не проблема, а бесплатные каналы от Науки-Связи тоже есть очень у многих.

В целом могу без лишней скромности отметить, что аналогов проекту нет. 🙂 Есть нечто похожее, но заточено под своего конкретного производителя и реальных проблем провайдеров не решает. Сейчас буду потихоньку рекламировать свой — посмотрим на реакцию. Бета-тестеры довольны. 🙂

PS: Ну да, совсем забыл — а самая фишка проекта в том, что все делается онлайн. Провайдерам не нужно ставить у себя отдельный софт только для того, чтобы редактировать списки каналов. Редактировать можно на сайте, а потом экспортировать автоматом (если уж очень надо). И программы передач не надо генерировать. И вообще ни о чем париться. Прошил — и оно сразу работает. И трафика тратиться — мизер. Но, опять же, там об этом подробно написано.

Порядок модулей-расширений при загрузке php

Уже тысячу раз с этим сталкивался и по прежнему об этом забываю. Вырублю топором тут — может в следующий раз сразу вспомню, когда после очередного обновления/установки php на сервере он будет падать в корку при запуске:

Порядок указания расширений в  файле extensions.ini имеет значение!

Не вдаваясь в подробности, должно быть так (лучше всего ставить в конец файла):

extension=recode.so
extension=mysql.so
extension=imap.so
extension=sockets.so
extension=pspell.so