Android Market 的運作機制

當我們從 Android Market 買一個 Application 的時候, Market 的 client 就會去問 server, 這個 application 對於這個 user 的狀態是什麼? 此外, 這個狀態不只是付費了沒有? 而是包括了詳盡的特殊條件 (custom constraints), 比方說只是試用一段時間、只能裝在特殊的平台…等等的 policy.

當 application 在 check status 的時候, 會產生一對 RSA key 來做加解密. Public key 會存在 myApp.apk 裡面, private key 用來與 server 溝通. 當 Application 想要知道它的license status, 它可以 call License Verification Library (LVL) 裡面帶有 callback function 的 library checker method.

Market client 負責與 market server 溝通, 它會收集 Google Account username, 手機的 (International Mobile Subscriber Identity), 和其他資訊送給 server 確認. Server 檢查過 user 資料, 並且檢查過購買紀錄之後, 就以 call back function 把 license 的狀態傳回給 client.

在 Java 的理想下, 一隻 AP 可以 write once, run everywhere. 不過前提依然是要能夠賺錢. 不收錢的軟體, Android Market 就不需要動用 license 檢查的機制的, 但對於收費軟體,  Android Market 讓花功夫寫軟體的人, 可以保障他的權利, 只要這個軟體是透過 Android market 所發佈的. 為了追蹤合法性, Android market client 必須要先在 host 上面跑 Android 1.5  以後的版本.

為了要確認 license 的狀態, Android 必須要上網, 或者是記住 (cache) 上次上網的狀態.

[ref] http://developer.android.com/guide/publishing/licensing.html

 

DOCSIS 小註解

DOCSIS 是有線電視傳輸 data 用的規格, 全名為 Data-Over-Cable Service Interface Specifications. 就是它使得電視也可以用 cable modem 上網. 其中 3.0 規格支援 IPv6, 而且全系列都是相容的.

規格 下行速率 (Mbps) 上行速率 (Mbps)
DOCSIS 1.0 30 10
DOCSIS 2.0 40 30
DOCSIS 3.0 200 100

在 fiber to home 的世界裡, EPON (Ethernet PON ), GPON (Gigabit PON ) 是現在的主流技術. 所謂的 PON 就是 passive optical network – 光線被動網路. 簡而言之, 就是 Ethernet 跑在光纖上. 但 DOCSIS 呢? 最後一段不是同軸電纜嗎? 這就是 DOCSIS 4.0 想要著墨的 DPON 技術, 集合 DOCSIS + PON 兩者的特性.

但也有人吐槽 DOCSIS 4.0 不應該存在, 只要把 DOCSIS 速度一直加快就好了. 這個出現在 DOCSIS 4.0 的 Google search 前幾名, 所以順便提一下. 至於通到家裡的網路, 我想光纖 (即便進社區的最後一百公尺其實是電話線) 和同軸兩條應該都會同時存在, 有兩條路可以上網似乎也不壞. 雖然說空氣中還有一個寬頻的 3.5G (HSDPA) 和未來的 4G (LTE) 揮不去又可能有害健康地存在著.

[ref]

A Proposal for DOCSIS 4.0


Git 小檔案

Git 是一個罵人的字, 意思大概是蠢蛋, 由 Linux 的作者 Linus Torvalds 所命名. 說到 Git,  總有些人不熟悉, 但是講到它的競爭對手 CVS, Subversion 大家應該就有點感覺了吧!

Git 算是個分散式的版本管理系統, 和笨重的 SVN 相比, 它只記錄 content 的變化, 而不以檔案為管理的對象. 基本上 Git 由 blob object (file's content)、tree object (directory)、commit object (tree's history)、和 tag object (metadata 的 container) 所構成.

因為 Git commit 的動作可以在 local repository 就完成, 所以可以同時 maintain 一個量產的版本, 一個或多個的 branch 開發新 feature, 卻不用為每一個 branch check out 到一個 local 的目錄. 等到連上了網路之後, 做一個 push 的動作, 才把 local 的東西 commit 到 server.

Git 可以對所有的 object 做 SHA-1 的 hash, 把 hash value 當作 object 的名稱. 因此一段 code 從 A.h 搬到 B.h, 就等效於一個 object 搬家, 加上對應的 object 跟著改變 (object 支援 zip 的壓縮). 反觀 SVN 中, 這意味著 A.h 和 B.h 獨立地改變了. 若下次只 check out A.h, compiler 就會報錯.

只靠這樣粗淺的了解, 我覺得 git 至少比 SVN 節能減碳,少用很多硬碟空間 – 不必為每顆 IC 建一棵樹. 但不知道全靠 metadata 來維繫的 "假的 branch" 是不是比較容易毀損呢? 目前看到 Git 不如 SVN 的地方就是它沒有 Windows 的版本. 如果這個東西做出來, SVN 咳咳, 可就要 bye bye 了. 請看迴響 1, Git 也有 Windows 版囉!

