星期二, 4月 21, 2009

簡單的 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

星期二, 1月 13, 2009

Mac OSX 上的 vim 安裝 taglist


今天心血來潮想要在vim上裝一個taglist,發現一直裝失敗,後來才成功了XD

方法如下


  1. 下載taglist,之後把相關檔案對應複製到/usr/share/vim/vim72/ 下,兩個檔案複製到各別的資料夾

  2. 安裝最新的ctags直接安裝即可

  3. sudo rm /usr/bin/ctags (移掉,這是舊版,新版裝在/usr/local/bin 下)
    sudo ln -s /usr/local/bin/ctags /usr/bin/ctags (然後重新連結到新版去)

  4. 在vim中開原始檔試著打:TlistToggle 理論上可以用了XD


---
一波三折XD

星期三, 1月 07, 2009

It all starts here.



其實每次看到這句總是百感交集。因為這是cllee在比賽一開始跟我們說的一句話。

今天是系上專題展,其實心情一直不好,總是會想到"穿著西裝的猴子"之類的寓言XD。但是看到很多老師心情會很開心,因為我很確定,我盡了力在關心我所要做好的事。

很幸運的,得到系上專題展第一名及最佳人氣獎。

其他組其實做的很不錯(這句話倒不是空談),3D視覺模擬的這個主題,我不覺得我能做的好,跌倒偵測這個主題,一路看過來,decay和mandy真的花了非常多心思,我非常佩服。

當今天有學弟對我們的專題展發出讚嘆時,我只跟他們說,現在做不出來沒關係,要有以後能做出來的豪氣。但更慚愧的是,應該要做出更好的東西。

要相信自己並不差,對自己充滿自信並努力前進,方能開始。不要忘了在這時的記憶。

It all starts here.

相簿

---
大家辛苦了 , 小祥生日快樂~哈哈哈

星期日, 1月 04, 2009

高微

高等微積分XD

yen3: 要把數學學好要學什麼比較好呢?
ycma: 修高微

yen3: 要把數學學好要學什麼比較好呢?
Josh Ko: 學高微 XD

yen3: 你和ycma講的話都一樣耶
Josh Ko: 對數學有認知都會這樣子說 XD

---
XD 最近閒聊文每篇都有人回耶,直到現在才發現XD

星期五, 1月 02, 2009

日期


在這場考試中,最複雜的是...報名。

---
有沒有專人可以代理報名事務XD

星期四, 1月 01, 2009

新年

今年的跨年待在學校,並沒有像前兩年一樣,去了淡水和台北:) 平靜是一種幸福。

縱觀全年,這是我推掉最多事,也是我遇到最多事的一年,而今年仍然一事無成,哈哈,我的大學生活,參加了兩個比賽,沒有得獎,研究所考試,也即將炸掉,但不後悔,因為這是我要的生活。

當我聽到某位老師念博士時,前四年一篇論文都沒有產出,到了第五年一口氣生了四篇的時候,說真的,我很難想像這四年累積下來的壓力。想到及此,顯然我不夠會忍耐,因為我知道我自己還不夠好。我很希望,在考試結束之後,繼續自己想要做的事,用自己的熱情完成想要做的事。

其實一直希望自己對某個領域做出貢獻,但是顯然現在還不是時候。是該重新開始,放低身段,累積並前進。

撐到最後一刻,完成這個該死的研究所考試。
走向Compuer Architecture這條路,由硬到軟去證明Programming Language。
參加FLOLAC '09,以學員的身份參加,哈哈哈,應該會被當掉XDXD,所以希望不要被當掉XDXD。
寫出真正能夠幫助人的程式

---
明年此時就知道我完成多少事了XD

星期六, 12月 27, 2008

最近

好久沒有寫blog了。可能自己懶性使然吧XDXD

研究所考試越來越近了,但是我依舊沒有進入狀況,總是想著要把學校作業做好,有一種兩頭燒的感覺。在宿舍始終睡不好,半夜室友才會開門回來,我總是最早躺在床上,而最晚入眠。

最近想外宿,如果在林口長庚醫院附近有好房子可以通知我嗎,謝謝XD

或許,這一切的事該結束了,我會繼續念書念下去,但是用我的方法,因為我屬於我自己,不屬於任何事。

若要我說大學最重要的事是什麼,在大三之前我會說,態度正確及學習如何學習,但是更值得花整個大學時間去探究的是,找到自己想做的事,啟發自己的熱情,如果沒有找到,常常會努力一下子就懶病發作了,這就不好玩了。

我還沒調整至最佳狀態,但是會盡一切努力的。

---
似乎很多事。

星期六, 12月 13, 2008

這個領域很缺人

本來想寫成嚴肅文,我們來寫搞笑文好了XD

系上某位老師: 資工不要做硬體了啦,做硬體是做的贏電機系喔。
yen3: 嗯...

系上某位老師: 資工寫軟體沒有用,外面都嘛是搞硬體。
yen3: 嗯...



這一陣子,我對於我的研究領域為何很不清楚,於是跟了蠻多老師聊天。

gwchen: 來做生物資訊吧,這個領域很缺人。
yen3: XD

ycma: 來做IC Design吧,這個領域很缺人。
yen3: XD

jdwei: 來做多媒體資訊領域,這個領域很有趣。
yen3: XD

Josh Ko: 來做Programming Language吧,這個目前也只有sinica iis在做而己,這個領域很缺人。
yen3: XD

結論: XD

---
完全不知道XD

星期二, 12月 02, 2008

基礎

我所認知的一個programmer要能夠達成三件事: 用數學做深度思考、用英文描述的四平八穩、用程式語言寫的高度藝術。

我很喜歡數學、英文及編程,很不幸的,我喜歡的事我都做的不甚好,會持續努力嘍,在這三個目標還沒有達成一定水平之前,我都會認為我還在打基礎。

有感

---
lay out lay 到死 XD

星期日, 11月 30, 2008

Time Complexity

這個問題非常的簡單,不過最近在對這個做練習,我做個簡單的筆記好了。

Algorithm所提的Complexity分為Space Compleity和Time Complexity

先談談Space Complexity,我覺得爭議還蠻大的,以fundamental of data structure in C/C++裡面所提及的計算,皆以programming language所佔用的記憶體做為計算,這對於新一代的程式語言,並不是具有良好定義,所以我想就此略過。

而Time Complexity的計算方法,可參考OOPS: Introduction to Algorithm 2005 Spring, Asymptotic Notation (這一堂課到2008都有,老師都同一個,可以看 這裡)。

