tag:blogger.com,1999:blog-381226612024-03-19T15:59:48.148+08:00拜Python教之Django光明會支部 [ 使徒提姆@Python ]"拜Python教" 是一個低耦合高熱血密度的小型地下傳教組織.
專門研究並推廣Python崇拜 <br />
"Django光明會支部"
是一實驗性分享Python, Django及自由軟體心得的中文部落格使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.comBlogger166125tag:blogger.com,1999:blog-38122661.post-20500998166224180892013-10-01T14:09:00.002+08:002013-10-03T12:35:24.152+08:00[tips] [Howto] Support Nvidia Optimus on Ubuntu 12.04 LTS (precise) [No Bumblebee needed]For laptops which use muxless Nvidia Optimus, there's a new way to support officially on Ubuntu 12.04 LTS.<br />
<br />
#<code>sudo apt-get install nvidia-319-updates nvidia-prime xserver-xorg-lts-raring </code><br />
<br />
The command will upgrade<br />
* kernel to 3.8 ,<br />
* X server RandR to 1.4<br />
* Install Nvidia driver version 319.<br />
<br />
After reboot, it will use nvidia driver by default.<br />
There is no need to upgrade to 13.10 if you prefer 12.04 LTS.
使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com0tag:blogger.com,1999:blog-38122661.post-43234749469729156692013-01-17T13:18:00.001+08:002013-01-17T13:19:15.177+08:00[tips] g_clear_pointer <pre>
因為在tracking一個bug,
所以要backport indicator-power這個package到ubuntu precise.
意外發現了glib在2.33之後支援的一個還滿好用的function:
g_clear_pointer()
簡言之以前的寫法,要把物件刪除再把指標設為NULL:
if (priv->object_path != NULL) {
g_free(priv->object_path);
priv->object_path = NULL;
}
</pre>
現在只要一行就可以達成了
<pre>
g_clear_pointer (&priv->object_path, g_free);
</pre>
當然要backport的話作法就是相反~~
使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com0tag:blogger.com,1999:blog-38122661.post-30266346281960148342012-02-17T15:47:00.004+08:002012-02-17T15:56:15.524+08:00[tips] access gnome-keyring in cronIt seems program execute in your crontab doesn't have the luxury to use the gnome-keyring daemon to get the permission it should had. In order to let your program access gnome-keyring, you need to reuse a environment variable in your desktop session called DBUS_SESSION_BUS_ADDRESS in your cron environment also.The quickest way to do it is to add these line:<br /><br /><code><br />. ~/.dbus/session-bus/*-0<br />export DBUS_SESSION_BUS_ADDRESS<br /></code><br /><br />in your cron script (it assume you logged in under X display 0)使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com0tag:blogger.com,1999:blog-38122661.post-53971260647627693662011-06-01T03:02:00.006+08:002011-06-01T04:19:54.423+08:00[link] Nvidia Optimus on linux 的解決方案 : bumblebee 大黃蜂<a href="https://github.com/MrMEEE/bumblebee">https://github.com/MrMEEE/bumblebee</a><br /><br />四月份的時候買了一台DELL i5二代的筆電,<br />用起來還算滿意, <br />但是就是在linux下居然無法使用Nvidia的顯示卡這點讓我不是很滿意。<br /><br />當初在買筆電的時候,為了相容Linux還特地挑了一個Nvidia的獨顯,<br />想說一直以來Nvidia的顯示卡在Linux下都支援良好,<br />所以也沒特別注意相關的消息,<br />這次買了才發現,,<br />只要是使用了Nvidia動態切換內顯和獨顯的Optimus技術的筆電,<br />在Linux下通通沒辦法驅動Nvidia獨顯, <br />而只能用Intel的內建顯示,<br />並且Nvidia的顯卡雖然無法運作,<br />但還是會在背景吃掉相當多的電力,<br />一個原本是設計來省電的技術反而耗了更多的電,<br />實在是非常的諷刺。<br /><br />原本想說應該BIOS就可以直接切換成Nvidia獨顯,<br />結果研究了一下才知道Nvidia的輸出會經過Intel顯卡,<br />所以如果沒有內建硬體的Multiplexer,<br />想關掉Intel顯卡直接使用Nvidia顯卡是不可能的,<br />當時只好在網路上找了一個acpi的方法把Nvidia的顯卡先關掉,<br />但是反過來如果只是要把Nvidia的顯示卡打開卻似乎是辦不到,<br />實在是萬分苦惱。<br /><br />然後剛剛發現了這個bumblebee(大黃蜂)專案,<br />提供了ㄧ個簡單的script就讓Linux支援了Nvidia顯示卡且使用官方的3D驅動,<br />雖然還沒辦法動態切換, 但是可以手動切換也算是不錯了。<br /><br />安裝的方法真的是很簡單:<br />先git clone https://github.com/MrMEEE/bumblebee.git<br />然後執行其中的install.sh 回答幾個只要選default就可以的問題 之後就安裝完成囉!<br /><br />平常的時候,預設還是會用Intel的顯卡來執行, <br />要用Nvidia執行的時候, 則要透過optirun來執行該程式~~<br /><br />#glxgears <br /><br />304 frames in 5.0 seconds = 60.604 FPS<br />301 frames in 5.0 seconds = 60.137 FPS<br />301 frames in 5.0 seconds = 60.136 FPS<br />301 frames in 5.0 seconds = 60.137 FPS<br />301 frames in 5.0 seconds = 60.137 FPS<br /><br />#optirun glxgears<br /> * Starting Bumblebee X server bumblebee Enabling nVidia Card failed (Error: AE_BAD_PARAMETER).<br /> [ OK ]<br />3015 frames in 5.0 seconds = 602.973 FPS<br />3312 frames in 5.0 seconds = 662.366 FPS<br />2908 frames in 5.0 seconds = 581.591 FPS<br />2798 frames in 5.0 seconds = 559.551 FPS<br />3409 frames in 5.0 seconds = 681.679 FPS<br /><br />雖然是有些錯誤訊息不過還是有成功的跑起來了,<br />另外再跑了lgfxgears也是由2fps到100fps,果然是快了不少.使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com2tag:blogger.com,1999:blog-38122661.post-90534665074330051322011-01-09T00:08:00.008+08:002011-01-09T11:47:22.581+08:00如果高中棒球社女經理讀過使徒提姆的部落格~~<span style="font-weight:bold;">她就會馬上開始學Python</span>......<span style="font-style:italic;">也許吧? :P</span><br /><br />據說"如果高中棒球社女經理讀過杜拉克的管理學"是前陣子日本暢銷書排行榜排名第一名, <br /><br />既然管理學可以,Python應該也可以吧, "import 管理學"什麼的我們Python應該也有吧?<br /><br />嗯嗯 是不是乾脆把我的部落格名稱也改一改~~ 之後就可能會突然爆紅也不一定? XD<br /><br />==<br /><br />老實說像我這麼發懶的部落格作者, <br /><br />是根本不奢望會有讀者的, <br /><br />說來說去這部落格不過就是個一時自娛娛人的消遣跟筆記罷了,<br /><br />但是即使如此, <br /><br />突然發現部落格去年居然只更新兩格, <br /><br />也是有種感受到被歲月的巨輪無情的從身上碾過的感覺~~<br /><br />"啊啊啊~~ 老的無話可說了嗎?"<br /><br />"好歹出來寫篇Python真是太讚了 然後出來喊個兩聲表示還活著也好吧?"<br /><br />"連廢文都沒有了嗎?"<br /><br />==<br /><br />不然就把這一篇改成2011年我們來學Python好了~~<br /><br />反正從一起頭這篇就註定是個廢文不如就這樣廢下去好了~~<br /><br />所以從現在開始就把這格的主題定調為 "2011大家學python" 好了~~<br /><br />(咦 高中棒球社女經理到哪去了? 真是隨便啊! 還有學PYTHON根本就不廢啊!!! ~~ )<br /><br />啊啊不管了~~ 事實上啊~~ 嚴肅的看待"學python"這件事本身就是很奇怪的一件事~~<br /><br />好像非得拿本書認真的讀完Python語法才叫在學~~ <br /><br />這樣一點都不對啊~~ Python不是這樣學的~~ 學Python應該是要很愉快的啊!<br /><br />這就好像教完所有文法再開始叫你講英語一樣來學英語~~ <br /><br />因為一點用也沒有所以一點也不愉快~~<br /><br />你如果要當Python特許教師也許可以這麼學~~ (不過... 有這種職業嗎?...)<br /><br />但是正常人不應該是這樣學的~~<br /><br />很好~~ 既然你都看我的廢話看到這邊了~~ <br /><br />(真是驚人的毅力啊~~ 你完全有成功人士的資質啊!!!)<br /><br />看來你就是"2011大家學python"這格廢文的目標讀者群~~ <br /><br />我就特別對待你~~ <br /><br /><br />教你史上最快學習Python的方法~~ <br /><br /><br />絕對保證你聽也沒聽過~~ <br /><br />~~ ~~ ~~<br /><br />因為我也是隨便講講的!!!<br /><br />(什麼,,,不想學了? 我偏偏就想教啦, 就跟你說我這格是老人湊字數的你到現在還聽不懂喔?<br />你就完成一個孤單寂寞老人的心願這樣也不行喔? 你你你~~~<br />)<br /><br />對~~~ 就是你 ~~~<br /><br />不管了~~~ 聽我說第一步~~<br /><br />聽清楚了喔~~<br /><br /><span style="font-weight:bold;">就是先把你手上的什麼XXX Python 然後封面還有動物樣子的書先放下...</span> <br /><br />(疑這個捏他太深奧了嗎? 啊啊啊 等一下會不會接到書商打電話來抗議啊? 反正他們應該早就賣不好了應該沒什麼差吧 點點點)<br /><br />別人怎麼教你的我不管~~ 既然你上了我們Python神教的好船~~ <br /><br />我們就不會眼睜睜的看你沉入書海~~<br /><br />這年頭也不知道吹什麼風 Programmer家裡的書櫃都快變成動物圖鑒了~~<br /><br />我們是來學寫程式的不是來當圖書館還是動物園管理員的~~<br /><br />好了我廢話真多 (真是極度自覺啊!)<br /><br />再來再來<br /><br />開始第二個心法~~<br /><br />那就是~~<br /><br /><h2><span style="font-weight:bold;">抄</span></h2><br /><br />疑? ㄟㄟㄟ???<br /><br />怎麼可以呢 從小到大我們的尊敬的老師父母兄弟姐妹親朋好友阿公阿媽還有隔壁班的阿花都跟我們說這樣是不行的啊~~~<br /><br />俗話說的好~~ 天下文章一大抄~~ <br /><br />程式碼~~ 更是要抄~~<br /><br />熟讀唐詩三百首~~ 不會作詩也會吟~~<br /><br />抄太難聽的話 就改成謄~~ <br /><br />就是像打開習字帖, 然後像永字八法般的練法~~<br /><br />打開你的編輯器 找個有興趣的程式 把別人的程式碼抓過來 開始改~~<br /><br />看不懂的就查 查不到的就想 想不出的就問 問不到的就再認真看認真查認真問~~<br /><br />反正你已經閒到在看我的文章 肯定是很閒的 不如就認真點抄...<br /><br />光明正大的抄 快樂的寫寫寫~~ <br /><br />就把他當作是老師全班只准你一個人openbook的去考試吧! (這真是太爽了 乖小孩不要學)<br /><br />~~ <br /><br />再來再來就是要登堂入室了~~<br /><br />這就不能只是抄了~~ <br /><br />基本上你抄久了 大概也已經到了不用參考別人的程式 就可以自己動手從無到有開始寫的境界了~~<br /><br />這個時候就可以開始看書看文章,寫自己喜歡的程式~~ <br /><br />之後再學些別的東西讀點不相關的東西跟學些其他自己感興趣的程式語言都有所幫助~~<br /><br />總之就是個落花流水皆文章的階段~~ <br /><br />等到了這個階段開始也就可以開個部落格寫些廢文騙個字數了 (疑??? 幹嘛又自婊???)<br /><br />===<br /><br />"""<br />廢話真的是很多 而且為什麼總共只寫了三步啊!!! 而且第三步分明就是在騙字數啊~~<br /><br />什麼因為寫太多廢話連自己都覺得煩了??? 這什麼理由到底負不負責任啊~~<br /><br />責任編輯到底是誰啊~~ 這麼廢的文章也敢PO出來喔~~<br />"""<br /><br />以上是來自某讀者內心的OS,<br /><br />可是本格宗旨就是插科打渾的未必就是胡言亂語,<br /><br />語重心長的也未必就是真知灼見, <br /><br />總而言之就是力求一種精神錯亂的頹廢美學~~<br /><br />反正網路流行騎牆派 哪裡鄉民多 哪裡就有真理 <br /><br />我們廢話黨是不在乎的~~ (那來的廢話黨你不是Python教的嗎?)<br /><br />總之一個人神智錯亂的時候 廢話都很多 尼采不也整天嚷嚷的說什麼超人來了嗎?<br /><br />好歹我也沒寫什麼什麼什麼如是說的寫了一大本~~ 頂多只是幻想著高中棒球社女經理會讀一下我的部落格而已~~<br /><br />啊 經理 對不起我是個阿宅~~ 我還有二次元complex 沒藥醫的!<br /><br />====<br /><br />總而言之 2011年我終於有了我的第一格! (真是個明智的收尾)<br /><br />而且除了Python很讚這種廢話我還真的吐不出什麼象牙~~<br /><br />說到底TIOBE都已經衝到第<strike>六</strike>五名的這種Python程式語言還有什麼好廣告的?<br /><br />http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html<br /><br />到現在還不知道Python的優點還只記得Python的缺點分明就是你的問題~~<br /><br />你不來用是你賠又不是我賺~~ 我一點都沒有成就感啊~~<br /><br />嗯嗯 我再小神晶下去應該有讀者要發飆了 (疑? 真的有讀者啊? 你們辛苦了...)<br /><br />再次廣告一下我部落格的右下角有著"本站文章自High居多, 請勿嚴肅看待"的標語<br /><br />這不是寫著玩的 因為我純粹是自HIGH自爽~~ <br /><br />你們萬一讀了心跳加速~~ 人家我也是不負責的唷(心)....<br /><br />===<br /><br />嗯嗯~~ 咳咳~~<br /><br />感謝各位的收看 咱們2012見... (疑!!!!??? 這個人都懶到有自覺了啊~~ )<br /><br />啊對了<br /><br />如果你真的是高中棒球社女經理 其實我們聊些別的也可以~~ (傻笑~~ 被打飛~~)<br /><br />===<br /><br />(完)使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com5tag:blogger.com,1999:blog-38122661.post-28899717210839059592010-02-02T19:43:00.004+08:002010-02-02T23:14:48.504+08:00[tips] python2與python 3的list comprehensions之差異剛好看到這篇<br /><a href="http://yz.mit.edu/wp/2010/01/14/bitten-by-python-scoping/">http://yz.mit.edu/wp/2010/01/14/bitten-by-python-scoping/</a><br />想起之前也有遇到類似的問題~<br /><br />其實主要就是python2的list comprehensions有個副作用, <br />就是會重設scope內的變數, 比如以下這個程式<br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>def t1(): <br /> x=5<br /> [0 for x in [1,2,3]]<br /> print x<br /><br />t1() <br /><br />3<br /></code></pre><br />這邊的x會被重設為3, 有點像是殘餘的loop變數的感覺~<br />有些人會玩弄這個副作用來達到一些不想讓人看懂的lambda技巧就是了:P<br /><br />但相對來說後來引進的generator語法就沒有這個問題, 所以這個問題其實也可以使用list(x for x in [1,2,3])這個方法來解決. <br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>def ts2():<br /> x=5<br /> list(x for x in [1,2,3])<br /> print x<br /><br />ts2()<br /><br />5<br /></code></pre><br />另外也可以置換變數比如改成使用a來取代x(當然a是會被assigned).<br /><br />當然還有另外一個方法則是使用python 3, 就完全沒有這個問題了 :D使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com5tag:blogger.com,1999:blog-38122661.post-1602542701979607272010-01-27T16:12:00.004+08:002010-01-27T16:57:09.032+08:00Upcoming Django 1.2 & PostgreSQL 9.0<a href="http://docs.djangoproject.com/en/dev/topics/db/multi-db/#topics-db-multi-db">http://docs.djangoproject.com/en/dev/topics/db/multi-db/#topics-db-multi-db</a><br />Django 1.2 新功能: Multiple databases<br /><br />PostgreSQL 9.0 新功能 Hot Standby跟Streaming Replication<br /><br /><a href="http://wiki.postgresql.org/wiki/Streaming_Replication">http://wiki.postgresql.org/wiki/Streaming_Replication</a><br /><br /><a href="http://developer.postgresql.org/pgdocs/postgres/hot-standby.html">http://developer.postgresql.org/pgdocs/postgres/hot-standby.html</a><br /><br />還沒空試, 不過結合這幾個新功能的話似乎可以有效的分散django資料庫端的read/write, 將write-only database server上的WAL(write-ahead log) 即時streaming到read-only database server上的hot standby database, 感覺好像不錯~~使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com1tag:blogger.com,1999:blog-38122661.post-48212159714898781182009-12-29T15:55:00.004+08:002009-12-29T17:21:21.474+08:00[tips] 續: 設定 Logitech G5 in Linux 補強版話說兩年前買了一支羅技的G5滑鼠 <br />在工作的linux環境上用到目前仍然非常滿意 <br />之所以會說很滿意 是因為G5其實有一個很好按的大姆指鍵<br />大家都知道xwindow裡只要選取了文字<br />就會自動"複製"選到的文字 <br />然後按下中鍵就可以"貼上"<br />但是目前的滑鼠都有滾輪的設計,<br />所以這個複製貼上的功能變成了按下滾輪<br />在linux裡我就用xmodmap這個程式<br />將這個大姆指鍵取代xwindow中鍵貼上的功能, <br />因為按下滾輪其實我覺得要用力按,<br />而複製貼上其實是還滿常用的功能 <br />其實感覺還挺傷手的<br />另外我也用xbindkey將滾輪向左向右的功能做來切換視窗<br />而滾輪按下變成剪貼簿裡的貼上, <br />(即Ctrl+V, 跟xwindow的複製貼上不同)<br />設定的詳情可以看我2年前的文章<br /><a href="ttp://timchen119.blogspot.com/2007/12/logitech-g5-in-linuxxwindow.html">http://timchen119.blogspot.com/2007/12/logitech-g5-in-linuxxwindow.html</a><br /><br />前幾天升級系統的時候不小心把滑鼠滾輪向左向右切換視窗的功能給砍了~ 因為兩年沒設定 連自己都得再找一下原本的設定方法<br />就在找方法的同時<br />剛好看到一個lomoco的hack可以將g5的硬體dpi按鈕關掉, <br />改用軟體控制<br />但是lomoco這個加強羅技滑鼠在linux上支援的程式本身並沒有支援G5, 於是就順手弄了一支python程式g5mouse.py, <br />可以改用軟體操縱DPI的設定,<br />這樣我們在G5上還可以多出了兩個按鍵可以自行設定!<br /><br />廢話不多說,<br />首先先easy_install g5mouse<br /><br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>localhost tim # easy_install g5mouse<br />Searching for g5mouse<br />Reading http://pypi.python.org/simple/g5mouse/<br />Reading http://code.google.com/p/g5mouse/<br />Best match: g5mouse 0.1<br />Downloading http://pypi.python.org/packages/source/g/g5mouse/g5mouse-0.1.tar.gz#md5=d3347dbf261135049cb6e5a6be133355<br />Processing g5mouse-0.1.tar.gz<br />Running g5mouse-0.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-oHyJGh/g5mouse-0.1/egg-dist-tmp-6Vn5h_<br />warning: install_lib: 'build/lib' does not exist -- no Python modules to install<br />zip_safe flag not set; analyzing archive contents...<br />Adding g5mouse 0.1 to easy-install.pth file<br />Installing g5mouse.py script to /usr/bin<br /><br />Installed /usr/lib/python2.6/site-packages/g5mouse-0.1-py2.6.egg<br />Processing dependencies for g5mouse<br />Finished processing dependencies for g5mouse<br /></code></pre><br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>localhost tim # g5mouse.py <br />Usage: g5mouse.py [options] /dev/usb/hiddev0<br /><br />g5mouse.py control logitech G3,G5,G7 and G9's hardware dpi buttons on linux<br /><br />Example: g5mouse.py -d 1600 -l 1 /dev/usb/hiddev0<br /><br />Author: timchen119.at.gmail.com<br /><br />Options:<br /> -h, --help show this help message and exit<br /> -d DPI, --dpi=DPI set dpi: 400,800,1600,2000<br /> -l LED, --led=LED set led: NONE,1,2,3,ALL<br /> -n, --nodpibuttons disable + and - DPI speed buttons<br /><br /></code></pre><br /><br />然後就可以透過g5mouse.py這隻程式軟體設定DPI, <br />(可以切換到400,800,1600,2000四種DPI 比原先的還多一種 <br />而且也可以自行設定LED燈號)<br />比如<br /><br />你要切到DPI 2000並將所有指示DPI的LED設成第一個<br />就可以下<br />g5mouse.py -d 2000 -l 1 <br /><br />預設是DPI 1600跟LED全關掉 預設device是/dev/usb/hiddev0<br />所以你也可以只下g5mouse.py -d 800 就可以將LED全關掉 並將DPI設到800<br />如果加上-n這個選項 還可以把硬體控制DPI button的功能關掉<br />這樣我們就會多出兩個button可以自行設定<br />將這個程式放在你的.xprofile (XDM)或是.xinitrc/rc.local裡<br />讓他開機自動執行<br />再來我們就多出了兩個按鈕可以操控囉~<br /><br />我就用xbindkeys將+號設定成Ctrl+C 而-號設成Ctrl+V <br />並把原先的滾輪按下的功能給取消以免誤按~<br /><br />我目前的.xbindkeysrc.scm<br /><br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>(xbindkey '("b:6") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Up]'")<br />(xbindkey '("b:7") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Down]'")<br />(xbindkey '("b:9") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[V]'")<br />(xbindkey '("b:10") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[C]'")<br />(xbindkey '("b:11") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Up]'")<br />(xbindkey '("b:12") "/usr/bin/xvkbd -xsendevent -text '\\[Control_L]\\[Page_Down]'")<br /></code></pre><br /><br />另外這隻程式不止支援G5, G3/G5二代/G7/G9 都可以操縱~使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com0tag:blogger.com,1999:blog-38122661.post-45396517319762641662009-09-29T14:17:00.001+08:002009-09-29T14:17:16.517+08:00Google 推出網頁註解新功能~~<div xmlns='http://www.w3.org/1999/xhtml'><p>但我覺得這根本就是網頁推文~~ Orz</p>參考來源: <p><blockquote>"Google 網頁註解"<br/>- <a href='http://www.google.com/sidewiki/intl/zh-TW/done.html'>Google 網頁註解</a> (<a href='http://www.google.com/sidewiki/entry/116098254871524020242/id/GdAgMDns8e_vGz9mAYQZNBiut8c'>在「Google 網頁註解」中檢視</a>)</blockquote></p></div>使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com0tag:blogger.com,1999:blog-38122661.post-36169305184792688112009-08-31T16:15:00.002+08:002009-08-31T16:19:15.028+08:00[tips] get your IP addresswget -qO- http://ipwhats.appspot.com/<br /><br />or just point your browser to <a href="http://ipwhats.appspot.com/">http://ipwhats.appspot.com/</a>使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com0tag:blogger.com,1999:blog-38122661.post-77836856323510441912009-08-17T15:03:00.004+08:002009-08-17T15:21:28.680+08:00[tips] sphinx支持中文pdf的方法目前 python 官方文件使用的sphinx是個不錯的文件產生系統,<br /><br />可以同時由rst產生html,latex,pdf,ps等文件格式,<br /><br />不過我目前試的結果似乎預設從latex產生pdf時沒有支援中文,<br /><br />網路上相關的文件大都寫得很複雜, <br /><br />但其實只要在文件project裡的source/conf.py加入<br /><br />latex_preamble = '''\usepackage{CJKutf8}\n\AtBeginDocument{\\begin{CJK}{UTF8}{bsmi}}\n\AtEndDocument{\end{CJK}}'''<br /><br />其他都不需更改,<br />以後make latex; cd build/latex; make all-pdf 就都可以產生出正確的<br />中文pdf檔了<br /><br />測試環境是Gentoo linux底下的texlive 2008 (cjk) + pdflatex使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com0tag:blogger.com,1999:blog-38122661.post-80471509577085736162009-08-13T18:57:00.006+08:002009-08-13T19:14:36.159+08:00[tips] linux裡 emacs23 utf8 中文輸入與SCIM最近新昇到emacs 23.1 <br /><br />又發現SCIM中文輸入有問題, ctrl+space老是變回mark.<br /><br />我的locale是zh_TW.UTF-8 <br /><br />其他程式輸入中文都沒啥問題<br /><br />就emacs23.1無法輸入中文, <br /><br />試了老半天 (暫時)解決方法如下:<br /><br />啟動emacs時用 LC_CTYPE="zh_CN" emacs-23<br /><br />.emacs 加上這行<br /><br />(prefer-coding-system 'utf-8)<br /><br />這樣就沒問題了<br /><br />至於為什麼要如此我也不能理解 <br /><br />如果有高人肯告訴我那就再好不過了, <br /><br />不過我暫時懶得去追了, 設個alias也就算了.<br /><br />總之locale裡似乎只有zh_CN跟zh_CN.gbk會動.<br /><br />btw,我的環境是gentoo linux.<br /><br />註: 這個問題 基本上只在terminal上使用emacs -nw的使用者應該不會遇到.使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com2tag:blogger.com,1999:blog-38122661.post-90702515184993387272009-07-29T00:28:00.004+08:002009-07-29T00:42:12.788+08:00[talk] 高雄世運結束了~~上個禮拜起一直跑來跑去, <br />從世運主場館, 高雄巨蛋, 高雄縣立體育場甚至連義守大學都去了, <br />為了就是去看現場的世運比賽, <br />雖然說世運大部份都不是熱門的運動, 但是卻意外的非常好看,<br />特別是飛盤這項運動, 現場看起來真是特別有趣,<br />從後場可以直接丟到前場, 從右路可以像香蕉球一樣轉彎到左路, <br />這是看電視完全沒辦法欣賞到的~ 這門票實在花的很值得~~<br /><br />這次唯一的遺憾就是我雖然買了開幕門票, 卻被國家抓去教育召集, <br />沒辦法看海莉現場了~~ 不過感謝至少MOD還有網路有一大堆影片可看<br /><br />順道附上我滿喜歡的海莉的歌 Wuthering Heights: <br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/pkTF5DRBxpI&hl=zh_TW&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/pkTF5DRBxpI&hl=zh_TW&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />Kate Bush的原唱<br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Hv0azq9GF_g&hl=zh_TW&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Hv0azq9GF_g&hl=zh_TW&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com0tag:blogger.com,1999:blog-38122661.post-3025456908777990132009-07-06T14:05:00.003+08:002009-07-06T14:20:51.857+08:00HTML 5 tag for firefox 3.5firefox 3.5日前已經release了 <br />最重要的一個新功能我認為是原生支援了HTML 5的Video tag,<br />也就是未來的瀏覽器不再需要flash就可以直接播放ogg Theora/Vorbis編碼的影片。<br /><br />測試的方法: <br /><br />1. 首先先用youtube-dl這隻程式隨便抓一個youtube的flv檔案下來<br />http://bitbucket.org/rg3/youtube-dl/<br /><br />2. 透過ffmpeg2theora將flv轉成ogg<br />http://www.v2v.cc/~j/ffmpeg2theora/index.html<br /><br />3. 寫一個html檔<br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code><html><br /><body><br /><br />html5 video test!<br /><br /><div><br /><video controls source src="sample2.ogg" type="video/ogg;codecs=theora,vorbis" autoplay ><br />your browser does not support the video tag<br /> <br /></video><br /></div><br /><br /></body><br /></html><br /></code></pre><br /><br />網路上也有其他人做了一些fallback to flash/java applet player的方法, 例如這個 <a href="http://www.dailymotion.com/openvideodemo">http://www.dailymotion.com/openvideodemo</a> 還有一隻 firefox的plugin firefogg <a href="http://firefogg.org/">http://firefogg.org/</a> 可以直接在firefox將影片即時編碼+mux成Theora/Vorbis ogg格式後再上傳。使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com2tag:blogger.com,1999:blog-38122661.post-25091291596774567762009-07-02T23:39:00.009+08:002009-07-03T01:02:51.574+08:00想要變成艾托畢利卡的企鵝? 誤會大了~~話說最近在迷GONZO的 咲-Saki- (台譯: 天才麻將少女)<br /><br />女主角中的原村和在高中麻將大賽中帶著一隻企鵝抱枕打麻將, <br /><br />沉醉於麻將中臉色微紅的樣子真是萌啊~~<br /><br />企鵝其實不是第一次出現在秋葉原系動畫中了, <br /><br />在動畫IdolM@ster中,<br /><br />女主角天海春香的房間就貼有最喜歡的Gentoo Penguin (ジェンツーペンギン) 的海報~~<br /><br />春香的電腦桌布跟手機也都是企鵝~~<br /><br />不過<a href="http://zh.wikipedia.org/wiki/%E5%B7%B4%E5%B8%83%E4%BA%9E%E4%BC%81%E9%B5%9D">Gentoo Penguin (巴布亞企鵝)</a> 因為名稱跟我使用的Linux Distribution同名 所以很清楚這企鵝的樣子<br /><br />但是, 從第一次看到就很好奇~~ 咲-Saki-的原村和抱著的這隻エトペン (艾托企鵝) 到底是什麼 ?<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghSL9lDExGdlW8INzSN6wygzDHQWylzA3h_pJqu4ZGcYI9irV_3rpWi_Tbdr9LpAMxEIalYmtD935NbSUrKEGhhEfOjP0j_Ce7XzWDWXmzJqpzGCDahO37CdVDJ5quDu6zXeJ-/s1600-h/penguin.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 339px; height: 192px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghSL9lDExGdlW8INzSN6wygzDHQWylzA3h_pJqu4ZGcYI9irV_3rpWi_Tbdr9LpAMxEIalYmtD935NbSUrKEGhhEfOjP0j_Ce7XzWDWXmzJqpzGCDahO37CdVDJ5quDu6zXeJ-/s400/penguin.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5353900845722902242" /></a><br /><br />在東立出版的天才麻將少女漫畫中,<br /><br />原村和睡醒時對當時正在說夢話的Saki說<br /><br />艾托企鵝是這本"想要變成艾托畢利卡的企鵝" (エトピリカになりたかったペンギン)繪本的主角<br /><br />但是, 疑問又來了 艾托畢利卡又是什麼??? 聽起來像是某個偉人或是繪本中其他角色的名字<br /><br />企鵝有什麼不好~~ 為什麼好端端的企鵝不當~~ 要去當什麼艾托畢利卡呢???<br /><br />經不起好奇心的引誘~~ 不禁google了起來~~<br /><br />"エトピリカになりたかったペンギン"<br /><br />這個時候就發現懂一點日文真不錯~ 透過google跟日文維基 查到了<br /><br />艾托畢利卡 --> エトピリカ --> 花魁鳥 (<a href="http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%88%E3%83%94%E3%83%AA%E3%82%AB">エトピリカ</a>)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/commons/thumb/0/06/TuftedPuffin.jpeg/394px-TuftedPuffin.jpeg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 394px; height: 599px;" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/06/TuftedPuffin.jpeg/394px-TuftedPuffin.jpeg" alt="" border="0" /></a><br /><br />恍然大悟!<br /><br />原來是想要變成花魁鳥的企鵝啊~~~<br /><br />什麼想要變成艾托畢利卡的企鵝? 誤會大了~~ XDXD<br /><br />註: エトピリカになりたかったペンギン繪本是漫畫虛構杜撰的~~ 現實世界中並沒有這部作品~~使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com0tag:blogger.com,1999:blog-38122661.post-90395858794188647402009-05-22T17:53:00.008+08:002009-05-22T19:54:00.052+08:00[tips] benq FP222WH + nvidia 達到原生解析度1680x1050的方法最近辦公室的電腦換了一張nvidia 9400的顯示卡,<br />可是搭配上benq FP222WH , <br />解析度怎麼調最大都只有640x480, (各種方法都試過了)<br />後來總算讓我查出是EDID的問題,<br />原本舊版的nvidia driver有一招是在xorg.conf設定<br />"IgnoreEDID" "true",<br />不過我新版的180.51 driver根本不適用這個方法,<br />後來我研究了快一天,<br />不過最後研究出來的解決方法倒是很簡單,<br />放在這提供有需要的人參考,<br />首先我先去抄ATI顯卡列出的EDID, <br />然後將它做成一個128 byte 的EDID<br />HEX file, 我已經做好了所以直接抓這個檔案擺在/etc/x11就可以<br /><br /><a href="http://kalug.linux.org.tw/~tim/benq/benq-c.bin">http://kalug.linux.org.tw/~tim/benq/benq-c.bin</a><br /><br />然後在你的xorg.conf裡加上幾行,<br />(請自行比對xorg.conf的相異處)<br /><br />Section "Monitor"<br /><br /> Identifier "Monitor0"<br /> VendorName "Monitor Vendor"<br /> ModelName "Monitor Model"<br /> HorizSync 30.0 - 86.0<br /> VertRefresh 60.0<br /><br /> # 1680x1050 @ 60.00 Hz (GTF) hsync: 65.22 kHz; pclk: 147.14 MHz<br /> Modeline "1680x1050_60.00" 147.14 1680 1784 1968 2256 1050 1051 1054 1087 -HSync +Vsync<br /><br />EndSection<br /><br />Section "Screen"<br /> Identifier "Screen0"<br /> Device "Card0"<br /> Monitor "Monitor0"<br /> <br /> Option "ConnectedMonitor" "DFP"<br /> Option "CustomEDID" "DFP-0:/etc/X11/benq-c.bin"<br /> Option "UseDisplayDevice" "DFP" # DVI out<br /><br /> SubSection "Display"<br /> Viewport 0 0<br /> EndSubSection<br />EndSection<br /><br />我的是DVI接頭, <br />另外一個同事用的是DSUB(VGA) 的,<br />他說只要DFP改成CRT也可以用, <br />我們一個是用debian一個是用gentoo, <br />在預設情形下解析度都是錯誤的, <br />但是透過這個方法就可以達到原生解析度1680x1050. :)使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com1tag:blogger.com,1999:blog-38122661.post-46375592102759282482009-05-04T06:30:00.005+08:002009-05-04T07:03:49.375+08:00[rant] igoogle gmail gadget: The Gmail gadget does not support the "Always use https"最近我經常使用的igoogle gmail gadget突然出現:<br /><br /><span style="font-style:italic;"><span style="font-weight:bold;">The Gmail gadget does not support the "Always use https" setting that you chose in full Gmail. If you would like to use https, please open full Gmail. Learn more</span></span><br /><br /><br />問題是我一直以來Always https都是用得好好的啊,怎麼突然就出問題了,<br />我點下Learn more之後出現了標準的廢話連篇又毫無用處的典型答非所問的問答集:<br /><br /><br /><span style="font-weight:bold;"> <span style="font-style:italic;">Google 說明 › Gmail 說明 › 您的帳戶 › 隱私權與安全性 › 啟用 HTTPS 設定 <br />啟用 HTTPS 設定<br />-「Gmail 通知器」使用者必須下載相關修補程式,才能使用這個設定。 瞭解更多資訊<br />- 啟用此設定可能會使 Gmail 行動版應用程式發生錯誤。 瞭解更多資訊<br /><br />透過不安全的網際網路連線 (例如公用無線網路或未加密的網路) 登入 Gmail 時,可能會讓人可輕易盜用您的 Google 帳戶。在不安全的網路中,他人很容易偽裝成您,並取得您「Google 帳戶」的完整存取權,藉以存取您帳戶中的機密資料,例如銀行帳戶資料或線上登入憑證。您使用有安全疑慮的網路時,建議您在 Gmail 中選取 [永遠使用 https] 選項。 HTTPS (亦稱「超文字安全傳輸通訊協定」) 安全通訊協定會將通訊內容加以驗證及加密。<br /><br />在 Gmail 中啟用這個功能:<br /><br /> 1. 登入 Gmail。<br /> 2. 按一下任何 Gmail 頁面頂端的 [設定]。<br /> 3. 將 [瀏覽器連線] 設定為 [永遠使用 https]。<br /> 4. 按一下 [儲存變更]。<br /> 5. 重新載入 Gmail。<br /><br />請注意,選取 [永遠使用 https] 後,您將無法透過 HTTP (超文字傳輸通訊協定) 存取 Gmail, 且 Gmail 的運作速度可能會變慢。 如果您使用的網路安全無虞,可以隨時關閉這個功能。<br /><br />如果您使用公用電腦查看電子郵件,請務必在要關閉 Gmail 時,按一下任何 Gmail 頁面頂端的 [登出],並關閉所有 Gmail 瀏覽器視窗。 </span></span><br /><br />廢話,騙小孩唷,算了 自己搜尋一下看看是甚麼情形,看了一堆抱怨串之後找到始作俑者:<br /><br /><a href="http://www.google.com/support/forum/p/Web+Search/thread?tid=41f74befcd5f3d28&hl=en&fid=41f74befcd5f3d28000468c96d31ef91">http://www.google.com/support/forum/p/Web+Search/thread?tid=41f74befcd5f3d28&hl=en&fid=41f74befcd5f3d28000468c96d31ef91</a><br /><br />Paul<br />Google Employee<br /><br />Hi everyone,<br /><br />As several of you have noticed, we made a change in iGoogle to the way that iGoogle's Gmail gadget works. If you previously set Gmail to only access your mail using https by selecting "Always use https" in Gmail's settings, you will now see a message in iGoogle's Gmail gadget asking you to open the full version of Gmail. We made this change in iGoogle for those users who want to ensure that their Gmail is transmitted using https.<br /><br />We know that many of you would like to access your mail from iGoogle with https, and we're investigating ways to provide https support for iGoogle's Gmail gadget. In the meantime, you have a couple of choices:<br /><br />- If you'd prefer to access your mail with https, please visit Gmail directly at https://mail.google.com/mail.<br />- If you'd rather get your Gmail on iGoogle with the Gmail gadget, visit Gmail's Settings page and select "Don't always use https."<br /><br />We apologize for any inconvenience this may have caused.<br /><br />只是覺得很奇怪,他不會功能做好再來給我改嗎? <br />原本的code跑得好好的<br />現在突然爛了又講一堆廢話,還要自己搜尋才找的到,Orz!<br /><br />===<br /><br />這真是一個可以拿去給RMS當反面宣傳的例子,<br />為啥我們應該要拒絕使用close source的web application... <br />就算是把"Don't be evil"掛在嘴邊的google也一樣...<br /><br />-- 因為一個用了一兩年的功能還是可以突然停掉並且都不用事先公告的。<br /><br />ref 來自gmail gadget八百五十萬使用者的抱怨串:<br /><br /><a href="http://www.google.com/support/forum/p/gmail/thread?tid=41eb24edefcd7a41&hl=en">http://www.google.com/support/forum/p/gmail/thread?tid=41eb24edefcd7a41&hl=en</a><br /><a href="http://www.google.com/support/forum/p/Web+Search/thread?tid=41f74befcd5f3d28&hl=en">http://www.google.com/support/forum/p/Web+Search/thread?tid=41f74befcd5f3d28&hl=en</a><br /><a href="http://groups.google.com.tw/group/Google-Desktop_Something-Broken/browse_thread/thread/71dd8b27ccacc0ba">http://groups.google.com.tw/group/Google-Desktop_Something-Broken/browse_thread/thread/71dd8b27ccacc0ba</a>使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com0tag:blogger.com,1999:blog-38122661.post-73143467951526214042009-05-04T05:37:00.003+08:002009-05-04T06:04:42.444+08:00[Note] 送patch所學到的事這個Note是一個寫patch的經驗,前陣子寫了一個讓curl即時壓縮加密FTP/HTTP/SFTP上傳時可以續傳的一個patch,patch本身倒是沒什麼特別的,反而是在送patch跟原作者的討論過程中學到了一些東西。patch歷時約一個月才commit進cvs,不過我覺得以open source的專案來說,這樣算挺快的。<br /><br />似乎還是得把前因後果交代一下,<br />其實一開始是我有一個想法,<br />就是希望我上傳到遠端伺服器的檔案都能加密起來(順便壓縮更好),<br />但是我覺得在local這邊先壓縮過然後再上傳的話,就會佔Local的硬碟兩份空間,所以最好的方法是realtime壓縮加密之後上傳。這樣就不會佔用local的硬碟空間,而以目前的CPU也應該都可以做到即時傳輸。<br />此外我希望就是能夠彈性的選擇壓縮及加密方式,不論是bz2,gzip,pkzip或是pgp及AES都要能夠自行選擇及combine。<br />而且最好是不需另外的伺服器程式,以目前hosting都會提供的FTP帳號就能做的方法是最好。(我需要的不是像SFTP或FTP/TLS這樣傳輸時加密或壓縮而已,我想要的是在伺服器上的最終結果也是加密及壓縮過的)<br /><br />跟lloyd討論之後,他是認為lftp+namepipe的方式可行。<br />另外我也找到了用pipe透過curl上傳的方法。<br />而這兩個方法也都驗證過確實可行,不過這兩個方法都同樣有個問題,就是沒辦法續傳,而這我認為是個應該要解決的問題。<br /><br />比較了兩個解決方案後,我選擇了擁有我比較喜歡的BSD license,用法也比較彈性的curl下手修改,<br />curl的續傳問題大概長這樣:<br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>gzip /mnt/2311/debian-500-i386-CD-1.iso -c | curl -T - -C -<br />ftp://myname:mypass@192.168.23.11/debian-500-i386-CD-1.iso.gz<br />** Resuming transfer from byte position 46792704<br />% Total % Received % Xferd Average Speed Time Time Time<br />% Current<br />Dload Upload Total Spent Left<br />Speed<br />0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:--<br />0<br />curl: (31) Could not seek stream<br /></code></pre><br />最主要是stdin不能直接SEEK_SET,這其實不是什麼大問題,不能SEEK_SET就SEQUENCIAL READ並bypass即可,看了一下原始程式便發現其實這段code早已大部完成了,只要略為更動即可,<br />於是略為修改了一下curl FTP/SFTP/HTTP上傳部份的code,驗證之後便將patch送出。<br />原以為送出patch之後就結束了,因為作者要收不收這也不是我能控制的,不過後來curl的作者回信說,功能是沒有問題,但原本的patch會影響到ABI與目前文件的相容性,問看看我是否能提供不修改ABI的作法,我原本還無法理會作者的意思,後來繼續討論才慢慢了解,作者的意思是看能否提供完整的ABI及定義回傳值供其他使用curl library部份的程式參考,因為curl不僅僅是一個客戶端程式curl,同時也包含一套廣泛的運用在其他程式甚至內建在程式語言中的library,libcurl。即使是改動小小的部份,也有可能不經意的影響到其他重要的程式。<br />了解了作者的目的之後,於是我又寫一個新的patch配合這個架構,測試一下續傳上傳沒問題之後就又再次的送出,這次作者將我的多個patch檔結合後又修改了一下包括說明文件的patch就直接commit到cvs上,不過問題來了,做make test的測試到HTTP PUT該項時沒過。<br />仔細的研究一下,還真的是第二次更動的code造成了問題。第三次的修改並驗證之後,這次就很快的patch就被接受了,目前已經commit在curl的cvs上。<br /><br />這次寫patch得到一些經驗:<br /><br />1. 寫patch時應配合原程式的架構及style,會比較容易被接受。<br />2. 寫完patch之後應照原程式的測試方式做一遍測試,而非只是測試自己的情況。<br />3. 大部份時候都要仔細考慮並聆聽來自原作者的意見,畢竟他是最清楚全部情況的人。<br />4. 不要懶的送patch,雖然可能會多費一些時間跟功夫,但送了patch通常可以學到更多。<br /><br />ref: 我和curl作者討論的過程,<a href="https://sourceforge.net/tracker/?func=detail&atid=100976&aid=2709004&group_id=976">https://sourceforge.net/tracker/?func=detail&atid=100976&aid=2709004&group_id=976</a>使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com0tag:blogger.com,1999:blog-38122661.post-79823927508937642212009-04-02T10:35:00.005+08:002009-04-02T10:44:51.003+08:00[tips] ssh login without password using ssh-copy-id script應該早點知道有這種懶人script存在的<br />而且還是裝完openssh就有的 <br />(.ssh/authorized_keys,這是啥難記的檔名 @@)<br /><br />現在只要<br /><br />ssh-copy-id -i id_dsa.pub username@host<br /><br />做完就好了 orz使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com1tag:blogger.com,1999:blog-38122661.post-15568770642027129612009-03-17T14:05:00.007+08:002009-03-17T22:24:35.732+08:00[tips] crc32 in pythonpython 2.X的crc32實作上跟一般的C實作上在整數有號無號的處理上略有不同, 所以使用python 2.X與一般C實作算出的crc32(如sfv)比對時,通常需要特別的方法,<br /><br />這邊列出一個透過zlib.crc32快速得到所需要結果的方法:<br /><br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>import zlib<br /><br />def crc32(st):<br /> crc = zlib.crc32(st)<br /> if crc > 0:<br /> return "%x" % (crc)<br /> else:<br /> return "%x" % (~crc ^ 0xffffffff)<br /><br />ex1 = "12345"<br />ex2 = "1kcaseztsa12345azy"<br /><br />print "%x" % zlib.crc32(ex1)<br />print crc32(ex1)<br />print "%x" % zlib.crc32(ex2)<br />print crc32(ex2)<br /><br /></code></pre><br />或如果你有ctypes的話:<br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>import zlib<br />import ctypes<br /><br />def crc32_c(st):<br /> return "%x" % ctypes.c_uint32(zlib.crc32(st)).value<br /><br />ex1 = "12345"<br />ex2 = "1kcaseztsa12345azy"<br /><br />print "%x" % zlib.crc32(ex1)<br />print crc32_c(ex1)<br />print "%x" % zlib.crc32(ex2)<br />print crc32_c(ex2)<br /><br /></code></pre><br /><br />註: python 3.0以上沒有這個問題.使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com4tag:blogger.com,1999:blog-38122661.post-14078275342295962952009-03-04T19:25:00.004+08:002009-03-04T19:33:20.319+08:00微軟: HideTaiwan()<a href="http://msdn.microsoft.com/en-us/library/ms441219.aspx">http://msdn.microsoft.com/en-us/library/ms441219.aspx</a><br /><br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>SPUtility.HideTaiwan Method (Microsoft.SharePoint.Utilities)<br /><br />Dim spWeb As SPWeb<br />Dim localeId As Integer<br />Dim returnValue As Boolean<br /><br />returnValue = SPUtility.HideTaiwan(spWeb, localeId)<br /><br />Parameters<br /><br />spWeb<br /><br /> An SPWeb object that specifies the Web site.<br /><br />localeId<br /><br /> A 32-bit integer that specifies a locale ID.<br /></code></pre><br /><br />Return Value<br />true if the Taiwan calendar is hidden; otherwise, false. By default, this method returns true and the Taiwan calendar cannot be displayed for the following SPLangId values: PeoplesRepublicofChina, HongKongSAR, and MacaoSAR.<br /><br />不小心逛到這個 <br /><br />微軟真強 連台灣都可以Hide() ...使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com2tag:blogger.com,1999:blog-38122661.post-26285130301834401262009-03-02T22:27:00.006+08:002009-03-02T23:11:14.656+08:00不縮排就搗蛋!louis今天跟我討論XPCOM文件上這一段應該是要很簡單的C++ snippet, <br /><br />基本上我XPCOM不熟, C++尚可, <br /><br />拿來文件上的Code大概長的像這樣:<br /><br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>NS_IMETHODIMP SampleFactory::QueryInterface(const nsIID &aIID,void **aResult)<br />{<br /> if (aResult == NULL) {<br /> return NS_ERROR_NULL_POINTER;<br /> }<br /> *aResult = NULL;<br /> if (aIID.Equals(kISupportsIID)) {<br /> *aResult = (void *) this;<br /> }<br /> else<br /> if (aIID.Equals(kIFactoryIID)) {<br /> *aResult = (void *) this;<br /> }<br /> if (aResult != NULL) {<br /> return NS_ERROR_NO_INTERFACE;<br /> }<br /> AddRef();<br /> return NS_OK;<br />}<br /><br /></code></pre><br /><br />看來看去實在是讓我皺眉頭...<br /><br />哪有aResult等於NULL也return <br /><br />不等於NULL也return <br /><br />然後return完後面還有code的道理<br /><br />反正這code看起來就是怪怪的, 但一下子卻看不出怪在哪... <br /><br />因為... <br /><br />...<br /><br /><span style="font-weight:bold;">這沒縮排又排的亂七八糟的code我是要怎麼讀啦!!!???</span><br /><br />...<br /><br />反正就是看的很難過 有股想把code拿去倒掉的衝動<br /><br />後來才發現真正的文件裡長的是這樣:<br /><br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>NS_IMETHODIMP<br />SampleFactory::QueryInterface(const nsIID &aIID,<br /> void **aResult)<br />{<br /> if (aResult == NULL) {<br /> return NS_ERROR_NULL_POINTER;<br /> }<br /> *aResult = NULL;<br /> if (aIID.Equals(kISupportsIID)) {<br /> *aResult = (void *) this;<br /> }<br /> else if (aIID.Equals(kIFactoryIID)) {<br /> *aResult = (void *) this;<br /> }<br /><br /> if (*aResult == NULL) {<br /> return NS_ERROR_NO_INTERFACE;<br /> }<br /> AddRef();<br /> return NS_OK;<br />}<br /><br /></code></pre><br /><br />我咧 這一縮排 會不會感覺差太多<br /><br />連這段code snippet不用註解 要表達什麼都能看的清清楚楚.<br /><br />雖然我不是很熟XPCOM, 也清楚看的出:<br /><br />1. 在aIID是SupportsIID或FactoryIID的情況下<br /><br />*aResult不會是NULL 而如果不是SupportsIID或FactoryIID就該回傳NS_ERROR_NO_INTERFACE;<br /><br />2. 原先的code把倒數第六行if (*aResult == NULL)誤值成if (aResult == NULL) 是錯的...<br /><br />跟之前不知在寫什麼時不同, 馬上就看出問題點在哪...<br /><br />==<br /><br />我還是常聽到有人說什麼python強制縮排怎樣怎樣的...<br /><br />我只想說, <br /><br />人要衣裝 <br /><br />佛要金裝 <br /><br /><span style="font-weight:bold;">Code要給我排整齊啦!</span>使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com2tag:blogger.com,1999:blog-38122661.post-79213640632287503122009-02-25T13:44:00.003+08:002009-02-25T14:09:48.752+08:00Upgrade to KDE 4.2上次升級4.0.5的KDE其實印象很不好,<br />不斷的crash之外 另外登入成功後也無法正確logout, <br />種種的問題又讓我退回使用3.5.x,<br />不過這次升級到KDE 4.2.0, <br />使用到目前為止其實還算順暢, <br />除了少數plasma的applet無法正確啟動外, 使用感覺還算良好.<br /><br />我的平台是gentoo linux, 大部份套件是穩定版本的,<br />所以升級還在測試中的KDE4.2 , 其實有遇到幾個小困難:<br /><br />1. 我原本的gcc版本是在gentoo裡被列為stable的gcc 4.1.2, 但在編譯kde-base/systemsettings時遇到困難, 老是有函式找不到, 最後參考網路上的作法 換至gcc 4.3.3後就一切順利. (真是詭異的作法)<br /><br />2. plasma老是啟動時crash, 還是只能參考網路上的說法, 將穩定版的 qt 4.4.2換至qt 4.5.0rc1, 就解決了這個問題.<br /><br />因為遇到這兩個套件需換至測試版本, 另外就是我也很久沒更新了, 所以emerge world居然重編了一千多個套件, 老實講distcc沒有那麼有用(據說我們公司裡有一個distcc陣列 :P 不過還是直接換硬碟到build server上會比較快啊 !), 因為configure的時間其實很長, 最後還是借了一台雙核E8400的電腦來build, 不然實在是太累人了.<br /><br />KDE 4.2的穩定度大約是4.0左右的水準吧, 用到現在仍然沒有crash, 用起來的感覺也還不錯, 就是可能現在還不是安裝的最佳時機,有些AP用起來也可能還有問題, 如果對KDE的程式有重度需求可以再等等.使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com0tag:blogger.com,1999:blog-38122661.post-9352661897612863752009-02-25T01:01:00.012+08:002009-02-25T02:18:09.646+08:00我看"草泥馬"現象<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgihYgKlpg4uD4pbouO1xQzoxBqidcicbBrc7PsE801O5HGx8XLnYqDUw-s0ux5gajgi0gM2wp8S79uSgnIfZ8NcXGgYtEX93C-ZQZyWCkFaN6g9Si8SKzjLZqPdPLTRZxBX3Ik/s1600-h/fd2584592ce5.gif"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 203px; height: 205px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgihYgKlpg4uD4pbouO1xQzoxBqidcicbBrc7PsE801O5HGx8XLnYqDUw-s0ux5gajgi0gM2wp8S79uSgnIfZ8NcXGgYtEX93C-ZQZyWCkFaN6g9Si8SKzjLZqPdPLTRZxBX3Ik/s400/fd2584592ce5.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5306413496730657106" /></a><br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/O3tPA_Z_MT0&hl=zh_TW&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/O3tPA_Z_MT0&hl=zh_TW&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /><br />最近對岸突然多出了一個新用語, <a href="http://briian.com/?p=6138">"草泥馬"</a> ,<br />原本也以為只是低俗的搞笑罷了,<br />但稍微了解一下, 事實上其實整個事件還滿悲哀的,<br />大底上就是中共在2009年初開始部署的一項淨化網路文化環境的行動"<a href="http://zh.wikipedia.org/wiki/%E6%95%B4%E6%B2%BB%E4%BA%92%E8%81%94%E7%BD%91%E4%BD%8E%E4%BF%97%E4%B9%8B%E9%A3%8E%E4%B8%93%E9%A1%B9%E8%A1%8C%E5%8A%A8">整治網際網路低俗之風專項行動</a>"所引發的一系列集體創作的事件, 這個所謂的"反低俗" ,把中國有名的網站包括谷歌(即google) 百度 新浪 搜狐 豆瓣 MSN中國 也都列在整肅名單之列. <br /><br />略通歷史的人應該要知道, 群眾很難學會包容, 事實上低俗跟藝術的差異, 在群眾的眼裡往往只在一線之隔, "草泥馬"一系列的改編, 雖說也許是一種反動, 對於廣大的群眾而言, 不正是低俗的一種表現而已嗎? 對於這樣的低俗難道該容忍嗎? 然而我們該知道, 一直以來所謂的異端思想, 也不過就是對主政者不利的想法罷了. 不少文學作品在古代不是被禁就是被焚毀, 不只因為不容於當時的風俗, 而也對掌權者不利, 又或只是殺雞儆猴, 道德在掌權者的眼中不過就是一把名正言順的大旗, 端看何時要拿有利 而要揮向的又是誰而已. "<a href="http://zh.wikipedia.org/wiki/%E5%8C%85%E6%B3%95%E5%88%A9%E5%A4%AB%E4%BA%BA">包法利夫人</a>"正是著名的一個例子, 今天隨手拿起一本皇冠出版社的經典文學譯本, 大概在那個時代都會被列為禁書吧. <br /><br />反低俗不僅是一面大旗, 握在主政者的手中, 更是一手好棋, <span style="font-weight:bold;">因為對掌權者不利的, 自然是再低俗不過了</span>... <br />一座低俗無法通過的偉大之牆已經建立了, 而低俗正在掃蕩了, 下一步呢? 或許身為當代的一份子, 在反政治文, 一切看經濟的媚俗潮流中, 也只能唱唱<a href="http://www.youtube.com/watch?v=O3tPA_Z_MT0">草泥馬之歌</a>, 萌一下<a href="http://www.youtube.com/watch?v=IvT_w4ru_fo">草泥馬的愛情</a>, 淡淡的說一句, "認真你就輸了"...使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com0tag:blogger.com,1999:blog-38122661.post-15785185879888277432009-01-19T21:25:00.007+08:002009-01-19T22:20:12.883+08:00超偶2總冠軍賽心得雖然自己愛聽女聲, 不過我其實是滿少看台灣歌唱比賽的節目,<br />平常聽的如果不是西洋金曲類的大概就是公信榜武道館還是些OP/ED之類的歌, <br />不過星期日凌晨聽符瓊音在超級偶像2總冠軍戰<a href="http://tw.youtube.com/watch?v=eY2UJjbfvgw">第三輪唱的Listen</a>還是特別的受到感動,<br /><br />"某"評審說符瓊音這首的缺點是還在<a href="http://en.wikipedia.org/wiki/Beyonc%C3%A9_Knowles">Beyoncé</a>的陰影下,<br /><a href="http://tw.youtube.com/watch?v=X-AIKCZoIWg">"仍"沒辦法超越Beyoncé</a>,<br />我實在是覺得有點吹毛求疵, <br />撇開大家都知道的感冒及破音不談, <br />我覺得Beyoncé這首歌的靈魂其實還是被展現了,<br />我想符瓊音肯定是看過電影<a href="http://en.wikipedia.org/wiki/Dreamgirls_(film)">Dreamgirls</a>的, <br />她自己大概也知道自己所伴演的角色是Effie White這個唱功一流卻因外型所困的歌手而非Beyoncé所演的那個美麗的Deena Jones,<br />像Beyoncé這樣子外貌與音藝兩者俱全應該是她一生都想企求的目標. 或許她正是害怕從<a href="http://en.wikipedia.org/wiki/Jennifer_Hudson">Jennifer_Hudson</a>所演的Effie White看到自己的影子 <br />才唱了Beyoncé這首可以代表自己心聲的曲子. 不論如何我覺得這首歌仍然是整個總冠軍賽最好聽的一首, 沒有因為這首而大翻盤實在也是太殘念了...<br /><br />這次因為感冒(跟魔咒?)只得到第二名只能說是相當可惜<br />因為雖然其他人唱的也不錯 <br />不過老實講只有符瓊音的歌才真的讓我的耳朵有滿足感.<br />超偶2第一名是誰其實也不重要了 因為也已經都過去了, <br />符瓊音麻煩你趕快找個好製作人出張好專輯吧...使徒提姆 !?http://www.blogger.com/profile/07429567259240612236noreply@blogger.com0