2008年7月27日 星期日

程式之美讀後感

其實程式之美這本書,根本就是現代版的名題百則。我大概在八九年前,參加高中生資訊比賽時讀過這本 C 語言名題百則,而且也只看了前半部吧,記得高一時有學長拿第一題 "最長平台" (Plateau) (註) 來問我,當時我只會直觀地以暴力法解之,當他告訴我裡面的所謂正解後,我才明瞭原來解題可以這麼漂亮、這麼有趣,之後即讓我對 programming 產生很大的興趣。這本名題百則對當時參加比賽的眾學生而言,幾乎是人手一本,但我居然沒有,至今我無法成為個頂尖的程式員,大概是這個原因吧 (笑)。而程式之美這本書呢,他的全名為 "程式之美-微軟技術面試心得",雖然如此,但它並不是一本教人如何面試微軟,或是面試任何軟體公司的攻略,而是一本以許多的資訊及數學的問題為例,引導讀者如何思考一個問題,並列出各種解法的題庫,正如其名,探索程式之美麗。

註:已知一串由小排到大的陣列;平台的定義:是由一串連續相同元素所組成,而連續範圍也是有限制,不可能無止盡的。EX:1、2、2、3、3、3、4、5 其中 "1"、"2、2"、"3、3、3"、"4"、"5" 都是平台,寫程式讀入一串陣列,並找出最長平台 (上例中 "3" 就是最長平台)

A sample of template meta-programming

C++ template 的發展動機其實很簡單,就是要增進程式碼的重覆利用性以及讓我們得以建立型別安全的容器,研究後最後發現,C++ template 機制本身是一部完整的 Turing-complete,可以被用來計算任何可以計算的值,進而衍生出 meta-programming 的概念。簡單說來,meta-programming 就是寫程式來產生程式碼 (由compiler產生,稱為俱現化,instantiation),再編譯成機器碼,這樣的好處就是可以把一些計算提到編譯時期處理,提高程式的效率也提早發現錯誤。通常拿來當作學習 C++ meta-programming 的程式大概就是階乘的計算,傳統上計算階乘的方法不是迭代法就是遞迴法,但這兩種方法都是在程式的執行時期才計算,以下簡單地給了非 meta-programming 版本以及 meta-programming 的版本,欣賞在編譯時就將數值計算完畢的神奇,也給對 meta-programming 有興趣的程式員一個入門的動力:

傳統版:
unsigned int Factorial (unsigned int n)
{
if ( n<=1 ) return 1 ;
else return n*Factorial(n-1);
}


int main()
{
cout << Factorial (10) << endl ;
return 0 ;
}



meta-programming 版:
template<unsigned n>
struct Factorial
{
enum { value = n * Factorial<n-1>::value } ;
};


template<>
struct Factorial<0>
{
enum { value = 1 } ;
};


int main()
{
cout << Factorial<10>::value << endl ;
return 0 ;
}

用 traits classes 以表現型別的資訊

Traits classes 是一種在 STL 中廣泛應用的型別辨視技術,考慮以下情境,我們有四種自定型別 ClassA, ClassB, ClassC, ClassD,以及一個 function template F 如下:
template<typename ClassT>
void F( ClassT myType)
{
if ( myType is ClassA)
{
// operating for ClassA
}
else
{
// operaing for ClassB, C, D
}
}


雖然 F 可以對這四種型別做運算,但有時候可能因為此四種型別的實作方式不一,某些型別對於 F 運算,可以有更有效率的作法 (或是不同的作法),例如 STL 中,對於某種 iterator 的運算,會因為 iterator 的不同類型 (STL 有五種 iterators:input, output, forward, bidirectional, random access) 而有不一樣的方法,所以我們希望能在 template 中辨視型別。

首先我們建立一些 tag struct 用以表示型別的特徵:
struct classA_tag {} ;

struct classBCD_tag {} ;