而對於Recurrences Time Complexity的方法有如下幾種

  • Substitution method: 代入然後猜測最後的結果
  • Recursion tree: 把整個Recursive的狀況畫出來,依序得到一個結果。
  • Mater Method: 當T(n) 符合某個型式時即可使用。


最有趣的是Master Method,定義如下。

簡而言之,就是要比較n^{log_b^a}和f(n)的大小,那個函數的成長速度較快,就取用那一個,當然,這只是一個大概的描述,因為當兩者成長速率相似時(Case 2,允許差一個log^k_n),蠻常聽到有人叫他"老大定理",其實我比較喜歡Master翻譯成"主要",似乎會更為貼切。



至於其於兩個方法,Recursion Tree本身最主要的重點為,這顆tree不可能長成一個balanced tree,所以很難算出很直接的值,大部分都是算出整顆樹的高度,用逼近法算出Time Complexity。而Substitution method也很直觀,帶入後觀看規律,猜出公式即可得證哩



---
感覺上很像隨便寫寫XD

星期四, 11月 27, 2008

稱呼

這個,似乎最近越來越多人叫我老大、大哥...etc 呃,個人無意混黑道,叫我yen3就好XD

不過也還好,大部分都是學弟妹叫的,我認識的學弟妹也不多啊,昨天與一個大二的學弟聊天,沒有什麼很實際的感想,只能說,自己持續努力了。

感謝竹竹提供的東西,非常感謝,唉,時間過的越久越覺得自己像米蟲一樣啊,什麼都不會。

---
感冒中。

星期三, 11月 19, 2008

幫忙的藝術

我不覺得我有什麼資格可以提這件事,不過仍然很想提一下XD

前幾天聽到有人提及師大資工有一個學弟高中就用Ruby寫了一個查榜系統還因此上了電視,後來考上師大資工。非常好,我高中的時候尚屬於混吃等死的白目死小孩年代XD。

我大一剛進我們學校資工系時,意氣風發,樂於助人,交作業前的一個晚上曾經有15個msn,後來我就養成交作業前一個晚上去打籃球的習慣XDXD 不過當然,由於我到後面就生氣了,從那個時候,跟班上大部分的人處的很平淡到現在(說現實一點叫做,沒有在往來。)。

我想這不是最主要的原因,最主要的原因應該是我太白目XDXD,哈哈。但是後來這些年我遇到一些人,對於是否要幫忙這件事,我一律回答,只幫忙有價值的問題; 反面而言,請學會拒絕沒有價值的問題。

何謂有價值的問題,很簡單,單看這個提出問題請求幫忙的人自己下過多少功夫了,沒有所謂難的問題或簡單的問題,只有好問題和沒有價值的問題。所以當有人問我時,我常常說,這是一個好問題XD。

如何學會拒絕? 在我的經驗中,大部分的人是吃軟不吃硬的,請柔性拒絕,當然,也有人很白爛的,請視情況罵他xxx,說老子不幹了。絕大部分的狀況如果我不想回答這種問題,我就會,嗯...我想想,我可以改天再回答你嗎? 這個問題我當下也回答不出來。抑或是,我最近有蠻多事要忙的,可能沒辦法處理你的問題,你要不要等過幾天?

我個人認為,只要是朋友有難,我就會盡其所能的幫忙,不管我身處什麼樣的狀況(事實證明,這種想法有時候會把自己搞的很慘,不過常常會得到意外的喜悅:)),對於自己不熟的或者是不想幫的,學會拒絕的藝術與幫忙的藝術是一樣的重要的。

當然,像我大一樣,直接跟所有人說,我不幹了,我不幫這種鳥事,有時候不一定是好效果,喜歡寫程式的人,有時候是會從不喜歡慢慢變喜歡的,這樣子等於直接封殺了所有的可能性,就有點可惜啦XD,很想說,以後遇到這種情況時,可以發一篇類似"與妻訣別書"的感人文章,讓別人不好意思麻煩你,也是很不錯的XD。

---
又閒聊了XD

星期日, 11月 16, 2008

服務

最近有太多事想要寫,反而不知道要寫什麼,不過隨著準備研究所考試,這個blog的更新會越來越慢XD。

最近有朋友電腦壞掉,所以對這個名詞蠻有感覺的,以前的我很不喜歡品牌桌機,覺得平平同樣的價格,為什麼品牌電腦會賣這麼貴? 同時會覺得為什麼國外比較喜歡品牌電腦?

其實大部分買電腦與組電腦的人,都把服務視為一個無形的成本,其實服務應該是要花錢的,當然,用盜版軟體就免費啦,所以很多人去光華買零件組一組cost-down下來,其實差不多只有花掉很多時間及硬體部分的錢(以時間管理而言,學生時間真的很多XD),服務呢,如果你有好人,就有好人替您服務,如果你本身就是好人,那麼更不用說了。

不管買MacBook還是買一般的筆電,其實售後服務,我都得說,我不知道效率為何(我的上一台筆電送修三次,都很快),但是我得說,至少都有一個明確的點可以送,可以收,然後balabala就回來啦,很方便。一般所組的桌機,壞了,小則自己重灌,大則檢測硬體,送修換掉,其實這些都是很無形的服務成本,但一般人愛免費啦,所以就會導致,我只是想拿電腦做一件簡單的事(上網、聊天、交報告)。就變成,想要過的好,百般武藝不可少。

所以會有人說,Apple的電腦除了漂亮,就貴,阿婆關心(Apple Care)又要花很多錢,其實這些事都把隱形的軟體成本與服務去掉了。當然我不否認,Apple電腦售價是比較高一點,但把這些成本加回來之後,覺得貴不貴就變成見仁見智了。

現在的電子產品是越來越精密,也蠻容易壞的,這幾年,我比較會把售後服務也考慮進來,因為服務也是成本的一部分。

不要小看這些成本啦,你欠那些好人的便當與飲料,記得該請一請,不然以後外面公司的服務成本價位表看到你會哭哭喔XD

科科(這純粹是應景XD)

---
閒聊一下。

星期一, 11月 10, 2008

趕工失調

我在趕工寫作業之下,竟然寫出這麼GY的寫法,不太好玩...Orz

ifstream& readWavFile(char* filename, WavHeader& header){
ifstream* infile = new ifstream;
infile->open(filename, ifstream::in | ifstream::binary);
infile->read(static_cast(static_cast(&header)), sizeof(header));

return *infile;
}


---
真不懂自己為什麼會這樣子寫...Orz

星期日, 11月 09, 2008

神經水管與髮絲

這當然不是指真實神經,真實神經細胞很複雜,我也不太能理解這是一個怎麼樣的東西。

