音樂播放器之 CD 轉成 mp3《三》上

220px-Inscribed_bamboo-slips_of_Art_of_War

一九七二年

銀雀山出土的

《孫子兵法》竹簡

孫子兵法‧軍形第四

孫子曰:昔之善戰者,先為不可勝,以待敵之可勝。不可勝在己,可勝在敵。故善戰者,能為不可勝,不能使敵之必可勝。故曰:勝可知,而不可為。

不可勝者,守也;可勝者,攻也。守則有餘,攻則不足。善守者,藏於九地之下;善攻者,動於九天之上,故能自保而全勝也。

不過眾人之所知,非善之善者也;戰勝而天下曰善,非善之善者也。故舉秋毫不為多力,見日月不為明目,聞雷霆不為聰耳。

古之所謂善戰者,勝於易勝者也。故善戰者之勝也,無智名,無勇功。故其戰勝不忒。不忒者,其所措必勝,勝已敗者也。故善戰者,立於不敗之地,而不失敵之敗也。是故勝兵先勝而後求戰,敗兵先戰而後求勝。善用兵者,修道而保法,故能為勝敗之政。

兵法:一曰度,二曰量,三曰數,四曰稱,五曰勝。地生度,度生量,量生數,數生稱,稱生勝。故勝兵若以鎰稱銖,敗兵若以銖稱鎰。勝者之戰民也,若決積水於千仞之溪者,也。

俗話說︰勝敗乃兵家常事。兵無常形,水無常勢,觀其『』,從其『』,先讓自己『不可勝』── 敵打不敗也 ── 以待敵對者所給的『可勝』之『』。如果將兵法用於『軟體開發』,那個『敵對者』就是可能的各種『錯誤』 Bugs。因此對於『原型機』上所用的各個『裝置』以及開發『軟體』,都必須要先確定它們『工作正常』。『錯誤』是可敬的對手,這個『敵友』通常比我們更了解自己的吧,所以常能『打敗』我們!因而一個有智慧的人不只能從『自己』的『錯誤中學習』,也能從『他人』的『錯誤中學習』,記取教訓,『善補』思慮不周之『』,走上『不貳過』的大道。

軟體測試』 software testing 的典型定義是:在特定的環境條件下對指定『程式』進行『種種操作』,藉以發現『程式』的『錯誤』,用此衡量它的『軟體品質』,同時對其是否能夠滿足『設計要求』進行『評估』的一套整體程序。

通常人們認為『軟體測試』比『程式設計』簡單,這或許是誤解了『善攻者』之不易,以至於會有『通過測試』,上線後卻發現『程式』不管用之事。實際上『善守者』才容易是『善攻者』,他深知『攻其所必救』與『固其所難攻』之理。

BugsLifeWallpaper800

A Bug’s Life

82_P_1364427653119

也許可以說『測試』就是用『程式』所允許的『輸入』 Input ,打敗該『程式』之『程序』 Process 之『工藝』。進一步『除錯』,就是嘗試《打開黑箱!!》,找到『原因』並且解決『錯誤』的『活動』。因此於『設計程式』之前,我們需要先『確定』那些使用在『音樂播放器』之『原型機』上的『設備』和『軟體』都『正確無誤』,以及為將來可能的『變更』預做打算。舉例來說,我們如何測試『 USB DVD 讀寫裝置』呢?從這個裝置有兩個 USB 連接頭來看,它是一種耗電量大於 5V 500mA 的裝置,所以才需要兩個『 USB 埠』來供電。其實這也是作者選擇 B+ 而不是 B 的最主要原因, B+ 有四個 USB 埠以及改良過的供電迴路設計。因此只用

lsusb
Bus 001 Device 007: ID 0411:01dc BUFFALO INC. (formerly MelCo., Inc.)

dmesg | grep sr0
[216848.833462] sr0: scsi3-mmc drive: 8x/24x writer dvd-ram cd/rw xa/form2 cdda tray
[216848.838233] sr 0:0:0:0: Attached scsi CD-ROM sr0

,雖然能夠知道 raspbian 認識這個裝置,並不代表它就能夠正常工作。然而確定一個『裝置』或『系統』的【電源需求】,一般需要長時間以及各種操作樣態下的『消耗功率』量測。事實這是十分困難而且麻煩的事情,所以人們多半僅參考產品之『功率規格』來『確認』這件事。有時當系統發生『時好時壞』的狀況時,這個【電源問題】就成了最難診斷的『疑難』之一,更不要講那些用『電池』供電的系統的了。

280_P_1399090698640
Adafruit USB Power Gauge Mini-Kit

