Alcaic Research and technology, not iambic verse.

11Jan/121

Things and Merlin

Chaos is my natural state. I live and thrive on constant input and movement. I focus when my environment is dynamic. I get bored when things are quiet. But from an operational, task and project management point of view, this often bites me in the posterior. Technology saves me. Specifically, Things (on my Mac and my iPhone) and Merlin (on my Mac).

The problem

Things and Merlin are great, however, they use two databases and didn't really integrate. That's why I was very happy to find that Merlin's support staff had written some scripts that allowed to move items from one to the other.

The snag: it messed up the dates horribly. Now, I have a rather special setup for my short date format in that I prefer yyyymmdd to dd/mm/yy or whatever else is your favorite. That probably has something to do with it. I had expected the OS to take care of this, but there you go. Additionally, it used the planned start date of an activity as the due date, while I wanted the planned end date.

Diagnosis

Looking inside the script bundle (use Show Package contents), which you can find at

~/Library/Application\ Support/Merlin/SendToMenu/Selection\ to\ Things.app/Contents/Resources/Scripts/main.scpt

I found that the applescript uses the parse quicksilver input function -- and this is the culprit.

-- read activity information
set TheDueDate to planned start date
set TheDueDateString to short date string of TheDueDate

… some code cut …

-- this string contains Things project name
set s to "#" & TheTag & " " & TheTitle & " [" & TheMerlinProj & "] > " & TheDueDateString

-- create the to dos in Things
tell application "Things" to parse quicksilver input s

This is what we need to change.

Solution

Using the applescript editor to open main.scpt, I tried various date manipulation doodas (google for them, you'll see that date formatting in applescript appear to be an arcane form of magic), and then realized that using parse quicksilver input might not be the optimal approach. Some tinkering later, this is the final result:

set TheDueDate to planned end date
set ActualCompletion to actual completion
set TheStartDate to planned start date

-- create other way
tell application "Things"
    set newToDo to make new to do with properties {name:TheTitle, due date:TheDueDate, tag names:TheTag} at end of project TheMerlinProj
    if ActualCompletion is 1.0 then
        set status of newToDo to completed
        end if
    end tell

It sends the todo, sets the due date for to the planned end date and if the task is completed, marks it as such. And this works nicely:

Activities in Merlin

Activities in Merlin

Todos in Things

Todos in Things

Next

Two things remains on my wish list: I'd like to use the schedule functionality to schedule at the planned start date and connect the resources in Merlin with the delegates in Things. To be continued.

Postscriptum

You can find my updated script here.

12Nov/090

Debugging as root in XCode

I could not find a good solution to debug a task that needed raw socket access in XCode on the net - this is my solution: change the gdb to run as root. On my system, all it took was:

chmod u+s /Developer/usr/libexec/gdb/gdb-i386-apple-darwin