然後在目的型別中,利用 typedef 定義一個子型別
class ClassA
{
public:
typedef classA_tag category ;
};


class ClassB
{
public:
typedef classBCD_tag category ;
};


class ClassC
{
public:
typedef classBCD_tag category ;
};


class ClassD
{
public:
typedef classBCD_tag category ;
};


接著,建立 traits class template:
template<typename ClassT>
struct MyTraits
{
typedef typename ClassT::category category;
};


此時我們的 function template F 大概變成這樣:
template<typename ClassT>
void F( ClassT myType)
{

if ( typeid (typename myTraits<ClassT>::category ) == typeid (classA_tag ) )
{
// operating for ClassA
}
else
{
// operaing for ClassB, C, D
}
}


但是這樣的程式碼在編譯時可能會有問題 (因為 operating for ClassA 當中的所有敘述,必需被 ClassT 型別所支援,既使這些敘述不會被執行到),但此時有件更重要的事要解決,ClassT 也就是 myType 的型別在編譯時期就可以決定,而myTraits<ClassT>::category 也是在編譯時期就可以決定,但 if else 卻是執行期才會執行的語句,因此我們必須將 if else 提到編譯時期確定,做法即是使用 function overloading。我們 overload 兩個 function template F如下:
template<typename ClassT>
void doF( ClassT myType, classA_tag)
{
// operaing for ClassA
}


template<typename ClassT>
void doF( ClassT myType, classBCD_tag)
{
// operaing for ClassB, C, D
}


最後,我們就可以將 F 改寫如下:
template<typename ClassT>
void F( ClassT myType)
{
doF ( myType , typename MyTraits<ClassT>::category( ) );
}


完工。

2008年7月21日 星期一

新書推薦:程式之美, 重構-向範式前進



程式之美這本書是由微軟亞洲研究所的一個小組所撰寫,內容包含了六十多道的程式與演算法題目,主要都偏向於腦力激盪的類型,對於資訊科系的學生,是一本很有挑戰的習題本,而對熱愛編程的程式員,也是一本激發腦力的好書。



重構-向範式前進,這是侯捷的新作,雖然是翻譯書 (原:Refactoring to Patterns ),不過如同以往侯捷作品的風格,也是一本高品質的好書。早些年前已有 重構-改善既有程式的設計 (原:Refactoring: Improving the Design of Existing Code) 在討論如何重構程式碼,而這本書不同之處在於,他是介紹如何重構至某些 design patterns,或者說,當需求符合某些 patterns 時,如何將既有的程式碼重構至那些 patterns,這對於資深的程式員,是一本必備良書。

2008年7月17日 星期四

WinAPI型別與.NET型別的對照表

http://www.codeproject.com/KB/dotnet/Win32APICPlusPlustoDotNET.aspx

http://msdn.microsoft.com/zh-tw/library/hfa3fa08(VS.80).aspx

雖然.NET的函式庫已經應有儘用,但有時還是會到別人給的dll檔,而這些dll檔通常都是用VC++所寫的,要使用的話,就必須自已依C++標頭檔重新宣告函式。這個表就是在作型別轉換時必備的資訊。

2008年7月16日 星期三

F# Programming Language

http://research.microsoft.com/fsharp/fsharp.aspx

F# 是微軟新推出的程式語言,最大的特色就是他是函數式程式語言(Functional Programming Language),以往函數編程最大的缺點就是效率太差,但今日硬體的進步與多核心CPU的流行,反而讓函數編程佔了優勢,所以微軟立即推出F#以吸引程式員。微軟在官方首頁上形容F#為:

Combining the efficiency, scripting, strong typing and productivity of ML with the stability, libraries, cross-language working and tools of .NET.

給了F#一個很大的評價,也說明了函數編程,必然是未來的趨勢。

TIOBE Programming Community Index for July 2008

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

身為一個專業的程式設計師,至少前十名也要會個七八樣。

2008年5月28日 星期三