139_P_1373091636963
USB TTL RS232 轉換器

後來作者發現 Adafruit 有一款 TTL RS232 界面之迷你的『 USB 埠傳輸功率量測』裝置,如果再加上『USB TTL RS232 轉換器』可以構成一套既便宜又好用的『功率量測』系統。假使輔之以『測試軟體』,可以『自動紀錄』任何一個『 USB 裝置』在各種『工作樣態』下的『功率消耗』。由於它的『量測範圍』可以及於『5V 2A』,因此即使一整個『樹莓派系統』的『消耗功率』大體也可以這麼度量。再者,這個裝置的『資料』輸出格式十分簡單易讀,也就很容易寫『程式』來作『量測數據』處理。在此列出兩種『 USB DVD 讀寫裝置』之『操作狀態』下的消耗功率︰

裝置自起始到閒置 StandBy 量測
cat /dev/ttyUSB0

V: 5.1 I: 491 mA Watts: 2.5

V: 5.1 I: 533 mA Watts: 2.7

V: 5.1 I: 463 mA Watts: 2.4

V: 5.1 I: 521 mA Watts: 2.7

V: 5.1 I: 485 mA Watts: 2.5

V: 5.1 I: 483 mA Watts: 2.5

V: 5.1 I: 479 mA Watts: 2.5

V: 5.1 I: 507 mA Watts: 2.6

V: 5.1 I: 473 mA Watts: 2.4

V: 5.1 I: 515 mA Watts: 2.6

V: 5.1 I: 471 mA Watts: 2.4

V: 5.1 I: 454 mA Watts: 2.3

V: 5.2 I: 351 mA Watts: 1.8

V: 5.3 I: 152 mA Watts: 0.8

V: 5.3 I: 155 mA Watts: 0.8

V: 5.3 I: 148 mA Watts: 0.8

V: 5.3 I: 156 mA Watts: 0.8

V: 5.3 I: 150 mA Watts: 0.8

V: 5.2 I: 152 mA Watts: 0.8

V: 5.3 I: 150 mA Watts: 0.8

V: 5.3 I: 156 mA Watts: 0.8

V: 5.3 I: 146 mA Watts: 0.8

V: 5.3 I: 158 mA Watts: 0.8

V: 5.3 I: 160 mA Watts: 0.8

V: 5.3 I: 154 mA Watts: 0.8

 

裝置從閒置到播放 CD 量測
cat /dev/ttyUSB0

V: 5.3 I: 155 mA Watts: 0.8

V: 5.3 I: 156 mA Watts: 0.8

V: 5.3 I: 146 mA Watts: 0.8

V: 5.3 I: 153 mA Watts: 0.8

V: 5.1 I: 441 mA Watts: 2.2

V: 4.9 I: 826 mA Watts: 4.0

V: 5.1 I: 445 mA Watts: 2.3

V: 5.1 I: 493 mA Watts: 2.5

V: 5.1 I: 461 mA Watts: 2.4

V: 4.9 I: 461 mA Watts: 2.3

V: 5.1 I: 469 mA Watts: 2.4

V: 5.1 I: 493 mA Watts: 2.5

V: 4.8 I: 971 mA Watts: 4.7

V: 4.8 I: 1022 mA Watts: 4.9

V: 4.8 I: 1022 mA Watts: 5.0

V: 5.0 I: 749 mA Watts: 3.8

V: 4.9 I: 814 mA Watts: 4.0

V: 4.9 I: 837 mA Watts: 4.1

V: 4.9 I: 761 mA Watts: 3.8

V: 5.0 I: 755 mA Watts: 3.7

V: 5.0 I: 821 mA Watts: 4.1

V: 4.9 I: 749 mA Watts: 3.7

V: 5.0 I: 769 mA Watts: 3.8

V: 4.9 I: 797 mA Watts: 3.9

V: 5.0 I: 769 mA Watts: 3.8

V: 4.9 I: 799 mA Watts: 3.9

V: 4.9 I: 814 mA Watts: 4.0

V: 5.0 I: 785 mA Watts: 3.9

V: 5.0 I: 761 mA Watts: 3.8

V: 5.0 I: 701 mA Watts: 3.5

V: 4.9 I: 751 mA Watts: 3.7

V: 4.9 I: 755 mA Watts: 3.7

V: 5.0 I: 725 mA Watts: 3.6

V: 5.0 I: 784 mA Watts: 3.9

V: 4.9 I: 705 mA Watts: 3.5

V: 5.0 I: 769 mA Watts: 3.8

V: 4.9 I: 763 mA Watts: 3.8

