jim yeh on 二月 24th, 2015

在廣播新春特別節目聽到主持人和賴佩霞談話,主持人提到 2014 的食安問題顯示去年真是虛假的一年;賴佩霞則提到「所以我們的台北市長柯文哲,直率的言行顯示他很真,在這個時代是相當難得的」。聽到賴佩霞這樣美化柯文哲口不擇言的行為,讓同人覺得很疑惑,想不到知名身心靈老師看事情也如此表相,也許只是為了迎合大眾世俗的口味,而忽略口不擇言並非真實。 Read the rest of this entry »



     
jim yeh on 二月 17th, 2015

民進黨主席蔡英文 2/15 正式宣布投入黨內總統初選,早上十一點由小英基金會執行長張振亞陪同前往黨中央登記參選。同人依她完成登記參選時間製作了宣布參選的占星時盤,從時盤我看到蔡英文參選可能會碰到的問題,主要還是論述空洞及兩岸關係的嚴峻挑戰。

蔡英文提到政治應該要開創一個真正屬於人民的時代,「我不是陳水扁,不是馬英九,我是蔡英文」,她要奮戰不懈,建立透明、清廉、參與、包容、權責分明、主權鞏固的新政治。其實從時盤上來看,火金會在十一宮雙魚座,十一宮代表選舉之事,火星合乎奮戰不懈的象徵,金星代表參與,雙魚座則代表包容,但蔡英文能不能建立透明和清廉的新政治,從星象的呈象我倒是認為她很難做到。 Read the rest of this entry »



     
jim yeh on 二月 4th, 2015

台北市長柯文哲日前接受美國雜誌《外交政策》(Foreign Policy)採訪,提到「殖民進步論」一說引起軒然大波。他事後先解釋他的意思是經殖民的國家先接受西方文明,接受西方文明洗禮愈久,文明的程度與深度就愈高,媒體卻誤解為「殖民愈久,文明程度愈高」,但昨在媒體追問之下,坦言論述時沒有把話說清楚,「我講錯了。」

《外交政策》則在網站公布片段的錄音內容,證實柯確實表示,「被殖民越久,果然越高級,蠻丟臉的。」,1 分 17 秒的訪談錄音稿如下:

柯文哲:我後來想亞洲的歷史,4個華人地區,日本,不是,台灣、新加坡、香港跟中國,我發現「被殖民越久,果然越高級,蠻丟臉的」。

記者:嗯…市長

柯文哲:怎樣,妳是說不能講實話是不是?(笑)「被殖民不是什麼壞事」,妳看喔!新加坡殖民最久,所以新加坡比香港好,香港比台灣好,台灣比大陸好,這個文化、culture。

記者:你是覺得這個真的是好事嗎?

柯文哲:不是,這是 culture,我跟妳講,我去過越南,我也去過大陸,雖然越南人看起來很窮,但是,我跟妳講,看到紅燈要停,看到綠燈可以走,走路靠右邊,這個沒有花20年訓練不起來。雖然我去過越南1次,去過中國18次,雖然中國的GDP比越南高,但是我都可以覺得、但是妳要問我說culture,應該還是這樣。為什麼?看到紅燈要停,看到綠燈可以走,走路靠右,妳覺得很好笑,這個要花20年才可以訓練的出來。

其實新加坡不是被殖民最久的,同人查閱資料發現香港殖民的時間比新加坡還要長。不過我們姑且先不論這一點,在訪談內容中柯文哲說「被殖民不是什麼壞事」,似乎特別強調「文化」。這一段談話同人想到我最近看《被討厭的勇氣》這本書所談到的自卑情結,我發現柯文哲的殖民進化論反映內心的自卑情結Read the rest of this entry »



     
jim yeh on 一月 31st, 2015

語言整合查詢(LINQ)是非常有用的設計概念,它扭轉我們過去用指令式編程的習慣,轉而以宣告式編程的設計典範,讓程式碼變得簡潔,也提高設計的抽象能力。尤其是對於迴圈當中一再出現類似的條件判斷,卻苦於迴圈的特性讓我們沒有很好的策略來將變動的部分封裝起來,只能任由讓程式碼因應需求改變而日趨複雜,讓開發及維護程式愈來愈困難的時候。但如果我們能夠把指令式編程的開發慣例換成宣告式編程的思維模式,我們就會發現問題將變得很簡單。

