2016/09/30

讀後佩服:風格練習(Exercices de style)by 雷蒙.格諾(Raymond Queneau)

《風格練習》原文書於1947年出版,作者受巴哈《賦格的藝術》啟發靈感,問世後引發各種跨界效應,譯本超過三十多種語言。

書名:風格練習(Exercices de style)
作者:雷蒙.格諾(Raymond Queneau)
譯者:周丹穎
出版社:一人出版社

相同一段情節,你能以多少種寫法表達呢?本書作者展現了九十九99種手法,極盡想像之能事,包括倒敘、亂敘、隱喻、邏輯分析、頌歌、浮誇風、哲學風、集合論、肉販黑話、諧音、矯揉風、詩詞歌賦、史哲理數等等,千變萬化,將法文風貌嶄露無遺,帶有遊戲趣味,深具互動性,嘗試創意寫作,不僅是創造,也是破壞舊式看法。看著讀著,見識作者深厚的功力,已成為法語修辭、創意寫作及外語翻譯的範本,成書年代已久,但現在讀來仍深有啟發。

不得不佩服譯者周丹穎,不僅要懂法語,也要懂法國文化,以及各種隱語黑話,原文書既然要練習,還採用了其他語言的特質,混合揉入文章,諸如日語化、中國古文、自由體詩、漢儒風、宋詞、舊體詩等等,嘿,篇幅雖短,但費時耗力,字句斟酌不知要花去多少心血。

中文譯本首度問世,特別邀請唐捐、胡晴舫、張亦絢、孫梓評、王聰威、楊佳嫻、臥斧、李桐豪、沈意卿九位台灣作家一起來練習,展現個人「台風」,同樣以一段情節為依歸,分別寫出不同風格,包括編註體、雜阿含體、偽樂評風、什麼都不寫派、適得其所體、爆料公社體、靠北體、一則被不停打斷而肝腸寸斷的徐志摩體。

底下選錄幾則:

1. 筆記Notations
S線公車上,尖峰時刻。一名二十六歲左右的男子,軟帽繫繩,而非絲帶;脖子過長,像是被人往上拉過。人們下車了。此男對身旁的乘客發火。他責怪他每次一有人經過就推擠他。想裝兇的哭腔。男子由於看到一個空位,火速衝了上去。

兩小時後,我在聖拉札車站前、羅馬廣場 上又遇見他。他和一個同伴在一起,同伴對他說:「你應該請人在你的風衣上多加一顆扣子。」他指給他看應該加在哪兒(領口處),並告訴他為什麼。

4. 隱喻Métaphoriquement
日中,一隻拔了毛的長頸雞,被扔進白腹甲蟲裡一堆旅遊中的沙丁魚間,忽然訓斥了其中安靜的一尾。牠的言語漫布空氣中,浸潤了一抹抗議的氣息。接著,這雛鳥般的雞,為一種空無所引誘,撲上前去。
當天,在一方陰鬱的城市荒漠裡,我又再次看見了牠,正因為某顆無關緊要的扣子,被挫了銳氣。

5. 倒敘Rétrograde
你應該在你的風衣上加一顆扣子,他的朋友對他說。我在羅馬廣場中央又遇到了他,在任他貪婪地衝向一個座位,與他各分東西了以後。那時他剛因另一位乘客的推擠而出聲抗議。他說,那人每次有人下車就推撞他。這個瘦削的年輕人戴著一頂可笑的帽子。這事發生在當天中午,在滿載的S線的車尾平台上。

15. 另一造主觀觀點Autre subjectivité
今天在公車上,車尾平台那兒,我身邊站著一個乳臭未乾的小毛頭──幸好大家沒生太多這款的,不然我有天恐怕會忍不住宰了一個。這個小子,大約二十六到三十歲,特別讓我火大,這比較不是因為他像拔光毛的火雞一樣的長脖子,而是他帽上絲帶的類型:絲帶被換成一種茄子色的細繩!啊!混蛋!實在讓我噁心得不得了!那個時段車上有很多人,我就趁著有人上車或下車的推擠中,藉機用手肘撞了他的雞肋幾下。在我決定多踩他幾腳、給他點「腳」訓之前,他就膽小地落跑了。要不是這樣,我還會為了激怒他,跟他說他的風衣領口少了顆扣子,太開了。

33. 舊體詩Alexandrins
僕僕斯車追日影,
青年長頸帽冠奇。
不疑旅客摩肩立,
卻道鄰人刻意欺。
鬼哭神號聲有怨,
狼奔鼠竄步無姿。
同窗衣扣黃昏驛,
再歎人情世道離。

41. 浮誇風Ampoulé
在晨曦玫瑰色的手指開始龜裂之時,我如迅速擲出的標槍,上了一輛體型龐大、有著牛兒般一雙大眼、行車路線曲折的S線公車。我以如備戰的印第安人般的精確和敏銳,注意到在場有個年輕人,脖子比腳程快的長頸鹿還長;他有凹痕的軟氈帽,則如某風格練習的主人翁一樣,裝飾著一條編繩。預示著不幸的、胸如碳黑的不睦女神,現身來用她因牙膏闕如而臭氣熏天的口──不睦女神,我說,現身來散播她惡性的病毒,在這帽上繞有編繩、長頸鹿般的年輕人和一名面色慘白、帶優柔寡斷之色的乘客之間。前者用以下話語向後者表示:「噫!惡人,您看似故意往我的腳上踩!」語畢,帽上繞有編繩、長頸鹿般的年輕人,很快到別處去坐下了。

