星期二, 2月 02, 2010

[tips] python2與python 3的list comprehensions之差異

剛好看到這篇
http://yz.mit.edu/wp/2010/01/14/bitten-by-python-scoping/
想起之前也有遇到類似的問題~

其實主要就是python2的list comprehensions有個副作用,
就是會重設scope內的變數, 比如以下這個程式

def t1(): 
x=5
[0 for x in [1,2,3]]
print x

t1()

3

這邊的x會被重設為3, 有點像是殘餘的loop變數的感覺~
有些人會玩弄這個副作用來達到一些不想讓人看懂的lambda技巧就是了:P

但相對來說後來引進的generator語法就沒有這個問題, 所以這個問題其實也可以使用list(x for x in [1,2,3])這個方法來解決.
def ts2():
x=5
list(x for x in [1,2,3])
print x

ts2()

5

另外也可以置換變數比如改成使用a來取代x(當然a是會被assigned).

當然還有另外一個方法則是使用python 3, 就完全沒有這個問題了 :D

星期三, 1月 27, 2010

Upcoming Django 1.2 & PostgreSQL 9.0

http://docs.djangoproject.com/en/dev/topics/db/multi-db/#topics-db-multi-db
Django 1.2 新功能: Multiple databases

PostgreSQL 9.0 新功能 Hot Standby跟Streaming Replication

http://wiki.postgresql.org/wiki/Streaming_Replication

http://developer.postgresql.org/pgdocs/postgres/hot-standby.html

還沒空試, 不過結合這幾個新功能的話似乎可以有效的分散django資料庫端的read/write, 將write-only database server上的WAL(write-ahead log) 即時streaming到read-only database server上的hot standby database, 感覺好像不錯~~

星期二, 12月 29, 2009

[tips] 續: 設定 Logitech G5 in Linux 補強版

話說兩年前買了一支羅技的G5滑鼠
在工作的linux環境上用到目前仍然非常滿意
之所以會說很滿意 是因為G5其實有一個很好按的大姆指鍵
大家都知道xwindow裡只要選取了文字
就會自動"複製"選到的文字
然後按下中鍵就可以"貼上"
但是目前的滑鼠都有滾輪的設計,
所以這個複製貼上的功能變成了按下滾輪
在linux裡我就用xmodmap這個程式
將這個大姆指鍵取代xwindow中鍵貼上的功能,
因為按下滾輪其實我覺得要用力按,
而複製貼上其實是還滿常用的功能
其實感覺還挺傷手的
另外我也用xbindkey將滾輪向左向右的功能做來切換視窗
而滾輪按下變成剪貼簿裡的貼上,
(即Ctrl+V, 跟xwindow的複製貼上不同)
設定的詳情可以看我2年前的文章
http://timchen119.blogspot.com/2007/12/logitech-g5-in-linuxxwindow.html

前幾天升級系統的時候不小心把滑鼠滾輪向左向右切換視窗的功能給砍了~ 因為兩年沒設定 連自己都得再找一下原本的設定方法
就在找方法的同時
剛好看到一個lomoco的hack可以將g5的硬體dpi按鈕關掉,
改用軟體控制
但是lomoco這個加強羅技滑鼠在linux上支援的程式本身並沒有支援G5, 於是就順手弄了一支python程式g5mouse.py,
可以改用軟體操縱DPI的設定,
這樣我們在G5上還可以多出了兩個按鍵可以自行設定!

廢話不多說,
首先先easy_install g5mouse

localhost tim # easy_install g5mouse
Searching for g5mouse
Reading http://pypi.python.org/simple/g5mouse/
Reading http://code.google.com/p/g5mouse/
Best match: g5mouse 0.1
Downloading http://pypi.python.org/packages/source/g/g5mouse/g5mouse-0.1.tar.gz#md5=d3347dbf261135049cb6e5a6be133355
Processing g5mouse-0.1.tar.gz
Running g5mouse-0.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-oHyJGh/g5mouse-0.1/egg-dist-tmp-6Vn5h_
warning: install_lib: 'build/lib' does not exist -- no Python modules to install
zip_safe flag not set; analyzing archive contents...
Adding g5mouse 0.1 to easy-install.pth file
Installing g5mouse.py script to /usr/bin

