成就更好的自己

成就更好的自己

學習 / 生活 / 體驗

Git

使用 Git 管理 SVN Repository

說了再多 Git 的好處,如果開發團隊依舊繼續使用 SVN 的話,也只能望之興嘆? Git 最大的特色就是分散式系統,因此可以離線操作,再借助 git-svn 的幫助,我們開發的時候就可以完全的使用 Git,只有在 Check in/out 才需要使用 SVN。以下整理出我個人常用的指令: Check-out SVN Repository 1. git svn init http://svn/trunk/ProjectName 2. git svn fetch -r REV_NUM 3. git gc 因為 SVN Repository 可能非常龐大,如果不是需要全部的歷史提交資訊,我們可以直接指定從哪版 revision
2 min read
C

好的設計是取得適當的折衷 - C# 語言特色淺探

好的程式語言必須讓程序員專注在功能上的開發,而不是被程式語言給制約。這是我個人的感觸,使用 MFC 開發 UI 實在是太過痛苦了,常常得查線上文件 API 的使用方式,光是字體跟字串就可以搞得很複雜。我實在很不喜歡心至碼不至的感覺,所以下定決定轉換到 C#,來看看 C# 有什麼特別吸引我的功能: LINQ(Language-Integrated Query) (C# 3.0) 一般我們只能對資料庫下 SQL 的語法,但是 C# 中我們可以透過 SQL-like 的方式直接對 List, Array 等常用的 LINQ-enabled 資料結構直接做查詢取值的動作!功能很強大,使用起來卻毫無負擔! 1 2 3 4 5 6 int[] scores =[new](http://www.
4 min read
Others

易讀易學的標記語言:Markdown

Markdown 在目前算是個隨處可見的標記語言,如:Github, StackOverflow 這些開發者必訪之地都支援 Markdown 語法。 讓我們來看看 Markdown 如何可以這麼普及: 一、 可讀性高: 網路上最常用的標記語言當然非 HTML 莫屬,但是大家都很清楚 HTML 的可讀性真的很差,通常得借助編輯器縮排過後才比較方便閱讀。但是 Markdown 中其實都是我們平常編輯純文字檔時就很自然會使用的語法。換句話說,如果部落格文章使用 Markdown 原始碼發佈也絲毫不影響閱讀。 引用自 markdown.tw: Markdown 的語法有個主要的目的:用來作為一種網路內容的寫作用語言。 二、 附帶的好處:的簡單易學 既然可讀性高,自然語法也不能太過複雜,以下就是 Markdown 最常使用的語法: *italics* **bold** CODE snippet * Unordered list item 1 * Unordered
2 min read
Essay

下班吧!加班並不會提昇你的產能

最近讀了「笑談軟體工程」(推薦!)後,對於加班這件事突然很有感觸,網路上也已經不少人批評過台灣責任制的亂象,我也來說說自己的看法。 引述一下書上所說的,很白話卻深刻地描述了大家可能經常遇到的情境: 老闆要做夢,鄉民們也犯不著吵醒他,但是又要保護自己在夢醒時分不會遭遇不測。 因此,雙方發展出一套遊戲規則 --- 加班。 老闆內心獨白:我的員工好認真,每天加班到凌晨12點,假日也來上班,統一大業指日可待。 員工內心獨白:我每天都加班,假日也來加班,東西做不出來也不能怪我。 有了「加班」這個方便法門,老闆不用傷腦筋去提昇管理績效,員工也不用傷腦筋去改善做事方法。 反正,「這是主流」啊,順著潮流走就對了。 這段內容提到了很重要的觀念:效率。我們應該想辦法在有限的黃金時間內做最多的事,而不是盲目的投入更多的時間冀望可以因此得到更多的產出。 如果我們的體力不會隨著時間減少,那倒好辦,大不了犧牲掉自己的娛樂時間罷了。但人不是鐵打的,尤其是知識工作者,工作效率會隨著工時拉長的遞減,以工程師來說,可能就因為這樣而不知不覺的在自己的程式中埋下臭蟲,每天睡覺時間不足,到了
4 min read
Programming

為什麼你不該滿足於 SVN 而該改用 Git?