稍晚,在氣勢雄偉的羅馬廣場上,我又看見了那名帽上繞有編繩、長頸鹿般的年輕人,身邊傍著一名宛如美姿美儀評審般的同伴。這同伴正對他發表著以下我得以由我靈敏的耳朵親聞的批評。那針對帽上繞有編繩、長頸鹿般的年輕人最外一層衣服的評語乃是:「你也許應該在其環繞的外緣,以增添或往高處提升一顆鈕扣,來減少領口的開敞度。」。

45. 內心獨白Apartés
塞滿乘客的公車來了。希望我不要錯過這班車,運氣好還有我的位子!乘客之中,有個人表情滑稽、脖子超長的戴著一頂 繞有某種取代絲帶的細繩的軟氈帽這讓他看起來很自命不凡,忽然間喲他不知發什麼神經叱責起他身邊的乘客那人沒注意聽他在嚷啥,他責怪那人故意踩他看似要跟 那人單挑,但馬上就畏縮了他的腳。然而公車裡有空位了我就說吧,他便轉過身去,跑去坐下了。

大約兩小時後莫名其妙也還真巧,他和一個朋友和他同款的蠢蛋在羅馬廣場那兒,朋友用食指指他風衣上的一顆扣子給他看哎他能跟他講些什麼呢?

53. 宋詞Sonnet
頸長面如瓷,帽帶編成辮。草包日乘車,滿載時分現。
此線喚哀思,車尾平台淺。擦膀復挨肩,炫富點菸捲。
長頸青年上露台,怨嗔鄰客踏蹄哀,怯夫見位遂逃開。
飛轉金烏遲玉兔,回程又見頸長孩,潑才為扣費疑猜。


參考資料:

2016/09/28

讀後摘要:《好音樂的科學:破解基礎樂理和美妙旋律的音階秘密》

書名:《好音樂的科學:破解基礎樂理和美妙旋律的音階秘密》
原書名:How music works:The Science and Psychology of Beautiful Sounds, from Beethoven to the Beatles and Beyond
作者:John Powell(約翰•包威爾)
譯者:全通翻譯社
出版社:大寫出版
出版日期:2016年6月21日

寫推薦文實在很難,這件事一直以來困擾著我,我不認識你、你不認識我,要怎麼設定閱讀這篇文章的對象呢?如果不加設限,越廣越好,嘿,那可需要高超的素養與文筆,才能寫出適當的介紹文,超出我的能力;所以只好把對象設定成尚未閱讀這本書的自己,跟過去的自己一個人對話,以簡單篇幅、摘要描述本書內容,嗯,這樣就簡單多了。

本書作者兼具物理學博士學位、也有音樂作曲碩士學位,太厲害啦,遊走於科學與音樂之間,也因此才能寫出這本超棒的入門書;如同書名《How Music Works》所說,這本書要以科學陳述來解釋音樂相關的種種問題,同時了解理性認知與感性體會。

音樂不僅是藝術創作,其背後也有堅實的物理定律、工學、科學基礎。聲學的技術書籍,早已很多,但都含有大量的複雜圖表,而這本書卻能以淺顯易懂的圖表和口語描述,讓讀者了解聲音的原理。

第1章,介紹音樂到底是什麼,樂音的組成:響度、時值、音色、音高,音的命名,標準音頻率的制定。

第2章,一連串音高的上下起伏(音程),一般人唱有些偏高有些偏低,好歌手則有正確的上下起伏,若擁有絕對音感,就能與標準音相符。

第3章,樂音與噪音,聲音是空氣波動,振動體能製造出重複的規律波動時,才是樂音,而圓柱體和桿狀物,最容易辦到,如長笛、豎琴。解釋琴弦振動時的基本頻率與泛音。

第4章,音色,不同樂器雖發出同樣基本頻率的音,但因為泛音不同,所以會發出不同的音色,例如木琴與薩克斯風。

第5章,不同樂器類型的發聲方式,豎琴、吉他、小提琴,管風琴、小哨笛、單簧管,鍾琴、鋼琴,最後介紹電子合成器。

第6章,音量,聲波如何結合在一起,響度與聲音的頻率和時值的關係;如何測量聲音強度與響度,解釋愚蠢的分貝系統,最後介紹phone與sone系統。

第7章,和弦與和聲,主旋律與伴奏,為什麼某些音一起演奏時會比較好聽,持續長音,琶音,對位法。西方與非西方音樂的差異,複音樂器,單旋律樂器。

第8章,音階與音級,曲調,八度,十二等分的音程,只選七個音,大調,小調,轉調;五聲音階,如何調音調成五聲音階。平均律,音不固定的樂器,音頻固定的樂器。

第9章,曲調與感覺,大調音階與小調音階,包威爾醜怪豎琴,自然小音階、上行旋律小調音階、和聲小音階。為音調命名,CDEFGAB,各種調子並沒有情緒上的差異,而是轉變本身帶來情緒衝擊。選擇調子:樂器的設計、音域、作曲者的想像、絕對音感等。各種古代調式,異樣的風味。迷思:即便有平均律,不同調子仍給人不同的感受;打破迷思:調子本身沒有情緒,但變換調子會改變情境。

