У 2005 мій загін Нацгвардії відправили до Іраку в рамках операції «Звільнення Іраку». Моєю армійською спеціальністю була 92А, що означає фахівець з логістики та запасів. Мої завдання полягало в тому, щоб замовляти запчастини для механіків, забирати їх, повертати старі, розбиратися з небезпечними матеріалами, відправляти і приймати транспортні засоби та обслуговувати ліцензії. І багато чого ще. Загалом, в той час вся система крутилася на ULLS-G (Unit Level Logistics System - Ground, система логістики рівня загону - наземна), яку потім вже змінила SAMS-E (Standard Army Maintenance System - Enhanced, розширена стандартна система обслуговування армії), яка отримала в якості. Порівняно з 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. Я був приємно здивований. Я, звичайно, працював не за нагороду, але було приємно усвідомлювати, що твоя робота приносить користь.