{書稿} 建置 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 組態。

閱讀全文 »

論學習歷程的三階段-守破離《2》

相當驚訝軟體業界的大師 Martin Fowler (UML Distilled, Refactoriing, NoSQL Distilled 等作者),早已於 2006 年在他的 blog 內已發表了以「守、破、離」為題-ShuHaRi,說明在從事所謂的軟體技術與開發方法論上,所歷經的三個學習階段。

這裡特別把這一段的原文摘錄下來:

The idea is that a person passes through three stages of gaining knowledge:

Shu: In this beginning stage the student follows the teachings of one master precisely. He concentrates on how to do the task, without worrying too much about the underlying theory. If there are multiple variations on how to do the task, he concentrates on just the one way his master teaches him.

Ha: At this point the student begins to branch out. With the basic practices working he now starts to learn the underlying principles and theory behind the technique. He also starts learning from other masters and integrates that learning into his practice.

Ri: Now the student isn't learning from other people, but from his own practice. He creates his own approaches and adapts what he's learned to his own particular circumstances.

  • 「守」的階段:Martin 認為學生主要遵循一位導師所教授並務求精確即可。這個階段不用太過探索理論基礎,而是在「如何做 (How to do)」上下功夫;也不要三心二意追求多種方法(論),專注在導師所要求的主軸,把它做精就是了。

    個人所認知的關鍵字為:學習、How-to、專注

  • 「破」的階段:有了基礎實務的經驗,學習者會開始來思索原來所學關於理論基礎與原則,並會逐漸整合其他大師的論述,帶入自己的實務工作上。

    主要的關鍵字為:反思、整合、驗證

  • 「離」的階段:學習者已不全然由他人(導師)所學習而來,更多是從自身的實踐階段過程中,創造出自己所領悟的方法 (論),並應用在現狀的工作環境中。

    主要的關鍵字為:實踐、創造、驗證

閱讀全文 »

[軟體開發] 敏捷式的平行開發流程模型

前些時候,我們團隊所輔導 (並主導其中的核心開發)某家頗具知名規模的商務網站,該公司經營者總覺得他們原來的開發產出速度緩慢,希望能借重我們在實務開發上的經驗,而能改善開發製程,加速開發上的產出。

我發現到 (應該也可說是意料中事),即使是擁有10幾個以上開發人員的大型網站系統開發,其所謂的系統分析/設計的開發模式仍是採以最典型的 Client/Server 方式。Client 端(也就是 Web 端)主要採以畫面為主的需求分析;Server 端則以資料庫的資料模型為設計核心。

簡單的說,這類開發模式是屬於「資料導向 (data-oritented)」,直覺且簡單,系統規模小且營運需求並不常變動,這樣是行得通的,而且在系統開發的初期會是相當快速的;但當營運規模大得經常會要求系統快速配合商務運作,「資料導向」的開發模式卻往往耗在所謂的「共用性整合」議題上太多等待時間了,那種有著「剪不斷、理還亂」的感覺,不僅讓人苦惱,也是引起紛爭的主要來源。

其實原因也很單純,「資料導向」實際上早已悖離了軟體開發的第一個最基本原則:「封裝 (encapsulation)」。過早揭露資料與邏輯的細節,而使得系統的複雜度提升。

所以,該如何改善開發製程呢?當然就要懂得如何遵守「封裝」的設計原則,而採以 MVC (Model-View-Control)的架構則會是遵循封裝原則的第一個必要手段。

不過要釐清這裡所謂的「MVC」,可不是 Java Struts 或 ASP.NET 的 MVC 框架;系統廠商所提出的 MVC 框架,那是針對 Web 瀏覽器與伺服端如何控管 WebPage 狀態,是關於如何於 Stateless (無狀態)的 UI 設計議題所提出的解決方案 (solution domain)。

