11 July 2011: as described here, I’ve switched to a Start-based workflow and updated my scripts to reflect this change. By default, these scripts now set the start dates of selected items, not due dates—though you can still switch to “Due mode”. This post has been updated to reflect these changes.
I’ve added two more scripts to my OmniFocus repertoire: Today and Tomorrow.
As one might expect, Today sets the “Action Date” of selected item(s) to the current date, and Tomorrow sets the action date to the next date. (By default, the Action date is the Start date, but you can switch to use the Due date if you prefer.)
Why might you need this? A few days of ignoring OmniFocus is enough to make any date-sorted view overwhelming. My Defer script is one method to deal with these items: defer them by a day, a week, etc. But sometimes you just need to set these items to today. Or tomorrow.
As with Defer, these scripts work with any number of selected tasks.
If you use the default “Start” mode:
The Start date of each selected item is set to the current day
If an item has a previously assigned Start date, its original time is maintained. Otherwise, the start time is set to 6am (configurable in the script)
If you use “Due” mode:
The Due date of each selected item is set to the current day
If an item has a previously assigned Due date, its original due time is maintained. Otherwise, the due time is set to 5pm (configurable in the script)
If an item has a Start date, it is moved forward by the same number of days as the due date has to move (in order to respect parameters of repeating actions)
Putting it all together
I’ve set my keyboard shortcuts for Defer, Snooze, Today, Tomorrow, and This Weekend to ctrl-d, ctrl-z, ctrl-t, ctrl-y, and ctrl-w, respectively (using FastScripts), so shuffling tasks couldn’t be easier. Use cases:
Catching up after holiday: Select all overdue tasks, hit ctrl-t to bring them current. Then snooze or defer the ones you won’t get to today.
Planning today’s tasks: Select your tasks and ctrl-t them into the day’s queue. Planning tomorrow? Use ctrl-y instead.
Thanks to Seth Landsman for his role in inspiring my Today script. His version is very similar but doesn’t quite match the defer logic I need.
Usage note: some items inherit due dates from their parent task or project, but don’t actually have due dates themselves. This script ignores those items.
Here’s an AppleScript that “snoozes” selected OmniFocus items by setting their start date to a future* value. These items will then be unavailable (and out of sight in views showing “available” items) until the snoozed start date.
Usage:
Run the script with one or more items selected in OmniFocus
Choose how long you would like to snooze the items (in # of days)
The script will then set the start date of selected items to the current date + the number of days selected in step 2. For example, snoozing with the default value of 1 day will set the tasks to begin at 12:00 AM tomorrow.
Finally, if you have Growl installed, the script will display a Growl confirmation.
I highly recommend initiating the script from a third-party launcher such as FastScripts or Quicksilver. This will prevent delays within the OmniFocus application due to Growl bugs.)
* This doesn’t have to be a future value. Choosing 0 as the snooze value will set the start date to midnight today; choosing -1 will set the start date to midnight yesterday.
The updated Defer script for OmniFocus is ready. Changes include:
Bug fixes to make the script more reliable, particularly when deferring multiple items.
For most of these I’m indebted to Curt Clifton, who made the most critical bug fixes on the OmniFocus forum. (If you use OmniFocus, his scripts and tools are invaluable; be sure visit his site.)
The default action now defers both start and due dates.
Notifications code has been rewritten to make the script friendly for machines without Growl installed.
While testing, I discovered that GrowlHelperApp crashes on nearly 10% of notification calls. To work around this, the script now checks to see if GrowlHelperApp is running; if not, the script launches it. If Growl is not installed or can’t launch, the script displays a generic notification of the defer results.
If you experience delays with the script, it’s almost certainly an issue with Growl, not OmniFocus. This is much less of an issue if you launch the script via a third-party utility like FastScripts, because any Growl-related delays will be absorbed by the script launcher, not OmniFocus. If you primarily invoke the Defer script from your OmniFocus toolbar, you can always disable alerts to speed things up. To do this, simply open the script in Script Editor and change property showAlert to false.
I am, of course, referring to Evernote, a tool that’s designed to remember everything you throw at it – then provide access to your information from virtually anywhere.
If you’re unfamiliar with the tool, this video will give you a quick picture of what it does:
Despite the obvious awesomeness of its sync/access capabilities, earlier iterations of Evernote failed my acquired-information management criteria on numerous counts:
It couldn’t accept basic documents like PDFs (flexibility fail)
It wasn’t scriptable (extensibility fail)
You couldn’t import/export data en mass (openness fail)
But the Evernote team have been hard at work, and with the recent addition of scriptability and an API, it’s worth a serious second look.
Accessibility: 9/10
Accessibility is undoubtedly where Evernote shines: you can access your data on the web client, your Mac or PC, or your iPhone or Windows Mobile device – and it all stays synchronized. Ergo, you still have your data when the network goes down. (The mobile Evernote clients act more as search/input portals into your Evernote data, though the latest iPhone version now stores your “favorites” locally so you can access critical notes offline. Also, if you prefer to keep some data private, you can selectively opt out of synchronization.)
Besides being Evernote’s killer feature, accessibility is also the cornerstone of the product’s business model: Evernote itself is free, but if you need more than 40MB/month you’ll need to upgrade to the premium version ($5/month or $45/year). The most exciting Evernote use cases will probably be mashups that use its API, which means increased bandwidth needs – and, therefore, subscriptions. (N.B.: Evernote’s API documentation describes the bandwidth elements as the “accounting structure”.)
Flexiblity: 4/10
Evernote accepts text/RTF files, images, web clippings, PDFs, and audio notes. To get files in, you can drag-and drop files onto the desktop client, email them to a special Evernote email address, or use the bookmarklet to clip content directly from any web browser. Handily, if you have part of a web page selected, the bookmarklet just saves the selection. Read: Evernote is most in its element when used for web clippings.
In addition, images can be snapped from your webcam or iPhone camera. More on this later.
Unfortunately, Evernote can’t handle many common document types, including Word documents (though RTF documents work passably). Most other filetypes (mind maps, outliner documents, etc) are out of the picture as well.
In the Mac client, the built-in content editor is little more than a glorified text editor. Text formatting is limited to font/size, bold/italic/underline, and alignment, though you can also attach images. (Not to mention the insulting font selection, which includes Arial but not Helvetica – shame!) The Windows client also provides some drawing tools (useful with a tablet PC), a broader font selection, and outlining functions. Update 11/10/08: Version 1.1.6 for Mac introduces orderd/unordered lists and tables.
Scalability: 6/10 (est.)
I haven’t thrown a tremendous amount of data at Evernote yet, so it’s unclear how performance is affected by a large data set. (I was hoping to put it to the test via the Delicious bookmark import, but Evernote just imported the bookmarks as links, rather than scraping the bookmarks’ targets.)
From a user interface perspective, scalability may be a problem. Items are accessed by browsing (by tags and metadata) as well as search. Aside from the ability to use multiple “notebooks”, there is no standard hierarchical organization. Users with a large number of tags or documents might become frustrated by this.
Searchability: 8/10
Basic search functions are solid, though generally unremarkable (no regular expressions, no advanced operators). You can combine search terms with tag filters.
In addition, Evernote has a couple search tricks up its sleeve:
Images pass through Evernote’s OCR engine when synchronized, turning image text into searchable data. This even works, to a large extent, on handwriting – slick!
Evernote metadata includes standard text tags as well as optional location data, so you should be able to search by location as well as content
Extensibility 7/10
The Mac client now includes a basic AppleScript dictionary, which allows for integration with other apps. No content-level scripting, but the most important feature – note creation – is available.
In addition, the Evernote API provides full access to Evernote data. I’m not aware of any Evernote-based applications yet, though Pelotonics is planning some level of integration. If useful integration emerges, this is will be a big win for users.
Openness 4/10
Disappointingly, despite claiming export options as a feature, Evernote maintains a tight grip on your data. Need to send a file to your colleague? Forget drag-and-drop: you’ll need to go through Evernote’s export or email functions.
On the Mac side, the only export option produces a proprietary Evernote-formatted XML file with document contents embedded. The Windows client can also export in HTML, web archive, and text formats.
When emailing files, Evernote wraps most notes in an ad-encrusted PDF document before sending. (Yes, it’s as bad as it sounds. Look for the “Plain text note” here. That PDF is what you get when you try to email a text file.) Mercifully, you can email PDFs in their original form – though whether this is by design or oversight is unclear. What is clear is that Evernote doesn’t make it easy for you to use your data as you wish.*
A third option is to share your documents in a public notebook (like this one). This of course not the same as export, but it does provide a refreshing level of social openness uncommon in tools of this nature.
Final thoughts
Evernote deftly handles web clippings and snapshots, and ubiquitous access makes it a viable tool for web research and data management.
Perhaps paradoxically, Evernote’s impressive accessibility also limits how I use it. Synchronizing data through Evernote’s server means I won’t use it for sensitive data. So although it’s hard to imagine a situation in which I won’t have access to my iPhone, Mac, or a web browser, it’s also hard to imagine a situation in which said access is truly critical. So I typically use Evernote for less important (but nonetheless useful) tasks:
Clipping captioned images and business cards for OCR
Jotting beer-tasting notes
Snapping photos of the same
Misc. data capture when I’m away from my computer
Bottom line: despite its limitations, Evernote is a great tool. At the free price point, you’re unlikely to find a more robust tool… so give the elephant a whirl.
*Comparisons could be drawn to DRM-laden music purchased from iTunes: it’s quite likely that you’ll never want to use it outside the iTunes/iPod ecosystem. But if (or when) that day comes, you won’t want to deal with their restrictions on your data. Same principle.
Leave it to the OmniGroup to help you stay productive — even when you can’t choose what to tackle next.
The OmniFocus Dashboard widget (“OmniFidget”), released today, does just that. Tell it what contexts you’re in:
And it tells you what to do:
Clicking the task title takes you to the task’s project in OmniFocus. Clicking “No” skips to the next task (but who really wants to disappoint the OmniFidget)?
Success in the information age hinges on managing the explosion of available information in meaningful ways. To even approach this goal requires a successful information management strategy, which revolves around the questions
“How do I find relevant information?”
and its corollary:
“How do I manage the information I’ve found?”
On a personal note, these are two of the questions that drive my own technological explorations. Brainstorming and note-taking methods and tools provide another side to the issue. This post is intended to provide some background and framework for said exploration.
How do I find relevant information?
Online information is typically located through complementary methods of search and discovery.
Traditionalsearchtechnologies will long remain the first resort for information-seekers. Desktop search clients are also available for advanced data mining and research. Yet the rising semantic web is the true future of the Internet, and will enable users to interact with information in more meaningful and relevant ways.
Relationship-based information discovery is rapidly adding an important layer over traditional search tools. Social microsharing platforms (e.g., Twitter) and more robust social platforms (e.g., Twine, in private beta) allow individuals to build a liminal space of like-minded individuals with similar interests.
Two points are worth iterating here:
Social networks are becoming a search sphere in their own right. For me, the Twitter ecosystem has become my trusted first source of user opinions; for many types of information, I search on Twitter before going to Google or DEVONagent.
More and more information is shared and recommended through these relationship-based services. In other words, social networking platforms allow information to be discovered rather than explicitly sought.
Search once, not twice
The key to a useful information management strategy is this: You should only have to find a piece of information once.
Search tools should not be relied upon to find specific pieces of previously located information. If it takes more than fifteen seconds to locate online, it should be in your personal information system, not left to The Google.
If you spend a lot of time looking for information you’ve already encountered, your system is broken and you’re wasting your time. Or your employer’s time. Either way, that time should be spent turning information into knowledge, or putting it to use.
So: what to do with all this acquired information?
Accessible — it’s available when and where you need it (for both archive and retrieval)
Flexible — able to accept input from any variety of sources
Scalable — can accept many thousands of documents without becoming unwieldy
Searchable — the system is worthless if you can’t find what you’re looking for
Extensible — it can be extended through scripting or other means
Open — It doesn’t hold your information hostage when you need to change systems
The most rudimentary means of storing information – file systems – fail where it matters most. Because file systems are not designed for this type of data management, they are not truly accessible (saving an excerpt from a website, for instance, is a many-step operation), or quickly searchable (your data are hidden amongst tens of thousands of irrelevant system and program files). In addition, file systems don’t provide end-to-end data functions, so viewing the contents of most file types requires launching another application. Add-on tools like Google Desktop mitigate some of these issues, but they’re no match for a real EDM system.
True EDMs are specifically designed for the task archiving and retrieving information. They can store images, text clippings, and documents of all types; add content indexing to the mix (allowing users to search by any word contained in their files); and are streamlined to allow quick archiving of information. EDMs can be implemented as software-based solutions (see Yojimbo, EagleFiler, and the like), as well as online (see Google Notebook, for instance).
Second-generation information managers like DEVONthink and Twine take content management a step further, adding semantic intelligence and useful content analysis to the user’s database. DEVONthink, a tool that I’ve used for years, analyzes the contents of its articles to identify non-obvious semantic relationships and assist with automatic filing. Twine performs similar functionality in the context of a social network, in theory promising to integrate the most relevant search, discovery, and EDM tools.
Live in the cloud…
As computer usage becomes increasingly network-centric and social, individuals are becoming more and more willing to trade privacy for the convenience and utility of web-based services.
Put another way, we are becoming more willing to keep our information in “the cloud”. (I like the cloud metaphor because, for me, it conjures images of Benjamin Franklin flying his kite in the electric storm. There is energy and power and excitement in the cloud. There’s also risk.)
This trend will spell dramatic shifts in EDM solutions to come. Soon all our data will be accessible from any web-enabled smartphone or computer, anywhere in the world. (And with customs agents able to search the contents of any electronic device with impunity, business travelers may soon be required to keep sensitive data online, not on their machines.)
But online services are not a silver bullet—yet. As a general rule, the current generation of Web 2.0 apps:
Make it difficult to work offline (technologies like Google Gears may soon obviate this concern)
Don’t take full advantage of OS-level services, keyboard shortcuts, etc
Are not easily automated or scriptable
Make it difficult to back up files (FUSE applications may change this in the near future)
Put users at the mercy of others for data integrity (Granted, it’s vastly more likely that you’ll lose data from your own hard drive crashing – rather than Google’s servers going kaputt – but either scenario is a possibility. Pick your poison)
…with your feet on the ground
Until these concerns can be fully mitigated, the most promising path forward lies in hybrid desktop/web platforms that allow users to maintain local and online control of information.
These may be end-to-end solutions (for example, the NewsGator family of products includes web- and software-based newsreaders that are fully synchronized) or more specific sync services (Plaxo, for instance, synchronizes desktop calendar and address book clients with online equivalents). When implemented correctly, these tools can be phenomenally useful.
I’ve been waiting for this same innovation to make its way to the world of EDM apps, and there are some promising options emerging. A limited example is DEVONthink Pro Office, which has a built-in web server that provides remote access to your database. (First impression: it’s slick, but you’re out of luck if you’re stuck behind a firewall or the database isn’t running.) Evernote is a new EDM tool with full desktop-to-web synchronization tools, as well as limited online editing.
The beginning
Ultimately, any EDM solution is only a tool — but it may be the most important tool in the arsenal of knowledge workers. It is therefore of critical importance that we take our EDM strategies seriously.
You may not yet have an EDM strategy. But creating one may be the most important step you can take in your development as a knowledge worker.
Take a moment to think about how you manage what you know. Start exploring technologies, asking how they can improve your knowledge set.
It may take months to work out a reasonable system of your own… but it’s a beginning, and one well worth making.
The long-awaited OmniFocus iPhone app is officially announced. Features to include:
Location-aware (knows when you’re near the hardware store to pick up that drill bit)
Live automatic sync over the network (EDGE or WiFi via .Mac or WebDAV, according to the site, though they likely mean EDGE, 3G, or WiFi, via MobileMe or WebDAV)
It’s the best of all possible worlds! Now you can brainstorm in XMind and import directly into OmniFocus via Udo Gaetke’s clever AppleScript. The script creates a project from your map’s root node and actions (or subactions) from the other nodes.
Although XMind isn’t scriptable, the XML file format is open; his script digs into the XML structure to pull relevant data
The script contains a property called import_folder. You’ll need to create a folder in OmniFocus with this name before running
The script contains a “rm -f” operation. This deletes a temporary XML file created by the script. You may want to peruse the script yourself before running
OmniFocus rocks. I can’t really imagine managing myself personally or professionally without this tool. Nevertheless, despite thousands of hours of development and beta testing, it has its share of quirks. Notably, in my work I have a few daily-type tasks I set to repeat every day. Unfortunately, there’s no “workday” option in the repeat choices, so every weekend I end up with a Saturday and Sunday repetition. I could either:
Mark them complete (ignoring the fact that I’ve just claimed to have done nonexistent work);
Mark them complete and delete the “done” items before they disappear (solving the first issue)
Change the start/due dates in the Inspector (cumbersome)
AppleScript to the rescue.
My Defer script allows you to defer, or ‘snooze’, selected projects or tasks by a given number of days. (Disclaimer for GTD pedants: my use of the word “defer” here is sanctioned by the New Oxford American Dictionary, not David Allen.)
Usage:
Select the task(s) and/or project(s) you wish to defer. Invoke the script from the toolbar or script menu:
Enter the number of days to defer the items in the resulting dialog box and select “OK” (default is 1, so feel free to just hit Return to ‘snooze for a day’).
The script will then prompt you whether to defer both start and end dates of the items. “Due [date] only” is the default option, so again, feel free to hit return to snooze your due date only.
Finally: a Growl notification to signify your success. (If desired, you can use a standard OS alert dialog or no alert at all. See the script for details.)
Managing the torrential flow of work email used to be an onerous task, but a healthy combination of email habits and scripts simplify the flow greatly. Personal experience has demonstrated that email is best handled with a GTD-inspired triage system, à la this one. Spotlight on the Mac and Copernicus on Windows make dredging up old emails a cinch.
Even with a simplified organization structure, it can be time-consuming (or RSI-inducing) to triage your inbox. I find that when it takes longer than a second or two to file an email, I’m more likely to just leave it in my inbox — defeating the value of the system.
Although Outlook in Windows is my preferred professional email client, I use Entourage for email triage because it’s just faster. With a few simple Applescripts, filing any number of emails is a single keystroke away.
tell application "Microsoft Entourage"
set destFolder to folder destFolderName of Exchange account exchangeAccountName
set currMsgs to (current messages)
move currMsgs to destFolder
end tell[/code]
Save the script as “Action \ca.scpt” in your Entourage Script Menu folder (located in ~/Documents/Microsoft User Data/) and you can activate it instantly with Control-A. Change the “\ca” suffix to change the shortcut.
Bonus #1: Change your Caps Lock key to Control in the Keyboard & Mouse control panel (under “Modifier Keys…”) and the script is even easier to activate.
Bonus #2: If you have Growl installed, add the following code below “end tell” in the above script and you’ll get an unobtrusive confirmation that your email has been filed in the right folder (useful for the oh-shoot-did-I-just-move-that-to-the-right-folder moments):
set the allNotificationsList to {"General", "Move message", "Error"}
set the enabledNotificationsList to {"General", "Move message", "Error"}
register as application ¬
"Entourage AppleScripts" all notifications allNotificationsList ¬
default notifications enabledNotificationsList ¬
icon of application "Microsoft Entourage"
-- Error Notification...
if (count of currMsgs) is 0 then
notify with name ¬
"Error" title ¬
"Error" description ¬
"No message selected." application name "Entourage AppleScripts"
end if
-- 1 Notification...
if (count of currMsgs) is 1 then
notify with name ¬
"General" title ¬
"Exchange Notification" description ¬
"1 message moved to " & name of destFolder application name "Entourage AppleScripts"
end if
-- Multi Notification...
if (count of currMsgs) > 1 then
notify with name ¬
"General" title ¬
"Exchange Notification" description ¬
"" & (count of currMsgs) & " messages moved to " & name of destFolder & "." application name "Entourage AppleScripts"
end if