2007年12月11日 星期二

WebKit/QT & WebKit/GTK+ on Ubuntu Linux初體驗

前兩篇「WebKitGtk+支援」與「OWB:以WebKit為基礎的嵌入式網路瀏覽器」介紹了些 WebKit的開發現況後,這邊大概講一下在Ubuntu Linux底下如何無痛進行初體驗。依據官方首頁的訊息,WebKit 簡介如下:

WebKit是一種開放原始碼瀏覽器引擎,同時也是 Mac OS X 底下的Safari 、 Dashboard、Mail、與其他Apple Mac OS X所使用的系統框架版本。WebKit所使用的KDE函式庫KHTMLKJS是屬於HTML與JavaScript實做的分支。
先來體驗一下原生於QtWebKit瀏覽器,動手打造個「仿Safari」。以Ubuntu Linux 7.10為例,操作程序如下:
1. 先安裝編譯時所需的軟體與套件庫
sudo apt-get install libqt4-dev libxslt-dev gperf bison libsqlite3-dev flex build-essential subversion
2.取得Subversion中的原始碼 (筆者花了近20分鐘才下載完畢,所以請保持耐心)
svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit
3.建立一個Qt for WebKit的瀏覽器
(安裝的機器 Intel CoreDue L2300@1.5GHZ 跑了近45 min )
QTDIR=/usr/share/qt4/ WebKit/WebKitTools/Scripts/build-webkit
4.安裝完後,打以下指令開啟剛剛建立的瀏覽器。
WebKit/WebKitBuild/Release/bin/QtLauncher
有圖有真相!!


接著,嘗試原生於Gtk+WebKit,不過這次就直接介紹個剛成立的一個新軟體專案 Midori來體驗一下 WebKit/Gtk+Midori 是一個輕量化的瀏覽器,有以下特點:
  • 完全採用Gtk+ 2.x打造
  • WebKit 進行快速網頁繪製
  • 分頁、視窗與任務對話管理
  • 書籤的儲存採用XBEL
  • 搜尋框則基於OpenSearch
  • 可自訂前後選單動作
  • 支援使用者腳本與樣式自訂
  • 可透過 Lua scripts 擴充
然而,這個專案目前還是屬於alpha測試版的狀態,所以可能會比較不穩定些,而且有些功能還沒實做出來。

Midori目前則可透過apt的方式去安裝預先編譯的套件,但得先編輯設定:
sudo gedit /etc/apt/sources.list
然後加入以下兩行:
deb http://ppa.launchpad.net/stemp/ubuntu gutsy main
deb-src http://ppa.launchpad.net/stemp/ubuntu gutsy main

儲存後離開,並進行更新:
sudo apt-get update
然後就可安裝Midori
sudo apt-get install midori
跑完後,就可以直接從「應用程式」裡的「網際網路」選單開啟Midori ,其執行時期的快照如下:


本文改寫於以下兩篇文章:

2007年11月20日 星期二

svn http, user-password and access control

使用http protocol作為Subversion的URL,可利用apache的dav_svn module達成。

dav是distribution authorization and versioning,為http協定的一個擴充
AuthUserFile  /etc/apache2/dav_svn.passwd
AuthzSVNAccessFile /etc/apache2/dav_svn.authz
所以:
  1. 要先準備好這兩個擋案,並依據.conf 的內容,擺在對應的路徑中
  2. user-passwd file的內容是用 htpasswd 操作的,add user、change password都要用htpasswd來作
  3. svn下各個目錄的存取權限就由dav_svn.authz設定,該檔案為純文字檔
Add User :
htpasswd  'target .passwd file' user-name
這裡'target.passwd file'就是/etc/apache2/dav_svn.passwd.

權限設定方式 :
[/]
* =
guest = r
svntest = rw
charles-chang = rw
意思是對 [/] 目錄的權限設定:
* - 所有人 - 無法access
guest - 僅能讀取,無法修改
svntest, charles-chang 都是一般user,可以讀取、修改。
當然,要用htpasswd把 guest, svntest, charles-chang都加到 user-passwd file 中
僅能讀取的user一樣可作check-out、add file等操作,但在commit時會出現error,svn log上也不會有該user的更動紀錄。

使用hg內建的web server

hg( Mercurial)內建 web server。

一般使用方式如下:

到已開啟好(hg init完畢)的repository (例如 c:\writeMLC)目錄下,執行以下指令:

hg serve -p 8002
然後開啟web browser,開啟以下網址:
http://127.0.0.1:8002/
即可看到該repository的資訊:

此功能一方面可以作為command line模式的"friendly front end" ,另一方面,可以跟合作夥伴共享程式碼。

若有多個repository ,就要用webdir-conf 這個選項。使用方式先編輯一個設定檔,指定web server path和repository的關聯性:
編輯 一個檔案 (假設為webdirconf)
[paths]
writeMLC = C:\Whimery\DownloadWriteMLC
UseYagarto = C:\Yagarto\UseYagarto
BootRun = C:\BootRun\BootRun_Robert
在啟動hg server時,加上以下參數:
hg serve -p 8002 --webdir-conf webdirconf
然後在web browser上的顯示會像是以下:


每個 repository 可以自行設定一些特徵,諸如:web style、authorization、zip download support,指定方式即利用每個 repository 下.hg目錄裡的hgrc 檔 (要自行建立與編輯)。

以下就是為了方便所寫的hgrc內容:
[web]
style = gitweb
allow_archive = bz2 gz zip
push_ssl = false
allow_push = *
說明:
  • 改用git style 的wen interface (較詳細)
  • 增加 bz2、gz、zip的source snapshoot下載
  • 不使用ssl (因為不知道在windows command 下怎麼用 :P)
  • 允許經由http作push的動作 (允許他人check-in)

