Первая программа
Как я уже сказал в предыдущей главе, на совей первой работе я значился
инженером-программистом, хотя на самом деле был простым эникейщиком,
ничего в программировании не смыслящем. Но в какой-то момент ко мне
пришло осознание того, что это нужно исправить.
Организация в которой я работал принимала экзамены на знание правил
устройства электроустановок и правил техники безопасности у
ответственных за электрохозяйство, энергетиков и электриков. Для проверки
использовалась какая-то старая досовская программа. Разумеется никто никаких
лицензий на эту программу не приобретал. Она просто кочевала по компьютерам
и успешно использовалась в коммерческой деятельности. В один прекрасный день нас
посетил один из правообладателей и пригрозил судом.
Руководство конечно запереживало, но я предложил выход - написать свою
программу. Ведь это был всего навсего тест - несколько вопросов по теме
и выдача результата. Можно даже было скопировать вопросы, слегка их
перефразировав. Руководство отнеслось к моей идее крайне скептически,
но мне было наплевать. Я решил во что бы то ни стало написать эту
программу.
Дело было за малым - подобрать стек технологий, продумать функционал и
собственно научиться программировать :)
Функционал был просто скопирован с оригинальной экзаменационной
программы, а вот со стеком пришлось повозиться. Дело в том, что у меня
родилась задумка сделать целый учебный класс, где бы стояли компьютеры
на которых принимаются экзамены, а экзаменаторы могли бы удалённо
наблюдать за процессом, видя происходящее на экране.
При этом программка могла бы распространяться как отдельное приложение
и быть кроссплатформенной. Взвесив все за и против я решил писать на
JavaScript. В те годы не было никаких электронов,nodejs,jquery и прочих
фреймворков, да и сам JS вряд ли рассматривался большинством
разработчиков как что-то стоящее и уж тем более не рассматривался как
язык для написания standalone приложений. Но я решил рискнуть. Купил
книгу "Библия JavaScript" (она хранится у меня до сих пор) и понеслось.
Первая версия использовала HTML Application для windows. Возможность
создания HTA появилась с выпуском Internet Explorer 5.0 и это стало
главным системным требованием. Конечно версия была сыроватой и не
соответствовала всем моим задумкам, но руководство компании пришло в
восторг, оценив не только перспективу использования программы для своих
собственных нужд, но и возможность её продажи. Сразу же закупили
несколько пачек дискет, заказали наклейки на дискеты и начали
продавать всем желающим подготовиться к сдаче экзамена.
Дело пошло настолько успешно, что мне дали карт-бланш на дальнейшую
разработку. Я почти создал новый microsoft :)
С увеличением числа продаж, руководство потребовало реализовать защиту
от копирования. Средствами js на тот момент этого сделать было нельзя.
Поэтому я занялся изучением delphi/pascal и сделал небольшую оболочку
для запуска программы. Защиту же мне делать совсем не хотелось, поэтому
я реализовал самый примитивный вариант, привязавшись к label дискет -
на новых заводских он был пустой,а при последующем форматировании имел
не нулевое значение. Люди перезаписывали содержимое дискет на свои бу
дискеты и программа не работала. Но на самом деле можно было взять
новую дискету, либо отформатировать старую с очисткой label или просто
запустить hta откуда угодно. В дальнейшем программа эволюционировала и
вместо hta я использовал компонент delphi.
Было забавно слышать отзывы от некоторых пользователей, хваставшихся,
что они сломали мою защиту :)
В целом же отзывы были крайне положительными. Часто ко мне приходили
люди и просили дать им дискетку бесплатно. Запомнился они товарищ из
местного техникума и наш с ним разговор. Он просил дать ему копию
бесплатно, а я спросил почему они в техникуме не подключат студентов к
написанию аналогичной программы, ведь это по сути своей ерунда да ещё и
на JS. Он ответил мне, что студенты у них тупые.
Дальше пришло время построения учебного класса. Задача осложнялась тем,
что парк компьютеров, выделенных для этой задачи был устаревшим - 4 или
5 486 машин, которые с трудом тянули win98. Поэтому я принял решение
сделать класс на базе vnc терминалов. Порывшись в интернете (в
обеденное время через модем 33.6), обнаружил какой-то минималистичный
дистрибутив, умещавшийся на одной дискете и содержащий урезанный vnc
клиент. Это было то, что мне нужно. Осталось только настроить сервер. А
как раз в это время вышла первая версия браузера mozilla. Это был
настоящий подарок, поскольку Mozilla был кроссплатформенным и
использовал XUL для формирования интерфейса браузера, что позволяло
модернизировать его под свои нужды, чем я и занялся.
В то время не было никаких специальных xul runnerов, электронов и.т.д,
да это было и не нужно. Я просто модернизировал интерфейс браузера и
сделал кроссплатформенный дистрибутив с разными запускалками для Windows
и Linux, а по факту можно было запускать систему везде, где работал Mozilla.
Конечно в связи с этими преобразованиями программа заметно пожирнела и больше не
умещалась на дискету, поэтому дальше распространялась на cd, хотя
остатки дискет ещё довольно долго распродавались.
Именно xul версию я использовал для vnc сервера, запуская несколько
виртуальных инстанций и передавая изображения на терминалы. Это
позволило мне реализовать ещё одну свою хотелку и сделать возможным для
экзаменаторов, находившихся у себя в кабинетах, наблюдать за ходом
экзамена глядя на снимки экрана терминала.
Мне поступали предложения сделать версии программы не только для
энергетиков, но и для теплотехников и вскоре я выпустил новый продукт
на базе xul версии, который включал уже не только тесты, но был
фактически прототипом мультимедийного пособия.
Конечно все это выглядело несколько громоздко, нерационально. Да, ведь
это было лишь начало. На тот момент я не владел другими языками кроме
js и pascal, не разбирался в веб серверах, базах данных и понятия не
имел о клиент-серверной разработке. Но уже четвёртая версия программы
претерпела существенные изменения. Набравшись опыта я полностью
переписал код, превратив свою примитивную программку в целую систему с
возможность приобретения тестов по подписке, получением обновлений
через интернет и многими интересными моментами... Однако в связи с
реорганизацией некоторых госструктур, вся эта система стала никому не
нужной и все мои наработки просто канули в лету.
Тем не менее я приобрёл бесценный опыт, причём не только в
программировании, проектировании, самодисциплине.... Я чувствовал, что
прикоснулся к миру настоящих хакеров, преодолевая барьеры в собственной голове,
разбирая устройство систем и создавая что-то новое. Это было не передаваемое ощущение,
прямо таки отформатировавшее моё сознание. Для меня больше не было
переделов. Я формулировал задачу и находил способ её решения, какой-бы
сложной и невыполнимой эта задача изначально не казалась, из какой бы
области эта задача ни была, хоть из программирования, хоть из
администрирования, хоть из реальной жизни.