2022年5月29日 星期日

Spring Start Here: Learn what you need and learn it well

「Spring Start Here」初章用一個相當貼切的比喻來描述軟體框架(Framework),想像手上拿到一本應有盡有的IKEA DIY組裝手冊,它告訴你各種家具的組裝方法和所需零件。當你想要添購辨公椅時,就得自行翻閱找到該項目再依指示組裝完成。框架等同於那本手冊,提供各式各樣的軟體功能和機制。在實務上我們只會從中挑選專案需要的項目,照著框架的規格來設定和撰寫程式。

即便Spring不像EJB是官方發展的軟體框架,但在Java程式語言的生態系中,它是掌握半邊江山的一方之霸。不論是最常見的MVC、輕巧易用的REST,還是批次、佇列、認證與授權以及資料庫操作,軟體專案開發上的各種功能,幾乎都能在Spring框架中找到對應解法。而這本「Spring Start Here」從基礎向讀者介紹Spring最具特色的IOC(Inversion of Control)和DI(Dependency Injection),利用它們,可減少程式碼中產生物件實例(Instance)的語句。AOP(Aspect Oriented Programming)則是更積極地用來封裝反覆出現的程式功能。真的不誇張,同樣採用Java開發專案,運用Spring框架和用傳統方法撰寫,程式碼間的差異有如拉麵和鳥龍麵。 

在基礎觀念後,是用具體的範例引領讀者用練習來熟悉Spring的使用方法。內容涵蓋網頁程式MVC、REST網路服務、資料庫操作Spring Data等常見的系統功能。同時介紹Spring Boot這個新式的Spring開發方法,帶有「宣告功能替代宣告函式庫」和「約定優先於設定」的新觀念,去除舊式開發Spring時的痛腳(例如:得自行引用眾多類別庫、基礎設定值太多)。採用Spring Boot實作Web應用,有另一個亮點,程式本身能用嵌入模式啟動Container直接提供服務。以獨立的處理程序(Processs)運作,減輕另外安裝與維護Apache Tomcat等Container的負擔,也更貼近Docker容器和雲端平台的運行風格。

和其它軟體框架常有的優劣如出一轍,Spring利用預定義的設定和潛藏的程式碼,加快工程師開發專案的速度。卻也塑造出無形的技術門檻,出現「想參與專案開發的Java工程師必須熟習此框架」的潛規則。隨著Spring的影響力日益擴增,這種外在的推力將越趨強烈,鞭策從業人員不得不自我提升。而在學習Spring的旅途上,「Spring Start Here」值得成為你我的首選。
 

2022年5月13日 星期五

Jenkins 2.x實踐指南

 

在開源軟體的解決方案中講到「持續整合/持續佈署(CI/CD)」,十之八九會提到Jenkins這項工具。即便我已經利用Ansible把程式佈署的流程自動化,但是相較於Jenkins,Ansible還是缺少網頁管理介面、帳號與權限管理、操作記綠檔等功能。因此進一步導入Jenkins來整合Ansible的自動化腳本,就是完善我自動化佈署的終極方案。

Jenkins早在2011年就問世,網路上的參考資料多不勝數。熟練地運用適當的關鍵字,谷哥大神確實能告訴你一些答案。不過我個人以為,想要有系統、依循脈絡地學習一項新知,一本好書絕對是性價比最高的投資。而「Jenkins 2.x實踐指南」是值得我掛保證,它能讓讀者從零開始學會Jenkins 2,進而運用自如。尤其全書中著眼在介紹2.x版本的「pipeline as code」,Jenkins中的流程用程式碼的形式來撰寫和分享,受惠於此理念,流程將可以被版本庫儲存與管理!完全克服了1.x版本時最為人詬病的流程設定「黑箱化」問題。

就Java語言而言,軟體開發過程是一連串的「手工」操作。寫好程式碼後,先將原始碼編譯成位元組檔,再打包為可執行檔,然後上傳到主機的特定目錄,以終端機指令啟動該程式。著重軟體品質的專案,則會在編譯後加上測試作業。如果是網頁專案,還得多一項重啟網頁伺服器的作業。當然Java技術棧早就發明Ant、Maven和Gradle等自動化建置(Build)工具,來處理這些惱人的例行工作。說穿了Jenkins工具,只是把你手上既有的版本庫(如Gitlab)、測試腳本(如JUnit)、建置工具(如Maven)或佈署腳本(如sh)用pipeline程式碼整合起來。所以對尚未使用軟體版控、尚未對建置/佈署步驟自動化的開發團隊來說,Jenkins絕對不是仙女的魔法棒,可以讓你輕鬆略過應有的基本功。

對於「一條龍」(從頭到尾都一人負責)的開發團隊來說,並沒有急迫得導入CI/CD工具的誘因。非多人同步開發的專案,只要程式有單元/功能測試,根本用不上持續整合(CI)。程式編譯到佈署的「手工藝」,只要夠細心謹慎,用不用持續佈署(CD)差異也不會太大。不過從中長期來看,所有軟體專案都應該完成CI/CD的設定。達成CI,可以讓小型專案在擴展成大型專案的過程中,維持軟體品質和降低溝通成本。而做到CD,則得利於佈署作業標準化,可輕易地讓專案系統平行擴充。

2022年5月2日 星期一

