С днем сисадмина причастных и не очень.

топ 100 блогов goblinid29.07.2016 Последняя пятница июля - неофициальный день системного аминистратора. Праздника официального нет  и не было вроде никогда, а неофициальный - вот он.

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

Поздравляю...

А вспомнить мне в этот день хочется одну историю, которую я публиковал в этом ЖЖ еще в далеком 2013 году, но которую никто особо с тех пор не читал. :) Просто история про смесь сисадминства, кодинга, организации айти-работ, и выпуска конечного, итогового продукта. Тогда мне это казалось просто вершиной работы... Тогда - я понимал, что я делаю, зачем и почему.  Тогда было интересно.

С днем сисадмина причастных и не очень.

Сейчас уже не так. Совсем не так.

А историю - почитайте. Она веселая. И с хорошим концом. Под катом...



Расскажу, как я один раз почувствовал себя Стивом Джобсом и Биллом Гейтсом в одном лице.
Началось все давно - в 2006 году.В то время я работал в той же конторе что и сейчас, на должности жалкого инженера-программиста 1й категории, которая позволяла ну не то что бы выживать, конечно - вполне жить, но хотелось большего! Кроме того, работа была несложна для меня - несколько рутинных процедур в день без применения мозга, и свободное время потом. Потому было скучно. Изучал в это время новое (новым для меня было автоматизировать то что я делаю - писать скрипты на vbs, читать про новинки, искать свою нишу) - старался не отстать, не выпасть из потока ИТ, ну и просто пытался не сидеть на месте! Просто ждал должность - которую мне пообещали на этой работе - и должность позволила бы заниматься совсем бы другими вещами, а не рутинными процедурами! :)

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

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

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

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

Так вот - где то через месяц данные терминалы стали появляться как грибы - то тут, то там. Как то раз - воспользовался - понравилось - быстро, удобно - комисси за платеж требует мало, 1% от суммы платежа - почему нет - не надо ехать в кассу - стоять очередь, считать сдачу. Удобно.

И вот в этот момент приходит коллега и делает историческое предложение - переделать софт этого терминала - для того что бы принимать местные платежи.

На посмотреть мне принесли исполняемый файл, который запускаясь – рисовал интерфейс терминала. Страшненький по нынешним меркам интерфейс – но какой был. Зато функциональный и удобный. Кое как разыскал сейчас у себя скриншотик:
С днем сисадмина причастных и не очень. image002
Настройка интерфейса осуществлялась через xml.

Это позволяло формировать поля для любого оператора. И первоначально задачу мне ставили – типа нарисуй местных операторов и попробуй на них провести платежи. Операторов нарисовать не проблемы была – xml простейший. И платежи на них формировались легко. В том плане что в определенном каталоге создавались нужные файлики! но уходить они должны были в процессинг Киберплата – и это понятно – так как своего процессинга у нас не было.

Пришлось думать – как отказать заказчику. Или, подумалось мне - можно же немного покреативить. Начал копаться – и обнаружил, что на сайте Киберплата выкладываются исходники этой программы (программа называлась webclient – я ее по русски дальше вебклиентом называть буду). Причем исходники были на том языке, который я на тот момент знал (Borland C++ Builder). Не сказать, что хорошо знал – но некое подобие говнокода гнать мог.

Открыл исходники – полистал – и родился гениальный план. Делаю реверс-инжиниринг исходников вебклиента, добавляю свой тип платежей, перекомпилируем, ставим. А для обработки своих платежей - пишем специального демона, разрабатываем протоколы обмена с местными операторами и получаем бабло. Большое бабло… (наивный чукотский юношь :-)).

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

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

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

Взял я с собой на встречу у знакомого ноутбук (у меня тогда своего не было), рассказал про интерфейс и что настраивается он легко. Но объяснил что дальше без кодинга мы не продвинемся. Нарисовал на бумажке схему работы, объяснил про перекомпиляцию вебклиента, объяснил что систему отправки платежей писать придется самим – и что это не очень просто – но я с корифаном справлюсь. Заказчику было сложновато объяснить все тонкости, но его техническому специалисту – в принципе все было понятно. В общем, обговорили сроки – в которые я представляю первую бету – и взяли паузу – для обсуждения главного – оплаты работы. Запросил я по своим меркам тогда большую сумму – 3000 долларов США в рублях по курсу ЦБ на день оплаты. Какой же я наивный был –до сих пор себя корю, что не сделал по другому. Но не бизнесмен я.

Договор не заключали – все было на словах оговорено. В общем-то сумму по оплате работы утвердили через пару дней – и началось действо.

А да – я еще выпросил один из терминалов себе домой – что бы проверять сборки на месте, не отходя от кассы, так сказать.

Начали кодить. Что это были за дни… Я думал кодом, идей ворошилось кучи. Бессонные ночи, красные глаза. Все как в фильмах про программистов.

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

С днем сисадмина причастных и не очень. image004

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

С этим закончили быстро относительно. Где-то за две недели. А потом бац – огромный облом. Вебклиент то тоже на месте не стоял – он тоже развивался – и начинают выходить новые версии – с новыми исправлениями и новыми багами. readme.txt одной из версий:

С днем сисадмина причастных и не очень. image006

Как-то так. Приходилось брать исходники каждой новой версии, добавлять свой код, исправлять, тестировать, и дебажить.

В это время Илюха работал над серверной частью процессинга. И тут мы тоже столкнулись с проблемами. Например, первая и серьезная проблема – это то что стандартный модуль Borland C++ Builder по подключению к серверу крашился случайным образом через n-ое количество запусков. Причем, крашился так – что приходилось перезапускать всю нашу софтинку. А дело-то должно было происходить на терминале – где человека быть не может и он не сразу туда приедет. Стали думать…

Написали маленькую софтинку (отдельную), которая только открывала подключения к серверу и закрывала их. Сервер был поднят тут же на машине, на которой писали код. Крэшится, зараза. Писать свой модуль подключения – плохо и неэффективно. Но выход нашли быстро – была такая фирма Indy - написала свои фреймворки к С++ Builder. Бесплатно их распространяла. Загрузили, прикрутили, протестировали – работает.

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

Постепенно код получался все более отработанным. Вот один из процессов отлова багов у меня дома – спасибо супруге – засняла:

С днем сисадмина причастных и не очень. image008

Видно настоящих программеров – с пивом пашем, все дела! %) Молодость, энтузиазм, пиление кода – чего еще нам нужно было.

Чувства – которые я испытал, когда мы смогли провести первый платеж от начала и до конца (прием платежа на терминале, отправка на тестовый сервер, отправка выписки за день заказчику) я не смогу предать ни словами, ни печатными буквами, ничем. Это сродни наверное рождению твоего ребенка. Одним словом – у нас все получилось. А получилось у нас все – где-то в начале ноября 2006 года.

В ноябре же Заказчик заключил первый договор на прием платежей в пользу местных операторов. Прием платежей мы должны были начать в адрес одного местного провайдера Интернета.

Обговорили с ними схему – передали форматы платежей – все готово к тестингу.

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

Помню, что было весело, пьяно, шумно и очень-очень счастливо. Смогли, реализовали, сделали. Мы можем многое и даже больше. Мы можем все.

Как вернулся домой, не помню. Но с утра – перед работой забежал в магазин, убедится что все работает.

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

Заказчик не отказал и не кинул. В один из вечеров я съездил к нему, и получил все причитающиеся нам деньги. Около 90 000. Рублей. Заехал к Илье, поделился.
Решили отпраздновать это дело. А на празднике я решил – что мы сильно продешевили – я об этом писал в начале.
Дело в том, что за наш софт Заказчик заплатил нам всего лишь стоимость одного терминала. А прибыль от внедрения нашего софта пошла уже после одного месяца после внедрения. И если бы мы с Илюхой сели на процент от этой прибыли – то может быть и проиграли бы – но очень-очень вряд-ли, скорее всего получали бы свою неплохую прибавку к жалованию еще очень долго. Ну а раз не получилось – пришлось мне придумывать – как нам еще заработать.

Сопровождение.

По договоренности с Заказчиком, после получения оплаты мы должны были сопровождать наш проект 3 месяца еще бесплатно – а потом уже фиксить баги за деньги. Вроде так было. В общем-то за эти три месяца удалось выявить слабые стороны проекта. Самым большим недостатком была невозможность нормально сводить суммы платежей по местным операторам в одном центре. Ну-то есть данные о платежах отправлялись с разных терминалов на разных операторов (к тому времени были окучены почти все местные провайдеры интернета, сеть кабельного телевидения, вплотную приблизились к приему оплаты коммунальных услуг и штрафов ГИБДД), а в офис уходили выписки с каждого терминала отдельно. Эти выписки приходилось сверять и сводить вручную оператору.

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

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

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