第10章,節奏、律動速率、拍子強弱;樂譜,調號、音符、小節,節拍器,

第11章,創作音樂,音樂天分的迷思,選擇樂器,作曲;古典樂曲的命名,交響樂、協奏曲、奏鳴曲。指揮的收入,即興創作。

第12章,聆聽欣賞音樂,音樂廳的音響效果,高傳真,錄音系統,黑膠唱片與CD,類比和數位,CD與MP3,家庭音響發燒友。

第13章,音程命名,調音成五聲音階,平均律的計算,各大調的音組。

最後,若想要一本輕薄短小的樂理書,可看看《基礎樂理》,作者張錦鴻。

2016/09/27

自製抽線盒

製作電子專案時,需要各種外皮顏色的電線,線若捲成線軸狀放在一起,想要時只要抽拉出來並剪斷即可,甚為方便。

現成產品,看起來非常漂亮。

不過還是自己做吧,先拿個適當的盒子,我的是個紙盒,容易鑽孔、裁切。
兩側鑽孔,筆刀、螺絲起子、斜口鉗,什麼都好,反正就鑽個孔。
穿過一條繩子,然後套入線捲,盒子前方也鑽出好幾個孔,拉出電線。
嗯,線捲糾纏不清。再裁切出幾塊適當大小的紙板,隔離開來。
闔上盒子,綁上兩條橡皮筋固定一下,呵,真陽春啊。
呵,雖然不是挺好看的,但還OK吧。

2016/09/24

【翻譯新作】Arduino穿戴式裝置專案製作(Arduino Wearable Projects )

嗨,我翻譯了一本書,在此敬告舊雨新知。

書名:Arduino穿戴式裝置專案製作
原書名:Arduino Wearable Projects
作者:Tony Olsson,瑞典馬爾默大學教師,授課主題包括多種設計領域,以實感原型和穿戴式計算裝置為中心,研究方向包括觸覺互動和電子觸覺溝通。除了在大學工作,也是獨立藝術家∕設計師和作者。
譯者:我
出版社:碁峰
出版日期:2016年9月18日
頁數:240

PS 全彩印刷喔。

內容簡介:
一開始先帶您認識基本電子元件,包括LED與感測器,學會建構電子專案的基本知識。然後實際動手;打造第一個穿戴式電子裝置,從自行車手套開始,這雙手套能夠提昇您在夜間騎車的安全性;接下來製作LED眼鏡,以及酷炫的GPS手錶;另外也會鑽研其他類型的專案,包括無鑰門鎖、可配戴在身上的NFC標籤健身資訊追蹤裝置、以及具備Wi-Fi無線連網能力的Spark開發板;最終專案,將會結合上述種種概念,建構智慧型手錶,採用技術含有健身資訊、網路通知功能、GPS。

學習目標:
.定義穿戴式運算,學習基本知識
.利用Arduino開發穿戴式裝置原型
.穿戴式裝置建構過程,所需要的設計程序與步驟
.深入了解適合開發穿戴式電子裝置的材料與材質
.製作互動式自行車手套、GPS定位器手錶等穿戴式裝置
.學習程式設計,撰寫人機互動功能
.學習如何經由藍牙和Wi-Fi無線技術,連接穿戴式電子裝置並傳輸溝通
.親手製作的實際經驗,設計個人化風格

目錄:
第1章 初探Arduino與燈光閃爍
介紹如何安裝開發環境的基本步驟,如何起手開始撰寫程式,也會建構我們第一個電子電路:控制LED。

第2章 感測器
介紹如何連接感測器並溝通,從感測器取得資料;也會介紹各種數位與類比感測器,簡單的、複雜的都有。

第3章 自行車手套
引領讀者建構本書第一個專案,目標是打造自行車手套,運用LED並說明如何操控,並且介紹感測器進行簡單的手勢辨認。

第4章 LED眼鏡
學習如何打造能受程式操控的LED眼鏡,鏡面滿佈LED,由程式控制、顯示不同的樣式與形狀,也會逐一描述建構太陽眼鏡的步驟。

第5章 茫茫世界我在何處?
聚焦在可戴在手腕上的GPS追蹤裝置,以小型LCD螢幕顯示資訊;此章還包含詳細的指引與技巧,解說如何建構外殼容納零件,讓你戴在手腕上。

第6章 親手體驗NFC
介紹NFC技術與伺服馬達,結合成為智慧型門鎖,本章還包含了圍繞NFC標籤的設計,製作可配戴的指環,作為門鎖的鑰匙。

第7章 低功耗藍牙
介紹耗電量極低的智慧藍牙技術,實際運用製作穿戴專案;內容包括Blend Micro開發板,拿來打造專案連接到你的智慧型手機。

第8章 乘Wi-Fi飛翔
介紹具備Wi-Fi能力的Particle Core開發板,以及它的網頁介面IDE,還介紹如何連接各種線上服務。

第9章 時間也能有智慧
專心致力打造智慧型手錶,連接到網際網路,使用線上服務自訂通知功能,並把通知資訊顯示在小型OLED螢幕上頭。

2016/09/20

