2021年12月26日 星期日

那些電影教我的事:把那些最好和最壞的時光全部加起來,就是我們的人生

 

在看一部意猶未盡的好電影後,我總習慣再到網路查Google相關的影評,用別人的角度賞析這部電影,其中「水ㄤ/水某」便是常映入眼簾的知名創作者。影評其實是相當難掌握尺度的一種創作形式,自身對於影片劇情的著墨心中的那把尺相當重要。多了變「劇透」,或許能換來可觀的網路流量,隨之而來的侵權和不道德疑慮,是二次創作者必須承擔的風險,「谷阿莫3分鐘看電影」就是最典型的教案。

水ㄤ/水某的「那些電影教我的事」在風格上掌握地非常完美,雖然談電影但對劇情細節多半粗略帶過,創作的核心價值體現在他們觀影後的心得小品,以及濃縮精鍊成的一句文字(中英文對照)。用不到50個字言簡意賅地描述一部電影的核心價值,絕對是相當有挑戰的創作手法,卻能開創出影評市場的藍海,事實證明水ㄤ/水某他們做到了。

「那些電影教我的事」這本書把先前網路上較具代表性的文章(電影作品)節錄而成,挑選的電影都是近幾年膾炙人口的佳作和大片,讀起來更能讓一般閱聽人(非文青)產生共鳴。文章中抒發的內容和情緒屬於積極、正面的人生觀,博客來也很正確地將本書放在「心理勵志」類型。我就東施效顰用一句話形容本書,「像一家用影評當招牌,卻端出滿滿心靈雞場的養生餐館」。


2021年12月25日 星期六

實戰Gradle

 

和微軟(.Net)程式人員習慣的「一條龍」式解決方案不同,Java程式人員在挑選開發工具時的常是各吹各的調,誰叫開源碼(OpenSource)的小天地中多的是免費又功能強大的「整合開發環境」(Integrated Development Environment)。說句玩笑話,想要組織一群Java工程師來開發專案,第一件事是得敲定大家應該用哪個開發工具。開發工具的挑選,如果再加上「自動化建置工具」(build automation tool)來攪局,開發團隊肯定難有共識。而Gradle便是新一代的自動化建置工具,時常出現在Android手機程式和Java技術書籍的範例程式。

如下圖所示,在打造軟體專案的過程中,整合開發環境和自動化建置工具都可以用來執行同樣的步驟(例如:編譯程式),兩種工具能相互取代。

「我現在用IDE寫程式好好地,為何要改用Maven來做IDE能辨到的步驟?」便是我在學Maven(另一套知名的自動化建置工具)時心中的困惑。在研讀「實戰Gradle」之後,對此問題的答案逐漸清晰,採用自動化建置工具最主要的目的就是實踐「持續整合/持續佈署(Continuous Integration/Continuous Deployment)」。像Maven、Gradle的自動化建置工具,能直接用命令(Command)模式執行,如此一來才能輕易地與Jenkins這類CI/CD工具整合,讓軟體開發的各步驟都能規劃出標準作業程序(SOP)並隨之自動化,減少因人為疏失造成的錯誤。

身為Java程式開發人員,有時心中不免嘀咕,每隔幾年總有新工具和新框架橫空出世,對相同的問題提出不同的解法,學起來真的折騰人。像是自動化建置,從最早的Ant、中期的Maven到本書提到的Gradle就有三種。工具的設計思維從完全靠自己(Ant),進化為約定優先於設定(Maven),最後變成約定與開放兼容(Gradle)。Gradle勝過Maven的地方在於兩者雖然都是採用預先定義好的規則並透過各種插件(Plugin)來滿足各式建置需求,但開發者可以在Gradle中使用Groovy語言來程式化建置邏輯,能完成諸如if(條件判斷)、for(迴圈)等高度複雜的建置情境。「豐儉由人」是Gradle踏在Maven肩膀上悟出的心得,也會是開發者投入Gradle懷抱的最大原因。