V: 4.9 I: 717 mA Watts: 3.5

V: 4.9 I: 804 mA Watts: 4.0

V: 5.0 I: 715 mA Watts: 3.6

V: 4.9 I: 811 mA Watts: 4.0

V: 4.9 I: 789 mA Watts: 3.9

由此我們可以知道,這一個『 USB DVD 讀寫裝置』的消耗功率『變化很大』,假使思考『可靠性設計』的問題,我們需要明白『最大瞬間功率』 ── 紅色數據 ── 的需求,否則可能的系統『不穩定性』就會暗藏其中,日後當系統出狀況時,也許很難追查『原因』。讀者自當可以發現 『 USB 埠傳輸功率量測』裝置的『資料輸出格式』真很『簡潔清楚』的吧!

 

─── 待續

 

 

 

 

平安夜‧聖誕節

聖誕節

 

      1. 鄧麗君 Teresa Teng 平安夜 Silent Night

 

 

 

音樂播放器之 CD 轉成 mp3《二》

200px-Ljubljana_(8629147956)

盧布爾雅那沼澤輪

老子說︰人法地,地法天,天法道,道法自然。如果說『曾經』有一種『功能』或者『能力』,最早之初並不『存在』於大自然之『動植物』的『本能』中,其一就是『輪子之發明』的吧!假使講『轉動』能夠產生『移動』,不論古人對於『摩擦力』的了解有多少,事實上,都發展了『工具』的『創造』與『應用』之時代。就像曾有人將人『定義』為︰』是會『製作使用工具』的動物。

根據學者的研究,最早出現的『輪子』在距今六千年前左右的美索不達米亞高加索以及中歐等地出現,然而目前還無法斷定到底是哪一個文化最早使用『輪子』。據聞二零零二年時『斯洛維尼亞』的考古學家發現了『盧布爾雅那沼澤輪』,距今有 5250 \pm 100 多年,聽說這是世界上最早的『木製車輪』。

之前《輪扁斲輪?!》一文中,輪扁認為︰

斲輪,徐則甘而不固,疾則苦而不入,不徐不疾,得之於手而應於心,口不能言,有數存焉於其間。臣不能以喻臣之子,臣之子亦不能受之於臣,是以行年七十而老斲輪。

做輪子『得手應心』來之於『實踐』與『體會』,即使親如父子,都『難以言傳』,藉此勸誡齊桓公不要『死讀書』或者說『讀書』貴在『得意能行』,『讀死書』的作法不可取的吧!

人類的歷史上,許多『事物』的『實作』和『理論』,雖說『曾經發明』,也許又『已經失傳』。所謂『學者』的『得失』可能只在『得書之言』與『失其意指』的了!!

在『軟體開發』以及各種『技術工程』的領域中,用『重造輪子』一詞表達,再次重作一個『已知』、『好用』而且『優化』了的基本『方法』或是『工具』。固然說,沒有必要不必『重造輪子』,然而對於一個『已學者』來說從『造輪子』裡學習『用輪子』通常是更『重要』的,為什麼呢?通常許多事物的『好壞』難得有『標準』,不能深刻的親身體驗,那一『方法』的『』真『難以發明』,這一『工具』之『』果『無法超越』,又將如何真實知道『其意所指』之『好壞』的呢??那麼對於『初學者』呢?也許先學會『用輪子』,自『應用』中『體會』那『造輪者』之心思『理念』,循序漸進而且困知勉行,自然就會是『已學者』的了。

250px-Hub_(PSF)
重造輪子

Roue_primitive
今不如古?失傳人
來不如今?無學者

在《媒體中心──言用》一文中,作者談到︰

嚐鮮者或許已經知道,七月十四日樹莓派基金會發表了一款『革』『 B 』 版本之『故』,暨望『鼎』『 B+ 』版本之『新』的硬體板子。

。那時『樹莓派 B+』的板子剛出現沒多久,而且那是說如何建構『媒體中心』 Raspbmc 的事,此處重提是因為,假使讀者未讀過那篇文章,不知道那個『四段式 TSSR A/V 端子』的『規格』,萬一音樂播放器的『原型機』,沒有『聲音』或者說聲音『不對』,那可不好。進一步講在《媒體中心──行事》一文裡,作者也介紹了一個命令列的 CD 轉 mp3 之程式,它叫做『abcde』。這就是作者將用之於『原型機』的『程式』。為什麼呢?多年來,作者玩過多種『CD 轉 mp3 』的程式,發現這個 shell 程式最『簡單好用』,更不要說,這個『音樂播放器』 是打算用 python 來設計,既然作者不打算重新『發明輪子』,卻也不得不思考『如何整合』的問題啊!用『騛罿』來介接『命令列程式』事實上也早就是一個『輪子方法』的了!!

