成立 PCMan Facebook 專頁

之前常被許多網友要求加 Facebook,但是數量過多難以管理,大部分也都不認識,無法一一加入,所以成立 PCMan FB 專頁。未來長篇的文章還是會放 Blog 上,而平常的小動態會放在 FB。
另外,現在也可以使用 http://blog.pcman.im/ 來連到本網站

2013年9月12日 星期四

新酷音Windows版最新進度 - 支援 Windows 8 64-bit

雖然先前本來只打算支援 Windows 8 的 desktop mode,但是經過持續研究,
以及寄信請教 TSF aware blog 作者 Eric Brown,參考日文輸入法 corvus-skk,
加上對岸強大的開發者,小小輸入法的周永 (dgod) 指點,終於知道怎麼做了。
目前新酷音輸入法,初步可以部分支援 Windows 8 modern UI,
我在 Windows 8 試用版裡面測試,已經可在 metro app 裡面使用了!
值得一提的是,對岸高手周永 (dgod),就是我認識的那位 dgod
之前我們還一起開發過 Linux 桌面 LXDE 專案,實在也太巧,
我居然不知道他會寫 TSF 輸入法!! (我猜他應該也不知道我有在寫 XD)

先前從文件上看來,Windows 8 app 模式不能使用許多舊有功能,
很多輸入法必要的 API 竟都被標注為 desktop mode only,
所以我一直想不出來怎麼做。原來,在輸入法是特例,
雖然 dll 是載入到 app container 內,但是 desktop SDK 的 API 是允許使用的。
終於找到一份文件證實這點:
http://msdn.microsoft.com/en-us/library/windows/desktop/hh848069(v=vs.85).aspx
Quote:
When an IME is loaded into a Windows Store app, it is subject to the same app container restrictions as the app itself. This behavior ensures that IMEs are not able to violate Windows Store app security contracts, despite having access to the desktop SDK (because they are not distributed or certified by the Windows Store)
所以,輸入法雖然跑在 app 內,原 Win32 API 是允許的,但是存取的限制,
仍然受到 app container 安全規範,實地測試發現,可以使用 Registry 的 API
但是在 app 內嘗試讀寫系統登錄,都會造成錯誤。讀寫 app 以外的檔案也會權限不足。
故這些 API 雖然可以調用,但是只要存取到 app 不准許存取的資源,就會發生錯誤。

總結來說,目前已經可支援 Windows 8 store app,但還有許多限制沒有克服

  1. 使用者偏好設定,各個 app 內各自獨立,不能互相讀取,也不能讀取系統登錄,也不能存取 app 自己 package 以外的檔案,所以無法讀取設定檔,不能和 desktop mode 共用設定。微軟官方建議的方式是,建立一個 web service 來儲存這些設定。
  2. app 內儲存設定有自己的方式,新的 API 不相容舊版 Windows,所以可能還是需要額外幫 Windows 8 開發自己的版本
  3. 使用者辭庫無法在 app 內使用,因為 app 內讀不到外界的檔案,只有少數幾個許可的位置可讀取,很多更是無法寫入,但是各個 app 隨不同的 capability 又會不同。此問題目前無解。微軟官方建議的方式是,這些資料應該放在雲端。但是沒網路的時候就不能用了,Windows 8 的這種設計哲學在網路連不上的情況會很難實現。
  4. app mode 和 desktop mode 之間互相溝通預設不被允許,除非經過複雜的安全性設定,但是找不到如何設定的文件或範例。目前比較確定能用的,是透過 web service,只不過,為了交換少數資料,而需要架設 web server...真是殺雞焉用牛刀!
  5. Windows store app mode 下沒有語言列,無法顯示狀態,或存取其他功能。
也許,在 app 模式下關閉使用者辭庫功能是個可行的解法,
但是這仍然沒有解決 app 內和 desktop mode 設定要如何共用的問題。
該不會真的需要寫專用的 web server 吧....

TSF 和 32/64 位元支援都完成了,支援 Windows 8 metro app 有譜了,但還有很長的路要走。

2013年9月10日 星期二

新酷音輸入法 Windows 版,重新出發!

