2008年3月10日星期一

SortableProjectList使用說明

SortableProjectList是一個可以根據特定排序條件列出Task的工具

建構方式:

public SortableProjectList(Project p, ProjectTreeListener ptl,Comparator c)

此建構方式根據Comparator的排序條件順序列出該Project內的所有Task

public SortableProjectList(Project p, ProjectTreeListener ptl,Comparator c, boolean accending)

此建構方式根據Comparator的排序條件列出該Project內的所有Task,accending為true就順序列出,反之倒序列出。

public SortableProjectList(Task t, ProjectTreeListener ptl,Comparator c)

此建構方式根據Comparator的排序條件順序列出該Task內的所有Subtask

public SortableProjectList(Task t, ProjectTreeListener ptl,Comparator c, boolean accending)

此建構方式根據Comparator的排序條件列出該Task內的所有Subtask,accending為true就順序列出,反之倒序列出。

方法說明:

  1. public void listTasks()
    1. ProjectTreeList在建構時不會即時列出所有的Task,用此方法來可以列出所有的Task

假設你有以下的Task

Project A

|

Task A

|- Task E

| |- Task F

| |- Task D

|- Task C

|- Task B

做好ProjectTreeListener: PTLTest

private class PTLTest implements ProjectTreeListener{
public void whenNodeListed(Task task) {
System.out.println(task);
}

public void whenRootListed(Project project) {
System.out.println(project);

}

public void whenRootListed(Task task) {
System.out.println(task);
}
}

TaskNameComparator:根據Task名稱順序排列

然後輸入在void main(String srgs[])輸入以下程式碼:

ptlt=new PTLTest();
ProjectTreeList ptl=new ProjectTreeList(project,ptlt);
ptl.listTasks();

上例將輸出:

Project 1

Task A

Task C

Task B

Task E

Task D

Task F

如改成

ptlt=new PTLTest();
ProjectTreeList ptl=new ProjectTreeList(taskE,ptlt);
ptl.listTasks();

上例將輸出:

Task E

Task D

Task F

ProjectTreeListener使用說明

ProjectTreeListener是用來自訂處理當ProjectTreeList列出每一個Task時對該Task的操作。

方法說明:

  1. public void whenRootListed(Project project)
    1. 當ProjectTreeList列出project時的處理方法
  2. public void whenRootListed(Task task)
    1. 當ProjectTreeList列出頂層task時的處理方法
  3. public void whenNodeListed(Task task)
    1. 當ProjectTreeList列出子task時的處理方法。不論該task的層次有多深都會經此方法列出。

如何配合ProjectTreeList使用:

首先你要做好ProjectTreeListener給ProjectTreeList使用

假設你有以下的Task

Variable Name Task Name Parent Task
taskA Task A  
taskB Task B Task A
taskC Task C Task B

和Project: Name: Project 1

做好ProjectTreeListener: PTLTest

private class PTLTest implements ProjectTreeListener{
    public void whenNodeListed(Task task) {
        System.out.println(task);
    }

    public void whenRootListed(Project project) {
        System.out.println(project);

    }

    public void whenRootListed(Task task) {
        System.out.println(task);
    }
}

然後輸入在void main(String srgs[])輸入以下程式碼:

ptlt=new PTLTest();
ProjectTreeList ptl=new ProjectTreeList(project,ptlt);
ptl.listTasks();

上例將輸出:

Project 1

Task A

Task B

Task C

如改成

ptlt=new PTLTest();
ProjectTreeList ptl=new ProjectTreeList(taskB,ptlt);
ptl.listTasks();

上例將輸出:

Task B

Task C

Project Tree List使用說明

ProjectTreeList是一個用來列出所有Task的工具,配合ProjectTreeListener自訂處理每一個Task的工作。

已知子類別:

SortableProjectList

建構方式:

  1. public ProjectTreeList(Project p,ProjectTreeListener ptl)
    1. 此建構方式列出該Project內的所有Task
  2. public ProjectTreeList(Task t,ProjectTreeListener ptl)
    1. 此建構方式列出該Task內的所有Subtask

