今天 Palm 宣佈了新的產品 Foleo,目前看起來像是輕量級、十吋的筆記型電腦,可以跟 Tero 作些同步的動作。不過我好奇的是另外一個東西,在 Palm 的展示影片當中,竟然出現了 Terminal 這個東西。不知道裡面的系統到底是什麼呢…是 Unix-like 抑或 Palm 自行開發的新系統,或者是 Linux 呢?
[update]
剛剛看了 CNET Taiwan, 裡面的作業系統是 Linux。
2007/05/31
2007/05/27
Python 初體驗 (2) - BATON 演算法撰寫
之前的文章提到了用 Python 與 Gnuplot 解決作業之後,我就大量的使用 Python 來解決各項課業上的問題。
最近正在實作 BATON 的演算法,當仁不讓的還是使用 Python 來解決這個問題。以下是我要實作演算法的虛擬碼:
而下面的則是 Python 實作的程式碼:
是不是與虛擬碼非常相似呢?撰寫完演算法後,還有一個工作就是要視覺化的表達樹的結構。正巧這幾個禮拜在紅塵一隅間拾得的文章裡面提到了 graphviz 這個非常好用的工具,可以用來產生各種有向、無向圖形。所以就利用這個工具來產生圖形,而 Python 呼叫外部程式當然也是很簡單:
執行完程式後 Eye of GNOME 就開啟了這張繪製好的 SVG 圖檔。
Python 是個好東西阿!
最近正在實作 BATON 的演算法,當仁不讓的還是使用 Python 來解決這個問題。以下是我要實作演算法的虛擬碼:
Algorithm: join(node n)
If (Full(LeftRoutingTable(n)) and
Full(RightRoutingTable(n)) and
((LeftChild(n)==null) or (RightChild(n)==null))
Accept new node as child of n
Else
If ((Not Full(LeftRoutingTable(n))) or
(Not Full(RightRoutingTable(n))))
Forward the JOIN request to parent(n)
Else
m=SomeNodesNotHavingEnoughChildrenIn
(LeftRoutingTable(n), RightRoutingTable(n))
If (there exists such an m)
Forward the JOIN request to m
Else
Forward the JOIN request to one of its
adjacent nodes
End If
End If
End If
def join(child, n):
if Full(n['LeftRoutingTable']) and \
Full(n['RightRoutingTable']) and \
((n['LeftChild'] == None) or (n['RightChild'] == None)):
print ' ' + str(n['Name']) + ' -- ' + str(child['Name']) + ';'
accept(child, n)
else:
if not Full(n['LeftRoutingTable']) or not Full(n['RightRoutingTable']):
join(child, n['Parent'])
else:
m = NodesNotEnoughChildren(n['LeftRoutingTable'], n['RightRoutingTable'])
if(m != None):
join(child, m)
else:
# Forward the JOIN request to one ofits adjacent nodes
if n['LeftAdjacent'] != None:
join(child, n['LeftAdjacent'])
else:
join(child, n['RightAdjacent'])
是不是與虛擬碼非常相似呢?撰寫完演算法後,還有一個工作就是要視覺化的表達樹的結構。正巧這幾個禮拜在紅塵一隅間拾得的文章裡面提到了 graphviz 這個非常好用的工具,可以用來產生各種有向、無向圖形。所以就利用這個工具來產生圖形,而 Python 呼叫外部程式當然也是很簡單:
def node(name):
return {
'Parent' : None,
'LeftChild' : None,
'RightChild' : None,
'LeftRoutingTable' : list(),
'RightRoutingTable' : list(),
'LeftAdjacent' : None,
'RightAdjacent' : None,
'Name' : name,
'Level' : 0
}
def travel(node, tstr):
if node['LeftChild'] != None:
tstr += ' ' + str(node['Name']) + ' -- ' + str(node['LeftChild']['Name']) + ';\n'
tstr = travel(node['LeftChild'], tstr)
if node['RightChild'] != None:
tstr += ' ' + str(node['Name']) + ' -- ' + str(node['RightChild']['Name']) + ';\n'
tstr = travel(node['RightChild'], tstr)
return tstr
root = node('root')
child = node('child')
join(child, root)
for i in range(0, int(sys.argv[1])):
c = node(i)
join(c, root)
print 'Finish\n'
tstr = travel(root, '')
temp = Template('graph G{\n$info\n}\n')
s = temp.substitute(info=tstr)
file = open('temp.dot', 'w')
file.write(s)
file.close()
os.system('dot -Tsvg -o temp.svg temp.dot')
os.system('eog temp.svg')
Python 是個好東西阿!
2007/05/18
2007/05/16
Taiwan Open Source 活動行事曆
我在 Google Calendar 上開了一個行事曆:『Taiwan Open Source Resource』,用來蒐集臺灣近期 Open Source 的聚會、演講、研討會等活動。目前放置於 Yuren's Info Area 的右邊側欄。按以下的按鈕加入您的 Google Calendar。
標籤:
linux
,
open source
,
tosres
2007/05/14
Linux 的筆記型電腦電力都耗費到哪去了?
PowerTop - Linux 底下的電力檢測程式。如果您使用 Intel CPU 的筆記型電腦,可以用 PowerTop 這隻程式來檢測目前應用程式所耗費的電量。
以下是官方網站提供的畫面:
其實我自己也裝了,不過 PowerTop 執行時,他跟我說有些 kernel 的選項如 CONFIG_TIMER_STATS 要打開。已經從人類退化到猴子的我就沒有再去調那些選項。
就算不能用,這東西聽起來還是挺讚的,可以利用這程式來檢視到底哪些程式在消耗電力。在 Tips & Tricks 裡面也提到目前他們檢測出來特別消耗電力的程式,像是 gnome-power-manager, Firefox, Gaim (Pidgin), ibm_acpi, Evolution, ipw2100 等。這也太糟糕了吧,上面這些程式我都有跑!不過 Intel 也很好心的提供了各種 Patch 檔來改善電力耗費,希望 Ubuntu 下的應用程式可以趕快收錄這些 Patch 囉。
延伸閱讀:Kanru’s 探險日誌 - Intel 新玩具 — PowerTop!
以下是官方網站提供的畫面:
其實我自己也裝了,不過 PowerTop 執行時,他跟我說有些 kernel 的選項如 CONFIG_TIMER_STATS 要打開。已經從人類退化到猴子的我就沒有再去調那些選項。
就算不能用,這東西聽起來還是挺讚的,可以利用這程式來檢視到底哪些程式在消耗電力。在 Tips & Tricks 裡面也提到目前他們檢測出來特別消耗電力的程式,像是 gnome-power-manager, Firefox, Gaim (Pidgin), ibm_acpi, Evolution, ipw2100 等。這也太糟糕了吧,上面這些程式我都有跑!不過 Intel 也很好心的提供了各種 Patch 檔來改善電力耗費,希望 Ubuntu 下的應用程式可以趕快收錄這些 Patch 囉。
延伸閱讀:Kanru’s 探險日誌 - Intel 新玩具 — PowerTop!
2007/05/11
Ubuntu Studio 7.04 釋出兼爆炸
剛剛看到了 digg 的新聞,Ubuntu Studio 7.04 釋出了!趕緊到官方網站上看,沒想到現在是爆炸的狀況,大概是被 digg 到爆了吧。
Ubuntu Studio 是一個針對多媒體編輯使用者所制定的 Ubuntu 版本,在這個爆炸的時刻,您可以先去 Ubuntu wiki: UbuntuStudio,或者是先閱讀一下 Metamuse 的介紹。
延伸閱讀:Installing Ubuntu Studio 7.04 - Linux For The Creative
標籤:
linux
,
ubuntu
,
ubuntu studio
如何上 IRC 聊天室
之前的文章介紹了台灣開放源碼的 IRC 頻道,而我自己第一次使用 IRC 軟體的時候其實也有很多不懂的地方,其實很簡單,只需要一篇簡單的教學就可以快速入門了 :)
我們以 Ubuntu 內建的 XChat 來說明。
Windows 的使用者請先到 XChat 的官方網站下載 XChat
接著安裝步驟就很簡單了,一直按下一步就行了。接下來打開 XChat,Ubuntu 使用者可以在應用程式→網際網路→網路清談(或者 XChat)找到。第一次打開畫面如下:
目前我知道的 IRC 頻道絕大多數都在 Freenode,新手可以先選取 Freenode 伺服器,按下 Connect 後會出現以下畫面:
請選擇第二個選項『Join this channel』,並且輸入您想加入的頻道,這個例子裡面我們先加入了 Tossug, Kalug 這兩個頻道,所以鍵入『#tossug,#kalug』,這樣就可以加入聊天室了:
開始聊天吧 :D
不過在這邊要提醒大家一點,其實大家都很忙,所以很多人都只是掛在上面,手邊可能正在處理別的事情,如果剛進去的時候沒人搭理你別感到奇怪,掛段時間就會有人講話囉。
我們以 Ubuntu 內建的 XChat 來說明。
Windows 的使用者請先到 XChat 的官方網站下載 XChat
接著安裝步驟就很簡單了,一直按下一步就行了。接下來打開 XChat,Ubuntu 使用者可以在應用程式→網際網路→網路清談(或者 XChat)找到。第一次打開畫面如下:
目前我知道的 IRC 頻道絕大多數都在 Freenode,新手可以先選取 Freenode 伺服器,按下 Connect 後會出現以下畫面:
請選擇第二個選項『Join this channel』,並且輸入您想加入的頻道,這個例子裡面我們先加入了 Tossug, Kalug 這兩個頻道,所以鍵入『#tossug,#kalug』,這樣就可以加入聊天室了:
開始聊天吧 :D
不過在這邊要提醒大家一點,其實大家都很忙,所以很多人都只是掛在上面,手邊可能正在處理別的事情,如果剛進去的時候沒人搭理你別感到奇怪,掛段時間就會有人講話囉。
標籤:
irc
2007/05/10
[筆記] irssi 關閉跟特定使用者的對話
頻道可以用 /part 離開,不過用 /msg 跟特定使用者對話我一直都不知道怎麼關…。今天 Google 了一下才發現是 /wc (Window Close 的意思),筆記筆記…。
IRC 頻道
台灣有許多開放源碼的社團,有些是有實體聚會的,而有些是僅在網路上交流的社團,本篇文章蒐集了這些相關的開放源碼 IRC 頻道,讓各位朋友們能夠上去跟我們一起聊聊天。
IRC 簡單的來說是一種聊天室,您可以在 PCMan 的網站上找到教學,或者是看下一篇的《如何上 IRC 聊天室》
IRC 簡單的來說是一種聊天室,您可以在 PCMan 的網站上找到教學,或者是看下一篇的《如何上 IRC 聊天室》
- Tossug
- 台北開放原始碼軟體使用者社群,Taipei Open Source Software User Group,又稱土虱
- 伺服器:irc.freenode.net
- 頻道:#tossug
- KaLUG
- 大高雄 Linux 使用者協會,Kaohsiung Linux User Group
- 伺服器:irc.freenode.net
- 頻道:#kalug
- Debian Taiwan
- 伺服器:irc.debian.org
- 頻道:#dot
- Ubuntu Taiwan
- Ubuntu 正體中文站
- 伺服器:irc.freenode.net
- 頻道:#ubuntu-tw
- Gentoo Taiwan
- Gentoo Linux Taiwan
- 伺服器:irc.freenode.net
- 頻道:#gentoo-tw
- PyTUG
- Python 台灣使用者群組,Python Taiwan User Group
- 伺服器:irc.freenode.net
- 頻道:#python.tw
- OrzLab
- Open RazzmatazZ Laboratory
- 伺服器:irc.freenode.net
- 頻道:#orzlab
標籤:
irc
OSDC.TW 2007 簡報錄影
剛閱讀了 Zonble 的《上個月在 OSDC.tw 2007 講 Vanilla Journal 的錄影》連上 Google Video,發現上面已經有蠻多 OSDC.TW 2007 的簡報錄影,有很多場次沒有辦法一次跑到的,終於有機會補完了 :-)
Google Video - OSDC.TW 2007
Google Video - OSDC.TW 2007
標籤:
google video
,
osdc
,
osdc.tw
,
Vanilla Journal
,
zonble
2007/05/09
Google Analytics 升級
Google Analytics 升級了!詳細的內容可以看 Google Analytics Blog,看起來又多用了許多 Ajax 的技術讓 Google Analytics 更方便使用。今天進去 Google Analytics 的時候,就看到目前正在升級的消息。
趕快升級我的帳號吧…。
趕快升級我的帳號吧…。
標籤:
google
,
google analytics
2007/05/05
Pidgin (gaim) 2.0 終於釋出了
等了好久好久,終於釋出了。今天剛去 Pidgin 網站的時候嚇了一跳,整個版面、內容跟之前完全不一樣,看來 2.0 釋出是個很重大的改變阿。
不過網站上還看不到 Pidgin 2.0 的新功能介紹,不過一直持續用著 gaim 2.0 beta 系列的我,大概就只覺得名字換了、介面變漂亮了這兩點吧。真希望 MSN 傳檔能夠快一點…。
不過網站上還看不到 Pidgin 2.0 的新功能介紹,不過一直持續用著 gaim 2.0 beta 系列的我,大概就只覺得名字換了、介面變漂亮了這兩點吧。真希望 MSN 傳檔能夠快一點…。
標籤:
gaim
,
linux
,
open source
,
pidgin
2007/05/03
Python 初體驗 - 好吃不黏牙!
這幾天上課的老師出了幾個需要畫圖的習題,大致上是要用常態分佈取樣幾個點,X 軸跟 Y 軸給不同的 mean 跟 standard deviation 繪製圖形。另外一個作業是繪出高斯分佈取樣的點的 probability density function。 剛開始還考慮用 perl 來解題,後來想說順便學一下 python,就試著用它來寫寫看。
跟 TimChen 要了些初學者用的網站,就開始看著 咬一口 python 程式語言這本線上書籍學 Python。看完幾頁之後,就發現 python 比想像中的好上手,程式碼也很簡潔。接下來就開始思考要如何解題。
第一個,我需要有高斯分佈的取樣點,馬上查了 "python gaussian distribution",有內建函式!很好很好,馬上就先解決取樣的問題。取樣完後需要 gnuplot 來畫圖。剛開始我打算先輸入到檔案裡面,再用 os module 來呼叫 gnuplot。在這個時候我又查了 "python gnuplot",沒想到又有!原來 python 有提供 gnuplot 的橋接,只要安裝 python-gnuplot 就可以使用了。所以這個問題就解決了,大約花了 30 行左右:
Cool, 很好用。第二題要畫高斯分佈的 PDF,算這東西真的還蠻花時間的,後天就要交作業還是抱一下佛腳好了…。搜尋一下發現這東西,可以直接算出 PDF,當然又是直接拿來用…。
作業完成!
結論,Python 真的是好物阿!如果有寫其他程式語言的經驗,Python 是相當好學的東西!
跟 TimChen 要了些初學者用的網站,就開始看著 咬一口 python 程式語言這本線上書籍學 Python。看完幾頁之後,就發現 python 比想像中的好上手,程式碼也很簡潔。接下來就開始思考要如何解題。
第一個,我需要有高斯分佈的取樣點,馬上查了 "python gaussian distribution",有內建函式!很好很好,馬上就先解決取樣的問題。取樣完後需要 gnuplot 來畫圖。剛開始我打算先輸入到檔案裡面,再用 os module 來呼叫 gnuplot。在這個時候我又查了 "python gnuplot",沒想到又有!原來 python 有提供 gnuplot 的橋接,只要安裝 python-gnuplot 就可以使用了。所以這個問題就解決了,大約花了 30 行左右:
#!/usr/bin/env python
import random, os, Gnuplot
mean = 3
strdev = 10
ns = [10, 100, 1000, 10000]
g = Gnuplot.Gnuplot()
g('set multiplot')
g('set size 0.5,0.5')
for i in range(0, 4):
gauss = list()
for j in range(0, ns[i]):
gauss.append(list())
gauss[j].append(random.gauss(mean, strdev))
gauss[j].append(random.gauss(mean, strdev))
if i == 0:
g('set origin 0,0.5')
elif i == 1:
g('set origin 0.5,0.5')
elif i == 2:
g('set origin 0,0')
else:
g('set origin 0.5,0')
g.plot(gauss)
g('unset multiplot')
raw_input('Please press return to continue...\n')
Cool, 很好用。第二題要畫高斯分佈的 PDF,算這東西真的還蠻花時間的,後天就要交作業還是抱一下佛腳好了…。搜尋一下發現這東西,可以直接算出 PDF,當然又是直接拿來用…。
#!/usr/bin/env python
import statistics, random, Gnuplot
gauss = list()
gauss2 = list()
gpdf = list()
gpdf2 = list()
g = Gnuplot.Gnuplot()
for i in range(0, 1000):
gauss.append(random.gauss(-2, 1))
gauss2.append(random.gauss(2, 2))
#gauss.append(random.gauss(2, 1))
#gauss2.append(random.gauss(-2, 1))
y, x = statistics.pdf(gauss, kernel = 'Gaussian')
w, z = statistics.pdf(gauss2, kernel = 'Gaussian')
for i in range(0, len(x)):
gpdf.append(list())
gpdf[i].append(x[i])
gpdf[i].append(y[i])
for i in range(0, len(w)):
gpdf2.append(list())
gpdf2[i].append(z[i])
gpdf2[i].append(w[i])
g.plot(gpdf, gpdf2)
raw_input('Please press return to continue...\n')
作業完成!
結論,Python 真的是好物阿!如果有寫其他程式語言的經驗,Python 是相當好學的東西!
標籤:
python
訂閱:
文章
(
Atom
)