О себе (резюме и портфолио)

i_am_in_moscow
ФИО: Князев Алексей Александрович
Дата рождения: 8 августа 1971
Место проживания: г. Саратов.
Образование: Саратовский Государственный Университет. Физический факультет. Один год аспирантуры.
Иностранные языки: Английский (технический без словаря, пишу простые тексты по проф. тематике и в контексте общения, немного говорю), немецкий (изучал в школе и университете, понимаю со словарем), французский (читаю), итальянский (читаю)
Стаж профессиональной работы: с 1991 года
Первые любительские законченные проекты: 1987-1991 годы
e-mail: knzsoft на домене mail.ru (проверяется постоянно), knzsoft на домене gmail.com (проверяется реже)
ICQ UIN: 1941-44-861
SkypeName: knzsoft (украден 2013-12-12 и пока не восстановлен)
knzsoft@gmail.com (ныне используется как учетная запись Microsoft)
Google Hangouts: knzsoft@gmail.com
Профессиональный блог: http://knzsoft.blogspot.com

Текущая практика

  • Основная ОС — Linux. Qt4 как основная библиотека для построения кроссплатформенных приложений с графическим интерфейсом. STL/boost как альтернатива для построения кроссплатформенных приложений без использования Qt.
  • Проекты GNU — как отдельный вид практики на языке C++ с применением классических инструментов в виде Autotools, vim, sed, awk, perl. В качестве среды разработки для таких проектов бывает удобно использовать KDevelop.
  • QtCreator как основная среда разработки в Си/Си++ (без использования Autotools) и Eclipse в Java и PHP.
  • Сетевые приложения (TCP, UDP).
  • Хорошее понимание и применение ООП и ОП. Хороший уровень математической подготовки.
  • В качестве системы контроля версий — git, SVN.
  • Основные системы сборки для проектов C++: CMake, QMake и GNU Autotools. Для Java: Maven, Ant
  • Наличие опыта в следующих системах управления проектами: JIRA, Basecamp, RedMine, Mantis.

Текущая база знаний

Платформы

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

  1. Linux — основаная платформа для разработки и прочего использования с 2005 г. Знаком с платформой с 1996 г.
  2. Windows — периодическое обращение к платформе для проверки кросскомпиляционных проектов и некоторых работ с .NET. На период с 1993 до 2005 часто использовалась для написания проектов разного назначения от небольших и больших программ физико-математического и химико-математического моделирования до сложных систем управления промышленными станками и измерительными стендами.
  3. Unix — работал с разными версиями Unix как ветки System V (Solaris), так и ветки BSD (FreeBSD). Знаком с платформой с 1993 г. Для разработки использовался FreeBSD. Небольшой опыт.
  4. Mac OS X — растущий опыт разработок на Objective-C с использованием Foundation & Cocoa под XCode. Имею mackbook.
  5. Android — начальный ознакомительный опыт в Android SDK под Eclipse и Android Studio. Уровень ручного размещения виджетов в компоновщиках и обработка событий в делегатах.
  6. Java — первые относительно большие программы относятся к 2003 году (разработка схемы обучения полносвязной нейронной сети с произвольным количеством слоев). В дальнейшем, периодически, возникали проекты на Java с использованием разных дополнительных технологий, но основной специализацией Java так и не стала.
  7. .NET — есть некоторое погружение в фундаментальные основы .NET, небольшие эксперименты с построением небольших приложений на WinForms и некоторыми внутренними технологиями .NET, например, с веб-сервисами и WCF. Для работы с .NET использую язык C#.
  8. Mono — изучалась с целью проведения сравнений с оригинальной платформой .Net. В попытках наработки опыта решались задачи из теории алгоритмов. В качестве языка использовался C#.
  9. PIC18 — разработка небольшой операционной системы на ассемблере для микроконтроллерной сети, ведущей обмен данными по специальному каналу с жесткой временной синхронизацией, физически реализованной на линии питания микроконтроллеров.
  10. DOS — большой опыт использования до, примерно, 1993 г. В основном разработки на assembler и pascal. Начальные проекты на C. Ознакомление с платформой с конца 1980-х.
  11. RT-11 — опыт работы около двух лет. Использовался для разработок на pascal и basic.
  12. Разработки на ассеблере под множество платформ на основе i8080 и Z80, которые обильно существовали на российском рынке в конце 80-х и начале 90-х. В том числе первые опыты коммерческих разработок под ZX-Spectrum.

Языки программирования:

    (в алфавитном порядке)

  1. Assembler (разные реализации для PC, микроконтроллеров и компьютеров поколения 80-х и начала 90-х). Используется нечасто.
  2. bash (и сопутствующие инструменты для консоли Linux, такие как sed, awk). Используется достаточно регулярно. Самый большой проект — разработка первого прототипа SDK для построения адаптеров к серверу Squid.
  3. Basic (множественные реализации для компьютеров поколения 80-х, начала 90-х). Практически не использую с 2002 года.
  4. Си++ (User Space проекты). В использовании с 1996 года. С 2004-го года в постоянной практике. Основной компилятор — g++.
  5. Си (драйвера в Linux). В использовании с 1993 года. Активно использовался в периоды 2004-2007, 2009-2010.
  6. C#. При наличии интереса к языку, используется нечасто, примерно с 2006. Есть опыт использования не только в .NET, но и в рамках проекта Mono.
  7. Erlang. Начальное изучение.
  8. Delphi (Object Pascal) и Borland Pascal (более чем 10-ти летний опыт программирования (с 1992-го года), преподавание; хорошее знание языка и языковой оптимизации; программирование нестандартных элементов — элементы управления, библиотеки, адаптивные к алгоритмам динамические структуры). Редко использую с 2005 года.
  9. Fortran 77. Большой опыт создания математических расчетных программ в 90-х. Среди прочего, выделялась расчетная программа построения интерференционных спекловых картин на запыленных экранах, выполненная с самостоятельной реализацией событийного графического интерфейса для DOS. Последнее использование в 2012 году в интеграции с собственным проектом визуализации научной графики на Си++/Qt.
  10. JavaSE(Swing, JUnit, TestNG, WebDriver). Изучение с 2003-го года. В регулярном использовании c начала 2011 года. Преподавание Java Core 7 + TestNG + WebDriver. Maven как предпочтительная система сборки проектов на Java. Умею пользоваться Ant, но стараюсь избегать из-за нечеткости документирования, и сложностей переносимости проектов.
  11. JavaFX 2. Экспериментальное использование в целях знакомства и сравнения с другими графическими средствами.
  12. JavaEE(EJB 3.1, JPA 2.0). Активно использовался в первой половине 2011 года.
  13. JavaScript. В редком использовании с 2007-го года. Начиная с 2010 года более использовался в варианте Qt Script для схем интеграции скриптов в собственные приложения с использованием Qt4 Framework. Начальное знакомство с jQuery. Начальный опыт работы с серверным JavaScript на основе Node.js.
  14. Haskell. Начальное изучение.
  15. Lisp. Несерьезное начальное знакомство. Начальные представления о функциональном программировании.
  16. Node.js. Кратковременное знакомство для интеграции с готовым проектом. Собственные эксперименты начального уровня. Разбор и правка чужого кода в проекте.
  17. Objective-C (Foundation, Cocoa) для Mac OS X 10.6 — 10.7 (Xcode). Первое серьезное знакомство относится к активному использованию языка в октябре 2011 года, при участии в одном проекте для Mac OS X. Наличие собственного macbook позволяет продолжать поддержку и накопление соответствующего опыта.
  18. Perl. В редком использовании с 2003-го года. Уровень написания скриптов для обработки текстов и файлов. Некоторый рост активности в использовании начиная с 2014 года для разработки сервисных скриптов в проекта GNU (в том числе для тестирования).
  19. PHP. В непрофессиональном использовании с 2005-го года. Есть опыт работы с версиями PHP4 и PHP5. В значительно большей степени, с PHP5. Собственные начальные разработки CMS с иcпользованием ООП. Начиная с осени 2011, при работе с PHP использую шаблонизатор Smarty.
  20. Python. В нечастом регулярном использовании с 2005-го года. PyQt, socket, asyncore, asynchat … Начальный опыт работы с Django.
  21. Ruby. Интересная система с реализацией абсолютного ООП и развитым метаязыком. К сожалению, пока только начальное практическое знакомство и теоретическое обозрение по некоторым книгам и статьям.

