2011年10月29日

用 gist 指令快速建立程式碼剪貼簿(code snippets)


Gist 是 GitHub (時下最受歡迎的免費原始碼託管/版本控制平台)的程式碼剪貼簿服務,類似 Pastebin,但是更好、更棒(拍胸脯保證)!

Gist 有以下功能:
  1. 可以快速貼上一或多筆程式碼,如果是多筆,就會變成群組
  2. 可以手動選擇程式碼類型(哪一種程式語言),或輸入檔名,由系統自動依照副檔名判斷類型
  3. 漂亮的語法色彩標示(Syntax Highlighting)
  4. 建立的 Gist 程式碼群組,可以用 Git 版本控制系統 Clone 到不同電腦
  5. 可以內嵌(透過 JavaScript 語法)到部落格或網站
  6. 可以打包,一次下載整個檔案群組(.tar.gz 格式)
Gist 可以這樣用:
  1. 撰寫測試、練習用的程式碼,貼到 Gist 當筆記
  2. 不再使用的程式碼,但仍然有參考價值,貼到 Gist 備忘
  3. 將用過即丟的一次性程式碼,貼到 Gist 分享,給有緣人取用
  4. 程式碼出現 Bug,需要找人幫忙除錯,先貼到 Gist 再將 URL 放到 E-Mail
  5. 當好人,寫一段範例程式給別人參考,貼到 Gist 當 FAQ
也許你覺得,寫好程式碼還要複製到瀏覽器,還要用滑鼠按幾個按鈕很麻煩!

我也這樣覺得,所以並不是很常貼 Gist,直到發現 gist 這個好用的指令。

安裝 gist command line 工具 

Mac OS X

最簡單的安裝方式,就是買一部  MacBook Pro,然後安裝 Homebrew,只要使用 brew 指令就能完成安裝。

brew install gist

Ubuntu Linux

次簡單的安裝方式,就是買一部 PC 或 NB,然後灌 Ubuntu Linux 作業系統,接著只要使用 apt-get 及 gem 就能完成安裝。

sudo apt-get install ruby rubygems libopenssl-ruby
sudo gem install gist

*環境變數 $PATH 必須包含 /var/lib/gems/1.8/bin 路徑

Windows

Who cares??? 請自行參考 https://github.com/defunkt/gist

設定 gist 的 User 及 Token

使用 git 指令設定,user 就是登入 GitHub 的帳號名稱(不是電子郵件),token 可以在 GitHub 網站的「Account Settings / Account Admin / API Token」找到。

git config --global github.user "github-username"
git config --global github.token "github-token"

在 Account Admin 設定畫面,可以看到 API Token 的訊息如下:

API Token
Your API token is **************** — keep it secret! Changing your password will generate a new token.

其中打星號的部份就是 token,請不要洩漏出去。

使用 gist 快速剪貼程式碼

假設你有三個檔案,分別是 test1.js、test2.rb、test3.py,可以使用 gist 群組上傳。

gist test1.js test2.rb test3.py

如果看到以下訊息,表示 user 及 token 設定可能不正確:

Creating gist failed: 200 OK

如果執行結果是一段網址,則表示 Gist 已建立成功:

https://gist.github.com/代碼

除了將已經存在的程式碼檔案上傳外,也可以透過終端機自行打字輸入新的程式碼:

gist -t js -

其中參數 -t 是指令程式碼類型,通常只要用一般常見的副檔名即可。最後的 - 符號,則表示從 STDIN (終端機輸入)讀取。這行指令執行後,在終端機輸入的任何文字(包含換行),最後都會被上傳到 Gist。

當程式碼輸入完成(或複製貼上)後,按下 Ctrl + D (Control + D)就會執行上傳動作。

Gist 真是太方便啦!!!

延伸閱讀:
  1. Gist
  2. GitHub

2011年10月28日

敏捷 Java 開發之 Gradle 專案自動化工具介紹

Gradle 是以 Groovy 語言為基礎開發的專案自動化(project automation)工具,它可以用簡單的 Groovy DSL 語法,將 Java 軟體開發過程中需要的編譯、建置、測試、打包及佈署工作,變成簡單、方便重複使用的 build.gradle 檔案。

Gradle 的功能類似 Ant (使用 build.xml 設定檔),但使用更簡單方便,它可以直接撰寫 Groovy 程式碼,因此彈性更大、功能更強也便於擴充。Gradle 使用 Apache Ivy 管理相依套件,並可以使用 Maven repository 作為套件來源,這將大幅減少 Java 專案惱人的相依套件問題。

舉例來說,當 a-1.0.jar 需要依賴 b-1.1.jar 及 c-1.1.jar 才能運作,使用到 a 的專案,就必須另外下載 b / c 的 jar 檔到 CLASSPATH 下,否則 a 套件的類別可能跑到一半就爆炸了。

傳統的 Java EE 開發者會建立一個 lib 資料夾,並把所有依賴的套件都往裡面丟。這造成很多問題,套件根本難以維護、升級,需要瑣碎的人工作業(工人智慧)才能管理。如果專案一多,發行的版本一多,真的需要多聘請一位「套件關係工程師」才能解決大家的困擾。

雖然 Apache Ant 可以簡化專案建置的流程,但是沒辦法處理套件相依問題。所以有了 Apache Ivy ,以及出現可以取代 Ant 、更有智慧的 Maven 工具。

Maven 提供許多 repository ,也就是大家常用、開源的套件,都有社群維護的設定檔,放在一些開放的主機提供下載,類似 Debian/Ubuntu 的 apt 或 Fedora / CentOS 的 yum 套件管理。在 mvnrepository 網站,可以搜尋你需要的套件是否有 repository 可用。