神經像水管有好處,排水比較方便,沒有爆炸的危險,由於粗了點,對於外界觀感較為輕鬆直覺,然後常常會做對一些事(不自覺的),也常常做錯一些事(不自覺的)。

神經像髮絲有好處,細水長流撐比較久,當然有爆炸的危險,對於外界非常敏感,然後常常會做對一些事(或許有感覺),也常常做錯一些事(或許有感覺)。

今天晚上,你要那一種神經呢XD?

---
單純白爛啊XD

星期五, 11月 07, 2008

Do As Infinity - For the future

To eating: for the future

MV

誰だって一度は大空を飛べるさ
今日から君の限界目指せ
For the future

やりたい事をガマンしてたり
よせばいいのに大人ぶったり
断る事もできなかったり
ホンとの君は
何処へ行ったの?

教科書通りの
人生 なーんて
うんざりするでしょ
さぁ 行こう!!

誰だって一度は大空を飛べるさ
今日から君を今 見せてよ
For the future

あと少しでまた強くなれるさ
輝く瞬間を駆け抜けよう
For the future

僕等 自由なんだ
さぁ 行こうよ

誰だって一度は大空を飛べるさ
今日から君の限界目指せ
For the future
さぁ一度はあの空を飛ぼうよ
今日から君の限界目指せ
For the future
さぁ一度はあの空を飛ぼうよ
フルスピードで限界目指せ
For the future

每個人都有一次機會可以飛上天空
從今天起就以你自己的極限為目標 For the future

想做什麼就別再忍耐
不要假裝自己很成熟
不懂得如何拒絕別人
真正的你到底在哪裡?

一如課本上所寫的 人生 難道不會
讓你受不了 來 出發吧!!

每個人都有一次機會可以飛上天空
從今天起就以你自己的極限為目標 For the future
沒有時間讓你再嘆息
用全速朝向極限前進 For the future

名為人生的故事
這劇本是你在當主角
如果有任何的不滿
儘管自己來重新寫過

不要什麼都沒做 就在怨東怨西
這樣怎麼會開心 來 出發吧!!

每個人都有一次機會可以飛上天空
從今天起就以你自己的極限為目標 For the future
只要再努力一下就可以變得更強壯
奔向閃耀的那瞬間吧 For the future

我們 是自由的 來 出發吧

每個人都有一次機會可以飛上天空
從今天起就以你自己的極限為目標 For the future

給自己一次機會飛上天空吧
從今天起就以你自己的極限為目標 For the future
給自己一次機會飛上天空吧
用全速朝向極限前進 For the future

---
幹,今天踩到狗屎...Orz

星期三, 11月 05, 2008

平靜

這幾天生活過的一團糟,今天是重新開始了。

---
習慣了。

星期六, 11月 01, 2008

沒有優選

輸了沒關係,不要輸掉自己的熱情與靈魂

這是我對我的人生最佳註解,其實比較擔心的是cllee,他每次看我們輸了就會很難過。

I have a passion for Computer Science so I don't give up anything what I want to do.

---
How to save a life.

星期五, 10月 31, 2008

耗能

有一種筋疲力盡的感覺

---
什麼事都不想做。

星期一, 10月 27, 2008

專題結束








睡不著,於是起床寫些東西。在下筆的此刻還是沒有完整的照片。這裡是複賽回顧,對於我在於決賽的表現,我只能說

我在這一個禮拜多所犯的錯誤,遠超過這三個月的總和。

分工不很明確,做事也不很好,把自己累的半死,卻總有閒置人員,只能說,自己做的太差了,或許事情不具有分割性,但是分配不均或不好總是對的描述,在這裡我想跟所冒犯的人道歉。我一有壓力或很累時很明顯,因為臉會垮掉,心情會不好,會不想說話或無目的碎碎念或自嗨,這些症狀在決賽這週通通跑出來了,也謝謝大家對我的包容。

eating 是整個過程中最讓我覺得驚豔的人,她的耐心與時間管理程度超出一般人太多太多,她處理的GUI極為漂亮,美工能力一流,文件撰寫相當流暢,學習新事物很積極(我看她用photoshop覺得一切都好神奇XD),雖然她大三上就擔心自己的能力是否能勝任這個專題,不過在種種事情中她都表現的勝任有餘,在這個專題過程中,我受到她的許多幫助,非常感謝。

Clara 在整個專題中有著絕佳平衡力,她主要負責程式設計、資料庫整合、GPS API使用、簡訊API開發、文件撰寫等等,最後的決賽簡報由她負責,我不覺得換作我去報告會比她好(我的專長是和老師吵架XD),穩定度極高,在整個專題的合作過程中相當愉快,如果有發生任何問題,絕對是我的錯,不是她的問題。

fire7617 有著很好的爆發力,雖然中間發生很多不愉快,是我工作分配的問題,他在OCR開發中付出的心力,還有決賽中影片的剪輯,及生動的表演,如果有機會,我願意再和他合作。

gb014388 是一個人際關係的極佳調合劑,不管發生任何人的問題,我總是麻煩他,他在整個決賽過程中所表現出的美工能力一流,雖然描述只有了了數語,但是很難說明什麼我和他的情感。

yen3 我自己,負責嘴炮和寫程式,在這個專題上談不出做了什麼,所以努力寫感謝文。沒有他們,就沒有我。

Chun-Liang Lee 是我大學最尊敬的老師,在我大學最白目的時候,他跟我說"做事不只有對不對,還有好不好",開啟了我的自我學習之路,在整個專題中,沒有老師,我無法成為一個有用的人(莊子:以無用為大用),提到老師,我難以下筆,因為能說的事真的是太多太多了,老師在最後寫與我們的文字寫著

Expecting the Glory to Come
Hi guys:

比賽終於在昨天告一個段落, 在結果公佈之前, 我想要告訴大家, 你們都是 No. 1!
You guys have done a wonderful job!
Let's expect the coming of the glory.

我想跟老師說

老師,你是我心目中最好的老師!!

在整個比賽中,有苦與樂,有笑與淚,無論如何,到今天總算是雨過天青了。我的大學生活,在去年的矩陣運算競賽中和今年的中華電信比賽,兩個拿上自己的全部來賭的夏天,堅持做好每一件我想做的事,我的人生才有價值,也因為賭上自己的全部,我才能看清自己的能力。或許

我不相信自己,但我相信這個團隊
也感謝母親與efang對我無私的支持,也感謝這blog的讀者,太多人可以感謝,所以不謝天XD,謝謝各位。


---
有照片時會補照片。

星期六, 10月 25, 2008

專題結束

等有照片的時候再寫吧~

---
謝謝大家!!!

星期三, 10月 22, 2008

