Для тех, кто служил на таркр «Киров»
Главная Форум
Блоги
История Фото Видео Встречи Символика Североморск Страница памяти Пресса :)
Авторы
Сергей Максимов
28-12-2011 Как я двигал военную науку - Институт Просмотров - 3340

[Оглавление] [Назад] [Далее]



В институте я попал в НИЦ - научно-исследовательский центр. Во время первой беседы со мной начальник центра спросил, программирую ли я на Кларионе. В то время это была модная "фича". Я сказал что программирую только на C или C++. К счастью меня не стали заставлять осваивать Кларион, а нацелили на задачу визуализации морских карт. Тема эта была не секретная, так что здесь я могу говорить спокойно.

На момент моего прихода в институт визуализацией морских карт занимался Иванов Евгений. Я думаю, он был единственным офицером в части, кто программировал на C. Он был тогда капитан 2 ранга, человек незаурядного ума, но непростой по характеру. Мне он не понравился прежде всего из-за своей авторитарности. И я не хотел попасть под его начало. Но этого и не произошло. Меня передали в отдел к Зубахе Александру Максимовичу, который был гораздо приятнее в общении и был настоящим начальником, действующим по принципу "создавать благоприятные условия для работы и не мешать".

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

Елена Викторовна была выдающейся личностью. Она наверное единственная из гражданских сотрудников программировала на C. Причем мастерски. Хочу оговориться, что малочисленность специалистов, владеющих языком C на тот момент, я объясняю перестроечным периодом. Может до моего прихода и было много специалистов, но все они ушли в коммерческие структуры, как только таковые появились. Елена Викторовна фактически реализовывала задачу визуализации морских карт и была носителем этой технологии. Естественно, у нее были все исходники программы, с которыми мы и продолжили работать. У нас создалась группа: я, она и еще один офицер, который позже выбыл из нее т.к. от него не было толку. И в результате мы работали вдвоем.


Как раз после моего прихода в часть, она закупила довольно много компьютеров фирмы Сименс с 386-ми процессорами, которые установили в отдельном зале. И там нам выделили рабочие места. Энтузиазм был велик. Вечером даже не хотелось идти домой. Елена Викторовна тоже была фанатом программирования и не только программирования самого по себе, а реализации каких-то задач, в данном случае отображения морских карт на мониторе для создания АРМ-ов. Она говорила в шутку: "Сергей, представляешь, как нам повезло, мы занимаемся любимым делом, а нам за это еще и деньги платят". Я был с ней полностью согласен. Елена Викторовна была мастером в области работы с графикой в DOS-е и я многому у нее учился. В этот период я уже приобрел Turbo C++ 3.0 и мы работали на нем.



Одной из важных задач в нашей работе была задача добычи самих карт. Карты представляли собой файлы, в которых хранилась береговая черта в векторном виде. Это означало что береговая черта задавалась массивом точек. Точность (детализация) карты определялась расстоянием между точками. За картами мы ездили в 280 Центральное Картографическое Производство ВМФ. Там мы познакомились с начальником отдела математического обеспечения вычислительного центра Иваном Красным, с которым тесно взаимодействовали.

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

По поводу того как мне удалось повысить скорость, расскажу более подробно. Изначально массивы точек береговой черты хранились в виде значений широты и долготы. Затем каждая точка пересчитывалась в точку карты Меркаторской проекции и, в зависимости от заданного масштаба, в точку на экране монитора. Была и функция обратного преобразования координат на экране в широту - долготу. Функции пересчета включали в себя тригонометрические функции, которые и были наиболее "тяжелы" для процессора. Я заметил что, поскольку мы всегда отображаем карты в Меркаторской проекции и фактически действующим параметром является только масштаб, то и хранить координаты точек можно сразу преобразованными в координаты Меркаторской проекции. Чисто математически я вывел формулу пересчета широты - долготы точки в некое "абсолютное" значение для этой точки в Меркаторской проекции. Далее для пересчета точки в координаты при заданном масштабе нам требуется только умножение на некоторый коэффициент, зависящий от заданного масштаба. Т.е. вместо сложных тригонометрических функций - только одна операция умножения. После внедрения этого метода скорость отображения карт увеличилась в десятки раз. А карты теперь хранились в исходном (архивном) виде как и ранее: в виде массивов широта - долгота и в рабочем виде - как "абсолютные" координаты Меркаторской проекции. Хочу заметить, что поскольку у нас были функции пересчета широты - долготы в "абсолютные" координаты и обратно, а так же из абсолютных в координаты экрана и обратно, то можно было легко получать широту - долготу любой точки на экранной карте и наоборот, по заданной широте - долготе наносить точку на экранную карту (если она попадала в зону отображения).

Скорость отображения карт повысилась, появилась возможность отображать карты более детально. Но была проблема с памятью. Ведь DOS позволял использовать только один мегабайт. И в институте уже во всю использовали оверлейные функции, подгрузку кода и прочие хитрости. Приход Windows 3.1 явился для меня новой значительной вехой. Я сразу приобрел очередной компилятор Borland C++ 4.0, позволявший программировать для Windows и начал осваивать программирование для него.

Однако вскоре выяснилось что, если для DOSа Borland делал компиляторы лучше чем Microsoft, то для Windows борландовский компилятор C++ начал сдавать свои позиции. Знающие люди посоветовали мне использовать Visual C++ компании Microsoft. И я приобрел Visual C++ версии 4.0 с библиотекой MSDN, который я вскоре поменял с большой скидкой на версию 4.2. К тому времени уже появился Windows 95.

