Jake Scruggs

writes ruby/wears crazy shirts

Using Git Inside a Git Hook can cause problems. In my previous post: "Signal 13 Problems with Git Hooks" I describe how we are trying to automatically merge certain types of branches into a branch that is designed to hold them all. Anyway, that means we want to run some git commands inside of the git hook. We change dirs into another directory where we have a clone of the repo and start telling git to merge some stuff and we get a bunch of

remote: fatal: Not a git repository: '.'
But if we run the exact same commands as the git user everything works fine. Huh. Eventually we got our linux guru over and he noticed that the environment under which the git user runs is totally different when inside a hook. Gitolite does a bunch of things to the env, but the one that was screwing us up was the setting of the GIT_DIR. After we figured that out, the solution was as easy as:

ENV.delete 'GIT_DIR'

in our ruby script that is triggered by the 'post-receive' hook. And now I must get back to the fun.

Ran into a gotcha in Git today when trying to write a post push hook. We want our designer to have a fast turn around time with clients so we're writing some hooks to merge all of the 'theme' branches he works with to get merged into a special preview branch which is then deployed to the preview site. And all this should happen after he does a 'git push.' Seems like a 'post-receive' hook is just what we want.

Except that every time we tried to create one we got these errors on a push:

error: git-shell died of signal 13
fatal: The remote end hung up unexpectedly
error: error in sideband demultiplexer

If the 'post-receive' file even existed in git_dir/hooks/ on the git repo box, we got this error. We checked permissions, gitolite docs, git docs, google, etc and no help. We finally realized that Git was piping in some information to our 'post-receive' file and since we were not consuming it, that was causing the explosion.

So, I present to you, a stub of 'post-receive' file written in Ruby:

#!/usr/bin/env ruby
STDIN.readlines.each do |line|
rev_old, rev_new, ref = line.split(" ")
# You will get in here as many times as branches were pushed

rev_old is the old commit hash, rev_new is the new commit hash, and ref will be something like: "refs/heads/test_branch" Useful information.

Git often passes things into it's hooks, check the git book docs to find out what.

So day 2 begins. I got to bed early-ish as I am old so I'm fresh as a daisy and ready for more Ruby. As per my established practice, Tweets are in italics.

  • Keynote by Yehuda Katz (@wycats) is up next at #RubyMidwest
  • I'm wondering why you can't give a technical keynote? Everyone says so. #RubyMidwest

Why is that, exactly? It's a technical conference. And a single track one at that. So I say tech it up, baby.

  • Things that seem really easy are actually huge blockers to new users @wycats #RubyMidwest
  • .@wycats started Rails dev on windows - me too. #RubyMidwest
  • "What the F** is that thing with raw_host on it?" Ex of a small thing that is a blocker to a noob @wycats #RubyMidwest

Yeah, I had a few of those. I had no idea how to do public static final in Ruby. When I figured it out it lead to one of my early blog posts: Public Static Final for Ruby

  • RT: @RubyMidwest Big thanks to @mbleigh and @intridea for hosting the OMGWTFBBQ dinner/lightening talks/hack night! #rubymidwest
  • RT: @RubyMidwest great roundup of the first day of @rubymidwest from @jakescruggs http://bit.ly/arfY9m #rubymidwest (via @ajsharp)

Oh yeah -- the Ruby Midwest Twitter account liked my post. Go me.

  • .@wycats got into the 'subversive' side of the Rails community through Data Mapper because he had a legacy DB #RubyMidwest
  • "Because of the craziness of what I was doing, Merb was much more appealing to me than Rails" @wycats #RubyMidwest
  • Building the Merb Server (never finished) pushed him hard into areas he didn't understand and made him much better @wycats #RubyMidwest
  • RT: @tswicegood "If you're gonna do something open-source, pick something hard." /via @wycats #rubymidwest

Good advice. Hard to work up the nerve to follow it but good none-the-less.

  • Bundler has been much harder than Rails - It's a hard social problem. @wycats #RubyMidwest

Yeah. I'm the advocate for Bundler on my Rails 2.3x project and I've heard a lot of "Stupid Bundler!" and it was almost never Bundler's fault.

  • Strength of the Rails community: We demand a very high level of external api excellence. @wycats #RubyMidwest
  • "User experience includes the command line" @wycats #RubyMidwest
  • We've spent a lot of time making the command line an enjoyable experience. Not so true in other communities. @wycats #RubyMidwest
  • .@wycats spent a bunch of time making Bundler's error messages more informative. #RubyMidwest

