Diligent Designer
Passionate Pixel Pushing
Ruby, Rails, Web Development
Unfortunate Word Wrapping
I’ve always been suspicious of copy meant for web pages.

Leaving your beautiful layout to the vagaries of browser quirks and user font choices seems kind of like crafting a beautiful print piece and then sending it off to the printer knowing they’re likely to substitute their local (or arbitrary) version of the font metrics; and you’ll never see the final piece. It gets sent straight to the customer or public from the printer.
That’s what web layout feels like sometimes. No wonder there’s a significant strata of designers who gravitate towards Flash for their web designs.
I found a great example in my surfing tonight (I don’t think God would wear a shirt like that).
Source: puregospeltruth.com
Ruby, Rails, Web Development
Ruby Studio Review
Thoughts on Pragmatic Studios’ Ruby Studio



I snapped a few pictures with my little digital camera just to get at least some kind of visual record. Certainly nothing like the last studio I was at where James Duncan Davidson was taking pictures like this.
Last week I was able to attend the Ruby Studio in Denver put on by guys at The Pragmatic Studio. It was a great experience and I highly recommend it to anyone who is serious about learning Ruby for professional or personal use. Dave Thomas and Chad Fowler both did a great job of instructing and connecting with their audience.
Here are few of my thoughts/suggestions for anyone who is considering attending:
1. Sit close to the front and engage with the instructors. You (or someone who cares about you) will be investing alot of time and money so you can be there; make the most of it. Dave and Chad were great about answering questions and seemed to enjoy the audience interaction. Just don’t ask questions to pontificate or try to impress Dave or Chad (or the rest of the group); chances are they won’t be.
2. Listen to Nicole Clark (The event coordinator/boss) when she suggests that you turn off your internet connection during the day (they provide wireless access). On the first day I was probably as much a culprit as the next person about checking email, etc. By the second day I was able to stay off (except for a few quick checks during breaks) and enjoyed completely focusing on the programming tasks at hand.
3. Bring a Mac and use TextMate. I felt bad at times for those in the audience without the Mac/TextMate combo because that is what both Dave and Chad were using from the front. The code->test->code cycle went very fast at times and, although the integration is really cool between OSX, Ruby, Textmate and Terminal, for those without that setup it must have been frustrating to watch and not emulate. One of the reasons I think I was able to keep up is that I had the same software/workflow setup that was being demonstrated. If you’re using some other setup, come prepared and already knowing the workflow of how to write, run and test simple ruby programs in your environment— it’ll pay off. (A personal confession: Attending the Rails Studio in Jan ‘06 with my Dell laptop and watching Dave and Mike demo code with TextTate on the Mac and seeing so many guys around me working with on MacBook Pros was the last little nudge that pushed me into finally moving back to Macs after many years of Windows use. I’ve never looked back.)
4. Make the effort to meet other people there. I found that it was a tough balance at times between wanting to really focus on learning and the benefit of getting to know fellow attendees. While lunches are a great time to spend time getting to know fellow attendees, I think they could have structured a few networking/social opportunities for one or more of the evenings; that would have helped break the ice even more. The alumni-only mailing list/yahoo group is a great place to foster and continue relationships after the event.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Learning to program like a Ruby programmer--learning the idioms of Ruby The soul of Ruby is in Japan. A different philosophy of programming. Wabi-sabi (sp?) Use MacPorts for macs on ruby Ruby is wonderfully self-contained (install in self-contained paths) Updating gems doesn't overwrite older versions of gems # Update gem itself sudo gem update --system Add a -y flag to gem install to default to yes to install dependencies gem dependency rails Consider using gems for internal projects as well. |
6. Buy, read and bring Dave’s Programming Ruby (Pickaxe) book with you. You will will be glad you did. Not only will you have a better understanding of the material (and can better appreciate the personal observations and nuances from Dave and Chad), but you’ll also find some eerie similarities between the examples in the book and the ones used in class. (Ask Dave to autograph your book; I think he secretly gets a kick out of it; I know I would.)
7. Know what you want to get out of the three days and have a plan. I came with a specific goal in mind of getting over a hump in my Ruby programming. I’m happy to report that my time at Ruby Studio did exactly what I had hoped it would. I’m now much more able to get down to writing and implementing ideas with Ruby; instead of having to stop and look up syntax, examples and patterns every few seconds. It was very gratifying to dig into the guts of the Capistrano gem when I got home after the Studio and really understand what was going on with the code (One of Chad’s suggestions for followup work was to download some popular gems and look through the Ruby code).