今日笑話

efang: 這張圖片好假好做作喔
yen3: 對不起,我好傻好天真(大誤)


所以其實本人是長這樣的XD

星期一, 10月 20, 2008

最近

好友發生了一件好事,非常恭喜,在此公開徵求,有沒有人知道不錯的賣巧克力的? 我在Google打巧克力專賣店,結果發現 "割豬肉"(你要嗎,yen3吃不起...Orz)

學會了忍耐是一件很重要的事,總覺得現在的自己還是過於任性,自我要求還是不足。除此之外,能力上的不足,或許我應該朝向多面向發展,說自己對於某件事沒有天份就拒絕學習是不對的事,應該還是得要學習至一個水平的。

昨天與人聊天,他的blog有不少人訂閱,所以寫起來有點擔心,我昨天看了一下自己的Google Reader,人數只有兩個耶XD 代表我可以繼續在這個小天地胡言亂語,而不用被人發現。

不管怎麼樣,隨手書寫生活。

寫作blog的人得負擔一定的社會責任,但是寫出讓自己開心的東西非常重要,有人回應當然會高興啊,沒有人回應就繼續寫吧XD。

---
亂寫 XD

星期五, 10月 17, 2008

[寫作] 哭泣

小女孩哭泣著。面對所有的未知,她感到害怕了。

從認識爸爸媽媽開始,她必需獨立一人面對未知的世界,不對,她還有一個尚未出生的弟弟,但,這世界已經扭曲不堪。

尤想起第一天上幼稚園時,在媽媽的懷中大哭訴著,在她的面前卻是一棟彩色的可愛城堡,她感到恐懼了,對她而言,可愛城堡就有如糖果屋一般的存在,而院長就是那可怕的巫婆。在陌生的孩子群裡,小女孩放不開,面對其他男孩的捉弄,她只能無助的後退,安靜著。

然而,誰都沒有想到,十年後的小女孩會怎麼樣...

---
即興創作,寫作果然很難,花了二十分鐘只能寫出這段文字。

星期三, 10月 15, 2008

入選決賽

決賽名單

接下來又是十天了...

---
keep going

雜事記錄

近日雜事如下


  • Wikipedia English幾乎什麼都查的到XD

  • 閒聊的blog是最多人回覆的XD

  • Bakery's Algorithm真是太神妙了(Operatring System的Process Synchornization Algorithm)

  • 張懸的歌一直唱不好,盧廣仲的兩次就好了,因為後者歌詞都非常簡單XD

  • 有老師推薦我去推甄中正資工,但是我竟然對這個系所一無所知XD

  • 前幾天一天灌了接近兩公升的可樂,再這樣子喝下去我就準備換腎了(連洗腎都免了...Orz)



---
雜事真多

星期六, 10月 11, 2008

文如其人?

高中時,小說創作完稿告一個段落,在和國文老師聊天。

老師: 大家都說文如其人,可是我看你的文章和你的人不像啊。
yen3: 囧rz

---
還真的蠻不像的XD

星期三, 10月 08, 2008

敗家

近日敗家清單如下

  • 基地
  • 基地與帝國
  • 第二基地
  • 基地邊綠
  • 基地與地球
  • (CD) 盧廣仲 - 100種生活


---
好多錢啊...Orz

星期二, 10月 07, 2008

撰寫自傳

自己成績不是很好,但是最近剛好有機會看到三個人的自傳,前面兩個都沒有太大問題,看到第三個的時候,我的小宇宙就爆發了...文章裡面不要有大量重覆的詞,記得排個版,都是小事,但是

請寫出自己會相信的內容。

寫出有點浮誇的內容是在所難免,不然以我天天晚上都在聊天沒有寫程式的人,我還真不知道要寫什麼,但是如果寫我很認真,認真到自己都不相信的境界...呃,我想我也不會相信。

請試著自己校稿,試著念出來,你就知道問題在那了。

---
突然暴走XD

星期一, 10月 06, 2008

最近

最近的生活總覺得自己處於一個失控的狀態,不過似乎也好,如果人生一直在預料內,似乎這個生活就不是這麼有趣了。

去台北大部分的理由不是買東西就是拜訪朋友,不知何時,四處與高中同學聚餐是我去台北一個很重要的選項,昨日前往拜訪朋友,雖然知道一些可惜之事,但是人與人之間的關係若失去平衡時,誰都無法決定下一步為何。

但是也只能自己嘲笑自己,當嘗試把生活變的更為單純,把複雜因子去除時,因為想要去掉複雜,而讓自己陷入一個泥沼中,可見我還是不擅長處理這種事,就這樣子過生活吧。

念書漸漸上了軌道,幾曾何時不想面對這一切,因為我對於這個真實社會懷抱著恐懼,或許我應該多多嘗試,但是必然會面對,唯有面對,才能說服自己完成事。

就這樣子吧

---
盧廣仲 - 好想要揮霍

星期六, 10月 04, 2008

Haskell Learning Note(3)

試論curring

在Haskell中,不用C++這麼複雜的方法來解決問題,而是採用curried function來解決這個問題。

Prelude> let add x y = x + y   -- 簡單來說就是寫一個 (+)
Prelude> :t add
add :: (Num a) => a -> a -> a -- 此時的add是一個具有兩個引數的function
Prelude> :t add 1
add 1 :: (Num t) => t -> t -- 此時的add 1 是具有一個引數的function
Prelude> :t add 1 2
add 1 2 :: (Num t) => t -- 此時的add 1 2是一個不具有引數的function

在Haskell裡,使用單純的curried function即可解決,寫起來很像C++的function default arguemnt,意義不太一樣,在Haskell裡是真的把引數代入形成一個新的function,其實+ operator也可以做出同樣的功能(Josh Ko說這是語法糖XD)

Prelude> :t (+)
(+) :: (Num a) => a -> a -> a
Prelude> :t (1+)
(1+) :: (Num t) => t -> t
Prelude> :t (1+2)
(1+2) :: (Num t) => t

寫到這裡我在想,我幹麻沒事自己寫一個add呢 XD那麼,可以試著用map寫出一點有趣的東西

Prelude> map (1+) [1..10]
[2,3,4,5,6,7,8,9,10,11]

當然,一個curried function在FP中的功用不止於此,curried funciton可以做更多事,隨你寫,隨你造,而不用C++ STL裡的bind2nd這種相較之下較不直覺的方法。curried fuction的好處是在Haskell底下是lazy evaluation,也就是說,你function引數可以不用給全,直到你要求把答案算出來的那一刻把argument給全就行了,而且可以隨你組合,隨你寫,可以做出相當多的靈活變化,也就是說,curried function並非要求一次把function arguement給齊,在Haskell底下大部分的funciton都是curried function。

