星期日, 4月 27, 2014

最近

好久沒有寫 blog 了 XD。不過老實說,技術與想法沒什麼長進 XD。

最近看完兩本 python 的書,TDD 的書看了三分之一,我還是只有看這種書比較快 XD。看的書還是有如以往的雜而不深入,希望可以在今年慢慢的收斂 (每年似乎都講一樣的話 XD?) 慢慢的看才發現,要了解 Mac OSX 和 Linux 兩者之間的差異,說實在話是會花很多時間的。手上關於 Linux 的書比較多,還是會先以 linux 為主吧。(現在的好處是,vagrant 很方便,而買了 parallel desktop 也有 vagrant 的 plugin),希望可以看到什麼就提出來討論,可能現在看的很雜的我還是不能提出很深入的思考性問題吧 XD。

在工作上因為一直是寫 C 和 Assembly,純黑手工技術倒是升級了不少,不過也沒啥值得一提的事,於是就此打過。

---
繼續看書去。

星期三, 1月 01, 2014

2013 回顧

其實 2013 對我的人生很像是 shfit 掉了一年,不過回想起來也沒這麼糟。今年有 3/4 的時間在當兵,1/4 的時間開始工作了。當兵與工作對我來說算的上是對自己的生活有 一個簡單的交待,但是怎麼繼續過下去,這或許就是今年要面對的問題吧。


當兵其實是一個很開心但是又很幹譙的過程,當兵這件事從來都不被值得紀念,唯一想要紀念的是所認識的朋友,這或許才是我們想要珍惜的。


在當兵時,利用其中的空閒時間,看完 Learn You a Haskell for Great Good 與大概掃過這本書的後半段。當兵到一度想要學習 Data Mining,然後就買了吃董推薦的 Data Mining 但是看不到一半就沒有繼續看下去了。在這中間,Josh Ko 特別從英國買了一本 Practical Foundations for Programming Languages 的實體書送我,不過我也沒有持續很久,但是還是希望未來有一天可以看完,享受一下腦袋 melting down 的快感。在一開始的當兵就希望自己想看什麼就看什麼,但在這個時期中發現,這個問題並不只有今年才存在,所以在結束兵役之後,希望自己可以好好的認真把一些書看完吧。


2013 年看了不少課外書,老實說都是利用當兵的時候看的。利用當兵的時候把伊坂幸太郎的作品看完了。也看了 Sean Kuo 推薦的 "鴨川荷爾摩" (萬城目學著),其他的書其實印象沒有這麼深刻了。但是還記得在當兵的時候,當兵的同袍一起看小說的時光。


當兵的時候其實並沒有寫什麼程式,硬是要說,大概只有幫忙 gwchen 老師把以前的程式錯誤做一番與修正,這大概只花了幾個禮拜的假日。其他時間都是在對 haskell 做一些嘗試,在今年接近年尾的時候,開始慢慢的可以利用 haskell 來處理一些想要做的事,其實用 haskell 寫程式真的蠻不錯的,雖然我到現在還是不太會 monad ,但是也不急在一時,真的想要做什麼事就慢慢學吧,沒辦法,我並不是一個聰明的人。


在哈密瓜的幫忙下,結束兵役後一個月就順利的有一份工作可以做了,因為這份工作的關係,又再度的回到了新竹這個城市,從寬的來算,在這個城市即將邁向第三年生活了,對於工作其實並沒有辦法交待太多,倒也不是因為保密協定,而是在這樣子的工作環境,我著實沒有想太多,就這樣子繼續過工作與生活吧。


在 2013 年底與女友一同去台東長濱做了一個簡單的旅行,認識了念陽大哥與慈佈姐,寫了一篇記事留在自己的硬碟裡,也因為這個旅行,開始重新認識自己,對於今年及以後的目標有了相當的修正,關於這個旅行,簡單的來說,心情上的改變,可以讓我們重新認識這個世界,謝謝女友的幫忙及安排這個旅行。希望自己在未來這一年,可以繼續幫助人們。


關於今年及未來的展望嗎 ? 希望在接下來的幾年內可以使用自己的電腦工作及開發,老實說我並不討厭 Windows,但是金窩銀窩都不如自己的狗窩好。有想過在家工作的事,不過關於在家工作的條件我一項都沒達成,也是希望這幾年可以慢慢的達成這個目標就是了。


對以往的我來說 architecture, FP, PL 這些領域該如何選擇是一個困難的問題,外加自己對 parallel and concurrent 又有興趣,頭又更大了。經過這些日子某天醒來才發現,這不過是庸人自擾,如果真的想要解決一個問題,從這些領域來看這個問題,都會有不同的面向,就開心的往自己想要解決的問題前進吧。希望今年可以學習關於 parallel 的一些事,一直到現在,自己還是會有一個任性的想法: 我真的覺得 functional programming 可以把 parallel and concurrent programming 相關的問題解的很漂亮,雖然這好像是用方法來看問題,不過我還是想要這樣子任性的覺得。