先講答案:因為 SVN Branch 維護非常麻煩(就我個人維護六七個以上 svn branch 的經驗…)。 常常做這些 code merge 動作都比寫程式本身還花時間,更可能一不小心就許多未知的錯誤。 以下是我推薦的改使用 GIT 來管理程式碼的理由: 1. **不只是 SVN 加強版:**GIT 跟 SVN 的根本架構跟概念完全不同,絕對不只是 CVS 到 SVN 這種躍進而已。 2. Branch:對 Git 來說,所有指令都是以 repository 基本單位,切換 branch 只要下個指令,你當下的程式碼就會變換(snapshot)。但對於 SVN 來說它先天上的弱點就是 Branch 的支援度不高,所以我們才需要 LABEL,
2 min read
Essay

事情永遠做不完,怎麼辦?

今天在 Quora 看到了這個回答,心有戚戚焉,這答案真好! Q:「在職涯中學到最重要的一課是什麼?」 A:「專注在可以提高你生產力的事情上。」 就如大家所熟知的 Pereto 80-20 法則一樣,工作永遠不可能做完,按照這個理論,在職場的 80% 貢獻或影響都來自於我們 20% 的工作時間,如果一個禮拜工時以 40 小時計,大概就是 8 小時。關鍵在於,有沒有辦法只用 10%(4-Hour) 的時間造成最大的影響? 想要達到 4-Hour Week,我們必須: 1. 減少完成單一工作項目上所必須的時間 2. 增加自己在該工作項目上的影響力 Edmond Lau 舉了幾個很不錯的例子: **指導新人:**為了避免耽誤到自己的工作進度,通常大家只願意花 1% 的時間去指導新人。但是卻沒有想過你浪費了新人 99% 的時間。
3 min read
Wordpress

留言系統大翻修,為什麼我使用 Livefyre?

不知不覺部落格也設立超過兩年半了,對 WordPress 這系統很滿意,比起無名好上太多了!美中不足的就是它的留言系統。留言如果不想留資料可以,但是也因為這樣帶來許多垃圾訊息,但是留資料還是解決不了頭像跟使用者問題,雖然頭像可以透過 Gravatar 解決,但實在還是不好用啊… 在今天以前,我最滿意的就是 Facebook Comment 了,透過外掛的幫助,甚至還可以把 Facebook Comment 上所有留言整合到近期迴響。但是還是有著以下缺點: * Facebook 改版太為頻繁:光是留言系統就好幾版,API 拿資料的方式也常變動,導致外掛過段時間可能就無法支援。目前的外掛就已經不再支援近期迴響,也會跳出目前是在相容模式的警告視窗… * 迴響數無法整合:因為迴響數主要還是根據 WordPress 內建的迴響數。當然,一定有辦法可以做到,但不是件容易的事。 * 留言帶不走:假設哪天不想用 Facebook Comment 呢?很抱歉,目前不提供匯出/匯入的功能。 總結的說,相依性太高是這個解決方案的致命傷啊! 今天恰巧看到了「
3 min read
LaTeX

LaTeX 常用語法及論文範本

又到了大家趕論文的時間,離我寫論文居然已經過一年了,趁記憶猶新之際,趕緊接著之前的教學繼續做個完整的收尾。 環境設定 以我在 MacOS 為例,你可能需要: * MacTex (Texlive):包含編譯環境、轉換工具、套件管理等。 * BibDesk:用來處理 BibTeX 論文參考。 * XeTeX:多種編譯器之一,論文中有中文字體的話就少不了它,除非你偏愛 CJK。 * Tex Live Utility:包含於 MacTex 之中,可以用來管理 Latex *.sty 巨集套件。 (特別強調的原因是因為本文章中的論文範本可能會需要額外裝一些巨集套件) * 可以畫 *.eps 向量圖的軟體:如 OmniGraffle。 下載範本測試 台大論文格式的範本(也可以參考這篇文章),可於此連結自行取用。完成上述設定之後,直接透過 Makefile 編譯。 因為我採用的是 XeTeX,所以可以省去很多
3 min read
Essay

Evernote CEO:請不要創業