那麼有沒有要求要一次給齊的,換個腦子想想,就是uncurried function,在這樣子的一個function底下,沒有一次給足所有的argument就會出錯(一時想不到有什麼function)。

補充:當我們寫(1+)而我們又呼叫這個function時,是類似C++的default argument還是wrapper function的技法呢,如果記得是沒有錯,是前者,也就是說,不管怎麼compose,都是只有一層的呼叫,相當的方便。


---
真糟,寫的真少。

Haskell Learning Note(3) - 前傳

我本來想要參考和Josh Ko的MSN對話紀錄來這一篇的,但是發現MSN對話紀錄竟然不見了...Orz

funciton interface如何改變

一個function,會有0個至多個不等的argument,而function只有一個signal output(當然也不一定是signal output,你可以說傳一個list出來,說我傳了一堆東西,但是就整體而言,你還是傳了一個符合某一個type的東西出來),這對 functional programming更是如此,基本上就算是function name相同但是arguments 個數不同的話,我們仍視為不同的function

先跳回C/C++,眾所皆知,C++有著function overloading機制(靠著compile-time決定呼叫那一個function,為一個static-linking),基本上靠著這樣子的機制,避免非常多的name collision。

題外話,C++靠著三種機制來避免name collision,一種是name scope,一種是funciton overloading,一種是polymorphism,不過很可惜的是,沒有類似Java裡的inner class來避免一次性的class使用,但是到了boost,有提供lambda calculus來解決部分的問題。

或許換個角度來想,程式碼複用性一直是一個很重要很重要的問題,以function層面而言,最常見的wrapper function

int add(int a, int b){
return add(a, b, 0);
}

int add(int a, int b, int c){
return a+b+c;
}
當然,這個程式在C++中可以更簡單的寫成
int add(int a, int b, int c=0){
return a+b+c;
}
這些都是程式撰寫上的技巧,不足以掛齒,在寫程式的單純呼叫function時,引數是不足以構成問題的,可是call-back function上呢,在STL algorithm的比較呢,以STL的find_if為例。
template<lass InputIterator, class Predicate>
InputIterator find_if(InputIterator first, InputIterator last,
Predicate pred);
其中的Predicate要求傳入一個value type的變數,傳回bool,也就是說,如果你的function不是一個引數,是不符合Predicate的要求,那麼就無法變成find_if所能使用的function object。

STL所提供的解決方法有二,如果你要求剛好是function object adaptor和predefined function object組合起來可解決,那麼就使用組合技,第二個方法為,自行撰寫一個較為general function object ,再使用funciton object adaptor來改變一個function object的interface。舉個簡單的例子
std::find_if(u.begin(), u.end(), std::bind2nd(std::less<int>(), 0)); //尋找某個區間第一個小於0的數字。
我不能不說,我當初看到這樣子的寫法,我以為找到了救星,funciton可以玩組合技耶,而且這樣子的確解決了call back function的問題。

利用wrapper function或者是STL裡面的function object adapter或種種程式語言的技能的確可以改變一個function原本的interface,但是有沒有更好的方法? 有啊,不然我就白寫了,看到Haskell的方法之後,以前的我好傻好天真(大誤)~XD。

---
還沒進入正題XD

星期四, 10月 02, 2008

有趣的圖



靠腰這圖真是彷彿穿透了我的內心,洗滌了我的靈魂,讓我淚如雨下~我應該認真面對的~m(__.__)m

好友gb014388的創作,還是以後blog走這種路線也不錯XD?

---
歡迎廣為流傳XD

猜測

我不喜歡去猜測人的想法,雖然大部分人的行為都有跡可循,但是僅止於明顯的行為部分。

常常會有說者無心,聽者有意的狀況發生,我最近常常下意識的去猜測其他我所不認識人的想法,感到非常漸愧,這不是我該做的事。或許有90%的事是可預測的,但是我們遇到的事常常是落在10%的範圍,程式可以預測行為,但是人的預測,往往有太多足以造成蝴蝶效應的因素而難以預測,我的做法相當直接,傾向直接詢問,當然,詢問的方法往往也得適當。

最近的自己,或許會縮自內省自己世界的狀況,被親人責斥,其實不管問題的源始為何,如果發生這樣子的問題,只能說,如果自己沒有做錯什麼或表達錯什麼,不會發生這樣子的事,所以最該做的是反省自己。

雖然發生很多事,很多想寫的,仍得靜下心來看待每件事

---
無欲則剛

星期二, 9月 23, 2008

Google Calendar 和 iCal 同步

在Google Calendar推出CalDav之後,以前只能單純的利用iCal訂閱Google Calendar,要更動還是得從網路上,並不能做雙向同步,現在單純的利用CalDav之後,就可以同步了

官方說明網址

簡單的來說,就是在 偏好設定 中 新增帳號
使用者名稱,你的帳號,一定要打全名,ex: google@gmail.com
密碼,莫在提
帳號URL: https://www.google.com/calendar/dav/{你的Google Calendar帳號}/user

不過一個iCal的新增帳號,只能擁有一組日曆,如果你有很多組日曆的話,看一下你的日曆id再進行新增。

這樣子不管改那一邊,都可以同步喔XD

---
我每次都要把最後一句寫的好神奇XD

複雜

我果然還是不擅長處理複雜的事。

---
媽的,誰能教我。

星期日, 9月 21, 2008

回顧

在我下筆的此時,其實只僅僅是複賽交件。

去年的此時此刻,我同時在比賽,在cllee的指導下,我比了去年國網高速運算和今年中華電信電信應用加值大賽。第一次比完,收工的時候其實真的很高興(接近一個月沒睡好),這一次比完只有簡單的鬆了一口氣的感覺。或許再多比幾次就會很習慣了XD。不過對我而言

比賽的結束代表大學生活的告一段落。

我的大學生活極其簡單,念書、研究、思考概括了全部的生活,在前三年的大學生活,我得學會太多太多事,撇開技術不談,對於人生價值的觀察,已經起了根本性的改變。人其實在每一個時段都很難準備好當下該做的事,因為都得同時看著未來,我在大學生活學會的其中一件事。

活在當下看著未來。

如果每個當下都是為了未來努力,那麼現在的當下一定顯得可憐,我的人生很簡單,只是單純的想要把事情做好,做好的同時,常常會帶來異想不到的驚喜。