[Note] MSP430 interrupt vector

DACDMA_VECTOR
PORT2_VECTOR
USART1TX_VECTOR
USART1RX_VECTOR
PORT1_VECTOR
TIMERA1_VECTOR
TIMERA0_VECTOR
ADC12_VECTOR
USART0TX_VECTOR
USART0RX_VECTOR
WDT_VECTOR
COMPARATORA_VECTOR
TIMERB1_VECTOR
TIMERB0_VECTOR
NMI_VECTOR

2008年5月19日 星期一

[note] 數位電視規格

資料來源

1. 美規 ATSC 8-VSB 用於 6MHz 電視頻道。
2. 歐規 DVB-T COFDM 用於 6/7/8 MHz 電視頻道,目前台灣採用的是歐規 DVB-T 6MHz 。
3. 日規 ISDB-T COFDM 用於 6MHz 電視頻道 ( 屬歐規改良型 ) 。

歐規( DVB-T )傳輸系統功能特色

1. 可以行動接收。
2. 可建立單頻網路( SFN ),解決收視不良地區,改善轉播站之頻譜分配。
3. 室內接收能力較佳。以前電波碰到牆壁會反射,且會產生許多干擾波,對主要訊號造成干擾,以致無法     收看,在歐規系統,干擾波可當主訊號使用,甚至 有加分效果,將來在室內只要加裝天線即可接收。台     灣有線電視蓬勃發展的原因在於一般觀眾只會接收老三台,而不知如何接收公視、民視;公寓天線老 舊     沒有更新,加上大樓阻擋,及原有社區天線的被破壞,因此無線數位電視推出的理念著重在容易接收。
4. 抗多路徑(Multipath )干擾能力強,也就是來自四面八方的訊號,透過偵測,只要在可允許範圍內,干     擾源皆可當做接收的訊號。
5. 與衛星、有線系統相容性佳。
6. 發射與接收端各種相關配套系統完備,產品技術穩定成熟。
7. 除美國、加拿大、韓國外,採用國家佔絕對多數。

電視數位化後之效益

1. 多頻道 現有 6 兆赫 (MHz) 的電視頻道中,可播出 4-6 個標準畫質 (SDTV) 節目,或播 1 個高畫質 (HDTV)
節目。
2. 提升服務品質 改善收視區訊號水準,提升影像畫質,增加音響與視訊服務。
3. 多媒體服務 整合通信與電腦,開闢多元化的業務與商機。觀眾可透過電話與數位電視相互溝通,達成如     購物、選片等雙向互動功能,也可接網際網路等數位裝備。
4. 提高頻譜使用效率 傳輸數位化後,頻譜效率提高。新建數位台使用 UHF 頻道,釋出現有 VHF 頻道,供     給公眾通信使用,充分有效運用頻譜資源。

2008年5月13日 星期二

.NET 的 Task Parallel Library

近幾年來多核心CPU日漸普及,從雙核心、四核心到八核心,意味著現在的CPU可以一次執行多道指令,但計算機結構教科書上所提及的pileline三大hazard,與軟體設計的不良,卻使得多核心CPU效能無法被完全發揮。而就軟體來看,雖然設計了multi-threads,但若沒有搭配平行處理的函式庫,程式多半還是以單一核心在執行。在C++中,有著著名的OpenMP函式庫可供使用,但在.NET平台上CLR與Threading類別庫的設計,卻沒考慮到多核心的問題,以致效能不彰。但微軟也發現了這個大問題,成立了平行運算部門來開發新的CLR,並在去年年底發表了 Task Parallel Library測試版本,但這個library的用法必需手動地指明要平行運算的方式,與OpenMP只要指明那個指令想平行運算,compiler就會自動幫你規畫不太一樣,雖然要改寫的code不多,但若能自動的偵測,似乎比較完善。

2008年4月21日 星期一

Windows Vista SP1 台灣版正式發行

