2009年6月19日 星期五

突然發現自己走上另一條路

因為公司一直沒有成長,也待了六年。為了排解工作上的不得志,於是去讀夜校,讀有興趣的技術。
最近發現,技術開始有結果,但並不是公司可用的技術。
為了有好的薪資,結果可能要另找出路。
但公司上司不錯,只是有個不長進的CEO。
無奈!終有一天是會離開的。

因為不長進的CEO,讓我得了四關。
不想見:從未有好臉色,遇到只會問進度,開會只會罵。
不想聽:決策快但沒有品質,只會搶功,朝令夕改,與其聽命令不如等他改。
不想講:任何事都是他對,不說反而有空間去自己處理到好。
心灰意冷:如果真的有績效就好了,但六年來只是看到重覆的戲碼。而且招式越來越沒品。

唉!我又不是不想對公司盡力,想當初也是想做技術而來。只是無法發揮乃因政治因素。
到了心灰意冷時,總要找個出路才行,做非公司技術做久了也是會有結果的。
那再下來又會如何?
我想不出第二個結果。


2009年6月16日 星期二

論文要做什麼呢?

最近同學們畢業了,我則還沒有想要做什麼論文。

看來還是做機器視覺好了。

所以就以CUDA做機器視覺加速。

不過PC上開發軟體沒有那樣熟,我可能要使用到OpenGL及OpenCV。

所以整個工具組要用到Visual Studio 2008、CUDA、OpenGL及OpenCV。全都是沒有用過的,看來挑戰大了。


2009年4月2日 星期四

使用加法做開根及平方計算

主題:使用加法做開根及平方計算
使用範圍:整數計算開根及平方,計算慢,gate count少
參考資料:MATH toolkit for Real-Time Programming by Jack W. Crenshaw CMP Books
原理說明:
這是我們常用的公式(n+1)^2=n^2+2*n+1
改寫為(n+1)^2=n^2+n+(n+1),其中n^2在上次計算可得到,所以只剩n及(n+1)且只使用加法就可以進行。
設計演算法為
a=Count
b=Last Sum= Sum
c=Sum=Last Sum+Count
d=Squart=Sum+Last Sum
排表為
a b  c d
 0  0   0  0
 1  0   1  1
 2  1   3  4
 3  3   6  9
 4  6   10 16
 5 10   15 25
若要取得平方,就將輸入做為計算的次數。計算停下來時,取出d就是答案。
要做開方,就將輸入和輸出比較,超過時停下來,取出a就是答案。
若要使用到小數,則使用定點數方式可以得到。


2009年3月3日 星期二

打造GTK的Forth程式語言介面

Forth連上GTK了,也就是連上其他函式庫也可以參照這個方法。
http://tutor.ksana.tw/ksanagtk/

我發現和Lua的Alien函式庫做法差不多。可見得這個作法是正確的。

C++光芒不再?

想使用能在一般平台上使用的語言,所以想學C++語言。

但因為也學了一些其他語言,所以有注意到C++語言的排名。

不幸的是C++的排名在下降,我覺得是否仍要學C++。並引發我認為是否C++的光芒已不再的這個議題。

找了一些資料了解到底C++為何排名下降。找到以下原因:

1.欠推廣
  編譯器開發廠商已不在推廣C++,這也和Free compiler的興起有關,使得C++不再有商機,也使推廣冷卻。

2.新人已被Java引走
  C/C++語言最強的資料型態:指標。這對於入門的人是危險的,也造成學習困難度。

  而且在一般電腦應用上,也不需要使用指標。所以入門者會選擇和C++類似的語言。
  又JAVA有跨平台能力,且有推廣,所以入門者紛紛轉向JAVA。

3.其他動態語言興起
  動態語言因為可以快速編寫,會比編譯語言好上手,所以新的語言多以動態語言為主。而商用語言就以快速編寫為導向有其商機,所以發展上比較快。
 
在實際上程式設計師的討論版中,C++仍為主力。表示一但上手,就不會放棄使用。

我認為主要是在語言支援上有其優勢,也就是C++有許多函式庫及延伸工具。使得在程式工程上仍有很大的優勢。