Good man. It really helps.

  • People were confused by "Locking gems" so that inspired 0.9 => 1.0 @wycats #RubyMidwest

Yep, I kept having to explain to my team that we lock because we're in production.

  • Now, in 1.0, you get a lock automatically in Bundler. @wycats #RubyMidwest


  • People have a right to expect basic use of a product to not require a manual @wycats #RubyMidwest
  • Oh the other hand, with advanced features you should expect the users to read the manual @wycats #RubyMidwest
  • Sign of a mature project: Successful maintainer hand off @wycats #RubyMidwest
  • Another sign of a mature project: Survives several Ruby/Rails releases @wycats #RubyMidwest
  • Another sign of a mature project: Incorporating real world crazy bug fixes @wycats #RubyMidwest
  • .@wycats Sass is battle tested while Less is not. #RubyMidwest

Oh no he di'ent! Let the flame war begin.

  • New things should be able to disrupt, but points should be given to things that are mature @wycats #RubyMidwest
  • .@wycats "Merb was massively immature when it got a lot of mind share. It should have been much harder than it was." #RubyMidwest

Really honest of him to admit that. Also, while I'm at it I should point out that it's really cool of him and Chris Wanstrath to show up to a small first year regional Ruby conference. Stand up guys, they are.

  • RT: @j_root #rubymidwest you heard it here first Yehuda Katz said that less css is clown school... and that Sass 3 rules its nuts. :) #misrepresent

It should be noted that @j_root used the hashtag #misrepresent AND a smiley emoticon so he's just trying to stir up trouble. Bring it.

  • RT: @j_root #rubymidwest Yehuda spits mad fire, holding the entire oss community to the flame. you can run but you can't hide, gems... bam pwnt

I'm not sure what "bam pwnt" means but I like the cut of this @j_root's jib.

  • "User confusion is an actual bug" @wycats #RubyMidwest

Good point.

  • OSS users: put pressure on the established projects to incorporate the new hotness instead of immediately jumping ship @wycats #RubyMidwest
  • .@wycats Reminds me of Winston Wolf. He just gracefully handled a "Why were you a dick to me online" question #RubyMidwest
  • To be fair, I don't think the question asker meant it to come out that way. But it kinda did. #RubyMidwest

Remember the scene in "Pulp Fiction" where the Wolf showed up and effortlessly dealt with Vince Vega's guff? It was like that but better. Do NOT throw down with the wycats - he will destroy you.

  • Next up "User Experience for Library Designers" - Wesley Beary (@geemus) at #RubyMidwest
  • Rename! talk is now called "eXperience Driven Design" @geemus #RubyMidwest

You can't sneak those renames by me -- I'm wise to your tricks. Of course, I've had some of my talks renamed behind my back by organizers. I'm looking at you, Ray Hightower. But I kid the Hightower -- He's alright with me.

But seriously, I'll cut you if you even think of renaming one of talks again. I'm kidding! Sorta.

  • Slide from last night's Lightning Talks: http://is.gd/dvOJw "This is actually a simplified diagram" said the speaker #RubyMidwest

Funny stuff. If you're a Ruby nerd. And you probably are.

What? Windy City Rails picked me to talk? Thanks guys. Especially Ray, who didn't take those previous jokes personally.

  • RT: @brntbeer @geemus is killing so far with funny slides #rubymidwest
  • Writing a test framework is a good way to learn if nothing else. And it probably will be nothing else. @geemus #RubyMidwest
  • Fog has 124 versions in just over a year. Holy crap! I thought metric_fu's 24 was pretty good over 2 years @geemus #RubyMidwest

What the what!?! 124 versions? For real real and not for play play? Damn. I am humbled.

  • Fog is "The Ruby cloud computing library." btw @geemus #RubyMidwest
  • "Encourage Contributors" Damn Straight. He gives out T-Shirts! @geemus #RubyMidwest

124 versions and T-Shirts? This is the best open source project ever. I may even use it someday.

  • RT: @Arlen Wesley Beary: "When you're writing a library, the expert, is YOU. You are trying to help the rest along." #rubymidwest
  • Who wants to design a metric_fu T-Shirt? That would be cool. #RubyMidwest