過去曾經把 Linux 上優秀的輸入法「新酷音」移植到 Windows。
雖然後來實在沒時間再參與了,我自己一直還是有在用新酷音
直到現在,因為工作上需要長時間使用 Windows,難用的
微軟新注音,再次喚回我對新酷音輸入法的懷念。
到了 Windows 7 之後,因為系統架構的改變,
新酷音雖有網友做出支援 64 bit Windows,一直沒能運作得很好
因為 Windows 逐步拋棄舊 IME (imm32) 架構,
轉向採用 COM 技術的新 Text Service Framework (TSF),
複雜度呈直線幅度上升,使得許多舊有 IME 常出現難解的奇怪問題
又因 IME 的諸多限制,使舊的新酷音依賴許多 dirty hacks 在運作
最近 Windows 8 更是全面轉向 TSF,開始準備禁用 IME 架構,
以 TSF 全面重寫看來勢在必行了。
先前有網友陳昌倬 (czchen)的努力,用微軟提供的範例程式改造,
初步證實了 TSF 的可行性,在這個鼓舞之下,
我重啟了 Windows 版新酷音計劃
https://github.com/chewing/windows-chewing-tsf/

經過連日熬夜研究,全新 TSF 架構的 Windows 版新酷音終於快可以用了
基本的架構和 API 以及各種工具都完成了,連語言列按鈕和選單,都能正確運作了!
而因為原先微軟提供的範例,是以微軟自己的 MS-PL  (Microsoft Public License)授權,
雖然也算是自由軟體,但是該授權不相容 GPL,而且衍生著作必須沿用 MS-PL
為了避免這個問題,我只好 from scratch 重寫 TSF 支援。
因為 TSF 大量使用 COM (component object model),並且層層疊疊非常複雜,
對開發者並不友善,我將這部份封裝進 libIME 這個函式庫,
這樣未來的其他輸入法開發者,可以直接套用 libIME 封裝的現成架構,
而不需要了解 TSF 就可以快速寫出支援 Windows 的輸入法。

這裡針對 libIME 程式 API 架構寫了簡易說明文件,
供有興趣參與開發的朋友參考,希望可以加速大家移植自己的輸入法

基本上透過 libIME 來實做輸入法是很簡單的
只需要碰觸到非常少 TSF,大部分細節和 COM 操作都被隱藏了
libIME 也提供了許多 Windows GUI programming 的工具 classes
Ime::Window, Ime::Dialog, Ime::PropertyDialog...等等,
幫助實做視窗界面和 config dialog

雖然目前進展很順利,大多數問題也克服了,
但是我接下來會需要忙好一陣子,沒時間改太多 code,
文字輸入的部分還有些問題,希望有其他朋友可以
就現有 code 和文件繼續改良,相信很快就能有可用的發行版

至於 Windows 8 store app 支援,看來是沒有指望了
我有 E-mail 給 TSF aware blog 的作者,他是 MS 員工
專精 TSF,經過他的回答,看來要能支援 win 8 app
基本上是需要整個用 win 8 專屬的新 API 重做,
而且設定和資料基本上需要放上 web 才行
因此雖然也是 TSF,但是等於也是要全部重寫另一個
GUI 也是要用新的架構重寫,舊 GUI code 完全不能用
因為限制實在太多,困難度更高,又需要跟 web 連接
我想這不是我們該支援的東西。
詳見微軟的:Guidelines and checklist for IME development (Windows Store apps)

照現有的狀況看,大部分現有軟體要移植到 win 8 metro
基本上是不可能的,除非全部砍掉重寫...
所以,我個人認為,這是一個沒有前途的平台...
把開發應用程式變得比 Linux 上更困難,只是自廢武功而已
集中精力來支援沒人在用的平台,實在不划算
因此,就這樣吧! 支援 desktop mode 就好了

敬請期待,重生的 Window 版本新酷音 TSF 輸入法!

2013年8月4日 星期日

2013-08-03 COSCUP 演講 - Qt 正夯,GTK+ 使用者該如何跳槽?

今年很榮幸再次參加 COSCUP,去年本來是講開發 file manager
去年會後和 KDE 開發者做了些交流,決定改用 Qt
經過這一年的研究,今年我的演講就變成講 Qt 了 :P
這是投影片的部份,簡介 Gtk+ 和 Qt 主要的優劣、相同和不同處
請和此份完整參考文件搭配服用:Migrate from Gtk+ to Qt


