發表文章

目前顯示的是 八月, 2011的文章

新鮮果汁吧!果汁桌面環境(Juice Desktop Environment)!

圖片
筆者喜愛喝果汁,故為這個新的 Project 取了 Juice 這樣的名稱,意旨一個自己喜愛的桌面環境。在前些日子,因為放棄了 GNOME 而轉向使用 Enlightenment(以下簡稱E17),雖然各方面還算不錯,但在新版 Package 的更新上實在是缺少人在維護。因此,若是使用 Debian 官方版本的 E17 Package,功能非常少,而 E17 官方的 Repository 版本又太舊。其實,原本希望能幫忙打包,但因為種種因素而做罷。

既然本身需求不高,就發揮今年貫徹執行的土砲精神,在空閒時間動手開發一個合用的桌面環境。目前,已經釋出其中一個 Dock/Panel 元件『JuShelf(Juice Shelf)』的初步版本,也已經有實作模組(Module)機制,和一種 module。下面是畫面截圖(Screenshot)和最新的展示影片:



畫面中展示的是 Launch module,能提供圖示讓使用者點擊並啟動應用程式。其中的特效設計是放大圖示然後傾斜,帶有相當的趣味性。

目前仍然待完成的模組:

工作視窗清單(taskbar)系統狀態顯示區(systray)時間顯示(Clock)
後記
目前 Juice 本身還沒有 Project 網站,只是以個人動機為出發點,若是日後有較完整的開發成果,會再補上。此外,Juice 初期打算使用 Compiz 或 Mutter 做為視窗管理器(Window Manager),以及配合一基本的 GNOME 小元件(如同筆者前些日子在整合 E17 和 GNOME 一般)。

針對『電子紙』優化 Qt 繪圖事件

最近手上有一些電子紙的案件,指定使用 Qt 做為圖型平台。與一般裝置不一樣的地方,電子紙的更新頻率很低,平均下來每秒頂多刷新一次,相對於 LCD Panel 的每秒 60 次起跳,實在低的可憐。對於專職繪圖的 Qt 而言,要如何壓低刷新的頻率和確認畫面繪圖完成,最後再推入 Display,便是一個重要的課題。

壓低更新頻率比較單純,透過修改 Framebuffer Driver 就可以達成。此外,也必須利用 setUpdatesEnabled() 和 update() 盡量避免 Qt 連續多次的繪圖需求,合併一次送入 framebuffer,這樣可以減少 Qt 來不及畫完和畫面閃爍的問題。

到此為止只是改善顯示效果和基礎的建置,真正要完成完美的一次推送,通常需要使用電子紙驅動程式所提供的額外 API,它同意我們自己決定何時將 Framebuffer 的資料推送到紙上。

至於何時該將畫面推送至電子紙上?這時需要針對 QApplication 做一些修改,監聽和自己創造一個新的事件:

const QEvent::Type UpdateScreenEvent = (QEvent::Type)1234; bool Application::notify(QObject *obj, QEvent *e) {      if (e->type() == UpdateScreenEvent) {           if (updateScreen) {               EPaperDriverCtrl *ctrl = (EPaperDriverCtrl*)EPaperDriverCtrl;               ctrl->pushFBtoPanel();               updateScreen = false;           }             return true;       } else if (e->type() == QEvent::Paint) {           updateScreen = true;           QApplication::postEvent(this, new QEvent(UpdateScreenEvent));       } …

Flat Project - 從山寨做起,親手打造炫麗的平板系統

已經過了近兩年,至今仍然沒有一台 PC 廠商做的平板電腦能勝過 iPad,精緻度估且不論,其速度與流暢度,相較之下只能堪稱工程機的程度。其實真正原因不在於這些廠商行銷廣告中的 CPU 『數量』,而是 Android 系統軟體本身處處存在了一些效能上的問題,重點是這些問題不是工程師所在意的,而且吃力又不一定討好,沒人會拿飯碗去賭。另一方面,Android UI 設計永遠就像工程師自我良好的作品,單獨看每一個元件都很漂亮,可是拼裝起來後感覺就是盤剩菜剩飯,就算換了 UI,也不過只是換了封面罷了,換湯不換藥。

Open Source Project 的開發,最困難的就是修改機制,在很多時候,我們只有能力挖肉,沒能力整骨,畢竟整個 Project 不是我們自己寫的。當然,也因此很多設計是無法加上去的,就算加上去也無法好用。就像現在廠商所提倡的軟硬體垂直整合,雖然我們已經有了硬體與軟體的溝通,但在應用軟體到軟體系統之間,其實更需要有好的垂直整合,否則出現斷層後,就像現在 Android 平板總是說不出的有問題。也難怪有人在罵大多數場商只是把 Open Source Software 隨便放到硬體上就拿出來賣,根本不用心。

我們何不來自己動手寫一個平板系統?

運用現成的 Open Source Project 為基礎,以 iPad 為學習目標,重新打造一個平板用的作業系統。重要的是,品質要能出貨,又有好的擴充性和可用的底層機制,而不只是用套軟體拉一拉 UI 就完事。

Mandice Flat Project( http://code.google.com/p/flat

[Flat Project] 就是一個這樣的產物,目標是自己動手打造一個開放的平板環境。(目前已經釋出程式碼的子項目是 GrandPa(視窗管理器),是一個仿 iPad 視窗行為的 3D Window Manager。)

Flat 的起源,[Mandice] 是這幾年間與不少大大小小廠商合作過案子,已有不少經驗和成果。所以在今年的 [COSCUP 2011] 活動,筆者一時興起,便把過去案子所開發的各種元件抽出來再開發並陸續釋出,這就是 [Flat Project] 的由來,當然已經移除不應該公開的商業部份。

後記

順帶一提,今年度 COSCUP 2011 的 Unconference Session 筆者有講如何…