Planning with Org-Mode and Taskjuggler
Table of Contents
End result: https://wiki.malloc.dog/Plan.html
In the past few weeks I've been trying to game out how to proceed with graduate school alongside work, as well as any additional skills I want to acquire along the way, such as an EMT certification and language skills. All of these have different schedules and requirements, which pushed me towards finding a tool that could visualize all of this for me, preferably in a Gantt chart.
My requirements were:
- Able to track deadlines, such as scholarship/fellowship dates, class dates
- Able to track effort put in by date count
- Able to have one task dependent on another
- Should be portable and open source.
Previous tools I've used:
- mermaidjs - Gantt charts are okay, but take a little too much maintenance for my taste
- PlantUML Gantt Charts - Similar to mermaid, but comes with the added problems of having to lug a
jar
around. - Omnioutliner/Jira - not open source and too "corporate" for my tastes.
Weirdly, I found out that org-mode natively supports gantt chart generation via Taskjuggler (tj3). Even better than that, tj3 can dump out portable html files.
1. Installation Notes
tj3 is relatively easy to install, use the ruby gem management to download it, and set the path within emacs. This looks like:
gem install --local taskjuggler
which will install it into where the ruby gems page is setup.
Tutorials for emacs are pretty easy to find as well, with the two I used being:
- https://orgmode.org/worg/org-tutorials/org-taskjuggler.html
- https://orgmode.org/worg/exporters/taskjuggler/ox-taskjuggler.html
There's a emacs mode for it as well, which supports basic syntax highlighting and not much else: http://www.skamphausen.de/cgi-bin/ska/taskjuggler-mode.
Strangely, org-mode supports tj3 out of the box: https://github.com/emacsmirror/org/blob/master/contrib/lisp/ox-taskjuggler.el.
After setting it up (which basically amounts to adding (require 'ox-taskjuggler)
), the only other configuration change needed is the org-taskjuggler-process-command
option and point that towards the tj3 path.
2. Quirks
For the most part, the tutorials cover taskjuggler pretty well. I was able to get an org tree into https://wiki.malloc.dog/Plan.html with only around 30 min of work. However, I found two main quirks:
- The
org-deadline
property is used for the deadline in tj3, but theorg-scheduled
property is not used to determine task start. Funnily enough, it uses the:start:
property for that. - Default project length is 280 days, which must be manually set at the top with the
SCHEDULED
andDEADLINE
properties.
These were a little unintuitive, but looking at the ox source (https://github.com/emacsmirror/org/blob/master/contrib/lisp/ox-taskjuggler.el#L206) gives pretty good insight.
Overall, I'm pretty happy with this setup, it's pretty painless and requires minimal code. Exporting to a HTML file makes it even more portable, and I like the cross-platform appeal of this, as opposed to a strict webapp or a OS X app.
Source org file I'm using:
* Resources :taskjuggler_resource: ** Classes *** Class 1 :PROPERTIES: :resource_id: class1 :END: *** Class 2 (Audit/No Credit) :PROPERTIES: :resource_id: class2 :END: *** Out of Band Learning :PROPERTIES: :resource_id: other :END: *** Thesis & Publications :PROPERTIES: :resource_id: thesis :END: *** Fellowships & Applications :PROPERTIES: :resource_id: fellowships :END: * Grad School :taskjuggler_project: SCHEDULED: <2020-07-01 Wed> DEADLINE: <2023-05-31 Wed> :PROPERTIES: :ALLOCATE_ALL: class1 class2 other thesis fellowships :END: ** EMT Training *** Wilderness First Responder Training DEADLINE: <2020-08-31 Mon> :PROPERTIES: :START: 2020-08-20 :EFFORT: 10d :ALLOCATE: other :END: *** Wilderness EMT :PROPERTIES: :START: 2021-01-04 :EFFORT: 20d :ALLOCATE: other :BLOCKER: previous-sibling :ORDERED: t :END: ** Scholarships *** Summer FLAS Preparation 2021 :PROPERTIES: :START: 2020-10-15 :EFFORT: 75d :ALLOCATE: fellowships :task_id: summer_2021_flas :END: *** Summer FLAS Preparation 2022 :PROPERTIES: :START: 2021-10-15 :EFFORT: 75d :task_id: summer_2022_flas :ALLOCATE: fellowships :END: *** Apply to ICWA :PROPERTIES: :EFFORT: 30d :ALLOCATE: fellowships :START: 2022-09-01 :END: *** Apply to Fulbright :PROPERTIES: :START: 2022-09-01 :EFFORT: 30d :ALLOCATE: fellowships :END: ** Paper *** Finish Up Nationalism Paper :PROPERTIES: :START: 2020-09-01 :EFFORT: 75d :ALLOCATE: thesis :END: *** Paper Publishing :PROPERTIES: :ALLOCATE: thesis :START: 2021-01-01 :EFFORT: 75d :BLOCKER: previous-sibling :ORDERED: t :END: ** Thesis *** Thesis Construction :PROPERTIES: :START: 2022-01-25 :EFFORT: 75d :ALLOCATE: thesis :END: *** Thesis Research :PROPERTIES: :ALLOCATE: thesis :START: 2022-05-30 :EFFORT: 150d :END: *** Thesis Independent study :PROPERTIES: :START: 2023-01-25 :EFFORT: 75d :ALLOCATE: thesis :END: ** Fall 2020 - 16 Credits *** Problems and Methods :PROPERTIES: :start: 2020-09-01 :EFFORT: 75d :ALLOCATE: class1 :END: *** Audit Elective - Mobility in the Middle East? :PROPERTIES: :start: 2020-09-01 :EFFORT: 75d :ALLOCATE: class2 :END: ** Spring 2021 - 20 Credits *** History of the Middle East :PROPERTIES: :START: 2021-01-25 :EFFORT: 75d :ALLOCATE: class1 :END: *** Audit Elective :PROPERTIES: :START: 2021-01-25 :EFFORT: 75d :ALLOCATE: class2 :END: ** Summer 2021 *** Summer Language, Iraqi Arabic? :PROPERTIES: :START: 2021-05-30 :EFFORT: 35d :ALLOCATE: class2 :BLOCKER: summer_2021_flas :task_id: summer_2021_lang :END: ** Fall 2021 - 24 Credits *** Elective - DDR related :PROPERTIES: :START: 2021-09-01 :EFFORT: 75d :ALLOCATE: class1 :END: ** Spring 2022 - 28 Credits *** Elective - DDR related :PROPERTIES: :START: 2022-01-25 :EFFORT: 75d :ALLOCATE: class1 :END: ** Summer 2022 *** Summer Language, Farsi/French/Spanish? :PROPERTIES: :START: 2022-05-30 :EFFORT: 35d :ALLOCATE: class2 :BLOCKER: summer_2022_flas :END: *** NOHA+ preparations :PROPERTIES: :START: 2022-05-30 :EFFORT: 30d :ALLOCATE: class2 :END: ** Fall 2022 - 32 Credits *** Elective - DDR related :PROPERTIES: :START: 2022-09-01 :EFFORT: 75d :ALLOCATE: class1 :END: ** Spring 2023 - Graduation :PROPERTIES: :START: 2023-05-31 :END: