
So after having a few hours to decompress from the conference here are the ideas that stuck in my head.
Technology
Rails 2.1
Kind of obvious, but I’m really impressed with the new version and want
to move to it as quickly as possible
Git
In the past 2 months the entire Rails ecosystem has moved to Git for
version control. It might not be in OpenSourcery’s best interest to
move to Git but anyone who works in Rails here is going to need to know
it.
MagLev/Rubinus/jRuby
Avi Bryant was giving a great demo of MagLev which is Gemstone’s commerical Ruby VM and object database. There are some extremely smart people working on making Ruby faster.
Vertebra
Will definitely pay attention to the server configuration management tool that EngineYard is working on.
Sinatra
I got a cool demo on a very lightweight framework for Ruby called Sinatra. I was really impressed with the simplicity of this framework and want to investigate it more. It might be a better tool for rapidly prototyping a new site
Merb
*Everyone* was talking about Merb (another Ruby framework). I really should get around to finally looking at this.
RSpec
I’m definitely going to use this instead of test/unit for the next project I start from scratch.
mod_rails
Consensus seems to be that this isn’t ready for prime time but I will be keeping my eye on it.
Marketing
Networking
I talked to about 50 people about OpenSourcery. I didn’t meet anyone who had heard of our company at the conference and I’m hoping I made a good impression with the people I did talk to. Doing all this
networking was really hard for me and I think I need to go off into a cave for a few days to meditate
Small Projects
Several people recognized me from a local bike site I set up which shows the power a very simple project can do to boost your name recognition.
Startup Consulting
A lot of companies were having success offering “startup” packages. Basically a fixed price, fixed duration project to get a prototype working. The packages were mainly about a week of work. Start on
Monday deploy the finished prototype on Friday and have the client work on site. I love the constraints put into the project by getting a prototype deployed on Friday and would love to bring this to OpenSourcery.
Marketing yourself/your company
I wanted to figure out what the difference was between myself (who has no influence in the Rails community) and the people and companies that do. I spent a lot of time talking to people about how they marketed themselves/their companies, how they spread their ideas, etc. Based on my very unscientific discussions the people that make an impact in the community spend about 20 hours a week marketing themselves. (Although they would never use the term “marketing”). Some people spend the majority of this time blogging, some writing open source tools, etc. I figured that the amount of time people spent doing this was pretty high but it was interesting to get an actual number. Some of the people run their own businesses and spend about 20 hours programming, and 20 hours on these other activities. Other people spend 40 hours at a day job and another 20 hours on nights and weekends.
Photo by Duncan Davidson
Worst Code Ever
Presented a ton of slides of bad code and their refactors. Most of the “bad” code was simply people reimplementing that already exists in a library. OK, I admin I’ve been guilty of a lot of the stuff they showed at some point in my Rails career.
Engine Yard’s Configuration Management
Ezra introduced a new tool he has been working on to replace Puppet called “Vertebra”.
Vertebra is basically a distributed framework to configure servers overJabber (but it can do a lot more). The messaging server is eJabberD (Erlang) and each node has a Ruby client on it. Server configuration is kept in a distributed version controlled in memory hash table. You can upload an apache configration for “3 weeks in the future” and the system will load that up when the time comes. You can pull up any version of a configuration file whenever you want.
Ezra gave a demo of connecting to his clusters over Jabber. Ran command that returned top info on every node in the cluster in a few milliseconds. (1000’s of servers)
Vertebra also has a built in workflow controller which coordinates commands to move slices to different servers. A person can be injected into the workflow to approve or disapprove some automated action.
Vertebra can also be used as a distributed computing environment. You can write a Javascript or Ruby application to query the cloud and do something for instance:
“Load MySQL on the first available server with enough free RAM” “Run this expensive algorithm on the least busy server”
Configurations happen in atomic transactions.
This is currently vaporware but will be released sometime this summer.
EngineYard also introduced EngineYard Express which is a vmware image of their server environment that people can use to mess around with.
Lighting Talks
A few of the interesting ones that caught my eye:
acts_as_iphone - gives you a bunch of tools to write an iphone view layer that looks like an internal iphone app
dev.smartleaf.com - permissions system applied to models
restful_workflow - DSL to create multi-page workflow interactions
Kablame - Produces list of the people who have written the most tests
for your application
Writing an app in 48 hours
Basically an advertisement for railsrumble.com and how small groups of people working in rails can create entire applications. I so want to do this next year.
Rails core team Q&A
Lots of questions about why they moved to Git, how’s the dev process changing. “It’s a lot easier to merge patches, nothing else has really changed”
When are views going to be in plugins?
“Views are never going to be in plugins, you can use engines”
What do you think of Django?
“I don’t use it in my day job so I haven’t looked at it very deeply”
Photo by Duncan Davidson

