2009年10月25日 星期日

SimpleSDK and Xcode



這是一位12歲大的小男生,在 youtube 上的 Xcode 教學,教你如何使用 Xcode 寫你的 iPhone App,不但口齒清晰,整個流程都很流暢,整體看起來很棒。

從影片中,約略可以知道 SimpleSDK 對 php 及網頁相關的技術似乎還有一點了解。剛開始的時候有些不敢相信,一直覺得這是位女生,仔細端倪後才發現是個非常專業的小朋友。也許是因為 Xcode 的設計還不錯,讓買 Mac 的使用者都可以很方便的加入寫程式的行列,並 publish program。

看到這影片真的是讓我大開眼界,那種震撼的感覺一直到現在都還在。
只能說,自己要努力啊~

參考:
http://blog.simplesdk.com/
http://www.youtube.com/user/SimpleSDK

2009年9月17日 星期四

週年紀錄

工作滿一週年,留個紀念。

雖然工作上所發展東西,並沒有如自己所預期的順利。但也算差強人意,不知是自己能力不足,還是其他的關係。也許作 project 與買股票一樣,不能放太多主觀的熱情,才不會有太多失望。不過我並不喜歡這樣,因為喜歡才有熱情,才會有出乎意料的成果,如果只是做完該做的事情,這樣是不會傑出的,產品也只會普普。

瞭解自己是個龜毛中人,有時候某些地方不對,打死就是不願意這樣做下去。最近接觸比較多真正在寫 code 寫歷史的人,有種好嚮往的感覺,也許不知不覺自己就會往這樣的方向去發展。畢竟熱情才是最重要的一件事情。沒有熱情,有在厲害的技術,也只是浪費,因為往往不知道該如何利用才會發會最大價值。

期待下個年度,可以達到自己給的目標,不只在公司專案上有成長,自己有興趣的回家作業也可以有漂亮的成果。加油~

2009年9月11日 星期五

Graphic and Reality World

最近一頭腦的栽入了 Linux Graphic and OpenGL/ES 的世界,不過也是因為工作上的需要,才會有機會這樣去實際瞭解 Graphic 的發展現況。

在 Linux 上的 Graphic 其實頗有趣,尤其是看到 OpenGL Demo Program 執行後的效果,更讓人覺得興奮(是我太久沒打 Game 的關係嗎?),雖然只是簡單的機器人或是茶壺的旋轉,但是仔細看程式後,發現這都是一行一行的程式碼,除非需要貼圖的動作,才會有額外的圖片,所有的動作都是以程式的方式動態繪出。

目前需要瞭解的方向可以分為:
  • MESA 3D Library
  • Gallium3d Driver Architecture
  • DRM and DRI
  • OpenGL/ES and EGL
雖然對這幾個部份都有一些涉獵,但是還是覺得看 Code 的速度還是不夠快,如果可以更快的測試並作修正,也許瞭解的速度會比較快。
另外可能是生性孤僻,比較不知道應該如何跟 community 透過 mailing list 溝通,所以想對特定的 project 作貢獻的機會也就比較少。

看到 0xlab 在 Android 上面的貢獻,發展了很多的東西,而且品質很不錯。改寫的速度之快,讓小弟很慚愧,期望哪天我也能進步到這樣的程度。

雖然有時工作上得想法並不會得到認同,但是還是希望能作些有用的東西,且是自己會期待事情,也許對自己不會有太多益處,但那樣沈浸思考與挑戰的過程,是工程師在暴風下的避難所。回歸原點,找到自己的熱情,以自己的方式出發,並為自己的決定負責,會是很有趣的人生。

2009年4月26日 星期日

[Study] Linux Graphic

安裝 ubuntu 9.04 後,發現畫面顯示的部份比原本預期的好很多,而在 xp 上並沒有這樣的表現,而且記憶體的使用上也更精簡,開完機記憶的使用約 256MB (原本打算多弄點 ram 來使用,看來可以省下一筆費用)。所以開始對畫面的顯示有點好奇,也想深入了結一下。所以開始我的 Graphic 學習之旅。

觀念文章,下面這些文章都是在 Debian Taiwan irc conference 的資料,主講人為 jserv,很精彩,對 Linux X11, OpenGL, 等有關 Graphic 的議題,有很深入的討論。建議花時間閱讀。
FreeDesktop.org 與 X.org 嶄新發展概況
FreeDesktop.org 與 X.org 嶄新發展概況(續集)
Xorg 嶄新的硬體加速與效能提昇機制
Xorg 嶄新的硬體加速與效能提昇機制 (續集)

The State of Linux Graphics

Framebuffer實現與應用 提到
但Framebuffer本身不具备任何运算数据的能力,就只好比是一个暂时存放水的水池.CPU将运算后的结果放到这个水池,水池再将结果流到显示器. 中间不会对数据做处理. 应用程序也可以直接读写这个水池的内容.在这种机制下,尽管Framebuffer需要真正的显卡驱动的支持,但所有显示任务都有CPU完成,因此CPU 负担很重.
framebuffer的设备文件一般是 /dev/fb0、/dev/fb1 等等

參考文件

2009年4月25日 星期六

Ubuntu 9.04 and Grub

最近寫 code 的感覺又會來了,索性在家裝起了ubuntu 9.04-rc1,整體感覺還不錯!
比起以前的 gentoo,FC,似乎親切許多。其實裝 Linux 的原因,只是想寫程式,因為真的太久沒有寫自己好玩的 code,都是被別人叫去玩 code。

加上最近的 Android & iPhone 的 sdk 都陸續的釋出,看起來的成熟度都還不錯,是可以開始寫寫屬於自己的程式了,不然老是在用別人提供的 source code 感覺很沒貢獻度。

