2011年10月7日 星期五

替 Webkit 送 Patch

Webkit Bugzilla
Webkit Bugzilla:https://bugs.webkit.org/


幾個月前收到一個任務,要替 Webkit 送幾個 patch,當下覺得很興奮,但是時間不夠用,拖了幾個月後,我才正是嘗試。目前我只做了一個簡單的部分,替某個 patch 建立正確的 test cases,這部分不需要寫程式的。現在就先把這些過程筆記一下,或許哪天也可以學 J大神用 commit log 來介紹自己了(誤)


首先,想要替 Webkit 貢獻者,必須先確認該功能還沒被實作或是有某些 bugs,例如 HTML5 眾多的 CSS3 功能等,另外則是在 Webkit Bugzilla 搜尋一下。關於某個未實作的功能,最好的驗證方式是去查看目前 webkit svn 裡頭的 LayoutTests 的東西,這邊 Webkit 可是分成非常多的 platform 的,光 chromium 就還可以分 win/linux/mac 等版本。


http://trac.webkit.org/browser/trunk/LayoutTests/platform/


接著就照 Webkit 官網的介紹,去取得程式碼、安裝開發環境,最後再把它編譯起來。如此一來,至少完成編譯的動作,接著才進入開發階段。


開發完成時,一樣編譯好,可以透過自製或是上述 LayoutTests 的測資


測資來源:http://trac.webkit.org/browser/trunk/LayoutTests 


測資結果(win):http://trac.webkit.org/browser/trunk/LayoutTests/platform/win


當功能一切完善後,就可以到 Webkit Bugzilla 貢獻程式,甚至自己發佈新問題或需求,接著自己再解掉。


在上傳 patch 之前,是必須通過 Webkit framework 的驗證,驗證方式可透過 WebKit/Tools/Scripts/run-webkit-tests 查看更改的程式是否能通過 test cases:


驗證 LayoutTests/folder1/folder2 裡的測資


$ ./Tools/Scripts/run-webkit-tests -v folder1/folder2


建立 pixel results ,有網頁可以查看兩者在瀏覽器顯示的樣貌


$ ./Tools/Scripts/run-webkit-tests -v -p folder1/folder2


如果原先的 test cases 本來就不對了,那這時候就是把你產出的測資拿去覆蓋掉原本即可。


當工作一切完善後,接著才正式進入送 patch 階段,在送出 patch 前,須產生 Changelog 筆記一下,接著驗證自己產生的東西是否符合 Webkit coding style:


$ cd Webkit
$ ./Tools/Scripts/prepare-ChangeLog --name "Your Name" --email "Your Email Address"
  Running status to find changed, added, or removed files.
  Reviewing diff to determine which lines changed.
  Extracting affected function names from source files.
  Change author: Your Name <Your Email Address>.
  Running 'svn update' to update ChangeLog files.
    At revision xxxxx.
    At revision xxxxx.
  Editing the Source/folder/ChangeLog file.
  Editing the LayoutTests/ChangeLog file.
-- Please remember to include a detailed description in your ChangeLog entry. --

-- See <http://webkit.org/coding/contributing.html> for more info --


編寫完 ChangeLog 後,再用 check-webkit-style 驗證(包括ChangeLog):


$ cd Webkit
$ ./Tools/Scripts/check-webkit-style
...
Total erros found: 0 in # files


一切都備妥後,就可以正式在 Webkit Bugzilla 上傳 patch 了,上傳時會有表單要填寫:


patch_bugzilla


首先是上傳的檔案不能超過 2MB,不然就要切開成多個 patch 或是給一個 url 讓它測;接著給上簡短一句話的描述;最後,則是 Flags 要設定,若要被人審核,那 review 那邊要標 ? ,而希望通過 review 後可以自動進入 trunk ,那就要用 ? 標記 commit-queue 囉。可以用滑鼠移到下拉式選單,將有提示字句可以再多多了解。


最後,就是等待審核者來處理及相互互動囉,順利的話,就可以完成貢獻啦。


2011年10月3日 星期一

[Python] 使用 Django 架構,提供強制下載檔案的 CGI 服務

周邊有人有需求,希望 CGI 能夠提供強制下載的功能,這我以前寫過 PHP,知道很容易透過用 header() 來送出資訊,請瀏覽器直接下載檔案,但改成 Django 我又不會了。翻了以前的筆記,順便看到以前的筆記:[Python] 使用 Django 提供檔案下載的 CGI 服務,溫習了一下。


至於此篇解法如下:


@ views.py

from django import http
from django.http import HttpResponse
from django.core.servers.basehttp import FileWrapper
import os
import mimetypes

