Jake Scruggs

writes ruby/wears crazy shirts

A few days late on this because I've been sick all weekend. There just has to be a way to do climate control in conference centers in such a way as to not destroy the planet and, more importantly, Jake's health. I seriously wore black jeans and 2 shirts on hot summer days and yet I was shivering and caught a cold.

But let's get to last day of Rails Conf 2010 and my exciting adventures therein. (tweets are in italics)


Woke to "Relax" by Frankie Goes to Hollywood. Which is good 'cause my heart was pounding. Settled it with some bacon. #railsconf
Yep, I could feel cold coming but I was in denial. I ran into Neal Ford at breakfast and we chit chatted about this and that and then he mentioned that he had read my blog post from yesterday. First thought: I published that sucker at 1am this morning and he's read it already? Second thought: Oh shit, what did I say about his keynote -- I think I called him a jerk at some point. But my brain was foggy and so I wasn't quite sure what I had said. Later I looked and, yes, I had called him a jerk. I was kidding! If only that was the most embarrassing thing I did that day...

Pro tip: Have the hotel watch your bag for the day while your at the last day of the con #railsconf
It's true. This year Rails Conf was nice enough to have a section for people's bags at the conference but they don't always.


Twenty-Five Zeros - Robert Martin

So, as many of you know, I started out at Object Mentor (as an unpaid apprentice/intern) and I'm a bit of an Uncle Bob fanboy. As these next tweets can attest:

  • Bring it Uncle Bob! #railsconf
  • Good to see Uncle Bob still starts all his talks with some hard core physics. #railsconf
  • HOLY SHIT!!! Uncle Bob opens by showcasing some impressive drum chops. #railsconf
  • RT @duncan: Photo of @unclebobmartin on drums at #RailsConf (ISO 12800 in the dark) http://www.flickr.com/photos/oreillyconf/4688547550/
  • @spiceee call him (@unclebobmartin) butter cause he's on a roll #railsconf
  • #railsconf haiku Uncle Bob holds us | We are enraptured by him | Rambling? I think not!

Great speaker, although I had to de-follow him on twitter as I'm not into right wing politics.
  • If we have computers 10^25 times more powerful than 1960 then why no AI? Always seems 10 years out. #railsconf
  • Our software has not improved anywhere near 25 orders of magnitude unlike the processors @unclebobmartin #railsconf
Funny how social sciences never really advance as fast as the hard ones. I think of programming as a 'soft' science because the hard part is NOT getting a computer to understand the code it's describing intent to humans.
  • .@unclebobmartin "What language do you know that still has goto?" guy in crowd: "PHP" #railsconf
  • A brief tour of programming languages with @unclebobmartin #railsconf
  • RT "vi? what the hell?" - @unclebobmartin #railsconf

Vi, Emacs, TextMate, etc. all seem like some weird time warp compared to the awesomeness of the language. It always seems like a really good Ruby IDE is just around the corner.

  • RT the point emerges. multicore processors pass the buck to us. future == parallelism #railsconf
  • Real innovation in software may be driven by the move to parallel processors @unclebobmartin #railsconf
  • .@unclebobmartin is hawking #sicp Yeah, yeah, yeah. I'm getting to it. #railsconf
  • #sicp is a page turner? Really? @unclebobmartin #railsconf

Structure and Interpretation of Computer Programs is so often praised that people in the know just refer to it as sicp. It's available for free here: http://mitpress.mit.edu/sicp/ I'm thinking of working through it in clojure. And who doesn't like LISP? Uh...

But his point about multi-core is important (although it has been made before). A lot of people took his talk to mean that Ruby will lead the way into the future of programming. I think his point was that the people at Rails Conf will lead the way -- but probably not in Ruby. I've seen a few frameworks for handling concurrency in Ruby and they all suck. Why? Because you have to remember to use them all the time. All it takes is one programmer mutating a state somewhere in your code and now you have an intermittent race condition bug. If you're really going to do concurrency you need a language that treats all mutation like a disease that must be contained in explicitly declared blocks. And that language is not Ruby.

But I think we still have a few years left before we all have to get functional, so that's nice.

  • There's 2 prominent black dudes in the Ruby community. I just gave a hardy hello to one and referred to him by the other's name. #railsconf
  • Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. Sorry. #railsconf
In my defense: I'm an idiot.


You May Also Be Interested in: Implementing User Recommendations in Rails - Matthew Deiters

