成立 PCMan Facebook 專頁

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

2016年2月7日 星期日

PIME 輸入法架構 + 新酷音輸入法 v0.04

新酷音輸入法 for Windows 有新版本了 ,但這次沒有新功能,而是移植到了新的輸入法平台 PIME,改為用 Python 語言開發,並且換成 server/client 架構。經過連日開發,終於達到接近日常可用的狀態。(但很多細部功能和設定還沒有效果)

PIME 輸入法安裝程式,預設將會安裝新酷音輸入法的模組。
在此可以下載最新的 PIME v0.04: https://github.com/EasyIME/PIME/releases/download/v0.04/PIME-0.04-setup.exe



 

本次並內建了新的新酷音輸入法設定工具 。對使用者來說沒有顯著的差別,並沒有新功能 (甚至部份功能還沒完成),但是這個工具完全是使用 HTML + JavaScript 撰寫。(但讀寫設定檔的部份,無法用標準 JavaScript 達成,不得已用了一點微軟特有的 ActiveX 元件搭配)

很多朋友應該覺得奇怪,先前我移植了新酷音輸入法到 TSF 架構之後,為何遲遲沒有繼續開發。一方面當然是因為時間不太夠,但另一方面則是發展重心移動到 PIME 平台去了。
對使用者來說,這樣的重寫意義不大,畢竟功能沒有改善。但對於開發者來說,這是意義相當重大的改變。過往開發 Windows 輸入法的門檻很高,需要 C++ 和 COM  的技術,還要了解很多低階的系統細節,但藉由 PIME 的包裝,撰寫輸入法模組的開發者,只需要會寫 Python 即可,不需要了解 Windows TSF 底層細節,大大降低一般開發者加入維護的門檻。
設定工具改用 JavaScript 和 HTML 重寫也是一樣的原因,降低開發的門檻。
而改為 server/client 架構可以增進穩定性,也讓除錯和開發變得快速許多。現在看不到顯著的好處,但是對於未來長遠的維護和開發,這樣的架構是大大有利。

新年新氣象,就是要用新架構,開發新軟體!
祝大家新年快樂!

PIME 系統架構介紹:https://github.com/EasyIME/PIME/blob/master/HACKING.txt
開發輸入法模組範例:https://github.com/EasyIME/PIME/tree/master/server/input_methods/meow

(p.s. 吃自己的狗食:本文在 Windows 10 系統下,使用 PIME 版的新酷音撰寫完成。)

2016年2月1日 星期一

PIME Windows 輸入法平台釋出 v0.03

先前曾經有在 COSCUP 2015 演講過我開發的 PIME 輸入法平台,但隨後沉寂了一陣子。這兩天有空,終於重新整理了架構,出了新的版本,並且提供了全新的安裝程式,裝好即可使用。
https://github.com/EasyIME/PIME/releases/download/v0.03/PIME-0.03-setup.exe

有興趣研究細節的朋友,這裡有程式碼:
https://github.com/EasyIME/PIME

還新增了一份 Hacking guide 解說了程式的架構跟目錄結構:
https://github.com/EasyIME/PIME/blob/master/HACKING.txt 


 PIME 是在 Windows上使用 Python 3 開發 TSF 中文輸入法的平台,目前支援到 Windows 10,並且能支援 Windows app container (Metro mode)。可以讓開發者在不了解系統細節的情況下,單純使用 Python 就能實作支援 Windows 的輸入法模組。

本次重要修改如下:
  • 安裝程式自帶一份 python 3.5 (32-bit) 環境,不需要使用者手動安裝 python,也不影響系統上已有的其他 python 版本,不須考慮 32/64-bit 混合使用問題。
  • 將 Win32 API 相關的操作全部從 python code 中移除,改用 C++ 的模組封裝在 libpipe 內。這有兩個巨大的好處
    • 不再需要安裝 pywin32 模組
    • 若要移植 PIME 架構到其他語言 (例如 Node.js),可直接用 ffi 載入 libpipe 來處理系統底層的部分,而不用自己撰寫,使得移植變得可能而且相當簡單。
  • 改進安裝程式,正確啟動 server,安裝完即可直接開始使用
 想測試的朋友 (尤其輸入法開發者),歡迎按此下載安裝程式:
https://github.com/EasyIME/PIME/releases/download/v0.03/PIME-0.03-setup.exe

理論上,使用 github 上釋出的程式碼可以完全重新編譯整個套件,但因為有不少元件,不但都要放到正確的位置,還要使用指令分別手動註冊輸入法模組,很難全部手動正確設定強烈建議使用包好的安裝程式,裝好了再把你想修改的檔案換掉即可。

2015年12月19日 星期六

[教學] Raspberry Pi 搭配力量感測器 (force sensing resistor)

前言

Raspberry Pi 是像名片一樣大小的低價電腦 ,搭配各種外接裝置,能做許多應用。最近對這類開發板有興趣,於是我也買了一片 Raspberry Pi 2 來學習使用。原計畫的應用要搭配可感測壓力的 sensor,偵測使用者施壓的力量大小,但過程中遇到許多困難,尤其是類比訊號的 sensor 適合 Arduino 用,但接上 Raspbery Pi 無法直接使用。基於這方面的中文文件較少,逐一摸索克服之後,決定寫一篇教學,分享給有同樣需要的朋友,可以少走一些冤枉路。


本文使用的硬體裝置

  1. Raspberry Pi 2 開發板
  2. 類比-數位轉換器 (ADC): Microchip MCP3008 
  3. 力量感測 (FSR): Interlink FSR 406
  4. 麵包板及各種杜邦跳線
MCP3008

FSR 406

詳細實驗過程

類比-數位轉換器 (ADC, analogue to digital converter)

坊間買得到的 sensors,部份是輸出類比訊號 (例如 linear hall effect sensor、溫度感測...等等),而 Raspberry Pi 無法讀取類比訊號 (Arduino 可以),要額外加裝一枚 ADC  晶片,才能讀取。但這是值得的投資,可以在不用買 Arduino 轉板的情況下,讓 RPi 可以玩 Arduino 的類比 sensors。
推薦大家用 Microchip MCP3008,因為外國網站的教學幾乎都是這款,資料好找。缺點是電子商場不常賣。拍賣網站可取得,但推薦 RS components 網站訂購,便宜不少還免運費 (缺點是一次一定要買兩顆以上,到貨要一週)
MCP3008 是 10-bit 的 ADC,可以將輸入類比訊號轉成 0 - 1024 之間的數值,透過 SPI 界面 (不是一般 GPIO) 讓 Raspberry Pi 讀取

連接 MCP3008 到 RPi 有兩篇不錯的教學可以參考 (請搭配下列注意事項):
https://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi/overview
http://atceiling.blogspot.tw/2014/04/raspberry-pi-mcp3008.html#.VnWKzHYiLmU

有幾點要特別注意的

  1. 這兩篇適用舊款 Raspberry Pi 一代,若是 RPi2,照著前述教學文件接,是完全不會動的,因為 GPIO 腳位改了。請照新的 RPi2 腳位圖連接,接法相同,但所有 SPI 相關的 pin 位置幾乎都不同。
  2. Rasbian 系統預設沒開 SPI 界面,需要手動開啟 (可用 raspi-config 工具,在 Advanced 選項裡面開啟 SPI)
  3. 若 SPI 無法運作,可用 spi-test 程式檢測。需要注意的是,檢測時要用一條母-母跳線,把 SPIO MOSI 和 SPIO MISO 這兩個 pin 直接對接起來。這個動作很容易漏掉,會造成測試失敗。(原理是直接把 SPI 輸出 loop back 回輸入,也就是你送出去的資料會繞一圈送回來又送給自己,所以理論上只要 SPI 有運作,一定收得到資料,故可用來檢測)

力量感測器 (force sensing resistor)

