2007年12月24日 星期一

[note] More Effective C++ 2/e (3)

item 25:Virtualizing constructors and non-member functions
將 constructors 及 non-member functions 的行為虛擬化。

item 26:Limiting the number of objects of a class
限制 class 能產生的物件數量。

item 27:Requiring or prohibiting heap-base objects
了解要求或禁止物件產生在 heap space 的手法。

item 28:Smart Pointers
了解 smart pointer (auto_ptr) 的用法。

item 29:Reference counting
了解 reference counter 的實作手法。

item 30:Proxy classes
了解 proxy class 的用法。

item 31:Making functions virtual with respect to more than one object
讓函式可以根據一個以上的物件型別來決定如何虛擬化。

item 32:Program in the future tense
在未來時態下開發程式:提供完整的 class、設計容易被正確運用的 class、儘量使 code 一般化。

item 33:Make non-leaf classes abstract
如果有一個俱象類別 C 繼承另一個俱象類別 B,應該想辦法提煉出抽象類別 A,使 B 和 C 都繼承自 A。

item 34:Understand how to combine C++ and C in the same program
了解在 C++ 中使用 C 函式所會引發的問題,如 Name Mangling、Statics initialize、dynamic memory allocation 和資料結構的相容性。

item 35: Familiarize yourself with the language standard
儘可能地習慣 C++ 語言。

[note] More Effective C++ 2/e (2)

item 9:Use destructors to prevent resource leaks
使用 auto_ptr 配合 destructor,避免在 exception 發生時產生 resource leak。

item 10:Prevent resource leaks in constructors
注意 constructor 裡發生 exception 時,是否會產生 resource leak 及避免之。

item 11:Prevent exceptions from leaving destructors
當 destructor 產生 exception 時,別讓它被丟出 destructor (一定要處理之)。

item 12:Understand how throwing an exception differs from passing a parameter or calling a virtual function
了解丟出 exception 與傳遞一個參數或呼叫虛擬函式的不同。

item 13:Catch exceptions by reference
用 by reference 的方式來取得 exception。

item 14:Use exception specifications judiciously
明智地使用 exception specifications。

item 15:Understand the costs of exception handling
了解 exception handling 的成本。

item 16:Remember the 80-20 rule
讓 80% 的時間都在執行 20% 的程式碼。

item 17:Consider using lazy evaluation
考慮使用 lazy evaluation (拖挺戰術)。

item 18:Amortize the cost of expected computations
分期償還期的計算成本。

item 19:Understand the origin of temporary objects
了解暫時物件的產生時機。

item 20:Facilitate the return value optimization
了解並會協助 compiler 做 return value optimization。

item 21:Overload to avoid implicit type conversions
使用 overloding 技術來取代隱型轉型

item 22:Consider using op= instead of stand-alone op
使用 op= 來完成 op 的動作,例如使用 += 來完成 +。

item 23:Consider alternative libraries
考慮使用更理想的函式庫。

item 24: Understanding the costs of virtual functions, multiple inheritance, virtual base classes, and RTTI
了解虛擬函式、多重繼承、虛擬繼承及 RTTI 的成本。

2007年12月12日 星期三

[note] More Effective C++ 2/e (1)

item 1:Distinguish between pointers and references
了解 pointer 及 reference 的差異。

item 2:Prefer C++-style casts
使用 C++ 的轉型。

item 3:Never treat arrays polymorphically
別以多型的方式來處理陣列。

item 4:Avoid gratuitous default constructors
非必要不提供 default constructors。

item 5:Be wary of user-defined conversion functions
小心隱式轉型所帶來的危險 ( 以explicit禁止之 )。

item 6:Distinguish between prefix and postfix forms of increment and decrement operators
了解前置式累加(減)與後置式累加(減)的本質及差異。

item 7:Never overload &&, ||, or ,
不覆寫 && || 及 ,,否則會影響傳統上 compiler 對於條件式的 short-circuit 特性。

item 8:Understand the difference meanings of new and delete
了解不同意義的 new 與 delete,如 new operator、operator new 及 placement new。

[note] Effective C++ 3/e (6)

item 41:Understand implicit interfaces and compile-time polymorphism
了解隱型介面,以及編譯時期的多型 。

item 42:Understand the two meanings of typename
了解 typename 兩種不同的意義。

item 43:Know how to access names in templatized base classes

item 44:Factor parameter-independent code out of template

item 45:Use member function templates to accept all compatible types

item 46:Define non-member functions inside templates when type conversions are desired

item 47:Use traits classes for information about type

以 traits classes 來對型別做分類及辨視型別。



item 48:Be aware of template metaprogramming

了解 meta-programming,將執行時期的運算提早至編譯期,以提高效率。



item 49:Understand the behavior of the new-handler

item 50:Understand when it makes sense to replace new and delete

item 51:Adhere to convention when writing new and delete

item 52:Write placement delete if you write placement new

item 53:Pay attention to compiler warnings

item 54:Familiarize yourself with the standard library, include TR1

item 55:Familiarize yourself with Boost

2007年10月25日 星期四

[note] Effective C++ 3/e (5)

Item 32:Make sure public inheritance model is-a
public 繼承表示著 is-a 的關係。

Item 33:Avoid hiding inherited names
不遮避繼承而來的名稱。

Item 34:Differentiate between inheritance of interface and inheritance of implementation
適當地利用 virtual function 來達到介面繼承與實作繼承的關係,並區別兩種的不同。

Item 35:Consider alternatives to virtual functions
考慮以其它方式 (例如 NVI 或 Strategy pattern ) 來取代 virtual function。

Item 36:Never redefine an inherited non-virtual function
重新定義繼承而來的 non-virtual function 永遠是錯的。

Item 37:Never redefine a functions's inherited default parameter value
不重新定義繼承而來的預設參數值。

Item 38:Model has-a of implemented-in-term-of through composition
利用 composition 製造出 has-a 的關係。

Item 39:Use private inheritance judiciously
審慎決定使用 private 繼承 (private 繼承的層級通常比 composition 低)

Item 40:Use multiple inheritance judiciously
當鑽石型多重繼承時,請審慎使用虛擬繼承 (virtual inheritance)。

2007年10月16日 星期二

[note] Effective C++ 3/e (4)

Item 26:Postpone variable definitions as long as possible
變數要用時才宣告,不僅提高可讀性,也可以避不必要的成本。

Item 27:Minimize casting
可以不轉型就不轉型。

Item 28:Avoid returning handles to object internals
避免傳回一個 pointer 或 reference 指向物件裡的成員。

Item 29:Strive for exception-safe code
確保處理 exceptions 的 code 不會有任何問題。

Item 30:Understand the ins and outs of inlining
不要亂用 inline。

Item 31: Minimize compilation dependencies between files
降低編譯時檔案間的相依關係(使用factory functions)。

[note] Effective C++ 3/e (3)

Item 18:Make interface easy to use correctly and hard to use incorrectly
提供簡單明確,而且不易被誤用的介面。

Item 19:Treat class design as type design
設計 class 就如同設計一個 type。

Item 20:Prefer pass-by-reference-to-const to pass-by-value
傳遞參數給函式時,請使用 pass-by-reference-to-const 來代替 pass-by-value

