關於 GitBook 平台的改版與 GitLab 替代的考量

GitBook 有兩種含意:一為 GitBook 文件平台;另一則為 採以 Node.js 所開發的命令列工具,用以製作基於 Git/Markdown 所產出精美的電子書文件。

就在今年四月底,Gitbook 平台 (Github 旗下之一),推出所謂的 V2 大改版,改版幅度之大,連帶影響到既有廣大的 V1 開源用戶,預計今年10月左右就要關閉 V1 的使用,強制改版至 V2。但更為難受的是它的 售價策略,Free 方案竟只縮減為只能創建一個「space」,也就是只能創建一本電子書;而付費方案最低則為每個月要支付 7美金 (5 user)!

這肯定會引發一大波開源用戶的出走潮!畢竟絕大多用戶都是基於開源分享的精神將自己的創作 (程式碼/文件) 置於 Github/GitBook 的。 (關於這次 GitBook 大改版,可參考對岸這篇:如何看待 GitBook 的改版?)

所以,要製作開源的電子書在 GitBook 平台短期內 (預期這風波會造成大量用戶的質疑抱怨)並非理想的方案。退而求其次,尋求替代可提供免費文件的平台,並基於 gitbook 工具所製作的電子書,那就非 GitLab 平台莫屬!

GitLab 也有兩種含意:一為 GitLab Inc. 所提供幾乎與 Github 一樣的介面與服務;另一則為該家公司所釋放出基於網路的Git倉庫管理工具,且具有wiki和issue跟蹤功能,可方便私人建構所屬的私有 Git 儲庫平台。

而且 GitLab Inc. 背後可是有強大的金主:Google!所以也不用擔心會有突然關閉或如 Github 那樣不可思議的收費方案。 (額,Github 被微軟收購的,這應該大家都知道吧~。)

要在 GitLab 平台發佈基於 gitbook 工具所製作的電子書並不困難,官方也提供了一個 gitbook 儲庫 (repository) 範本 (可參考它所產出的 靜態文件網頁),可依照該儲庫的 README 說明並 fork 該儲庫即可開始建構所屬自己的電子書。

嗯,其實我個人不太喜歡使用 Fork 的方式當成自己專案的起點,下一篇就來分享下如何在 GitLab 新增專案並配置成可被持續發佈的 GitBook 文件網站。 (其實步驟比想像得還簡單)

{書稿} 建置 Android 開發環境-02

安裝與設定 Eclipse EGit

什麼是 EGit?

EGit 是 Eclipse 的一個團隊提供者 (team provider)套件,它可以讓開發人員直接在 Eclipse IDE 環境內使用 Git 版本控制系統。

EGit 是基於 JGit 套件 (library)所發展,而 JGit 係以 Java 來實現 Git 完整功能的輕量級 (lighweight)套件庫。

安裝 EGit

自 Eclipse 4.2 以後版本,EGit 已成為核心組件,並不需要另行安裝;而若使用 Eclipse 較舊版本,則 EGit 是被視為外掛 (plug-in),可以透過 Eclipse 安裝管理員 (installation manager)安裝。

在 Eclipse 選單上點選【Help】→【Install New Software...】,在出現的對話框內,輸入下列 URL 位址: http://download.eclipse.org/egit/updates

然後按照對話框提示的訊息完成安裝。

圖、安裝 EGit 外掛

圖、安裝 EGit 外掛

閱讀全文 »

{書稿} 建置 Android 開發環境-01

安裝 Android 開發工具

Android App 開發環境只要設置下列兩個開發套件即可:

  • Java SE (Standard Edition)。
  • ADT (Android Development Tools) Bundle。

Java SE

Android App 是以 Java 語言撰寫的,自然需先下載 JDK (Java Development Kit) 的編譯環境。

請至 https://developer.android.com/sdk/index.html 下載 JDK 最新版本;注意下所對應的作業系統、以及 32或64 位元的版本檔案,然後下載直接執行安裝即可。

本書為 Windows 7 x64 的開發環境,最新的穩定版本為 JDK 7,所下載的參考檔案名稱為 jdk-7u51-windows-x64.exe

