WEBVTT
00:02.879 --> 00:05.424
Hello everyone! My name is Philip Beadling.
00:05.424 --> 00:06.944
Just to give you a bit of background,
00:06.944 --> 00:08.400
I'm the enterprise architect
00:08.400 --> 00:10.384
in a company called Quantile Technologies.
00:10.384 --> 00:12.799
I've been using Emacs
00:12.799 --> 00:14.560
certainly for the last four or five years
00:14.560 --> 00:16.800
as part of my day-to-day workflow,
00:16.800 --> 00:18.080
but I've used it on and off
00:18.080 --> 00:19.000
for the last 20 years
00:19.000 --> 00:21.320
depending on the jobs
00:21.320 --> 00:22.423
or the task at hand.
00:22.423 --> 00:24.800
Now, today I'm here in a personal capacity
00:24.800 --> 00:27.360
to talk about a use I had
00:27.360 --> 00:28.440
for Emacs last year
00:28.440 --> 00:31.000
where I had to record
00:31.000 --> 00:32.800
my continuous professional development,
00:32.800 --> 00:35.320
and I was required to be audited
00:35.320 --> 00:37.280
by my professional body on it.
00:37.280 --> 00:40.240
My CPD record is a bit of a mess,
00:40.240 --> 00:42.640
or certainly was. It was over
00:42.640 --> 00:44.640
various different services and systems
00:44.640 --> 00:46.160
that have been provided to me
00:46.160 --> 00:47.920
by previous employers.
00:47.920 --> 00:51.824
And, I had bits of it in Excel spreadsheets,
00:51.824 --> 00:52.640
and I was looking for like
00:52.640 --> 00:54.200
a one single golden source
00:54.200 --> 00:55.320
where I could store it all
00:55.320 --> 00:56.719
and use in the future.
00:56.719 --> 00:59.024
So, I had a look online.
00:59.024 --> 00:59.824
I didn't find anything I'd like,
00:59.824 --> 01:01.885
so I decided I would use Emacs,
01:01.885 --> 01:03.840
and I quickly came to the conclusion
01:03.840 --> 01:05.480
that using Org mode
01:05.480 --> 01:07.040
was a nice fit for this,
01:07.040 --> 01:08.160
you know, both the TODO lists
01:08.160 --> 01:09.080
and the properties
01:09.080 --> 01:10.920
seem to fit nicely
01:10.920 --> 01:12.890
with building a very basic database,
01:12.890 --> 01:14.159
which is what in effect this is,
01:14.159 --> 01:16.159
what this is.
01:16.159 --> 01:18.000
Without further ado,
01:18.000 --> 01:22.640
I will start by just downloading.
01:22.640 --> 01:24.640
This is available on my public Git,
01:24.640 --> 01:26.160
handle is falloutfill,
01:26.160 --> 01:28.146
and it's under a project called Misc.
01:28.146 --> 01:33.200
It's just a single file called cpd.org,
01:33.200 --> 01:35.080
I can stick that in the chat
01:35.080 --> 01:36.280
when we actually do this live,
01:36.280 --> 01:38.532
so that people will have a link to it.
01:38.532 --> 01:41.119
So, I'll start this up.
01:41.119 --> 01:44.560
Okay. To start with, I am just going to
01:44.560 --> 01:46.826
close down various Lisp stuff,
01:46.826 --> 01:48.566
and just give you a demo of
01:48.566 --> 01:50.560
how it actually works.
01:50.560 --> 01:55.040
Let's go up here.
01:55.040 --> 01:57.205
Okay, so, basically to make this work,
01:57.205 --> 01:58.640
the way I subdivide it
01:58.640 --> 01:59.200
is that I would have
01:59.200 --> 02:00.200
professional goals,
02:00.200 --> 02:01.040
and professional goals
02:01.040 --> 02:02.703
would be made up of activities,
02:02.703 --> 02:03.741
and each of those activities
02:03.741 --> 02:05.917
would contribute to the goal.
02:05.917 --> 02:07.713
So, in order to represent this,
02:07.713 --> 02:10.000
this is just a nested TODO list
02:10.000 --> 02:12.800
in Emacs Org mode.
02:12.800 --> 02:16.068
I sort of change things like the naming,
02:16.068 --> 02:18.247
Pending, In-Progress and Complete
02:18.247 --> 02:19.440
rather than TODO, DONE because
02:19.440 --> 02:21.360
that's more like what my professional
02:21.360 --> 02:23.244
body likes to categorize things,
02:23.244 --> 02:25.315
but essentially it's the same thing.
02:25.315 --> 02:28.212
So, I've got an Org capture template
02:28.212 --> 02:29.499
or two Org capture templates
02:29.499 --> 02:31.843
in order to grab this information,
02:31.843 --> 02:33.645
and then stick it in the TODO list,
02:33.645 --> 02:36.540
and also tabulate it using column view.
02:36.540 --> 02:39.304
I'll start off just by showing you
02:39.304 --> 02:40.090
an example here.
02:40.090 --> 02:40.879
So, what I'm going to do is
02:40.879 --> 02:41.965
create a new goal,
02:41.965 --> 02:42.849
and then under it,
02:42.849 --> 02:44.959
I will create a couple of activities
02:44.959 --> 02:46.511
relevant to that goal.
02:46.511 --> 02:49.360
For the goal I'm going to have, let's say,
02:49.360 --> 02:50.342
something relevant,
02:50.342 --> 02:54.000
so, 'Improve Public Speaking',
02:54.000 --> 02:55.680
and then I'm going to say, the type
02:55.680 --> 02:58.000
of that goal is, well, it's a 'Presentation'
02:58.000 --> 03:01.200
I suppose. The outcome of that goal is,
03:01.200 --> 03:02.560
well, I don't want to go into too much
03:02.560 --> 03:06.069
detail here, but it would be, you know,
03:06.069 --> 03:09.140
'Get feedback from colleagues', and so forth.
03:09.140 --> 03:11.200
I won't fully and completely [inaudible]
03:11.200 --> 03:12.538
about what the goal was.
03:12.538 --> 03:14.067
Now, the retrospective value,
03:14.067 --> 03:15.318
my understanding is that
03:15.318 --> 03:17.028
you fill that in afterwards,
03:17.028 --> 03:18.800
so you want to talk after completing the
03:18.800 --> 03:21.213
action, so this is not relevant for the day.
03:21.213 --> 03:23.120
I'm just going to leave it blank,
03:23.120 --> 03:24.541
although I'm sure you can imagine
03:24.541 --> 03:26.428
I could say: having completed this action
03:26.428 --> 03:28.959
I felt that, blah blah blah, and so forth.
03:28.959 --> 03:31.360
Okay, so I will add that, and then you
03:31.360 --> 03:33.760
will see that I now have a new goal,
03:33.760 --> 03:36.048
both in my column view and in my TODO list,
03:36.048 --> 03:38.159
and just to make it a little bit
03:38.159 --> 03:39.920
realistic, I'm going to then add two
03:39.920 --> 03:41.332
activities to that.
03:41.332 --> 03:43.433
When I come in to add an activity,
03:43.433 --> 03:44.560
I have to select a goal.
03:44.560 --> 03:49.120
I'm going to select 'Improve Public Speaking'.
03:49.120 --> 03:52.963
Yeah, so, the activity I'm going to say is,
03:52.963 --> 03:57.427
well, let's say, 'Speak at EmacsConf 2021',
03:57.427 --> 04:01.200
that we can use a type of 'Presentation',
04:01.200 --> 04:04.352
outcome of that is, stating the obvious,
04:04.352 --> 04:08.080
'Present on an Emacs idea'.
04:08.080 --> 04:09.680
Right, something along the lines of that.
04:09.680 --> 04:11.519
And, then retrospective, again I'm not
04:11.519 --> 04:14.135
going to fill that in at the moment.
04:14.135 --> 04:19.060
Then, last but not least,
04:19.060 --> 04:20.799
I will come up with a slightly different
04:20.799 --> 04:23.215
activity. So, again selecting
04:23.215 --> 04:24.889
'Improve Public Speaking',
04:24.889 --> 04:27.440
the activity would be
04:27.440 --> 04:31.257
'Watch lecture series on public speaking',
04:31.257 --> 04:33.426
you know, blah blah blah, so forth.
04:33.426 --> 04:34.720
Type value would be
04:34.720 --> 04:37.600
Lecture, for this outcome would maybe be
04:37.600 --> 04:43.252
'Use new knowledge in EmacsConf presentation'.
04:43.252 --> 04:45.350
Right, might be a good one there.
04:45.350 --> 04:46.720
Again, retrospective value,
04:46.720 --> 04:48.518
I'm just going to leave that blank,
04:48.518 --> 04:51.440
and I'm going to save that.
04:51.440 --> 04:52.960
Now, we're in a position where we've got
04:52.960 --> 04:54.960
a goal and two activities, which are
04:54.960 --> 04:57.520
represented here, you can see here that I
04:57.520 --> 05:00.160
can move an activity, cycle it forward to
05:00.160 --> 05:02.322
In-Progress. When I do that,
05:02.322 --> 05:05.104
I get a STARTED timestamp here.
05:05.104 --> 05:06.737
If I then cycle it again,
05:06.737 --> 05:09.869
I get the more familiar CLOSED timestamp here.
05:09.869 --> 05:11.635
The STARTED timestamp is a bit of
05:11.635 --> 05:13.918
custom code, I'll show you that in a moment.
05:13.918 --> 05:17.120
And then likewise, let's say that…,
05:17.120 --> 05:20.166
we'll move this one from PENDING to STARTED.
05:20.166 --> 05:22.960
Okay. Now, if I save the document,
05:22.960 --> 05:24.560
that will trigger the updating
05:24.560 --> 05:27.520
of the column view, you can see now
05:27.520 --> 05:29.360
that we have the various started and
05:29.360 --> 05:31.600
completed statuses, this is up to date.
05:31.600 --> 05:32.937
So, that's pretty much.
05:32.937 --> 05:34.211
You can imagine that we could add
05:34.211 --> 05:35.469
lots of goals and lots of activities,
05:35.469 --> 05:37.474
and this would grow into, you know,
05:37.474 --> 05:41.704
several sheets worth of a work,
05:41.704 --> 05:43.748
and then last but not least,
05:43.748 --> 00:05:45.440
is obviously the most important thing.
00:05:45.440 --> 00:05:46.720
How do you submit it?
05:46.720 --> 05:48.479
We could just use the standard
05:48.479 --> 05:50.856
export facility in Org mode for doing that.
05:50.856 --> 05:55.039
That's just Control c Control e l o (C-c C-e l o).
05:55.039 --> 00:06:03.440
And there you can see,
00:06:03.440 --> 00:06:06.586
there you've got the goals and activities.
06:06.586 --> 06:08.319
I spent a bit of time, I won't go too much
06:08.319 --> 06:10.000
in the LaTeX formatting, but coming up
06:10.000 --> 06:12.319
with something that I felt and got as
06:12.319 --> 06:14.720
much information compactly on a page
06:14.720 --> 06:17.840
without making it difficult to read,
06:17.840 --> 00:06:19.039
should we say, and it's always
00:06:19.039 --> 00:06:20.080
a find-the-balance thing.
00:06:20.080 --> 00:06:22.560
I'm not saying I'm an expert on it,
00:06:22.560 --> 00:06:24.400
but I thought what I came up with here
00:06:24.400 --> 00:06:25.905
was reasonably clear
06:25.905 --> 06:28.960
but allowed you to write enough information.
06:28.960 --> 06:31.039
The goals and activities were reasonably
06:31.039 --> 06:32.419
well explained.
06:32.419 --> 06:35.039
Okay, we can just kill that.
06:35.039 --> 06:37.402
So, how does all of that work?
06:37.402 --> 06:40.180
Well, underneath is config tab here,
06:40.180 --> 06:41.210
we have a bunch of Lisp
06:41.210 --> 06:43.276
that I'm going to sort of fly through here.
06:43.276 --> 06:45.898
You can ask me any questions afterwards.
06:45.898 --> 06:46.639
First thing is,
06:46.639 --> 06:48.371
we have the org-capture templates,
06:48.371 --> 06:50.101
which are here.
06:50.101 --> 06:53.178
The goal one is not doing anything special.
06:53.178 --> 06:55.605
It's just writing it back to this file,
06:55.605 --> 06:57.125
so there is a limitation there
06:57.125 --> 06:58.718
that you must have this file open
06:58.718 --> 06:59.840
when you add them, which is
06:59.840 --> 07:02.000
something I'd like to improve in future.
07:02.000 --> 07:04.952
For the activities, it specifies the file,
07:04.952 --> 07:06.560
but it also specifies this function
07:06.560 --> 07:09.926
set-activity-pos-from-goal, which (is) above here.
07:09.926 --> 07:12.720
What this does is, it iterates through the
07:12.720 --> 07:17.360
various Org entries looking for goals,
07:17.360 --> 00:07:20.720
and once it has a list of goals,
00:07:20.720 --> 00:07:21.919
it presents them to you
00:07:21.919 --> 00:07:23.599
using ido-completing-read,
07:23.599 --> 00:07:25.120
so that you can select the goal
00:07:25.120 --> 00:07:27.610
that you want the activity to live underneath,
07:27.610 --> 07:29.520
and it then searches forward, and it finds
07:29.520 --> 00:07:31.599
the appropriate spot in that goal
00:07:31.599 --> 00:07:33.919
that the Emacs can then dump
00:07:33.919 --> 00:07:36.000
the captured activity.
07:36.000 --> 07:39.210
Okay, the next one is pretty straightforward.
07:39.210 --> 00:07:40.479
Because I changed the names
00:07:40.479 --> 00:07:42.240
of the TODO, DONE,
00:07:42.240 --> 00:07:44.720
I now need a new way of aggregating
00:07:44.720 --> 00:07:46.691
the summary completion statuses.
07:46.691 --> 00:07:48.400
So, for this I'm just looking
00:07:48.400 --> 00:07:51.440
at the number of completed activities
07:51.440 --> 07:53.627
over the total number of activities,
07:53.627 --> 07:57.665
and I make that available on the C+ here,
07:57.665 --> 08:00.859
which we will see when I go and show you
08:00.859 --> 08:03.960
the top configuration in the Org document
08:03.960 --> 08:05.199
in two minutes.
08:05.199 --> 08:08.080
I mentioned that we needed to have our
08:08.080 --> 00:08:10.400
own start date. The way this works is
00:08:10.400 --> 00:08:11.870
we add a hook to
00:08:11.870 --> 00:08:14.996
org-after-todo-state-change-hook,
08:14.996 --> 00:08:17.199
which means that we test
00:08:17.199 --> 00:08:19.680
the state change results in
00:08:19.680 --> 00:08:21.599
one of the items being In-Progress,
00:08:21.599 --> 00:08:23.199
and if that's true
00:08:23.199 --> 00:08:25.360
and it already doesn't have a time stamp,
08:25.360 --> 00:08:26.639
then it creates a timestamp
00:08:26.639 --> 00:08:29.049
with the current time and date.
08:29.049 --> 00:08:31.199
The second hook here is just ensuring that
00:08:31.199 --> 00:08:32.663
when we save the document,
08:32.663 --> 08:34.898
that the column view is dynamically updated,
08:34.898 --> 08:36.578
so that everything is up to date.
08:36.578 --> 08:39.444
And then last but not least here,
08:39.444 --> 08:43.590
the tmp-f-timestamp, what this does is,
08:43.590 --> 08:46.690
on the export, it modifies the timestamps,
08:46.690 --> 08:48.336
so that it removes the angle brackets,
08:48.336 --> 08:50.367
and it removes the hours and minutes.
08:50.367 --> 00:08:51.839
That is a space-saving thing
00:08:51.839 --> 00:08:54.080
and a tidiness thing in the PDF.
00:08:54.080 --> 00:08:56.187
I'll show you in a second how that's used.
08:56.187 --> 08:58.121
We then allow bind-keywords.
08:58.121 --> 08:59.839
We use them above.
08:59.839 --> 00:09:01.200
Then we just have a simple key
00:09:01.200 --> 00:09:05.258
that allows us to hotkey for org-capture.
09:05.258 --> 00:09:06.800
And then at the start,
00:09:06.800 --> 00:09:07.327
when we evaluate the startup block
00:09:07.327 --> 00:09:10.160
that I have of Lisp,
00:09:10.160 --> 00:09:11.360
just so it's already there,
00:09:11.360 --> 00:09:13.519
and set the number of sublevels to one
00:09:13.519 --> 00:09:16.080
so only the top levels exist.
09:16.080 --> 00:09:19.360
Coming back over the top
00:09:19.360 --> 00:09:21.576
to put that all back together again.
09:21.576 --> 00:09:22.720
The startup just tells you
00:09:22.720 --> 00:09:24.926
that you want log times.
09:24.926 --> 09:27.023
The title, author, description, and…,
09:27.023 --> 09:28.536
they should be obvious, right,
09:28.536 --> 09:29.920
that's just text for the PDF.
09:29.920 --> 09:33.049
Options, we disable the table of contents,
09:33.049 --> 09:34.320
we do not want that.
09:34.320 --> 00:09:35.680
Now, the output config here,
00:09:35.680 --> 00:09:37.519
the first two are resulting
00:09:37.519 --> 00:09:40.160
in the timestamp formats, so, that was
00:09:40.160 --> 00:09:41.920
the tmp-f-timestamp function
00:09:41.920 --> 00:09:43.468
I showed you below.
09:43.468 --> 09:45.310
And, we got a better LaTeX stuff here,
09:45.310 --> 09:47.134
just saying that we want a landscape,
09:47.134 --> 09:49.150
and we want to use A4 paper size,
09:49.150 --> 09:50.560
and then the columns here.
09:50.560 --> 00:09:51.839
What we want is just to
00:09:51.839 --> 00:09:52.880
rename the properties
00:09:52.880 --> 00:09:54.160
to something which just looks
09:54.160 --> 09:55.572
a little bit nicer in the table.
09:55.572 --> 09:58.320
So you can see that: goals, activities,
09:58.320 --> 10:00.979
status, completed, and so forth.
10:00.979 --> 00:10:03.760
Then last but not least,
00:10:03.760 --> 00:10:04.640
on the actual thing,
00:10:04.640 --> 00:10:06.487
we use a longtable in LaTeX.
10:06.487 --> 00:10:09.360
We align, so we specify very exactly
00:10:09.360 --> 00:10:11.040
that we want five centimeters
10:11.040 --> 10:13.364
for the first and last two columns,
10:13.364 --> 00:10:15.680
and that we want all the other columns
00:10:15.680 --> 00:10:17.196
to use the remaining space.
10:17.196 --> 10:19.040
And that's it.
10:19.040 --> 00:10:21.440
Appreciate, I've absolutely whirlwinded
00:10:21.440 --> 00:10:24.160
through that, but please do feel free
00:10:24.160 --> 00:10:26.144
to ask me any questions,
10:26.144 --> 10:28.786
or speak to me offline.
10:28.786 --> 10:32.839
Thank you very much.