每一年都在 OSDC.tw 結束之後好幾天才整理文章,整理到最後都毫無記憶可言。今年我決定要把握我在台北有多待一下的時間與空間,馬上動手寫。(握拳)(結果還是來不及當天整理完畢 XD)

依慣例是先來一些我收集到的其他人的筆記:




#1, Eric Shangkuan (Microsoft),《微軟與 jQuery 社群的親密接觸》


這次 ericsk 來的目的是要聊聊微軟與 open source 社群的互動。目前 ericsk 已經離開了 GTUG,話說上官大師去了微軟以後連示範用的瀏覽器都變成 IE9 了。 XD

首先簡單介紹 jQuery:jQuery 是一個輕薄短小的 JavaScript library,可以協助開發者處理跨瀏覽器問題 (cross-browser issue)。透過 jQuery,開發者不需要再自己去留意不同瀏覽器各自操作 DOM 的 API、可以輕鬆 access 各個 DOM 元素。如果從兩三年前就開始用 jQuery,應該會發現 logo 已經不是紅色的河內塔了。XD

jQuery 最吸引人的地方是可以使用 CSS 3 selector 來選取 DOM tree 上的元素,也提供了很多 AJAX 相關函式,讓開發者可以輕鬆產生更加豐富的網頁內容。透過 jQuery,我們可以輕鬆的在頁面上產生任意元素、改變其外觀、產生動態效果等……

「作為一個 developer,相信 jQuery 一定在你學習的路上。」

微軟如何在 jQuery 上與開源碼社群互動?在 2008 年開始,Visual Studio 2008 裡開始把 jQuery 放進來,比方說,需要一個 accordion,在工具箱可以直接拖曳一個這樣的物件進來。.NET 本來有自己的 AJAX Control Toolkit,現在,很多的元件也開始用 jQuery 改寫。此外,在 Visual Studio 裡也提供了 jQuery code intellisense,輔助享受手寫程式時快感的硬派工程師。微軟現在也有 host jQuery & jQuery UI,可以從 CDN 上直接連結。

接著會介紹三個由微軟的 Boris Moore 提出的 proposal 所設計出來的 jQuery plugin:jQuery Template, jQuery DataLink & jQuery Globalzation。

1. jQuery Template
當我們在前端處理很多動作時,如果全部都用字串加來加去,效率會不好,程式碼也不好維護,所以如果可以用 template,就能改善這個問題。jQuery Template 大約會在四月釋出官方的 1.0 版本。

jQuery Template 提供了三種方式來提供 template:

  1. data 這個 object 裡存放了 foo 和 bar 這兩個參數,可以用這種方式使用:
    $("<div>${foo}</div><div>${bar}</div>").tmpl(data)
  2. 透過 jQuery template 自訂的 type,來產生一個不顯示在頁面上的 HTML tag,到時候再讓它透過 template 的機制產生出來:
    <script id="my-tmpl" type="text/x-jquery-tmpl">
                <div>${foo}</div><div>${bar}</div>
    </script>
    <script>
                $("#my-tmpl").tmpl(data)
    </script>
  3. 先在頁面上藏一個不顯示的 HTML tag,在裡面放 template 要用的東西:
    <div id="my-tmpl" style="display:none">
                ${foo} says ${bar}
    </div>
    <script>
                $("#my-tmpl").tmpl(data)
    </script>

投影片裡第 11 頁裡介紹了主要的 Template Syntax,我個人覺得有點像 XSL 的寫法,只是角括號換成了大括號。而 template 裡甚至可以再放一段 function,把 function 產生出來的內容置換進去樣版裡。

2. jQuery Datalink
它可以把欄位取出來放到物件裡,譬如說,做表單驗證時可以用,不必再逐一從 input 拿值出來,可以利用這個 plugin 輔助。

3. jQuery Globalzation
可以利用自訂 pattern 來產生格式字串
    var $zhTW = $.global.cultures["zh-TW"];
    var dateStrZhTW = $.global.format(
        new Date(2011, 3, 25),
        $zhTW.calendars.standard.patterns.D,
        $zhTW

    );

同樣的 object 可以根據不同的 locale 來產生不同的內容,可以建立字典檔來做翻譯對照。

最後是微軟小廣告時間~

  1. 使用 Visual Web Developer Express,就能夠使用 jQuery 的 intellisense 。
  2. BizSpark / DreamSpark 可以輔助新創公司,不僅僅提供資源,也提供技術上的支援,包括 MSDN 等。





#2, Jui-Nan Lin (PIXNET), "HandlerSocket - A NoSQL plugin for MySQL"

NoSQL 的好處是:

  1. Scalable: 不用擔心資料成長得太肥大
  2. Fast: 它是 key value based,因此讀取速度會很快