Однако в самом НИИ не торопились переходить на Windows. Мало того, был взят AutoCAD за основу построения АРМ-ов, который использовали как графическую среду реализации прикладных задач и визуализации карт. Я рассматривал это как стрельбу из пушки по воробьям. Программа стоила дорого, если учитывать что для каждого рабочего места требовалась лицензия. AutoCAD имел свой макро-язык, взаимодействовал с BAT файлами, другими программами. Система получалась громоздкой и запутанной. Что бы продемонстрировать возможности Windows, я ускорил перенос визуализации карт под Windows 95. Наконец, мной была создана программа, позволявшая отображать карты в Windows.


Я сделал только технологический вариант системы, позволявший продемонстрировать ее возможности. Показал работу программы начальнику НИЦ. Он впечатлился, но в то время не это волновало его больше всего. Шли госзаказы и их нужно было "осваивать" любыми подручными способами, без серьезных разработок.

Параллельно мы с Еленой Викторовной изучали действующие фирмы, занимающиеся визуализацией морских карт. В то время уже были компании, производившие морские ГИС: "Моринтех" и "Транзас-Марин". Одну из них мы как-то посетили с экскурсией. Пока не могу вспомнить какую именно. Но то что мы видели у них, очень впечатляло. Тогда появилась мысль о том что визуализацию карт надо заказывать в таких фирмах.

В 1997 году прокатилась первая волна сокращений в НИИ. Я тогда не уволился т.к. еще верил что хоть что-то удастся довести до работающего продукта. Но после первой волны сокращений обстановка ухудшилась. На меня "повесили" АРМ уволившегося Юры Максимова (вообще в части в разное время было не менее трех Максимовых), который как раз и состоял из сложного нагромождения AutoCADа, BAT файлов и программ для DOSа. Разобраться в этой кухне было крайне сложно. Да и желания не было.

Дальнейшие разработки под Windows в части я практически не вел. Зато увлекся "левыми" заказами, тем более что в то время зарплату не выплачивали месяцами. Как говорила Елена Викторовна, - "Они делают вид что нам платят, а мы делаем вид что работаем". Мой друг Валера уже работал в французской фирме A2iA, которая была основана в 1991 году французским ученым в области искусственного интеллекта Жан-Клод Симоном и доктором наук Николаем Горским. А Валера работал с Николаем в Институте информатики РАН. И он вскоре был привлечен в интернациональную команду, так что его можно так же было считать в числе основателей компании. Было дело, я попытался "закинуть удочку" и спросил Валеру, можно ли когда-нибудь примкнуть к их команде. Валера ответил что у них люди не требуются и я больше не поднимал эту тему что бы этот вопрос не сказывался негативно на нашей дружбе.

Так вот, "левыми" заказами были программы в области бухучета и учета товаров на складе, естественно под Windows. Бухгалтерская программа оказалась тяжеловата для меня (тогда я еще не осознавал весь объем бухгалтерской кухни). Основу я сделал, но развивать и поддерживать уже не было сил. И пришлось бросить заказчика, хотя было жутко неудобно (т.е. я сделал базовую версию, за которую получил оплату, но продолжать развивать программу даже за дополнительную оплату отказался).

А вот складская программа была доведена до рабочего состояния и была продана нескольким оптовым фирмам. В одной из них она точно работает по сей день. База данных была написана мной полностью, она была многопользовательской, т.е. одновременно по сети несколько операторов могли считывать и заносить информацию. Например, в случае если два оператора пытались изменить одну запись, то изменить мог тот кто обратился первым, а второй автоматически ждал в течении 10 секунд (программа при этом делала циклические попытки получить доступ к записи), хотя мог и отменить свой запрос раньше. Оператор вводил данные об отпускаемом товаре и затем программа распечатывала накладную. Было много полезных нюансов в программе. Так, оптовый покупатель мог оплатить только часть товара. Ему записывался долг, при этом даже мог ставиться срок уплаты долга. Покупатель мог наоборот, заплатить впрок. Всё это учитывалось программой и оператор мог быстро получать любую информацию: по должникам, по прибыли и пр.

Я испытал настоящую гордость когда кто-то из знакомых обнаружил мою программу на пиратском диске.

В тот же период я написал программу для учета денег (приходы и расходы) и специализированную программу для выездных киосков продажи мороженого. Во всех программах использовалась одна и та же многопользовательская база данных, написанная мною.

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

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

Но бог благоволит смелым. Неожиданно летом мой друг Валера начал разговор о своей фирме. "Серёга, как ты смотришь на то, что бы попробовать поработать в нашей фирме", сказал он. Оказалось что как раз в это время один парень, который работал у них, уехал в Канаду и освободилось место. Конечно, я с радостью согласился. Но то что я шел по "протекции" ничего не означало. Валера знал о моих "достижениях", но нужно было соответствовать. И мне дали тестовую задачу. Это был поиск знака доллара на изображении (чеке). Я решил эту задачу успешно, использовав формулу условной вероятности Байеса. На самом деле в фирме уже использовали нейронную сеть для распознавания различных графических объектов, но я с этой технологией не был знаком и решил задачу по-своему. В таком виде мой поиск проработал два года, после чего я заменил его уже на нейросеть.

И вот, в октябре 1998 года пришел приказ министра обороны о моем увольнении в запас. Сразу после увольнения я был принят на работу в фирму "Болид", работавшую на французскую A2iA, где и работаю поныне (с 2002 по 2008 годы я работал в самой фирме A2iA в Париже). Название компании A2iA расшифровывается как Artificial Intelligence & Image Analysis, что переводится как "Искусственный интеллект и анализ изображений".

[Оглавление] [Назад] [Далее]