Заказчик согласился – и мы приступили ко второй части.

Допиливание и продажи.

Для начала решили написать мониторинг. Решение выбрано было самое гибкое – мониторинг должен жить в вебе. Интерфейс простейший – главное функционал... Помимо мониторинга терминалов необходимо собирать статистику по платежам. Решено – пишем на php. Этот язык я совсем не знал – но не беда – взял книжку, начал осваивать. В первую очередь написал авторизацию пользователей (секурную) и простейший сбор данных о терминале. Наша программка на терминале брала heart-beat пакет у вебклиента (он к тому времени умел уже опрашивать устройства терминала на предмет их самочуствия) на наш же сайт в инете (put) и получала ответ о доставке или не доставке. Пакет на сайте парсился и укладывался в базу. Частота отправки – раз в пять минут – вполне достаточно.
Для пользователя получилась красивая таблица терминалов – с описанием живы они или нет, а также, какие устройства в терминалах глючат.

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

Построил простейшую аналитику – с какого терминала сколько платежей в адрес кого-то. А так же несколько простых отчетов написал статистических. На php программировать с каждым днем нравилось все больше и больше – и получалось все легче и легче.

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

За это время заматерел, общаясь на форумах терминальщиков… и решил попробовать продать софт еще кому-нибудь.

Разместил тему на kiosks.ru, по моему. И не поверите, на меня выходят представители одного из банков Ростова. Попросили демоверсию с мониторингом, сделал. Они посмотрели – и купили. За те же 3000 долларов. Плюс какие-то деньги за сопровождение в течении трех месяцев после установки. Офигеть.

Правда, и тут я совершил небольшую ошибку – они попросили изменить кое-что в логике работы программы и я как дурак повелся. И с этих пор пришлось вести две версии программы, одну для Магадана, другую для Ростова. Трудоемкость увеличилась, не намного, но все же!

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

В общем, софт зажил полной жизнью. Где-то к концу 2007 года мы перестали вносить правки в софт – ну просто особо больше править нечего было – все работало как часы. :)
Я еще немного ковырял мониторинг – но так, больше для изучения php – чем для нужности. В основном прикручивал разные рюшечки для удобства мониторинга, и для аналитики.

Вы спросите – а сегодня что? А не поверите – до сих пор работает – как в Ростове, так и у нас…. Только я им совсем больше не занимаюсь Ростов – выходил на меня в позапрошлом году, когда упал макхост – у них был на нем поднят домен и базы мониторинга. Сделал без вопросов (но не бесплатно).
А в Магадане софт пашет – только уже с другой системой приема платежей. Пашет уже не на терминале а на сервере. Компания-владелец терминалов – имеет сейчас самую большую терминальную сеть в городе, насколько мне известно. В общем, хорошо мы потрудились… и если бы жили не совсем на краю земли – глядишь, заделали бы свой стартап – да продавали бы сейчас еще одну систему приема платежей. Но не судьба…





Всех причастных еще раз с праздником...

Оставить комментарий

Архив записей в блогах:
Сальваторе Адамо (итал. Salvatore Adamo; 1 ноября 1943, Комизо, Сицилия, Королевство Италия) — бельгийский шансонье, итальянец по происхождению. Свои песни Адамо исполняет на девяти языках. Объём продаж его дисков по всему миру составляет более ста миллионов. Снег кружится, Ты ...
Смотреть это видео Если б на Земле жило 100 человек? что было бы Посмотрите может и в так играете со щенком ...
Остановка сердца – смертельно опасная патология, на устранение которой есть лишь несколько минут. В такой ситуации орган перестает сокращаться и качать кровь, и, если не принять меры по восстановлению сердечного ритма, наступает смерть. Экстренная кардиологическая помощь включает в ...
(стихи М.Ю.Макаров, музыка и исполнение нашего двора) https://disk.yandex.ru/d/BORExQL9hEPyUA   Средний возраст человека Лет так восемьдесят пять ... (Думаю, к средине века Так всё будет обстоять) Это где-то тысяч тридцать Дней получится тогда ... Каждый день нужна водица ... ...
Оказывается в Москве есть Графский переулок :) На Волхонке попалось вот такое граффити. Не пойму, то ли это незаконченная картинка, то ли такая задумка автора. А вот объект около станции метро Университет. Чем не самострой? Почему не сносят? Для тех, кто не видел публика ...