星期三, 9月 01, 2010

[LabView]Global 變數-可以共同給兩個VI使用的變數

公司的儀器不多,有三四個以上工作站的handler,現有的儀器卻只能架設一站,其他二三站則毫無用武之地。

我曾經提出一個共同存取一份文檔個方式,目的在於假設當工作站1要用儀器A的時候,會在預設的文檔寫入狀態資料為使用中(例如儀器A旗標舉起),然後開始使用該儀器。此時若工作站2要使用儀器A時,他也會先讀取該文檔。倘若讀取結果得知儀器A在使用,便等待。直到工作站1用完儀器A後,寫入儀器A可被使用的訊息到文檔內。如此工作站2在讀取到此訊息後,便知可使用儀器A,然後同樣在文檔中改變儀器A狀態為使用中,隨即使用儀器A。

這個作法應是可行的,不過當我打電話給LabView高手Legend跟他提到我的想法時,他給我一個建議,就是使用Global variable ,他是一個可以使用在不同vi的變數,也就是說當我開兩個獨立的vi的時候,可以透過這種變數,將他們的關係連結起來,可能類似我上頭所說的那個方法。

相關使用可參考下面這個連結:
http://www.labviewpro.net/teach_content.php?fid=6&post=341&fpt=8

星期三, 7月 28, 2010

[Study]BMP 檔格式範例

相關的Bitmap格式以下的文章已經講解得很詳細了。

點陣圖(Bitmap)檔案格式

我貼上一些範例,如圖,上方的檔案是10*10像素全白的,下方則是10*10全黑的。
兩個檔案皆為單色圖像格式。

從第0x0036位元組算第4*N個位元組後為點陣圖資料,如圖中第0x0036位元組後八個位元組為Palette(調色盤資料),其中前四個代表黑色,後四個代表白色。


所以從0x003E開始每一個bit代表一個像素,每一行(or每一列待查),以DWORD來表示,以下為例,前10個bits代表一行(or一列),不過要用一個DWOED(4 bytes)來表示,所以一行還一列用了10bits後,剩下的32-10=22bits以零填補。
單色BMP格式範例

星期一, 7月 26, 2010

[PADS筆記]用到CAM的時候

轉Gerber  好像就會用到"CAM"選項,所以我把它記下來。

[PADS筆記]如何看PCB Layout有沒有錯誤

用在PADS 2005上。

直接看圖吧~。

星期五, 7月 16, 2010

[轉貼] word 如何製作目錄

因為是轉貼的,所以沒啥好說的。不過這個很實用,長時間沒用又會忘掉,先記下來。

轉貼網址

星期三, 7月 07, 2010

[轉貼]What is MTORR(Many To One Route Request)

突然發現我對ZigBee的了解還是不夠多~~

擷取轉貼來源:

ZigBee Pro Feature Set塵埃定 ZigBee商機現蹤

新通訊 2008 年 1 月號 83 期《 技術前瞻 》

文.張志龍

就應用而言,很多的情境會把資料集中收集,多數的節點都會把資料往同一個節點送,因此整個網路拓撲就像樹狀一樣。由於ZigBee Pro Feature Set並不使用樹狀路由的功能,此時為了建立樹狀的路由路徑,如果每個節點都做一對一路由要求(Unicast Route Request),才能建立往源節點(Originator/Source)的路徑,就會花很多時間,相較起來沒有效率,尤其是在規模較大的系統。  

為因應上述情形,ZigBee Pro Feature Set提出一個新的路由方式,稱為多對一路由(Many to One Route)。當發送多對一路由要求時,接收到這個封包的節點,就會直接建立一條往源節點路由的路徑,不須再透過路由回應(Route Reply)的機制建立資料傳送的路徑,所以很快的所有節點就會建好傳送路徑。反之若源節點要傳送資料給其他裝置,基本上還是得透過一對一路由要求的方式,建立起源節點對於其他節點的路由路徑。不過在ZigBee Pro Feature Set增加了一個源節點路由(Source Route)的功能,就是當路由路徑有變化時,節點會先發出一個路由紀錄命令(Route Record Command)給源節點,這個命令中會記錄這條路徑上經過的所有節點,當源節點接收到這個命令後,會把這條路徑記錄在一個叫做源路由表(Source Route Table)的表格中,只要源節點須要把資料傳送到其他節點時,就會先到Source Route Table找尋傳送的路徑,以加快時間,並且減少建立路由路徑或是做路徑修復的次數。而這些功能的目的都是為了增加網路上路由的效率。  

星期日, 7月 04, 2010

夏日,流浪

你喜歡夏天嗎~

整年最炎熱的季節,白天最長的季節,最會流汗的季節。

夏天,真的很適合流浪,那種炎熱的氣後,那種汗濕透的襯衫還有炙陽下的生機,我認為夏天,真的很適合行腳旅行。


星期二, 6月 29, 2010

[轉貼]阻抗匹配

最近要開始Layout了,不過這次有東西可以參考,是有東西可以模仿的。雖然如此,參考的資料也是有小小一疊需要閱讀,裡面就有提到阻抗匹配。


阻抗匹配?我大學畢業後就幾乎根本沒再碰的東西啊啊啊~~。

