成就更好的自己

成就更好的自己

學習 / 生活 / 體驗

Encoding

深入了解 Unicode 文字與符號的編解碼

(圖片取自維基百科) 1987 年 Unicode 誕生至今已經高達近八成的普及率(若包含 ASCII)。跟文字有關的都得處理編解碼問題,設計 Unicode 的野心就是要能表示含全世界的文字符號。(如:Chinese (中文) 到 Russian (русский) 以及 Arabic (العربية) 與其他表情符號)。 在 Unicode 誕生之前的世界 電腦是在美國被發明的,自然而然最初只需要簡單的符號、數字、以及二十六個英文字母,因此最初被普遍使用的字符集就是 ASCII。而 7-Bit 的 ASCII 隨著電腦的普及逐漸發現有些符號與文字無法表示後,加上電腦並不需要有第八位元的錯誤檢查碼,所以 IBM 將其擴展為 8-Bit 的 EBCDIC。 但這始終停留在英美國家,東方世界所使用的漢字系統 CJK(Chinese, Japanese, Korean) 完全只能使用自己定義的字符集,而歐洲國家也同樣如此。
6 min read
Android

iPhone 5 與 Galaxy Note3,誰高誰下?

使用 iOS 以來算算也差不多五年了,難免有點膩(尤其是 iOS7 用久了還容易頭暈)。最近剛上市的 Galaxy Note3 不論功能或外觀皆非常吸引我,對一直以來都是用小螢幕手機的我,也算是一個突破性的嘗試吧!因此就決定把小弟我的第一次開箱->評測->關箱文就獻給 Note3 了!(部分圖片來自 mobile01 上圖文並茂的開箱文) 機如其名:高質感的筆記本 151.2 x 79.2 x 8.3mm 加上 168g 的規格徹底推翻了我們對於大螢幕手機的刻板概念,實際拿在手上不但一點負擔都沒有,還因為表面積大,所以有很輕的錯覺。除此之外,Note3 的可拆換背蓋終於一改以往廉價的塑膠感,改用合成皮革,這皮革背蓋不但耐彎質感還很好!搭配那窄邊框與大螢幕,彷彿手上就真的拿著一本筆記本。 美得令人讚嘆的面板! 5.7吋 1920×
10 min read
Others

為什麼好的學歷總是容易獲得主管們的青睞?

![](http://www.expressuniversitydegree.com/content/images/2013/05/79194190-portrait-of-a-mid-adult-man-holding-an-ace-gettyimages.jpg) [三種工程師](http://st-threath.blogspot.co.at/2013/06/an-engineer.html?m=1)這篇文章提到了第一類的工程師:*寫程式的人*:> 這種類型的人單純的只是為了工作、功課、任務而寫程式,雖然職務名稱叫做工程師,但是寫程式對他們來說只是獲取成績、金錢的工具,寫程式對他們來說枯燥無味,但為了生活,他們繼續產出他們的程式碼。他們喜歡簡單的任務,最好是一看到就知道要怎麼做,最好有別人的程式碼可以直接套用。而當他們的程式可以過關,他們就開心的回家睡覺去,連一秒都不想看到程式碼。 根據我自己的感覺,大公司裡頭大約有 80% 是屬於這類的工程師(看看微軟自己人怎麼說)。對於他們來說,寫程式這件事除了工作以外不具備任何意義,工作後還會繼續鑽研的少之又少。份內工作完成就好,其餘的
4 min read
iOS

2013 WWDC 心得後記

這是第二個沒有 Jobs 的 WWDC,但是開始售票後 71 秒門票就通通售罄!今年比起去年真的精采許多!整理一下今年特別吸引我的部份: OS X Mavericks OS 10.9 不再用動物命名而改為加州地名:Mavericks,此次改版最主要的更新就是以下省電機制: 1. **Timer Coalescing:**CPU 運算是非常耗電的,Mavericks 中將許多頻繁的低階處理匯集一起一次做完,避免 CPU 頻繁動作。 2. **App Nap:**大家在使用電腦時,通常是多個視窗同時被開啟,如果這些視窗包含了動態網頁或是影片,就只針對最上層的視窗做運算處理,畢竟使用者永遠只會看見最上層的畫面。 3. **Safari Power Saver:**在 Mac OS 上 Flash 相對更耗費資源,所以預設就先不載入。 4. **Compressed Memory:
5 min read
Others

非自願性干擾 - 在辦公室工作效率低落的主因

![](http://www.cartoonstock.com/lowres/bve0221l.jpg)自從看過 [Rework](http://talk.ernestchiang.com/2010/10/rework-part-1.html) 之後,Jason Fried 幾乎就變成我的偶像了,非常欣賞他提出的許多看法,一針見血卻相當中肯實用。這已經是多年前的影片了,工作後再看一次感觸更深了,以下整理出影片重點,有空的話還是極力推薦花個十五分鐘把影片看完。 辦公室的目的 老闆為了讓大家努力工作,以及「看不到人如何知道他在工作?」「在家充滿誘惑容易分心」這類的理由要求大家在同一個地方工作,所以才有辦公室的存在。即使如此用心良苦,但當你問起這些人想把事情作好,第一個會想到的地方是什麼?通常他們的回答都不是在辦公室中,這跟辦公室的目的不是相背而行嗎?為何會導致這種狀況? 非自願性干擾 現在社群網站非常發達,所以有些公司甚至會屏蔽掉 Facebook 這類的網站,但這很荒謬,逛了就不會想工作?!因為上社群網站其實就跟十幾年前的 Smell Break
3 min read
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