2013年7月6日 星期六

python 的 gc ( garbage collection) 演算法介紹

    最近無聊看了一下 python 的 garbage collect 的實作。還蠻簡單易懂的。 python 回收沒用的物件,主要是靠參考計數 (reference count)。然而,他無法解決自己參考自己或是參考循環(a 參考 b, b 參考 a)的問題。這篇文章是講 python 如何解決這個問題。

2013年6月15日 星期六

在 python 中呼叫 java,JPype 簡介

    之前我以為如果要在 python 中呼叫 java lib ,只能用 jython。然而查了一些資料,發現有些神人已經幫我們做好在 CPython 中呼叫 java lib 的方法,JPype 可以幫我們完成這個神奇的需求。


2013年6月9日 星期日

以 html5 撰寫 單機(離線)程式,以 pyside 與 qwebkit 為例。

    現在 html5 蔚為潮流,而 html5 也將觸手伸向單機程式。新的 html5 技術可以使用 ApplicationCache 來達成。而 XULRunner 又是令一個技術,讓你可以用寫網頁的方式來寫單機程式。用 pyside 加上 qwebkit 也可以達到類似的應用。事實上,pyside 加上 qwebkit 的作法不過是作個客製化瀏覽器而已。

2013年6月2日 星期日

如何在 C 語言中模擬繼承與多型

    在 C 語言中,並沒有繼承與多形。然而,我們可以利用一些方法來模擬繼承與多型。在開始講之前,我們先來看看電腦如何取得變數的值。

2013年5月8日 星期三

python 中 is 和 ==(等於) 的差別

    在很多程式語言中,相等的意義有兩種意涵,一種是指那兩個變數實際上是指向同一個物件,另外一種意涵是雖然他們不是相同物件,但是他們的值一樣(什麼叫做值一樣,可以自己寫函數定義)。在 java 中,我們用 == 還比較這兩個變數是否指向相同物件,而使用 object.equal(other) 還比較兩個變數物件的值是否一樣。 在 python 中,則是使用 is 這個關鍵字來判斷這兩個變數是否指向相同物件,而使用 == 來判斷兩個變數物件的值是否一樣(值是否一樣由 __eq__ 這個函數定義)

2013年5月4日 星期六

pdb 的運作原理

    要了解 python debuger 的運作方式前,需要先了解 python 如何實作 function call。在 C語言中,每個被呼叫函數都有自己的 call stack拿來存放區域變數之類的東西。而在 python 中, call stack作用是由 frame object 物件完成。下面是官網對 frame object 的屬性介紹

generator 和 list 簡單比較

這篇文章我第一次發表在 ptt.cc。之後在把它複製過來。下次應該先寫在網誌,在貼 ptt.cc 的 XD

python 的 list comprehension 有分兩種,

一種是[i for i in xrange(5)],這種形式產生出來的是 list

另外一種形式是 (i for i in xrange(5)),這種形式產生出來的是 generator

python yield 語法與 generator 物件介紹

    這篇介紹 yield 語法以及用來維護 yield 行為的 generator 物件。
    事實上,yield 和 return 很像,只是當函數呼叫 return 時,該函數 call stack (python 中是 frame) 就會被清除,程式主導權回到呼叫該函數的手上。 而 yield 會把程式主導權交給呼叫該函數的手上,但是他不會把函數的 call stack 清除,因此下次呼叫時,可以從上次未執行的部分開始執行,而不是重新建立一個新 stack。

2013年4月21日 星期日

如何取得 facebook 的 access_token。

    要取得 facebook 的 access_token 目前我知道的有兩個方法,一種是利用你的 api id 和 secreet key 。透過 'https://graph.facebook.com/oauth/access_token?client_id=%s&client_secret=%s&grant_type=client_credentials' % (FACEBOOK_APP_ID, FACEBOOK_APP_SECRET) 這個 api 來取得。這個方法適用於 server 端,因為它會暴露 secreet key。

安裝 jdownloader 在 Raspberry Pi wheezy 系統上

    jdownloader 真是一個佛心的軟體,提供完整的功能以及擁有跨平台的能力。不過因為它是用 java 寫的,自然速度會比不上 native program 。

    我是使用下面的方法來安裝 jdownloader。
  1. wget must be installed on system!
  2. Download jd.sh
  3. chmod +x jd.sh
  4. start jd.sh
Note: Open jd.sh to read Manual or change Settings!