2009年4月14日 星期二

4/13 MEETING內容

開會時間:
2009年 4月13 日(一)

討論內容:
(1)報告client的程式流程圖
(2)報告client介面的架構
(3)報告RFID定位資料搜尋的結果

討論結果:
(1) 改成WIFI定位,RFID為輔
(2) 會員登錄改成RFID讀卡式




下次開會時間:


2009年5 月 4日(一)

預計下次開會前的進度:
(1)user端以及client端的軟體完成 然後測試完成
(2)找尋wifi定位(找看看有沒有可預防室內誤差的方法),以及RFID的使用資料

2009年4月10日 星期五

第四次Meeting紀錄

開會時間:
  • 2009年4月6日(一)

討論內容:
  • 目前進度報告及軟體設計。

討論結果:
  • 2009年4月20日的Meeting提前至4/13日。

目前進度:
  • Client端軟體設計進行中。

  • Server端軟體設計完成。

  • RFID定位資訊蒐集進行中。

細節:
  • Client端軟體設計於4/13日報告進度。

  • Server端軟體可先行實作。

  • RFID定位資訊也於4/13日報告進度。

下次開會時間:
  • 2009年 4月 13日(一) 中午12:30 在馮大Office

預計下次開會前的進度:
  • Client端軟體設計盡可能趕工。

  • 準備好RFID定位資訊的進度報告。

2009年4月5日 星期日

Javadoc註解格式

在Java中只要按照標準的格式去寫註解,就能用Javadoc tool來自動產生出HTML格式的說明文件。在此提供Javadoc的註解格式。

※由於Javadoc產生後為HTML格式的文件,因此文件中需要美工或圖片、連結的功能可以直接以HTML標籤加入。

Javadoc的標準註解格式為:

/**
* 註解第一行
* 註解詳細內容
* .........
*
*@tag
*/

若註解只有單行,可以用這種形式(類別或實體變數常使用這種形式):

/** 註解第一行 */

Javadoc tool能夠辨認的註解為類別、建構子、方法及成員的註解,因此Javadoc的註解區塊必須放置在上述幾種程式組成單位的起點前,上述組成單位的內部實作程式碼的註解將會被自動忽略,因此在類別、方法的註解中必須將內部實作的大略細節描述詳細,例如在java.util.arrays.sort(int[] a)的註解中,便詳細註明了所使用的演算法。類別也應該將其主要角色與必須知道的細節內容
請參考Java API Arrays類別中的 sort方法 :http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html

Javadoc tool會將註解(無論是類別、建構子、方法、成員)的第一行視為是整段註解的結論,因此第一行註解必須以簡短的方式說明描述對象的功能以及應該注意的事項。Javadoc tool會判定句點後跟著空白、tab或換行字元的字串為一行,因此若在第一行中使用句點卻不希望被判定為換行的情況下,
可以用HTML的註解標籤<!-- -->或HTML空白字元&nbsp; 讓句號的下一個字元不是空白或tab。
詳情可參考:http://java.sun.com/j2se/javadoc/writingdoccomments/index.html#descriptions

在註解的描述中,可以使用Javadoc tool認得的tag來標示某些屬性,幫助Javadoc tool排版或產生連結。tag以@開頭,緊接著是tag name,最後是參數。。

類別或介面註解能夠使用的tag如下:
  • @see
    稱為see also,有3種格式,如下:
    1. @see "字串"
      例如輸入:
      @see "The Java Programming Language"
      會產生:
      See Also:
      "The Java Programming Language"

    2. @see <a href="網址">顯示文字</a> (HTML連結)
      例如輸入:
      @see <a href="http://www.blogger.com/spec.html#section">Java Spec</a>
      會產生:
      See Also:
      Java Spec

    3. @see package.class#member label (最常用的一種)
      例如在註解裡輸入:
      /**
      * @see String#equals(Object) equals
      */
      會產生以下格式的HTML:
      <dl>
      <dt><b>See Also:</b>
      <dd><a href="../../java/lang/String#equals(java.lang.Object)"><code>equals</code></a>
      </dl>

      亦即,會產生連結到其他類別成員超連結。
      ※若是要連結到同一類別的成員,#號前的類別名稱可省略。
      ※若是要連結到同一包裝內的成員,類別前的包裝名稱可省略,如上述例子。
      ※注意若要連結到建構子或方法,參數型態必須寫好,參數名稱可省略。

  • @author
    作者署名,用法是直接在標籤後接名字,例如:
    - @author 嘴砲安

  • @since
    該類別加入時,軟體的版本。後面加上字串或數字就行了,例如:
    - @since 1.1