Let’s face it, this kind of focused and expert training doesn’t come cheap (If you’re not local to the training location you’re looking at spending on the north side of $2,000 between tuition, travel and lodging). I feel grateful to have the resources to be able to attend and I’ve been very happy with my two experiences so far with Pragmatic Studios.
It’s not easy to put on an excellent multi-day training seminar and these guys do a very good job of it. I believe you’ll come away confident and inspired to go out and create great applications using Ruby.
The next Ruby Studio is slated for this summer.
Ruby, Rails, Web Development
Fun with Autotest & Growl
So tonight I was about halfway into Geoffrey Grosenbach’s RSpec Mocks and Models screencast and remembered that I had run into a roadblock the other night trying to get autotest to run correctly. I couldn’t very well be attempting BDD without a functioning autotest. And of course I couldn’t very run autotest without implementing growl notifications. And of course I couldn’t implement growl notifications without making some cool graphics that would make me happy every time I saw them.
So, being the “leans-more-toward-designer-than-developer” kind of developer that I am—here I am two three four hours later, having a ball, but not much closer to really getting my mind wrapped around RSpec and BDD. I did finally get autotest and the growl notifications working and enjoyed a fun little Photoshop diversion—plus I got some time in on my new publishing platform (still tweaking styles and layout of my Mephisto blog theme).
I’ve recently committed to trying to give back a little to the ruby/rails online community that has helped me so much over the years. So I decided to take the time to put the files up tonight (along with the code I found worked for me, and a simple screencast so you can see them in action). Maybe someone will find these useful and perhaps even enjoy their development a tiny bit more.
Download Brief Screencast
FunwithAutotestandGrowl_Fnl.mov (9mb Quicktime File)
Graphic files:
- pass.png
- pending.png
- fail.png
- AutoestGrowlButtons.psd.zip (Photoshop source file)
~/.autotest listing
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
require 'autotest/redgreen' require 'autotest/timestamp' module Autotest::Growl def self.growl title, msg, img, pri=0, stick="" system "growlnotify -n autotest --image #{img} -p #{pri} -m #{ msg.inspect} #{title} #{stick}" end Autotest.add_hook :ran_command do |autotest| output = autotest.results.grep(/\d+\s.*examples?/).last.slice(/(\d+)\s.*examples?,\s(\d+)\s.*failures?(?:,\s(\d+)\s.*pending)?/) # if output =~ /[1-9]\sfailures?/ if output =~ /[1-9][0-9]?\sfailure/ growl "Test Results", "#{output}", "~/Library/autotest/fail.png", 2, "-s" elsif output =~ /pending/ growl "Test Results", "#{output}", "~/Library/autotest/pending.png" else growl "Test Results", "#{output}", "~/Library/autotest/pass.png" end end end |
Lessons Learned
The problem I had with getting autotest to work had to do with version conflicts between zentest and rspec. Just be aware that it can potentially exist and Google your way through it. I can’t even remember how or what I changed anymore to get it working, but I am using the following versions successfully as of this writing: rspec (1.1.3), ZenTest (3.9.1), rails (2.0.2).
Acknowledgements:
- Geoffrey Grosenbach for his excellent PeepCode screencasts that have helped me so much.
- James Deville for the writeup and code that worked for me and my setup. (Be sure to read Eric Wollesen’s comment with an update to the regex.)
Reference
- RSpec Basics Peepcode Screencast (peepcode.com)
- Setting up autotest to use Growl (wincent.com)
Ruby, Rails, Web Development
Rails Diagramming Stencil for OmniGraffle
I created some stencils for OmniGraffle that help with designing the schema of your application. The stencil file is posted on Graffletopia for download.
Excerpt from the site:
Some helpful stencils for designing your database and models. Sort of an Entity Relationship Diagram (ERD) with some added stuff that helps me think through what’s going to go on when I get to coding.
Don’t feel bad if (like me) you are more of a Designer/Developer and just use the plain arrow to connect things. The ERD stuff can make your head explode if you go too deep.
In case you’re new to these kinds of things, you can add more name/type rows to the tables by clicking in a row and hitting Cmd-Enter (or menu Edit -> Tables -> Insert Row). That one was not so obvious to me initially either.