Item 21:Do not try to return a reference when you must return an object
當必須回傳一個物件時,避免傳回 reference

Item 22:Declare data membes private
把 data member 都宣告成 private,以確保封裝性。

Item 23:Prefer non-member non-friend functions to member functions
為避免破壞封裝性,可以適當使用 non-member non-friend functions 來取代 member functions

Item 24:Prefer non-member functions when type conversions should apply to all parameters
若參數皆需要型別轉換,最好寫成 non-member functions (尤其對於 operator overloading)

Item 25: Consider support for a non-throwing swap
當你特化或重載 swap 函式時,別讓它丟出 exceptions

2007年10月14日 星期日

[note] Effective C++ 3/e (2)

Item 13:Use object to manage resources
利用 constuctors 及 destructors 被呼叫的時機這特性,來幫忙管理資源。

Item 14:Think carefully about copying behavior in resource-managing classes
在資源管理類別中,要注意 copy 的行為是否會導致什麼問題。

Item 15:Provide access to raw resources in resource-managing classes
使用物件(類別)來管理資源時,也要提供界面來存取原始資源。

Item 16:Use the same form in corresponding uses of new and delete
使用什麼型式的 new,就要使用什麼樣型式的 delete。

Item 17: Store newed objects in smart pointers in standalone statements
將 new 出來的物件放入智慧型指標。

2007年10月12日 星期五

[note] Effective C++ 3/e (1)

雖然以前已經把 Effective C++ 2/e 看完了,但那本書的出版時間已經是六年前了,上週逛天瓏就順手再買了 Effective C++ 3/e,翻了一下,內容上第三版與第二版其實差異不大,主要還是在談論一些 C++ 的開發經驗,以及一些重要而且常會犯錯誤,並且刪除了一些過時的 item,增加了一些新的東西,如 Boost 及 multi-threads 的開發注意事項。許多 C++ 開發者給 Effective C++ 的評論都是:沒有讀過 Effective C++ 及 More Effective C++ 的話,別說你懂 C++。

接著就慢慢整理每個Item的重點,雖然很多觀念在 2/e 都講到爛了,不過還是做個筆記吧:

Item 1:View C++ as a feduration of language
C++是由四個次語言所組成:C,Object-Oriented C++,Template C++,STL。

Item 2:Prefer const, enums and inline to #define
除非必要,否則儘量使用 const, enums 還有 inline 來取代 define,

Item 3:Use const whenever possible
儘可能使用 const (常數,函式及operators)

Item 4:Make sure that objects are initialized before they're used
確保每個物件在使用前已經initialized

Item 5:Know what functions C++ silently writes and calls
了解 default constructors,default copy constructors 及 default assignment operator 如何被產生

Item 6: Explicitly disallow the use of compiler-generated functions you do not want
若不想使用 compiler 產生的東西,就想辦法拒絕 (宣告成private,只宣告,不定義 )

Item 7:Declare destructors virtual in polymorphic base classes
若你的繼承結構中有 virtual functions 的話,記得加上一個 virtual destructors

Item 8:Prevent exceptions form leaving destructors

在destructors中放入exceptions時,要注意是否完備 (在任何情形下,資源皆會被釋放)



Item 9:Never call virtual functions during constructors or destructors
別在 constructors 或 destructors 中呼叫 virtual functions

Item 10:Have assignment operators return a reference to *this
讓 assignment operators 回傳 *this

Item 11:Handle assignment to self in operator=
在assignment operator overloading 中,記得處理 a=a 的情形

Item 12:Copy all parts of an object
在做物件的 copy 時,記得把所有部分都 copy 好 (像是內含 pointer 的物件 )

to be continue...

2007年9月26日 星期三

wordpress 2.3 released

熱騰騰的 wordpress 2.3 在今天發佈了,有自己架 wordpress 的人可以準備更新了,

changelog 可以到 http://wordpress.org/development/2007/09/wordpress-23/ 來看。

2007年9月24日 星期一

Octopus !?

本來想逛逛 TinyOS 首頁看有沒有什麼新東西,於是就在首頁上看到一篇以 Octopus 為題的 news,瞬間嚇了一跳,還以為實驗室的成果被 Berkeley 看上了,仔細看後發現是撞名了,對方的 Octopus 是個可以監控 mote 的軟體,跟我們大不相干,那麼,我們可以檢舉他們嗎?還是我們會被檢舉呢?哈哈!

2007年9月9日 星期日

Logitech VX Revolution 入手

這是我人生中,買過最貴的一隻滑鼠。

由於本來華碩送的光學鼠按鍵有點怪怪的,常常點一下會送出兩下(按鍵卡住?),於是就考慮買一隻無線雷射鼠,目標就選定了Logitech VX RevolutionVX Nano,這兩隻就外觀上而言,Revolution 較有人體工學的設計,而 Nano 比較普通;就功能上 Nano 可以說是 Revolution 的簡化版,但 Nano 最大的特色,也就是他的賣點,就是他的接收器非常小:

Nano 的接收器 (Nano的接收器)

插在筆電上就不用再去管接收器在那裡了,因為也不需要再考慮收起來的問題。

昨天到黃色鬼屋,沒看到 Nano,而 Revolution 要價2.5k,實在買不下手,回家在 y 拍找了一家光華的店面,只要1.9k左右(黃色鬼屋你貴太多了吧),當然今天就衝去逛了一下,Nano有送保護套,Revolution 居然沒有,兩者之間實在難以決擇。

最後我選了 VX Revolution,除了外觀個人認為較好看外,多了兩個可程式化的按鈕,有更多事情可以交給滑鼠去做,工作上更方便了,像我這樣長期使用電腦工作的人,會希望手可以一直放在鍵盤上,或是一直握著滑鼠,能避免手在鼠盤上切換就儘量避免,但實際上不太可能,所以鼠盤的功能愈大,手移動的機會就能夠降低。

2007年8月27日 星期一

設定 IP 轉址 (NAT)

用iptables只要兩行指令就可以完成,假設我對外的 interface 是 eth0 的話:
# echo "1" >  /proc/sys/net/ipv4/ip_forward

#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

記得要有 root 權限

2007年8月25日 星期六

快速安裝開發micaz,tmote還有客製 mote 的 tinyos 1.x

因為我們實驗室有自行開發的 mote,要用同一套 tinyos 來開發這些 mote,常常會有設定不好的情形出現,底下簡單記錄一下快速安裝步驟,可以用來開發 micaX 系列的 mote 還有 tmote-sky,連自行開發的硬體也只要簡單加入組態檔就能輕易使用.

1. 先下載 t-mote 的開發工具組 (boomerang),解開並安裝 :台灣官方網站載點

2. 安裝好後你應該已經有了cygwin的環境以及msp430的開發工具.然後到 tinyos 的官方網站下載下列套件:下載頁面

  • Atmel AVR Tools










然後將這些檔案複製到 cygwin 的目錄裡,開 shell 進去安裝.

$rpm -ivh --force xxx.rpm

3. 再來可以選擇性地更新其它套件,例如 msp430 tools,nesc 或是 tinyos-tools.到此為止,你的環境已經可以開發micaX的 mote了.

4. 接著就是要加入敝實驗室的 mote 組態,使 tinyos 可以編譯出我們要的 image.
首先下載 octopusX.zip,解開來會有兩個目錄:octopus,octopus2 及兩個檔案:octopus.target 及 octopus2.target



