<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUYMSH8_eCp7ImA9WhVREks.&quot;"><id>tag:blogger.com,1999:blog-7659141601171569303</id><updated>2012-03-21T01:06:29.140+08:00</updated><category term="murmur" /><category term="pylabs" /><category term="mercurial" /><category term="software engineering" /><title>PyLabs 出發點</title><subtitle type="html">It's time to move on...</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.pylabs.net/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.pylabs.net/" /><author><name>Benjamin Wei</name><uri>http://www.blogger.com/profile/15217179354289576324</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/williewu" /><feedburner:info uri="williewu" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><entry gd:etag="W/&quot;D0AARHYyeyp7ImA9WhZTGEw.&quot;"><id>tag:blogger.com,1999:blog-7659141601171569303.post-70557668989868890</id><published>2011-03-23T01:30:00.003+08:00</published><updated>2011-03-23T01:42:25.893+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-23T01:42:25.893+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="murmur" /><title>我只用最新的技術</title><content type="html">我們家開發產品用的都是最新最棒的技術。由於這技術太新了，所以市面上的書/文件因為趕不上這技術的發展，所以都過時了。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;--&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;是這樣嗎？為什麼書的內容會過時呢？因為該技術 API / 架構不太管向後相容這件事。所以這件事講的白一點，就是 API / 架構不穩定。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這是我在 &lt;a href="http://pragprog.com/"&gt;PragProg&lt;/a&gt; 買了某聖經後，pdf 拿到手的當下就已經過時所產生的心裡碎碎念。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;然後昨天在 Debian Squeeze x64 上裝了 &lt;a href="http://rubyeventmachine.com/"&gt;EventMachine&lt;/a&gt; 後，發現連寫個簡單的 echo server 都有問題後，我當下就爆炸了。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;本篇文章先作個紀錄，等我找到問題點，我要把這兩年多累積起來的怨念，寫篇文章好好的 (嗶) 一翻。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7659141601171569303-70557668989868890?l=blog.pylabs.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/williewu?a=cBw9e99n5-I:ic-SptoP50c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/williewu?a=cBw9e99n5-I:ic-SptoP50c:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/williewu?a=cBw9e99n5-I:ic-SptoP50c:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.pylabs.net/feeds/70557668989868890/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7659141601171569303&amp;postID=70557668989868890&amp;isPopup=true" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7659141601171569303/posts/default/70557668989868890?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7659141601171569303/posts/default/70557668989868890?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/williewu/~3/cBw9e99n5-I/blog-post_23.html" title="我只用最新的技術" /><author><name>William Wu</name><uri>http://www.blogger.com/profile/12881581111686813419</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.pylabs.net/2011/03/blog-post_23.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ENR3s8fyp7ImA9WhZTE0U.&quot;"><id>tag:blogger.com,1999:blog-7659141601171569303.post-8785024946352483861</id><published>2011-03-18T01:38:00.012+08:00</published><updated>2011-03-18T03:21:36.577+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-18T03:21:36.577+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mercurial" /><title>《Got Git》附錄D Git 和 Hg 面對面之我見</title><content type="html">&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "&gt;我在看完 &lt;a href="http://blog.ossxp.com/2011/03/2370/"&gt;《Got Git》附錄D Git 和 Hg 面對面&lt;/a&gt;後，挑了幾個文中關於 &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt; (後文簡稱 HG) 過時的描述與誤解予以回應，沒想到收到原作者&lt;/span&gt;蔣鑫的來信，希望能交流意見。因此，我將我個人意見寫出來，希望能降低因為諸如 &lt;a href="http://whygitisbetterthanx.com/"&gt;Why Git is Better Than X&lt;/a&gt; 這類網站不知是故意還是無意的誤導 (比如 HG 沒有 cheap branch) ，而造成大家對 HG 的錯誤印象。 &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;首先我想聲明的是，我完全承認 &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; 是非常先進的分散式版本控制系統 (後文簡稱 &lt;a href="http://en.wikipedia.org/wiki/Distributed_revision_control"&gt;DVCS&lt;/a&gt;) ，但若是以純 DVCS 的角色來看， HG 並不遑多讓，可說是扮演著恰如其份的角色，在功能和學習曲線之中取得了不錯的平衡點。這篇文章不會特別著墨於 HG 的優勢部份，也許會另外寫篇文章來聊這一部份的看法。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;1. Git 速度比 HG 快&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;這點我想沒有人反對 (笑) 。不過我想補充的是，由於底層架構模型不同， Git 用速度飛快的代價換來了必須定時 repack 以避免 repo 急速增大。雖然後來新版的 Git 會在條件滿足下自動進行 repack ，但據我瞭解，目前看到的評測數據似乎都沒有計算到 repack 的時間？&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;另外一點，HG 的設計模型非常可靠，其會在若干次 changesets (後文簡稱 csets) 後，自動儲存一份完整的檔案內容，以確保運行的速度不會因為過多的 csets 而拖慢。這樣的設計好或不好見仁見智，但有訂閱 mailling list 就會知道，曾有人在檔案系統損毀的情況下，成功復原了 HG repo 的絕大部分資料，可靠度可見一斑。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;2. HG 沒有進度顯示功能&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;a href="http://mercurial.selenic.com/wiki/ProgressExtension"&gt;HG 有 progress extension&lt;/a&gt;，其在 1.5 版之後就內建。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;3. HG 的 rollback 只能一次&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以功能性來說，沒錯， Git 這部份的功能比 HG 好； Rebase 也是一樣， Git 總是能做到比 HG 還要多的功能。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;但 HG 的作者 &lt;a href="http://www.selenic.com/blog/"&gt;Matt&lt;/a&gt; 曾經講過我很認同的一句話：大部分的開發者，都不如自己想像中的那麼聰明。打個比方來說，也許你程式碼改著改著，突然決定想要 rollback 過去的變動，或是想要修改歷史 (比如 rebase)。結果因為人為操作失誤，造成了程式碼的遺失。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;仔細想一下版控系統的角色與定位：不就是要紀錄開發歷程，並盡可能確保過去的紀錄不因意外而遺失 (不論是不是人為) 嗎？所謂權力越大，責任越大， SVN 之所以可靠，就是因為其不允許修改過去的紀錄，我完全不用擔心將 SVN 導入工作環境後，會不會因為其他人錯誤的操作導致過去的紀錄遺失。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Git 作者 Linus &lt;a href="http://lkml.org/lkml/2010/9/28/362"&gt;也說了&lt;/a&gt;： Rebasing doesn't result in cleaner history. It just results in_incorrect_ history that looks simpler.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;我絕對同意 Git 功能比 HG 強大，但請不要用 "可否容易修改歷史的功能" 來評價版控系統的優劣，這並不合適。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. HG 不支援分支&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;我要再度強調： HG &lt;b&gt;&lt;span class="Apple-style-span" &gt;有&lt;/span&gt;&lt;/b&gt;支援分支。基本上 clone 就是分支的一種，不是嗎？而且， HG 從很早期的版本，就支援 Git 所謂的 cheap branch，只是在 HG 的世界裡，把它稱之為 heads (HG 的 named branch 我就跳過不說了)。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;後來的 HG 有了 &lt;a href="http://mercurial.selenic.com/wiki/BookmarksExtension"&gt;bookmarks extension&lt;/a&gt; ，這和 heads 搭配就等同於 Git 所謂的 cheap branch，後來進化成可以 push / pull bookmarks，於 &lt;a href="http://mercurial.selenic.com/wiki/WhatsNew#Mercurial_1.8_.282011-03-01.29"&gt;HG 1.8 版&lt;/a&gt;甚至直接將 bookmarks 整併進核心之中。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5. HG 的 SVN 橋接功能無法將 HG 的變動送回 SVN server 上&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這是過時的資訊，現在 &lt;a href="http://mercurial.selenic.com/wiki/HgSubversion"&gt;hgsubversion&lt;/a&gt; 可完整的雙向同步，且其會自動 rebase 來降低人為失誤 (為何要 rebase 就跳過不說了，你如果不懂，代表你不用懂 XD)。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;不喜歡 hgsubversion 會同步所有的歷史？你還可以選擇 &lt;a href="http://pypi.python.org/pypi/hgsvn"&gt;hgsvn&lt;/a&gt; (功能稍微陽春，但可以限定同步的版次)，一樣可支援雙向同步。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Git 和 HG 都是很好、很成熟的工具，擇你所愛，幫助完成工作是最重要的，希望這篇文章可以幫助大家更加瞭解 HG。&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7659141601171569303-8785024946352483861?l=blog.pylabs.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/williewu?a=a1RP9dfywaY:dGtoa-cqL9A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/williewu?a=a1RP9dfywaY:dGtoa-cqL9A:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/williewu?a=a1RP9dfywaY:dGtoa-cqL9A:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.pylabs.net/feeds/8785024946352483861/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7659141601171569303&amp;postID=8785024946352483861&amp;isPopup=true" title="2 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7659141601171569303/posts/default/8785024946352483861?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7659141601171569303/posts/default/8785024946352483861?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/williewu/~3/a1RP9dfywaY/got-gitd-git-hg.html" title="《Got Git》附錄D Git 和 Hg 面對面之我見" /><author><name>William Wu</name><uri>http://www.blogger.com/profile/12881581111686813419</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.pylabs.net/2011/03/got-gitd-git-hg.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUHQH4-cCp7ImA9Wx9aFkw.&quot;"><id>tag:blogger.com,1999:blog-7659141601171569303.post-291896535831381262</id><published>2011-03-09T02:03:00.005+08:00</published><updated>2011-03-09T02:50:31.058+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-09T02:50:31.058+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pylabs" /><title>關於 PyLabs</title><content type="html">2011 年 1 月 25 號，是 &lt;a href="http://pylabs.net/"&gt;pylabs.net&lt;/a&gt; 誕生的日子。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;玩 open source 的前幾年，身邊一直都沒有志同道合的好朋友可以一起討論技術以及感興趣的話題。雖然這樣也還是自己一個人摸索摸過來了，但心裡總還是很希望，可以像 &lt;a href="http://www.pocoo.org/"&gt;Pocoo&lt;/a&gt; 一樣，可以有屬於我們自己的團隊...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;（好吧，認識我的人應該知道，還有 Kobe 這號人物，但這傢伙說起來對抓迷物更感興趣，而且已經叛逃業界了，不提也罷。XD）&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;不過反正世界就是這麼奇妙，你總是會在預期之外的地方，遇到預期之外的人。高雄縣網的一年生活，讓我認識了團隊的另外兩個成員： &lt;a href="http://rellikhsu.blogspot.com/"&gt;Rellik&lt;/a&gt; 和 &lt;a href="http://www.dotblogs.com.tw/benjamin"&gt;Benjamin&lt;/a&gt;。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://rellikhsu.blogspot.com/"&gt;Rellik&lt;/a&gt; 是我見過的人當中，數一數二對網路/系統有天份的&lt;strike&gt;變態&lt;/strike&gt;高手。這樣講似乎有點老王賣瓜 （根本就是吧！！），但是可以在短短一個月的時間，從沒有接觸過 Unix 系統的情況下，直接接管縣網的 proxy / mail / web 機器 (FreeBSD / Solaris)，這不是平常人辦得到的事情。更不要說現在他手上管的機器已經破百台了...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.dotblogs.com.tw/benjamin/"&gt;Benjamin&lt;/a&gt; 這傢伙就更離奇了，雖然和認識 &lt;a href="http://rellikhsu.blogspot.com/"&gt;Rellik&lt;/a&gt; 同時間認識這個人，但說實在我跟他其實不熟... 直到陰錯陽差，他莫名其妙的成為我現在公司工作上的夥伴後，才突然變熟的。XD 另外雖然他不願意承認自己很熟 Windows，但不需要這樣吧，熟 Windows 又不是丟臉的事情，是吧？是吧？XD&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;好啦，以上雖然是用戲謔的方式來介紹登場的兩位人物，但基本上都是高手，而且重點是都很宅！！能和這樣的高手們共組團隊，實在是非常開心阿（撒花撒花）。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;咦，好像忘了說為什麼要叫 &lt;a href="http://pylabs.net/"&gt;pylabs.net&lt;/a&gt; 了，原因是這樣的：基本上我是 &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; 愛好者，而且註冊網域是我去弄的，所以另外兩位被我用半強迫的方式接受了這個名字。 XD&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;最後說點正經的：最近公司剛搬完家，下班也比較悠閒，所以我打算要趕快讓 &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt; / &lt;a href="http://tortoisehg.bitbucket.org/"&gt;TortoiseHG&lt;/a&gt; 的繁體中文翻譯跟上官方腳步，不然使用上半中半英實在是有點礙眼...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7659141601171569303-291896535831381262?l=blog.pylabs.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/williewu?a=5hDkUjVjcaI:3Sxab6lT81s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/williewu?a=5hDkUjVjcaI:3Sxab6lT81s:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/williewu?a=5hDkUjVjcaI:3Sxab6lT81s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.pylabs.net/feeds/291896535831381262/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7659141601171569303&amp;postID=291896535831381262&amp;isPopup=true" title="2 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7659141601171569303/posts/default/291896535831381262?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7659141601171569303/posts/default/291896535831381262?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/williewu/~3/5hDkUjVjcaI/pylabs.html" title="關於 PyLabs" /><author><name>William Wu</name><uri>http://www.blogger.com/profile/12881581111686813419</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.pylabs.net/2011/03/pylabs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEFQno6eyp7ImA9Wx9aFE4.&quot;"><id>tag:blogger.com,1999:blog-7659141601171569303.post-8348762035914421248</id><published>2011-03-07T01:42:00.002+08:00</published><updated>2011-03-07T01:46:53.413+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-07T01:46:53.413+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software engineering" /><title>你家是如何進行 code review 的呢？ (一)</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;img src="http://www.osnews.com/images/comics/wtfm.jpg" style="max-width: 800px;" /&gt;&lt;br /&gt;[上圖取自： &lt;a href="http://www.osnews.com/story/19266/WTFs_m" target="_blank"&gt;http://www.osnews.com/story/19266/WTFs_m&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;以往傳統的 code review，都是發生在產品開發一陣子之後的事...&lt;br /&gt;&lt;br /&gt;[情境：某次部門會議]&lt;br /&gt;&lt;br /&gt;主管：我們開發這個產品也已經好幾個月了，下個禮拜開始，請各個開發人員準備一下投影片，我們安排時間，讓各位有機會展示一下自己的程式碼，以便促進交流。每個人要準備 15 分鐘的投影片來報告整體架構與程式碼... @#$#%^$%&lt;br /&gt;&lt;br /&gt;新進阿宅工程師一號心想：啊？ code review？ 沒做過耶，靠腰我要準備什麼阿... (狀態顯示為兵荒馬亂中)&lt;br /&gt;&lt;br /&gt;資深阿宅工程師二號心想：阿？ code review？ 還來？上次被批的體無完膚，這次得想辦法&lt;strike&gt;隱瞞事實&lt;/strike&gt;改善投影片以免重蹈覆轍...&lt;br /&gt;&lt;br /&gt;為什麼要做 code review？原因在於，在開發產品過程中，各個模組也許是由不同的團隊在開發；藉由 code review，"理論上" 可以交流對彼此的架構觀點，進而讓產品的架構更加穩固。除此之外，在同一個團隊中，工程師也有程度深淺的差距，藉由 code review，"理論上" 可以讓資深工程師對資淺工程師給予改進的建議。以上都是理想上 code review 應該要達到的效果... 理論上啦。 XD&lt;br /&gt;&lt;br /&gt;傳統的 code review 流程，都是在產品開發過程中，"定期" 的以讀書會的方式，使用投影片來讓其他人得知你的程式碼內容與系統架構，但是這種傳統的作法有以下幾個問題：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;只展示程式碼片段，與會的其他工程師無法得知更宏觀的架構。&lt;/li&gt;&lt;li&gt;使用 UML 等方式來展示系統架構，但是說到底，這並不是程式碼，這樣其實會失去 code review 的意義。&lt;/li&gt;&lt;li&gt;流於批評、沒有聚焦在應該需要檢討的部份。展示的人有可能會隱瞞有問題的程式碼，以避免被批評；與會的工程師也可能會無法給予較有意義的建議 (因為只看到片段的程式碼嘛，給予的建議就容易變成 "你縮排要空四格" 諸如此類的建議...) 。&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;你家就是用這樣的方式做 code review 嗎？那你應該要多多接觸 open source 社群，看看別人是怎麼做 code review 的... (待續)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7659141601171569303-8348762035914421248?l=blog.pylabs.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/williewu?a=xn9qD2UmCvc:0m1GipwT1eQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/williewu?a=xn9qD2UmCvc:0m1GipwT1eQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/williewu?a=xn9qD2UmCvc:0m1GipwT1eQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.pylabs.net/feeds/8348762035914421248/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7659141601171569303&amp;postID=8348762035914421248&amp;isPopup=true" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7659141601171569303/posts/default/8348762035914421248?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7659141601171569303/posts/default/8348762035914421248?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/williewu/~3/xn9qD2UmCvc/code-review.html" title="你家是如何進行 code review 的呢？ (一)" /><author><name>William Wu</name><uri>http://www.blogger.com/profile/12881581111686813419</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.pylabs.net/2011/03/code-review.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMERX8_cSp7ImA9Wx9aEUo.&quot;"><id>tag:blogger.com,1999:blog-7659141601171569303.post-1986973690210483322</id><published>2011-03-04T02:34:00.005+08:00</published><updated>2011-03-04T02:53:24.149+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-04T02:53:24.149+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pylabs" /><title>該來寫寫東西了</title><content type="html">脫離了學生時代的米蟲生活，開始進入業界工作後，深深的為那些能在工作之餘，持續的更新自己的 blog 的前輩們致上最高的敬意...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;雖然因為進入業界，以過去學生時代好幾倍的速度成長學習，但下了班之後只打算放空休息，完全提不起勁來寫 blog 紀錄工作心得...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;然後呢，因緣際會的拿到了 &lt;a href="http://pylabs.net"&gt;pylabs.net&lt;/a&gt; 這個網域，就想說剛好趁這個機會，把荒廢已久的 blog 重新建立，希望之後能將一些成長紀錄放在這裡...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;希望各位多多指教，Ninja~~ (車子引擎啟動聲)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;小黃部長~~~ (熄火聲)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7659141601171569303-1986973690210483322?l=blog.pylabs.net' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/williewu?a=SFjK2OOWAo4:ThCOdTzKaGw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/williewu?a=SFjK2OOWAo4:ThCOdTzKaGw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/williewu?a=SFjK2OOWAo4:ThCOdTzKaGw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/williewu?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.pylabs.net/feeds/1986973690210483322/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7659141601171569303&amp;postID=1986973690210483322&amp;isPopup=true" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7659141601171569303/posts/default/1986973690210483322?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7659141601171569303/posts/default/1986973690210483322?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/williewu/~3/SFjK2OOWAo4/blog-post_04.html" title="該來寫寫東西了" /><author><name>William Wu</name><uri>http://www.blogger.com/profile/12881581111686813419</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.pylabs.net/2011/03/blog-post_04.html</feedburner:origLink></entry></feed>

