星期二, 10月 01, 2013

[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.

 #sudo apt-get install nvidia-319-updates nvidia-prime xserver-xorg-lts-raring 

The command will upgrade
 * kernel to 3.8 ,
 * X server RandR to 1.4
 * Install Nvidia driver version 319.

After reboot, it will use nvidia driver by default.
There is no need to upgrade to 13.10 if you prefer 12.04 LTS.

星期四, 1月 17, 2013

[tips] g_clear_pointer


因為在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;
}
現在只要一行就可以達成了
g_clear_pointer (&priv->object_path, g_free);
當然要backport的話作法就是相反~~

星期五, 2月 17, 2012

[tips] access gnome-keyring in cron

It 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:


. ~/.dbus/session-bus/*-0
export DBUS_SESSION_BUS_ADDRESS


in your cron script (it assume you logged in under X display 0)

星期三, 6月 01, 2011

[link] Nvidia Optimus on linux 的解決方案 : bumblebee 大黃蜂

https://github.com/MrMEEE/bumblebee

四月份的時候買了一台DELL i5二代的筆電,
用起來還算滿意,
但是就是在linux下居然無法使用Nvidia的顯示卡這點讓我不是很滿意。

當初在買筆電的時候,為了相容Linux還特地挑了一個Nvidia的獨顯,
想說一直以來Nvidia的顯示卡在Linux下都支援良好,
所以也沒特別注意相關的消息,
這次買了才發現,,
只要是使用了Nvidia動態切換內顯和獨顯的Optimus技術的筆電,
在Linux下通通沒辦法驅動Nvidia獨顯,
而只能用Intel的內建顯示,
並且Nvidia的顯卡雖然無法運作,
但還是會在背景吃掉相當多的電力,
一個原本是設計來省電的技術反而耗了更多的電,
實在是非常的諷刺。

原本想說應該BIOS就可以直接切換成Nvidia獨顯,
結果研究了一下才知道Nvidia的輸出會經過Intel顯卡,
所以如果沒有內建硬體的Multiplexer,
想關掉Intel顯卡直接使用Nvidia顯卡是不可能的,
當時只好在網路上找了一個acpi的方法把Nvidia的顯卡先關掉,
但是反過來如果只是要把Nvidia的顯示卡打開卻似乎是辦不到,
實在是萬分苦惱。

然後剛剛發現了這個bumblebee(大黃蜂)專案,
提供了ㄧ個簡單的script就讓Linux支援了Nvidia顯示卡且使用官方的3D驅動,
雖然還沒辦法動態切換, 但是可以手動切換也算是不錯了。

安裝的方法真的是很簡單:
先git clone https://github.com/MrMEEE/bumblebee.git
然後執行其中的install.sh 回答幾個只要選default就可以的問題 之後就安裝完成囉!

平常的時候,預設還是會用Intel的顯卡來執行,
要用Nvidia執行的時候, 則要透過optirun來執行該程式~~

#glxgears

304 frames in 5.0 seconds = 60.604 FPS
301 frames in 5.0 seconds = 60.137 FPS
301 frames in 5.0 seconds = 60.136 FPS
301 frames in 5.0 seconds = 60.137 FPS
301 frames in 5.0 seconds = 60.137 FPS

#optirun glxgears
* Starting Bumblebee X server bumblebee Enabling nVidia Card failed (Error: AE_BAD_PARAMETER).
[ OK ]
3015 frames in 5.0 seconds = 602.973 FPS
3312 frames in 5.0 seconds = 662.366 FPS
2908 frames in 5.0 seconds = 581.591 FPS
2798 frames in 5.0 seconds = 559.551 FPS
3409 frames in 5.0 seconds = 681.679 FPS

雖然是有些錯誤訊息不過還是有成功的跑起來了,
另外再跑了lgfxgears也是由2fps到100fps,果然是快了不少.

星期日, 1月 09, 2011

如果高中棒球社女經理讀過使徒提姆的部落格~~

她就會馬上開始學Python......也許吧? :P

據說"如果高中棒球社女經理讀過杜拉克的管理學"是前陣子日本暢銷書排行榜排名第一名,

既然管理學可以,Python應該也可以吧, "import 管理學"什麼的我們Python應該也有吧?

嗯嗯 是不是乾脆把我的部落格名稱也改一改~~ 之後就可能會突然爆紅也不一定? XD

==

老實說像我這麼發懶的部落格作者,

是根本不奢望會有讀者的,

說來說去這部落格不過就是個一時自娛娛人的消遣跟筆記罷了,

但是即使如此,

突然發現部落格去年居然只更新兩格,

也是有種感受到被歲月的巨輪無情的從身上碾過的感覺~~

"啊啊啊~~ 老的無話可說了嗎?"

"好歹出來寫篇Python真是太讚了 然後出來喊個兩聲表示還活著也好吧?"

"連廢文都沒有了嗎?"

==

不然就把這一篇改成2011年我們來學Python好了~~

反正從一起頭這篇就註定是個廢文不如就這樣廢下去好了~~

所以從現在開始就把這格的主題定調為 "2011大家學python" 好了~~

(咦 高中棒球社女經理到哪去了? 真是隨便啊! 還有學PYTHON根本就不廢啊!!! ~~ )

啊啊不管了~~ 事實上啊~~ 嚴肅的看待"學python"這件事本身就是很奇怪的一件事~~

好像非得拿本書認真的讀完Python語法才叫在學~~

這樣一點都不對啊~~ Python不是這樣學的~~ 學Python應該是要很愉快的啊!

這就好像教完所有文法再開始叫你講英語一樣來學英語~~

因為一點用也沒有所以一點也不愉快~~

你如果要當Python特許教師也許可以這麼學~~ (不過... 有這種職業嗎?...)

但是正常人不應該是這樣學的~~

很好~~ 既然你都看我的廢話看到這邊了~~

(真是驚人的毅力啊~~ 你完全有成功人士的資質啊!!!)

看來你就是"2011大家學python"這格廢文的目標讀者群~~

我就特別對待你~~


教你史上最快學習Python的方法~~


絕對保證你聽也沒聽過~~

~~ ~~ ~~

因為我也是隨便講講的!!!

(什麼,,,不想學了? 我偏偏就想教啦, 就跟你說我這格是老人湊字數的你到現在還聽不懂喔?
你就完成一個孤單寂寞老人的心願這樣也不行喔? 你你你~~~
)

對~~~ 就是你 ~~~

不管了~~~ 聽我說第一步~~

聽清楚了喔~~

就是先把你手上的什麼XXX Python 然後封面還有動物樣子的書先放下...

(疑這個捏他太深奧了嗎? 啊啊啊 等一下會不會接到書商打電話來抗議啊? 反正他們應該早就賣不好了應該沒什麼差吧 點點點)

別人怎麼教你的我不管~~ 既然你上了我們Python神教的好船~~

我們就不會眼睜睜的看你沉入書海~~

這年頭也不知道吹什麼風 Programmer家裡的書櫃都快變成動物圖鑒了~~

我們是來學寫程式的不是來當圖書館還是動物園管理員的~~

好了我廢話真多 (真是極度自覺啊!)

再來再來

開始第二個心法~~

那就是~~



疑? ㄟㄟㄟ???

怎麼可以呢 從小到大我們的尊敬的老師父母兄弟姐妹親朋好友阿公阿媽還有隔壁班的阿花都跟我們說這樣是不行的啊~~~

俗話說的好~~ 天下文章一大抄~~

程式碼~~ 更是要抄~~

熟讀唐詩三百首~~ 不會作詩也會吟~~

抄太難聽的話 就改成謄~~

就是像打開習字帖, 然後像永字八法般的練法~~

打開你的編輯器 找個有興趣的程式 把別人的程式碼抓過來 開始改~~

看不懂的就查 查不到的就想 想不出的就問 問不到的就再認真看認真查認真問~~

反正你已經閒到在看我的文章 肯定是很閒的 不如就認真點抄...

光明正大的抄 快樂的寫寫寫~~

就把他當作是老師全班只准你一個人openbook的去考試吧! (這真是太爽了 乖小孩不要學)

~~

再來再來就是要登堂入室了~~

這就不能只是抄了~~

基本上你抄久了 大概也已經到了不用參考別人的程式 就可以自己動手從無到有開始寫的境界了~~

這個時候就可以開始看書看文章,寫自己喜歡的程式~~

之後再學些別的東西讀點不相關的東西跟學些其他自己感興趣的程式語言都有所幫助~~

總之就是個落花流水皆文章的階段~~

等到了這個階段開始也就可以開個部落格寫些廢文騙個字數了 (疑??? 幹嘛又自婊???)

===

"""
廢話真的是很多 而且為什麼總共只寫了三步啊!!! 而且第三步分明就是在騙字數啊~~

什麼因為寫太多廢話連自己都覺得煩了??? 這什麼理由到底負不負責任啊~~

責任編輯到底是誰啊~~ 這麼廢的文章也敢PO出來喔~~
"""

以上是來自某讀者內心的OS,

可是本格宗旨就是插科打渾的未必就是胡言亂語,

語重心長的也未必就是真知灼見,

總而言之就是力求一種精神錯亂的頹廢美學~~

反正網路流行騎牆派 哪裡鄉民多 哪裡就有真理

我們廢話黨是不在乎的~~ (那來的廢話黨你不是Python教的嗎?)

總之一個人神智錯亂的時候 廢話都很多 尼采不也整天嚷嚷的說什麼超人來了嗎?

好歹我也沒寫什麼什麼什麼如是說的寫了一大本~~ 頂多只是幻想著高中棒球社女經理會讀一下我的部落格而已~~

啊 經理 對不起我是個阿宅~~ 我還有二次元complex 沒藥醫的!

====

總而言之 2011年我終於有了我的第一格! (真是個明智的收尾)

而且除了Python很讚這種廢話我還真的吐不出什麼象牙~~

說到底TIOBE都已經衝到第五名的這種Python程式語言還有什麼好廣告的?

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

到現在還不知道Python的優點還只記得Python的缺點分明就是你的問題~~

你不來用是你賠又不是我賺~~ 我一點都沒有成就感啊~~

嗯嗯 我再小神晶下去應該有讀者要發飆了 (疑? 真的有讀者啊? 你們辛苦了...)

再次廣告一下我部落格的右下角有著"本站文章自High居多, 請勿嚴肅看待"的標語

這不是寫著玩的 因為我純粹是自HIGH自爽~~

你們萬一讀了心跳加速~~ 人家我也是不負責的唷(心)....

===

嗯嗯~~ 咳咳~~

感謝各位的收看 咱們2012見... (疑!!!!??? 這個人都懶到有自覺了啊~~ )

啊對了

如果你真的是高中棒球社女經理 其實我們聊些別的也可以~~ (傻笑~~ 被打飛~~)

===

(完)

星期二, 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/