Seriously -- design a shirt for MetricFu and I'll name a major release after you.

  • RT: @lpillow The dirty secret to project naming: spend as much time coming up with the name as coding the project. @geemus #rubymidwest


  • "Practical Projects in Mongo DB" with Alex Sharp (@ajsharp) starts soon at #RubyMidwest
  • MongoDB is schema-less: great for rapid agile development @ajsharp #RubyMidwest
  • Mongo stores documents (in binary json) not rows @ajsharp #RubyMidwest
  • Auto-sharding is coming soon. But I've heard that before. @ajsharp #RubyMidwest

Pretty sure I saw a talk on Mongo a year ago that was promising Auto-sharding. Either they announced that feature way too early or it's proving harder than they thought. Money on the later.

  • Mongo writes are "fire and forget" @ajsharp #RubyMidwest
  • No Joins or Multi doc transactions in Mongo @ajsharp #RubyMidwest

Hmm, could make like interesting.

  • RT: @mattyoho @blowmage #rubymidwest has been a really great conference. Major kudos to the organizers; it's been smooth as butter.

Here here! If any organizers come to Windy City Rails I'm buying the drinks.

  • .@ajsharp uses Mongo to create detailed super search-able logs that help him track down bugs #RubyMidwest
  • "I don't care about storing data, I care about persisting state" @ajsharp's argument against SQL #RubyMidwest

Good quote and a good point.

  • "Pragmatic Guide to Git" by Travis Swicegood (@tswicegood) coming up at #RubyMidwest
  • It's going to be an Intro to Git talk. @tswicegood #RubyMidwest

Intro to Git is not really my thing (been using it for a few years) but he did a good job.


  • Can't say I've ever understood applauding people who win books at conferences. Great job being lucky! #RubyMidwest
  • Maybe it's just something to do while the winners make their way to the front. Clapping for book winners, that is. #RubyMidwest

I say that at the next conference we all sit in stony silence while the lucky one slowly makes his or her way up to the front. Who's with me?

  • "Interoperable Web" by Michael Bleigh (@mbleigh) next at #RubyMidwest
  • ostatus is a collection of web standards, like the hall of justice (superfriends) @mbleigh #RubyMidwest

Great "Super Friends" Theme to this talk. Remember the classic 70's-80's cartoon? Well I do because I'm old. Get off my lawn.

  • RT: @adamstegman Interoperable Web wins best slide of the conference. Unicorn, hearts, rainbows, leg warmers - unattainable dream. #rubymidwest

The leg warmers on the unicorn is what really made the slide for me. Why would a Unicorn need leg warmers!?! That's just silly.

  • pubsubhubbub - is webhooks with standards. you can subscribe to events @mbleigh #RubyMidwest
  • superfeedr provides a free hub server for public stuff @mbleigh #RubyMidwest
  • webfinger takes this point of view: "email = identity" And hooks everything up through that @mbleigh #RubyMidwest
  • redfinger is a ruby wrapper for webfinger @mbleigh #RubyMidwest
  • Salmon - if someone comments on a blog post on an aggregator (not the blog itself) then it can show up on the blog @mbleigh #RubyMidwest
  • activity streams - adding verbs to rss feeds. Ex: followed, posted, favorited, closed, updated, tagged, etc. @mbleigh #RubyMidwest

God Damn does this stuff sound sexy. Everyone needs to support all of this right now. Without me doing any work.

  • OAuth 2.0 flexible multi-profile token authorization. @mbleigh #RubyMidwest
  • In OAuth 1.0 you had to go the website for auth. What if you couldn't (no browser), or their wasn't a website? @mbleigh #RubyMidwest
  • OAuth 2.0 provides 4 ways to auth: Web server, user agent, native app, and autonomous @mbleigh #RubyMidwest

Good and needed improvements.

  • RT: @LuigiMontanez .@mbleigh is giving an incredible presentation on the Interoperable Web at #rubymidwest -- a peak into the very near future
  • "Start thinking in standards" to make the web one big distributed info machine. @mbleigh #RubyMidwest
  • Here are @mbleigh's slides on the Interoperable Web. http://bit.ly/bZfm8r (via @LuigiMontanez)