Используемые библиотеки, технологии и протоколы

    (в алфавитном порядке)

  • Многопоточное программирование. Большой опыт. Активное использование в проектах Qt и boost.
  • Boost. Использую в кроссплатформенных приложениях, реализуемых без применения Qt. Среди прочего, есть опыт в применении boost::thread, boost::asio, boost::filesystem.
  • eCAP, ICAP — разработка eCAP-адаптеров для сервера Squid и участие в решении проблем для кода сервера Traffic Spicer (ICAP-сервер).
  • IRC. Написание простого клиента IRC для специфического шлюза. Парсинг и формирование пакетов IRC-трафика.
  • Jersey. Был опыт использования для написания клиента и веб-сервисов в архитектуре REST на основе HTTP/JSON для системы документооборота на Java.
  • JDBC. Регулярное использование в проектах JavaSE/JavaEE. Некоторый опыт с MySQL, PostgreSQL и, очень небольшой, с Oracle 11xe.
  • JSON. Собственные реализации высокоэффективных схем потокового парсинга в C++ (при постепенном получении данных по JSON-объектам (например, в потоке TCP)). Периодическое обращение к JSON с 2009-го года. Использование JSON-simple (библиотека от Google) в коде на Java.
  • HTML/CSS. Частое использование. Веб-страницы, документация. В основном, проектная документация в ручной верстке. Начальный опыт верстки веб-страниц на HTML5.
  • HTTP. Неплохие знания спецификации — были проекты, требующие частого обращения с ряду RFC по HTTP. Простые реализации анализатора (парсера) входящего HTTP-потока. Собственное формирование HTTP-сообщений в C++. Значительно более глубокий опыт относится к работам по синтезу и анализу протокола SIP, некоторого расширения протокола HTTP в сторону поддержки сеансов. Начиная с 2014 года появилась практика использования HTTP/2 в проектах на C++ и тестах (bash/perl). Курировал проект перевода спецификации HTTP/2 (RFC 2629) на русский язык.
  • .NET. Непрофессиональное использование при растущем опыте. Подробности в разделе "Платформы".
  • Qt. В постоянном использовании начиная с 2001-го года. В текущей работе используется Qt4. До Qt4 использовал версии Qt3 и Qt2. Знаком с Qt5. Имею навыки построения интерфейсов в Qt Quick (QML).
  • SIP. Разработка модуля SIP-транспорта с нуля. Парсинг и формирование пакетов SIP-трафика, движок SIP, API для использования движка лицами, не имеющими знаний о подробностях протокола SIP.
  • SNMP достаточно глубокое знание протокола. Собственные эффективные реализации клиентов и серверов SNMPv2. Использование собственных парсеров SNMPv2 как для UDP, так и для TCP (потоковый парсинг). Использование собственных генераторов пакетов SNMPv2. Собственные схемы парсинга MIB-файлов. Реализации как с использованием Qt, так и без использования Qt — C++/STL. Активное использование с конца 2010 до начала 2011 года.
  • SOAP — опыт реализации клиентских подключений на C++ на основе файлов WSDL. Общие теоретические представления о возможностях и реализации. Эксперименты в .NET для построения веб-сервисов и в пределах платформы WCF.
  • SQL. В прошлом (2001 г.) была серьезная теоретическая подготовка в вопросах СУБД и SQL. Знания долго не были востребованы и существенно растворились. Последние годы, практика моего использования SQL обогащается все более частым использованием, но пока я отношу себя, в этом вопросе, к тем, кто решает многие возникшие проблемы по справочникам. В основном использую MySQL из PHP, Java и C/C++. Кроме этого, через JDBC работал с разными СУБД. В том числе с PostgreSQL и Oracle. Периодический, но нечастый опыт с SQLight и далекий опыт использования Borland Database Engine.
  • STL. Протяженный опыт использования.
  • TestNG. Преподавание для тестировщиков параллельно с Java Core 7. 2012 год.
  • TCP/IP. Большой опыт написания сетевых приложений как потоковой так и дейтаграмной специфики (UDP). Собственые реализации множества протоколов обмена, в том числе стандартных. Опыт, как с использованием оберток над сокетами, таких как QtNetwork и boost::asio, так и использование соответствующих системных вызовов (сервера в Linux). В основном, использую реализации на основе неблокирующих сокетов (опросы через select()/epoll()).
  • UML. Неполные знания и непрофессиональное использование. В основном для анализа проблем при решении сложных задач. Неполнота знаний компенсируется собственными обозначениями для описания связей и динамики взаимодействия.
  • VCL. см. Delphi.
  • WebDriver. Преподавание для тестировщиков параллельно с Java Core 7. 2012 год.
  • XML. Использую в собственых приложениях для хранения данных. Практика в Си++/Qt4 и JavaSE. Для парсинга предпочитаю последовательные схемы SAX, для синтеза — DOM. Есть опыт написания собственных высокоэффективных SAX-парсеров XML на C++.

Основные направления прежних разработок и профессиональные интересы

  • Сетевое программирование. Опыт разработки высоконагруженных сервисов с собственными реализациями прикладных и транспортных протоколов. Участие в разработке и тестировании адаптеров к восоконагруженному серверу Squid. Участие в решении проблем кода высоконагруженного сервера Traffic Spicer, разработка тестов.
  • Мониторинг и управление оборудованием (в том числе прецизионные системы управления с обратной связью), измерительные стенды, математическое моделирование, сетевые приложения, драйвера (Linux).
  • Изучение грамматик регулярных языков и конечных автоматов. Парсинг простых языков. Опыт реализации компиляторов для простых языков описания кадров состояния различных систем автоматики. Парсинг MIB-файлов для SNMP. Парсинг входящих потоков данных по протоколам обмена, как своих, так и стандартных, например, парсинг потоков SNMP, JSON, RPC-JSON, RPC-XML, HTTP, SIP. Рекурсивные формирования языковых потоков, как для своих протоколов, так и для стандартных, например, формирование потоков для SNMP. Широкое использование конечных автоматов в практике программирования.
  • Все более интересна темы внутренней реализации операционных систем, системного программирования и алгоритмов, однако, не часто удается уделять этому значимое время.

СУБД

Имею протяженный опыт использования различных СУБД, который, однако, не может считаться профессиональным. Общее знакомство с SQL начиная с 2000-го года. Периодическое теоретическое погружение в вопросы теории разного типа СУБД. Начальные навыки с NoSQL. Наибольший, по времени и глубине, опыт работы сложился с СУБД MySQL.

  • BDE. В 2000-м году был опыт построения приложения САПР для прецизионного станочного комплекса на основе SQL под Borland Database Engine.
  • MySQL. По частоте обращений к этой СУБД, приоритет в задачах связанных с использованием в PHP. Управление и настройка совместно с Apache под Linux. Наиболее глубокая и серьезная работа с MySQL велась из проектов на C++ (в том числе, разработка, написание и использование хранимых процедур). Наиболее значимый проект — платформа для торговли криптовалютой (на C++). Неоднократный опыт работы через JDBC. Простой проект под JPA 2.0.
  • PostgreSQL. Начальный опыт установки настройки под Linux и Windows. Небольшой опыт работы через JDBC.
  • Oracle. Небольшой опыт работы через JDBC в учебных проектах по преподаванию Java.
  • SQLite. Опыт хранения настроек приложения (Qt4).

