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
end


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

Nice!

  • 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

Funny.

  • "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.


Slides!

  • 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

Boo.

  • 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.

Jun 13, 2010

Rails Conf 2010 Day 3

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.

Jun 9, 2010

Rails Conf 2010 Day 2

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.