Building an Org-mode Workflow: Timestamped Notes

by Jeff Bradberry

I love having logs for things that can be checked later on if need be, and so I enabled logging state changes and rescheduling into the LOGBOOK drawer way back in Scheduling and Deadlines. But since I have this nifty logbook, why not use it to capture yet more information? I wanted to be able to add my own custom timestamped notes. Fortunately, Org mode makes this easy.

My first known uses of this feature date back to 6 Mar 2023 for the state change notes, and 16 Mar 2023 for the arbitrary notes.

Usage

The obvious incremental step up from what I was already doing is to capture context when changing tasks from TODO to DONE. Perhaps this might be some info about why the change is happening, or perhaps some nuance that might need to be addressed in a separate task (this one particularly comes up in my pull request review tasks).

The way to record a note with the state change log item is to add the prefix C-u to the org-todo command (C-u C-c C-t). This opens up a buffer to prompt you to fill in a note, and …

Continue reading

Building an Org-mode Workflow: Priority Cookies

by Jeff Bradberry

As I came to track more and more items using Org mode, I realized that I needed to have a way of raising up items or filtering down to the things I should be concentrating on. I needed prioritization.

My first known use of this feature dates to 4 Jan 2023.

Usage

Priority cookies are just a bit of extra text that goes between the TODO or other tag at the beginning of a headline, and the text of the headline. They are placed between square brackets, and are prefaced with a # character. It gets formatted like so:

