Есть вопрос

Мой опыт работы

Мой первый опыт работы был с компьютером на процессоре Z80 в 90ые годы. Тогда я с помощью языка Basic и псевдографики реализовал визуализацию значений функции эмуляции звука. И так как компьютер был доступен лишь в редкие часы мне приходилось программировать в тетрадке, а затем проверять код на компьютере.

Мои основные разработки

Моя первая профессиональная деятельность

Затем была учёба в университете и работа в государственном архиве. В мои обязанности входило разработка баз данных и систем ввода и учёта данных, а так же администрирование локальной сети предприятия. В этот период мне пришлось разработать первый веб-сайт и разместить его на сервере правительства моей области. Среди прочих требований было обязательным то, что программа должна была работать в среде Linux. Так начался мой опыт работы с Linux и первое своё веб-приложение я реализовал на понятном мне языке программирования C++ и с помощью библиотеки CGICC. Так как на этом сервере нам не дали доступа к базе данных я и мой коллега разработали собственный формат файла в котором хранились все данные для работы сайта (текст, фотографии, статические css и js файл). В этом файле применялось сквозное шифрование и имелась система контроля доступа к объетам. Таким образом я пытался сэмулировать работу файловой системы Linux. Так же был разработан собственный шаблонизатор микроязык разметки. В ходе этой работы я научился работать с системой Make, CVS, разобрался с тонкостями компиляции и инсталяции программ в различных средах. Наша программа запускалась в Windows 2000, FreeBSD5.3 и RedHat/Linux. Для взаимодействия с HTTP сервером использовался протокол Cgi

Переход от C++ на использование Python и Mysql

В течении нескольких лет я поддерживал работку приложения предприятия на языке C++ и операционной системы Windows. Затем было принято решение провести оптимизацию и переработку всех систем с использованием операционной системы Linux. Почти на всех компьютерах была проведена замена операционных систем и переобучение пользователей. Так же с этого момента я начал использовать для разработки Python и Mysql как сервер для баз данных. В качестве системы генерации HTML был выбран, казавшийся на тот момент стабильным, язык XSLT и я во время отпуска создал альтернативу государственной программы «Архивный Фонд». Программа использовала инновационный на тот момент для архивов подход ввода данных и доступа к данные с помощью веб-интерфейса. Была создана система которая интегрировала в себя многочисленные базы данных государственного архива и предоставила сотрудникам единый интерфейс с разграничением функционала в зависимости от авторизации. Системы была построена с помощью Mysql/Python/XSLT/HTML/JS

Разработка центрального фондового каталога

