close

今天跑去參加了Google Developer Day,發現這個業界還真小,除了遇到公司的學長外,Mis94、93跟92全到齊了,加上CDPA的學長,吃午餐時有半桌都是中山幫的,報到的時候還遇到了當兵時的班兵-斌哥(他跟我鄰兵也都中山的,到了軍中才相認XD),Google的魅力還真大,平常遇不到的人,今天還遇到不少。

主要參加的Session為Google App EngineAndroid,除了Android的最後一個Session講google Android platform的VM設計理念之外,其他的Session都是英文的,貼心的google還準備了現場口譯,英文不好的人可以申請耳機聽口譯,好在除了Android簡介的那個華人講的英文比較聽不懂外,其他兩個Native Speaker的英文都還滿標準的,所以申請的人也不多。

Google App Engine
Google App Engine是google新的web host服務,以往我們在申請免費的網頁空間時,主機的host多半會限制只能使用傳統的HTML靜態網頁,連動態網頁語言都不能用,更遑論使用資料庫了,現在,只要會寫python,透過Google App Engine所提供的API,google提供你500MB包含資料庫的動態網頁空間,你可以利用Google App Engine開發任何你想要的動態網頁服務,使用資料庫也只要透過GQL Libary所提供的函式便能使用資料庫來開發更強大的網頁應用程式,Google還提供2G的免費頻寬以及每月500萬個page view,如果超出以上限制才需要收費,對於SOHO用戶以及小型企業來說,實在是個非常吸引人的服務。

當然,Google App Engine也不是沒有缺點,第一個就是開發語言的問題,在國外python有多少用戶我是不知道,不過在國內用python的人搞不好比用Ruby的人還少,再加上用python寫動態網頁需要的code好像也沒少到哪裡去,開發速度個人覺得可能還是不會快到哪裡,對小企業而言,要找個會python的人力應該也不是太好找,第二,GQL的資料庫並不是傳統的關聯性資料庫,反而比較接近物件導向資料庫,所以並沒有Table的觀念,取而代之的是Entity跟繼承的概念,雖然講者說這樣的設計對於分散式系統來說,存取DB的效能會比較好,因為在做Transaction的時候不用鎖整個DB或者是TABLE,因為它是平行存取所有的Entity,我用下面的例子來講解:

假設今天我們有一個投票系統,使用者分別從A、B、C三個網站進來投票,當使用者在投票的時候A、B、C這三個網站會去UDATE Table D的總票數,在傳統關聯式資料庫中,假設A在update Table D的時候,會將Table D鎖住,不讓別人讀取或者是更新資料,此時若B、C同時有人也來投票,B跟C就會等A更新完資料庫後,在輪流更新Table D,如此一來資料就不會因為同時存取造成錯亂。

Google App Engine則是採用Entity的概念,也就是說我不使用Table D而是使用多個Entity來儲存投票的資料,如上當今天A先進來存取時,可能分配到的是Entity 1,同一時間B、C也進來存取,他們分配到的是Entity2跟3,因為他們Update是不同的Entity,所以可以同時更新,更新完票數後總票數則是取所有Entity的加總,如此一來,A、B、C就不用為了資源被鎖住而浪費等待的時間。

這種做法看似很方便,平行處理時的效能也的確提升,但是因為Entity沒有Table的觀念,所以當你要reference其他相關的資料時,做法就比較複雜,而這些做法都要透過程式設計師在程式的設計中解決,整個看起來,利用Google App Engine所提供的資料庫時,以前有一部分資料庫的工作需要由Programmer來完成,這點我是覺得對Programmer來說會比較累,不過可以換來一些執行效率就是了。

Android
Android是Google的Mobile Phone平台,底層是Linux Kernel 2.6,在上面跑的AP依然是JAVA,有別於傳統JAVA以及其他VM,Android針對記憶體以及其他系統資源的利用上做了相當多的改善,就以JAVA來說,Android上面跑的並不是jar,而是透過google自己的轉碼器將JAR轉成Android的dex格式(dex學長,你紅了趕快去收權利金XD),dex是利用一些referece方式可將原本JAR裡面的ruduant code去除並且重複使用一些可重用的資料,透過這種方式,可將原來的JAR程式本體在run time的記憶體空間使用縮小至50%,然後,Android的VM也重新寫過,將傳統程式以stack base的執行方式改為register base的處理方式並針對一些常用的CPU instruction做最佳化,但是真正要達到執行更快速有效率的程式,還是要靠程式設計師寫程式時考量執行效率來寫,以下是範例:

假設我們要將一個陣列中所有的值累加起來,有下面三種寫法:
(1)
for(int i=0; i<arr.length(); i++){ sum += arr[i];}

(2)
for(int i ; arr){ sum += i;}

(3)
int length=arr.length();
for(int i=0;i<length;i++){ sum += arr[i];}

Android中的執行效率是(2)>(3)>(1),因此,在系統資源是兵家必爭的手持式系統中,程式的執行效率還是得看Programmer寫程式的功力拉。

心得:
這次google develop day真的是太讚了,除了講者的品質讓人覺得Google非常的有誠意之外,飲料(雪碧、可樂都是曲線瓶)、餅乾點心吃免錢,還包一個超豪華的午餐,現場還有Wii、PS3、桌上足球以及一些休閒設施,另外填完問卷還有T-shirt可拿,這些都是完全免費喔!!聽說報名就報了五千多個,現場應該也有個一兩千人吧,Google這次灑重金吸引Developer加入陣營的活動,讓人感覺到非常的有誠意阿。

除了學到google的新技術之外,也從Bob強學長那學到了twitter這個新玩意兒,twitter是個微型blog,只能打一些簡單的訊息,大概就是類似Blog上面的碎碎唸或者是MSN上面的狀態之類的,主要是讓親朋好友知道你現在在幹麻,像Bob強學長就show給我看他的Twister上面有多少人在Google Develop Day的現場,還滿有趣的,後來和zmx學長在聽Android時發現他也有在完這東西,只能說我對新資訊的接收能力還是很弱阿。

現在Pixnet的碎碎唸也有支援twitter喔,詳情請見這

===0616===
下班突然發現怎麼今天這個板上這麼熱鬧,原來是這篇文章被鼎鼎大名的阿修Link了,難得流量破百阿~~紀念一下^^


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 nsysumis94 的頭像
    nsysumis94

    Nightmare的胡言亂語

    nsysumis94 發表在 痞客邦 留言(3) 人氣()