An exciting talk. Assuming any of it gets adopted. If not we'll look back and weep tears of regret into the pillow of despair.

  • So I may have to calm down a bit on the tweeting as my talk is up after the next one and I should review my presentation. #RubyMidwest

I don't think I did, really. I'm out of control. I'm on an airplane right now so I'll have to quit the over tweeting cold turkey. By working on my blog post. Kinda like methadone.

  • "memprof" by Aman Gupta (@tmm1) next at #RubyMidwest
  • Ruby MRI has a "stop the world" GC. @tmm1 #RubyMidwest


  • More objects == Longer GC run @tmm1 #RubyMidwest
  • So, of course, less objects == better performance @tmm1 #RubyMidwest
  • Avoid leaked references (sometimes called memory leaks, but not really the right term) @tmm1 #RubyMidwest
  • bleak_house not only tells you what is 'leaking' but also where it is leaking @tmm1 #RubyMidwest

Sounds good.

  • RT: @chadmontplaisir @tmm1 "God was known for a long time to have memory leaks" #rubymidwest

The God project has lead to a lot of unintentional humor. And for that, we thank you God.

  • memprof - easy to use, no patching the vm, detailed (file/line) object contents, refs between objects, simple json output @tmm1 #RubyMidwest
  • RT: @samullen I feel more smarter just by listening to @tmm1 #rubymidwest

See what he did there? They bring the wit here in the heartland.

  • http://memprof.com/ has gotten better since I last looked at. Nice visualizations of where your memory is going @tmm1 #RubyMidwest
  • http://memprof.com/ is built using Mongo @tmm1 #RubyMidwest
  • RT: @chadmontplaisir @tmm1 Procs are a good way to memory leak because they keep all the variable references within the creation scope. #rubymidwest.
  • RT: @chadmontplaisir @tmm1 Take away: Looking through the trash gives you a better understanding of what your application is doing. #rubymidwest

True dat. Optimize, always optimize.

  • My talk is in less than 10 minutes... Panic! #RubyMidwest

Well, it was a quiet crowd. Afternoon on the second day and all. The Twitter seemed to like me and a bunch of people sought me out after the talk for more info or just to thank me. So I guess it went well. There was a moment, at the end of the talk, when I looked up from my computer to see tumble weeds rolling across the floor. I shouldn't worry about it I suppose.

I used Prezi.com for my presentation. It's a canvas based presentation system and it's pretty cool. You put all your ideas on a big canvas., sort and arrange them, paste in some pics or whatever, and define a path through said canvas. Lots of fun to work with.

  • Someone (not wearing a name tag) just turned me on to this: http://is.gd/dw6lp factory_data_preloader More speed! #RubyMidwest

That guy turned out to be Kyle Ginavan. I'm totally going to try out factory_data_preloader when I get back to work on Monday.

  • RT: @mattpetty "test suites should be reliable, repeatable, and understandable" -@jakescruggs #rubymidwest

My favorite quote from my talk and I completely made it up on the fly. Felt good saying it.

  • @lpillow It was a pic of a little girl making a frowny face. Honest.

Someone though one of my images or diagrams was pornographic. I've looked through the presentation 20 times and I can't see it. If you find something, let me know.

  • "jQuery and Rails, Sitting in a Tree" by Adam McCrea (@adamlogic) is happening now at #RubyMidwest
  • Neat bit about stealing non-obtrusive javascript from Rails 3 to use in Rails 2x @adamlogic #RubyMidwest

To be honest, I was a bit burnt at this point and coming down from the post talk high so I didn't cover this one as much as I should. Sorry Adam - say hi to Joe for me.

  • "A New Set Of Wheels: Leveraging Ruby For System Administration" by Josh French (@joshfrench) #RubyMidwest
  • GrepFu looks pretty cool. Ruby wrapper for command line searching tools. http://rubygems.org/gems/grep-fu @joshfrench #RubyMidwest

Check out the GrepFu - it looks well worth investigating. Luke Pillow, a Ruby Midwest organizer, said he uses it ever day.

  • Well, I gotta go catch a plane back to Chicago. Thanks #RubyMidwest I had a great time and learned a ton.

And I'm on that plane right now. It's like a conversation with my past self. Hey, past self, don't eat that airport BBQ - they're gonna put mayonnaise on brisket.

Too late.

I did get to sit in the airport sports bar and listen to two young ladies in interesting outfits argue about whether it was lying to omit the fact that you didn't sleep in your hotel room last night. It took a very long time to decide.