但不免也有壞處,比方說:不夠穩定,像去年 (2010) twitter 就放棄用 Cassandra 來儲存主要內容、只拿 NoSQL 來處理外圍的內容。

為了從中取得平衡,所以有了 HandlerSocket for MySQL──行之有年的 MySQL 很穩定,也有很多會用它的人;而 HandlerSocket 可以提供一個在 MySQL 上使用 NoSQL 的介面,讓存取資料的速度可以變得更快。

HandlerSocket 去掉了兩個 MySQL 很花時間的部分:一個是 MYSQLparse(void*),也就是把 SQL 語法轉成底層語法的部分;另一個是 my_pthread_fastmutex_lock。HandlerSocket 的機制是 plain text-based protocol,要 debug 的時候可以把 WireShark 開起來,直接看吐出來的內容就好。

使用 HandlerSocket 的好處與壞處

  • 好處
    • 比過往的 NoSQL 作法來得穩定。
    • 比純粹使用 MySQL 來得快。
    • 不會有重複的 cache (compared with MySQL + memcached)。
    • 有彈性。
    • Included in Percona Server,表示有人在觀注它,應該是個值得押寶的技術。
  • 壞處
    • 不夠安全,沒有帳號密碼的機制,不過這對一般的 Web Application 不重要,因為一般在這個情境下,資料庫前面會有防火牆擋著。
    • 沒有 "INSERT ... ON DUPLICATED KEY UPDATE ...",不過原作者說會找時間實作這個功能。
    • 不支援 auto increment column,所以譬如 Pixnet 的 blog 在文章 ID 的部分是用 auto increment,就會無法使用,不過原作者說這個問題已經修好了,只是講者還沒有實測過這個問題是否已修復。

最後的問與答:

  • Q: 讀寫效能如何?
    A: 在目前的測試環境上(機器的條件如投影片第 8 頁),如果是 MySQL 大概是 10,000 qps,而 HandlerSocket 大約是 100,000 qps。
  • Q: 同時 write & query 的時候是否會 lock table?
    A: 不會。如果從 MySQL write、再由 HandlerSocket read,也是不會出現資料不一致的問題。不過由於 MySQL 有 query cache,所以透過 handlerSocket write、MySQL read,就會有資料不一致的問題。目前官方是說已修正了,不過講者還沒有測過。而 HandlerSocket 也不支援 transcation。
  • Q: 資料是存取在記憶體當中嗎?
    A: 資料是透過 Handler Interface 再去存取 DB,如果你的 table 是存在 memory 裡就是在記憶體;如果是 InnoDB or MyISAM 那就是存在硬碟。
  • Q: 如果要不停機備分要怎麼做?
    A: 基本上它是一個 MySQL plugin,所以一般的 maintain 都還是照舊,不會因為使用了 HandlerSocket 就無法做原本的事。






#3, Benjamin Reed (Yahoo!), "Apache ZooKeeper: Taming Distributed Systems"





#4, Tony Chan, "Android for tablets"

來自 Google、負責推廣 Android 的 Tony,英文程度比中文還要好,演講開始前我聽到他對 Ingy 笑說如果可以他想要用英文演講。XD

我們可以在 YouTube 上的這支影片看到世界各地的 Android user 活躍的情形。



Android 目前應用在各式各樣的手持設備上。而應用在 Tablets 的 Honeycomb 有提供一些新的 UI,比方說,

  • System bar 可以產生一個高度佔 48px 的系統狀態列,這個 bar 會永遠停留在畫面的最下方,讓使用者看到目前執行的程式、電池殘餘電量等資訊,讓使用者維持一致的使用體驗。
  • Action bar (App icon) 有兩種不同的用法,一種是回到 Home application、一種是往上捲到頂,由開發人員來決定。
  • Action bar (contextual),是個要求使用者一定要做個選擇的 modal。

Tony 介紹到 fragment 時說,現在有新的設備和技術了,希望大家可以用新的思維來設計 UI、不要再使用傳統的方式排版,不夠 user friendly 的 UI 其實也會影響在 market 上的用戶對這個軟體的看法。在沒有 HoneyComb 之前,沒有 UI 的東西我們會用 service 來做;有了 HoneyComb 之後,fragment 可以用來作為 UI、也可以在背景執行。

Drag & drop 時,除了可以在拖曳方向顯示原本的圖示,也可以顯示出物件的 shadow;每一次移動都會回傳一個 drag location,移出 view 之外時也會給一個 drag exit event。

3D 的遊戲開發人員應該會很喜歡 renderscript,它是一個 runtime 3D framework,目前 Google Books 就是使用這個 framework 實作的。

