Как стать автором
Обновить
0
Content AI
Решения для интеллектуальной обработки информации

История ABBYY Lingvo. Как всё начиналось

Время на прочтение5 мин
Количество просмотров13K
image В нашем блоге мы уже немного рассказывали о старых версиях ABBYY Lingvo, но всё время за рамками постов оставалось главное в истории словаря – как же он создавался. Было это больше двадцати лет назад – срок немалый, но в ABBYY люди работаю долго, и Александр Москалёв, который спроектировал первую версию Lingvo в 1989 году, до сих пор в компании. Мы попросили рассказать его о том, как всё начиналось, – и вот что из этого получилось.

После института я устроился на работу в ИПТМ (Институт проблем технологии микроэлектроники и особочистых материалов АН СССР) в Черноголовке. В какой-то момент мой непосредственный начальник Виктор Коротицкий предложил мне запрограммировать метод доступа B-tree (из книги Т. Тиори, Дж. Фрай. «Проектирование структур баз данных») на Cи. Зачем он нам был нужен, мы тогда не очень понимали, но идея была красивая и хотелось посмотреть, как это работает. Я выбрал из всех разновидностей самую забубенную и сложную в реализации. Кажется, она называлась B*-tree. Довольно скоро нам удалось получить что-то живое. Сразу захотелось куда-нибудь это приткнуть.

В это время я осваивал детище белорусских программистов с говорящим названием «АСПИД». (В работе над АСПИДом были свои плюсы, например возможность командироваться в Минск или поехать на семинар в Севастополь в августе.) Предполагалось АСПИД использовать для автоматизации институтской библиотеки. Программа была сырая, но что гораздо хуже, — она периодически портила базу данных, которую я набивал вручную. После третьего раза я сломался и стал писать свою собственную простенькую СУБД под библиотечный каталог. Тут и пригодились Б-деревья. Они были удобны тем, что работали быстро за счет всегда сбалансированного дерева. Кроме того, они позволяли просматривать отсортированный список без обращения к узлам, так как листья были связаны в линейный список.

И тут появился Давид Ян. История вошла в анналы, но повторюсь. Давид тогда был длинноволос, носил белую рубашку с короткими рукавами и белые короткие шортики. При этом он как-то постоянно улыбался. Я ещё тогда за границей не был, но знал, что наши люди так не улыбаются. Кроме того я еще лет десять после этого никого не видел в шортах в институте или хоть каком-то учреждении, так что начало было революционное. Давид предложил сделать программу-словарь. В одном прямоугольнике (вертикальном) должен быть список слов, в другом (горизонтальном) должна была открываться карточка. В качестве подопытного был выбран англо-русский словарь Romanov (желтая книжечка карманного формата).

Я согласился. Это было очень похоже на моего библиотечного зародыша. Но это должна была быть резидентно сидящая в памяти программа. И с этим пришлось помучиться — примерно 50% усилий ушло на то, чтобы создать реально живущий резидент. Проблема была еще и в том, что документации по PC не было практически никакой. Информация доставалась какими-то совершенно фантастическими путями.

Название


Программу Давид предложил назвать Lingvo. Я только лет через десять узнал, что это слово значит «язык» на эсперанто. Я пытался для себя ее представить как LING(uist) VO(lume), и с этим названием в заставке она некоторое время появлялась. Позже, когда у нас появились лингвисты, они мою «расшифровку» забраковали. Так как стало что-то вырисовываться, стало понятно, что надо как-то оформлять нашу деятельность. Давид предложил создать фирму и назвать ее «БИТ».

Марс и Венера


В какой-то момент Давид стал приносить текст словаря, набранный каким-то кооперативом. Я тогда не очень внимательно отнесся к исходнику словаря, а зря. Мало того, что шрифт был мелкий, так ещё сам текст был перегружен разнообразными значками, выделениями и символами, вплоть до паровозиков при обозначении железнодорожной тематики. Пришлось набивать и править часть текста словаря вручную. При этом я, как и Romanov, тоже решил извратиться по максимуму и использовал представление текстовой кодировки на PC везде, где только можно, например вместо f. и m. (т.е. мужской и женский род) я поставил символы Марса и Венеры (знаки ♂ и ♀).