感測的是「力量」而非「壓力」,偵測範圍約 10 g - 10 Kg,在 sensor 上有效區域施力都能偵測,但精度不佳,且無法判斷施力點位置。主要的生產商是 Interlink,型號從 FSR 400-408 有多種尺寸,但一般店面少見大尺寸,款式很少,建議網拍購買較便宜。(本文使用 FSR406)
需要特別注意的,是 FSR 406 的連接方式。FSR 尾端的接頭"理論上"直接插上麵包板即可用,但這樣使用容易折彎連接頭造成 FSR 損壞或訊號干擾,建議還是用連接線。不幸的是,一般接 sensor 和麵包板用的杜邦 2.54 mm 跳線母頭,無法接上這款 FSR。經實驗可使用 JST (XH-style) 2.5 mm 的母頭代替,可密合得很好。建議購買這種線,然後在另外一端「自行壓製」杜邦 2.54 mm 的公頭,就可以製作出能從麵包板轉接到 FSR 406 的延長線了。
XH-style 的 JST 2.5 mm 線,以及其塑膠頭
FSR 406 的尾端接不上一般杜邦 2.54 跳線母頭,我問了三間電子商場,都說沒這種接頭,建議我直接焊接。我不死心,把每一種母頭都拿起來試接,發現 JST 2.5 mm 的正好可以密合,如圖,接得很好。
自行購買的杜邦 2.54 公端子和塑膠套,準備壓在 JST 2.5 線的另外一端
把 JST 2.5 mm 的線材,另外一端自行壓上杜邦 2.54 端子,就成了特製的延長線了,可以順利插入到麵包板上。理論上壓製線材,有專用的端子鉗,但是售價太過昂貴,我又很少用。所以最後是使用尖嘴鉗和蠻力土法煉鋼。一樣可以壓緊,也能用,但是形狀較為醜陋,而且我壓壞了一個...

FSR 連接方式 

連接 FSR 可以參考這篇教學,照著接即可,只有幾點要注意
  1. 原教學是把電壓變化的類比訊號,接到 Arduino 的訊號輸入,而我們是要接給 ADC 讀取轉成數位訊號,所以是要改接到 MCP 3008 的 channel (0 - 8 都可以,程式內可以控制要讀哪個 channel)
  2. FSR 只是一個電阻,本身不發出訊號,但它受到壓力電阻會變小。所以施加電壓,通過的電流大小,就可以反映出所受到的力量 (但不是線性變化)。不過我們不能直接讀電流大小,所以需要額外串聯一個電阻 Rm 做 voltage dividing,來讀取 Rm 兩端的電壓,而這個電壓就是我們給 ADC channel 的訊號輸入。(原理是:當 FSR 受到越大壓力,電阻變小,則通過的電流越大,此時串聯的電阻 Rm 兩端就會有較高的電壓 V = I * Rm 所以我們讀取 ADC,就會讀到比較大的數值了)
  3. 施加外力大小,和 FSR 的電阻或可以量到的電壓都不是線性關係,請見官方文件有曲線圖
  4. 串接的電阻不同,會使得能夠測量到的數值範圍改變,雖然教學文件建議 10K歐姆,不一定適合每種應用,需要實驗。
我最後連接好的結果長這樣,麵包板左下角超出畫面外的紅線和黑線,是連接到 FSR406 的特製 XH 2.5mm 跳線。麵包板中央的黑色晶片是 MCP3008 ADC


如果還需要 FSR 更完整詳細的資訊,可參考這篇 Integration Guide

程式範例


#!/usr/bin/env python3
import time
import spidev

# Read SPI data from MCP3008, Channel must be an integer 0-7
def ReadADC(spi, ch):
    if ((ch > 7) or (ch < 0)):
       return -1
    adc = spi.xfer2([1,(8+ch)<<4,0])
    data = ((adc[1]&3)<<8) + adc[2]
    return data

if __name__ == "__main__":
spi = spidev.SpiDev()
spi.open(0,0)

try:
while True:
value = ReadADC(spi, 0)
print("ADC", value, float(value)*100/1024, "%")
time.sleep(0.1)
except KeyboardInterrupt:
pass
spi.close()

省錢小撇步