至於生活,其實我很開心,可以這樣子一直繼續的學習與思考,謝謝家人女友及朋友的支持,希望今年還是可以繼續學習與寫出一些開心的文字了。

星期日, 10月 06, 2013

文字雜想

其實不甚清楚以下描述能不能稱為寫作,這種廢話文很多,你大可以跳過 (笑)。其實只有一點想表達:

創作重要的從來都不是工具,而是我們想要表現的。

一開始我想要摘錄人月神話所說的一段話 (懶的翻書了)

程式語言並不會大幅度影響開發時間,而團隊中如果有某個語言的高手,那麼使用該語言或許益處還會大些。

在這邊並不想討論從該書第一版出版 35 年後是否有需要修正的地方,在這邊有一個簡單的猜想(不過也無需驗證)。使用文字編輯器或許會影響寫作時間,但是該著重的是你想要表達的。

來說說自己的故事,當兵的時候因為覺得自己想要好好寫些東西,但是自己用 VIM 寫中文不甚方便,於是乎開始嘗試 Sublime Text 及 iA Writer,然後很快的 (其實也花了好幾天) 決定要使用這兩個分別來做什麼事。最後,我面對到的問題是

我想要寫什麼 XD?

我不知道,於是乎寫文章還是慢慢寫(硬碟裡面躺了很多寫到一半的文字),然後在這中間也嘗試了發佈的平台 (從 logdown 到 nikola + snpa)。一直到最近才覺得可以開工了。但心中不甚踏實,總覺得寫出自己可以接受的文字比把寫作環境搞定來的困難的多。

或許下次自己可以先把寫作的主題想好,開始動工之後自己覺得環境有那裡需要加強再來做也不遲,邊改善寫作環境邊寫作是一個不錯的主意。

至於我現在要寫些什麼 ? 心中大致上有個底了,而 snpa 的初步開發也接近尾聲,或許可以開始嘗試一些自己想寫的東西了 (希望這句話過三個月後不是嘴炮 XD)。

星期日, 9月 15, 2013

工作與未來想做的事

從退伍以後不到一個月到進入工作第一禮拜,其實還蠻有蠻多不適應的地方。想來也蠻有趣的,當兵前在新竹念了一年書,入伍後下部隊第一站還是新竹,一直到工作後還是在新竹,到底接下來會去那呢 ? 以後就會知道這個問題的答案是什麼了 (笑)。不過還是要找個時間和當兵的朋友吃飯 (Harold Shaw, Sean Kuo, Jan Chen,對不起,最近真的沒有時間,我一定會找一個時間跟你們吃飯的。)

老實說,第一個禮拜工作還蠻不習慣的,不過希望接下來可以好一點,我似乎有點過於緊張放不開了 (指的是工作態度,不是對人態度 XD),期待下禮拜可以修正嘍。不過還是要說,工作最不習慣的是不能用自己的電腦,所有的工作習慣都要重新建立 … Orz 。當初從學校畢業之前只有希望不要去那種一定要穿西裝的公司上班,現在看來這個願望是有達成,不過下次應該要加一個可以用自己的電腦做事,不過我看這個願望大概還要很久很久以後才會實現了 XD。

老實說真的要有什麼結論,現在說出來都是不準的,畢竟只有工作一個禮拜就是了,不過真的從這個禮拜學到不少事,很謝謝公司同仁的幫忙。

很謝謝我的家人與我的女友,在這一路上一直的包容與忍耐,我不敢說我現在是一個成熟的人,但希望自己離小屁孩這個定義稍微遠一點就很開心了。

這個禮拜有和哈密瓜吃飯,他鼓勵我,工程師的個性就是動手去做(當然除了這件事以外還有一堆啦),我捫心問我自己,我到底最想做什麼 ? 其實就只是寫寫程式解解問題而己,為了不讓自己淪落到嘴炮人的境界,還是會想要讓自己努力動手做一些事。小馬馬曾對我說過,擴展人類的知識是很難的,我現在能體會,所以至少希望自己可以把人類已知的知識好好善用就夠了。

未來最想做什麼,我還有一段很長的時間要去探索吧。

最近還是很想寫 parallel and concurrent program,所以我決定繼續學習 Haskell ,然後把 Simon Marlow 的大作看一看,這件事做完最快大概也要半年過去了 (因為是在不影響工作的事情為前提之下),無聊在 104 上打 haskell ,發現台灣真的有公司要聘用寫 haskell 的人,是做 WhatsTheNumbers app 的公司,之前在某個計畫上看到創辦人說他從 MIT 畢業之後,他做的主題不僅僅在台灣找不到工作,美國也找不到工作。我看到就笑了出來,他做的博士論文真的是一個很有趣的問題呢,有空的人可以去看看喔(不附連結的原因是因為我懶的找了 XD。)

---
可能最大的希望就是以後自己還有力氣說這麼多廢話 XD?

星期六, 9月 07, 2013