Windows Vistal SP1 台灣版終於在前天正式上線了,有用 Vista 的朋友可以到台灣微軟的下載中心抓了,不過完整的安裝版有 500MB 左右,已經安裝所有 Vista hotfix 的可以直接由 Windows Update 安裝,就不用抓這大的檔,會快一點。詳細的更新的內容可以上微軟網站去看,主要就是把核心改成與 Windows Server 2008 一樣、改善檔案複製的效能、DirectX 10.1、新的 WGA及新的 search 功能,而外觀倒是沒有太大的變化,我一連安裝了三四台 PC,都蠻正常的,沒有什麼問題,各位應該可以放心更新。

下載頁面

緊接著 Vista SP1 的發行,幾天後,也就是 Ubuntu 8.04 正式版的發行了,用 ubuntu 的朋友也可以考慮更新你的系統囉。

2008年4月18日 星期五

Ubuntu 7.10 + VirtualBox 設定 USB 裝置出現 "Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND)."

ubuntu 7.10 下使用 VirtualBox 時,欲設定 USB 裝置時,會跳出 "Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND). The service might be not installed on the host computer." 訊息,表示沒有權限。這個問題其實是因為 ubuntu 7.10 預設把使用 USB 的權限關了。解決方法如下:

1. 開啟 /etc/init.d/mountdevsubfs.sh

$sudo vim /etc/init.d/mountdevsubfs.sh


2. 找到這段文字:

#
# Magic to make /proc/bus/usb work
#
#mkdir -p /dev/bus/usb/.usbfs
#domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
#ln -s .usbfs/devices /dev/bus/usb/devices
#mount --rbind /dev/bus/usb /proc/bus/usb


將 comment 去掉成為:



#
# Magic to make /proc/bus/usb work
#
mkdir -p /dev/bus/usb/.usbfs
domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount --rbind /dev/bus/usb /proc/bus/usb


3. reboot 後再使用 VirtualBox 就不會有此問題了。

參考自 http://scout-jj.blogspot.com/2008/01/ubuntu-710-virtualbox.html

2008年3月28日 星期五

[note] Qualified name 與 Dependent name

這是 C++ template 中對於名稱的兩個最主要的命名方式,

Qualified name:當一個名稱被以 :: 或 . 或 -> 給指明其作用域時,這個名稱稱為 qualified name (受飾名稱)

Dependent name: 當一名稱受控於某個 template parameter 時,這個名稱稱為 dependent name (受控名稱),例如 T 是個 template parameter 時,std::vector<T>::iterator 為一個 dependent name;而當 T 是個已知型別時(如 int),則 std::vector<T>::iterator 為一個 nondependent name。

參考自 C++ Templates 全覽 (侯捷譯)

2008年3月24日 星期一

C++ Templates 的源碼檔案組織方式

在傳統的 C/C++ 程式設計中,我們通常把型別及函式的宣告式放在表頭檔 ( *.h header files),定義式放在實作檔 (*.c *.cpp)中,但是這種運作方式在 C++ templates 中會讓聯結器不能正常工作,因為函式的定義與宣告被放置於兩個不同的檔案,使得該 template function 無法被俱現化,解決的方式大概可分成三個:

1. Inclusion Model:將函式的定義直接寫在 header file,這也是最佳的處理方法。

2. Explicit Instantiation:新增一檔案,加入明確俱現化 template 的敘述,並引入實作檔。

3. Separation Model:使用 export 關鍵定,將 template 匯出。

2008年3月14日 星期五

[Note] gcc 中 ISR 及 SIGNAL 的差別

筆記一下,

ISR 與 SIGNAL 都是用來指定 interrupt service routine 的巨集,

它們的差別就是:沒有差別。

SIGNAL 是舊的寫法,也就是為了相容舊的程式碼而保留下來的,

在寫新的 code 時,請用 ISR

2008年3月4日 星期二

[note] Vista 開啟休眠功能