octopus 目錄放到 /opt/tinyos-1.x/tos/platform/

octopus.target 放到 /opt/tinyos-1.x/tools/make/

octopus2 目錄放到 /opt/moteiv/tos/platform/

octopus2.target 放到 /opt/moteiv/tools/make/

5. 完工,這麼一來,你應該可以在 tinyos 的 apps 目錄裡編譯 octopus;在 moteiv 的 apps 目錄裡編譯 octopus2 了

2007年8月22日 星期三

使用windows的遠端桌面連線操作ubuntu

Windows 裡所提供的遠端桌面連線跟 vnc 的速度比起,實在是快多了,不得不說 rdp 這個協定還蠻有效率的。

那麼我們能不能在 Linux 底下使用 rdp 這個協定呢,托開放原碼之福,Rdesktop (UNIX 下的 rdp client) 的作者也建立了 xrdp 這個專案,就是要在 Linux 下 實作 rdp server,如此一來,即使你使用 windows,也可以用內建的遠端桌面連線來使用 Linux桌面了,安裝的話,在ubuntu 6.10 以前官方站台還有提供,可直接用 apt-get 安裝,可是在7.04裡卻被拿掉了?只好手動安裝了:
1. 首先先從官方網站下載 xrdp 的原始碼 : 連結

2. 解開它並編譯
$tar -zxvf  xrdp-0.4.0.tar.gz

$make

$sudo make install


 3. 啟動 xrdp
$sudo /etc/local/xrdp/xrdp_control.sh start

4. 完工,可以找一台 windows 連看看了。

2007年8月14日 星期二

新生訓練投影片:WSN TestBed

投影片在此

作了四十幾張,扣掉一些不重要的頁面也還有二三十張,可是卻跟Zigbee的十幾張花一樣的時間講完 @@

2007年8月7日 星期二

firefox 書籤線上同步的好工具 : Google Browser Sync

如題, Google Browser Sync 是一個用來同步FireFox書籤的extension,當打開 firefox 時會自動下載線上的書籤,之前所開的視窗,cookie,還有所存的密碼,當你關掉firefox時,再將這些資訊寫回線上資料庫,方便極了

2007年8月3日 星期五

圖形化 sudo 及用 Gnome 檔案總管開啟終端機

在 Gnome 下預設的檔案總管是 Nautilus,但是 Nautilus 有一個大缺點,就如果要複製檔案到非自己的目錄時,就會發生錯誤(當然,因為沒有權限),但是 Nautilus 又沒有一個好的機制詢問使者這個問題,以往的做法大概就是用終端機去開 Nautilus;即:
$sudo nautilus &

但這樣實在太不人性化了,幸好 Gnome 提供了圖型化的 sudo,名為 gksu 以及 gksudo,用它來執行程式的時,會先跳出一個對話框要你輸入密碼,然後就能以特權身份執行該程式,此外,針對 Nautilus,還有幾個好用的外掛,當然直接用apt-get裝就行了:

nautilus-open-terminal:可以在 nautilus 裡直接開終端機。

nautilus-gksu:可以在 nautilus 裡直接以特權身份開終端機。

2007年7月29日 星期日

新生訓練投影片:Zigbee and Z-Stack

上週給實驗室碩一(零)新生上的zigbee簡單介紹,內容大約半小時,簡單地講了什麼是Zigbee還有Z-Stack,及以實驗室的一套Zigbee開發套件。

投影片

學 java script

為了趕流行,也為了重學 Web Design 的技術,最近也開始重新學 java script 了,上一次學這東西已經是高中的時候了。在Web2.0風行的今日,只好重新溫習這個簡單又複雜的工具,配合 HTML,CSS 與 XML,也順便了解一下目前網頁開發技術,不然要變成古代人了。

工具書呢,當然挑選 O'Reilly 的 Java Script : The Definitive Guide 5/e:



希望我的學習效率能好一點。

題外話,歐萊禮的書愈來愈有質感了,整個排版,紙質,內文,還外加個書套,真的是一整個專業,這一年內入手的三本O'Reilly書籍都是這種新式風格,目前資訊類的書,大概只有侯捷與歐萊禮能夠這麼吸引我了。

IPC通訊:pipe system call

繼 mkfifo 後,在閱讀 Linux Kernel 3/e 時又發現了一個好物:pipe

雖然也是 pipeline 的東西,但它是一個 system call,也就是可以直接在程式中使用它,以前所用的 IPC 溝通方法不外乎 shared variables,沒有注意到 pipe 這個好用的工具,這麼一來就不用額外建立 node 了,也不用開兩個processes來處理了。

pipe的使用方法很簡單, 在 code 裡直接呼叫 pipe,但要傳入一個大小為 2 的 int array,array[0]當作讀出的管線,array[1]當作寫入的管線,就可以fork出來或用thread,讓兩個行程互相通訊了。

在此要注意的是,在 POSIX 裡所定義的為Half-duplex pile(半雙工管線),也就是要使用某個fd(file descriptor)時,就要關另外一個,若是想要雙向通訊時,就要開兩個pipe;然而在某些UNIX實作了Full-duplex pile(全雙工管線),可以同時讀寫兩個FD。

那麼最重要的,pipe在Linux中是如何實作呢,可惜答案並不是雙向的,不過也不會像POSIX所定義的那麼麻煩,不同於POSIX,在Linux裡使用某個FD時,並不需要關掉另一個,不過若要雙向通訊,還是必需建立兩個pipe就是。

簡單的程式範例:
int fd[2];

int i;

if (pipe(fd)) /* create pipe */
fprintf(stderr, "pipe error\n");

else
if (fork()) /* parent will be reader */

{
close(fd[1]); /* close the `write' pipe */

read(fd[0], &i, sizeof (int)); /* read an integer */

printf("Read the value %d\n", i);

}

else /* child: the writer */

{
close(fd[0]);

srand(time(NULL));

i = rand();

printf("Writing the value %d\n", i);

write(fd[1], &i, sizeof (int));

}

2007年7月28日 星期六

WSN TestBed 架構圖

wsn.jpg

其實這個 TestBed saturn 學長 的畢業論文,前兩天他把架構圖給畫好了,看了一下覺得功能寫得太完美了吧,接下來是我要完成耶@@,例如資料庫的部分,目前應該是還沒用到(還是已經偷偷弄好了?),不過系統上的功能已經差不多都可以上線了,最重要的是,學長都把最難搞的網路線及電線佈好了,未來我應該只要改良,以及加入一些人文上的機制,應該就差不多了吧?

用 mkfifo 來重導 I/O

在我們Lab的WSN TestBed系統中,每顆node其實都用有線網路接回主機,但是node的I/O介面並不是RJ-45的接頭(Octopus I與Octopus II分別是rs232及USB),那麼要怎麼走Ethernet呢,答案就是用Convertor,像是這個 UT-620,就是將RS232轉成Ethernet的東西,由於其Driver都只有給windows的,那我在 ubuntu 上要怎麼用呢?