因此,我上網查了一些資料,日後慢慢看XD(謎:你還想要多慢)。

阻抗匹配

有關於RF的阻抗匹配(提到Smith chart ),這篇我想我會看不懂~~。

星期五, 6月 25, 2010

[轉貼]RF遙控器

最近要做器車座椅遙控器的提案,所以找了一些資料。以下這篇資料我覺得寫的還不錯(比我好XD),所以記錄下來囉。

http://www.im-perial.com.tw/rf遙控器會給電視遙控帶來什麼新氣象/

星期四, 6月 24, 2010

[轉貼]About Balun

來源:http://www.rimtai.com/chtr/products/Store/accessories.asp?CATL=70

平衡不平衡轉換器 (Balun) BALUN 是一種裝置, 它使平衡形式的天線  (例如: 偶極天線) 可用不平衡形式的饋線 (例如: 同軸電纜) 來供電, 反之亦然. 它的作用在於對稱與不對稱的電力饋送之間的相互轉換.
簡易的結構介紹, Balun 基本上是由高品質的高頻高壓線圈所組成, (等級視所設計的耐功率而定).一般日製品的耐功率較小, 而美製品的耐功率則以 1,500 W 的法定最大功率設計. 所以所使用的材質規格會較高. Balun 最常用的規格為 1:1, 製造方式用的以 3 條濾波線圈纏繞於 Air Core 空氣芯上構成 (通常成本比較低), 有些則纏繞於鐡粉芯構成 (成本較高一點, 但通常可用的頻寬會做的比較寬), 有些是絕緣套筒變壓器原理構成 (成本最高, 效能最好). 細節我們再以別的網頁來探討.
1:1 的 Balun  廣泛使用於對稱的偶極天線,
4:1 的 Balun  適用於 200ohm 負載對 50ohm 的負載, 或是 300ohm 的負載對應 75ohm 的負載
6:1 的 Balun  適用於 300ohm 負載對 50ohm 的負載, 或是 450ohm 的負載對應 75ohm 的負載
9:1 的 Balun  適用於 450ohm 負載對 50ohm 的負載, 或是 675ohm 的負載對應 75ohm 的負載, 這麼高比值的 Balun 也常用於不對稱的 Long Wire 天線
12:1 的 Balun  適用於 600ohm 負載對 50ohm 的負載, 或是 900ohm 的負載對應 75ohm 的負載, 這麼高比值的 Balun 也常用於不對稱的 Long Wire 天線, 矩環型或是三角環型 (Delta) V-beam 天線.

我才不要這麼多Router~~

安東尼提供我兩個解決方法,使用

Super Parents-他不會儲存child的資料,所以任何一個child醒來要奶喝她都照單全收,真是偉大(泣)。

使用#define EMBER_MOBILE_NODE_POLL_TIMEOUT,去調整EndDecvice資料存放在Parent的時間,時間到了之後,資料就會被清除,Parent就失憶了,新的EndDevice就可以加進來囉。

理論上是可以這樣做,不過我還沒試過,之後我再回頭看有沒有用囉,科科。

星期三, 6月 16, 2010

[筆記]時間管理術

最近看到這篇文章,對於開始工作的我來說,可能可以讓我對於自己的時間管理多了一分重視。

星期二, 6月 15, 2010

星期一, 5月 31, 2010

Ember em35x燒錄注意事項

這真的是一套很貴的玩具,對我而言,從大概三四個月就拿到這套東西,不過到現在還不算摸得非常熟~~

AIR是另外買的,且IAR的IDE不能將程式燒錄到em375晶片裡,所以根據"EM35x User Guide",想要做Debug,請依照以下步驟:


1. Start IAR Embedded Workbench. Open the workspace (*.eww).
2. Select Project > Options. Select the Debugger > J-Link/J-Trace category. Select the Connection tab.
3. Select TCP/IP Communication and enter the IP address of the ISA3. Click OK.
4. Embedded Workbench is not able to program the flash on the EM357. Every time the project is re-built, you must manually load it onto the EM357 (**using em3xx_load.exe) before starting a debug session.
5. Once the correct image has been loaded onto the EM357, select Project > Debug without Downloading to start the debug session.

**:這是em357燒錄程式:使用方式是,當你經過IAR IDE編譯過source code 後,會再編譯的資料夾多一個"某某.s37"的檔案,通常預設某某就是你Project的名稱,所以整個燒錄的過程是在Ms-Dos 底下,在產生某某.s37檔案的資料夾路徑下,鍵入

em3xx_load.exe 某某.s37

即可燒錄。

星期四, 5月 20, 2010

[PADS2005]如何讓一個大電路圖分別畫在很多張"紙"上

有時候電路圖很大,一張sheet根本就一下子畫滿了。

一種解決辦法是,將大佃路拆成很多小電路,個別畫在各個sheet上,然後再用"page off"連結在一起。

如何在現有的sheet加上sheet:

setup>>sheet

這樣原來的檔案會多一張sheet可以畫了。

星期五, 4月 30, 2010

Jennic to Ember

聽說Ember的價格比Jennic實惠,不過整個開發套件從硬體到發展軟體幾乎是Jennic的十倍,其實只是站在RD的角度有時候難以衡量。