也許有人說『命令列』很難學難用,如果從『人機介面』歷史的發展來看,這個『命令輸入』與『結果輸出』的『命令列』可說是『互動界面』的先驅。它之所以『難用』,在於雖然說是『一問一答』,可是要『如何問』 ── 必須記住指令、選項以及一大堆術語等等 ── 實在很『』,『怎麼解』 ── 答案的格式、縮寫以及還是一大堆術語等等 ── 有夠麻『』。這個『』就是它『難學』的原因。假使細思如何學習『程式語言』和『寫作程式』的過程,難到有什麼不一樣的嗎?就像將系列『問答』用『判斷』的『程式邏輯』取代『人之選擇』,這就是『Shell Program』也不該令人驚訝的吧!在此列出有關『命令列』種種的文章,以便於讀者『溫故知新』︰

‧《除蟲!除錯?終端機。

‧《都是檔案惹的禍?

‧《瑪利歐的水管 Pipe

‧《概念拼圖︰Linux 手冊!

‧《刀筆契刻︰nano 編輯

‧《 raspi-config 再探!!

‧《等待『韋蘭』!!

‧《黑傑克的咔嗎!!明暗之交

 

── 想用 abcde 製作平安夜和聖誕節的 mp3 歌曲嗎?? ──

 

 

音樂播放器之 CD 轉成 mp3《一》

世說新語‧品藻篇

王黃門【王徽之,字子猷,晉朝王羲之長子】兄弟三人俱【一起】詣【造訪』謝公【謝安】,子猷、子重【王操之】多說俗事,子敬【王獻之】寒溫而已。既出,坐客問謝公:『向三賢孰愈?』謝公曰:『小者最勝。』客曰:『何以知之?』謝公曰:『吉人之辭寡,躁人之辭多,推此知之。

音樂播放器需求規格一??

將音樂 CD 轉成 mp3,寫到大拇哥上!!

當真是『吉人寡詞』的啊!都還不知道想要用什麼『人機介面』來播放 mp3 歌曲,卻先想到了將如何製造的問題,而且『規格』是那麼的『言簡意賅』。看來『需求分析』一事,實在是不簡單的吧!

280px-GRiDCompassInSpace
太空人與摩格理吉設計的
筆記型電腦 Grid Compass

250px-Prototypes
原型 Prototype

220px-Protoboard_circuito_multivibradores
簡單電路原型麵包板

一九八零年代中期,英國知名的產品設計師以及工業設計教授比爾‧摩格理吉 Bill Moggridge 提出了『互動設計』 IxD Interaction design 的概念。聽說最早稱之為『SoftFace』,是『定義』與『設計』人造物之『行為』 The interaction 的設計理念,也是『軟體原型法』 Software prototyping 的一種。通常『設計師』和『使用者』兩者有著不同的『知識』、『經驗』與『感覺』,因此對於『人造物』在使用上『是否方便』、顯示訊息『清不清楚』、操作果真『容易明白』等等,也就會有不一樣的觀點。於是為了達成『目的導向』的『客製化設計』而採用的『方法學』。

因此,作者打算先建構一個系統『原型機』,一方面方便與『客戶溝通』,另一方面期望能縮短整體『設計時間』。

即使是為了『一人而設計』,也應當要符合『實用』與『經濟』的『原則』,畢竟『設計師』的天職該是『問題解決者』的吧!

初步了解『客戶』曾經使用過『滿意』或『不滿意』的播放器,以及『客戶』覺得目前市場上的播放器之『優缺點』,加上為什麼『客戶』需要 CD 轉成 mp3 歌曲檔這種幾乎不曾見之於『播放器』的功能等等。也許說,作者只能講大概可以『領會』客戶『可能需求』的吧!雖然這些『對談』,並不足以開列『原型機』之規格,然而已經能夠『給出方向』︰

一、樹莓派 B+ x 1

二、觸控螢幕 3.5″ PiTFT x 1

三、USB DVD ROM x 1

四、USB Flash Drive x 1

五、耳機

六、音響設備連接線

七、… TBD …

。也可以把『將音樂 CD 轉成 mp3,寫到大拇哥上!!』的規格初步改寫成︰待『客戶』接上『USB DVD ROM』與『USB Falsh 』之後,這個『功能』將『偵測』多次放入的 CD 片,自動編碼成 mp3 歌曲檔,然後將之寫入『USB Falsh 』上的『/CD2mp3/CD-XXX-/』的目錄裡,並將過程顯示在螢幕上。