這個Convertor有個web的管理介面,看了一下裡面有一些設定TCP/IP的選項(設定ip及port,還月TCP或UDP),心裡高興了一下,難道這麼簡單嗎,於是馬上寫了個簡單的socket程式與它溝通,結果真的是這樣,OK,那麼我就只要在Linux裡弄個虛擬的tty device不就得了?接著開始研讀手邊的 Linux Device Driver 3/e ,發現寫 Driver 還蠻不容易的,很多C/C++的Library都不能用,連socket都不行,要用KSocket(在Kernel中用的),這根本是太噁心了,誰會想為了這一個小功能去學Kernel Socket,因此我停了許久,後來終於在ptt LinuxDev版認識了 mkfifo (Linux裡的工具)。

mkfifo是用來做為兩個process溝通的橋樑,屬於IPC的東西,作法就是用mkfifo建立一個虛擬的pipeline file, A process 將資料寫到這個pileline,另一個B process也可以從這個pipeline讀出東西,這豈不是我要的功能嗎?

mkfifo 用法很簡單, mkfifo --mode=MODE <pipeline name>,就可以了

希望USB也是如此....

2007年7月17日 星期二

PHP 4 end of life announcement

PHP官網發出來的消息,在PHP5釋出三年後的今天,PHP4已經正式走入歷史,不再開發,而新的PHP6也準備要釋出,記得我開始接觸PHP時還沒有版本的代號出現,若照推算應該是在PHP1的年代吧,沒錯,我對網頁開發的技術還是等留在古代,看來應該找時間好好地重新學習PHP才是。

2007年7月11日 星期三

ubuntu 7.04 處理 USB 裝置的 bug ?

昨天把tmote-sky插到電腦上的USB時,居然找不到/dev/ttyUSBX,仔細一看才發現,/dev/ttyUSBX只出現短短約一秒鐘,然後就不見了,可是在另一部電腦上做同樣的事卻是正常的,而兩部電腦的作業系統都是ubuntu,不過一台是7.04一台是6.10,難道7.04版本的處理方式不同於6.10?google了一下卻找不到相關的討論串,加上/dev/ttyUSBX有出現,只是又消失了,判斷應該是因為某個原因crash掉了,最後終於在tinyos-help上找到有人也提出相關的問題,試了一下就解決了 :D

步驟如下:
1. 移除 brltty 套件 (看了說明,應該是用不到的東西)

2. 重新安裝 udev 套件

3. 重開機

2007年7月8日 星期日

行事曆軟體 Sunbird 0.5

上週由Mozilla所推出的行事曆軟體Sunbird 0.5,在這個版本中,除了提高了穩定性及效能外,也支援了各家行事曆軟體的格式,方便使用者能從其它軟體輕鬆地轉移過來,而我認為最大的特色,就是能與google行事曆做同步,不過要另外裝plugin就是,以往要用google calendar時,一定要在能上網的地方用,現在可以先寫在本機上,等到上線時再更新上去,方便不少。

2007年7月7日 星期六

NetBeans 6.0 M10 釋出

喜歡用java開發軟體的人不可錯過的一套IDE:Netbeans,除了Eclipse外,Netbeans也是一套非常不錯的open source IDE,前幾天M10終於釋出了,這個版本是6.0正式版前最後一個milestone版本,看了一下發佈的消息,6.0這個版本不只可以開發java,也支援了Ruby,(J)Ruby,Rails,掛上plugin也可以開發C/C++,UML等等,寫C/C++能自動產生Makefile,也有了ctag+cppcomplete的功能(應該說是code complete),一個好用的IDE該俱備的功能它幾乎都有了,正式版釋出後,其它的IDE大概也可以丟了吧XD

2007年6月13日 星期三

瀏覽器新選擇:Safari3

WWDC2007 中,Apple介紹了他們的新瀏覽器 Safari3,不但可以在Apple平台上跑,也能夠在windows xp及vista裡跑,由於是Apple出品的,在介面上也有著Apple一慣的風格與質感。另一方面,windows平台下的瀏覽器也多了一種新選擇,Apple也要來搶攻IE及Firefox的市場了。

pure-ftpd 將 / 固定在自己的家目錄

在 ubuntu系統中,加入 ChrootEveryone 到 /etc/pure-ftpd/,內容為 yes,

restart後再登入ftp就只能在自己目錄活動了。

2007年6月11日 星期一

論文寫作用詞

在某BBS上看到的,要找出處已經不見了@@a

google一下其實也有,不過也沒有原始出處

http://tw.myblog.yahoo.com/marie-0126/article?mid=121&prev=156&next=119
1.論文不叫做report,aricle 叫做study/work....etc..

2.no I ,碰到非用不可用we

3.no 未來式 盡量用現在式 不得已用 something is corrently underway 取代未來式
以下這些字最好換掉

affect→influence、impact

A agree with B→A correlate with B、A correspond to B

carry out→implement、execute、promulgate

change→modify、adjust、alter、vary

check或prove→verify、confirm、demonstrate

complicated→complex、cumbersome

consider→evaluate、access

correct / incorrect→precise / imprecise、accurate / inaccurate

depends on→relies on、hinges on

different→various、varied、varying、distinct

find→obtain、derive、attain、locate、identify

help→assist、facilitate、guide、direct

important→critical、crucial、essential、pertinent、relevant、significant、vital

improve→enhance、upgrade、elevate

is made of→consists of、comprises of

little或few→slightly、seldom、negligibly

make clear→elucidate、clarify

make sure→assure、ensure

meet(滿足)→satisfy、fulfill、adhere to

much或greatly或strongly→markedly、significantly、substantially

problem→obstacle、limitation、restriction、shortcoming、drawback、phenomenon

needs→requires、stipulates

proposes→presents、describes

realize→comprehend、perceive、understand

solve→alleviate、modify、resolve、eliminate、eradicate

suitable→appropriate、adequate

tries→attempts、aspires、aims

usually→normally、typically、generally

[軟體] VirtualBox 1.4

Innotek 公司在前幾天推出了虛擬機器軟體 VirtualBox 1.4 版,過去除了使用VMWare或是Virtual PC外,現在又有了一個免費的新選擇,VirtualBox 的授權有兩種,一就是GPL,二是個人使用的免費版本,支援多國語言、64位元的主機,Mac與新的Vista都可以裝進去。ubuntu user 可以直接抓deb檔下來安裝,或是使用apt-get,以下為debian-base的source列表:
deb http://www.virtualbox.org/debian feisty non-free

deb http://www.virtualbox.org/debian edgy non-free

deb http://www.virtualbox.org/debian dapper non-free

deb http://www.virtualbox.org/debian etch non-free

deb http://www.virtualbox.org/debian sarge non-free

deb http://www.virtualbox.org/debian xandros4.0-xn non-free

MySQL的預設編碼?

在一些安裝了 MySQL Server 的系統上,不曉得是什麼原因,預設的連線編碼、校對甚至是資料庫與資料庫欄位的編碼皆是latin1_swedish_ci,雖然使用上可能還是正常,但是配合其它工具軟體來看時,就可能爆炸啦,但是直接改編碼方式又會破壞資料,解決的方法我是使用 phpMyAdmin 備份出來,重設資料庫編碼成 utf-8,再將資料匯入:

1. 下載 phpMyAdmin 套件

2. 修改 phpMyAdmin/libraries/select_lang.lib.php
在裡頭找到這行

