星期五, 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