「實戰Gradle」是一本讓讀者獲得Gradle入門到進階功力的速成寶典,透過一個相當真實的範例專案,帶領我們一步步完成各種自動化項目。作者不單單介紹程式專案的編譯、打包和佈署等必要步驟,在自動化的議題上更引導我們走向測試導向開發(Test-Driven Development)、持續整合/持續佈署(CI/CD)等成熟的軟體工程應用方案。本書以Gradle工具做核心,向外提到的延伸工具相當多(例如:JUnit、Jenkins、Ansible等),讀者想要透曉所有工具軟體細節會有一定門檻,必須視自己情況選擇性閱讀。最後不得不警告,「理想很美好,現實很骨感」雖然上述的分享把此書說成像本軟體工程知識的Gradle速成寶典,但事實上這書提到的工具軟體版本都已經過時,在閱讀時要不斷地自行考證和更新程式碼的內容,簡直像幫出版社進行新版本的校訂工作,值不值得就看你是否願意花時間練功了。


2021年12月15日 星期三

臺灣大案鑑識現場:用科學、心理學、偶爾靈異,與嫌犯鬥智,鑑識專家謝松善帶你解讀犯罪現場

 

如同原罪般,社會上只要有人,就會發生暴力和殺人事件,因此不論在影視作品還是文學小說,犯罪和推理這個主題永遠不會過時。在偵辨刑事案件時,「偵查」和「鑑識」是破案的兩大核心關鍵。偵查是從人際往來的角度追查,鑑識則是從現場物證的情況推演,「臺灣大案鑑識現場」一書,作者是前台北市刑事鑑識中心主任「謝松善」(又稱阿善師),他將30多年的刑事鑑識經驗中,印象最深刻、最值得討論的重大案件,書寫成12篇文章。一是能讓社會大眾瞭解鑑識工作的價值與其對司法正義的貢獻,二是諍貶他無法視而不見的社會氛圍(輿論大於實證),期望未來能有所改善。

全書將12個案件分成四部,第一部的林宅血案、蘇建和案與江國慶軍法案,都是因為鑑識過程的缺漏造成真相難辨。阿善師藉由這些案例引出保持命案現場淨空,優先讓鑑識人員作業的重要,而鑑識工作也務求詳盡完整,有時破案的關鍵就在看來微不足道的一絲跡證(指印、鞋印)。蘇建和一案重審時的社會氛圍(當時確實有刑求取供),對提供鑑識證據的代表團充滿敵意,然而這是不必要的。鑑識團隊的職責是提供法官做出自由心證的科學證據,並非有意讓任何人定罪,一切都應讓客觀的事證說話。阿善師對江國慶案的評斷,也是他決定離開公務體制的原因之一,畢竟離開公家機關才能暢所欲言,「無罪不等同無辜」便是他對此案所做的註腳。

第二部著重在用不同案件帶出刑案鑑識的相關主題,像因性侵害犯罪防治法成立的DNA資料庫和鑑識技術、牽亡魂破案的女童命案、以鑑識物證證明嫌犯殺人的失蹤案等。也提到了法律上法官的「自由心證」,應理解為「自主心證」,意指法官必須在不受外力影響的情況下,在心中依據理論和經驗法則,判斷事實的真偽,也就是心證。第三部都是情殺案件,也帶出了「鞋印鑑定」、「火藥刺青(超近距離擊發槍枝)」、「指紋鑑定」和「血源位置」、「型態學」等鑑識知識。最後的第四部則是描述震驚全台的白曉燕命案和後續的方保芳整型外科命案。

隨著DNA比對、AI影像辨識、電信訊號追蹤等科技逐漸成熟,加上書中提到的各種刑事鑑識技術,如果排除操作不當和人謀不臧,犯罪者想要構思、執行超完美謀殺案,是難如登天。就像電影「關鍵報告」形塑的場景,未來傷害、殺人等重大刑事案件,會越來越多是衝動犯罪,而非計劃型犯罪。畢竟無人能在滿街都是監視鏡頭的情況下,不著痕跡地殺人於無形吧。

2021年12月5日 星期日

大數據架構商業之路:從業務需求到技術方案

 

自從看過黃申的「大數據架構和算法實現之路:電商系統的技術實戰」一書後,就對他在大數據領域的研究和心得有所共鳴。這本「大數據架構商業之路:從業務需求到技術方案」是「大數據架構和算法實現之路」的前作,在內容的規畫上著重理論層面的介紹和解說,兩書互為表裏,做為大數據從業人員當然不能掛萬漏一。全書有12章,除了第1章引言外,2到7章將大數據應用的不同題目,各自整理成專章,分為「數據收集」、「數據儲存」、「數據處理」、「信息檢索」、「數據挖掘」、「效能評估」。

