Конференц-комната для практики по коучингу

В 2015 году в команде разработчиков сервиса автоматизации повышения квалификации психологов курса "Школа Коучинга" разработал конференц-комнату для проведения практических занятий по коучингу. Комната естественно была интегрирована в общий сервис обучения, и поддерживает аудио-видео чат на основе RTMP/Flash. Сначала в качестве медиа-сервера интегрировали nginx (позже пробовали платный nginx-plus), но столкнувшись с проблемами RTMP-реализации на нём, заменили на rtmplite. Сигнализация в комнате реализована на nodejs/ws, и за счёт полностью асинхронной реализации способна выдерживать большую нагрузку.

На стороне сервера производится и микшируется из разных потоков полная аудио-запись сессии (конференции). Применяются sox, mencoder и ffmpeg (avconv). Обработка (микширование) записи производится через внутреннюю очередь (самописная), что полностью сводит на нет вероятность положить систему под наргузкой соответствующими процессами. На данный момент имеем серьёзные архитектурные проблемы с RTMP/Flash, в связи с чем планируем мигрировать на webrtc с использованием SIP для сохранения записи на стороне сервера.

Система тестирования и анализа производительности NexentaOS

В 2012-2013 годах в компании Nexenta (в команде иностранных разработчиков) занимался разработкой системы тестирования и анализа производительности дисковой и сетевой подсистем NexentaOS. Web-сервер (Nginx/NodeJS/ExpressJS/Handlebars/Bootstrap, MongoDB) выполняет следующие функции:

Клиент выполняет извлечение теста (JSON), запуск нагрузки, обработку и загрузку результатов обратно на сервер. Реализовано две версии клиента: perl (полный функционал клиента), nodejs (ограниченный функционал в составе фреймворка компании). Тестирование может сопровождаться запуском произвольного кода (редактируется на web-сервере) между различными этапами теста; реализован запуск кода perl и javascript (nodejs). Для интеграции системы тестирования в существующие производственные процессы компании также были разработаны одноразовые скрипты импорта данных из XLS-отчетов и результатов запуска тестов вручную.

Сайт регионального отделения НОД

В 2013 году разработал сайт Икутского штаба НОД и около года занимался его обслуживанием и развитием. CMS также не использовалась. Backend: Nginx, PSGI/Starman, HTML::Template, PostgreSQL. На frontend использовался Bootstrap и JQuery. На сайте присутствовала более значительная закрытая часть с доступом для актива штаба, где они управляли разделами с новостями и акциями. Также в закрытой части велась база сторонников, также велась активная работа над автоматизацией sms и email рассылок.

Интернет-Магазин EcoLove

В 2012 году разработал интернет-магазин экопродуктов Краснодарского края. CMS не использовалась, все написано с нуля. Использованы следующие инструменты: Nginx, PSGI/Starman, HTML::Template, PostgreSQL. Сначала проект работал на хостинге под ОС FreeBSD, затем переехал на Ubuntu Linux. На этом проекте я начал изучать frontend разработку (JQuery, ajax, JavaScript в целом).

Системная интеграция ISP в целом

C 2005 по 2012 год имею опыт настройки мониторинга работоспособности различных узлов и сервисов ISP с помощью обработчиков на perl и различных вставок в рабочий код сервисов. Есть опыт установки и настройки системы Cacti. В 2007 году написал систему рассылки email-сообщений, которая анализирует входящие bounce-сообщения и формирует отчет. В рамках проекта по ESME написал несколько обработчиков email-сообщений. В 2011 году написал обработчик факс-сообщений в email.

Работая в компании Мобилтелеком я написал огромное множество небольших скриптов на языке perl, описывать которые не вижу смысла. В основном это скрипты обработки статистических данных для биллинга ISP, но также это различные надстройки биллинга для выполнения действий в автоматическом режиме (как то: сброс клиентской сессии PPPoE, получение статуса хостинга сайта или почтового ящика, и т.д.).

Проект зеркалирования (HA) web-портала Президента и Правительства РБ

В конце 2011 года полностью реализовал проект зеркалирования web-портала Президента и Правительства РБ. Синхронизация данных средствами rsync и mysql-репликация с фильтрами. Автоматизация смены режима резервного сервера до запуска одного скрипта, обратный переход по инструкции. Разработка документации. Контроль идентичности БД средствами percona toolkit.