Installed /usr/lib/python2.6/site-packages/g5mouse-0.1-py2.6.egg
Processing dependencies for g5mouse
Finished processing dependencies for g5mouse

localhost tim # g5mouse.py  
Usage: g5mouse.py [options] /dev/usb/hiddev0

g5mouse.py control logitech G3,G5,G7 and G9's hardware dpi buttons on linux

Example: g5mouse.py -d 1600 -l 1 /dev/usb/hiddev0

Author: timchen119.at.gmail.com

Options:
-h, --help show this help message and exit
-d DPI, --dpi=DPI set dpi: 400,800,1600,2000
-l LED, --led=LED set led: NONE,1,2,3,ALL
-n, --nodpibuttons disable + and - DPI speed buttons



然後就可以透過g5mouse.py這隻程式軟體設定DPI,
(可以切換到400,800,1600,2000四種DPI 比原先的還多一種
而且也可以自行設定LED燈號)
比如

你要切到DPI 2000並將所有指示DPI的LED設成第一個
就可以下
g5mouse.py -d 2000 -l 1

預設是DPI 1600跟LED全關掉 預設device是/dev/usb/hiddev0
所以你也可以只下g5mouse.py -d 800 就可以將LED全關掉 並將DPI設到800
如果加上-n這個選項 還可以把硬體控制DPI button的功能關掉
這樣我們就會多出兩個button可以自行設定
將這個程式放在你的.xprofile (XDM)或是.xinitrc/rc.local裡
讓他開機自動執行
再來我們就多出了兩個按鈕可以操控囉~

我就用xbindkeys將+號設定成Ctrl+C 而-號設成Ctrl+V
並把原先的滾輪按下的功能給取消以免誤按~

我目前的.xbindkeysrc.scm