使用麵包板時,經常需要用跳線連接。市售跳線盒很方便,有多種長度彩色的短線可用。或也可用杜邦公-公跳線取代,但跳線盒一個通常要 80 - 150 元不等,而杜邦跳線現成的一包十條約 65元,長度通常太長,很難使用。
推薦可以買單芯線替代,用剪刀就能輕易剪出所需長度,再兩端剝皮,可做麵包板跳線,三公尺才約台幣 10 元,非常划算又好用。(剝皮用剪刀輕輕的就可以剝,小心一些並不需要專用鉗子)
把公-公跳線都換成單芯線,清爽很多,才花不到十元。缺點是我只買了一種顏色。後來我把接地的那幾條用奇異筆塗成黑色,就不會搞錯了... =.=  其實應該要買白色的,這樣需要什麼顏色的線就自己塗色就好了 XDD


以上是本次實驗的經驗分享,希望對有在玩 RPi + FSR 的朋友有幫助。

2015年9月21日 星期一

成立 PCMan Facebook 專頁

之前常被許多網路上的朋友要求加 Facebook,但是數量過多難以管理
加上大部分我幾乎都不認識,實在無法一一過濾加入,所以決定成立 PCMan FB 專頁
未來長篇的文章還是會放 Blog 上,而平常的小動態會放在 FB
有興趣的朋友歡迎追蹤 https://www.facebook.com/pcman.im
上面的內容沒有固定的主題,就一般 FB 會放的東西 XD

2015年9月20日 星期日

[吉他譜] 亂彈阿翔 - 完美落地 (附前奏詳細指法)



一直很喜歡亂彈阿翔的完美落地這首歌,正好最近在學習抓歌,又找到了這個好聽的不插電版本,就試著練習抓了。
原曲是 G 調,網路上找得到的譜也多是 G 調,但是轉成 C 調會更好彈,而且方便降 key,所以這裡提供的是轉成 C 調之後的版本。吉他手阿偉的 Solo 對我來說太困難了,所以就沒有抓,只抓了前奏和尾奏的部份。

完美落地 (翻滾吧 ! 阿信 電影主題曲)

前奏及尾奏詳細指法 pdf 檔:


作詞/作曲:亂彈阿翔
key: G, play: G, capo: 7

前奏 (C G Dm7 Fm) x 2

C          G
從現在我不會再逃避

       F          Am  G
重新的喚起 埋葬在我心底的血液

C          G
沉住氣 我的心不再移

       F          Am  G
屏息不放棄 慢慢的朝著我的夢前進

Am           G
忘了吧! 混亂的事不再提

Am           G
放了吧! 把心思變唯一

C         G
我會用盡所有力

Am            G
奮力的躍起在天際 迎著光明

C         G
我會更用力呼吸

Am            G
飛到另一個燦爛天空 完美 落地


間奏 F Am F Am G G x 2

C          G
我相信有努力會開啟

      F         Am  G
久違的光明 老天爺總是會看的清

C          G
重新又回到最初自己

      F           Am  G
每一次練習 我只想朝著我的夢前進

Am           G
忘了吧! 混亂的事不再提

Am           G
放了吧! 把心思變唯一

C         G
我會用盡所有力

Am            G
奮力的躍起在天際 迎著光明

C         G
我會更用力呼吸

Am            G
飛到另一個燦爛天空 完美 落地


尾奏 C G Dm7 Fm C

2015年9月10日 星期四

好書推薦 - 台灣的兩面鏡子:從中國、日本缺什麼, 看台灣如何加強競爭力

最近剛和研究所同學去了日本旅遊,出發前讀了這本書
日本人近藤大介寫的「台灣的兩面鏡子:從中國、日本缺什麼, 看台灣如何加強競爭力


作者為曾經派駐中國的日本人,長輩在台灣出生,他也曾造訪台灣。近藤大介藉著自身觀察,試著探討中日台三國的民族性、歷史、和文化差異,以及造成的影響。雖然我不完全認同書中全部的內容,還是覺得本書值得一讀。多了對日本民族性的了解,實地造訪日本,除了看知名景點之外,就會看到更深一層的東西。
在作者的描述當中,日本在經濟泡沫化之後,失落的二十年,使得財富和權力集中在老人身上。年輕人努力工作卻買不起房,而日本領先全球的許多成就,使得許多日本人開始只關心國內,而相對缺少國際觀,不喜歡出去外面看看,也喪失了向外開拓的勇氣,成了溫馴的草食動物。年輕人最關心的事情,不是議員的選舉,而是「AKB48 美少女選拔」。走到秋葉原,看著滿街的AKB48海報和動漫店,這話雖然聽來偏頗,或許也有幾分真實。連咖啡館都用鋼彈和AKB48作為招牌。