'utf-8'        => 'utf8',   改成

'utf-8'        => 'latin1', 存檔

3. 使用phpMyAdmin把資料庫備份出來,這時應該看的到正確的中文字

4. 把資料庫的所有編碼都改成 utf-8,並清空或刪除資料庫。

5. 把 phpMyAdmin/libraries/select_lang.lib.php 改回原本設定,再匯入已備份的資料庫就行了,此時所有編碼應該都是 utf-8。

PS:以上皆假設對所有資料庫有完整權限。

Full Circle Ubuntu magazine 第一期出版

fullcirclemagazine出版了第一期的ubuntu電子雜誌,內容介紹了很多在ubuntu中使用的自由軟體,而且都是Open Source的軟體,對於剛入門Linux的新手,是本很有幫助的雜誌。

線上看雜誌連結: http://www.scribd.com/doc/99695/Full-Circle-MagazineIssue-1

PDF版本:http://www.scribd.com/word/download/99695?extension=pdf 

[軟體]Thunderbird 中文版使用 MinimizeToTray 的問題

這幾天因為把ThunderBird從1.5.x更新到2.0.x,也從以往用的英文版換成正體中文的版本,發現MinimizeToTray這個功能好像有點問題,只要隨便按個鍵就縮下去了,這樣的話不是等於鍵盤掛了?一開始懷疑是2.0.x版與其不相容,找了一下MinimizeToTray的官方網站,都沒看到類似的討論串,難道是中文版的關係?到moztw.org找了一下,發現真的是官方的MinimizeToTray與中文套件有不相容,改用了台灣社群裡的patch版本,就正常了。

2007年6月8日 星期五

ubuntu 7.04下安裝 ns2

1. 安裝所需要的軟體
$sudo apt-get install build-essential

$sudo apt-get install tcl8.4 tcl8.4-dev tk8.4 tk8.4-dev

$sudo apt-get install libxmu-dev

2. 從 http://www.isi.edu/nsnam/ns/ 下載 NS2 All in One 套件
$tar xvfz ns-allinone-2.31.tar.gz

$cd ns-allinone-2.31

$./install

3. 等一段時間後,在 .bashrc 裡加入 path 設定 (以下請自行改成ns2所在的目錄位置)
export PATH=$PATH:/home/username/ns-allinone-2.31/bin:/home/username/ns-allinone-2.31/tcl8.4.14/unix:/home/username/ns-allinone-2.31/tk8.4.14/unix

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/username/ns-allinone-2.31/otcl-1.13:/home/username/ns-allinone-2.31/lib

export TCL_LIBRARY=$TCL_LIBRARY:/home/username/ns-allinone-2.31/tcl8.4.14/library

4. 執行 ./validate 驗證安裝

2007年5月31日 星期四

ubuntu 6.06 升級 6.10

兩個方法:

(1) 使用update-manager,較為簡單
$gksu "update-manager -c -d"

(2) 手動使用apt-get
$sudo apt-get install ubuntu-desktop

$sudo sed -e 's/\sdapper/ edgy/g' -i /etc/apt/sources.list

$sudo apt-get update

$sudo apt-get dist-upgrade

$sudo apt-get -f install

$sudo dpkg --configure -a

重開機後就升級完畢了

2007年5月30日 星期三

console port login in ubuntu 6.10 and later

之前用 6.06 時,要關掉console port(ex: /dev/ttyS0)只要到/etc/inittab 裡把相關的敘述comment起來就可以了,但是我在另一塊板子要關時,居然沒有/etc/inittab這個檔,google一下發現原來6.10把login相關設定都交給/etc/event.d/去做了,所以 ls 一下/etc/event.d/,裡面大概長這個樣子
$ ls /etc/event.d

control-alt-delete  rc0           rc1  rc4  rcS          tty1  tty4  ttyS0
logd                rc0-halt      rc2  rc5  rcS-sulogin  tty2  tty5
rc-default          rc0-poweroff  rc3  rc6  sulogin      tty3  tty6

$

打開 ttyS0 來看,改了一下就可以把console login 關掉了

2007年5月29日 星期二

在 Ubuntu Linux 中安裝 TinyOS

TinyOS是一套開發Sensor/Mote系統的開發函式庫,由柏克萊大學所開發.在官方首頁上,提供了windows平台上的tinyos安裝套件,當然,是基於cygwin環境下的軟體,但卻沒有方便於Linux平台的安裝方法(官方所提供的是Red Hat平台下的rpm套件),這對於一些Linux使用者實在大為不便,在看了Chad Metcalf這篇TinyOS Installation for Moteiv's Tmote Sky後,知道原來已經有人在ubuntu上成功裝了tinyos,而且還可以用來開發Tmote Sky,這對於目前參與協助的TestBed計畫實在有大大的助力,於是就來裝裝看吧!

1. 首先拿出這次的硬體平台,也就是之前用過的net4501,並在上面先裝好ubuntu(我實驗的版本為6.10).

2. 接著在 /etc/apt/sources.list 中加入
deb http://tinyos.stanford.edu/tinyos/dists/ubuntu edgy main

以及 ubuntu edgy multiverse版本軟體套件

3. 準備好一些基礎軟體
$sudo apt-get update

$sudo apt-get install cvs subversion autoconf automake1.9 python-dev

$sudo apt-get install g++-4.0 gperf swig sun-java5-jdk graphviz alien fakeroot

$sudo apt-get install g++-3.4 tinyos-msp430 tinyos-avr

4. 為了方便我們在使用tinyos以及本機上的Linux,我們加入一些shell script讓我們方便切換環境變數
先下載 .bash_tinyos放在家目錄下,然後在.bashrc中加入
# Add this to your .bashrc

if [ -f ~/.bash_tinyos ]; then
. ~/.bash_tinyos

fi

這麼一來,我們可以直接鍵入tos1將環境變數改成tinyos1.x的環境;鍵入tos2改為tiny0s2.x的環境,或是鍵入boomerang使用tinyos1.x+Boomerang的環境

5. 使用CVS將最新的tinyos開發套件全抓下來
tinyos 1.x


$cvs -d:pserver:anonymous@tinyos.cvs.sourceforge.net:/cvsroot/tinyos login

$cvs -z3 -d:pserver:anonymous@tinyos.cvs.sourceforge.net:/cvsroot/tinyos co tinyos-1.x

$sudo mv tinyos-1.x /opt

tinyos 2.x (optional)
$cvs -d:pserver:anonymous@tinyos.cvs.sourceforge.net:/cvsroot/tinyos login

$cvs -z3 -d:pserver:anonymous@tinyos.cvs.sourceforge.net:/cvsroot/tinyos co tinyos-2.x

$cvs -z3 -d:pserver:anonymous@tinyos.cvs.sourceforge.net:/cvsroot/tinyos co tinyos-2.x-contrib

$sudo mv tinyos-2.x /opt


6. 接著我們在Moteiv的網站上下載TMote所需要的工具軟體 Boomerang,然後轉成ubuntu上的deb套件檔來安裝
$mkdir tmote

$unzip tmote-tools-2_0_4.zip -d tmote

$cd tmote/common/rpms

$fakeroot alien -d tinyos-moteiv-2.0.4-1.cygwin.noarch.rpm

$sudo dpkg --install *.deb