數據收集中有「網路資料收集」也就是常說的「網路爬蟲」。抓取網路資料的演算法有「深度優先」、「廣度優先」和「最佳優先」三種,其中又以「最佳優先」效果最好。在開源碼中有「Apache Nutch」和「Heritrix」可以實踐網路爬蟲。另一種數據收集則是「企業內部資料收集」,簡單說就是內部轉檔程式(從各種不同的資料來源),開源碼中有「Apache Flume」可用。

數據儲存分成「持久化儲存」和「非持久化儲存」兩類。在持久化儲存部份,「Hadoop(HDFS)」是業界公認的唯一選項,普及程度已到言大數據者不可不用HDFS,另外建基在HDFS上的noSQL解決方案「HBase」也常被企業採用。近來在noSQL應用中異軍突出的「MongoDB」,則是自成一格用來儲存非結構化資料的文件資料庫。非持久化儲存的主要訴求是超高的反應速度,因此主流產品都是用記憶體做為儲存機制。開源產品有「Memcached」和功能更強大的「Redis」。

數據處理依照處理的頻率分為「離線批次」、「近乎即時」和「在線即時」三種。Hadoop(MapReduce)是離線批次處理中的業界公理,被視為大數據技術的原點。針對MapReduce的缺點再進化而成的「Spark(RDD)」,則是近來有望取而代之的平台。另外也有將MapReduce程式碼封裝成SQL like語法的「Apache Hive」,和基於相同簡化概念而產生的「Pig」、「Impala」和「Spark SQL」等平台和套件,這些產品都是提供一個做法讓非程式人員更方便地操作大數據資料。近乎即時的機制是仰賴訊息佇列,開源碼中的「ActiveMQ」和「Apache Kafka」較為知名。在線即時處理和離線批次處理是站在天秤上兩側的對立面,在應用面上能互補,免除實踐時在運算時效和資料規模非得取捨的兩難。開源碼有全即時的「Storm」和批量即時的「Spark Streaming」。

黃申在信息檢索章節花費相當大篇幅介紹,畢竟此階段已經可以看到具體的大數據運用成果,相信讀者有意願深入瞭解。有別於對資料庫查詢結構化資料,大數據資料檢索的長處是查詢非結構化資料。檢索和比對非結構化資料的核心問題有「相關性」和「即時性」。在相關性的判定上,目前已經發展出許多模型,包含了「布林模型」、「基於排序的布林模型(增強型布林模型:TF/IDF)」、「向量空間模型」和「語言模型(機器學習:Naive Bayes)」。處理即時性需求,最基本會用到「倒排索引」技術。信息檢索的需求在IT業界最具體的例子就是「搜尋引擎」,依應用目的可以分成「通用型搜尋引擎」和電子商務中的「商品搜尋引擎」。像Google般的通用型搜尋引擎,重點會放在網路爬蟲技術,書中就介紹了Google的PageRank演算法和由權威值與中心值構成的HITS演算法。電商的商品搜尋機制,考量的重點是「排序演算法」,其中排序的「金字塔模型」包含了「文本模型」、「反作弊模型」、「商家服務模型」、「商業規則」、「人氣模型」、「分類模型」、「輪播模型」、「個性化模型」。搜擎引擎最有名的開源碼套件為「Lucene」,從中發展出各佔半邊天的「Solr」和「Elasticsearch」。

推薦系統是大數據在電商應用中的第二個亮點,因為它能顯著地增加商品被瀏覽、被銷售的機會。好的推薦系統能幫公司出售多樣化的商品,增加用戶的滿意度和忠誠度。推薦系統可以依「基於商品」、「基於用戶」和「基於情景」分類。推薦演算法的核心是相似度,在概念上和搜尋系統的相關性一樣,只是應用領域和實作細節有所不同。相似度的定義方法可以有四種類型,「基於內容」、「基於知識」、「基於用戶行為」和「基於社交和社群」等。在混合不同推薦算法時,則可以用「微觀混合」或「宏觀混合」。