(圖片引用於五斗米靠腰) 「請不要創業,至少不要因為錯誤的動機而創意」,Evernote CEO(Phil Libin) 在一場演講中提到。 錯誤的動機? * **金錢:**95%-99% 的創業者最後都是失敗收場的,透過創業賺到的錢期望值是遠比你去一家大企業,乖乖的當好一個好雇員還低的。所以如果你想賺錢,透過你的天份跟才能好好找份工作吧! * **權力:**有些人創業的原因就是不想被人管,想要自己當老闆掌握權力管人。這是個誤解,事實上對創業家而言,除了自己以外,大家都是你的老闆。沒錯,除了客戶、股東、合作夥伴、與使用者外,就連員工都是你的老闆!畢竟你只是個新創公司的 CEO,你能提供的只有願景,實際上對員工來說,外面有著更多更好的工作選擇。所以,討好你的使用者之外,別忘了討好員工。如果你想要真正的權力,Phil 建議你從軍或從政(笑)。 * **無聊:**這可以是個創業的理由,但遠不足夠。單單只是因為無聊,希望創業可以改變現狀的話,建議你冷靜下來仔細想想創業後所有可能的開銷。收集多一點薪資條等到你真正決定好創業的目的吧! * **自由:
5 min read
Essay

學習新事物必經的四個階段

Four stages of competence,無意間看到了這心理學中的學習模式,深有同感。似乎沒有標準的中文譯名,就用比較白話的方式翻譯好了:) 第一階段:不自覺的不勝任 (Unconscious incompetence) 想學習新事物最難也最痛苦的莫過於 “You don’t know what you don’t know."。要學什麼都不知道,連個著力的點都沒有。這也就是為什麼學校教育有其重要性:至少師父引你進門了。大部分的人在學習新事物往往因為無法突破這個階段而放棄。就好像要從零開始學習一個程式語言之前,至少得知道該參考哪本書或是哪些網路上的資源,否則,你連語言本身長什麼德性都不曉得,又該從何學起呢? 第二階段:自覺的不勝任 (Conscious incompetence) 在這個階段,雖然能力不足,但已經有個努力的方向。舉例來說,買了參考書籍來學習寫程式,你當然知道首要任務就是把內容讀懂,接著就是不斷再不斷地努力練習。 第三階段:自覺的勝任 (Conscious competence) 當你讀完了一本基礎程式語言入門,你可能會想找些進
3 min read
Programming

同步機制比較:Spinlock v.s. Mutex

Spinlock 與 Mutex 都是很常用的同步機制,今天來看看這兩者在 Windows 上有什麼樣的不同!(推薦 MSDN 上的 Locks, Deadlocks, and Synchronization,寫得很不錯!) Spinlock 我們可以簡單的從中文翻譯「自旋鎖」看出一點端倪,基本上就是個 Busy waiting 的動作,得一直等待指定的鎖被釋放之後,才可以繼續進行下一步動作。概念上非常簡單,實作上就不是如此了。例如:如果鎖還沒被釋放這個執行緒就被 swap-out 而進入 sleep 狀態怎麼辦?兩個執行緒同時要求取鎖的同步該怎麼處理? Mutex 事實上 Mutex 是一種抽象概念:透過一個變數或物件確保 Critical Section 內的資料同一時間內只會有單一存取。所以文章標題本身就不是個很精確的命題。根據 MSDN 上的說明,Mutex 約可分為以下三類同步機制: * (Interrupt/Queued)
2 min read
Windows

UnxUtils: 讓你更輕鬆打造 Unix-like 的環境

一個不小心,竟然就是四個月沒更新了(汗)。 如果有看我之前的文章,可以發現從工作需要的關係移轉到 Windows 平台之後,我一直試著在 Windows 上嘗試尋找 Linux/Unix 編程體驗。最後結果雖然沒有令我十分滿意,但是對於工作上的需求也算堪用了。直到前幾天無意間發現了 UnxUtils ,驚為天人,真的是相見恨晚啊!為什麼這麼好用的東西卻沒有人推廣過呢?! cygwin 很棒,但畢竟還是一個模擬出來的環境,要跟 Windows 完全無縫的協同工作還是有點困難,特別是當你只是想用一些簡單的 shell 命令時(如: grep, find, …)。當然 Windows 也有提供相對應的功能(FINDSTR),但我個人還是比較偏好 Unix 的命令輸入方式。於是就有人把 Unix 中常用的指令全部都實作成 Native Windows Executable,概念很簡單,但卻很強大啊! 使用體驗幾乎是完全跟 Unix 終端機下感覺一模一樣,
1 min read
Essay