[Haskell] Read the contents from the clipboard in Haskell

有時候只是想要做一點簡單的事情的時候,其實會直接貼上 string 做處理。但是因為不知道怎麼在 ghci 上貼入 multiple line string,所以想到可以直接讀取複製的內容直接做處理。


在 Mac OSX 裡有一個相當好用的指令是 pbpaste,可以直接蛉出在剪貼簿中的指令。開一個 subprocess 把指令的 output pipe 進來就可以了。嘗試如下。


嘗試執行結果如下

Prelude> :l read_pbpaste.hs
[1 of 1] Compiling Main             ( read_pbpaste.hs, interpreted )
Ok, modules loaded: Main.
*Main> import Data.Char
*Main Data.Char> processPaste Data.Char.to
Data.Char.toLower  Data.Char.toTitle  Data.Char.toUpper
*Main Data.Char> processPaste $ map Data.Char.toUpper
Loading package array-0.4.0.1 ... linking ... done.
Loading package deepseq-1.3.0.1 ... linking ... done.
Loading package filepath-1.3.0.1 ... linking ... done.
Loading package old-locale-1.0.0.5 ... linking ... done.
Loading package time-1.4.0.1 ... linking ... done.
Loading package bytestring-0.10.0.2 ... linking ... done.
Loading package unix-2.6.0.1 ... linking ... done.
Loading package directory-1.2.0.1 ... linking ... done.
Loading package process-1.1.0.2 ... linking ... done.
ING PACKAGE ARRAY-0.4.0.1 ... LINKING ... DONE.
LOADING PACKAGE DEEPSEQ-1.3.0.1 ... LINKING ... DONE.
LOADING PACKAGE FILEPATH-1.3.0.1 ... LINKING ... DONE.
LOADING PACKAGE OLD-LOCALE-1.0.0.5 ... LINKING ... DONE.
LOADING PACKAGE TIME-1.4.0.1 ... LINKING ... DONE.
LOADING PACKAGE BYTESTRING-0.10.0.2 ... LINKING ... DONE.
LOADING PACKAGE UNIX-2.6.0.1 ... LINKING ... DONE.
LOADING PACKAGE DIRECTORY-1.2.0.1 ... LINKING ... DONE.
LOADING PACKAGE PROCESS-1.1.0.2 ... LINKING ... DONE.
HTTPS://EN.WIKIPEDIA.ORG/WIKI/CONTINUATION-PASSING_STYLE
*Main Data.Char>

2013/09/08 09:17 AM 早上試一下,還可以這樣子幹也蠻方便的

Prelude System.Process> putStrLn =<< readProcess "pbpaste" [] []
http://hackage.haskell.org/packages/archive/process/1.0.1.1/doc/html/System-Process.html
Prelude System.Process> import Data.Char
Prelude System.Process Data.Char> putStrLn . (map toUpper) =<< readProcess "pbpaste" [] []
HTTP://HACKAGE.HASKELL.ORG/PACKAGES/ARCHIVE/PROCESS/1.0.1.1/DOC/HTML/SYSTEM-PROCESS.HTML

所以想要寫完全沒有彈性的碼可以這樣子寫。


星期五, 9月 06, 2013

選擇筆記用紙心得

這其實是一個蠻簡單的問題,但是這個問題其實困擾了我還蠻長一段時間的,因為我一直有一個問題。

下筆的那一刻,這張紙是否要被保留下來 ?

老實說,很多時候我是不知道答案的。不過後來想出一個可以接受的方法解決了這個問題。那麼方法是什麼呢 ?

買 A4 30 孔資料夾(or 魚骨頭) + A4 30 孔打孔機。重要的重新整理到電腦上

這個方法應該很多人提過,下面都是我為什麼會選擇這個方法的故事,如果沒興趣的可以跳頁了 XD。

從大學開始,試著自己開始整理筆記遇到很大的困難。因為我上的課很多課堂都是使用投影片,大概到大二的時候,我買了一台雷射印表機把投影片印出來然後在上課的時候試著做註記,還有自己閱讀課本及寫到 blog 上,大部分的筆記都很零零散散的,不過就這樣子過完了大學四年 XD。到了碩士班,我們還多了一個東西叫做論文,看論文也是一絕,因為一剛開始,真的還蠻難只使用電腦就看論文(中間有買 Kindle DX 試過,但是反應速度實在是有點囧,現在還是認命的買 iPad 了),所以唯一選擇也是印出來,久而久之,如何整理印出來及自己寫的東西變成一個很麻煩的問題。

那麼現在來談談做筆記的用紙及收集,最常見的方式是 B5 26 孔夾,大小適中,外觀多樣,紙也容易補充,是很好的選擇,不過會遇到我一開始說的問題,我在我下筆的時候,除非明確知道是要做筆記,不然拿 B5 26 孔紙當計算紙也是有點浪費 (26 孔紙和 Dobule A 一包比起來還是貴了點)。經過了很多嘗試,最後還是決定使用 A4 紙做筆記。

