CE-HTML vs HTML-5

這兩個 format 都可以用在消費性產品, 我對它們的理解是這樣:

傳統的 HTML 4 格式太有彈性, 對於 header, sidebar, foot 都是當作 div 的某個特例. 但是 HTML 5 把它們專門化, 這樣就可以省下額外的描述, 以加快傳輸速度. 同樣地, 以前對於某個 resource 的描述, 都是看完 HTML 的標籤才知道要做甚麼事, 但 HTML 已經把它們專門化了. Video 就有 video 專屬的寫法, audio 亦然.

至於 CE-HTML 其實是一種 XHTML, 所以它是 XML 系列而不保證和傳統的 HTML browser 相容. 因此 CE-HTML 並不忌諱多傳一些 tag, 而是強調比較 powerful. CE-HTML 的 CE 表示 consumer electronics.

[reference]

HTML5: http://www.alistapart.com/articles/previewofhtml5

CE-HTML: http://en.wikipedia.org/wiki/CE-HTML (英文)

http://blog.csdn.net/chszs/archive/2009/06/09/4254281.aspx (中文)

 

歐洲電視廣播的音訊規格導讀

ETSI 000 468 這本 spec. 是介紹關於 DVB (digital Video Broadcasting) 的 SI (Service Information), 完全 free, 可以從 ETSI (ETSI = European Telecommunications Standard Institute) 下載. 不過如果是嫌錢太多的人, 可以到ANSI 去買, 大約花個 58 USD,  就可以買到 1998 年的舊版. 呃, 這是個什麼世界啊! 一定是流動性不足的關係, 不然我可以到 ANSI 放空 100 本, 再到 ETSI 買進.

好, 閒話休提, 這本 spec. 的內容不外乎是介紹 TS (transport stream) 裡面 SI 的各種 table, 重頭戲就是第五章的 Service Information (SI) Tables 和第六章的 Descriptor. 它們就占了 68 頁之多 (總共 116 頁). 不過我比較感興趣的是附錄的部分. 附錄 D 加進了 E-AC (也就是 enhanced AC3 或是稱為 AC3 plus, AC3+), DTS 與 HE-AAC.

傳統的 AC3 當然還在用. 至於 AC3+ 要去看另外一本 TS 102 366 Digital Audio Compression (AC-3, Enhanced AC-3) Standard. 同樣地, 隨便向 ETSI 註個冊就可以下載它來看了. 需要填寫的註冊內容比加入 facebook 還少, 只不過得承認 "台灣是中國的一省" 比較有爭議. ETSI 的註冊條款似乎只在於不可盜用其內容, 所以我不貼它的圖就是了.

TS 102 366 最令我嫌惡的地方並不是它有 214 頁厚, 而是它竟然還是同時支援 32, 44.1 和 48KHz 三種頻率, 在電信領域, 規格愈有彈性就愈討厭啊! 繼續往下看, 更討厭的來了.

DTS, 竟然堂堂支援 15 種頻率, 從 8 KHz ~ 192 KHz 都有. 還好 DTS descriptor 只給它 4 bits, 不然不知道它還會變出什麼花樣來!? TS 102 114 – DTS Coherent Acoustics; Core and Extensions 裡面說到, DTS 的 core 只支援 8/16/32, 11.025/22.05/44.1, 12/24/48 九種 sampling rate, 要加上 extension 才會鬧出 96 KHz.

[note2] 如果去看美規的 A/53 part5 – ATSC Television Standard / AC3 Audio System Characteristics, AC-3 只能夠有 48 KHz 一種頻率, 乾淨多了.

原來 DTS core 為了節省頻寬, 竟然會選擇傳 8KHz 那樣小家子氣的東西. Receiver 必須 up-sampling 2 倍到 4 倍, 以便做出傳統 32/44.1/48 KHz 的 DTS. 然後再加上 extansion 裡面要求支援 X-CH (也就是 6.1CH) 和 X96 (也就是 96KHz extrension), 做出更好的音效, 包括上看 8 channels.

[note] 在 TS 102 114 定義了 8CH 在 frame header 裡面, 但是回歸母體的  ETSI 000 468, descriptor 最多只有支援 5CH.

最後來到 AAC 與 HE-AAC, 這本規格說什麼呢? 沒說! 它說去看 ISO/IEC 14496-3. 因此只能推估頻率上限是和 AC3 相仿的 48 KHz 或是 AAC 上限的 96 KHz, 頻道是 5.1 CH.

 

Line mode / RF mode

Google 大神通常都是有求必應, 不過當我輸入 “line mode rf rt lt ro lo" 這些關鍵字,想要釐清一些觀念時, 第一個跳出來的 URL, 竟然是…是我的部落格. 那我不是問道於 XX 了嗎? 嗯, 這樣說自己不太好, 改成問盜於氓好了~~~

還好, 調整一下字串後, 找到一本 Edwin Paul J. Tozer 所寫的 “Broadcast engineer’s reference book". 這位可憐的作者, 辛苦寫出的內容被 Google 大量引用放在網路上, 實在憂喜參半. 更何況我為了要引用它的內容, 還要助紂為孽呢! 幸好我只引用局部文字, 請有興趣的人還是去買他的書.

在 DRC 的領域, 也就是 dynamic range  control, 有許多種 implementation. 所謂的 Line mode 就是使用者可以控制音量範圍, 包括小到 0, 大到原來的完整訊號. 如果是 RF mode, 就是保持音量和 TV 正常的音量相符.

如果沒有 down-mix, 上述的觀念很容易了解. 如果多聲道要 down-mix 到 2 聲道, Line mode 還比較容易達到, 但是 RF mode 就要仔細調參數了.

