During RailsConf this spring, I provided thrice daily (or more) posts on the talks and events. While they were very popular, I didn’t really get to enjoy the conference much. This time, I’m limiting myself to shorter notes once per day. Here is a brief recap of Thursday, Day 1 at RubyConf.
The theme for RubyConfat RubyConf so far is DSLs. While DSLs are always a promenant topic, so far every talk has included a pretty extensive coverage of them (or how they are used in a project). This isn’t at all a bad thing, as I believe DSLs are very powerful, produce clean code, and are of great benefit to Rubyists. That said, I don’t get to write many of them, so I’m a bit rusty and looking forward to beefing up my skills at Neal Ford’s ‘Advanced DSLs’ tomorrow.
Matz was his usual comedic self. The talk was quite good and very sentimental. As he notes, he doesn’t like a lot of technical content in his keynote. Instead, this was more about how great the community is and he provided a lot of encouragement to keep that up, no matter how much we grow. He asked for raised hands on “Who started with Ruby because of Rails”. I’d say about 30% of the room raised their hands. Then he asked about “Who stuck around because of Ruby” and it was clear that Ruby is why everyone stays.
A oft repeated quote from the keynote: “Rubinius, yea – Good try”
Scaling Ruby (Without Rails) by Gregg Pollack
Gregg (of RailsEnvy) did a nice talk about what you should keep an eye on when developing in Ruby and trying to maintain decent speed. He noted that Design Patterns in Ruby has many great examples, but they are necessarily slow. Matter of fact, in general, making method calls are much slower than the alternatives. I think this was great to hear as it reinforces my coding style of avoiding things like ‘.nil?’ or ‘.zero?’ that are expounded by other Rubyists. I believe the more traditional routes are just as understandable without being so expensive.
Gregg also talked about threading (also a popular topic at RubyConf this year), Neverblock, Mongrel vs. Evented Mongrel, Deferred requests, Rind, DBSlayer, Halcyon, and Ruby-prof. Overall, not bad, but a little light on content, examples and details.
Using Git in Ruby Applications – Scott Chacon
Scott gave a nice talk that included a brief overview of git itself followed by explaining some unusual things that git could be used for, including a ticketing system, wiki backend, and more. His major goal was to introduce Grit, a Ruby library that allows you to interact with a git repo through Ruby. It was pretty neat, but also quite complicated, even for git veterans. There were quite a few code examples, but I didn’t really see any ‘start-to-finish here is how you do this’, and I think it was just a bit too much for the talk. Overall though, it looks like a nice library and I hope to try it out more later (possibly for some interesting Rails/Capistrano tasks)
Recovering from Enterprise – Jamis Buck
I actually debated whether to attend this talk or go to another because it looked to be a bit beginner. Boy, am I glad I stayed. Jamis gave a terrific talk about his experiences writing and re-writing dependency injection libraries Copland & Needle. After a nice, fairly technical walkthrough, we get to the meat of the conclusion: Ruby-style dependency injection doesn’t require a dependency injection library at all: Pass the class name or overwrite a helper method and go! He left us all with some great quotes and nuggets of knowledge:
“I was riding the Dependency Injection horse for all it was worth”
“If you were turning every ten lines into a component, then you just wind up with component soup. And I hope you’re hungry”
“Just in time. Not just-in-case”
Unfactoring From Patterns: Job Security Through Code Obscurity – Rein Henrichs
Rein gave a pretty funny talk that went through the procedure for turning good code into bad. It was funny with a lot of audience suggestions. I attended hoping for some ‘glimmer of divine knowledge’ from the advertised ‘1% of truth’ to be presented, but there was none. It was just a good time laughing at poor coding practices.
Peer Aware Desktop Application Development – Preston Lee
Preston presented on a library called ‘Journeta’ that provides a server-less broadcast-based peer-to-peer discovery and communication platform for clients on a LAN. It’s a pretty fun and interesting topic, although I can’t think of any application of it right now. Once again, the subject of the inadequecy of Ruby’s green threads came to the forefront. It provides a severe bottleneck for the kind of asynchronous communication that Journeta does. As we know (and was pointed out by Gregg earlier), the Global Interpreter Lock in Ruby 1.9 means that we still don’t have an appropriate solution. I pray that a real solution comes to light soon because Ruby is severely suffering because of it.
Preston noted that Journeta didn’t work for Windows (mostly because he hadn’t tried). I took that as a bit of a challenge and hacked on it during his talk. After delving into some interesting internals of the Windows UDP Socket handling, Multicast, etc, I managed to get Journeta working on my Windows machine. A fun chellenge for sure. This is definitely what RubyConf is about.
Testing Herasies – Francis Hwang
Another talk I was considering missing, but I’m glad I didn’t. I would say Francis gave probably the best talk of day. It was chock full of technical content, examples, and a rather controversial topic: the right way to test. Francis started with an overview of Mocks, Stubs, Dummies, Fakes, etc. Then he started in with a great list of testing ‘dogma’ that people are told is the ‘One-Right-Way’. He provided some excellent examples for why these bits of dogma aren’t necessarily true. For example, he argued very effectively against Mocks (and the general ideal of seperating your testing from side-effects of external applications). I hope he posts his slides for later reference, and if I find them, I will be sure to add a link here.
To end out the day, I attended the evening’s lightning talks. There were a lot, but I’ll note a few:
Ryan Davis (ZenSpider) – Provided an overview of his new gem: Flay. It’s a tool to find duplicate code, even if the code uses different variable names.
Yossef Mendel – Talked about what is and is not true (Truthiness) in Ruby. A good reminder that only ‘false’ and ‘nil’ are evaluate to false in Ruby. Everything else is true. Yossef provides a funny little tool to see the truthiness of something (but hopefully after his talk, you don’t need it): http://github.com/ymendel/truthy
Bruce Williams was quite popular at RubyConf today as he was selected on Monday by the Obama campaign to attend the acceptance speak in IL as ‘Front Row to History’. Bruce built a neat site prior to leaving (in one day) that provided updates on his tweets and snaptweets: http://obamaftw.org/ Way to go Bruce, I’m jealous!