Jennic已經用出一點心得了,但是轉換到Ember也已成定局,硬體也要交給我來處理,喔,這可是我第一個餐與硬體的案子哩~~。

希望順順利利的,給自己祝福。

星期二, 4月 27, 2010

[VC++]class serial port 的"Parity屬性"要怎麼更改

因為公司要做一些測試,所以要我寫一個可以使用RS-232通訊的程式。

於是我找了VC++ 2008來寫程式,裡面有提供一個class-Serial Port,並且我也參考了範例:http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx

因握我想作成視窗應用程式,所以照著這範例更改。

有些值我可以設定,另如
serialPort1->BaudRate=9600;
serialPort1->PortName="COM1";
不過像是
serialPort1->Parity
serialPort1->Handshake

我就不知道該怎麼設,我直接打"None"就跳出錯誤。



=======================


解決辦法:


首先我在Form1.h(我的情況是這個檔名)內加入

using namespace System::IO::Ports;

然後在主要的程式內
serialPort1->Parity=Parity::None;

如此寫法編譯就可以過了。
不過我還不清楚為何加入using namespace System::IO::Ports;編譯就可以過~~還有得學^^

星期日, 4月 25, 2010

Love life

今天去台北,除了預定跟書純和靖吃晚餐外,前一天仕堯找我去看他朋友的樂團表演,有一點驚訝外,我因此提早出門,想聽一聽仕堯提議的表演活動。

表演的地點在捷運國父紀念館站附近的"東區怪痛",這是一個樂團練團的場地,他隱匿在巷弄裡,我花了一番功夫才找到說。

仕堯的朋友樂團被排在第一組表演,團名叫做"愛妃(Aiphy)",整個音樂很重,因為我也不知道那算不算重搖滾,不過聽起來真的很過癮,鼓手打得超好,吉它手跟BASS手也都很投入,看表演就是這樣,就是想要看表演者們投入的樣子~~。


主唱在演奏中加入了一些低喃,聽起來真的有點迷幻,不過搖滾節奏又很重,整個感覺真的很不錯。再加上仕堯投影了他拍攝的影片在牆上,配合歌曲,讓我想到一些公路電影,在歌曲進行中我彷彿也在長路上旅行。


在現場我也遇到繼偉,其實是仕堯邀約他去的,繼偉有點過敏性鼻炎,擤鼻涕還不小心擤到手上,希望你能趕快好喔~~。


讓我印象深刻的是,在表演結束後,我們認識了另一個在場的工作人員,他想要找仕堯幫他們拍攝表演影片,也介紹了自己的樂團,後來我上網查到了他們的樂團,真的是超級震撼,是我之前我沒有特別接觸的一種音樂類型,讓我學到了不少,我還問了一個不專業的問題,問他們嘶吼演出後喉嚨會不會痛@@

介紹這個樂團表演:

直到看見鯨魚的眼睛-三分之一的天空




晚上我就隨即跟靖與書純去吃晚餐,與她們聊聊天,靖似乎有些困擾,書純也分享了一些建議,雖然我們已經將近兩個多月都沒有一起吃飯,不過每次見面,都總能放鬆盡興,真的又滿足又開心呢^^

最後,我跟書純回新竹前,跑去菜心的店裡面聊一下天,我真的很喜歡這家店的感覺,不論是裝潢與女老闆。友善與自在,我想是這家店最大的特色吧。

有時候,人們總想要做一些事情在他們的假期,他們可能會為了朋友的邀約搭著客運到另一個城市;可能會在午後坐在地下室聽著樂團演唱;有可能與第一次見面的人暢談未聽過的樂風;或者是與好朋友好好吃一頓飯,好好聊聊彼此的近況;當然也可以利用一些時間到喜歡的店裡找老闆交流一下。生命苦短,惟有好好地Love your life,才能夠看到更寬廣的世界^^

星期二, 4月 20, 2010

[專題]如何做出一條Jennic ZigBee的燒錄線

我問過Jason,他跟我說用一般的USB轉RS-232的線來做就好了。



max 232 circuit

星期一, 4月 05, 2010

[轉貼]Java 設定Classpath方法一覽!

我一開始想要學寫JAVA時,最怕就是碰到這種Hello World!都無法順利執行的情況。

以下的文章,幫我解決了這個問題。它說明了如何設定Class Path。
http://kevingo75.blogspot.com/2009/04/java-classpath.html

......

(2) 在執行的時候指定classpath
這應該是最常使用的方法,就是你在command line下指令的時候順便指定classpath。比如說:
java -classpath classpath1;classpath2 className

......

星期一, 3月 29, 2010

[轉貼]DHCP 協定

來源網址:http://www.pcnet.idv.tw/pcnet/network/network_ip_dhcp.htm