So people often ask me why I tweet so much at conferences (113 tweets today, for example). Well, usually I'm furiously typing notes into TextMate so I can blog about it later. Now, in the post twitter world, I type those thoughts into twitter and harvest them later for my wrap-up posts. That way people can follow a conf's progress live or wait for the recap.

So Tweets will be in italics and everything else is bonus commentary.

Generally the first day of the conference went amazingly well. Hard to believe this is their first year. Wifi was plentiful, food was decent, and the space was nice. Oh and the talks were good too.

  • At @RubyMidwest waiting for the fun to begin
  • So I think the official hash tag for @RubyMidwest is #rbmw or at least that's what the welcome tag said. Although #RubyMidwest is popular
So there was a lot of confusion about the official Ruby Midwest Twitter hashtag. The badges said one thing, the welcome screen said another, and everyone else chose a third: #RubyMidwest. I eventually just went with the most popular. That's about as much controversy there was on the first day so everything went pretty well.
  • "Open Source sucks and I'm to blame" - Chris Wanstrath at #RubyMidwest #rbmw
  • No one has more experience than me with running bad open source projects - @defunkt #mwrc #rubymidwest
  • The trick to getting better at things is Practice. @defunkt #mwrc #rubymidwest He played guitar for 10 years and never got better nopractice
Chris never got better at the guitar because he never practiced. The same applies to code. You can knock things out for years but until you work in a mindful manner you will never get better.

  • It's too easy to release open source software - @defunkt #RubyMidwest #rbmw

By which I take him to mean that lots of people throw something up on GitHub, push a gem, and provide a few lines of doc before something even works.

  • Levels of open source Massive (Linux kernal), Big (Rails, JQuery), Medium (homebrew) Tiny (most of the rest) @defunkt #RubyMidwest #rbmw
  • The tiny ones tend to be all the ones we use - and they tend to be managed poorly @defunkt #RubyMidwest #rbmw

Some open source projects are managed really well, but it's amazing how many we use on a regular basis that are not.

  • Always have a license file! @defunkt #RubyMidwest #rbmw
  • If it doesn't install easily it sucks because that's your first experience with the project @defunkt #RubyMidwest #rbmw
  • Why do we use MySQL instead of Postgres? MySQL was way easier to use early on in Rails @defunkt #RubyMidwest
  • JQuery no conflict mode is another example of making install easy. You could use it and Prototype super easy @defunkt #RubyMidwest
  • If your api is for a human, design it to be easy and don't assume just ruby developers will be using it. @defunkt #RubyMidwest
  • Lack of examples is the next biggest problem in open source - people need help getting started @defunkt #RubyMidwest
  • Public Api means having methods you know won't go away when you upgrade. @defunkt #RubyMidwest
  • man pages are important if you have a command line interface @defunkt #RubyMidwest
  • Set Expectations: explain what it's for. And make sure it does that! @defunkt #RubyMidwest
  • Projects that aren't maintained... OK, that happens. But say so: "Looking for a good home" note on home page @defunkt #RubyMidwest
  • "Too many features is a really bad thing" @defunkt #RubyMidwest
  • "It's way too easy to say yes" @defunkt #RubyMidwest #rbmw
  • "Much harder to remove a feature than to accept it later" @defunkt #RubyMidwest
These last 2 statements are particularly applicable to metric_fu right now. There's a bug in the way it computes Flog averages and I'm having trouble fixing it because of an undocumented "files to ignore" feature. I may have to rip it out.
  • Better to set up a plugin api and let people write their own extension functionality @defunkt #RubyMidwest
  • The lack of competition is horrible -- Look at how competition from Merb made Rails better @defunkt #RubyMidwest
  • Too few releases is horrible and wastes people time - Too many can be annoying too. hmm. @defunkt #RubyMidwest
  • Have a decent change log - super important for long time users. @defunkt #RubyMidwest
  • Arbitrary version numbers confuse people. Look up Semantic Versioning @defunkt #RubyMidwest
  • If you're using it in production it IS 1.0 - We have a lot of numbers and we're not going to run out of them @defunkt #RubyMidwest
Excellent point. How many gems have you deployed to production that claim to be version 0.194 or some such nonsense?
  • Define how to contribute to your project - don't assume every knows how you want it. @defunkt #RubyMidwest
  • Be a lazy maintainer - Write a road map and people will do your work for you. @defunkt #RubyMidwest
