68 LXF260 March 2020 http://www.linuxformat.com
TUTORIALS Project management
/SCHEDULED/ start date for it on the following day,
and its /DEADLINE/ to accommodate the /EFFORT/ it
requires. In this way, you can build a plan for all the
tasks in your project, assign their schedule, and easily
review them in Column View to see what’s next. You can
add these values with the *org-schedule* and *org-
deadline* commands, respectively, and they’ll appear
between the task headline and the Properties drawer.
Sharing & collaborating
But what if you want to communicate this to others in a
team? What if you need to collaborate with others? For
example, updating teammates or managers on a
project’s progress? Fortunately, as the old Emacs credo
goes, “There’s a package for that!” A great way to share
your project with others is through the use of a Gantt
chart, which will:
Display all the tasks in the project
Illustrate their dependencies, if any
Show when they’re scheduled to start and end
Demonstrate any progress made
And, by coincidence, these are all the things we’ve
spent all this time configuring! There are a couple of
different options to produce Gantt charts from Org-
Mode source, but for this example we’ll use the
TaskJuggler tool. While this was once a GUI application
in the same vein as GanttProject or Calligra Plan, it’s
now a package of terminal programs with an optional
server. But in this case, we’ll simply use the package’s
*org-taskjuggler* commands to do the heavy lifting for
us. This package should be included with most Org-
Mode distributions, and since Org-Mode is included in
Emacs by default in recent versions, chances are you
already have it. Try searching for the exporter by using
M-x to bring up the command buffer, then type in
“taskjuggler.” If options remain, you’re all set on the
Emacs side.
Next, make sure TaskJuggler is installed. On Ubuntu,
this is easy from the terminal:
sudo apt install tj3
As it’s a Ruby program, you can also install the
TaskJuggler gem if that’s your preference:
gem install taskjuggler
Use the magic M-x (Alt-x) keystroke and enter:
*org-taskjuggler-export-process-and-open*
This will do a couple of things in the same directory as
your Org file:
(^1) It will export your Org file to a TJP file, which is the
standard TaskJuggler format.
(^2) It will process your TJP file, scheduling your tasks
according to what resources are available (by default,
it’s just yourself) and how much time you have.
After adding these columns, you can start to fill in
their values directly from Columns View. Using the
arrow keys to move over to the /SCHEDULED/ column
of the first task, press the E key. This is the key that
enables you to edit the contents of the cell. But look – at
the bottom of the window, a calendar will appear.
Because this property is known to hold dates, clicking a
date on the calendar will insert the value in correct Org-
Mode datestamp format. Not too shabby for a plain text
program, eh?
It’s all busy work
While the actual amount of work something will take is
/effort/, how long that work will span on a calendar is
referred to as /duration/. There’s a reason these two
aren’t the same thing. You may estimate that one task
will take you four hours to complete. However, if you
have other responsibilities that only leave you with two
hours a day to dedicate to that task, then the duration
of that task will be two days.
This is where the /SCHEDULED/ and /DEADLINE/
special properties come in. Knowing that a task will
begin on, say, 20 December, and that it will require two
days, you can set its /SCHEDULED/ date for that day
and its /DEADLINE/ as 21 December. Then provided
the next task is dependent on the first, you can set the
Don’t forget, you
can still place
text-based
content after
the headline
and associated
data (e.g.
properties and
LOGBOOK). This
is a great place
to stash detailed
instructions,
links to other
resources, or
anything that
will help your
team get their
tasks done.
ORG-MODE PROPERTIES
Properties are similar to the Tags we introduced in LXF241, in that
they’re metadata about a headline (or task, in our case). However,
they’re different in the following ways: you can only enter a single
value for a particular property in a given headline, and there are
special properties with built-in functionality.
You designate a property by enclosing it in colons. All properties are
placed in the /Properties Drawer/, which comes immediately after
the headline, starts with :PROPERTIES: and finishes with :END:. You
can toggle it open and closed with the Tab key, just like a headline. For
example, the following shows this structure for a custom property
called /URL/:
- This is my headline.
:PROPERTIES:
:URL: http://www.linuxformat.com
:END:
Alternatively, you can specify properties that apply to the entire
document by putting them in the header. Header properties are
placed at the very beginning of the file, and start with #+ rather than
a colon (they still end with one though). For example, if you set up
your /TODO/ statuses in the header, they’d be available for all tasks
and sub-tasks throughout the rest of the file unless you specifically
override them. Check out the Org-Mode documentation on properties
for more details on what they can do (https://orgmode.org/guide/
Properties.html#Properties). The Plan chart from TaskJuggler is a traditional Gantt, giving you a
one-shot view of the entire project.
Once you add
relevant planning
properties to your
Column View, it
becomes a useful
format for review.
68 LXF260March 2020 666March 20TkinMg0k
TUTORIALS Project management
/SCHEDULED/startdateforitonthefollowingday,
andits/DEADLINE/toaccommodatethe/EFFORT/it
requires.Inthisway,youcanbuildaplanforallthe
tasksinyourproject,assigntheirschedule,andeasily
reviewtheminColumnViewtoseewhat’snext.Youcan
addthesevalueswiththeorg-scheduleandorg-
deadlinecommands,respectively,andthey’llappear
betweenthetaskheadlineandthePropertiesdrawer.
Sharing&collaborating
Butwhatifyouwanttocommunicatethistoothersina
team?Whatifyouneedtocollaboratewithothers?For
example,updatingteammatesormanagersona
project’sprogress?Fortunately,astheoldEmacscredo
goes,“There’sapackageforthat!”Agreatwaytoshare
yourprojectwithothersisthroughtheuseofaGantt
chart,whichwill:
Displayallthetasksintheproject
Illustratetheirdependencies,ifany
Showwhenthey’rescheduledtostartandend
Demonstrateanyprogressmade
And,bycoincidence,theseareallthethingswe’ve
spentallthistimeconfiguring!Thereareacoupleof
differentoptionstoproduceGanttchartsfromOrg-
Modesource,butforthisexamplewe’llusethe
TaskJugglertool.WhilethiswasonceaGUIapplication
inthesameveinasGanttProjectorCalligraPlan,it’s
nowapackageofterminalprogramswithanoptional
server.Butinthiscase,we’llsimplyusethepackage’s
org-taskjugglercommandstodotheheavyliftingfor
us.ThispackageshouldbeincludedwithmostOrg-
Modedistributions,andsinceOrg-Modeisincludedin
Emacsbydefaultinrecentversions,chancesareyou
alreadyhaveit.Trysearchingfortheexporterbyusing
M-xtobringupthecommandbuffer,thentypein
“taskjuggler.”Ifoptionsremain,you’reallsetonthe
Emacsside.
Next,makesureTaskJugglerisinstalled.OnUbuntu,
thisiseasyfromtheterminal:
sudoaptinstalltj3
Asit’saRubyprogram,youcanalsoinstallthe
TaskJugglergemifthat’syourpreference:
geminstalltaskjuggler
UsethemagicM-x(Alt-x)keystrokeandenter:
org-taskjuggler-export-process-and-open
Thiswilldoacoupleofthingsinthesamedirectoryas
yourOrgfile:
(^1) ItwillexportyourOrgfiletoaTJPfile,whichisthe
standardTaskJugglerformat.
(^2) ItwillprocessyourTJPfile,schedulingyourtasks
accordingtowhatresourcesareavailable(bydefault,
it’sjustyourself)andhowmuchtimeyouhave.
After adding these columns, you can start to fill in
their values directly from Columns View. Using the
arrow keys to move over to the /SCHEDULED/ column
of the first task, press the E key. This is the key that
enables you to edit the contents of the cell. But look – at
the bottom of the window, a calendar will appear.
Because this property is known to hold dates, clicking a
date on the calendar will insert the value in correct Org-
Mode datestamp format. Not too shabby for a plain text
program, eh?
It’s all busy work
While the actual amount of work something will take is
/effort/, how long that work will span on a calendar is
referred to as /duration/. There’s a reason these two
aren’t the same thing. You may estimate that one task
will take you four hours to complete. However, if you
have other responsibilities that only leave you with two
hours a day to dedicate to that task, then the duration
ofthattaskwillbetwodays.
Thisiswherethe/SCHEDULED/and/DEADLINE/
specialpropertiescomein.Knowingthatataskwill
beginon,say, 20 December,andthatitwillrequiretwo
days,youcansetits/SCHEDULED/dateforthatday
andits/DEADLINE/as 21 December.Thenprovided
thenexttaskisdependentonthefirst,youcansetthe
Don’tforget,you
canstillplace
text-based
contentafter
theheadline
andassociated
data(e.g.
propertiesand
LOGBOOK).This
isa greatplace
tostashdetailed
instructions,
linkstoother
resources,or
anythingthat
willhelpyour
teamgettheir
tasksdone.
ORG-MODEPROPERTIES
PropertiesaresimilartotheTagsweintroducedinLXF241,inthat
they’remetadataaboutaheadline(ortask,inourcase).However,
they’redifferentinthefollowingways:youcanonlyenterasingle
valueforaparticularpropertyinagivenheadline,andthereare
specialpropertieswithbuilt-infunctionality.
Youdesignateapropertybyenclosingitincolons.Allpropertiesare
placedinthe/PropertiesDrawer/,whichcomesimmediatelyafter
theheadline,startswith:PROPERTIES:andfinisheswith:END:.You
cantoggleitopenandclosedwiththeTabkey,justlikeaheadline.For
example,thefollowingshowsthisstructureforacustomproperty
called/URL/: - Thisismyheadline.
:PROPERTIES:
:URL:http://www.linuxformat.com
:END:
Alternatively,youcanspecifypropertiesthatapplytotheentire
documentbyputtingthemintheheader.Headerpropertiesare
placedattheverybeginningofthefile,andstartwith#+ratherthan
acolon(theystillendwithonethough).Forexample,ifyousetup
your/TODO/statusesintheheader,they’dbeavailableforalltasks
andsub-tasksthroughouttherestofthefileunlessyouspecifically
overridethem.CheckouttheOrg-Modedocumentationonproperties
formoredetailsonwhattheycando(https://orgmode.org/guide/
Properties.html#Properties). The Plan chart from TaskJuggler is a traditional Gantt, giving you a
one-shot view of the entire project.
Once you add
relevant planning
properties to your
Column View, it
becomes a useful
format for review.