因為 Vista 預設的關機模式並沒有休眠,而是睡眠 (相當於 XP 中的待命),必需手動將它打開,以管理員身份打開命令提示字元,執行 powercfg -h on,在開始功能表裡就會多一個休眠了。

2008年2月16日 星期六

程式員四大忌

iThome 看到的,原文是 JavaResearch 的文章:

1. 輕易言敗,沒有自信

2. 浮華不實,自滿自大

3. 死氣沉沉,不求甚解

4. 強調客觀,忽略自身

2008年2月15日 星期五

用 Visual Studio 2005 開發俱 UAC 機制軟體

Microsoft 在 Windows Vista 中新增了一個重要的安全機制,就是 User Account Control (UAC),也就是軟體在執行會用到受保護的資源時,會跳出一個對話方塊詢問是否執行,確定後就會以 Administrator 身份來執行程式,雖然麻煩了一點,不過也帶來可靠的安全性,然而在 Visual Studio 2005 中要怎麼使用這個機制呢?

1. 首先,開啟專案屬性的頁面, 在安全性這個分頁中,將 "啟用 ClickOnce 安全性設定" 勾選,然後在方案總管中就會出現一個名為 app.manifest 的檔案

2. 編輯 app.manifes,在 <security> 與 </security> 中,加入以下項目:
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>

其中 level 的值可以是:

asInvoker:不要求權限,使用 parent process 的權限。
highestAvailable:要求 parent process 的最高權限。
requireAdministrator:要求 Administrator 權限。

3. 存檔後重新編譯,產生的執行檔就俱有 UAC 機制了。

2008年2月9日 星期六

[Note] PHP6 去除的功能

這篇也是從 RunPC 上看來的,因為 PHP4 已停止維護 (請見...),有考慮要升級到 PHP6 的網管人員們可別太衝動,因為 PHP6 移除了一些東西,在升級之前可能要先測試一下原本的 Code 能不能在 PHP6 中運作,以下為移除的項目:

1. register_globals
這大概是最嚴重的,原本只要把 register_globals 設成 On,就可以很自由地存取全域變數,無論它是從何而來,而現在取消了這項功能,程式員必須很清楚地指明變數的來源,雖然會帶來很多麻煩,卻帶來了安全。

2. register_long_array 與 $HTTP_*_VARS
取消了  register_long_array 的設定,並連帶取消 $HTTP_GET_VARS 及 $HTTP_POST_VARS 變數。

3. Magic Quotes
原本若開啟 magic quotes,則系統會幫你的特殊字元加上 '\' ,不過這是在過去為了處理中文字需要的,PHP6 已全面使用 unicode,自然就不需要 Magic Quotes

4. safe_mode
取消 Safe Mode,必免讓程式員誤解它的功能。

[Note] String 與 StringBuilder 之效能

.NET Framework SDK 中提供了另一種特別的 String 類別,其名為 StringBuilder,當你有大量字串要"連接"起來時,可以使用 StringBuilder 來提昇效能,因為如果你宣告一個 String 變數並給它值,日後要改變值的話,就要放棄原本的那塊記憶體,而再配置一塊新的記憶體來存放新值,如果改變值的動作很頻繁則會大大地降低效能,而 StringBuilder 就是用來解決這個問題。

這期的 RunPC 做了個實驗來比較兩者的差異,一開始原作者分別使用 String 與 StringBuilder 來連接大量的靜態子字串如下,結果效能居然是 String 較佳,而差異大概有十倍,這是怎麼回事呢。原因在於我們連結接是靜態的字串,Compiler 在 編譯時期就會幫他們做最佳化,而連接在一起,所以 String 的 Case 等於什麼都做,當然比 StringBuilder 快很多,接著我們改成動態字串 (Run Time 才決定的字串),效能比較就如我們預期,由 StringBuilder 獲勝。