ADT Bundle

Google 已為 Android 開發人員準備了一套完整的開發套件-ADT Bundle,可讓開發人員不用再各別安裝與設定開發環境,降低 App 開發的門檻。

關於 Android 開發工具,可參考其開發人員首頁 https://developer.android.com/sdk/index.html 獲取更多相關資訊。

ADT Bundle 包含了下列幾個開發套件:

  • Eclipse + ADT plugin。
  • Android SDK Tools。
  • Android Platform-tools。
  • The latest Android platform。
  • The latest Android system image for the emulator。
下載與設定 ADT Bundle

在上述的網頁,點選【Download】下載取得 SDK ADT Bundle for Windows (32/64 位元)。

將所下載的壓縮檔 (檔名為 adt-bundle-.zip) 解壓縮至合適的位置內並可更名較簡短的資料夾名稱 (e.g. C:\adt-bundle-windows)。

開啟資料夾內 /eclipse/ 目錄並執行 eclipse.exe,設定工作區 (workspace)專案儲存目錄 (e.g. C:\Projects\workspace),如此即完成 ADT 的初始配置。

{書稿} 安裝與設定 Git for Windows

安裝與設定 Git

Note:
本書關於 Git 與 Android 開環環境是假設建基在 Windows-based (e.g. Windows 7/8)的系統下;如為 Linux (e.g. Ununtu/Fedora)、Mac 等其它系統,則可參考該系統相關的安裝指引。

在 Windows 環境下使用 Git,必須先安裝核心組件-msysGit。安裝完成後即可在命令列模式輸入 Git 指令,或是利用它內建的圖形界面操作 Git。

本書所有案例操作會同時以命令列 (command promprt)與圖形使用者界面 (GUI, Graphic User Interface)兩種模式,來說明如何執行 Git 操作。

命令列模式即是開啟「命令提示字元」視窗,並輸入 Git 指令;而圖形界面則以整合在 Eclipse 內的 eGit[1] 來執行 Git 。

Note:
雖然安裝完 msysGit 即有圖形界面,但是它作得很粗糙;所以若不是開發 Eclipse 並使用 eGit 的 Windows 使用者,會選擇另一套更友善的圖形使用界面-TortoiseGit。

不過要注意,TortoiseGit 只是 Git 的一種圖形前導 (frontend)界面,所以仍須先安裝完 msysGit 才能執行 Git 指令。

無論 msysGit、TortoiseGit、eGit,甚或其它第三方 Git Client,彼此之間並不會有任何衝突,都可以對同一 Git 儲庫執行 Git 指令。與其它版本控制系統不一樣的就是,所有的 Git Client 其實僅是 Git 原生組件 (component)的「包裹 (wrapper)」而以,它們其實都是操作同樣的 Git 核心組件。

[1] eGit 是已內建於 Eclipse 的 Git 套件,它可以透過 Eclipse 的界面直接操作 Git 指令。下一節會說明如何設定 eGit 組態。

閱讀全文 »

HowTo-Redmine 整合 Git/GitHub

目的:

讓 Redmine 可以瀏覽位於遠端 Git Server 如 GitHub 儲庫每一次的提交 (commit)歷史資訊,並能達成 Redmine 的 Issue 與 Git Commit 關聯。

說明:

Redmine 僅能讀取位於 local 端的儲庫 (repository)內容,卻沒有支援透過 Git 協定連結位於遠端 Git Server 上的儲庫。

主要解決方案就是先在 local 端建立對遠端儲庫的鏡射 (mirror),然後透過以下三種方式之一:

  1. 建立批次檔,內容為可以提取更新遠端的儲庫內容 (ex. git fetch -q --all)並設定定期執行作業 (ex. cron)。可以參考此篇-HowTo keep in sync your git repository for redmine
  2. 在 GitHub 上所欲讀取的儲庫專案,在其設定 → Service Hooks 上啟動 Redmine,輸入包括 Remine 所在 Url、專案名稱、API Keys 等欄位資訊,並勾選相關執行選項。可以參考此篇-HowTo simply keep Redmine in sync with GitHub
  3. 在 Redmine 所在位置安裝 Redmine GitHub Hook plugin,並於 GitHub 上該儲庫專案新增一個 WebHook URL,填入 Remine 專案所在 Url 位置,由 GitHub 連結 Remine。