如同 .NET Framework 支援 LINQ 的查詢語句可以抽換查詢的條件式(透過 where() 方法)和查詢結果的對應(透過 select()、groupBy()等方法),其實在 Java 1.6 我們也可以用相同的設計概念實作語言整合功能。本來同人一直認為實作它應該會很複雜,但實際動手後來發現,實作它比想像中的來的簡單,也只是運用延遲運算的觀念和一些設計樣式的手法就能夠很輕易的實現了。 Read the rest of this entry »



     
jim yeh on 九月 6th, 2014

在民主社會,人民評價選舉的候選人,這是很正常的。但有一種特別的論調,它是把什麼人出來競選,當做社會是否公義的象徵,就好像《動物農莊》裡的那群豬所說的:動物皆平等,但有些動物比其它動物更平等。

幾天前,同人在臉書看到有人說連勝文可以出來代表國民黨競選台北市長,是社會不公不義的象徵。但這個觀點是充滿了邏輯繆誤,因為假如它成立,那也就代表社會公義的象徵是連勝文不能出來競選台北市長。但這違反了平等自由主義的正義觀點,這才叫做真正的不公不義呢! Read the rest of this entry »



     
jim yeh on 六月 19th, 2014

最近在工作上重構過去別人開發的程式,它是系統目前正在運作的程式,但由於程式長達 3000 多行,維護和除錯都變得很困難。程式中因應業務邏輯的需要,用了許多 if 判斷及 for 迴圈的控制,使得程式變得很不容易閱讀。在這種情況下,同人使用了幾個招式,利用它們可以把一層層繁複的迴圈和條件判斷式剥開,把程式重構成能夠清楚表達功能 what 的意圖,有別於之前在 how 的層次中容易使人迷惑在繁複的實作細節。這幾個招式可以幫我們對系統輕易地分而治之,以下同人就分享幾個用來清楚表達程式意圖的重構招式。 Read the rest of this entry »



     
jim yeh on 五月 14th, 2014

很多人都知道系統開發的功能測試很重要,但有時候我們省略它並不是認為某個功能不需要測試,而是不知道該功能該如果測試。有時候問題的關鍵是卡在環境整合的複雜性,例如牽涉 web 的 session 或是資料庫存取的問題,就讓人很難隔離這些複雜情況。當然理論上我們可以運用 Mock 的技術來隔離它們,然而現實上,即使運用這些技術可能你可能還是無法解決無法測試的問題。這時候,你需要的通常不會是尋求其它更強大的技術,而是需要在編程核心思維上,做一些小改變,來改善功能的可測性。

最近同人就碰到一個實例,讓我體會到以泛函編程(FP)典範增進功能的可測性。其實,以前遠在美國的 Perter Ho 就曾向包括同人在內的幾位點空間的朋友,分享過相同的觀念,而同人則是藉由最近的實例而對這樣的觀念有更深刻的體驗。
Read the rest of this entry »



     
jim yeh on 四月 22nd, 2014

從〈查詢的宣告式語意〉提到的實作中,我們可以發現有關資料搜尋的一種設計抽象概念,可以用相同的模式應用在不同的資料結構上,例如從 XML 文件中搜尋特定的資料節點。同人曾經用過宣告式語意實作轉換期貨交易 Span 檔案,將 XML 資料格式轉換成某種特定格式的資料檔案,像下面這段程式碼所示,程式碼的寫法比傳統的命令式語意寫法更為精簡而直覺。

xml::XmlDocument xmlDoc(spanFile, "ISO-8859-1");

std::list<span::EnvMessage> envMsgs =
	xml::XmlTransform<span::EnvMessage>(xmlDoc.find(
	"/spanFile"))(span::WriteEnv());

std::list<span::CurMessage> curMsgs =
	xml::XmlTransform<span::CurMessage>(xmlDoc.find(
	"/spanFile/definitions/currencyDef"))(span::WriteCur());

std::list<span::ChrMessage> chrMsgs =
	xml::XmlTransform<span::ChrMessage>(xmlDoc.find(
	"/spanFile/pointInTime/clearingOrg/curConv"))(
	span::WriteChr());

std::list<span::SccMessage> sccMsgs =
	xml::XmlTransform<span::SccMessage>(xmlDoc.find(
	"/spanFile/definitions/acctTypeDef"))(span::WriteScc());

std::list<span::PbrMessage> pbrMsgs =
	xml::XmlTransform<span::PbrMessage>(xmlDoc.find(
	"/spanFile/pointInTime/clearingOrg/pbRateDef"))(
	span::WritePbr());