$rm -rf tmote $sudo chown -R $USER /opt/moteiv

註:若使用tinyos1.x的話,也要把1.1.15的rpm檔轉成deb檔來down-grade系統的tinyos

7. 最後修改一下java serial communication的設定
在$TOSROOT/beta/TOSComm/comm/Makefile中,將JAVADIR指定為 /usr/lib/jvm/java-1.5.0-sun 即 JAVADIR=/usr/lib/jvm/java-1.5.0-sun

然而把它install
$alias g++=g++-3.4;

$cd $TOSROOT/beta/TOSComm/comm ; sudo make ; sudo make install

$cd $TOSROOT/beta/TOSComm/packet ; sudo make ; sudo make install

8. 最後檢查一下,看看有沒有錯誤,即大功告成
$/opt/tinyos-1.x/tools/script/toscheck

2007年5月21日 星期一

Open PCMan 2007 Beta 釋出

相信許多常使用BBS系統的人,都對PCMan很熟悉,PCMan最早是由現任陽明大學醫學系洪任諭同學所開發,經過不斷的改良,在2005年與數名熱心網友共同重新開發出以GTK+為基礎的PCMan X pure gtk+2,這個版本的特點就是可跨平台.然而,在2006年底洪同學無私地將PCMan原碼以GPL釋出,讓所有人都能夠參與開發,也更名為Open PCMan,雖如此,大家還是視洪同學為主的Open PCMan開發團隊所釋出的為官方版本,目前最新版是前幾天所發佈的Open PCMan 2007,即是國產軟體,又是Open Source專案,為目前使用BBS的首選軟體.

Dell 推出 ubuntu PC

自由軟體技術網看到的新聞,原文連結來自Desktoplinux.com

主要是Dell推出了一部PC還有一部Notebook,其預載的作業系統是Ubuntu Linux,其實在台灣這種銷售方式一直都有,雖然非常地少,而且說實在的沒什麼搞頭,因為台灣一般的電腦使用者還是使用Windows,加上一些特定軟體以及遊戲都綁在Windows上,要這些使用者改變他們的習慣去重新學習使用Linux,是不太可能的事,或許電腦新手能夠很容易的學習,但這畢竟是少數.而一些習慣使用非windows的人呢?不管他們買的是搭載什麼作業系統的電腦,都有能力能夠把它變成他們想要的,這麼一來,又何必特別去購買搭配Linux的電腦呢?

此外,發展Linux的是各個社群,並非有商業行為的公司行號(Red Hat公司賣的是服務,並非Linux軟體),所以要把它拿來跟Windows或是Mac作比較,我個人是覺得不太合適,因為他們的定位跟本是不一樣的,常聽到有人會說什麼幾年後Linux會打敗Windows這種鬼話,這至少要等到Linux作業系統本身商業化後再來談論,目前來講是不可能的.當然,並不是Linux差,而是它本身在作業系統的市場中,並不是扮演一個產品的角色,而是一個自由發展的系統,所以也不用去管它到底贏不贏了.

2007年5月18日 星期五

虛擬化技術簡介

以下文章部分內容參考自Run!PC160期,”x86伺服器虛擬化的進度/何信達”一文

----------------------------------------------------------------------------------------------------------------------------------

前陣子買Notebook時作了一點功課,在比較CPU效能時,發現Intel有一項新的賣點,就是虛擬化技術(Virtualization Technology).而許多人花了錢,買了俱有VT的CPU,真的能增加效能嗎?事實上大部分的User根本用不到VT,那麼VT到底是什麼呢?

在伺服器的領域當中,常為了節省硬體成本,而在一部server利用虛擬機器軟體,模擬出數台虛擬伺服器,達到一機多用的結果,但是這樣所帶來的缺點,就是效能大大地降低,而VT技術就是在CPU裡動手腳,使得虛擬系統可以更快速的使用硬體,這樣不僅能讓可以增加VM數量,提高伺服器使用率,也帶來更大的效能.

目前x86伺服器的虛擬化技的發展,大概有三種不同的架構

  • Hosted-Base


不變更作業系統及硬體,虛擬化軟體以應用程式的角色在系統上執行,這樣效能最差,而且其它應用程式亦會影響其效能.


  • Hypervisor-Based


Hypervisor-Based是目前的主流發展,常見的VMWare,Microsoft及Xen皆屬於這種,概念上就是簡化及加速虛擬化軟體使用硬體,實作的方式大概又分為兩種,一種將虛擬機所需要的driver內建於原作業系統中,這麼一來,作業系統就會變的很龐大,另一種方式就是由各虛擬機器管理各自的driver,這樣可以達到比較好的效能,例如WinHEC裡提到的MicroKernelize架構,使得虛擬機器可以直接使用硬體.


  • Kernel-Based


這是目前許多人在探討的一項新技術,像是Qumranet所提出的KVM(Kernel-based Virtual Machine)概念,讓作業系統的kernel可以直接使用Intel VT或AMD-V的虛擬化技術,在kernel上需要搭配QEMU的CPU模擬程式,讓虛擬機器可以直接使用硬體.

以往在x86的protected mode下,有四種優先權的處理模式:Ring0~Ring3,Ring0是最大的權限,可以直接存取硬體,而Ring3就是應用層軟體的權限.一般CPU加上虛擬化軟體的架構下,Hypervisor/VMM擁有Ring0,虛擬機器擁有Ring1,而Ring1要存取硬體需要經過一些轉換,降低了效能,所以VT技術就被提出,用來解決此問題,概念上就是設計一個特殊權限讓虛擬機器可以直接存取硬體,用來管理這個的元件,在Intel CPU上稱作Virtual Machine Extensions,這麼一來,虛擬機器就直接以Ring0執行,而不需經過轉換,效能就可以提升很多.

2007年4月19日 星期四

新一代 C++ Standard Library 2.0 : Boost

Boost 是新一代的 C++ Standard,最初由熱心的 C++ 標準委員會所創立,加上 C++ 社群的努力開發,組成了 Boost 程式庫.這些開發者對於 C++ 的發展頗大,都是核心級的人物,所以 Boost 想當然而,將會是 C++ 新一代的 Standard.目前已有10個 Boost Library 被收錄至 C++ Standard Library Technical Report (TR1),下一個階段將有更多程式庫被收錄至 TR2 內,然而發展成成熟的 C++ Standard Library 2.0.

為了體驗這個嶄新的標準,我就在我的電腦上裝上 Boost,利用 Visual Studio 2005 來搭配使用,(當然,你也可以使用其它常見的工具),其支援的 Compiler 如官網示 http://www.boost.org/more/getting_started.html#Tools

1. 先到Boost首頁,然後點取下載頁面

2. 下載 boost 以及 boost-jam 兩個套件:將 boost 解開放至某個目錄下(如 C:\ ),再將 boost-jam 裡頭的 bjam.exe 放至 boost 目錄中 (如 C:\boost_1_33_1 )

3. 開個 cmd 到 C:\boost_1_33_1,先將 VS8 的環境變數設定好(可以執行 C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat )

4. 最後執行 bjam -sTOOLS=vc-8_0 install 開始編譯,經過一段時間後,就把 Boost Library 編譯好了

5. 打開 VS8,把 include 目錄及 lib 目錄設定好,即可開始使用 Boost 所提供的便利

