該換火星塞的徵兆

前天開始, 車子開起來怪怪的. 怠速的時候沒有甚麼感覺, 但是起步或是倒車的時候, 就覺得引擎在抖動. 這個震動感傳遍全車, 但只要車速快起來, 那種感覺也就消失了.

上網看了一下, 似乎沒有人反映過同樣的狀況. 我比較常遇到的是怠速的抖動, 沒見過這次的情形, 更不知道會進場大修? 車子會爆炸? 還是隨便小修就好? 旁邊的親朋好友有人猜引擎積碳, 配電盤老化或是空氣濾髒了…, 只有最不懂車的老婆提到她唯一認識的零件 – 火星塞.

即使她以為火星塞只有在發動的時候會點一次, 類似熱水器那樣. 然而, 不懂不表示錯! 最後請福特的技師把車子牽去檢查後, 答案揭曉 – 真的就是火星塞在作祟!

我的車是四缸的, 其中有一缸的火星塞已經完全毀損了, 因此只有三缸在運作. 怠速的時候, 因為轉速很低, 所以出力不平均的現象並不明顯. 至於低速的時候, 可能恰好比較容易共振.

大家日後遇到類似問題時, 可以往火星塞的方向去想. 一顆火星塞的售價在 250~450 NTD 之間, 既然是屬於老化問題, 建議一次同步更換 4 顆.

下圖右邊第二顆, 就是已經看不到尖尖的頭那顆火星塞.

非死不可之怕柔

Facebook 近來真是相當地紅, 很多遊戲都在上面加入口, 用免費的形式導引潛在的消費者走到他們 "有料" 的網站去! 雖然一開始大家都不願意花錢, 但是多多少少會有人願意拿新台幣去買 XX 幣吧! 這些遊戲網站大概都賺翻了~~~

在一片墮落聲中, 我無意間也發現一個比較令人興奮的角落. 什麼? 不是 "不可犯罪的乖乖水" 啦! 而是怕(Puzzle) 區. 所以本篇的標題叫做 Facebook's Puzzles. 在這裡面, Facebook 放了一些演算法的題目, 讓大家去討論, 切磋. 包括 2 個  "試吃" 題 (Hors d'oeuvre), 7 個點心 (snack), 5 個正餐 (meal), 和 3 個吃到飽 (buffet). 

http://www.facebook.com/careers/puzzles.php

說實在的, 這些題目即使本身是 NP-complete, 但是只要方向想對, 程式寫起來快, 執行速度也會很快! 反正是電腦在跑, 不要寫錯 code 就好. 拿最後一題吃到飽的 facebull 來說吧, 其實它就是 traveling salesman 問題的搞笑包裝版, Face Bull 也明顯地取材自 Red Bull. 我在修清大的計算幾何學時, 期末作業的自由創作就是選了這個題目. 基本上不可能的路就不要走, 整體就會節省很多的時間. 我後來發現 Viterbi 的想法和我差不多, 只不過 Viterbi 是用在通訊, 而且當時還沒有寫進教科書.

此題正規的解法, 首先要處理檔案 parsing 的問題, 把有問題的輸入濾掉, 把有用的資料整理出來. 第二步就是設計一個能夠走過所有路徑, 卻不會重複的演算法. 這個部份簡單無比, 就是一個 recursive 的 function, 加上一個 local 變數做 mutex. 什麼展開都不需要, 考慮到展開所有可能路徑, 建表…等等那就太複雜了. 

計算每一條路徑時, 要順手把走過的 node 記錄下來, 根據 depth-first 的 search, 原先記住的東西就會保持有效, 包括走過哪幾個 node? 已經累計的 cost 有多少? 下次遇到任何 node 累積 cost 超過 minimum cost, 就可以直接 return. 這是我以前做 OCR (Optical Character Recognition) 時一定要用的加速大法.

採用上面的步驟, 就算不是最佳 solution, 結果也不會太差. 我抓了 Facebook 上的討論區某人丟出的測試檔, 看起來一瞬間就解出來了. Code 裡面還包括一個因為偷懶才用上的 bubble sort 都可以跑這麼快, 主程式的品質應該不算太劣等.

Facebook 怕柔區上面的文章超多的, 只不過大家都用英文討論, 我覺得格格不入, 一點都不想看下去. 畢竟我是為了重拾軟體工程師的初心才來休閒的, 可不想變成練習英文呢~~~

最近有個某某炒外匯公司打電話找我加入投資. 想我這麼清寒貧下, 怎麼炒得起槓桿 100 倍的外匯咧? 但是這給我一個靈感, 就是用 "最佳化找哪些銀行換匯的手續費總和最低, 使得在持有任何一種貨幣時, 換成其他任意貨幣後又換回來的獲利最高 (假設每家銀行承作其中某兩個貨幣轉換的手續費已經是最低)" 和 facebull 也是同一個問題的不同面貌.

對了! 非死不可有一個地方我不太喜歡, 那就是請大家把程式寄給他們評比的郵箱地址:{0xFACEB00C>>2 in decimal}@facebook.com. 傻瓜才會把整支地址貼上去吧! 不過這個小 trick 的難度太低了, 讓人有些失望.  看不懂這個把戲的人, 說不定也可以很厲害啊, 只是有點自信信人而已, 結果就被騙了…呵呵呵!

