python + opengl = pyopengl

安裝:

  1. 安裝Python,我用 2.5。
  2. 安裝EasyInstall,這是類似 Perl CPANRuby Gems的工具。等等會利用這個來安裝 PyOpenGL
  3. 打開命令提示字元,切換到 c:\python25\scripts,執行 easy_install pyopengl。
  4. 最後,你還需要 GLUT:Nate Robins – OpenGL- GLUT for Win32,下載以後,丟到 c:\windows\system32 即可。

都好了以後,你就可以試試看下面這個小程式了:

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
def display():
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
glPushMatrix()
#glTranslatef(0.,1.,-1.) #move to where we want to put object
glBegin( GL_TRIANGLES )
glColor3f( 1., 0., 0. )
glVertex2d( -1., 0. )
glColor3f( 0., 1., 0. )
glVertex2d( 1.,0. )
glColor3f( 0., 0., 1. )
glVertex2d( 0., 1. )
glEnd()
glPopMatrix()
glutSwapBuffers()
return
glutInit( sys.argv )
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB |GLUT_DEPTH)
glutInitWindowSize(400,400)
glutCreateWindow("Hello, World")
glClearColor(0.,0.,0.,1.)
glutDisplayFunc(display)
glutMainLoop()

想試試的原因,最主要是想說,Python 可以比較方便地進行測試與練習,接觸以後,發現代碼也很容易轉換為 C/C++,就這樣。
參考資料:

trinity.vim

前兩天想說找找看 Vim 有沒有 GNU Global 的 plugin 時,看到了 trinity.vim
這個 plugin 整合了三個 plugin:Source explorer, taglist, NERD treeVim 模擬出接近 Source Insight 的效果。
有用過 Source Insight 的人,相信都知道很難找到替代品,我前幾年也曾經試圖找過,但都一直沒找到。
這個 plugin 真的不錯,讓Vim更好用了~
有優點當然也有缺點:

  1. Source explorer 裡呼叫 ctags 的地方是寫死的,所以如果你的 ctags 放在別的地方,最好自行去搜索有呼叫到 ctags 的地方,加上路徑。
  2. Source explorer 打開的時候,速度會變慢,這是因為它試圖利用 ctags 資料庫去找跟游標所在位置有關的程式片段。我自己是比較少用,不能用對我影響不大。

電影流水帳(2008/10/28~2008/11/4)

接下來要找時間來算算今年看了哪些片子…

  • Runaway Jury(IMDB),中譯:失控的陪審團。這是 2003 年的片子了,現在才看完。這是一部講左右陪審團以影響判決結果的故事,原本以為男女主角只是貪錢,才試圖進入陪審團以左右其他陪審員的結果,但劇情到最後急轉直下,出人意料之外,飾演壞人角色的Gene Hackman最後身敗名裂。片子裡大牌相當多,故事也很棒,好看。
  • Bankok Dangerous(IMDB, Wikipedia),中譯:無聲火。女主角是楊采妮,在本片很明顯是花瓶角色。對她演出電影最有印象的一部片子是花月佳期(電線杆有鬼),這部片子我就覺得她演得很不錯。整體來說,這部片子缺少了槍戰片的緊張感,導演想讓男主角有更多內心戲,但是表現的不好,普普通通。

電影流水帳(2008/10/17~2008/10/27)

好快,2008年只剩下兩個月了呢~

  • Righteous kill(IMDB, Wikipedia),中譯:世紀交鋒。很難得能看到這兩位演員一起演戲,所以這部電影的賣點就在於他們兩人的演技。老實說,故事是不錯,但是導演埋伏筆埋得不是很漂亮,整部電影只能看到這兩個人飆演技。老實說,我不是很喜歡這部片子。
  • Hellboy II: The Golden Army(IMDB, Wikipedia),中譯:地獄怪客2-金甲軍團。我是蠻喜歡這部片子的,前面拍出來的效果真的很不錯,對於這種有點神怪+科幻的片子,我是相當喜歡。但是到了後半段,感覺就有點爛了,明明 Nuala 公主自殺就可以解決的問題,卻一定要到最後大幹一場才行,實在是有點不知所謂。我妹說可能不會有第三集,但是我看到後半 Liz 要救 Hellboy 所做出的選擇時,就認為我妹錯了,這肯定會有第三集,而且會做出一個 ending。

CMake + CTest

CMake 內建 CTest,基本使用可以參考:CMake Testing With CTest
大致把要點整理如下:

  1. 在專案根目錄的 CMakeLists.txt 加上 ENABLE_TESTING()
  2. 在你 test 程式所在目錄的 CMakeLists.txt 加上 add_test( 測試名稱 執行檔名字 [參數1] [參數2] … )
  3. 測試程式在錯誤發生時呼叫 exit() 並傳入非 0 值,正常結束的話,則呼叫 exit(0)。
  4. 大功告成以後,先刪除 CMakeCache.txt,然後用 cmake 重新產生 Makefile,接下來就可以用 make && make test 來進行測試了。
  5. make test 是進行所有測試,只想進行某幾項測試的話,可以查看 ctest 的 -R, -E, -I 這幾個選項的說明。-R 是用 regular expression 找特定名稱的測試項目,-E 則是相反,排除掉特定名稱的測試項目,-I 是指定項目號碼,表示進行指定項目的測試。