Дополнительные навыки, косвенно связанные с программированиемa

  • Уверенное знание Linux. Начало работы с Linux — 1996 год. Уверенная работа в консоли bash.
  • Администрирование сервера Apache. Достаточное для собственного использования под разработку PHP проектов.
  • Администрирование Git через Gitolite. Использую для собственных проектов. Опыт использования для группы разработчиков.
  • Администрирование Subversion (SVN). Использую для собственных проектов. Клиентское использование для удаленных проектов. Углубленное изучение для создания практического руководства.
  • Работа с системами багтрекинга — Mantis, RedMine. В том числе, в удаленных проектах.

Иностранные языки

Большой опыт работы техническим переводчиком в проектах локализации программного обеспечения. В том числе, в крупных компаниях над крупными проектами. Направление: с английского на русский. Хорошо знаком с электронными технологиями, используемыми для организации больших проектов локализации (Trados и пр.).

  • Хороший технический английский. Хорошо читаю, хорошо перевожу, навыки письма позволяют формулировать простые тексты для профессиональных записей и для диалогов. Существует некоторый порог включения в разговор. Значительный опыт написания технической документации к проектам в системах типа Doxygen. Буду рад практике общения.
  • Могу читать и переводить с немецкого со словарем. Изучал немецкий в школе и в университете. В студенческие годы читал спец. литературу по темам "физика" и "электроника" без словаря.
  • Французский и итальянский в стадии начального изучения.

Трудовая биография

Опыт преподавания

Продолжаю потомственные традиции в преподавании начиная со школьных лет.

Обучаясь на старших курсах университета преподавал в информатику для физико-математических классов гимназии. К тому времени у меня уже был накоплен значительный профессиональный опыт программирования, так как внутри третьего курса у меня был шестилетний разрыв обучения в ВУЗе, в котором я занимался цифровой электроникой и программированием (с середины третьего курса ушел работать в лабораторию одного из оборонных заводов периода СССР).

Консультации и преподавание (репетиторство/коучинг) носят эпизодический характер. В основном речь идет о небольшой серии уроков по C++, Java и сетевому программированию для сторонних лиц, участников групп удаленных проектов, которыми я иногда руковожу, и коллегами по работе, в периоды работы в лабораториях разных компаний. В данном опыте можно выделить некоторый уникальный случай работы по готовому курсу на основе готовых материалов:

Май 2012 — июль 2012. Преподавание Java Core 7 + TestNG + WebDriver в контексте разработки автотестов. Решение задач.

Домашняя практика. Удаленная работа

С октября 2011 года по текущий период работаю из своего домашнего кабинета. Самостоятельно выполняю проекты, участвую в группах разработки (в том числе, в качестве руководителя), консультирую, обучаю. Наиболее часто используемым языком программирования, на этот период, является C++. Реже используются технологии Java. Технологии .NET и пр. носят смежный характер к проектам, в которых мне приходилось принимать участие.

С августа 2014 по март 2016 года был занят, в основном, разработками по протоколам eCAP, ICAP и HTTP/2. В большей части, это участие в разработке адаптеров к серверу Squid и доработки кода по серверу Traffic Spicer. Все эти работы выполнялись на основе спецификаций, выданных на конечный продукт. Мои задачи включали разработку микроархитектуры решений, их кодированию в C++ и тестированию.

Детали работы по программным проектам см. "Портфолио".

Компания "ГИС РФ"

Апрель 2011 — октябрь 2011. Городской информационный проект.

Один из соучредителей компании. Наряду с другими соучредителями, являлся разработчиком основной архитектуры задуманного информационного проекта. Как программист, занимался разработкой модулей проекта на JavaEE и разработкой дополнительных приложений на JavaSE.

Ключевые термины разработки: Linux, Java Core, JavaSE, Swing, JavaEE, Servlets, EJB 3.1, JPA 2.0, JSF 2.1, web.

Компания "АЛСиТЕК"

Декабрь 2008 — март 2011. Разработка телекоммуникационного оборудования.

Ведущий программист. Разработчик программного комплекса стратегического назначения.

Ключевые термины разработки: Linux, Linux driver, C, C++, Qt, STL, JSON, SNMP, POSIX-server, Qt-client-application, telecommunication equipment.

Лаборатория компании "Финпром-Ресурс"

С июня 2007 до декабря 2008 (лаборатория распущена во время экономического кризиса конца 2008 года). Разработка know-how для автомобильной промышленности.

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

Ключевые термины разработки: Windows, Linux, Delphi, C++, Qt, PIC, Microchip assembler, RS232, know-how in electrical and electronical car equipment.

Лаборатория ООО "НПК ПО" (Научно-производственный комплекс прецизионного оборудования)

С января 2000 до июня 2007. Разработка измерительных стендов и промышленных станков прецизионной обработки деталей.

Ведущий инженер по созданию программных комплексов управления станками и измерительными стендами. Основные инструменты под Windows — Delphi и Visual Studio, под Linux — Си (драйвера) и Си++/Qt (пользовательские элементы комплекса).

Отличительными особенностями систем являлись сложные системы визуализации процессов, конфигураторы большого объема параметров (сотни единиц), математически сложные системы управления, сложные системы расчета траекторий (в том числе и с использованием только целочисленной математики), сложные системы вычисления "доверительных" значений датчиков без многократного чтения — управление велось на больших скоростях, сложные схемы разделения больших объемов данных (10-100 МБт) между ядром Linux и программ GUI (данные содержали в себе историю управления последними секундами процесса для визуализации с целью определения причин сбоев, наладки и автоматической настройки комплекса), создание простых комплиляторов с языков описания заданий обработки (использовались как собственные языки, так и стандартные языки промышленных станков с ЧПУ).

Ключевые термины разработки: Windows, Linux, Linux driver, Delphi, Visual Studio, C, C++, Qt, OpenGL, ISA, LPT, RS232, RS485, "Advantech", numerial computing methods, industrial equipment.

"Свободное плавание"

1996-1999

Занимался математическим моделированием физико-химических процессов (Delphi (VCL), Borland Pascal (OWL), ассемблер с поддержкой мат. сопроцессора для ускорения расчета по сложным системам дифференциальных уравнений, MS Fortran 5 (Fortran-77)). Задачи конечно-элементного моделирования с мощными визуальными средами разработки расчетных областей и представления результатов. Подрабатывал посредничеством в продажах вычислительной техники. Занимался репетиторством по различным дисциплинам (программирование, математика, физика, английский). Преподавал в гимназии программирование для классов с физико-математическим уклоном.

Совместное предприятие

1995. Предприятие по разработке, изготовлению и установке световой рекламы.

Разработчик электронных конструкций. Аналоговая и цифровая электроника.

Получение начальных профессиональных навыков

1991 — 1994. Различные лаборатории завода "Тантал".

Развивался как электронщик и программист. Разработка, сборка и наладка электронных конструкций (в основном схем сопряжения внешних устройств с различными моделями компьютеров). Сборка и наладка компьютеров типа ZX-Spectrum. Программирование процедур поддержки внешний устройств через созданные схемы сопряжений. Создание программных комплексов эмуляции ПЗУ для ускорения разработки микроконтроллерных устройств. Создание прикладных программ (в том числе, программа реализующая бегущую строку и плывущий кадр для пуска блока рекламы в сетях кабельного телевидения). Погружение в ООП. Изучение и использование одной из первых ООП библиотек Turbo Vision для языка Pascal. Создание собственных графических библиотек «оконных» компонентов для DOS.