《Python程式設計入門》一書的投影片

之前曾開設共30小時的Python入門課程,分為5天、每天6小時,製作了一份投影片,以及相關範例程式。

網址:https://github.com/yehnan/python_book_slides。

內容大致按照拙作《Python程式設計入門》一書的介紹順序,但稍加改動,有所增減,除了投影片(PDF格式),另有相關的原始程式碼檔案。

投影片裡的中英文字型分別是新細明體和Arial,各作業系統應已內建,程式碼的字型則採用inconsolata-g

2016/09/18

UP board:簡單試用GPIO

照著RPi.GPIO - UpWiki的範例,運用RPi.GPIO模組、撰寫Python程式來控制UP board的GPIO腳位。

UP board的腳位功能圖,其中Pin欄是板子的實體針腳編號,UP pinout則是UP板子SoC的腳位編號,Linux GPIO是Raspberry Pi板子的SoC腳位編號。底下範例一律使用Pin欄的編號。

首先更新套件:
$ sudo apt-get update
$ sudo apt-get install python-rpi.gpio

接下來三個範例,閃爍LED,LED明暗度,開關控制LED亮滅。

範例,閃爍LED,讓LED亮一秒、滅一秒,不斷重複。電路圖如下:
程式碼:
import RPi.GPIO as GPIO
import time

LED_PIN = 16

GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED_PIN, GPIO.OUT)

try:
    while True:
        GPIO.output(LED_PIN, GPIO.HIGH)
        time.sleep(1)
        GPIO.output(LED_PIN, GPIO.LOW)
        time.sleep(1)
except:
    GPIO.cleanup()

範例,LED明暗度,以軟體PWM控制LED的亮度,LED會從全暗漸漸到全亮,再漸漸回到全暗。電路圖同前。

程式碼:
import RPi.GPIO as GPIO
import time

LED_PIN = 16

GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED_PIN, GPIO.OUT)
p = GPIO.PWM(LED_PIN, 50)
p.start(0)

try:
    while True:
        for dc in range(0, 101, 5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.1)
        for dc in range(100, -1, -5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.1)
except:
    pass

p.stop()
GPIO.cleanup()

範例,開關控制LED亮滅,不按下開關時LED熄滅,按下時才亮起。電路圖如下:
程式碼:
import RPi.GPIO as GPIO
import time

LED_PIN = 16
BUTTON_PIN = 13

GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.setup(BUTTON_PIN, GPIO.IN)

try:
    while True:
        print(GPIO.input(BUTTON_PIN))
        if GPIO.input(BUTTON_PIN):
            GPIO.output(LED_PIN, GPIO.HIGH)
        else:
            GPIO.output(LED_PIN, GPIO.LOW)
except:
    GPIO.cleanup()


參考資料:

2016/09/15

UP board:Ubilinux安裝OpenCV

我的環境是UP board、Ubilinux(ubilinux-3.0.iso),自行編譯OpenCV(Open Source Computer Vision Library),我抓的版本是3.1.0。

先更新套件清單並升級:
$ sudo apt-get update
$ sudo apt-get dist-upgrade -y

若是直接安裝現成的套件,指令如下:
$ sudo apt-get install libopencv-dev

不過得到的OpenCV版本通常過舊,因此自行下載原始碼,手動建置編譯。從OpenCV官方的安裝步驟,得知需要先安裝一堆相依套件。

建置與編譯所需工具:
$ sudo apt-get install build-essential gcc cmake pkg-config

抓原始檔需要的工具:
$ sudo apt-get install git

Python相關:
$ sudo apt-get install python python-dev python-numpy

圖形視窗程式庫:
$ sudo apt-get install libgtk2.0-dev

音訊視訊的編解碼、錄製、轉換、串流:
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev

圖檔格式(選用性):
$ sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libjasper-dev

IEEE 1394相機介面(選用性):
$ sudo apt-get install libdc1394-22-dev

TBB(Intel's Threading Building Blocks)(選用性):
$ sudo apt-get install libtbb2 libtbb-dev

接著是OpenCV,原始碼檔案約580 MB,建置後需要2.6 GB,請先確認儲存空間是否足夠。

以git下載位於GitHub的OpenCV原始碼,得到目錄opencv,切換進去:
$ git clone https://github.com/Itseez/opencv.git
$ cd opencv

目前處於最新的版本分支,到OpenCV官網查詢後,得知目前釋出的正式版本為3.1.0,所以決定切換到該分支:
$ git checkout 3.1.0

新增目錄build存放建置結果,切換進去:
$ mkdir build
$ cd build

先執行cmake產生建置需要的設定檔:
$ cmake -DWITH_TBB:BOOL=TRUE -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

其中「-DWITH_TBB:BOOL=TRUE「代表我們想要使用TBB,「-D CMAKE_INSTALL_PREFIX=/usr/local」代表之後要安裝的路徑,最後的「..」代表原始碼所在路徑。

然後開始建置:
$ make -j4

因為UP board的CPU有4顆核心,所以可下參數「-j4」充分利用,相當快,花了不到一小時。

最後終於出現完成的訊息:
...
[100%] Building CXX object modules/calib3d/CMakeFiles/opencv_test_calib3d.dir/test/test_main.cpp.o
Linking CXX executable ../../bin/opencv_traincascade
[100%] Built target opencv_traincascade
Linking CXX executable ../../bin/opencv_test_calib3d
[100%] Built target opencv_test_calib3d
Linking CXX shared module ../../lib/cv2.so
[100%] Built target opencv_python2

然後安裝:
$ sudo make install

執行指令更新程式庫:
$ sudo ldconfig

試著檢查OpenCV的版本:
$ pkg-config --modversion opencv
3.1.0

耶!

然後是是撰寫C++程式,顯示一張圖檔。新增檔案test.cpp,準備一張圖檔test.png,程式內容如下:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char **argv)
{
    Mat image = imread("test.jpg", CV_LOAD_IMAGE_COLOR);
    namedWindow("test", WINDOW_AUTOSIZE);
    imshow("test", image);
    waitKey(0);
    return 0;
}