經過了前面的學習,相信您不再認為設定與管理 TCP/IP 網路是件輕鬆的事情。要成功的將您的網路用 TCP/IP 連接起來,您就得為每台電腦設定 IP、mask、gateway、等等繁瑣的事情。要是您想管理好一個比較大的網路﹐或是電腦節點經常改變(如手提電腦或撥接)﹐這樣的工作可以說是非常令人討厭的﹐而且出錯的機會也比較多。要是,萬一日後要進行 IP 重新規劃﹐其工作量也是相當驚人的。
面對這些情形﹐DHCP 可以說您的菩薩了﹕它不但救苦救難﹐而且神通廣大。
什麼是 DHCP?
DHCP 是 Dynamic Host Configuration Protocol 之縮寫﹐它的前身是 BOOTP。BOOTP 原本是用於無磁碟主機連接的網路上面的﹕網路主機使用 BOOT ROM 而不是磁碟起動並連接上網路﹐BOOTP 則可以自動地為那些主機設定 TCP/IP 環境。但 BOOTP 有一個缺點:您在設定前須事先獲得客戶端的硬體位址,而且,與 IP 的對應是靜態的。換而言之,BOOTP 非常缺乏 "動態性" ,若在有限的 IP 資源環境中,BOOTP 的一對一對應會造成非常可觀的浪費。
DHCP 可以說是 BOOTP 的增強版本﹐它分為兩個部份﹕一個是伺服器端﹐而另一個是客戶端。所有的 IP 網路設定資料都由 DHCP 伺服器集中管理﹐並負責處理客戶端的 DHCP 要求﹔而客戶端則會使用從伺服器分配下來的IP環境資料。比較起 BOOTP ,DHCP 透過 "租約" 的概念,有效且動態的分配客戶端的 TCP/IP 設定,而且,作為兼容考量,DHCP 也完全照顧了 BOOTP Client 的需求。
DHCP 的分配形式
首先﹐必須至少有一台 DHCP 工作在網路上面﹐它會監聽網路的 DHCP 請求﹐並與客戶端搓商 TCP/IP 的設定環境。它提供兩種 IP 定位方式﹕

Automatic Allocation
自動分配﹐其情形是﹕一旦 DHCP 客戶端第一次成功的從 DHCP 伺服器端租用到 IP 位址之後﹐就永遠使用這個位址。
Dynamic Allocation
動態分配﹐當 DHCP 第一次從 HDCP 伺服器端租用到 IP 位址之後﹐並非永久的使用該位址﹐只要租約到期﹐客戶端就得釋放(release)這個 IP 位址﹐以給其它工作站使用。當然﹐客戶端可以比其它主機更優先的延續(renew)租約﹐或是租用其它的 IP 位址。

動態分配顯然比自動分配更加靈活﹐尤其是當您的實際 IP 位址不足的時候﹐例如﹕您是一家 ISP ﹐只能提供 200 個IP位址用來給撥接客戶﹐但並不意味著您的客戶最多只能有 200 個。因為要知道﹐您的客戶們不可能全部同一時間上網的﹐除了他們各自的行為習慣的不同﹐也有可能是電話線路的限制。這樣﹐您就可以將這 200 個位址﹐輪流的租用給撥接上來的客戶使用了。這也是為什麼當您查看 IP 位址的時候﹐會因每次撥接而不同的原因了(除非您申請的是一個固定 IP ﹐通常的 ISP 都可以滿足這樣的要求﹐這或許要另外收費)。當然﹐ISP 不一定使用 DHCP 來分配位址﹐但這個概念和使用 IP Pool 的原理是一樣的。
DHCP 除了能動態的設定 IP 位址之外﹐還可以將一些 IP 保留下來給一些特殊用途的機器使用﹐它可以按照硬體位址來固定的分配 IP 位址﹐這樣可以給您更大的設計空間。同時﹐DHCP 還可以幫客戶端指定 router﹑netmask﹑DNS Server﹑WINS Server﹑等等項目﹐您在客戶端上面﹐除了將 DHCP 選項打勾之外﹐幾乎無需做任何的 IP 環境設定。
DHCP 的工作原理
視乎客戶端是否第一次登錄網路﹐DHCP 的工作形式會有所不同。
第一次登錄的時候

  1. 尋找 Server。當 DHCP 客戶端第一次登錄網路的時候﹐也就是客戶發現本機上沒有任何 IP 資料設定﹐它會向網路發出一個 DHCPDISCOVER 封包。因為客戶端還不知道自己屬於哪一個網路﹐所以封包的來源位址會為 0.0.0.0 ﹐而目的位址則為 255.255.255.255 ﹐然後再附上 Dhcpdiscover 的信息﹐向網路進行廣播。
    在 Windows 的預設情形下,Dhcpdiscover 的等待時間預設為 1 秒﹐也就是當客戶端將第一個 Dhcpdiscover 封包送出去之後﹐在 1 秒之內沒有得到回應的話﹐就會進行第二次 Dhcpdiscover 廣播。若一直得不到回應的情況下﹐客戶端一共會有四次 Dhcpdiscover 廣播(包括第一次在內)﹐除了第一次會等待 1 秒之外﹐其余三次的等待時間分別是 9﹑13﹑16 秒。如果都沒有得到 DHCP 伺服器的回應﹐客戶端則會顯示錯誤信息﹐宣告 Dhcpdiscover 的失敗。之後﹐基於使用者的選擇﹐系統會繼續在 5 分鐘之後再重複一次 Dhcpdiscover 的過程。
  2. 提供 IP 租用位址。當 DHCP 伺服器監聽到客戶端發出的 Dhcpdiscover 廣播後﹐它會從那些還沒有租出的位址範圍內﹐選擇最前面的的空置 IP ,連同其它 TCP/IP 設定,回應給客戶端一個 DHCPOFFER 封包。
    由於客戶端在開始的時候還沒有 IP 位址﹐所以在其 Dhcpdiscover 封包內會帶有其 MAC 位址信息﹐並且有一個 XID 編號來辨別該封包﹐DHCP 伺服器回應的 Dhcpoffer 封包則會根據這些資料傳遞給要求租約的客戶。根據伺服器端的設定﹐Dhcpoffer 封包會包含一個租約期限的信息。
  3. 接受 IP 租約。如果客戶端收到網路上多台 DHCP 伺服器的回應﹐只會挑選其中一個 Dhcpoffer 而已(通常是最先抵達的那個)﹐並且會向網路發送一個Dhcprequest廣播封包﹐告訴所有 DHCP 伺服器它將指定接受哪一台伺服器提供的 IP 位址。
    同時﹐客戶端還會向網路發送一個 ARP 封包﹐查詢網路上面有沒有其它機器使用該 IP 位址﹔如果發現該 IP 已經被佔用﹐客戶端則會送出一個 DHCPDECLINE 封包給 DHCP 伺服器﹐拒絕接受其 Dhcpoffer ﹐並重新發送 Dhcpdiscover 信息。
    事實上﹐並不是所有 DHCP 客戶端都會無條件接受 DHCP 伺服器的 offer ﹐尤其這些主機安裝有其它 TCP/IP 相關的客戶軟體。客戶端也可以用 Dhcprequest 向伺服器提出 DHCP 選擇﹐而這些選擇會以不同的號碼填寫在 DHCP Option Field 裡面﹕



    號碼代表意思
    01Sub-net Mask
    03Router Address
    06DNS Server Address
    0FDomain Name
    2CWINS/NBNS Server Address
    2EWINS/NBT Node Type
    2FNetBIOS Scope ID

    換一句話說﹐在 DHCP 伺服器上面的設定﹐未必是客戶端全都接受﹐客戶端可以保留自己的一些 TCP/IP 設定。而主動權永遠在客戶端這邊。
  4. 租約確認。當 DHCP 伺服器接收到客戶端的 Dhcprequest 之後﹐會向客戶端發出一個 DHCPACK 回應﹐以確認 IP 租約的正式生效﹐也就結束了一個完整的 DHCP 工作過程。