就以我的應用上來收集資料評估,要用C++語言在PC上做一個game,那就支援程式上的收集。發現真的以C++的支援函式庫多。

因為選擇多,所以可以找到合適使用的函式庫。使用其他語言則因函式庫不豐富,反而不好使用。

所以要真的做出有工程品質及效能的程式仍以C++語言建造會比較快。

結論就是C++語言上手是不容易,一但熟悉可以利用其函式庫快速建造。


2009年2月24日 星期二

為何使用Erlang

使用Erlang的原因是想找一個平行運算語言來學。於是在TIOBE上找找看,於是找到Erlang。

剛好也出了中文書,正好可以學起來。於是進行自學。

但這個語言也啟發我一些想法。原來平行語言要解決的果然比我想的要複雜的多,要是沒有參與不會想這個問題。

在使用Erlang有幾個特性和一般電腦語言不同的,像變數無法改變、數學表達的程式。

另外有一個全新的功能在其他語言未見到,就是程式熱抽換。也就是程式仍在執行時進行更新。這對on-line game是很需要的,也是這個語言現在會紅的原因。

使用Erlang和我的工作無相關,但我想要寫一些網路應用的小程式,那就使用新語言試試看。

這是我想使用這個語言來學習及應用的原因。有所進展再貼。


2009年2月18日 星期三

為何使用Forth

會使用Forth是一場機緣。但並不是完全沒有理由,在學的時候也有查過其特性才學的。
當時找到的資料是Forth是最小的作業系統混合語言。當時自認為對電腦很熟,想說已給了組合語言原始碼。大約千行的程式碼,應是不難破解其運作。
要了解作業系統及電腦語言的產生,Forth可以一次學會,這比一般分開學作業系統及電腦語言會快些。
結果是除了捷徑這件事是對的,其餘都是錯估。

初看Forth語言,很像是組合語言。因為有很多特性和C語言差很多,感覺要原始得多。
不過原始碼實在很難懂它是如何運作,最大的原因是,Forth系統的運作方式也是用Forth定義的。即使是用組合語言寫的,但高階部分是使用Forth語法。
故在自學Forth上是覺得入門門檻是高了些,因為還要去習慣Forth的習慣。
後來是和使用Forth的人在一起討論才對這個語言開始熟悉。在有人指點的狀況下,才能抓到Forth的重心。

在使用Forth上,最令我驚訝的是8051 Forth。因為在8051上是可以使用組合語言及C語言,但沒有一個語言可以做到動態編解譯程式,Forth就可以。
就以目前的功力來說,要在8051上做到動態編解譯程式,還真的找不到更精簡的架構。
動態解譯這項能力對Forth程式開發有很獨特的吸引力,它可以單獨執行函式,對機器做單一功能測試。這對於將電腦應用於機器測試上是很好的除錯能力。
大部分狀況用8051做控制是不大可能要做動態解譯來測試機器,但我在其他16位元及32位元上也不常見。

所以在Forth的功能表現上,有語言編譯的能力及作業系統管理特性。所以想說學了應可以學會編譯語言的方法及作業系統的知識。
剛好以Forth語言做為開發平台的公司有免費的討論會。所以有機會我便去參加討論會。
中間有許多人參與這個討論會,但我參加了二年才開始了解Forth的核心。可見得一開始真的是估錯了。
之所以會花二年的時間,一則是我並沒有急著用,另一個是一個月才一次討論,其中包括軟硬體設計。

Forth系統其程式碼很少,因為其函式很容易長得深,也造成其不易閱讀的特性。
但是確實有實現語言及作業系統機制,也因程式碼少,可以看見最簡單的作業系統及語言編譯方法,這對我了解電腦應用及原理有很大的幫助。
所以有段時間想用,但一直不易去使用。原因是可用的模組少。
以Win32Forth為例,是目前Windows平台上使用的Forth。但程式碼在Windows的函式太多(Windows內部函式也很多),一直不好上手。

最後目前我只能放在Dll的實驗上,看何時有比較好的機會再使用。