Jeremy Kemper - Rails 2.1
This was supposed to be the technical talk that DHH didn’t give. Rails 2.1 has had 1400 contributors, 1600 patches, and 9000 comments. They have completely ditched Trac and SVN for this release and have moved to Github and Litehouse. Most of the major rails plugins have moved to Git
as well.
New Features in 2.1
Timestamped migrations. Migrations now look like:
20080523_add_new_column.rb
This will allow people working in different branches to not have problems merging the migration directory.
- Completely seamless timezone support which looks to be implemented really well
- Memcached is included in Rails and used by default in a lot of the
- caching mechanisms
- Dirty Objects - We now know what fields have changed on form
- submissions
- Lots of ActiveRecord tweaks
Currently Ruby 2.1 is running on JRuby, Ruby 1.9 and Rubinius. The MySQL and PostgreSQL drivers are close to running on 1.9 as well. Jeremy expects that the typical Rails app will see a 20% speedup by
moving to Ruby 1.9
Getting Git
Git has really been the talk of this conference. It seems like every plugin and application that was talked about is doing its development on Github. This was a great talk over the internals of Git and a tutorial on how to use it.
Scaling Rails
Panel discussion on scaling rails featuring, Rails Machine, Engine Yard, Twitter, and AOL.
Lots of interesting things talked about here are some of the things I remembered:
- Don’t scale up front
- Don’t worry about how many queries per day. It’s the spikes that happen in a few seconds that will kill you
- Use Ganglia
- Practice “test first sysadmining with nagios”. Write a test for services that don’t exist and then watch the lights turn green as they are implemented
- Use Puppet. (Engine Yard is writing there own
- alternative)
- Facebook load tested their chat system by including it in a hidden iframe on all 70 million users home page
- Add config options that allow you to turn off expensive operations in the event of a slashdotting.
- Use JMeter for stress testing
- CouchDB and alternatives are NOT ready for prime time. No one recommended trying to use them right now.
- Do NOT shard your database. It’s too complicated and you’re better off throwing more money at hardware
Lighting Talks
Tons of demos. Some highlights:
Rubber
Uses capistrano to provision and deploy your App on an Amazon EC2 Server.
RAD - Ruby platform for creating code that runs on Arduino microcontroller boards.
Small Things, Loosely Joined
Create as many small applications as possible
Testing framework shootout.
There are 12 testing frameworks in Rails. This is an evaluation of 3. Rspec, Test/unit, Shoulda.
Usage of these 3 frameworks:
Rspec: 55%
test/unit: 30%
Shoulda: 12%
Most of the differences are “superficial”. Almost everything you can do in one framework you can do in another. If you like writing tests in a more English like syntax use Rspec. If you want to write Ruby, use test/unit. I thought this was a great lecture and want to mess around with Rspec and Shoulda some more.
Kent Beck Keynote
Kent Beck has popularized a lot of things over the years. Unit testing, XP and Agile, Design patterns
“Anything I’ve done that is worthwhile has taken 20 years”
His talk was just a handful of stories about his life that led to his development of xp, design patterns, and unit testing.
OK, off to another after party…
Photo by Duncan Davidson