如上的工作流程如下圖:
DHCP 發放流程
第一次登錄之後
一旦 DHCP 客戶端成功地從伺服器哪裡取得 DHCP 租約之後﹐除非其租約已經失效並且 IP 位址也重新設定回 0.0.0.0 ﹐否則就無需再發送 Dhcpdiscover 信息了﹐而會直接使用已經租用到的 IP 位址向之前之 DHCP 伺服器發出 Dhcprequest 信息﹐DHCP 伺服器會儘量讓客戶端使用原來的 IP 位址﹐如果沒問題的話﹐直接回應 Dhcpack 來確認則可。如果該位址已經失效或已經被其它機器使用了﹐伺服器則會回應一個 DHCPNACK 封包給客戶端﹐要求其從新執行 Dhcpdiscover。
至於 IP 的租約期限卻是非常考究的﹐並非如我們租房子那樣簡單﹐ 以 NT 為例子﹕DHCP 工作站除了在開機的時候發出 dhcprequest 請求之外﹐在租約期限一半的時候也會發出 dhcprequest ﹐如果此時得不到 DHCP 伺服器的確認的話﹐工作站還可以繼續使用該 IP ﹔然後在剩下的租約期限的再一半的時候(即租約的75%)﹐還得不到確認的話﹐那麼工作站就不能擁有這個 IP 了。至於為什麼不是到租約期限完全結束才放棄 IP 呢﹖﹐對不起﹐小弟也是不學無術之人﹐沒有去深究了﹐只知道要回答 MCSE 題目的時候﹐您一定要記得 NT 是這麼工作的就是了。
要是您想退租,可以隨時送出 DHCPLEREASE 命令解約﹐就算您的租約在前一秒鐘才獲得的。

跨網路的 DHCP 運作
從前面描述的過程中,我們不難發現:DHCDISCOVER 是以廣播方式進行的,其情形只能在同一網路之內進行﹐因為 router 是不會將廣播傳送出去的。但如果 DHCP 伺服器安設在其它的網路上面呢﹖由於 DHCP 客戶端還沒有 IP 環境設定﹐所以也不知道 Router 位址﹐而且有些 Router 也不會將 DHCP 廣播封包傳遞出去﹐因此這情形下 DHCPDISCOVER 是永遠沒辦法抵達 DHCP 伺服器那端的,當然也不會發生 OFFER 及其他動作了。要解決這個問題,我們可以用 DHCP Agent (或 DHCP Proxy )主機來接管客戶的 DHCP 請求﹐然後將此請求傳遞給真正的 DHCP 伺服器﹐然後將伺服器的回覆傳給客戶。這裡﹐Proxy 主機必須自己具有路由能力,且能將雙方的封包互傳對方。
若不使用 Proxy,您也可以在每一個網路之中安裝 DHCP 伺服器﹐但這樣的話﹐一來設備成本會增加﹐而且﹐管理上面也比較分散。當然囉﹐如果在一個十分大型的網路中﹐這樣的均衡式架構還是可取的。端視您的實際情況而定了。
DHCP 封包格式
081624
31
OPHTYPEHLENHOPS
TRANSACTION ID
SECONDSFLAGS
ciaddr
yiaddr
siaddr
giaddr
chaddr(16 bytes)
sname(64 bytes)
file(128 bytes)
Options(312 bytes)


