星期三, 12月 30, 2009

感謝

謝謝所有人對我的包容,ycma 與 scm 對我很好(讓我沒啥偷懶的理由XDXD),這幾天心情很好,應該會有持續的高產出 XD。


---
keep going.

星期日, 12月 27, 2009

vimgdb



這篇算的上是筆記。


gdb 是一個很用的 debugger ,而在 GUI 上我偏好用 ddd,但是在 Mac OSX 上灌 ddd 不甚方便 (MacPorts),我也不太會用 Xcode(Xcode 可以直接把 std::vector 印出來,超威猛 XD),所以前陣子在逛的時候,Kaie's blog 寫了兩篇相當好的文章,分別是

有了這兩篇之後,應該可以很順利的建立 vimgdb + gdb 7.0 的環境,當然,身為一個初學者的建議是,尤於 vimgdb 與 gdb 7.0 都需要自己 configure && make ,最好是建置在自己的目錄下,然後再 export PATH=$YOUR_BUILD_PATH:$PATH 會比較好。

有關 vimgdb 的設定,可以看看 Kaie 所寫的 gdb_mappings.vim,基本上我沒有在 .vimrc 上如同 vimgdb 的 help doc 寫上設定,建議是把設定全部寫在 gdb_mappings.vim 裡,而我在該檔案參考 Kaie 所寫的檔案加入了下面的數行

"" vimgdb setting
set splitright                  " set gdb windows split in right side
set previewheight=60        " set gdb window initial height or width(if you set splitright)
set asm=0                    " don't show any assembly stuff
set gdbprg=gdb              " set GDB invocation string (default 'gdb')
# ...
if s:gdb_k
    # ...
    nmap <silent> <C-V> :bel 8 split gdb-variables<CR>  " setl ctrl+v show variable window in button

而我們在 ~/.vimrc 下再加入一行

nmap <silent><LEADER>g :run macros/gdb_mappings.vim<cr>

以後在使用 vimgdb 時,按 \g 方啟動 gdb mode,算的上是一個比較方便的做法。而啟動後,可以參照 :help vimgdb 中來操作使用(建議一定要看,蠻多好用的快捷鍵,不然其實直接看 gdb_mappings.vim 也很 ok),比較不一樣的地方是,Kaie 的設定有做 key mapping ,只要 Ctrl + V 就可以打開 variable window,要讓 variable 顯示在 variable window 中,用 visual mode 選擇一個 variable ,之後再按 Ctrl + P ,即可。

其實自己也還在嘗試,希望以後自己就不用開 ddd 了 XD


---
have fun.

最近

醒了,這陣子都睡很多,已經二個禮拜不事生產過著頹廢的日子,是時候該繼續了,雖然在這段期間一一的把學校要求的作業完成,不過自己想要做的事卻沒完成半點,這樣子的生活再也不能過下去了,至於怎麼讓自己過的有意義一點,其實我也不是很清楚,每天盡量看東西練習東西,我還沒有忘了我的短期夢想,用 Haskell 寫 Compiler ,是時候該前進了。

嵐達網的推廣實在是沒個準頭,雖然 pagerank 很高,但是我想我還是得必需寫好一點的文,不然我可能變成降低水準的標的 XD 只能說盡量還是達成一個禮拜二篇的標準,其實我覺得這個要求沒有很難,沒有達成絕對是自己的生活過的太差了。

這個 blog 好久沒有發技術文了,老實說自己雖然在最近學到不少東西,但是不知道要寫什麼,不是說學的太多,而是覺得自己沒有好好的,深入的學習一個東西,這樣子的自己和大學沒有什麼差別,並不是很喜歡這樣子的自己,應該要好好的學習,好好的改變自己才是,不過一旦專心學習,efang 就會覺得我不太理她,可能是自己要找到的一個平衡點。


---
說了這麼多,仍是通篇廢話 XD

星期五, 12月 25, 2009

無題

一種無病呻吟


---
累了

星期三, 12月 09, 2009

請教問題

會寫這最段文字代表我最近水平降低不少 XD
以我最近愛看的鋼之鍊金術師解釋好了 XD

請教別人是一種等價交換,沒有付出就沒有獲得,所以如果程式有問題,請付出相當程度的努力,把努力表現給我看再來問我,我沒有收另外的助教費,所以完全是看自己爽度 XD,沒有人規定會寫這隻程式就一定要教會你,寫程式還是靠自己努力,別人怎麼教都是一時的。

這裡是大學,不是高中,不要有沒事說自己是大學生享受了大學生應有的權利,有事就用高中生的思維要別人幫你忙,不要說沒有人跟你說怎麼當大學生,這種問題應該好好自己想一想吧 XD?


---
寫這段文字應該會被公幹吧 XDXD

星期二, 11月 24, 2009

[工商服務] 最近相關的網站

最近因應自己身處的環境,大概跟這幾個網站有關係。

嵐達網 - 程式語言的同好中文網站
目前和 fire7617 共同負責這個網站,暫時以Lambda the UltimatePlanet Haskell and Haskell Cafe 為主,如果我能看的懂就會盡量寫。我暫時想要先把質顧好,所以對於如何擴充這個站暫無太大計畫。

SoC Lab - at CGUCSIE
目前這個 wiki 是由我維護,但是目前是一個穩定的狀態,所以應該暫時不會有太大改變,我也擔任了其中一科助教 XD。

小眾計算學 | for the few of us.
這是由 scm 老師 maintain 的 blog ,為了能夠推廣 programming language ,希望以後不是 few people 而是 many people。


希望以後能把自己的份內事做好嘍。


---

星期三, 11月 18, 2009

沈潛

難得我會一個人安靜的坐在桌子前,已經不太記得上次這樣子是什麼時候了,唯一美中不足的是,桌子還頗亂的...XD

靜下心來,發現自己最近已經好久沒有專心的處理每一件事了,要專心的時候總是不斷的被插斷,若要完成 multi-tasking 這種生活型態,首要之務是專心在當下把時間所排定的事好好完成(這某個程度代表我得把 msn, twitter, plurk, facebook 在專心時關閉),自己不找人聊天,似乎也越來越少的人來找我聊天了(這或許是好事一件 XD),專心這件事,需要花時間學習。每件事都沒有想像中來的困難,這是我這幾天轉換生活型態的體悟,其實很想要加速這個過程,但是也很明白,欲速則不達,只能讓自己慢慢的習慣這個生活步調。

不過似乎該思考的問題是,為什麼我的時間看似完整,但是卻被很多人切割的很碎,要讓自己的時間維持一個完整性,跟與人互動似乎要找到一個方法,不然有任何的外力就得中斷,得要好好思考解決方法,當然,都不要解決的方法就是,自己一個人在自己的地方做事,做完再出現,這在 Peopleware 及 駭客與畫家 皆有大概相同的看法。當然,Peopleware 還提及了一個人的工作效率和他的工作位子大小及不受干擾程度呈正相關。真的該好好思考解決這個問題了,我四年都沒有解決,我不想拖一輩子 XDXD。

---
結果首要之急是學習時間管理 XD。

星期一, 11月 16, 2009

multi-tasking

是時候學習這種模式了,不然現在的我一事無成,連程式都不想寫了。


---
不知道是好還是壞。

星期五, 11月 13, 2009

Windows 7

不要問我有沒有用過 Windows 7 ,我現在都是用 Mac OSX, Fedora, CentOS ,我很少用 Windows 了 XD


---
所以現在當好人的次數也急速下降 XD

星期三, 11月 11, 2009

programming language 與鬍子

我目前沒有留鬍子啦,不過我從 Facebook, twitter, plurk 留了

為什麼外國寫程式的一堆喜歡留大鬍子 XDXD。
然後接著 fcamel 就寫了
有人研究過程式語言作者鬍子長度和語言發展有正相關, 印象中有幾篇文章逐一比較, 滿有趣的 XD

我還蠻好奇的,所以去查了一下 wikipedia 然後我所知道的 PL 與 鬍子關係 XD

  • Haskell - Philip Wadler - 兩個人其中一個沒留
  • C - Dennis Ritchie - 好大的鬍子啊
  • C++ - Bjarne Stroustrup - 留了之後刮掉了 ...
  • Python - Guido van Rossum - 與 Dennis Ritchie 相比不算大鬍子 XD
  • Java - James Gosling - 也是留了個小鬍子
  • php - Rasmus Lerdorf - 三個發展者裡面唯一一個留了小鬍子的
  • Perl - Larry Wall - 山羊鬍的代表啊 XD
  • Lisp - John McCarthy - 跟 Dennis Ritchie 有得拼了 XD
  • ML - Robin Milner - 大鬍子一個
  • Ruby 的作者一開始沒留鬍子 (很難想像它是1995出來的), 後來留鬍子後 Ruby 開始翻紅, 所以後來再留也是OK的啦 XD (from: fcamel)

然後我看到 C# - Anders Hejlsberg 完全沒有鬍子啊(這代表 ... XD?),然後我把這幾個比較精采的留言摘錄在下面 XD

  • fire7617 - 鬍子先留長,以後發明程式語言就不用煩惱了 XDXD
  • Clara - 因為他們忙著寫程式沒時間刮鬍子XDDD
  • eating - 因為頭禿了總覺得要哪裡得有毛
  • legnaleurc - 因為歪果仁都很有禮貌
  • wanwan722 - 跟爆炸頭造就了拳王是同樣意思.. XDDD
  • jeffhung - 這樣熬夜寫程式後,早上起來就不用擔心忘了刮鬍子了。
  • bluegmn - 他們可能比較有禮貌XD
  • Mr. Daniel - 想要得到震震果實XD (yen3 註: 我要成為世界最強的男人 XD)
  • sang - 鬍子跟能力成正比~XD

scm 隨即在 mailing list 中回覆,,Dijkstra 的鬍子也是有故事的,scm 說 Dijkstra 有設計 Guarded Command Language 但是沒有實作,請看這裡在小眾計算學的文章


---
搏君一笑 XDXD

星期二, 11月 10, 2009

信件


我的 gmail 信箱大概從 2004 年 09 月開始用用到現在,用了五年了,今天突然開始整理信箱,發現也是真的有很多很多回憶就是了,不過這個容量真是嚇人啊 ... 我一直以為我不會用到破 1024 Mb 這個 size ,看來還是當初太天真了 XD

---
做個紀念

星期一, 11月 09, 2009

cgu to sinica

原來去中研院這麼遠啊 ... 這還是自己調過的路徑,自己騎車約 27km 左右,大概要騎一個小時。



在較大的地圖上查看cgu to sinica

---
上次去覺得更遠 ...Orz

星期三, 11月 04, 2009

This is it.

昨天明明在忙到哭爸的狀況下,我還是跟 fire7617 去了一趟電影院看 Michael Jackson 的最後一場演唱會電影。

雖然我最近聽的都是 Perfume ,但是我依然去看了這場對我而言很重要的電影,小時候在父親的影響下,開始接觸 MJ ,這邊不想寫我對他很景仰,但是忘了在那邊看,有段文字寫 "在這樣子的時空背景下所能創造出的天王,大概只有 MJ,而在這時間之後,很難會再有這樣子的人物產生了。" 對我而言,可能只有那一句 The King of Pop - Michael Jackson,很幸運的可以看到這樣子的電影。

前幾天在 ptt PLT 版看到 scm 老師徵人,我一時頭昏就衝了,老師也很快的回信,我卻懷疑了,我怕我會做不好,當炮灰去送死之類的,但是我在 Michael Jackson 的電影一開始看到,很多舞者知道演唱會要徵人,就衝去了,當然不盡然每個人都會美夢成真,但是,至少給我一種感覺,不要讓自己的人生過的後悔,我不知道,所以我會努力的做,做到我撐不下去為止,我不知道我的極限在那裡,或許不存在,或許無法超越,或許已超越了,這些都不是這麼重要,我只想做好每一件事,這樣子就夠了,感謝 scm 老師給我這樣子的機會 !


---
Josh Ko, 我會努力的,不會浪費這次機會。

星期二, 10月 27, 2009

研究雜想

或許以後,這種雜想文而亂無章法的文章也會出現在這裡。

如何達成 hardware parallelism 的目標,最基本的答案是 pipeline ,但是因此產生了 data hazrd, control harzrd, struct hazard,其實這三種 hazard 並不一定會存在,端看設計者如何設計,而每個 program 會存在不可平行的部分,如何跨過不可平行部分,變成一種挑戰。

如果我們先為一個問題建立模型的時候,其實我們是想要解決在 pipeline 下的 data dependency & control dependency ,進而展出種種的方法,所謂的 data dependency 簡單的來說,當你要用時,上一個在使用的指令還沒有使用完(所以會有 RAW, WAW, WAR),進而造成 data hazrd,解決方法以 Computer Organziation and Design 提出的 data forwarding 是最簡單的方法,這是在硬體的方法,其實在現有的 CPU 架構,一個 instruction 進入 pipeline 時,會被拆成數個 microinstruction 來執行,也就是說,如果我們在 Compiler 所解決的 data dependency ,進入 hardware 這層是否會有用,不知道(因為我沒有研讀這方面的資訊),hardware/ software solution 並不一樣,但是是為了相同的目的而存在的。而 control dependency 是為了不要讓 pipeline 空閒,提高 CPI,其實真的是如此嗎,我不覺得,如果把程式的指令視為可平行的部分,那麼 control branch 是不可平行之處,也就是說,就會跟沙漏的中間點一樣,停在那裡,要過那邊之後,又是一個較大的可平行區,解決 control branch 並不單單只是為了那個 stall cycle 而己,最終目的是為了追求高度平行化。

也就是說,就一個現在的架構上再加入 VLIW 與 Superscalar 來討論會產生怎麼樣的模型與問題,要解決這三種的 harzard 分別為何,找到問題就幾乎等於找到解法,所以他媽的我一開始就搞錯方向了,搞懂架構,猜出問題才是主要的解決方法,建立一個主架構,而 hardware 的 out-of-order execution, dynamic branch prediction, hardware specluation 與 sofware(compiler) 的 sofware pipeline, loop unrolling, trace scheduling, 等等,這些方法自然能貼到問題所建立的架構上,因應環境而提出解法。


---
好亂啊...

星期四, 10月 22, 2009

最近

我有空寫 blog 竟然是上課的時候 XD。

最近難得三個禮拜回家兩次,但是接下來什麼時候回家我也不知道 XDXD。每天都是看書,處理雜事,忙碌,從 Computer Organization 看到 Computer Architecture,連續兩個禮拜的腦子中充滿了 parallelism 和 ILP (Instruction Level Pararllelism),一方面驚嘆於 Computer Architecture 的架構美麗,一方面也對自己的無知感到嘲笑,總是要繼續努力前進才是,但是有一點覺得我是不是離 Josh Ko 說的越來越遠,到底什麼是現在的我當下想要的,其實我也不知道。

這學期當了助教,助教有助教的難處,學生也有學生的難處,總而言之,繼續做下去才會知道有怎麼樣的結果就是了,但是簡單的來說,遇到的學弟妹,有些人是想要把事情做好卻好像欠缺了一點元素,我卻不一定能幫忙,我總是會想說,我可以好好處理的,但是卻因為人太多而無法幫忙,我想,我應該會在這個禮拜之後改變做助教的風格。

其實還是很感謝 ycma 的支持,雖然我每天邊看書邊幹譙,說,靠爸,為什麼每件事都跟我猜的不一樣(其實猜的一樣我就有可能變大師,猜的不一樣證明我是普通人 XDXD),連程式都寫的很少,這對我而言是一個很好的現象,因為我總是覺得我不夠會想,背景知識不足,並不是一件好事,但是這也導致我每天幾乎沒有時間休息,我是不太後悔,每天的休息時間大概就是自己一個人躺在床上聽 Perfume (用 ipod touch XD),那是一個真正屬於我自己的時間,說來也神奇,很累的時候,聽歌或者是看 Perfume 的演唱會休息,體力和心力會慢慢的恢復,或許有時候自己真的需要一段緩衝時間吧,哈 XD

一直很想寫有關 Perfume 的介紹,最近在整理 Perfume Wikipedia entry ,希望過一段時間之後,能夠有一個較完整的呈現,上次在 blog 中放的歌是比較沒這紅的,這次來放 Perfume 的經典之作 - Polyrythm


---
結果又變成雜想文啦 XD

星期四, 10月 08, 2009

手機套

從以前開始,我從來不認為我是個念舊的人,因為環境使然,外加自己個性如此,所以我總是很自然的認識很多人,而又很自然的與很多人斷了聯繫 ... 從小到大,很常的印象中是自己一個人走著,到了高中雖然認識很多社團朋友,還是一個人走著聽隨身聽,似乎習慣了這一切。

