2015年3月31日 星期二

iOS 8 地雷地圖

最近為了做 PM2.5 監測用 App - 肺欲清,著手開始了 iOS 的開發,這兩個禮拜來大致上瞭解了 iOS development 如何不踩到地雷的大邏輯。


只要是 Apple 預先幫你用現有元件另外組好的元件都不要用,譬如說:

1. iOS 7 的時候提供了 UISearchDisplayController & Search Bar ,他基本上就是 Search Bar 加上一組隱藏好的 Search Display Controller 幫你處理一些隱藏邏輯,在 iOS 8 的時候 UISearchDisplayController 就被 deprecate 掉了, Apple 建議改用 UISearchController,該元件幫你處理好了 UISearchBar 跟 Search Logic 的部分。但其中自動產生的 SearchBar 如果用了 Scope,Layout 會整個爛掉... 所以這種情況下,倒不如自己手動用 UISearchBar 跟客製化的 Search Controller 會比 UISearchController 或 UISearchDisplayController 來得穩且透明。

2. UITableViewController 就是內建 UITableView 的 Controller,在 ExtendedEdge 會有 Bug .. TableView 會被畫在 StatusBar 底下...

另外建議新的東西如果沒有特別需要,盡量都不要用,舊的被 Deprecated 的反而可以盡量多留久一點,原因是: 舊的會比新的被建議的方式穩定 XD 俗話說 If it's not broken, don't fix it.

#iOSMineMap

2015年3月2日 星期一

Lars Bak 談 JavaScript V8 virtual machine 的設計

Lars Bak 談 JavaScript V8 virtual machine 的設計:
其中 Lars 有談到 V8 不使用 byte code,你能夠執行 JavaScript 唯一的方式就是透過 native code,所有的程式都是先編譯後執行,沒有解譯:
"There is no interpretation and no bytecode."
V8 不像其他 VM 是透過 bytecode 或是像 JVM 有 HotSpot 有多種方式執行程式,如在 interpreter 或 native code 之間切換。Lars Bak 開玩笑的說,Developer 在改 V8 compiler 的時候,他們看到這些 native code ... will be horrified.
直接在執行期間 compile 成 native code 執行的這個設計與一般 VM 大相逕庭,因為不管是 JVM, PHP, Python, Ruby, C# 都是透過 Byte code 做 interpretation,而這點引起了 Erik Meijer 不理解而提出質疑。
Lars Bak 解釋道 「若我們設計了 IR (Intermediate Representation) 中介表示,我們就必須對這些 IR 做驗證 (validation),然而驗證 IR 是非常複雜的,譬如驗證 Byte code 是否有 Violation 等等。 譬如說 JMP,你必須驗證 JMP 的位址是正確的,否則會有安全顧慮。 」
而我認為這是沒錯的,一般 Interpreter 儲存 op list 於 HEAP 中,只需 RW 權限即可竄改 op list,但 V8 是在用戶端執行的,你很難保證在用戶端的環境的安全性是足夠的,我猜這是 Lars Bak 過去在 Sun microsystem 做 JVM 以來的經驗。 Lars Bak 不僅為了高效能設計 V8 而也兼顧了安全性。
話說,翻了幾個 VM 的 source code,不管是 cpython, perl, cruby ,目前覺得還是 V8 的架構最優、workaround 最少、最簡潔,完全是不同等級的實作

同步刊載於 C9S 開源電台