以下為各欄位的簡要說明:

OP
若是 client 送給 server 的封包,設為 1 ,反向為 2 。
HTYPE
硬體類別,Ethernet 為 1 。
HLEN
硬體位址長度, Ethernet 為 6 。
HOPS
若封包需經過 router 傳送,每站加 1 ,若在同一網內,為 0 。
TRANSACTION ID
DHCPREQUEST 時產生的數值,以作 DHCPREPLY 時的依據。
SECONDS
Client 端啟動時間(秒)。
FLAGS
從 0 到 15 共 16 bits ,最左一 bit 為 1 時表示 server 將以廣播方式傳送封包給 client ,其餘尚未使用。
ciaddr
要是 client 端想繼續使用之前取得之 IP 位址,則列於這裡。
yiaddr
從 server 送回 client 之 DHCPOFFER 與 DHCPACK 封包中,此欄填寫分配給 client 的 IP 位址。
siaddr
若 client 需要透過網路開機,從 server 送出之 DHCPOFFER、DHCPACK、DHCPNACK 封包中,此欄填寫開機程式碼所在 server 之位址。
giaddr
若需跨網域進行 DHCP 發放,此欄為 relay agent 的位址,否則為 0 。
chaddr
Client 之硬體位址。
sname
Server 之名稱字串,以 0x00 結尾。
file
若 client 需要透過網路開機,此欄將指出開機程式名稱,稍後以 TFTP 傳送。
options
允許廠商定議選項(Vendor-Specific Area),以提供更多的設定資訊(如:Netmask、Gateway、DNS、等等)。其長度可變,同時可攜帶多個選項,每一選項之第一個 byte 為資訊代碼,其後一個 byte 為該項資料長度,最後為項目內容。
CODELENVALUE
此欄位完全兼容 BOOTP ,同時擴充了更多選項。其中,DHCP 封包可利用編碼為 0x53 之選項來設定封包類別:
項值類別
1DHCPDISCOVER
2DHCPOFFER
3DHCPREQUEST
4DHCPDECLINE
5DHCPACK
6DHCPNACK
7DHCPRELEASE
DHCP 的選項非常多,有空請查閱 RFC 或相關文獻,並好好理解,這裡不再敘述了。

DHCP 協定之 RFC 文件
RFC-951﹑RFC-1084﹑RFC-1123﹑RFC-1533﹑RFC-1534﹑RFC-1497﹑RFC-1541

習題﹕


  1. 請問 DHCP 的前身是甚麼?還有,DHCP 是做甚麼用的?
  2. 請列舉 DHCP 的分配形式,並加以說明。
  3. 請詳述 DHCP 的發放流程,並留意不同階段所用的封包類型。
  4. 請用圖畫出 DHCP 的簡單發放流程。
  5. 請問跨網路的 DHCP 是如何運作的?
  6. 請繪 DHCP 的封包結構,並嘗試簡述每一欄位的意思。
  7. 請說明編碼為 0x53 至 DHCP Options 有哪些值,及其代表含意。

星期五, 3月 26, 2010

威士忌


帶著葡萄氣味的威士忌 帶著芬芳果香的威士忌 帶著煙燻潮土的威士忌,每一瓶經數年熟成蒸餾的玉液瓊漿,因產地的氣候與風土民情為他們帶來獨特的風味。


一口Johnnie Walker,代表一段歷史,一個產地,是本金色軟香的教科書,得靠五官而閱覽的經典


這是第三段~~。



星期一, 3月 22, 2010

失落

上個禮拜五參加了三中學弟的烤肉趴,地點是在大佳河濱公園。碰到了好多許久不見的朋友。而這次來的退伍的人,我已經是第二老的了。在場還在當兵的,大半都是我第一次見面。

那天我很HIGH,甚至覺得是裡面最HIGH的一個,覺得跟這些舊雨新知在一起,特別自在,我笑他們也笑,我叫他們也叫,就好像在潘朵拉星球上的族人一樣~~有種生命共同的感覺。

我終究是個群居動物,無法忍受孤單。

星期五, 3月 19, 2010

關於JN5139

(2010.4.20)最近查了資料,發現5139是有提供燒寫的函式,誤會一場,哈哈。

星期二, 3月 09, 2010

[轉貼維基]Electronic Shelf Label


Electronic Shelf Label
also known by the acronym ESL, is a system used by retailers for displaying product pricing on shelves. Typically, electronic display modules are attached to the front edge of retail shelving. These modules use Liquid Crystal Display (LCD) or similar technology to show the current product price to the customer. A communication network allows the price display to be automatically updated whenever a product price is changed. This automated system reduces pricing management labor costs and improves pricing accuracy.