目前,Android Market 現在有大約 15 萬個 application、上百萬的下載人次。Market 會提供許多統計數據,例如使用者所使用的設備、國家、語系等,可以作為日後行銷或改善程式的參考。在 Market 上的軟體有兩種營利模式,直接的方式是下載軟體即收費、間接的方式可能是從廣告獲利,針對後者,Android 也提供了 AdMob SDK。

幾個與 Android 有關的連結:






#5, xdite, "Rapid Development in Rails"

我一直到今天才知道,這個 ID 還真的唸「叉袋」!現在她又回 T 客邦了耶。演講的前十分鐘內容草稿有放在她個人的 blog 上:Rapid Development with Rails ( OSDC 演講)

這一場的重點是要講「為何 RoR 可以達到 rapid developement」。xdite 也分享了很多工作的心得──她開始帶人以後的經驗是,雖然很多人說會 Ruby 的人很難找,但不管是用 PHP 或是 Python,人也沒好找到哪裡去,「自己的公司沒有框架的話,用什麼語言都是災難,有共通的 convention 才是重點。」

有的人會擔心採用的 framework 效能很差,會無法 scale,但有這顧慮的人之中的大多數,根本碰不到 1 million PV / day 的網站;就算碰到這麼大的網站,多數情況下買機器就可以解決,而且現在機器都很便宜,這不該是最優先的問題。

有很多人會沒有把握能順當升級 framework,是因為:

  • 寫了很髒的 code,要改無從改起、不知道地雷埋在哪裡
  • 沒有在做 test,一升級就是開始爆個沒完
  • 沒有在做版本控制

有的人甚至會說,網站可以跑就好,為什麼要升級讓它爆掉?但是 xdite 直指問題核心,認為如果你的網站沒辦法隨著升級,那應該是你自己的問題!為何你的程式不能順應修改?為何你的程式不能經過測試穩當升級?

有的人會說選擇 RoR 只是追求炫技,xdite 也駁斥這說法,「做產品最重要的事情是 deliver,技術多炫都是屁」,"rapid" 應該是穩定、迅速、正確產出產品。「事實上不是我們喜歡玩炫的新的東西,是因為我們很快做完事情不知道要幹嘛,所以開始玩新的東西。XD」

多人合作一定有混亂,要想辦法消除溝通的成本;有的人會說自己總是單幹,所以不需要學習多人合作的模式,但其實,「過去的自己」和「現在的自己」其實也可以視為一個 team,因為自己從以前到現在的寫法一定會有差異,所以即使只有自己單幹也要建立 convention。

xdite 自認本來也不是高手、而是在 Rails 上學了很多,所以能夠快速成長。這些技巧她之前整理成 "Scaling Rails Site by Default"

譬如說,一開始她也不懂什麼是 CDN,為什麼要在網址後面擺個問號加上亂數?原來是因為 CDN 會咬快取、所以要讓它 expire。放在同一個 domain 會很難下載,要平行下載可以開 host……這些東西她都是從 RoR 的預設值裡學習到的。

有時我們會相信唯有大公司會設計標準 SOP、只有大公司才有時間金錢力氣去做對的事情,但是「大公司‧也‧不見得是做‧對‧的‧事‧情」。側面觀察好的 framework,它能教 developer 做對的事,諸如強迫你做 DB 正規化、version control everything(以前很多人都是把檔案丟上 FTP →deployment,喔,我發現好多地方也還是這樣耶XD)、DB migration……其中,DB migration 是對 DB schema 做版本控制的最好方式,「因為商業的環境是炸不得的」。至於程式的版本控制,如果半夜被公司 call,發現新版本爛掉了,只要 rollback 回去舊版本,就可以回去睡了,如果嚴加版控,那就等著從凌晨兩點修到早上十點吧。

商業公司聘 developer 是想要讓工程師把內容做得更好、而不是把事情放在無意義的雜事上面,使用好的 framework,可以把時間用來把現有產品做得更好:refactor architecture, SEO, UI, pageview, business...etc.,或是可以花時間多學一些新的東西:Arel(用代數去算 SQL query,讓 SQL 變得簡單乾淨), Rack, ActiveModel, Bundler, Compass(一般用編輯器寫 CSS,少了分號、色碼打錯不會有 warning;用 compile 的方式產生 CSS,爛掉會叫,還可以自己玩 CSS hack module), Query Reviewer(可以查出來哪個頁面的哪個動作產生了哪些噁心的 query)……

有人問到 Git 的學習,xdite 的建議是不需要學太複雜的 feature,大概只要會 git commit, push, pull, merge 就夠了,「evenwu 學一次就會了XD」,重點是要產生 SOP。






#6, ihower, "Introduction to RSpec"

由於事前預錄的「偽‧Live Demo」無法放上 slideshare,想要看 live demo 錄影檔的人可以連到 ihower 的 blog:《RSpec 演講投影片和示範影片》

