Skip to main content

[ 2007/11/21 ] Google 台北程式開發日


[2007/11/21] Google 台北程式開發日參加者小禮物:T-shirt、掛牌、google筆和可樂紅的手機吊飾 (OS : 晚了一天才將照片貼出來,本來已經打算不分享了,不過拍了都拍了還是貼出來混版面也好。)

會參加這次研討會的原因並不是對google小工具有所研究,而是好奇心使然。連坐在隔壁不認識的工程師都問我同樣的問題,也只能回答...呵呵我是來野餐的!講到野餐,會場佈置果然發揮了google「免驚么」精神,距離座位的100公尺內一定找的到食物,真是貼心到極點,加分!加分!

回到正題,早上的議題由google工程師分享一些基本的google小工具開發概論;下午則是google小工具徵選的頒獎典禮與分組競賽。原來全世界google小工具徵選比賽中,台灣區參加的數量是最多的,其中一個得獎者更提出超過30組的作品,當然這位得獎者也將被google邀請至美國總部去玩!到了分組競賽,為了小獎品而與同事一起參予。兩個人都沒有研究過小工具的寫法所以直接利用包裝swf的做法,但是偷吃步的下場就是卡死在google提供的崁入swf api...當時使用 _IG_EmbedFlash() tag來link swf結果發生了swf無法讀入外部資料的xml,但是直接將swf放置在網頁上是正常的...一陣混亂弄到時間到只好殘念...為此還請教了有開發經驗的 Kyle ,他使用dreamweaver原本的js來呼叫swf 基本上就可以正常顯示,所以很可能是google api的問題嚕!有機會再來深入研究看看...=)

google小工具得獎作品

Comments

Popular posts from this blog

PureMVC 我也會 [0]

最近感覺 PureMVC 又熱了起來,也剛好好久沒有更新文章了, 就順便將去年底做的企業內訓 PureMVC 課程部分整理寫出來, 要講 PureMVC 當然要先從啥是 MVC 講起: Model-View-Control 出處: 維基百科 MVC ,大概節錄一段: (控制器Controller)- 負責轉發請求,對請求進行處理。 (檢視View) - 介面設計人員進行圖形介面設計。 (模型Model) - 程式設計師編寫程式應有的功能(實作算法等等)、數據庫專家進行資料管理和數據庫設計(可以實作具體的功能)。 其實到 Flash 的世界來講,Model and Control 都是由 .as 處理,而 View 便是 .fla+.as ,為了要鬆綁之間的關係,Event 機制就相當重要。其實每個人對 MVC 的最佳解釋都不同,真的要多練習才會有所領悟。 簡單來說: Model = 餐廳廚房 data: 西餐類 action:依照點菜單做餐點 action: 做完餐點就是將餐點放在出菜口按下通知鈴等服務生來 Control = 服務生 action: 聽到大門歡迎鈴就要說「歡迎光臨」 action: 看到客人揮揮手要去收點菜單 action: 聽到廚房通知鈴看是哪桌的餐點去送菜 View = 餐廳外場 view: 田園式的西餐廳裝潢 action: 客人進門會有歡迎鈴 action: 客人揮揮手叫服務生過來服務,是哪個服務生都無所謂,重點只要會收點菜就行了。 action: 客人收到餐點準備開動 當餐廳要改成外炒店,這時候只需要將大廚換成會中餐廚師,其出的菜就是中式快炒。 當餐廳外場由田園式外觀重新裝潢成華麗感夜店風,其進門的客層也會有所不同。 重點就是當你換掉一個地方時,對其它的部份不會造成太大的影響或者根本無所謂,這就是 MVC 所講求的境界... 一般來說,小專案有沒有必要使用 MVC 就是由各位自己判斷了,當你習慣將程式切分開來,發現 debug 不是一件痛苦的事情時,這時候有沒有強制使用 MVC 倒不是重點,因為你已經養成良好的撰寫習慣。但是開始接觸大型專案配合 team work 時,在沒有一個共用的核心框架前提下,這個專案開發到最後一定會是一個多手多腳的怪物,共用核心框架的價值就在這邊展現,這

[Swift3] weak 與 unowned 關鍵字

雖然在 Swift 中看起來"很像"是不需要煩惱內存管理的問題,不過實際上它還是遵循著自動引用計數 (ARC) 的規則,當一個物件沒有被其他對象引用時會自動被銷毀,如果三魂七魄沒有完全回位的話,就會有個靈體留在現世的空間裡,最經典的範例如下: 閉包(Closure)引用 classClassA { typealias Complete = ()->() var name : String var onComplete : Complete? init(_ name: String){ self.name = name print("Hello I am \(self.name)") onComplete = { print("\(self.name): onComplete!") // --> 閉包引用 self, 計數 + 1 } } deinit { print("deinit: \(self.name)") } } var a : ClassA? = ClassA("A") // --> 引用計數 + 1 a = nil // 2-1 = 1 還剩下 1 所以沒辦法銷毀 ---output------- Hello I am A 由於這邊的 onComplete 宣告為 Optional, 正確的做法要連同 onComplete 一起刪除才可以被回收,若不是 Optional 則會進入無法回收狀態: var b : ClassA? = ClassA("B") b?.onComplete = nil // --> 還好是 Optional 可以設成 nil 計數 - 1 b = nil // 計數 = 0 所以被回收 ---output------- Hello I am B deinit: B 但是做人不需要煩惱太多,這時候就出動 unowned 關鍵字讓物件可以順利被回收: onComplete = { [unowned self] in print