方法說明:

  1. public void listTasks()
    1. ProjectTreeList在建構時不會即時列出所有的Task,用此方法來可以列出所有的Task

Project Plan

Generate Project Progress Report:
  1. 所有task的資料
  2. 現有進度
  3. 平均每天進度(以找出速度最快的task)
    1. 進度/已工作天數
  4. 期望進度(多少天後)
  5. 估算進度(多少天後)
  6. 抽出
    1. 甚麼task會如期完成
    2. 甚麼task不可能如期完成
    3. 甚麼task可能會延期
      1. 到期時的估算進度

Gantt Chart:

1. Gantt Chart Class Structure (30%)

2. 在畫紙上畫Gantt Chart (40%)

3. 提供GUI介面去畫 (60%)

4. 連結至Project Management Tools (90%)

5. 儲存Gantt Chart (100%)

Maintain Reminder

1. Maintain Reminder Low-Fi Layout Design (10%)

2. Maintain Reminder Class Structure (50%)

3. Add/Change/Delete Reminder (70%)

4. Save/Load Reminder (90%)

5. Check/Alert (100%)

Find Out Workload(找出員工的workload,以達平均分工的目的)

  1. Assumption:
    1. 所有staff被Assign後不會改變
  2. Find Out Workload Class Structure (30%)
  3. Calculate Workload for specific staffs. (50%)
    1. No of task staff currently in charge in one project
      1. 佔該project的百分比
      2. 佔該staff所有task的百分比
    2. Estimated Contribution
      1. For one project
        1. 這個員工將會對整個project付出多少Contribution
        2. 佔該project的百分比
      2. For one staff
        1. 佔該staff所有task的百分比
    3. Current Contribution for one project
      1. For one project
        1. 這個員工現在對整個project付出多少Contribution(估計值)
        2. 佔該project的百分比
        3. 如果有staff中途加入或退出便會影響計算的準確性
      2. For one staff
        1. 佔該staff所有task的百分比
    4. Contribution計算方法:
      1. 每一個task的contribution=time/Staff
      2. Total Contribution=所有tasks的Contribution.
  4. 提供GUI介面 (70%)
  5. Provide suggestions (90%)
  6. Apply suggestions (100%)

2008年3月9日星期日

Subversion Server開放時間

因為Server使用量過低,及節約能源,本Server會縮短開放時間,時間為:

星期二:12:00 - 20:00 (因為我要用來做AISP Lab)

星期五: 10:30 - 0:00 (或會提早關閉,關閉前會以MSN通知大家)

星期六: 10:30 - 20:00 (關閉前會以MSN通知大家)

如果你們需要在以上時間以外使用,可以隨時叫我開機或延長開放時間。

用Server來更新檔案可以使程式更一致,大量減少合併時所產生的問題,確保把程式付運時可以保持預期的水準。你們要多加利用呀!

2008年3月5日星期三

