Mac Samurai

1729 = 93 + 103 = 13 + 123

About Me

My Photo
Colin Wheeler
I am a student working to finish up my degree and a Cocoa Developer & Enthusiast working on Mac & iPhone apps
View my complete profile

Thursday, May 21, 2009

Going from Failing to Straight A's with OmniFocus & GTD

OF.png I once sucked at being a Student
If you've been following me on Twitter you've probably seen me going on about my grades, some people have literally asked me if I've ever gotten anything other than A's. That answer is a definite YES. In fact my getting Straight A's has only been a relatively recent phenomenon. I used to really suck to the point at the end of classes I was struggling and just hoping I got in enough points to pass the class with. That's how much I sucked.

Why?
I believe upon self inspection that a few big things were the reason for this

1. I didn't have a consistent organization/project management system

2. Most of the time I vastly underestimated how much time projects would take

3. I didn't track/review my progress well/at all

How Bad was it?
Imagine being relatively care free for a decent chunk of the first half of the term then as mid-terms come up suddenly rushing to get some good work done so that you don't get the embarrassing letter saying something to the effect that as of right now you are failing and that you need to get your act together or else you will fail your classes. I really hated those letters, I came up with excuses for why I would get them, argued with my parent's over them,etc.

My parents definitely didn't stand by, they gave me a couple of books and some tools (sheets of paper specifically designed for tracking assignments) to help me track my assignments, but what I got was lacking if only because it was just 1 component needed to be organized. But still I failed some more classes.

Beginning with GTD and OmniFocus
At some point along the way on MacBreak Weekly I heard Merlin Mann (come back on Merlin!) going on about GTD and at some other point heard him talking about being involved with the OmniGroup & OmniFocus. I don't think for a while I really paid much attention to this. Later for whatever reason convinced me I got David Allens Book: Getting Things Done: The Art of Stress-Free Productivity and started reading it to see what I could get out of it as a Student. Little did I know that not only would this system click with me and become how I handled School Assignments/Projects, it became the default system of how I managed all my personal projects.

Once I was on board with GTD I started beta testing OmniFocus, because at the time it was the only worthwhile looking GTD app I saw and hey it was a beta and free. So I've been on with OmniFocus since just about the start. When It came out I got it for a pretty good price (maybe got a discount even for being a beta tester (I don't remember 100% for sure.)) After I got going with OmniFocus it pretty much became my central repository of projects, it didn't matter if I jotted something down on a notebook or a card or whatever, it eventually got merged into the OmniFocus database.

The Results
After I got on with this system of GTD and OmniFocus I went back to school full time again at a different and better school IMHO. For my parents they were still anxious given my past performance academically, but I wanted to go full force and get my school over with as I thought going part time would take far too long and just be dragging my program out. This time no letter came home saying I was failing my classes. At the end of the term I got my grades back 5 A's. Both my parents were stunned at this, my mom asked me what I did different and I explained to her about Getting Things Done. She still doesn't believe that GTD is the reason I did a 180, but it is.

Okay so the next term, I go through the same thing. This is a another chance to prove the first term of straight A's wasn't a fluke. The report card comes back 4 A's, 1 B+ (In my defense I tried incredibly hard in the class I got a B+ on, but the teacher was tough and it was hard to get A's on the assignments.) My parents still can't believe this. In an email to relatives my mom still expresses her doubt that the reason I got good grades suddenly was GTD, but they are proud of me so they can think whatever they want, but I still credit OmniFocus & GTD for my performance in School (seriously if anybody at OmniGroup sees me at WWDC come and get me, I owe you a beer big time! )

How I use OmniFocus
OmniFocus has pretty much become one of those apps I use that I can't live without, joining the ranks of other apps like Quicksilver, WebKit Nightly Browser, MailPlane, NetNewsWire, etc. Sure there are other apps that can do similar things, but it's what I've adopted and standardized on.

OF1.png


There are 2 primary areas of focus in my OF database, random ideas and projects that need to get done. Everything else is a subset of that in one form or another. I have various buckets for random Ideas for things in my personal life, buckets for random things that interest me in Cocoa Development, things I might like to write about for Cocoa Samurai, etc. In the screenshot I have quite a bit on hold actually so it's not showing up because pre-WWDC my focus is incredibly narrow at the moment.

Right now I honestly spend most of my time in the project mode, for me personally I've found that as long as my Weekly Review is thorough enough then I should have enough knowledge to know what needs to be done where and mainly focus on the projects, though I still briefly review contexts for verification that I have gotten everything I can get done at a particular context.