Создание собственных библиотек быстрой графики (погружение а алгоритмы Брезинхема и пр.).

Годы учебы

Радиолюбитель с 13 лет. Аналоговая техника (звуковоспроизведение). Увлечение схемами расчета транзисторных схем. Погружение в программирование — моделирование работы транзисторных каскадов усиления. Моделирование оптических процессов. Погружение в ассемблер и компьютерную схемотехнику. Сборка собственных компьютеров. Программирование в кодах процессора i8080 напрямую (ПК "Микроша"). Увлечение физикой, математикой и программированием. Призовые места в районных, городских и областных олимпиадах по физике.

Портфолио

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

Наиболее значимые работы

2014. Разработка распределенного программного комплекса для автоматизированных автопарковок

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

Задача включала в себя унификацию слоя подключения различного кассового, банковского и прикладного технического оборудования, разработку спецификации на драйвера этого уровня, разработку серверного демона, управляемого файлами конфигурации оборудования и конечно-автоматной программой, написанной на специально разработанном языке и исполняемой на специально разработанном движке. Разработка движка и языка конечно-автоматной программы, также входило в задачу данной унифицированной разработки. Для управления и мониторинга к даному серверу, по специально разработанному протоколу могли подключаться разного вида терминалы, в том числе, терминалы технического персонала и пользователей. Терминалы пользователей представляли собой унифицированные решения на Qt Quick. Решение задачи было реализовано в C++ с использованием Qt4.

2013-2014. Разработка платформы для торговли криптовалютой

Клиентское приложение

Целевая платформа Linux, Windows, MacOS X
Основные инструментальные средства C++(GCC), STL, Qt, boost, CMake
Дополнительные технологии TCP/IP, SSL, JSON
Подпроекты, реализованные в рамках проекта Система проектов динамических библиотек специальных инструментальных средств клиентского приложения и заменяемых модулей протокола, используемы как в клиентском, так и в серверном приложениях.
Инструменты, реализованные в рамках проекта Эффективный парсер JSON для TCP-потоков. Применяется в простом, безоберточным сетевом транспорте на основе JSON-объектов.

Серверное приложение

Целевая платформа POSIX (Linux, …)
Основные инструментальные средства C++(GCC), STL, boost, CMake, MySQL
Дополнительные технологии TCP/IP, SSL, JSON
Подпроекты, реализованные в рамках проекта Система проектов динамических библиотек специальных инструментальных средств серверного приложения и заменяемых модулей протокола, используемы как в клиентском, так и в серверном приложениях.
Инструменты, реализованные в рамках проекта Эффективный парсер JSON для TCP-потоков. Применяется в простом, безоберточным сетевом транспорте на основе JSON-объектов.

Описание разработки

В августе 2013 года была собрана распределенная команда с целью реализации платформы торговли криптовалютой. В платформу, основными начальными компонентами входило серверное приложение реализуемое в POSIX для *nix и кроссплатформенное клиентское приложение (*nix, Windows, MacOS X). Команда была поделена на разработчиков архитектуры, разработчиков серверного приложения и разработчиков клиентского приложения.

Моя первоначальная роль в проекте состояла в разработке клиентского приложения. В клиентскую команду входило еще два программиста со студенческим опытом разработки. Разработка началась с создания общего вида MDI-приложения с развитой инфраструктурой (служебный журнал, конфигуратор, сервер хранения параметров состояния для перезапуска и пр.). Для отладки сетевых слоев с отдельным сетевым диспетчером, был написан специальный тестовый сервер. На основе созданной сетевой подсистемы были реализованы и проверены начальные предпосылки прикладного протокола и правильная диспетчеризация сообщений по разным модулям клиентской архитектуры, в том числе к системному модулю приема нотификационных сообщений сервера.

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

В декабре было реализована основа архитектуры серверного приложения, состоящая из управляемой системы вычислительных потоков, в которых работали пулы клиентских подключений, реализуя обработку неблокирующих сокетов через системные вызовы select() или epoll(). Архитектура сервера позволяет менять транспорные протоколы и используемые СУБД. Обработка и того и другого реализовано через динамическое подключение динамических библиотек и может быть переконфигурировано. Т.е. прикладной протокол сервера можно перевести на любой другой сетевой транспорт (в первоначальном варианте сделано две транспортные реализации) и может быть использована любая другая СУБД. Интерфейс взаимодействия с модулем поддержки СУБД не ориентирован явно на SQL, поэтому можно использовать NoSQL реализации.

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

В мае 2014 года была запущена основа бизнес-логики сервера, реализующей торговые отношения. На клиентской стороне сделана соответствующая поддержка операций, как в виде нижележащих слоев сетевого диспетчера и контроллеров, управляющих накоплением данных, так и в виде пользовательских графических интерфейсов.

В июне 2014 года работа над торговой системой была остановлена из-за недостатка финансирования.

Август 2013 — сентябрь 2013. Приложение для визуализации и редактирования генеалогических деревьев

Целевая платформа Windows, Linux
Основные инструментальные средства C++(GCC), STL, Qt, QMake
Дополнительные технологии и протоколы XML, FTP, RTF, GEDCOM XML
Инструменты, реализованные в рамках проекта
  1. Виджеты для визуализации элементов дерева и дерева целиком.
  2. Класс для генерации RTF с нуля.
  3. Класс синтеза специализированного формата GEDCOM XML, используемого для хранения генеалогических деревьев.
  4. Модуль автоматического обновления приложения по FTP.

Описание разработки

Небольшой, но достаточно сложный в реализации проект, который был заказан в индивидуальную разработку в рамках некоторого социального проекта.

Одна из сложностей заключалась в ограниченности дополнительных средств. Это была одна из причин, приведшая к необходимости реализовать генерацию RTF документа с нуля. Необходимо было поддержать только часть спецификации RTF, необходимой для экспорта генеалогического дерева в документ формата RTF.

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

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

Для хранения дерева в файле использовался формат XML, который был построен на основе хранения простейших связей, которые позволят избежать двойной записи, например о том, что объект A является супругом для объекта B, и объект B является супругом для объекта A. Такое упрощение не является прямым соответствием внутреннему построению генеологического графа (при описании родства нескольких семей из-за возможности множественных супружеских связей, возникают связи не укладывающиеся в абстрации дерева). В результате появляются дополнительные несложные, но интересных алгоритмы трансформации представлений.

Приложение поддерживало создание, редактирование, копирование и визуализацию генеалогических деревьев. При редактировании работала функция отката по стеку операций. Ручное возвращение редактируемых значений в ранее записанное состояние отслеживалось и не считалось изменением. Кроме собственного формата хранения поддерживался экспорт в RTF и GEDCOM XML. Для приложения был разработан модуль и протокол автоматического выполнения обновлений через FTP.

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

Апрель 2013 — июль 2013. Система документооборота, подключенная к международной системе бронирования авиабилетов

Целевая платформа Windows, Linux
Основные инструментальные средства JavaSE, JavaEE, Ant, Maven, JDBC, PostgreSQL, Node.js
Дополнительные технологии XML, веб-сервисы архитектуры REST на основе HTTP/JSON
Подпроекты, реализованные в рамках проекта
Инструменты, реализованные в рамках проекта
  1. Парсеры для отчетных документов спецификаций Amadeus GDS (global distribution system).
  2. Парсеры для отчетных документов спецификаций Galileo GDS (global distribution system).
  3. Парсеры для отчетных документов спецификаций Sabre GDS (global distribution system).
  4. Парсеры для отчетных документов спецификаций Sirena GDS (global distribution system).