310_P_1405365697199
樹莓派 B+ 與 microSD 8G

310_P_1405365697788
足夠 CD 與 大拇哥用的 USB 埠

310_P_1405365696835
有硬體擴充界面

368_P_1415815727282
3.5″ PiTFT 觸控螢幕
適合做中文大字的人機介面

那麼要如何打造這個『原型機』的呢?這其實是有多種方式,由於需要用到 adafruit 的觸控螢幕,所以作者先到『這裡』,下載了《adafruit-pitft-3-dot-5-touch-screen-for-raspberry-pi.pdf》文件。閱讀後,作者決定先安裝好『中文化』的 Raspbian 系統,然後按照 Adafruit 文件︰

page 7

wget http://adafru.it/pitftsh
mv pitftsh pitft.sh
chmod +x pitft.sh

page 8

sudo ./pitft.sh -t 35r -r

page 11

At the end you will be prompted on whether you want the text console to appear on the PiTFT. Answer Y or N depending on your personal desires!

來安裝那個觸控螢幕,安裝後執行 sudo reboot,你將能看到 PiTFT 上顯示的登錄畫面。在此建議讀者嘗試『手動安裝』,一則知道現在系統上安裝了哪些『新的檔案』,以及『修改』和『產生』了什麼『系統檔』,這對將來可能會發生的『除錯』與『變更』有很大的幫助。更不要說萬一需要自己『建制fbtft 之『驅動程式』的哩!就讓我們先『確認』這台『原型機』一切工作正常的吧!!

 

 

音樂播放器之需求規格??

俗話說︰萬『』起頭難,通常是因為我們尚未了解做『那件事』的『辦法』,也許對一個『初學者』來講,如何『設想』一件『』,可能都還不知道,各種工具也還不會用。那麼要如何開始呢?或許講,一個人『自學之路』就像『哥倫布發現新大陸』,相信『地球是圓的』向西走總會抵達。『旅程』上逐步克服困難,建立方法規律,改善已知工具用法,完善思維模式,那將會是一趟豐收之旅。就讓我們踏上旅途吧!!

280px-Sage_typical_building
The 4-story SAGE blockhouses

220px-SAGE_computer_room
SAGE AN/FSQ-7電腦

350px-Waterfall_model.svg
瀑布模型

Agile_Project_Management_by_Planbox
Incremental development

Agile_Brazil_2014_conference_entrance
Agile software development

假使將為人設計一樣東西,至少得要先知道『那個人』認為『此物』是什麼?能有些怎樣的『功能』,如何『方便』的使用那些『功能』等等。否則會『設計』出『那個人』不想要的東西吧!於是『需求』的『了解』與『分析』,正是起始的最重要『關鍵』步驟。然而人的『需求』卻是『隨時而變』的,如是『設計中的變更』也就是可預見的了,因此為著解決這個『軟體工程』的問題,也就有了各種『設計典範』以及『設計方法論』。據聞最早的『瀑布開發法』是 Herbert D.  Benington 於一九六五年六月二十九日的『數位電腦之高等程式設計研討會』上提出,它是『賢者系統』 SAGE 的軟體設計方法。

一九七零年,美國電腦科學家 Winston W. Royce 寫了一篇文章 《Managing the Development of Large Software Systems》批評這種『依序進行』的方法論︰

1. Requirements specification【需求規格】 resulting in the product requirements document
2. Design【設計】 resulting in the software architecture
3. Construction【建構】 (implementation or coding) resulting in the actual software
4. Integration【整合】
5. Testing and debugging【測試與除錯】
6. Installation【安裝』
7. Maintenance【維護】

然而陰錯陽差,人們似乎誤解了 Royce 是說︰這是個『有缺陷』『不可行』的『模型』。其後『瀑布模型』 waterfall 一詞,在 Bell, Thomas E. 和 T. A. Thayer 合寫的論文《Software requirements: Are they really a problem? 》中誕生,將之歸於 Royce 之說。然後 Royce 所提倡的『迭代式瀑布開發流程』也就湮沒在時流中了。

經過幾次『對話』,看來一時要『確定』各種『規格』非常困難。於是作者也只能『選擇』個個擊破之方,『採取』疊代式開發之法,僅就已知還不清的『需求』來設計『子系統』,那就使用著名的『附電池』之『強力膠語言』 ── 騛罿』python ── 來設計的吧!!

 

需求規格一??

將音樂 CD 轉成 mp3,寫到大拇哥上!!