但是使用 A4 紙做筆記會產生最大的問就會跟前面提到的一樣,不容易整理,這中間試了很多方式。一開始印投影片的時候,就買了一個20入的資料夾,每印出一份投影片,就塞進去,要看再拿出來. 也試著夾起來,但是這其實只是進化版的訂書機整理法而己。在碩士班寫的 A4 紙筆記最後全部掃入電腦,然後全部收好,要看的時候就一張一張的看,這個狀況持續了好幾年。

有一天,我看見 Jacky Liu 帶了一個 2 孔 A4 資料夾裡面塞著他自己打的 A4 紙,我看到的時候覺得可以把筆記紙和自己印出來的資料同時整理,是一個不錯的做法。那時自己先買了一個簡單的打孔器,再買了一個 A4 4 孔資料夾,這個方法雖然滿意,不過也有一些缺點,因為自己買的是單孔打孔器,所以紙打起來並不美觀,另一方面,可以買到 A4 孔夾其實都偏大。在那時候,我自己買了一個 A4 4 孔夾,自己把夾子割小一點,雖然邊緣不怎麼美觀,但是是一個可行性的方法。

IMG_2387

後來在逛文具行的時候,意外看到大小趨近 A4 紙大小的 A4 4/ 30 孔夾(如下圖),看到這一款相當的開心,當下買了很多個回去存 XD,整理起來效果也很不錯,到此剩下的問題就剩下打孔了。

IMG_2385

IMG_2384

打孔如何打的漂亮,問題在打孔機。一般的書店可以買到的打孔機一般是 2/ 4 孔打孔機,而且紙無法對齊。最後決定在網路上尋找合適的打孔機,在女友的幫助下,發現 Carl GP-130 打孔機的價錢可以接受 (如下圖), 紙可以對齊,打出來也很美觀,於是就決定這個解決方案。

IMG_2383

Carl GP-130 的優點就是打起來整理美觀,容易攜帶,但是缺點還不少。第一,價錢不算便宜,我買的時候是 NTD 600,不知道現在有沒有便宜一點。第二,打一張紙的步驟不算少,要先對齊然後一張紙要打孔 5 次,這速度其實不算快。第三,一次只能打 2 張 80 磅的紙(如 Dobule A) 或 3 張 70 磅的紙,如果有很多紙要打其實蠻耗時的。如果真的想要用這個方法的話,預算足夠可以買 Carl SP-30N (不過因為預算的關係,我和我女友合買一台 XD),雖然紙一樣只能打兩張,但是打孔只要刷一次就搞定,還在可以接受的範圍。

假設用上述兩台打孔機,那麼一次只能打兩張怎麼辦 ? 有兩個不是方法的方法,第一個,買更專業的打孔機 (笑),第二,利用閒暇時間打孔,我自己是利用看日劇/ 動漫/ 電影的時候打孔,不然就是晚上想睡的時候邊聽音樂打孔,如果有其他方法請跟我說,我也很想知道,謝謝你。

整理起來效果如何 ? 論文翻閱比起以前方便的多也容易整理,當然,要做註記的時候可能還是要從活頁夾拿出來會比較方便,一般為了筆記方便,通常會再買一個 A4 筆記板 (如下圖),而投影片依舊是個死穴,因為一般是 4 頁投影片一張,用活頁夾翻閱沒這麼方便,直向翻閱的話,可以考慮印 2/ 6 張一張(如下圖),如果要橫向翻閱的話,建議可以買魚骨頭。

IMG_2382

IMG_2386

這個方法最大的優點就有如一開始所說的,不太需要考慮這次的寫作為何,缺點當然也有,一開始要花錢花時間適應,但是以我自己來說,我很喜歡這樣子的整理方式。但是最後還是會想要用電腦整理,原因在於搜尋,不過這又是另外一篇文章了,以後再說吧。

如果有興趣的話不妨試試看這個方式,如果有什麼想討論的,我也會很樂意討論。

星期日, 9月 01, 2013

Lambda Mind & Yen3's Note


從今天開始,No title, no thinking, no meaning 改名為 Lambda Mind。其實一直想改名很久了,但是一直找不到一個符合自己心情的名字,這次在女友的幫忙下才想到這個好名字。當然我也不否認有抄襲 Trek through Pure Reason 的味道,只是我英文和意境沒這麼好,所以只能想簡單一點的 XDXD。

寫了這麼多年,知道寫出滿意的內容其實並不容易。雖然自己喜歡寫作,但是總覺得自己腦袋沒啥東西可以寫。看著自己當兵時立下退伍後的志願就有一項,希望自己退伍後能持續寫作這件事。這大概也是為什麼硬碟裡面躺了一堆沒寫完的東西(笑)。