不過這個狀況一直到了大學之後有所改變,因為在大學真的認識很多很好的朋友,而 eating, Clara 真的是很努力想要維持這段友情,讓我更覺得,或許我可以再嘗試一下,到目前為止,我還不想放棄任何事,就算我再忙再累也一樣。

現在的手機是 nokia 5200,是因為我對前一隻手機太差,在大二暑假換的手機,其實 nokia 的手機對我而言一直都是很耐操的,所以我也很樂得使用,只是已經不清楚在大三上那一天,我就隨口說說我想用手機套,eating 人就很好心的和她男友在逛街時幫我挑了一個很符合我的風格的手機套(絕對不是台客風格,雖然我個人風格有這一項 XDXD),還記得 eating 還打電話來問我說有兩到三個,覺得那一個比較好,當下的我是非常驚慌的,因為真的很少會有人買東西給我,自給自足的生活過慣了 XD 也忘了有沒有付錢,總之,這個手機套用到現在,是蠻喜歡,但是也很多感謝參雜於其中,有時候不見了也是蠻執著於找回來的,所幸現在還在 XD。

兩年多過去了,現在手機有點透逗,不過我想大概還可以用很久,大概等到不能用的時候,我會再努力找一個可以塞進這個手機套的手機吧(標準買櫝還珠的行為 XDXD)。


---
一個感謝的回憶。

星期四, 10月 01, 2009

架 wiki 雜感

這個暑假應 ycma 的要求,架了一個實驗室的 wiki ,一開始不知道要用什麼 wiki ,於是就使用了 MediaWiki ,一開始對於這種 wiki system 實在是不太熟,不過熟了之後其實很好上手,快速架了一個之後,其實還真的覺得蠻方便的,雖然中間問題不斷,我在查 MediaWiki 的問題時,都會特別列出 CentOS 的解法,不知道是很有名還是問題特別多(淚) Orz

這幾個禮拜發現,MediaWiki 的上傳檔案其實蠻亂的,一方面是我不太會用,一方面是 MediaWiki 真的很強大(換言之就是複雜),讓我開始思考是否有其他 Wiki 的解決方案,於是我就看到 FLOLAC09 所使用的 DokuWiki。

DokuWiki 是一個相當輕量級的 wiki system,架設的時候預設背後不需要任何資料庫,當然跟原本的設計理念: 當 wiki system 整個不能動的時候,希望能單靠資料夾的結構就能看出來當初架了什麼,這有好處也有壞處,DokuWiki 本身在上傳檔案的時候是沒有版本管理的,而 MediaWiki 這方面有作(不過後面是一個 Database),而 DokuWiki 在備份上也相當容易,僅把整個資料夾壓縮就備份成功了 XDXD,到其他地方再解壓縮後稍作設定即可,對於我這種對 MySQL 不熟的人相當方便(MediaWiki 背後會用到 Database ,備份時就要把 database 的資料 dump 出來),當然啦,其他地方的使用上也相對簡單。

DokuWiki 相當適合我這種懶人,也相當適用於小型網站,如果說資料很多,有數千到數萬以上的網頁的話,可能還是 MediaWiki 比較適合吧 XD? 但是我目前所要放置的資料沒有這麼多,所以我還是可以繼續懶懶的使用 DokuWiki XDXD。


---
兩個月來的心酸嗎 XD

星期五, 9月 25, 2009

Java 編程語言(第四版)

好友 Josh Ko 與 jjhou 譯的書終於出版了,不來寫一下怎麼可以 XDXD

這本是 The Java Programming Language 4/e 的中譯版,我敢推薦,因為是我朋友吧,等拿到書之後,再說吧 !


---
來買喔!!

星期三, 9月 23, 2009

TA

這個學期,因緣際會之下接了計算機組織&實驗助教 XD,我大概是誤人子弟的一個助教吧 XDXD。

這幾天其實沒念到什麼書,大概就是一直忙關於這科的事,其實第一次當助教,剛開學到第二週,我也不希望發生什麼太大的問題,雖然我一直認為我不太會處理雜務,不過這次助教給了很好的機會,所以 ycma 分配下來的事,自認為勝任愉快 XDXD,希望不會造成他太多麻煩才是,不過幸運的是,這堂課有另外兩門助教,合作應該是蠻愉快的。

其實我也蠻意外的發現,我用 LaTeX 已經可以勝任很多一般的文件了,算是好事一樁,唯獨畫圖,在 10.6 底下不能用 InkSpace,我還是得用傳說中的小畫家,真的應該好好找個時間學習畫示意圖才是,我不想每次都畫 pixmap 啊啊啊。


---
雜事學習很重要!

星期日, 9月 20, 2009

機車

我的機車兩次停在台北忘記拔鑰匙,而且沒有被偷走還被好心人放在隱密的地方,真是太感謝了 !!


---
efang 說我的運氣都用在這個地方了 XD。

星期四, 9月 17, 2009

時間

這學期的課表,時間雖然多,不過慶幸的是蠻集中的,可以把火力集中在禮拜五到禮拜二早上,專心的做長時間需要做的事,而禮拜二下午到禮拜四則專心上課和處理實驗室雜務,想的相當完美,希望也可以執行的如此完美 XDXD。第二個問題就來了,長達四天半的時間(其實可以更長),目的也該好好的規畫一下,不過目前沒有頭緒,就以後再說吧XD。


---
因為平凡所以前進。

星期二, 9月 15, 2009

New Begin

一個人,其實很難有明顯的分界點,歷史依然。

其實我也不知道什麼是新開始,只知道我在當下該怎麼做,未來才不會後悔,當初選擇留下,就是為了不要讓自己浪費時間,這個暑假努力調整作息,努力讓自己無後顧之憂,現在來看,相當幸運的,到目前為止一切順利,感謝所有人的幫助。

其實我離真正的研究還有好大一段距離,或者是說,我永遠達不到,充其量只是拾人遺穗罷了,但是更因為如此,要好好努力,脫離現在所身處的位階,對我而言才是最重要的事,我會不會因為這樣子變成一個很嚴苛冷酷的人呢? 我也不清楚

立足當下,放眼未來,不再迷惘,很多事只能且戰且走。


---
Just a begin.

當小白遇到小黑


因緣之下,朋友買了一台 ThinkPad x200,我幫她重灌時,拍下了這樣子的照片,不甚好看,小白很像在發爐一樣,不過我對 x200 讚不絕口倒是真的。


---
新開始

星期五, 9月 04, 2009

Sixpence None The Richer - Within a Room Somewhere


---
escape the pain, within a room somewhere.

星期四, 9月 03, 2009

Perfume - セラミックガール


想看看大家反應如何,自從被刷姊說過我都喜歡看日系小妹妹中了好大一槍之後,現在都免疫了 XDXD


---
不知道耶 XD

新竹散心

今天一早就搭車去新竹,拜訪好友 Clara,,中午吃飯時再與 eating 會合,吃了一間相當好吃的美式漢堡,三個人不知不覺就聊了一整天,相當的開心,或許就有如 eating 說的,會回憶到之前美好的時光,或許我不再堅持之前的想法,有些美好的時光,真的可以好好回憶,謝謝 Clara, eating 相處美好的一天。


---
非常非常開心。

星期一, 8月 31, 2009

blog 小小修改

由於我已經到了老花眼的年紀了,決定把 blog 字體調大點,然後調整 tag 為 tag clound 的型式,順便問一下,這個 blog 是否還有其他問題 XD?


---
通篇廢話 XD

星期六, 8月 29, 2009

書櫃


gwchen 老師搬家,剛好有多的書櫃可以送我,相當開心,其實一直很想買書櫃,但是摩拖車實在是不太知道怎麼把一個小型書櫃載回來,就拖到現在了,非常謝謝老師送的書櫃! 不過其實還有蠻多書是流落在異鄉或者是在學校的,書多還是蠻麻煩的,總覺得自己該去買一個 Kindle DX 了 XDXD

附帶一提,之前是這樣子過的 XD


---
睡覺的時候終於不用怕地震了 XD

星期二, 8月 25, 2009

這篇單純是抱怨文 XD。

為了要在 Linux 上跑 EDA Tool ,我先把 MacBook 重灌,然後使用 BootCamp 灌 linux,整個過程確定都對了,grub 也確定裝在該磁區了,不能開機就是不能開機,順便也讓我的 Mac OSX 不能開機,要用選的才能開機了,現在的打算是,等 Snow Leopard 出來再重灌好了,我到現在還是覺得,重灌是一件非常浪費生命的事...Orz

在 Mac OSX 上使用 VMware fusion 灌 Fedora ,在 command line 上打個指令都要數秒後才有反應,受不了改用 VirtualBox,速度上是變順了,但是 Altera Quartus II 怎麼樣就是灌不進去,我只好心一橫,現在在用 VirtualBox 灌 Cent OS,希望會成功,今天幾乎快要一整天都在搞這東西,只能唉了 ...Orz

---
抱怨終了XD

星期一, 8月 24, 2009

醒來

又是一個失眠夜,看著天空由深藍色漸漸的變淡到邊際帶有一絲絲的黃,才發覺,我很久沒有好好看著天空過了。

其實這幾年來,自己就像一個機器般投入巨大的旋渦中,我在資訊中沒有專長,興趣又過於廣泛,或許就真的有如 Josh Ko 說的一樣,而能做的只是努力讓自己活的有意義,希望可以在蘇格拉底式的詢問方式下留有一點價值。

這幾年下來,自身的想法與社會中的看法與意義不斷衝突,才發現,我並無太大的改變,而只是把有所堅持的學習與處事自我要求的更為徹底了些,但是說穿了,自己仍是一個簡單而懶惰的人吧。而寫出如此無病呻吟文字的文字更加證明了這一切(笑)。

有著太多不明白卻又想弄懂的事,專心於當下,放眼於未來,就是我所能做的。


---
有感

星期日, 8月 23, 2009

最近

聽說 The Java Programming Language 4/e 中文版終於要出版了(三年過去了...) 可以期待上市了,這次我不打算開團購,有意思的人請自行開團 XDXD。

目前人將要在 NYU Columbia CS 攻讀的 cctsai 學長非常恭喜他,雖然一直跟他不是很熟,不過總算是去美國了,好事一件,日前受他推薦日本的 Perfume,分類是偶像唱電音,老實說,我不知道什麼是電音,不過我覺得我聽的下去,歌曲也 ok ,有興趣的人可以找來聽聽看喔。

學了很久的 Python,雖然手上終於有 Python Essential Reference 3/e ,但是我想回去學 Haskell 了,學了太多程式語言,沒有專精的話,這是絕對的壞事。


---
暫記 XD

星期六, 8月 22, 2009

Mac OSX Terminal 256 color

這篇基本上是參考 yzlin 的 The Tips of Setting Workstation Environment如果是 linux or FreeBSD ,用這份簡報就很足夠哩!
不想這麼快進入正題,為什麼要用出一個 256 color terminal? 我想很大部分的原因是為了舒適度,原本的 8 色或 16 色的功能大部分像是拿來 mark 說,這個字和其他字不太一樣,至少就我看起來,原本的 8 色或 16 色看起來並不是這麼舒服,而用 256 色的時候(我在 Windows 95 就是用 256 色耶 XD),我們有比較多的選擇可以讓自己的眼睛舒服些,那怕給一個 keyword 標定為藍色,也是有差別的

在 Mac OSX 底下要用 256 color terminal 的話,請愛用 iTerm, iTerm 原生支援 256 color ,但是開下去你會感受不到任何差異 XD,不過在這邊我想說一下,iTerm 的半透明效果不要開,開了會非常的 lag,不知道是 bug 還是程式本身的問題,之後在 .bash_profile 加入

export TERM=xterm-256color
重新登入後,還是看不到任何差異,當你打 ls 的時候,ls color 已經寫死了,通常做到這邊,在 linux 底下已經看的到 ls 不太一樣了 XD,所以我們要測試的是 grep ,這個時候,我們對某個檔案做 grep --color include xxx.c就會看到

terminal 基本設定到這邊完成了
VIM
VIM 原生支援 256 color,所以只要環境支援 256 色,再找到一個 256 色的 color 的 scheme 就可以動工了(推薦 yzlin 寫的 yzlin256.vim) 把抓好的 color scheme 放入 ~/.vim/colors/ 底下,然後在 ~/.vimrc 中設定
set syntax=enable
set t_Co=256
color yzlin256
全數搞定,不過詳細的顏色設定可能還要研究一下,在 VIM 出來的成果大概如同下圖

GNU Screen
2011/09/20: 在這個時間點,已經不用自行編譯 screen,安裝 homebrew-alt 之後再行安裝 screen (輸入 brew install [homebre-alt_dic/duplicate]/screen.rb) 即可。
Mac OSX 有原生編譯好的 screen,不過很可惜的就是 256 color syntax 並沒有開啟,如果原生支援的話,在 ~/.screenrc 中寫入
#terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I"
attrcolor i "+b"
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm "Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm"
termcapinfo xterm-color "Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm"
不過由於原生不支援,所以我們得去GNU Screen抓回來自己編譯,而編譯的選項為(參考這裡)
./configure --enable-locale --enable-telnet --enable-colors256 --enable-rxvt_osc
然後當編譯雖有一堆警告(因為 Mac OSX 用的是 utmpx.h 而非 utmp.h) 的時候很快就發現了錯誤 XD
pty.c:38:26: error: sys/stropts.h: No such file or directory
這時候開啟這個檔案一看,我們看到的是 ...
/* for solaris 2.1, Unixware (SVR4.2) and possibly others */
#ifdef HAVE_SVR4_PTYS
# include <sys/stropts.h>
#endif
我們用的應該不是 solaris ,所以移掉這幾行,編譯就可以完成了,之後執行我們自行編譯的 screen,我們應該能看到 ..(下圖的測試檔在此可以下載)

到此,iterm, vim, gnu screen 都有 256 色啦 !
如果有常看 man page 的需求,可以將下列設定寫入 ~/.bash_profile 中

# colorful man page
export PAGER="`which less` -s"
export BROWSER="$PAGER"
export LESS_TERMCAP_mb=$'\E[38;5;167m'
export LESS_TERMCAP_md=$'\E[38;5;39m'
export LESS_TERMCAP_me=$'\E[38;5;231m'
export LESS_TERMCAP_se=$'\E[38;5;231m'
export LESS_TERMCAP_so=$'\E[38;5;167m'
export LESS_TERMCAP_ue=$'\E[38;5;231m'
export LESS_TERMCAP_us=$'\E[38;5;167m'
而 man page 就有類似這樣子的效果出現,當然顏色可以自己慢慢調 XD

---
enjoy the environment. XD

勿忘此時

我們不會忘記

星期三, 8月 19, 2009

學習 VIM

其實標題很難下,所以我就隨興下了一個標題 XD。

要學 VIM 其實不難,網路上四處找的到文章,不過我推薦下列簡報,我也不想在此重寫一篇,因為我不會寫的比 c9s 和 yzlin 來的好 :)

c9s 提的移動方法讓我受惠良多,yzlin 學長(他大概不記得我是誰了 XD) 所提及的不光只是 VIM,還有其他相當多實用的技巧與方法,相當值得讓我這種菜鳥學習。

其實說到使用軟體的觀點,最難的一點就是「認定」,我所謂的「認定」就是你覺得它很好用,可以用很久很久,而且有長久的更新支援,並且足以在你工作平台上有著良好運作。對我而言,要認定任何一個軟體或程式語言都是非常困難的,不過我想就我會使用 VIM 的原因來說明。

基本操作
就基本操作而言,VIM 分成三種模式,基本上在 normal mode,能輸入的字元都有功能,也有人因此做了一張對應表,其實從 c9s 的 slide 可以得知,基本上我們可以用方向鍵 + Page Up/Down or 滑鼠滾輪,來移動至相對位置,但是我們可以利用 vim key mapping 來進行更快速的移動。真的能省下多少時間嗎? 其實不知道,但是對於整體操作的順暢度會有很大的提升,簡單來說,就是操作的很爽,這方面,真的會讓人離開不了 VIM XD。

驚人的設定彈性
其實這個部分我還在摸索,如果真的要能夠完整掌握 vim 特性,唯一建議是,跟官方文件直球對絕吧 :) (pdf 版 有 237頁 XD),一般的 text editor 能夠設定的其實有限,但是 vim 的彈性之高,真是讓我嘆為觀止,我真的很佩服設計 VIM 架構的人,光以 syntax color 而論,或許 syntax file 是很多,但是整個 syntax file setting 和 color setting 的組合實在是非常有趣,而且 synatax file 有疊加的概念,C 的 syntax file 寫完了,C++ 可以接著繼續寫,這點就真的超有趣,更不論你可以針對特定檔案做出特別設定,如果願意,把 vim 最佳化成特定 programming language text editor 也不是一件困難的事 XD。