文件裡面還有提到可以把測試結果自動上傳到網站上等等,不過看來是用不到,就沒嘗試了。

以 bash script 為 sqlite database 產生 C/C++ struct

最近寫的一個 bash script,用來幫你把 sqlite database 裡的 table schema 轉成 C/C++ struct。
這裡只處理 text 與 integer 型態,text 轉成 wstring/string,integer 則轉為 int。轉換的工具是使用 awk/sed。

只要稍稍改動一下,也適用在其他語言上。

#!/bin/bash
if test -z "$1"
then
echo "You need to specify the database file name."
exit -1
fi
db=$1
dbname=`basename $1 .db`
tables=`sqlite3 $db ".table"`
output="db_${dbname}_schema.h"
touch $output
cat >> $output <> $output
sqlite3 $db ".schema $table" | awk '/^\ /{printf("%s %s;",$2,$1);}' | sed -e 's/,/\ /g' | sed -e 's/text/db_string /g' | sed -e 's/integer/int /g' >> $output
struct_name=`echo $table | awk -f cap.awk`
echo "}$struct_name;" >> $output
echo "" >> $output
done
cat >> $output << EOF
#endif
EOF
# call "astyle" to format the code.  Beside "astyle", you can use "indent".
astyle $output
exit 0

電影流水帳(2008/10/6~2008/10/16)

  • Failure to Launch(IMDB, Wikipedia),中譯:賴家王老五。出乎我意料,還蠻不錯的一部片子,劇情很流暢。裡面我比較喜歡的一段是男女配角 Ace 跟 Kit 從彼此討厭到上床的那一段,堪稱是莫名其妙的經典,徹夜等候射擊那隻 mockingbird 的閒聊成了唯一可以解釋的原因。
  • Sweet Rain 死神の精度(IMDB, Wikipedia,中譯:死神的精確度。裡面有三個故事,第一個故事跟第三個故事是有相連的,也就是,第一個故事裡的年輕女主角就是第三個故事裡的老太太,第二個故事很明顯是一個轉折。整體的氣氛與故事我還蠻喜歡的,看到最後千葉與老太太閒聊時,不自覺湧起一絲絲的感動。飾演第三個故事裡老太太的富司純子,我看到她時,本以為她有演過醫龍,結果發現不是,醫龍裡的是夏木マリ,她們的氣質頗有相似之處。

Project.vim

同事最近拋棄了 Source Insight 3,開始用 Vim 寫 code,所以有人跟我一起研究了。
他最近介紹我一個 plugin : project – Organize/Navigate projects of files (like IDE/buffer explorer),看起來不錯用,他可以把某個目錄下所有檔案都建立為專案檔,讓你可以快速瀏覽所有檔案,不過美中不足的是他沒有把 CVS、.svn、_svn 等目錄過濾掉,我在 VimDirListing 函數裡添加了兩行把這些目錄過濾掉。
這是原來的樣子:

if isdirectory(glob(fname))
let {a:dirvariable}={a:dirvariable}.a:padding.fname.a:separator
let {a:dircount}={a:dircount} + 1
else
" other stuff

改過以後:

if isdirectory(glob(fname))
if fname != 'CVS' && fname != '.svn' && fname != '_svn'
let {a:dirvariable}={a:dirvariable}.a:padding.fname.a:separator
let {a:dircount}={a:dircount} + 1
endif
else

如果你懶得看英文的話,對岸的朋友翻譯了該 plugin 的文檔:VIM-Project Plugin – I Know you Know – C++博客

Belvedere Luxury Cosmopolitan

作法:加入 1~1/2 盎司的司雪樹伏特加、 1/4 的香橙干邑酒、少許蔓越莓汁以及冰塊,然後搖勻,濾出後倒入酒杯即可。
懶人作法:伏特加應該可以換牌子,香橙干邑酒應該可以改用柳橙汁。
來源:大潤發廣告,上面註明來源是出自積木出版社的大師不傳雞尾酒特調800招,想看照片的,可以買書來看。

Chambore & Vodka Splash

作法:先將冰塊置於杯中,再加入 150cc 野牛草Vodka以及 150cc 桑椹香甜酒,最後加上蘇打水即可。
懶人作法:Vodka 用其他牌子應該也可以,桑椹香甜酒應該也可以用其他種類的果汁取代,蘇打水就直接用七喜或雪碧吧。
來源:大潤發廣告,上面註明來源是出自積木出版社的大師不傳雞尾酒特調800招,想看照片的,可以買書來看。