(TCP/IP 網路教學)
http://www.pcnet.idv.tw/
(DHCP 協定)
http://www.pcnet.idv.tw/pcnet/network/network_ip_dhcp.htm
2009年12月19日 星期六
2009年12月15日 星期二
Cross-Browser Web Application testing
(part1)
[ IBM> * developerWorks > * Web development > * Technical library >]
(Cross-browser Web application testing made easy)
http://www.ibm.com/developerworks/web/library/wa-crossbrowser/?S_CMP=cn-a-wa&S_TACT=105AGX52
(part2)
[comes from the below link: "http://www.minwt.com/?p=1286"]
http://www.minwt.com/?p=1286
~[PC]網頁設計小幫手免安裝瀏覽器大集合~

...來分享個好東西,先前也曾分享過類似的工具,但像IE的部分,就時常會出現問題,因此xx花一些時間,找到了更優的免安裝瀏覽器,且經xx測試許久後,即時在Win7 也可正常用的啟用IE6等版本,雖然它很方便,但建議各位,拿來作測試用就好,穩定度當然還是安裝版會比較優些,所以有這些免安裝版後,讓電腦不用再裝一大堆的瀏覽器。
(part3)
[Browsershots makes screenshots of your web design in different browsers]
http://browsershots.org/
Browsershots makes screenshots of your web design in different browsers. It is a free open-source online service created by Johann C. Rocholl. When you submit your web address, it will be added to the job queue. A number of distributed computers will open your website in their browser. Then they will make screenshots and upload them to the central server here.
[ IBM> * developerWorks > * Web development > * Technical library >]
(Cross-browser Web application testing made easy)
http://www.ibm.com/developerworks/web/library/wa-crossbrowser/?S_CMP=cn-a-wa&S_TACT=105AGX52
(part2)
[comes from the below link: "http://www.minwt.com/?p=1286"]
http://www.minwt.com/?p=1286
~[PC]網頁設計小幫手免安裝瀏覽器大集合~