附上一支 C 語言的程式, 有興趣的人可以往下翻, 這是 Cygwin / GCC 的版本.

繼續閱讀「非死不可之怕柔」

Android 與 Linux 的關係

我們的競爭對手紛紛把 Android 列在他們的 feature set 上, 對於跑 Linux Kernel 的本公司, 感覺好像有點落後~~~

但是 Android 是另外一個 OS (Operating System) 嗎? 不是的! 雖然 Google 強力把它包裝成Google 的 OS, 不過它其實是某種的 Linux. 這也就可以解釋 Google 為何又想要搞另外一套 Chrome OS 出來, 因為 Android 畢竟不是 Google 自己養大的孩子, 只是把別家的孩子抱來養, 穿上 Google 家的衣服而已! 既然 Linux 是受 GPL 授權保護的 open source, Google 當然會覺得養自己的孩子比較保險.

那麼 Android 是怎麼做到的呢? 首先, Google 在 Linux 開了一個後門, 把某些核心程式搬到 LInux 的上頭來, 不再受 Linux 的管轄. 在下圖中黃色的這塊就是 Android 的核心, 各位可以看到它建設在 Linux 的基礎上. 這樣大家應該可以瞭解 Android 是如何寄生於 Linux 的架構.

[圖片遺失]

Mr./Ms. Days (MMDays) – 網路, 資訊, 觀察, 生活 這個網站上, 對於 Android 有很多篇相關的好文章, 大家可以參考這裡的介紹.

Simplay HD 小檔案

Simplay HD 是晶像公司 (Silicon Image) 所提出的影音認證方式, 透過 Simplay Labs 的測試, 來決定是否發給「Simplay HD」的認證標籤. 拿到這個標籤的意義在於 HDMI 裝置間互連的相容性可以有所 "保證". 

因此, 廠商要進行 Simplay HD 認證測試之前,需要通過:

1.  HDMI 授權測試中心(ATC)

2.  數碼內容保護公司(DCP LLC)- 重點是 High-Bandwidth Digital Content Protection – HDCP.

這兩個單位的測試.

參與Simplay HD測試的廠商可選擇以下三種測試服務:
Simplay標準測試(Simplay Standard)—不須年費、須繳標準測試費用、採用標準測試時程,並僅享有選擇性的認證商標使用權。
Simplay優先測試(Simplay Preferred)—不須年費、測試費享七五折優惠、享優先測試行程、可使用認證商標,並可名列於網站上。
Simplay精英測試(Simplay Elite)—須繳一萬美元年費、前四次免費測試,並於第五次之後享七五折優惠、享優先測試行程、可使用認證商標,並特別名列於網站上,每項產品可享有五小時的測試支援服務。

這是通過認證的廠商列表, 家數急速成長中. 

http://www.simplaylabs.com/consumers/verified_products.aspx

其中, 根據產品的屬性分類為:

A/V Receivers
Cables
DVD Players/Digital Media Adapters
Home Theater Systems
Projectors
Set-top Boxes
Switch Boxes
Televisions
Video Cameras

 

QCELP 與 EVRC 小檔案

不小心瞄到競爭對手 Telechips 的 audio 格式中竟然有兩個我不認識的 format, 只好研究一下那是什麼?

QCELP 全名 Qualcomm Code Excited Linear Prediction, 又叫做 Qualcomm PureVoice. 既然是 Qualcomm 做的, 想來是給手機使用, 沒錯! 它用在 CDMA 手機的語音壓縮上. 後來 QCELP 被 EVRC 所取代.

QCELP 有兩個版本, QCELP8 和 QCELP13 分別對應 8 kbps 和 13kbps 的版本. 由於原始的 speech 訊號是 8 KHz x 8 bits per samples, 所以為壓縮之前是 64 kbps, 壓縮率的大小, 大家應該一目瞭然. 至於 CELP 的原理, 也正如其名:  Code Excited Linear Prediction.

EVRC (Enhanced Variable Rate CODEC) 以 160 個 samples 為一個 frame, 輸出有三種格式: Full rate: 8.55kbps, Half rate: 4 kbps, eighth rate: 0.8 kbps. 大家可能會好奇, 為何少了一個 1/4 rate? 因為那個獨立成 EVRC-B 的壓縮法. 1/8 倍不是比 1/4 倍更猛嗎? 為何主流不是 1/8 rate 呢? 因為壓縮總是有物理極限的, 所以 1/8 專門用來對付 noise 而不是 speech.

後來 EVRC 又給 SMV (Selectable Mode Vocoder) 所取代了. SMV 繼承 EVRC 的特徵, 又加上錄音狀況的判斷 voice activity detection (VAD) . 根據下列的場合不同, 它可以動態採用 full rate / half rate 壓 speech ,1/4 or 1/8 rate 壓 noise, 每個 frame 可以有 2~4 個 sub-frame, 因此效能比 EVRC 高.

  • Silence/Background noise
  • Non-stationary unvoiced
  • Stationary unvoiced
  • Onset
  • Non-stationary voiced
  • Stationary voiced

CDMA 2000 的 G4V 取代了 SMV, 但是在 3GPP2 系列 (3GPP 是 GSM, 3GPP2 是 CDMA), 還是看得到 SMV 的身影, 它的副檔名叫做 3G2. 因此本文標題上寫的兩個格式可以說都不重要了, 不如去關注 3GPP 來得有意義.