2011年10月23日 星期日

想想十年後想要變成什麼樣的人吧!

客運


參加家族聚會,又一次含糊地回答別人我的工作在幹嘛,說真的連我的家人也不太懂 :P 我想,我的工作內容或能力,大概是練習成為一位具現化系吧 XD 我不會跟別人說我是專門搞後端或是前端的開發人員,我只會很輕描淡寫地說,我是在做整合性服務的研發人員。回顧這幾年的變化,學生時期從一位熱愛搞 SA 活動的,慢慢地走向自以為是嵌入式,接著又跳到網際網路應用服務,然後網路上的東西日新月異,不會就學,並不侷限在某個領域或技術,剛好很符合我的個性,我不會想要用一招通吃,另類的中庸之道吧?


最近隔壁同事要役畢了,也選擇要離開換個環境,我分享了一些福利好的公司,但他一口回絕,他只想要可以去練功的公司!漸漸地,我發現自己的想法開始比較不會受人影響,不曉得這是不是成老頑固的第一步?


每個人的生活、條件都不一樣,不需要時時跟著別人的腳步,更需好好地思考,十年後,到底想要變成什麼樣的人,當下得選擇將會越來越清晰了。


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 來說,一來是螢幕太小,二來則是耗電快。