上頭提到ESL是一個使用在零售商的一個可以顯示售價的系統。所以上頭會有個顯示模組,可能是LCD或者其他的顯示器。透過網路可以隨時變更並顯示售價。

星期一, 3月 08, 2010

[轉貼]如何解決Windows XP沒有「安全性」標籤

在開發WEB Project的時候,常常需要去設定一些安全性權限,但是有些人的XP就是找不到這個標籤。要怎麼解決這個問題?

有兩種方法:

第一種:

1. 在[我的電腦]中,選擇[工具]->[資料夾選項]

2. 在[檢視]中,將[使用建議檔案共用 (建議使用)]取消勾選。

setting

3. 然後你的安全性標籤就會顯示出來了.

第二種:

1. 在[開始]->執行->輸入regedit

2. 找到下列機碼(如果沒有找到,請自行新增),然後將值改為0

Hive: HKEY_CURRENT_USER
Key: Software\Microsoft\windows\CurrentVersion\Policies\Explorer
Name: Nosecuritytab
Type: REG_DWORD
Value: 1

P.S. 安全性標籤僅能在Administrator權限下使用, 且檔案系統需為NTFS.



另依篇文章提到關於這則的設定:


http://blog.xuite.net/jeanson61/xuite/12574494

星期四, 3月 04, 2010