def DemoFileDownload(request):
file_path = '/data/cat.jpg'
file_name = 'name_for_download.jpg'
response = HttpResponse(FileWrapper( file(file_path) ),mimetype='application/force-download')
response['Content-Disposition'] = 'attachment; filename=%s' % file_name 
response['Content-Type'] = mimetypes.guess_type(file_path)
response['Content-Length'] = os.path.getsize(file_path)
return response


2011年10月2日 星期日

iPhone/iPod/iPad 影音播放軟體 - AnyPlayer 與字幕檔編碼錯誤的處理

 
iPhone app - AnyPlayer/AnyPlayer HD


忘記是何時下載到這款限時免費的軟體,周末就順手測試一下,在 iPad 上頭安裝 AnyPlayer 後,把一些影音檔透過 iTunes 傳進去,速度還不會太慢。接著在播放 AVI 影片時,可以正常顯示字幕呢!除此之外,播放影片還可以加速或減速播放,整體上很夠用。


雖然只是用 AnyPlayer 而非 iPad 版的 AnyPlayer HD,程式用 2x 放大來播放時,雖然畫質會變差,但對我來說還夠用 XD 因為看影片不需要看到多仔細,不像電腦螢幕很大,一點點的畫質不好很難接受。


然而,測試某一個影片與其字幕時,發現每一個 line 最後一個字總是顯示 "??" ,而前面都可以正常顯示,也開始發現,原來 AnyPlayer 還可以手動設定字幕編碼。只是試了很多編碼後,還是失敗收場,最後就想到轉碼的解法 :P 


notepad++_encoding


跑去下載 Notepad++ 並用他把字幕檔開啟,接著[轉換至 UTF-8 碼格式]並儲存起來再傳到程式裡,如此一來就播放就完全沒問題啦!這類軟體應該比較適合在 iPad 上使用,對 iPhone 或 iPod touch 來說,一來是螢幕太小,二來則是耗電快。


2011年9月29日 星期四

編譯 Webkit 所耗費的時間和 run-webkit-tests 筆記

原本只是一直在 Windows 平台上編譯 Webkit,但做 layout test case 時,一直無法 success,一些文章說是字型的問題,但好不容易都取到字型了,還是不太 ok ,就開始嘗試在其他平台上測試。


編譯成功的平台:



  • Windows 7 Eng 64Bit 與 VS 2005 Express

    • AMD 955 X4、12GB DDR3-1333

    • 耗時 45 分鐘



  • Windows XP 32Bit 與 VS 2005 Express

  • Windows XP 32Bit 與 VS 2005

  • Ubuntu 11.04 64Bit 之編譯 GTK+ 版

    • 躲在一台 AMD 945 X4、8GB 的 Win7 64Bit 裡的 VirtualBox ,分配 4 顆 CPU 和 2048 記憶體

    • 耗時 22 分鐘



  • Mac OSX 10.6 與 Xcode 4



整體上,編譯環境最容易設定的是 Mac OSX,但下載軟體還滿耗時:



  1. 下載安裝 Java for Mac OS X Developer Package (1xx MB) 和 Xcode 4 (4.x GB) 

  2. 取得 Webkit source code

  3. 執行 update-webkit

  4. 執行 build-webkit


第二好裝的是 Ubuntu 11.04 ,原先想說再 Ubuntu 10.04 裝,才發現 GLIB 版本不夠新,也才想起幾天前朋友安裝時,就有提過這種問題,不小心又走了回頭路一次:



  1. 安裝 Ubuntu 11.04 Desktop 64Bit

  2. sudo apt-get install autoconf automake autotools-dev bison flex gperf glib-networking gtk-doc-tools libenchant-dev libgail-3-dev  libgeoclue-dev libglib2.0-dev libgstreamer-plugins-base0.10-dev libgtk2.0-dev libicu-dev libjpeg62-dev libpango1.0-dev libpng12-dev libsoup2.4-dev libsqlite3-dev libtool  libxslt-dev libxt-dev

  3. 編譯時又發現找不到 gail (明明裝了 libgail-3-dev 了),因此又多裝 libgail-dev 來搞定

  4. 取得 Webkit source code

  5. 執行 update-webkit --gtk

  6. 執行 build-webkit --gtk


至於 Win7 或 WinXP 的嘛,大概就照官網的安裝下去及調教,簡易筆記:



  1. vcsetup.exe

  2. VS80sp1-KB926748-X86-INTL.exe

  3. VS80sp1-KB971090-X86-INTL.exe

  4. PSDK-x86.exe

  5. cygwin-downloader.zip

  6. quicktimesdk.zip

  7. DXSDK_Feb10_exe

  8. 設定 VS 2005 Express 額外的 lib 或 header、設定系統環境變數以便找到 PSK 程式、設定 VCProjects 等


如果是在 WinXP 編譯時,應該還會碰到不少問題,細節請參考 Building Webkit on Windows


最後,提及一下關於 run-webkit-tests:



  • 新版指令: new-run-webkit-tests

  • 舊版指令: old-run-webkit-tests 或 run-webkit-tests