Следующим этапом стала разработки системы объединяющей данные со всех архивов области. Система наследовала структуру базы данных предыдущего проекта, но использовала Django. С помощью этой системы удалённые сотрудники других архивов области, после авторизации, импортировали свои базы данных в формате DBF и сайт предоставлял возможность поиска по всем архива нашей области. ( http://fk.archiv-kirov.ru/ )

Разработка мультидоменной CMS с помощью Flask

Следующим естественным этапом развития стала разработка мультидоменной системы управления сайтами как для государственных архивов так и для других коммерческих и общественных клиентов. Для разработки системы я выбрал Flask, как гораздо более гибкий и удобный фреймворк относительно Django, который, как выяснилось имеет очень слабый ORM, очень плохой язык шаблонов и не гибкую внутреннюю архитектуру. Впрочем я участвовал в разработке многих проектов с помощью Django и занимаюсь поддержкой нескольких проектов на этом фреймворке и вижу что Django всё таки лучше любого PHP фреймворка. Моя новая система управления контентом помимо основных функций публикации текстов и файлов имела множество дополнительных модулей. Использование гибкой архитектуры Flask позволило мне создать систему динамической загрузки модулей и решать задачи разных клиентов в рамках одного проекта и одной базы данных. Например,, одним клиентам была необходима синхронизация сайта с социальной сетью и я реализовал модуль интеграции с помощью API, модуль занимался синхронизацией контента сайта и группы в социальной сети, а так же предоставлял клиенту уведомления о событиях на сайте через социальную сеть. Были реализованы множество модулей от онлайн платежей до выставление счетов и актов для внутренней работы предприятия. Для совместной работы с дизайнерами и другими программистами была использована Git

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

Участие в разработке b2b портала

Дальше я стал активно участвовать в чужих проектах. Так например я разрабатывал b2b версию сайта 003ok.ru . Суть проекта была в том, что сайт 003ok предоставлял возможно заказать подарок из своего города в любом другом городе. Моя задача была разработать систему кабинетов оптовых покупателей, которые делая оптовые заказы на оптовом сайте, автоматически обновляли витрину возможных подарков своего города на розничном сайта. Система была построена с помощью Django и использовала мультидоменные возможности этого фреймворка. Одной из главных задача была синхронизация оптового каталога с несколькими оптовыми базами. Синхронизация происходила через обработку и импорт файлов прайсов оптовых баз. (сейчас это проект уже закрыт из-за высокой конкуренции Yandex на этом рынке)

Разработка PAM модуля

Интересным опытом оказалась защита сайтов и серверов. После того как ко мне обратились сотрудники одной кафедры Бауманского университета за помощью в решении проблемы заражения их сайта вирусов. В процессе анализа работы сервера я выяснил, что сервер кафедры атаковали с целью подбора пароля SSH и спустя полгода сервер был взлома и использован для рассылки спама и заражения клиентов сайта вирусами. Стало ясно, что защиты с помощью пароля оказалось не достаточно и сложностью любого пароля и DenyHost можно с обойти помощью распределённой сети роботов подбирающей пароли. Для решения этой проблемы была разработана двухэтапная авторизация. Я разработал PAM модуль, который включался после правильного ввода SSH пароля и требовал от пользователя ввести временный пароль который был отправлен на номер телефона системной учётной записи пользователя с помощью SMS через шлюз доставки SMS сообщений. Этот модуль написан с помощью языка C и расширяет систему авторизации Linux (https://github.com/ffsdmad/pam_p11). Очевидно, что с его помощью можно надёжно защитить свои Linux сервера. На разработку и отладку модуля у меня ушла одна неделя.

Разработка ERM+HELPDESK

Следующим интересным опытом оказалась переработка HelpDesk системы компании которая занимается обслуживанием автозаправок в Москве (dkmt.ru). Существующая система представляла из себя PHP скрипт который обрабатывая входящую почту генерировал заявки на обслуживание АЗС и в связке с Delphi программой отправлял уведомления о новых заявкам исполнителям с помощью SMS. Для реализации я опять выбрал Flask и систему динамических модулей моей мультидоменной системы. С помощью sqlachimycodegen я сгенерировал из существующей базы данных модели Flask, расширили их и добавил новые. Затем реализовал ERP предприятия со всеми функциями прежней Helpdesk системы. Среди основных нововведений я бы отметил:

  • разделение пользователей по ролям с соответствующими настройками интерфейса

  • возможность ручной настройки источников входящей почты

  • интеграция точек обслуживания с геолокационными сервисами Yandex

  • интеграцию с Telegram для дублирования отправки уведомлений

  • использование мобильной вёрстки для доступа к системе со помощью мобильных устройств

  • механизм формирования и учёта рабочего времени сотрудников

  • встроенный багтерекер и система помощи

  • механизм хештегирования для внутренней перелинковки объектов системы

  • переработка Delphi приложения с расширением возможностей обработчика SMS

  • использование Celery для обработки фоновых задач

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

Участие в проекте создания межрегиональной торговой площадки

Дальше мне приходится подхватывать разработку чужого проекта на Django, главной задачей является создание специализированных кабинетов пользователей в зависимости от роли пользователя, оптимизация работы каталога для работы с огромным числом записей, создание специализированных интерфейсов ввода данных для сотрудников портала. В этом проекте опять проявляется все проблемы Django и сложности адаптации фреймворка для решения сложных задач отличающихся от функций обычной CMS. Для решения проблемы было решено разработать и применять RestFull API и использовать на фронтэнде с помощью Angular. Для этого я опять сгенерировал модели Flask, интегрировал систему авторизации и управления ролями Django в микросервисы Flask. Была проведена оптимизацию тяжёлых ORM запросов и замена самых сложных на оптимальный чистый PosgreSQL код. Для оптимизации работы с мультимедиа контентом был разработан микросервис обработки мультимедиа – https://github.com/ffsdmad/ffstatic, сейчас я активно использую этот сервис в других проектах. Так же этом проекте мной реализованы новые для меня функции агрегатора новостей и генератор почтовых рассылок с помощью flask_celery. В этом проекте мне приходилось координировать работы нескольких разработчиков, системного администратора и верстальщика. Для взаимодействия мы использовали mercurial, а затем вернулись на git. Деплой проекта осуществляется с помощью TeamCite.

Видео процесс совместной работы над этим проектом

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

Разработка Scada системы

Однокашик-инженер-схемотехник предложил реализовать систему управления разработанной им системы контроля эстакады сортировки древесины. Данная система предназначена для автоматизации процесса сортировки брёвен. Так появилась Scada система, которая с помощью модуля modbusrtu взаимодействует датчиками и реле. Полученные данные обрабатываются с помощью математических методов с целью выделения из непрерывного потока данных объектов которые соответствую брёвнам проходящим по конвейеру эстакады. Затем выделенные объекты заносятся в базу данных и проходят цикл логической обработки для направления в подходящий сборник древесины. Система использует многопоточные возможности Linux и Python реализует несколько циклов обработки данных:

  • процесс обработки регистров датчиков и реле (выступает в роли UPS сервера)

  • цикл обработки логики

  • цикл обработки входящих событий (используется механизм Redis подписок)

в качестве интерфейса системы выбран веб-интерфейс и модуль Flask_admin. С помощью модуля Flask_admin реализовано разграничение прав и учёт пользователей и обрабатываемой древесины, а так же контроль за состоянием и настройки Scada. В качестве метод взаимодействий используется модуль socketIO, который доставляет данные о состоянии Scada на страницу где данные обрабатываются с помощью Angular библиотеки и формируется анимированный тренд. На тренде отображаются брёвна находящиеся на конвейере. Тренд формируется с помощью SVG полигонов. Так же в системе реализована система учёта действий пользователей и обработка статистики работы эстакады.

► Часть описания системы

Для управления состоянием Scada я использовал функционал Redis сервера, для синхронизации поток я использовал Queue.

Видео процесса работы Scada в режиме эмуляции сигналов с датчиков

На разработку данной я потратил один месяц

Разработка многопоточного веб-краулера

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

Видео процесс работы веб-краулера

На разработку системы я потратил одну неделю

Разработка измерителя кубатуры

На основе разработанной ранее системы управления сортровкой леса разработал систему подсчёта и учёта кубатуры леса входящего на дереобработку. Данная система:

  • переопределяет основной объекст Скада системы
  • обрабатывает всего два датчика
  • для отображения и ввода информации используется графический интерфейс Tkinter
  • в графическом интерфейсе имеется возможность просмотра и редактирования:
    • количественных показателей за смену, за месяц, максимальные
    • изменение настроек Скада блока
    • добавление пользователей и выбор руководителя смены
    • отображение длинны двигающего под датчиком "снаряда"
  • так же имеет возможность использовать веб-интерфейс
  • использует микрокомпьютер Rasbery PI3 и 5 дюймовый тачскрин

 

 


+7(977) 904-26-12
Яндекс.Метрика

Сформулируйте

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