如果有測試程式,就能夠檢查新建或修改的功能是否會影響到什麼;測試程式在某種程度上也是程式本身的文件,可以看出程式的用途。ihower 認為語義是很重要的,而 RSpec 的測試程式寫法應該寫成可以用唸的,有助於快速瞭解該段測試程式的用意。

TDD 是一種測試思維,由 test 的結果來決定是否通過了這個測試;而 BDD 是由規格來設計測試內容,符合 spec 的行為才是通過了這個測試。利用 RSpec 跑出來的 BDD 可以產生所有描述文件。在此 ihower 提到語言與思考的關聯性──語言會影響思考邏輯,例如澳洲有一族原住民,他們的語言之中沒有上下左右的概念、而是使用東西南北來識別方位的,所以如果佈置兩個方位相反的房間,我們去參觀時會認為自己去了兩個一樣的房間,但這個原住民會認為他去了兩個「相似的」房間。延伸來說,我們在寫測試程式時,也應該要注意語意。(投影片第 39 頁)

行為的測試上,可以使用 Capybara 來模擬瀏覽器行為,例如填寫表單等。

怎麼寫好測試?通常 unit test 的壞味道是:只是一個 bug,卻測出一堆 failure。一個測試裡應該要只有一種測試目的,讓一個失敗象徵一種錯誤問題。至於 private methods 就不用測了,因為只要測 public methods 就能涵蓋到 private method 了,修改 private method 時也不需要重寫測試。而工程師千萬不要因為測試無法回報所有的 bug 就不寫測試。測試可以幫助你找出多數的 bug。

至於組織應該如何鼓勵寫測試?如何鼓勵增加測試涵蓋度?ihower 以他自己的工作場域的作法為例,建議使用 code review 與 pair programming。同儕間互相做 code review,如果程式膽敢不測試就丟上 VCS,同事在回報時會上傳一張圖片,"you know? have test for this commit!" 藉由互相羞辱提醒,來提高測試的比率;另外一種方式是叫做 "ping-pong" 的 pair programming:一個人先寫測試,再請夥伴接手寫實作,這樣交互之下就會提高寫測試的份量。

最後的結語是:不要期待以後有空再來補寫測試,就從現在開始做吧。:)

最後的問與答:

  • Q: 想要用比較高層級的方式描述,譬如說寫成一個 story,是否有建議?
    A: ihower 找到的最佳做法是第一層用類別、第二層是方法、第三層是 context 情境,至於比較 high-level 的描述法他目前還沒有設計過,他建議每個團隊可以開發自己合適的做法。







#7, OSSF: 曾義峰 (Ant), 林誠夏 (Lucien),《開源專案管理之授權自動化分析工具》 
簡報檔下載:Open Foundry→專案→openlegal→下載區

講者曾義峰主要的研究興趣是 lisence & security,林誠夏的背景則是法律背景,目前研究的標的是科技與法律相關的議題。

OSSF 和 ossf.org.tw(富昌 OSS 基金會) 無關,只是因為 OSSF 成立當時 ossf.org.tw 已被網路蟑螂註冊,此機構無經費可購買這個網址,所以就以當時最大的專案 open foundry 來作為 domain name

這一場介紹了一些檢驗授權的方式:

  1. 開發記錄簿:自行管理專案引用 open source 資源的狀態。
  2. Blackduck: 掃描後標示出來有哪些是有侵權之嫌的引用。
  3. Palamida: 掃描後可以跟他們買風險保單,如果日後有侵權爭議可以由他們賠償。
  4. Fossology: 掃描授權資訊。

法律背景的講者說,俗諺說 "No pain, no gain",而他認為在授權上可以想成 "No pay, no pain",如果你沒有營利行為,基本上是不需要擔心侵權的。(好像是因為沒有犯意?有需要的時候再來查一下 Orz)









第一天回家的晚上,我在 Pixnet 後台的「誰連結我」,看到該日連結到我的 blog 的方式是──「經由 Google 搜尋關鍵字:osdc session 沒位子」。欸,我以前好像沒有說過這種事……基本上熱門的場次就是要眼明手快搶位置(沒辦法跟朋友坐一起時也要含淚跟他們說再見XD),必要時可能要站後面、站走道。我記得 COSCUP 有場外轉播,不過 OSDC.tw 好像沒有?

不過我很喜歡 OSDC.tw 耶,由於報名有人數上限,所以再擠也不至於太壅塞,去年參加 COSCUP 2010 我連廁所都不敢去。XD

而且中研院的場地真的好棒啊,要是天氣沒有這麼冷(這幾天是四十年來難得的春季寒流Orz),就太完美了,哭哭。 Q_Q


小草 發表在 痞客邦 PIXNET 留言(0) 人氣()