Right now you can also see that I have my personal projects ( Gitty ) and Cocoa Samurai article ideas all lumped together in the Cocoa Fu Folder and for me this has worked so far, though as I move away from my Tech Support job at some point in time this will basically be split into 2 folders Developer Projects and Cocoa Fu. Basically Gitty (my Git Client for Mac OS X (akin to Versions or Cornerstone but for git) is the only Cocoa project I am focusing time on pre-WWDC,

I've found it helpful to start with a hierarchy in OmniFocus. Start with your major areas you have to deal with, for me its School (at this point with an A in Statistics its pretty much making sure I get my degree mailed to me), Work and My Cocoa projects at home. However my work is Tech Support and pretty much done just at work and I have my daily duties already outlined and well defined there and rarely do things carry over from day to day except when stores are having a major problem and usually most of the time when it's a call I receive on the weekend and it spills over to me having to do something on the following Monday (i.e. Testing and sending new hardware or fixing some Point of Sale System problem). As such I usually just use a text file on my Linux workstation at work that lists out what I need to do if anything (there really isn't anything like OmniFocus for Linux.)

Then once you have your major areas defined you start creating projects you have in each of those areas for what you are focusing on and define all your actions, For example a major project is getting gitty to a usable state for WWDC so that I have to make Gitty a project. In Gitty basically i've defined my plan for what I'd like to focus in on 1 problem at at time with links referring to bugs I've filed on Github's Issue tracker.

OmniFocus on the iPhone
Let me state from experience that perhaps the best thing you could possibly do if you use OmniFocus on the Mac and own an iPhone is to shell out the money for the iPhone version and get a Mobile Me or WebDAV account setup where you can sync your actions between the Mac & iPhone. I love having OmniFocus being able to show me what actions are near me that I can do, though I don't use it as often as I want to. It has however been a big thing for me in getting groceries and items at places like Target,etc. It's been shown that you can be impulsive if you don't have a well defined list and you go to a store, you'll probably end up buying more than you should. OmniFocus with WebDAV syncing has been great because as I am working on my mac I use the quick entry and put something in the "Retail: Groceries" context and then when I get to the store sync up my list and go through getting everything and check off all the items one by one until I am done then pay for the items and leave, same goes for most stores with the exception of items I know I need to get, but I am unsure of what exactly the store has.

It's also been so helpful to use iCal and OmniFocus on the iPhone to know exactly what i have coming up when someone asks me if I am free on a particular date, and if I need to follow up I just create an action right then and there. As I also have my iPhone by my bed as an alarm clock (1 of 3 actually just to make absolutely sure I get up on time) it's a great way to put ideas and to do's down and sync them up to the server then in the morning when I have OmniFocus open it syncs up automatically and I'll see the action. This way I don't have to get up out of bed, wake up my mac and enter an item in OmniFocus.

Weekly Review
When I was a student Weekly Review was a major hit with me, since then it's still very important. For a student Weekly Reviews are a critical time to see what assignments, quizzes and tests are due over the week and is a time to come up with an attack plan for what you want to work on when. Since School it's become a time to look at the week and overview what i've committed to when and what projects I'd like to work on, what free time I have to do them in and what i'd like to allocate time to during the week. Currently this is pretty easy due to time constraints, but again this is something that OmniFocus with it's weekly review mode makes things easy to see when I last reviewed projects and when I next need to review them.

OF2.png


This weekend in fact I am taking time to do a major overhaul of my projects in OmniFocus and go through them and spin things off and add new projects as necessary. I also should say how much I love that OmniFocus also auto adds badges to projects (orange when within a few days of something in the project being due and red when its overdue) this served me very well in school, because it allowed me to take my mind off when things were due a little bit, I knew when things were due from my weekly review, but there is always that nagging thing at the back of your mind saying "did you forget something?", this really hit me a ton pre-GTD when I realized I had something due the next day, but thanks to OmniFocus I always know what's coming up soon.

Still Learning
I haven't been done with school for long (and in fact I am still waiting to hear from them that I've officially been certified as completing my program) and it's actually a pretty big shift going from school to free time. GTD worked very well with school for me because I had very clearly defined objectives and steps due by very specific dates and very specific consequences (my grades going down) if I failed to complete them on time. Since school my biggest problem by far has been creating consequences for my actions not being completed on time, nothing seems to have the same feel of school.

One big helping thing for me on my Cocoa Projects has been to create or use an issue tracker and to create Meta bugs that just track milestones and then to go through the bugs on the milestone and tackle them 1 at a time as it makes sense until you get the Milestone completed then create another milestone and repeat the loop. This is why I also put these into OmniFocus as it makes it easier to see visually what bugs depend on what and what makes best sense to tackle next (again with links to thee bug on Github so I can see the full details.)

Since completing school I've basically been swamped in a sea of intellectual interest. I built up so many things I want to read/research while in the term that now I always have something to do, but not enough time to do everything in, so properly allocating things has become an important process for me.

Once a month I also take time to examine the tools I am using, I take time to examine my projects in OmniFocus, I look at my Moleskine notebook, look at my bookmarks on delicious and examine the very process I use to decide what I am going to work on, the tools (i.e. OmniFocus, Taskpaper,etc) and see if I could be using them better. Usually this doesn't leave my process very changed, but instead I see a small gradual evolution of my process that just makes it better and better. Above all else I am never afraid to try something, I might try a new way of doing something and if after a day or a few days I realize that it's just not working then I stop, otherwise I've gained a better way of accomplishing what I've been working on.

Tuesday, April 07, 2009

Git Instaweb on Mac OS X

When you first see the git instaweb command on Mac OS X you probably think "oh man this could be cool, an instantly available web view of my git repo!" and then you try it only to get the message

Deathscythe% git instaweb
lighttpd not found. Install lighttpd or use --httpd to specify another httpd daemon.
Deathscythe%


By default you probably won't have lighttpd installed and Apache isn't in the default location git wants to look for it (not really aware your on Mac OS X.) So how do you invoke instaweb? use -d webrick and you'll be up and running

git_webrick_terminal.png


git_instaweb_browser.png


also even if you close the browser window with your git web view in it it's still running the web server. So if you try and invoke it again on another project while the first one is running you'll get something like

Deathscythe% git instaweb -d webrick
[2009-04-07 23:10:27] INFO WEBrick 1.3.1
[2009-04-07 23:10:27] INFO ruby 1.8.6 (2008-03-03) [universal-darwin9.0]
[2009-04-07 23:10:27] WARN TCPServer Error: Address already in use - bind(2)
[2009-04-07 23:10:27] WARN TCPServer Error: Address already in use - bind(2)
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/utils.rb:73:in `initialize': Address already in use - bind(2) (Errno::EADDRINUSE)
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/utils.rb:73:in `new'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/utils.rb:73:in `create_listeners'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/utils.rb:70:in `each'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/utils.rb:70:in `create_listeners'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/server.rb:75:in `listen'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/server.rb:63:in `initialize'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/httpserver.rb:24:in `initialize'
from /Development/redflag/.git/gitweb/webrick.rb:10:in `new'
from /Development/redflag/.git/gitweb/webrick.rb:10
Could not execute http daemon webrick.
Deathscythe%


You'll need to look for the (most likely) last spawned ruby process and kill it then you can spawn instaweb again.

Monday, March 16, 2009

A Reminder

daily-overview-reminder.png


Some days I get completely caught up too much in wanting to get tasks done that you end up accomplishing absolutely nothing. In examining some days when I get like this my initial conclusion has been that I didn't start out the day looking at my objectives, the reasoning behind this I believe is that I get to wanting to process my RSS, Email and do objectives that I become a task zombie & overlook my planned goals for a day and thus don't make moving onto the primary objectives a priority and however long I take in reading articles,etc is okay (plus I am just lazy) because I didn't really look at my goals and thus let the whole day slide by without really accomplishing anything beyond the immediate daily tasks like processing RSS, Email, cleaning my room, making a time machine backup, etc...

So I wanted an easy way to make sure I had some reminder to do this. I think having iCal do it is something that's too easy to dismiss with it's "remind me in x (hours|minutes|days,etc)", so I decided to interrupt my main script that i use everyday to launch WebKit, NetNewsWire, MailPlane and tell iTunes to update my Podcasts." Before any of that occurs I added an action to my Automator Script which pops up an alert to me that says I need to review my whiteboard and OmniFocus or Taskspaper to make sure that I've looked at my Goals for the day so I can make sure I never let a day slide by without getting something done, unless I am intentionally relaxing :) I use this script everyday to automate my initial apps/start downloading my rss feeds/podcasts,etc so I shouldn't have an excuse again. I'll see how well this goes.

Monday, February 16, 2009

CWQueue



Something I whipped up tonight. It's a visual Implementation of a Queue activity viewer that was inspired by Martin Pilkintons Activity viewer for LightHouse Keeper. Basically it's a NSView subclass for the alternating row background and each row (activity Op) is a NSViewController.

Monday, February 09, 2009

Don't F***ing do stuff behind your customers back

Well, as Windows 7 came out recently I thought I might give that a try, long story short the image is still stored on my external HD. But I thought I might update Vista and give it another try, long story short there was a LOT of updating and very little general use, more like Vista turned into the Windows Updater Game. During this update process something came up that really pissed me off

Picture 4.png


No not the Windows updater itself though that can be frustrating. No its that it says 100% done but it's still downloading and sitting there for fucking ever. How do I know?

Picture 5.png


Because I can still fucking see in iStat that it's downloading! So it sat there and sat there and fucking sat there for forever, meanwhile I am wondering what the heck is going on and why it's not updating any status visually. FINALLY it eventually got done and started to restart and that's when I saw what was going on...

Picture 7.png


IT FUCKING DOWNLOADED 40 COUNT 40 UPDATES IN THE BACKGROUND WITHOUT MY CONSENT AND WITHOUT TELLING ME ANYTHING!!! I am not pissed that the updates downloaded, more so I am pissed that it lied to me and told me just 2 updates and then proceeded to tell me that it was complete and finished when it was downloading things in the background without my consent.

Sure there is a "Cancel Download button", but that is beside the point which is it never said anything about 40 updates at any point during this process till they already downloaded and it was restarting. Now if it had gone and downloaded the 2 updates and then said something like "Windows Updater has detected 40 more applicable updates! Do you wish to download and install them now?" I'd be annoyed that there are suddenly 40 more updates, but at least it'd give me the chance to put them off to another time when I have more time, and at least it's letting me know about them and being up front. However Microsoft in all their infinite wisdom decided that shoving these updates down my throat was the better path.

The Lesson of this story is be up front with your customers what you're doing. You don't have to reveal the secret sauce of your app, but just give them cues to app activity and (when applicable) give them opportunities to cancel operations, because the worst thing you can do is screw around behind the users back doing things the user may not want the app to do. The worst thing that can happen in this case is your customers will be slightly annoyed, but they'll be glad they can at least control what operations the application is performing.

Wednesday, January 28, 2009

Access as a priority or resource.accessTime = (important) ? O(1) : O(N!)

Mailplane.pngRecently I switched to MailPlane as my default Email client. No this isn't about praising MailPlane by itself (it does have some weaknesses compared to Mail.app which it succeeded in replacing) but rather this is about access as a priority to a resource.

I noticed that with Mail.app it took what seemed at least 7-10 minutes for it to fully download all my email from GMail. Granted i have 30,000+ messages on my main account and several smaller accounts, but it still seemed like Mail.app could be a ton faster at this. Regardless of Mail.app's speed I noticed something as soon as I switched to MailPlane, I was checking email much more frequently. With Mail.app the 7-10 minute barrier was not only a frustration but it also served as a deterrent. Granted with MailPlane suddenly getting instant access to email in a good mac app is exciting and since then I am disciplining myself to check regularly but not check every 5 minutes unless there is a thread of activity in which people are frequently communicating on like a MacSB thread this morning I participated in.

All of this got me thinking about Merlin Mann, he did a presentation at MacWorld once in which he detailed this, and I realized that I only proved him true. If you don't know this I'll summarize it as best as I can (i'll call it Merlins Theorem :)

Merlins Theorem
The easier access you have to a particular resource the more tempted you are to use it and use it frequently, however as access time increases to said resource you will use said resource less frequently and plan your access to said resource (an inverse correlation between access attempts and access time).

We've built up everything in computers around easy access to resources and in this day and age we are increasingly finding that we have to build in counter agents to not make each of us such a commodity. An example of this is Instant Messaging, these days nobody has just instant messaging, we have instant messaging and statuses (Online, Inactive, Busy, Invisible,etc) Instant Messaging is so easy, which is why it'd be so easy to abuse it if we didn't have these statuses to let people know that we are on, but we may be busy.

What if we made rules about how often certain software could run on a voluntary basis? Like RSS Aggregators couldn't refresh your feeds more than 4 times a day, or you had to keep IM Sessions to 10 minutes max per person? Suddenly you'd manage access to resources better I am willing to wager.

My next battle is finding balance in what I run and how often I run it.

Oh and I'll give a shout out to MailPlane! It totally rocks, I'll probably be getting a license soon :)

Wednesday, October 29, 2008

MTV Woke up & suddenly realized they once showed music videos



via www.mtvmusic.com

Blog Archive

Search