同一時間,經過一些日子的想法,還是決定開個分站 Yen3's Note 來記載一些隨筆,如果有可能(這通常不太可能),會再想辦法整理再放回 Lambda Mind 上,有沒有可能全部移過去 ? 暫時不太可能 XD。從 Google Reader 關閉以來,每次看到一個新的服務,我的第一個想法是,這個服務到底可以撐多久,blogger 這個服務也是有可能被 Google 關閉的。logdown 是個好主意,也做的很不錯,但是我還是會想,我們可以用多久 ? 所以其實很謝謝 logdown 可以把所有的文章以 markdown 的形式匯出,至少是留了一個不錯的後路。

---
最近大概就這樣 XD?



2013/09/08 19:26 經過一番想法之後,還是決定使用 nikola 來做筆記之用,會改的原因大部分都不是技術原因,雖然會比較麻煩一點,不過就先這樣子將就用吧 XD。

星期六, 8月 31, 2013

epub 簡轉繁

我知道這個題目已經做到爛掉了,不過在之前看到 OpenCC Projrect,決定利用一個中午休息時間把 epub 簡體轉繁體 + OpenCC 這件事做完。

暫時成果在 epubs2t_opencc.py

下載之後,只要輸入 python epubs2t_opencc.py filename 即可轉檔。

這個檔案最大的問題是,其實 opencc-python 安裝會失敗,必需自己 download source code 之後,在該 source code folder 加上 distributed_setup.py 之後執行 python setup.py install,才有辦法把 opencc-python 安裝成功(或許我應該送一個 patch 給原作者 XD)。

這也算是剛當完兵後寫寫小程式的暖身吧,還是要趕快開始念書才是。



更新 2013/09/01 10:49 AM - 我直接參考 opencc-python package 的內容,直接把該 function 貼上到 epubs2t_opencc.py裡。現在直接下載不需額外安裝其他套件即可使用,使用方法仍然是 python epubs2t_opencc.py filename,但是需安裝 opencc 才可以使用。如果有需要,我再分別寫 Mac OSX 和 Fedora, ubuntu 的使用文件(其實不難寫,只是我好懶 XD)。

星期六, 5月 25, 2013

Modern Times 摩登時代 - 在一個規則名為國家的機器背後



(註1:可以先看魔王,魔王是摩登時代沒有太大關係的前傳,兩本書我都很喜歡。)

(註2:請把這本書看完再來看此篇心得,雖然沒啥破梗。)

你有沒有勇氣 ?

這句話很簡單,但沒有很容易回答,因為我們也不是對每一件事都很有勇氣(笑)。我嘗試在網路上搜尋關於這本書的資訊時,我看到了卓別林的電影(稍微看了一下 wiki,好像沒有什麼直接關係),也看到了另外一個人的心得。他沒有很推薦這本書,不過出乎意外的,我還蠻喜歡這本書的。

我的朋友看完此書跟我提及,這本書談的是關於人,實在是有很多可以說的。我同意,但是也因為如此,我也不知道從何說起。

人類形成了村落,再由村落往上一層一層的組成了國家,但是走到了國家這一步,我們反而不了解國家的組成及運作,甚至難以去改變其中的運作,這相較於民主的概念,其實很諷刺。而國家是由許多不同的組織及人民所構成。真正的在上位者,要做出一個決定也得考量許多利害,沒有完全的一個人決定能力。

那麼國家及人民到底是什麼 ? 我們好像兩邊都過著不相干但是必然有關連的生活。我不知道,或許,這本書講述了某個程度的答案(笑)。

書中的對於問題的答案並不唯一,我們可以慢慢的想。伊坂幸太郎提出國家與社會的問題,並嘗試了給予了一個我們可以做的小答案,試著從自己的身邊改變,我喜歡這樣子的想法與故事結尾。這樣子的答案讓我想到了長尾效應與蝴蝶效應(長尾效應比較沒關係,不過我就是想到了。)。至少,比很多只提出問題批判一番卻毫無答案的書來的好。

這本書是伊坂幸太郎的後期作品,與前期的溫暖說故事並不一樣,這本書嘗試用了一種與他以往不同的方式來說故事,雖然並不完美,但是因為這樣子的不完美,我們可以慢慢的看這本書。有人認為書中某些角色過於生硬,但是我倒是覺得這樣子的個性是獵奇與搞笑,我並不會覺得這樣子不好,因為作者已經說明了他想說的了。

雖然知道作者應該是看不到也看不太懂這篇文章,不過我衷心的希望伊坂幸太郎可以這樣子改變自己的風格繼續寫作。

---
我好像寫的很玄啊 XD。

星期日, 3月 31, 2013

學習 monad

這兩天才花時間把 Learn You a Haskell for Great Good 關於 monad 的章節大概掃過一次,只能說自己不太會使用 monad,感覺上很像 Josh 很久很久以前在 blog 上說的話:

我現在對 Haskell 的感覺很奇特,有點熟又不太熟,會的部分都是靠著唸理論(而不是練習)而學起來的。

稍微列一下關於 monad 的文章,只列出我有印象的 XD。

