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