鯨吞億萬:一個大馬年輕人,行騙華爾街與好萊塢的真實故事

閩南話有句俗語「翁偏A卡緊」,意指做事想要「彎道超車」最簡單的方法就是用騙的。比起針對市井小民作姦犯科的詐騙集團,「鯨吞億萬」書中所描述的金融犯罪,在犯罪所得金額、牽連人士階層以及佈局複雜縝密等各方面來看,根本是蠅量級vs超重量級。書中男主角(?)「劉特佐」捅出的金融騙局,既使翻拍成好萊塢電影也綽綽有餘,出版社拿「華爾街之狼」來比喻還算是略為保守。劉特佐操盤的「一馬公司」醜聞,直指前馬來西亞首相「納吉」執政時期的貪汙弄權,後續也成為馬來西亞政黨輪替的推力。

「鯨吞億萬」向讀者展示了一幅以華爾街為首的跨國銀行、國家主權基金以及好萊塢名流等元素構圖,塗上貪婪、濫權、紙醉金迷等色彩的敗德浮世繪,代價是馬來西亞全民未來數年的血汗錢,因為被掏空的對象是「國家」,主謀者則是一個40歲不到的大馬華人。劉特佐深知現今資本市場的運作和弊病,結交權貴進而利用他人的名聲招搖撞騙,遂行他想要成為Somebody的願望。

讀者可在書中看到許多過去不曾察覺的「資本世界遊戲規則」。例如:人謀不臧國家級的主權基金,讓主政者和基金管理人從中上下其手取得暴利,也是政客用來收買籠絡地方派系的資金。華爾街的大型投資銀行,在主導客戶IPO(首度公開發行)時,將會獲得高額的服務費。如果看好即將上市的股票/基金,也會一口氣承攬下來,等價格抬高後再出貨給市場大賺一筆。心術不正的銀行管理高層,甚至會收受回扣幫客戶高估資產價值、替虛假的交易背書、設立許多空殼公司帳戶。瑞士的私人銀行表面上替富翁進行財富管理,實際都是做一些「類洗錢」交易,像是在避稅天堂開立境外公司,購買各種公司債與基金來編織層層的假交易移轉資金。歐美各國的高價房地產、蘇富比拍賣的天價藝術品、鑽石珠寶和國際賭場中的巨額賭資,都是不義之財的常見去處。

有人說過「金錢像是照妖鏡,它會呈現出你內心真正的慾望」,也有人說「金錢像是台音響放大機,它會讓善者越善,惡者越惡」。劉特佐曾經獲有數十億美金的資產可以運用自如(即便它是騙來的),他卻只用來結交影視名流,在夜店一擲千金地擁美女喝名酒,不斷地辨派對,買私人飛機買遊艇,在賭裡裡豪賭。說穿了就是單純滿足感觀層級的慾望以及想成為眾人焦點的成名欲。共犯集團中的馬來西亞前首相夫人,則是不斷地用劉特佐提供的資金購買華服和珠寶。金錢確實照出這些人自身的格局,相比伊隆馬斯克種種「有錢人的任性」,高下立判。

2022年5月1日 星期日

最貧困女子:不敢開口求救的無緣地獄

 

五、六年級生都應該看過安達佑實主演的日劇「無家可歸的少女」。自該劇播映後,游走在賣淫和伴遊之間的灰色「援助交際」,正式成為眾人熟知的社會議題。對台灣人而言,風光明媚、物產文化資產豐富的日本,一直是出國旅遊、遊學旅居的首選。在光鮮亮麗的外表下,日本特有的社會問題也相當多,雖然類似的議題也會發生在他國,不過日本人行事時過份重視群體意識/察顏觀色,會讓既存問題始終無法被消弭。

在今日競爭激烈的工商社會,造成貧困的原因十分複雜。先天家庭教養與後天個人努力、機運,甚至於出生地(鄉下/沒落都市),都可能導致個人只能從事低收入職務,而在萬物皆漲時代拮据地過日子。即便如此,如果人際關係良好、擁有能互助、伸出援手的親朋好友,也能過著安貧樂道的「貧充生活」,不至於落到社會安全線之下的最底層。

這本「最貧困女子」介紹的是比貧困女子處境更為悲慘的一群人。她們處於「三種無緣」,第一「家庭無緣」,無法獲得家人和親戚的協助,直系父母甚至可能是家暴加害者。第二「地緣無緣」,沒有建立良好的人際關係,缺少能夠商量和幫助的朋友。第三「制度無緣」,由於早期與政府單位/機構打交道留下壞印象,不相信也不去使用社會福利/保障的資源。作者發現這群人會淪落到三種無緣的關鍵因素是「三種障礙」,她們多半有不一而足的「精神障礙」、「發展障礙」與「智能障礙」。換言之這些女子本來應該是最需要受到國家社會保護的身心障礙者,卻因為種種緣故讓她們步入用最廉價的性交易養活自己,過著有今天沒有明天的日子。


日本的「報導文學」一直以來在台灣出版物佔有一席之地,這些讀物在議題切入、調查縱深與立論梳理等各方面,都是一時之選。不斷為日本挖掘出各種值得關注、處理的社會問題,像是「援助交際」、「單身寄生(繭居族)」、「下流老人」皆是。台日之間在風俗民情和政經體制上有著部份同質性,因此這些相關的著作都值得我們瞭解與反思。