實際將 Ant / Ivy / Maven 運用在專案的開發者,應該都體驗過 Java 的苦難(設定複雜、瑣碎、麻煩),因此,如果你想要繼續用 Java 開發軟體,而且希望用更敏捷的方式,當個快樂的程式設計師,就需要學會使用 Gradle 工具。

Gradle 基於 Groovy 簡潔、易學易寫的特性,設計出專案自動化所需要的 DSL(領域描述語言),並且將 Ant / Ivy / Maven 的好處都整合起來。

Gradle - a build automation DSL

Gradle 的語法就是 Groovy,因此 build.gradle 可以簡單到只有一行印出訊息:

println 'hello gradle'

過去使用 Ant 進行刪除檔案的動作,必須記得 XML 指令長什麼樣子,但使用 Gradle 就相當直覺:

delete 'foo', 'bar', 'bazz'

麻煩的套件相依管理對 Gradle 來說非常簡單,例如,你的專案需要用到 MySQL (ConnectorJ),只需要加入一行程式碼設定 group、name、version。

dependencies {
    runtime group: 'mysql', name: 'mysql-connector-java', version: '5.1.6'
}

安裝 Gradle 1.0 milestone X (gradle-tomcat-plugin 需要使用 1.0 以上版本)

MacPort
sudo port install gradle-devel

Ubuntu (11.10)
sudo apt-get install gradle

其他作業系統必須自行下載安裝: http://www.gradle.org/downloads

接下來,可以閱讀 Gradle 官方提供的免費 Cookbook:

http://wiki.gradle.org/display/GRADLE/Cookbook

2011年10月26日

創業×閱讀 (一) 創業首部曲


創業者(Entrepreneur)代表一種遠見。

當你發現一個具有潛力的創意,並且從無到有建立可行的商業模式。當你開始投入數百小時,動手建立、行銷新產品,並且一次又一次克服障礙。

你就是一位創業者。

許多人想創業,但心中存在許多迷思:
  1. 需要先存夠一大筆錢,才能開始創業。
  2. 有金主幫忙才能創業。
  3. 最好能夠出現創投的大筆資金,好讓你的事業看起來應有盡有。
如果你的創業指的是開一家店,需要百萬裝潢、黃金店面,必須請來大批人手幫忙,才能夠營運,也許你真的需要足夠資金。

但如果你是「知識工作者」,其實你並不需要大筆資金,就能開始投入創業。

你可以繼續維持一份穩定收入的上班族工作,並利用下班後的黃金八小時開創新事業。

新創事業(Startup)的關鍵在於,你是不是已經真的開始動手,而不是停留在的階段。每位上班族都會對現況不滿族,但是以行動取代抱怨的人,相信你可以自己估算出來比例有多少。

你需要做的,是用你所有的知識,創造一個新產品或服務,它能從滿足你自己的需要開始。什麼才是有價值?當你每次投入時間,讓它變得更棒,都能讓你覺得興奮不已,而不是為了一時好玩才去做。

你需要避免的是,用大量時間幫人代工。接案也許能快速幫你增加收入,但接案永遠不會讓你創業成功。請記得,上班時間已經用去八小時幫老闆代工,別再用下班時間的八小時繼續幫人代工。

專注在新產品或服務,最有「價值」的那一部份,也就是能建立差異化的部份。你會發現需要動手做的事情,其實並沒有那麼多,最關鍵核心的部份,也許只要不超過一星期就能完成。

盡可能利用所有你能獲得的免費資源,善用新科技帶來的革新。你會發現需要投資的資金,其實並沒有那麼多,也許只是幾個月省吃儉用存下來的薪水。

這邊要討論的創業者可以分為兩種類型:
  1. 微型創業者(Micropreneurs)
    通常只有創業者一個人獨自工作,沒有僱用員工。新事業可能擁有一項新產品或服務,或是彼此有共同之處的多項產品。微型創業者的目標,通常是建立一種理想的生活型態。
  2. 新創事業體(Bootstrappers)
    願景比一個人能做的較大一些,可能需要5位、10位或更多員工,必須讓公司成長,新事業才能生存。
創業者需要讓新事業保持得夠小(small enough),必須貫徹精實(Lean)不浪費的作為。

舉例來說,許多剛開始創業的朋友,都想要建立一個專屬網站。

建立網站有很多方法:
  1. 最差的情況,你覺得這不會是你的工作,你只想請一個懂的人給你報價,你付錢、他幫你完成。
  2. 你也可以先把網站的企劃工作做好,內容準備好,再找來設計師幫忙完成。
  3. 但你也可以花點時間,從書店找來幾本書,自己搞定註冊網址的工作,申請免費的架站服務(如 Google Sites),搭配其他工具(如 Google Docs),發揮你全部的創意,就能不靠別人、自己架好網站,甚至用它來接單、提供客戶服務。
一位創業者,願意學習、嘗試新的事物,是非常基本必要的條件。創業者必須有膽識,在依賴別人最少的情況下,也能走出一條路。(如果什麼事都要依賴別人,那麼,找一份安穩的工作比較合適。)

你有一個構想,接下來需要去執行它。真正的行動是,你需要瞭解、掌握每一件事,而不能只是告訴別人:「我有一個構想,幫我完成它吧!」

如果你已經準備好,要走向一條未知的道路,用行動把你腦袋裡的想法帶入現實生活。請不要再找任何等待的藉口,從今天下班後就開始做吧!

「創業×閱讀」書單:
  1. Start Small, Stay Small: A Developer's Guide to Launching a Startup
    http://www.startupbook.net/
歡迎加入「創業×閱讀」FACEBOOK專頁!

2011年10月25日

Linux Journal 全面數位化 + 免費的九月號

喜歡 Linux 作業系統的朋友,現在起可以用更實惠的價格訂閱 Linux Journal 雜誌了!

Linux Journal 從 1994 年開始發刊到現在,經過 17 年之久,也面臨許多出版業都遇到的挑戰。

