2010/12/30

git and Beyond Compare 3 on Windows XP + Cygwin

這篇記錄一下我git的設定,使用Beyond Compare 3來做為git的diff與merge時的工具。我的電腦是Windows XP,我用的是Cygwin裡的git,不是msysgit。

修改每個repository裡的.git/config或是家目錄裡面的~/.gitconfig
[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$(cygpath -w $LOCAL)" "$REMOTE"
[merge]
    tool = bc3
[mergetool]
    prompt = false
[mergetool "bc3"]
    #trustExitCode = true
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"

裡面用了cygpath把cygwin下的路徑$LOCAL(類似/tmp/U5VvP1_abc這種東西)轉成windows的路徑,因為bc3是個windows下的軟體。

然後,可以用git difftool來比較檔案,git mergetool來做整合。

關於truExitCode的意思是,若外部工具的exit code可以代表檔案整合的成功與否,那麼就可以設為true,要不然,git mergetool會向使用者詢問整合是否成功。詳情請見說明文件

2010/12/27

翻譯:在家工作保持生產力的二十個方法( Twenty Ways to Stay Productive When Working at Home) by Scott Young

文章: Twenty Ways to Stay Productive When Working at Home(在家工作保持生產力的二十個方法)
日期:2007.05.23
作者:Scott Young
作者的部落格:Scott H Young's Get More from Life


在家工作保持生產力的二十個方法(Twenty Ways to Stay Productive When Working at Home)


自己在家工作,你怎麼保持生產力呢?很多在家工作的人雖然能享受著充分的自由與便利,不過,一旦身處工作環境之外,很容易就心生懶散,在家工作擁有的彈性,有可能讓你變得非常非常有生產力,但,如果你不能善加利用的話,恐怕會白白浪費大把的時間。

由於經營這個部落格,加上其他專案計畫,我常常每週至少要花去20到30小時在家工作,除了上網、研究、其他相關支援任務外,每週需要回上百封信,每天至少要寫3000字,比起某些人應該算少的,但是,除了工作與學校外,這也足夠讓我忙個不停了。

底下是我發現的一些策略,當在家工作時,可以有效地保持生產力,這些方法,不論你是接案子、自由工作者、在家創業、或是你想進行某個人計畫,都一體適用。

1. 建立工作規範──在辦公室裡工作會強迫產生出紀律,沒有系統與規定,沒有上司在你脖子背後吹氣監督的話,你很難堅定地遵守計畫時程表,在腦海裡記著你的生產力與工作規範,並設定提昇目標,若昨天只有4小時,今天就以4.5為目標。

2. 不要高估你的生產力──當人們開始在家工作,都會說這樣的一句謊言,以為生產力會提昇,以為有8小時可以做事,就假設能完成8小時的事情,醒醒吧,變得真的有生產力是可能的,但這需要建立起工作規範,先從小處小範圍著手,然後漸漸往上發展。

3. 不要把低價值的任務算進去──分辨出哪些比較重要,先算這些,我常聽到在家創業的人說他們每天工作10-12小時,可是,我看到他們上論壇發表文章以及寫落落長的郵件,令人不禁想問,這些算是工作內容嗎?只算那些極端重要的工作項目與艱難的任務,那才算數才準確。我花一小時寫部落格文章,或是寫出好幾頁的新書,都比花數小時回信件有價值多了。

4. 隔離會分心的事物──把自己放進真空的環境裡,盡最大努力降低會造成精神散亂的可能性,我一定會把門關上鎖上,而且不會使用網路,除非需要找段句子或圖片,絕對要跟微博、聊天室、電子郵件與RSS說不,我知道這些東西的吸引力有多大,可是,如果能不要切來換去的話,你就可能以兩倍速度完成工作,省下時間之後再來使用這些軟體。

5. 早一點開始──早一點起床在早上開始工作,是個不錯的主意,這使得你沒有機會拖拖拉拉的,還有,若是在2:00或3:00就完成8小時的工作,你會有好爽的感覺唷。

6. 知道你的能量限度──了解你何時會開始覺得勞累與精疲力盡,我自己的準則很簡單,當注意到我的能量值下降了,很難張開眼皮,我就會休息十分鐘(有時候昏昏欲睡就是創造力的最大障礙),如果這樣還不行的話,我會來個5-10分鐘的小憩,最後還不行的話,那可能需要長一點的運動了。

7. 學會說不──在家工作擁有很高的時間彈性,你的朋友、家人、跟其他夥伴就會有很棒的機會可以佔用掉花去你的時間,有時候他們會讓你覺得內疚,因為,“他們(不像你)必須去上班”,但請堅定立場別給他們有寸進的空間,別讓他們不尊重你的時間分配,學著說“不”,無需多做解釋。

8. 設定每日目標──我不會把不必要的工作事項排進時程表,但我會把明天結束時應該要達成的目標確實地寫下來,藉由設定每天要達成的目標,把工作量分成一份份可管理的區塊,你就不會感覺要一次完成所有的事情。

9. 使用帊金森定律──這個定律基本上是說,你給一件任務多少時間,它就會擴展成需要那麼多時間的任務,當完成比完美重要時,自己給自己幾分鐘的時間,把工作做完,確實地解決一定的工作量。

10. 學會把東西擠出來──當你身為作家/程式設計師/設計師,卡住時怎麼辦,學會把東西生出來擠出來,也就是說,當沒有點子創意時,你告訴你自己,這時候的目標是量而非質,告訴自己說,如果真的弄的太糟糕了,之後會再做一次,不過真相事實通常會是,質已經夠好了,亂擠亂搞幾分鐘後,你就會回復到常態。

11. 建立起專業的工作空間──身處的環境應該要讓你感覺到在工作,如果不是的話,該是時候重新裝飾一下了,不用很精美,但是,如果在家工作只讓你覺得是在玩電腦遊戲的話,請把擺設佈置換一換吧。

12. 設定工作時數──別把工作跟生活混在一起,設定該有的工作時數,工作時認真地把生產力提升到最大值,並把工作留在那些時間裡,我常常設定含糊不清的工作時間,但只會讓我變成毫無生產力的工作狂而已。

13. 你的MIT是什麼?──隨時都要清楚你的最重要的任務(Most Important Task, MIT)是哪些,ZenHabits的Leo建議把MIT放在最前面,這樣你才不會延遲耽擱,即使一天之後的時間毫無作為,這一天仍然是有價值了,因為你把最重要的完成了。

14. 有社交的生活──在家工作往往會排除掉一堆社交活動,參加團體與活動,譬如祝酒或宴會主持人,這會比較容易認識新朋友,找回在辦公室裡上班裡才有的那種社交網路,沒有朋友,你就不會有活力,我曾一直試著絕世獨立自己埋頭苦幹,不過我認為那是不切實際的。

15. 變更任務的種類──如果你到健身房,你會一整個小時只做伏地挺身嗎?應該不會吧,所以,如果你是個作家或程式設計師,你會十個小時連續不斷地寫寫寫嗎?我喜歡把不一樣的工作項目分散到一天的不同時段裡,這樣我才能使用大腦裡不同部分的“肌肉”,這讓我保持新鮮感有活力,保持生產力,而不需要長時間的中斷休息。

16. 直到厭煩才能跳脫工作──當記事板上沒有我想寫的點子時,我常常會經歷一段5或10分鐘的時間,什麼事情也沒做,但最後會得到新靈感,如果這也發生在你身上,請抗拒上網作其他事情的誘惑,再堅持10或15分鐘,即使你能推遲工作時間。

17. 取得外界觀點──當你是自己孤立一人時,你往往會限於一種視野,不利於解決手上的問題,建立起一套人際網路(特別是線上的),當你撞牆時可以有人詢問,我認識好幾個朋友,當我的解法太差時,可以有他們來回激發創意。

18. 讓你超時工作──如果你真的沉浸在專案中,多做個一小時把今天的東西收拾收拾,這是可以的,次日給自己補償一下,少一些工作量,這樣你才不會開始一睜開眼睛就是工作,直到睡覺。

19. 再多15──當你卡住時,或是很想很想丟下筆時,告訴自己,再多作個15分鐘就好,通常這就足夠讓你拔出泥沼繼續往前,如果不能,那你就需要休息了。

20. 善用時間彈性──好好利用你在家工作所享有的彈性,這表示,你可以根據新的機運修改工作時程表,或是配合生活調整工作腳步,當有好機會來臨時,拿下它並保證在之後會補償自己,這需要多一點的紀律,但這是在家工作最大的優點之一。

2010/12/11

我的FireFox附加元件列表

記錄一下我用的FireFox附加元件(外掛、addons)。

Adblock Plus:擋廣告。
Element Hiding Helper for Adblock Plus:輔助Adblock Plus的,可以更精準地選出網頁上的某一部分,然後擋掉。

Download Statusbar:在狀態列上看下載進度,功能雖小但必裝。
DownThemAll!:多線程續傳下載,需要同時進行大量下載時用的,下載大檔用的,因為有續傳功能。

Xmarks 書籤同步套件:讓兩台電腦的FireFox書籤同步更新。不僅firefox可用,還支援chrome、safari、ie。


Gmail Notifier:在右下角的狀態列增加一個gmail圖示,顯示並定期檢查有無新信件。前一陣子開始故障不能用,所以我改用Gmail Manager。
Gmail Manager:在右下角的狀態列增加一個gmail圖示,顯示並定期檢查有無新信件,可以設定很多個gmail帳號。對我來說,基本上跟Gmail Notifier差不多但功能強一點。最近故障了,聽說作者不再更新了,所以改用Gmail Watcher。
Gmail Watcher:在右下角的狀態列增加一個gmail圖示,顯示並定期檢查有無新信件。

Tab Mix Plus:強化各種分頁功能,例如,滑鼠停在分頁標籤上就切換顯示該分頁,開啟分頁時要怎麼排放,關閉分頁後要跳回哪一個分頁,等等,非常多的設定。
FireGestures:用滑鼠畫手勢操控瀏覽,例如回到上一頁、關閉分頁、開新分頁、重新載入剛剛關閉的分頁、等等。
Easy DragToGo:文字、鏈結、圖片,用滑鼠時,不同拖曳方向你可以設定不同功能,譬如,圈選一段文字,然後用滑鼠往上拖代表用google搜尋並且另開分頁,往下拖代表用google搜尋但是直接顯示在原本分夜裡,譬如,在圖片上用滑鼠往左拖代表直接儲存圖片到特定資料夾,等等。

Brief:訂閱RSS、Atom等feed,隨時得知最新消息。用起來很簡單,很棒。
ScrapBook:將完整的網頁擷取下來,也可以畫線圈重點,其資料很容易地可以傳到windows的firefox,反之亦然。

IE Tab:在Windows上要裝的,有些網站只能用IE開,我FireFox升級後就不能用了,我改用IE Tab Plus。
IE Tab Plus (FF 3.6+):在Windows上要裝的,有些網站只能用IE開。

1-Click YouTube Video Download:專門下載YouTube的影片,會直接在網頁上顯示"FLV MP4 3GP",點了就可下載,因為我看的影片絕大部分都是在YouTube上,所以這個元件對我來說很方便,至於其他少數我會去的影片網站,都有提供下載連結,所以沒問題。
Video DownloadHelper:支援下載影片,很多網站都適用。以前有裝。


有些附加元件都有很強的競爭對手或取代品,譬如Tab Mix Plus有人嫌太笨重,上面這些只是我個人在使用的外掛清單,能符合我的需求,但並不一定適合你,除非有需要,我很少會改用別的,也很少會去玩新元件,如果你有什麼建議,還請留言。

幾個我常看的YouTube頻道,練習英文聽力。

首先,Ray William Johnson,每一集的內容大概是,摘錄幾支點閱率很高的影片,做出評論(其實也不是評論,就是亂哈啦亂打屁而已),每一集差不多是5分鐘,大概一個禮拜會有兩集。

譬如說,當然啦,網路上的王道影片:"貓"。這一集裡面有貓打架而不是去追旁邊的鴿子。


這一集,總之,生活太無聊了,有個女孩被朋友個塞進洗衣機(烘乾機?)裡。


每一集在最後面,會開放大家提個問題(譬如What would your smurf name be),要用影片的方式提問題,然後其他人可以留言回答,他會剪輯一些好笑不錯的回答(譬如Eddie Smurfy、Chronic Masturbator Smurf)放在影片末段。


然後是雀斑妹,meekakitty,表情非常非常豐富,音調有高低起伏,喜歡打game,內容其實也沒什麼,就是一般的打屁哈啦,練練聽力囉。

這一集談到她很喜歡薩爾達。


這一集還cosplay星艦(Star Trek)的服裝。可惜她並沒有常常cosplay,不過有趣的t-shirt倒不少(話說回來,外國人有趣的t-shirt本來就不少)。



以前有提過的Marina Orlova(Hot For Words),俄國口音,影片內容是講解英文單字的起源。

我們都知道,很久以前的事情有些都忘記了,但有一些不知道何,就是記在腦海裡,我想,那是因為伴隨著強烈的情緒。若有個美女老師,這應該可以增強你的記憶情緒吧。


不過呢,我不太喜歡她最近的短髮造型,orz。



蘋果迷,iJustine。很搞怪。

譬如說,在蘋果的店面裡面跳舞!


譬如說,在路上騎著一輛小小的兒童車。



另外,也可以看各大學的上課錄影,譬如BerkeleyStanfordMIT等等。

另外,這兩個技術影音網站,InfoQChannel 9, 也常有高品質的電腦資訊科技的演講錄影。

另外,Khan Academy,有很多科學數學的課程教學影片。

還有,Google放上YouTube的演講錄影技術研討

最近這一支,裡面有各個國家的口音,真的很難聽懂啊...orz,被打敗了。



大概就是這些了,還請留言告訴我你喜歡的頻道。

翻譯:這不是物件導向程式設計啦(What OOP Isn't )by Benjamin Supnik

文章:What OOP Isn't(這不是物件導向程式設計啦)
日期:2010.12.09
作者:Benjamin Supnik
作者的部落格:The Hacks of Life


這不是物件導向程式設計啦(What OOP Isn't)


想當初,我開始上第一堂的電腦科學課程(不過在那以前,我已經自己開始寫程式有一段時間了),系上教職員正在打一場內戰,某部分人信仰著物件導向程式設計(object-oriented programming, OOP),他們相信世間萬物皆物件,物件就是王道啊,他們教授要我們學生用OOP的方式來實作鏈結串列(linked list):哇賽,每一個節點都是被完完全全封裝起來的物件!


(什麼,你有興趣知道嗎,讓我告訴你,串列大部分的編輯動作,都必須是堆疊-遞迴式(stack-recursive)──當呼叫一個節點的next時,節點要把它的'next'設定為呼叫的回傳值,讓某節點能夠'把自己切掉'。嘿嘿,聽的懂算你強,這讓那些從沒碰過鏈結串列的學生,一個頭兩個大,根本不知道到底自己在幹嘛,因為,他們在同一個時間,碰到了遞迴與鏈結串列,而寫出來的程式,結果是,執行起來有著LISP的效能,而程式碼看起來像C++的優雅,真是糟糕可怕啊。)


他們說,OOP的三大支柱是封裝、多型、繼承(encapsulation, polymorphism, inheritance),我以前已經發表文章說過為什麼最後一項通常會是個不好的概念,回想那時在學校的時光,我還沒有足夠的程式開發經驗,所以只能說,當時我們被教的東西(全部都是OOP,不論何時何地)比我一直以來在寫的程式(用物件來表示某種很大的東西,例如遊戲裡的一個角色)要難上好幾倍,寫出來的程式碼,又囉嗦也沒有特別快,現在,我有了軟體工程的經驗,我想,可以把其中問題所在更精確地描述出來。


有時,看到程式新手眼裡閃著OOP字眼,努力學會這到底在講些什麼,我會跟他們說,封裝、多型、繼承的相對重要程度大概是90%、10%、0%,OOP絕大部分的價值所在,是它提供機制與作法,可以把一段程式碼跟其他不相干的程式碼分離開來,而不會混雜在一起,而這點對大型軟體開發專案很重要,而你不可能教會大學生這一點,因為他們還沒有夠多的程式開發經驗,無法體會其中的重要性。


多型也不錯,但據我的經驗,它不像封裝那麼有用,如果你有個多型介面,有個介面就表示,它是被封裝的,但是,有許多的案例顯示,有些介面就只會用一次,而且沒有多型這項性質,粗略來講大概是90%-10%吧,所以我認為扮演舉足輕重角色的是封裝。當然,有些產品與領域比其他地方更常使用多型,WorldEditor(Laminar Research的開放原始碼場景編輯器)大部分的核心元件採用多型介面的架構,但X-Plane本身就很少。

我提出這點,因為我大概(在以後的發表文章中)會把OOP與其他技術(與軟體工程碰到的實質困難有關的)作個比較,不過OOP有一點歷史包袱,過去常常講,OOP可以讓我們變成更好的程式設計師,可以幫助我們寫出無臭蟲的程式碼,執行速度更快了,或是可以幫助差勁的程式設計人員升級成優良的,這些都被時間證明了,只不過是些天真白痴一廂情願的想法(特別是,差的程式設計師,不論給予什麼樣的技術或方法,照樣可以生產出低劣的程式碼,一大沱)。

所以,我希望幫OOP這玩意作類似如下的定義:在語言上提供好的支援來進行封裝,有時候需要有多型介面,加速撰碼。這對我來說就非常好用了!我可以僅用純C語言寫出相同的東西,但不僅需要花更多時間打字,還會讓我變成很嘮叨的人,不斷囉囉唆唆血壓上升,何苦呢?