[ref]

1. http://en.wikipedia.org/wiki/Git_(software)

2. http://ihower.tw/blog/archives/2591

3. http://ihower.tw/blog/archives/2620

4. https://peepcode.com/products/git-internals-pdf (賣 9 USD)

大陸互聯網電視牌照小檔案

大陸的彩電業去年 (2009/3)推出了互聯網電視, 讓電視可以上 internet 遨遊. 有一度還可以連到迅雷、 PPS, 讓大家有看不完的盜版影視節目 (其中PPS 買了很多正版, 以便和迅雷有區隔). 不過這種美景沒過多久, 就被廣電總局給戳破了.

2009 年 8 月, 廣電總局行文公告列管互聯網電視. 起初使得是釜底抽薪法, 把一些 BT 網站全查封了. 這段期間內, 大家可能忽然都不需要買新硬碟了. 因為沒有 source 可以抓, 硬碟自然就不會爆. 不過這個方法似乎不太好, 連 PC 的玩家也連帶受累啦! 在網路上的人少了, 在真實世界的閒人就多了, 大陸也怕閒人多吧… 曾幾何時, 這些網站又開張了, 硬碟業也喘了一口氣~~~

2010 年 3 月, 廣電總局發放互聯網電視牌照, 告訴這些彩電業者: 互聯網電視可以賣, 也可以上網, 但是不能隨便上. 想看視頻嗎?  從有牌照的集成業者那邊上就對了! 不消說廣電總局發牌的對象仍然是廣電系的子弟兵, 第一波由央視、上海文廣、和杭州華數取得牌照.

但彩電業者就不高興了. 三家內容提供商向彩電企業開出的帳單並不便宜,均攤至每台電視機,將產生數十元到一百多元不等的服務費。若以每台50元服務費、一年銷售300萬台網際網路電視的銷售目標計算,一家彩電企業為購買內容,就要付出1.5億元的成本。[註 1]

不過是建個 portal, 彩電業者也有財力能做這件事. 創維自建的酷開網, 投資不過是幾千萬而已. 於是彩電業聯合向廣電總局抗議: 至少報氣象、玩遊戲不歸廣電總局管吧! 廣電總局接著在 2010 年 4 月再發佈 "互聯網電視內容服務管理規範", 這個公文被解讀為集成可能再適度地開放, 但是內容會抓得緊一點.

2010 年 8 月有小道消息說, 廣電總局再發給 3 家公司集成牌照: 上海廣播電視台、南廣傳媒、和湖南衛視. 算是緩和了彩電業者對於網路視頻牌照有兩三百張 (此處指信息網絡傳播視聽節目許可證) [註 2], 互聯網電視卻只有 3 張牌的不滿情緒. 不過, 既然所有的政令都出自黨中央, 政府不讓你的電視上網, 也可以避免家家都爬牆的恐怖事件發生. 試想, 家家有電視, 接著戶戶都可以上自由門, 翻過網路長城, 那…絕對不是中國政府所樂於看到的.

[ref]

[註1] 彩電廠商疾呼:自建平臺應可申請內容集成牌照

[註2] 經營 IPTV 實際上需要四張執照, 除了廣電總局的 "信息網絡傳播視聽節目許可證", 還有文化部的"網路文化經營許可證", 信產部的 "ICP 證" 和 "移動增值業許可證". 但難拿的是廣電總局的那一張.

3D Object Culling 小註解

假設要畫出 3D image, 那麼只能在單個眼睛成像的近物就不用畫出來, 因為畫了也不會有立體感, 這個砍掉無用訊號的步驟就叫做 culling.

假設綠色線表是兩眼的距離, 紅色線表示螢幕的寬度. Z 要砍到哪裡呢? 根據我女兒在國二學的數學, 左上和右下的兩個三角形 (或是左下和右上) 符合三個角都相等 (AAA) 的相似三角形.

所以

Z / (I / 2) = (D - Z) / (W / 2)

Z / I = (D-Z) / W

Z = D / (1 + W/ I)

對於近在眼前而 “跳出螢幕" 的 object, 只需要畫出藍色的三角形. 螢幕 (W) 超大的時候, Z 可以忽略不計 (case A). 有嚴重的鬥雞眼 (I 0), Z 也會隨之減小 (case B).

不過照公式, 兩眼近到等效只有一隻眼睛的時候, Z 趨近於 0, 反而全部 object 都要畫. 但是此時已經沒有所謂的立體感了 (兩隻眼睛才有立體感), 大家有看出哪裡不對嗎?

我想: case A 中, 交叉點隨著螢幕變大而往左移,  case B 中是眼睛往交叉點移, 所以並沒有多畫. :P