成功的 8 個祕訣

今天看了一段三分鐘的 TED 小短片,雖然只有三分鐘,但是資訊密度極高,真的是一場很棒的演講,非常值得放下手邊的工作花個三分鐘來聽聽「Richard St. John’s 8 secrets of success」。 1. Passion:不要為錢工作,為熱情。找出你願意付錢而工作的工作。(Doing for love, money comes from anyway) 2. Work:努力工作!但別忘了你是在享受工作。 3. Focus:專注在一件事情上,全力以赴。 4. Persist:成功的必要因素,要有毅力熬過 CRAP (Criticism, Rejection, Assholes, Pressure)。 5. Ideas:創意靈感的產生沒有捷徑:Listen ->
1 min read
Windows

找出引發 Windows BSOD (藍屏死機) 當機原因

大家應該都有過這個經驗,螢幕上出現藍底白字,也就是所謂的藍屏死機畫面(Blue Screen Of Death)。這種情況通常都不是因為我們自身操作錯誤而引起的,因為這種錯誤通常都是 Kernel-mode component 或是硬體錯誤才會引起的。 硬體錯誤的話沒轍,不是找出錯誤來源換新的就是只好買台新電腦。但是 Kernel-mode component 指得是什麼呢?最常見的就是 driver 了。在這篇文章裡分享一下前幾天發生 BSOD 的解決方法: 其實 Windows 7 的確是目前最穩定的版本,從發行至今,這是我第一次看過 BSOD,而且還是發生在我剛灌完作業系統不久的新電腦上!這種情況,十之八九會是驅動程式惹得禍,因為驅動程式一定得跑在 Kernel-mode,只要程式本身有 bug 沒有發現,很容易導致 BSOD 的狀況發生(而這類 bug 又屬非法記憶體存取最多)。 回到正題來,該如何知道是哪裡出錯呢?發生 BSOD 的時候,
4 min read
Programming

物件導向程式設計五大原則:SOLID

前幾天看到一篇非常有趣的文章,因為作者的老婆生產完要回到軟體開發的工作,作者就藉由生活上的比喻讓他瞭解何謂物件導向設計。很推薦大家有空的話可以看一下,作者在文中用很有趣的方式解釋了 SOLID 原則: S: Single Responsibility Principle 單一責任原則,一個類別只負責一件事。當然,我們甚至可以把所有的程式都放在同一個原始檔中,但是這樣就會造成耦合度過高,導致維護成本高、可用性低。(就如同我們在前篇文章所提) 來看個例子,在 Rectangle 底下這兩個成員函式都是非常直觀的:畫矩形、算面積。問題出在什麼地方呢?問題就在於 draw() 與 area() 根本就是兩件獨立的事情,即使都與 Rectangle 有關。draw() 只會在圖形化應用被使用,而 area() 則是在地理計算應用中使用。 「但是,draw() 跟 area() 還是分開的啊,至少這作法直觀」,你可能會這樣想,這樣會有什麼缺點呢? * 明明不需要的,卻依舊被引用進去了,多出冗餘的程式。
5 min read
C

重新認識標頭檔(C/C++ Header Files)

讓我們來複習一下標頭檔的用途:對小型程式而言,基本上我們只需要把所有的原始檔一起編譯,就可以產生出所要的執行檔。但是如果到了大型的專案呢?很多程式勢必是朝向模組化並且講究可再使用性高的方向去設計。其中最關鍵的就是可再使用性(Reusability),但別人要怎重複使用這段程式呢? 首先,回想一下我們如果完全不使用標頭檔又要把一個程式切成好幾個原始檔完成,勢必得在各個原始檔前面加上必要的「事先宣告(Forware Declaration)」,這些東西對我們來說是相依性高的,因為這些事先宣告可能跟原始碼本身的實作沒有關係。所以為了可再使用性,我們把這些事先宣告都放進了標頭檔,如此一來,不論是動態函式庫或是靜態鏈結,我們都可以透過引用這個標頭檔而再用該函式庫。 但是也不是每種語言都有標頭檔的設計,例如 Java,就透過 package 的命名機制(有興趣可以詳讀這篇文章),避免歧義,讓編譯器可以直接找到所需要的 Symbol。 標頭檔的概念很容易理解,要照著做也只是把變數拉出去而已。那麼到底還有什麼值得寫出一篇文章的地方呢? 不要把標頭檔當垃圾桶 有些人可能會為了方
4 min read
Programming

