Archives

gravatar

D-Link DI-524 Source Code

DI-524 是一款低階又功能完整的 wireless/broadband router,在英國的 d-link 網站有提供 DI-524 的 source code 可以下載(Technical Support->Download->Product->DI-524),他的授權是以 GPL 釋出,其中核心就是以 Linux 為基礎。不過他所針對的硬體版本應該是 revision E1 的機器,在台灣的機器應該都是 revision A 或 B 開頭的機器。

gravatar

Google Spreadsheets 要多加油

用 google 找 spreadsheets,可以在右手邊發現廣告欄位。有一個叫做 Zoho 的網站,倒是做了一堆 office 的產品。除了Writer、Sheet、Show,還有 Project、CRM、Planner、Mail 等等一堆,當然 google 也是有,像是 gmail, gtalk 這些。另外 google 在幾天前幫 spreadsheets 加入圖表功能,當然要看一下這家產品有哪些,還好有 sample sheets 可以看一下裡面的功能,首先,界面幾乎蠻類似 office excel,然後圖表種類也是幾乎都有,中文也沒問題,操作起來速度感覺上比 google spreadsheets 還快,還有 API 可以給外部程式來 view、modify、upload/download。在 Spreadsheet Roundup 評比裡面,zoho sheet 排第二名。 再來就是 Safari 可不可以使用,結果是不行,進得去但是看界面就知道無法使用。WebKit 問題比較少,主要是 cell 對齊,使用上可能會有問題。

gravatar

RD = Redo & Debug

聽說 SS 社的 L 大作在 '05 狂 crash,銷售也不佳,後來 training 以及 code review 時機乎最重要的重點就是,注意 pointer。只要遇到 pointer 的情況,有 * or -> 就很容易被 focus。例如 function body 前面加入對 pointer 類型的 parameters 做 check,只要情況不對馬上謝絕掉。或許這招不錯用,至少可以馬上降低 crash 次數,畢竟幾乎所有的 invalid segment access 都可以避掉,立竿見影。至少這樣可以避免得到 crash comment 一枚,因為程式沒到該有的功能所以得到 bug functional。(註:只要列出來 call stack 就是 core dump,所以單純 return 沒做事至少不會出事)。 不過源頭呢?為什麼會有 invalid address 傳進去?當然就是程式有 bug,一定有地方出錯了,所以才讓那個 bug 一直存活下來,然後還傳遞給其他地方使用。現在好了,大家看情況不對,就盡量謝絕掉。那最後一定還是會出錯,只是出錯就會錯在無法避免的地方。可能最終的源頭跟最後出鎚地點相差十萬八千里,但是 AE/QA 就會看 call stack 或執行過哪些 commands 就把 bug submit 給誰。更慘的是,如果是遇到無法 reproduce 的 bugs,更是查不到來源,因為無法再重複一次,但是他就是曾經 core dump 出來給你看。最後只是 RD 猛去 disassemble 那個位址的 assembly code 來看,然後找相對應 source code 那邊是否有 pointer access 沒有保護好或有 bug。 再來是,大家一定遇過 core dump,最常見的就是 windows 的程式執行錯誤。或是 firefox 遇到 crash 也會有。Apple 也有 crash report 功能。裡面有什麼東西,大家一定看過,不外乎就是 call stack、thread list、module list、environment variables、registers、stack dump、memory dump。就連 unix-like 的環境,也可以產生一個 core file。最神奇的是 SS 社,雖然有 segment fault handler,雖然有 coredump file,但是其實裡面是 call stack 而已,連個 registers values、stack dump、memory dump 都沒有。如果是單純的筆誤 bug,很容易看一下相對應的 source code 就查到了。但是大型軟體下,又無法 reproduce,什麼都沒有 dump,只有 call stack function chain,查得到來源才有鬼。

gravatar

踩到 WebKit 地雷