因為我數學不太好(我到現在還是沒看 category theory),我所了解的 monad 是在解決如何儲存狀態的問題。如果要寫一個真正的程式,多個 monad 的結合勢必是要
處理的,而我所看到的文章皆提及了 monad transformer,我想可能要等到繼續看下去才會有所辦法就是了。

很多小程式其實只需要用到簡單的 IO 概念,把 do block 裡面視為一個 imperative program 來寫,再加上 pure function 的概念就可以解決了。再進階一點可以是 IO monad + state monad 來解決,再下去我就得要繼續學習跟看書了。

其次在王垠在他的 blog 中提到 monad 這個概念的種種問題,想到與 Josh 跟我提及的話,programer 必需了解程式中每一個狀態的轉換,想法大異其趣。王垠最近寫了很多關於 Lisp 及 Scheme 的文章,忽略掉文章中的情感,他的文章是值得一讀的。

這幾年反反覆覆的學習又放棄 Haskell,不過現在的我還是想要繼續堅持的學到一個段落就是了。

---
繼續看書去。

星期六, 3月 30, 2013

Guessing Number using Haskell

今天利用一點時間寫出來的簡單版(困難版我也不會 XD),明天有空再補心得 XD。如果有什麼可以加強或改寫的的地方還請指教,我會很開心的,謝謝 :)。

import System.Random

checkNum :: [Integer] -> [Integer] -> (Integer, Integer)
checkNum input ans = (posNum input ans, correctNum input ans) 
    where posNum input ans = sum $ zipWith (boolValue (x==y)) input ans 
          correctNum input ans = foldr (\x y -> y + boolValue (any (== x) ans)) 0 input
          boolValue a = if a == True then 1 else 0

game :: [Integer] -> IO ()
game ans = do
    input <- fmap (fmap (\x -> read [x])) getLine
    
    let (rpn, rn) = checkNum input ans
    if rpn == 4 then
        do putStrLn "Win"
           return () 
    else
        do putStrLn $ show rpn ++ "A" ++ show rn ++ "B"
           game ans

main = do
    gen <- getStdGen
    let ans = take 4 (randomRs (1,9) gen)
    game ans

---
繼續前進。


T55555的回應給了許多寶貴的意見,真的很謝謝他每次都給予很好的建議(至於我這麼晚回的原因是因為仍在當兵中...Orz),我也做出了回應,現在把整個修完的 code 再貼一次如下。


import System.Random

-- Wrong game logic
-- checkNum :: [Int] -> [Int] -> (Int, Int)
-- checkNum input ans = (posNum input ans, correctNum input ans) 
--    where posNum input ans = foldr (\x y -> y + fromEnum x) 0 $ zipWith (==) input ans 
--          correctNum input ans = foldr (\x y -> y + (fromEnum (any (==x) ans))) 0 input 

checkNum' :: [Int] -> [Int] -> (Int, Int)
checkNum' input ans = foldr (check ans) (0, 0) $ zip input ans 
    where check ans (x,y) (p,c) = 
            if x == y then (p+1,c)
            else
                if (any (==x) ans) then (p,c+1)
                else (p,c)

game :: [Int] -> IO ()
game ans = do
    input <- fmap (fmap (\x -> read [x])) getLine
    
    let (rpn, rn) = checkNum' input ans
    if rpn == 4 then
        do putStrLn "Win"
           return () 
    else
        do putStrLn $ show rpn ++ "A" ++ show rn ++ "B"
           game ans

main = do
    gen <- getStdGen
    let ans = take 4 (randomRs (1,9) gen)
    putStrLn $ show ans
    game ans

星期日, 3月 03, 2013

最近

最近的 blog article 都是用 markdown 寫好之後工人貼上到 blogger 上,很希望 blogger 可以支援 markdown editor,但也知道短時間內不太可能(笑)。

一直很想幫 blog 改個名字,不過暫時不知道要改什麼,所以還是將就用吧。

還是不習慣用 Vim 配合嘸蝦米來寫中文的東西,剛好想到 godfat 和 ihower 推薦的 Sublime Text 2 。所以使用 ST2 配合 markdown 來寫中文 blog (預覽就交給自己寫的 yiviewer)。

最近做的事不少,做個簡單記錄如下

  • 電影

    • 黑暗騎士: 黎明升起 (The Dark Night Rises)
    • 007 空降危機 (Skyfall)
    • BBS 鄉民的正義
    • 蜘蛛人: 驚奇再起 (The Amazing Spider-man)
    • 黑影家族 (Dark Shadows) --- 不推薦,我原本很期待 Tim Burton 和 Johnny Depp 的說。
  • 演唱會

    • Perfume 3rd Tour 「JPN」 --- 買了快一年才看,中間的純電音表演值得推薦,至於其他部分的推薦可能要好好寫一篇文章(笑)。
  • 音樂

    • LIVING THINGS --- Linkin Park
    • Spring of Life(Single) --- Perfume
    • Spending All My Time (Single) --- Perfume
    • In Blue --- The Corrs
    • Marry You(Single) --- Bruno Mars

