Inline Todos with Evernote, Zendone, and MacOSX Automator

For years, people (*cough* Jeff Gross *cough*) have been nagging me to use Evernote, but I’ve always put it off because I really needed a note-taking app that integrated well with todos.  Lately, I’ve been spoiled by the ThinkBook iPad app, which makes it easy to  create todo items without leaving the context of the note you are working on.

Inline todos with ThinkBook

And while there are rumors of an upcoming Evernote To-Do app, if I was really going to take the plunge and join the Evernote cult, I didn’t want to wait for an integrated todo solution.  The first crack in my resistance came from Jeff getting me into the private beta for zendone, a fantastic web app that implements GTD task management and integrates with Evernote: every note in your default notebook shows up in the zendone inbox so you can turn any of them into todos, todos created from Evernote items display the note as an attachment,  and all your non-actionable items can be stored within Evernote.

Zendone screenshot

Even better, you can create todos directly from within Evernote by using a simple syntax in the title of the note, like: “- hire an MBA intern. next.” (this creates a starred to-do titled “hire an MBA intern” that shows up in the next actions list in zendone).  While this is great, it still requires you to leave the context of the current note you are writing in order to create a new note for the todo.  This annoyed me until I stumbled upon this post from Mark Whitcher about how to create a new Evernote note from selected text using Automator and AppleScript on MacOSX.

With a few minor changes to Mark’s script, I can now quickly create new todos without leaving the note I’m working in:

Create todo from selected text

Confirmation dialog

New todo created in zendone

Here’s the applescript for anyone who’s interested:

on run {input, parameters}
set dialog_box to (display dialog ¬
"Note title:" default answer ¬
"-" & input buttons {"Cancel", "Save"} ¬
default button 2)
set button_clicked to button returned of dialog_box
set note_title to text returned of dialog_box
if button_clicked = "Save" then tell application "Evernote"
tell notebook "Default Notebook"
set new_note to create note with text input as string set title of new_note to note_title
end tell end tell end if end run
Posted in Uncategorized | 2 Comments

Joining the CloudSpokes Team

After my post last week, many of my friends and colleagues have been curious about why I would leave a great job at a great company like Salesforce.  And let me be clear: it is a fantastic place to work, and I’m confident Salesforce will continue to thrive and complete its disruption of enterprise software.

However, that disruption is already well underway, as evidenced by their 100K customers and 16B in market cap.  Working with CloudSpokes is an opportunity to help drive a brand new disruption — one in enterprise development.

At the heart of this disruption lies a contradiction: Every customer I’ve talked to over the past few years has been challenged by the scarcity of cloud development resources, yet we’re living in a globalized, boundary-less world with hundreds of millions of job seekers who for the first time in history can not only educate themselves but contribute valued services to the world marketplace with just a browser.  You can’t tell me a world in which teenagers are earning six-figure salaries developing iPhone games is one in which globally connected enterprises should struggle to find development resources.

Fortunately, the open APIs and easily reproducible environments of public cloud platforms like, Heroku, AWS, and Google App Engine are enabling a new model of on-demand crowd-sourced development.  One that not only disrupts current development cost structures, but also drives innovation with a community competition and peer review model that ensures that the best solutions (and developers!) rise to the top.

This is why joining the CloudSpokes team is so exciting; the idea of creating a brand new marketplace at the intersection of crowdsourcing and the cloud — a marketplace that dramatically lowers the cost of entry for both providers and consumers of development, harnessing collective creativity to drive customer innovation.

Plus, it doesn’t hurt that I get to work with these crazy brilliant people:

The CloudSpokes Team

Not pictured: @spartovi, creator of

Posted in Uncategorized | 1 Comment

Advanced Chatter Anti-Patterns

In honor of my last day at Salesforce, I thought I’d post a follow-up to the chatter anti-patterns article with more fun ways to lose friends and ruin Chatter for your co-workers:

7. At-mentioning people with absolutely no context:

Yes, that's my name. Thanks for reminding me.

8. Burying useful groups by spamming lame ass groups:

Every time you add a stupid chatter group, god kills a kitten.

9. Playing stupid games with your dreamforce chatter alias:

Don't I know you from the last time my toilet needed to be unclogged?

10. Bribing other people to help you spam:

People who do this will burn in a special level in hell...a level they reserve for child molesters and people who talk at the theater

Do you have more Chatter Anti-Patterns to share?  Reply in the comments and I’ll add them to this article.

Posted in Uncategorized | 1 Comment

Why Multitenancy Matters, Part 1

Yesterday, Microsoft shipped Service Pack 1, the first “update” to the Windows 7 platform since its release in 2009.  During the same period, there have been 6 major releases of the platform:

“Now wait a minute, you’re comparing apples and oranges — a desktop OS is totally different from an applications platform!”  Fine.  Let’s take a look at the major releases of some other popular middleware platforms for business apps:

A multitenant PaaS like is always going to be able to deliver enhancements faster because there is a single shared hardware and software infrastructure to deal with, unlike the myriad possible configurations that your traditional OS or a middleware platform has to support.

Oh, and if you are wondering if those releases are only minor point releases with a cute icon slapped on top, check out these release pages, and compare them to the recent innovations delivered by your favorite traditional platform:

Spring ’11 | Winter ’11 | Summer ’10 | Spring ’10 | Winter ’10 | Summer ’09 | Spring ’09 | Winter ’09 | Summer ’08

Posted in Uncategorized | 6 Comments

The Private Cloud Snark Awards

If you’re like me, the absurdity of “private cloud” was never more apparent than when Larry Ellison got on stage at Oracle OpenWorld last month and proclaimed that the cloud came in a box. As Larry Dignan observed, buying hardware isn’t what most people think of as elastic:

Will Oracle take a box back if you don’t need the computing power?

So in honor of the one-month anniversary of Oracle’s “cloud in a box” (and since Justin Timberlake was unavailable), I’ve compiled a list of the most snarky one-liners that deliver private cloud the mockery it deserves:

Honorable mention to Appirio’s Ryan Nichols:

Solid effort, but lacks imagination

Honorable mention to Joe Tierney & Rob Cheng:

Nice teamwork, but judges are not eligible to win (and I'm shocked at the shameless self-promotion!)

3rd Runner-up goes to Sam Johnston:

Not Sam's best work, but it's hard when the source material has devolved into self-parody

2nd Runner-up goes to James Urquhart (via Werner Vogels):

So if public cloud is heaven, selling private cloud is like telling someone to go to...

1st Runner-up goes to the inimitable Peter Coffee

This is the kind of snark most of us can only aspire to. Bonus points for the unicorn drawing.

And the 1st Annual Private Cloud Snark Award goes to: Assaf Arkin!


The ultimate in 140-character snark. Well done, Assaf. You win precious quasi-fame!

Did I miss any good snark?  Reply in the comments!

Posted in Uncategorized | 4 Comments

Chatter Anti-Patterns

Salesforce Chatter is a great way to collaborate at work, as long as people use common sense when posting.  To help you out, here are some things you should try to avoid:

1. Scheduling internal meetings (that’s what Outlook/Google Calendar is for):

Scheduling meetings on chatter

This is annoying

2. Having conversations that should be private:

Private conversations should not be on chatter

Really? Everyone who follows either of you needs to hear this?

3. Inappropriate content or language:

Inappropriate content or language

Dude, this isn't Facebook.

4. TMI:

Too Much Information

We don't care.

5. Spamming groups with off-topic posts:

Spamming groups

Just say no to feed pollution

6. Abusing popular users’ walls to broadcast self-serving or irrelevant posts:

Abusing popular users' walls

Can you say "career-limiting"?

Do you have more Chatter Anti-Patterns to share?  Reply in the comments and I’ll add them to this article.

Posted in Uncategorized | 17 Comments