std::list<span::FutMessage> futMsgs =
	xml::XmlTransform<span::FutMessage>(xmlDoc.find(
	"/spanFile/pointInTime/clearingOrg/exchange/futPf/fut"))(
	span::WriteFut());

std::list<span::OptMessage> optMsg1s =
	xml::XmlTransform<span::OptMessage>(xmlDoc.find(
	"/spanFile/pointInTime/clearingOrg/exchange/"
	"oopPf/series/opt"))(
	span::WriteOpt("oopPf"));

std::list<span::OptMessage> optMsg2s =
	xml::XmlTransform<span::OptMessage>(xmlDoc.find(
	"/spanFile/pointInTime/clearingOrg/exchange/"
	"oofPf/series/opt"))(
	span::WriteOpt("oofPf"));

std::list<span::CcdMessage> ccdMsgs =
	xml::XmlTransform<span::CcdMessage>(xmlDoc.find(
	"/spanFile/pointInTime/clearingOrg/ccDef"))(
	span::WriteCcd());

std::list<span::SdjMessage> sdjMsgs =
	xml::XmlTransform<span::SdjMessage>(xmlDoc.find(
	"/spanFile/pointInTime/clearingOrg/ccDef/adjRate"))(
	span::WriteSdj());

std::list<span::PflMessage> pflMsgs =
	xml::XmlTransform<span::PflMessage>(xmlDoc.find(
	"/spanFile/pointInTime/clearingOrg/ccDef/pfLink"))(
	span::WritePfl());

std::list<span::ItsMessage> itsMsgs =
	xml::XmlTransform<span::ItsMessage>(xmlDoc.find(
	"/spanFile/pointInTime/clearingOrg/interSpreads/dSpread"))(
	span::WriteIts());

writeMsgLines(envMsgs);
writeMsgLines(curMsgs);
writeMsgLines(chrMsgs);
writeMsgLines(sccMsgs);
writeMsgLines(pbrMsgs);
writeMsgLines(futMsgs);
writeMsgLines(optMsg1s);
writeMsgLines(optMsg2s);
writeMsgLines(ccdMsgs);
writeMsgLines(sdjMsgs);
writeMsgLines(pflMsgs);
writeMsgLines(itsMsgs);

上面這段程式碼明白地表達 XML 格式轉換的意圖 Read the rest of this entry »



     
jim yeh on 三月 18th, 2014

上週三陪小星寫功課的時候,聽到了春雷響。從天空傳來一聲巨響並夾雜著閃光,小星說:「打雷了」,本來同人並沒有在意這個雷響,但隨即想到這是開春後的第一聲雷響,是一年當中重要的事件,於是我先在臉書的動態消息中記下春雷響的時間,等到隔天有時間再打出甲午年春雷響的時盤

從春雷的時盤來看,命宮室女座代表今年台灣的運勢,大體上與細部的調整與節制有關,而非大方向長遠的規劃。而水星落入五宮中,會合六宮宮頭,代表主要的調整和節制在於投資及產業方面,以符合社會趨勢並改造更合理的環境。水星與落入二宮的火星呈現和諧的三合相位,代表經濟活動會因為投資和產業的調節而發展迅速,人們漸漸會感受到有一股潛在力量使經濟漸趨好轉。

不過,水星和三宮會合的土星呈現不和諧的四分相,代表媒體傳播過時及負面的訊息造成資訊扭曲與失真,對投資及產業環境的改善有不利的影響。 Read the rest of this entry »



     
jim yeh on 一月 28th, 2014

寫完〈訊息拆解組合的宣告式語意〉(原篇名:簡化設計的延遲運算-其一)之後,到現在同人才接著寫下第二篇系列文章。其實會隔那麼久才再動筆是有原因的,本來第二篇打算要寫剖析命令列的宣告式語意,不過同人覺得我原先的設計還不夠好,於是就暫時先把它擱置下來。結果一擱就擱了好久,慢慢地也讓我覺得沒有必要重新實作命令剖析列的宣告式語意,因為畢竟會使用到的機會並不多。其實命令列剖析的宣告式語意和前一篇文章的設計原理應該是一致的,因此同人後來決定要跳過它。剛好近看到有朋友討論相關的議題,激發我完成系列文章的動力,這一篇所要探討的主題正是有關於查詢的宣告式語意。 Read the rest of this entry »