2011年10月27日 星期四

把瀏覽器當虛擬平台?

每次要跑虛擬機時,都要有一個Hypervisor,不管是原生或寄居架構,但不管是哪一種架構,總要有一個硬體平台吧?總要分配CPU、記憶體或磁碟空間吧?下面這個Linux,卻是真正把VM的層次拉高到最上層:瀏覽器。這是一個用Javascript重寫的Linux核心,而Javascript的執行平台正是瀏覽器!曾經有人懷疑這只是一個模擬Linux的介面而已,但現在已證實是真正的Linux核心了。


Fabrice Bellard是誰應該不用介紹了,是ffmpeg、QEMU的原創人,高中時就開發出LZEXE這個壓縮軟體,不但是有名的電腦工程師,也是有名的數學家,這邊可以看到Fabrice Bellard的維基介紹。

這個用Javascript寫出來的Linux不但可以執行,更可以用來學習Linux的指令,如vi等。大家就到

http://bellard.org/

到這邊來玩玩吧!

Reference:
http://vaemon.com/article/1363.html
http://www.softwarequalityconnection.com/2011/03/fabrice-bellard-portrait-of-a-superproductive-programmer/

不得不說,WP7開發的資料真的是太少了,國內有句話叫「天下文章一大抄」,查Application.GetResourceStream的用法,找遍了整個網絡,無非就那一兩篇,而且寫得還不完整,包括微軟官方的例子。在花了近半天的時間後,終於解決問題。
我們可以預先把程序中用到的資源,如圖片,音樂等放入項目中,打包進XAP文檔,需要的時候再從中取用。下面就說說具體實現方法。

第一步,把資料存進項目。
1、右鍵點擊項目名稱-新增-新建資料夾,這裡文件夾名以 Images 為例,把需要的圖片拖進來,當然你也可以不建,直接把圖片拖到根目錄底下。
2、選中剛剛拖進去的圖片,看右下角的屬性標籤,如果沒有,右鍵點圖片,選屬性,確認圖片屬性中的建置動作為 Resource

第二步,程式呼叫。
1
System.IO.Stream src = Application.GetResourceStream(new Uri("/PhoneAppX;component/Images/abc.png", UriKind.Relative)).Stream;
關鍵在 Uri 的格式,PhoneAppX 是項目名稱,component 是固定路徑,Images/abc.jpg 才是圖片資源相對路徑,得到的是 Stream,在微軟官方的例子中,使用下面的方法來轉換成圖片:
1
2
3
4
            BitmapImage bi = new BitmapImage();
            bi.SetSource(src);
            Image img = new Image();
            img.Source = bi;
網路上的文章基本上都沒寫第一步,常常就卡在這裡,新增圖片還好,但是屬性的建置動作沒設好或改成其他屬性,導致程式在 Run 的時候常常丟出 Exception!


Reference To: http://www.pocketdigi.com/20110925/498.html