目前 Boost TR1 所提供的組件:
String and text processing
Containers
Iterators
Algorithms
Function Objects and higher-order programming
Generic Programming
Template Metaprogramming
Preprocessor Metaprogramming
Concurrent Programming
Math and numerics
Correctness and testing
Data structures
Input/Output
Inter-language support
Memory
Parsing
Programming Interfaces
Miscellaneous
Broken compiler workarounds

2007年3月31日 星期六

VB.NET 裡的 ListView 自定排序

在VB.NET,或者說是 .Net Framework 2.0 裡ListView,提供了一個排序的 member function:Sort( ),但是這個sort預設的排序方法,是根據第一個subitem中的string來作排序,這麼一下來排數字的時候就相當的不便,在此,VB.NET提供了一個可以自定排序的方法,就好像C++裡的,我們會override "<" 這個 operator 一樣.

於是,我們就在專案裡新增一個class來實作IComparer這個interface:

Public Class Mysort : Implements IComparer
Function Compare(ByVal a As Object, ByVal b As Object) As Integer Implements IComparer.Compare
Dim c1 As Integer = Integer.Parse(CType(a, ListViewItem).SubItems(0).Text)
Dim c2 As Integer = Integer.Parse(CType(b, ListViewItem).SubItems(0).Text)

If (c1 > c2) Then
Return 1

End If

If (c1 < c2) Then
Return -1

Else
Return 0

End If

End Function

End Class

然後,把要排序的ListView,裡面的排序準則設成這個class的一個實體,再呼叫Sort,就會依我們方式來排序了
Dim mysort As New Mysort
Me.ListView1.ListViewItemSorter = mysort
Me.ListView1.Sort()

2007年3月25日 星期日

Vista 開發技術 - WPF

WPF 是 Windows Presentation Foundation的縮寫,簡單來說,可以想成是vista上的Windows API,具有新的外觀以及圖型效果,而且有新的設計哲學,由於是Microsoft下一代的開發技術,必定是未來開發Windows應用程式重要一環,雖然Microsoft在Visual Studio .NET 2007裡才會內建WPF,不過現在只要去MSDN網站上抓一些extension下來,一樣能使用WPF.

我的測試環境如下:
Windows XP SP2 CHT

Visual Studio .NET 2005 CHT

.NET Framework 3.0

Visual Studio Extention for .NET Framework 3.0

裝好 Extension 後打開 Visual Studio,新增專案一下,多出了WPF的選項

wpf1.jpg

.NET Framework 3.0 與 2.0 有個很大的不同,就是3.0是採用XAML來描述有關視覺的部分,也就是傳統的Form部分,而邏輯部分就用VB或C#來處理,在新增WPF專案後,在IDE裡也多出了一個XAML的視窗:

wpf2.jpg

XAML與C#的關係,就好像Apollo裡的MXML與Action Script一樣, 所有程式都可以只利用C#開發出來,而只有少部分的程式可以僅利用XAML開發,看來還是由C#主導一切,深入一點看,所有XAML的描述,都會在編譯時被轉成程式碼,只是扮演一個輔助的角色吧?

WPF的釋出,顯然是要與Apollo競爭,但它們仍有各自適合的地位,像是要開發Windows Vista程式時當然就是用Visual Studio + WPF,而有需要跨平台時,就可以考慮使用Apollo囉.

2007年3月17日 星期六

Intel 將推出 802.11n 晶片組

IEEE所制定的802.11n規格目前只到2.0版的草案,而Intel似乎等不及3.0版(預計今年六月寄出,八月確定),以2.0為基礎,發起connect with Centrino計畫,原因專案代號為Kedron的802.11n技術,正式命名為Intel Next-Gen Wireless-N.之前宣稱要在年初推出的Santa Rosa平台,至今仍未上市(有謠言說在今年五月才會正式推出),無論如何,下一代Intel平台上市後,就能夠使用擁有五倍以上的傳輸效能了

2007年3月15日 星期四

用wiimote來代替滑鼠及簡報器

由於wiimote本身是用藍芽與主機溝通,所以是不是只要寫個driver,就能拿來當作滑鼠使用呢?



答案是肯定的,而且已經有人寫出driver了,要做到這件事情,你必需要有
1. wiimote,就是wii的手把

2. 電腦,而且有藍芽設備

3. Internet

接著我們開始把wiimote與電腦 ”接” 在一起吧:

1. 首先我們先下載 GlovePIE,目前最新版本為0.29 載點

2. 把你的藍芽設備弄好,並搜尋電腦附近的藍芽裝置 (就是你的wiimote) ,同時,按下wiimote上的1,2鍵,這樣電腦就可以找到wiimote了








3. 連接上之後,我們解開剛下載的GlovePIE,並執行GlovePIE.exe



4. 選擇 File -> Open,先打開 WiimoteScripts\WiiMouse 0.1.PIE



5. 如此一來,便可以使用wiimote來操控滑鼠,A鍵就是右鍵,B鍵就是左鍵

但是WiiMouse這個script實在是不好控制,因為它只根據mote中的感測速度的sensor來做出反應,所以各位可以試試其它的script,像是WiiMouse IR.PIE,可以搭配wii所附的紅外線裝置來做定位,使mote更加準確

firefox2 好用的 extensions

IEtab 快速IE的工具,可以以分頁形式在firefox裡用IE看網頁

tab catalog 分頁預覽,功能同IE7裡的分頁預覽

plainoldfavorites 共享IE我的最愛,上方選單會多出IE裡的”我的最愛”

noscript 擋住script

2007年3月7日 星期三

[ubuntu] 在ubuntu中使用WPA加密的無線網路

實驗用的AP是FON,作業系統是ubuntu 6.10

先設定驗證資料

#wpa_passphrase SSID WPA_Key > /etc/wpa_supplicant/fonera.conf

#wpa_supplicant -BDwext -ieth1 -c/etc/wpa_supplicant/fonera.conf

再DHCP取得ip就可以了

#dhclient eth1

2007年3月2日 星期五

[ubuntu] 安裝gcin

ubuntu站台上的gcin已經很舊了,所以我們要加入新的站台
$sudo vim /etc/apt/sources.list
加入

deb http://www.calno.com unstable main

deb-src http://www.calno.com unstable main

$sudo apt-get update

$sudo apt-get install gcin im-switch

$im-switch -s gcin

重開X即可


2007年1月30日 星期二

架設PXE網路開機服務來為net4501安裝ubuntu

PXE全名Preboot Execution Environment,是一種可以讓機器透過網路來載入作業系統的服務,而一般都是拿它來安裝作業系統,特別是在沒有額外儲存裝置或是要大量安裝的機器上. 它的原理大概是這樣,機器開機時,在網路中要一個ip(透過dhcp機制),然後順便透過tftp還有nfs將作業系統的核心抓到本機上執行.

以下是我在ubuntu6.06上安裝的過程:

1.要架設PXE,首先在來源機器上先安裝好需要的軟體
$sudo apt-get install tftp-hpa tftpd-hpa

$sudo apt-get install dhcp3-server

$sudo apt-get install nfs-common

2.設定dhcpd
編輯 /etc/dhcp3/dhcpd.conf