第一種方式最簡單,但並不自然,因為 Remine 所在機器需定期執行遠端儲庫更新作業,即使遠端儲庫內容並未更新;第二與第三種方式是屬於 publish-observe 合理的作法,當遠端儲庫 (GitHub)的內容被更新時,它會透過 service hook (擔任 event-handler)轉呼叫位於 Redmine local 端的儲庫來更新內容。

第二種方式的 service hook 是由 GitHub 這邊所提供的,Remine 並不需要安裝額外的 plugin。但我設定嘗試了好幾次卻無法達成更新 Redmine 所在儲庫內容,所以我這裡是採用第三種方式,由 Redmine 這裡提供 github hook plugin,再至 Github 設定 WebHook Url,透過 Web Service 達成兩端的同步。

實作步驟 -

閱讀全文 »

初識 Git∣GitHub-關於版本控制

關於版本控管

版本控制 (version control),係針對電子化的檔案,包括文件 (document)、程式碼 (source code)、與其它需被整理保存的資訊等,對其變動情形作有效的追蹤管理。

對於軟體開發過程,軟體開發者利用版本控制來追蹤、維護程式碼、設計文件、設定檔等變動情形;尤其是當面臨多人協同開發時,相關設計的文檔必然會複製多份版本分散置於每一位開發人員的電腦內,只要其中一份版本因功能或除錯 (features or bugs)問題經變更後,則位於其他電腦內的版本也必須保持其一致性。

這種頻繁且複雜的變動管理追蹤,幾乎是無法透過手動方式來管理的,自然而然,一個好的版本控制系統 (version control system, VCS),就要能擔負起下列的管理工作:

  • 對於所有團隊成員們的開發文檔 (尤其係指程式碼),要能保持一致性 (consistent)。
  • 因為錯誤的修改或遺失檔案,可以很輕易地回溯 (revert)至原來的狀態。
  • 任何再細小的變動,都可以知道是誰做了修改。
  • 可以輕易地部署 (deploy)不同版本的程式碼至開發或產品的伺服器內。
  • 團隊所有成員甚至可以利用 VCS 當成相互溝通的媒介。

儲庫 (Repository)

儲庫[1]是版本控制系統的核心組件 (core component)。它是一種資料倉儲的概念,主要儲存著下列的資訊:

  • 一組具階層性 (hirarchy)的檔案與資料夾結構。
  • 儲庫內的歷史性變更紀錄 (historical record of changes)。
  • 一組提交的資訊與指向該提交的指標,稱之為表頭 (head)。

簡而言之,版本控制系統的儲庫就是儲存著多個版本的文檔資訊。基於儲庫的位置所在,可以大致區分為兩種類型的版本控制架構。

集中式版本控制

集中式版本控制 (Centralized Version Control)是典型的「主從 (Client/Server)」 架構。記錄著多個版本檔案的儲庫是置於單一的伺服器內,並提供給具有存取權限的多個用戶端從伺服器提取檔案,所有的變更與提交等資訊均必須在連線到伺服端後才得以完成工作。

最普為人知且為免費開源的集中式版本控制系統,就屬 CVS、Subversion 為代表,並幾以成為業界所熟悉的版本控制標準模式了。

集中式版控系統模型

圖1-1:集中式版控系統模型

參考上圖1-1,集中式版控系統只有一個儲庫,是位於伺服器內。用戶端連線後發出 update 更新指令,就會從中央儲庫內複製一份工作複本 (working copy)至區域端電腦內;當開發者新增或變更檔案內容後,則需要提交 (commit)至伺服器的儲庫內;當儲庫與工作複本的檔案內容有不一致發生衝突 (conflicts)的現象時,則需要作合併 (merge)的動作。

閱讀全文 »

軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal