
В 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. Я был приятно удивлён. Я, конечно, работал не за награду, но было приятно сознавать, что твоя работа приносит пользу.