plugin
老實說我不知道 vim 的 plugin 個數多不多(約 2700 個),有好有壞,c9s 和 yzlin 都有推薦,可以試試看,端看自己是用什麼 programming language ,就看情況裝吧 XD。


學習曲線
c9s 在 slide 中坦言 VIM 的學習曲線很高,我同意,但是我想補充的是,使用者是可以訓練的,如果一開始就訓練到某種程度而可以讓他之後做的事更為順利,我認為這樣子的訓練是有必要的,舉個例子來說,用注音輸入法可以打出字來,但是新酷音輸入法就有詞庫可以預先訓練,讓你打字更方便(此舉是程式被訓練),但是也可以學習嘸蝦米輸入法,讓自己輸入中文更為便利,其實那一種方法好,端看自己。VIM 或許在一開始是較難以入手沒有錯,不過我相信過了陣痛期之後,我相信會帶給比大部分的 text editor 有著更美好的體驗。

Text Editor vs. IDE ?
到底要用 text editor 好還是 IDE 好? 其實兩個一起用也不錯,我因為平台跳來跳去的關係,我現在只有用 VIM + Eclipse ,兩者的共通點就是,跨平台,都有 plugin 網站 XD,沒有什麼一定好壞的選擇,可以兩者結合嗎? 當然可以啊,不過我目前還是可以在 command line 底下完成啊,我就懶了,VIM 在編輯方面有所長,但是整個專案在 Eclipse 底下,使用 基本的 Refactoring 真的蠻方便的,VIM 做的到,只是我懶的找方法了 XD,也沒有必要過度神化或操死一個軟體,不同的狀況下用不同的軟體也不錯 XD。

真的要用 VIM 嗎 XD? 其實你還有 emacs,找到認為最適合自己的 text editor 就是一件很開心的事!


---
似乎寫的有點亂...Orz

星期日, 8月 16, 2009

c_snippets.vim/ cpp_snippets.vim 釋出

起初我在 在 Vim 上使用 Slippery Snippet ( Textmate-Like )看到可以藉由輸入少數的字來完成功能,覺得非常的好用,但是抓下來之後,看了其中的 c_snippets.vim 功能還蠻少的 (latex_snippets.vim 更少,只有三行 ...Orz),然後決定自己用苦工來改,所以我在這個檔案做的事,都只是苦工而己... 於是初步完成品如下

c_snippets.vim
cpp_snippets.vim

我會持續維護這個檔案,雖然是很想開一個 git 來做管理比較好,不過我目前還蠻懶的,還有就是,我想把 C++ 特有的語法移到類似 cpp_snippets.vim 這樣子的檔案去,這大概都是我下一步要做的吧,然後可能還要學一下 vim scripts,希望可以幫助到有在使用的人啦 XD

snippetsemu 在 Google Code 上有專案,所以我上傳了,不知道會得到怎麼樣的回應喔 XD


---
大概只有自己在用吧 XD。

出發

今天要出發前往 COSCUP 2009,不過我的 MacBook 沒有電池(送修中),ipod touch 放在學校,管他的,開心就好,打算去買件「你好,世界」(就是 "Hello World") 來穿啦,這句話不僅對 programmer,對 C/C++ 寫程式的人更是特別有感覺,衝啦衝啦 XD


---
昨天明明一點半睡 ...Orz

星期三, 8月 12, 2009

編輯環境

最近我在調 VIM 調的很開心,網路上文件眾多,官方文件也是相當的齊全。若要說 VIM 為什麼這麼吸引人,或許他的外掛精彩,或許可以完全客製化是重點,不過對我而言,那些很難上手的操作按鍵,但是上手後又相當直覺的操作法,才是吸引我的地方。

對於一般人而言,什麼是合手的文字編輯器? Microsoft Word 是一個很不錯的選擇(雖然它有著不錯的排版功能,但一般人還是把它當成 word processor 居多),LaTeX 是一個很好的編寫論文利器,雖然它的 Beamer 可以撰寫出相當良好的簡報,但是一般狀況下,我想大家還是寧願用 Apple Keynote, Microsoft PowerPoint 來製作簡報。每個軟體都有它的極限,都有好與不好之處,那麼我們又要怎麼尋找 XD?

來說說我所看見的 programmer 在編輯環境的狀況,在 Mac OSX 上利用 TextMate 來撰寫 Ruby (我在 Google Developer Day 看到有人用來寫 Python,也是快到爆炸XD),在 Mac OSX 上可以利用 TeXShop 來撰寫 LaTeX (在 Linux 上有 TeXMaker ,不過我沒用過 XD),我認識的一位朋友愛用 PSPad 寫程式,為了這隻程式,在 linux 上還利用了 wine 灌起來編輯。Eclipse 除了它本身很肥以外,其實是對很多程式語言都是一良好的解決方案,Java, C/C++, Python, balala,Google 發展的 API 也幾乎都是以 Eclipse 為平台做為發展。每個人都有自己的邏輯,我的老師 ycma 就是用 KWrite + 檔案瀏灠器在寫程式的,KDE 裡面有很多方便程式撰寫工具,我覺得這也很棒啊。在 wiki 上,甚至有 text editor 的比較,可見,大家都在努力尋找適合自己的環境,而且這件事顯的相當重要!

一般的狀況我們不提,我好久沒有用 Word 和 PowerPoint 了 XD,我想講的是,身為一個寫程式的人,我們要怎麼找到適合自己的環境 XD? 這是我目前使用的編輯器列表

  • VIM - C, C++, LaTeX, Python, PHP ... etc
  • Eclipse - Java, C++
  • TeXShop - LaTeX
  • Visual Studio - C# (這行很明顯是來亂的,大學專題過後,我幾乎不用 .net 開發程式 XD)

基本上只要是未知的環境,我都習慣用 VIM,而 Java 堅持用 Eclipse,其他倒也還好,我沒有固定用一個文字編輯器的偏好,不然我應該會想辦法把 Eclipse 接到 VIM 上(我知道網路上找到的這種軟體,但是我不打算這樣子做,太瘋狂了 XD),我沒有用過 emacs ,但是這套軟體也是有很多死忠粉絲的 XD。

離題了,那麼什麼是對自己而言最適合的程式撰寫環境? 我不知道,每個人都有自己的需求,而你找到你認為理想的編輯環境了嗎 ?

---
寫完完全不知道自己在寫什麼 XD

星期二, 8月 11, 2009

vim on Mac OSX

在我寫 vim 的 blog 時,我覺得我在 VIM 上裝了太多東西(其實也沒多少啦),但是同樣的設定在 Cent OS 5.3 上卻跑的很順,觀察了一下 Cent OS 5.3 compile vim 的 option 是 -O2,而在 Apple gcc 上是 -O ,我就自己抓了 source code 自行重新編譯然後安裝,果然在 Mac OSX 上也可以跑的很順了 XD。

command 如下:

./configure --enable-gui=no --with-x=no --enable-multibyte
make CC=gcc-4.2 CFLAGS=-O2

其實這只是一個範例,我不想裝 gvim (其實也裝不起來),也不想開一個 vim 就要開一個 x11,我試過 O3 ,不過反而比較慢,所以就可以試試這樣子的編譯選項

若在使用 vim 時,backspace 失效,在 ~/.vimrc 加上

set backspace=indent,eol,start

即可解決。


---
別人在編 Firefox,我在編 vim XD


如果有用 MacPorts 安裝 gcc4.4(要裝很久),也可以試試這樣子的指令
make CC=/opt/local/bin/gcc-mp-4.4 CFLAGS=-O2

Firefox 3.5

我在 Mac OSX 上一直都是用 Firefox ,從買 MacBook 以來就沒有變過。我試用過 Safari,真的順又快很多,但是使用習慣不同,所以也不是很經常使用。

但是從 Firefox 升級到 3.1 之後,我的Firefox 就無法關掉,按 cmd + Q 之後,最常出現的是 "應用程式沒有回應" ... 什麼鬼(翻桌),經過多次測試之後,第一次是發現我用的 Theme 相衝 (iFox),移掉用別的 theme 就沒事了。第二次是 plugin 相衝 (Tab Mix Plus, ... etc) ,移掉就沒事了,這一次,不管怎麼移都不管用,我把歷史記錄全部清掉就沒事了 ... (然後發現,Tab Mix Plus 裝回去也不會當掉了 Orz)

其實我還蠻好奇,這只是個案,還是其他人也是這樣?


---
每天都要測試不同的當掉原因 ...Orz

星期一, 8月 03, 2009

記錄





今天看到 yzlin 學長的 vim slides,照著裡面稍微修改了一下,有空會繼續改,不過我對目前的成果非常的滿意 XD

Mac OSX 10.5 Terminal.app 不支援 256 color,所以我稍微再對 vim 修改一下,然後使用 iTerm 取代 Terminal.app


---
等全部完成後,來做個筆記 XD。

記錄


難得會有這麼忙碌的暑假,紀念一下


---
誰叫我沒事突然跑去修三學分的生物資訊課程 XD

星期六, 8月 01, 2009

感觸

看到 Josh Ko 寫的標籤,感觸很多...

我是長庚大學的學生,很多人聽到我說這個校名,大家就會問我說,你是醫學院的嗎? 我說我是資工系的 XDXD 這其實是一個小事 XD 也有人聽到我是資工系的就會問我說,你會不會修電腦,我是會修電腦,不過似乎跟我進來這個系沒有太大的關係 XDXD

好啦,搞笑結束。其實沒有 Josh Ko 之後,自己一個人在學校學習與研究,是頗寂寞的,雖然我一直沒有聽他的話把 Haskell 學好,我也沒有走 programming language 這條路,但是我一直覺得和 Josh Ko 相處很開心,我常常嫌他給我一些很白爛的建議,我們兩個常常聊的很開心,縱使對於事情的認知相差很多。他提及說,沒有誘因留在台北了,那麼我也會思考,現在的我,還有什麼誘因讓我留下來 XD? 留在這個地方,想法真的很簡單,讓自己能夠符合某個強度之上的訓練,朝下一個目標前進,其他的事對我而言,已經不是這麼重要了。

我不是什麼一般人認為的名校畢業的,所以我沒什麼負擔,大家看到我認為我是一個混吃等死的大學生(我想我也蠻符合這個描述),也因為如此,我可以更集中精神的朝一個目標完成。不可否認的是,這個暑假一個月過了下來,讓我有越來越像一個人的感覺了。

也好,是時候不要成為別人的負擔了,也不要成為這個社會的負擔了。


---
有感

星期三, 7月 29, 2009

最近

Blog title 想改成 A woman in wind gray 不知道大家覺得怎麼樣 XD?

稍微解釋一下,為什麼我明明是男的,卻選擇用一個女性做為 symbol ? 因為我還蠻喜歡柔性的事物,雖然這跟我本人極不相稱 XD,那麼這圖女性的身材相當的好,呃,這不是我可以控制的,可能要問畫這張圖的本人比較好 XD 原本的圖比較好? 這也是有可能的,原本的圖是專家級畫的,不過我覺得這張圖會不錯,應該看久會習慣吧 XD

沒事就在看 Modern C++ Design,雖然就目標上我應該要好好的看 Computer Architecture 的 parallel 部分(這可能分成 mutli-cores, pipeline and superscalar),不過暫時不管他 XD 不過看到現在,我更想學會 Haskell 和 JavaScript 了 XD。

但是不得不說,Modern C++ Design 看到現在覺得相當的精采,可以在 compile time 做到這一堆事,我想等看到告一段落再來說好了。

ycma 都鼓勵我們直接跟上千頁的手冊對幹,就跟 wyshieh 說的投球就要用直球對決一樣,我只能說我現在能力不是很足,看著手冊總是要靠著 Google 到另外的一些教學文件輔助才能看懂一些我想要的東西,看來自己閱讀文件的能力不足,得要繼續努力。

看著 fire7617 有一點感觸,因為他每天都用 Fedora ,結果他用 linux 人真的比很多號稱會的人來的好,之前曾經聽到過,有人在 ubuntu x86-64 上嘗試灌 LAMP,但是 LAMP 好像沒有 x86-64 版本,所以硬是開了相容模式灌了 x86 的 LAMP,我還蠻訝異的,有這麼困難嗎 XD? 我在 Cent OS x86-64 裝 wiki 一堆錯誤還是撐過來了啊 XD 不過我不會 NFS 之類的,我覺得我現在還是不太會灌伺服器就是了。


---
一堆雜感。

星期五, 7月 24, 2009

A woman in wind gray


不是說原本的圖不好,而是沒有版權也不知道是誰,snake 就畫了一張新圖送我,非常感謝她,以後有顯示圖片的地方大概都會用這張圖了。


---
A woman in wind gray.

LaTeX Insert Code - lslisting package

最近剛好有在文件中插入程式碼的需要,使用 lslisting package 讓自己比較好工作,但是原本的 sylte 不甚喜歡,所以稍做調整,範例如下


\begin{lstlisting}[title={hello.cpp},
frameround=tfff,
columns=fullflexible,
numberstyle=\tiny,
stepnumber=5,
frame=single,
basicstyle={\ttfamily \small},
numbers=left,
commentstyle={\sffamily},
language=c++]
#include <iostream>
int main(int argc, char** argv){
std::cout << "Hello World" << std::endl; // print ``Hello World''
}
\end{lstlisting}

出來的結果為 ...

其實我只是想做個筆記,如果有其他的設定也跟我說,總覺得我設定的不是很好。


---
做個筆記 XD。

星期二, 7月 21, 2009

或許

或許,我一直都在摸索怎麼當情人的方式,對於她而言,我不是一個足夠好的男友吧。


---
想一想,真的沒有什麼是好的了

星期一, 7月 20, 2009

beamer template 釋出



原始碼在這裡 (beamer_template.tex)

這是參考 Josh Ko 的 Oxford Color Theme 改的,我原本也想釋出 Oxford Color Theme,不過他人當替代役去了,我想還是等他本人同意再說比較好。

預設的 outer theme 是我相當喜歡的 minipages ,效果如上圖。就原始的 theme 來說,都是做細微的調整,例如說加深顏色對比之類的,比較大的修改都是沿用 Josh Ko 而來,所以還是相當感謝他。

在最後加了一個獻醜的指令,\bigtitles ,能夠更快速的插入大標題與小標題,會做這個功能的原因是我還蠻常用到的。

排版部分,簡報字體使用的是華康黑體W5,而文件使用的是華康明體 W5,預設是使用 \chf{} 才能使用中文,對我影響不大,因為我用中文的機會比較少,也不是不能說把中文字體設為主要的字體,但是,這樣子 Computer Modern Fonts 就會消失了(取而代之的是中文字體裡面的英文字體 ... Orz),所以才會採取這樣子的折衷方法。

雖不能做到盡善盡美,不過我想我會用這樣子的設定用很久很久 XD。


---
不知道會不會有人用 XD。

星期三, 7月 15, 2009

最近

其實沒什麼可以寫的,但是又很想寫些什麼。

很想寫些長文章,但是沒有心思也沒有時間,所以大概只能這樣子渡渡混日子,然後希望自己不要變成廢物,希望明天該死的考試結束之後,我能夠寫一連串有關硬體的相關文字,當作是自己的一個學習筆記,常常覺得自己在越級打怪就是了,希望這一切可以趕快過去也趕快平靜。


---
雜記

星期三, 7月 08, 2009

名詞潮流

昨天有人跟我提 "執行力" 這個名詞,我覺得蠻感興趣的,因為我最近這一陣子還蠻常聽到這個名詞的,於是我無聊就 Google 了一下,沒有猜錯,是天下/ 商週的產物。老實說,我很久沒有看這種雜誌了,我也不是很喜歡看商週,但是對於這本雜誌所帶動的名詞潮流我倒是有點興趣。從 人脈、AQ、紫牛、藍海(還是紅海 XD?)、M型社會、執行力,這些名詞的流行,大概都跟這兩本雜誌脫離不了關係,而這些名詞的後面通常是一本書。其實我比較喜歡看的的是 "第三種猩猩", "槍炮、細菌與鋼鐵" 說 XD。

這些名詞的好與不好我不太會去評論,不過我知道的是,不管這些名詞有沒有被提出來,這些名詞所帶來的背後事實是早就存在了(說事實的原因是,有些是為了創造名詞而扭曲事實,這邊有個例子。),那麼為什麼這些名詞仍會流行 XD?

後來我在 Evil Capitalism Heroes中的 龐克扮高深(revised) 看到了如下文字:

市場經濟最迷人的地方就是
你要什麼
市場就會賣你什麼?
你要扮高深
市場就會賣你扮高深
你要義和團
市場就會賣你義和團

我不知道拿這一段話來解釋名詞潮流合不合適,但是這就是我所認為的答案。其實我說這種事並不是這麼好,因為我還在努力的尋找我的中心思維,一個沒有中心思維以及足夠強的訓練,是很容易在辯證式思考中造成自我混亂,不過仍然得依靠自我訓練以及辯證來達成目的,方法是不是對的,至今仍在摸索中。

那麼我現在到底要怎麼閱讀,我會選擇閱讀經典(但這些經典是怎麼判定的,仍有待商確),不斷的論證吧,至少就我的觀點而言,我只是一個會看著螢幕科科笑的阿宅,我不太需要趕市場的流行 XD 安靜的研究與思考就可以了。


---
繼續努力。

漫談 String Processing

String Processing 方法其實不少,剛好最近有學到,寫出來筆記一下。

C 的 string 其實是 char* 這點是非常顯而易見,若要說為什麼,不在這裡的討論範圍內,不過 C 的 string processing 幾乎是我所認為的基礎,就我所遇到的 programming language ,至少都有 C String library 所提供的功能(當然,大部分來的更多),所以要認識 function 背後所帶來的成本,學 C Standard Library 是一個不錯的選擇。

一般常見的處理方法如下:

  • naive method:
    我想這沒有什麼好解釋的 ... XD
  • Use library provided by programming language:
    其實以 Java, Python 而言,sting's function 可以解決大部分的常見問題,C++ 也可以,只是在操作上沒有這麼直覺(C++ Boost string algo 提供了不少好東西,也可以參考。)。
  • Consider a string as input/ output:
    • C: sscanf/ sprintf
    • C++: istringstream/ ostringstream
    • Java: StringReader/ StringWriter
    • 簡單的來說,就跟操作 scanf 一樣,所以 scanf 有的優點這個方法都有,缺點亦然,但是對於單一格式的字串處理,如果要轉換成 int, double 之類的,算是比較快速的一個選擇。
  • Regular Expression:
    C, C++, Java, Python 皆有相對應的 library 可供使用,這一招的用途非常的廣,通常也接近最後一招了,不過還是有死角,不建議使用 Regular Expression 在 XML 類的文件上。
  • Parser:
    通常就會針對特定文件了,例如說就有 XML parser, HTML paerser,使用這類的 parser 來處理相關格式會有事半功倍的效果。
目前想到的方法大概為這些,做個筆記,歡迎指正或補完哩。


---
想起來很多,寫起來很少 XD

星期二, 7月 07, 2009

vimrc

突然想到自己的 .vimrc 雖然不怎麼值錢,但是不見了也很麻煩,所以備份一下好了。


syntax enable 
set number

""" set encoding to UTF-8
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8,big5,euc-jp,gbk,euc-kr,utf-bom,iso8859-1
set termencoding=utf-8
set ambiwidth=double

""" set color scheme
set background=dark
set t_Co=256
color yen3

set title
set showmode            " Show current input mode in status line
set cursorline         " Show Cursor Line in Underline
"set showtabline=2
set wildmenu " Show autocomplete menus.
set visualbell

""" enable mouse
set mouse=a
set ttymouse=xterm
set mousemodel=extend

""" Search Setting
set showcmd
set incsearch
set showmatch

set hls

""" Backup Setting
set backup
set backupdir=$HOME/.vim/backup

""" set status bar
set laststatus=2
set statusline=%4*%<\ %1*[%F]
set statusline+=%4*\ %5*[%{&encoding}, " encoding
set statusline+=%{&fileformat}]%m " file format
set statusline+=%4*%=\ %6*%y%4*\ %3*%l%4*,\ %3*%c%4*\ \<\ %2*%P%4*\ \>
highlight User1 ctermfg=red
highlight User2 term=underline cterm=underline ctermfg=green
highlight User3 term=underline cterm=underline ctermfg=yellow
highlight User4 term=underline cterm=underline ctermfg=white
highlight User5 ctermfg=cyan
highlight User6 ctermfg=white

""" set folding
set foldnestmax=3
"set foldmethod=syntax
"set foldcolumn=4

""" Set editing Tab
set autoindent
set expandtab
set shiftwidth=4
set softtabstop=8
set tabstop=4
set smarttab
set backspace=indent,eol,start 

""" set help doc
helptags $HOME/.vim/doc 

filetype on
filetype plugin on

""" Key Mapping
nnoremap <silent> <f2> :NERDTree<cr>
nnoremap <silent> <f3> :TlistToggle<cr>
nnoremap <silent> <f6> :set foldmethod=syntax<cr>
nnoremap <silent> <f7> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<cr>

nmap cr=    $F=lcf;
nmap cl=    $F=hc^

nmap <LEADER>tc :tabnew<CR>
nmap <LEADER>te :tabedit<SPACE>
nmap <LEADER>tm :tabmove<SPACE>
nmap <LEADER>tk :tabclose<CR>
nmap <C-H> :tabprev<CR>
nmap <C-L> :tabnext<CR>

""" 讓我們可以使用 tab 來縮排
nmap <tab> v>
nmap <s-tab> v<
vmap <tab> >gv
vmap <s-tab> <gv

""" let command mode has bash key binding
cmap <c-a> <home>
cmap <c-e> <end>
cnoremap <c-b> <left>
cnoremap <c-d> <del>
cnoremap <c-f> <right>
cnoremap <c-n> <down>
cnoremap <c-p> <up>
cnoremap <esc><c-b> <s-left>
cnoremap <esc><c-f> <s-right>

""" Source Code Formating
let OmniCpp_MayCompleteScope = 1
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" automatically open and close the popup menu / preview window
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest,preview


""" Tab setting
autocmd TabLeave * let g:LastUsedTabPage = tabpagenr()
function! SwitchLastUsedTab()
    if exists("g:LastUsedTabPage")
        execute "tabnext " g:LastUsedTabPage
    endif
endfunction
nmap tt :call SwitchLastUsedTab()<CR>