剩下的部份則是 demo,現場把一個 gtk+ 小程式改寫成 Qt 這是完整的範例程式,以及原始投影片 (*.odp) 下載:
https://drive.google.com/folderview?id=0B4BhmC8V2mivc0hFdmlHWmNCdDQ&usp=sharing

至於當天現場的錄影:

完全沒有畫面...
等COSCUP 工作人員釋出當天錄影再補上

分享給對自由軟體有興趣的朋友參考

2012年11月9日 星期五

發現自己能做原先以為不行的事情,何嘗不是一件快事


每當遇到挫折的時候,難免會懷疑自己到底是不是選錯了路,
可是隨著年紀增長,我現在覺得,就是選錯了,其實也無妨!
不試試看,怎麼會知道自己的潛力可以到哪裡?
原先想做的事情,無法實現,固然是種遺憾
發現自己能做原先以為不行的事情,何嘗不是一件快事!

2012年9月26日 星期三

機車遊金門


金門機車環島第二次,完成!
上次是順時針環島,白天在西邊,在東邊都是夜間趕路。
今天趁著白班轉夜班的空檔,又租了一次機車來環島,
這次換成逆時針,白天先從東邊玩起,在從西邊走夜路回來。
總算完整的,在白天和晚上,各把金門走完一圈了。
今天也補上幾個上次遺漏的景點。

獅山砲陣地,有著花崗岩硬鑿出來的坑道,
因為直接通到海邊,海風一直灌入,非常涼爽通風。
一直走到海邊眺望海灘,已除役的大砲還矗立在原地,
砲口仍然是朝著對岸,只是士兵的操演已變成表演性質。

山后民俗文化村,其實只是清朝留下的一些老式建築。
王阿婆蚵仔麵線是必吃的重點小吃,
不同於台灣本島都用紅麵線,勾芡,以蒜汁和烏醋佐以香菜調味,
蚵仔是養殖的,量很少,又裹粉,多還會加入肉羹、大腸等等
金門的麵線口味清爽無比,並且整碗滿滿的都是蚵仔。
蚵仔是野生的石蚵,較小顆,但是鮮美、沒有腥味或土味。
麵線不但是白麵線,還是用不含鹽沒鹹味的手工麵線,
清湯不勾芡,加上油蔥酥、以胡椒調味,再灑上上大量蔥花,
整個湯頭就靠大量的鮮蚵仔,和這簡單的調味,相當爽口。
雖然一碗要價60,這個價格很台北,但是料很多,物有所值。

接著來到馬山觀測所,隔著不到兩公里的距離,
看著廈門週邊諸島。用望遠鏡,甚至可以看到對岸的漁民。
這真的是「前線」,跟對岸距離只比淡水河的兩岸遠一些!
很難想像就在另一邊的岸上,已經不是我國領土了。

沙美老街,白天感覺還是一樣荒涼,並不熱鬧,
重點是我要買的燒餅賣完關門了!跑了兩次都沒有吃到。

接著又到古寧頭,參觀了戰史管,又從旁邊的小路,
繞到了旅行團不會去的北山海提,走上沙灘,遙望對岸。
遙想當年,許多年紀比我小的青年,就在這片平靜的海灘上喪命。
只能說,出生在沒有戰爭的年代真是幸福。

吃飯時間,到了金城鎮上,來到小吃聚集的貞節牌坊。
遠近馳名的蚵嗲剛開門,排隊人潮尚未湧現,所以我很快就排到了。
等我吃完的時候,攤位已經被人群團團圍住。
口味清爽,但是蚵仔量少,特點是不用韭菜,而是包高麗菜絲,
雖然比起來我比較喜歡台南七股的,但是這攤的確好吃!
另一家百年老店炸鹹粿很有特色,可是當時不餓,就沒有買。
為了比較哪家麵線好吃,我又在巧味香小吃點了一碗,一樣是60
料也很多,而且是現煮的,不過比起來我還是比較喜歡王阿婆的。
至於著名的油條和廣東粥,則是錯過了開店時間沒有品嘗到。
吃完順便看了旁邊的古跡總兵署,覺得不是很有特色。