線上廣告系統是大數據在電商環境的另一種常見應用,系統中的角色有「廣告投放主」、「廣告」、「用戶」和「廣告平台」,過去常見橫幅廣告播放,現在都是精準投放。收費的模式有「CPM(Cost per Mille千次)」、「CPT(Cost per Time)」、「CPC(Cost per Click)」和「CPS(Cost per Sale)」與其它。廣告關鍵字的拍賣競標是廣告系統不同於搜尋、推薦系統的地方,也是最具技術門檻的機制。

數據挖掘又稱數據探勘或是機器學習,常見的任務有「頻繁模式」和「關聯性分析」,用於預測的「分類」和「迴歸」,非預測性的「聚類(分群)」,最後還有「異常點分析」。在開源碼中有「Apache Mahout」套件,「R」語言也是另一種常見的工具。

大數據的效能評估,依評估手法可分為「離線評估」、「用戶訪談」和「線上評估」。離線評估中針對信息檢索系統的最基本評測指標是「精度(Precision)」和「召回率(Recall)」,機器學習的評測有針對分類問題的「混淆矩陣」。對分群問題來說並沒有方便量測的驗證工具,此時可以「外部準則法」,藉由將額外提供的資料標籤和分群後的結果逐一比對,求出分群效果的「精確度(Accuracy)」和「F值」。線上評估就是「A/B測試」,也是電商營運上最有效的測試手法。應用系統的性能評估有「性能測試(驗證系統合乎預期目標)」、「負載測試(找出系統的安全臨界負載)、「壓力測試(找出系統崩潰的壓力點)」和「穩定性測試(在適當的壓力下系統長時間運作)」。開源碼的「JMeter」工具可以滿足上述所有的性能評估需要。

最後的9到12章,黃申快速地介紹搜尋系統、推薦系統、資料收集、數據探勘的實作案例。而更清楚的說明與完整的程式碼,是放在「大數據架構和算法實現之路:電商系統的技術實戰」一書中。黃申在本書中點出大數據技術在電子商務的運用主題,涵蓋「搜尋引擎」、「推薦系統」、「數據探勘」和「線上廣告系統」,這和我在大數據開發歷程中體悟到的心得不謀而合。推薦引擎就如同不須使用者自行輸入關鍵字的商品搜尋引擎,當看到黃申寫的這句話時,不由得拍案叫絕,他居然和我對推薦系統的看法一致。

2021年12月2日 星期四

大阪人大全 大阪人的生態觀察筆記

說到大阪,第一時間你會想到什麼?是外脆內軟的章魚燒、分不清叫大阪燒還是廣島燒的麵糊煎餅、還是身穿亮片豹紋上衣口不擇言的捲髮大媽?如果你對大阪有種上面的刻板印象,先用不著臉紅說抱歉,這本「大阪人大全」會告訴你,你說的都對!

如同作者自述他想完成一本「大阪人的聖經」,全書分成六章,有大阪人的常識、大阪人的大媽、大阪人的飲食、大阪人的人物圖鑑、大阪人的世界和大阪人的習性。以輕鬆幽默的口吻搭上喜感十足的人物插圖,作者高瀨甚太用甲郝道相報的熱情,無死角地向讀者介紹屬於這個關西大都市裡的人事物。

綜合閱讀後,覺得大阪人和台灣人超像的呀!難怪之前有聽聞日本遊客來台,都會有種異樣的熟悉感。特別是大阪的大媽的行為舉止,根本就是台灣市場阿桑的重製版!口不擇言舉止粗魯、我流穿搭加上貪小便宜,會不會世上的大媽都是一樣的哩?人物圖鑑一章中繪製的插圖趣味性滿點,點綴著作者吐槽式的人物短評,促成另一種閱讀樂趣。

由於我個人算是個吃貨,因此對「大阪的飲食」一章中的內容格外看得津津有味,諸如關西偏好顏色較清淡的薄口醬油(鹽分卻較高)、在關西說「肉包子」是指牛肉包子(「肉」指牛肉)、大阪用柴魚熬高湯(東京是用昆布)...等等,讓我在日本關西飲食的小知識上收獲不少。

整體來說「大阪人大全」是本趣味導向的人文普及讀物,適合各種類型的日本文化發燒友,在日常上班上課通勤時隨手翻閱,讓妙語如珠的文字啟動你一早的好心情。