Участие в разработке веб-приложения документооборота на Java.

  1. Написание обработчиков входящих отчетных документов разных форматов с разных спецификаций GDS (global distribution system).
  2. Интеграция извлеченных из отчетных документов данных в БД (PostgreSQL, JDBC) через веб-сервисы.
  3. Разработка веб-сервисов и клиентов архитектуры REST на основе HTTP/JSON.
  4. Участие в рефакторинге кода бэкоффиса на Node.js.
  5. Перевод проекта на систему сборки Maven (прежде использовался Ant).
  6. Выполнение работ по заморозке проекта (написание технической документации с концептуальным описанием проектной реализации, рефакторинг).

Декабрь 2012 — апрель 2013. Разработка кроссплатформенной библиотеки классов для разделения файлов в гетерогенных сетях

Целевая платформа Windows, Linux
Основные инструментальные средства TCP/IP, C++(GCC), STL, Qt, boost, QMake
Дополнительные технологии
Подпроекты, реализованные в рамках проекта
Инструменты, реализованные в рамках проекта

Самостоятельная разработка кроссплатформенной системы классов для создания программного модуля реализующего безопасное разделение файлов в гетерогенных сетях. Разработка базируется на boost. Прикладная часть модуля выполняется с нуля на основе требований ТЗ. Тестовое кроссплатформенное приложение для проверки модуля строится в Qt4.

С июля 2012. Реализация модуля транспорта SIP

Целевая платформа Windows, Linux
Основные инструментальные средства C++(GCC), STL, Qt, boost, QMake
Дополнительные технологии UDP, SIP, SDP
Подпроекты, реализованные в рамках проекта
Инструменты, реализованные в рамках проекта
  1. Кроссплатформенное демо-приложение для демонстрации работы с классами библиотеки.
  2. Реализация md5 (цель реализации — избежать дополнительных линковок).
  3. Реализация base64 (цель реализации — избежать дополнительных линковок).

Самостоятельная разработка кроссплатформенной системы классов с собственной реализацией протокола SIP с нуля.

Задача состояла в реализации SIP-протокола, ориентированное на применение в конкретном продукте на основе определенного заданного интерфейса и некоторых архитектурных концепций. Разработка была ориентирована на использовании сетевого движка из boost::asio.

Для проверки и демонстрации работы с классам библиотеки было реализовано кроссплатформенное приложение для приверки данной реализации SIP/SDP. Фактически это было приложение выполнявшее установление связи с SIP-телефонами через SIP-сервера. Приложение было реализовано средствами C++/Qt4.

Февраль 2012 — май 2012. Переработка шлюза IRC/JSON на основе включения внутренних объектов прокси SOCKS4, SOCKS5 и HTTP

Целевая платформа Linux
Основные инструментальные средства C++(GCC), STL
Дополнительные технологии TCP/IP, IRC, XML, JSON, SOCKS4, SOCKS5, HTTP-proxy
Подпроекты, реализованные в рамках проекта
Инструменты, реализованные в рамках проекта
  1. Реализация протокола SOCKS4 внутри специального сетевого модуля с заданным интерфейсом.
  2. Реализация протокола SOCKS5 внутри специального сетевого модуля с заданным интерфейсом.
  3. Реализация протокола HTTP-proxy внутри специального сетевого модуля с заданным интерфейсом.
  4. Модуль формальной обработки сокетов по схеме select()
  5. Модуль формальной обработки сокетов по схеме epoll()

Изначально, была поставлена задача интеграция внутренних проскси объектов в код готового шлюза для POSIX-платформы. Требовалось поддержать проски протоколы SOCKS4, SOCKS5 и HTTP.

Существенной проблемой было то, что исходный код был настолько неструктурирован и архитектурно бесперспективным, что пришлось выполнить полную переработку кода. Изначально, весь сетевой сокетный код был представлен "полотенцем" из 2700 строк внутри одной функции с переходами goto. Код использовал некий набор глобальных объектов хранящих состояния некоторых процессов и объектов парсинга и синтеза сообщений.

Начальная задача состояла в придании строгих архитектурных форм, реализующих послойную модульную архитектуру с четкими сетевыми интерфейсами, в каналы которых можно было бы коммутировать дополнительные протоколы построенные на определенных интерфейсах. Модули, содержащие в себе сокеты, были построены для централизованного управления в режиме неблокирующих сокетов. Для этого, были разработаны интерфейсы, включающие регистрации в некотором модуле управления сокетами, который, в свою очередь, привлекал для обработки модули, построенные либо на системном вызове select(), либо на epoll(), что явилось дополнительным расширением функционала системы.

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

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

Декабрь 2011 — март 2012. Разработка спецификации на большую аппаратно-программную систему реализации электронного ASIC.

Разработка спецификации на сложный toolkit, предназначенный для использования в электронной лаборатории при построении проектов специализированных интегральных схем (ИС) на основе ПЛИС в ASIC-решении. Спецификация рассчитана для последующего исполнения на JavaSE с использованием API Eclipse RCP.

Разработку выполняли два инженера. Я выполнял разработку спецификации на программную часть работ, а мой коллега — на аппаратную. Мое участие оказалось востребованным по причинам моей осведомленности о работах данной электронной лаборатории. На протяжении ряда лет я сотрудничал с ними как аутсорсер по выполнению программных заказов и как инженер-программист, работающий там.

Ноябрь 2011 — январь 2012. Генератор программного кода

Целевая платформа Windows, Linux
Основные инструментальные средства C++, STL, Qt, QMake, Java, Swing
Дополнительные технологии
Подпроекты, реализованные в рамках проекта
Инструменты, реализованные в рамках проекта

Генератор программного кода с тестовой визуальной системой разработки иходного задания для модуля генерации. Генерация выполнялась для языка Java и могла генерировать код для графической библиотеки SWING. Модуль генерации кода исполнен в кроссплатформенном варианте C++/boost. Подробности проекта закрыты по просьбе заказчика. Тестовая система визуальной разработки исходного задания реализована в кроссплатформенном варианте на C++/Qt. Тестировалось на Linux Ubuntu 11.10 и Windows XP.

Октябрь 2011 — февраль 2012 года. Разработка тестового автомата для электронной лаборатории

Целевая платформа Windows, Linux
Основные инструментальные средства C++(GCC), STL, Qt, QMake
Дополнительные технологии RS232, TCP/IP
Подпроекты, реализованные в рамках проекта
Инструменты, реализованные в рамках проекта

Задача состояла в разработке приложения с максимально широкой функциональностью в контексте тестирования и управления разработками электронной лаборатории компании заказчика приложения, в которой выполнялись работы по взаимодействию с микроконтроллерами.

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

Была спроектрирована и построена многослойная универсальная система с выделенными транспортными слоями для передачи данных по разным физическим каналам. На момент сдачи проекта были реализованы транспортные модули для последовательного порта и клиент-серверного соединения по TCP/IP.

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

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

Приложение реализовано в кроссплатформенном варианте на Qt. Тестировалось на Linux Ubuntu 11.10 и Windows XP.

декабрь 2008 — март 2011. Программный комплекс мониторинга, управления и тестирования телекоммуникационного оборудования

Целевая платформа Windows, Linux
Основные инструментальные средства C++(GCC), STL, Qt, QMake, CMake
Дополнительные технологии TCP, UDP, JSON, XML, SNMPv2
Подпроекты, реализованные в рамках проекта
  1. Проект распределенной системы серверов (Linux).
  2. Проект кроссплатформенного клиента для подключения к распределенной системе серверов.
  3. Множественные проекты динамических библиотек, определяющих бизнес-логику для распределенной системы серверов.
  4. Множественные проекты драйверов устройств под распределенную систему серверов.
Инструменты, реализованные в рамках проекта
  1. Собственная реализация протокола SNMPv2.