因為家中的網路速度過慢,所以每次 apt-get 都很久,看來也要順便更新一下網路。

不過在安裝完後遇到一個小問題,就是 grub 沒辦法開到 xp。花了一點時間思考跟搜尋,知道了問題點。

原本硬碟配置
sda(hd0) -> XP (已經安裝很久)
sdb(hd1) -> no OS
sdc(hd2) -> Linux (剛剛安裝完)

grub 我安裝在 sdc 的 mbr 上面,然後 BIOS 設定從第三顆硬碟(Linux)開機。開到 grub 後,第三顆硬碟(sdc)變成(hd0),所以第一顆硬碟(sda)變成(hd1),第二顆硬碟(sdb)變成(hd2),如下
進入 grub
sdc(hd0)
sda(hd1)
sdb(hd2)

但是這時候 bios 的裡面還是:
sda(hd0)
sdb(hd1)
sdc(hd2)

所以 grub 要去啟動 xp loader(Ntldr) 的時候,Ntldr 就會發現開機碟變成 (hd1) 跟原本 bios 中的設定不同,所以會造成沒辦法載入 XP。要解決這樣的問題,可以用 grub 裡面的 map 指令,將硬碟作虛擬對應。使得loader可以正常載入。

原本的 /boot/grub/menu.lst
title Microsoft Windows XP Professional
rootnoverify (hd0,0)
savedefault
chainloader +1


這邊就算將 rootnoverify (hd0,0) 改成 rootnoverify (hd1,0)還是沒辦法順利開到 XP。

修改後如下,可正常開啟 XP:
title Microsoft Windows XP Professional
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1,0)
savedefault
chainloader +1


參考資料:
http://www.gnu.org/software/grub/manual/html_node/DOS_002fWindows.html#DOS_002fWindows

2009年3月25日 星期三

multi tabbed ssh client

常用shh or telnet,但是卻不喜歡有多個視窗,覺得很混亂嗎?
可以try下面這個multi-tabbed plug-in for putty。

PuTTY Connection Manager
http://puttycm.free.fr/

PuTTY Connection Manager需要先安裝,然後在指定putty路徑,就可以運作。0.6.0.4822beta 的版本在我的電腦上,並不能正確運作,會出現下面的錯誤訊息

=============================
An unexpected error occured :
Object reference not set to an instance of an object..

Check log for further informations.
(c:\......\puttycm.log)
=============================

改用Alpha version 0.7.0.4780就可以正確運作

參考圖(reference:http://puttycm.free.fr/images/puttycm.JPG)


參考:
http://www.tsmexpert.org/2008/03/tabbed-sshtelnet-client.html

2009年3月23日 星期一

multi-projects of vim using cscope plugin

我在 Linux 上都是用 vim 在 trace source code,可是以前都是用 grep 的笨方法,並不知道 cscope 這個好東西,他可以直接在 vi 裡面直接連結到 function 的定義或是哪邊的 code 有用到這個 function 。
這像是在 windows 上的 source insight,也許用很多人認為 source insight 非常好用(也許是學習曲線較快),vi 相對來說,就需要花點時間去習慣,不過習慣後,就會討厭在寫 code 的時候要去動到滑鼠。:)

下面的安裝,我做了些改良(cscope_maps.vim),讓 vim 自動尋找正確的 cscope 產生出來的 CSCOPE_DB(通常為 cscope.out ),這邊透過絕對路徑的方式讓 vim 可以在任何子目錄中跳到另外幾個目錄下的某個檔案,原本的機制是不行的。

1. Install cscope and ctags
sudo apt-get install cscope ctags

2. download and modify cscope_maps.vim

這邊預設的目錄深度為 20 層,所以如果你的 source code 的目錄深度大於 20 請自行修正 i 的值
if has("cscope")
......

" add the database pointed to by environment variable 

" Search database for each project, you can switch different projects easily, :)

let i = 1
  while i < 20
    if filereadable("cscope.out")
      let db = getcwd() . "/cscope.out"
      "echo db
      let $CSCOPE_DB = db
      cs add $CSCOPE_DB
      let i = 20
    else
      cd ..
    let i += 1
  endif
endwhile

" show msg when any other cscope db added

.......
3. put cscope_maps.vim into ~/.vim/plugin
(目錄不存在請自行建立)

4. Create goproj.sh and put it in ~/bin
這是為了方便建立 cscope.out (CSCOPE_DB)而寫的 goproj.sh,內容如下,為了方便起見可放在 ~/bin 下面。
Content of goproj.sh
#!/bin/bash
CSCOPE_FILE=cscope.out
if [ -n "$1" ]; then
  echo "Source code directory: " $1
  echo "Create file map : " $CSCOPE_FILE
  find $1 -name "*.h" -o -name "*.c" -o -name "*.cpp" > $CSCOPE_FILE
  cscope -bkq -i $CSCOPE_FILE
  # cscope -Rbkq
  ctags -R
else
  echo "Please key-in path of project"
fi 

5. 使用範例,以 kernel source
# tar zxvf kernel-2.6.29.tar.gz
# cd kernel-2.6.29
# goproj.sh `pwd`
# vim xxx.c


[ Ctrl + \ + s ] : 搜尋游標上的 function 哪邊參考到
[ Ctrl + \ + c ] : 搜尋游標上的 function 哪邊呼叫到
[ Ctrl + \ + g ] : 搜尋游標上的 function 是在哪邊定義的

[ Ctrl + \ + t ] : 跳回下一個位置
[ Ctrl + \ + o ] : 跳回上一個位置

另外由於 cscope_maps.vim 中有定義 Ctrl + ] 的作用,會取代原本 TAG 裡面的定義,所以如果不喜歡的話可以把 cscope_maps.vim 中的這行 (set cscopetag) 移除 。

6. 請用力使用。謝謝!