如何在 Windows 中寫程式如同於 Linux 一般?

最近因為工作的需要,很多程式都得在 Windows 底下編譯、執行。這對於大二之後就再也沒有寫過任何 Windows 程式的我真的是綁手綁腳,怎麼用都不習慣。雖然我認為 Visual Studio 真的很強大很好用,但是很多時候我們並不需要這麼龐大的 IDE,殺雞焉用牛刀呢?這時候就會開始懷念起 Linux 底下的 Vim 與 GCC 了… 之前就知道 cygwin 可以在 Windows 底下創造出一個符合 POSIX 的系統(另外一套是 MinGW),但是一直沒有去使用,畢竟自己手邊的電腦不是 Mac 就是 Ubuntu。也因為沒有真正去使用的經驗,所以我一開始是以為他的功能並不是很完整,頂多就是堪用罷了。直到我把我在 Linux 的程式丟到 cygwin 執行後,才驚覺它的強大!因為我幾乎不用任何程式碼,就可以直接產生執行檔,除了可以在 cygwin
5 min read

解決 Mac OS X 升級 Lion 之後不相容的情況

在美國時間 7/20 號,眾所期待的 Lion 終於出現在 App Store 上了,這也是 Steve Jobs 自豪的 Delta update,4GB 的 OS 升級檔完全透過 App Store 這單一管道取得。有著 SSD 的加持,下載+安裝大概花不到我兩個小時,而且整個系統出現的衝突比我預期的低非常之多,反而在我身上出現的問題竟是「文字編輯」與「預覽程式」!這也是我寫這篇文章的原因,就怕哪天重灌 Lion 又遇到相同的狀況…(希望不要),至於新系統的習慣問題,則可以參考這篇文章。 普遍都會遇到的相容性問題 在安裝過程之中,所有不相容的都會被丟到根目錄「不相容的軟體」之中,而在這一個版本,正是終結的 PowerPC 以及所有 PPC
6 min read
Android

為什麼同一台電腦上 iPhone Simulator 比 Android Emulator 快這麼多?!

答案其實就在字面上的意義,首先讓我們瞭解一下 Simulator 跟 Emulator 各代表什麼意思?大家中文上雖然都通稱模擬器,但是實際上是略有不同的: [image source] Emulator 中文翻譯為「仿真器」。那麼仿真器的定義是什麼呢?讓我們來看看 Wiki 怎麼說: An emulator in computing duplicates (provides an emulation of) the functions of one system using a different system, so that the second system behaves like (and appears to be) the first system. This
4 min read
Linux

為 Ubuntu 設置 Mac OS-like 的佈景主題

因為即將口試的原因,久久沒有發文。今天玩了一下之前就想安裝的佈景主題,在這篇文章簡單的紀錄一下安裝過程: 安裝環境 1. Ubuntu 10.10 2. Gnome 2.32如果是使用 Ubuntu 11.04 或者是 Gnome 3,因為兩者都是重大更新,可能就無法安裝此佈景主題。 佈景主題 首先,我們要先替換掉佈景主題,也就是把視窗控制按鈕移到左上變成紅綠燈,而佈景主題可以到 Gnome-look 下載。 Cairo Dock 換完主題之後,一定會覺得還少了些什麼,沒錯,就是最重要的 Dock! 原本以為 Ubuntu 上要模擬 Mac 的 Dock 可能會變成四不像,稍微瞭解了一下才發現自己太孤陋寡聞了XD,原來已經有個大名鼎鼎的 Cairo Dock! 至於怎麼安裝,這裡有非常詳細的圖文說明,如果不喜歡看英文的話,這裡也有中文的教學。
2 min read
Others

你還在乖乖的為「讚騙」網站按讚嗎?