Интеграция DNS-серверов в биллинг ISP

С 2005 года занимаюсь обслуживанием рекурсивных и авторитарных DNS-серверов на ISC-BIND. Имею богатый опыт диагностики и решения проблем, связанных с DNS в целом. В 2012 году успешно интегрировал авторитарные DNS серверы в биллинг ISP (миграция на PowerDNS с MySQL бэкэндом и репликацией). Также с 2005 года занимаюсь обслуживанием клиентов по партнерскому соглашению с ru-центром, имею опыт автоматизации бизнес-процессов в данной области (HTTP и SMTP шлюз nic.ru).

Программа управления доступом через PPPoE (Mikrotik)

В 2012 году разработал web-приложение управления доступом к сети Интернет через PPPoE-сервис на роутере Mikrotik. Через API RouterOS с web-шлюза на FreeBSD (PSGI/Plack) оператор мог управлять доступом клиентов, сбрасывать пароли доступа, отслеживать нарушение договора по сессиям, менять пропускную способность канала согласно договорам, а также добавлять или удалять клиентов. Эта программа, конечно, не была биллингом, однако удалось существенно упростить работу небольшого провайдера.

HotSpot NAS

В августе и сентябре 2012 года написал с нуля Hotspot NAS систему на FreeBSD (взамен аналогичного решения на Mikrotik RouterOS). Авторизация radius (по MAC и логин/пароль), radius-аккаунтинг с alive-пакетами, удержание сессий с помощью http cookies, обработка трафика ip accounting с логинами (как в ROS), гибкая настройка сервисов, динамическое ограничение полосы пропускания по ответу radius и пр.

Исходники и конфиги лежат здесь.

Интернет-радио

В 2010 году разработал Интернет-радио канал на icecast и ices0. Плейлист генерировался с помощью perl-вставки, она же производила необходимые обновления на сайте радио (текущий и предыдущий трэки для голосования, выход из ротации в архив). На сайте использовался perl CGI для обновления статической версии сайта. В целях снижения нагрузки на сайт, CGI скрипты слушателями использовались только для голосования непосредственно (все остальное лежало в виде готовых html файлов).

Интеграция платёжных систем в биллинг ISP

C 2007 года занимаюсь интеграцией и обслуживанием платежных шлюзов систем E-Port (затем перешли на ОСМП - Qiwi), BVCOM (пластиковые карты) и QuickPay. В 2009 году совместно с компанией СвязьСервис разработали схему приема и обработки платежей через их офисы обслуживания. Интеграция производится через Radius, шлюзы работают на HTTP-сервере Starman (без фреймворка, используются базовые модули Plack).

Программа пассивного мониторинга количества хостов за NAT

В 2010 году разработал систему мониторинга нарушений условий договора клиентами по количеству одновременно работающих хостов. Используется технология комбинированного анализа id и ttl в IP-пакетах, данные для анализа собираются с NAS-серверов Mikrotik через API (на интерфейсе на 60 сек запускается sniffer, затем полученный raw-файл скачивается по FTP и подвергается анализу утилитой tcpdump).

Система мониторинга потребления ресурсов ЖКХ

Также с 2010 по 2011 год занимался разработкой серверной части проекта СМПР (smpr.burnet.ru). Сбор данных с приборов учета ЖКХ компании "Взлет". Сначала отображение работало на perl-скриптах с модулем RRDs, затем сайт и отображение разработал PHP-программист.

WebMail

В 2010 году разработал WebMail (Apache CGI, MIME::Tools, Authen::Radius, DBM::Deep, HTML::Template, Net::IMAP::Client). Первая реализация обращалась непосредственно к Maildir ящикам, но по соображениям производительности и удобства перешли на IMAP. Авторизация и аутентикация через Radius, функции для самостоятельного восстановления почты пользователем из карантина.

Интеграция shared web-хостинга в биллинг ISP

С 2006 по 2012 год занимался интеграцией сервиса shared web-хостинга в биллинг ISP. Функции управления сайтами из биллинга реализованы через RPC (ssh/rexec), вся серверная конфигурация (apache, nginx, php) вынесена в шаблоны, что позволяет мигрировать с одной схемы хостинга на другую без необходимости в одноразовых скриптах. Скрипт обслуживания на сервере использует XML-шлюз (XML::Parser::Lite::Tree) для получения необходимой информации из биллинга: контроль использования диска по ТП (включая mysql базу), проверка соответствия DNS-записей, и др.