2007年11月13日 星期二

OWB:以WebKit為基礎的嵌入式網路瀏覽器

幾個月前介紹了「WebKit的Gtk+支援」新進展,現在openmoko已正式採納為web engine,提供為網頁瀏覽與RSS reader使用。Origyn Web Browser (OWB)則是另一個以WebKit為基礎的開放原始碼網路瀏覽器 (BSD license + LGPL + misc),針對嵌入式環境做了許多微調與修正,引入一層簡化描繪與底層操作的軟體層,稱為OWB Abstraction Layer (OwBal),得以銜接WebKit與消費性電子產品需求。具體來說,原本的WebKit需要heavyweight UI toolkit去作widget/font描繪,但OWBOwBAL巧妙地補齊介面部份,並允許lightweight UI呈現,也就是 "render itself by its own toolkit"。詳細的技術介紹可參考「Introducing OWB, an open-source browser for consumer devices」一文。

建構方式如下:

  • 取得開發中的程式碼:
svn checkout http://www.sand-labs.org/svn/trunk owb
  • CMake調整組態設定:
cd owb && ccmake .
具體情況如下圖: 按下[c]則可進行組態設定,過程中會提示缺乏的開發套件。
最後按下[g]即可產生必要的Makefile
  • 開始建構,當然是執行make
目錄下應該會有名為"owb"的執行檔。注意,建議安裝CJKUnifonts以支援中日韓文顯示支援,並且需作以下修正:
Index: BAL/Implementations/Fonts/freetype/BTFont.cpp
===================================================================
--- BAL/Implementations/Fonts/freetype/BTFont.cpp (revision 147)
+++ BAL/Implementations/Fonts/freetype/BTFont.cpp (working copy)
@@ -114,7 +114,7 @@
int size = static_cast<int>(m_fontDescription.specifiedSize());

if (m_fontMap[size] == 0)
- m_fontMap[size] = d->open("/usr/share/fonts/owb.ttf", size, 0);
+ m_fontMap[size] = d->open("/usr/share/fonts/truetype/arphic/ukai.ttf", size, 0);
d->m_ttfFont = m_fontMap[size];
if (d->m_ttfFont == NULL)
logml(MODULE_FONTS, LEVEL_EMERGENCY, make_message("open : \n"));
以「Jserv's blog」為例,OWB的呈現效果如下:

在組態設定時,指定了以FreeType作為字型描繪引擎 (即 "WEBKIT_USE_FONTS_FREETYPE" 選項),以取得更加的顯示效果。可發現網頁周圍沒有視覺捲軸 (但可使用方向鍵或PageUp/Down),而且HTML按鈕則是OWB自行描繪的,輸入框亦然。

OWB現在的空間使用量與網頁呈現正確度相當不錯,除了使用curl的方式還需要效能調整外,整體已相當穩定,目前的參考圖形引擎實做為SDL,官方網頁提供相當好的移植文件「OWBAL Porting Guide to Embedded Systems」。依據發展方向,OWB適合應用於Set-Top Box、數位電視、Kiosk等環境,並且對DirectFB的支援也開始進行。

2007年10月21日 星期日

EGLIBC於S3C2410 ARM SoC的體驗

稍早於「EGLIBC初探」提過CodeSourcery與諸多系統廠商合作,針對glibc的改進計畫 (自2.5版開始),實做出更適合Embedded環境的C Library實做 ── EGLIBC,前文也提及快速建構的script,而OpenEmbedded也正式納入對EGLIBC的支援。所以現在要建構與測試都可以相當快速,以下是參考的option groups組態:

jserv@venux:/home/moko/build$ cat ../org.openembedded.dev/packages/glibc/eglibc-svn/option-groups.config
# This file sets default values for all option group variables
# mentioned in option-groups.def; see that file for a description of
# each option group.

OPTION_EGLIBC_ADVANCED_INET6 = n
OPTION_EGLIBC_BSD = n
OPTION_EGLIBC_CATGETS = n
OPTION_EGLIBC_CHARSETS = n
OPTION_EGLIBC_DB_ALIASES = n
OPTION_EGLIBC_ENVZ = n
OPTION_EGLIBC_FSTAB = n
OPTION_EGLIBC_GETLOGIN = n
OPTION_EGLIBC_INET = y
OPTION_EGLIBC_LIBM = y
OPTION_EGLIBC_LOCALES = n
OPTION_EGLIBC_LOCALE_CODE = n
OPTION_EGLIBC_NIS = n
OPTION_EGLIBC_NSSWITCH = y
OPTION_EGLIBC_RCMD = n
OPTION_EGLIBC_SPAWN = n
OPTION_EGLIBC_SUNRPC = n
OPTION_EGLIBC_UTMP = y
OPTION_EGLIBC_UTMPX = n
OPTION_EGLIBC_WORDEXP = n
OPTION_POSIX_REGEXP = y
具體的細節可參考Jim Blandy發表於mailing-list的文章「EGLIBC size measurements for option groups」,EGLIBC透過option groups可讓C runtime的建構更加模組化,可輕易挑選Embedded環境所需的特徵,大幅降低code size與memory footprint,以常見組態來說,後者相較於glibc縮減為85%。筆者實際在openmoko GTA01bv4硬體 (based on S3C2410 ARM SoC)測試,在Smartphone的使用情境中,free memory從原本58444 bytes (glibc) 增加到67404 bytes (eglibc),幅度達13%,功能卻沒有因此打折,這與uClibc或其他小型的C Runtime來說,是很大的優勢。

取得筆者建構的EGLIBC-based openmoko 2007.2 image:http://people.openmoko.org/jserv/images/