建構子或方法註解能夠使用的tag如下:
  • @see
    詳見如上。

  • @param
    方法或泛型的參數介紹。格式為 @param 參數名 參數說明。例如:
    /**
    * @param string 要被轉換的字串
    * @param type 要轉換成的型態
    * @param <T> 元素的型態
    * @param <V> 元素的值
    */
    <T, V extends T> V convert(String string, Class<T> type) {
    }

    ※類別的泛型參數也能夠使用此tag。

  • @return
    方法的回傳值。後面接回傳值的敘述即可,例如:
    - @return 以參數id為根據取出的商品,當找不到商品時則為null。
    ※在特殊情況下回傳的值(像null),必須註明。
    ※一個方法只有一個@return。

  • @throws
    方法所丟出的例外。後面接丟出的例外類型,以及會丟出例外的情況,例如:
    -@throws IOException 如果網路發生異常,或者無法取得需要的檔案。
    ※受檢例外一定要寫說明,否則就算沒有寫出該例外,Javadoc tool還是會產生無說明的@throws項目。若方法有覆寫(overriding)父類別的方法,才可以不寫受檢例外的說明,Javadoc會直接從父類別的@throws拷貝說明。

類別變數或實體變數註解能夠使用的tag如下:
  • @see
    詳見如上。

  • {@value}
    可以連結到類別裡final static變數的值。這是使用這註解內文的tag,格式為:
    - {@value package.class#field}
    例如:
    /**
    * The value of this constant is {@value}
    */

    public static final String SCRIPT_START = "<script>"

    /**
    * Evaluates the script starting with {@value #SCRIPT_START}.
    */
    public String evalScript(String script) {
    }

    ※{@value #SCRIPT_START}會被替換為 <script>


一些可以用在內文裡的tag:
  • {@link}
    產生到所在類別或其他類別之欄位、類別或方法的連結。格式為:
    - {@link package.class#member 顯示文字}
    例如如果要連結到同一類別的getComponentAt(int, int)方法,可以輸入:
    {@link #getComponentAt(int, int) getComponentAt}
    就會產生顯示文字是getComponentAt的連結,連結到同一類別裡的getComponentAt(int, int)的說明。

  • {@linkplain}
    跟@link的用途一樣,只是字型是用plain text。

  • {@inheritDoc}
    直接從最相近的父類別複製說明,複製的說明會顯示在tag放置的位置上。注意這個tag只能用在方法的註解內文、方法的@return、@param、@throws說明裡。
    ※注意如果覆寫父類別的方法卻沒有寫註解,Javadoc tool會直接複製父類別的說明。

  • {@literal}
    自動處理特殊文字。格式為 {@literal 文字} 。可以把像角括號或其他會被HTML視為特殊字元的文字處理成一般文字。

  • {@code}
    把文字以plain text的字體顯示出。格式為 {@code 文字}
    通常用來顯示數學公式或程式碼。


參考文章:
http://www.javatwofriday.com.tw/member/javamag_article/J040901502.pdf
http://www.javatwofriday.com.tw/member/javamag_article/J041001601.pdf
How to Write Doc Comments for the Javadoc Tool
Javadoc Reference Guide

2009年4月3日 星期五

Server端介面部分需要寫的Unit Test Case

  1. Server - 呼叫startService()後,以Socket丟入一個請求,收到回應後執行stopService(),若2秒內沒回應則測試失敗。stopService()後若丟入請求沒有發生錯誤,也視同測試失敗。

  2. Handler - 傳入一個InputStream(可以用ByteArrayInputStream,把測試字串序列化),與OutputStream(可以用ByteArrayOutputStream,把結果反序列化成字串),看OutputStream的結果是否如預期。測試文件請用XML格式,並使用以下階層:
    <Request type="product_query" >
    <account level="0" />
    <product id="00101001"/>
    </Request>

  3. RequestAnalyzer - 類似上述的做法,並對回傳的Request做檢驗,看是否確實取出元素。

  4. Responder - 類似上述做法,Request的值可以自己訂。


  5. ProductDataSource - 先寫open()、close()的狀態測試,測試addProduct後可以得到商品,及removeProduct後無法得到商品。getCategorySet和getCategory也一樣。其他部分先擱著。

  6. ContentProvider - 測試每次由getConnection()得到的Connection不是null,isClosed()也不能是true。對open()、close()做狀態的測試。

  7. AccountDataSource - 同ProductDataSource。
架構圖如下:
http://tw-yen.no-ip.org/images/RSs.png
紅色框框圍住的為界接介面,以黑色框框圍住的則是實作細節。

2009年3月29日 星期日

萬惡的微軟

我們的構想被萬惡的微軟搶先了:
http://www.foniao.net/index.php?option=com_content&task=view&id=217&Itemid=34

萬惡的微軟,連大學生的專題都不放過...Orz

2009年3月27日 星期五

Meeting時間改變

馮大說Meeting的時間改為星期一12點半,大家可以吃完午餐再去。

上一屆專題的評選時間

馮大說四年級專題的評選時間是4/10(五)下午1點~2點半,馮大的專題生是最後一組,排在2點。
由於最後一組可能會提早結束,最好提早10~15分鐘去。那天有空的人請一起去看看。

千萬別忘了。

2009年3月23日 星期一

第三次Meeting紀錄

開會時間:
2009年 3月 23日(一)

討論內容:
  1. 目前的進度報告與RFID的問題。(投影片連結)

討論結果:
  1. 軟體開發Server端與Client端改為每組2人,惠姐與楊媽負責蒐集定位的資料

  2. 負責軟體開發的人員禮拜三第四節討論軟體溝通介面。

  3. 詢問電機系教授RFID的問題,並借借看器材。

  4. 能借到器材就借,不然只好買,預算大約一萬左右。

目前進度:
  1. 完成責任分派。

  2. 大略規劃出軟體開發時程。



下次軟體開發人員討論時間:
2009年3月24日(三) 11點30 三舍交誼廳

下次小組開會時間:
2009年3月30日(一) 12點30 三舍交誼廳

下次Meeting時間:
2009年4月6日(一) 12點整


預計下次Meeting前的進度:

  1. 完成軟體設計與單元測試程式。

  2. 蒐集RFID結合WiFi的定位資料。

2009年3月19日 星期四

接下來的任務

目前為止軟體的大略需求已經定好,所以可以開始談如何開發軟體了。
軟體分為兩個部分-Client和Server端,因此必須分兩組人馬來進行開發,兩組都必須有人設計軟體的架構,先將Use case圖畫出來,並詳細描述,之後再將Class diagram畫出來。Class diagram先從interface開始畫,以interface勾勒出整個軟體的大致架構後,再去進行實作。

3/23~4/6 必須把軟體架構與單元測試程式完成。
4/7~4/21 實作軟體的細節。
4/22 ~ 4/29 測試另一組人寫的軟體。

註解必須遵守JavaDoc的規格,單元測試則使用JUnit來製作。
說明文件這幾天會PO上來。

原則上是用Netbeans的共同開發功能來編寫軟體,CVS伺服器我會在這周末架好。

以上。

2009年3月10日 星期二

第二次Meeting的記錄

開會時間:
  • 2009年3月9日(一)

討論內容:
  • 專題題目的確定以及可行性。

討論結果:
  • 專題分為兩個部分:電子購物車及使用者定位。

  • 電子購物車是以RFID偵測使用者放入購物車中的商品,並且顯示商品細節及總價格至行動裝置上。結帳時只需要以計算好的價格結帳,省去目前必須個別讀取商品條碼的麻煩。若具有會員資格,也會一起傳送,自動由電腦計算優惠等訊息,如此一來便不需要隨身攜帶會員卡。也可以事先輸入預算與購物備忘錄,方便使用者理財。

  • 使用者定位則是以RFID的方式偵測顧客目前的所在地,並能指引顧客至需要的商品附近。由於在約3公尺距離內目測就能夠看見商品,因此精確度不需要很高。詳細情形可以參考這篇論文:http://etdncku.lib.ncku.edu.tw/theses/available/etd-0826108-145013/unrestricted/etd-0826108-145013.pdf

  • 目前先從軟體方面動工,從資料庫的建製下手。硬體如何取得稍後再想辦法。

目前進度:
  • 定好專題題目。
  • 先把重心放在電子購物車的實作上,定位問題則先等資料蒐集齊全再決定使用何種方式實作。
細節:
  • 目前RFID存在許多問題,包括容易受金屬及液體(目前已有公司研發解決方案)干擾、以及頻段尚未統一(時間上的問題)、定位不精確及成本偏高。上述問題有些不是目前科技能夠解決的,但還煩請藍藍路繼續找尋有無感應距離大約是1m且容易與行動裝置聯繫的RFID Reader。目前是有看到用SD和CF卡介面的Reader,但距離都相當短,最多14 cm。若找不到,可以考慮做出袖珍版來模擬就好。

  • RFID的定位不精確且容易受干擾,找尋有無其他可行替代方案。目前聽說有使用Wi-Fi的方式(頂天端推薦),但其可行性目前尚不確定,麻煩嘴砲安及惠姐搜集一下情報,計算sample點的間隔距離與100m*100m範圍內所需設立的sample點數量、精確度及成本。關於訊號干擾問題的資料也麻煩多留意(目前看到的資料是寫易受空氣及其他頻率干擾,且精確度不高)。

  • 麻煩修二尋找目前Wal-Mart使用RFID所遇到的困難,與目前使用的情形。最好能找出Wal-Mart所使用的RFID tag的規格與儲存資訊的格式。

  • 電子購物車目前的硬體架構藍圖麻煩先由大魔王繪製,3/16號中午12點大家一起討論。

  • 商品資料庫的ER-Model藍圖則由Yen負責繪製,一樣在3/16中午討論。

  • RFID為供應鏈帶來的效益可以看http://rfid.me.ntu.edu.tw/teaching/CH9.ppt。

上述指派的工作除了硬體架構藍圖和ER-Model必須在3/16號完成外,其餘在3/16號報告工作進度,並在3/20號前徹底完成,將重點整理成PPT檔,傳給彙整者即可。彙整者在3/16號當日指派。



下次小組開會時間;
2009年3月16日(一) 中午12點整。
討論購物車硬體架構及ER-Model,並將目前蒐集到的資料先整理出來讓大家了解各自的進度。

下次與教授Meeting時間:
2009年3月23日(一) 中午12點整。


預計下次Meeting前的進度:
  1. 整理出RFID在電子購物車及定位上會遇到的問題。
  2. 將資料庫的內容規劃出來。
  3. 完成購物車的硬體架構圖。
  4. 開始繪製軟體藍圖及UI設計。