So Amazon makes 25% of its sales based on recommendations. I was talking with a friend from Groupon the night before and he was telling me that just guessing the sex from a person's name (and targeting what they get offered) has led to a significant sales boost. If you're not thinking about how to intelligently recommend to your customers, it's a sure bet your competitors are.

  • Aaahh the Hoff's crotch is coming at me! #railsconf
  • Oh it was just an animated gif. #railsconf
I urge you not to click this link: http://www.post-literate.com/gerpunx/archives/2005/01/prepare_to_lose_your_mind.php
I think Deiters was trying to make a point about recursion in SQL being bad, but the image made my brain stop working.

  • Gem Neo4jr-social is a graph db that uses JRuby but isolates it in a Jetty server so you don't need to use JRuby throughout #railsconf
  • You can use Neo4jr-social to get friend recommendations and degrees of separation pretty easily. @mdeiters #railsconf
  • To which Charles Nutter (@headius) responded @jakescruggs Jeez, why not just use JRuby? So much pain could be avoided.
  • I really want @mdeiters slides for the explanation of all these crazy graph relationship terms #railsconf

Graph db's are amazing for relationship stuff. You can do "what's my degree of separation from X" stuff in milliseconds. And Neo4jr-social looks like a pretty cool way to do that stuff in a readable way.

  • You have a lot of money lying around in your data - pick it up! @mdeiters #railsconf
  • RT "This conference is the NoSQL conference. But remember: It's not No SQL. It's Not Only SQL" -- @mdeiters #railsconf


Really good talk. Lots of info in the slides:
http://assets.en.oreilly.com/1/event/40/You%20May%20Also%20Be%20Interested%20in_%20Implementing%20User%20Recommendations%20in%20Rails%20Presentation.pdf


Lapidary: the Art of Gemcutting - Nick Quaranto

  • RubyGems.org has a nice versioned API @qrush #railsconf
  • 'gem yank' to remove a gem. Didn't know you could do that. There's an undo too. Nice. @qrush #railsconf
Versioned API and an 'undo' -- cool.

  • gem webhook projects suggestion - gem tarballer @qrush #railsconf
  • gem webhook projects suggestion - distributed testing service @qrush #railsconf
  • gem webhook projects suggestion - change log service @qrush #railsconf

All these ideas are great. I command the readers of this blog to go implement them now... Please?

  • Gemcutter moved from postgres to redis @qrush #railsconf mostly
  • Lots of Gemcutter clones out there @qrush #railsconf
  • .@qrush wants to add better indexes, dependency resolution, and support bundler in RubyGems.org #railsconf
  • .@qrush also wants historical data for every gem with download graphs. @qrush #railsconf
  • github.com/rubygems/rubygems No longer on svn. @qrush #railsconf
All very cool. Nick is clearly firing on all cylinders -- he deserves a raise.

Yehuda Katz - showed up and thanked Nick for his contributions to the Ruby community. I was in quite a few talks where he made it a point to thank the speaker for things he really liked. Stand up guy that Yehuda.

RT: OH: "Firefox is the new IE." #railsconf (via @glv)
Ouch. But kinda true.

  • The Cold/Hot/Cold/Hot/Cold/Hot/Cold/Hot of this week has made me weak. Picked up some knockoff airborne at the CVS #railsconf
  • Getting sicker... Must consume more vitamins and wear more clothes. Covering up crazy shirt now. :( #railsconf
  • Must. Fight. Sickness. At. The. Airport.
At that point the sickness overtook me so I found a quiet place and laid down. So I missed the last keynote -- which I'm about to watch now.

And I'm back. Good Keynote. Actually, all the keynotes were pretty darn good this year. And so were the sessions. Shortly before I got sick on Thursday I remember thinking "This is probably my favorite Rails Conf."

Gary Vaynerchuk's talk is probably summed up best with this (made up) title:

Relationships, relationships, relationships, (and swearing) - Gary Vaynerchuk

Here's some memorable quotes and thoughts:

"Giving a Fuck is coming on strong"

"Stop using the space (twitter, facebook, etc) just to put out fires"

"If I get a hundred more followers I'll donate $100 to Haiti - Hey Fuck-face just donate $100 to Haiti"

"Everything you're doing is being documented"

"It's just getting real hard to hide"

In 2005-6 everything was free 24/7/365. Now people are being trained to pay for things.

On consulting for huge companies: Its stunning how little most big companies give a crap. Most CEO's want to keep the stock price up for 3-5 years and get out with a huge payday.

Getting people to your site is awesome but "Content is always king"

"What's the ROI (Return On Investment) in social media? Well I don't know fuck-face what's the ROI in having a real relationship? Meanwhile you're paying for billboards..."

Old businesses: "They lived under small town rules" - if you screw someone you're going out of business. Those days are coming back.

Corporations: "We don't want to open this up because people could say our product's bad"

Gary on the future: "I'm all in -- I'm bullish on human beings."

You can find Gary's Keynote along with all the others at: http://www.youtube.com/view_play_list?p=393ECE649BB3813D or on iTunes.


Well that's the end of my Rails Conf 2010 coverage. Thanks for reading.

Only 40 tweets today (re and otherwise). I must be slowing down in my old age. Tweets are in italics.

Today's morning music was "Bulletproof" by Pop Will Eat Itself. Cram that in your head @ryanbriones
Ryan was complaining yesterday that he had the theme from flash stuck in his head all day because of me. That sounds awesome! I had a Daft Punk song stuck in my head all day today and I was a better person for it.

Trying to work on my Lightning Talk. Lightning talks are usually the best part of any conf so it better be good. 4:25 today #railsconf
Lightning talk is finished. Title: "ActiveMQ and ActiveMessaging: I've Experienced the Pain So You Don't Have To" #railsconf

Yeah, I got up, worked out, ate eggs wrapped in cheese and bacon, showered and then realized I had gotten up an hour early by mistake. Opportunity! So I worked on the lightning talk. To be honest, I was kinda pissed at myself for the boneheaded alarm mishandling but if it doesn't make you money or happy, you need to let it go.

Don't forget to read my sham of a blog post about #RailsConf Day 1: http://is.gd/cIdLZ
So very meta.

iPod at #RailsConf Keynote has been set to "BadPopCountryMusic" wtf mate?
Seriously. Is there anything worse than top 40 wanna be country music?


Creativity & Constraint - Neal Ford

"Some of the 'facts' in this talk may in fact be harmless lies" - disclaimer of @neal4d #railsconf
This disclaimer needs to be in front of all keynotes.

I'm Not Old, I'm seasoned. @neal4d #railsconf
Me too buddy, me too.

"The right community to suggest something really weird to" @neal4d #railsconf
RT I so wanna go to Neal Ford's halloween party! #railsconf
Constraints are liberating: @neal4d excuse for showing cool Halloween photos at #railsconf

His Halloween party pics were off the hook. Did I ever tell you I took Neal to his first day lunch at ThoughtWorks? You'd think that would get me a Halloween party invite but memories are short. Jerk.

What constraints help? Maybe not static typing... @neal4d #railsconf
Double true.

Hemingway and the Ex Pats in Paris wore stupid hats #railsconf
Well they do. Americans in berets look stupid. There -- I said it.

An empty canvas is a daunting task @neal4d #railsconf
The invention of the camera made painters do something different besides making it look real. @neal4d #railsconf
The Camera gave painters freedom from the responsibility of representation. @neal4d #railsconf
Our camera is Java Enterprise Development - they can crank out vanilla apps so we can move on to interpretation @neal4d #railsconf

Interesting. I think he meant no offense to Java devs in specific but much offense to the mindless and complacent.

.@neal4d has a crazy terse 3 line Quicksort implementation #railsconf

Yeah, I had no idea what it did. You'd need a team powerful enough to turn goat piss into moonshine if you're going to check that in.

Non-obfuscating density is a characteristic of art in code @neal4d #railsconf

But how much density is too much? It's a thin line between art and crap.

RT #railsconf @_why : when u dont create things, u become defined by ur tastes rather than ability. ur tastes narrow & exclude ppl. so create

Neal ended up his talk with poignant quote from _why. Pour one out for the homies who couldn't be here.

Sponsored Keynote: Engine Yard's Open Source Love Affair - Evan Phoenix

Dr. Who Theme! Played live by #railsconf ers
Huh?

Did Evan come on as a rock star or a parody of a rock star? you decide. #railsconf
Rim shots at a keynote? #railsconf
Talk show format is... interesting Will it pay off? @evanphx #railsconf

A 'Late Night with X' theme backed up by a live band. And a game of password.

.@evanphx "Perl is the word you were looking for" Dr. Nic: "Never heard of it." #railsconf

Well played Doc.

Enjoyed a pleasant 10 minutes of nothing with @evanphx #railsconf

I really did enjoy it. Better than somebody coming out and saying "hey we bought this slot with our sponsorship and we're awesome."

And then Twitter went down. Again. So I had to type into a document instead of live to the world. It felt weird and dirty.

Ruby on Rails: Tasty Burgers -- Aaron Patterson

First, you have to download his slides just for the introduction: http://tenderlovemaking.com/railsconf2010.pdf

Two samples to entice you:

Hello this is @tenderlove

Nom

Btw his outfits put mine to shame. Today's was a deep magenta velvet jacket with a 70's tie and an ironic mustache. Or a sincere but poorly chosen mustache. There's a point when intense silliness becomes serious and upon that point Mr. Tender Love Making is doing an interpretive dance.

Topics he talked about:

sqlite3-ruby and Sqlite

Did you know you can have a virtual file system in Sqlite? Me neither.

The new version of sqlite3-ruby is x1000 faster than before (1.3.0 vs 1.2.5)

Mmap

Mmap is a gem that lets you treat a file like a string. So if you need to pass in a string to something but don't want to read the whole file into memory use Mmap. Pretty useful tool to have in your back pocket.

Rack

Unknown but useful rack trick: Rack will call 'each' and 'close' on the return object. So you can pass it an array or file and things will work out just fine. Handy.

He speculated that Rails could take advantage of this and return html in pieces (as it's rendered) to make things faster. Would be hard to do but awesome.

JSON is a subset of YAML -- I did not know that. Did everyone else? Really? I knew you all were talking behind my back.

He left the stage with a plea for the audience to dig into rails and investigate the 'Tasty Burgers.'

But wait, there was some advanced shenanigans when he called Evan Phoenix to ask him a question. During Evan's talk! Those guys are the kings of wacky.


Redis, Rails, and Resque - Background Job Bliss by Chris Wanstrath

No Slides at all! But still good.

"Redis is all we really wanted it for a long time but we didn't know we wanted it"

Redis is a key value store for data structures @defunkt #railsconf

This doesn't have anything to do with Chris Wanstrath's appearance but comical mustaches are the new black. Except that he has a mustache now. And it looks silly. Not that I can complain about peoples fashions sense.

Chris is totally in love with Redis and Unicorn because their maintainers are awesome, active, and their software is pretty bullet proof (it stays up). Which is kinda important to Github.

He advises you to background everything you can and I agree.

Resque is the queuing system they built on top of Redis. I've used it at Groupon and seen it used on Mad Mimi and it works well. Plus the built in Sinatra web UI provides an amazingly informative look into the live queues.

Github is on Ruby Enterprise Edition now. So is Backstop (my company). And everyone else at Ruby Conf. It just surpassed ironic mustaches as the new black.

Chris is determined to not add any queuing features to Resque. He wants to let the plugins do that and there are more than a few you should check out. I'd Google that for you but I'm tired.


Rocket Fueled Cucumbers - Joseph Wilk

So Joseph's cuke build was getting out of control as it grew. Taking more than 4 hours. He solved this by using EC2 and Testjour (or Hydra) to parallelize the suite across 20 machines and got it down to 11 minutes. But it cost $3K a month. Yipes.

He recommends stubbing out slow services and maybe even caching the db (but didn't specify how).

He's excited about using the cucover gem to do "Lazy coverage-aware running of Cucumber acceptance tests" Kinda like a super smart autotest.

He mentioned this post as required reading that he doesn't necessarily agree with: http://jamesshore.com/Blog/Alternatives-to-Acceptance-Testing.html

Capybara can use envjs gem to run javascript tests in cuke. Which is very cool. Capybara-envjs on github


Dear Lazyweb, how do you get a showoff presentation up on Heroku? I'd like to put my lightning talk up. #railsconf
Posted this before my talk. Still have no answer but if all the cool kids can do it I'm sure I can figure it out.

Lightning Talks

Lightning Talks start now and I'm giving one. Come to Ballroom 1 now! #railsconf
Yep.

RT client_side_validations http://bit.ly/9gEfuL #railsconf
Interesting gem. Way too much live coding for a lightning talk - dude was brave. He barely made it to the end and almost missed giving out the gem name. Live coding seems like a good idea but is to be avoided in presentations. Ignore my advice at your own peril.

Don't hide costs from the client -- it leads to bad relationships #lightningtalks #railsconf
Custom filters based on metadata looks cool in RSpec 2 #lightningtalks #railsconf
gem install surveyor for easy surveys in your rails app #lightningtalks #railsconf
surveyor gem can ask some complicated questions with easy. #lightningtalks #railsconf
RT Mind. Blown. http://bit.ly/90D1ur Now that was a lightning talk by @igrigorik. #railsconf

Yeah the schema free sql database thing was a nice antidote to all this NoSql hype.

http://bit.ly/RwandaOnRails looks like an interesting way to track charity money's effectiveness #lightningtalks #railsconf
"Yes and..." is an important part of improv and pairing. I totally agree. #lightningtalks #railsconf

My lightning talk went well and as soon as I figure out how to get it up on Heroku I'll give you (dear reader) the url.

Update: Here they are: http://active-messaging-pain.heroku.com/


Keynote - Derek Sivers

In 2007 Derek took a lot of heat for his article entitled: "7 reasons I switched back to PHP after 2 years on Rails"
Which can be found here: http://www.oreillynet.com/ruby/blog/2007/09/7_reasons_i_switched_back_to_p_1.html

I remember reading it and thinking he was a moron. He gives a pretty good keynote for a moron so perhaps I should reevaluate.

RT The first follower turns a lone nut into a leader. - @sivers #railsconf
RT derek sivers shows this vid http://bit.ly/guHuz to talk about being a leader and starting a movement #railsconf

The talk was all about how he preferred his own PHP frameworky thing but how that couldn't scale and so he's coming back to Rails. And is excited about Rails 3. Also there was a lot about building community. We use our emotional brain to justify our rational experiences. But sometimes our emotional brain has access to things we don't consciously know (detailed in the book 'Blink'). There was more but it's late and I'm pretty tired so I'm wrapping this blog post up with a few more tweets:

Fogo de Chao ftw #railsconf
Drunk. Drunk on steak. Drunk on chocolate. In fact, I'm like a chocoholic except for alcohol.

I tweeted 73 times today. What the hell is wrong with me? When twitter went down in the middle of the day I panicked until I realized that things continue to exist even if you don't tweet about them.

Anyway, here's my thoughts on Rails Conf Day the First interspersed with relevant tweets in italics and director's commentary.
(Is this Lazy? Yes -- Bite me.)

Woke up to "Theme Song from Shaft" -- Bring it #railsconf
Set the old iPod classic to some inspirational music to psyche myself up for a day of interacting with strangers. 160 Gigs of storage -- take that solid staters.

I ate my customary breakfast of bacon topped with eggs, salt, and cheese and then was off to the castle-like mammoth Baltimore conference center.

Keynote - David Heinemeier Hansson

Number 1 Fave of DHH in Rails 3: Bundler. #railsconf
Nice to see some validation of my blatant fan-boy cheering on of Bundler. DHH loves it so suck it, haters.

DHH - "When I would swear Bundler was a piece of shit it usually turned out to be me not listing a Gem" #railsconf
Yep, just when I think it's Bundler doing something wrong, it's not. It's the canary in the coal mine telling you about gem problems in your app. As such it gets blamed a lot for problems out of its control.

DHH - "Hashes are great but we've kinda been drunk on them for a long time" #railsconf
The new ActiveRelation gets rid of hashes in favor of method calls (.order vs :order => ...) #railsconf
DHH - ActiveRelation makes building up queries much easier. #railsconf

The ActiveRelation stuff (covered in yesterday's post a bit) does a good job of fighting 'hasheritous' and making queries readable. No small feat.

If you just please your core users you create an impenetrable framework. Stepping away from that is what makes Rails 3 great. #railsconf
This may be the most important but overlooked thing about Rails 3. Keeping things easy to get into and read while increasing the power of Rails is a powerful combination that will increase adoption.

DHH is bashing on the old routes format: concise but unreadable. #railsconf
DHH - "there's just too much hashing going on" in routes #railsconf
DHH - The majority case is now complicated routes files and Rails 3 is trying to make them more readable. #railsconf
map.with_options is now a scope -- looks cool #railsconf

This is something like the 4th re-write of routes. But the emphasis this time is on readability. Which is awesome as almost all routes files were becoming impenetable piles of hashes that did some bad ass shit. Rails 3 increases the bad ass but adds some intentionality.

If you like the new stuff in ActiveRecord, thank @miloops, whose GSOC project integrated Arel. Great job Emilio! #railsconf
True dat. Mad props to Emilio.

@dkastner Why not use Ruby for configuration -- I understand it better than the pitfalls of yaml
I was responding to this: "Hm, so the question is, why are we using Ruby to define our routes? Do we really need loops and conditionals?" Basically I love config in Ruby for reasons stated above.

DHH's 4 faves of Rails 3: Bundler, Active Record Queries, Router, and ActionMailer #railsconf
The official @railsconf twitter account retweeted this tweet. I've really arrived.

DHH - "Mailers for a long time had a split personality" Half controller and model and the worst of both. Controller won in R3 #railsconf
Complaints that I and others have been making for years. Glad to see Mailers finally becoming one thing.

Signed permanent cookies in Rails 3? Neat. #railsconf
I had not heard about that.

DHH - wants asset pipeline for Rails 3.1 #railsconf
May I suggest http://github.com/aberant/css-spriter for creating sprites? as part of asset pipe-lining #railsconf

Would be cool to handle css, javascript, and images not as a bunch of junk in the public dir but as first class important things. Also, why not use css-spriter for creating sprites of your many images? Full disclosure: Css-spriter was written by some friends of mine. But they're real smart so you (and Rails) should use it.


Keynote - Michael Feathers

Hard - breaking dependencies to write usable tests in java/c# - Not so hard in Ruby @mfeathers #railsconf
Novices start out writing good code, but as they become experts they write complex code as they understand too much @mfeathers #railsconf
Big Ball of Mud from @mfeathers talk http://www.laputan.org/mud/ #railsconf
"Your commit history is a Gold Mine" Most change areas are important to know about. @mfeathers #railsconf
"Find the most executed path and hammer it" make it awesome and tested @mfeathers #railsconf

Hard to follow DHH's Rails 3 is ponies and rainbows talk with a thoughtful one but @mfeathers did a good job #railsconf

Michael's talk was good stuff but it did come after the excitement for DHH's keynote so I hope people could shift gears and appreciate his insights. He's not always the most dynamic speaker but "Working Effectively with Legacy Code" was an important book in my development as a coder so he definitely has good ideas.


Real Software Engineering - Glenn Vanderburg

Winston W. Royce wrote a paper entitled "Managing the development of large software systems" which is generally credited with starting waterfall. However it was actually designed to be a warning against waterfall software processes.

People who designed software engineering misunderstood 2 things: Software and Engineering @glv #railsconf
Royce: defined waterfall and said it would not work. The world saw the definition is easy terms and adopted waterfall. @glv #railsconf
Royce: An implementation plan keyed only to these steps (waterfall) is doomed to failure. @glv #railsconf
Of all the thing's in Royce's paper (that started waterfall) the easiest to understand was waterfall so it was adopted @glv #railsconf
There is no kind of engineering where you put something in one end and turn the crank. @glv #railsconf


I signed up for a Lightning Talk tomorrow at #railsconf I wonder what I'll talk about...
I should probably figure that out. Soon.


Build models and test them. Early bridge makers new this before they had the math to prove things. @glv #railsconf
In fact when math came along, it was incomplete and led to the Tacoma Narrows bridge collapse - testing would have helped @glv #railsconf
Mathematically modeling was introduced (to engineering) as a cost saving measure @glv #railsconf
The source code is the design of our system @glv #railsconf
Source code is math that does real work. @glv #railsconf
RT "SW engineering is the science & art of designing & making... systems that can adapt to situations they may be subjected to" @glv #railsconf
Agile processes are optimized feedback engines @glv #railsconf
RT Glenn Vanderberg is the Garrison Kellior of software engineering conferences. #railsconf

Good thoughtful stuff. Glenn later said to me that he's dying to give this talk somewhere where he isn't "preaching to the choir." Check out his slides for cool quotes at: http://assets.en.oreilly.com/1/event/40/Real%20Software%20Engineering%20Presentation.pdf


Lots of "Fail Whale" today. Twitter can handle Ashton Kutcher but not #railsconf
The dark time of the day when twitter went down. The horror, etc.


Metrics Magic - Aaron Bedra

Seems like people really like failing the build on bad metrics -- I should really get around to putting that into metric_fu #railsconf
Churn mentioned in @abedra talk can be found here: http://rubygems.org/gems/churn #railsconf

Churn is a gem extracted from metric_fu that looks at your source control to see which files change a lot (possibly too much -- god objects).

Liked @abedra talk on metircs - he focuses a lot on failing the build with metrics #railsconf

Check out Flack-jacket if you want to fail the build on poor metrics results: http://github.com/abedra/flack-jacket


Saw a "Save the princess, Save the world shirt" with a image of Link. Nice. #railsconf
Old Heroes ref (remember when that show was exciting? Me neither -- its been too long.) but still funny.

@dastels Totally -- I got a free pony plushy for signing up with http://workbeast.com/ Haven't seen any rainbow swag. #railsconf
Dave Astels was giving me (and the rails community) crap about Rails 3 being ponies and rainbows.


Garbage Collection and the Ruby Heap - Joe Damato

GC talk is cool. We really need to tweak our GC settings on REE to get better performance. #railsconf
Where are you leaking memory? Memprof knows. It rewrites your Ruby binary in memory to do deep awesome. #railsconf
memprof.com "a web-based heap visualizer and leak analyzer" Sounds good but site is showing a passenger error page now. #railsconf
@aslak_hellesoy Download the PDF @ http://timetobleed.com/ Looks better on your laptop

Joe's slides had poor contrast - luckily they were available online. Check 'um out, there's some good info there.

Garbage Collection and the Ruby Heap with Joe Damato was technical but still graspable. Slides here: http://timetobleed.com/ #railsconf
I'm old and repeat myself sometimes.

http://memprof.com should totally get bought out by @newrelic and the coolest performance site eva! #railsconf
New Relic totally owes me a %10 finders fee for this idea. It would be teh awesome.

Later http://memprof.com came back up and I looked around. Nice interface and cool site.


Ruby's Dark and Dusty Corners - Evan Phoenix, Charles Nutter

I loved Charles' 3 rules for threads:
1. Don't use threads
2. If you do, don't share state
3. If you share state, don't share mutable state

word.

Interesting super nerdy language implementation talk here in the "Dusty Corners" talk. Some important caveats. #railsconf
RT #railsconf : just say no to _id2ref!
"Memoized values are a memory leak." #railsconf
GC.start - MRI: sometimes helps, REE: better tuned not needed as much, JRuby, Rubinius, MAcRuby, IronRuby: May actually hurt #railsconf
More sophisticated GC implementations need more 'room to breath' but are faster. #railsconf
About GC: Memory is cheap, CPU cycles are not. #railsconf

GC is important, you should probably take some time to look into it if you need to make your app perform better.


Keynote - Yehuda Katz

Rails: Make hard things easy and impossible things possible #railsconf
Slogan stolen from Perl and modified.

"Find something that looks impossible and then do that" @wycats #railsconf
Both @wycats and I started programming in earnest in 2004 #railsconf
We both also used Front Page in the early days. It's like we're twins. @wycats #railsconf
Even if you are a total noob you can help @wycats #railsconf
Rewriting TMail and ActionMailer seemed impossible but it's done and in Rails 3 @wycats #railsconf
Lots of dudes without CS degrees and no followers on twitter so they were not in the 'in' crowd. But they are now. @wycats #railsconf
People say Ruby will never be as fast as C. Who wants to bet against the JRuby and Rubinius boys? Not me. @wycats #railsconf
The Secret to getting into the 'in' crowd: Almost nobody turns down an offer to do hard work. @wycats #railsconf

A really inspiring speech by Yehuda. I had no idea that he, like me, didn't have a CS background.

Ruby Heroes Awards Ceremony - Gregg Pollack

Congrats @qrush on your Ruby Hero award. Well deserved. #railsconf
Congrats on your Ruby Hero Award @wayneeseguin How could I live without RVM? It wouldn't be worth it. #railsconf
RT 2010 Ruby Heroes: @josevalim, @qrush, @fxn, @tenderlove, @wayneeseguin, @seacreature -- well deserved, great job! #railsconf
Take the initiative this year. Don't ask permission. Think it, write it, ship it. @greggpollack #railsconf

The Ruby Hero Awards are very cool. Kinda made me feel like a slacker but that's OK. Do as much as you can and the rest will sort itself out is my motto.


Long day of shaking hands and kissing babies for an introvert. Time to hide in my room and call the wife. See ya tomorrow #railsconf
Yep.

@polgardy Perl was credited in the talk, but the slogan was improved upon.
Fred was asking about the Perl slogan mod.


@dastels GC has, sadly, not been 'solved' in Ruby. It's finally getting the attention it deserves.
@dastels Why so long to take GC seriously in Ruby? A. You solve problems when you need to. B. The East/West Ruby/Rails divide.

Dave wanted to know why all the tweets about Garbage Collection.

Time for bed. Thanks for reading this sham of a blog post.

Here I am at Rails Conf 2010 in scenic Baltimore, MD and these are my thoughts on the tutorial day.

The Rails 3 Ropes Course - Gregg Pollack and his band of minions (Nathaniel Bibler, Thomas Meeks, Jacob Swanner, Tyler Hunt, Mark Kendall, and Caike Souza)
The worst thing about this presentation is that is was so informative, slick, and well paced that it spoiled me for the afternoon session -- But more on that later. Gregg et al. took on an ambitious task and knocked it out of the park. They discussed a number of new things in Rails 3 and had 5 labs to work through. Every time I was just about done with my lab time was just about up and we moved on. Speaking as a former teacher, that is damn hard to do.

Details:
When setting up a Rails 3 app you can do some interesting things like skip active record, or test unit, or git (What? By default Rails 3 will create an intelligent .gitignore file for you as every Rails developer uses Git (heh)). You can do things like this because of the increased modularity of Rails 3.

The new routes syntax is fun:

  • match 'login' => 'session#new', :as => 'login', :via => :get
  • get '/articles/(:year)' => 'articles#show' # The :year is an optional parameter as it is inside parens.
You can add constrains like so:
:constraints => {:user_agent => /iphone/}

In Rails 3, Bundler is used to manage gems. I've used bundler in a few production apps now and I'm totally in love with it. Bundler does what config.gem was supposed to in an easy and awesome way. And you can use it in 2.3.5! Bundler Rulez! OK, I'll stop now.

ActionMailer now extends from AbstractController.

O.
M.
G.

Now mailers aren't this weird other world that's kinda like a model but kinda like a controller. It uses the same underlying code as the controllers. This is a long needed refractor that has enabled better syntax and less confusion.

ActiveRelation is the new bad-ass relational algebra querying syntax where you can do cool stuff like:
Post.where(:author => "Joe").include(:comments).order(:title).limit(10)

To sum up ActiveModel, all of these things that used to be tightly coupled with ActiveRecord:
  • Callbacks (before and after hooks)
  • Dirty
  • Errors
  • Naming
  • Observing
  • Serialization
  • Translation
  • Validations
Are not anymore and you can use them in ordinal Ruby objects just by including a mixin. Sweet.

Rails 3 assumes any string is an XSS (Cross Site Scripting) attack unless you tell it otherwise and escapes it. To output html in a view, you'll need to use the 'raw' method.

Unobtrusive JS is now used in all the view helpers so if you've ever felt bad about using :confirm => "Are you sure?" but did it anyway because it was just so easy, you can put down that bit of guilt as it all reference a proper Javascript file and with no inline JS.

Rails 3 truly is ponies and rainbows.


Rails 3 Deep Dive - Jeremy McAnally

Tweet from Jeremy McAnally (@jm) 2 days before Rails Conf: "Why wouldn't I catch the flu right before RailsConf where I'm supposed to talk in front of people for a few hours? *sigh* Vitamin-C, engage!"

So the first 10 minutes were about how Rails 3 is basically a Rack app. And then, all of a sudden, we were in a lab. He gave us 3 possible things to build with either Rack or Sinatra. With no explanation of how to do so... So I started to google for Rack docs, but 2 thoughts occurred to me:
1. I could google on my own time.
2. This does not bode well for the rest of the talk.

So I bailed. It could have gotten awesome after that, but the tweets were not kind.

I ended up at:

Contributing to OSS - The 8 Steps for Fixing Other People’s Code - Dr Nic Williams

Which was... Well right after I showed up he had a 'lab' where you were supposed to meet people until you ran into a foreigner. In a way it was valid to have us meet people as open source is all about collaboration. In another, much more real, way it seemed like he was trying to pad a short presentation. He encouraged us to find an open source project an write a 'how to contribute' section for it because almost none of them have one. I then realized that metric_fu doesn't have such a section and wrote one. After that there was some floundering around with git and everyone trying to use the wireless at the same time. I wandered away.

And into an awesome discussion at BOHconf (an open spaces, or 'un-conference' that is running concurrently with Rails Conf at the Baltimore conference center) about fast tests. I got way more out of that half hour than the previous 3 hours combined.

Things I'm planning on looking into:
  • http://grease-your-suite.heroku.com/
  • Turning off your atime and journal data write back for faster file IO (don't try this in prod).
  • Looking at hard disk vs cpu activity during tests.
  • Tweak your test database to delay time to write back and increase its cache size
  • Using Hydra to parallelize your suite -- http://rubygems.org/gems/hydra
  • Specjour - RSpec with bonjour

Things that came up which I hardily recommend:
  • Use Ruby Enterprise Edition and set your GC settings to be absurdly wasteful.
  • Get rid of fat factories (Code that generates a model with lots of models hanging off it -- all of which need to be created in the db).
  • When using Factory Girl (or any other factory that generates ActiveRecord models) just create an instance instead of always saving it to the db. Most times you don't need to touch the database.
Somewhere in there Nick Gauthier declared: "I love making test suites faster. Tell anyone who wants to come by BOHconf and I will make their test suite faster." Take him up on it is my advice.

And then it was time for steak and rum.