The Todo to Calendar Mismatch
At the end of any given period of time, all todo-lists resolve to calendars: this is what I did, this is what I didn't; this is what I put off, this is what I pushed through. In some sense a todo list becomes the source of all unprioritized events and the calendar becomes the destination for first class items in your life. Where a calendar says "this is what I will do", a todo list says "I'd like to get to these".
The orthogonality of the two systems causes a number of problems:
- My todo list can grow without bounds, regardless of whether or not I will finish tasks. This causes stress. For most people, the todo list grows in size slightly faster than the "burn down": I'll add stuff I'd like to do until I finally get the courage to just scrap ideas because hey, they really are never going to happen. Oftentimes the things I throw out should have been tossed at the start, but the time it took to force my hand left me expending emotional energy on something I would never accomplish.
- "What do I do next?" is a common question, and one that is pretty easily solved with systems that designate "next actions" or have some sort of dependency hierarchy. This problem gets much more complicated when I can be working towards a number of different competing interests, with different priorities and different due dates.
- It's easy to estimate that a task will take 2 hours, but when will I get that time. For most people the answer is "I'll get to it", which results in reneged promises or late nights. For the requesters (and maybe that is you), an accurate answer is almost always preferable than either of these results.
So, back to resolution. At any given time, your todo list in the past resolved to what you did in the past and your todo list for the future is already partially resolved. This last point is critical for people with a lot of competing priorities, though perhaps less so for people without the mess. There might be a universe where every single moment is up in the air, but for most people the path forward is straight until it changes, and even the changes can be predicted based on historical trends (God help me if I plan to hold on to a solid block of an hour's time any given Monday).
The picture I'm trying to paint here is that your calendar for the next week is already mostly laid out, you just have next to no idea what it looks like. And if you're trying to juggle a personal life, friends, work, maybe a craft or hobby, staying healthy... it's exasperating. I'd prefer to not have to think about it.
Maybe a project can come of this?
Task Management – Subtasks and Shortcuts
Everyone struggles with time management. We're inefficient beings: we're subject to long stretches of no productivity followed by whims of inspiration mixed with forgetfulness and all tied together by emotions that we struggle daily to control -- time tramples us all. In short, it's not easy being an adult. That said, there is tremendous value in taking some of the mental load off of your shoulders so you don't have to be thinking about it every waking moment. Everyone is very different. Some people have a cathartic reaction to penciling down everything they have to do and knocking it all out. Some people like to have Post-it notes all over their desks and walls to keep from forgetting. Other people like file cabinets and a regimented process for how they review what needs to be done, triage-ing it, and systematically procrastinating until the last minute.
So. I'm not here to prescribe a style, but merely explain how I manage what needs to get done and how I go about doing it. What I will say though is that if you're a developer, you must be able to customize and optimize your process. It's in your DNA. Find out what works and do all the extra steps necessary to make sure no time is wasted managing your time.
I use TaskWarrior. TaskWarrior (formerly known simply as task) is a command line task manager written in C++. While considerable development is taking place and is due, the application is truly simple and seeks to stay that way. From my perspective, this make it a great base for scripting. Why script your task manager? Well, let's say I work for a company with a strict policy about issue trackers, how do I integrate? Or what if my boss regularly sends me emails with things to do that I can't forget? What if I want a button on my desk that tracks my time? Shell scripts, baby.
So, for a quick overview (and bear in mind these commands might be aliases, another advantage to a CLI inteface) here's how I list out what I have to do at work:
Easy, fast, and at a glance I know what I'm working on (green), what's due today, and anything else that might be pertinent. Adding a task is also really easy:
TaskWarrior also has two commands task start and task stop that allow you to keep track of what you're working on at a given moment. This is really helpful when you are randomized by someone who stops by or you blank out and forget what you were really doing. A simple task active shows you exactly what you're working on. But what I found is that I tend to work in trees, rather than a flat list. I might put on my list a really big task that could take a week, and as I worked it through I'd break it up into smaller and smaller bits and work through those pieces. Most of the time you have to plan out your course of action, even if it's trivial, to make sure you don't leave out pieces. TaskWarrior's dependencies work for this, but not elegantly. So I fixed it with a vim "outline" script.
By typing two (task work outline), up pops a quick outline of what I'm working on and the related tasks from top to bottom. Not only does this help to form a plan of attack (saving actually updates the individual tasks), but it gives perspective as to where the given piece of the puzzle fits. "Why am I working on the insertion functionality?" is easily answering by traversing the tree: "To get the approval process working for the promotion tab content..."
This breaking process was also solidified by the addition of commands to "break" tasks into subtasks (taskbreak) and suggest what to work on (through taskdone or td) when those tasks are finished. Here's an example of starting on a task that's too big to reasonably manage, breaking it into parts, and having TaskWarrior tell me what to work on next.
Another feature that I found useful is a plugin called tasknote. Tasknote opens up a new note file with your $EDITOR so that you can keep long-winded descriptions tucked away. I fire it up with tn, mark my notes, and save it. I've integrated this with a Vim plugin called notes.vim, which allows me to link tasks from meeting minutes and other notes I have tucked away.
Next, I found that I got a lot of requests via email. It became tedious copying and pasting these into TaskWarrior, so I set up Postfix to dump tasks sent to a specific address into TaskWarrior, with the notes section having the body of the email. From here, I can triage all the emails that require work from me and make sure that they get finished on time.
I realize everyone has their own system, but this works for me!
Clear Facebook Newsfeed/Wall Using Javascript
It's been brought to my attention that this is also referred to as the wall, thus (and for search engine purposes), this post details how to clear facebook wall using javascript.
My roommate asked me if there was an easier way to clear the facebook news feed. When you have several years of "now friends with" and "commented", this process becomes rather tedious especially given the delete confirmation. Here is a bookmarklet that you can type in the URL bar that will do the process for you (albeit a little slowly).
boost::lambda
Computer programmers are designed to see patterns everywhere; we discover the systems that underly processes and phenomena for the advantage of our software. Usually, the same watchful eye that looks for patterns in shipping routes also looks for routine in his/her own work. The evolution of languages is a direct consequence of those observations. As it became clear that programs were oriented around data structures with associated functions, OOP was born. C++ is evolving. Slowly. By committee. But the fellows at the Boost project are making artful use of template meta programming, operator overloading, and general trickery to bring the advances of modern, dynamic languages into the statically checked world of C++. Cheers.
Google Calendar Retrieve Events for Additional Calendars
I've been experimenting with an idea that mergers Remember the Milk (RTM) and Google Calendar. Problem is, their APIs are a bit less documented than I originally expected. No matter, the internet to the rescue!