更新了 WebKit nightly build,結果使用出現一些小問題,其實也不是大地雷。第一個是,可以看到網頁內容但是上面的連結或控制項卻無法用滑鼠點選。關掉 tab 或是 reload 都無效,只有重開 Safari。第二個地雷是,本來可以用的 google spreadsheets,現在進去變成整頁的觀看模式,無法編輯。 第一個是不定時炸彈,但是幾乎很少遇到;第二個問題就算用原廠 Safari 的 WebKit 也無法用 google docs。再來翻翻看有沒有以前的 nightly build history 好了,看看之前的 nightly build version 再不再。

gravatar

Safari + WebKit Core

找到兩全其美的辦法了,因為跑 WebKit 的話雖然也是 Safari 的外殼,但是某些 plugin (Input Managers) 無法使用。後來用了類似 WebKit 在 WebKitTools/Scripts/run-safari script 的方法,在環境變數裡面增加了:

export DYLD_FRAMEWORK_PATH=/path/to/WebKit/framwork/...
export WEBKIT_UNSET_DYLD_FRAMEWORK_PATH=YES
其中的 path to WebKit framework 就是去下載 WebKit 後,進去 WebKit.app/Contents/Resources 可以看到 JavaScriptCore.framework、JavaScriptGlue.framework、WebCore.framework、WebKit.framework 那些檔案,把路徑只到這個 Resources 就可以了。 然後接下來只要下指令 open /Applications/Safari.app 一樣是跑 Safari 但是骨子裡卻是新版的 WebKit,同時一些 plugins 也可以繼續使用 :D ps: 目前似乎有的小問題的就是中文輸入選字時候按空白鍵,同時會被當成網頁按空白鍵,也就是下一頁的功能。不過問題還好也影響不太大。

gravatar

blogspot

主旨大概就是以後將以jclin.blogspot.com為主。如果您使用的 feed URL 是 feedburner 所提供的,那就不必做任何更新。
最先的原由是,blogspot.com 在 google 整合之前,提供的服務其實也還蠻陽春的,沒有 category or label,layout 方面也是蠻簡單需要看手工打造細節。所以在種種情況之下,在 wordpress.com 有提供 WordPress 的 blog services,還有 category、trackback、還有一些不錯的 theme 可以選。於是就在申請到 invitation 情況下,將主要的作業都搬到 wordpress.com,而使用 gslin’s copyblog 將文章貼回 blogspot 去。
但是後來也是有些問題陸陸續續產生,像是 wordpress.com 速度過慢,最差的遭遇就是上次恆春地震,震壞了幾條海纜,但是 blogspot 和 google 還上得了速度也不錯,wordpress.com 就連不太上。平常使用的話 wordpress.com 速度上感覺也沒有 blogspot.com 來得快。另外一個問題是 spam 過多,雖然 wordpress.com 有 anti comment spam 的 plugin,但是誤判或是需要手動認證的情況還是不少。
再來自從 google 和 blogspot 整合之後,也提供了 label 功能,也有比較進階的 layout 處理方式,感覺實在是好很多。另外也是 copyblog 的問題因為兩邊無法有 category & label 的同步,導致複製的文章過去那邊都是沒有 labels。所以在一段時間的感覺和判斷後,就又想把主要的作業搬回 blogspot 去。這邊就變成使用 copyblog 方式的備份站。
所以最後等有空把 wordpress->blogspot 的 sync script 改回 blogspot->wordpress 的方式,在這之前,這兩邊的文章可能先會出現不同步和分歧的現象。
另外順便廣告一下,還有新的 wordpress.com invitation 一枚,如果有需要者請私下來信。

gravatar

用 WebKit 後就不想換回去了