""" Auto remove each line-end space 
autocmd FileType c,cpp,java,php,perl,python,ruby,sh,v autocmd BufWritePre  :call setline(1,map(getline(1,"$"),'substitute(v:val,"\\s\\+$","","")'))


com! -bang -nargs=? QFix cal QFixToggle(<bang>0)
fu! QFixToggle(forced)
    if exists("g:qfix_win") && a:forced == 0
        cclose
        unlet g:qfix_win
    else
        copen 10
        let g:qfix_win = bufnr("$")
        en
    endf
nn <leader>m :make<cr>
nn <leader>q :QFix<cr>

nmap <C-c><C-c> :!g++ -g -Wall % -o %:r.out<CR>

---
也可以當成參考 XD

星期四, 7月 02, 2009

最近


一直到今天,期末作業告了一個段落,同時也代表我大四下課程結束,可以繼續完成我的大學總回顧。

為了慶祝大學畢業,買了 FILCO 茶軸鍵盤當成自己的禮物,其實一直都很想買這個鍵盤,只是沒有什麼好理由,如果沒有意外就不會再換了(小白就是遭遇了意外,不見了...Orz),再加上 Logitech MX1100(原來的 MX1000 掛了),還有現役的 DELL 24 吋螢幕,形成現在的工作環境。

不過由於剛完成這些課業一段時間,所以這幾天會好好休息,有事請這幾天後再找我吧,我想也是該稍微停下來一下想想接下來要做什麼了。

花在 plurk 的時間上太多,這也是我要改進的地方,或許應該試著不要堅持把所有的訊息都看完,不然真的很浪費時間,可是又很難的過濾想看的訊息,或許還要試著找一個模式吧。


---
雜記。

星期二, 6月 30, 2009

ACM 532 - CHCRC

今天翻檔案時,翻到我在高中時,寫的 ACM 程式碼,果然有夠醜的,貼出來讓大家笑笑 XD

#include <stdio.h>
#define N 35

char maze[N + 2][N + 2][N + 2];
int a, b, c, fsp = 0, tsp = 0, qt = 0, qf = 0, times = 0;
int i, j, k;

struct use {
int x, y, z;
} sp[N * N * N * N];

int zero() {
for (k = 0; k < N + 2; k++) {
for (j = 0; j < N + 2; j++) {
for (i = 0; i < N + 2; i++) {
maze[i][j][k] = 0;
}
}
}
return 0;
}

int input() {
for (i = 0; i < a; i++) {
for (j = 0; j < b; j++) {
scanf("%s", maze[i][j]);
}
}
return 0;
}

int start() {
for (i = 0; i < a; i++) {
for (j = 0; j < b; j++) {
for (k = 0; k < c; k++) {
if (maze[i][j][k] == 'S') {
sp[fsp].x = k;
sp[fsp].y = j;
sp[fsp].z = i;
return 0;
}
}
}
}
return 0;
}

int run() {
i = fsp;
j = tsp;
while (1) {
if (maze[sp[i].z][sp[i].y][sp[i].x + 1] == 'E')
return 0;
if (maze[sp[i].z][sp[i].y][sp[i].x + 1] == '.') {
maze[sp[i].z][sp[i].y][sp[i].x + 1] = 'R';
j++;
qt++;
sp[j].x = sp[i].x + 1;
sp[j].y = sp[i].y;
sp[j].z = sp[i].z;

}
if (maze[sp[i].z][sp[i].y][sp[i].x - 1] == 'E')
return 0;
if (maze[sp[i].z][sp[i].y][sp[i].x - 1] == '.') {
maze[sp[i].z][sp[i].y][sp[i].x - 1] = 'R';
j++;
qt++;
sp[j].x = sp[i].x - 1;
sp[j].y = sp[i].y;
sp[j].z = sp[i].z;

}
if (maze[sp[i].z][sp[i].y + 1][sp[i].x] == 'E')
return 0;
if (maze[sp[i].z][sp[i].y + 1][sp[i].x] == '.') {
maze[sp[i].z][sp[i].y + 1][sp[i].x] = 'R';
j++;
qt++;
sp[j].x = sp[i].x;
sp[j].y = sp[i].y + 1;
sp[j].z = sp[i].z;

}
if (maze[sp[i].z][sp[i].y - 1][sp[i].x] == 'E')
return 0;
if (maze[sp[i].z][sp[i].y - 1][sp[i].x] == '.') {
maze[sp[i].z][sp[i].y - 1][sp[i].x] = 'R';
j++;
qt++;
sp[j].x = sp[i].x;
sp[j].y = sp[i].y - 1;
sp[j].z = sp[i].z;

}
if (maze[sp[i].z + 1][sp[i].y][sp[i].x] == 'E')
return 0;
if (maze[sp[i].z + 1][sp[i].y][sp[i].x] == '.') {
maze[sp[i].z + 1][sp[i].y][sp[i].x] = 'R';
j++;
qt++;
sp[j].x = sp[i].x;
sp[j].y = sp[i].y;
sp[j].z = sp[i].z + 1;

}
if (maze[sp[i].z - 1][sp[i].y][sp[i].x] == 'E')
return 0;
if (maze[sp[i].z - 1][sp[i].y][sp[i].x] == '.') {
maze[sp[i].z - 1][sp[i].y][sp[i].x] = 'R';
j++;
qt++;
sp[j].x = sp[i].x;
sp[j].y = sp[i].y;
sp[j].z = sp[i].z - 1;

}
if (qt <= 0 && qf == 0) {
times = -1;
return 0;
}
if (qf == 0) {
qf = qt;
qt = 0;
times++;
}
maze[sp[i].z][sp[i].y][sp[i].x] = 'R';
i++;
qf--;
}

return 0;
}

int main() {
zero();
while (scanf("%d%d%d", &a, &b, &c)) {
if (a == 0 && b == 0 && c == 0)
break;
input();
start();
run();
times++;
if (times != 0)
printf("Escaped in %d minute(s).\n", times);
else
printf("Trapped!\n");
fsp = tsp = qt = qf = times = 0;
}
return 0;
}

---
其實大一有重寫,大概 7x 行就結束了 XD

星期日, 6月 28, 2009

CLRS

fr3@KGoogle 分享項目 看到 Introduction to Algorithm (CLRS)把 Multithreaded Algorithms 的章節免費讓人下載之後,連來連去發現

要出第三版啦啦啦啦~出來之後,一定要扛一本精裝版回家(握拳)

這也是繼強者的 blog 說計算機組織聖經 Computer Organization and Design: The Hardware/ Software Interface 4/e 出現之後,最讓我期待的一本書了,已經重量級的兩本書都出了,還會有什麼新書呢,真是令人期待(笑)。


---
什麼時候會有 The C++ PL 4/e XD?

星期六, 6月 27, 2009

返家

從端午節之後一直到現在才返家,姐姐從美國代買的書也到手了,共計有

  • Parallel Computer Architecture: A Hardware/ Software Approach
  • Peopleware: Productive Projects and Teams 2/e
  • Mathematics And Plausible Reasoning Volume I: Introduction and Analogy in Mathematics
  • Mathematics And Plausible Reasoning Volume II: Patterns of Plausible Infference

看來會有個充實的暑假 XD


---
火車誤點 50 分 ...Orz

星期一, 6月 22, 2009

LaTeX 與 Word

每次看到這兩個名詞排在一起時,我有一些想法。LaTeX 做出來的文件很漂亮,也很專業,要變更好也容易,雖然學習門檻較高,但是就我而言,我還是很喜歡用 XeLaTeX 系列來製作文件與簡報。Word (OpenOffice 為 Writter),入門門檻較低,那怕是不太會電腦,也能夠用暴力法做出大部分的人都能接受的漂亮文件。寫到這裡,我不禁思考

養出一個會用 LaTeX 排版的人成本有多高? 而 Word 讓大眾能更輕易的製作文件,是否又有這麼差?

身為一個資訊系學生,我還是義無反顧的為了最高品質而使用了 LaTeX ,但是看過我寫文件的人,有人覺得,很酷捏,寫文件跟寫程式一樣,也要 compile,也有人覺得,為什麼要這麼麻煩的去生成一份文件 XD? 其實沒有什麼絕對的論點,只是,當我們正視電腦所帶來的便利時,為什麼我寧願選擇越活越回去 ?(在這邊假設用 LaTeX 是越活越回去的話 XD),回到其他人的層面而言,我真的覺得 Word 沒什麼不好的,雖然在很多小細節上的處理不佳,但是一般狀況下,真的有人在意嗎?(我們也不能說不在意就是對的) 到底,在新舊技術交錯的時候,身為一個資訊系的學生又處於什麼地位呢 ?

我和 efang 曾經都和 ycma 學過 C Programming, 當然,ycma 的 C programming 是 1978 年的 style,我用的是 1989 年的 C standard,某程度上造成了她的困惑,我最近常常在思考一個問題,從 1990 年到 2009 年也將近 20 年了,想法不可能沒有進步,而 ycma 用 1978 年的寫法也無不好,我只是覺得,身為 2009 年的學生,是不是更應該進步一些 XD? 當然,也沒有任何事可以證明,新的就會比較好,不過身為一個學生,就應該努力嘗試。


---
思考

星期四, 6月 18, 2009

夜唱


我大學只有兩次夜唱,看到這張照片就充滿感觸。(這也是我大學所認識的同班同學全部了 XD)


---
我不會忘記你們的。

期末

Artificial Intelligence: Min-Max Tree
Computer Arithmetic: High-Speed Multiplter, Final Project
還有一個禮拜多 XD


---
寫完就畢業啦 XD

星期四, 6月 11, 2009

閱讀

我看書不會很快,大概只有中文小說比較快,一小時一百多頁吧,其他都慢到爆炸 XD

我的英文大概退化到大家說英語的程度,讀原文書的時候,我還是蠻習慣拿鉛筆和直尺畫線,我認識的頗多老師都是會畫線的,不過常看到誇張的時候,如果書的密度夠高的時候,整頁都是線也是不太舒服的 XD 所以有關程式設計的書我還是不免俗的畫個線,以 Thinking in Java 4/e 為例,在說明 Concurrency 時,以浴室和洗澡人當例子,我只在該段的旁邊註,略 XDXD。 所以其實要不要畫線,端看該本書的資訊密度為何,太高就不用畫了,不過也是有認識接近不畫線的,Josh Ko 我記得是如此(錯了要跟我說 XD), ycma 也是喔 XD,不過我自己仍是想畫就畫,不想畫就不要畫,偶爾寫個自己的註記是我的習慣 XD

看看別人的閱讀習慣也蠻有趣的,有時候看看別人,會覺得自己沒什麼效率,只好努力的用時間和改變習慣來換了 XD


---
雜記 XD

星期一, 6月 08, 2009

最近

在此,跟最近覺得我很衝的人道歉,是我不會控制自我脾氣,如果有什麼話直接的冒犯到,請直接跟我說,我會虛心接受。

最近還是覺得自己是一個一無是處的人。縱使不管再怎麼努力就有如不會游泳而溺水中不停掙扎卻越來看不見水面上的光亮。除了自己什麼都不會以外,我不知道怎麼幫自己下註解。

今天比較早回宿舍,因為一些讓人覺得不會生氣,但是無奈的事,我不是一個很重要的人,不要對人呼之及來,喚之及去,要給其他人給予應有的尊重。也很感謝馬麻,是一個很好的人,我還是會持續的感謝及幫助,若要說我學會什麼,我得說,感謝是一個很重要的力量,學會感謝,才有可能學會前進。然後


繼續寫作業,我不要我的期末炸掉啊啊啊~~~~~


---
所以其實重點是最後一句 XDDX

筆記: ssh 登出後 process 持續執行

nohup ./a.out > test.txt &

有這種指令,以後就方便多了 XD


---
我不要再用自己的電腦跑了啦...Orz

星期三, 6月 03, 2009

yen3: 家人跟我說,我會講話的第一句話是 "媽" XD
gb014388: 你確定後面沒有 "的" XD?


---
如果有,我從小就看的出潛力了...XD

出錯

#include <iostream>
#include <boost/shared_ptr.hpp>

class TestA;

void printTestA(TestA* a){
std::cout << a << std::endl;
}

void printTestA(boost::shared_ptr<TestA> a){
std::cout << a << std::endl;
}

class TestA{
public:
TestA():x(0){}
void test(){
printTestA(this);
printTestA(boost::shared_ptr<TestA>(this));
}
private:
int x;
};


int main(){
boost::shared_ptr<TestA> x(new TestA());
x->test();
std::cout << x.get() << std::endl;
}

這樣子的程式碼會出錯,正在想怎麼解決 XD
好像有解,下午來菸酒菸酒~


---


這個問題其實是 boost::shared_ptr 遇到 this 會發生什麼有趣的事 XD
大鳥 在 comments 中解釋了為什麼會錯,感謝他(感覺比自己寫的還清楚,我就不重寫了 XD) fr3@K 有提到 enable_shared_from_this 是最佳解

對我而言,我利用這個機會好好看了一下 Boost smart ptr,看完才發現,離自己夢想中的 memory management ,還是有一段距離,這個問題在 mailing list 有人討論,也有人提出解法,官方建議兩種解法,一種是加入 weak_ptr,在建立此 object 時,利用 weak_ptr 指向自己,另外一種是 fr3@K 提的,其實這兩種方法殊途同歸,只是後面有包裝,當然,就我自己而言,我實在是不想為了解決這個問題再繼承一個 XD,但是自己寫也沒有多好。

這個 library 的邏輯我猜想是如此,要嘛你就全用(使用 boost::make_shared<T> 建立更好),使用 shared_ptr<T> ...etc 來管理,然後從頭用到尾,weak_ptr 就會出現在這種時候(在我下筆的此刻,雖然我知道它的用法與目的,但是還是不知道使用時機為何),如果想要在 C++ 使用懶人的方法來用記憶體,我們必需更努力的學會這個 library XD,身為一個學生,不太知道外面世界怎麼樣,只能說,盡量學習嘍 XD


補充一下修改後的程式碼:
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/weak_ptr.hpp>
#include <boost/make_shared.hpp>

class TestA;

void printTestA(TestA* a){
std::cout << a << std::endl;
}

void printTestA(boost::shared_ptr<TestA> a){
std::cout << a << std::endl;
}

class TestA{
public:
//TestA():x(0){}
void test(){
printTestA(this);
printTestA(boost::shared_ptr<TestA>(weak_this));
}

static boost::shared_ptr<TestA> create(){
boost::shared_ptr<TestA> u = boost::make_shared<TestA>();
u->weak_this = u;
return u;
}
private:
int x;
boost::weak_ptr<TestA> weak_this;
};


int main(){
boost::shared_ptr<TestA> x = TestA::create();

x->test();
std::cout << x.get() << std::endl;
}

星期一, 6月 01, 2009

片段

昨天開始寫回顧,卻很難寫出隻字片語,我的回憶總是存在於片段,也睡不太著,邊睡邊想出我想要寫的架構為何,希望今天能寫出比較完整的東西。


---
回顧。


11:39 大綱大概擬定出來了,看來要寫好多天 XD

星期日, 5月 31, 2009

復工

不知道自己己經頹廢多久了,從今天開始復工吧 ... 積極休息後總是要更積極的前進。


---
一堆事可以做了 XD

星期三, 5月 27, 2009

邯鄲學步

寫 C++ 的只有四種人

  • C++ 當 C++ 寫
  • C++ 當 C 寫
  • C++ 當 Java 寫
  • C++ 亂寫

---
看別人 code 有感...Orz

星期一, 5月 25, 2009

單眼相機、腳踏車與 ipod


其實這些都是現在很紅的東西 XD。

我沒有單眼相機,不過我有一台很複雜的相機 Nikon Coopnix 5000 ,這台是我國中考上高中之後我爸送我的相機,基於它沒有壞而且很好用的理由,我一直用著它到現在,不過電池都沒有電了,一直是我很大的困擾 XD。我一直到高中畢業前,我都在彰化就讀,所以騎腳踏車對我而言也是一件很稀鬆平常的事 XD。我沒有小筆電,不過我前後有 Acer TravelMate 3210 (現在是 efang 在用),與現役的 MacBook 2.16g ,我也有一台 ipod touch 32GB,很不巧的,我買完就一路漲價漲到現在還沒有跌回來過 XD

先從數位單眼來說好了,在 Canon EOS300 D 出來前(第一台以 30k 的價格破壞市場的單眼 XD ),我看著父親用 D100 (父親是個攝影師),其實貴的是鏡頭,我本來也很喜歡攝影,但是在紅了之後,我反而不想碰了XD 關於攝影這件事我跟父親爭論過,我的論點其實很簡單,如果執著於攝影技巧與美感,反而忽略了相片本身所要表達的,我一直都很佩服國家地理頻道的小女孩照片,但是我覺得我拍不出來這樣子的照片,所以我就不照了XD

我從國中後開始有了自己的腳踏車,但是自己一直到高中後才會放雙手騎單車,我的高中是彰化第二高學府,所以其實我還蠻享受騎腳踏車飆上去的快感 XD 到了北部之後,想騎腳踏車卻沒有辦法 (我不想跟砂石車搶路,台北的公車太恐怖...Orz),到我大二大三之後,騎單車紅了,我也不想騎了,總覺得我對於現在紅的東西,並不是這麼喜歡。

我在升大四的時候買了一台 ipod touch,它可以上網沒有錯,不過我喜歡的只是很單純的音樂同步,其實我連遊戲都很少玩 XD 我喜歡 itunes 帶給我的音樂體驗,真的還蠻方便的,就跟我很久很久之前說,我買 MacBook 是因為有一個良好的 GUI 和很好的 BSD Kernel 可以用,我覺得這一切都很方便。當然, Mac 很貴是一個既成事實,或許下一次會考慮用 ThinkPad + Linux ,現在的 GNOME 也可以做到非常方便的地步 (如果驅動程式沒有問題,我真的覺得現有的 Linux 相當的不錯)

現在我慢慢喜歡上跑步了,我對於現在會紅的東西始終沒有興趣,希望跑步不會紅才好 XD


---
雜想

小精靈


gb014388: 小精靈屬性就是,當有需要的時候都會存在,然後問問題都會有回答與幫忙的屬性。
yen3: 幹,聽起來很像好人啊 XD


---
謝謝 snake 畫圖送我 :)

星期日, 5月 24, 2009

YAMAHA YST-M101

YAMAHA YST-M101 是我電腦第一付比較好的電腦音響,也是我一直用到現在的電腦音響,我有很多篇想寫,偏偏先寫這篇了XD

在很久很久以前(大概十年前 XD?),我是一個國中小毛頭,我不知道錢怎麼用,音響有多貴的年代,我看到這一付 YAMAHA YST-M101 單純只是覺得 YAMAHA 聽起來不錯的樣子,一對 990,好像不貴,我就買回來了XD 結果沒有想到,是陪伴我到現在最久的電腦配備,用久了也捨不得換,電腦都不知道換幾台了。但是不得不說,這個音響,表現的聲音非常清楚,或許我是木耳也有可能,如果有人有看到在賣的話,歡迎跟我說,我想再買一個回來XD


---
亂寫一通XD

星期日, 5月 17, 2009

很多天飲食

禮拜四: 晚餐: 燒烤8支 @ 泗元燒烤 ($80), 刨冰 @ 某店 ($40)。 合計: $ 120


禮拜五: 早餐: 炒麵 + 中杯奶茶 @ 牛角坡 ($60) + 午餐: 培根雙層牛肉堡套餐 @ 實踐大學正門附近的好吃漢堡店 ($210) + 晚餐: 羊肉炒麵($40)。 合計: $ 310


禮拜六: 早餐: 炒麵 @ 牛角坡 ($40) + 晚餐: 水餃15粒 @ 桃園火車站附近的水餃店 ($60), 烏龍綠 @清新 ($25) + 點心: 雞蛋糕 @ 路邊攤 ($30)。 合計: $ 155


禮拜日: 午餐: 大麥克餐, 四塊麥克雞塊 @ 麥當勞 ($140) + 晚餐: 豬肉炒麵 @ 醬騷有味 ($70), 烏龍綠 @ 清新 ($25)。 合計: $ 235


---
都還吃蠻貴的XD

星期六, 5月 16, 2009

Star Trek


Space, the final frontier.
These are the voyages of the starship Enterprise.
It's continuing mission: to explore strange new worlds,
to seek out new life and new civilisations,
to boldly go where no one has gone before.


---
美好未來。

簡報字體

看見好友 Zeroplex 做簡報,我突然想到我受到 Josh Ko 影響的簡報風格,我做簡報一個是 keynote,不過能用 XeLaTeX + Beamer 做我還是盡量用這個做,其實字體會影響觀感蠻深的,當然,排版是另外一個重點了。

Beamer 的預設字體是 Computer Modern Font (designed by Knuth),目前這套字體可供下載,載點在這裡(請下載 Open Type Fonts) 檔,簡報比較適合使用的字體是 CMU Sans Serif, 中文的話是黑體(我是用華康黑體W5),網路上有 cwTeX 提供的黑體還有王漢宗 XD? 我沒用過,我不清楚,Apple 的黑體是看起來比較漂亮,但是實際上用在簡報我卻覺得很怪 XD。大抵上而言我都用這兩個字體,所以可以試試看嘍。當然,我比較不會生動的簡報,這就要期待強者補完了XD


---
雜記型筆記 XD

星期三, 5月 13, 2009

今日飲食

早餐: 炒麵 + 中杯奶茶 @ 牛角坡 ($60) + 晚餐: 腿排飯 @ 來客快餐 ($50), 烏龍綠 @ 清新 ($25)。 合計: $ 135


---
其實早餐被宜芳搶去吃了...XD

星期二, 5月 12, 2009

Haskell

昨天做夢,夢到我跟大家聲嘶力竭的推薦 Haskell ,但是沒人理我 ... Orz


---
不知道是好還是壞 XD

星期一, 5月 11, 2009

今日飲食

午餐: 原味鍋貼*10 + 辣味鍋貼*5 @ 八方雲集 ($65), 烏龍綠 @ 清新 ($25) + 晚餐: 魯味 @ 健康紅燒魯味 ($111)。 合計: $ 201


---
重新開始連載XD

星期日, 5月 10, 2009

修理

一直覺得我的 MacBook 硬碟不是很大 (120gb),在想了很久之後,我昨天終於決定要買一顆新的硬碟了,於是我買了 Seagate 320gb 和一個外接盒,雖然最近 Seagate 鬧的很大( 老實說我真的不知道 RMA 是什麼,我的外接硬碟也是 Seagate ...),但是就買啦,但是裝上去發現一個訊號都沒有,我以為我抽到籤王(就是壞了),結果硬碟一拔,硬碟兩邊的滑軌膠條就這樣子給我掉了一邊,怎麼裝都裝不上去,我今天只好再跑一趟台北了...

騎車到光華之後,檢修人員一測,抓的到硬碟啊(翻桌)。只好抱著 MacBook 去優仕了,一看之下,要修拆機費 1200 ,我也認了XD 不過修理人員很好心的本來想要幫我換電池(結果電池沒壞),換風扇(因為很髒,但是沒現貨),就變成什麼都沒換了,不過我覺得這鍵盤快壞了,我就申請換鍵盤了 XD ,整個優仕的服務很好,也謝謝辛苦的維修人員啦。


---
有一種故意寫成小學生作文的感覺 XD

星期四, 5月 07, 2009

紀念


為了禮拜五的比賽,用 VMWare 灌了 Windows XP + VIsual Studio .net 2008 with Windows Mobile 6 SDK 去年寫的程式碼今年 compile 還能執行順暢,看到這個畫面突然想到去年還蠻常在看的,留做紀念


---
這個比賽過完我幾乎就不用 Windows 了 XD

星期三, 5月 06, 2009

LLVM

昨天有幸去台北的 Mix Coffee& Tea 聽了 jserv 介紹 LLVM,在這中間很感謝 TOSSUG 的 FourDollars 和 pingooo 在 IRC 上熱心回覆,不然我還真的不知道時間,雖然沒有認識到人(演講完馬上被 efang 拖回家了XD),還是有一個蠻愉快的經驗。中間 efang 跟我說

efang: 都看不到用 Windows 的電腦耶。
yen3: 可能看到會被打 XD

anyway 很感謝有這場演講

LLVM 的價值有二,一個是拆成三段(Fron-end, LLVM, Back-end),我相信這種架構 LLVM 不是第一個,但是可能目前看起來最活躍的一個,如果只有這樣,或許還不足以介紹 LLVM,LLVM 在 Just-In-Time 上可以做到這樣子的地步,雖然我對 Compiler 的領域不懂,但是我猜,應該是一個很好的利基吧 XD

我還是沒有時間看 StreamIt ,看來是我太懶了,不過 StreamIt 的 C Compiler 已經做出來了,不然我覺得把 StreamIt 接到 LLVM 上也不錯,不然就是把 LLVM code 轉成 Raw Code XD? 這或許是一個更有趣的主意 XD 總覺得人要往前看,舊有的東西有其價值,但是在新的知識上,我們也可以看到有趣的一面。

jserv 在中間開了 Haskell 的玩笑,我該感謝他開了這個玩笑嗎 XD 總之,我覺得,Haskell 需要的是熱情,而不是有一點天份,我沒有天份,不過我認真學習,我總是會寫出 Haskell Program 的,當然,我相信他在開玩笑,他的意思是,如果像 Haskell 這種偏冷門的語言,掛在 LLVM 上,就可以使用 LLVM 的最佳化,可以說是相當省力,當然,還是沒有 gcc 這種一條龍生產線來的好,但是我們的人生也不知道可以做出多少個一條龍 XD


---
很有趣的體驗。

星期二, 5月 05, 2009

Programming Tool's Note for a Primer

很不幸的,我在 programming tools 上還算是初學者,不過我希望在此做個筆記。

Open Source 界最大的好處就是,你可以自由組合出你要的工作環境,但是也因為太自由了,所以像我這種人反而不知道怎麼下手 XD

簡單的來說,一開始只要會用 gcc(g++) + vim 就可以把 ACM 等級的程式寫的很好了...如果真的不習慣這種 console mode 的話,用個 Eclipse 當成你的過渡期吧(現在電腦夠快了...XD),Eclipse 雖然主力是 Java, 但是同時也支援 C/C++, Python, Ruby 等等,這些都需要裝 plug-in,但是並不難裝,可以自行 Google 一下

make: 一定要會,沒有什麼理由說不想學 make ,這是你的基本吃飯工具啊XD 那怕是 IDE 幫你 compile, IDE 也是先產生 Makefile 再呼叫 make 啊XD,在一般的狀況下,看到有其他的source code 需要編譯大抵也只有三步啊

./configure
make
make install

如果你的 linux 夠好的話,基本上不要是太複雜的軟體,應該以「套件管理員」為優先考量,真的不行,再考慮自己編譯應該都行的通,行不通的時候呢 XD? 請記得你還有套件管理員 XD

如果想要產生足夠強大的 Makefile,要怎麼做? 有autoconfig, automake 可以幫你產生 Makefile, 當然現在還有 cmake, bjam 可以用,不過這是後話,先試著自己練習寫 Makefile 比較實在,Makefile 說穿了只是一個相依性的指令編輯器,願意的話,LaTeX 的多檔編譯也是可以用它啊,不要把 Makefile 的功能簡單化 XD

how to use code to generate document ? 其實也不難,找一下 doxygen ,註解按照一定的格式撰寫,相信我,當你產生過一次文件之後,你會喜歡寫註解的,因為可以產生這種文件還蠻爽的 XD (我都利用這個機會訓練我的爛英文)。

那麼怎麼做 Source Code Management ? 有很多工具可以選啊,從古早的 cvs 到流傳最廣的 svn ,到現在最火紅的 git ,選一個來用,再也不用擔心 code 的一拖拉庫問題了,programming 就會變成一件很爽的事

當然,這些在 Windows 上都有解,只是,對我而言不是這麼順手吧,我想,還是在 Linux 下 Progarmming,會方便很多,而且我們還有一個 sourceforge.net 可以看可以玩,為什麼不在 linux 下寫程式 XD?


---
某人要我寫循循善誘文 XDXD

星期一, 5月 04, 2009

買書

大家都知道,如果是資訊相關科系,可能去天瓏找書是最快的選擇(如果是教科書可以看一下愛因斯坦、華通,理論上會比較便宜 XD?) 我稍微簡單的想了一下如果跟系上老師的狀況。

現在跟的是ycma,他列的書只有 (1) 天瓏買不到,amazon買的到 (2) amazon 買不到

如果跟系上做模擬的,可能要去大陸書店...

如果跟系上做 Data Enigeering 的,可能常在團購...

如果跟的是生物資訊,書應該是買不起...Orz

如果跟的是平行運算,書只有盜印或 amazon 兩條路...


---
其實,跟誰書都不好買...

星期五, 5月 01, 2009

紀錄

與 gwchen 合作的第一步完成共135行 Java Code XD


---
似乎比預期快XD

星期三, 4月 29, 2009

讀書有感

最近除了做事之外,大部分都把下面有關 programming language 的書籍與文件交互著看,希望能讓自己的想法有所總結

  • Introduction to Functional Programing using Haskell 2/e
  • Real World Haskell
  • Advanced Programming in Unix Enviornment 2/e
  • C++ Boost Library Document
  • Thinking in Java 4/e
  • Python 2.62 Doc

目前最想寫的是 Haskell Learning Note 4,不過還是難產中,可能真的要等看書到領會一段事物之後,才會寫吧,我不想寫出不好的東西。哈。

不過有時候都會有人問我類似的問題,到底寫程式重不重要,到底要學什麼程式語言比較好? 老實說,對於這個問題我不太有能力回答的,不過我想說的是, programming 對我們而言,是一種工具,是一種表達我們想法(甚至是夢想)的工具,最近和做生物資訊的老師聊天,檢測 DNA Sequence 錯了,一次就是好幾百塊啊,我們錯了只要重新 compile ...XD 當然如果拿去晶圓廠 tape out 錯了...那個錢也是...Orz

學什麼程式語言好,單看你喜歡那一個,選一個當自己的母語,之後下去發展就是了,在這個世界中,很少一個語言能夠包山包海解決所有的問題都很好,端看自己的需求,下去學就對了。給自己一個離開電腦數個小時的時間,好好看幾本 programming language book ,想試書上的程式碼,再回到電腦前吧 XD。關於 programming 有一種天真想法就是,想要透過 programming 來解決所有問題,其實我們的工具更多,而且是超乎你想像的多。

我最熱愛的 programming language 是 C/C++, Haskell ,但是這幾個都學不好(我熱愛的東西都學不好 XD),但是我會繼續學習,你說我推薦嗎,答案是,我也不知道 XD 除非有人明確指出需求XD 但是我也不一定對該需求有所了解,所以我的建議也不是對的,網路上的東西,如果你不確定的話,聽聽就好 XD。

接下來要閱讀的是...

  • MIT StreamIt, UC Berkely The Ptolemy
  • Operating System Concepts 7/e
  • Compilers 2/e
  • Computer Organization and Design 3/e
  • Parallel Computer Architecture 2/e

越來越忙了,不過希望自己過著充實的生活。


---
Keep Going

昨日飲食

早上: 炒麵 + 中杯奶茶 @ 牛角坡 ($60) + 午餐: 六塊麥克雞塊, 麥脆雞 with efang @ 麥當勞 ($80) + 晚餐: 自助餐 @ 學校餐廳 ($58), 麥香奶茶 @ 全家($14)。 合計: $ 212


---
昨天累到翻掉...Orz

星期二, 4月 28, 2009

昨日飲食

早上: 豬排堡 + 中杯奶茶 @ 歡樂美而美 ($55) + 下午: 可樂 @ 全家 ($25) + 晚上: 生日蛋糕 + 焦糖瑪琪朵 @ Starbucks ($110)。 合計: $190


---
基本上,早上之後都沒吃 ...

星期六, 4月 25, 2009

今日飲食

中午: 桑椹紅酒豬肉飯捲 @ 三姊妹飯團 ($50), 純喫茶檸檬紅茶 @ 7-11 ($16) + 宵夜: 蔥抓餅豬排蛋, 杏仁起酥 @ 永和豆漿 ($75), 烏龍綠 @ 清新 ($25) 。 合計: $166


---
好不正常...Orz

昨日飲食

早上: 炒麵 + 中杯奶茶 @ 牛角坡 ($60) + 晚餐: 水餃20顆, 豆干, 豬耳朵 @ 吃兩年還是不知道店名的好吃水餃店 XD($80) + 宵夜: 花枝丸, 百葉豆腐 @ 脆皮雞排 ($45), 純喫茶紅茶 @ 7-11($16) 。 合計: $201


---
好多...

星期五, 4月 24, 2009

流量



看到今天的流量時,我想大概是爬網頁機器人來了吧,後來我看到了這樣子的圖...

有沒有人要跟我解釋發生什麼事...Orz


---
XD

昨日飲食

早上: 炒麵 + 中杯奶茶 @ 牛角坡 ($60) + 宵夜: 雞排 @ 脆皮雞排 ($40), 烏龍綠 @ 清新($25) 。 合計: $125


---
忘了貼...Orz

星期三, 4月 22, 2009

今日飲食

中午: 豬肉炒麵 + 每日蔬果 @ 醫騷有味, 7-11 ($95) + 晚餐: 滷味 @ 健康紅燒滷味 ($111) 金桔甜橙 ($45) 。 合計: $251


---
吃真貴...Orz

星期二, 4月 21, 2009

今日飲食

早上: 炒麵 + 中杯奶茶 @ 牛角坡 ($60) + 晚餐: 豬排便當 @ 八珍鳳姐 ($80) 。 合計: $140


---
吃的蠻少的。

簡單的 Boost::asio 範例

Boost::asio 是在 C++ Boost Libaray 中支援 Socket Programming 的 library,但是其實它的文件我有看沒有懂,其實底層是採用 Unix Socket 做為實作,整個實作算是蠻詳細的,但是到目前為止不太會(其實我也沒有想要用很多功能啊...Orz),所以寫了一個 Example Code

先談編譯好了,example code 會使用到 Boost::array, Boost::system ,前者是只有 header only,還算好解決,後者就需要 linked library,如果想要編譯的話,編譯指令可能會長成這樣子

g++ -o httpget asio_example.cpp -L /usr/local/lib/libboost_system-xgcc40-mt.dylib
也就是說,你得想辦法 link to Boost::system (我是在 Mac OSX 上試的,如果是在 linux 底下,可以試試 libtool )使用上的話比較簡單,直接這樣子用即可./httpget www.google.com.tw理論上會截到整個 html code

這個 code 其實不長,然後這個程式碼只是範例,真的要處理的字串很大時,就不建議了,但是小型工作要勝任應該是沒有太大問題 XD,裡面最主要的是 class BoostTCPConnect

class BoostTCPConnect{
public:
BoostTCPConnect(char* address, char* service); // 分別填入 address, service(port)
void writeString(const std::string& out_message); // 送資料
void readString(std::string& in_message); // 讀資料
};
沒了,就這麼簡單,在 main() 裡面,則是嘗試對伺服器送出 http request,之後收回來,連錯誤都沒有處理,不過我想這樣子應該夠哩 XD

其實有空應該蠻想多嘗試的,只是我真的覺得 Boost::asio 的文件不是人看的...Turioal 打開竟然是範例...其實我還蠻想知道,這種文件看不懂是我的問題,還是文件本身的問題 XD?


---
只好慢慢的猜了XD

星期一, 4月 20, 2009

今日飲食

聽說 Josh Ko 寫了 32 天,按照串聯慣例,我寫完 32 天後換人寫 XD
中午: 勁辣雞腿堡 @ 麥當勞 with efang ($72) + 晚餐: 自助餐 @ 學校餐廳 ($58) + 宵夜: 珍珠奶茶 @ 五十嵐($45)。 合計: $175


---
難得喝五十嵐說 XD

天生麗質

yen3: 突然發現,養出一個像樣的 C++ Progrmmer 會不會很難呢...
efang: 難吧
yen3: Josh Ko 那種不就更難 XD
efang: Josh Ko 是天生麗質xd


---
原來可以這樣子用 XD

課程與十年

對於這塊領域,我通常以十年為一個分界點,昨天與一個學弟相談甚歡。

其中我提到,大學課程如果對於現在不適合的話,我通常會分成兩個狀況,第一,教授還是活在十年前的教材,第二,十年前的教材會了,才有可能會這一個十年 XD 第一的話,原因並不能全然怪教授,或許他教的根本就不是他的專長,第二個原因通常是較為常見的原因,不過在此對於打混的老師,我就不予置評了。


---
有感

星期日, 4月 19, 2009

外宿工作環境


昨天 yen3姊 來訪,用相機照了這張,這是我目前的工作環境啦


---
我有習慣照我的工作環境 XD

星期六, 4月 18, 2009

漫談 heap tree

身為一個懶人如我,heap tree 對我而言是一個非常好用的 data structure,其實這篇講的不是很難,只是要講我很懶 XD

我還蠻記得我第一次學習 C++ STL 的時候,我第一次體會到,何謂需求? 如果可以分析資料的基本特性,就可以找到比較弱的方法,而不用每次都用很強的方法。舉個例子說,從一個 ordered list 中取出 max element ,早期的我可能笨笨的排序完就直接上了 (std::sort() 很方便啊 XD),但是如果每次都只是從序列中取出最大或最小元素,可能候用 std::make_heap() 搭配 std::pop_heap() 即可,而且速度比前者快很多,其實大部分我們只是想取某個特性的元素,也不用每次都拿排序來做。如果每次都僅插入元素來形成 ordered list 的話,當然也可以使用 std::list 與 std::list::sort() 來實作,這樣子我們也可以很方便的來達成我們的要求,只是每次插入一個新元素的時間為 O(n),但是只要能夠循序存取就支援這個特性。而 heap tree 雖然插入一個新元素為O(log n) ,但是考慮到記憶體使用策略,端看怎麼用了。

我記得我在很久以前與人合作寫程式的時候,有人一次讀了數mb進來存在 std::string 中,然後使用 std::string::insert ,這人就問我為什麼跑起來無敵慢,我說原因其實蠻簡單的,因為這個 member function 的時間是 O(n),後來改成分段讀取後處理,速度快了好多啊XD。

題外話: 我沒有用過 Boost::asio 和 Boost::thread ,有人用過的可以告訴我穩定否 XD?


---
寫程式時,盡量使用最弱假設,會有驚喜的。


2009/04/18 5:32 pm 大鳥 在 comments 中有提到更好的方法,不過我還沒試,所以有看的人要記得看回覆喔XD

星期五, 4月 17, 2009

新好男人

yen3姊: 有帶面紙是新好男人的表現喔
yen3: 有沒有變成新好男人我不知道,不過我變成面紙供應商倒是真的 XD


---
這到底是誰說的 XD

星期三, 4月 15, 2009

覺得今天講 Java Technicalities 說的不是很好,有點說太快了,也說太淺了,一方面是簡報只有準備這樣子,一方面是時間太短,最大的問題是自己掌握能力太差了...Orz


---
再改進

Java I/O

利用現在難得空閒(原本要講 Java Technicalities 因故延期 XD)來寫一下這篇前幾天想寫的東西好了

Java I/O 和 C++ I/O 都是採取 OO 做為設計準則,所以其實 Java I/O 並不難懂,難懂的是,為什麼會有這麼多名詞 ... Orz,其實 Java I/O 大至上可以分為

  • InputStream/ OutputStream - 一次讀取以 1 byte 為單位
  • Reader/ Writer - 一次讀取以1 char 為單位

由於 Java String 是以 UTF-8 為 default encoding ,所以如果使用 Reader/ Writer ,1 char = ?? bytes ,其實談到 I/O 與 string 躲不掉的就是編碼問題,可是這我也不懂,我們再來大概分類一下XD

  • InputStream/ OutputStream
    • StringBufferInputStream/ StringBufferOutpuStream - 如前文所提,String 並不一定是 1 char = 1 byte,所以此 class 已經不被建議使用
    • ByteArrayInputStream/ ByteArrayOutputStream - 如果你很肯定你的 String 的單位是 1 byte,可以使用這個 class + String.getBytes() 來使用
    • FileInputStream/ FileOutputStream - 檔案用的 XD
    • Socket.getInputStream()/ Socket.getOutputStream() - 很明顯,這是 Socket Programming 用的XD
    • Process.getInputStream()/ Process.getOutputstream() - 這是 Process Control 用的 XD 需用 ProcessBuilder 來建立 Process
  • Reader/ Writer
    • StringReader/ StringWriter - 官方建議用來讀取 String 的 class
    • FileReader/ FileWriter - for file
    • CharArrayReader/ CharArrayWriter - 我不想說了XD

其實還有很多沒提到的,但是我們可以把上述的的class再分別接到(做為以下 contructor argument)...

  • InputStream/ OutputStream
    • BufferedInputStream/ BufferedOutputStream - 加上 buffer
    • DataInputStream/ DataOutputStream - 支援格式化輸入輸出
  • Reader/ Writer
    • BufferedReader/ BufferedWriter - 同樣支援 readLine()/ writeLine()
    • 格式化輸入輸出我就不知道了,不過有想到Scanner 可以格式化輸入

看到這邊其實蠻亂的,不過這就是Java...Orz 其實只要記得有兩套方法就可以了,偏偏又跑出一個兩者的單向橋樑...

  • InputStreamReader/ OutputStreamWriter - 讓 InputStream/ OutputStream 可以橋接到Reader/ Writer 去,反之不行

其實原因還蠻簡單的,今天我收到的 InputStream/ OutputStream 裡面的字元不一定是以 1 byte 為單位啊(其實知道 encoding 的話,也不難辦),例如說我從 Socket 收到的訊息採用 UTF-8 的話,我們就可以寫出這種程式碼 XD

Socket connect = new Socket("balabala");
BufferedReader br = new BufferedReader(new InputStreamReader(connect.getInputStream()));

那麼其他沒有提到的有...

  • RandomAccessFile
  • ObjectInputStram/ ObjectOutputStream
  • java.nio

以後有空再說吧(以後真的會有空嗎... XD)


---
這篇倒是寫蠻快的 XD

星期二, 4月 14, 2009

合照


從 Clara 手上得到我和 Josh Ko 合照一張, Clara 說我看起來比較兇惡...XD 我只是沒有剪頭髮而己嘛 XD


---
有剪頭髮好像也差不多XD

星期一, 4月 13, 2009

錯誤

答答的鍵盤聲是美麗的錯誤 我只是個 programmer 不是 bugger producer ...Orz


---
又要 debug 一陣子了...Orz

星期五, 4月 10, 2009

搬家

第一次住外面, 其實睡不太著。

不過其實習慣了, 或許會覺得這邊很好, 雖然是在二樓, 常聽的到車子的聲音, 但是我意外的蠻習慣車水馬龍聲。搬家也還算順利, 有 fire7617 和 gb014388 幫忙, 真的省事不少(不過最重的書還是得自己搬 XD), 住的地方, 生活機能還算便利, 附近有學校, 如果願意, 可以聽著學校鐘聲醒來, 如果記憶力很好的話, 可以數鐘聲知道現在幾點 XD

近期計畫有三件事, 第一件事, 繼續講 Java Technicalities , 不過大概是針對不同的學弟妹說了, 所以簡報內容得調整才行, 第二件事, 開始寫比賽文件, 是的, 我又繼續比賽了, 不過這次比賽只有寫文件和展示, 兩件事皆非我所長, 還好同組組員很厲害 XDXD, 第三件事, 我想稍微了解 Google Cloud Computing 在做什麼, 希望能讀懂相關 paper, 當然, Real World Haskell 和 Introdution to Functional Programming using Haskell 不在計畫內就代表, 每天都要抽一點時間看就是了。


---
還真是不得閒的日子。

星期三, 4月 08, 2009

Java Technicalities

其實我跟 Java 不熟,今天卻要對學弟妹做 Java Technicalities 的介紹,好死不死我又用全英文做簡報,硬著頭皮把簡報釋出,我想我的英文應該蠻差的,歡迎盡量指正,然後我會盡量改(泣)

Slide: PDF
Handout: PDF


這一次一樣,XeLaTeX code不釋出啦,要的人可以私底下來信。

---
就說了不要獻醜了(拖走~)

星期六, 4月 04, 2009

返家

今天搭乘火車站著返家,明天要掃墓,是一個不很愉快的搭車經驗,人擠的跟沙丁魚罐頭沒什麼兩樣XD 也看盡了人生百態。


---
還是不要廢話好了XD

星期四, 4月 02, 2009

試試

最近剛好在寫 A* Algorithm , vim 有把純文字轉成 html (:TOhtml)的功能,來試試

 1 Add START to OPEN list
2 while OPEN not empty
3 get node n from OPEN that has the lowest f(n)
4 if n is GOAL then return path
5 move n to CLOSED
6 for each n’ = CanMove(n , direction)
7 g(n’) = g(n) + cost(n,n’)
8 calculate f(n’)=g(n’)+h(n’)
9 if n’ in OPEN list and new n’ is not better , continue
10 if n’ in CLOSED list and new n’ is not better , continue
11 remove any n’ from OPEN and CLOSED
12 add n as n’s parent
13 add n’ to OPEN ….. coming up in OPEN
14 end for
15 end while
16 if we get here , then there is No Solution

雖然轉出來的code很醜,如果效果不錯,以後就會用它了... 畢竟我不會寫CSS XD


---
寫完再好好解釋這個 Algorithm :)

星期一, 3月 30, 2009

不順

這,雖然我也是很不順,不過我倒是不以為忤 XD 因為不順,所以我們要吃壽喜燒吃到飽(大誤) XD

最近自己身邊的朋友或多或少遭遇到不順,原因也不盡相同,但是我的方法一向只有多陪陪(所以這或許是我常要吃飯的原因(大誤)),不過我得說,不管是怎麼樣的人,都有不一樣,且自己認為很嚴重的煩惱,我自己沒有煩惱的原因是,都習慣了,哈哈。或許更大的原因是,我很習慣挫敗,因為我的人生很少成功過(誤) XD 可能我自己身處的位置,我看的到,身為一個教授的煩惱,身為一個學生的難為,身為一個情侶的不適,身為一個... 太多了,但是不論無何

我們一定要相信自己,一定會雨過天青,用笑容迎接溫暖的陽光

但是我是雨男,所以可能雨過天青的時候,還有一邊太陽一邊下雨...Orz 不知道有多少,我對於我的生活感到無助時,都是有一堆朋友幫助著我,所以我也會這樣子幫助回去,重點是

不要忘記自己的初衷

我想這就夠了。


---
至於為什麼我是雨男,就別問了 XD

星期六, 3月 28, 2009

損壞

發生的事太多了,我還是用這個標題好了...

MacBook 變壓器 和 Logitech MX1000 相繼損壞,前者在保固期內,不然是2900(沙鍋貴的變壓器啊...Orz),至少要等五個工作天以上...我現在是借 efang 以前的電腦灌 ubuntu 打的,最近學校網路又不穩,我沒有 MacBook 就像武功全廢一樣,但是我下禮拜還要講簡報給學弟妹聽,還有作業要交啊 XD

MX1000 也是死狀其慘,有一天就給你宣告不治,送修說,這個出廠超過三年,不保了喔,但是我只買了兩年多啊啊啊啊(但是我沒有發票...Orz) ,只好再買一隻新的滑鼠了,目前是買了 MX1100 其實我還蠻想知道它是五年保還是三年保,有人知道要怎麼查嗎XD
其他小壞掉的東西就不勝枚舉了...Orz


---
不過最近書倒是看的不少,很開心 :)

星期二, 3月 24, 2009

How to set background image in LaTeX

如何在 LaTeX 中設定一份文件的背景圖片? 如果是Word的話,我在以前的 blog 有提過如何解決。如果是 LaTeX 呢?
答案是,wallpaper package,其實還蠻簡單的,估計寫這個package的人蠻有prefix的概念XD。
首先,把這個package包進來\usepackage{wallpaper}其實我們只有兩種指令,一種是
\CenterWallPaper
\TileWallPaper % 背景看不到邊喔 XD
\TileSquareWallPaper
\ULCornerWallPaper % upper left
\LLCornerWallPaper % lower left
\URCornerWallPaper
\LRCornerWallPaper
\ClearWallPaper
另外一種,就是上述全部在前面加上This,代表只對目前這一頁有效XD


舉個例子來說好了,如果我們寫\CenterWallPaper{0.25}{background} % 背景圖放在正中間,圖的size 為原圖的 0.25其他的用法,可以參考原廠文件


---
原本以為很難,看來是我錯了XD

星期一, 3月 23, 2009

「淺談排版系統 Typesetting System」簡報釋出

廢話不多說,連結在此
簡報 (pdf)
Handout (pdf)
若有問題,歡迎指教指正,至於.tex 的 source code 暫不釋出(因為寫的很難看XD),如果有需要可私下來信索取XD 希望能對排版有基本的認識。


---
禮拜三要講第一次,不知道會怎麼樣XD

星期四, 3月 19, 2009

紀念


第一次用 Synopsys Design Version + UMC 90nm Library 合出電路圖,紀念一下。
現在可以理解ycma說的 "layout 才需要大螢幕啊。" 我在筆電上使用就頗痛苦的XD


---
不過看到這樣子的圖產生還是很爽 XD

星期二, 3月 17, 2009

Sara Bareilles - Love Song


最近蠻喜歡聽的一首歌


Head under water
And they tell me to breathe easy for a while
The breathing gets harder, even I know that

You made room for me, but it's too soon to see
If I'm happy in your hands
I'm unusually hard to hold on to

Blank stares at blank pages
No easy way to say this
You mean well, but you make this hard on me

I'm not gonna write you a love song
'Cause you asked for it
'Cause you need one, you see
I'm not gonna write you a love song
'Cause you tell me it's make or breaking this
If you're on your way
I'm not gonna write you to stay
If all you have is leaving
I'mma need a better reason to write you a love song today
Today

I learned the hard way
That they all say things you want to hear
My heavy heart sinks deep down under you
And your twisted words, your help just hurts
You are not what I thought you were
Hello to high and dry

Convinced me to please you
Made me think that I need this too
I'm trying to let you hear me as I am

I'm not gonna write you a love song
'Cause you asked for it
'Cause you need one, you see
I'm not gonna write you a love song
'Cause you tell me it's make or breaking this
If you're on your way,
I'm not gonna write you to stay
If all you have is leaving
I'mma need a better reason to write you a love song today

Promise me you'll leave the light on
To help me see with daylight, my guide, gone
'Cause I believe there's a way you can love me because I say

I won't write you a love song
'Cause you asked for it
'Cause you need one, you see
I'm not gonna write you a love song
'Cause you tell me it's make or breaking this
Is that why you wanted a love song
'Cause you asked for it?
'Cause you need one, you see
I'm not gonna write you a love song
'Cause you tell me it's make or breaking this
If you're on your way
I'm not gonna write you to stay
If your heart is nowhere in it
I don't want it for a minute
Babe, I'll walk the seven seas when I believe that there's a reason to
Write you a love song today
Today


---
不過現場的聲音比較沙啞 XD

星期一, 3月 16, 2009

Rebegin

希望一切能夠重新開始,這學期的目標只是想好好當一個學生。


---
希望能達成

星期三, 3月 11, 2009

2008 Turing Award

今年 Turing Award 發佈之後,ycma 特別來信告知,因為他知道我對 programming language 特別有興趣。今年繼2006年 Frances E. Allen 以第一位女性得到 Turing Award 之後,

2008 的 Turing Award 得主為 Barbara Liskov !!

特將 ycma 轉寄的信節錄於下

ACM has named Barbara Liskov the recipient of the 2008 ACM A.M. Turing Award for her contributions to practical and theoretical foundations of programming language and system design, especially related to data abstraction, fault tolerance, and distributed computing. (yen3 註: 以查 wiki 得到的資料,這邊的特別指定的領域,幾乎都是首先開創。)

Liskov revolutionized the programming field with groundbreaking research that underpins virtually every modern computer application for both consumers and businesses. Her achievements in programming language design have made software more reliable and easier to maintain. They are now the basis of every important programming language since 1975, including Ada, C++, Java, and C#. (yen3 註: 這邊提到的語言我只有 Ada 不會耶,不過這不重要啦 XD)

Liskov heads the Programming Methodology Group in the Computer Science and Artificial Intelligence Laboratory at MIT, where she has conducted research and has been a professor since 1972. (yen3 註: 讀到這邊抽了一口涼氣,讓我想到現在中研院院士,領導自由軟體鑄造場,但是我忘了名字了...Orz)


那麼我又節錄一下,Liskov 女士在 wiki 上的資料

Liskov has led many significant projects, including the design and implementation of CLU, the first programming language to support data abstraction; Argus, the first high-level language to support implementation of distributed programs; and Thor, an object-oriented database system. With Jeannette Wing, she developed a particular definition of subtyping, commonly known as the Liskov substitution principle. She leads the Programming Methodology Group at MIT, with a current research focus in Byzantine Fault Tolerance and distributed computing. (yen3 註: 真的只能對 Liskov 女士以 pioneer 來形容,到現在仍持續研究,真的很很讓人佩服。)


---
感謝老師提供此訊息,不然我可能還不知道 XD


Josh Ko 對我說 Liskov 女士著名的 Liskov Substitution Principle: 這邊有簡介

星期一, 3月 09, 2009

Intstall git plug-in in Eclipse


其實我也不會,參考自這篇文章才會的 "Chris Cruft: Eclipse Git plugin installation",詳細說明安裝方法,Eclipse git plug-in 在Linux, Mac OSX底下問題不大,如果是Windows的話就要裝Cygwin,我是在Mac OS下試的,在 Eclipse 3.4.2 下測試,以下是不像翻譯的翻譯 XD


  1. 從網站中抓回檔案,在command line 底下輸入git clone git://repo.or.cz/egit.git

  2. 會抓完一個資料夾,在 Eclipse 中,把這個資料夾裡的專案匯入,方法為File >> Import >> General >> Existing Projects into Workspace >> 選擇該資料夾 >> 確定全部都的project都有被選取到即可下一步(原文寫八個,其實更多)

  3. 把匯入的專案全部build一次Project >> Build All

  4. 再把compile好的專案匯出,於是選取這些匯入的專案然後File >> Export >> Plug-in Development >> Deployable plug-ins and fragments目的資料夾選取你的Eclipse 安裝資料夾,匯出後重新開啟 Eclipse

  5. 重新開啟後對某個專案按右鍵 >> Team >> Share Project 應該就可以看到git的相關東西了,之後的設定也是從這個地方(藏的好隱密啊...Orz),或者是從File >> Import >> Git >> Git Repository直接使用現成的git repository也是一個不錯的方法

---
have fun!

星期六, 3月 07, 2009

我與 JK flip-flop 的愛恨情仇

在我大二上的時候,我曾經修過一門課為「數位電路」,用的課本是 Digitial Design by M. Morris Mano。看過這本的人都知道,這本對於JK flip-flop做了非常多的描述與應用,然而這也是我苦難的開始。

因為我完全不懂 JK flip-flop 怎麼用...Orz

老師上課講的我也聽不懂,可見應該是我上課不認真,後來我自己一個人盯著這本課本看,我終於懂了 digital design 這本書想要傳答什麼,其實還蠻簡單的

得知題目的input, output, state, next state(這邊可能會有兩個步驟) -> 寫成 truth table -> 使用 k-map 化簡 -> 寫出每一個 output signal& next state signal 的 boolean algebra -> 畫電路 -> 故事結束

那跟 JK flip-flop 有什麼關係? 因為課本很多都是用它當例子,要懂的話就大概得懂 JK flip-flop,這對當初沒什麼概念的我而言真的蠻痛苦,不過硬是幹到會,之後我就拋棄了 JK flip-flop了,設計上一律使用 D flip-flop (為什麼,看看兩者的功能就知道了XD)。沒有它我可能學不會數位電路,但是有了它,我學數位電路好痛苦...Orz。

在禮拜五的時候,ycma 在上 Computer Arthmetic 幫我們複習基本的 IC Design 時,說了

不要使用 JK flip-flop,晶圓廠也只提供 D flip-flop 的 library 讓你使用,它只是功能看起來比較炫,其實並不好最佳化

我聽到,想到了我以前有點痛苦的往事XD,於是我就問啦,那麼為什麼會有 JK flip-flop,ycma 又說話了 XD

因為這本書是在四十年前寫的,IC Design 尚未自動化,如果插麵包版的話,JK flip-flop 能省下比較多的電路,但是在這個年代,自動化電路設計時,我們會希望元件越簡單越好,因為越簡單越容易最佳化。

其實話說到這邊,已經讓我了解非常多的事了,也果真是隔行如隔山...

這個學期幫忙老師在灌EDA Tool準備上課使用時,使用的是「國家晶片設計中心」所提供的軟體(聽說每個都很貴...), ycma 更是打趣的說,在台灣學硬體的人比較沒空寫 blog XD,呃,我之前是很少找到硬體的blog是沒錯,不過這大概也跟我只下軟體開發的關鍵字有關係,我想有空,我會寫一寫在這個學期的學習經驗

---
其實也沒什麼愛恨情仇的 XD

星期四, 3月 05, 2009

一般人怎麼帶著筆電趴趴走 XD?

一般狀況下,我會很粗略的把帶筆電分成幾種。

專業筆電背包,我知道有這種人,但是我只在Mobile01上看到過 XD。

塞到一般背包裡,這就是我目前的現況,塞到背包之前,我有買一個筆電保護套,塞到背包裡,兩隻手空空,還算蠻方便,不過efang一直嫌我的背包太醜 XD。

用手拿筆電包,這比較常見於中距離移動。

用手拿原廠送的筆電袋,這常見於女生,常會看到女生拿的大包小包,男生也不少,原廠筆電袋好是好,只是大了些。

通常會塞到背包裡的大部分都是男生,因為現在時下的女生大部分都是用側背袋(我不知道那怎麼稱呼),在yahoo拍賣很常見,通常,載重能力也不高(就算高也要考慮到人的單肩負載能力 XD),所以女生通常會考慮後面幾種,男生也會拿筆電袋,因為現在時下的流行也是側背一個袋子,如果要背筆電,其實會較不方便些。但是男生比較耐操,所以問題不大 XD?

所以資訊的發達 + 時下流行 => 女生拿著大包小包

大部分的狀況下,買筆電就是考慮攜帶性,但是再考慮自己攜帶的方法,帶著筆電趴趴走其實是一個很有趣的問題 XD,就算是買eeePC,側背也是很重的。

而且帶筆電要考慮整體的攜帶性方案的話,通常就不得不考慮 "看,這龐大的變壓器",所以MacBook的變壓器我就很喜歡,相較於其他牌的變壓器,算小又好帶(不過很貴...Orz),還有攜帶性滑鼠之類的。當然,另外一種解決方案是,買高級一點的手機,但是這就要看買筆電是為了什麼。如果買小筆電的功能和高級手機功能重覆時,高級手機或許也是一個不錯的方案 XD?

買筆電手機和買電視不同的地方在於,電視買完插上去就能看了,但是買筆電手機,可能還要買一堆有的沒有的,買東西的時候,也要把這些隱形成本算進去,不算倒也不會有損失,只是可能會不方便些 ?

順帶一提,我不喜歡包膜,也不太喜歡保護貼,這會影響我用東西的手感,反正我買了,我就沒有要再賣出去的打算,我會和我的傢伙產生革命情感,所以就我而言,我可以忍耐有點歲月的痕跡,東西,用的爽就好 XD。

---
通篇來說,都是廢話XD

改變

這個世界,正以超乎我想像的速度在改變,而我正在努力的越活越回去,因為,我要完成想要完成的事。

到底,我對於這個社會價值還剩下什麼呢,或許一點也無吧(笑)。

---
雜感。

星期一, 3月 02, 2009

Music Top 30 - frequency


第一名是「First Love - 宇多田光」,這不是我聽的,這是efang用我ipod聽了一個學期的成果,還遠遠的超過第二名XDXD。

第二名是「Announcement Service Public - Linkin Park」,是因為這首歌本來就很短,所以可以在短時內聽許多次,而這個排行榜中,前30名,Linkin Park佔了最多席次,原因也蠻簡單的,剛拿到MacBook的那段時間,我幾乎都在聽Linkin Park,後來聽其他的歌比較多,所以在15~30的時候,呈現多樣化。

如果不是有First Love這首歌,我還真的不知道原來ipod連播放次數都會同步。

---
最大贏家: efang

星期六, 2月 28, 2009

考試

昨天托Josh Ko的福,在他房間睡了一晚,睡的甚好,免於隔天早上要很痛苦的爬起來XD,他也帶了我吃了四餐,非常感謝他,欠了好大一個人情啊...Orz 雖然我還是沒有考好,雖然出的題目是略簡單,不過沒有念我相信也不會改變太多事,寫這篇只是為了提醒自己不要忘記感謝人而己,哈哈。


Josh 以後請你吃好吃的啊XD


---
非常單純的記錄

星期三, 2月 25, 2009

最近

快要考試了,不過我大概也沒救了,就多多少少念一點嘍。開學三天了,看見了很多以前看不見的事,面對許許多的事,不否認壓力很大,但是相對而言話也會很少。靜靜的,什麼都沒有改變。

efang在這幾天的陪伴下辛苦她了,也得容忍我的任性及壞脾氣。

學習,有時候真的應該單純一點,其實我還蠻想寫 「LaTeX 的中文方案討論: cwTeX, XeLaTeX, XeLaTeX + xCJK, XeLaTeX + fontwarp」 這標題的文章,或許等心情好再來寫,或許也不會有人想看 XD?

最近想到一個很好玩的事,以前啊,不會用linux的時候,總覺得那些把command line用的很神,隨便打一打都會有東西出來,是一件很酷的事(efang也這樣子覺得),現在會了,並不覺得神奇,進化到,如果有任何錯誤,知道怎麼解決就很厲害了。但是也不是每件事都會這樣子覺得,我還是覺得會寫C/ C++,會用LaTeX 編排文件是一件很酷的事,雖然我自己只能說知道基礎,但是對於會用這種複雜又美麗的東西,我還是深深感覺到很有趣,這大概只有情感根據而沒有理論根據XD。

跟Josh Ko聊天聊了很多很有趣的事,不過我想跟他一樣,留到大學總回顧再來提,我的人生跟他是截然不同的路,但是都很有趣,哈哈哈。

---
keep going

星期一, 2月 23, 2009

新學期

不知道會迎接怎麼樣的變化,這是我最需要沉潛的一年。

或許可以好好念書研究的一個學期可以在這個學期實現,課表暫時不確定,雖然跟ycma說好要接unix programming 的助教,但是不知道要拿什麼課來補剩下的三學分XD。

一切,才正要開始

---
平靜


2009/02/25
因為課程相衝的關係,應該不會當助教了,但是還是協助架設主機,但由於EDA tool的關係,我可能得灌Fedora,而不是我比較熟悉的Ubuntu,其實最想灌FreeBSD XD。

星期四, 2月 12, 2009

亂入的藝術

首先,我要感謝蔡學墉先生的熱情回信,對於一個平凡學生是受到了莫大鼓舞,我會試著去做的。

在我大學以前認識人我很喜歡裝熟,pigtail和Josh Ko就是這樣子認識的,其實很多人都是這樣子的認識的,是好事嗎? 見仁見智。

在上大學之後,我變的比較沒有這麼主動去認識人(但是還是很主動XDXD),到大二之後,由於自己長期寫blog,所以認識網路上的人,我自認為我還是蠻主動的。在網路上的blogger大部分都還蠻善良且好客,我不是什麼知名blogger,有人留言時,我會很開心(指正也會,只要不是亂罵一通),所以對我而言。

去別人的blog留言給予打氣或問問題變成要相當小心,不然其實跟亂入沒什麼兩樣。

大概是因為這樣子認識日落的,他也是一很好的人,他也常來這邊留言,很感謝他嘍。當然,也不是每次都會有人理我的,我可以理解心情。在很久以前,我曾經寄信給某x大教授詢問一些問題,結果就石沉大海了XD 其實這對我而言反而比較正常,因為如果很忙,誰會理我啊XDXD。

不過其實,在網路上認識一些很厲害的人也是一件很開心的事,jserv, walkingice, c9s,僅止止是認識,其實不知道熟不熟耶,但是很開心,有很多很有趣的事可以學習。

---
亂入XD

星期二, 2月 10, 2009

小常識

最近亂想的時候,發現自己以前寫的程式碼不夠好。
如果我想寫入binary file,可能會這樣子寫

boost::array<unsigned int, 512> data;
std::ofstream outfile(filename.c_str(), std::ofstream::out | std::ofstream::binary);
outfile.write(static_cast<char*>(static_cast<void*>(data.c_array())), sizeof(unsigned int)*data.size());
其實寫入的那行,寫成
outfile.write(reinterpret_cast<char*>(data.c_array()), sizeof(unsigned int)*data.size());
至於為什麼,我不想多講,我只是想證明我沒看書而己...Orz

---
看了也要記得啊...Orz

星期五, 2月 06, 2009

最近

想了很久,還是不知道自己要寫什麼(笑)

考試近了,自己很混其實自己很清楚,上學期又沒有做到什麼事,有一種重新把整個人解構的感覺。總而言之,現在總算是平靜下來了,對於接下來的事,平常心吧。只是還是會手很癢想寫程式,現在應該積極的列清單,等考完試之後,把想寫的程式寫一寫,哈哈哈。

其實很感謝爸媽對我的容忍,一般的小孩如果跟我一樣混,可能早就被打死了XD 其實,不管如何,只想做最好的自己,因為我就是一個很普通的yen3(到底父母知不知道我的blog呢XD?)。

這一陣子台灣的經濟壞到連我都有感覺(我不是一個有什麼感覺的人),或許,真的應該重新評估我未來的方向了,我不是什麼專業人士,我只是一個想要好好學習做研究寫寫程式的人。

想一想,自己都大四了,還是什麼都不會,甚感汗顏,還是一次只能專心做一件事,這或許就是我的致命傷吧,如果我可以一次專心做兩件事就好,不過現在的我仍然是做不到的。可見我還是不會分配時間。

這篇非常沒有架構XD 就隨性寫寫吧XD

---
還真是XD

星期三, 1月 21, 2009

有關File I/O的兩三事(3) - XML

拖了好久了,是該做一個尾聲啦XD

XML(wiki),這個我從大一就知道但是從來都不知道在幹麻的東西XD(要說也蠻簡單的,就是一堆tag和value所組成的XD),後來寫程式的時候陸續遇到,才發現了很多很重要的東西。XML本身並不難,規範也很清楚,那麼最有趣的問題。

有趣問題: XML到底能夠拿來幹麻 XD?

如果能夠搞清楚拿來幹麻,我想XML才會表現出其重要的意義,XML的目的只有一個,傳遞資訊,也就是說,A告訴B一些訊息,重點是,A要用怎麼樣的方法? 今天人類在溝通的時候,用語言傳遞訊息真的是一件很神妙的事,但是相對而言,電腦並沒有這麼聰明。

那麼XML怎麼傳遞,大部分的比較後期的高階程式語言都具備有XML Parser(C++ Standard沒有...Orz),parser出來有什麼tag name對應什麼tag value,是一件非常快速的事,那麼跟binary file差在那裡? XML非常的彈性,基本上對方只要知道你的tag就可以抓出值了,不用去記得你所傳遞的message format為何(普天同慶,你可以不用算第幾個bytes了XD),如果你在對方的要求之外又多寫了好幾個tag,他parser到略過即可,其實也不用太管你XD。說穿了XML還是需要file format(要知道的話,可以看看DTD),只是這個format比較彈性。

回到binary tree的例子,如果照著(2)的話,我們可能會寫出這樣子的XML

<nodelist>
<node number="1">
<value>1</value>
<left number="2" />
<right number="3" />
</node>
<!-- a lot of nodes -->
</nodelist>

可是在XML上,我們的binary tree可能會有更彈性的寫法,例如說

<rootnode>
<value>1</value>
<left>
<value>2</value>
<left> ...</left>
<right> ...</right>
</left>
<right>
<value>3</value>
<left> ... </left>
<right> ... </right>
</right>
</rootnode>

在這樣子的XML中,寫出相對應的程式,可以邊parser邊建樹,也不限定是binary tree,只要是tree就行了XD 如果在第二個例子中,可能沒有搞好,我們就得重來了,但是在這邊,從binary tree變成B tree似乎較為容易

但是XML不是沒有缺點,雖然彈性,但是有兩個主要的缺點

  • 檔案肥大
    算算剛剛的tree佔了幾個byte就知道了XD 有一好沒兩好,這是躲不掉的
  • 需要parser
    parser不是壞事,重點是如果想要在XML中找到一筆資料,你大概就知道問題在那裡了XD,還有,parser大量資料時,電腦並不如你所想像來的快XD,真的嗎,來試試這個3+2郵遞區號 XMLXD。

File I/O並不如所想像中來的難,但是要搞到好,及搞到快,並不是這麼容易,binary file具有快速及省空間的優點,但是XML在擴充上的驚人彈性抑是一個不錯選擇,但是這兩種方法都端看你怎麼設計format,這才是困難之處,給你再好的工具,用了過差的設計方法,還是有可能讓程式若入一個讓人驚訝的神奇事件中XD。

順帶一提,何謂直接寫,如果今天我要寫入一串數字,我就在檔案中寫了這種神妙方法

1 2 3 4 5 6 7

這種方法大概在一般的資訊系大一學生看見,如果要寫成績處理系統可能會更常見XD 所謂的方法沒有絕對的好壞,自己試一試就知道了XD

---
唬爛結束XD

星期五, 1月 16, 2009

有關File I/O的兩三事(2) - Binary FIle

有趣問題: 電腦的資訊是由0和1組成,當塞了一堆0和1時,電腦如何得知要執行什麼動作?

這個問題從我學電腦的第一年到現在為止都是一個很有趣的問題XD 我在大學才給了一個自己比較滿意的解答,我所認為的答案是,Instruction Set Architecture(ISA) 會解釋比較基本的答案,也就是說,只要塞入一道道的instructions,電腦就會依序執行,當然,這中間還有很多事要做,我們就暫時略過。

有趣問題: 電腦如何判斷且讀取一個檔案?

這個問題其實更有趣,最常見的方法是,判斷副檔名。當然,如果自己把副檔名改掉,而電腦就會用另外一個程式來開啟時,當然我們不確保能打的開XD 那麼怎麼讀取? 通常每個File都會有一個header,而每個header有其固定的format,例如說我這學期處理過的wav file,讀取了前面這麼多bytes之後,我們才能判斷如何讀取接下來的資料(於是就有許許多多的file format document需要閱讀XD)。

那麼我們回到(1)的有趣問題,我們要怎麼寫入一個binary tree? 假設我們把每個node data structure如下(以下以C++為例)。

typedef struct _node{
unsigned int node_number;
unsigned int data;
unsigned int left_number, right_number;
struct _node* left; /* 理論上不用寫入檔案XD */
struct _node* right; /* 理論上不用寫入檔案XD */
}Node;

那麼當我們在C++中寫入Node array時,可能是這樣子寫的

    std::size_t list_size = 20;
Node* list = new Node[list_size];
/* ... */

std::ofstream outfile;
outfile.open("test.out", std::ofstream::out | std::ofstream::binary);
outfile.write(static_cast<char*>(static_cast<void*>(list)), sizeof(Node)*list_size);
當然,寫進去的檔案在linux下嘗試用more觀看時,應該會看到一堆亂碼XD

可是這樣子寫入我們會有一個問題,root node number為何,而總共又有幾個node,方法也很簡單,我們也一併寫入file,於是我們現在的File Format就變成

0~34~7...
total node sizeroot node numbernode data

所以我們的寫入檔案的方法就變成...

    unsigned int root_number;
std::size_t node_size;
std::size_t list_size = 20;
Node* list = new Node[list_size];

std::ofstream outfile;
outfile.open("test.out", std::ofstream::out | std::ofstream::binary);
outfile.write(static_cast<char*>(static_cast<void*>(&root_number)), sizeof(unsigned int));
outfile.write(static_cast<char*>(static_cast<void*>(&node_size)), sizeof(std::size_t));
outfile.write(static_cast<char*>(static_cast<void*>(list)), sizeof(Node)*list_size);
於是我們就把檔案寫完啦,那麼讀檔的時候,我就不另外寫啦(用std::ifstream XD)。


那麼這樣子的設計缺失在那? 第一個是,我們一定要寫入root node number嗎? 其實可以不用,如果在設計list時,我們強制把list[0]設為root,我們就不用另外寫入檔案(因此省了4 byte),第二個是,total nodes的數目只能是2^32-1個,其實非常大,足以應付一般日常生活所需,但在數學模型上,還是不能支援無限多個是有點可惜的事。

那麼這樣子寫入檔案有什麼好處? 答案是,非常的快以及容易撰寫(不論是讀取或寫入),而且,其實每個node size是固定的(24 bytes),也就是說,可以配合seekp, seekg任意跳及讀取,大部分的狀況,如果資料不夠大會一次讀進來,如果資料很大的時候,我們會利用buffered I/O來讀取,或者是跳到檔案某處只讀取我們所需要的資料(有時候,你只會需要檔案的某個部分。),至於讀進來之後要做什麼事,這就不是我要關心的了XD。

---
下回繼續分解XD

星期四, 1月 15, 2009

有關File I/O的兩三事(1) - 不算開始的開始

這篇是技術文,不想看的可以跳了XD 這篇是寫給初學者看的,也是我這幾天寫程式的心得,所以高手可以改錯XD。會想寫這樣子的文字是從SmallPig及cllee老師中所提及的File I/O方式,做一個論述。

大部分的書本都會提及如何在記憶體中操作程式,但是對於File I/O僅提及如何讀取,寫入,其實也相當正常,因為換作是我來寫,我也不知道要寫什麼額外的,然而在實作呢?

重要問題: 為什麼File I/O如此重要?
有趣的問題: 如何把binary tree寫入檔案,又從檔案中讀取建立binary tree呢?

先回答重要問題,回到基本計算機概論本身,常識會告訴你,記憶體中的資料只要一斷電就消失,而硬碟不會(但是硬碟容易壞XD),如果你要保留你的程式某些資訊,勢必是要寫入檔案中的,在有趣的問題中,binary tree小的話,每次重算倒也沒有什麼,但是如果是相當大量的資料呢,不寫入是不行的,而我想把有趣的問題拖到晚一點再回答。

那麼一般狀況下怎麼寫檔案?

  • 直接寫
    號稱人類最直覺的做法XD,想寫什麼就寫什麼,通常人看的懂,電腦很難看懂XD

  • binary file
    其實我也不知道怎麼稱呼XD,將C/C++中的struct直接以binary的方法寫入檔案(人看不懂,電腦很容易看懂XD),在一般狀況下稱為fixed file format,一般常見的檔案格式都是採用此方法,會有一個header在檔案的一開始,做為檔案的描述。

  • XML
    用一堆tag組成的檔案(人看的懂,電腦也看的懂,可是...XD),只要程式中具有XML parser,就可以慢慢的得到檔案想要傳遞的訊息,其實XML最常用的是在於網路中的訊息交換,在近期的檔案格式也相當常見。

先來慢慢討論第二項吧,這邊以C語言為範例(yen3 <- 不擅長C),假設今天struct如下。

typedef struct _Node{
int n;
char s;
} Node;
如果我們寫了這樣子的程式碼
    print("%d", sizeof(Node));  //output: 8
從這邊得到一個非常有趣的結果,結果是8 bytes而不是5 bytes,原因很簡單,因為要align memory,一個word是4 bytes,如果只有char時無妨,還是只有1 bytes,但是如果加入int時,那麼就要變成2個words為8 bytes,所以其實這個struct寫成
typedef struct _Node{
int n;
char s;
char unused[3];
} Node;

效果是一模一樣的。


利用這個例子,我想說明的是,如果要寫binary file,就要對每個byte斤斤計較放在檔案的那個位置,倒也不是為了節省記憶體(雖然某部分原因也是),而是為了支援File Random Access,Binary FIle的最大好處是,由於format固定,相當容易做到random access(在C中使用lseek(不過這是Unix System Call),在C++中使用std::ifstream::tellg(), std::ofstream::tellp()),只要每筆資料size固定,只要算出檔案相對的byte即可存取,相當方便。

那binary file壞處為何? 如果當初設計的File format不足以支援現有需求時,該如何因應? 有些File format會設計一些保留bytes,或者是延伸檔案格式,總而言之,如果要擴充時還蠻不方便的。


---
下回分解XD