Excellent point - this totally worked for metric_fu.
  • Link rot - don't point to your svn repo if you've moved to git - update old blog posts if you use them as doc @defunkt #RubyMidwest
  • Google your project name before you create it - Find problems early @defunkt #RubyMidwest
  • Examples of great open source projects: Rails, JQuery, Redis, homebrew, Django, Unicorn, Linux, Git... @defunkt #RubyMidwest
  • Chris Wanstrath - @defunkt always delivers an great talk. He has a style that feels conversational but gets points across #RubyMidwest
Good talk - Chris is always an engaging speaker.
  • "Ruby Techniques by Example" Jeremy Evans is up next at #RubyMidwest
  • "Singleton class" has been said 20 times in the first 5 minutes of this talk @jeremyevans0 #rubymidwest
Yowza, kind of a rough start to the day. Had to stop tweeting for awhile just so I could focus (the horror).
  • ruby-sequel's plugin method looks cool. Let's you easily add modules that add class and instance methods @jeremyevans0 #rubymidwest
  • string evals dangerous but fast, define_method safer but slow. @jeremyevans0 #rubymidwest
  • The default argument of a ruby method can be any ruby expression. @jeremyevans0 #rubymidwest
  • Wrapping underling exceptions (from different implementations) with your own is a good to keep your code sane @jeremyevans0 #rubymidwest
Jeremy gave an intense, but good, talk. It's had to make those deep internals of Ruby not sound dry but he did an admirable job.
  • "JRuby" by Charles Nutter is up next at #rubymidwest
  • Jruby: Real Threads and access to all of the Java. Compelling points. The slow test cycle (starting up the JVM) is a problem #rubymidwest
  • I know there's solutions for starting up a test server, but I've found them wonky in the past - have they gotten better?
What I hear from my friends who develop in JRuby is that it's awesome in prod but slow to develop in (you're always waiting for the JVM to start up). And the lack of C extension support often means that the gem that would totally do what you need is just not going to work.
  • RT: @clam_tea #rubymidwest jruby allows you to do ruby on google app engine, android, anywhere java lives jruby is in the closet with a knife.
  • RT: @clam_tea Mmmmmm, Ruboto = Ruby on Android. Epic win. #rubymidwest
  • I like how @headius voice drops an octave when blatantly selling JRuby #rubymidwest
  • C extension support is being worked on by Google summer of code people for JRuby - Awesome. @headius #rubymidwest
If they can get C extensions working that would really be something. Maybe I'd have to give JRuby another look.
  • Next up is "Civic Hacking" by Luigi Montanez @LuigiMontanez at #rubymidwest
  • Sunlight Labs - developers and designers dedicated to improving government through transparency @LuigiMontanez #rubymidwest
  • Open Data + Open Source = Open Government @LuigiMontanez #rubymidwest
  • Of the hashtags #rmw #rbmw #rubymidwest, #rubymidwest is winning by volume For the Ruby Midwest Conference so that's why I'm using it
  • FlyOnTime.us mines gov data to predict flight times. neat. @LuigiMontanez #rubymidwest
  • http://outsideindc.com/stumblesafely uses crime data to help you avoid crime when coming home drunk in DC @LuigiMontanez #rubymidwest
  • RT: @rumblestrut Thanks @LuigiMontanez, I somehow missed this entertaining drama that @aaronsw ran into last year http://bit.ly/1oZPmS #rubymidwest
  • http://codeforamerica.org/ Like Teach for America but with %90 less soul crushing @LuigiMontanez #rubymidwest
  • Service to your country doesn't have to be joining government or the military - it could be code. @LuigiMontanez #rubymidwest
One of those awesome talks that points out some very cool things you could do with your open source time. Transparency is within our reach.
  • Free book time at #rubymidwest
  • Lunch was an enjoyable, if fairly standard, boxed lunch affair. Quite good quality considering the price of the Conf #rubymidwest
  • RT: @rumblestrut I love that @wycats was the first book winner at #rubymidwest book giveaway. Hilarious.
  • I just won a copy of "Beautiful Code" at #rubymidwest
