Emacs
自带的Org-mode
可以说是包罗万象,包括了日程管理、GTD、大纲、PPT生成、web页面生成以及文学编程等等强大的功能。如果搭配上taskjuggler
的话,它还能胜任项目的管理的工作,而且必要的调度、规划、资源配置等能力都具备。
配置
先安装taskjuggler
:
1
| $ gem install taskjuggler
|
然后我们需要让Org-mode
支持.tjp
文件格式的导出,这里要安装org-plus-contrib
插件。在你的.emacs
或者其他配置文件中写入下面的内容:
1 2
| (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t) (require 'org-plus-contrib)
|
然后开启Emacs
安装上org-plus-contrib
1 2 3
| M-x package-refresh-contents ⤶ M-x package-install ⤶ org-plus-contrib ⤶
|
其实对我们重要的只是这个插件中的ox-taskjuggler.el
文件,我们可以根据我们的需要修改这个.el
文件的编译方式并重新编译M-x byte-compile-file
,比如开启priority
功能:
1 2 3 4 5 6 7
| ;; 位于~/.emacs.d/elpa/org-plus-contrib-YYMMDD/ox-taskjuggler.el ;; 在类似下面代码的地方,加入priority (setq org-taskjuggler-valid-task-attributes '(account start note duration endbuffer endcredit end flags journalentry length limits maxend maxstart minend minstart period reference responsible scheduling startbuffer startcredit statusnote chargeset charge priority)
|
更通用的.emacs
配置需要修改报告的格式、法定节假日等内容。如果需要支持中文还要额外配置一下,总体如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| (setq org-taskjuggler-default-reports '("textreport report \"Plan\" { formats html header '== %title ==' center -8<- [#Plan Plan] | [#Resource_Allocation Resource Allocation] ---- === Plan === <[report id=\"plan\"]> ---- === Resource Allocation === <[report id=\"resourceGraph\"]> ->8- } # A traditional Gantt chart with a project overview. taskreport plan \"\" { headline \"Project Plan\" columns bsi, name {width 350}, start, end, effort, chart {scale week width 800} loadunit shortauto hideresource 1 } # A graph showing resource allocation. It identifies whether each # resource is under- or over-allocated for. resourcereport resourceGraph \"\" { headline \"Resource Allocation Graph\" columns no, name, effort, annualleave, complete, weekly {width 700} loadunit shortauto hidetask ~(isleaf() & isleaf_()) sorttasks plan.start.up }") )
(setq org-taskjuggler-default-global-properties " shift s40 \"Part time shift\" { workinghours wed, thu, fri off } leaves holiday \"National Day\" 2021-10-01 +5d, holiday \"Dragon Boat Festival\" 2021-06-12 +3d, holiday \"Mid-Autumn Festival\" 2021-09-19 +2d ")
(setenv "LC_ALL" "zh_CN.UTF-8") (setenv "LANG" "zh_CN.UTF-8") (setenv "LANGUAGE" "zh_CN.UTF-8") (setenv "LC_COLLATE" "zh_CN.UTF-8") (setenv "LC_CTYPE" "zh_CN.UTF-8") (setenv "LC_MESSAGES" "zh_CN.UTF-8") (setenv "LC_MONETARY" "zh_CN.UTF-8") (setenv "LC_NUMERIC" "zh_CN.UTF-8") (setenv "LC_TIME" "zh_CN.UTF-8")
|
项目管理模板
一个项目重点包含task
与resource
两部分,任务部分详细描述一个任务的工作量与前置条件,资源部分则描述资源的类型、效率已经假期等内容。更详细的关键字需要查阅taskjuggler
相关手册,包括:
- Effort,表示需要的工作时,而不是日历时
- BLOCKER,前置工作
- efficiency,表示资源的效率,默认1.0。设置举例:如果一个人顶三个,则设置为3.0即可
- priority,任务优先级,0~1000之间的整数,如果资源数小于当时需要被配置的任务数时,则根据优先级自己安排
- limits,最大工作时间
- leaves,请假
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| #+PROPERTY: Effort_ALL 2d 5d 10d 20d 30d 35d 50d #+PROPERTY: allocate_ALL dev doc test #+COLUMNS: %30ITEM(Task) %Effort %allocate %BLOCKER %ORDERED
* 开发一款操作系统 :taskjuggler_project: :PROPERTIES: :start: 2021-5-20 :END:
** Research Review: 文献与源码理解、调研 :PROPERTIES: :Effort: 3d :task_id: review :priority: 1000 :allocate: doc :END:
** Project Proposal: 方案、架构、风险 :PROPERTIES: :Effort: 1d :task_id: proposal :priority: 800 :BLOCKER: review :allocate: doc :END:
** Software Development :PROPERTIES: :ORDERED: t :BLOCKER: previous-sibling :priority: 1000 :allocate: dev :END:
*** OS Kernel POC :PROPERTIES: :Effort: 11d :task_id: osk_poc :END:
*** OS Kernel Stable :PROPERTIES: :Effort: 21d :task_id: osk_stable :END:
*** GUI与基本功能开发 :PROPERTIES: :Effort: 20d :task_id: osk_basic :END:
*** 自带小应用开发 :PROPERTIES: :Effort: 11d :task_id: os_app :END:
** Software Evaluation :PROPERTIES: :ORDERED: t :allocate: test :END: *** Testing :PROPERTIES: :Effort: 25d :BLOCKER: proposal :task_id: test :END:
*** Evaluation :PROPERTIES: :Effort: 25d :task_id: eval :END:
** Milestones *** 给个调研报告;OS Kernel POC 方案 :PROPERTIES: :task_id: start :BLOCKER: proposal :END:
*** 跑通OS Kernel,确定测试方案 :PROPERTIES: :BLOCKER: osk_poc :END:
*** OS支持基本调度、内存管理等核心功能 :PROPERTIES: :BLOCKER: osk_stable :END:
*** 支持基本可用的小程序 :PROPERTIES: :BLOCKER: osk_basic :END:
*** 完成开发 :PROPERTIES: :BLOCKER: os_app :END:
* Resources :taskjuggler_resource: ** Developers :PROPERTIES: :resource_id: dev :END: *** Zhen Yi :PROPERTIES: :resource_id: zhenyi :efficiency: 0.5 :END:
** Others *** ZY for Doc :PROPERTIES: :resource_id: doc :limits: { dailymax 2.0h } :END: *** ZT for Test :PROPERTIES: :resource_id: test :efficiency: 0.5 :END:
|
效果
有三种方式创建.tjp
文件,创建后可以用命令tj3
生成网页。在版本3以后已经没有Native的GUI了,我们只有web模式,可更容易适配多个平台:
1 2 3
| M-x org-taskjuggler-export ;; 创建.tjp文件 M-x org-taskjuggler-export-and-process ;; 创建.tjp文件,调用tj3命令生成页面 M-x org-taskjuggler-export-process-and-open ;; 创建.tjp文件,调用tj3命令生成页面,并打开
|