Как я получил медаль за код

в 19:32, , рубрики: medal of honor, perl, Администрирование баз данных, армия, Программирование, программисты-герои

Как я получил медаль за код - 1
В 2005 мой отряд Нацгвардии отправили в Ирак в рамках операции «Освобождение Ирака». Моей армейской специальностью была 92А, что означает специалист по логистике и запасам. Мои задачи состояла в том, чтобы заказывать запчасти для механиков, забирать их, возвращать старые, разбираться с опасными материалами, отправлять и принимать транспортные средства и обслуживать лицензии. И много чего ещё. В общем, в то время вся система крутилась на ULLS-G (Unit Level Logistics System – Ground, система логистики уровня отряда – наземная), которую потом уже сменила SAMS-E (Standard Army Maintenance System – Enhanced, расширенная стандартная система обслуживания армии), которая – так получилось – использовала в качестве бэкенда Oracle. По сравнению с SAMS-E, система ULLS-G выглядела как динозавр. Я много её использовал за 4 года, проведённые на службе. И это было ужасно. ULLS-G работала под MS-DOS (угу), и большинство компьютеров, которые я использовал, работали под MS-DOS (это был 2000 год). Когда мы прибыли на место дислокации, большинство компьютеров уже работали под WinXP/2K, поэтому можно было запускать ULLS-G в режиме совместимости с MS-DOS.

Итак, ULLS-G была ужасно неудобной. Она не поддерживала мышь. Всё общение происходило через клавиатуру. К концу службы я уже печатал вслепую – я запомнил все комбинации. Одной из самых неприятных особенностей программы было то, что она не поддерживала пакетных операций. Если вам надо было распечатать лицензии всех солдат подразделения, вам надо было печатать их по отдельности. Надо было ввести номер лицензии, появлялось окно с информацией о солдате, после чего можно было печатать лицензию. В нашем подразделении было порядка 150 солдат, и для распечатки всех лицензий мне приходилось печатать их для каждого солдата по отдельности. Если возникала необходимость добавить информацию о квалификациях солдат, это тоже надо было делать по отдельности. Обычно это не так напрягает, так как квалификации проходят за раз не так много людей. Но так получилось, что изначально в базе не содержались данные о квалификации солдат. Поэтому мне пришлось для каждого из них заполнять квалификацию и затем печатать его лицензию. Для 150 солдат это заняло почти час. И, как это принято в армии, дальше было хуже. Перед тем, как мы передислоцировались, мы проходили тренировки с разными средствами передвижения, и после каждой тренировки мне приходилось вводить полученные квалификации и перепечатывать лицензии.

Что и говорить, это раздражало. А мне ещё рассказали, что по прибытию на место дислокации нам предстоит пройти ещё больше разных тренировок со средствами передвижения, что означало, что мне придётся опять вводить все квалификации и перепечатывать все лицензии. Как программист, я постоянно ищу способы упростить себе работу. Мне не хотелось просиживать штаны за вводом этих квалификаций и распечаткой лицензий. Я был слишком ленив для этого, и вообще это было неэффективно. Поэтому я решил заняться автоматизацией процесса. Сначала я попробовал разобраться в формате файлов ULLS-G. Получилось не совсем, в основном из-за нехватки времени (военные тренировки и всё такое). Но вдруг, по счастливой случайности, я наткнулся на страничку, на которой кто-то выложил ODBC-драйвер для ULLS-G. В результате я мог делать SQL-запросы к данным из ULLS-G. И я начал писать perl-скрипты для работы с данными. Когда мы прибыли в Ирак, у меня был работающий скрипт, создававший лицензии в виде текстовых файлов для всех солдат. Работал он пару секунд. Теперь самая долгая часть процесса состояла в распечатке лицензий. Но я ещё не закончил. Мне всё ещё не улыбалось добавлять квалификации вручную. Поэтому я сделал другой скрипт, который автоматически добавлял данные по квалификациям в базу. У него даже был конфигурационный файл, где можно было задавать, кому какие квалификации прописывать.

Когда мы воссоединились с нашим подразделением, я снова распечатал все лицензии. Я ещё помню, как удивился мой сержант, когда я через 20 минут вернулся со стопкой тёплых лицензий. «А разве раньше у тебя это не занимало больше времени?» — спросил он. Я начал рассказывать про скрипты, но он прервал меня после слов Perl, SQL и ODBC, и забрал лицензии. И хорошо, что он не стал расспрашивать дальше – строго говоря, разрешения на эти действия у меня не было. Только лицензированным специалистам можно было возиться с установкой ULLS-G.

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

Excel мог работать с ODBC-соединениями, зарегистрированными в Windows, а у меня это уже было настроено при работе perl-скриптов с ULLS-G. Я воспользовался этим и написал макрос для Excel, расставлявший данные в поля. Скрипт прописывал всю информацию по транспортным средствам, а также много чего такого, чего другие подразделения не вносили отчёт, например пробег транспорта и проч.

С точки зрения программирования это было не такое уж и достижение. Я просто нашёл способ выбирать данные из базы ULLS-G. Но командование сильно впечатлилось, особенно командир отделения и сержант. Через 2-3 месяца нашего пребывания на месте, мы получили нового командира батальона. Его очень заинтересовали мои достижения. После демонстрации он спросил «Ты в курсе, что ты не должен этим заниматься?». Я сначала испугался, но он улыбнулся и сказал мне, что он не против, потому что вроде бы я знал, что я делаю, и результат повышал эффективность подразделения и точность отчётов.

Ещё через несколько месяцев осталось немного времени до нашего возвращения из Ирака. Мои скрипты и макросы работали практически без проблем. В конце службы состоялась церемония награждения. Командир и первый сержант прибыли для раздачи наград. И я был удивлён, что меня вызвали, потому что я ничего такого не ожидал (я обычно отсиживался на базе; я считал, что хорошо выполняю свою работу, но не думал, что это достойно награды. Редко получается выслужиться, работая с логистикой и поставками). После вручения медали «За отличие» командир и первый сержант поздравили меня и поблагодарили. Я сначала решил, что это просто благодарность за «хорошую работу», а потом я ознакомился с документами и увидел, что командир отделения выдвинул меня на награждение из-за моих perl-скриптов и макросов для excel. Я был приятно удивлён. Я, конечно, работал не за награду, но было приятно сознавать, что твоя работа приносит пользу.

Автор: SLY_G

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js