2005年,作為“伊拉克自由行動(dòng)”的一部分,我所在的國民警衛(wèi)隊(duì)被派往伊拉克。我的MOS(軍事專業(yè))是 92A,這基本上是一個(gè)后勤供應(yīng)工作。我負(fù)責(zé)訂購和收拾機(jī)械的零部件,并退還舊器件,管理危險(xiǎn)品緊急處理小組,分派/回收任務(wù)車輛,并辦理許可證。其實(shí)還做一些其他的事情,只是現(xiàn)在不記得了。總之,當(dāng)時(shí)這個(gè)系統(tǒng)的核心是一個(gè)叫ULLS-G(部隊(duì)級(jí)物流系統(tǒng) – 地面)的工具。我說“當(dāng)時(shí)”,是因?yàn)槲覀兓貋聿痪煤?SAMS-E(標(biāo)準(zhǔn)陸軍維護(hù)系統(tǒng) – 增強(qiáng)型)替換了ULLS-G,它使用了Oracle作為后端數(shù)據(jù)庫。比起 SAMS-E,ULLS-G簡(jiǎn)直就是恐龍。被派遣前,我在軍隊(duì)足足使用四年之久,從頭到尾都是噩夢(mèng)。 ULLS-G是一個(gè)DOS應(yīng)用程序(是的,MS-DOS),我在軍工廠使用的大多數(shù)計(jì)算機(jī)只能運(yùn)行DOS系統(tǒng)(這時(shí)是21世紀(jì)初,所以DOS系統(tǒng)很常見)。到我被派遣時(shí),多數(shù)計(jì)算機(jī)都運(yùn)行WinXP/2K或類似的系統(tǒng),所以可以使用”MS-DOS兼容模式”運(yùn)行ULLS-G。
正如我前面提到的,使用ULLS-G是很痛苦的。作為DOS下的應(yīng)用,你不能使用鼠標(biāo),只能通過鍵盤進(jìn)行交互。記得在任務(wù)快結(jié)束時(shí),我已經(jīng)記住了按鍵,甚至不用看鍵盤,只需輸入它們就可完成工作。沒有任何形式的批處理功能,是該系統(tǒng)令人感到可怕的地方。比如說你得打印士兵的許可證,就不得不一個(gè)一個(gè)去檢查并打印。你得在一個(gè)屏幕前,輸入他們的許可證號(hào),加載出許可證,然后打印。我們部隊(duì)大約有150名士兵,為了打印所有人的許可證,我不得不逐個(gè)查找每個(gè)士兵。如果你要為士兵添加一個(gè)車輛認(rèn)證,同樣得逐一去做。其實(shí)這還不是最讓人惱火的,因?yàn)槊看沃恍杼幚聿糠謨?nèi)容。但我們是專門為某一任務(wù)成立起來的(我們的士兵分別來自第180炮兵團(tuán)第1營的四個(gè)連,組成了第180炮兵團(tuán)第1營第1旅部與旅部連),這意味著這個(gè)ULLS-G系統(tǒng)里沒有士兵的認(rèn)證。所以一開始,我不得不手動(dòng)輸入每個(gè)士兵的認(rèn)證,然后打印出他們的許可證,基本上要花費(fèi)大半個(gè)小時(shí)。在正規(guī)部隊(duì),情況會(huì)更糟糕。離開之前,我們?cè)谌A盛頓州劉易斯堡有預(yù)動(dòng)員訓(xùn)練。士兵要進(jìn)行多項(xiàng)車輛訓(xùn)練(M-1114, 5-ton, deuce-and-half,等等)。這些都是交錯(cuò)進(jìn)行的,所以每次訓(xùn)練任務(wù)結(jié)束后,我都不得不添加認(rèn)證并重新打印許可證。
不用說,我很惱火。我甚至得到消息,到伊拉克后,將會(huì)有更多的車輛認(rèn)證,這意味著我將不得不全部重新添加認(rèn)證并打印許可證。現(xiàn)在作為一名程序員,我不斷地想發(fā)設(shè)法簡(jiǎn)化工作。我不想坐在那一個(gè)一個(gè)地添加認(rèn)證、打印許可證了。一是我懶得弄,二是這件事情效率太低了,所以我決定使這個(gè)過程自動(dòng)化。我做的第一件事就是嘗試找出ULLS-G數(shù)據(jù)文件的格式。不幸的是,我一點(diǎn)都沒弄出來,主要因?yàn)闀r(shí)間不夠 (所有的軍事訓(xùn)練都在進(jìn)行)。不過令人意外地是,我偶然發(fā)現(xiàn)了一個(gè)頁面,上面有ULLS-G的ODBC驅(qū)動(dòng)程序。這意味著我可以運(yùn)行SQL查詢ULLS-G數(shù)據(jù)文件。有了這些,我開始編寫Perl腳本查詢數(shù)據(jù)。我們達(dá)到了伊拉克的時(shí)候,我有一個(gè)可以生成所有士兵文本文件形式許可證的腳本。腳本運(yùn)行只花了一兩秒,最長的部分就是打印出許可證。但我還沒有完成,所以令人惱火的是不得不手動(dòng)添加駕照。所以我又寫了一個(gè)腳本,以使駕照可以全部一起添加給駕駛員。腳本還有一個(gè)配置文件,允許把指定的某種認(rèn)證添加到某人。
到了部隊(duì)以后,我又不得不打印每個(gè)人的證件,我仍記得二十分鐘后當(dāng)我拿著一堆剛剛從打印機(jī)打印出來還溫?zé)嶂脑S可證時(shí),電機(jī)中士那疑惑的表情。他問道:“這個(gè)需要很長時(shí)間嗎?”,于是我開始和他談?wù)撃_本,可是當(dāng)我剛說出幾句關(guān)于Perl、SQL和 ODBC 連接時(shí),他就不再聽了,點(diǎn)著頭把許可證放到 TOC,或許他沒有問我太多問題是好事,因?yàn)槲易龅氖率遣惶慌鷾?zhǔn)的,只有取得執(zhí)照的技術(shù)人員(另一種MOS崗位) 才能安裝,至少在部隊(duì)眼中,我是不合格的。
在伊拉克時(shí),我發(fā)現(xiàn)我們必須每天向TOC發(fā)送報(bào)告(最終發(fā)送到軍營)。這些報(bào)告包括車輛的情況(報(bào)廢還是完好)和一些其他信息。幾乎所有的部隊(duì)都是手動(dòng)向Excel表中輸入信息,然后打印出來并送到TOC。手動(dòng)輸入總是出錯(cuò),每天早上我都得花20-30分鐘修正報(bào)告,確保它是最新的,最后打印出來,送到TOC。我記得有一兩次因?yàn)樾畔⒊鲥e(cuò)被批評(píng)了,從那以后變得倍加小心。我又生氣了,這些事情需要有一個(gè)更好的方式來做,而且確實(shí)是有的。Excel可以使用在Windows中注冊(cè)的ODBC連接,而且我已經(jīng)用ULLS-G的Perl腳本注冊(cè)了一個(gè)。
所以,我使用Excel宏簡(jiǎn)單地復(fù)用了同一個(gè)連接,這個(gè)宏指令可以幫我高效地計(jì)算表格中的所有項(xiàng)。棒極了,它能夠自動(dòng)更新報(bào)廢汽車單,同時(shí)也包括了其他部隊(duì)沒有上報(bào)的信息,像所有車輛的服務(wù)狀態(tài)及其行駛里程。以前的話,當(dāng)它被從調(diào)度返回時(shí),我們不得不手動(dòng)查找每個(gè)車輛的維修狀態(tài),所以說服務(wù)狀態(tài)位在日常工作中是非常有用的。現(xiàn)在,我只需要查找Excel表格就能了解到需要維護(hù)的車輛。
從編程的角度來看,我做的并不是很出色。我只是找到了從ULLS-G數(shù)據(jù)庫獲取信息的方法。但卻令我的領(lǐng)導(dǎo)印象深刻,尤其是我的班長和電機(jī)中士。大概兩三個(gè)月后,來了一個(gè)新的大隊(duì)電機(jī)員(如果沒記錯(cuò)的話是CW2 Lee)。他對(duì)我做的事情非常感興趣。有次我演示給他看后,他看著我說“你難道不知道不能這么做嗎?”。一開始我擔(dān)心我會(huì)有大麻煩,但他臉上卻浮現(xiàn)出了笑容。他告訴我,他不會(huì)追究,因?yàn)槲宜坪踔雷约涸谧鍪裁矗乙驗(yàn)槲姨峁┝藴?zhǔn)確的報(bào)告,部隊(duì)的效率也提高了。
接下來的幾個(gè)月很快就過去了,還有一兩個(gè)月后就要離開伊拉克了。除了遇到一些小問題,我的腳本和宏一直運(yùn)行得不錯(cuò)。快結(jié)束時(shí),部隊(duì)有一個(gè)頒獎(jiǎng)典禮。指揮官和軍士長來到調(diào)配場(chǎng)發(fā)獎(jiǎng)項(xiàng)。接到電話時(shí)我有點(diǎn)驚訝,我沒期望我會(huì)得獎(jiǎng)(我的工作地點(diǎn)主要在營地,雖然我覺得我工作得不錯(cuò),但沒認(rèn)為它值得表彰)。授予我陸軍嘉獎(jiǎng)獎(jiǎng)?wù)拢?a target="_blank">Army Commendation Medal)后,他們和我握了手并祝賀我。在我看到文書前,我認(rèn)為這僅僅是一個(gè)一般性質(zhì)的“優(yōu)秀工作”獎(jiǎng)。當(dāng)我閱讀文書,看到因?yàn)槭褂肞erl腳本和Excel宏完成工作,班長SSG Lopez將我選為獲獎(jiǎng)?wù)邥r(shí),我很驚訝也很高興。雖然我不是為了得到獎(jiǎng)勵(lì)而工作,但是自己的工作被贊賞,仍舊是一件很美妙的事情。
這就是我通過寫代碼獲得部隊(duì)獎(jiǎng)?wù)碌墓适隆?/p>
-
代碼
+關(guān)注
關(guān)注
30文章
4786瀏覽量
68548 -
程序員
+關(guān)注
關(guān)注
4文章
952瀏覽量
29799
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論