Another book to read. At some point. w00t?
  • "Migrating Legacy Data" by Patrick Crowley & Rob Kaufman is up next at #rubymidwest
  • Trucker is a gem for migrating legacy data into a Rails app @mokolabs #rubymidwest
  • Trucker is hard to google: http://rubygems.org/gems/trucker @mokolabs #rubymidwest
  • "Trucker helps you move, but you still have to pack your stuff up" @mokolabs #rubymidwest
Trucker looks pretty cool and if I had some legacy to migrate, I'd look into it.
  • There are 12ish adapters for ActiveRecord, but there are tons of JDBC adapters. JRuby to the rescue. @mokolabs #rubymidwest
  • RT: @ajsharp "ALTER TABLE mytable CONVERT TO CHARACTER SET utf8" #rubymidwest
That last line is a particularly useful bit of MySQL that will help you convert to UTF8.
  • Next up is John Hwang (@tavon) with "Object Oriented Unobtrusive CSS" at #rubymidwest
  • Rename! the talk is now just "Unobtrusive CSS" @tavon #rubymidwest
He had to cut some scope to fit the deadline.
  • .@tavon says CSS frameworks (like 960grid) are almost as bad as using tables. Strong words. #rubymidwest
And he comes out swinging. I like it.
  • CSS is like assembly programming, frameworks - procedural coding, and Sass works at a higher level of abstraction. @tavon #rubymidwest
  • Sass: Nested Rules, Variables, mixins, compiles to css, Fully CSS3 compatible @tavon #rubymidwest
  • .@tavon says Sass is almost Turing complete #rubymidwest
These are great points. Sass lets you do things you should have been able to do years ago. How did we ever live without it? Wait, my project isn't using Sass... I need to talk to my designer.
  • .@tavon feels like HAML is an unnecessary abstraction. Sass is a much bigger game changer #rubymidwest
  • "Programmers: HTML/CSS is your problem" @tavon #rubymidwest
  • "Programmers: You probably don't know CSS" @tavon #rubymidwest
  • I think @tavon just called me lazy #rubymidwest
Hey now! I've been busy. I'll get around to doing a deep dive on CSS. Really.
  • .@tavon will not work on a project if you won't let him use Sass. #rubymidwest
A man of principles and conviction.
  • Stupid @tavon, making me feel bad for not knowing CSS very well #rubymidwest
He made my feel bad. Jake no like feel bad.
  • "Integration Testing Strategies: Locally And In The Cloud" is next at #rubymidwest by Ryan Felton and Kyle Ginavan
  • Live coding Capybara Selenium slowness and fail at #rubymidwest Sorry guys, I've been there
  • Using specjour to parallelize his capaybara tests on another machine. Go. Go. Go! #rubymidwest
  • And it worked. mostly. live demos are hard. #rubymidwest
  • http://www.seleniumshots.com/ is another an to run your integration tests in the cloud. Many have tried this. #ihopeitworks #rubymidwest
  • Don't get me wrong, I want "selenium shots" to succeed but I've seen a lot of smart dudes fail at parallelizing in the cloud. #rubymidwest
  • RT: @bellmyer I just signed up for selenium shots! #rbmw #rubymidwest http://yfrog.com/1n9bcp
  • Re: Last re-tweet. Got a 500 after signing up for "Selenium Shots" #rubymidwest
There's a lot of stiff competition out there trying to run tests in the cloud. May the best project win. Also, live coding and examples that rely on a network are to be avoided.
  • "Metawhat? A look into the mysterious metaclass" next by Brandon Dimcheff @bdimcheff at #rubymidwest
Another talk where I couldn't tweet because I needed to focus. Intense and worth tracking down the video when it comes out.
  • "Redis Persistance Power" - Nick Quaranto (@qrush) happening now at #rubymidwest
  • Redis is Batman's utility belt @qrush #rubymidwest
  • Redis can take a command that waits for something to arrive in the queue - meaning you don't have to 'sleep' @qrush #rubymidwest
  • .@qrush is working on hosting Redis in the cloud http://akasentai.com/ Ready soonish. #rubymidwest
Cause that guy needs more side projects. And they're all awesome. Yes, I'm jealous.
  • "Three thousand years ago, the Omnipotent Disc King started a campaign to ravage Sector 5 of the Moon." from akasentai.com
Weird placeholder site: Go see it.
  • RT: @qrush My slides from Redis: Persistence POWER! (With way more examples than I could cover!) http://scr.bi/redispower