WebKit 當然就是 Safari 的 kernel,以前使用 WebKit nightly build 的經驗是,偶而看普通的網頁就會當掉,實在受不了所以只能忍耐用 Apple build 的 WebKit 版本。最近因為在玩 Yahoo! Fantasy baseball,常常會去看一些畫面 layout 比較複雜的頁面和 mlb.com,比較驚訝的是最近開 top 一看發現 Safari 的 RPRVT (Private Memory) 竟然高達 697MB,quit 掉 Safari 後就撿回來不少記憶體空間。第一次遇到這種情況,之前最高也是才 300MB 出頭。所以自己的使用習慣是用一段時間的 Safari 就會 quit 然後重新啟動。不過說也奇怪,把 WebCore cache disable 以及自己寫的 Safari Plugin 來設定 NSURLCache 的 memory/disk size 竟然也限制不了 Safari 一直長大的問題。所以這個問題也就無解,並且不了了之。 最近使用 WebKit 的經驗是感覺蠻穩定了,而且 memory leakage 似乎不會那麼嚴重,至少把頁面該關的都關掉後,就回復到蠻基本的 RPRVT 用量。並且至少新的 WebKit 也可以上 docs.google.com,就不用再開 Camino 來應付。缺點大概就是一些 Safari Plugin 不能用,比如說 SafariBlock,就無法阻擋廣告的出現。

gravatar

Solar Powered Wii

在 Slashdot Tom's Hardware 上看到的 Solar Wii,影片在此。用太陽能板驅動 Wii 和 LCD panel 來玩 Game。Wii 真是太省電了,用太陽能就可以玩了。不過缺點是要在室外並且有太陽的地方,反而太陽太大的亮度會使 LCD 看起來的畫面看不清楚或是看不見。 要是像 PS3 那樣假設需要 peak 300Watt per hour,那麼如果總共賣出個 500 萬台,同時使用就相當於地球上用電量增加了 1500 MWatt。雖然不可能同時使用,而且也是分散在各個國家,但是消耗的能源總計是非常可觀的呀。 BTW,Opera browser 上竟然有個密技是,在網址列輸入 /. 就可以會直接連線到 slashdot.org。真是非常貼切實際網址而且也對需要的人非常有用。:P

gravatar

memory-based storage notebook

傳言不久會推出沒有硬碟的 notebook,包含 apple macbook/pro。當然用 memory based storage 是有比磁性轉盤的儲存方式多不少好處,像是省電、安靜、體積、速度等等。不過這篇 Flash memory-based Apple Notebook rumor: PCM Rather Than NAND 有提到非 NAND 方式的 memory storage。PCM 就是 Phase Change Memory,看起來有不少項目是比 NAND type 更優。光是速度上,比 NAND 快 500x 的讀寫速度;又更可靠,可抹寫 1 億次。當然硬碟的致命缺陷大都是機械原因,像是壞軌、磁頭 crash、或是伺服馬達掛掉,裡面的資料就岌岌可危。而原本的 NAND/NOR flash type storage,則是會繼續比較在常用在 removal storage。

gravatar

SETI 找到東西了

在 Slashdot 上看到的,SETI Finally Finds Something。看到標題大家應該都會期待,到底是真的假的找到什麼外太空生物之類的。其實不是,是因為 SETI@Home client 會跟 server 回報的機制,讓他們可以追到被偷的 laptop 目前正在使用的 IP,進而縮小可能範圍或地區而追回電腦。
不過的確這也是找外星文明之外的一項附加價值和功能 XD;另外這也告訴小偷先生,有點常識的話,應該避免讓電腦直接接上 Internet,盡量把可能會洩漏 IP 的程式刪掉或砍掉,最好是重灌是吧。

gravatar

nVidia GoForce

Source: New cell phone chip from NVidia,沒錯,我沒寫錯,不是 nVidia GeForce 顯示卡晶片,而是 cell phone chip。nVidia 也加入手機晶片的戰場。晶片功能包含有多媒體和 3D 加速、WiFi、H.264 解碼、相機以及聲音部份的管理。重點是 iPhone 內會使用一顆這樣的 chip。

gravatar

