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

топ 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 – чем для нужности. В основном прикручивал разные рюшечки для удобства мониторинга, и для аналитики.

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





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

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

Архив записей в блогах:
Это цитата сообщения -KRASOTA- Оригинальное сообщение Иллюстрации от Pat and Robin DeWitt Иллюстрации от Pat and Robin DeWitt АРТ АРТель Иллюстрации ...
К среде следователями столичного главка МВД завершено предварительное расследование по громкому делу о мошенничестве в отношении экс-заместителя министра просвещения РФ Марины Раковой (экс-вице-президент ПАО "Сбербанк" — директор дивизиона "Цифровые платформы образования") и её ...
История дурацкая, и виноват в ней, конечно, больше всего я сам. Думаю, как безопаснее и проще разрешить ситуацию. Живу в селе, в частном доме. Несколько лет назад умер мой отец, и я вступил в наследство, дом в собственность переоформил, но со всей возней и моими болезнями не сделал сразу ...
Из автореферата диссертации кандидата исторических наук Марины Саламатовой. Отзыв депутатов в советской политической практике В рамках реализации политики «оживления Советов», высшие советские органы (ЦИК СССР и ВЦИК), пытаясь активизировать деятельность депутатского корпуса и ...
Уважаемые господа потсоны, у нас горе.. Конечно большинство из вас помнят известного иркутского педораса мачо Владимира Аксенова. Человек стал для сообщества фактически своим, так как среди сопесочников практически не осталось людей, которые ...