Данный период времени относится ко времени моей работы в компании "АЛСиТЕК" занимающейся разработкой и производством широкой номенклатуры телекоммуникационного оборудования.

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

С августа 2009 была образована команда, занимающаяся развитием данного проекта. C этого времени я начал заниматься, преимущественно, только ядром системы, обеспечивая клиент-серверное взаимодействие по разным протоколам и систему API для поддержки, терминальных модулей клиента, и сервера. Группа, в основном, стала заниматься разработкой этих модулей. Модули на стороне клиента обеспечивали представление пользовательского интерфейса мониторинга и управления. Модули на стороне сервера обеспечивали бизнес-логику управления и сбора информации с устройств.

Разработанный комплекс включал в себя следующие компоненты.

  1. Модульный кроссплатформенный клиент. Представляет некий каркас для управления загрузкой и работой следующих модулей, выделенных в отдельные динамические библиотеки.
    1. Ядро клиента, обеспечивающего сетевые операции и API для поддержки плагинов мониторинга.
    2. Плагины различных протоколов сетевого взаимодействия, используемых ядром системы для обмена данными с различными серверами.
    3. Плагины с кодом графического пользовательского интерфеса для представления элементов мониторинга и управления
  2. Сервер, способный не только обеспечить подключение многих клиентов но и способный образовать серверную master-slave сеть для передачи данных. Каждый из серверов обеспечивает платформу для работы специальных плагинов, обеспечивающих непосредственное управление параметрами устройств. Также, сервер обеспечивает специальный интерфейс для работы со специально написанными драйверами устройств напрямую.
  3. Демонический клиент. Некоторая демоническая программа, использующая динамический модуль ядра клиента для подключения к серверам и сбора с них некоторой части данных в базу данных. На начальный период разработки использовалась СУБД MySQL. Отчеты с БД используются для анализа качества работы оборудования и выявления проблем эксплуатации.

Клиент написан с использованием Qt4. На момент осени 2010 года, ядро клиента использовало три протокола: k095 (native-протокол, специально разработанный мною для данной системы), MSK-JSON (используется некоторыми серверами компании для связи с прежними системами мониторинга) и стандартный SNMPv2, реализованный мною с нуля, без использования сторонних библиотек по SNMP, ASN.1 и пр.

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

Так, одной из важных особенностей разработанного клиента является возможность обеспечить наблюдение и управление параметрами некоторого сервера только на основе XML-файла, описывающего устройства и параметры по специальной, достаточно обширной спецификации. Подключившись к серверу такой клиент сможет предоставить пользователю некоторый унифицированный интерфес для работы с параметрами наблюдаемых через сервер устройств. Написание графических интерфейсов представления устройств опционально расширяет возможности клиента по мониторингу, но не является обязательным. Таким образом, не имея специально разработанного графического плагина для только что разработанного оборудования, можно легко подключить его к системе мониторинга и управления через общий интерфейс, при условии, что на стороне оборудования реализовано ПО, согласно принятой спецификации. Для подключения оборудования разработанного ранее, необходимо было доработать под него соответствующий плагин для сервера, чтобы сервер мог собрать с него данные и реализовать управление согласно разработанной схеме.

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

Серверы системы построены так, что ни сам сервер, ни система серверов не содержит в себе сведений об оборудовании и предоставляет только средства коммуникации с другими участниками комплекса. Интеллект (или бизнес-логику) серверных сетей составляют библиотечные модули (плагины) которые управляют и мониторят конкретные типы оборудования и используют сервер для взаимодействия с клиентом и другими участниками серверной подсети. Логическое построение серверной сети укладывается в схему master-slave, хотя физическое построение, соответствует peer-to-peer взаимодействию. Мастер выявляется на основе внешнего конфигурирования и может быть переконфигурирован "на лету" (т.е. без перезапуска серверной сети).

Июнь 2008 — Сентябрь 2008. Проект локализации СУБД Oracle 11i

Как технический переводчик с английского на русский, принимал участие в проекте локализации СУБД Oracle 11i. Удаленная форма работы. Работа велась с использованием электронной системы управления переводом Trados 7, имеющей централизованную базу знаний перевода, накапливаемую от всех участников распределенной команды переводчиков.

Июнь 2007 — декабрь 2008. ОС для микроконтроллерной сети.

Лаборатория компании "Финпром-Ресурс" Разработка know-how для автомобильной промышленности.

Целевая платформа PIC18
Основные инструментальные средства Microchip Assembler
Дополнительные технологии RS232
Подпроекты, реализованные в рамках проекта
Инструменты, реализованные в рамках проекта

Электронная лаборатория компании реализовала уникальную, по своим характеристикам помехоустойчивости, разработку канала передачи сигналов по линиям питания, применимую в локальных автономных сетях. Для демонстраци прототипа требовалось реализовать некоторый комлекс ПО, одним из элементов которого была разработка мини- операционной системы для узла мастера, который управлял сетью микроконтроллеров. Узел мастера, в той реализации, использовал микроконтроллер PIC18F4620 и мог быть подключен к ПК через RS232.

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

Перед реализацией ОС, был реализован проект загрузчика, который позволял прошивать код ОС прямо из приложения, специально разработанного для мониторинга и управления данной микроконтроллерной сетью (см. проект "Комплекс мониторинга и управления сетью микроконтроллеров"). Таким образом, собрав в среде разработки новую версию ОС, можно было, используя приложение мониторинга и управления, переключить микроконтроллерный узел мастера в режим загрузчика, передать новую копию ОС и запустить ее. Это позволяло использовать профессиональное устройство программатора только в аварийных случаях, что существенно экономило время разработки в десятки и сотни раз ускоряя процесс отладки.

Лаборатория распущена во время экономического кризиса конца 2008 года.

Июнь 2007 — декабрь 2008. Комплекс мониторинга и управления сетью микроконтроллеров

Лаборатория компании "Финпром-Ресурс" Разработка know-how для автомобильной промышленности.

Целевая платформа Windows
Основные инструментальные средства Delphi, C++(GCC), Qt, QMake
Дополнительные технологии RS232
Подпроекты, реализованные в рамках проекта
Инструменты, реализованные в рамках проекта

Параллельно с проектом разработки операционной системы для микроконтроллерной сети (см. проект "ОС для микроконтроллерной сети"), я был занят смежной разработкой и реализацией комплекса мониторинга и управления сетью микроконтроллеров через канал последовательного порта (RS232), подключившись к узлу мастера и выполняя взаимодействие либо через код операционной системы, либо через код загрузчика.

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

Перед разработкой фукций мониторинга и управления, была реализована и отлажена функция передачи файла прошивки в загрузчик, который был написан для модуля мастера в рамках проекта разработки операционной системы.

Более совершенный вариант комплексного приложения мониторинга и управления начал писаться на Qt4, но полностью реализован не был — лаборатория была распущена на время экономического кризиса конца 2008 года.

2005 — июнь 2007. Разработка программного комплекса под фрезерный станок ФПР-3

Лаборатория ООО "НПК ПО" (Научно-производственный комплекс прецизионного оборудования)

Целевая платформа Windows, Linux
Основные инструментальные средства Delphi, C(GCC), Linux driver, C++(GCC), Qt, QMake
Дополнительные технологии LPT
Подпроекты, реализованные в рамках проекта
Инструменты, реализованные в рамках проекта

Третья версия станка фрезерования пластиковых рам была последняя в которой я принимал участие. Работа в компании меня утомила однообразием и низкой заработной платой и я ушел по приглашению в другую компанию, осваивать новые инструменты и направления.

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

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