Replace the CPU of Mac Mini

在 HardMac 上刊出的文章,如何更換 Mac Mini 的 CPU,Step by step 的教學。從 Core Solo 到 Core 2 Duo 都可以用,還有 1.5Ghz Core Solo 到 2.33Ghz Core 2 Duo 的效能比較。

gravatar

MacBU 10 週年

Microsoft 的 Mac BU 慶祝 10 週年,在建築物上的 icon 畫。

gravatar

Blogger Custom Domain

今天仔細研究一下 blogger custom domain 怎麼使用,然後就把很久前在 yahoo small business 買的 jclin.org domain 拿來用。所以就直接改成 blog.jclin.org 或是 jclin.org 都可以直接看到 blogspot 的文章。並且原本的 jclin.blogspot.com 還是依然有效。另外趁機也把 template 換一下,從此也可以透過簡單的 layout 編排方式來修改版面。另外 page rank 似乎也沒了,目前首頁上看到的是 0。

gravatar

Choices of Guest PC in Virtual PC

很多網站包含 Microsoft Virtual PC 都推薦很多加速的方法,包含檔案系統使用 FAT32。理論上,FAT32 原理簡單、磁碟上的檔案配置結構也簡單,所以對於 Guest PC 的 OS 來說,這部份的 file system driver 應該會得到最佳的效能,因為一切都很簡單。但是我覺得事實上並非這樣,原因在於真實 PC (很老舊的 CPU 約只有 800Mhz,配上當時很快的 ATA66 主機板)上的 Windows XP,使用 FAT32 所得到的開機速度,跟後來轉換為 NTFS 後的結果,明顯發現 NTFS 的開機速度就是比較快。
其實可以想想看,FAT32 不管是原理或是磁碟配置結構都很簡單,但是對於檔案和內容尋找、儲存並非最好。而且 Virtual PC 裡面的 Guest OS 都是以 Host 的 image 檔案當作磁碟,存取速度並不快,所以即使使用最簡單最省 CPU 運算的 FAT32,但是卻花掉不少時間在 disk access,反而是得到更大的 overhead。因此若能選用 NTFS,實際上 Guest OS 在尋找檔案和讀取內容,都會比 FAT32 來得快。因此下了決心把 Virtual PC 的 Guest PC 的 Windows XP 內的磁碟,轉換成為 NTFS,也的確感覺開機速度變快了。其他類似非使用實體硬碟當作 Guest PC 硬碟對象的,應該也是會有類似結果。
另外使用 Gparted 把 VPC 本來預設的 16GB dynamic size Hard Disk image,重新 resize 到 4GB,然後用 Ghost 把他複製到另外一個 fixed size Hard Disk image 上。在 Ghost 複製過程中,發現 Virtual PC 的磁碟效率其實蠻低的。大概 90 MB/min,換算回每秒大概也才 1.5MB。現在隨便一顆 ATA100 的硬碟實際物理讀取和傳輸速度最少都應該可以 30-40MB/sec 。所以 dynamic size image 和 Virtual PC 裡面硬碟傳輸速度其實蠻低的。
沒有錢買 intel x86 的 mac mini 或是 mac book 來用 boot camp 或是 parallel,只好繼續用 iBook,哈。反正也很少需要啟動 Virtual PC 來開 IE。

gravatar

Paint.NET 3.0

雖然我一直在用 mac, 但在公司的環境下, 還是常常需要用到 windows 上的繪圖軟體. Photoshop, Paint Shop Pro, GIMP 都太肥了又太複雜, 感覺不適合. 偶然之下找到 Paint.NET 覺得還蠻簡單符合需求的. 今天看到 Paint.NET 有 3.0 版出現了, 下載之後卻不能安裝, 原因在於他最低需求是 XP SP2. .NET Framework 的軟體需要下載 5xMB 的 runtime libraries, 還宣稱跨平台 (Paint.NET 稍微修改就可以在 Linux 平台的 Mono 上執行). 公司的電腦又不能隨便安裝或升級成 Windows XP, 所以下載的 Paint.NET 3.0 連安裝都成問題. 微軟自己宣稱的跨平台最後是跨到哪邊去了? 最後其實還是個拼命讓 customer 升級成 XP, Vista 的晃子.