因此,在你決定用 String 或 StringBuilder 時,最好先考慮一下字串被"決定"的 時機,在 Compile Time 或是 Run Time 呢?
public string ConnectStrings_string( )
{
string tmp = "" ;

tmp += "11111111111111111111111111111111111111111111111111111111111"  ;

tmp += "2222222222222222222222222222222222222222222222222222"   ;

tmp += "3333333333333333333333333333333333333333333333333333"  ;

// 中間略

tmp += "100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100"  ;

return tmp ;

}

public string ConnectStrings_stringbuilder( )
{
StringBuilder tmp = "" ;

tmp.Append( "11111111111111111111111111111111111111111111111111111111111"  );

tmp.Append( "2222222222222222222222222222222222222222222222222222"  ) ;

tmp.Append( "3333333333333333333333333333333333333333333333333333"  );

// 中間略

tmp.Append( "100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100" ) ;

return tmp.ToString( ) ;

}

2008年1月28日 星期一

MSN 地頭王

從別的網站看來的,是一種將 MSN 結合地理圖資的新玩法,玩家可以在地頭王系統中註冊自已的地理位置,然後你可以看到其它玩家的地理位置,當你對某個地區有特定的問題時 (例如你想找信義區有那些好吃的店),你都可以在地頭王中找到某些玩家並詢問他或是跟他聊天。但這會不會給玩家帶來騷擾呢,其實也還好,因為大家看不見你真實的 MSN 帳號,只看得到位置及你的 ID,除非你自己透露出你的個人資訊,否則就像聊天室一樣使用匿名,一點負擔也沒有,真是個有創意的玩法。

官方網站:http://www.localking.com.tw,你只要加入 im@localking.com.tw 這個 MSN 帳號,然後回答幾個資料問題,就可以加入地頭王的行列了,簡單又有趣。

localking_big.jpg

2008年1月26日 星期六

Moteiv Boomerang Bug Fixes