日本是已經邁入高齡化的國家,在大阪和東京的街頭,觀察著往來的群眾,可以明顯發現年輕族群和老人的差別。老人或是中年一輩,仍然保持著固有的日本傳統文化,重視禮節和規矩,服務業總是親切帶著微笑,有種特別的氣質。在車上不用手機,甚少交談,表情嚴肅,給人安靜內斂,又帶點壓抑的感覺。
列車到站,看著湧入的年輕高中生,各個濃妝豔抹的超齡時髦打扮,穿著不能再短的裙子,互相嬉鬧著,滑著智慧型手機,和一旁安靜的上班族形成矛盾的強烈對比,即使那就是再過幾年他們就要扮演的角色。我思索著為何會有這樣的差別?日本經濟泡沫化之後,失落的二十年,失落的或許不只是經濟而已,還有日本的傳統價值觀?也或許是高中時期,是他們最後能如此「不壓抑」的年紀了吧?
也不過約一世紀前,當時人們還信仰神道教,相信天皇是天照大神的後代,武士們誓死奉獻天皇,如今現代化的日本,天皇只剩下象徵性質,武士已經消失,而人們雖然還是會去神社祈福,卻已經不再有人相信天皇是神而不是人類。這麼短時間內經歷這麼劇烈的變革,也難怪日本處處充斥著矛盾吧!有趣的是,仔細看熱門的動漫模型「鋼彈」會發現,那機器人造型,根本就是脫胎自日本武士的盔甲。
對這個國家有更多了解之後,下次再去日本,走在街上,就不再是為了「趕去下一個景點」或是「找地方吃飯或買紀念品」而是可以細細品嚐周遭那獨特又矛盾的「日本風味」。: )

2015年8月28日 星期五

[吉他譜] 田馥甄 - 小幸運 (詳細指法+和弦)



剛開始學抓歌,第一次抓完整首,分享給需要的朋友,若有錯誤請多指教!
原曲 F 調,轉成 C 調就沒封閉,且副歌會變成卡農,對初學者比較簡單
但是聽得出來原曲應該沒 capo,因為有兩個音太低,夾了 capo: 5 彈不出
所以找了相近的音代替,和原曲有些微不太一樣


小幸運 (電影 我的少女時代 主題曲)
作者/歌手:作詞:徐世珍、吳輝福  作曲/編曲:Jerry C  演唱:田馥甄

前奏、尾奏及主歌詳細指法 (pdf 檔):
https://drive.google.com/file/d/0B4BhmC8V2mivcmNKanNSU0lMX3M/view?usp=sharing

前奏 C   Dm7  G7  C

C        Dm7
我聽見雨滴 落在青青草地

G7        C
我聽見遠方 下課鐘聲響起

Am       D        G7   C
可是我沒有聽見你的聲音 認真呼喚我姓名

C          D
愛上你的時候 還不懂感情

G      C
離別了 才覺得刻骨銘心

Am           D     G7         C
為什麼沒有發現 遇見了你 是生命最好的事情

F             G    Em           Am
也許當時忙著微笑和哭泣 忙著追逐天空中的流星

F
人理所當然的忘記

F         F           G
是誰風裡 雨裡 一直默默守護在原地

      C
原來你是 我最想留住的幸運

G               Am
原來我們 和愛情曾經靠得那麼近

Em         F     C
那為我對抗世界的決定 那陪我淋的雨

D          G
一幕幕都是你 一塵不染的真心

C
與你相遇 好幸運

G        Am         Em
可我也失去 為你淚流滿面的權利

F                C
但願在我看不到的天際 你張開了雙翼

D          G        C
遇見你的注定 她會有多幸運

Am        D
青春是段跌跌撞撞的旅行

F       C
擁有著後知後覺的美麗

Am        D        F          C
來不及感謝 是你給我勇氣 讓我能做回我自己