只測試某些 case ,如 writing-mode:



  • run-webkit-tests -v fast/writing-mode/


想看瀏覽器的圖(Pixel不見得會過):



  • run-webkit-tests -v -p fast/writing-mode/


當使用舊版指令執行時,在 Windows 上會要求設定字型目錄(WEBKIT_TESTFONTS環境變數),用到的字型可以在這邊查閱:


https://trac.webkit.org/browser/trunk/Tools/DumpRenderTree/win/DumpRenderTree.cpp#L319


而這些字型大多是 Mac OSX 裏頭內建的,可以先把 /System/Library/Fonts 和 /Library/Fonts 的東西都複製到一個目錄,接著在 Windows 上使用 CrossFont 軟體(試用版15天免費)進行轉換即可,細節請參考 BuildingOnWindows#Font-metric-relatedfailures


關於跑 test case 的部分,若是在 Unix 環境可以試試 new-run-webkit-tests ,這跑起來比較快;在 Windows 上跑 new-run-webkit-tests 會碰到一些小問題,目前還沒著手去處理,暫時用舊版指令測試。


問題:WebKit/WebKitBuild/Release/bin/DumpRenderTree.exe: error while loading shared libraries: MSVCR80.dll: cannot open shared object file: No such file or directory


解法:請安裝 Safari 瀏覽器


2011年9月24日 星期六

竹東夜市 - 竹東後火車站、快速道路、頭前溪生態公園

15


來新竹後,第二次逛夜市,很巧的都是一個人逛。這是新竹縣竹東鎮周六夜市,營業時間差不多晚上五點半起,比較好的時段應該是晚上六點至六點半開始,可以把車停好,然後在堤防上散步一下,看看等會要吃哪一攤。這個夜市很特別,是在快速道路底下的區域,而堤防旁邊就是生態公園,天色未暗時,可以看到有人在散步等。



View Larger Map


記得兩年前到過竹東菜市場,以為那就是所謂的夜市,從此就很少過去了。這兩年多次聽到同事閒聊,這次就努力一下,終於找到切確的位置了!上述的 GPX 是從新竹往竹東的中興路開始的,到竹東後碰到朝陽路左轉,接著碰到北興路右轉,接著再碰到仁愛路左轉,就接到了快速道路底下,走到底往右轉慢慢過去就會找到囉。不熟的話可以用 Google Street View 看一下轉角處,例如北興路轉仁愛路時,會看到一間全家等,而上述的 GPX 因為接收訊號有誤差,所以就當個簡略的示意圖吧。


由於第一次去,大概五點初就騎車過去,差不多五點半就到了,趁著人還不多時,騎著車逛了一次,仔細看 GPX 圖,可以看到最後有一段像似有兩條線疊起來的折返範圍,那就是夜市的範圍,可真是說長不長,說短也不短。趁著天氣未黑,店家還在準備的時候,我就在旁邊走了幾次測了一下時間,大概走一趟要15分鐘,所以來回就 30 分鐘左右,還滿適合散步的。


01


上面這張是夜市的起點,可以看到一個黃底紅字的「機車停車處」,我第一次來這邊也問了一下,確定在第一攤之前的位置都是可以擺放機車的,放不夠的才會往堤防內停,而堤防內主要是給汽車停的,並且也是一個休憩場所、生態公園。盡管生態公園的區域很大,但晚上七點多望過去好像也是滿滿的車潮呢,並且只有一個出入口供車子進來與出去,晚上車潮多時會有人指揮,所以多一點耐心也不用擔心出不去。


02 03 04 05 06


然後看到一間電子公司的門口就是夜市呢,好像有點熟悉的名字,但我又想不起來?或許科技業都取得很相近吧!?說不定周六加班時,下班時可以順便吃一下夜市呢!


07


最後,天色慢慢變黑,大概晚上七點左右,人就越來越多,各家攤子的燈也打起來了,遠看就很熱鬧了


08 09 10 11 12 13 14


在網路上可以找到一些文章,說這邊是 2010.04 左右才移過來的,好像是舊竹東夜市原先以是在街道兩處,搬過來就延用這個習慣,變成一個很特別的夜市文化。逛夜市時,很容易吃飽想多走走,若擔心人潮太多,這時候可以到堤防上頭走走,也是分外清幽。雖然人潮熱絡,但還是不太建議一個女生在堤防上甚至生態公園閒晃,建議還是找找伴不然就是在下面的夜市閒逛吧,而堤防上也有幾個鐵椅,可以看到情侶或是青少年兩三位在那邊休息,也是特別之處。最後,接近夜市尾端,有三個流動廁所可以使用,但要收費(男生小便斗的不用),也別忘了,這還是一條道路,偶爾還是會有車子會開過去,走路時還是請多看一下車子吧!