Для создания файлов словарей из исходного текста пришлось написать компилятор — LC. Сразу пришла идея положить её в дистрибутив и приложить пример исходного текста маленького демонстрационного словаря (example.dsl), для того чтобы народ клепал свои словарики и радовался вместе с нами.

Цвета


Цветовую гамму окон я выбрал сам. Мне вообще нравится сочетание cyan и brown, не говоря уже о green. Давиду не понравилось, он предложил что-то такое:

image

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

image

В ней можно было выбирать цвет практически любого элемента интерфейса.

Спецэффекты


Кстати, при запуске программы появлялась примерно такая мини-заставка:

image

Давид выдвинул идею, чтобы в момент появления заставки от слова BIT отрывалась верхняя точка у буквы i и «вcплывала», покачиваясь, по экрану вверх. Примерно день я на это убил, но, не удовлетворившись натуральностью эффекта всплывания, плюнул на это.

Примерно похожие идеи я и сам генерил. Забавно выглядела программа установки первых версий. Псевдографикой рисовалась пятидюймовая дискета (в конверте), а процесс копирования файлов отображался пролетанием с визгом по экрану цветных улыбающихся рожиц.

Кодирование


Для компиляции использовался какой-то из Borland С. У Microsoft тогда тоже был компилятор, но мне он не показался удобным. Достаточно долго весь код Lingvo.com умещался в самой маленькой tiny-модели памяти (это когда код и данные адресуются в пределах 64 Кбайт). Затем, когда запросы и функциональность выросли, перешли в small-модель. Когда мы научились свопировать область занимаемой памяти на жесткий диск, размер программы уже не был так актуален, но я по инерции продолжал трепетно следить, чтобы ничего лишнего в коде не было. Переписал даже стандартный C-шный загрузочный модуль, который поставлялся Borland, чтобы снизить размер резидента до минимально возможых 3.5 Кб. При этом, кстати, переключатели клавиатуры и русификаторы обычно занимали более 10кб. С этой свопированной памятью была одна проблема: перехваченные нами прерывания обращались к свопированной памяти и вызывали «синий экран».

Кстати, программировать и отлаживать было очень удобно. Главное — очень быстро. Несколько пассов руками (можно даже не глядя на экран и клавиатуру) — и результат налицо. Время реакции всегда было строго предсказуемо, в отличие от этой немного тоскливой системы Windows, где никакой, даже самый быстрый многоядерный процессор, не застрахует тебя от непредсказуемого подвисания на пару секунд в самый неожиданный момент.

Защита


Под защиту решили включить текст словарей и установку. Если посмотреть на пользовательский словарь первых версий, то текст статей там лежит совершенно открыто. Для системных словарей я применил самую элементарную защиту: менял половинки байта местами, накладывал маску. В какой-то момент словари стали сжимать и вопрос совсем отпал.

Архиватор написал Вадим Терещенко (сейчас финансовый директор ABBYY). Код архиватора меня, помнится, сильно впечатлил. Мы достаточно долго (лет 10) обходились этим архиватором внутри продуктов и использовали его как отдельную утилиту.

В какой-то момент Давид предложил защищать установку с помощью некой сторонней системы Shield. Сразу же столкнулись с массой проблем у пользователей, так что прожил этот симбиоз недолго. Защита, которую сделал я, была самой примитивнейшей, но в каких-то случаях она, видимо, срабатывала. В загрузочном (самом первом) блоке дискеты в первых байтах пишется имя операционной системы, обычно MSDOS5.0 (если не ошибаюсь). Я менял это на MSDOS5.2 при записи дистрибутива (несуществующий номер версии). И вот, при некоторых способах копирования новые дискеты оставались с прописанным при форматировании MSDOS5.0 и, соответственно, инициировали ошибку при установке.

Была идея прожигать лазером дискеты. Есть такой способ защиты с помощью bad-блоков. Я даже попробовал использовать для этого пару лазеров в ИПТМ. Один, к сожалению, вообще не наносил заметного ущерба дискете, другой, наоборот, прожигал так, что bad-блоки «плавали» (то на одном месте, то на другом — в некоторой области). Честно говоря, мне было просто интересно поработать с лазером, особенного коммерческого смысла это не имело.

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

По материалам блога команды ABBYY Lingvo
Теги:
Хабы:
+38
Комментарии18

Публикации

Изменить настройки темы

Информация

Сайт
www.contentai.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия

Истории