大學生該學的技能或者是該有的心態,已經有太多文章在討論了,而我選擇的,是一個最簡單的方式。若要說大學和高中有什麼最大的差別,我想,高中的學科其實並不困難,為了因應所謂的大考而必需把熟練度拉到極高,大學的課程並不簡單,雖然老師僅僅考課堂上的東西,考不好或許會調分,但是如果不是對這個學門有所興趣進而下功夫苦讀,或許什麼都學不到,僅僅只是拿到一張文憑,而且這張文憑也不能說明什麼事。我在我的前三年生活中,大部分的科目是用混的混過去的XD 但是有極少數的科目,或許學校沒教,或許學校教很少,但是我肯花時間學習我想要學的東西,其實這就夠了。很多科目其實只要肯花時間,沒有學不會的道理,但是我只能說我念書的時間仍然太少。

當班上同學都立志考取好學校時,我祝福,但是我同時也想跟自己的學弟妹說,好好的想想,大學和研究所文憑對自己而言是什麼? 如果真的虛渡了六年的時光,或許真的是一件非常可惜的事。

有看到朋友的網誌,怕自己沒有準備好,我真的覺得朋友是一個很認真的人,我的想法是,人永遠沒有準備好的時候,但是人可以靠著自己的熱情與時間(或許是肝XD?)去克服很多很多問題,大學之所以學不好,因為還沒有找到領域想要定下來,多聽聽多看看,有一定的學習廣度,大學生活其實就不虛此行了,找到目標就會等於找到不停止的動力,在這之前,確定自己所要的是什麼。沒有所謂的強與弱,我所認識的強者或者一般人稱為的神人,都是在該領域專注極長時間下的結果,有足夠的專注及熱情,其實每個人都一樣的。

或許我下一個該思考的問題是,讓自己變好和所謂的反社會傾向有什麼關係?

---
有一種還沒寫完的感覺。

星期二, 9月 16, 2008

興趣

pigtail 的興趣是balabala(族繁不及備載),看到很多人都有明確的興趣,我的興趣為何?

寫作,閱讀,思考,寫程式。

---
結果花的時間剛好是反向序列XD

星期一, 9月 15, 2008

倒數

今天是開學,比賽只剩一個禮拜,而文件和程式大致上完成了,還有一些事要做。

每當我規律作息一段時間之後,就會有某幾天比生理時鐘早上很多醒來,通常這些天,我會好好的思考一些事,不然就拿來閱讀書籍,今天是特別早的日子,但是我卻覺得空盪盪。

颱風來了三天,雖然現在已經遠離台灣了,但是天空依舊黑沉,算了,收拾傢伙去實驗室吧。

eating問,我寫什麼是比較認真的,當這篇文章沒有出現大量XD的時候,大概就是我寫作比較認真面對的時候。

---
胡言亂語。

星期五, 9月 12, 2008

颱風

去年的中秋節我沒有回家,因為比賽進入倒數最後一個禮拜,今年的中秋節依舊沒有回家,今年的比賽依舊剩最後一個禮拜。

去年和今年都有颱風,也是一種很奇妙的記憶。

---
風雨變大了,明天大概是燕麥片+泡麵 XD

星期三, 9月 10, 2008

有趣

今天看ptt C_and_CPP 版,PcGrek 版友寫了一個非常有趣的code


double** mat = (double**)malloc( h*sizeof(double* )+
w*h*sizeof(double));
double* x = (double* )(mat + h);
for(int y = 0; y!=h ; ++y, x+=w )
mat[y] = x;

free(mat);


---
看懂真的覺得很有趣

專題進度

09/20就要交出複賽文件了,在昨天cllee就停止要求增加新功能,我倒是蠻高興的,並不是說不樂於接受挑戰和工作,實則是想要把已經寫的程式,好好的修補一番,最近的這幾個禮拜都陷入在修改已知的bug和增加未知的功能上。

Clara: yen3,程式有bug喔~
yen3: 我記下來了(寫在紙上~)

yen3: Clara,database有功能要加。
Clara: 嗯嗯,馬上加好。
yen3: eating可以拜託你嗎? 有GUI要修改。
eating: 沒問題。

cllee: 程式那裡可以再加個功能。
yen3: 我這幾天會寫(寫在紙上~)

當然,今天也要開始對說明文件進行排版,發現,這個暑假過的很快,時間勒過就親象是鳥仔勒飛~是時候把最後一段該做的事完成了。

我想,該是跟Clara借個相機,我想把一些事照下來。自己的相機,也不是說不愛惜,電池六年,再怎麼充都會沒電,還是得尋求一個解決方案就是了。

---
還有好長一段路要走。

星期二, 9月 09, 2008

魔幻奇緣

簡介

常聽過胡迪尼,但是不知道是誰。看wiki也覺得這個人頗有趣的。

---
應該從內心來關心,而不是從表面。

星期四, 9月 04, 2008

國境之南

國境之南

詞:嚴云農

如果海會說話 如果風愛上砂
如果 有些想念遺忘在漫長的長假
我會聆聽浪花 讓風吹過頭髮
任記憶裡的愛情在時間潮汐裡喧嘩

非得等春天遠了夏天才近了
我是在回首時終於懂得(也許天氣永遠會那麼熱)
當陽光再次回到那 飄著雨的國境之南
我會試著把那一年的故事 再接下去說完

當陽光再次離開那 太晴朗的國境之南
妳會不會把妳曾帶走的愛 在告別前用微笑全歸還

海很藍 星光燦爛 我仍空著我的臂彎
天很寬 在我獨自唱歌的夜晚
請原諒我的愛 訴說的太緩慢

星期二, 9月 02, 2008

認真

認真的玩一場吧。

---
人生

想法

人是一種以形而上的思考和形而下的慾望結合。

若說要懂了什麼,恐怕只能說什麼都不懂,但是學會面對自我想法時,往往帶著一種嘲笑,拆開成赤裸裸的慾望時,其實人與人之間沒什麼不同。

堂而皇之的華麗遮掩了原始慾望的單純,拆開包裝之後剩下的又是什麼呢?但不幸的是,人長越大,自已為自己覆蓋的一層包裝,張愛玲所說的荒涼於心中徘徊不散。

一個故事就此開始。

---
序

星期一, 9月 01, 2008

最近

最近,其實,生活很平靜,今天才去看了海角七號,有很多想法,等過一陣子再寫。

禮拜六日,為了不要讓自己太無聊,繼續寫程式,把cllee交待的新工作做的差不多了,明天要meeting,希望能順利一點,明天早上再把最後一個bug修掉即可。閒暇時利用一些時間在看boost,覺得有趣的東西都是functional programming的東西,所以我還是回來看FP好了。

還有三個禮拜複賽截止,還有二個禮拜就開學,不用打卡,不用寫工作日誌的第一天,其實很棒,但生理時鐘早就被調成打卡的作息了,早上八點醒來,下午五點吃飯,或許就這樣子發現我很容易被某件事制約?

也一直想寫一些黑暗的東西,但是心情太平靜,反而寫不出來? 也好,寫些平淡的東西也不錯。

---
閒聊文

星期六, 8月 30, 2008

小試一下

第一次裝boost,雖然知道很久,但是一直沒時間試,今天寫了簡單到爆的程式碼

#include <boost/array.hpp>
#include <iostream>
#include <algorithm>
int main(){
boost::array<int, 10> a;
for(unsigned int i=0;i<a.size();i++) a[i] = i;
std::copy(a.begin(), a.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
}
輸入指令如下
g++ -I /usr/local/include/boost-1_36/ test.cpp
可獲得如下結果
0 1 2 3 4 5 6 7 8 9 

---
我真無聊XD

星期四, 8月 28, 2008

Fink Project

Fink Project 是一個可以讓你以套件管理形式來管理OpenSource的安裝套件,整個安裝說明在此在dkg解壓縮之後,安裝完,記得把"FinkComander" 移入應用程式中,會有一個非常像ubuntu的套件管理程式(其實安裝指令也有部分雷同,估計兩者有血緣關係XD),可以試試,比起MacPorts而言,有更多選擇。

---
學習。

旅行

暫定這個時候,09/20複賽截止,還有很多事可以做。

---
準備與期待

星期二, 8月 26, 2008

專題

有一個段落,比較不會那麼擔心,有一種放鬆的感覺,雖然還有很多事要做,但是是安心了些。

---
平衡

星期一, 8月 25, 2008

Sixpence None The Richer - Within A Room Somewhere

I breathe the mist
Floating about the stars
I can caress
With velvet hands
I breathe the mist
Floating within, without this pen
This pen between my fingers

Messiah
I know you are there
Within, without me
Holding me
Messiah
I know you are there
Catching, carrying
This beautiful mess

Escape the pain
Within a room somewhere
Escape the pain
So deep inside the soul
I have no key
No map to find

星期日, 8月 24, 2008

裝死

這是一個連裝死阿宅都會被打擾變成嚇死阿宅的年代~

---
下次要記得啊...Orz

真實與性

今天下午花了時間去看了 失樂園 這部電影,不過我沒有看完我就關掉了,因為我的心底很沉重。

我不懂性,因為我不知道。

看這部電影時,導演用冷色調的藍色表示夜景,不斷的切斷內心與真實的場景,其實,當人深陷其中時,是愛情造就了性還是性造就了愛情,已經分不清楚了,一再的沉倫,當男主角說我們一起下地獄時,何謂救贖呢? 在這部的電影,冷色調的夜景,似乎對我而言是一個失恆的世界

閱讀的小說,多多少少都會有少則數行,多則成頁的有關性的描述,有的表達,只是為了一種情感的抒發,有的想要藉由性表達某一些觀點,更有者只是為了讓書更有看頭,等到人漸漸了解是怎麼一回事之後,突然有個感想

人長越大不是祕密越少,而是越無法承認自己真實的內心,或許真實的內心參雜慾望時,越發難以了解真實想法。人之所以複雜,是無法面對真實的自我,就有如日劇白夜行的最後警官所說,她已經無法說出實話了。

看著很多發生的事,其實我還蠻喜好閱讀D51的小說,但總是有一個心中的疑問,為什麼每篇小說都脫離不了夜店?

當人陷入一個巨大而被吞噬的寂寞時,性與真實,謊言與否已不重要,唯一的是抓住當下的快樂,而何謂解放,其實已經失焦。

這個社會存在著多種角度的社會,只是剛好我選擇了一個最簡單又幸福生活,但是豈又能知道進入這個旋渦時,又能剩下多少真實的自我,不哭泣面對明天的太陽。

唯一能做的,快樂的過生活。

---
有感

星期日, 8月 17, 2008

如何用Haskell寫出笨拙的99乘法表

目前想法如下。

mult_line x = map (x*) [1..9]
mult_table x = map mult_line [1..x]

之後,我在ghci中呼叫
*Main> mult_table 9
[[1,2,3,4,5,6,7,8,9],[2,4,6,8,10,12,14,16,18],[3,6,9,12,15,18,21,24,27],[4,8,12,16,20,24,28,32,36],[5,10,15,20,25,30,35,40,45],[6,12,18,24,30,36,42,48,54],[7,14,21,28,35,42,49,56,63],[8,16,24,32,40,48,56,64,72],[9,18,27,36,45,54,63,72,81]]

星期六, 8月 16, 2008

雞湯哲學

yen3媽: 兒子,今天喝雞湯好嗎?
yen3: 嗯嗯
yen3媽: 有一塊雞肉如何?
yen3: 嗯
yen3媽: 二塊雞肉?
yen3: 嗯
yen3媽: 三塊雞肉?
yen3: 我沒辦法吃這麼多...
yen3媽: 那三塊半?
yen3: ...

---
母親總是富有哲理XD

返家

已經不記得上次是什麼時候返家,這次回來透露著陌生的熟悉感,家人聚在一起的感覺非常美好,從美國回來的姊姊送與我和efang衣服各一件,也拿到了Introduction to Funcitonal Programming 2/e,雖然上面沒有簽名XD,還是開心的想要大叫XD

---
我回家了。

星期四, 8月 14, 2008

信仰

我並不是一個無神論者,我是一個普通人,我相信很多事。本來還想寫很多很多事,先從這篇寫起吧。

昨日看"旅美小簡",陳之藩先生在1955年29歲時完成了這本書,,其實人的核心概念並沒有改變多少,但是我們卻了花了更多時間來證明真理的價值。看著他的大學時代與胡適的信,邊看邊感覺汗顏,在大學時代,能對這個世界抱有遠見及書寫社會,讓身為大學生的我,愧對大學生的名稱。

現在不是自我檢討的時候,看旅美小簡可以理解一些事。科學家的信仰是所追求的真理,及其這個存在理性的社會。不是不相信宗教,而是超越宗教之上,還有更值得我們做的事。我不是一個科學家,但是我的信仰是科學。

說一點輕鬆的,不知道美國那個有名的研究機構,對於一群大學生做了問卷調查,其中有一群人立志成為有錢人,有一群人立志把事做好。過了很久之後再做一次問卷調查,發現立志把事做好變為錢人的比例比立志成為有人錢的人比例更高。不過我可以預估到我以後會很窮...XD

從事學習或研究工作最有趣,也是我最喜歡的一點,透過自己的力量,用一個自己所能理解的角度,多接近世界一些。

---
或許有一天我會需要別人救濟XD?

星期三, 8月 13, 2008

感嘆

Thinking in Java 4/e 中文版現身了,但是The Java Programming Language 4/e 中文版卻不知在何處...

---
Orz...

星期二, 8月 12, 2008

有關物件導向的胡言亂語

老實說我也不知道我要下什麼標題比較好XD

昨天閒逛時發現,今年人次快要接近一萬了,想一想也沒什麼好高興的,從Google點進來的都是去年的文章居多XD 可以說今年到現在為止是過的比較懶散的生活,不過我想,寫blog還是一件相當有趣的事。

暑假過一個多月了,每天都在寫程式中與閱讀渡過,可謂是過的相當充實,目前只有滿心希望能夠把眼前這個專題完成。並不是每一次都可以遇到很好的合作對象的。

最近也沒什麼空在閱讀小說上,以前幾個禮拜看的"殺人本能"就覺得不甚讓人覺得緊張,還是戰慄遊戲比較提升我的腎上線素,應該是說,我最近的興趣是閱讀重構之類的書,書的清單如下。

  • 物件導向設計模式: 可再利用物件導向軟體之要素(Design Patterns)
  • Object-Oriented Analysis and Design with Applications 2/e (這本尚末閱讀)
  • 重構 - 改善即有的程式設計(Refactoring - Improving The Design of Existing Code)
  • 重構 - 向範式前進(Refactoring to Patterns)
  • 敏捷軟體開發 - 原則、樣式及實務(Agile Software Development: Principles, Patterns, and Practices)

其實看了好幾次Design Patterns,我從來沒有記得裡面的經典patterns,這種書本來就是看完就忘,如果為了pattern而pattern,很容易陷入一般教科書所謂的pattern happy,有幾本書提到使用XP(eXtreme Progarmming)來使用OO,對我而言,從這邊開始去了解整個思維是不錯的,雖然好像不是那麼多人注意就是了,在前陣子 "Refactoring to Patterns" 在天瓏暢銷排行榜上,我們只能保佑,不要有一堆人買回去供養XD。

以自己大膽的猜測而言,其實學習 OO 沒有入口,因為原則非常簡單,OOP 是一門藝術,但是並不科學,因為他並不像數學一樣,經過一連串的演算即可獲得結果。而是得靠一個一個unit testing去確認程式的正確性。其實進入這個世界,就有如木匠帶領學徒一樣,技巧只有幾樣,但是不斷的精練自己的能力,方能寫出有如藝術品的程式。雖然擁護者會說,OO 是最接近人類思考的方式,並輔以相當的科學佐證。

物件導向最重要概念為class hierarchy,利用class hierarchy方有可能把物件導向用到淋漓盡致,但是問題來了,要用多少技巧來包裝? 過或不及都會造成整隻程式的有趣現象。書上所提及的所有物件導向技術都是用以改善一個程式的class hierarchy,抓住這個重點再來閱讀,我的心思越辯越明。

此外再提及一個在學校有趣現象,大家都會說,物件導向很重要,要盡快學會,但是卻看不到幾人能夠善加利用而教授他人,或許過幾年我也會聽到XP很重要,programming的發展長時間在配合業界,而非配合科學。

何謂Computer Science,推薦ptt CSSE版上瞧瞧高手討論。也是不錯

---
果真是胡言亂語

星期六, 8月 09, 2008

感謝

不知道要下什麼標題才好

Clara's blog article about birthday

朋友提及才發現,升大四的時候,好像很少有人有過生日的習慣了,蠻感謝同組組員的,應該是說,我不是一個擅長表達的人,一直不知道怎麼說自己的感謝之情。還是很感謝eating, Clara, fire7617。

想想我們這組感情也不錯,始終都是自己白目了些。謝謝大家。

---
謝天

Josh Ko 與 scm


昨天得到甚為有趣的照片,為Josh Ko 和 scm 的合照,兩個人亦師亦友,不錯不錯

順便幫Josh Ko徵煮飯婆女友,需要長期飯碗熱情專注的人,可以出門左轉,歡迎歡迎(記得給介紹費)

---
紀念一下

星期二, 8月 05, 2008

生日

其實,每一年都會思考,我是否有足夠的資格過生日...

不知道從什麼時候開始,我覺得我少不更事的年紀太長,認為自己不甚好,從理所當然,到覺得自己應貢獻社會。在更多時候,覺得自己應該要會某些事,卻總是一事無成。雖有Josh鼎力相助,發現自己興趣為何,從imperative programming 跳到 functional programming 學習(我曾自嘲,這跟我打了九年的注音不打從嘸蝦米的基本學起其實差不多(笑))。不知為何想起國文課本所提及的一句話。

真實偉大的樸實無華

少不更事看書時,只是為了炫耀自己會了什麼,並不是一個可取的想法,現在看書的時候,只是單純想要了解一件事,到現在我不認為我理解了這句話,但是我所想,持續的努力,或許可以了解這件事。雖然一事無成,但努力前進,總有一天會找到答案,笨笨的前進,總可以讓一群人了解你笨笨的前進為何。

我曾跟Josh聊過一連串的事,才覺得自己總是浪費了一堆時間,不過我總是不後悔,因為因此我才會更珍惜當下與未來。就某個程度而言,有著一群我很感謝的朋友,我可以安靜的過生活,雖然實力不足,但更應該努力幫忙身邊的人。今年並不想和往年一樣列了一堆人名,大家不一定認識,且少列誰我都會覺得抱歉。我想說的是

希望,身邊的大家都活的平安快樂。

---
謝謝大家,今年是一個相當愉快的回憶。

星期一, 8月 04, 2008

列印

第一次買碳粉,才知道原來很貴,2650...Orz

人生因有夢想而為大,所以我正在K我印下來的兩份文件 "Introduction to lambda Calculus" 和 "Yet Another Haskell Tutorial"。

我的夢想很簡單,我想知道如何寫好程式,然後帶領一個團隊把程式寫好。我的兒時夢想很簡單,我想要寫出一個可以讓很多很多人用的好程式,我一直都因為這個原因前進。我不是一個有能力的人,我更不是聰明的人,但是我相信Randy Pausch說的兩句話

如果你認真過生活,那麼你的人生自然會帶給你答案
阻擋你的夢想必有其原因,而這道牆是讓你展示你有多麼想達成夢想。

其實在一兩個月前就知道有關Randy Pausch教授的事,但是腦中一直在思考非常多事,我想我有非常多的事想說,而這篇,只是一個開始


---
認真過生活,人生自然會帶給你答案。