gravatar

FON AP: Always Turn On SSH

在 /www/cgi-bin/webif/upgrade.sh 中,有這樣的步驟,會把原先設定的一些資料保存下來,不會因為 FON AP 使用 web 管理界面的 upgrade 把整個 NVRAM 給 flash 掉而消失。而設定要怎麼保存?

tar czf /tmp/config.tar.gz /etc/config/
mtd write /tmp/config.tar.gz config > /dev/null

簡單的說就是把 /etc/config 整個 tar 起來後,透過 mtd 把設定寫入,之後 upgrade 完成後,應該也是照反向方法把設定取回。所以先前設定的像是 public/private SSID、WPA 密碼、network 設定等等,都會保存著。所以我想透過 /etc/config 裡面的修改,嘗試看看讓原本修改 /etc/init.d/dropbear 和 /etc/firewall.user 的方式,變成不需要更動,而依然可以保有 SSH login 功能。原理在於 /etc/config/openports 這個 script,是提供 port forwarding 的設定,以下是我嘗試的修改:

#!/bin/sh
. /etc/functions.sh
iptables -t nat -A prerouting_rule -i $1 -p tcp –dport 22 -j ACCEPT
iptables -A input_rule -i $1 -p tcp –dport 22 -j ACCEPT
[ ! -f /var/run/dropbear.pid ] && /usr/sbin/dropbear
# 在 web 上設定的 port forwarding 會被 append 在後面
open_port $1 22 192.168.10.10 22 udp
open_port $1 22 192.168.10.10 22 tcp

/etc/config/openports 是在啟動時候,由 /etc/init.d/S45firewall 所執行,啟動的命令列大概是 /etc/config/openports eth0。所以 iptables 會把 eth0 的 port 22 打開,同時如果發現 /var/run/dropbear.pid 不存在,則去執行 dropbear 來啟動 SSH daemon。

註:單純理論上測試,還沒真正完全 upgrade 0.7.1r2 ROM image 試驗過。

gravatar

啟用 La Fonera 的 SSH

參考打開0.7.1r1的SSH,由於 0.7.1.1 (0.7.1r1) 的 Firmware 在 Router 網頁管理界面上有漏洞,因此可以透過 HTML Form 的方式把指令 submit 給 AP 上的 CGI 執行,依序先讓 iptables 允許 port 22 的連線,接著把 SSH (dropbear) deamon 啟動。接著就可以透過 ssh 連接到 FON 然後登入。
但是,我收到的 AP firmware 是 0.7.1.2 (0.7.1r2) 版本,這個漏洞已經被修掉了,所以沒辦法如法炮製。但是看到不少論壇或是 BBS 有很多人說無法由 0.7.1.2 downgrade 到 0.7.1.1,但是我試了卻沒有問題,可以回到 0.7.1.1 的 firmware。首先下載 0.7.1.1 的 firmware,官方網站已經不提供這個版本下載,但是可以透過 google search 找到例如這個網站,裡面有不少版本的 firmwares。下載之後,看要把分享器的 ADSL 關閉,還是 HUB 的 WAN 拔掉,總之讓他無法連到 internet,然後拔掉電源重新啟動 FON AP(註1)。
然後等一段時間讓 FON AP 開機後,透過無線網路連到任何網站。因為沒有 internet 連線,所以 FON 會顯示連線問題的頁面,接著就到 Advanced 的 Firmware Upgrade 去把 0.7.1.1 的韌體更新上去。更新後他會自己重新開機,同時也不要讓他可以連到 internet。同樣一段時間後,也是可以透過無線連接他的 Router 管理界面。接著就是做下面的事情,允許 port 22 的連線,


