Discipline
I’ve just finished reading Cesar’s Way, a book written by The Dog Whisperer, Cesar Millan. It’s a fantastic read if you have a dog, and has really helped me better understand our gorgeous pet Dalmatian Rocky. Some of the insights though are more profound than just how they relate to our canine friends. In particular, Cesar’s take on discipline I found to be very interesting:
To me discipline is a word that helps me to stay on target, to reach my goals and dreams. It’s a word that allows me to stay balanced, to be a respectful human being, an honest human being, someone who wants the best for himself and for everything around him - from trees, to animals to human beings.
It’s easy to see how being disciplined can help to set rules and boundaries for someone else - whether it’s for a child, an apprentice, or a pet. However, self-discipline is just as important for us to be able to achieve our own goals, whether they are personal, or as part of a broader team or group effort. Often self-discipline is harder than being disciplined on someone else’s behalf. When working with someone else, we might find that they are the motivation we need to stay disciplined, but without that motivation, it’s easier to slack off and convince ourselves that we don’t need to be so hard on ourselves. It basically comes down to responsibility - and being responsible for more than just yourself is great inspiration, and a great motivator to stay on track. With a baby on the way, and an incredible wife (as well as a pet puppy dog in need of leadership!), I feel like I’ve never been more inspired and disciplined, so that our goals and dreams as a family can be realised.
Tab Cleanup
Haven’t posted in a while, been crazy busy with lots and lots of cool stuff. Figured it might be a start though just to post some recent great stuff I’ve been looking at and reading.
My Common Git Workflow - good article from Yehuda Katz about a basic Git workflow for common operations, specifically compared to the equivalent Subversion commands.
Smash Into Vim - PeepCode episode on Vim, a text editor that is getting a great deal of positive interest from a lot of Rubyists. I haven’t yet watched this, but am planning on doing so as I’m considering making the switch from emacs.
Localized external services - an interesting look at testing code that hits a remote external service API.
The WebM Project - an attempt at a truly open web video format, with some pretty big players involved.
Google Font Directory - Google now have a Font API for using non standard fonts in your web apps. Am I right in saying that this is similar to Typekit, albeit free, open but with less fonts to choose from?
Sayonara, iPhone: Why I’m Switching to Android - fantastic article that does a very good job of summarizing the reasons why Android is a far more compelling mobile platform than the iPhone. I just upgraded my HTC Hero to an HTC Desire and I’m even more impressed with Android now at version 2.1, and with the latest generation of phones.
autotest
I’ve just recently started using autotest again, and it’s making development so much easier, and more enjoyable. If you do any TDD (test driven development) with Ruby, you need autotest running, as it really improves the experience massively.
With autotest, and growl, you can plod away writing failing tests, implementing code so that they pass, and then rinse and repeat - all the way getting messages flash up telling you when tests are broken, and when tests are passing again. It’s a great way to iterate through writing code to meet user requirements, and incredibly satisfying as you turn failing tests into passing ones, with working code.
So what do you need to do to get it setup? You’ll need to install ZenTest, which contains autotest amongst some other tools:
sudo gem install ZenTest
You can then install the following gems too if you don’t have them already:
sudo gem install autotest-growl
sudo gem install autotest-rails
Finally, you’ll need to setup a small config file, called .autotest in your home directory (~/.autotest):
require "autotest/growl"
That’s all you need in that file, now just hop into a Rails project directory, and run autotest:
cd /path/to/project
autotest
You’ll then get output from the initial test run, and from now on while autotest is running, when you edit a file, it will re-run any tests it deems to have been impacted by a change to that file. It will pop up test failures and test successes as growl notifications too. To force it to re-run the entire test suite, press ctrl+c once. To end autotest completely, use ctrl+c twice in quick succession. Bear in mind for things like database schema changes, you’ll need to do the following to get the test database schema up to date and inline with the development database, otherwise your tests when being run under autotest will fail:
rake db:test:prepare
Now get cracking with those user stories, get those tests written, and then turn them from red to green!
Ruby on Rails Tutorial
Not a great start to my yearly goals - right after posting about how I want to blog every other day, I manage to go six days without a post! Time to try again, starting from today…
I was planning my next article as a follow-up to the Getting started with Rails 2.3.5 article I did in December, when I stumbled across this rather brilliant work in progress online tutorial book, Ruby on Rails Tutorial, by Michael Hartl (author of the great Railsspace book). Rather than write some more beginner articles that are probably covered by that material (or soon will be), I figured I’d point my readers in the direction of that resource, as it is certainly shaping up to be a great read for anyone just getting started with Rails.
So going forward I’m going to concentrate on some more advanced topics, and a few more interesting things perhaps for those who are already up to speed with the Rails basics. I’m going to be covering some of the alternative datastores popping up under the NoSQL umbrella - CouchDB and MongoDB on the document database side, and Redis on the key-value store side of things. I’m also going to have a play with the very latest Rails 3 code, so look for a few articles both on building a new app with Rails 3, as well as migrating existing apps.
And if anyone has any requests for intermediate or advanced topics they’d like to see me cover, then let me know. In the meantime, even if you’re an expert Rails developer, it’s still worth checking out the Ruby on Rails Tutorial book and helping Michael out with any feedback you might have.
Looking Forward
Following up on my 2009 retrospective post, I think I’ll follow the trend and jot down a few goals and thoughts for 2010.
This coming year I want to continue to get even more productive and organised. Managing a lot of different projects presents unique challenges, and I worked hard this last year to settle on a good workflow, but I think I can probably get more organised still in terms of planning my workload. I’ve come to accept that I’m more of a night owl than a morning person, and embracing that has already meant that I have a routine that better suits me, and that lets me get more done. The next step I think is trying to plan my individual days better, and trying to limit how unexpected events can disrupt that plan.
I’d also like to continue to look at ways of embracing Agile more in how I work with clients, as I feel this will be key to my target of improving productivity and organisation. In December I started doing the one man equivalent of a daily standup each morning, just to spend some time getting straight what I had achieved the day before, and what I had planned that day, as well as potential blockers. I’d like to try and leverage burndowns and retrospectives more this year to give me a better insight into solid project management.
I’m looking forward to working on some interesting projects this coming year, and I’m excited by the potential for new clients, as well as continuing to work with some great existing clients. I definitely want to make time for a few of my own ideas however, and I have a few things I’ve been kicking around that I’d like to get time to flesh out and see where they go. I want to try to set aside a small portion of time each week to focus on this, so that I can progress at least one solid idea and get it launched this year.
I’ve already started on this one, but I want to learn at least one new programming language this year. Usually I’m pretty good about picking stuff up and challenging myself with something new, but in 2009 starting a business and figuring out the best workflow for my freelance work meant that I wasn’t able to spend any time focusing on something as big as a brand new language. I’ve now started learning Clojure however, and so I want to keep chipping away at that and working with it, and get to the point where I feel comfortable writing useful code with it.
I also want to continue to blog more. I was keeping to a post a day for a little while before the holidays, and I’m hoping to keep to around a post every other day throughout this year. I find writing very relaxing and I’m hopeful that what I write will prove useful to others, as well as help me to engage with other interesting people out there.
I’m enjoying studying on my current business course, and once that’s wrapped up in March, I’m going to look at taking on another more in depth course over the Summer. Studying something other than programming is proving to be very rewarding, and it’s a nice occasional break from my other work. By the end of the year I hope to be a good chunk of the way towards my business degree, and should also be part way through another course by then too.
While I want to continue to work hard at all times, I do think that I need to set aside blocks of time for relaxing, and catching up on the other things I love - reading books and comics, playing videogames, watching movies, golfing and spending more time with my wife and puppy. I think being even more organised will help me to complete the work things I need to get done, with spare time left over for other interests. I started this the last few weeks of 2009, taking one night out a week to go to the movies with my wife, and really enjoyed it.
In the spirit of Crush It! though, I want to look at ways I can turn some of my passions into things that I can work on, so that I can devote more time to them and still have them contribute to the growth of my business and brand in some way. I have a few top secret ideas that I’m going to look at, provided I meet my earlier target of finding time to set aside for my own things!
Lastly, I want to do more DIY work around the house - there are quite a few things that have been on hold for almost a year since I’ve been so busy with the business, but tying into the above idea of making time but staying productive, I want to set aside some time for knocking over a few of the jobs that could do with looking at too.
That’s just about it for me I think. I didn’t go with the bullet point list of set targets as I know that a lot of things can happen in a year that might change my priorities, or might direct my interests in other areas. I’m instead hoping that these thoughts will guide my early progress in 2010, and we’ll see what the year holds from then on out.
I hope everyone else has a productive, fun and prosperous 2010!