David的進度記錄

  1. (完成/<進行中>/暫停)Reminder:製作Reminder Dialog
  2. (<完成>/進行中/暫停)Reminder: Remind sub task
  3. (<完成>/進行中/暫停)Generate Gantt Chart:在圖表上加入Project Detail
  4. (<完成>/進行中/暫停)製作HTMLTaskTable
  5. (<完成>/進行中/暫停)製作HTMLTable
  6. (<完成>/進行中/暫停)ProjectProgressReport
    1. (<完成>/進行中/暫停)Produce Task Progress
    2. (<完成>/進行中/暫停)Produce Project Plan
    3. (<完成>/進行中/暫停)製作HTMLReportOptions介面
    4. (<完成>/進行中/暫停)GUI Design
  7. (<完成>/進行中/暫停)Find out workload:Workload排序
  8. (<完成>/進行中/暫停)選取特定Project看Workload
  9. (完成/進行中/<暫停>)Import Project file to XML
  10. (<完成>/進行中/暫停)Export Project file to XML
  11. (<完成>/進行中/暫停)製作TableStructureMenu
  12. (<完成>/進行中/暫停)Find out workload:取Staff的方法由Project file選取,改為由Staff List選取
  13. (<完成>/進行中/暫停)Find out workload:加Table用以看Staff Task取代按每一個Staff來看。
  14. (完成/進行中/<暫停>)Find out workload UI design
    1. (<完成>/進行中/暫停)修正Find out workload UI
      1. (完成/進行中/<暫停>)MainGUI:把Find out workload Menu搬離Staff。
  15. (<完成>/進行中/暫停)製作Staff table
  16. (<完成>/進行中/暫停)製作Workload table
  17. (<完成>/進行中/暫停)在task和project加入取staff的功能
    1. (<完成>/進行中/暫停)Fix bug: Staff會被重覆assign到task
  18. (<完成>/進行中/暫停)MaintainReminderGUI: 給User決定顯示那些Column
  19. (<完成>/進行中/暫停)把ReminderTable修改為TasktableStructure模式
    1. (<完成>/進行中/暫停)把ReminderTable和TaskTable合併為Joint table
  20. (<完成>/進行中/暫停)把TaskTable修改為TasktableStructure模式
  21. (<完成>/進行中/暫停)製作Database Table
  22. (完成/進行中/<暫停>)把Reminder分類
    1. (<完成>/進行中/暫停)製作Reminder filter
      1. (<完成>/進行中/暫停)製作ArrayList filter utility
  23. (完成/進行中/<暫停>)新增更多Remind method和Remind method panel
    1. (<完成>/進行中/暫停)新增End date remind method panel
      1. (<完成>/進行中/暫停)新增End date remind method
    2. (完成/進行中/<暫停>)新增Start Date remind method panel
      1. (完成/進行中/<暫停>)新增Start Date remind method
    3. (完成/進行中/<暫停>)新增Task can start remind method panel
      1. (完成/進行中/<暫停>)新增Task can start remind method
  24. (<完成>/進行中/暫停)把Reminders和Project tools獨立
    1. (<完成>/進行中/暫停)修正Project和Reminder不同步的bug(Reminder中的Project和Project file內的project會有出入)
      1. (<完成>/進行中/暫停)Reminder內的Project以path儲存
        1. (<完成>/進行中/暫停)在Reminder內加Trigger,防止不正確的Project path
      2. (完成/<進行中>/暫停)啟動時檢查Reminder內的Project是否存在,如有,檢查有沒有此Task
        1. (<完成>/進行中/暫停)在Project加入以Task找Task的功能(新增找子Task功能)
        2. (<完成>/進行中/暫停)把Task由reminderMethod搬到reminder中
          1. (<完成>/進行中/暫停)修正Reminder Method沒有新增到Reminder中的bug
        3. (<完成>/進行中/暫停)啟動時更新Remind Task
      3. (<完成>/進行中/暫停)把新Task套入到Reminder中
    2. (<完成>/進行中/暫停)儲存Reminders到其他地方
    3. (<完成>/進行中/暫停)在程式啟動時檢查Reminders
      1. (<完成>/進行中/暫停)在程式啟動時檢查Reminders
  25. (<完成>/進行中/暫停)把Reminder轉為MVC模式
    1. (<完成>/進行中/暫停)把Reminder Edit轉為MVC模式
      1. (<完成>/進行中/暫停)製作Reminder Table
      2. (<完成>/進行中/暫停)把Reminder selection panel脫離Control Class
    2. (<完成>/進行中/暫停)把Reminder Add轉為MVC模式
    3. (<完成>/進行中/暫停)把Reminder Add轉為JDialog
    4. (<完成>/進行中/暫停)修改Date chooser支援JDialog
  26. (完成/進行中/<暫停>)把Reminder method由radio button改為Combo box
    1. (<完成>/進行中/暫停)製作Reminder panel
    2. (<完成>/進行中/暫停)製作Reminder panel creator
  27. (<完成>/進行中/暫停)檢視與改進Reminder的Class Structure
  28. (<完成>/進行中/暫停)移除GanttChart GUI function以配合prototype demo
  29. (<完成>/進行中/暫停)新增Task Sorting Method
    1. (<完成>/進行中/暫停)在GanttChartGenGUI中加入排序的UI
    2. (<完成>/進行中/暫停)使用SortableProjectList出Gantt Chart
    3. (<完成>/進行中/暫停)修正新增子task時會重覆新增的問題。
  30. (<完成>/進行中/暫停)以List取代checkbox+button以便新增其他種類的Bar和騰出空間加入新功能。
    1. (<完成>/進行中/暫停)製作Gantt Chart infomation dialog
    2. (<完成>/進行中/暫停)修改GanttChartGenGUI以配合Gantt Chart infomation dialog
  31. (<完成>/進行中/暫停)製作SortableProjectList
  32. (<完成>/進行中/暫停) GanttChartControl: 與真正的Project連結
    1. (<完成>/進行中/暫停) ProjectLevel: 尋找Task的最深層次和取得task的層次。
    2. (<完成>/進行中/暫停) 修正GanttChartTreeList結構->改為在GanttChartControl內建TreeList
  33. (完成/進行中/<暫停>) GanttChartBarStylePanel: 加入bar內資訊顯示功能
  34. (<完成>/進行中/延誤) GanttChartControl: 加顯示bar選擇
    1. (<完成>/進行中/延誤)修正顯示問題

