iOSDevCamp DC 2012

This past weekend, Luis de la Rosa and I ran iOSDevCamp DC 2012, hosted by Verisign. This year our sponsors were: Savvy Apps, Millenial Media, Verisign, and Happy Apps. All of the talks were very well received and it was a great opportunity to network with other iOS developers in the mid-Atlantic region. For those talks where the slides were made available, I’ve linked to them below. I’ll come back and update this post as more slides become available.

Mark Pospesel wrote up his thoughts on the conference here.


Wow! It’s been over a year since I last updated my blog. How sad. To help jump start my blogging again I’ve signed up for Skribit. You can use the suggestions link on the right to propose blog posts you’d like me to write. By the way, if you haven’t been following Paul Stamatiou’s blog which covers the development of Skribit, I recommend it.

Invented Quality Metric: Feltz Levels

There’s a meme that continues to amuse our development team. It originated at SRA long ago and was brought through several other companies before reaching my current employer. When I found it on our internal wiki, I assumed it was akin to the April Fools’ Day RFCs, so I Googled for ‘Feltz’ and actually found a Fernand Feltz at the Centre de Recherche Public-Gabriel Lippmann in Luxembourg. Unfortunately, this is not the Feltz for which the software quality metrics below are named. These were invented in the nineties by an engineer at SRA whose last name was Feltz.

Sometimes perfection seems too much to ask. Don’t despair; rejoice at all the milestones you have already met. The following Feltz levels are defined:

  1. Sits in the editor without harm.
  2. Correctly syntax-highlighted
  3. Successfully saves to disk
  4. In CM
  5. Compiles
  6. Links
  7. Execution reaches main()
  8. Produces discernable output
  9. Does something arguably correct before crashing
  10. Runs to completion.

RubyNation 2008

Last weekend (Friday and Saturday), I attended RubyNation 2008, the first regional Ruby conference in my area. The speakers were excellent and it was great to meet up with folks from the Ruby community who I haven’t seen in awhile. As always, I left feeling energized and excited about my Ruby projects.

There were two main themes of the conference: the ‘official’ one was Ceremony vs. Essence, while the ‘unofficial’ one was Test all the fucking time. The first theme was the subject of the opening and closing keynotes. The second came from Bryan Liles lighting talk on the first day and kept coming up afterwards (audience ‘hecklers’ would ask presenters how often they should test).


Welcome to RubyNationGray Herter
Opening Keynote: Ceremony vs. EssenceNeal Ford
DSLs and Ruby: Blurring the Lines Between Programs And DataRuss Olsen
The Culture of Innovation in RubyGlenn Vanderburg
Living on the EdgeYehuda Katz
Lightning TalksChris Bucherre, Bryan Liles
Archaeopteryx: A Ruby MIDI GeneratorGiles Bowkett
Welcome, Day 2David Keener
Keynote: Ruby, A RetrospectiveRich Kilmer
Ruby PuzzlersMike Furr
Pratical JRubyDavid Keener
Tools for Your Ruby ToolboxDave Bock
Lightning TalksSoren Burkhart, Glenn West, Jesse Shock, Yehuda Katz, Bryan Liles
Closing Keynote: Bad RubyStuart Halloway

Neal Ford’s talk on Ceremony vs Essence was one of the best talks of the conference and a great way to kick it off. He criticized our industry for failing to look backwards and leveraging the lore of the past. Then he proceeded to look even further back discussing Plato’s doctrine of ideas, Aristotle’s essential properties vs accidental properties, Galileo’s use of experimentation to verify ideas, and William Occam’s principle that the explanation of any phenomenon should make as few assumptions as possible (KISS). Don’t confuse essential complexity (we have a hard problem to solve) vs accidental complexity (we’ve made the problem hard to solve). Some of the new patterns he presented were:

  • Chicken Cognition: no memory, can’t learn from your mistakes
  • Frozen Caveman: burned by something and was flash frozen at that point in time, everything revolves around that issue
  • Rubik’s Cubicle: love to solve puzzles, not real issues

During his keynote, Neal suggested learning from the lore of our past by reading classics like The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition), Smalltalk Best Practice Patterns, The Pragmatic Programmer: From Journeyman to Master.

Next up was Russ Olsen who gave a talk about DSLs, both external and internal. Domain specific languages continue to be a hot topic in Ruby and the developer community in general. Ruby is very well suited to both external DSLs (involving a parser) and internal DSLs (use the Ruby parser and build language infrastructure). Ruby is great for DSLs because it doesn’t require parenthesis or semi-colons, it supports procs, the reflection capabilities (method_missing, instance_eval, etc), etc. Rich Kilmer called DSL building, syntax driven development.

