Have a conversation once or have it over and over forever

When a team is collaborating to create software, there are inevitably issues that come up in “big picture” areas like architecture and process. There are two ways to deal with these:

  1. Take some time out from the daily grind and discuss the issue until consensus is reached and a decision is made (and hopefully documented!) for how to handle stuff going forward.
  2. Don’t take the time to think (“We don’t have the luxury of time for thinking!”) and continually have mini-discussions about it (sometimes with other people; sometimes internally within people’s minds) every time it comes up again forever and ever…

I know which one I prefer. How about you…?

There is no reason ever to have the same thought twice,
unless you like having that thought” – David Allen

Append to nvALT journal – Alfred.app extension for nvALT

I whipped up a quick little extension for Alfred that lets me very quickly jot down time-stamped text. The hope is that if I make it ridiculously easy to log what I’m doing and when, then maybe I can have better records of what I’m doing and it will be easier for me to switch back to task after interruptions. I can also look at where I’m spending my time.

I have this extension mapped to the keyword “nj” (for “nvALT Journal”). I activate Alfred and type “nj <text>” and the extension automatically opens up nvALT and makes sure that there’s a note with the current date in the form “YYYY-mm-dd” and then appends my text to the end of the note with a 24 hour timestamp in front of it. It then switches back to the application that I was previously in so I can go immediately back to whatever I was doing.




Accessing OmniFocus data as a sqlite database

While playing with some OmniFocus AppleScripts last night, I realized that OmniFocus on the Mac uses a sqlite database (in addition to the zipped .xml files that it uses for synching). This is pretty interesting, because it could be a very convenient way to write tools that interact with OmniFocus (and use something like Python instead of AppleScript).

$ sqlite3 ~/Library/Caches/com.omnigroup.OmniFocus/OmniFocusDatabase2
SQLite version 3.7.3
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .mode column                                                                                                                         
sqlite> .headers on
sqlite> SELECT task.name AS task, context.name AS context
   ...> FROM task JOIN context ON task.context = context.persistentIdentifier
   ...> WHERE context.name LIKE '%email%' AND task.dateCompleted IS NULL;
task                                           context   
---------------------------------------------  ----------
Send Amanda new color photo via Cloud website  Email

Pretty cool. With a little Python and SQLAlchemy, I could probably create a nice little Python module for dealing with OmniFocus data.

Top 5 OmniFocus Applescripts

I rely on OmniFocus (both the Mac and iPhone versions) to maintain some semblance of order in my life.

I occasionally think of ideas for scripts to make OmniFocus for Mac fit better with my workflow, but I seldom have the time to actually sit down and write them, especially since I’m not particularly strong with AppleScript. I have a few OmniFocus AppleScripts installed (the main one I use is “Complete and Await Reply”), but I often think that I’m just scratching the surface of what’s possible.

So I was very glad tonight to stumble upon Sven Fechner’s excellent post, Top 5 OmniFocus Applescripts, which covers 5 particularly helpful AppleScripts. The only one that I’ve tried so far is the one that Sven calls “Quickly find a project” (the script itself is called FindProject07.scpt if you download it), but that alone was an awesome find for me as navigating quickly to a project with the keyboard is so much faster than mousing and scrolling for me.

He mentions several other scripts which look really useful and I hope to take a look at those soon. I have of course added a project to OmniFocus for that 🙂