其中, Lt 和 Rt 是固定參數, t 表示 total, 左聲道會有右聲道的成分, 反之亦然. Lo 和 Ro 是變動的參數, o 表示 only, 左聲道不會混到右聲道, 反之亦然.

C code 容易忽略的小地方

有時候大家會想去 print 一個 pointer 裡面的值, 這個在 assembly code 中相當直覺, 在 C code 中需要一點點的技巧. 比方說 printf 預設的參數型別是 long, 那麼 int pointer 就需要轉一下, 才能夠保證印出心中所想的值.

int *ptr;

int data[100];

ptr = data;

for (i = 0; i < 100; i++)

{

printf("index %d = %x\n", i, *((long*)ptr));

就比

printf("index %d = %x\n", i, *ptr);

來得保險.

ptr++;

}

秘書演算法 (Secretary Algorithm)

這個演算法的故事背景聽起來就比推銷員演算法 (traveling salesman) 有趣多了. 傻傻的推銷員只會走來走去, 秘書演算法卻可以讓大家過老闆的癮呢! 可惜我以前念書的時候, 只有推銷員問題, 老師或書本上都沒有祕書問題. 上次看到有位小朋友研究這個問題得了獎, 因此我才有機會試著了解一下! (這位小朋友研究的是: 有競爭者的時候, 應該錄取第幾位秘書.)

假設有一個大老闆在挑選秘書, 又有很多的準秘書來應徵, 老闆如何在最短的時間內, 挑到最好的人才呢? 這就是秘書演算法討論的問題. 如果真的把每一位秘書都 interview 過一輪, 而且大家都願意等 offer (這是 off-line algorithm), 我們當然 100% 會挑到最好的, 但若是時間有限, 好秘書不等人, 我們怎樣在 95% 信心度之下, 挑出最好的那一位, 又不用面試完所有的人呢? (這樣好像在解計量考題…)

只選一位秘書的狀況下, 假使我們從 n 位應徵者中, 隨機面談了 k 位,  k = 1,2,3…, 每面談一位, 老闆就要決定是否發 offer. 此時大家應該可以感受, 發 offer 與不發都需要智慧. 因為 offer 發出去就沒有了, 一不小心就錯過了最好的那位候選人 (這是 on-line algorithm).

on-line performance 對 off-line performance 的比值叫做 competitive ratio, 用來評估演算法好不好.有個 1/3 – competitive ratio 的演算法可以改進上面的狀況. 我們先從 n 位應徵者中面談一半的人, 然後挑出裡面最好的那一個, 假設他 (她) 的面談分數是 max v 分. 然後呢, 對於後一半的應徵者, 只要分數高過於 max v 分, 馬上就錄取他 (她), 後面的人就完全不用考慮了.

如果有 k 個 offer 要發, 我們優化的目標就變成有多樣選擇: (1) 在最少的面談次數找到最佳候選人, (2) 最小化 k 個錄取者的排名總和, (3) 最大化 k 個錄取者的評分總和. 因為要挑到最好的人的機率 (probability), 以及選擇最少的面談次數, 兩者是互斥的.

要從 n 個應徵者當中挑出 k 個人進公司時, 可以從 n 當中隨機挑出約一半的 m 個人, 並且發出 k 個名額當中約一半的 l 個 offer. 因此, n 選 k 的問題就縮減成了 m 選 l 的問題.

由第 m+1 個人開始, 如果這個人比我們已經發出 offer 的人都還要高分, 我們就錄取他/她. 不知道理解得對不對, 這個演算法是 divide and conquer. 據說這個演算法的 competitive ratio 為 1-O((1/k)1/2). 

1966 年, Chow 等人證明在應徵者無限多, 只發一個 offer 時, 理論上選第 3.8695 的人最好, 也就是錄取第四個人吧! (我理解錯了的話, 還請網友糾正, 謝謝!)

我以前的老闆跟我說: “你面談的時候, 至少要談 3 個人才能能發 offer." 所以經驗法則和上面的證明也差不了多少. 事實上, 如果是以前熱門的國防役, 大概要談 10 個人才會錄取一個人. 2004 年, 我手上有 4 個國防役名額的時候, 就花了好多的時間在面談. 後來更是發了幾十個 offer 給軟體和韌體工程師, 一整年幾乎都荒廢了.

附帶一提, 數學上講究的是最佳化, 也就是談最少的人, 達到最滿意的結果. 然而, 在現實生活中, 考慮的層面就不是這麼單純, 我們不需要最佳化面談的時間, 因為人才是公司最重要的資產. 如果只是為了省主管的時間,  而找到次佳的人進來, 若他/她已經落入不佳的等級, 可能是公司莫大的災難.

K 個 offer (choice) 這個題目好像很多人都做過研究了, 我覺得考慮競爭者 (別的公司也在面談) 和錄取者彼此互補性都是很有趣的題目. 比方說, 過去的研究都是假設每個人只有一分數, 但若是錄取 A,B,C 3 人, A 的表現會受 B,C 的影響, 那麼這樣會更加地有趣.

在 “小職員週記" 這套漫畫裡提到, 其實公司會交替地錄用聰明的人, 踏實的人等等. 因為新人進來一陣子之後就會看到他/她們的缺點, 因此會想要找一點不同的人來彌補那些缺點. 所以這個命題也並非無的放矢, 我們在真實世界的面談分數也是隨者資深者已經有幾人, 無經驗者可以有幾人而變動的.

 [Ref] http://paul.rutgers.edu/~mangesh/cs514/notes/pres8.pdf