UEFI secure boot impact on Linux閱讀小記

文章:Red Hat, The Linux Foundation and Canonical Publish White Paper on Unified Extensible Firmware Interface的最後有個連結,點選以後可以下載一份PDF文件,標題是UEFI secure boot impact on Linux。文件的前面很仔細的分析了UEFI的種種好處跟壞處,然後分析了對Linux的影響。我有大略看過一遍,最主要的問題都是在於key,UEFI開機時會拿key去驗證bootloader,如果驗證失敗,就不再繼續開機。可是對Linux來說,不可能針對每個OEM製造的機器去簽署bootloader啊,因為這樣會要做很多份bootloader,太麻煩。如果要改那個key的話,又沒辦法。中間後段的時候還有提到一些有的沒的,我偷懶跳過去了,直接看最後的結論。最後就提出幾點建議:

  • 建議OEM可以提供很方便可以開關secure boot的介面
  • 建議OEM(在BIOS廠商的協助下)可以在系統軔體裡提供標準機制去設置key
  • 建議以setup模式賣出,讓作業系統去負責安裝初始key的動作

BaseHTTPServer

模組的文件簡單到不行,而網路上查到的文件大多都是跟你講怎麼弄一個簡單的HTTP Server,真的要寫一個簡單的應用時,卻沒告訴你該怎麼去parse參數。這篇有答案:PyMOTW: BaseHTTPServer

基本上,do_GET時,要用 parsed_path = urlparse.urlparse(self.path) 。而 do_POST 時,要[python]form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={‘REQUEST_METHOD’:’POST’,
‘CONTENT_TYPE’:self.headers[‘Content-Type’],
})
[/python]拿到的 form,可以用 form[“your_key”] 去找到指定參數的值,但拿到的值,型態是MiniFieldStorage,要用 value 屬性去拿真正的值,也就是 form[“your_key”].value 才是真正的值,該文裡也有上傳檔案處理的範例。

twisted筆記

原本想用deferred搭subprocess去做的,想不到twisted已經有包這部份了,就呼叫reactor.spawnProcess就好,文件可以看Twisted Documentation: Using Processes。主要要實作ProcessProtocol,這可以用來知道process狀態,或是拿process輸出做處理…等等的。

作HTTP Server時,會要實作twisted.web.resource.Resource,render_GET裡的request可以參考twisted.web.http.Request : API documentation,引用參數,可以用args屬性,這是一個dictionary。除了render_GET,當然也可以用render_POST、request_HEAD…

Tail call

簡單的說是遞迴的特例,好處是可以避免call stack的損耗。Stack Overflow上的回答蠻清楚的,還附了python範例:algorithm – What is tail-recursion?,英文維基百科上的說明:Tail call比中文維基百科上的來的好。
跟遞迴比較大的差別,目前我認知到的是會利用另外一個參數來傳遞結果,實際應用上應該只要是遞迴都可以改寫成Tail call吧,再想想可以怎麼應用。

Mining the Social Web – Example 1-3

實作這個範例時,出現錯誤:TwitterHTTPError: Twitter sent status 404 for URL: trends.json using parameters: ()

有人回報給作者:Example 1-3 fails with 404 errors,也有人去 StackOverflow 上問:Problem with Twitter package by sixohsix,可是都沒有解決問題的答案。

答案在twitter API -GET trends上:因為deprecated了。要改用GET trends/:woeid,也就是像這樣的網址 http://api.twitter.com/1/trends/1.json 才可以取得。

換言之,程式要改為:
[python]import twitter
t=twitter.Twitter(api_version=’1′)
t.trends(id=1)
[/python]

Greasemonkey-輔助續借學校圖書

還是忍不住寫了,畢竟每次要為十幾本書打勾還是蠻累的。基本上就是多加兩個按鈕,一個幫我全打勾,一個幫我取消打勾。不過第二個按鈕好像永遠都用不到,這就是所謂的 over design 嗎? :-p

“How to install Ubuntu on Android”觀後感

看完還是順手紀錄一下,要不然就白花這25分鐘看了。
簡單的說,要先 root 並且裝上 busybox,接著下載 bootubuntu,這是預先編譯好的 ARM Ubuntu image,放到 SD Card 上的 ubuntu目錄下。然後用 adb shell 連上,執行 su,到 SD Card 的 ubuntu 目錄下,執行 bootubuntu,就進 ubuntu 環境了。有了 ubuntu 環境,就能執行 apt-get,立馬就可以裝上 openssh-server、tightvncserver,openssh-server 是為了有更好的終端機環境可用,因為 Windows 的命令提示字元不夠理想。tightvncserver 則是要給 market 上的 vnc client 用的,執行 vnc client 連到本機上的 vnc server,就有 Ubuntu 畫面跑出來了。

CentOS 5裝Python 2.6

先確定有EPEL,然後:
$sudo yum install python26
再裝 python26-virtualenv python-pip:
$yum install python26-virtualenv python-pip
製作環境:
$mkdir -p python-envs
$cd python-envs
$virtualenv-2.6 –no-site-packages –distribute myenv
$pip-python install -E myenv yolk
啟用:
$source myenv/bin/activate
$yolk -l