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

    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
    ABBYY
    Решения для интеллектуальной обработки информации

    Comments 18

      +2
      Интересно, какое будущее у систем оффлайн-перевода, типа Lingvo. Еще пару лет и Гугл добьет свой переводчик для нормального перевода больших связных текстов, Microsoft отшлифует голосовые движки для всех языков, а накидать всяких там «нефтегазовых» и «финансово-бюрократических» словарей пару сотен — вообще плевое дело. Что останется Lingvo?
        +4
        multitran — уже шикарен. Лингво нужен когда мультитран перегружен. Хотя наверняка адаптируются.
          +5
          Еще пару лет и Гугл добьет свой переводчик для нормального перевода больших связных текстов

          Мне кажется, проблема связного перевода текстов гораздо более обширна, чем можно охватить за пару лет. Кроме того, связный перевод текстов — это далеко не все, зачем вообще нужен словарь.
            0
            Кроме того, поиск синонимов и антонимов, предложений с разными употреблениями слов, определение слова в разных областях, прямое и переносное значение и прочее. При этом, знаешь, что словари составлены экспертами, а не стихийно, т.е. на них можно ссылаться при споре о терминологии.
            +4
            Человек прилично знает язык, но не знает редко употребимое слово или одно из его значений, вот для этого лингво и нужен.
              +3
              Каждый год пишут — вот еще год-два и гугл «добьет». И ничего не меняется :) Как думаете, почему?
              +1
              да, это пожалуй самое приятное — когда занимаешься программированием «плавающих точек над i», паровозиков у ж\д тематик и конфигуратором цветов :)
                +3
                Да, в курсачах это иногда занимает 50% всего кодирования :)
                0
                Спасибо за описания истоков, всегда интересно почитать-послушать как люди начинали.
                  +3
                  Что характерно, загружалась та досовая резидентная лингва на 80286 значительно быстрее, чем 12-я версия у меня на Core2Duo сегодня :(
                  • UFO just landed and posted this here
                      0
                      Поддержу общую интонацию: электронная оболочка для бумажных словарей не интересна.

                      Интересны были бы словари без лимита на размер карточки слова, созданные с нуля под электронную версию. Ну, там, например, глагол to be, к которому прилагается набор статей килобайт так на 500, объясняющий все нюансы употребления. И так по каждому слову. Чтобы когда столкнулся не с термином, а со специфичным словом, можно было понять массу контекстов употребления (например, разницу между smart и clever).

                      Но кто ж такое сделает-то, кроме вики?
                        0
                        64 КБ, да, было время. А на сегодняшний день Lingvo x3 в оперативке занимает 50 МБ. И кроме всего прочего весит в памяти постоянно неотключаемый LvAgent занимающий еще 5 МБ оперативки, даже если мне никаких дополнительных свистелок и перделок не нужно. А если его удалить, то основная программа не запускается :(
                          0
                          А можно расшифровать ABBYY?

                          Может, это
                          Александр
                          Виктор
                          Вадим
                          Ян
                          Еще кто-то?
                          0
                          Вот тут еще сам Давид Ян немного рассказывает в т.ч. и об истории создания ABBYY:
                          www.russia.ru/video/tinkov_10237/
                            0
                            О да, резиденты без документации… Это сейчас дети из инета примеры качают, раньше такого не было.

                            Помню как впервые из ассемблера научился координаты мышиного курсора в текстовом режиме опрашивать — это было примерно как вручную синхрофазотрон построить: через debug подсмотрел как это делают в другой проге и сделал у себя.
                              0
                              Судя по всему, ваш блог переехал из жж на хабар.
                              Пользуясь случаем, хочу поблагодарить за Лингво (и зажатый ctrl) и Finereader — отлично бегают в бутылке КО (кроссофиса). И за lingvolive.com / finereaderonline.com.
                              cuneiform рядом не стоял.
                              Здесь — lingvo-ru.livejournal.com/39567.html почему-то пропало видео Давида Яна.

                              Only users with full accounts can post comments. Log in, please.