八月 27, 2010
» c ch0513

程式的執行單位 - 回傳指向結構的指標2 範例程式碼及編譯執行 #include <stdio.h> #include <stdlib.h> #include <time.h> struct my_tm { int year; // 現在年份 int month; // 月份 int day; // 日期 int hour; // 二十四小時制的時 int isam; // 上午為非 0 值,下午為 0 int hourt; // 十二小時制的時 int min; // 分 int sec; // 秒 }; typedef struct my_tm My_Time; My_Time *myTimeS4(time_t seconds); int main(void) { time_t


» c ch0512

程式的執行單位 - 回傳指向結構的指標1 範例程式碼及編譯執行 #include <stdio.h> #include <stdlib.h> #include <time.h> struct my_tm { int year; // 現在年份 int month; // 月份 int day; // 日期 int hour; // 二十四小時制的時 int isam; // 上午為非 0 值,下午為 0 int hourt; // 十二小時制的時 int min; // 分 int sec; // 秒 }; typedef struct my_tm My_Time; My_Time *myTimeS3(time_t seconds); int *test(void); int main(


» c ch0511

程式的執行單位 - 回傳指向結構的指標 標準函數庫 time.h 的函數 localtime() 回傳指向結構 tm 的指標,這給了我們一個函數設計的新想法,我們能否直接在處理時間的函數回傳指向結構 my_tm 的指標,使函數間的傳遞不是基本資料型態就是指標,而不用拷貝整個結構浪費記憶體空間呢? 基於這個新想法,我們設計以下的函數原型 My_Time *myTimeS3(time_t seconds); 函數 myTimeS3() 仍是需要 time() 回傳的秒數值當作參數,而函數名稱前的星號 * ,表示 myTimeS3() 回傳的是指標,所以型號前需要註明什麼型態的指標。 定義如下 My_Time *myTimeS3(time_t seconds) { struct tm *tmPtr = localtime(&seconds); My_Time mt


» c ch0510

程式的執行單位 - 處理時間的函數2 範例程式碼及編譯執行 #include <stdio.h> #include <time.h> struct my_tm { int year; // 現在年份 int month; // 月份 int day; // 日期 int hour; // 二十四小時制的時 int isam; // 上午為非 0 值,下午為 0 int hourt; // 十二小時制的時 int min; // 分 int sec; // 秒 }; typedef struct my_tm My_Time; void myTimeS2(My_Time *nowPtr); int main(void) { My_Time now; myTimeS2(&now);


» c ch0509

程式的執行單位 - 處理時間的函數1 範例程式碼及編譯執行 #include <stdio.h> #include <time.h> struct my_tm { int year; // 現在年份 int month; // 月份 int day; // 日期 int hour; // 二十四小時制的時 int isam; // 上午為非 0 值,下午為 0 int hourt; // 十二小時制的時 int min; // 分 int sec; // 秒 }; typedef struct my_tm My_Time; My_Time myTimeS(time_t seconds); int main(void) { time_t seconds = time(NULL);


» c ch0508

程式的執行單位 - 處理時間的函數 我們之前把處理時間的工作全部放在函數 printtime() 中,因此從標準函數庫的 time.h 中 time() 取得秒數值,或是由 localtime() 得到結構 tm 的指標,與我們自行定義的結構 my_tm ,這些全都在 printtime() 中完成。 可是有時候呼叫端,也就是需要呼叫 printtime() 處理時間的函數,有時候也會需要以上這些數值,例如累計程式執行時間,那麼在程式開始執行時就需要呼叫一次 time() ,程式結束前另外呼叫一次 time() ,然後把兩次的秒數值相減,就會得到程式執行的總秒數。 如果我們需要在程式不同的地方顯示時間,而非每次都空兩行,印出時間訊息,然後再空兩行的固定格式,那我們就需要一個結構 my_tm 的變數來操作,這時候如果只有 printtime() 就不會很實用。


» c ch0507

程式的執行單位 - 氣泡排序的函數版本 範例程式碼及編譯執行 #include <stdio.h> #include <string.h> void nprintArray(int array[], int size); void cprintArray(char array[], int size); void sprintArray(char array[][10], int size); void nsort(int array[], int size); void csort(char array[], int size); void ssort(char array[][10], int size); int main(void) { int testa[10] = {3, 2, 8, 1, 9, 4, 7, 6, 5, 0}; char testb


» c ch0506

程式的執行單位 - 氣泡排序的函數版本 利用氣泡排序法排列陣列元素,我們在登入程式利用兩個 for 迴圈 // sort 為排序指令 if (!strcmp(instruction, "sort")) { for (j = 1; j < SIZE - 1; j++) { for (k = 2; k < SIZE; k++) { if (userID[k - 1][0] > userID[k][0]) { strcpy(


» c ch0505

程式的執行單位 - 線性搜尋的函數版本 範例程式碼及編譯執行 #include <stdio.h> #include <string.h> int nsearch(int array[], int size, int target); int csearch(char array[], int size, char target); int ssearch(char array[][10], int size, char *target); int main(void) { int testa[10] = {3, 2, 8, 1, 9, 4, 7, 6, 5, 0}; char testb[10] = {'d', 't', '7', '#', 'c', 'q', 'n', ' ', 'o', 'v'}; char testc[10][10] = {"


» c ch0504

程式的執行單位 - 線性搜尋的函數版本 在陣列中搜尋元素,在登入程式用的是一個 for 迴圈 for (j = 0;j < SIZE; j++) { if (!strcmp(userID[j], searchname)) { state = Y; break; } } 依陣列的索引,依序比對每個元素是否與搜尋目標相同,如果找到就把變數 state 設成 Y ,然後用 break 陳述跳出迴圈,迴圈變數 j


» c ch0503

程式的執行單位 - 數字對調 先來想想如何進行兩個變數的數字對調,我們其實在氣泡排序法已經用過了。例如以下假設 a 、 b 、 temp 都是整數變數,然後將 a 與 b 所儲存的值對調 temp = a; a = b; b = temp; 簡單說,就是先把變數 a 的值暫存到 temp ,然後將 b 的值存到 a 之中,最後再將 temp 的值回存到 b 之中。 那要怎麼把這個功能寫成函數呢?直接照上面的方式寫可以嗎? #include <stdio.h> void swap(int n1, int n2); int main(void) { int a = 3; int b = 5; printf("a = %d, b = %d\n", a, b); swap(a, b); printf("呼叫 swap() 之後, a


» c ch0502

程式的執行單位 - 四則運算器的函數版本 四則運算器可以分成兩個部份,其一是與使用者互動的介面,另一個則是單純的計算部份。我們之前把兩個部份混在一起,選擇計算子後直接顯示計算結果,其實計算部份可以單獨的抽離出來變成獨立的函數,使這個函數純粹做計算的工作,然後把結果顯示交給與使用者互動的部份。 因此,我們定義函數 calculator() ,接收三個參數,依序是第一個參數為整數型態的運算元,第二個字元型態的運算子,第三個也是整數型態的運算元。函數原型如下 int calculator(int a, char opt, int b); // 回傳四則運算的結果 函數定義如下 // 以下函數回傳四則運算的結果 int calculator(int a, char opt, int b) { switch (opt) { case '+':


» c ch0501

程式的執行單位 - 印出提示訊息與顯示現在時間 沒有回傳值的函數需要須告為 void ,其為關鍵字之一。沒有參數的函數,參數列也需要宣告為 void 。若是回傳值及參數列都宣告為 void ,那麼這個函數就是負責執行一些與呼叫函數不需要互動的功能。 我們在不久後的將來就會開始規劃通訊錄程式,其中會提供使用者操作的提示訊息,類似我們常用的下拉式選單,使用者輸入數字就能開啟相對應的功能。以下程式把印出提示訊息的功能全部集中在函數 printPrompt() 中,程式所有的工作就是呼叫一次 printPrompt() #include <stdio.h> void printPrompt(void); int main(void) { printPrompt(); return 0; } void printPrompt(void) { printf("\


» c ch0500

程式的執行單位 函數是 C 程式的執行單位, C 程式的執行也就是作業系統呼叫程式的函數 main() 。個別的 C 程式對作業系統而言,像是個別的功能模組,事實上,我們也可以定義相對於單一 C 程式函數 main()的功能模組,也就是自行定義其他的函數。 我們已經用過很多標準函數庫中的函數,現在來看如何自行自訂函數吧!函數的定義格式如下 函數也可以先做函數原型的宣告,這樣一來,函數定義可以放在函數 main() 的定義之後,不然,沒有先宣告函數原型,函數定義必須放在函數 main() 的定義之前 函數原型的參數列只需要宣告參數的型態,參數的名稱不是必須的,編譯器只會檢查函數原型參數列型態的數量及順序,是否與函數定義相符,若不相同的話,編譯時會發生錯誤。 C 語言的函數規定只能有一個回傳值,參數卻可以有多個,數量上沒有限制,通常我們會依需要適當的規劃參數數量,



marr's weblog
marrtw
marr weblog is about »

tag cloud

» Plone 4 Way to Get Icon

昇級 Plone 4 的過程,發現有些 content type icon 沒有顯示,在 log 裡找到線索:

WARNING Plone Deprecation Warning
The icon for the 'controlpanel/DropdownConfiguration' action
was obtained from the action icons tool.
The action icons tool has been deprecated
and will be removed in Plone 5.
You should register action icons directly on the action now,
using the 'icon_expr' setting.
繼續追查後,原來 icon 存取方式已經改變,在 CMF 2.2.0-alpha 正式引入新的方式,而 Plone 4 使用 CMF 2.2.0 版本,自然也受到影響。如果到 ZMI 裡的 portal_actionicons 查看比較,會發現大有不同。

八月 26, 2010

Thinker
heaven.branda
Thinker
» Adapt C code for Javascript

如預期的 Javascript 在藍星上的重要性與日俱增,尤其是過去兩年, Javascript Engine 的效能大幅改善,使 Javascript 的適用性已經遍佈軟體世界的各個角落。有詩為證 {{{ Javascript 日出海面的金龍,上蒼穹,下陰曹。 肯伯特女媧,引其血,破其骨,造 kernel。 }}} 話說造物女神解除 Javascript 的效能禁咒之後,Javascript 四處流竄。然而大地上的勇者,還不知如何馴服這頭神獸,阻止其強大的破壞能量。幸有神人指出,唯有上古神器吸迂涎(C language),能安撫神獸,使之安定在數位大陸,與母體連結,為大陸的人民提供無窮的能量。然而吸迂涎極為無形,入杯為杯,入瓶為瓶,形體不定,難以捉摸,又極為危險。世界的勇者們,多避免駕用這種禁忌物質。更何況用之對付 ...

» OpenVG for Linux/FreeBSD with X

如果你需要測試 OpenVG + EGL,目前在 Linux/FreeBSD Desktop 大概只能用 Mesa,然而 Mesa 有點複雜,又只支援到 OpenVG 1.0 的 API 。如果你需要 OpenVG 1.1,可以使用 Khronos 網站所提供的 reference design。但該份 implementation 只支援 Mac OS X 和 Windows,不幸! 由是我花了一點時間,將之 porting 到 FreeBSD 上,能在 X 環境下執行。理論上這個 porting 應該也能在 Linux 上執行,但 makefile 可能要更改一下。現有的 makefile ...

八月 22, 2010

marr's weblog
marrtw
marr weblog is about »

tag cloud

» Ploneboard 2.1 with Plone 3.3.5

雖然 Plone 4.0 近期就要正式問世,最近還是先搭配 Plone 3.3.5 安裝了 Ploneboard 2.1b2。執行 buildout 安裝過程沒問題,但在 quick install 過程遇到 AttributeError: portal_placeful_workflow 的錯誤訊息,原因在於 CMFPlacefulWorkflow 是它的相依模組,但沒有自動隨之啟用,解決方法很簡單,就是手動先把 CMFPlacefulWorkflow 啟用,再啟用 Ploneboard 就行,這個動作也會順便把 SimpleAttachment 啟用。正式的解法已寫成 trunk,訊息翻譯的成果也要放在這裡。

選擇想要新增討論區的目錄,以首頁為例,從新增項目的下拉選單找到 Message Board。

設定討論區的基本資料,包括標題、摘要描述、分類關鍵詞等。

討論區的基本樣貌已經具備,接著,點選 Add Forum 就可新增討論板。

設定討論板的資料,包括標題、摘要描述、分類關鍵詞、附件檔案最大數量等。

討論板的預設狀態是 Requite membership to post,表示註冊會員在登入系統後才能張貼討論文章,新的討論主題稱為 conversation。

設定討論主題的資料,包括標題、內文、附件檔案等。

» IBM R60e 上的 Ubuntu 10.04 透過 HTC wildfire 上網

我的 R60e 在裝了 Ubuntu 8.04 或是 Ubuntu 9.04 之後,無線網路的運作一直很奇怪,在開啟無線網卡後,訊號十分不穩定,用 ping 來測試,往往時間都會超過 500ms 。一直到現在的 Ubuntu 10.04 都是一樣的,無線網路能連但是不能用。嘗試了很多方法,都沒效果,再加上我家有一段時間是沒有 AP 的,要到學校研究室才會遇到這個問題,而往往我都是用"有線網路"來解決這個無線網路的效能問題,所以也就沒有認真地想把這個問題解決。

一直到我買了一支 HTC wildfire 後,因為對 3G 無線上網的需求實在不高,我大部份時間都待在家,所以就弄了台 AP 擺在家裡。 wildfire 使用無線網路當然是非常順暢地,要不然宏達電不會躍升為全球第八大的手機商。既然 wildfire 上網很順,我想不如就把它的網路分享給 R60e 用吧!

為此,我找了個周日,打算好好地研究一番。想說這種分享方法,原則上應該會在 Ubuntu 上生成一種 usb 裝置,然後我再找出它設定方式就解決了。

結果,我只是用 usb 線把 wildfire 跟 R60e 接起來後,在 wildfire 上選擇「網際網路分享」,它就能用。

它就能用了耶!

» Joueuse

PA260377.JPG
Seattle.US

什麼時候人類才可以有雙翅膀呢?

****
法文片。在法文嚴重退化下,只能看看畫面猜猜劇情,再抓一點聽得懂的字來補充一下。





REF:
IMDB link

A Feedjack powered Planet
A Django site.