新版的 msp430-gcc 搭配 nesc 工作時會有個小問題,就是在編譯某些 code 時,會產生 segmentation fault 如下:
/opt/moteiv/tinyos-1.x/tos/platform/msp430/HPLUSARTFeedback.nc: In
function `VirtualizeAlarmC$0$signalAlarms':
/opt/moteiv/tinyos-1.x/tos/platform/msp430/HPLUSARTFeedback.nc:46:
internal error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
make: *** [exe0] Error 1

好在官方已經修正了這個 bug,而且還釋出了一個 script,把它抓下來然後取代 /opt/tinyos-1.x/tools/src/mspgcc/build-mspgcc,直接執行就會幫你修正, 在 install patch 的過程會自動從網站下載修正檔,請保持網路通暢,在等候一段時間完成後,再去編譯程式就不會發生錯誤了。如果是使用 Vista 或 Linux 的話,要記得用管理者來執行這個 script。

參考網址

2008年1月14日 星期一

踩地雷的秘技

從 ptt 八卦板看來的

作者  kick (慶次)                                            看板  Gossiping
標題  Re: [好奇] 有沒有踩地雷的八卦啊?
時間  Sun Jan 13 19:23:22 2008

踩地雷秘技:
1.打開踩地雷,然後在鍵盤上依序輸入xyzzy
2.按下右邊的shift
3.螢幕最左上角會出現很小的白色小亮點提示你有沒有地雷,
沒有雷的話會亮,有雷的話就不會亮。
因為亮點真的很小,所以最好把桌布換成深色系的。
P.S:這個秘技我用XP試可以,Vista就不知道了。

2008年1月9日 星期三

[note] 常用的 design patterns

整理一下常見的 Design Pattern (從 Code Complete 2/e 上抄下來的)

Abstract Factory:以同一介面來建立一整族相關或相依的物件。

Adapter:轉換 class 的介面。

Bridge:將介面與實作分開。

Composite:建立與自已俱有相同介面的物件,可遞迴呼叫其內含的子元件的介面,而外界只要對上層的物件操件。

Decorator:對物件動態地附加責任,而不必為每一種可能的責任配置建立子類別。

Facade:對沒有提供一致介面的 code,提供一致的介面。

Factory Method:提供一介面用來建立物件,各物件的建立由抽象類別去實作。

Iterator:依序對集合中的物件提供存取權。

Observer:讓某物件監視著其 data member,在資料有變動時通知相關物件,達成資料同步。

Singleton:讓某一物件在全域的環境裡可以安全地被存取。

Strategy:定義一組演算法,讓他們可以動態地抽換。

Template Method:定義演算法的結構,由子類別實作演算法內容。

2008年1月7日 星期一

新書

其實我看書的速度很慢,也許是平常太不積極了,然後看書時也不能夠專心,今年一定要改掉這個不好的習性。

上上週又購入了兩本好書(雖然我lag很久了):

1. C++ 設計新思維 ( Modern C++ Design 中文版 ) / 侯捷 / 2003 年出版 (果然lag很久)

這本書主要在進階的 C++ 設計技巧,像是 meta-programming、design pattern 這種近年來紅起的技術,這本書非常硬不太好讀,最主要是它的內容不是傳統講語法的規格書,而是介紹如何套用範式到C++的code中,以及一些進階的技術,希望我不會遇到太多問題。



2. 軟體建構之道 2e (Code Complete 2/e 中文版) / Steve McConnell 原著 / 譚詠歸譯

這本就比較敘述性質一點,在講 coding 時的一些概念以及如果寫出好的、有品質的 code,是一本值得一讀再讀的聖經書。

2008年1月6日 星期日

Personas for Firefox

最近 Mozilla Lab 釋出了一款外掛 Personas,是個能讓 Firefox 不重開就變換主題的工具,試用了一下,發現他能夠改變的是Firefox的背景,使用的是HTML、CSS、JavaScript 等標準的格式,跟原有的佈景主題不太一樣也能搭配著使用。這工具的 logo 是隻可愛的小狐狸,喜歡它的朋友就裝來試試看吧。

2008 新年快樂

2007 的結束,也是101大樓最後一年放跨年煙火,也是我學術生涯的最後半年。最近是找研發替代役的時期,應屆畢業的我也開始面試了不少公司,在 2007 年底之前大概也有了五六家的 offer,如果沒有大變革的話,畢業後我應該會去訊連服務,未來工作內容跟目前 Lab 的研究方向沒有太大的關係,又準備要轉行了,嗯,說轉行也太嚴重,因為我本來就沒有很執著的一個領域,或許說,只要是從事資訊業或軟體開發的工作,都是我喜歡的目標,儘管有人認為沒有自己的專業並不是很好,但我就是不喜歡把自己限定在一個圈圈裡,能夠開開心心地當一個電腦玩家,不是很好嗎?希望未來的一年,能夠學到更多的東西,還有,如期畢業:)。

看了 Run PC 的報導,2008 年在軟體業上的大新聞應該是 Visual Studio 2008,因為這是微軟在 Vista 推出後第一套全新的版本,微軟在 Visual Studio 2003 後,把產品及 API 的文件 ( 即 MSDN ) 都整理的不錯,Visual Studio 2005 後也有釋出 Express 版本,所以想自己學習的學生們,不用花錢就可以使用 Visual Studio 這個強而有力的工具。Vista 的環境容入了 3D 的特效,GUI 的設計也變得跟以往很不一樣,因此 WPF/Sliverlight 及 3D 相關的 API 技術,將會是微軟推行的一個重點。另外隨著多核心處理器的流行,如果軟體不配合的話,很難發揮其效能,所以 multi-threading 的開發技術,亦會是個熱門的重點,如 Erlang 也開始得到大家的重視。程式語言方面,Ruby、python、C#、LuaD 等等的,也慢慢進入主流,而原本學術界在用的函數語言,也會慢慢走入業界,2008 真是令人興奮的一年。