TAG

首都機能移轉 (2) 歌詞 (2) 靠北文 (40) 戲言 (30) 糟糕 (7) ACG (23) Assembly (2) Boost (2) C (31) C++ (69) CMake (4) CSIE (67) Debian (34) Design_Pattern (2) Django (1) Eclipse (1) en_US (13) FFmpeg (3) FoolproofProject (26) FreeBSD (2) Git (4) GNU_Linux (65) IDE (5) Java (11) JavaScript (19) KDE (15) Khopper (16) KomiX (3) Kubuntu (18) Life (1) Lighttpd (2) Mac_OS_X (2) Opera (1) PHP (2) PicKing (2) Programing (21) Prolog (1) Python (7) QSnapshot (2) Qt (30) Qt_Jambi (1) Regular_Expression (1) Shell_Script (7) Talk (98) VirtualBox (7) Visual_Studio (13) Windows (18) zh_TW (36)

2009年9月29日 星期二

爆了

部落格觀察的貼紙爆了。
我不知道是怎麼回事,也不是很在意。基本上那個 widget 是載入最慢的 widget,我只不過是想把它改成 onload 之後再載入到 DOM,失敗之後 rollback,就變這樣了。
我還是認為 HTML 要有個 post 的機制,讓整個文件 layout 出來之後再載入外部文件。這是為什麼 img 標籤希望你指定圖片的寬高,因為不指定的話就要等圖片載入才能知道大小,然後文件就要重新 render,然後你在看的文件內容就會一直改變位置。
不過這樣就沒計數器了,其實我對排名不是很在意。自己寫一個好像也還好,不過有點麻煩。

2009年9月18日 星期五

如何讓你的程式更難理解(5)

int uglystrieq( const char * l, const char * r ) {
    while(*l&&*r&&(*l++|32)==(*r++|32));return *l--||*r--||(*l|32)!=(*r|32);
}
Compare the equivalence of two strings. Case insensitive.
[Edit]
This implementation while crash when passing a 0-lengthed string. Another version:
int _(const char*l,const char*O) {
    return ((*l|32)-(*O|32))?1:*l?_(l+1,O+1):0;
}

2009年9月13日 星期日

Install Windows XP on VirtualBox with SATA support

Briefly in Windows XP:
  1. Download the drivers from Intel
  2. Extract the archive:
    • Windows: Just extract it. You will get an floppy image named F32.IMA
    • Linux: Because of it is a self-extract archive, you can use unzip or p7zip to extract f6flpy32.exe and can still get F32.IMA
  3. Mount the floppy image. No bother to use a real floppy.
  4. In the initialization stage, press F6 to get the external SATA drivers.
  5. Press S to select driver. Please select Intel(R) 82801HEM/HBM SATA AHCI Controller (Mobile ICH8M-E/M)
  6. Then go ahead

2009年9月11日 星期五

Packages in Opera's FTP repository

There is a deb repository that provides apt service. But packages in that one are still depends on Qt3. Packages which are built with Qt4 are only avaliable in FTP repository. Weird Opera.

2009年9月1日 星期二

Pitfalls in shell scripts

When you iterate paths and do something with them, you might be tempted write this:
find . -name blah | xargs rm -f
yeah, I know there is a switch -exec in find, I just don't like it.
This command looks fine, but has two problems:
  1. The length of arguments maybe exceeds the limit of the shell.
  2. The file path may contains some special characters, such like quotes, spaces.
To solve the first issue, a loop maybe useful:
for path in `find . -name blah` ; do
    rm -f "path"
done
This solves the first issue, but the second one remains. For loop treats spaces and newlines as delimiters. But if paths contain spaces, they will cause error.
You can change the delimiter temporary as a workaround, but this will impacts all actions in the loop, I personally don't recommend this.
Or we can use a while loop:
find . -name blah | while read path ; do
    rm -f "$path"
done
should be just fine.
Another common error , comes from:
if [ $str = blah ] ; then
The problem is, $str maybe unset or a null string, or worse, injected with a string such like -f.
Good practice is:
if [ x"$str" = xblah ] ; then