因為 Facebook API 的開放以及龐大的使用人數,越來越多網站濫用按讚分享的機制(like),不顧長期的發展只求衝高點閱率。相關報導可以參考這裡。 在天空之城開創先例被罵翻之後,這類網站不但沒有變少,更是直接如法炮製。 為了抑制這種狀況,跟學弟們合力的推出了 Chrome 瀏覽器專用擴充套件,「I don’t like.」,詳細請參考介紹網頁。 套件的使用方式接近無腦般地直覺,在讀取網頁的同時就直接預載隱藏內容,可能也是因為簡單好用的關係,在 Facebook 一傳十、十傳百,擴充套件網頁的瀏覽次數在短短三天就到達了 4000 次!其中有 65% 的瀏覽次數都是因為點擊被分享在 Facebook 的連結而來,也難怪現在大家都是一頭熱的想辦法利用 Facebook 來行銷自家的產品,因為真的很有效啊! 話說三天的頁面瀏覽次數就幾乎接近本網誌開站七個月累積的總次數四倍之多呢…(苦笑) [更新 2011-04-21] 八天後 Pageviews 破萬: 相關文章: 1. [inside] 如何在一個月內衝進Alexa台灣百大網站第
2 min read
LaTeX

將使用 CJK 的範本無痛轉移到 XeTeX

在上一篇文章中,簡單的介紹了 XeTeX 使用中文字型的優點,但是它也不是沒有缺點的,在這篇文章中有提到,不過目前已經有套件可以彌補這些不足了,也就是這篇文章要介紹的 xeCJK。 透過 xeCJK 處理原本 CJK 的部份 簡單來說,xeCJK 就是加強版的 xCJK (相關介紹),透過這個套件,我們可以幾乎不用去更動之前用 CJK 寫的程式碼,只要在內文之前宣告好你要的字型,其餘的全部都交給它幫你搞定! 現在讓我們以台大論文範本為例,範本可以從這裡下載到,同時也有環境設定的教學。 1. 編碼問題 必須確保編輯器是使用 UTF8 without BOM 的編碼,並且在 thesis.tex 的開頭前兩行宣告這是 XeLatex 的程式以及使用 UTF8 編碼: %!TEX TS-program = xelatex %!TEX encoding = UTF-8 Unicode#
3 min read
LaTeX

XeTeX:解決 LaTeX 惱人的中文字型問題

相信大家或多或少都有聽過有名的排版軟體 LaTeX ,除了學習曲線比較陡以外,其實我一直以來都還算用得愉快,畢竟沒使用到中文。直到最近研究一下畢業論文的格式,在某些頁面必須用中文來寫,沒想到開始研究之後,才發現比想像中還困難… 簡單 LaTeX 環境設定 以前光是要安裝 LaTeX 的環境就是非常艱難的步驟,所以如果你對 LaTeX 完全不瞭解而隨意 Google 的話,到最後可能就是亂裝一通(光是 teTeX, xeTeX, chiTeX, gwTeX, *TeX, vim-latex, etc. 就夠你頭痛了)。其實隨著時間發展至今,LaTeX 的安裝已經非常簡單了,我們現在只需要: 1. 執行環境:Tex Live 2010 (幾乎支援各種主流作業系統) 2. 編輯器:Textshop, Textmate, VIM, etc. (只要可以編輯文字的都可) 如果是 Mac 使用者,
4 min read
iPhone

從 XCode 3.26 轉換到 XCode 4 所會遇到的問題

XCode 4 推出一陣子了,不知道有多少人改用 XCode 4 ?就我自己覺得,XCode 4 嘗試的改變與進步太多了,連帶而來就會產生在 XCode 3 所不會遇到的問題,關於 XCode 4 的使用與介紹我會留待以後講,今天這篇主要是記錄我轉換到 XCode 4 的痛苦歷程XD。 XCode 4 相關的 bugs 不只我以下列出的這些,更多的 Bugs:這裡。 一、無法切換 Provisioning Profile 在 XCode 3 之中,當我們遇到 Provisioning Profile 過期的時候,只要到 ADC 下載一個新的並且拖回 Organizer 覆蓋掉舊的即可從 Project Setting 中選擇新的
2 min read