加入

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.12 ;
filename "pxelinux.0";
}

其實這是簡單的dhcp設定, 但額外需要加上 filename "pxelinux.0"; 來載入OS的核心

3.設定tftp並放置OS核心(安裝來源)
(1)確認tftp服務有打開: $cat /etc/inetd.conf 應該會有tftp的敘述

(2)執行 $sudo update-inetd --enable BOOT

(3)確認 /etc/default/tftp-hpa 的內容是否為
#Defaults for tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"

(4)把OS核心或你下載的ISO檔,解壓縮到 /var/lib/tftpboot
$lftp -c "open http://archive.ubuntu.com/ubuntu/dists/dapper/main/installer-i386/current/images/; mirror netboot/"

$cp -a netboot/* /var/lib/tftpboot

$cd /var/lib/tftpboot/

$tar xfz pxeboot.tar.gz

(4) 因為我是在net4501這塊板子上安裝,因而沒有vga界面,所以必須動點手腳
編輯 pxelinux.cfg/default

將 print screen 的敘述拿掉,並把install的參數改成

LABEL install
kernel ubuntu-installer/i386/linux
append console=ttyS0,19200n81 initrd=ubuntu-installer/i386/initrd.gz ramdisk_size=16417 root=/dev/ram rw --


4.當然,欲使用網路開機的機器,必需支援PXE開機才行,找一部有PXE功能的機器試試,應該就可以成功了

參考

Mandriva One 2007 Metisse

前陣子我在ubuntu上裝了XGL,不知是硬體設備太差還是我設定有誤的關係,只有幾項簡單的效果有出來,希望ubuntu社群能盡快地把它包進去XD










2007年1月7日 星期日

[ubuntu] 關掉serial port login的服務

編輯 /etc/inittab ,把有關tty的東西comment掉,存檔離開並執行 #init q 就可以了.

要打開的話,就 uncomment 吧.

[ubuntu] 修改自動掛載的usb device權限

在比較新的Linux套件中,都支援自動掛載usb的功能,也就是一個usd裝置插入後,能夠像windows那樣判別是什麼裝置,然後提供一個存取它的方式,而Linux在自動掛載時,會給它預設的權限,但這不一定是我們相要的,雖然chmod可以做,但實在太不方便了,以下我以usb的視訊為例,更改其預設的權限,當然,前提是你已經設定好其driver了.

1. 將目錄切到 /etc/udev/rules.d
$cd /etc/udev/rules.d

2. 裡面應該會有有關permission的檔案
在ubuntu 6.10中存在一個叫40-permissions.rules的檔

3. 編輯此檔
$sudo vim 40-permissions.rules

4. 由於我要設定的視訊,所以找到裡面有關video devices區塊
# Video devices
SUBSYSTEM=="drm", GROUP="video"
SUBSYSTEM=="dvb", GROUP="video"
SUBSYSTEM=="graphics", GROUP="video"
SUBSYSTEM=="video4linux", GROUP="video"
KERNEL=="agpgart", GROUP="video"
KERNEL=="nvidia*", GROUP="video"

5. 參考其它區塊的範例,在video4linux後端加上 MODE="0666" ,如下
# Video devices
SUBSYSTEM=="drm", GROUP="video"
SUBSYSTEM=="dvb", GROUP="video"
SUBSYSTEM=="graphics", GROUP="video"
SUBSYSTEM=="video4linux", GROUP="video", MODE="0666"
KERNEL=="agpgart", GROUP="video"
KERNEL=="nvidia*", GROUP="video"

#當然,也可以改成你所要的權限

6. 存檔離開,此時重新插入usb裝置(視訊),權限就是你所要的

2007年1月5日 星期五

[Linux] 檢查開啟某些檔案的行程

有時候,系統上某些檔案或裝置(其實Linux上的大多的硬體裝置都有一個虛擬檔案),被某些行程所開啟或佔用,一時間我們可能找不出,例如要將cdrom umount掉時,系統卻告訴你device is busy,但我們卻找不出是誰在用,此時,我們需要的是lsof

以下是幾種常用的功能:

1.列出某個process所開啟的檔案
$lsof -p
或 $lsof -c



2.列出某裝置上的user正在幹麼
$lsof /dev/tty1 /dev/pts/0

3.列出已開啟socket的process
$lsof -i

2007年1月3日 星期三

[ubuntu]在ubuntu上重新編譯核心

在ubuntu上要更新kernel,通常只要裝kernel-image就會自動幫你弄的好好的,可是有時image中的模組並不會滿足我們的需求,因此就可以自重編核心.

1.若使用ubuntu 6.10 的話,要先把/bin/sh換掉,因為/bin/sh在6.10中預設是指向/bin/dash,而我們要把它指向/bin/bash
#rm -f /bin/sh
#ln -s /bin/bash /bin/sh

2. 安裝所需要的工具
#apt-get update
#apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

3. 下載kernel原始碼,解開它,並建立一個link指向它
#cd /usr/src
#wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.1.tar.bz2
#tar xjf linux-2.6.18.1.tar.bz2
#ln -s linux-2.6.18.1 linux
#cd /usr/src/linux

4. 下載並套用所需要的patch
#bzip2 -dc /usr/src/patch.bz2 | patch -p1 –dry-run
#bzip2 -dc /usr/src/patch.bz2 | patch -p1

5. configure kernel的設定
#make menuconfig
或者可以先套用目前的設定
#cp /boot/config-`uname -r` ./.config
再make menuconfig裡把它load進來

6. 開始編譯了
#make-kpkg clean
#fakeroot make-kpkg –initrd –append-to-version=-custom kernel_image kernel_headers

7. 安裝核心
#cd /usr/src
#ls -l
#dpkg -i linux-image-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb
#dpkg -i linux-headers-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb

8. 若需要的話,修改grub的選單
#vim /boot/grub/menu.lst
#grub-install /dev/hda

9. 重開機並驗證
#shutdown -r now

#uname -a


參考網頁

[ubuntu]安裝EW-7318Ug USB無線網卡

1. 首先先到RALink官網上抓Linux的driver,要抓RT2571W/RT2671USB的
http://www.ralinktech.com/ralink/Home/Support/Linux.html

2. 把它編譯好,並掛起來
$sudo apt-get install linux-headers-$(uname -r) build-essential g++-3.4
$wget http://www.ralinktech.com/drivers/Linux/RT73_Linux_STA_Drv1.0.3.6.tar.gz
$tar -xvf RT73_Linux_STA_Drv1.0.3.6.tar.gz
$cd RT73_Linux_STA_Drv1.0.3.6/
$cd Module/
$sudo cp -v Makefile.6 ./Makefile
$make all
$sudo cp -v rt73.ko /lib/modules/`uname -r`/kernel/drivers/usb/net/
$sudo mkdir -pv /etc/Wireless/RT73STA
$sudo cp -v rt73.bin /etc/Wireless/RT73STA/
$dos2unix rt73sta.dat -f
$sudo cp -v rt73sta.dat /etc/Wireless/RT73STA/rt73sta.dat
$sudo insmod /lib/modules/`uname -r`/kernel/drivers/usb/net/rt73.ko

3. 檢查模組相依性
sudo depmod -a

4. 使用 iwconfig , ifconfig 等工具設定好就可以用了

參考資料