繞了一下就來到金城車站旁的金城民防坑道入口。
對,老蔣真的很喜歡挖坑道,整個金門地底處處是坑道,
在物資缺乏的當年,動用了這麼多人力物力在做防禦工事。
這些資金如果能全部用在民生,不知道多好,可惜當年打仗。
這條坑道完工的時候據說戰爭已經結束,所以沒有實際使用到,
遂轉型為觀光景點。隨管理人員,走入長達一公里多的窄小坑道,
裏面有兩斷體驗區,播放防空警報,令一段則是有砲彈的音效,
雖不逼真,但是規劃者想到做這樣的設計,也很別出心裁。

回程在莒光樓上登高望遠,正好是黃昏日落時分,
便遙望廈門,看著夕陽西下,又騎車漸漸離開了莒光湖。
除了戰爭遺跡,金門還有其他古跡的。
回程途中經過了明代的遺跡,金門二級古跡,文臺寶塔,
是當年明代留下的三座寶塔中僅存者,底下還刻著張大千的題字。
這麼一座明代古跡,就坐落在荒郊野外的一棵大樹旁,
看似豪不起眼,卻是島上歷史最悠久的建物之一呢!

就這樣,結束了充實的一天,騎車回到了醫院。
比起便宜划算,還有人帶的觀光公車,
自己租車,穿梭在個景點之間,還是別有一番趣味和自由啊!

2012年8月16日 星期四

COSCUP 2012 演講 - 用 Libfm + GTK+ 開發你自己的 Linux 桌面檔案管理程式

很久沒參加自由軟體社群活動了,
很高興受邀參加 2012 年的盛事 COSCUP 開源人年會,
分享近年在 LXDE 桌面環境上的開發經驗及成果。

最早在公開場合提出LXDE,應該也是在很多年前的COSCUP,
當時還在草創階段,只有proof of concept,
但現在LXDE桌面環境,已經成長為國際化的專案,
並受到多種主流 Linux 發行版納入了。

本次預定要講的題目是:
「用 Libfm + GTK+ 開發你自己的 Linux 桌面檔案管理程式」
範例程式的原始碼可在這裡取得,歡迎大家下載研究。

為了要有快速好用的檔案管理程式,我在2006年開始開發PCManFM,
也就是LXDE的第一個元件。
隨後為了追求更好的設計,和支援新技術,在2009年將整個程式重寫,
Libfm 就是重寫之後的 PCManFM 的核心部份,
獨立成可供其他程式重複利用的 library

8/19 號下午,我會在 COSCUP 呈獻Libfm 的成果,
並且以一個「少於100行C程式碼」的簡短範例,
展現如何用 libfm + GTK+,快速建構一個漂亮的 Dual-pane 檔案管理程式。
歡迎有興趣的朋友參加。

2012年2月24日 星期五

一直記得這是一件有意義的事,那我們或許就可以快樂一點

最近知道,有些學弟妹似乎在我們醫院過得不太開心。我知道,這並不是一間富麗堂皇的醫院,更可能跟你們想像的「教學醫院」不一樣,第一次來的人,可能會很難接受,為什麼有些東西是這樣,為什麼除了急診的病人數量之外,很多東西還沒辦法跟上台北的醫學中心。
的確地方小資源有限,我們也有很多的不得已和不完美,需要向現實妥協,但無論如何,我只想對學弟妹說:「不管你們覺得這個地方怎麼樣,就因為有我們在這裡,所以很多病人不再需要去台北,更不會死在雪山隧道裡面。」
我知道很多事情很無奈,但如果你們了解自己在做的事情,對這塊土地的意義,會不會過得快樂一點呢?大學的時候,許多人喜歡參加服務性社團,到比較偏遠的地方去進行「醫療服務」當年也是辛苦,也是克難,也許只是量量血壓,做做衛教,但是那份服務人群,完成一件事的成就感,讓多少人樂此不疲呢?
如今我們已經不是學生,我們在一個醫療相對缺乏的地區,做著「真正的醫療服務」了,而那份學生時代的熱情,還在嗎?
現實有很多不如意,內外婦兒固然四大皆空,但我們是否可以試著找回學生時代,那份迫不及待想為人群服務的感覺呢?來到這裡,就當作在出服務隊吧!
也許這裡還有很多地方不比台北,但別忘記,你所看到這些,就是這裡的民眾僅有的醫療。從醫療資源過剩的台北,來到這裡,去感受這片土地,去接觸這裡的人們,我相信學弟妹們,可以學到除了醫學以外的東西。