而關於企業層級 (enterprise)系統的 MVC 架構,則是回歸到問題領域 (problem domain)上,如何在呈現 (presentation)與業務邏輯 (business logic)兩個層級間,能有效隔離兩者的耦合性 (coupling)。

基於上述的開發原則,我們對開發流程的調整,其實就是在 client (Web UI)與 Server (Model)之間,規劃了控制層 (control layer),藉以隔離中介 Client/Server 的直接耦合;Web UI 團隊與 Model 團隊係以平行分工開發 (parallel development),各自依據其職掌-Web UI 專注畫面呈現與動態技術的實作;Model 專注於系統功能的實現 (realization)。兩者均只與控制層所設計的規格 (也可稱之為功能介面)溝通,所以誰不需等待另一方的產出,如此也就不用初期就耗在所謂共用性議題的等待上。

再者依照敏捷 (agile)的開發精神,整個開發產出係採以 I&I 漸增與漸進 (Iterative & Increment),期待作持續性的整合 (continuous integration,以版本控制系統如 Git 作為整合的儲庫)。最好是每日就作整合,最遲不要超過一個星期。

關於敏捷式的平行開發流程 (agile parallel development process),我們利用 Eriksson-Penker Business Extensions 語法 (俗稱火箭圖)所規劃的開發流程總覽 (overview)如下圖1。然後關於 Web UI、Control、Business Model 這三個層塊,再各自以 UML 活動圖 (activity diagram)來表述它們細部的開發活動,參考下圖 2~3。

敏捷式開發流程模型-Overview
(點擊圖片鏈接看原圖)圖1、敏捷式平行開發流程模型-Overview

閱讀全文 »

聊聊 C# 實作 Excel 選擇權報價交易系統

前兩個月有位委託人希能協助在 Excel 實現台指期選擇權契約報價暨自動交易決策系統。他說原來已有透過一位獨立開發者利用 Excel VBA 撰寫,但無論如何都無法符合他的需求,甚至連正常執行顯示報價都有問題。

直覺聽來,我是不可能考慮使用 Excel VBA 來實作選擇權報價的,它需要動態處理即時資訊的更新太多也太過頻繁,且實現邏輯可能比想像得還複雜,要能動態處理運算並處理選擇權契約月份與履約價格,這非得使用 OOP 語言來實現會容易許多相對也比較有擴展的彈性。

原來是不打算接受這個委託的,因為要克服相關技術的難點預期應該不少。不過後來想想,反正早有計畫要利用 C#.NET 實現包括報價資料源的連接、當沖策略的設計、自動下單等功能,並直接以 Excel 當使用者介面 (GUI),可以直接利用其簡便的圖形報表呈現所需的結果。

由於幾乎是從無到有,且個人對即時性 (real-time)系統的設計實現並不熟悉,包括從研讀大量相關文件到寫碼實作,整整花了約有一個月 part-time 時間,總算能實現在 Excel 畫面上呈現選擇權履約價的報價表。

Excel 實現選擇權報價

初步實現的功能包括有:

  • 自動判斷每個月星期三的結算日,由此可決定起始的契約月份。
  • 可動態選擇選擇權契約月份。
  • 可任意排序選擇權項目。
  • 可自動判斷與更新台指期近月份報價暨昨日收盤價。
  • 閱讀全文 »

Howto – 讓 Redmine Issues 關聯 Git Commit 訊息

關於 Redmine 如何將其 Issue (問題)關聯至 Git 的 Commit 訊息,需參考官方這一篇-Redmine Application Settings

* 在專案內,建立問題清單。

Redmine 問題清單

* 對所在的儲庫 (repository),執行提交 (commit)指令時,利用「# + 問題編號」關聯問題。預設的關鍵字有:

  • 參考問題:refs, references, IssueID。
  • 已修正問題:fixes, closes。

例如本次提交係參考問題2(Issue-2),所下的提交指令如下:

$ commit -m "the commit refs #2"
Redmine 問題清單

閱讀全文 »

軟體思維顧問

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

Personal