Chariot Training Classes

Training Courses

I run Chariot's training and mentoring services. We provide training in AngularJS, HTML5, Spring, Hibernate, Maven, Scala, and more.

Chariot Education Services


Chariot Emerging Tech

Learn about upcoming technologies and trends from my colleagues at Chariot Solutions.


Chariot Conferences


Entries in conferences (7)


RailsConf 2011 - My Personal Recap

RailsConf2011 is my first Rails conference.  Held in Baltimore, MD, in the Baltimore Convention Center, there were five tracks, including one unconference (bohconf) that ran concurrent to the main conference.  As we are preparing to offer our first Intro to Rails course with Engine Yard in the summer, I wanted to start getting involved in the Rails community a bit more and see where it is heading.

Attendance was very strong - and so were the pleas from companies that are hiring.  The job message board spanned three full corkboards, and was full of writing from various companies pleading for Ruby and Rails talent.  Just about everyone was saying "we're hiring," even to the point of wearing it on their shirts.

Clearly, the Rails community is growing and currently has lots of need for additional talent as the market increases faster than the number of experts in the field. A good problem for rails experts, I'd say.


I attended two half-day tutorials on Monday.  Those tutorial sessions were very instructive.

Building WebApps with HTML 5

The HTML 5 tutorial by Mike Subelsky of OtherInbox left me with a ton of resources, a good set of labs and solutions, and lots to research.  

I learned about the HTML 5 Boilerplate Project, where you can download a template of a fully HTML 5 compliant document with tons of comments.  I also learned all about drawing, text and image rendering, extra forms hints such as types of fields (phone #), default focus, and more.  The local storage API is quite easy to use, and he talked about the issue of the socket API and Firefox.  So all in all, a great talk and very valuable to me.

The second one was a Rails Best Practices talk from Gregg Pollack of Envy Labs.  Gregg stopped by and said hello, as he is a friend of ETE and Chariot and really helped us out in 2009 (there's even a Viddler video somewhere on the 2009 ETE conference that he did).

Rails Best Practices - Gregg Pollack of CodeSchool

Gregg Pollack has a good website, if you're into self-paced training, called CodeSchool.  They have a number of classes online, including one called Rails Best Practices.  This was the in-person version of that course, and he kept it entertaining.  I really like his Web IDE and the "challenges" he puts you through.  Great concepts, and an approach for us education people to think about, especially with delivering online training.  He also has this penchant for doing mashups of old 8-bit video games, complete with his voice for all sound effects.

DHH Keynote

DHH gave a keynote on the first day (Tuesday) of the conference where he announced the RC release of Rails 3.1 this week.  In 3.1 will be several significant changes, including the default scaffolding now using Sass and CoffeeScript by default instead of CSS and Javascript.  

Also, they're including a refactored application resources approach to deliver Javascript libraries as modules, and bring more organization to that area.  Rails can then aggregate those into something like a /resources URL, very similar in concept to what Spring MVC does today.  All-in-all a needed feature and something that will make it easier to start organizing the way your applications script.

He also mentioned that jQuery will be the default Javascript library going forward, rather than prototype.  

Fat Models Aren't Enough

Jeff Casimir from Jumpstart Lab gave a talk on further refactoring of Rails applications called Fat Models aren't Enough, stating on the record that he feels that some controllers do too much even today.  For example, he suggested using a Presenter (think of it as a controller helper that is responsible for representing the view data to the view object).  The refactor is to pull the unrelated objects into the presenter, intialize the presenter which then loads the view objects, and only expose the presenter to the view.  

He then told us to take that further - maybe instead of delegating things like reports to the models themselves, polluting them with code really that is a representation artifact, write the code in the presenter to handle that data processing.  You can even call helpers in the presenter, since they are also part of the view and you are just helping to represent the data to the view.  I hope I'm presenting the presenter the right way here, but anyway it was great food for thought.

He then got into a good discussion of the Single Responsibility Principal and how many objects do more than one thing - if your model handles processing of its children to do things for them, or some type of other thingness (think of printing, ordering, etc) maybe you need to extract that and make it another model.  He was big on having methods be less than 8 lines of code. Also, he really hated scopes and prefers the new Ruby class method approach (so do I).

Active Support

Bryan Liles of Smarticus gave a talk on Active Support, which went into the history of Ruby's Facets library, and how the Active Support library was created to give features from that library that were useful to rails programmers, without having to load the relatively large Facets library.

There are a lot of things in Active Support, such as module and class accessors, constantizing and pluralization, a benchmarking API, configurables, callbacks, instrumentation (sending and processing events), even gzip and various types of randoms.  His comment to all of us was READ THE SOURCE!  I agree.  Now if I can just get Chapter 9 of Roo in Action sorted out I'll have a little time to do that...

Confident Code

Another talk, this one by Avdi Grimm of ShipRise discussed how to write Confident Code.  He urged everybody to read Code Complete (yet another book on my Kindle now, I can't believe I've never read it).  Discussed that every method should have four parts - gather input, perform work, deliver results, and handle failure.  That's pretty straight-forward in concept to most of us, however he then went on to show how people do bad things in each of these areas, and how to try to write better code.

For example, a confident input handler in a method is sure of the type of object coming in.  You should treat the object, with duck typing perhaps, the way you expect it to be.  He says one of the "code smells" in this area is when you do switches to process various input types, or check for nils.  I have a ton of notes to go over for his talk.  Great stuff.

Coffee Script?

Ok, I never heard of this before now.  Yes, I've been hiding under a rock.  Think of a simple language like a Groovy for Javascript, and a pre-compilation process to turn it into Javascript.  Bingo, that's Coffee Script.  I had really wanted to see that talk, but it was super-over-full and so I just sat down and hacked with Coffee Script itself.  VERY cool idea.  I have to see how it works in practice, and how to integrate things like jQuery with it, but wow.  You should just take a few minutes and hack around with it. 

Sass - CSS meets code

I didn't get a seat for the Sass talk either.  You'll see a theme here. See, I'm not 24 so I can't run to the talks as fast as some of these other guys.  Ok, it's an excuse.  By the time I got to the sass talk, the best I could do is stand in the back for a bit and write down some URLs.  So I sat down and also took a look at that as well.  Again, nifty pre-processing DSL for CSS.  If you thought it would be a good idea to put your palette RGB numbers in variables and re-use them throughout your CSS file, this is easy in Sass.  There are a lot more cool things, like blocks for nested items such as table rows of tables within divs.  So, again, something on my short list.

Legacy Code - In Rails?

As we well know at Chariot, and Noel Rappin of Obtiva points out, at some point, you'll have to deal with a legacy Rails app.  If you've ever been on a rescue project, you know what I'm talking about.  Noel points out that your first job is to make everything better incrementally.  He brings up the Boy Scout Rule (quick, what is it?  I remembered the Cub Scout one, Always Do Your Best, but it's "Leave the campsite in better shape than you found it").  

Lots of tips here, after showing us the modern version of Goofus and Gallant (which still exists apparently) and how you can really harm your effort by rushing to push or rewrite the something without testing.  He strongly suggests using Git to make cheap branches (an idea I highly agree with) and pressed us to learn git bisect if we haven't already.  A tool that helps you figure out when things started to change in your history so you can figure out what commit changed the world on you. 

He suggests things like using Cucumber first for outside in testing - that way you can cover a lot of the application early on.  Many other suggestions including things like test driven exploration.  Lots of notes to review, lots of food for thought.

Building Rich Applications in Rails

Yehuda Katz was on this morning talking about how you may think about writing your own rack-based Restful platform to serve data for RIAs, using something like Sinatra, but that Rails gives you so much that you should take pause and really think about it. He suggests building Rich Applications in Rails.

He had tons of details on how to approach writing restful APIs, especially on returning predicatable results in JSON, so that your programs can consistently call the API in a safe way.  He discussed the Bulk_API project, which lets you do things like POST /api/bulk?posts=1,5,6,34 so that you can get them back with one hit, etc...

He mentioned some Javascript templating engines, something I have to check out (echo, handlebars /moustache, etc..)  So much detail in that talk!


I also saw a talk on the Engine Yard sponsored Trinidad project.  This is a server that hosts rack-based applications on JRuby using Tomcat behind the scenes.  You can configure tomcat using YAML, deploy multiple applications, and it's now on my short list of new engines to take a look at.  More on that project at the gitub site,


All-in-all, I see a lot of activity in the Rails community and a lot of life.  There is an energy here and tons of people deeply committed to the platform and language.  Rails 3 seems to be "growing up" into the enterprise a bit more, and DHH seems committed to opinionated development and dependency injection (take bundler for example), and to not just improving rails, but delighting developers with very well thought out and meaningful improvements.



Last day for ETE Early Bird registration 

Today is the last day for early bird registration for our upcoming Philly Emerging Technologies for the Enterprise conference. Register now by visiting!


Emerging Tech Conference Day 1 Recap

What an entertaining day! Lots of fun sessions to attend, and attendance hit the 400 person cap, a record for ETE. I attended talks on Flex, OSGi, Hadoop, Seam, and gave a talk on Grails. At the end of the day everyone went to the World Cafe for drinks, and the guitar player actually whipped out Paranoid Android from O.K. Computer--what a riot.

Of the talks, the one that blew my mind a bit was Hadoop. Although I'm not 100% sure I get it yet, it looks like those LISP / AI Comp Sci geeks ended up working at Google, and Yahoo... Time for me to dust off that old engineering hat and start learning a completely different way of programming. For those of you not in the know (believe me, it includes myself), Hadoop is a massively parallel architecture for running queries against data. Think "how does Google manage search indexing and processing" and you get the idea that no software built by standard humans could keep up. It turns out Google runs that web index in MEMORY across many nodes. Wow.

My interest in Grails is still ongoing, and I have to say that you can only talk about so much in one hour. I'm wondering what other presenters end up doing for a one hour intro (and someone from G2One is doing another Grails talk tomorrow at ETE). Mine was mostly setting the stage (Groovy and what it offers, Grails as a platform) then I dove into a 25 minute demo. I ended up covering domains, (a simple domain, scaffold the UI, one to many) and showed them how to switch databases. But I pretty much ran out of time to do anything else. Hopefully in the future I can prepare a more advanced dive.

I liked what I saw from Seam, and have it in my Mac downloads folder to screw around with. I'm not sure I want to use JSF on the front end, although the speaker explained that Seam manages JSF a bit for you and simplifies it. What I don't get yet is the fact that you're constantly re-deploying an exploded WAR or EAR, and I'm wondering how that works in practice. (Then again, Grails re-deploys too, but it's a simple WAR without any EJBs, etc..) More on Seam in a later post.

Finally, I got to see the hubub on OSGi from two speakers--our own Dmitry Sklyut and Michael Redlich from ExxonMobil. Dmitry's was on Spring OSGi, and how you can essentially create a module per ApplicationContext. In the end, it's about injection in Spring, so essentially you can either publish a bean or reference it using Spring DI. Pretty cool. Michael's talk was more general (here is how OSGi works) with some great sample code. He was using Equinox as the container in the demo. I did like the comment made by Dmitry toward the end--he felt that OSGi in general is at least 5 months too early for general use. But he also said (and I COMPLETELY AGREE) that he's been waiting too long for application software that can be treated like pluggable Legos. Maybe OSGi is the answer, but I'm thinking it will take Spring to sort that one out.

I ran the MP3 audio recording of three sets of sessions (lightweight, agile and ruby) so between pulling off audio and making sure things got recorded it was a lot of running around. Hats off to the Drexel student helpers as they remembered to stop/start the audio recording gear. By the way, I'm using the iKey Audio plus, a little hardware box that takes any of three input types (line in, mic in, phono in) and directly records it to an USB memory stick as either an MP3 (128 - 320 kbit) or a full-out wav file. Pretty nifty. As long as the quality holds up, we'll be publishing various sessions on my Chariot Tech Cast podcast.


See you at Philly Emerging Tech

I am giving a talk on Grails at Philly Emerging Technologies for the Enterprise, a two day conference at Drexel University in Philadelphia on March 26-27. Chariot Solutions hosts this conference every year, and it covers Web 2.0, Ruby, SOA and Management topics. I'm speaking on the first day from 11:30 AM to 12:30 PM.

Take a look at Emerging Technologies for the Enterprise. The conference is not very expensive, and it is a great way to see some big name speakers in our industry. I hope to see you there!


G2Exchange Recap, Day #3

The final day of the Groovy Grails Exchange had some great sessions as well. I attended Alexandreu Popescu's Groovy and SQL talk, which was a good introduction to all things SQL and database migration. He mentioned several tools I've never worked with, including dbmigrate, DdlUtils, and LiquiBase. Personally, I've always been a database scripts person, but I will definitely look into those tools.

The second session I attended was the Grails UI Extreme Makeover by Glen Smith. That man is hilarious, and also very informative. It was there that I scored my Kualoa (it was a cheap shot, I asked him when his charting plugin would be appearing online). He went into detail about Yahoo UI, which includes lots of nifty widgets like tagclouds, calendar controls, tool tips, in-place editors, and autocompletion.

In the afternoon, Jason Rudolph hosted a Refactotum, which was an introduction into how to work on an open source project without spending your whole life doing it. There was a great back and forth between Scott Davis, Jason, Dierk Koenig, and others on testing strategies. More information on Jason's blog here. Apparently the session led to over six new patches to the Grails framework. Now, if only I could figure out how to get my Ant build to actually call my new Unit Test, I may have a contribution as well!