相信比較早接觸 Linux 的玩家,都跟筆者一樣,過去長期是凌客誌、Linuxer、Linux Pilot 等中文雜誌的讀者,但是除了 Linux Pilot 外,其他 Linux 中文雜誌都早已停刊,成為陳列在書櫃中收藏的回憶(筆者有 Linuxer 全部期數,以及一本曇花一現的 Dr. Linux)。

*中文凌客誌內容的來源就是 Linux Journal 

雖然還有一本 Linux Pilot 繼續出刊,但老實說我已經相當少再去翻閱,因為它的內容很少有我期待的主題(Linux User + Programmer 關心的內容)。

Linux 作業系統的佔有率雖然不停上升,可是在比例上還是小眾,別說中文雜誌,就連經典書籍都少有品質好譯作,畢竟中文市場支撐不起幾家雜誌出版社。

另一個影響雜誌銷路的原因,我認為是現在的部落格、社群、技術類媒體網站,能夠提供最即時的資訊及報導,不像雜誌必須等待每次的發刊。以 Ubuntu 來說,每次新版正式釋出時,通常比較關心這主題的玩家,老早就已經看到大量相關報導,包括許多網誌文章的介紹,以及 YouTube 上的影音展示。如果要等幾個禮拜,才看到這類的報導出現在雜誌,就了無新意了。(畢竟大多數 Linux 玩家都是積極又熱血!)

但網路的資料量實在太大,我們花掉很多時間,在比較關心的議題上大量吸收新知,對學習而言,這樣做其實有些偏食傾向,就像只吃自己愛得甜食,而忽略營養均衡。以網路的資料量,我們並不可能花很多時間,去閱讀、整理各類訊息,成為有用的資訊。

雜誌還是有它存在的必要性,就是由一群作者、編輯幫忙我們整理分類,挑選出比較好的議題和內容,並且編排成容易閱讀、較少錯誤的刊物。我們只需要花幾小時的時間翻閱,就能快速瞭解新的趨勢、初步認識一些技術的面貌。

國外不乏有些 Linux 的好雜誌,例如我長期都利用免費的 Full Circle 雜誌補充 Ubuntu 相關的新知。台灣在書店銷售的 Linux 原文雜誌,通常不能拆封翻閱,價格也貴得讓人買不下手。

很高興最近看到 Linux Journal 全面數位化的消息,從實體雜誌走向電子化,讓這本雜誌發行成本降低,也反映到售價上,訂閱者平均每期只要美金 $2.45 元 (約新台幣 $75 元)。Linux Journal 發行的格式,從 2011 年 9 月份開始,提供針對數位閱讀強化的版本,包括 Android / iPad 專用的 App ,也有 EPUB、MOBI、PDF 等,可以支援你的各種電子閱讀器。

只要用瀏覽器打開以下的網址,就可以立即在線上免費閱讀 2011 / September 這一期的內容。

http://www.linuxjournaldigital.com/linuxjournal

2011年10月24日

Universal Subtitles 讓世界各地的用戶幫影片打上字幕

記得在去年,我們想把一部 YouTube 的影片加上中文字幕。

這部影片是 Matthias Felleisen 教授的課程影片:The first year。



但是踢到鐵板,原因是 YouTube 加上字幕的權限,僅開放給原始影片上傳者。

當然,我們也可以把 YouTube 影片下載一份,嵌入字幕再重新轉檔上傳。但是這麼做並不是個好辦法,除了侵犯著作權(免費分享的影片不代表可以再製散播),讓相同的影片重複存在也很浪費資源。

今天看到一個很棒的字幕解決方案,我在瞭解 Drupal 7 的新功能時,發現這段介紹影片,已經由社群提供數十種語言的字幕,當然也包含正體中文。



這是由 Universal Subtitles 提供的服務,它可以將來自 YouTube、Vimeo 等常用網路影音平台的影片,加上外掛式的字幕,讓各地網友自行加上不同語言的翻譯,並且顯示已翻譯進度百分比。

以下是 Universal Subtitles 的短片,當然,你可以在下方的選單找到正體中文(Traditional Chinese)字幕。



這個字幕服務很簡單,卻可以造福很多人:
  • 只要影片有英文字幕,就可以很容易翻譯成其他各種語言
  • 學習者更容易瞭解「有用的影片」內容講什麼
  • 想練習外語聽力、翻譯的人,可以加入字幕翻譯志工行列,除了幫助自己進步,也能順便貢獻一己之力
  • 聽障者需要從字幕瞭解影片說了什麼

如果你製作網站,不管是公司產品的網站,或是幫助學校、組織分享課程內容等,你只需要利用 Universal Subtitles 輕鬆加上中、英文字幕,就能讓好的影片傳播得更遠。

2011年10月22日

再談數位出版,易讀網及便宜的電子書閱讀器 EZRead Touch


綠林資訊(Greebook)近期發表新款電子書閱讀器 EZRead Touch 。

這款閱讀器的規格是:
  1. 容易攜帶的 6" 電容式觸控螢幕(低耗能的 EPD 顯示),也就是電子紙,不支援彩色,但閱讀舒適度佳。
  2. 重量僅215公克,厚度小於1公分。
  3. 充飽電可使用約兩週時間(閱讀8000頁),電池容量1500mAh。
  4. 支援英英、英漢、漢英字典。
  5. 處理器 Freescale iMX508 @800MHz
  6. 作業系統 Linux 2.6.35.3
  7. 記憶體內建 128MB mDDR + 2GB FLASH,支援 Micro SD 卡最高達 32GB。
  8. 支援格式包含 EPUB、PDF、HTML、TXT、RTF、MOBI、PRC、DOC、JPG、BMP、PNG、GIF、MP3。
  9. 內附 1,000 本電子書。
雖然功能無法跟平板電腦相比,比較適合只想要電子書功能的使用者,但價格也相對便宜許多,且使用過 iPad / Android 平板的朋友,應該都能瞭解背光式的螢幕不可能拿來長時間看電子書。

