作者: Hui-Hong YOU

  • 買了 Apple Wireless Keyboard 2011 日本 JIS 版暨第一次送 Linux kernel patch 就失手

    DSC_1155

    因為在辦公室使用的 Ducky 1087 機械式鍵盤,聲響屢屢受到同事側目(特別在我碼得特別來勁、或遇到解不掉的 bug 時),所以決定忍痛賣掉,這裡說的忍痛不只是心痛,還有左臂長期以來的疼痛。無論如何,我還是需要一個方便工作、好打(或至少不難打)的新鍵盤。

    然後我調查了一下,扣掉會吵到、嚇到人的機械式鍵盤,符合「方便工作」、「好打」條件,再加上「不要 100% 大小」、「我負擔得起」的款式,其實沒多少可選,於是我就買了 Apple Wireless Keyboard(2011年版)。

    照片上有兩「片」鍵盤,沒錯。家裡的 Mac mini 搭配的 Apple Pro Keyboard 在經年累月的耗損之下,也愈來愈會卡鍵、愈來愈難打了,所以一不做、二不休,一次買兩片,宜蘭、臺北兩處用。因為網拍上有很便宜的日本 JIS 式排列版鍵盤,而我本身對日文打字還是有一定程度的需求,所以 JIS 式排列版鍵盤對我來說算是實用。

    Mac mini 搭配 Mac OS X 用 Apple Wireless Keyboard 當然是沒有問題的;但是我平日使用的主力 ThinkPad X230i / Arch Linux / KDE 則不免需要折騰一下。

    雖然它看似可以被 Linux 正常驅動,但是很奇怪的就是 ‘fn’ 鍵沒有作用,這代表我無法使用 fn 鍵搭配四方向鍵操作 Home, End, Page Up, Page Down。

    我追蹤了一下問題成因,利用 bluetoothctl 掃描硬體資訊,發現 hid-apple 模組並未納入 Apple Wireless Keyboard 2011 的 JIS 版,也就是廠商代號 (vendor ID) 0x05ac (Apple)、產品代號 (product ID) 0x0257 不在其中,所以針對 fn 鍵的程式碼未能正確套用在這款鍵盤,這款鍵盤被 Linux 當成了一般的藍牙鍵盤來驅動。

    於是我把缺少的幾行程式補上去、證實可以正常使用 fn 鍵之後,開始了我跌跌撞撞的送 patch 歷程。

    一開始我跑到 Linux kernel 的 Bugzilla 系統去回報,卻沒有看清楚這是給 mainline 使用的,在上面回報 3.12.9 的問題,一開始就錯了,而我沒有確實讀過 Documentation/SubmittingPatches 文件,沒有照正確的格式、方法,只是憑著「我找到解法了」的小屁孩樣的熱血、如無頭蒼蠅般亂竄,還被 Alan Cox 大神回以簡短一行提示,實在是很慚愧。

    接著我改往 linux-input mailing list 上面送 patch,無奈可能還是因為不得要領,過年這幾天還是見不到我的 patch 被維護者 review 的跡象。

    於是我跌跌撞撞地反覆修正我的 patch,最後才發現使用 git format-patch 搭配 git send-email 是最簡單省事的。畢竟 Git 原本就是為了維護 Linux kernel 而生的。

    用 Git 從 The Linux Kernel Archives 抓回 mainline (此時是 3.14-rc1)的 source code 後,先 git checkout -b apple-hid 用一個新的分支來修問題。

    把問題修好後,commit 異動,此時編輯 commit message 請記得遵循規定格式。第一行會被當成 commit 的標題,請照類似這樣的格式寫:

    HID: Add Apple wireless keyboard 2011 JIS model support.

    開頭要標明這份 patch 是屬於哪個子系統 (subsystem),譬如我這次送的問題是屬於 HID (Human Interface Device) 子系統,就要確實標明。

    跨一行後,敘述此 commit 的主要目的、功用等說明。這會被當成 commit 的內文

    Commit 完成後,就可以使用 git format-patch –stdout –signoff master 先以螢幕輸出檢查這份 patch 信件(是的,git format-patch 此指令會輸出一份標準的 Unix mail 格式文件)是否確實遵循規範,如果有錯誤,則可使用 git commit –amend 回去修改 commit message。

    確認無誤後,則使用 git format-patch –signoff master 正式輸出 patch 檔,檔案會以「流水號-標題.patch」的格式命名。

    接著請先跑過 scripts/checkpatch.pl 檢查剛剛產生的 patch 檔還有沒有嚴重的格式問題,再跑 scripts/get_maintainer.pl 找出此次回報 patch 時,應該送給哪個 maintainer、送到哪個 mailing list。接著可以去 subscribe 該 mailing list 取得發文的權限。

    然後就可以用 git send-email –to <mailing-list-email-address> –cc “maintainer-email-address” –smtp-server <smtp-server> –smtp-user <smtp-user> –smtp-pass <smtp-pass> –smtp-encryption <smtp-encryption> <patch-filename> 把 patch 送到 mailing list 並寄送副本給剛剛從 get_maintainer.pl 得知的 maintainer。

    我今晚照這個流程跑,maintainer Jiri Kosina 在幾分鐘內就回覆我格式還有點小問題、需要再改,而我修正之後重發,接著剛剛就被接納了。往後,這款鍵盤在 Linux 上就可以爽爽用了,而我也因此機緣學會了送 Linux kernel patch 的方法,非常高興。

  • WhosCall 退費事件

    一開始聽到這個消息,我很惱怒。

    然後讓我想起了,約一年前看過的公視除夕賀歲大戲「穿越 101」(於 YouTube 收看)。片中陳漢典飾演的主角子超,窮途潦倒到不得不偷便當止飢,卻被之前因為相信神諭而積極幫助過的資源回收婆婆(周遊飾)撞見,教誨「人付出就要有收穫」

    一個五百元的軟體,幫我擋掉了也許是惱人的推銷、也許是會損失五千、五萬、五十萬甚至更高額的詐騙,我覺得非常值得、簡直是超值,並且他們 (GOGOLOOK) 做的很好,WhosCall 無論在功能、效能、UI/UX 都是我用過臺灣產的、最好的 Android 工具軟體。

    最後我能做的,就是給他們留個訊息,加油打氣,並且講明了,我可不會去申請什麼退費。因為我覺得,五百元支持一間認真做出好產品的公司,還嫌太少了。

    如果付出沒有相對應的合理收穫,誰還要努力做事情?

  • 買了 Logitech T620 觸控滑鼠

    為了能夠順暢操控需要水平捲動的場合,像是使用 TweetDeck 與 Plurk,以及不想再因為滾輪的噪音造成別人困擾,還是決定買一隻觸控滑鼠。買了 Logitech T620。

    用到目前非常滿意,面板的有效感應區都可以用來垂直、水平捲動,也就是說照右利者的一般滑鼠使用姿勢,食指只需要在平常所在的左鍵原處做出對應手勢,就可以捲動,不須仿照一般的滾輪使用方式、挪動到中鍵處。

    中鍵是位在滑鼠比較中間的位置、以兩指同時按下觸發,雖然比左、右鍵罕用,但是需要用到時還是不能沒有它。這樣的設計我覺得算是個折衷,避免誤感應,也保留了可用性。

  • Vim 按鍵助記圖

    wasd-inkscape-104-vim

    原本想要去 WASD Keyboards 訂作專用鍵帽(這鍵盤圖就是用他們家提供的版型做的)、或是找貼紙廠商做鍵盤貼紙,無奈都所費不貲,對於我這個窮到連鬼都不想抓的人來說,特地去做這些 Vim 推廣輔具的代價實在太高。不過既然圖做了都做了,單純拿來當成 cheatsheet 好像也還過得去,就還是放出來分享給大家用。

    PDF & SVG 打包檔:wasd-inkscape-104-vim

    製作過程中參考了 [Graphical vi-vim Cheat Sheet and Tutorial],在此謹致上我的感謝。有的按鍵我自己覺得大概都不會用到,所以就沒有照樣標上去了。

    有些按鍵大小寫做的事情類似、但是受影響的標的不同,所以標在中間,否則標在上方的代表是大寫或需同時按住 Shift 輸出的符號,下方則代表小寫及一般狀態下的符號。

    助記名稱是我當下直覺想到的,如果不喜歡,歡迎下載回去改。但是就請不要叫我改我自己的版本了。

  • 用 Motion 搭配 webcam 製作來客報知器

    最近換到新辦公室,空間因素使然,需要留意有無訪客,便想裝個來客報知器。其實買現成的產品最簡單,但是工程師魂仍驅使我去 DIY。

    拿了閒置已久的贈品 webcam,搭配 Motion 軟體,裝在我平日拿來開發用的 Eee Box 上,便成了一個很好用的來客報知系統。

    這個 webcam 成像品質、畫素等各項性能非常低落,平日根本不會想拿來開視訊會議之類的,但是用在偵測畫面變化、位移這種無關人類視覺的場合,其實已經超級夠用,加上它是軟管支臂,所以在我架設的環境裡更顯好用。

    Motion 軟體可設定的選項超多,透過適當設定,它不單可以作來客報知器,還可以是監視攝影系統、網路 live 即時轉播系統,只是這些都要透過它的設定檔參數來調,沒有 GUI。在此紀錄一下我針對「來客報知器」所做的設定:

    # Webcam 畫面寬度,看我下面的設定值就知道這隻 webcam 拿來開視訊有多不堪用
    width 176
    
    # Webcam 畫面高度
    height 144
    
    # 畫面當中有多少畫素改變才被觸發「有動作」事件,因為我的 webcam 畫素之少,所以要調少一點
    threshold 750
    
    # 在觸發「有動作」事件後,若經過 10 秒都不再有動作,則視為「事件結束」,我掃描的門口因為偶爾會有人駐足、找同事洽談,所以把值從起初的 3 拉到 10 秒,以免一直觸發「有動作」事件
    gap 10
    
    # 不要儲存動作圖像,我只需要在「有動作」事件時發出鈴聲,不需要儲存當下畫面
    output_normal off
    
    # 觸發「有動作」事件時,播放鈴聲
    on_event_start aplay /usr/local/share/sounds/doorbell/doorbell-5.wav
  • 把 Arch Linux 由傳統 BIOS 換用 UEFI

    因為事前有先弄清楚 GPT, UEFI 等概念,所以這種在自己身上開刀的玩法,才有把握不先備份就直接來玩真的。

    我用了 Archboot 開機片,因為可以有個以 UEFI 開機的臨時開刀作業環境,還有  GParted Live CD 幫助我處理調整分割區。

    1. 先用 gdisk 把 MBR 分割表轉為 GPT
    2. 再用 GParted 挪出一塊 100MB 的空白分割區
    3. 接著把這塊分割區 id 用 gdisk 設為 ef00 (EFI System),再用 mkfs.vfat 格式化
    4. 在 Archboot 底下 chroot 後掛上 /boot/efi/,再重建一份 x86_64-efi 的 GRUB
    5. 更新 grub.cfg 設定檔

    雖然中間有些卡到,但是都只是指令不熟的關係,因為觀念正確,所以最後的結果是成功的。

    改用 UEFI 有什麼好處?暫時還沒感受到,只是單純想玩、覺得這好像是跟上時代而已。