正在看的

未來想買的

看到覺得是很好的機會但是自己沒辦法的(笑)

從當兵以來一直在專注 parallel and concurrent programming 的學習與可能性。本來有寫雜記,但是寫的太長了,我懶的修稿,就不貼上來了 XD。


---
很感謝最近遇到的朋友與一直持續幫助的人,我就不另外寫出來了。

星期六, 2月 02, 2013

Calculate the raw sum

上個禮拜看到自己以前寫的 blog 小試牛刀 - 算出檔案每一列的總和,我覺得其實沒有這麼難寫成 Haskell 的版本,T55555 在留言中有提供一個 Haskell one liner version,我在今天早上自己練習寫了一個,沒有 one liner,只是單純做個記錄。

import System.IO

rawSum :: [[Integer]] -> [Integer]
rawSum = foldr1 (zipWith (+))

readContents :: [Char] -> [[Integer]]
readContents s = map (map read) $ map words $ lines s

main = do
    s <- readFile "num_matrix.txt"
    print $ rawSum . readContents $ s 

星期六, 1月 26, 2013

gitit custom css

I don't like the default looking, so I try find a css from the internet and modify it. The preview is as the following.


The modified gitit template


How to use the css?


  1. Download code from here
  2. Replace the file with the existed one

    cp custom.css $GITIT_FOLDER/static/css/custom.css

murmur
The orginal css is founded from the internet, but I can't find it again. If you know the original one, you can mail to me. I will add the reference in the end of the article. Thank you.