EZRead Touch 剛上市就打出誘人的價格,網路預購優惠價格只要 $2,880 元,相當於買 10 本書的花費。

其實 Greenbook 的舊款產品在過去就有打出這種低價促銷優惠,可是市場反應似乎不是那麼好,多數人用過之後的回應是:操作反應過慢。

為了測試手邊一些 EPUB 電子書的閱讀效果及相容性,我已經在網站下訂預購此款新機,必須等到 12 月才能提供測試報告給大家參考。想知道這台閱讀器性能的朋友,可以先從這個介紹影片稍加瞭解。


看到 EZRead Touch 的訂價,我開始對 Greenbook 的發展感到好奇。雖然這種閱讀器的硬體生產成本不高,但是剛上市就打出 $2,880 的售價,顯然是不想依賴傳統銷售硬體獲利的思維。

先把硬體便宜賣出,再靠數位內容服務獲利,這樣的經營模式其實 Amazon 早就做了許多年。但是對台灣的消費者而言,Kindle 加上運費或代購費用,考慮維修保固的麻煩,以及缺少中文市場需要的內容,並沒有讓它的低價優勢在國內蔓延。

國內廠商有生產硬體的實力,但如果不再依賴銷售硬體獲利,錢要從哪來呢?

我不清楚再這波數位化浪潮,會讓多少搶灘的廠商犧牲、出局?不過可以預見的未來,無論平板電腦或電子書閱讀器,都將會變得跟現今的 PC、INTERNET 一樣普及。可能大多數大學生用零用錢都買得起,也許是訂兩年雜誌就送一台電子雜誌閱讀器,或者是很多國中小學生在補助方案下用它取代紙本教科書。

已經有愈來愈多,改變傳統書籍出版流程的線上服務出現。

現今然有許多電子書,其實是傳統出版流程已經 Run 過一遍,才重新編排、轉檔出來的「數位化紙本書籍」,這種電子書製作成本仍是相當多昂貴的浪費,沒辦法賣吸引人的價格,讓消費者不願意花錢買而想辦法取得盜版。

多數人很早就已經習慣數位閱讀方式,包括正在看一篇網誌文章的各位。

出版流程的數位化革命,需要更關心內容怎麼來!

綠林的「EZRead 易讀網」,是一個線上的電子書發行平台,在這個電子商務網站,除了可以讓讀者「買書」,註冊會員還可以「寫書」、「賣書」當作者。利用線上的內容編輯工具,作者不必先搞懂電子書製作方法,也不必自己處理轉檔等技術細節,只要把文字內容輸入到網站的表單,就可以產生一本電子書、在線上銷售。

EZRead 寫作室 - 新增章節內容
延伸閱讀:
  1. 綠林推全球最低價電子書

2011年10月20日

環保節能、待機時間超長的 Boogie Boar RIP 電子塗鴉板

喜歡塗鴉、手寫筆記,又不想花太多錢買平板電腦,未來 Boogie Board 可能會是另一種選擇!

上一代 8.5 吋的 Boogie Board 售價不到二千元,僅 0.3 公分的厚度,重量也只有 119 克,面板支援壓力感測,筆觸即可決定線條粗細。

雖然舊款 Boogie Board 只要一顆扭扣型電池,就可以有超長效的待機時間,可是缺點是無法儲存,也就是畫完的塗鴉,如果想永久保存,就只能拿起相機照下來。

年底即將上市的新款 Boogie Board RIP 開始支援儲存功能,可以將筆記轉 PDF 透過 USB 上傳到電腦。(現在也可以開始預購,但售價尚未公布!)

以下是 Boogie Board RIP 的 DEMO 影片。



但是對於外出想隨身攜帶、又可以建立多頁,在不同頁面之間切換、塗鴉,這次發表的新版本似乎還無法做到,除非多帶一台筆電,每次塗鴉後就轉檔到電腦保存。

雖然目前的 Boogie Board 還沒有讓我想買的動機,但是對於這種電子紙的應用,還是相當期待,畢竟長時間使用電腦已經對眼睛造成相當大的負擔,如果塗鴉、筆記都要使用 iPad 這類背光螢幕,長久下來真的很吃不消。

延伸閱讀

2011年10月19日

用 Markdown 撰寫 Java 程式碼的說明文件

Javadoc 是 Java 的文件產生工具,可以讀取 Java 原始程式碼的註解文字,自動產生專案的程式說明文件。

舉例來說,一個簡易的 Class 註解文字可能長這樣:


雖然只是簡單的說明文字,但使用 HTML 撰寫還是很討厭,因為在程式碼中閱讀這些註解並不直覺。

如果改用 Markdown 語法撰寫,程式碼註解的可讀性就提高不少。

但是 Javadoc 最後仍需要產生 HTML 格式的文件,它並不認得、也不會去轉換這些 Markdown 語法。

此時我們可以加入 markdown-doclet 這個套件,它讓程式碼的註解可以用更直覺的 Markdown 語法撰寫,最後幫忙轉換成 HTML 格式,並且還會加入 UML 圖形。


* 雖然使用 Markdown 語法撰寫 Java 程式註解,是個不錯的構想,但可惜的是實際使用的案例並不多,且 markdown-doclet 專案在 2010 年之後就不再更新。

2011年10月18日

除了 JavaScript 你還可以用 Dart 開發 Web 前端!



前端網頁的程式語言一直都是 JavaScript 的天下,Google 的 V8 JavaScript Engine 跑得飛快,甚至可以用 JavaScript 開發其他語言的 interpreter ,這個局面還會持續多年。也就是 JavaScript 許多讓人詬病的問題,也會持續被抱怨下去...

不過最近 Google 開始推行一種新程式語言「Dart」:

Dart is a new class-based programming language for creating structured web applications. Developed with the goals of, efficiency, and scalability, the Dart language combines powerful new language features with familiar language constructs into a clear, readable syntax.
Dart 是一種以類別基礎的新程式語言,用來建構結構化的網頁應用程式。Dart 的發展目標是簡單、有效率及易擴展,結合新的語言特性及一般熟悉的語言建構元素,成為清楚、易讀的語法型態。

Dart 目前可以在多種現代瀏覽器(Modern Browsers)上執行:
Chrome, Safari 5+, Firefox 4+
* IE??? Who care...

Dart 的網址是:

延伸閱讀:
  1. Google推DART語言,欲取代JavaScript?
  2. Google Dart to “ultimately ... replace JavaScript”

Safari + Pure Reader 讓 Google Reader 變美

自從使用了 iPad + Reeder 之後,我就很少直接上 Google Reader 閱讀文章,雖然 Reeder 的文章來源也是 Google Reader,但同一篇文章用 Reeder 看起來像電子書,用瀏覽器 + Reader 原生介面看起來,卻像是排版沒弄好的網頁。

其實只要加裝 Pure Reader,就可以讓 Google Reader 變美啦!

直接用 Google Reader 看文章,畫面就像以下這張...(杯具)。

如果使用 Safari 瀏覽器,只要加裝 Pure Reader 這個外掛,打開 Google Reader 就會自動美化成以下的外觀。

Pure Reader 也支援其他瀏覽器:

2011年10月17日

消失的 Gnome 字型配置,Ubuntu 11.10 升級後的系統調校

升級 Ubuntu 11.10 之後,在系統設定的「外觀」僅能選擇桌布圖片,無法設定字型大小等。


若想要調整字型大小,必須手動加裝 gnome-tweak-tool 這套工具。

sudo apt-get install gnome-tweak-tool

之後利用 Dash 主目錄的搜尋功能,輸入 tweak 就會跑出「進階設定值」。


在 Advanced Settings 的設定視窗,可以調整字型大小及其他視窗樣式。


2011年10月16日

消失的 gedit 色彩配置,Ubuntu 11.10 升級後的系統調校

gedit 是 Gnome 桌面系統內建的文字編輯器,只要經過個人化調整設定後,它足以作為網站或軟體開發的程式碼編輯工具。

Ubuntu 11.10 採用全新的 Gnome3 桌面,所以內建的文字編輯器 gedit 也升級至 3.2 版本。

$ gedit --version
gedit - Version 3.2.0

所以原本在 Ubuntu 11.04 或更早版本蒐集的色彩配置檔,也會再升級後消失,只剩下內建的色彩配置(下圖)。


在 Gnome2 的 gedit 是將配置檔儲存在 ~/.gnome2/gedit/styles 這個路徑下,而 Gnome3 開始則使用 gtksourceview 的路徑:~/.local/share/gtksourceview-3.0/styles ,因此必須先將舊配置複製。