Bonus content? What a deal!
  • RT: @clam_tea $redis.sadd should have a $redis.happpy to balance it out.
Yes it should. Well not really, but fun to talk about but not do. Like yielding 42 for no reason in complicated bit of Ruby -- funny but you wouldn't want to actually do it.
It is a pretty town and university.
  • "Chef - Cooking 101" by John Williams (@j_m_williams) is up next at #rubymidwest
  • Chef: Automate building a server up from bare metal to a ready to deploy machine. pretty awesome. @j_m_williams #rubymidwest
I talked to John the night before and I think it was his first talk. He was a bit shaky. It didn't help that server set up is dry, dry stuff. And, to be honest, most of the crowd doesn't care about the topic. Sorry John but we're coders.
  • One more Talk! "Surviving the last 20%" Mark Daggett (@heavysixer) at #rubymidwest
  • Speaking of Surviving the last 20%, I am mentally exhausted. #rubymidwest
  • I do! RT: @gregrhansen does anyone else see the irony of everyone leaving before the last talk of the day... the last 20%
  • "Facebook development is like building a ship in a bottle. Inside another bottle. While wearing mittens" @heavysixer #rubymidwest
  • RT: @tswicegood Regarding Facebook dev: FBML == Duplo, IFrame == Lego. #rubymidwest
Rough to be the last talk of the day. A good percentage of the crowd has bailed, lots of us would rather drive a spike through our cornea than write a Facebook app, and everyone in the room has a severe case of mental fatigue. Still he did a good job.
  • Demi Moore is to Facebooker as Patrick Swayze is to Rack. In the movie Ghost. In the clay spinning scene. @heavysixer #rubymidwest
  • You really kinda needed to see the slide to get that last tweet #sorry #rubymidwest
That was a great slide. Well played.
  • "Use Rack to wrap the plugins and gems to give them the params they expect instead of monkey patching them." @heavysixer #rubymidwest
Clever solution. Mark strikes me a smart man fighting an insane API. And winning.
It is a great name. From Urban Dictonary:
OMGWTFBBQ: A meaningless acronym which most often stands for "Oh My God What The Fuck Barbeque." It most likely originated on Something Awful (somethingawful.com). It can be interpreted simply as gibberish, or used when one wants to emphasize one's own incoherence, lack of understanding, or to mock others. It usually has an air of mockery, specifically with regard to teenagers who a lot of use three-letter acronyms.
  • Evans just gave a lightning talk on singleton classes of singleton classes and had the room rolling with laughter. Only at #rubymidwest
You sorta had to be there. The rest of the lightning talks were good, but I was too tired to Tweet it up so they will be lost to the internet forever. Apologies. The BBQ was excellent, however. I can still smell sauce on my hands and I've washed them 3 times.

Time for bed.

Crazy day:
It was the day before Ruby Midwest so I gave my 'Speedy Tests' talk to my workmates at Backstop Solutions during lunch today and they had the nerve to find some things wrong with it -- so I'll be doing some re-tooling before Saturday. Then I was all set to leave 2 hours early for the airport when my manager wants to talk about me helping QA understand our process, new features, and maybe get some automated tests running. Hell to the yeah. So I'm all over this opportunity but our conversation makes me leave the office a bit late to catch my flight. No problem, I build in a lot of buffer. Then the Blue line (Chicago's subway) was down. Uh oh. Some surly dude said there was a free shuttle to somewhere else but I couldn't find it so I took a cab. Crazy traffic puts me at the airport with 30 min until my flight. Panic! But the security lines are longish so I panic while inching forward in a zig-zag line. Then I sprint to terminal C (which is the farthest away and involves going underground) and find my seat minutes before they close the doors.

The lady next to me wanted to make small talk about how I was out of breath. I did not.

Then when I landed I noticed that all the signs say "KCI" when I'm pretty sure I booked a flight to "MCI" so I had a minor heart attack moment where I thought I flew into the wrong city. But no, it turns out that KCI and MCI are the same. That's not confusing at all.

But all was well when I made it too the speakers dinner. Very nice of the Ruby Midwest guys to organize such a dinner and pick up the tab. Good conversations with some locals (Shashank, Luke, and Josh), a 37 signals-er (John), and an Edge Case-r (Adam). Looks like the conference is off to a swimming start.