** TODO [#B] look over 13398 and 6253

These priority cookies can, of course, be manually typed, but there are also keybindings that allow you to set them. The ones I usually use are S-UP (to raise the priority) or S-DOWN (to lower it). You can also use C-c ,, which prompts you for the level to directly set it (or unset, using SPC) instead of having to cycle through. These keybindings work in the agenda view as well as directly in the org file.

As indicated in the docs, priorities are only meaningful for sorting items …

Continue reading

Building an Org-mode Workflow: Epic Organization

by Jeff Bradberry

Not long after my last Org-mode post, we started planning for a new release cycle at work. Previously, I was tracking individual issues or small features as level-1 headlines with action items immediately underneath as level-2 headlines with the TODO keyword. Now though, I was going to need to keep track of an entire collection of interrelated features (an 'epic' in the Agile terminology), not all of which would be things I would work on. Clearly I needed to adjust some things to keep a handle on it all.

Usage

The New Structure

This process added a couple of layers of complexity, so I started with deeper nested headlines.

Roughly speaking, level-1 headlines now each correspond to a high-level epic, which would then contain multiple level-2 story or individual feature headlines. For a while I also created level-2 headlines that would capture notes and so forth, but as things proceeded I moved away from that (more on this in the next sub-section).

* Generalized solution for adding/removing execution capacity
- https://issues.redhat.com/browse/AAP-2238
- https://issues.redhat.com/browse/AAP-493 (pushed to 4.4)
- https://issues …

Continue reading

Building an Org-mode Workflow: Lists and Checklists

by Jeff Bradberry

I've reached a point where I need to organize things at a level lower than individual tasks. So for that, I've started making use of the lists and checklists features of Org mode.

Usage

As mentioned in the part about notes in Part 1, I've been using unordered lists from the beginning. There are other options for bullets to use with these, but so far I've only been using -.

While it is easy enough to just manually type these out (and I still do some of the time), the thing I have started to do recently is to make use of the keybindings to insert them instead. M-RET will add a new list item if your cursor is already in a list. A typical thing I might then combine with that is M-RIGHT to increase the indent of the new item, to turn it into the start of a sub-list. The only awkwardness then is starting the list, since M-RET will just create a new headline if you aren't already in a list. Technically you could turn that headline into a list item with C-c -, but I always just manually type the dash …

Continue reading

Building an Org-mode Workflow: Scheduling and Deadlines

by Jeff Bradberry

As I mentioned at the end of part 2, I want to schedule things I need to do on the calendar. So, this week I explored the deadlines and scheduling features.

Usage

There are two types of these timestamps that you can give to your agenda items — schedules and deadlines. Schedules are for events that happen at a particular time, or for when you want to set aside time to work on something particular. Deadlines are exactly what they sound like — a date and/or time something is due by. Both of these seem to behave nearly identically, and you can apply either type or both at the same time to an item.

In order to apply one of these timestamps to an item, use C-c C-s for a schedule, or C-c C-d for a deadline. This will open up a little calendar frame, and will request input in the mini-buffer.

Org-mode schedule input calendar frame and mini-buffer

This prompt is fairly intelligent about what date and time specifications it will take.

When complete, the result will show up as an all-caps keyword immediately under the headline. It must be the next line, with no other lines between it and …

Continue reading

Building an Org-mode Workflow: Multiple Files and Archiving

by Jeff Bradberry

As I mentioned at the end of part 1, I quickly began to feel the need to break things up into multiple files to make things more manageable. So, this week I explored the refile and archiving features.

Usage

To begin with I wanted to break up my items into categories, one category per file. After some waffling, the categories I settled upon for work were:

  • devel.org: Every item that is going to involve me personally writing code.
  • reviews.org: Coding work owned by other developers, that I need to review or pair with them on.
  • watching.org: Items that I want to keep an eye on, but that aren't yet ready to be worked on or prioritized
  • professional.org: Professional development, giving talks, mentoring, or other things of that nature.
  • other.org: Procedural things that don't comfortably fit in any of the other categories, e.g. talking to IT about problems with one of my accounts.

While I could have just cut and pasted items from my original todo.org file into their respective new files, I wanted something a bit more streamlined. It seemed like the org-refile command (C-c C-w …

Continue reading

Building an Org-mode Workflow: Basic TODOs

by Jeff Bradberry

I've been thinking recently that I need to adopt a task management system. As a long-time Emacs user, it should be natural for me to also be a user of Org-mode, an Emacs mode for outlining, note-taking, task management, and more. Building a system around an add-on of a program I already have open every day is a major plus and ought to encourage me to keep up with it. It will also be not too far different from the simple ad-hoc text files that I have been using, but with the addition of some programmed functionality that will improve my ability to quickly take an action and then move on without having to think about it too much.

I'm starting here with a fairly small workflow that does the bare minimum of what I need, then I will incrementally build up new pieces (and write a blog post about each as I go) as I discover new things that I want to be able to do.

Usage

For this first phase, I threw everything together into a single file, called simply todo.org. But since I need to configure autodetection of org …

Continue reading

Getting Started With Let's Encrypt

by Jeff Bradberry

Let's Encrypt is a new certificate authority, run in a cooperative effort with the goal of making it easy for everyone to obtain and renew the certificates needed to enable secure encrypted connections for their domain. It's free to use, uses open standards and open source software, and provides certificates via a fully automated process. Major sponsors of Let's Encrypt include the Mozilla Foundation and the EFF.

Let's Encrypt entered public beta on December 3rd, so there was no longer any good reason to hold back from obtaining a certificate for my site. This blog post will go over the steps I took to get set up with a Let's Encrypt certificate, and to get everything working.

The documentation for the Let's Encrypt client can be found here: https://letsencrypt.readthedocs.org/en/latest/intro.html.

I prefer to run my site on Debian, with nginx as the static file server and as a reverse proxy for my Django apps, which run on top of Apache. Since the nginx plugin for Let's Encrypt is currently 'highly experimental', I decided against using it. Additionally, my config files are jinja templates kept in version control, and are populated and pushed by Ansible …

Continue reading

Minimum Paragraph Widths, Revisited

by Jeff Bradberry

There's a great little demo up on css-tricks.com, demonstrating a technique that uses CSS pseudo-elements to prevent paragraphs from becoming too squeezed when flowing around floated images.

The thing is, it didn't work when I tried to do it myself.

At least, not in my preferred browser, Firefox. And what was really puzzling was that the demo did work in the exact same browser.

Then I found https://bugzilla.mozilla.org/show_bug.cgi?id=290146. Apparently, Firefox has had a bug until recently where elements with overflow: hidden set (perhaps scroll and auto as well) would fail to establish a new block formatting context when the element was at the top of the container. The css-tricks.com demo works, then, because of the 1px red border. If you turn off that css using Firebug (or whatever), you'll be able to see the problem there as well.

My workaround? I've added a 1px top padding to my <p> elements.

I hope that this post spares someone else the frustration I experienced tracking this down.

Introduction to Monte Carlo Tree Search

by Jeff Bradberry

The subject of game AI generally begins with so-called perfect information games. These are turn-based games where the players have no information hidden from each other and there is no element of chance in the game mechanics (such as by rolling dice or drawing cards from a shuffled deck). Tic Tac Toe, Connect 4, Checkers, Reversi, Chess, and Go are all games of this type. Because everything in this type of game is fully determined, a tree can, in theory, be constructed that contains all possible outcomes, and a value assigned corresponding to a win or a loss for one of the players. Finding the best possible play, then, is a matter of doing a search on the tree, with the method of choice at each level alternating between picking the maximum value and picking the minimum value, matching the different players' conflicting goals, as the search proceeds down the tree. This algorithm is called Minimax.

The problem with Minimax, though, is that it can take an impractical amount of time to do a full search of the game tree. This is particularly true for games with a high branching factor, or high average number of available moves per turn …

Continue reading