以底下兩道指令之一進行編譯:
$ g++ -lopencv_core -lopencv_highgui -lopencv_imgcodecs test.cpp
$ g++ `pkg-config --libs opencv` test.cpp

執行:
$ ./a.out

啊哈,成功囉。

試試Python程式,新增檔案test.py,與圖檔test.png放在一起,程式內容如下:
import cv2

img=cv2.imread('test.jpg')
cv2.imshow('test', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

然後執行:
$ python test.py

結果與先前的C++程式相同。

參考資料:

2016/09/11

UP board:安裝USB音效卡

UP board的音訊輸出,除了HDMI與I2S,應該就剩下加裝USB音效卡。PS:但我不是100%確定。

嗯,怎麼辦呢,雖然我有HDMI螢幕,但沒有兩端都是HDMI的線材;還是要用能把HDMI轉成RGB D-sub與3.5mm耳機孔的轉接器呢?至於I2S,目前似乎尚未支援

想起以前為Raspberry Pi買了一張USB音效卡,用了一陣子,後來就積灰塵,現在終於可以重見天日。

我買的是這款,接下來要介紹設定程序,基本上,各產品用的晶片皆不同,所以底下內文只適用於這款產品。參考文件在此

根據文件,首先判斷晶片為何,
$ dmesg | grep cm109
$ dmesg | grep Headphone
[    3.325467] usb 1-7.1: Product: C-Media USB Headphone Set
[    3.327013] input: C-Media USB Headphone Set   as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7.1/1-7.1:1.3/0003:0D8C:000C.0004/input/input3
[    3.380759] hid-generic 0003:0D8C:000C.0004: input,hidraw3: USB HID v1.00 Device [C-Media USB Headphone Set  ] on usb-0000:00:14.0-7.1/input3

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 0424:2530 Standard Microsystems Corp.
Bus 001 Device 005: ID 0d8c:000c C-Media Electronics, Inc. Audio Adapter
Bus 001 Device 004: ID 0424:4603 Standard Microsystems Corp.
Bus 001 Device 003: ID 093a:2521 Pixart Imaging, Inc.
Bus 001 Device 002: ID 046d:c31d Logitech, Inc. Media Keyboard K200
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

代表我拿到的是CM-Headphone Type。然後作設定。

新增檔案/etc/asound.conf,內容如下,
pcm.!default  {
 type hw card 0
}
ctl.!default {
 type hw card 0
}

原始文件說是1,但我改成0才正確,因為,
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
  Subdevices: 0/1  Subdevice #0: subdevice #0
card 1: IntelHDMI [IntelHDMI], device 0: IntelHDMI [IntelHDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

然後修改或新增檔案/etc/modprobe.d/alsa-base.conf,修改成或加入底下這行:
options snd-usb-audio index=0

完成,播放mp3音檔與mp4影片檔,都有聲音,但是玩遊戲卻沒有,例如FreeCiv,嗯,為什麼呢?

2016/09/09

UP board:把USB 3.0 Micro埠改為序列埠

UP board在HDMI插槽旁邊,有個USB 3.0 Micro埠,根據此處文件,可以改為序列埠。

PS:另外還有兩個地方提供序列埠

準備一條USB線, 一頭A公,插電腦,一頭Micro公,插UP board。我這條是2.0的線。

USB 3.0的Micro端子,其實如圖所示,但我只有2.0的線,所以只插入其中一部分而已,但仍相容可用。
開機時按著F7,選Enter Setup進入BIOS設定畫面,修改處有兩個。
第一個,Chipset > South Bridge > Default DRD Config,改成DeviceMode。
第二個,Chipset > South Bridge > USB OTG Support改成PCI mode。
然後重開機,開啟終端機,輸入底下指令,載入驅動模組並啟動該序列埠:
$ sudo modprobe g_serial
$ sudo systemctl start getty@ttyGS0

然後把USB線另一頭插入電腦,我插入的是Win 10,開啟裝置管理員,看到多出一個COM埠,記住是COM4。你的編號不一定與我的相同。
開啟可連接序列埠的終端機模擬軟體,譬如PuTTY,輸入適當的設定。
連線,耶,成功囉,看到登入提示,輸入帳號密碼。
進去囉,試著執行指令「w」,共有三個人登入,分別是從主控台、SSH、以及本篇的序列埠。
但是這個序列埠位於USB之上,所以必須等作業系統準備好後,才能提供,沒辦法輸出開機時的早期訊息,一旦重開機就會斷線。

2016/09/08

UP board:設定USB無線網卡

安裝好Linux系統(Ubilinux),之前都是插RJ-45網路線,現在讓我們來嘗試使用USB無線網卡吧。

我的網卡是這個:Edimax EW-7811Un 150Mbps Wireless 隱形USB無線網卡,其晶片是RTL8188CUS。

插入後,Linux應可自動辨識,並且自動載入驅動程式。
$ lsusb
Bus 001 Device 005: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS] 

但是下達指令ifconfig的話,並未出現網路介面wlan0,需要自己設定網路組態。

安裝相關設定套件:
$ sudo apt-get install wpasupplicant wireless-tools 

修改檔案/etc/network/interfaces,新增部分以紅色標示。
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp


然後,新增∕修改/etc/wpa_supplicant/wpa_supplicant.conf,內容如下,請根據你自己的網路組態做修改:
ctrl_interface=/run/wpa_supplicant
update_config=1

network={
        ssid="你的無線網路名稱"
        psk="密碼"
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=CCMP
        auth_alg=OPEN
}


然後下指令,關閉∕啟動無線網路介面,或者重新開機:
$ sudo ifdown wlan0
$ sudo ifup wlan0 



接著,應該就沒問題了。
$ sudo ifconfig
wlan0     Link encap:Ethernet  HWaddr 80:1f:02:e2:93:2f
          inet addr:192.168.1.41  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::821f:2ff:fee2:932f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:621 errors:0 dropped:0 overruns:0 frame:0
          TX packets:409 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:71162 (69.4 KiB)  TX bytes:73832 (72.1 KiB)


耶!

2016/09/07

UP board:播放mp3音檔與mp4影片檔

安裝好Linux系統(Ubilinux),讓我們來嘗試播放mp3音檔與mp4影片檔吧。

首先把一些mp3與mp4檔傳輸到UP board裡。Ubilinux預設已安裝SSH相關套件,所以可使用WinSCP來傳輸檔案。

然後開啟預設已安裝的VLC,

然後拖拉想撥放的檔案,咦,奇怪,我的螢幕變黑了,收不到訊號,哇哩咧。

不過系統仍活著,所以可使用SSH遠端登入,找出VLC的PID,然後kill殺掉。

但是為什麼呢?上論壇一問,原來播放媒體檔案時,會改變成Full HD顯示模式,因為我的螢幕太舊不支援,所以就會變黑。

好吧,換台螢幕,耶,成功囉。
另外,如果你想使用SMPlayer(影片)與LXMusic(音樂)來播放的話,請安裝相關套件:
$ sudo apt-get install lxmusic xmms2 xmms2-plugin-all mplayer smplayer

SMPlayer。
LXMusic。

2016/09/06

UP board:查詢系統狀態的Linux指令

安裝好Linux系統(Ubilinux)之後,簡單試用一些查詢系統狀態的Linux指令吧。

首先,看看Linux核心版本吧。
$ uname -a
Linux ubilinux 4.4.0-ubi3-amd64 #1 SMP Debian 4.4.13-1 (2016-06-17) x86_64 GNU/Linux
$ cat /proc/version
Linux version 4.4.0-ubi3-amd64 (ubilinux@emutex.com) (gcc version 4.9.2 (Debian 4.9.2-10) ) #1 SMP Debian 4.4.13-1 (2016-06-17)

哦,4.4啊,跟官方說的一樣

接著,查詢UP board的BIOS版本,
$ cat /sys/devices/virtual/dmi/id/bios_version
UPC1BM0S


看來是目前最新的,以後有機會的話,再嘗試更新囉。順帶一提,若要重置BIOS設定值,可拔掉RTC電池,等待10~15分鐘後再裝回去。

然後,查詢UP board板子本身的版本,
$ cat /sys/devices/virtual/dmi/id/board_version
V0.4

嗯,不知道代表什麼意義。

看看有多少記憶體:
$ free -h
             total       used       free     shared    buffers     cached
Mem:          3.3G       516M       2.8G        44M        21M       284M
-/+ buffers/cache:       209M       3.1G
Swap:           0B         0B         0B


嗯,總共應該有4 G才對,其他的,應該是分給GPU繪圖處理器了,可到BIOS調整;除此之外,也有些許部分被BIOS保留作為其他用途。

查詢儲存媒體eMMC的用量:
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev             10M     0   10M   0% /dev
tmpfs           673M  8.9M  664M   2% /run
/dev/mmcblk0p3   29G  2.5G   25G   9% /
tmpfs           1.7G     0  1.7G   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.7G     0  1.7G   0% /sys/fs/cgroup
/dev/mmcblk0p2   48M  119K   48M   1% /boot/efi
tmpfs           337M  4.0K  337M   1% /run/user/110
tmpfs           337M  4.0K  337M   1% /run/user/1000


嗯, 看來我手上這塊板子內建32 GB地eMMC。

查看網路卡取得的IP。我的UP board位於路由器之後,會從DHCP自動取得IP位址。
$ sudo ifconfig
eth0      Link encap:Ethernet  HWaddr 00:07:32:3d:2d:7d
          inet addr:192.168.1.71  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::207:32ff:fe3d:2d7d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1019 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1094 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:206884 (202.0 KiB)  TX bytes:138338 (135.0 KiB)


Ubilinux源自Debian,通樣採用DEB/APT套件管理系統,讓我們更新套件清單,並且升級原已安裝的套件吧,指令如下:
$ sudo apt-get update
$ sudo apt-get dist-upgrade
...省略輸出...

試試安裝新套件吧,例如可查詢CPU狀態的cpufrequtils:
$ sudo apt-get install cpufrequtils

然後執行指令cpufreq-info:
$ cpufreq-info
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 0.97 ms.
  hardware limits: 480 MHz - 1.92 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 480 MHz and 1.92 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 940 MHz.
analyzing CPU 1:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 1
  CPUs which need to have their frequency coordinated by software: 1
  maximum transition latency: 0.97 ms.
  hardware limits: 480 MHz - 1.92 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 480 MHz and 1.92 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 1.20 GHz.
analyzing CPU 2:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 2
  CPUs which need to have their frequency coordinated by software: 2
  maximum transition latency: 0.97 ms.
  hardware limits: 480 MHz - 1.92 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 480 MHz and 1.92 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 1.68 GHz.
analyzing CPU 3:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 3
  CPUs which need to have their frequency coordinated by software: 3
  maximum transition latency: 0.97 ms.
  hardware limits: 480 MHz - 1.92 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 480 MHz and 1.92 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 1.68 GHz.


可看到有4個CPU核心,時脈為480 MHz到1.92 GH,動態調整。

嗯,那麼CPU溫度呢,先安裝套件Linux Monitoring Sensors:
$ sudo apt-get install lm-sensors

然後,執行指令sensors-detect設定該載入那些模組,如果不知道的話,最好通通使用預設值,直接按Enter就對了:
$ sudo sensors-detect
# sensors-detect revision 6209 (2014-01-14 22:51:58 +0100)
# System: AAEON UP-CHT01 [V1.0]

This program will help you determine which kernel modules you need
to load to use lm_sensors most effectively. It is generally safe
and recommended to accept the default answers to all questions,
unless you know what you're doing.

Some south bridges, CPUs or memory controllers contain embedded sensors.
Do you want to scan for them? This is totally safe. (YES/no):
Module cpuid loaded successfully.
Silicon Integrated Systems SIS5595...                       No
VIA VT82C686 Integrated Sensors...                          No
VIA VT8231 Integrated Sensors...                            No
AMD K8 thermal sensors...                                   No
AMD Family 10h thermal sensors...                           No
AMD Family 11h thermal sensors...                           No
AMD Family 12h and 14h thermal sensors...                   No
AMD Family 15h thermal sensors...                           No
AMD Family 15h power sensors...                             No
AMD Family 16h power sensors...                             No
Intel digital thermal sensor...                             Success!
    (driver `coretemp')
Intel AMB FB-DIMM thermal sensor...                         No
VIA C7 thermal sensor...                                    No
VIA Nano thermal sensor...                                  No

Some Super I/O chips contain embedded sensors. We have to write to
standard I/O ports to probe them. This is usually safe.
Do you want to scan for Super I/O sensors? (YES/no):
...省略...

Now follows a summary of the probes I have just done.
Just press ENTER to continue:

Driver `coretemp':
  * Chip `Intel digital thermal sensor' (confidence: 9)

Driver `to-be-written':
  * ISA bus, address 0xca0
    Chip `IPMI BMC KCS' (confidence: 4)
  * ISA bus, address 0xca8
    Chip `IPMI BMC SMIC' (confidence: 4)

Note: there is no driver for IPMI BMC KCS yet.
Check http://www.lm-sensors.org/wiki/Devices for updates.

To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
coretemp
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!

Do you want to add these lines automatically to /etc/modules? (yes/NO)

Unloading cpuid... OK

然後執行指令sensors觀看:
$ sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:         +0.0°C  (crit = +90.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Core 0:       +37.0°C  (high = +90.0°C, crit = +90.0°C)
Core 1:       +36.0°C  (high = +90.0°C, crit = +90.0°C)
Core 2:       +40.0°C  (high = +90.0°C, crit = +90.0°C)
Core 3:       +36.0°C  (high = +90.0°C, crit = +90.0°C)

哎呀,好煩,上批踢踢跟網友鄉民大戰吧,咦,怎麼出現亂碼?
$ telnet ptt.cc

安裝中文字型:
$ sudo apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy scim scim-tables-zh scim-chewing scim-pinyin fonts-inconsolata ttf-anonymous-pro ttf-dejavu ttf-bitstream-vera 

也安裝PCMan這套圖形化BBS客戶端軟體:
$ sudo apt-get install pcmanx-gtk2    

啊哈,OK囉。

2016/09/04

UP board:安裝Linux系統

承蒙研揚科技公司好意,贈送一塊UP board。上一篇開箱拍拍照,介紹硬體規格,這一篇要開始安裝軟體囉。

概略步驟如下:

  1. 準備好所需硬體。
  2. 下載想安裝的軟體系統,此處以Linux系統(Ubilinux)為例。
  3. 燒錄安裝用的Linux系統到USB隨身碟(或記憶卡加讀卡機)。
  4. 使用上一步的USB裝置開機,進行安裝程序,把Linux系統安裝到UP board內建的eMMC儲存空間。
  5. 拔除USB裝置,讓UP board自己開機,開始使用Linux系統。
看完介紹若有興趣的話,可UP board線上商店購買,或聯絡研揚公司

除了電源供應器、螢幕、鍵盤、滑鼠,還需要準備USB隨身碟,或者如下圖的記憶卡加讀卡機,容量大小至少要有1 GB。等一下要把可開機的安裝程式、燒錄進這台USB裝置,以之開機,進行安裝程序,把Linux系統安裝到UP board板子內建的eMMC儲存空間。
因為我想插入UP board的USB 3.0 Micro埠,所以要再準備一條USB A母轉Micro B公的轉接線。
下圖是連接後的樣子。其實,也可插入UP board側邊的USB 2.0埠。總之就是要讓UP board使用這台USB裝置來開機,進行Linux系統的安裝程序。
插上鍵盤、滑鼠、網路線、HDMI、電源供應器。我用的螢幕只有DVI介面,所以加上DVI轉HDMI的轉接頭。呃,糟糕,插座靠太近,插頭大太,插不進去啦。
只好拿出刀子,削減HDMI轉接頭的兩側。
呼,終於可以了。嗯,UP board研發工程師都沒有碰到這個問題嗎?
若想把USB裝置插入UP board側邊的USB 2.0埠,也會遇到卡住的問題,此時可使用USB A母轉A公的延長線。
接下來要把安裝用的Linux系統、燒錄到之前準備好的USB裝置。

首先下載想安裝的軟體系統,到UP community網站的下載區,可看到Ubilinux、Windows 10、Ubuntu等,此處以Ubilinux為例,我下載的檔案是ubilinux-3.0.iso,約700 MB。

燒錄工具,若你的主機電腦是Linux或Mac OS X,可使用指令dd,此處不介紹。若主機電腦是Windows的話,可使用Rufus燒錄工具。下載後執行,看到如下畫面,紅色箭頭處可更改介面語言,我改為英文,因為UP board官方提供的安裝文件,也是英文。
請確認最上面的選項Device,應是你的USB裝置。然後點選「1」的光碟圖示,選擇剛剛下載的Ubilinux映像檔ubilinux-3.0.iso。然後點選「2」,改成「MBR partition scheme for UEFI」,注意,非常重要。
設定完成後的樣子,然後點按「Start」。
嗯,跳出一個對話盒,大意是說Rufus還需要下載一些檔案,選Yes。
然後出現底下畫面,注意,必須選擇「Write in DD Image mode」,非常重要。
然後Rufus警告你,目標裝置裡的東西,都會被摧毀,所以請確認是否選對磁碟機,可不要洗掉你自己電腦的硬碟啊。
進行燒錄中。
燒錄完畢。
插入UP board吧,開啟電源,開機!可看到藍色電源燈亮起,風扇也開始轉動,音量相當低,耳朵必須靠很近,才聽得見。
螢幕應會先出現UP的標示圖誌,但可能跳太快而沒看到。
咦?這是什麼?應該是UP board內建eMMC預設含有的UEFI。
那並不是我要的,請在開機時按著F7,便會進入挑選開機裝置的選單,如下圖。呃,怎麼沒有出現我的USB裝置呢?
如果點按「Enter Setup」,將會進入類似BIOS的設定畫面,這也不是我要的。
原因在於應使用「具備UEFI開機能力的USB裝置」,我之前準備的讀卡機太舊啦,換個新的吧,如下圖,然後重新燒錄。
插入UP board,再試一次。
開機時按著F7,嘿,出現囉,選擇該裝置開機。
啊哈,看到囉。
右下角標示著ubilinux。
選擇左上角的「Install」,進入Ubilinux的安裝程序。
接下來便是Ubilinux安裝程序,跟一般Linux系統的安裝程序差不多,此處僅概略介紹;但其中有一步非常重要,還請注意。

首先選擇安裝時想使用的語言。
選擇所在地。
選擇地區設置。
選擇鍵盤對應。
載入其他元件。
輸入主機名稱。
網域名稱,不知道就別填。
建立使用者帳號與密碼,之後以之登入系統。
注意,此處非常重要,「Force UEFI」必須選擇「Yes」。
開始安裝。
我有插上網路線,途中詢問要到哪裡抓取最新的軟體套件。
也不知道哪個比較快,就選第一個吧。
按照你的網路設置,填入適當的HTTP Proxy。
下載中,去喝杯茶吧。
詢問要把GRUB安裝到哪裡,選擇UP board板子內建的eMMC,也就是/dev/mmcblk0。
終於完成囉。
接下來,便是要用安裝到UP board內建的eMMC的Ubilinux系統來開機。若開機時按著F7,你會看見如下畫面,請選ubilinux;若不按著F7,則會直接進入下個畫面。
選擇第一項,以安裝好的Ubilinux來開機。
預設會直接進入圖形視窗介面,輸入之前建立的使用者帳號與密碼,登入系統。
哇,成功囉,進入Ubilinux囉。
四處玩玩吧,開啟瀏覽器、計算機、終端機,耶!
Ubilinux源自Debian,其實就跟一般的Linux系統沒兩樣。

看完介紹若有興趣的話,可UP board線上商店購買,或聯絡研揚公司

參考資料: