這週回家,算是開始放暑假了!雖然還是碩一的身份,但手頭上也有幾個 Project 需要進展。因此,我幾乎週日就回到學校,但這週在家多待了一天。
有種很奇妙的感覺,彷彿自己來到學校就像逃避掉什麼似的,很不舒服的感覺。
希望這週的 Project 進度能夠大大地躍進!然後,我也想暑假多花點時間待在家裡,儘管什麼都不做,但長假就該這樣陪陪家人。上週末的趣事,大概就是把我家的狗教會下樓梯,實在是目前住的地方,樓梯過於窄小且施工不一,有些地方相距過高,導致小狗恐懼下樓。所幸,花點時間和耐心,終於我家的小狗學會了99%的下樓了!唯一的1%是某處高度相差較大的一格,這週回去可以帶領牠邁向100%的世界!
週末在莿桐麵攤吃飯,看到了一段慈濟的話語:「不要因過去的雜念,亂了現在的信念。」我覺得,現在的我比較像要反過來思考:「不要因現在的雜念,亂了過去的信念。」實在是,當你發現過去堅強的信念卻很容易地被現況的雜念給大大影響時,心中真的很不是滋味。
呼,希望我也能帶給家人新的希望!加油!
2008年7月14日 星期一
回家
[Python] 第一次實作筆記
- 寫檔
f = file( 'filename.txt' , 'w')
f.write('gy5566')
f.close()
- 讀檔
f = file( 'filename.txt' ) # 預設是 r
data = ''
while True :
line = f.readline()
if( len( line ) == 0 ) :
break
data += line
f.close()
- 取得日期
import time
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()) )
- regular expression
import re
pattern = 'your regular expression'
process = re.compile( pattern , re.DOTALL ) # like '{}s'
# preg_match_all( $pattern , $page_content , $match_data );
match_data = process.findall( page_content )
# preg_replace
new_data = process.sub( 'new' , 'src_data' )
- file_get_contents
import urllib
def file_get_contents( URL ) :
fh = urllib.urlopen( URL )
page_contents = ''
for tmp in fh :
page_contents += tmp
return page_contents
- mail
import smtplib
http://www.eskimo.com/~jet/python/examples/mail/smtp1.html
2008年7月7日 星期一
[VIM] 當上下左右都不正常時
不曉得有沒有人碰到在 vim 的環境中,按了上下左右時,有時反而會使得編輯中的文章多了不預期的英文字母呢?經大神指導後,這個現象除了可在使用 putty 時設定 Terminal->[Keyboard] 的部分來解決外,另一種可能的原因,是因為 vim 去相容 vi 的關係,而原先 vi 上是使用 HJKL 進行左下上右的移動,相對的方向鍵反而是要另外設定對應的囉。
說了那麼多,如果只是在一個暫時的環境中,可以使用以下的指令,要求 vim 不要相容 vi 即可啦,這是適合用在在別人機器上暫時閒晃晃而不是要久留的。
- set nocompatible
另外,偶爾換環境時,程式無可讀性的色碼時,可以用下面指令
- syntax on
我想,這兩個 vim 的指令在其他非屬於個人機器上,算是基本常使用的設定吧。
人生的信念
這樣的感覺,讓我想起了”獵人”漫畫中的酷拉皮卡,他也用著堅定的信念誓約,因此產生強而有力的武器招式,或許,我到現在仍夠站立於人群,也有類似的特質吧?
我覺得一旦喪失信念是很痛苦的事,彷彿人生中從過去至今的努力,完全地泡沫化,當下的心情我可以完全理解為什麼有些人會輕生,真的,在那個空間中,沒有什麼可以打斷,只能說,我很幸運,我選擇阿宅的生活,「重灌電腦」,將時間花費在重灌與整理。
回想起華麗一族的木村,真的,悲傷時請時時提醒自己:「試著看看明天的太陽!」越是堅強的人,越需要看看明日的陽光。那不叫苟且偷生,而是等待時機的蛻變期。
2008年7月2日 星期三
[Windows] Dev-C++ 編譯產生 DLL 檔
這篇主要是用來紀錄自己如何使用 Dev-C++ 結合自己專案狀況,產生 DLL 檔,如果只是想單純將自己開發程式建立 DLL 的話,在此稍微地提示一下:
- 開啟 Dev-C++,建立新專案,選擇 [DLL]
- 預設便產生兩個檔案
- dllmain.c
- dll.h
- 接著,是關於自己開發的程式部分,例如:
- test.h
- void my_hello_world();
- test.c
#include "test.h"
void my_hello_world(){
printf("My Hello World\n");
}
- test.h
- 請參考 dll.h 中的敘述,上頭是將範例的 void HelloWorld (void); 輸出至 DLL
- 仿照 dll.h 中的定義,依樣畫葫,替自己的 header file 加些敘述,從宣告的 function list 裡,將想要輸出至 DLL 的,前頭都加上個 DLLIMPORT 字樣,例如 test.h 改變成:
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
DLLIMPORT my_hello_world()
- 仿照 dll.h 中的定義,依樣畫葫,替自己的 header file 加些敘述,從宣告的 function list 裡,將想要輸出至 DLL 的,前頭都加上個 DLLIMPORT 字樣,例如 test.h 改變成:
- 最後,則是編譯產生 DLL 檔
- 別忘了在 dllmain.c 中,include 自己的 header file 啦
- 編譯無誤後,在專案下會產生 *.def 檔案,裡頭會顯示已經被 export 至 dll 的 function list ,可用來查看是否成功啦!
以下,是我自己專案的筆記。
前陣子在 FreeBSD 上利用 C 語言開發一些程式,隨時面臨到 porting 至 Windows 的問題,所以,最後我選擇使用 Dev-C++ 來進行 porting ,甚至到最後我反而變成在 Windows 上開發,然後在移到 FreeBSD 執行。不斷地在 Windows 和 FreeBSD 之間游走,常常就會需要 Makefile 和 *.dev 的協助,再搭配 #define 的方式,慢慢生得出共用的程式啦。最後,在 Windows 上使用 *.dev 編譯,在 FreeBSD 上則直接使用 make with Makefile 啦。
拉回主題,前陣子雖然產生了 static library ,但學長很習慣 Microsoft Visual Studio 環境,所以,便考慮生成 DLL 檔囉,經過幾番測試,碰巧讓我發現方法,記錄一下 :D
- 開啟 Dev-C++ ,建立新專案,選擇 [DLL]
- 接著預設有兩個檔案可供參考
- dll.h
- dllmain.c
- 如果你是要重新撰寫程式,那可以照著 dll.h 的宣告方式,在你想要製成 DLL 的 function 前加上 DLLIMPORT 囉,等至程式寫完後,即可編譯生成 dll 檔,並且產生 *.def ,可用來查看函數列表。
- 由於我的目錄是將已開發好的程式,進行產生 dll 檔案,因此,僅需保留與稍作修改dllmain.c,並將所有要建成 dll 使用到相關的 header file 和 src code 都加入此專案,並且 include 所有使用到的 header file 到 dllmain.c 中。在此,我恰好使用了一個 base.h 來代替 dll.h 檔,用來管理所有的 header file 。
- 在第四點的條件下,我可以在 base.h 中加工一下
- 仿照 dll.h ,由於我的程式有分 FreeBSD 和 Windows 的環境,所以我使用 _WORK_FOR_WIN32_ 的資訊,讓我選擇要用 Windows 的 code 還是 Unix 的 code。以下的敘述是說,如果我編譯時下了 -D_EXPORT_DLL_ 和 -DBUILDING_DLL=1 ,那就會建立出 DLL 檔囉!
#ifdef _EXPORT_DLL_
#define _WORK_FOR_WIN32_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
#else
# define DLLIMPORT
#endif
-
- 將所有 header file 中所有的 function,其前面皆加上 DLLIMPORT
- 原先叫 void haha( int hehe );
- 修改成 DLLIMPORT void haha( int hehe );
- 稍微解說一下,由於我的程式分為 Windows 和 FreeBSD 版本,因此,當沒有 define _EXPORT_DLL_ 時,代表正在 FreeBSD 環境,因此,我反而將DLLIMPORT 定義成空的,這樣就不會影響在 FreeBSD 的編譯囉!透過上述的步驟,就可使用 Dev-C++ 建立 DLL 檔囉!
這次發現編法,主要是先 Google 一些 keyword 後,發現有人在討論如何使用 Dev-C++ 將 cgicc 編譯成 DLL 檔,雖然上頭沒說什麼東西,但後來在 cgicc 的 header file 中翻到 EXPORT 等關鍵字,才發現原來就跟 dll.h 差不了多少嘛,茅塞頓開,馬上就解決問題啦!原先呆呆的,以為只要將 code 加入專案就能搞定,囧。