[軟貼軟體設計必讀經典(11)反覆測試與修正,讓錯誤消失

http://www.ithome.com.tw/itadm/article.php?c=47536

寫程式之路還有很多事情需要去學習,每每寫到一個程度的時候,都會想說,有沒有更好的寫法,或是更好的規劃方式。就是這種富有彈性的工作,所以才不會變得枯燥。

不過在這個競爭的行業裏面,效率往往決定一切,我仍然會害怕悠悠哉哉的寫程式,老闆會生氣~~。

測試驅動開發除了讓軟體人員對測試工具有自我主宰的感覺,並藉此探索測試內部的機制外,還能提升勇氣──取代沈默寡言,而勇於嘗試更多的溝通交流。

  Test Driven Development By Example
 Kent Beck /著
 Addison-Wesley Professional出版
 售價:44.99美元
 推薦:Amazon四顆星

有一位軟體設計的夥伴,是我看過上千軟體人員之中唯一的天才。他不只學習能力快速,更具備靈活的頭腦與身段,抽象思考能力極高,擅長把軟體作「軟」的他,作品總是令人嘆為觀止。不過,我覺得他與國外的軟體先驅仍差了一截,並不是實作或學習能力不夠好,最主要的差距在於「創新能力」。

什麼是創新能力?舉個例子,我可以看得出早期EJB規格的問題點(軟體結構會被該規格綁死死的),所以會批判與避免使用它。Rod Johnson 卻不只是批判反對而已,而且還身體力行,寫出Spring Framework,實現IoC(Inversion of Control)、AOP(Aspect-Oriented Programming)的輕量級開發框架,釐清軟體開發人員與系統層級服務的責任。

另外,《Test Driven Development By Examples》作者Kent Beck在輔導專案的過程,有感於測試應伴隨所開發的程式碼,而不是延遲,所以主張「測試先行」(Test First),他甚至設計免費開放的JUnit Framework等測試框架,並寫書推廣正確觀念,讓開發者了解測試先行是維繫軟體品質的重要關鍵。太多大型單位把測試當作一個重要製程,但又交給其他部門,而且在開發後才展開測試,這樣的應變測試效果令人懷疑。

先測試,再反覆修正到正確為止
全書分成三大部分,前兩大部分是範例,第三部分則是測試驅動開發(Test Driven Development,TDD)的設計模式(Patterns)。
第一部分以一個「幣值轉換」的程式範例,利用Java程式碼揭露TDD的設計意涵。

看到這個範例,你可能會覺得程式碼的寫法實在不高明。是的, Kent Beck盡量模仿初學者的程度撰寫程式碼,這同時說明TDD簡單明瞭,能讓初學者快速上手,並懂得如何修正程式碼 (這其實已經逐漸走向設計之道了)。這部分內容讓你了解什麼才是Test First──還沒寫類別程式碼之前先寫測試程式碼。當然,測試一定不會過,再來才開始寫主題程式,新增類別、編輯屬性、修改參數……等。簡單的設計、列出工作清單、一次只解決一個問題、測試它、讓它正確……如此地反覆修正,這正是TDD最重要的精神。

第二部分藉由Python語法探索xUnit測試框架的設計過程,教你如何撰寫屬於自己的測試框架。你也許認為開發Framework相當困難,但Kent beck的作法是如此簡單,三兩下就可以開發出測試框架,而且在設計的過程中,還能秉持測試先行的原則。作者使用Python作為範例,原因除了語法易懂之外,因為Python屬於Script-Based語言,也能藉此證明Python能實現測試框架的實作。

不過,目前已有30多種程式語言支援xUnit Framework,為何作者還要鼓勵程式人員開發屬於自己的測試框架?

有兩個理由:一、讓你對測試工具有自我主宰的感覺;二、藉此探索測試內部的機制。

第三部分是TDD的設計模式,這部分談到測試的策略思考,包括測試的意涵、什麼時候要測試、應該選擇什麼樣的邏輯與資料作測試。

簡單就是力量
TDD的核心精髓是:讓程式碼可以運行並能保持純潔無瑕(Clean code that works)。另外還有兩項原則:一、只有自動化測試失敗時,才寫新的程式碼;二、消除重複(Duplication)。其中,消除重複又與系統架構的相依性(Dependency)設計有相當密切的關係,消除重複的程式碼後,系統的耦合(Coupling)程度往往能夠降低,進而提升可再利用性的價值。

Kent Beck 還特別在序文提到「勇氣」(Courage)。他認為測試驅動可以在開發過程中控制開發者的憂慮感,它可以讓你:快速具體地學習,而不是一直處於試驗性的階段;取代沈默寡言,而有更多的溝通交流;不是躲開回報,而是更能尋求具體有幫助的回饋(Feedback)。

當閱讀完本書後,我相信你應該就能掌握TDD的開發精神,能落實:(1)從簡單開始做起;(2)寫自動化的測試程式;(3)重構 (Refactor),而且每次只增加一個新的設計。

《作者簡介》王克明
台北工專五專部電子科畢業。現於HSDc軟體設計顧問團隊擔任架構師/顧問/講師。興趣為整體架構性的思考與學習、期貨投機操作與閱讀。

星期五, 2月 12, 2010

[轉]#ifdef _DEBUG

以前看過,不過這種東西一陣子沒看又忘掉了,所以還是把他存起來。

連結http://huenlil.pixnet.net/blog/post/24339151

接下來則是在知識+看到的,一些小問題知識家還是有不錯的答案可以參考。
連結

#ifndef _STDLIB_H_
#define _STDLIB_H_
... some code
....

#endif // of _STDLIB_H_

這樣的用法一般會寫在header file 當中.
目的是為了避免重覆include 同一個header file compiler 會發出重覆宣告的錯誤

用法如下
#ifndef _STDLIB_H_ // 如果沒有定義_STDLIB_H_ 這個macro 則下面的code 會被展開直到 #endif
#define _STDLIB_H_ // 定義 _STDLIB_H_


#endif // 結束 前制處理器的if 判斷 區段


所以當user 第一次include 時. _STDLIB_H_ 還沒被定義過. 此時#ifndef 到 #endif 的code 會被展開. 又此段當中有一個#define _STDLIB_H_ . compiler 就會記住_STDLIB_H_ 被定義過
當第二次在include 同一個檔案. compiler 發現 _STDLIB_H_ 被定意過了. 此時#ifndef 到 #endif 之間的code 就不會被展開了.
達到防止重覆include 的效果


example program 共3 個檔案
-----------------------------------------
file : abc.h
#ifndef _ABC_H_
#define _ABC_H_

const int a=100;

#endif // of _ABC_H_

-----------------------------
file : 123.h
#include "abc.h"


-----------------------------
file : main.cpp
#include "123.h"
#include "abc.h"

int main()
{
return 0;
}

把上面三個檔分別存成abc.h 123.h 跟main.cpp
compiler main.cpp 妳會發現不會有錯誤發生.
但是如果把abc.h 去除#ifndef _ABC_H_ 等等 如下面
file : abc.h
// 沒有#ifndef _ABC_H_ 的abc.h

// #ifndef _ABC_H_ <== mark 掉
// #define _ABC_H_ <== mark 掉

const int a=100;

// #endif <== mark 掉

再次compiler main.cpp
妳會發現compiler 會跟妳說 a 重覆宣告
VC 的error 如下
f:\temp\abc.h(7) : error C2370: 'a' : redefinition; different storage class
f:\temp\abc.h(7) : see declaration of 'a'

星期日, 1月 17, 2010

How to use DEV C++ Debug

我不得不說當我一開始用Dev學習C++的時候,並不會使用debug的功能,完全是靠cin與cout來看看程式有沒友執行錯誤,後來使用TI的CCS才發覺breakpoint與watch window是我debug必用的工具。

現在回來使用DEV的時候,才發現我不會用它的debug,看了它的Help只看到了一個"ID DEBUG PROCESS"關鍵字,卻不知道要怎麼使用,想說DEV已經是很GUI的設計,Debug會做得那麼難使用嗎~~。

還好我隨手google一下,發現我錯了,其實他還是蠻容易的,不過我的步驟錯了。

以下是Dev C++的一種Debug的步驟:
原始網頁:

1.code先編譯(Ctrl+F9)
2.再設中斷點
3.debug(F8)

原本點選的中斷點那行底色變成藍色代表程式跑到該行,此時也可以使用watch window。



星期一, 1月 04, 2010

在DEV C++上開發GTK+

我想這篇是我怕下一次忘了怎麼用,人啊,還是做一下紀錄比較好。

今天試了將近整整一天,發現怎麼樣安裝,DEV總是出現很多錯誤,明明CODE都是未修改過的Sample Code。

最後,我找到這篇文章:

我照著做到最後,還是有錯誤發生,後來我想到會不會是牽涉到中文檔名與碰到中文路徑的問題,所以我把專案的名稱改成英文,並存在D槽底下,沒想到就這樣給他成功了。
不過目前發現程式上按鈕的字都是顯示亂碼,看起來還有得學~~。