<html>
<head>
</head>
<body>
<center>
<form method=”post” action=”http://192.168.10.1/cgi-bin/webif/connection.sh” enctype=”multipart/form-data”>
<input name=”username” value=”$(/usr/sbin/iptables -I INPUT 1 -p tcp –dport 22 -j ACCEPT)” size=”68″ >
<input type=”submit” name=”submit” value=”Submit” onClick=”{this.form.wifimode.value=’”;’ + this.form.wifimode.value +’;”‘}” />
</form>
</body>
</html>

啟動 SSH daemon (dropbear)


<html>
<head>
</head>
<body>
<center>
<form method=”post” action=”http://192.168.10.1/cgi-bin/webif/connection.sh” enctype=”multipart/form-data”>
<input name=”username” value=”$(/etc/init.d/dropbear)” size=”68″ >
<input type=”submit” name=”submit” value=”Submit” onClick=”{this.form.wifimode.value=’”;’ + this.form.wifimode.value +’;”‘}” />
</form>
</body>
</html>

分別存成兩個 html 檔案後,以 browser 開啟後按 Submit 送出。完成之後,就可以開啟 Terminal 執行

ssh root@192.168.10.1

接著就會出現登入提示,打入在 Router Web 管理界面設定的密碼後,就可以登入了。
Fonera CLI
同樣,依照前面提的文章,就可以把預設開啟 port 22 和啟動 SSH daemon (dropbear),以後不管重新啟動都可以使用 SSH 登入 FON。接著把網路接回去或是讓 FON AP 連到 ADSL modem 或是重新設定網路,重新讓 FON AP 啟用 internet connection。

另外,更新 firmware 版本並不會影響這些設定,除非使用 web 界面的 Firmware Upgrade,那就會把整個 flash 內容更新掉,於是這些設定就掰掰了。FON AP 的 crontab 內部會於整點執行 /bin/thinclient。如果需要升級的話,他會透過 ssh 向 FON 核對版本資料,如果需要更新的話,會產生 /tmp/.thinclient,

cd /tmp
wget http://download.fon.com/firmware/update/0.7.1/1/upgrade.fon
/bin/fonverify /etc/public_fon_rsa_key.der /tmp/upgrade.fon
rm -f /tmp/.thinclient.sh
exit

而其中的 upgrade.fon 並不是 1.9MB fonera_0.7.1.2.fon 的 flash image,只有幾百 KB,應該是類似區域更新或是 diff 升級方式的檔案。所以不要透過 web 界面升級韌體,同樣也可以升級到 0.7.1r2,且一樣可以繼續使用 SSH 來進入 CLI 模式。

註1: 因為把 FON AP 的網路線拔掉,之後重新啟動無法啟動他的 WAN 界面,也就無法做以後的更新。

gravatar

Leopard version 9A343

聽說此版本的 Mac OS X 10.5 有不少視覺上的 improvement。Terminal.app 有 tab 的支援,而且可以在把 multiple window 的設定存在 workspace 中。另外一個主要的重點,

Apple has maintained that it does not plan to ship Leopard until sometime later this spring

看來還有得等呀呀呀呀….

gravatar

iPhone 使用 Intel Xscale CPU

在 Intel exec claims iPhone runs on Xscale chip 提到了 Apple iPhone 使用的 CPU 是 Intel Xscale。雖然不是 PowerPC 或是 x86;因為在 handheld、mobile device 用這些 desktop,即使是 mobile edition 是不太可能;但是把 ARM 架構的 CPU 用在 mobile devices 上倒是蠻直接可以預期的。對於 developer 來說,就要以移植的方式來發展 Applications。但對於有 PowerPC 到 x86 transition 經驗的 Apple 來說,不同平台上的移植應該不成問題了,猜想也會提供類似 Xcode 這種 seamless 的環境吧。