Наконец третьей долгожданной особенностью третьей версии ПО был выход ПО в двух вариантах — под Windows и под Linux. При этом версия под Linux работала существенно "мягче" реализуя более плавное управление двигателями и имела значительно более совершенную систему визуализации, что определялось некоторыми особенностями реализации и нативной архитектуры. Особенно отличалась работа программного осциллографа. Осциллограф работающий напрямую из ядра Linux (были реализованы некоторые недокументированные фокусы) работал в 8 раз быстрее варианта реализованного под Linux и позволял видеть значительно более существенную детализацию сигналов поступающих в программную обработку.

Одним выдающимся студентом из моей группы, был подготовлен специальный дистрибутив Linux, который был зашит в ПЗУ, что позволило реализовать бездисковое решение со значительно более высоким уровнем надежности.

2006. Разработка ПО для научно-испытательного стенда контроля качества подшипников

Лаборатория ООО "НПК ПО" (Научно-производственный комплекс прецизионного оборудования)

Целевая платформа Windows
Основные инструментальные средства Delphi, Visual Studio 6
Дополнительные технологии Advantech data acquisition card
Подпроекты, реализованные в рамках проекта
Инструменты, реализованные в рамках проекта

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

ПО содержало несколько специально разработанных математических модулей обработки специфической информации. В том числе модули быстрого преобразования Фурье (БПФ). Однако архитектура приложения была построена не под систему "прошитых" в приложение тестов, а под исполнение произвольно написанных тестов, которые должны были быть написаны на специально разработанном языке и манипулировали как сбором информации, так ее обработкой и визуализацией. Специально разработанный компилятор и исполнитель скомпилированного кода были построены так, что на основе скриптового описания подбиралась наиболее оптимальная схема сбора информации на основе которой потом работал исполнитель написанных тестов.

Такая сложная реализация появилась в результате неадекватного технического задания со стороны заказчика. В первой реализации ПО, была попытка сдать задачу именно по системе предложенных заказчиком вариантов схем обработки собранной информации (тестов). К этому были добавлены тесты разработанные инженерами нашей компании. Однако, каждый раз заказчик просил внести разные изменения в виде тех или иных опций к существующим тестам или предлагал новые варианты тестов. Юридически, договор оказался составленным так, что под ним могли оказаться справедливыми любые новые претензии заказчика. Это и превело, в конечном счете к тому, что я полностью переделал систему построев ее на основе исполнителя произвольных тестовых схем сбора, обработки и визуализации информации.

2006. Проекты локализации MS Windows Vista (Longhorn), MS SQL Server 2005 и Adobe InDesign

Как технический переводчик с английского на русский, принимал участие в проекте локализации MS Windows Vista (Longhorn), MS SQL Server 2005 и Adobe InDesign (не помню номер версии). Удаленная форма работы. Работа велась с использованием электронной системы управления переводом Trados 6, имеющей централизованную базу знаний перевода, накапливаемую от всех участников распределенной команды переводчиков. Работа по локализации MS Windows Vista (Longhorn) велась от компании Logrus, а работа по локализации MS SQL Server 2005 и Adobe InDesign — от компании Iti.

2005 — 2006. Разработка программного комплекса под фрезерный станок ФПР-2

Лаборатория ООО "НПК ПО" (Научно-производственный комплекс прецизионного оборудования)

Целевая платформа Windows, Linux
Основные инструментальные средства Delphi, C, Linux driver, C++(GCC), Qt, QMake
Дополнительные технологии LPT
Подпроекты, реализованные в рамках проекта
Инструменты, реализованные в рамках проекта

В 2004 году конструкторы компании и разработчики электронной начинки подготовили выпуск новой, значительно более совершенной модели станка для фрезерования платиковых рам (ФПР). В программной лаборатории мной была написана новая версия станка на основе старых алгоритмов управления (см. "Проект ФПР"). Полностью была переделана архитектура ПО и дизайн всего программного интерфейса.

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

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

Параллельно с реализацие новой версии ПО под Windows, велась аналогичная разработка под Linux. Архитектура этих реализаций существенно различалась, поэтому продвижение в одной ветке разработки никак не отражалось на другой ветке и при сдаче плановой разработки под Windows, реализация под Linux еще не была даже в половинной готовности.

2004 — 2005. Перевод Linux Device Driver 2-nd edition

Во те времена, когда возникла задача погружения в разработку драйверов под Linux, материалов по этой теме на русском языке практически не было, особенно, по актуальной, на тот момент, версии ядра 2.4. Поэтому, чтобы упростить задачу себе, своей группе и всем остальным, я взялся за выполнение максимально грамотного перевода известной на тот момент классики жанра, фундаментального труда "Linux Device Driver. 2-nd edition" выпущенного издательством O’Reily. Переведенные главы я выкладывал на сайте Северо-Кавказской группы пользователей Linux, и, впоследствии, они были размножены на множестве других ресурсов Интернет.

2003 — 2004. Популяризация Linux

Начальные эксперименты по использованию Linux в задачай управления и визуализации для мониторинга дали впечатляющие результаты и тема потребовала продолжения. Задача состояла из трех основных подзадач.

  1. Начиться писать драйверы под Linux.
  2. Подготовить инфраструктуру компании под использование Linux
  3. В качестве начального примера, не рискуя сроками плановых разработок, реализовать полностью под Linux одно из уже существующих решений.

В процессе выполнения этих пунктов, началось широкомасштабное общение с Linux-сообществом, в процессе которого было получено множество новых знаний. В том числе, образовалось погружение в web-технологии через некоторые идеи создания тематических сайтов. Появился первый опыт работа с PHP (MySQL) в небольших проектах.

Поставленная задача действительно была выполнена. Кроме прочего, началась переориентация завода на максимальное использование Linux с целью сокращения затрат на Windows-лицензии и резким сокращением вероятности потерь документов от вирусов.

2003. Моделирование нейронных сетей

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

Предварительно, появился интерес к языку Java, который изначально был ориентирован на робототехнику. Строя далекоидущие планы использования специальных Java-процессоров, все математическое моделирование нейронный сетей было выполнено на Java. Изучалась модель полносвязной сети с произвольным количеством слоев и произвольным количесвом нейронов в каждом слое.

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

2003 — 2004. Разработка программного комплекса под фрезерный станок ФПР

Лаборатория ООО "НПК ПО" (Научно-производственный комплекс прецизионного оборудования)

Примерно в начале 2003 года, компания НПК ПО получила заказ на долговременную разработку и производство фрезерных станков по обработке пластиковых рам для окон. Начались долгие экспериментальные исследования как в области 3D-графики (с использованием OpenGL), так и в области управления новым железом. Кроме того, появились первые попытки использования Linux в качестве базовой ОС для управления станками.

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

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

  1. Разработка языка управления заданием на основе существующих стандартов под языки для станков с ЧПУ.
  2. Реализация компилятора с созданного языка преобразующего задание в некий промежуточный код.
  3. Разработка исполнителя промежуточного кода.
  4. Разработка математических алгоритмов расчета траекторий, скорости, ускорения и производной ускорения для одновременного высокоточного управления фрезой по двум координатам.
  5. Разработка математических алгоритмов фильтрации шумов при чтении параметров с датчиков и алгоритмов предсказания их значений в фазе выдачи расчетных кодов управления.
  6. Разработка горизонтальной и вертикальной систем управления фрезой.
  7. Разработка надежных алгоритмов устранения дребезга контактов (в первой версии станка данная проблема была решена не лучшим образом, но, в следующих версиях, ситуация была исправлена путем реализации красивого и надежного решения).
  8. Разработка удобного конфигуратора под большую систему параметров конфигурирования системы (более полусотни параметров)
  9. Разработка системы обработки и сбора статистики для ПИД-регулятора и системы представления отладочной информации.
  10. Разработка графической системы представления результатов управления для отладки и анализа аварийных ситуаций.