Начиная с 2002 имею опыт настройки web-хостинга на apache для php/mysql. В компании Мобилтелеком получил опыт интеграции web-хостинга в биллинг ISP: ssh (pam_radius), ftp (proftpd mod_radius). Имею опыт настройки и обслуживания сайтов на Apache+Nginx+PHP (в режимах mod_php, php-cgi, suphp), настройки дисковых квот (freebsd quota, proftpd quota), jail-систем (частично централизованное обновление с помощью mount_nullfs).

Приложение ESME

В 2006 году разработал "SMPP"-часть ESME: рассылка sms, прием и обработка sms на короткие номера (Net::SMPP, DBD::mysql), WebUI и структуру БД разработал PHP-программист.

Интеграция email-хостинга в биллинг ISP

С 2005 по 2010 год удалось полностью интегрировать хостинг Internet-почты в биллинг ISP: Exim и tPOP3d (а затем dovecot) через встроенный perl-интерпретатор используют информацию о почтовых ящиках и алиасах из биллинга (встроенный perl-модуль сервера Radiator). Статический спам-фильтр (dspam) используется через perl-прослойку, которая позволяет пользователю влиять на его работу, а также обеспечивает работу карантина. В 2007 году разработал WebUI к журналу exim, который позволяет операторам техподдержки оперативно решать проблемы прохождения почты и восстановления ее из карантина.

Программа учёта трафика сети Интернет

2003 - 2012 гг.

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

Этот проект я разрабатывал и применял в разных компаниях:

Пограмма представляла собой связку прокси-сервера squid и perl web app для контроля. Данные хранились в PostgreSQL (DBD::Pg), web app был реализован на apache через CGI.pm.

Сбор статистики поначалу осуществлялся perl-обработчиком из cron путём периодического чтения журналов прокси-сервера. Затем я переработал её на непрерывное чтение журнала через tail -F постоянно запущенным perl-процессом. Аналогичный метод сбора данных был применён позже для сбора статистики прохождения трафика через ipfw.

Контроль доступа сначала производился через подключаемый извне файл acl, что было достаточно неудобно - приходилось программно перезагружать squid при изменениях в файле. Позже я интегрировал squid более тесно - через ext_acl и redirect_program. Таким образом вообще вся конфигурация acl squid была перенесена в БД, включая адреса сетей. Это дало огромные возможности по гибкости конфигурации прокси-сервера из web app: отдельные конфигурации для разных сетей, исключительные правила для подсетей, разный тип авторизации для разных сетей - по http basic auth или по фиксированному IP-адресу.

Что было в планах на реализацию:

Последняя версия програмы есть от 2009.05.05.

Программа учёта клиентов ночного клуба

Холдинг "Диал-С", 2004 год

Задача: вести регистрационный учёт посетителей ночного клуба. В соответствии с требованиями руководства НК, каждый пришедший посетитель должен предьявить документ удостоверяющий личность. Регистрации подлежали: ФИО, дата рождения, тип и номер документа, дата и время входа в НК. Обычный бумажный журнал для этого не подходил, нужна была программа, с помощью которой можно было оперативно получать данные по посетителям и делать выборки.

Для реализации я запросил любой ПК. Поставил на него FreeBSD, настроил Apache и написал простую web app, которая работала через стандартный CGI (CGI.pm), хранила данные в PostgreSQL (через DBD::Pg), вёрстка лежала в шаблонах HTML::Template. Авторизация не использовалась - ПК к сети не подключался.

То, что было в планах, но так и не было реализовано:

Обработка фармацевтических сертификатов

ЗАО "Шрея Корпорейшнл", 2002 год

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

Я взялся автоматизировать этот процесс, а именно:

Реализовал это с помощью perl скрипта, который запускался раз в сутки. Для работы с FTP использовался модуль Net::FTP, для работы с сетевыми дисками домена Windows NT использовался модуль Filesys::SmbClient. Печать из сетевой папки делали операторы вручную. Скрипт складывал образы сертификатов на сетевой диск для хранения, и дублировал новые в папку для печати операторами. Таким образом, операторы спокойно удаляли файлы после печати, чтобы не печатать по второму разу, и одновременно имели локальное хранилище всех сертификатов на всякий случай.