Tag: zh-TW

  • GCIN in Debian is seeking co-maintainer

    尋找 GCIN co-maintainer HIME 的事件鬧的沸沸揚揚,一切的起因之一就是有人認為 HIME 會取代 Debian裡面的 GCIN,這是什麼狀況呢?因為在 Debian 裡面把 GCIN 棄養 (orphan)的就是我,似乎也有必要說明一下。以下提到 GCIN 都是指 Debian 裡面的 GCIN。 最早的 GCIN 維護者是 caleb,後來他因為不再使用 Debian 所以開始找其他人幫忙維護,而我成為 Debian Developer 的初衷就是要幫助本地的使用者有習慣好用的套件可以用,所以就接下了這個位子。當時我也有使用 GCIN 所以就算劉老大 (eliu) 每兩三天就有新版本我也還可以跟上,只是沒有辦法把套件整理的乾淨點,後來不用 GCIN 了,套件的更新就漸漸脫節,因為有 Luna Archiver的存在也讓我有偷懶的藉口,最後發現花在這個套件的時間與 Debian 的Popcon 統計不成比例,就決定把套件給棄養了。 Debian 對於被棄養的套件的處理方式是,如果沒有出什麼大問題就會由 QAteam 來管理,但是如果有人提出 RM: RoQA 的要求,因為使用者 (Popcon) 少且無人管理,就有可能被移出 Debian,但無正當理由甚少有直接使用新專案取代舊專案的狀況,因此 Debian 要使用 HIME 取代 GCIN 純粹是誤解而已。 […]

  • Not Again, MingLiu!

    長話短說,從 FreeType 2.4.4 (2010-11-28 release) 開始,只要編譯的時候有啟用 BCI (Byte Code Interpreter) ,新細明體就不應該會破掉了,只是因為一些原因 (下面詳述),一直到 2.4.5 (2011-06-24 release) 才算是完全解決。 這個問題牽扯到許多有趣知識,所以我決定作個筆記以免以後忘掉。 TrueType 首先是一些名詞解釋,TrueType 是常見的字型 (font) 格式,由 Apple 發展,後來被 Microsoft 採用並發揚光大;雖然沒有經過任何國際組織的標準化,在當時儼然已經成為業界標準 (de facto standard)。 TrueType 使用的檔案格式又稱為 sfnt 格式,由許多不同的表格 (table) 組成,每個表格由四個字的標籤 (tag) 表示,其中我們最關心的是 glyf 這個表格,因為所有的字符 (glyph) 都儲存在這個表格內。每個字符僅僅紀錄了形狀,要知道某個編碼的某個字元 (character) 是對應到哪個形狀,還要透過 cmap這個表格來查詢;也有一個字沒有相對應的字符,或是沒有任何字對應到某個字符的情況。 參考資料: Hinting (Instructing) TrueType 是一種外框字型 (Outline Font),也就是說每一個字符都是以向量圖形的方式呈現,理論上可以在各種不同解析度下呈現相同的形狀。 但是越是在低解析度的時候,由於可用的像素較少,越容易遇到邊界的表達能力問題,如右圖的 M 字,若沒有對齊像素點的話,呈現出來的圖案就會比較瘦長且左右不對稱,如果稍微向右移動並加寬一點,呈現出來的圖案就會比較接近原本向量圖形所預期的形狀;這個動作正是 Hinting […]

  • Speed comparison C vs Common Lisp

    昨天看到有人轉噗一則 StackOverflow 上面的問題,內容是問他分別用 C,python, erlang 與 haskell 寫了 Project Euler 的第十二題,但是haskell 版本慢得不像話,該如何改進? 以下是苦主的原始 C 語言版: 我的執行時間約為 5.48s 手癢想看看據說可以編譯出不錯的機器碼的 Common Lisp 速度怎麼樣,於是第一個版本如下 (用 sbcl 執行): 還不錯,11.192s,這個版本採用原文中給 haskell 的建議,使用 rem 而不是 mod,可以加快一點速度。再給一點關於型別的提示,然後把第一個 function inline,第二版可以跑出和 C 版本差不多的成績 5.563s 🙂 純粹湊個熱鬧而已,有興趣的人可以試試看把 loop 改成和原文其他語言一樣使用遞迴來實做,大部分 Lisp 都有做 TCO,速度應該差不多… 結論:Common Lisp is awesome 😉

  • Literate Programming

    Let us change our traditional attitude to the construction ofprograms: Instead of imagining that our main task is to instruct acomputer what to do, let us concentrate rather on explaining to humanbeings what we want a computer to do. ― Donald Knuth. “Literate Programming (1984)” Thinker 的一篇心靈與程式碼的協奏曲提到程式由後往前寫似乎比較符合思考的方向,不禁讓我想到 Knuth 提出的 Literate Programming 方法;其實我們思考的順序有時是跳躍式的,用 LP 的方法可以完全跳脫先後關係,用自己喜歡的順序來寫,我覺得也可以稱為碎碎唸寫法。 用 […]

  • Android: Wakelocks and TuxOnIce

    最近為了把 TuxOnIce 整到 Android 上面,著實把 Linux 的電源管理系統中關於 suspend 與 hibernation 的部份研究了一下。而 Android 為了增加待機時間加入了 wakelock 的機制,讓情況變得更加複雜。 TuxOnIce TOI Patch TuxOnIce 簡稱 TOI,前身是 Software Suspend 2,是一個長期在 linuxupstream 以外耕耘的一個休眠補釘,相較於早期整合到 linux kernel 內的swsusp,TOI 的功能非常豐富,可以指定把記憶體內容儲存到多種不同的位置,如檔案或置換空間,還可以選擇不同的壓縮方法。 首先幫 ARM 平台加上基本的休眠功能,使用 Hiroshi DOYU 的 patch: http://article.gmane.org/gmane.linux.power-management.general/20543 然後到 TOI 網站下載最新的 3.2 補釘,打上去的時候會有一些衝突但是都還滿容易解決,要注意的是某些衝突是看不出來的,例如因為函式移動位置而造成重複定義,要小心檢查。 然後因為 TOI 對於非 x86 平台有一些假設現在已經不適用,所以需要修改 https://gitorious.org/0xlab-kernel/kernel/commit/e551caf OMAPFB 使用 Pandaboard 加上 Android 測試才發現從休眠醒來後 […]

  • Android 2.3 Introduction & Statistics

    如果你有收看 LWN.net 的話,大概知道每次 linux kernel 有新的 release 前 都會有一次針對這次 release 的統計資料,看看主要的貢獻是由哪些人,哪些 公司完成。藉由這次跟 0xlab 分享 Android 2.3 新特性的時候,我學 LWN.net 做了一些小統計,還滿有趣的。 Most active Android 2.3 organizations (by changesets) 4204 google.com 1354 android.com 98 sonyericsson.com 71 gmail.com 39 codeaurora.org 39 samsung.com 38 intel.com 32 nokia.com 32 holtmann.org 29 0xlab.org 25 trusted-logic.com 17 openbossa.org 11 nxp.com 11 linux.org.tw 10 […]

  • Understanding UUID

    通用唯一識別碼 (Universally Unique IDentifier, UUID) 或是全域唯一識別碼 (Globally Unique IDentifier, GUID) 是一個 128 bits 的整數,並保證其在時間與空間的分佈都是獨一無二的。UUID 由開放軟體基金會(OSF) 標準化後用在他們的 DCE 系統上,後來在微軟的 COM 系統上發揚光大。除此之外在許多地方也都可以看到 UUID 的身影,如 Linux 上的分割表/區塊裝置就是以 UUID來標示,或是RSS 的 <guid> 標籤也可以使用 UUID,實際上 UUID 是標準的URN 表示法之一,你可以在任何需要標示單一物件的地方使用 UUID。 UUID 的文字形式為一個 8-4-4-4-12 的十六進位表示,共有 16 個 bytes,有人說使用 UUID 不方便人類辨識,但了解 UUID 的組成後你還是可以從這個表示法看出一些端倪來。本文參考的是 IETF 版本的 RFC4122。 UUID 共有四個版本,第 13 個字元的位置就是表示版本號。第一種是以時間和網路卡號組成,時間是以一百奈秒為單位,網路卡號理論上是不會重複的,再加上clock_seq 這個每次開機重設一次的亂數欄位,就算時間回朔了也不會重複,代號是 1。第二種和第四種是以命名空間加上一個 hash 組成的,分別可以使用MD5 […]

  • Blog Redesigned

    最近又把 Blog 整頓了一番,目標是改用靜態網頁。使用靜態網頁搭配一些網頁樣板程式不禁讓人想起最初使用 MT 來寫 Blog 的時候,不同的是現在有像Disqus 或是 IntenseDebate 這樣的動態留言服務,讓網頁可以完全的只提供靜態內容,不用多一個 cgi 程式來提供留言功能,這隱然成為最近流行的網頁設計方法之一。 轉換的過程中學到一些新東西,紀錄於此。 網頁編譯器 現在網頁是用產生的,它是大師 Joey Hess 的作品,大師稱它是一個wiki compiler,可以透過各種規則把網頁的原始碼 (可能是 markdown 的格式) 轉成 HTML 網頁。因為強大的 inline 規則以及各式各樣的外掛程式,也有許多人把 ikiwiki 當作Blog 的平台。 轉換的過程其實滿順利的,因為舊的 Blog 都是以 Markdown 寫成,換到ikiwiki 的 Markdown 引擎只需要一點點修改。要感謝 WordPress 可以把資料庫匯出成 XML 格式,轉換只需要簡單的 XSLT 就完成了,我用的XSL 是參考這裡修改,去掉Comment 以及更新 meta的格式而成。 改用文字編輯器來寫 Blog 後,會習慣在 72 行的地方換行,但是在瀏覽器中只要換行就會多一個空白,以前寫網頁的時候遇到中文都要小心的換行才不會讓不該空白的地方出現空白,也不能打開 Emacs 的 auto-fill […]

  • TOP 20 Space-Hungry Packages

    Arch Linux 與 Debian 皆可以在安裝的時候選擇最小安裝,究竟哪一個Distribution 在使用一段時間之後最佔空間呢? 剛安裝完的時候似乎是 Arch比較小一點,但是因為 Debian 套件切的比較細,所以最後可能是 Debian 會比較小。 當初在試用 Arch 的時候寫了小程式來畫出前 20 個最佔空間的套件,並依此來瘦身,結果如下: 兩邊因為安裝的套件種類不同因此無從比較,Arch 的 TeXLive 因為沒有切所以會比 Debian 上較大一點,Debian 上的 ghc6 則是為了測試 xmonad 裝的,Haskell 本身做出來的執行檔就頗大,ghc6 需要 369MB 實在不意外… 底下是製作圖片的程式,實際上是用 Google Chart API 畫的: 把 PKGSIZE_PROG 代換成自己 Distro 的就可以了: Debian: Arch:

  • Cool stuff: Pipeline library

    如何在 C 程式中方便使用 pipeline 呢? Unix pipeline 之父說 Unix 程式的哲學就是「只做一件事,並把它做好」: “This is the Unix philosophy: Write programs that do one thing and doit well. Write programs to work together. Write programs to handletext streams, because that is a universal interface.”― Doug McIlroy, the inventor of Unix pipes 平常有在使用 shell 的朋友想必對 | 這個符號不陌生,他可以把多個指令頭尾相接,各展所長,讓我們可以把各程式的力量組合起來成一個強大的 pipeline。 在 shell […]