2002. Разработка ПО измерительного стенда для отбраковки реле стеклоподъемников

Лаборатория ООО "НПК ПО" (Научно-производственный комплекс прецизионного оборудования)

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

Данный проект был итересен тем, что в нем было реализовано первое решение для насущной задачи создания автоматической системы построения конфигуратора на основе файла описания параметров конфигурации. Реализованная идея состояла в следующем. Запускалось специально написанное приложение в котором выполнялось проектирование дерева параметров с подробным описанием типа, назначения, возможных значений, связей с другими параметрами, способа ведения истории, начального значения по-умолчанию и т.д. После обработки такого описания, программа создавала систему файлов на языке программирования Delphi (Object Pascal), которые надо было просто добавить в проект для того, чтобы приложение могло обращаться к описанным параметрам и изменять их через пользовательский интерфейс следуя системе прав и правилам изменения, описанным в файле конфигурации.

2001. Среда разработки, средства компиляции и отладки для прошивки электронных устройств конечных автоматов

Лаборатория ООО "НПК ПО" (Научно-производственный комплекс прецизионного оборудования)

Продолжая работать в НПК ПО, в 2001 году я получил одну интересную задачу автоматизации рабочего места разработчика программ под серию конечных автоматов выпускаемых компанией для управления разными промышленными и бытовыми системами. Разработчик таких програм должен был, определить проверку событий на каждом из возможных состояни и описать переходы так, чтобы потом превратить это в битовые последовательности отражающие проверку цифровых датчиков, вычисленое управление и переход в следующее состояние. Напрашивалась оптимизация и мне предложили ее выполнить.

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

Январь 2000 — 2001. Разработка программного комплекса под токарный станок некруглого точения

Лаборатория ООО "НПК ПО" (Научно-производственный комплекс прецизионного оборудования)

В январе 2000 года, параллельно с обучением в аспирантуре, начал работу в компании НПК ПО, занимающейся разработкой прецизионного оборудования и измерительных стендов.

После развала экономики в середине и конце 90-х, компания оказалась в ситуации, когда отдел программистов на заводе отсутствовал, что значительно затрудняло попытки выполнения ряда заказов. Не было не только действующих программистов и техники, но и тех, кто мог бы рассказать, как все это делается.

На основании прежнего опыта разработки ПО управления железом под операционной системой DOS и под управлением компьютеров существоваших до эпохи IBM PC, мне, совместно
с выдающимися инженерами разработчиками цифровой и аналоговой электроники, которые чудом сохранились на заводе, удалось разработать технологии управления железом сначала под ранние версии Windows (до эпохи Windows NT), а потом, и под Linux.

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

Программная задача состояла из четырех основных подзадач.

  1. Обеспечить визуальный редактор ввода и редактирования сложного поршневого рисунка.
  2. Обеспечить математические способы максимально гладкой интерполяции узловых точек для создания трехмерного контура точения. Данная подзадача связана как с задачей редактирования, чтобы позволить выполнить ручное микронное выравнивание негладких интерполяций, и с задачей обработки — предоставляет вычисленное положение резца в любом его пространственном размещении.
  3. Задача сбора информации с датчиков координаты, скорости, ускорения и углового положения ротора с дальнейшей математической коррекцией на лету тех значений, которые считаны при большом уровне помех. По полученным значениям следовало вычислить предсказания для фазового попадания значения в тот момент времени, когда будет выведено вычисленное усилие на резец.
  4. Алгоритм вычисления усилия на резец на каждой итерации управления. Алгоритм строился на основе известных схем ПИД-регуляторов с введением ряда нелинейных коррекций для учета особенностей управляемой системы.

Мне удалось самостоятельно выполнить все стоявший передо мной программные задачи, за исключением разработки алгоритма управления, который был придуман в деталях ведущим инженером-электронщиком и мне оставалось только правильно его запрограммировать, с вычислением всех диффиренциальных и интегральных составляющих, и отладить на "живом" станке. Для отладки таких алгоритмов писался дополнительный код для визуального наблюдения за поведением алгоритмов в возможном диапазоне значений широкого круга параметров. Это не совсем похоже на автоматические тесты, но имеет ту же задачу облегчения отладки в реальных условиях.

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

Апрель 1999 — Июнь 1999. Разработка вычислителя тепловых процессов для тел, изображенных средствами визуального редактора

Данный проект стал моей дипломной работой на кафедре прикладной физики Саратовского Государственного Университета им. Чернышевского. Физико-математическая суть работы состояла в особом использовании метода конечных элементов применительно к телам которые можно описать набором осесимметричных элементов. В этом случае, можно получить значительное упрощение для построения матрицы связности.

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

В какой-то степени, качество исполнения данной работы, позволило положительно решить вопрос о моем направлении в аспирантуру.

Работы без подробностей

  • Ноябрь 2011. Работа в компании "aSoft". Участие в проекте разработки приложения для MacOS X. Занимался разработкой нестандартных графических компонентов и форм с нестандартным видом и поведением. Разработка на Objective-C, Cocoa, Xcode.
  • 1996-2005. Задачи математического моделирования физических и химических процессов. Языки Fortran-77, Pascal, C, C++. Платформы Windows и Linux.
  • 1999. Преподавал программирование на языке Pascal/Delphi для учеников физико-математических классов гимназии.
  • 1995-1996. Ремонт принтеров и копировальных аппаратов. Прокладка и настройка локальных сетей на базе Novell 3.12.
  • 1995. Инженер по разработке аналоговых и цифровых узлов для модулей световой рекламы.
  • 1993-1998. Выступал консультантом и посредником в приобретении компьютеров частными лицами и организациями. Проводил обучение работе с компьютером. Занимался репетиторской деятельностью — программирование, математика, физика, английский.
  • 1994. Разработка низкоуровневого и высокоуровневого ПО для платы симуляции ПЗУ для разработки микроконтроллеров. Работа чем-то схожая с аналогичной работой выполненной на год раньше, но для другой схемы, под другой тип микроконтроллера и с другими требованиями к ПО. Операционная система MS DOS 3.x. Языки ассемблер и Pascal.
  • 1993. Освоение Unix SCO. Задачи моделирования на C. Скрипты обработки данных на shell (sed/awk/…).
  • 1993. Разработка драйверов для платы сопряжения с ортопедическим измерительным стендом. Операционная система MS DOS 3.x. Язык ассемблера.
  • 1993. Разработка низкоуровневого и высокоуровневого ПО для платы симуляции ПЗУ для разработки микроконтроллеров. Операционная система MS DOS 3.x. Языки ассемблер и Pascal.
  • 1992-1994. Разработка узлов сопряжения PC с различными устройствами через порт LPT.
  • 1992-1994. Периодически занимался отладкой плат для компьютеров ZX-Spectrum (московская схема), собранных на монтажном участке лаборатории компании. Также занимался отладкой модулей сопряжения ZX Spectrum с дисководами.
  • Июль 1992 — октябрь 1992. Самостоятельная разработка программы отображения рекламы на каналах кабельного телевидения начала 90-х ("подъездное" видео). Разработка на ассемблере для ZX Spectrum. Через устройство врезки в видеосигнал от видеомагнитофонов обеспечивал формирование рекламных вставок в виде бегущей строки и плывущего кадра с эффектами прозрачности.
  • 1990-1991. Простое моделирование физических процессов на языке Бейсик.
  • 1991. Разработка цифровых плат бытового назначения, управляющихся с портов управления компьютера "Микроша". Процессор i8080. Разработка программ под этот компьютер на языке ассемблера и напрямую в машинных кодах.
  • 1988-1990. Разработка цифровых плат бытового назначения, управляющихся с портов управления калькулятора MK-52. Разработка программ под MK-61/MK-62.