...來分享個好東西,先前也曾分享過類似的工具,但像IE的部分,就時常會出現問題,因此xx花一些時間,找到了更優的免安裝瀏覽器,且經xx測試許久後,即時在Win7 也可正常用的啟用IE6等版本,雖然它很方便,但建議各位,拿來作測試用就好,穩定度當然還是安裝版會比較優些,所以有這些免安裝版後,讓電腦不用再裝一大堆的瀏覽器。
(part3)
[Browsershots makes screenshots of your web design in different browsers]
http://browsershots.org/
Browsershots makes screenshots of your web design in different browsers. It is a free open-source online service created by Johann C. Rocholl. When you submit your web address, it will be added to the job queue. A number of distributed computers will open your website in their browser. Then they will make screenshots and upload them to the central server here.
2009年12月5日 星期六
Tutorial for XML
(MSDN, Data Developer Center -> Learn -> XML)
http://msdn.microsoft.com/en-us/data/bb190600.aspx
http://msdn.microsoft.com/en-us/data/bb190600.aspx
2009年12月3日 星期四
Tutorial for AJAX
Asynchronous JavaScript + XML(Ajax)無疑是 2006 年最熱門的技術術語,且有望在 2007 得到進一步發展。但是對您的應用程式來說它究竟有什麼意義呢?Ajax 應用程式中哪一種常見架構模式應用最廣泛呢?本文將介紹五種常見 Ajax 設計模式,可以使用它們作為工作的基礎。
的確,Ajax 是 Web 2.0 熱門術語,所有人都希望將其應用於自己的站點。但是它對我們究竟有什麼意義?工程師該如何在架構的層面上將其集成到自己的站點中?在這篇文章中,我將介紹 Ajax 的基本知識,並展示一些已經成為 Web 2.0 開發最佳實踐的 Ajax 設計模式。
首先,Ajax 僅僅是一個涉及一組技術的術語,包括 Dynamic HTML(DHTML)和 XMLHTTPRequest 對象。DHTML 由三個元素組合而成,它們分別是超文本標記語言(Hypertext Markup Language,HTML)、JavaScript 代碼和級聯樣式表(Cascading Style Sheet,CSS)。在 Web 頁面使用 JavaScript 代碼,可以動態地改變頁面,包括添加、刪除或更改頁面內容。這就是 DHTML 的動態 部分。JavaScript 代碼使用 XMLHTTPRequest 物件在載入頁面後向伺服器請求資料。
這兩種元素的組合 —— 從伺服器動態請求資料然後使用這些資料更改頁面 —— 就是 Ajax 的本質,也是 Web 2.0 站點的動態特性。
在一般的 Web 應用程式中,用戶填寫表單字段並單擊 Submit 按鈕。然後整個表單發送到伺服器,伺服器將它轉發給處理表單的腳本(通常是 PHP 或 Java,也可能是 CGI 進程或者類似的東西),腳本執行完成後再發送回全新的頁面。該頁面可能是帶有已經填充某些資料的新表單的 HTML,也可能是確認頁面,或者是具有根據原來表單中輸入資料選擇的某些選項的頁面。當然,在伺服器上的腳本或程式處理和返回新表單時用戶必須等待。屏幕變成一片空白,等到伺服器返回資料後再重新繪製。這就是交互性差的原因,用戶得不到立即回饋,因此感覺不同于桌面應用程式。
Ajax 基本上就是把 JavaScript 技術和 XMLHttpRequest 物件放在 Web 表單和伺服器之間。當用戶填寫表單時,資料發送給一些 JavaScript 代碼而不是直接發送給伺服器。
接著, JavaScript 代碼捕獲表單數據並向伺服器發送請求。同時用戶螢幕上的表單也不會閃爍、消失或延遲。換句話說,JavaScript 代碼在幕後發送請求,用戶甚至不知道請求的發出。
更好的是,請求是非同步發送的,就是說 JavaScript 代碼(和用戶)不用等待伺服器的回應。因此用戶可以繼續輸入資料、滾動螢幕和使用應用程式。
然後,伺服器 將資料返回 JavaScript 代碼(仍然在 Web 表單中),後者決定如何處理這些資料。它可以迅速更新表單數據,讓人感覺應用程式是立即完成的,表單沒有提交或刷新而用戶得到了新資料。 JavaScript 代碼甚至可以對收到的資料執行某種計算,再發送另一個請求,完全不需要用戶干預!這就是 XMLHttpRequest 的強大之處。它可以根據需要自行與伺服器進行交互,用戶甚至可以完全不知道幕後發生的一切。結果就是類似于桌面應用程式的動態、快速回應、高交互性的體驗,但是背後又擁有互聯網的全部強大力量。
(JavaScript 入門)
http://web.nchu.edu.tw/~jlu/classes/www/examples/javascript/javascript.html
(JAVASCRIPT 線上教學)
http://wellsli.com/htm/js/index.htm
(AJAX 入門)
http://web.nchu.edu.tw/~jlu/classes/xml/ajax/ajax.shtml
(AJAX 上手篇)
http://wiki.moztw.org/index.php/AJAX_上手篇
(Ajax)
https://developer.mozilla.org/en/AJAX
(AJAX 上手篇, 英文版)
https://developer.mozilla.org/en/AJAX/Getting_Started
(Using XMLHttpRequest)
https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest
(jQuery Ajax)
http://webdesign.piipo.com/jquery/jquery_ajax
(AJAX 教學大合集)
http://chiahu.com/blog/?p=220
(42 Recent AJAX Tutorials)
http://www.maxkiesler.com/2006/07/04/42-recent-ajax-tutorials/
(AJAX 上手篇)
http://wiki.moztw.org/index.php/AJAX_%E4%B8%8A%E6%89%8B%E7%AF%87
(Ajax內部交流文檔)
http://www.dragonson.com/doc/ajax.html
(非常重要的參考來源: Ajax 技術資源中心)
http://www-128.ibm.com/developerworks/cn/xml/ajax/
(非常重要的參考來源: Ajax 資源中心, IBM/中國)
http://www.ibm.com/developerworks/cn/ajax/newto.html?S_TACT=105AGX52&S_CMP=content#N102BF
(非常重要的參考來源: 掌握 Ajax 系列, IBM/中國)
http://www.ibm.com/developerworks/cn/web/wa-ajaxintro/
AJAX深度歷險1(Getting Started)
http://blog.xuite.net/jameschih/ ... mp;p=1&w=262779
Ajax內部交流文檔
http://www.dragonson.com/doc/ajax.html
Ajax 技術資源中心
http://www-128.ibm.com/developerworks/cn/xml/ajax/
AJAX - Asynchronous Javascript And Xml
http://www.xul.fr/en-xml-ajax.html
(AJAX - Asynchronous javascript And Xml)
http://www.xul.fr/en-xml-ajax.html
http://www.maxkiesler.com/2006/07/04/42-recent-ajax-tutorials/
================================================
AJAX 算是一種技術,技術攙雜愈多只會讓網頁愈來愈複雜。
入門是瞭解 AJAX 的運作原理用,事實上,在開發時,建議挑選一種 AJAX framework (用 google 搜一下)開發。
這類 AJAX framework 大都幫你做好跨 browser 工作,否則自己寫可能要寫死。
的確,Ajax 是 Web 2.0 熱門術語,所有人都希望將其應用於自己的站點。但是它對我們究竟有什麼意義?工程師該如何在架構的層面上將其集成到自己的站點中?在這篇文章中,我將介紹 Ajax 的基本知識,並展示一些已經成為 Web 2.0 開發最佳實踐的 Ajax 設計模式。
首先,Ajax 僅僅是一個涉及一組技術的術語,包括 Dynamic HTML(DHTML)和 XMLHTTPRequest 對象。DHTML 由三個元素組合而成,它們分別是超文本標記語言(Hypertext Markup Language,HTML)、JavaScript 代碼和級聯樣式表(Cascading Style Sheet,CSS)。在 Web 頁面使用 JavaScript 代碼,可以動態地改變頁面,包括添加、刪除或更改頁面內容。這就是 DHTML 的動態 部分。JavaScript 代碼使用 XMLHTTPRequest 物件在載入頁面後向伺服器請求資料。
這兩種元素的組合 —— 從伺服器動態請求資料然後使用這些資料更改頁面 —— 就是 Ajax 的本質,也是 Web 2.0 站點的動態特性。
在一般的 Web 應用程式中,用戶填寫表單字段並單擊 Submit 按鈕。然後整個表單發送到伺服器,伺服器將它轉發給處理表單的腳本(通常是 PHP 或 Java,也可能是 CGI 進程或者類似的東西),腳本執行完成後再發送回全新的頁面。該頁面可能是帶有已經填充某些資料的新表單的 HTML,也可能是確認頁面,或者是具有根據原來表單中輸入資料選擇的某些選項的頁面。當然,在伺服器上的腳本或程式處理和返回新表單時用戶必須等待。屏幕變成一片空白,等到伺服器返回資料後再重新繪製。這就是交互性差的原因,用戶得不到立即回饋,因此感覺不同于桌面應用程式。
Ajax 基本上就是把 JavaScript 技術和 XMLHttpRequest 物件放在 Web 表單和伺服器之間。當用戶填寫表單時,資料發送給一些 JavaScript 代碼而不是直接發送給伺服器。
接著, JavaScript 代碼捕獲表單數據並向伺服器發送請求。同時用戶螢幕上的表單也不會閃爍、消失或延遲。換句話說,JavaScript 代碼在幕後發送請求,用戶甚至不知道請求的發出。
更好的是,請求是非同步發送的,就是說 JavaScript 代碼(和用戶)不用等待伺服器的回應。因此用戶可以繼續輸入資料、滾動螢幕和使用應用程式。
然後,伺服器 將資料返回 JavaScript 代碼(仍然在 Web 表單中),後者決定如何處理這些資料。它可以迅速更新表單數據,讓人感覺應用程式是立即完成的,表單沒有提交或刷新而用戶得到了新資料。 JavaScript 代碼甚至可以對收到的資料執行某種計算,再發送另一個請求,完全不需要用戶干預!這就是 XMLHttpRequest 的強大之處。它可以根據需要自行與伺服器進行交互,用戶甚至可以完全不知道幕後發生的一切。結果就是類似于桌面應用程式的動態、快速回應、高交互性的體驗,但是背後又擁有互聯網的全部強大力量。
(JavaScript 入門)
http://web.nchu.edu.tw/~jlu/classes/www/examples/javascript/javascript.html
(JAVASCRIPT 線上教學)
http://wellsli.com/htm/js/index.htm
(AJAX 入門)
http://web.nchu.edu.tw/~jlu/classes/xml/ajax/ajax.shtml
(AJAX 上手篇)
http://wiki.moztw.org/index.php/AJAX_上手篇
(Ajax)
https://developer.mozilla.org/en/AJAX
(AJAX 上手篇, 英文版)
https://developer.mozilla.org/en/AJAX/Getting_Started
(Using XMLHttpRequest)
https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest
(jQuery Ajax)
http://webdesign.piipo.com/jquery/jquery_ajax
(AJAX 教學大合集)
http://chiahu.com/blog/?p=220
(42 Recent AJAX Tutorials)
http://www.maxkiesler.com/2006/07/04/42-recent-ajax-tutorials/
(AJAX 上手篇)
http://wiki.moztw.org/index.php/AJAX_%E4%B8%8A%E6%89%8B%E7%AF%87
(Ajax內部交流文檔)
http://www.dragonson.com/doc/ajax.html
(非常重要的參考來源: Ajax 技術資源中心)
http://www-128.ibm.com/developerworks/cn/xml/ajax/
(非常重要的參考來源: Ajax 資源中心, IBM/中國)
http://www.ibm.com/developerworks/cn/ajax/newto.html?S_TACT=105AGX52&S_CMP=content#N102BF
(非常重要的參考來源: 掌握 Ajax 系列, IBM/中國)
http://www.ibm.com/developerworks/cn/web/wa-ajaxintro/
AJAX深度歷險1(Getting Started)
http://blog.xuite.net/jameschih/ ... mp;p=1&w=262779
Ajax內部交流文檔
http://www.dragonson.com/doc/ajax.html
Ajax 技術資源中心
http://www-128.ibm.com/developerworks/cn/xml/ajax/
AJAX - Asynchronous Javascript And Xml
http://www.xul.fr/en-xml-ajax.html
(AJAX - Asynchronous javascript And Xml)
http://www.xul.fr/en-xml-ajax.html
http://www.maxkiesler.com/2006/07/04/42-recent-ajax-tutorials/
================================================
AJAX 算是一種技術,技術攙雜愈多只會讓網頁愈來愈複雜。
入門是瞭解 AJAX 的運作原理用,事實上,在開發時,建議挑選一種 AJAX framework (用 google 搜一下)開發。
這類 AJAX framework 大都幫你做好跨 browser 工作,否則自己寫可能要寫死。
Web 2.0 一瞥?!
(資料參考, 來自於: "http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro2/", 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 發出非同步請求, [IBM/中國])
在深入研究代碼之前, 首先看看最近的觀點 —— 務必要十分清楚 Web 2.0 這個概念。
聽到 Web 2.0 這個詞的時候,應該首先問一問 “Web 1.0 是什麼?” 雖然很少聽人提到 Web 1.0,實際上它指的就是具有完全不同的請求和回應模型的傳統 Web。比如,到 Amazon.com 網站上點擊一個按鈕或者輸入搜索項。就會對伺服器發送一個請求,然後回應再返回到流覽器。該請求不僅僅是圖書和書目列表,而是另一個完整的 HTML 頁面。因此當 Web 流覽器用新的 HTML 頁面重繪時,可能會看到閃爍或抖動。事實上,通過看到的每個新頁面可以清晰地看到請求和回應。
Web 2.0(在很大程度上)消除了這種看得見的往復交互。比如訪問 Google Maps 或 Flickr 這樣的站點(到這些支持 Web 2.0 和 Ajax 站點的鏈結請參閱 參考資料)。比如在 Google Maps 上,您可以拖動地圖,放大和縮小,只有很少的重繪操作。當然這裏仍然有請求和回應,只不過都藏到了幕後。作為用戶,體驗更加舒適,感覺很像桌面應用程式。這種新的感受和範型就是當有人提到 Web 2.0 時您所體會到的。
需要關心的是如何使這些新的交互成為可能。顯然,仍然需要發出請求和接收回應,但正是針對每次請求/回應交互的 HTML 重繪造成了緩慢、笨拙的 Web 交互的感受。因此很清楚,我們需要一種方法使發送的請求和接收的回應只 包含需要的資料而不是整個 HTML 頁面。惟一需要獲得整個新 HTML 頁面的時候就是希望用戶看到 新頁面的時候。
但多數交互都是在已有頁面上增加細節、修改主體文本或者覆蓋原有資料。這些情況下,Ajax 和 Web 2.0 方法允許在不 更新整個 HTML 頁面的情況下發送和接收資料。對於那些經常上網的人,這種能力可以讓您的應用程式感覺更快、回應更及時,讓他們不時地光顧您的網站。
隨著 Web 2.0 浪潮的到來,用戶體驗得到了全新的關注。用戶體驗的一部分就是以新穎的方式與用戶交互以及為用戶提供資訊。這些新的介面常常被稱作小部件,它們使用 Asynchronous JavaScript + XML (Ajax) 與伺服器通信。
Web 2.0 強調以獨特、新穎的方式與網站的客戶交互。其中很多創新技術都使用圖形和小部件,它們與伺服器進行通信,獲取用於顯示網頁的資料(ex, 圖檔, 數值..)更新。
在深入研究代碼之前, 首先看看最近的觀點 —— 務必要十分清楚 Web 2.0 這個概念。
聽到 Web 2.0 這個詞的時候,應該首先問一問 “Web 1.0 是什麼?” 雖然很少聽人提到 Web 1.0,實際上它指的就是具有完全不同的請求和回應模型的傳統 Web。比如,到 Amazon.com 網站上點擊一個按鈕或者輸入搜索項。就會對伺服器發送一個請求,然後回應再返回到流覽器。該請求不僅僅是圖書和書目列表,而是另一個完整的 HTML 頁面。因此當 Web 流覽器用新的 HTML 頁面重繪時,可能會看到閃爍或抖動。事實上,通過看到的每個新頁面可以清晰地看到請求和回應。
Web 2.0(在很大程度上)消除了這種看得見的往復交互。比如訪問 Google Maps 或 Flickr 這樣的站點(到這些支持 Web 2.0 和 Ajax 站點的鏈結請參閱 參考資料)。比如在 Google Maps 上,您可以拖動地圖,放大和縮小,只有很少的重繪操作。當然這裏仍然有請求和回應,只不過都藏到了幕後。作為用戶,體驗更加舒適,感覺很像桌面應用程式。這種新的感受和範型就是當有人提到 Web 2.0 時您所體會到的。
需要關心的是如何使這些新的交互成為可能。顯然,仍然需要發出請求和接收回應,但正是針對每次請求/回應交互的 HTML 重繪造成了緩慢、笨拙的 Web 交互的感受。因此很清楚,我們需要一種方法使發送的請求和接收的回應只 包含需要的資料而不是整個 HTML 頁面。惟一需要獲得整個新 HTML 頁面的時候就是希望用戶看到 新頁面的時候。
但多數交互都是在已有頁面上增加細節、修改主體文本或者覆蓋原有資料。這些情況下,Ajax 和 Web 2.0 方法允許在不 更新整個 HTML 頁面的情況下發送和接收資料。對於那些經常上網的人,這種能力可以讓您的應用程式感覺更快、回應更及時,讓他們不時地光顧您的網站。
隨著 Web 2.0 浪潮的到來,用戶體驗得到了全新的關注。用戶體驗的一部分就是以新穎的方式與用戶交互以及為用戶提供資訊。這些新的介面常常被稱作小部件,它們使用 Asynchronous JavaScript + XML (Ajax) 與伺服器通信。
Web 2.0 強調以獨特、新穎的方式與網站的客戶交互。其中很多創新技術都使用圖形和小部件,它們與伺服器進行通信,獲取用於顯示網頁的資料(ex, 圖檔, 數值..)更新。
2009年12月1日 星期二
[Programming C] bit field/ bit-accessing
之前使用過CC5X,裡頭有一個功能非常好用,就是可以針對記憶體(RAM)的位元個別設定,例如
char a
a.0=1; //設定變數a的bit0為1
也可以個別做位元判斷,例如
if(a.0==1)
.....
這對MCU有限的RAM可以有效的利用,但到了MPLAB C18 C Compiler卻無法直接這樣使用,經筆者測試可以透過宣告的方式來使用,例如:
1 typedef struct char
2 {
3 unsigned bit0:1;
4 unsigned bit1:1;
5 unsigned bit2:1;
6 unsigned bit3:1;
7 unsigned bit4:1;
8 unsigned bit5:1;
9 unsigned bit6:1;
10 unsigned bit7:1;
11 }uns8_bits;
12
13 union
14 {
15 uns8_bits t_temp;
16 char char_t_temp;
17 }union_flag;
18
19
20 #define bit_12_pm union_flag.t_temp.bit0
21 #define bit_1sec_action union_flag.t_temp.bit1
22 #define bit_count_sec_begin union_flag.t_temp.bit2
1~11 為結構宣告,並令uns8_bits為新的資料型態
13~17 為共用空間的使用,目的是讓uns8_bits資料型態宣告的資料變數,能與char資料型態其他變數做資料的交換,例如
char a;
a=1;
union_flag.char_t_temp = a; //相當於 union_flag.t_temp.bit0=1 或者 bit_12_pm=1;
20~22 為了簡化輸入一長串英文字母的麻煩,又可讓整個程式看起來簡單明瞭有意義
以上為使用bit的相關設定,希望對各位有幫助!!
////////////////////////////////////
[結構化的資料型態二]
位元欄(Bit Field)是C語言中一個很特別資料型態
2.位元欄
位元欄(Bit Field)是C語言中一個很特別資料型態 ,在很多他之前的語言都沒有,之後的則有抄襲這一個型態的。使用位元欄有很多好處,一、可以節省記憶體空間,布林運算值直接取用,相類似的資料放在同一組字(Word)中,不用一一佔不同字的空間。二、與硬體觀念中的旗標可以輕鬆配合使用。三、有益於與系統硬體,與周邊硬體直接做暫存器位元的傳輸與指定。
好用強大的功能通常都會伴隨著更強大的限制使用與更多的注意事項,底下我們將一一講解位元欄的規則:
位元欄的使用
位元欄是以結構為基礎的資料型態。他的表示方法,在結構元素後面加一個冒號:以及一個正整數的欄位長度。例如下面的範例,我們將看到一個ALU(Arithmetic Logic Unit 計算邏輯處理單元)的相關旗標,每一個旗標都佔一個位元的空間。zero代表某一輸入有零,overflow代表溢位,underflow代表不足位,carryout代表有進位。
struct bitfield
{
unsigned zero:1;
unsigned overflow:1;
unsigned underflow:1;
unsigned carryout:1;
}
位元欄中的資料多半以unsigned型態來宣告,你也可以使用signed或是int的方式來宣告,即使如此一般的編譯器也都換自動將位元欄的資料型態轉換成unsigned的型態。為了程式的相通性,最好還是以unsigned的寫法。
位元欄一樣會佔據適當的記憶體空間,至於佔用的順序,是由表示方法的由上到下,對應到記憶體的高位元到低位元;或者是由低位元到高位元,這必須由系統製造商決定。x86的相容PC與工作站剛好相反。怎麼擺其實不重要,重要的是千萬不要依賴他的順序。
位元欄的大小有沒有限制?有的。一般以一個字為限,一般字都是由兩個位元組所構成,共十六位元。
一起宣告的位元欄,並不一定是連續的記憶體空間。當前面的位元欄使用剩的空間不足以放下這一組位元欄,則這一組位元欄會放在下一組字中,而不會讓該位元欄跨越字。
位元欄沒有相對應的指標型態,所以也無法以陣列表示。
位元欄可以與其他型態的資料共同運算,這時位元欄的資料型態會先轉換成整數型態,以整數為基準再作適當調整。
同一結構中,即使有位元欄還是可以有其他的資料型態。
要瞭解一個東西有多好用,就是拿起來用用看就知道。底下我們看一個簡單的例子,這一個程式模擬兩個數做加法的動作(參看邏輯設計與Verilog寫作手冊)。
/*
Bitwise addition . Action as 8-bits a ripple adder
bitadd.c
*/
#include
#include
main()
{
int i, j, k;
struct unit
{
unsigned a0:1;
unsigned a1:1;
unsigned a2:1;
unsigned a3:1;
unsigned a4:1;
unsigned a5:1;
unsigned a6:1;
unsigned a7:1;
}input1, input2, sum;
printf ("Please input addend and augend ranged from 1 ~ 255\n");
printf ("First, input addend = ");
scanf ("%d", &i);
while(i<0> pow(2.0, 8.0))
{
printf ("Wrong input value range. Again, input addend = ");
scanf ("%d", &i);
}
input1.a0=i%2;k=(i-input1.a0)/2;
input1.a1=k%2;k=(k-input1.a1)/2;
input1.a2=k%2;k=(k-input1.a2)/2;
input1.a3=k%2;k=(k-input1.a3)/2;
input1.a4=k%2;k=(k-input1.a4)/2;
input1.a5=k%2;k=(k-input1.a5)/2;
input1.a6=k%2;k=(k-input1.a6)/2;
input1.a7=k%2;k=(k-input1.a7)/2;
printf("%3d --> %d%d%d%d%d%d%d%d\n", i, input1.a7, input1.a6, input1.a5 \
, input1.a4, input1.a3, input1.a2, input1.a1, input1.a0);
j=i;
printf ("Second, input augend = ");
scanf ("%d", &i);
while(i<0> pow(2.0, 8.0))
{
printf ("Wrong input value range. Again, input addend = ");
scanf ("%d", &i);
}
input2.a0=i%2;k=(i-input2.a0)/2;
input2.a1=k%2;k=(k-input2.a1)/2;
input2.a2=k%2;k=(k-input2.a2)/2;
input2.a3=k%2;k=(k-input2.a3)/2;
input2.a4=k%2;k=(k-input2.a4)/2;
input2.a5=k%2;k=(k-input2.a5)/2;
input2.a6=k%2;k=(k-input2.a6)/2;
input2.a7=k%2;k=(k-input2.a7)/2;
printf("%3d --> %d%d%d%d%d%d%d%d\n", i, input2.a7, input2.a6, input2.a5 \
, input2.a4, input2.a3, input2.a2, input2.a1, input2.a0);
/* addition */
sum.a0=input1.a0^input2.a0^0;k=input1.a0&input2.a0;
sum.a1=input1.a1^input2.a1^k;k=(input1.a1&input2.a1)|(k&input1.a1)|(k&input2.a1);
sum.a2=input1.a2^input2.a2^k;k=(input1.a2&input2.a2)|(k&input1.a2)|(k&input2.a2);
sum.a3=input1.a3^input2.a3^k;k=(input1.a3&input2.a3)|(k&input1.a3)|(k&input2.a3);
sum.a4=input1.a4^input2.a4^k;k=(input1.a4&input2.a4)|(k&input1.a4)|(k&input2.a4);
sum.a5=input1.a5^input2.a5^k;k=(input1.a5&input2.a5)|(k&input1.a5)|(k&input2.a5);
sum.a6=input1.a6^input2.a6^k;k=(input1.a6&input2.a6)|(k&input1.a6)|(k&input2.a6);
sum.a7=input1.a7^input2.a7^k;k=(input1.a7&input2.a7)|(k&input1.a7)|(k&input2.a7);
printf("%3d --> %d%d%d%d%d%d%d%d\tcarry =%d\n", i+j, sum.a7, sum.a6, sum.a5\
, sum.a4, sum.a3, sum.a2, sum.a1, sum.a0, k);
}
程式執行結果如下
Please input addend and augend ranged from 1 ~ 255
First, input addend = 127
127 --> 01111111
Second, input augend = 100
100 --> 01100100
227 --> 11100011 carry =0
Please input addend and augend ranged from 1 ~ 255
First, input addend = 200
200 --> 11001000
Second, input augend = 223
223 --> 11011111
423 --> 10100111 carry =1
3.共用
共用(Union)型態可以讓多種不同型態的變數共用同樣的記憶體空間。使用方法如下
union name
{
datatype name1;
....
datatype namen;
}
n個元素共用同樣的記憶體空間,記憶體空間的大小由佔空間最大的資料型態決定。他的型態與結構相同,所以結構有的他都有。他有:一、有指標。二、每一個元素都可以使用,但是同一時間只有一個是有效的。三、共用型態內的資料型態,每一種你學過的都可以用。
底下來一個例子看看,怎樣利用這一個結構來取出字元的二進位值。
/*
transfer the char to binary form
union.c
*/
#include
#include
main()
{
char c;
struct unit
{
unsigned a0:1;
unsigned a1:1;
unsigned a2:1;
unsigned a3:1;
unsigned a4:1;
unsigned a5:1;
unsigned a6:1;
unsigned a7:1;
};
union bits
{
char word;
struct unit bit;
}digit;
printf ("Please input a character = ");
c= getchar();
while(!isalpha(c))
{
fflush(stdin); /* clean Standard input buffer */
printf ("Wrong input value range. Again, character = ");
c=getchar();
}
digit.word=c;
printf("\n%c=%3d --> %d%d%d%d%d%d%d%d\n", c, c,digit.bit.a7, digit.bit.a6,\
digit.bit.a5, digit.bit.a4, digit.bit.a3, digit.bit.a2, \
digit.bit.a1, digit.bit.a0);
}
程式執行結果如下
Wrong input value range. Again, character = 9
Wrong input value range. Again, character = 0
Wrong input value range. Again, character = =
Wrong input value range. Again, character = -
Wrong input value range. Again, character = f
f=102 --> 01100110
////////////////////////////////////
[How to initial bit-field for the data-type declaration..]
Especially checking for color[8] array
struct
{
unsigned char red :1;
unsigned char orange :1;
unsigned char yellow :1;
unsigned char green :1;
unsigned char blue :1;
unsigned char violett :1;
}color[8]={
1,0,1,0,1,0,
0,1,0,1,0,1,
0,0,0,0,0,0,
0,0,0,0,0,0,
1,1,1,1,1,1,
1,1,1,1,1,1,
};
//***************************************************************************
int main (void)
{
//***************************************************************************
unsigned int i;
PLL_init();
RS232_init(115200);
printf("Bitfield array in C\n");
for(i=0;i<8;i++)
{
color[i].orange = ~color[i].red;//"~" or "!" which i correct?
color[i].yellow = !color[i].red;
}
for(i=0;i<8;i++)
{
printf("%u ",color[i].red);
printf("%u ",color[i].orange);
printf("%u ",color[i].yellow);
printf("%u ",color[i].green);
printf("%u ",color[i].blue);
printf("%u ",color[i].violett);
printf("\n");
}
while(1){}
}
////////////////////////////////////
Take the Dev-C++ (Win32Intel) compiler do the following testing..
Herewith the below whole code in "main.C":
===========================
#include
#include
#define FALSE 0
#define TRUE 1
typedef struct
{
unsigned char : 7;
unsigned char bIsDataChange: 1;
} _MY_APP_NET_DATA_FLAG;
typedef struct
{
unsigned char : 4;
unsigned char bIsEEPROM: 1;
unsigned char bIsState: 1;
unsigned char bIsNumeric: 1;
unsigned char bIsStringBuf: 1;
} _MY_APP_NET_DATA_TYPE;
_MY_APP_NET_DATA_TYPE MyAppNetValueType[3] = {
{0, 1, 0, 0}, //0: EEPROM/x, IsState/v, IsNumeric/x, IsStringBuf/x
{1, 1, 0, 0}, //1: EEPROM/v, IsState/v, IsNumeric/x, IsStringBuf/x
{1, 0, 0, 1} //2: EEPROM/v, IsState/x, IsNumeric/x, IsStringBuf/v
}
;
int main(int argc, char *argv[])
{
printf("MyAppNetValueType[0]: %d (%c) \r\n", MyAppNetValueType[0], MyAppNetValueType[0]);
printf("MyAppNetValueType[1]: %d (%c) \r\n", MyAppNetValueType[1], MyAppNetValueType[1]);
printf("MyAppNetValueType[2]: %d (%c) \r\n", MyAppNetValueType[2], MyAppNetValueType[2]);
if(1 == MyAppNetValueType[1].bIsState)
printf("MyAppNetValueType[1] has state-type \r\n");
if(FALSE == MyAppNetValueType[2].bIsState)
printf("MyAppNetValueType[2] has no state-type \r\n");
system("PAUSE");
return 0;
}
===========================
(that's ALL)
////////////////////////////////////
char a
a.0=1; //設定變數a的bit0為1
也可以個別做位元判斷,例如
if(a.0==1)
.....
這對MCU有限的RAM可以有效的利用,但到了MPLAB C18 C Compiler卻無法直接這樣使用,經筆者測試可以透過宣告的方式來使用,例如:
1 typedef struct char
2 {
3 unsigned bit0:1;
4 unsigned bit1:1;
5 unsigned bit2:1;
6 unsigned bit3:1;
7 unsigned bit4:1;
8 unsigned bit5:1;
9 unsigned bit6:1;
10 unsigned bit7:1;
11 }uns8_bits;
12
13 union
14 {
15 uns8_bits t_temp;
16 char char_t_temp;
17 }union_flag;
18
19
20 #define bit_12_pm union_flag.t_temp.bit0
21 #define bit_1sec_action union_flag.t_temp.bit1
22 #define bit_count_sec_begin union_flag.t_temp.bit2
1~11 為結構宣告,並令uns8_bits為新的資料型態
13~17 為共用空間的使用,目的是讓uns8_bits資料型態宣告的資料變數,能與char資料型態其他變數做資料的交換,例如
char a;
a=1;
union_flag.char_t_temp = a; //相當於 union_flag.t_temp.bit0=1 或者 bit_12_pm=1;
20~22 為了簡化輸入一長串英文字母的麻煩,又可讓整個程式看起來簡單明瞭有意義
以上為使用bit的相關設定,希望對各位有幫助!!
////////////////////////////////////
[結構化的資料型態二]
位元欄(Bit Field)是C語言中一個很特別資料型態
2.位元欄
位元欄(Bit Field)是C語言中一個很特別資料型態 ,在很多他之前的語言都沒有,之後的則有抄襲這一個型態的。使用位元欄有很多好處,一、可以節省記憶體空間,布林運算值直接取用,相類似的資料放在同一組字(Word)中,不用一一佔不同字的空間。二、與硬體觀念中的旗標可以輕鬆配合使用。三、有益於與系統硬體,與周邊硬體直接做暫存器位元的傳輸與指定。
好用強大的功能通常都會伴隨著更強大的限制使用與更多的注意事項,底下我們將一一講解位元欄的規則:
位元欄的使用
位元欄是以結構為基礎的資料型態。他的表示方法,在結構元素後面加一個冒號:以及一個正整數的欄位長度。例如下面的範例,我們將看到一個ALU(Arithmetic Logic Unit 計算邏輯處理單元)的相關旗標,每一個旗標都佔一個位元的空間。zero代表某一輸入有零,overflow代表溢位,underflow代表不足位,carryout代表有進位。
struct bitfield
{
unsigned zero:1;
unsigned overflow:1;
unsigned underflow:1;
unsigned carryout:1;
}
位元欄中的資料多半以unsigned型態來宣告,你也可以使用signed或是int的方式來宣告,即使如此一般的編譯器也都換自動將位元欄的資料型態轉換成unsigned的型態。為了程式的相通性,最好還是以unsigned的寫法。
位元欄一樣會佔據適當的記憶體空間,至於佔用的順序,是由表示方法的由上到下,對應到記憶體的高位元到低位元;或者是由低位元到高位元,這必須由系統製造商決定。x86的相容PC與工作站剛好相反。怎麼擺其實不重要,重要的是千萬不要依賴他的順序。
位元欄的大小有沒有限制?有的。一般以一個字為限,一般字都是由兩個位元組所構成,共十六位元。
一起宣告的位元欄,並不一定是連續的記憶體空間。當前面的位元欄使用剩的空間不足以放下這一組位元欄,則這一組位元欄會放在下一組字中,而不會讓該位元欄跨越字。
位元欄沒有相對應的指標型態,所以也無法以陣列表示。
位元欄可以與其他型態的資料共同運算,這時位元欄的資料型態會先轉換成整數型態,以整數為基準再作適當調整。
同一結構中,即使有位元欄還是可以有其他的資料型態。
要瞭解一個東西有多好用,就是拿起來用用看就知道。底下我們看一個簡單的例子,這一個程式模擬兩個數做加法的動作(參看邏輯設計與Verilog寫作手冊)。
/*
Bitwise addition . Action as 8-bits a ripple adder
bitadd.c
*/
#include
#include
main()
{
int i, j, k;
struct unit
{
unsigned a0:1;
unsigned a1:1;
unsigned a2:1;
unsigned a3:1;
unsigned a4:1;
unsigned a5:1;
unsigned a6:1;
unsigned a7:1;
}input1, input2, sum;
printf ("Please input addend and augend ranged from 1 ~ 255\n");
printf ("First, input addend = ");
scanf ("%d", &i);
while(i<0> pow(2.0, 8.0))
{
printf ("Wrong input value range. Again, input addend = ");
scanf ("%d", &i);
}
input1.a0=i%2;k=(i-input1.a0)/2;
input1.a1=k%2;k=(k-input1.a1)/2;
input1.a2=k%2;k=(k-input1.a2)/2;
input1.a3=k%2;k=(k-input1.a3)/2;
input1.a4=k%2;k=(k-input1.a4)/2;
input1.a5=k%2;k=(k-input1.a5)/2;
input1.a6=k%2;k=(k-input1.a6)/2;
input1.a7=k%2;k=(k-input1.a7)/2;
printf("%3d --> %d%d%d%d%d%d%d%d\n", i, input1.a7, input1.a6, input1.a5 \
, input1.a4, input1.a3, input1.a2, input1.a1, input1.a0);
j=i;
printf ("Second, input augend = ");
scanf ("%d", &i);
while(i<0> pow(2.0, 8.0))
{
printf ("Wrong input value range. Again, input addend = ");
scanf ("%d", &i);
}
input2.a0=i%2;k=(i-input2.a0)/2;
input2.a1=k%2;k=(k-input2.a1)/2;
input2.a2=k%2;k=(k-input2.a2)/2;
input2.a3=k%2;k=(k-input2.a3)/2;
input2.a4=k%2;k=(k-input2.a4)/2;
input2.a5=k%2;k=(k-input2.a5)/2;
input2.a6=k%2;k=(k-input2.a6)/2;
input2.a7=k%2;k=(k-input2.a7)/2;
printf("%3d --> %d%d%d%d%d%d%d%d\n", i, input2.a7, input2.a6, input2.a5 \
, input2.a4, input2.a3, input2.a2, input2.a1, input2.a0);
/* addition */
sum.a0=input1.a0^input2.a0^0;k=input1.a0&input2.a0;
sum.a1=input1.a1^input2.a1^k;k=(input1.a1&input2.a1)|(k&input1.a1)|(k&input2.a1);
sum.a2=input1.a2^input2.a2^k;k=(input1.a2&input2.a2)|(k&input1.a2)|(k&input2.a2);
sum.a3=input1.a3^input2.a3^k;k=(input1.a3&input2.a3)|(k&input1.a3)|(k&input2.a3);
sum.a4=input1.a4^input2.a4^k;k=(input1.a4&input2.a4)|(k&input1.a4)|(k&input2.a4);
sum.a5=input1.a5^input2.a5^k;k=(input1.a5&input2.a5)|(k&input1.a5)|(k&input2.a5);
sum.a6=input1.a6^input2.a6^k;k=(input1.a6&input2.a6)|(k&input1.a6)|(k&input2.a6);
sum.a7=input1.a7^input2.a7^k;k=(input1.a7&input2.a7)|(k&input1.a7)|(k&input2.a7);
printf("%3d --> %d%d%d%d%d%d%d%d\tcarry =%d\n", i+j, sum.a7, sum.a6, sum.a5\
, sum.a4, sum.a3, sum.a2, sum.a1, sum.a0, k);
}
程式執行結果如下
Please input addend and augend ranged from 1 ~ 255
First, input addend = 127
127 --> 01111111
Second, input augend = 100
100 --> 01100100
227 --> 11100011 carry =0
Please input addend and augend ranged from 1 ~ 255
First, input addend = 200
200 --> 11001000
Second, input augend = 223
223 --> 11011111
423 --> 10100111 carry =1
3.共用
共用(Union)型態可以讓多種不同型態的變數共用同樣的記憶體空間。使用方法如下
union name
{
datatype name1;
....
datatype namen;
}
n個元素共用同樣的記憶體空間,記憶體空間的大小由佔空間最大的資料型態決定。他的型態與結構相同,所以結構有的他都有。他有:一、有指標。二、每一個元素都可以使用,但是同一時間只有一個是有效的。三、共用型態內的資料型態,每一種你學過的都可以用。
底下來一個例子看看,怎樣利用這一個結構來取出字元的二進位值。
/*
transfer the char to binary form
union.c
*/
#include
#include
main()
{
char c;
struct unit
{
unsigned a0:1;
unsigned a1:1;
unsigned a2:1;
unsigned a3:1;
unsigned a4:1;
unsigned a5:1;
unsigned a6:1;
unsigned a7:1;
};
union bits
{
char word;
struct unit bit;
}digit;
printf ("Please input a character = ");
c= getchar();
while(!isalpha(c))
{
fflush(stdin); /* clean Standard input buffer */
printf ("Wrong input value range. Again, character = ");
c=getchar();
}
digit.word=c;
printf("\n%c=%3d --> %d%d%d%d%d%d%d%d\n", c, c,digit.bit.a7, digit.bit.a6,\
digit.bit.a5, digit.bit.a4, digit.bit.a3, digit.bit.a2, \
digit.bit.a1, digit.bit.a0);
}
程式執行結果如下
Wrong input value range. Again, character = 9
Wrong input value range. Again, character = 0
Wrong input value range. Again, character = =
Wrong input value range. Again, character = -
Wrong input value range. Again, character = f
f=102 --> 01100110
////////////////////////////////////
[How to initial bit-field for the data-type declaration..]
Especially checking for color[8] array
struct
{
unsigned char red :1;
unsigned char orange :1;
unsigned char yellow :1;
unsigned char green :1;
unsigned char blue :1;
unsigned char violett :1;
}color[8]={
1,0,1,0,1,0,
0,1,0,1,0,1,
0,0,0,0,0,0,
0,0,0,0,0,0,
1,1,1,1,1,1,
1,1,1,1,1,1,
};
//***************************************************************************
int main (void)
{
//***************************************************************************
unsigned int i;
PLL_init();
RS232_init(115200);
printf("Bitfield array in C\n");
for(i=0;i<8;i++)
{
color[i].orange = ~color[i].red;//"~" or "!" which i correct?
color[i].yellow = !color[i].red;
}
for(i=0;i<8;i++)
{
printf("%u ",color[i].red);
printf("%u ",color[i].orange);
printf("%u ",color[i].yellow);
printf("%u ",color[i].green);
printf("%u ",color[i].blue);
printf("%u ",color[i].violett);
printf("\n");
}
while(1){}
}
////////////////////////////////////
Take the Dev-C++ (Win32Intel) compiler do the following testing..
Herewith the below whole code in "main.C":
===========================
#include
#include
#define FALSE 0
#define TRUE 1
typedef struct
{
unsigned char : 7;
unsigned char bIsDataChange: 1;
} _MY_APP_NET_DATA_FLAG;
typedef struct
{
unsigned char : 4;
unsigned char bIsEEPROM: 1;
unsigned char bIsState: 1;
unsigned char bIsNumeric: 1;
unsigned char bIsStringBuf: 1;
} _MY_APP_NET_DATA_TYPE;
_MY_APP_NET_DATA_TYPE MyAppNetValueType[3] = {
{0, 1, 0, 0}, //0: EEPROM/x, IsState/v, IsNumeric/x, IsStringBuf/x
{1, 1, 0, 0}, //1: EEPROM/v, IsState/v, IsNumeric/x, IsStringBuf/x
{1, 0, 0, 1} //2: EEPROM/v, IsState/x, IsNumeric/x, IsStringBuf/v
}
;
int main(int argc, char *argv[])
{
printf("MyAppNetValueType[0]: %d (%c) \r\n", MyAppNetValueType[0], MyAppNetValueType[0]);
printf("MyAppNetValueType[1]: %d (%c) \r\n", MyAppNetValueType[1], MyAppNetValueType[1]);
printf("MyAppNetValueType[2]: %d (%c) \r\n", MyAppNetValueType[2], MyAppNetValueType[2]);
if(1 == MyAppNetValueType[1].bIsState)
printf("MyAppNetValueType[1] has state-type \r\n");
if(FALSE == MyAppNetValueType[2].bIsState)
printf("MyAppNetValueType[2] has no state-type \r\n");
system("PAUSE");
return 0;
}
===========================
(that's ALL)
////////////////////////////////////
2009年11月9日 星期一
Subversion and Git
http://code.google.com/p/tortoisegit/
///////////////////////////////////////////////////////
早上才剛看過Rex 報導寫出 Linus Torvalds on git ,主要介紹Linus對於CVS與Subversion的針砭,晚上就看到TortoiseGit,海龜太神!!
每個版本控管軟體都要插上一腳。雖然現在還是用Subversion居多(還是有些專案還是在CVS上),但看來Git還不賴,有空還是找來試試..
///////////////////////////////////////////////////////
Subversion 對於使用 Windows 的用戶, 都是用 TortoiseSVN.
Git 一直沒有 for Windows 用戶的 Client 可以用(與人共事就很難推薦使用), 這幾天總算有看到 TortoiseGit (註: 手邊沒有 Windows, 不確定使用有沒有問題, 不過應該可以嘗試看看~)
* 詳細可見: tortoisegit - Google Code
(註: 要安裝 tortoisegit 前, 要先安裝 msysgit)
///////////////////////////////////////////////////////
要在 Windows 上使用 Git,可以使用 msysgit + tortoisegit。
msysgit 是 Git 的核心,而 tortoisegit 則是提供一個不錯的 UI。
簡單的安裝順序:
* 先安裝 msysgit
* 選擇 PATH 時請選 Please choose add git path to windows command line,配合 tortoisegit
* 安裝 tortoisegit,安裝完後會要求重開機。
* 重開機後,點選任一資料夾右鍵選擇 git bash 進入 command line 視窗
* 生好你的 public key 後,記得先連線到你的 git server
#ssh yourgitserver
會這麼做的原因是第一次登入時會有這個問題
The authenticity of host 'gitserver' can't be established.
DSA key fingerprint is 73:da:f4:e6:77:9c:27:44:1a:ca:eb:72:f1:fa:c8:08.
Are you sure you want to continue connecting (yes/no)?
如果不在這裡先主動連一次的話接下來在 tortoisegit 做事時會爛掉。
* 將你的 public key 丟上你的 git server 後就可以正常做事了。
另外要注意的事:
* 這兩個軟體都在持續更新,而且很快,我也是最近才發現終於堪用,建議常常去看有沒有得更新。
* 請不要用非 Ascii Code 的語系為檔名(比方說中文檔名),在不同 codepage 的 system 上會出問題,因為 git 是存 raw bytes.詳情可以參考:
http://code.google.com/p/msysgit/issues/detail?id=230
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
早上才剛看過Rex 報導寫出 Linus Torvalds on git ,主要介紹Linus對於CVS與Subversion的針砭,晚上就看到TortoiseGit,海龜太神!!
每個版本控管軟體都要插上一腳。雖然現在還是用Subversion居多(還是有些專案還是在CVS上),但看來Git還不賴,有空還是找來試試..
///////////////////////////////////////////////////////
Subversion 對於使用 Windows 的用戶, 都是用 TortoiseSVN.
Git 一直沒有 for Windows 用戶的 Client 可以用(與人共事就很難推薦使用), 這幾天總算有看到 TortoiseGit (註: 手邊沒有 Windows, 不確定使用有沒有問題, 不過應該可以嘗試看看~)
* 詳細可見: tortoisegit - Google Code
(註: 要安裝 tortoisegit 前, 要先安裝 msysgit)
///////////////////////////////////////////////////////
要在 Windows 上使用 Git,可以使用 msysgit + tortoisegit。
msysgit 是 Git 的核心,而 tortoisegit 則是提供一個不錯的 UI。
簡單的安裝順序:
* 先安裝 msysgit
* 選擇 PATH 時請選 Please choose add git path to windows command line,配合 tortoisegit
* 安裝 tortoisegit,安裝完後會要求重開機。
* 重開機後,點選任一資料夾右鍵選擇 git bash 進入 command line 視窗
* 生好你的 public key 後,記得先連線到你的 git server
#ssh yourgitserver
會這麼做的原因是第一次登入時會有這個問題
The authenticity of host 'gitserver' can't be established.
DSA key fingerprint is 73:da:f4:e6:77:9c:27:44:1a:ca:eb:72:f1:fa:c8:08.
Are you sure you want to continue connecting (yes/no)?
如果不在這裡先主動連一次的話接下來在 tortoisegit 做事時會爛掉。
* 將你的 public key 丟上你的 git server 後就可以正常做事了。
另外要注意的事:
* 這兩個軟體都在持續更新,而且很快,我也是最近才發現終於堪用,建議常常去看有沒有得更新。
* 請不要用非 Ascii Code 的語系為檔名(比方說中文檔名),在不同 codepage 的 system 上會出問題,因為 git 是存 raw bytes.詳情可以參考:
http://code.google.com/p/msysgit/issues/detail?id=230
///////////////////////////////////////////////////////
2009年10月30日 星期五
TCP 連線特性/原理
初識 TCP資料報頭的六個標誌位。
URG:(Urgent Pointer field significant)緊急游標。用到的時候值為1,用來處理避免TCP資料流中斷
ACK:(Acknowledgment field significant)置1時表示驗證號(Acknowledgment Number)為合法,為0的時候表示資料段不包含驗證信息,驗證號被忽略。
PSH:(Push Function),PUSH標誌的資料,置1時請求的資料段在接收方得到後就可直接送到應用程式,而不必等到緩衝區滿時才傳送。
RST:(Reset the connection)用於復位因某種原因引起出現的錯誤連接,也用來拒絕非法資料和請求。如果接收到RST位時候,通常發生了某些錯誤。
SYN:(Synchronize sequence numbers)用來建立連接,在連接請求中,SYN=1,ACK=0,連接回應時, SYN=1,ACK=1。即,SYN和ACK來區分Connection Request和Connection Accepted。
FIN:(No more data from sender)用來釋放連接,表明傳送方已經沒有資料傳送。
TCP傳輸協定連接的三次握手程序是這樣的:
首先客戶端(請求方)在連接請求中,傳送SYN=1,ACK=0的TCP資料包給伺服器端(接收請求端),表示要求同伺服器端建立一個連接;然後如果伺服器端回應這個連接,就返回一個SYN=1,ACK=1的資料報給客戶端,表示伺服器端同意這個連接,並要求客戶端驗證;最後客戶端就再傳送SYN=0,ACK=1的資料包給伺服器端,表示驗證建立連接。
/////////////////////////////////////////////////////////////////
有關TCP協議的東西
TCP(transmission control protocol,傳輸控制協議),是用來在不可靠的因特網上 提供可靠的、端到端的字節流通訊協議,在RFC793中有正式定義,還有一些解決錯誤的 東西在RFC 1122中有記錄,RFC 1323則有TCP的功能擴展。
我們常見到的TCP/IP協議中,IP層不保證將數據報正確傳送到目的地,TCP則從本地機 器接受用戶的數據流,將其分成不超過64K字節的數據片段,將每個數據片段作為單獨 的IP數據包發送出去,最後在目的地機器中再組合成完整的字節流,TCP協議必須保證 可靠性。
發送和接收方的TCP傳輸以數據段的形式交換數據,一個數據段包括一個固定的20字節 頭,加上可選部分,後面再跟上數據,TCP協議從發送方傳送一個數據段的時候,還要 啟動計時器,當數據段到達目的地後,接收方還要發送回一個數據段,其中有一個確認 序號,它等於希望收到的下一個數據段的順序號,如果計時器在確認信息到達前超時 了,發送方會重新發送這個數據段。
上面,我們總體上瞭解一點TCP協議,重要的是要熟悉TCP的數據頭(header)。因為數 據流的傳輸最重要的就是header裡面的東西,至於發送的數據,只是header附帶上的。 客戶端和服務端的服務響應就是同header裡面的數據相關,兩端的信息交流和交換是根 據header中的內容實施的,因此,要實現DOS,就必須對header中的內容非常熟悉。
下面是TCP數據段頭格式。
Source Port和 Destination Port :是本地端口和目標端口 Sequence Number 和 Acknowledgment Number :是順序號和確認號,確認號是希望接 收的字節號。這都是32位的,在TCP流中,每個數據字節都被編號。
Data offset :表明TCP頭包含多少個32位字,用來確定頭的長度,因為頭中可選字段長度是不定的。
Reserved : 保留的6位,現在沒用,都是0 接下來是6個1位的標誌,這是兩個計算機數據交流的信息標誌。接收和發送斷根據這些 標誌來確定信息流的種類。
下面是一些介紹:
URG:(Urgent Pointer field significant)緊急指針。用到的時候值為1,用來處理避免TCP數據流中斷
ACK: (Acknowledgment field significant)置1時表示確認號(Acknowledgment Number) 為合法,為0的時候表示數據段不包含確認信息,確認號被忽略。
PSH:(Push Function),PUSH標誌的數據,置1時請求的數據段在接收方得到後就可 直接送到應用程序,而不必等到緩衝區滿時才傳送。
RST:(Reset the connection)用於復位因某種原因引起出現的錯誤連接,也用來拒 絕非法數據和請求。如果 接收到RST位時候,通常發生了某些錯誤。
SYN:(Synchronize sequence numbers)用來建立連接,在連接請求中,SYN=1, CK=0,連接響應時,SYN=1, ACK=1。即,SYN和ACK來區分Connection Request和Connection Accepted。 FIN:(No more data from sender)用來釋放連接,表明發送方已經沒有數據發送。
知道這重要的6個指示標誌後,我們繼續來。
16位的WINDOW字段:表示確認了字節後還可以發送多少字節。可以為0,表示已經收到 包括確認號減1(即已發送所有數據) 在內的所有數據段。
接下來是16位的Checksum字段,用來確保可靠性的。 16位的Urgent Pointer,和下面的字段我們這裡不解釋了。不然太多了。呵呵,偷懶 啊。
我們進入比較重要的一部分:TCP連接握手過程。這個過程簡單地分為三步。在沒有連 接中,接受方(我們針對服務器),服務器處於LISTEN狀態,等待其他機器發送連接請 求。
第一步:客戶端發送一個帶SYN位的請求,向服務器表示需要連接,比如發送包假設請 求序號為10,那麼則為:SYN=10,ACK=0,然後等待服務器的響應。
第二步:服務器接收到這樣的請求後,查看是否在LISTEN的是指定的端口,不然,就發 送RST=1應答,拒絕建立連接。如果接收連接,那麼服務器發送確認,SYN為服務器的一 個內碼,假設為100,ACK位則是客戶端的請求序號加1,本例中發送的數據是: SYN=100,ACK=11,用這樣的數據發送給客戶端。向客戶端表示,服務器連接已經準備 好了,等待客戶端的確認這時客戶端接收到消息後,分析得到的信息,準備發送確認連 接信號到服務器
第三步:客戶端發送確認建立連接的消息給服務器。確認信息的SYN位是服務器發送的 ACK位,ACK位是服務器發送的SYN位加1。即:SYN=11,ACK=101。 這時,連接已經建立。然後發送數據,。這是一個基 本的請求和連接過程。需要注意的是這些標誌位的關係,比如SYN、ACK。
/////////////////////////////////////////////////////////////////
wikipedia:
http://en.wikipedia.org/wiki/Transmission_Control_Protocol
http://en.wikipedia.org/wiki/File:Tcp_state_diagram_fixed.svg

/////////////////////////////////////////////////////////////////
Digested from:
(阻斷式攻擊的防禦理論以及瞭解)
http://www.geego.com.tw/tech/11.html
TCP連線的建立及結束
在瞭解TCP的連線建立及結束前,讀者們必須先對TCP表頭的各個領域的功能稍作瞭解,在此提供TCP的表頭,並且簡單的解釋一下其中的一些領域功能:


所謂的旗標(Code或是Flag),下面的表格解釋部分旗標的功能:

建立TCP連線的建立大致上可以分為三個部分:
1.連線的建立 - 三向交握 (Three-Way Handshake)。
2.傳輸資料。
3.結束連線。
如下圖所示:
URG:(Urgent Pointer field significant)緊急游標。用到的時候值為1,用來處理避免TCP資料流中斷
ACK:(Acknowledgment field significant)置1時表示驗證號(Acknowledgment Number)為合法,為0的時候表示資料段不包含驗證信息,驗證號被忽略。
PSH:(Push Function),PUSH標誌的資料,置1時請求的資料段在接收方得到後就可直接送到應用程式,而不必等到緩衝區滿時才傳送。
RST:(Reset the connection)用於復位因某種原因引起出現的錯誤連接,也用來拒絕非法資料和請求。如果接收到RST位時候,通常發生了某些錯誤。
SYN:(Synchronize sequence numbers)用來建立連接,在連接請求中,SYN=1,ACK=0,連接回應時, SYN=1,ACK=1。即,SYN和ACK來區分Connection Request和Connection Accepted。
FIN:(No more data from sender)用來釋放連接,表明傳送方已經沒有資料傳送。
TCP傳輸協定連接的三次握手程序是這樣的:
首先客戶端(請求方)在連接請求中,傳送SYN=1,ACK=0的TCP資料包給伺服器端(接收請求端),表示要求同伺服器端建立一個連接;然後如果伺服器端回應這個連接,就返回一個SYN=1,ACK=1的資料報給客戶端,表示伺服器端同意這個連接,並要求客戶端驗證;最後客戶端就再傳送SYN=0,ACK=1的資料包給伺服器端,表示驗證建立連接。
/////////////////////////////////////////////////////////////////
有關TCP協議的東西
TCP(transmission control protocol,傳輸控制協議),是用來在不可靠的因特網上 提供可靠的、端到端的字節流通訊協議,在RFC793中有正式定義,還有一些解決錯誤的 東西在RFC 1122中有記錄,RFC 1323則有TCP的功能擴展。
我們常見到的TCP/IP協議中,IP層不保證將數據報正確傳送到目的地,TCP則從本地機 器接受用戶的數據流,將其分成不超過64K字節的數據片段,將每個數據片段作為單獨 的IP數據包發送出去,最後在目的地機器中再組合成完整的字節流,TCP協議必須保證 可靠性。
發送和接收方的TCP傳輸以數據段的形式交換數據,一個數據段包括一個固定的20字節 頭,加上可選部分,後面再跟上數據,TCP協議從發送方傳送一個數據段的時候,還要 啟動計時器,當數據段到達目的地後,接收方還要發送回一個數據段,其中有一個確認 序號,它等於希望收到的下一個數據段的順序號,如果計時器在確認信息到達前超時 了,發送方會重新發送這個數據段。
上面,我們總體上瞭解一點TCP協議,重要的是要熟悉TCP的數據頭(header)。因為數 據流的傳輸最重要的就是header裡面的東西,至於發送的數據,只是header附帶上的。 客戶端和服務端的服務響應就是同header裡面的數據相關,兩端的信息交流和交換是根 據header中的內容實施的,因此,要實現DOS,就必須對header中的內容非常熟悉。
下面是TCP數據段頭格式。
Source Port和 Destination Port :是本地端口和目標端口 Sequence Number 和 Acknowledgment Number :是順序號和確認號,確認號是希望接 收的字節號。這都是32位的,在TCP流中,每個數據字節都被編號。
Data offset :表明TCP頭包含多少個32位字,用來確定頭的長度,因為頭中可選字段長度是不定的。
Reserved : 保留的6位,現在沒用,都是0 接下來是6個1位的標誌,這是兩個計算機數據交流的信息標誌。接收和發送斷根據這些 標誌來確定信息流的種類。
下面是一些介紹:
URG:(Urgent Pointer field significant)緊急指針。用到的時候值為1,用來處理避免TCP數據流中斷
ACK: (Acknowledgment field significant)置1時表示確認號(Acknowledgment Number) 為合法,為0的時候表示數據段不包含確認信息,確認號被忽略。
PSH:(Push Function),PUSH標誌的數據,置1時請求的數據段在接收方得到後就可 直接送到應用程序,而不必等到緩衝區滿時才傳送。
RST:(Reset the connection)用於復位因某種原因引起出現的錯誤連接,也用來拒 絕非法數據和請求。如果 接收到RST位時候,通常發生了某些錯誤。
SYN:(Synchronize sequence numbers)用來建立連接,在連接請求中,SYN=1, CK=0,連接響應時,SYN=1, ACK=1。即,SYN和ACK來區分Connection Request和Connection Accepted。 FIN:(No more data from sender)用來釋放連接,表明發送方已經沒有數據發送。
知道這重要的6個指示標誌後,我們繼續來。
16位的WINDOW字段:表示確認了字節後還可以發送多少字節。可以為0,表示已經收到 包括確認號減1(即已發送所有數據) 在內的所有數據段。
接下來是16位的Checksum字段,用來確保可靠性的。 16位的Urgent Pointer,和下面的字段我們這裡不解釋了。不然太多了。呵呵,偷懶 啊。
我們進入比較重要的一部分:TCP連接握手過程。這個過程簡單地分為三步。在沒有連 接中,接受方(我們針對服務器),服務器處於LISTEN狀態,等待其他機器發送連接請 求。
第一步:客戶端發送一個帶SYN位的請求,向服務器表示需要連接,比如發送包假設請 求序號為10,那麼則為:SYN=10,ACK=0,然後等待服務器的響應。
第二步:服務器接收到這樣的請求後,查看是否在LISTEN的是指定的端口,不然,就發 送RST=1應答,拒絕建立連接。如果接收連接,那麼服務器發送確認,SYN為服務器的一 個內碼,假設為100,ACK位則是客戶端的請求序號加1,本例中發送的數據是: SYN=100,ACK=11,用這樣的數據發送給客戶端。向客戶端表示,服務器連接已經準備 好了,等待客戶端的確認這時客戶端接收到消息後,分析得到的信息,準備發送確認連 接信號到服務器
第三步:客戶端發送確認建立連接的消息給服務器。確認信息的SYN位是服務器發送的 ACK位,ACK位是服務器發送的SYN位加1。即:SYN=11,ACK=101。 這時,連接已經建立。然後發送數據,。這是一個基 本的請求和連接過程。需要注意的是這些標誌位的關係,比如SYN、ACK。
/////////////////////////////////////////////////////////////////
wikipedia:
http://en.wikipedia.org/wiki/Transmission_Control_Protocol
http://en.wikipedia.org/wiki/File:Tcp_state_diagram_fixed.svg

/////////////////////////////////////////////////////////////////
Digested from:
(阻斷式攻擊的防禦理論以及瞭解)
http://www.geego.com.tw/tech/11.html
TCP連線的建立及結束
在瞭解TCP的連線建立及結束前,讀者們必須先對TCP表頭的各個領域的功能稍作瞭解,在此提供TCP的表頭,並且簡單的解釋一下其中的一些領域功能:


所謂的旗標(Code或是Flag),下面的表格解釋部分旗標的功能:

建立TCP連線的建立大致上可以分為三個部分:
1.連線的建立 - 三向交握 (Three-Way Handshake)。
2.傳輸資料。
3.結束連線。
如下圖所示:
2009年10月7日 星期三
2009年10月4日 星期日
[pic18net] eeprom
For EEPROM-size enlarged to "1Mb", the configuration:
(TCPIP-v4.51, TCPIPConfig.h)
Line118 ~ Line121.
(TCPIP-v4.51, TCPIPConfig.h)
Line118 ~ Line121.
2009年9月21日 星期一
2009年9月6日 星期日
Tutorial for Linux
http://blog.arjin.tw/
http://www.study-area.org/menu1.htm
http://linux.vbird.org/
(「The Linux Kernel」, Chiese-Edition)
http://www.cmlab.csie.ntu.edu.tw/~tcwu/doc/Linux/Kernel/frame.htm
(阿偉蘇的程式記事本)
http://www.wretch.cc/blog/awaysu
(callback function??)
http://www.dev.idv.tw/mediawiki/index.php/%E4%BD%95%E8%AC%82callback_function%EF%BC%9F
(HTTP下載檔案)
http://www.wretch.cc/blog/awaysu/24449222
(NAND FLASH ECC校驗原理與實現 [轉])
http://www.wretch.cc/blog/awaysu/25381218
([Linux] Yaffs檔系統結構 [轉])
http://www.wretch.cc/blog/awaysu/25572973
http://www.study-area.org/menu1.htm
http://linux.vbird.org/
(「The Linux Kernel」, Chiese-Edition)
http://www.cmlab.csie.ntu.edu.tw/~tcwu/doc/Linux/Kernel/frame.htm
(阿偉蘇的程式記事本)
http://www.wretch.cc/blog/awaysu
(callback function??)
http://www.dev.idv.tw/mediawiki/index.php/%E4%BD%95%E8%AC%82callback_function%EF%BC%9F
(HTTP下載檔案)
http://www.wretch.cc/blog/awaysu/24449222
(NAND FLASH ECC校驗原理與實現 [轉])
http://www.wretch.cc/blog/awaysu/25381218
([Linux] Yaffs檔系統結構 [轉])
http://www.wretch.cc/blog/awaysu/25572973
PORT及 Process相關資訊
◆ 查詢PORT及Process相關資訊
當您的機器扮演網路伺服器的角色時,多多少少會開啟一些服務,但有時系統安裝後會開啟許多您不知道的服務,這時就有賴您自己做查詢了。 以下是您在做系統管理或網路管理上很實用的一些指令,可以幫您查詢開放的服務或連線的狀態:
.列出 LISTEN 的 TCP socket 及 UDP socket 的資訊
檢視 TCP 及 UDP 的 LISTEN 資訊
# netstat -l
檢視 TCP 的 LISTEN 資訊
# netstat -tl
檢視 UDP 的 LISTEN 資訊
# netstat -ul
檢視 TCP 的 LISTEN 資訊且不解析(IP及PORT)
# netstat -tln
.列出正在使用某連接埠(PORT)的Process PID
列出指定socket的PID
# fuser 25/tcp 137/udp 138/udp 139/tcp
.查詢PID資訊
檢視PID資訊(PID部份請填入上面查詢到的數字)
# ps -ef | grep PID
# ps aux | grep PID
.列出PID開啟的檔案
# lsof -p PID
.列出哪些Processes正在使用這個檔案
# fuser -mv /path/filename
.殺掉所有正在使用某個路徑或檔案的Processes
殺掉所有正在使用 /home 的Processes
# fuser -km /home
==============================================
(Same with Windows series for console-mode)
netstat:
-a 列出所有被使用的port
-b 列出使用該port的程式名稱
-o 列出使用該port的process id
netstat -a -b -o
try it~ 應該就可以知道!!
當您的機器扮演網路伺服器的角色時,多多少少會開啟一些服務,但有時系統安裝後會開啟許多您不知道的服務,這時就有賴您自己做查詢了。 以下是您在做系統管理或網路管理上很實用的一些指令,可以幫您查詢開放的服務或連線的狀態:
.列出 LISTEN 的 TCP socket 及 UDP socket 的資訊
檢視 TCP 及 UDP 的 LISTEN 資訊
# netstat -l
檢視 TCP 的 LISTEN 資訊
# netstat -tl
檢視 UDP 的 LISTEN 資訊
# netstat -ul
檢視 TCP 的 LISTEN 資訊且不解析(IP及PORT)
# netstat -tln
.列出正在使用某連接埠(PORT)的Process PID
列出指定socket的PID
# fuser 25/tcp 137/udp 138/udp 139/tcp
.查詢PID資訊
檢視PID資訊(PID部份請填入上面查詢到的數字)
# ps -ef | grep PID
# ps aux | grep PID
.列出PID開啟的檔案
# lsof -p PID
.列出哪些Processes正在使用這個檔案
# fuser -mv /path/filename
.殺掉所有正在使用某個路徑或檔案的Processes
殺掉所有正在使用 /home 的Processes
# fuser -km /home
==============================================
(Same with Windows series for console-mode)
netstat:
-a 列出所有被使用的port
-b 列出使用該port的程式名稱
-o 列出使用該port的process id
netstat -a -b -o
try it~ 應該就可以知道!!
2009年9月2日 星期三
2009年9月1日 星期二
[Qt] installation on Linux/Ubuntu
The whole Qt programming IDE and tools is called ,"Qt SDK".
My Linux platform has the below parameters:
1. Ubuntu v8.10
2. Default language: ENGLISH
3. Added language: CHINESE, Input-Method included
4. apt-get install minicom
5. apt-get install tftp-hpa
6. apt-get install tftpd-hpa
7. apt-get install gcc
8. apt-get install g++
==================================================
step 1,
Get the Qt SDK from Qt official web-sit, "http://qt.nokia.com".
step 2,
Choose "Qt SDK for Open Source C++ development on Linux/X11 32-bit (or 64-bit)"
step 3,
Download the above (step 2) installation BIN-file into home/[user-account] directory.
qt-sdk-linux-x86-opensource-2009.03.1.bin
step 4,
Copy the "BIN" file into "/home/[user-account]" directory.
step 5,
And make sure that the have the console-command, "sudo chmod 777 BIN-file"
step 6,
In the console, type the following string:
$ ./qt-sdk-linux-x86-opensource-2009.03.1.bin
step 7,
Make sure that the installation directory located in the "/home/[user-account]" directory.
step 8,
For console-using, if programmer wants to have stand-alone compiling and making to Qt, please have the PATH-environment to refer to QT-installed directory (for ex: "/home/[user-account]/qtsdk-2009.03").
step 9,
In Qt-Creator, found the below error-prompt while building..
/usr/bin/ld: cannot find -lfreetype
$ sudo apt-get install libfreetype6
$ sudo apt-get install libfreetype6-dev
step 10,
In Qt-Creator, found the below error-prompt while building..
/usr/bin/ld: cannot find -lgobject-2.0
$ sudo apt-get install gob2
$ sudo apt-get install libsm6
$ sudo apt-get install libsm-dev
$ sudo apt-get install libxrender-dev
$ sudo apt-get install libfontconfig1-dev
$ sudo apt-get install libgtk2.0-dev
alternative useful reference-site for Qt:
http://www.cuteqt.com/blog/?p=17
My Linux platform has the below parameters:
1. Ubuntu v8.10
2. Default language: ENGLISH
3. Added language: CHINESE, Input-Method included
4. apt-get install minicom
5. apt-get install tftp-hpa
6. apt-get install tftpd-hpa
7. apt-get install gcc
8. apt-get install g++
==================================================
step 1,
Get the Qt SDK from Qt official web-sit, "http://qt.nokia.com".
step 2,
Choose "Qt SDK for Open Source C++ development on Linux/X11 32-bit (or 64-bit)"
step 3,
Download the above (step 2) installation BIN-file into home/[user-account] directory.
qt-sdk-linux-x86-opensource-2009.03.1.bin
step 4,
Copy the "BIN" file into "/home/[user-account]" directory.
step 5,
And make sure that the have the console-command, "sudo chmod 777 BIN-file"
step 6,
In the console, type the following string:
$ ./qt-sdk-linux-x86-opensource-2009.03.1.bin
step 7,
Make sure that the installation directory located in the "/home/[user-account]" directory.
step 8,
For console-using, if programmer wants to have stand-alone compiling and making to Qt, please have the PATH-environment to refer to QT-installed directory (for ex: "/home/[user-account]/qtsdk-2009.03").
step 9,
In Qt-Creator, found the below error-prompt while building..
/usr/bin/ld: cannot find -lfreetype
$ sudo apt-get install libfreetype6
$ sudo apt-get install libfreetype6-dev
step 10,
In Qt-Creator, found the below error-prompt while building..
/usr/bin/ld: cannot find -lgobject-2.0
$ sudo apt-get install gob2
$ sudo apt-get install libsm6
$ sudo apt-get install libsm-dev
$ sudo apt-get install libxrender-dev
$ sudo apt-get install libfontconfig1-dev
$ sudo apt-get install libgtk2.0-dev
alternative useful reference-site for Qt:
http://www.cuteqt.com/blog/?p=17
2009年8月18日 星期二
Query installed package in system (Linux/Ubuntu)
Query installed package in system (Linux/Ubuntu)
Information querying for installed package (for ex, "tftpd-hpa"):
#: sudo dpkg -l tftpd-hpa
Or~~
#: sudo dpkg -l gcc
Remove the software package (for ex, "tftpd-hpa")
#: sudo apt-get remove --purge tftpd-hpa
Information querying for installed package (for ex, "tftpd-hpa"):
#: sudo dpkg -l tftpd-hpa
Or~~
#: sudo dpkg -l gcc
Remove the software package (for ex, "tftpd-hpa")
#: sudo apt-get remove --purge tftpd-hpa
2009年8月17日 星期一
[Linux] RS232-USB control configuration
If you are using a USB-to-serial converter, your serial device probably /dev/ttyUSB0. Do a ‘lsusb’ and ‘dmesg | grep usb’ to find out.
Refer to the link (Minicom in Ubuntu):
http://wiki.davincidsp.com/index.php/Setting_up_Minicom_in_Ubuntu
Part1.
Part2.
Part3.
Refer to the link (Minicom in Ubuntu):
http://wiki.davincidsp.com/index.php/Setting_up_Minicom_in_Ubuntu
Part1.
Part2.
Part3.
2009年7月23日 星期四
How to format USB memory stick in EXT3
(reference: http://nikste.wordpress.com/2007/01/12/how-to-format-usb-memory-stick-in-linux/)
1. To find out the USB device name run "fdisk -l"
(In this case my stick is /dev/sdb1)
2. Make sure the memory stick isn’t mounted. To unmount, run "umount /dev/sdb1"
3. To format with ext3 filesystem run "mkfs.ext3 /dev/sdb1"
4. To label your stick run "e2label /dev/sdb1"
DONE!!
1. To find out the USB device name run "fdisk -l"
(In this case my stick is /dev/sdb1)
2. Make sure the memory stick isn’t mounted. To unmount, run "umount /dev/sdb1"
3. To format with ext3 filesystem run "mkfs.ext3 /dev/sdb1"
4. To label your stick run "e2label /dev/sdb1"
DONE!!
2009年7月17日 星期五
2009年7月15日 星期三
Why Qt??
Qt has free version by gc/gcc compiler.
reference:
(MUST!! Qt, 維基百科,自由的百科全書)
http://zh.wikipedia.org/zh-tw/Qt
(MUST!!, simple game for Qt4.x tutorial)
http://doc.trolltech.com/4.4/tutorials-tutorial.html
http://blog.csdn.net/vitolee/archive/2009/04/19/4091193.aspx
http://program-lover.blogspot.com/2008/08/qt-tutorial-1-hello-world.html
(Qt4 學習筆記)
http://zh.wikipedia.org/zh-tw/Qt
reference:
(MUST!! Qt, 維基百科,自由的百科全書)
http://zh.wikipedia.org/zh-tw/Qt
(MUST!!, simple game for Qt4.x tutorial)
http://doc.trolltech.com/4.4/tutorials-tutorial.html
http://blog.csdn.net/vitolee/archive/2009/04/19/4091193.aspx
http://program-lover.blogspot.com/2008/08/qt-tutorial-1-hello-world.html
(Qt4 學習筆記)
http://zh.wikipedia.org/zh-tw/Qt
2009年5月17日 星期日
compiler V.S interpreter
[wikipedia for "Interpreter (computing)"]
http://en.wikipedia.org/wiki/Interpreter_(computer_science)
In computer science, an interpreter normally means a computer program that executes, i.e. performs, instructions written in a programming language.
The terms interpreted language or compiled language merely mean that the canonical implementation of that language is an interpreter or a compiler; a high level language is basically an abstraction which is (ideally) independent of particular implementations.
While interpretation and compilation are the two principal means by which programming languages are implemented, these are not fully distinct categories, one of the reasons being that most interpreting systems also perform some translation work, just like compilers. An interpreter may be a program that either
1. executes the source code directly
2. translates source code into some efficient intermediate representation (code) and immediately executes this
3. explicitly executes stored precompiled code[1] made by a compiler which is part of the interpreter system
Perl, Python, MATLAB, and Ruby are examples of type 2, while UCSD Pascal and Java are type 3 and XMLmosaic Interpreter is of type 1.
The intermediate representation can be machine independent code, which is then linked at run-time and executed by an interpreter and/or compiler (for JIT systems). General purpose market languages, such as Smalltalk, Java, and others generally employ JIT.
How about [Compiler (computing)]??
http://en.wikipedia.org/wiki/Interpreter_(computer_science)
In computer science, an interpreter normally means a computer program that executes, i.e. performs, instructions written in a programming language.
The terms interpreted language or compiled language merely mean that the canonical implementation of that language is an interpreter or a compiler; a high level language is basically an abstraction which is (ideally) independent of particular implementations.
While interpretation and compilation are the two principal means by which programming languages are implemented, these are not fully distinct categories, one of the reasons being that most interpreting systems also perform some translation work, just like compilers. An interpreter may be a program that either
1. executes the source code directly
2. translates source code into some efficient intermediate representation (code) and immediately executes this
3. explicitly executes stored precompiled code[1] made by a compiler which is part of the interpreter system
Perl, Python, MATLAB, and Ruby are examples of type 2, while UCSD Pascal and Java are type 3 and XMLmosaic Interpreter is of type 1.
The intermediate representation can be machine independent code, which is then linked at run-time and executed by an interpreter and/or compiler (for JIT systems). General purpose market languages, such as Smalltalk, Java, and others generally employ JIT.
How about [Compiler (computing)]??
訂閱:
意見 (Atom)