03 Mar 2013

A Week with ThinkingRock GTD

[caption id=“attachment_529” align=“alignright” width=“300”] By: Thomas van de Weerd[/caption]

The Good

My first week with ThinkingRock has gone REALLY well for adding tasks. I sit at the computer for much of the day and when a GTD task comes to mind I dump it via Cmd-Space GTD "description of task".

The Bad

Having a very efficient system for adding tasks paired with a HORRIBLY inefficient method of processing tasks causes my GTD Inbox to overflow.It’s like having a firehose flowing at full strength and routing it into a gardenhose.

The Analysis

The method that I’m using for adding tasks is very well optimized and uses a decoupled system. Being able to send emails from any device and having the subject and content dropped into ThinkingRock as a pending task is GREAT. When I go to sort the tasks, I’m stuck with a system that very literally follows GTD principles, but doesn’t have sufficient keyboard shortcuts. Processing 35 items by tabbing through textboxes and radio boxes isn’t my idea of an efficient system. It also makes me wonder if other people are painstakingly mousing through the interface.

The Answer

Dig into the source files for ThinkingRock and add enough keyboard shortcuts to “get things done”. I started this yesterday on the plane to California and I’ll post back when I have a chance to work on it more. Given that I don’t know any Java (other than a session at the LeanDog CodeRetreat with Steve), this will be an interesting challenge :).

23 Feb 2013

Benchmarking GTD

[caption id=“attachment_533” align=“alignright” width=“300”] By: Rubbermaid Products[/caption] I’ve been working with RescueTime for the past week and I’m VERY happy. First off, I don’t have to change a thing to make use of the system. It’s a great way to benchmark my own time spending habits on the computer. It’s well setup to allow individual configuration of what you believe is productive and non-productive. During setup, I thought about all the facets of business and independent projects. I concluded that email is a neutral value of productivity, while programming is +2 and reading HackerNews is -2. I’m happy to share this chart for my first week of use: [caption id="" align=“aligncenter” width=“1035”] RescueTime - 1st Week[/caption] Notice that I tagged email and meetings as a productivity of 0 because so little useful action comes out of them. Frequently meetings would be best accomplished in short bursts and email involves _LOTS_ of needless repetition. Given that email accounted for 6 hours of my workweek, I decided to improve the efficiency of my email process. I setup my email account with OtherInbox. OtherInbox is an email sorting service that does awesome things with Google Labels. Next I added two key combinations for Sparrow.app. One key combination opens a new email from ANY application while the other key combo brings Sparrow to forefront or hides it again. These two changes have saved me lots of time so far and reduced the effort related to context switching. Share your tips for email hacks and productivity (GTD) hacks! I can be reached via the comments and as [@_ZPH] on Twitter.

21 Feb 2013

Finite Keystrokes Before Death : Making the Most of Them

[caption id=“attachment_526” align=“alignleft” width=“300”] By: ericnvntr[/caption] The idea that we possess a finite number of keystrokes to consume before death is an ominous consideration. That’s the concept mentioned in one of RubyFreelancer’s archived shows by Eric Davis (if I remember correctly). I believe he’s quoting another person in the episode when he talks about having a finite number of keystrokes remaining. I’ve been using a text expander, i.e. snippet application, to help manage the repetitive work of typing. Common phrases or sentences that I use are added as re-usable phrases to a handy program called Dash. Dash observes when keystrokes are entered and if a trigger keyword is used, such as ‘iirc’, the program replaces that text with ‘if I recall correctly’. Dash also allows the phrase to have replaceable variables, just like you would expect fom ‘Yasnippet’ or ‘Snipmate’. As a bonus feature, Dash serves the dual purpose of being a ‘Heads Up Display’ style documentation viewer. It’s a great way to lookup STDLIB info from Ruby or CSS info. The only drawback that I’ve found is needing to manually generate Rdocs since my system settings for RVM do not install them. I accomplished this using the following script:   I’ve used the text expansion feature to save thousands of keystrokes in repetitive form entries where other automated solutions are not available. Try it out and let me know what you think in the comments or on Twitter @_ZPH. Oh yeah and map the HUD to something easy to remember like CMD-CTRL-SHIFT D. I keep all of my system-wide shortcuts on the same triple modifier chord so that they’re unlikely to overwrite standard shortcuts :). What other methods do you have for reducing repetition?

20 Feb 2013

ThinkingRock GTD: Torn Apart


Why am I engaging in this hipster habit of using Covey’s ‘Getting Things Done’ methodology? Because there’s something very valuable to it!

The analogies that Stephen Covey uses in his book hit home for geeks. He describes the working memory we humans possess as Random Access Memory, which requires energy to sustain it. Furthermore, he reminds the reader that if the RAM is busy, other thoughts can’t percolate through that stage of consciousness?

Sound too esoteric?

Let’s get down to bare metal. Or brass tacks. Or any other colloquialism that suits.

Throughout the day I have ideas. Many of them are good ideas :). Many of these good ideas percolate to the surface at inopportune moments… like meetings, reviewing reports, or writing code. These ideas are GREAT but what’s their value if they disappear before I can act on them?

Nothing. That’s how much value these ideas have if they flit right back out of my consciousness. Might not be a big deal if it’s remembering a food item to pick-up on the way home. Might be a huge deal if it’s a programming or business idea that could be implemented and turned into a product!

What’s the solution?

I mentioned using ThinkingRock GTD system in this post. ThinkingRock v2.1 is an open-source project hosted on SourceForge.

ThinkingRock does the usual stuff that one would expect from a GTD program: * Collect Thoughts in an Inbox * Processing * Organization * Reviewing * Action

What’s the killer feature of this app for my workflow?

That ideas can be dumped into it using the universal communication currency of our age, EMAIL!

My goal is to reduce the friction in the GTD system so that I waste as little energy as possible on the process itself.

Email input is a very powerful feature. I’ve setup a dedicated email account for receiving GTD tasks and then configured ThinkingRock to import tasks from there every 15 minutes.

The next step in this process was writing a short commandline script that is prefilled with the GTD email address. The script combines all commandline input less the scriptname itself and uses that value as the subject line of the email. This makes for an incredibly fluid system of GTD task entry.

Here’s the simple Ruby script for this task (note that auth info is placed in ~/.gmailrc):

But wait, there’s more! If you keep reading this blog post, you’ll receive more time saving advice at no additional cost. That’s “#{SOME_MADE_UP_VALUE}”!

Back to the point, I integrated this script into Alfred.app. Now the tasks can be entered directly from Alfred!

I’ve only scratched the surface so far with getting back into the GTD methodology… but I’m excited! Having better programming chops this time when approaching GTD is certainly improving the process :).

Still to come:

I discussed in this post that I wanted to use the open-source version rather than the newer closed source version because of having the ability to dig into the code. In an upcoming post I’ll discuss how the open-source program allowed me to investigate the data structure used for ThinkingRock in a way that would be much more challenging if I lacked access to the project source-code!

Let me know in the comments or on Twitter (@_ZPH) if you have ideas on how to improve the process.

18 Feb 2013

Executing Ruby from Vim

Want to run a Ruby script in Vim? Maybe you’re testing a little commandline snippet. Maybe you want to run a quick query against a webpage. Maybe it’s none of my business why you want to run the Ruby script!

Well here’s a little selection of my Vimscript that accomplishes just that:

Typing your leader key (mapped to ’’ by default but remapped to ‘,’ by you, right? ) and hitting ‘rr’ in quick sequence will execute the current file using your Ruby interpreter. If you’re using RVM to manage your Rubies, you might also want to consider adding the vim-rvm extension to use the ‘correct’ Ruby.

18 Feb 2013

Making Marked.app Work with Vim

I found the delightful ‘Marked.app’ for OSX recently. It takes any Markdown file and parses it using a few standard Markdown interpreters, displaying a live view of the text as html.

Of course I wanted to use it everywhere. And by everywhere, I mean in Vim. And by that I mean @JEG2 posted the idea on Twitter:

Open an Emacs file in Marked.app:github.com/JEG2/dotfiles/…

— James Edward Gray II (@JEG2) January 25, 2013

And I ported it into a couple of lines in my .vimrc:

Enjoy seeing your markdown render while typing in a 30+ year old text editor =D.

18 Feb 2013

Making Thinking Rock v2.1 Work on OSX 10.8

So, PRODUCTIVITY, GTD, BUZZWORDS HERE. I’ve used ThinkingRock before when on a GTD kick a few years back. I liked how strictly it followed GTD. I liked being able to email myself thoughts to act on later, since email is the universal currency. I liked the tickle feature. I’m certainly willing to pay for software, as evidenced even by my donations to VIM, but I like the flexibility that’s available with open source software. The older version, v2.1, of ThinkingRock is available on SourceForge along with the source files. Given that I know zero Java, I thought it would be fun to have the source available for any program that I’m regularly using. So that leaves me with installing v2.1 on OSX 10.8 rather than the newer version. Unfortunately, while the newer version installs quite nicely and opens as you’d expect, v2.1 throws an error : unable to locate jdkhome, use –jdkhome switch. I Googled around and found this explanation of the JDK location and combined it with this explanation in order to come up with the following solution: hard code the bin/tr shell script to include the appropriate jdkhome location. Here’s the modified file:Note that line 21 is the modified line. Now on to revive my 3 year old GTD files, do some major deleting, get email dumps setup, and Get Things Done.

18 Feb 2013

Toggling Pry in Ruby Script

I’ve been using the daylights out of Pry ever since learning about it ~ 1 year ago. I’ve also been evangelizing about it to anyone who will listen:

@_zph Thanks for reading!And thanks for teaching me tmux and pry.Been trying them here and there - still very shaky with tmux.

— Steve Jackson (@stevejxsn) February 16, 2013