Joel Spolsky
Joel Spolsky talked about how to design great software. His formula
was:
- Make Users Happy
- Obsess over Aesthetics
- Follow the Culture Code
Joel believed these 3 things separate the iPhone’s from the Motorolla’s and the Angelina Jolie’s from the Uma Thurman’s.
His suggestions to make user’s happy was to give them control (psychological term: agency). An example used was the Amazon checkout process which allows you to follow your own path (good) and the Abercrombie process which forces you to follow their 4 step process (bad). Obsessing over aesthetics is what allows French apartment buildings to still be desirable 200 years after they were. Culture Code is a term coined by a consultant to General Motors who created an appearance of safety in SUV’s by adding lots of cupholders and soft lines (there’s a lot of research why these two design choices drastically improved the sales of the Ford Explorer)
Entrepreneurs on Rails - Dan Benjamin
I was hoping he was going to talk about his successful startup Cork’d but it was more about the nuts and bolts of starting a business.
Rewriting Yellowpages.com in Rails
Yellowpages.com is the 33rd most popular site on the Internet with over 2000 requests per second. This talk outlined the process AT&T used to do the redesign.
- 20 people involved in the project (4 developers).
- Went from 250,000 lines of Java code to 14,000 lines of Rails code
- Scalability was good enough with the initial Rails version
Early into the project the team was halted by “decision paralysis”. No one could agree on the functionality to develop in the redesign. One way they solved this was to identify a “project lead” who was responsible for making all decisions about the product. She accomplished this by meeting with people individually rather than having big meetings.
- Deployed with nginx, mongrels, memcached on 50 servers that each have
4 processors and 14GB of RAM. Oracle database.
- Created a service architecture in Rails as well. The “front end”
talks to the internal webservice over REST and JSON.
- They don’t use database migrations. DBA’s handle all database changes
Data modeling vs. Object modeling
A few guys did a 3 act play to illustrate the trade offs in a data model approach “each object is a table” and an object model approach “the way the data is stored is irrelevant”.
The example they used is creating repeating events on a calendar which is a problem I tackled on a recent project. (We took the Data modeling approach after a lot of debate).
The data model approach inserts an event into an events table for each repetition. The object model approach creates objects using Martin Fowler’s Temporal Expression pattern.
Usually the best approach is a compromise between the two.
Profitable Programmers
Panel discussion with the guys from Github, Topfunky, and Gravatar about creating profitable businesses. Nothing really new here but it was really motivating to see some nerds who were creating successful projects. It seemed that each developer had multiple side projects that failed before landing on one that worked.
Creating Micro Applications
You should create a website that you can launch in 8 hours. It allows you to ship something and break procrastination habits.
Examples:
Foamee.com
Twistori.com
Ruby Hero Awards
Presented some awards to members of the community
DHH - Keynote - “Surplus”
“Rails has an enormous surplus over every mainstream environment”
Smalltalk and Lisp have a higher surplus than Ruby but no one is making money off them.
Why is Rails so much more productive than everything else?
- Removed flexibility
- Technology matters
“Eventually Rails won’t be more productive than every other web environment”
It might be because people are taking features from Rails, or a better alternative comes about, or because Rails becomes the mainstream
What should we do while we have a surplus over all the other web environments?
1 options is to spend all the money we’re getting on hookers, fur coats, and gold rings.
We should spend it on using the surplus to build things that last
Suggested Book: “The Secrets of Consulting”
Beer Drinking
Tried to introduce myself and Opensourcery to as many people as possible. Networking is hard. One of our sales people suggested that the key to successful networking is just asking a lot of questions.
Photo by Duncan Davidson

Twitter can play an important role in communicating with your users. There are only a handful of companies that are able to strike a good balance between promotional and personal tweets. Two of my favorite examples are JetBlue and Zappos.
[Read more →]

Creating a blog for your startup or project is a great way to communicate with your users and get more content indexed by search engines. Wordpress has many features that help create a well optimized site but much of that functionality is turned off by default. Here’s a step-by-step tutorial on how to maximize the amount of traffic your blog will get from search engines.
[Read more →]
Working on a new blog… Should be up and running in a few days.