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

// ==UserScript==
// @name continue my library books
// @namespace idv.elleryq.library
// @description 續借學校圖書
// @include http://lib1.cute.edu.tw:81/cgi-bin/spydus?PG_NAME=BRW&UMODE=WRNWQ&ULG=CHI&UCODE=BIG5*
// ==/UserScript==
(function(){
var elements = document.getElementsByTagName("input");
for(var start=0,end=elements.length;start!=end;start++)
{
var name=elements[start].getAttribute("name");
if (name=="cmdCAN"){
var parent = elements[start].parentNode;
// The button for check all
var check_all_button = document.createElement("input");
check_all_button.setAttribute("type", "button");
check_all_button.setAttribute("value", "Check all");
check_all_button.setAttribute("name", "check_all_button");
check_all_button.setAttribute("onclick", "javascript: var elements = document.getElementsByTagName(\"input\");for(var start=0,end=elements.length;start!=end;start++) { var name=elements[start].getAttribute(\"name\"); if( name && name.substring(0,3)==\"CPS\" ){ elements[start].checked=true; } }");
// The button for uncheck all
var uncheck_all_button = document.createElement("input");
uncheck_all_button.setAttribute("type", "button");
uncheck_all_button.setAttribute("value", "Uncheck all");
uncheck_all_button.setAttribute("name", "uncheck_all_button");
uncheck_all_button.setAttribute("onclick", "javascript: var elements = document.getElementsByTagName(\"input\");for(var start=0,end=elements.length;start!=end;start++) { var name=elements[start].getAttribute(\"name\"); if( name && name.substring(0,3)==\"CPS\" ){ elements[start].checked=false; } }");
parent.appendChild( check_all_button );
parent.appendChild( uncheck_all_button );
}
}
})();

“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

電影流水帳(2011/5/26~2011/10/7)

快年底了…

  • 奶奶強盜團(IMDB)。3個奶奶好不容易攢了錢,要去夏威夷玩,很開心的去預約了行程,然後要付款,可是旅行社卻告訴她們要把錢存到戶頭去才可以。去到銀行存款,卻遇到搶案,存摺陰錯陽差地沒有刷到,銀行經理就跳出來說,不算,你們怎麼證明有拿八百萬來存款?於是,一番哭天搶地之後,還是沒能拿回錢。她們決心自己去找到搶匪,把錢要回來。很幸運,她們找到其中一個,不過這傢伙手上沒有錢,因為他被背叛了。這下絕望了,本想說再撐幾年繼續攢錢的,可是其中有一個人已經沒有時間了,她得了癌症。沒辦法,只能靠武力解決了,於是她們就要脅搶匪教她們搶銀行。經過一番訓練之後,她們要出擊了。第一次被呼弄,第二次真的就搶了,也順利搶到,可是來不及逃出,就被警察包圍了。她們跟人質訴說了她們遇到的情況後,人質深感同情,反過來幫她們逃出去(斯德哥爾摩症候群?!)。展開一段追逐之後,最後還是在機場被逮,瑯噹入獄。在獄中,得癌症的那個奶奶就病死了。後面真的很感人,眼淚差點就流下來,相當好看的片子。
  • Piranha 3D(IMDB, Wikipedia),中譯:3D食人魚。超簡單的劇情,可是看起來很爽,有辣妹、有裸體、有殺戮、有血也有肉。食人魚因為地震的關係從原本與世隔絕的洞窟中被放了出來,開始肆虐。在河邊發現片頭老人的屍體之後,下水探勘的生物學家也被幹掉,活著的人趕緊走人,然後運氣不錯,有逮到一隻魚,就去找魚類博士(這是演”回到未來”的那個怪博士!!)鑑定,說是遠古時代的超級食人魚。媽呀~太可怕了,警長就趕緊去疏散湖邊的人,沒人鳥…想當然爾,食人魚展開一場殺戮。警長的兒子情竇初開,不想幫警長媽媽(警長是女生,是好久沒出來演的伊莉莎白蘇)帶孩子,就用錢收買妹妹,叫弟弟妹妹們乖乖待在家裡,自己就跑出去看有料的了。弟弟妹妹不安份,也跟著跑出去,後來被困在島上。警長的兒子跟拍寫真的大叔與正妹們,後來也遇到食人魚了,就趕快逃走。路上遇到困在島上的弟弟妹妹,就要脅拍寫真的大叔說,我媽是警長,快過去救人~然後就救人,救完人,船就觸礁了。該死,食人魚也來了,又是一場殺戮。警長兒子的女友被困住,該死的人都死了,警長兒子趕緊向老媽求救,最後警長就救了她的兒女,炸死一堆魚。最後的最後,那個魚類博士又打電話來,說你們抓到的這隻還不是成魚喔,應該還有爸爸媽媽在活動,接著,我被嚇到從椅子上彈起來。