mkdir -p ~/.local/share/gtksourceview-3.0/styles
cp -rf ~/.gnome2/gedit/styles/* ~/.local/share/gtksourceview-3.0/styles/

再重新打開 gedit 就可以看到舊色彩配置已經回復。


另外一個 gedit 的擴充套件 gedit-gmate 舊版本是 0.9.20,再升級 Ubuntu 11.10 / Gnome3 之後也會失效,必須再重新啟用以下 repository 及升級。

sudo apt-add-repository ppa:ubuntu-on-rails/ppa
sudo apt-get update
sudo apt-get install gedit-gmate

這幾天開始使用 solarized 的色彩配置檔,讓 gedit / vim / eclipse / netbeans / intellj 能有一致的程式碼配色。在 github 可以找到網友貢獻的 solarized-gedit ,使用 solarized dark 配置可以讓程式碼看起來很舒適(如下圖)。

2011年10月15日

最棒的免費作業系統 Ubuntu 11.10 正式發行


Ubuntu 11.10
http://www.ubuntu.com/ (中文網站下載)

每次升級到最新版的 Ubuntu 都會有新的感動,本月最新發行的 Ubuntu 11.10 真是堪稱最棒的免費作業系統!

*上一次更新至 11.04 發生音效無法使用的問題,回報給開發社群後,之後的某一次更新就順利解決。目前 11.10 幾乎是無痛升級,不僅內建的音效正常,外接的「青龍」 USB DAC (耳擴)也

好東西不需要太多廣告詞,直接下載安裝吧! Ubuntu 可以和 Windows 系統共存,即使日後要移除也很容易。

新的 Ubuntu 軟體中心變得更好用,不管電腦的用途是上網娛樂、文書處理、軟體開發、影像處理等,都可以在分類中找到免費又好用的軟體。


看影片認識 Ubuntu :


2011年10月14日

友情推廣:台灣電子書研究基地

最近正著手一些數位出版與電子書的研究,在找資料的過程中,發現一個相當活躍的 Facebook 社團:「台灣電子書研究基地」。目前有 2,700 多位成員,每天都有人分享新資訊,也陸續舉辦聚會分享活動。

所以利用 Blog 分享給各位有興趣參與電子書發展的朋友,請參考以下網址及申請規範。


歡迎對臺灣電子書研究有興趣的產官學研各界朋友們自由加入分享、討論、交流、研究電子書的政策、市場、技術與未來發展前景。
Welcome everyone to share, discuss, and talk about the e-book policies, markets, technologies, and developments.

電子書研究基地的版規

1. 新人申請加入前,請務必先去信向站長或副站長自我介紹。
2. 歡迎張貼與電子書產業/設計/使用/開發等知識學習性質的訊息,例如推薦研討活動等。
3. 嚴禁張貼與電子書無關的商業廣告。
4. 基地站長與副站長等管理員都具備社團管理員權限,請協助核准新人加入。核准後,請招呼一下新人,請他/她做自我介紹,並提醒新人閱讀畫面右側的文件。
5. 所有已經加入的成員均有權限邀請新成員加入,請使用畫面右側的邀請功能。
6. 為營造良好的討論分享環境, 研究基地審核加入社團的原則如下, 有以下狀況者會被拒絕: (1) 身分太過保密(2) 沒有Facebook同好交集(3) 無法判讀Facebook帳號是否為真人(4) 已知不受歡迎紀錄者
7. 貼任何連結,應加註一些文字說明,以避免出現釣魚連結,保護所有成員。

(以上文字轉載自台灣電子書研究基地 Facebook 社團)

使用 Octopress + GitHub 免費架設部落格,以 Markdown 語法快速發表文章

最近看到幾位部落客開始改用「Octopress」,取代「Wordpress」。
http://octopress.org/
發現 Octopress 真是個好東西,特別是對於本身是 Programmer 的 Blogger 來說!

雖然我一直用 Blogger 寫網誌,也陸續使用 Wordpress 架設過幾次,但大部分技術類的筆記,還是用 Wiki 整理(目前偏好 dokuwiki)。

如果你也是 Programmer ,曾經想過要把學習心得記錄下來,寫過又要貼圖、又要放程式碼的文章,就會瞭解 Blogger 、 Wordpress 並不是那麼順手。

Programmer 總是想盡辦法提高效率,讓程式碼能少寫一些、步驟能簡化一點、流程能更簡潔,最好是大部分的東西都可以自動生出來,讓 Programmer 工作時只要 focus 那些真正需要動手的事情。

因此 Programmer 應該要學習用 Markdown 語法,它可以幫助快速撰寫學習筆記、電子郵件、會議記錄、系統文件等等,雖然寫出來的文件是純文字格式,但本身就具有 WYSIWYG 的效果。

舉例來說,以下是三種不同純文字標記方式。

HTML syle

<h2>title</h2>
<p>contents line1</p>
<p>line2</p>
<ulp><
>li>item1</li> 
<li>item2</li>
</ul>

LaTeX style

\section{title}
contents line1
line2
\begin{enumerate}
  \item item1
  \item item2

Markdown style

## title
contents line1
line2
* item1
* item2

這三種文字格式,都能透過程式自動化處理,讓排版輸出結果可以顯示在瀏覽器,或是發佈成PDF等其他格式。

Markdown 顯然比其他標記語法更容易看懂,因為夠直覺,即使從來沒學習 Markdown 標記的人,第一次看也不會覺得有什麼困擾。對於撰寫者本身,不太需要去記憶標籤用法,需要撰寫的字數也很少。

在平板電腦的時代,這種寫法就相當具有優勢,例如聽演講時需要撰寫一篇記錄,又不方便攜帶筆電;因為輸入文字的速度有限,又要能兼具基本的排版,避免之後還要花太多時間處理,這時候簡單易寫的語法就相當管用。

* 如果你有一台 iPad ,建議可以參考這幾款運用 Markdown 的文字編輯軟體:iA WriterByword 。

如果你開始習慣用 Markdown 寫文件,就會覺得「回不去了!

雖然許多 Blog 或 Wiki 軟體,也可以安裝擴充套件,讓文章可以用 Markdown 語法撰寫。
可是,這樣還是不夠 Simple 阿!

因為 Programmer 通常會有用得很順手的 Text Editor,例如 vim、emacs、TextMate、BBEdit、gedit 等等,強大的文字編輯軟體,不僅有 Syntax Highlighting 功能,還可以使用 Template、Macro、Shortcuts 等等功能。不僅拿來寫程式碼很好用,用來編寫 Markdown 文件當然也是游刃有餘。

如果你已經很熟手邊的文字編輯器,每天花不少時間寫 Code,可是為了把一些學習心得記錄成網誌,又要打開網頁、使用另一種編輯器,才能寫 Markdown 語法;過程中手指要不斷離開鍵盤、受滑鼠折磨,這真是受夠啦!!!

既然是撰寫跟程式有關的文件,何不就用撰寫程式的方式,開啟新文件、打字、存檔、執行 deploy 程式,不用再多那些礙手礙腳的步驟,就能發佈成網誌文章!

Octopress 很簡單、管用!
  1. Octopress 內建了一個簡單、好看的 HTML5 theme,也支援行動裝置顯示的最佳化,讓你的部落格一開始就有很好的外觀基礎。
  2. Octopress 支援各種你想用的功能:Twitter, Google Plus One, Disqus Comments, Pinboard, Delicious, and Google Analytics ,不夠用也可以很容易自己擴充。
  3. Octopress 使用最近很夯的 Compass and Sass ,讓你可以用輕鬆省事又炫的技巧,調整版面外觀。
  4. Octopress 使用 Solarized 幫程式碼著色,漂亮!
Octopress 可以幫你使用 Markdown 撰寫的網誌文章, compile 為靜態(static)網站,並內建 deploy 到 GitHub 的功能!!!

也就是說,使用 Octopress + GitHub 架設部落格,可以不用花一毛錢(除了網址註冊費)!

發佈到 GitHub 的網址,預設是:

http://yourname.github.com/

你也可以設定成自己購買的網域名稱。

使用 MacVim 編輯 Markdown 格式的網誌文章

在建立好 GitHub Pages Repository 之後,使用 Octopress 內建的指令即可自動設定 GitHub 發佈。

# 設定 GitHub 發佈
rake setup_github_pages

*這邊需要填入 Git URL,格式如: git@github.com:yourname/yourname.github.com.git

在安裝好 Octopress + GitHub 的機器上,撰寫網誌變成一項簡單的工作,就樣每天照三餐寫 Code 一樣容易,常用的指令示範如下。

# 建立新文章,保存在 source/_posts/日期-標題.markdown
rake new_post["標題"]

# 產生網站檔案
rake generate

# 發佈到 GitHub
rake deploy

發佈後的範例如下:

http://sslab.github.com/

有興趣開始使用 Octopress ?請參考以下詳細安裝及設定教學:


SourceTree - 好用的 Git / Mercurial GUI 管理工具 for Mac OS X

http://www.sourcetreeapp.com/
Git 是免費、開放源碼的分散式版本控制系統,從小專案到非常大的專案,都可以很快速、有效地管理。

對程式設計師來說,一定要熟記 git 指令的用法,在終端機下操作 git 是必備的基本技能。(其他的 svn / hg 指令也一樣啦!)

但是,如果要講解一些版本控制的概念、展示專案的近況,在純文字模式下指令,對很多人來說就會霧煞煞。(人人都能成為 Programmer ,意思就是並非人人都是 Programmer!)

通常我會找一套 GUI 的工具,用圖形化的顯示方式,溝通起來比較舒適!

目前在 Mac 系統中,最滿意的 Git GUI 工具是 SourceTree ,這套軟體目前可以免費下載(包括在 AppStore 也免費)!


啟動 SourceTree 的第一個畫面,是 Bookmarks 書籤功能,可以將常用的 Repository 都加入書籤。


打開一個 Repository 可以檢視、操作版本控制功能,顯示 Commit 的內容時,若是程式碼(文字檔)就會顯示出 diff 差異比對。


若 Commit 的內容是圖片檔,也可以顯示預覽,下圖是一張 .eps 的向量圖檔,在 SourceTree 顯示沒問題(但讀取時間稍長一些)!


建議大家可以用 AppStore 下載安裝,利用目前 Free 的機會把它買起來啦!

2011年10月11日

Grails 2.0.0M 的 Spock Testing with Mock Domain Object

Grails 2.0.0M 雖然內建 spock plugin,但版本 0.5 仍有些問題,必須先升級成 0.6-SNAPSHOT。

grails install-plugin spock 0.6-SNAPSHOT

修改 grails-app/conf/BuildConfig.groovy

grails.project.dependency.resolution = {
  plugins {
    //增加以下
    test ":spock:0.6-SNAPSHOT"
  }
}

接著建立一個 Unit Test:

grails create-unit-test Book

新檔案內容大概是:

import spock.lang.*
import grails.plugin.spock.*

class BookSpec extends UnitSpec {

    def "feature method"() {

    }
}

直接執行測試會發生問題:

grails test-app

The return type of java.lang.Object mockDomain(java.lang.Class, java.util.List) in BookSpec is incompatible with void mockDomain(java.lang.Class, java.util.List) in grails.plugin.spock.UnitSpec

必須手動將 Test Class 修改以下。

import spock.lang.*
import grails.plugin.spock.*
import grails.test.mixin.*

@Mock(Book)
class BookSpec extends Specification {
  def "book test"() {
    setup:

    when:
    new Book(name: name).save()

    then:
    Book.findByName(name) != null

    where:
    name = 'title1'
  }
}

主要差異是必須用 Specification (Spock 的標準寫法) 取代舊版 Grails spock 的 UnitSpec,並且用 @Mock 的 annotation 取代 mockDomain() 的舊方法。

如此一來,便可以用語意更加清晰的 Spock Specification 取代 JUnit 風格的 Test Case 寫法。

Happy Grails !!!

解決 Grails Maven 套件衝突問題

Grails 的 BuildConfig.groovy 可以很容易設定網站專案的「相依套件」,這個特性來自 Groovy 的 GrapeGradle ,讓 Java 及 J2EE 專案需要的 JAR 檔,可以從 Maven Repositories 自動取得,省去手動下載、維護 lib 及相依性問題的麻煩。

舉例來說,當 Grails 專案需要使用「mysql-connector-java (ConnectorJ)」連線到資料庫時,不必再去 MySQL 網站下載 *.jar 檔案、設定 CLASSPATH 等,只要在 BuildConfig.groovy 增加一行 runtime 的 Grab 設定,並且可以指定版本編號,日後要升級成新版也只需要更改此版本編號。

dependencies {
    runtime 'mysql:mysql-connector-java:5.1.16' //for mysql datasour
}

Grails 並不會將相依的 *.jar 直接放到專案的資料夾下,而是放在 HOME 的 .grails 資料夾。對於使用 SVN / GIT 版本控制系統的專案來說,這是個相當實用的作法。專案資料夾不必包含網路下載即可取得的 *.jar 檔案,更有效利用版本控制系統的儲存空間,日後要 clone 到別部開發機器、伺服器也更快(在別台機器執行 Grails 時會也會自動下載相依套件檔案)。

但是 Java 的自動化套件管理的機制,並不是每次都那麼管用,有時候會遇到套件衝突的問題。

有兩種設定方式,可以解決衝突的問題。

第一種是在 runtime 的 closure 中增加 transitive = false ,停止自動使用相依套件的功能。但是這麼一來,就必須增加其他 runtime 設定將相依套件補齊。

第二種方式是用 excludes 排除出包的套件,如果不載入這些有衝突的套件,會影響主套件的必要功能,同樣必須增加 runtime 將套件補齊,但至少需要增加設定的數量會比關閉 transitive 少得多。

例如 jrst 1.4 的套件,依賴的 fop 、 saxon 就會造成 Grails 啟動失敗,因此使用 excludes 將有問題的套件排除。

Error executing script TestApp: loader constraint violation: when resolving overridden method "org.apache.tools.ant.helper.ProjectHelper2$RootHandler.setDocumentLocator(Lorg/xml/sax/Locator;)V" the class loader (instance of org/codehaus/groovy/grails/cli/support/GrailsRootLoader) of the current class, org/apache/tools/ant/helper/ProjectHelper2$RootHandler, and its superclass loader (instance of ), have different Class objects for the type org/xml/sax/Locator used in the signature (Use --stacktrace to see the full trace)

runtime ('org.nuiton.jrst:jrst:1.4') {
    //transitive = false
    excludes "fop", "saxon"
}

每次安裝 Grails Plugins 或增加 dependency 設定後,必須要做一次完整的 test  ,才能及時處理套件衝突問題。

Happy Grails !!!

2011年10月5日

Sublime Text 文字編輯軟體,支援 Linux、Mac OS X、Windows


Sublime Text 是一款純文字編輯軟體,適合撰寫程式碼、網頁原始碼等文字檔案,支援如色彩強調(Syntax Highlight)、多檔編輯(Tab)等功能。它支援的檔案類型相當齊全,對中文字支援良好、畫面漂亮,且預設值已相當好用,不需要經過太多調整。

也許看倌會覺得,已經有那麼多好用的文字編輯器,還要這套 Sublime 做啥?

Sublime 支援的作業系統包括:Linux、Mac OS X、Windows

支援 Mac 就是這篇文章的推薦重點啦!

由於筆者最近大量在 Mac 上進行程式碼、電子書編寫的工作,所以找來不少相容 Mac 的文字編輯軟體,都給它裝上去試用。有很多好用的 Text Editor 根本不支援 Mac,再好用也看得到吃不到阿!

目前我的 Mac 裝有:
  1. Vim歷久彌新口碑佳的老牌,好用、常用、管用,但是用久了也會膩阿!
  2. MacVim類似 gVim 的 Mac 版本,好用、常用、管用,但是用久了一樣會膩阿!
  3. TextMate $$$
    傳說中很好用!但實際上打開發現中文字一團糟糕,付費軟體不該有這種品質,淘汰!
  4. TextWrangler
    就是 BBEdit 的孿生兄弟,免費版, 支援從 FTP/SFTP 開啟檔案,好用!
  5. jEdit
    老牌的 Java-based 文字編輯器,支援的外掛很多,但字體不管怎麼調整,看起來都糊糊的,不舒服!
  6. BBEdit $$$
    強大、好用,可是,買不起!
  7. Sublime
    這篇文章要介紹的編輯器!目前免費無限試用。

從上面的整理可以了解,筆者最常用的編輯器仍是 VIM 系列。但就像用筷子吃中餐吃久了,也會想換個方式、改用刀叉吃西餐。

目前支援 Mac 的版本是 Sublime Text 2 ,舊版 1.4 僅支援 Windows 系統。Sublime Text 2 仍是 Beta 階段的軟體,可以免費下載及試用,並且沒有試用天數及功能限制。

Sublime Text 2 有三個讓我覺得滿意的設計:
  1. 中文字支援良好。
  2. 內建的 Color Scheme 夠多。
  3. 側邊提供 MiniMap,可以將整份文字檔案變成縮圖,雖然功能跟捲軸其實差不多,但視覺效果很炫。

2011年10月4日

在 Mac OS X 安裝 RabbitMQ / Erlang

使用 MacPorts 可以輕鬆地在 Mac OS X 安裝 RabbitMQ 及 Erlang 軟體,如果順利的話 : )

會寫這篇網誌記錄的原因,就是過程並不如預期的順利。

如果你的 Mac 還沒安裝 MacPorts ,請先參考以下這篇教學:

http://blog.lyhdev.com/2011/09/macports-mac-os-x-open-source.html

自從安裝了 MacPorts ,我開始把原本在 Ubuntu Linux 常用的開發工具,一個接一個移到 Mac 筆電上面。我盡可能讓自己開發的軟體,可以同時在 Ubuntu Linux 及 Mac OS X 兩套系統上正常運作,有了 MacPorts 的幫忙,原本 apt-get install 一行搞定的事情,也能用 port install 一行解決。

但昨天踢到鐵板了!

我只是想在 Mac 安裝 RabbitMQ :

sudo port install rabbitmq-server

這道指令執行並沒有成功,因為 RabbitMQ 是用 Erlang 開發,所以 port 會先安裝 erlang ,可是就在 erlang 安裝過程中,整個程序 hang 住了,等了很久沒反應、處理器也沒在運作。

若要找出安裝過程出現什麼問題,可以用 -d 參數:

sudo port -d install erlang

找到兇手了,就是這行 Error 訊息。
erlc -W +debug_info +inline -o../ebin hipe_rtl.erl
(no error logger present) error: "Error in process <0.1.0> with exit value: {{badfun,[<<5 bytes>>,<<142 bytes>>,<<9 bytes>>,<<3 bytes>>,<<2 bytes>>,<<5 bytes>>,<<14 bytes>>,<<2 bytes>>,<<8 bytes>>,<<8 bytes>>,<<5 bytes>>,<<7 bytes>>,<<5 bytes>>,<<11 bytes>>,<<2 bytes>>,<<11 bytes>>,<<15 bytes>>,<<4 bytes>>,<<145 bytes>>,<<5 bytes>>,<<1 byte>>,<<7 bytes>>,<<10 bytes>>,<<7 bytes>>,<<6 bytes>>,<<7 bytes>>,<<7 bytes>>,<<6 bytes>>,<<12 bytes>>]},[{erlang,apply,2}]}\n"


根據 MacPorts Trac 的記錄,似乎是 Mac 10.6 + XCode 4 的 gcc 版本會出包。還好熱心的社群朋友已經提供 Patch,服用方法如下:

wget http://trac.macports.org/raw-attachment/ticket/30516/Portfile.patch
sudo patch $(port file erlang) Portfile.patch
sudo port install erlang

之後再執行一次 Erlang 及 RabbitMQ 的安裝:

sudo port install erlang
sudo port install rabbitmq-server

啟動 RabbitMQ 服務:

sudo rabbitmq-server

圓滿!
lyhcode by lyhcode
歡迎轉載,請務必註明出處!