Glenn Vanderburg presented on the culture of innovation within the Ruby community. The Ruby community is seeing so much innovation because Rubyists are novelty junkies, the languages opens possibilities that deserve to be explored, the requirement to integrate with IDEs is hampering innovation in Java (Java developers won’t use it until it’s integrated within their IDE), and things are just easier to accomplish in Ruby (low ceremony). He said that sometimes its good to start over as being forced to reinvent can be an opportunity. To close out his talk he did have a warning: When learning new things costs are easier to spot than benefits, but when inventing new things benefits are easier to spot than costs.

Yehuda Katz from Engine Yard spoke about living on the edge. As an aside, it appears that Engine Yard is trying to be a mini-Google in that they appear to have hired many of the top Rubyists as well as some very savvy operations folks. Yehuda said that we should expect Merb 1.0 by the end of summer, introduced the DataMapper ORM, YARD (a replacement for rdoc), and Johnson (a JavaScript/Ruby bridge). He urged those present to take the time to think things through and not rush an API (or software) out.

During the Lightning Talks we heard from Chris Bucchere about BDG’s social network for conferences; David James of Community Goals about state machines, Simon Kaczar of Prognosoft about libncurses-ruby, and Bryan Liles about testing (where the meme test all the fucking time appeared). Bryan’s was one of the best talks of the conference, I highly recommend seeing him present.

The first day closed with Giles Bowkett’s presentation on Archaeopteryx (a Ruby MIDI generator). The music it generated (through Reason) was pretty good. The software makes heavy use of lambda functions and so Giles has aliased lambda to L to reduce typing. His talk covered a wide range of topics and there’s no way I can do it justice. Hopefully he’ll have it recorded (since he’s given the presentation a few times now) and post it on the ‘net.

The second day opened with Rich Kilmer of InfoEther who provided a look back at the early days of Ruby (from his involvement in 2001), the conferences, and all of the various projects he’s worked on with Ruby. Rich always has fun stories to tell and I enjoyed his talk immensely. I won’t go through the entire chronology, but he ended by stating that the community needs to develop tools to deal with the dynamic nature of Ruby in order for wider adoption of the language, though he did note that Ruby is becoming mainstream. He also announced HotCocoa, a DSL for Cocoa application development.

Mike Furr spoke about issues he encountered when writing a Ruby parser for his DRuby project. These were somewhat interesting traps, pitfals, and corner cases for where the language is ambiguous. His slides are available here so you can see specific code examples.

David Keener walked through installing, configuring and running JRuby. Unfortunately, I have no interest in JRuby. I started working with it at my previous job to add Ruby scripting to a Java application, but since I no longer program in Java nor have an operational environment that is setup to deploy Java, I just don’t care.

Tools for your Ruby toolbox by David Bock was an interesting tour of three Ruby projects: StaticMatic, Sinatra, and GServer. StaticMatic looked interested for static website development, but then Mike Clark wrote about Webby and it looks even better. Sinatra appears to be a very light weight alternative to Rails and in combination with a static web site tool like StaticMatic or Webby could be extremely useful. GServer is a generic server which takes some of the pain out of setting them up. Dave’s an engaging speaker and I always enjoy his presentations as well as speaking with him in the hallways at conferences.

The second day of Lightning Talks was even better than the first. Soren Burkhard from Hawaii Business Consulting had a great overview of starting your own business. Glenn West spoke about several Rails plugins that he uses on a regular basis: ActiveScaffold, Role Requirement, ActiveAuthentication, File_column, PDFtoRuby, DotR, and Tabnav. Jesse Shock from Engine Yard spoke about high availability planning: multiple sites, geographic diversity, data partitioning, sharding, etc. He said you need to establish costs up front so the customer knows which availability techniques they can afford. Yehuda Katz, also from Engine Yard, spoke about testing (in the context of Merb) and how you should use BDD for internal as well as external interfaces. The last of the lightning talks was by Bryan Liles on how to be a manager, his slides are available here.

Finally, Stu closed out the conference with a talk on bad Ruby. Overall, Ruby is good but that there are some bad practices/decisions that could come back to bite us later as Ruby adoption grows. Some of the examples he provided were: constants (you can’t change them so testing becomes difficult), class attributes (prefer instance attributes on the eigenclass), direct access of instance variables, and proc workarounds (e.g. passing more than one block to a method). The code examples from his talk are available here.

Luis de la Rosa was kind enough keep track of all of the URLs that folks were throwing around and has posted them here: – delicious: – magnolia:

Overall, it was a great conference and I look forward to next year’s RubyNation in June 2009.