2008年1月29日星期二

Project Work 工作程序及工作守則

工作程序:

clip_image002

1. 站立會議

甲、決定工作結束時間、午飯時間(如適用)。

乙、商議今次工作完成時會得到的Functions(預留約30分鐘)

i. 要考慮自己的能力,定出後要做出來。

ii. 每一個function要在30分鐘內完成(包括寫測試程式的時間),否則把function切割

2. 撰寫測試程式

甲、非GUI的類別必須有測試程式

乙、GUI的類別盡可能有測試程式

丙、測試程式要處理各種可預計的例外

3. 撰寫程式碼

甲、只要通過測試便可,不要多做

4. 重整(可以不做),除非程式碼過份複雜(別人能在20秒內了解每一個function的流程)

5. 整合或放棄(預留至少30分鐘)

甲、所有沒有做完的function推到下次繼續,不能把它們整合。

乙、非GUI的類別必須先寫出整合測試程序

丙、整合並進行測試

i. 有小錯誤立刻修改

ii. 有大錯誤便要放棄今天所做的

工作守則:

1 非GUI的類別必須先寫測試程式才可以實作。

2 Function只會愈做愈全面,不可為趕交付而降低質素(即是充滿Bugs),做不完的留待下次做。(寫程式是多勞多得的,寫得愈快function愈全面,當我們做到差不多時就會知道自己的功力是如何了。)

3 只把做好的function放上Server,沒有做完的放進自己去,留待下次繼續。

4 有可以共享的類別就要分享,免得別的組員要多寫一次。

4.1 在寫新的共享類別時,先問我們有沒有已經寫好的,這樣可以幫你節省不少時間。

4.2 把要分享的類別說明放到blog上,免得每次要用都要問別人。

4.3 所以要共享的類別要說明使用方法,有使用例子就更好。

4.4 有甚麼function想分享出來可根據下面格式來說明:

Public int findNumber(int[] numbers, int value)

找出有沒有這個數字存在

Numbers: 一堆被尋找的數字

Value: 想找出的數字

傳回: 想找出的數字在陣列的位置,-1表示數字不在陣列中。

4.5 請用extend類別來增加自己才會用到的function,如果你增加的function可以給其他人使用,請把新版類別放上Server,然後補上使用方法。

4.6 如果想修改分享出來的類別,請extend該類別以override來修改,不要直接修改原有的程式碼,除非你的修改不會改變原有function的運作(例如程式碼改良)。