(xbindkey '("b:6") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Up]'")
(xbindkey '("b:7") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Down]'")
(xbindkey '("b:9") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[V]'")
(xbindkey '("b:10") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[C]'")
(xbindkey '("b:11") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Up]'")
(xbindkey '("b:12") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Down]'")


另外這隻程式不止支援G5, G3/G5二代/G7/G9 都可以操縱~

星期二, 9月 29, 2009

Google 推出網頁註解新功能~~

但我覺得這根本就是網頁推文~~ Orz

參考來源:

"Google 網頁註解"
- Google 網頁註解 (在「Google 網頁註解」中檢視)

星期一, 8月 31, 2009

[tips] get your IP address

wget -qO- http://ipwhats.appspot.com/

or just point your browser to http://ipwhats.appspot.com/

星期一, 8月 17, 2009

[tips] sphinx支持中文pdf的方法

目前 python 官方文件使用的sphinx是個不錯的文件產生系統,

可以同時由rst產生html,latex,pdf,ps等文件格式,

不過我目前試的結果似乎預設從latex產生pdf時沒有支援中文,

網路上相關的文件大都寫得很複雜,

但其實只要在文件project裡的source/conf.py加入

latex_preamble = '''\usepackage{CJKutf8}\n\AtBeginDocument{\\begin{CJK}{UTF8}{bsmi}}\n\AtEndDocument{\end{CJK}}'''

其他都不需更改,
以後make latex; cd build/latex; make all-pdf 就都可以產生出正確的
中文pdf檔了

測試環境是Gentoo linux底下的texlive 2008 (cjk) + pdflatex

星期四, 8月 13, 2009

[tips] linux裡 emacs23 utf8 中文輸入與SCIM

最近新昇到emacs 23.1

又發現SCIM中文輸入有問題, ctrl+space老是變回mark.

我的locale是zh_TW.UTF-8

其他程式輸入中文都沒啥問題

就emacs23.1無法輸入中文,

試了老半天 (暫時)解決方法如下:

啟動emacs時用 LC_CTYPE="zh_CN" emacs-23

.emacs 加上這行

(prefer-coding-system 'utf-8)

這樣就沒問題了

至於為什麼要如此我也不能理解

如果有高人肯告訴我那就再好不過了,

不過我暫時懶得去追了, 設個alias也就算了.

總之locale裡似乎只有zh_CN跟zh_CN.gbk會動.

btw,我的環境是gentoo linux.

註: 這個問題 基本上只在terminal上使用emacs -nw的使用者應該不會遇到.

星期三, 7月 29, 2009

[talk] 高雄世運結束了~~

上個禮拜起一直跑來跑去,
從世運主場館, 高雄巨蛋, 高雄縣立體育場甚至連義守大學都去了,
為了就是去看現場的世運比賽,
雖然說世運大部份都不是熱門的運動, 但是卻意外的非常好看,
特別是飛盤這項運動, 現場看起來真是特別有趣,
從後場可以直接丟到前場, 從右路可以像香蕉球一樣轉彎到左路,
這是看電視完全沒辦法欣賞到的~ 這門票實在花的很值得~~

這次唯一的遺憾就是我雖然買了開幕門票, 卻被國家抓去教育召集,
沒辦法看海莉現場了~~ 不過感謝至少MOD還有網路有一大堆影片可看

順道附上我滿喜歡的海莉的歌 Wuthering Heights:

Kate Bush的原唱

星期一, 7月 06, 2009

HTML 5

firefox 3.5日前已經release了
最重要的一個新功能我認為是原生支援了HTML 5的Video tag,
也就是未來的瀏覽器不再需要flash就可以直接播放ogg Theora/Vorbis編碼的影片。

測試的方法:

1. 首先先用youtube-dl這隻程式隨便抓一個youtube的flv檔案下來
http://bitbucket.org/rg3/youtube-dl/

2. 透過ffmpeg2theora將flv轉成ogg
http://www.v2v.cc/~j/ffmpeg2theora/index.html

3. 寫一個html檔

<html>
<body>

html5 video test!

<div>
<video controls source src="sample2.ogg" type="video/ogg;codecs=theora,vorbis" autoplay >
your browser does not support the video tag

</video>
</div>

</body>
</html>


網路上也有其他人做了一些fallback to flash/java applet player的方法, 例如這個 http://www.dailymotion.com/openvideodemo 還有一隻 firefox的plugin firefogg http://firefogg.org/ 可以直接在firefox將影片即時編碼+mux成Theora/Vorbis ogg格式後再上傳。

星期四, 7月 02, 2009

想要變成艾托畢利卡的企鵝? 誤會大了~~

話說最近在迷GONZO的 咲-Saki- (台譯: 天才麻將少女)

女主角中的原村和在高中麻將大賽中帶著一隻企鵝抱枕打麻將,

沉醉於麻將中臉色微紅的樣子真是萌啊~~

企鵝其實不是第一次出現在秋葉原系動畫中了,

在動畫IdolM@ster中,

女主角天海春香的房間就貼有最喜歡的Gentoo Penguin (ジェンツーペンギン) 的海報~~

春香的電腦桌布跟手機也都是企鵝~~

不過Gentoo Penguin (巴布亞企鵝) 因為名稱跟我使用的Linux Distribution同名 所以很清楚這企鵝的樣子

但是, 從第一次看到就很好奇~~ 咲-Saki-的原村和抱著的這隻エトペン (艾托企鵝) 到底是什麼 ?



在東立出版的天才麻將少女漫畫中,

原村和睡醒時對當時正在說夢話的Saki說

艾托企鵝是這本"想要變成艾托畢利卡的企鵝" (エトピリカになりたかったペンギン)繪本的主角

但是, 疑問又來了 艾托畢利卡又是什麼??? 聽起來像是某個偉人或是繪本中其他角色的名字

企鵝有什麼不好~~ 為什麼好端端的企鵝不當~~ 要去當什麼艾托畢利卡呢???

經不起好奇心的引誘~~ 不禁google了起來~~

"エトピリカになりたかったペンギン"

這個時候就發現懂一點日文真不錯~ 透過google跟日文維基 查到了

艾托畢利卡 --> エトピリカ --> 花魁鳥 (エトピリカ)



恍然大悟!

原來是想要變成花魁鳥的企鵝啊~~~

什麼想要變成艾托畢利卡的企鵝? 誤會大了~~ XDXD

註: エトピリカになりたかったペンギン繪本是漫畫虛構杜撰的~~ 現實世界中並沒有這部作品~~