What are the differentences from the default css?

  1. Looks beautiful. :)
  2. Move the sidebar to the right side because I seldom use the functions of the sidebar.
  3. Change the color of the link to light blue (#5588aa) because I love the color and the blog uses the same one.

Btw, you can get more information to know gitit from walkingice's blog article (including custom css.)


---
I hope you use gitit with the custom css happily.

星期六, 1月 19, 2013

Yield commands

其實技巧很簡單,只是自己寫著暫記一下,要寫這個的原因是,Learn X The Hard Way 似乎要下架了,索性自己寫一個抓一抓比較快 XD。

mapM_ putStrLn $ map (\x -> "wget http://c.learncodethehardway.org/book/ex" ++ (show x) ++ ".html") [0..52]


---
我相信應該是沒有說明的必要 XD。



2013/01/19 21:03 經由 Josh Ko 建議應該可以執行 commands 的 System.Cmd,這行 code 可以改寫如下。


mapM_ system $ map (\x -> "wget http://c.learncodethehardway.org/book/ex" ++ (show x) ++ ".html") [0..52]

在 ghci 的執行結果如下

Prelude> import System.Cmd
Prelude System.Cmd> mapM_ system $ map (\x -> "wget http://c.learncodethehardway.org/book/ex" ++ (show x) ++ ".html") [0..52]
Loading package filepath-1.3.0.0 ... linking ... done.
Loading package old-locale-1.0.0.4 ... linking ... done.
Loading package old-time-1.1.0.0 ... linking ... done.
Loading package bytestring-0.9.2.1 ... linking ... done.
Loading package unix-2.5.1.1 ... linking ... done.
Loading package directory-1.1.0.2 ... linking ... done.
Loading package process-1.1.0.1 ... linking ... done.
--2013-01-19 20:34:37--  http://c.learncodethehardway.org/book/ex0.html
Resolving c.learncodethehardway.org... 71.19.145.23
Connecting to c.learncodethehardway.org|71.19.145.23|:80... connected.
HTTP request sent, awaiting response... 200 OK
...

朝著更便利性前進一步(其他程式語言都可以透過相關的函式來達成目的,只是我都很懶都是直接複製貼上 XD。)

星期日, 12月 16, 2012

亂想

這一陣子看的關於歷史書有「明朝的那些事兒 1~7」與「橡皮推翻了滿清」。喜歡這兩本書的原因是,著重在還原歷史。我不太認為一件事的結果只是單一原因所造成,而這兩本書都有著類似的觀點。


「橡皮推翻了滿清」其實剛開始看感覺還蠻亂的,越是閱讀越是進入佳境,書中的主題主要是從各個方面(如: 地理、經濟、軍事、政治 ... 等等)來探討為什麼滿清會滅亡。因為作者是從寫作 blog 起家,有時候會有一種面對讀者的寫法 (如: 各位看倌認為 ...),封面和標題比較生動活潑一點,可能是想要吸引買氣,雖然我很久沒有看這種感覺的書了。但其實內容的考據與撰寫皆相當的嚴謹,分析原因相當的清晰,如果對清末民初的歷史感到興趣的人,是值得一讀的。


每個人都有其人性。有些人熱衷名利,有些人想對社會貢獻或改變,但我相信大多數的人想過平凡的生活。從歷史中看到批評者有之,但能實際做出貢獻者更使人尊敬。有人說歷史可以讓我們鑑往知來,但人性依舊如此,所以,我們能從歷史學到的事並不多,甚至是不斷的重覆無法避免的錯誤。


最近與人聊天,總覺得有好好寫(譯)的中文書好像不太好找,連工具書、科普書都邁入一樣的情形。所以看到這本書其實蠻開心的,有空也可以看一下藍戈丰的 出書心得。我真的還蠻願意買一本有好好認真寫且深入的書,但這種書並不好找(笑)。背後的原因,應該有蠻多人聊過的,但是至於如何改變這個現況,其實我心中沒個底。所以只能期許自己好好的寫一些東西,雖然這並不是我的本行,但是我很喜歡寫作(笑)。


在很久很久以前,有看到過一段文字「他只願意看出版超過十年以上還存在於市面上的書。因為如果經過了十年這本書還存在著,代表有其閱讀的價值」這個看法其實蠻有趣的,雖然有時候會有時候是因為好書實在是太難賣所以絕版了(還好現在網路上很容易找到 ... XD)。我在寫這篇文章的時候,嘗試的去尋找 "紫牛-讓產品自己說故事" 這本書,這本書在我的印象中,七八年前還蠻紅的,但是現在並不是這麼容易可以買到這本書 (笑)。我相信這種書應該會非常的多 XD。


這又讓我想到「暮光之城」與「飢餓遊戲」,前者我沒看過,後者我把小說看完了,但是後來才知道原來這兩個系列在美國是被歸類為青少年小說,早知道我就不看了 (笑),飢餓遊戲其實營造出了一個不錯的氣氛,有愛情故事,好像也有反烏托邦情節,具強烈故事性,但總給我一種想要好好說一個故事,但是失了焦的感覺,也不能說這本書不好,但是只能說不合我的胃口(笑)。


---
本來想要寫看歷史書的心得,不過後來變成亂寫了,先這樣吧(笑)。

星期日, 12月 02, 2012

最近

Factory Girls 推進到 Chapter 5 了,不過估計下禮拜之後就會慢的很 XD。

15-150 Functional Programming 兩個禮拜內推進到 lecture 11,15-210 Parallel & Sequential Data Structures and Algorithms 也推進到 lecture 3,也希望下禮拜能保持進度,很謝謝 Josh Ko 的每週討論與閒聊,讓我一直放寬心胸努力(笑)。


EtherCalc 開發經驗談 想到了 Peopleware 中文版,於是在利用今天中午重看這本書,以往對於這本書的記憶大抵上是讓人適得其所,減少辦公室干擾。而現今重讀時發現其中的脈胳為討論從時間、環境、人才進而到團隊的管理,如果人才沒有問題,那麼一個專案是否能完成的關鍵在於人而非是技術。(雖然我覺得這兩者沒有什麼直接關係,大概是想看書就看了 XD)


另外也因為這篇經驗談中提到的 LiveScript,想到 Chi-En Wu 有跟我說過,有空我再好好看看,這一陣子可能 Standard ML 看的比 Haskell 還多(笑)。


---
暫時性的雜記,期望自己下禮拜能持續閱讀與思考了。

星期日, 11月 25, 2012

Factory Girls




起先是看了 「白板报 - 工厂女孩」的介紹進而開始閱讀。這本書要求的英文程度不高 (連我都看的懂),我現在看到 Chapter 3 結束,正如白板报所言這本書並不是想要反應所謂的血汗與不公平,而是去貼近描寫這些女孩的生活與想法。

這本書有中文版,書名是 「工廠女孩 Factory Girl」。經過某些訓練,我對於 Girl 該字不是複數其實有點感冒 XD。稍微翻了一下,其實沒很喜歡中文書的排版和封面,建議有興趣的人還是看英文版比較好。


至於完整的心得,可能要等看完以後了,那可能要很久很久(笑)。


題外話: 白板报是一個值得推薦閱讀的 blog,能看到有趣但平實的觀點,雖然我現在看簡體字很吃力 (我懶的用同文堂 XD),這個 blog 在對岸貌似很有名,或許也不用我多做著墨 :D。


---
在 FB 上字越寫越多,索性還是寫在 blog 上 XD。

星期二, 10月 23, 2012

The Collection of Perfume


大概只剩 Perfume ~Complete Best~ 和 Game 會想收,接下來應該都是收台壓了。
雖然 Spending All My Time 的風格我沒很喜歡,而 Perfume 現在的風格和以前也不盡相同了。但是應該還是會繼續再聽一陣子。


---
做個紀念。

星期六, 9月 29, 2012

分站

Yen3's Note

老實說,我也不知道為什麼我要搞這個分站,單純是想試試 hakyll 好不好用 XD。等以後有空再來思考要怎麼繼續寫 blog 這件事,先趕快把 Josh Ko 的 FLOLAC'12 文章看完再說。


---
其實只是單純不想讓使用 ipod touch 的文章在第一則才寫這篇 XD。