The most recent way that I’m using Pry is by dropping the following line into anywhere that I need to work with:require 'pry'; binding.pry

But adding that to scripts and then deleting it becomes repetitive. So here’s a little Vim function that that toggles my Pry statement. If the current line matches the Pry snipped, the line’s deleted. If the current line doesn’t match the snippet, then the snippet is added at the cursor. ( It’s best used on a blank line until I make the function more robust. )

Special thanks go to @Banisterfiend for all his hard work on the Pry gem. It makes my Ruby life a much happier experience. If you’ve benefited from his hard work, please consider a donation @ the following link.

Also, special thanks to Tim Pope. Reading his vim-fugitive code gave me the syntax hint on how to make this work.

17 Feb 2013

The Value of Experienced Developers

I had the pleasure of talking today via Twitter and Skype with Wes Garrison, Founder of Databasically, one of the organizers of Ruby Midwest and all around nice guy. We met back at SteelCityRubyConf during the CodeRetreat and have been in intermittent Twitter contact since.

We talked about a project that I’m finalizing in order to pitch to my company. His feedback on the app, especially in pointing me directly to a solution for highlighting, reminded me that I need to spend more time with experienced developers. In those few minutes he pointed me to the tools that increased the value and utility of my product. Within minutes of getting off of Skype, I added the highlighting feature, tweaked the CSS, and a bit of the underlying Ruby. It’s a big improvement :).

After the Skype conversation ended, the conversation continued on Twitter with Wes pointing out that I should consider using the Decorator pattern in my Rails application. I remembered seeing Draper on Github and an hour later I had a working implementation that abstracted away some complexity from my views. Yet another point related to him having more experience than I.

I’m reminded how much easier it is to learn from people who have already walked a certain path and distilled the necessary knowledge, rather than re-inventing the wheel yourself. This isn’t to say that developers should rely on others for all their answers, but I’ve been 100% self sufficient with my trusty Google-based answers thus far. It’s time for me to better network and share knowledge.

To this end, I need to make time for remote pair programming. I met @JoelByler of LeanDog at a CodeRetreat in Cleveland earlier this year. We discussed remote pair programming for fun, but with household responsibilities, preparing a product to pitch, and longer than normal work hours it’s been tough to schedule.

But tough to schedule is no excuse. I’m getting more diligent about reducing my time consuming blog posts and external information and making a dedicated goal of increasing my productivity. Not hoaky productivity like you see blogged about on Lifehacker.com where you read about a million ways to improve productivity while accomplishing nothing in life. I’m talking serious productivity of cutting out unnecessary fluff time, idle web browsing, and conserving effort for producing things. Some of my current goals in this regard are another couple of web applications related to my industry, a series of webcasts, building a newsletter list of people interested in the theme of the screencasts and providing that set of readers with tailored articles. I’ll have a much easier time of this if my employer sees the value in the product I created and transitions me into a development role. That way the web apps can be developed during work time :) where they will also be consumed by my fellow teammates.

In closing, I’m working on things that I can control and appreciating good advice when I get it.

If you’re reading this in the Kansas City area and need help with tech stuff, Wes Garrison @ Databasically will solve your problems. Give him a ring.

If you’re in the Cleveland area or just want a good group of people to work with for your Rails application, get a hold of LeanDog. Joel Byler, Steve Jackson and the rest of the crew are a good group of folks.

16 Feb 2013

Ignoring All the Things

I found a great talk by Scott Hanselman on Vimeo about information overload and learning to ignore things. In the video he laments that more conversation is taking place in walled gardens (ie Twitter) rather than on the wide open web (ie blogs). He also summarizes what I’ve felt for a few months: * that keeping up with news and the latest things is reducing my ability to produce and innovate *.

It comes back to the concepts in this article: 500 Words before 8am. Start the day as a producer, not a consumer.

In order to work on this, I’ve set myself up with RescueTime and am tracking the amount of time spent on ‘consumptive tasks’ (no relation to romantic portrayals of consumption by Val Kilmer in ‘Tombstone’). I’m receiving pop-up warnings when I exceed a set quantity of time on reading Twitter, reading blogs, etc. I’m also looking to transition more of my consumption time to ‘curated content’ such as ‘ye old books’.

Another point that I took to heart from Scott Hanselman’s talk was about learning to use IFTTT. It’s an SF startup that makes common web tasks automatic. Think of it as a recurrent cron job for the web. Things like : ‘anytime I start a tweet, add the contained links to instapaper’, or ‘anytime I start a vimeo video, post it to twitter’. One filter that I added to help with the Ruby Rogues Parley list is ‘anytime I star a gmail message, copy the content into Evernote’… this should help easily archive good content for later viewing and recall :).

Well, that’s it for this round of production. I spent much of last night working on an internal web application for work that I plan to soon pitch to my company :). I finished the final polish on it (CSS, a little Javascript) and I must say that it feels 100% better. It’s a good reminder for me about how important the UI is for applications.