Omnifocus2 – A tale of the disappearing deferred tasks

Sadly due to work commitments, I have neglected my blog over the past 2 years.  I plan to reinvigorate things again, starting with this post that I wrote back in August 2014, but never actually pressed the ‘Publish’ button.

I have recently switched from my existing Mac-based task management software Things, to a new product called Omnifocus.  Without getting into the details that have lead to this switch, suffice it to say that Things development moves at a slower pace than I am satisfied with.  I have been trialling Omnifocus for about a month, and while it does have some extra features over Things, it of course has limitations.

Understandably, creating task management software that will yield to the demands of a diverse user base is nigh impossible.  Omnifocus is no exception. One demand of the software that I have is to be able to better plan/schedule my projects and tasks into a calendar.  Omnifocus includes what is called a Forecast Perspective on your projects and tasks.  It is a way to see in a somewhat calendar type view when tasks are scheduled to begin (deferred), and when they are due, along-side my daily appointments as gleened from my Mac OSX Calendar.

This I thought was wonderful as I could then plan out my days and weeks according to what was in my calendar in terms of appointments, and what tasks I had to complete.  But then a problem arose that was unforeseen, and that afflicted more than just myself as explained in this forum post excerpt on the Omnigroup discussion forums:

I’m going to submit this as a feature as well, but I figure I’ll post it here to see whether it can get more traction. My issue is this: If I have Deferred something to a start date in the future, odds are I probably think it’s pretty important that it starts on that day. However, what happens if that day comes and goes and I didn’t start the item? In Forecast, the item disappears. That doesn’t make any sense to me. Forecast shouldn’t only be showing me the “past due” things I assigned dates to, but things I didn’t touch that I was supposed to.

If a deferred task is not done on the day it was deferred to, the following day it would simply disappear from the forecast view altogether.  Not very helpful when forecasting. The discussion thread continues with contributors arguing the merits of changing the software to overcome this limitation, along with a swathe of work-arounds, none of which I found particularly satisfactory to my needs and context. This got me thinking… what if each morning, there was a way that I could select all tasks that were incomplete and had a defer date earlier than today?  I could then update the defer date on all these tasks to be today, and voila, they reappear in my Forecast Perspective.

But how would I do this? Omnifocus makes use of the OSX Applescript frameworks which provide a high-level scripting language that can be used to customise behaviour and automate tasks to make things work in ways not originally conceived by software creators.  A handful of applescript contributors exist that have created some very useful Applescripts for Omnifocus.  One such contributor Curt Clifton has created a script that identifies projects where there is no next action to perform, suggesting that the project may have stalled. The significance of this script is that I have been able to adapt it to solve my problem with deferred tasks disappearing from the Forecast view when they are not completed on the defer date.

If you are frustrated with this limitation of Omnifocus, and you don’t mind losing your originally specified defer date for your tasks, then my DeferOldToNow Applescript might be of use to you.  What the script does is, recursively traverse all of your active projects, looking for incomplete tasks that have a defer date that is older than the present date.  On finding each task, it then sets the defer date to the present. If you are interested in the Applescript code, or would like to contribute updates, the source is available on github.

When the script completes, visiting your Forecast Perspective will once again reveal all tasks that were past their deferred date, and incomplete.  They appear under “today”.  Once they reappear here, you can then defer them again to some time in the future if you need to, but at least they are visible and you are reminded that they haven’t been done. I hope this Applescript proves useful to other users of Omnifocus.  If it does, give me a shout out in the comments section.  Happy Omnifocussing!


Arrow key scroll in Mac Excel

Ever been using Microsoft Excel on the Mac and found that when you use the arrow keys on the keyboard to move from one cell to the next, instead the whole worksheet scrolls?

This is actually a feature of Microsoft Excel carried over from the Windows version on which you press the Scroll lock key to enable or disable.  Older Macintosh computers had the F14 key mapped to the Scroll lock key of PC keyboard, so it was quite easy to enable or disable.  However newer Macintoshes no longer have a F14 key.

This makes disabling this feature tricky to say the least.

In the past I have attached an older Mac keyboard to my 2010 Macbook Pro and pressed the F14 key.  However for those of you who do not have ready access to such legacy keyboards, you can use a simple applescript application that I have written called Excel Scroll Lock.

What it does is “send” a Shift-F14 key press to Microsoft Excel as if you pressed the Scroll lock key, thus toggling on or off this function within Excel.

To use, simply download the application, unzip, and drag the application into your Applications folder.  Then run it.  You can alternatively download a disk image version of the application, and run without installing into your Applications folder.

For those interested in the applescript, it is shown below, and also included in the downloaded application bundle under the Contents/Resources/Scripts folder.  The script is also available on github – contributions welcome.

--Applescript to fix scroll-lock problem with Microsoft Excel on Mac OS
--Written by Damien Clark (
--Licenced under GPLv2 (
--18th of June, 2012

--From time to time you may find that using the cursor keys in MS Excel for Mac will 
--scroll the worksheet, but not shift the selected cell.  This is a feature of Excel 
--that is enabled by pressing the Scroll Lock key.  On Macintosh computers once upon 
--a time, F14 was the equivalent key to Scroll lock on the PC.  Modern Macintosh 
--computers are no longer furnished with an F14 key, and while I am sure there is a 
--keyboard combination to emulate F14, I have yet to find it.  As a result, you can 
--find yourself stuck with this special scroll lock mode of Excel and it is very 
--frustrating.  This script effectively "sends" an F14 keypress to Microsoft Excel, 
--thus turning on or off this scroll lock feature.  So if you find yourself in this 
--situation, you can execute this program to toggle the feature on and off as 
--necessary.  Simply run the application and click OK.  

set returnedItems to (display dialog "Press OK to send scroll lock keypress to Microsoft Excel or press Quit" with title "Excel Scroll-lock Fix" buttons {"Quit", "OK"} default button 2)
set buttonPressed to the button returned of returnedItems

if buttonPressed is "OK" then
    tell application "Microsoft Excel"
        activate --Make it the active application to receive System keyboard events
    end tell
    tell application "System Events"
        key code 107 using {shift down} --Send the F14 key which is scroll-lock on Mac keyboards
    end tell
    display dialog "Scroll Lock key sent to Microsoft Excel" with title "Mac Excel Scroll-lock Fix" buttons {"OK"}
end if

Installing netatalk 2.1.1 on CentOS 5.4

I had the need to install netatalk on CentOS 5.4.  Sadly there were no easily found precompiled packages of netatalk, so I googled to find some guidance on the best way to do this.

I found a great article on which gave plenty of hints as to what was required, and to compile from source wasn’t going to be too arduous.

So here is what I did…

Downloaded and installed Oracle (is there anything they don’t yet own?) Berkeley DB

You can find Oracle Berkeley DB through a simple google search.  I used version 4.8.30.NC.  I found that 5.x didn’t work.

After downloading and extracting Berkeley DB, I compiled with command:

cd db-4.8.30.NC/build_unix

../dist/configure –prefix=/usr/local/db-4.8.30 && make -j 2 && make install

Then downloaded netatalk 2.1.1 and compiled and installed with command:

cd netatalk-2.1.1

./configure –enable-redhat –with-bdb=/usr/local/db-4.8.30 –prefix=/usr/local/netatalk-2.1.1 –with-mutex=x86/gcc-assembly && make -j 2 && make install

Then configured the software from /usr/local/netatalk-2.1.1/etc/netatalk and started the server

chkconfig atalk on

service atalk start

Hope someone finds this useful.