— wrook, in an insightful /. comment. HT… erm, someone in my twitter feed. Sorry.
Though I missed some sessions and social activities due to all-consuming fatigue and flu symptoms, I enjoyed my Rubyconf X-treme X-perience*. Here’s what I thought particularly stood out:
On a professional “developing my craft” level:
- @tenderlove’s talk, “ZOMG WHY IS THIS CODE SO SLOW” was a great—and well presented—overview of how to break down a complex system and rebuild it in a clean, performant manner. The talk shifted back and forth between some clearly developed principles and Aaron’s actual work rebuilding ARel for performance reasons.
- The twin pairing of Shugo Maeda’s talk on Refinements and Classboxes with @yukihiro_matz’s keynote on Ruby 2 and Rite. Rite is an configurable, embedded flavor of the Ruby VM that is targeting gadgets and household appliances. Ruby 2 will preserve all the “Ruby is for consenting adults” power and expressivity of the language but will provide tools to keep things clean (Refinements and method wrapping).
On a personal “this is really awesome must play with it” level:
- @merbist’s update on what MacRuby has been up to and where it is at… and where it could go. I haven’t really had the time to check in on MacRuby in awhile so it was awesome to see the progress they’ve made since last year. It’s got a kick-ass GC, has native Grand Central Dispatch support, supports pretty much all the Cocoa stuff, etc etc. With Apple backing MacRuby and recently pitching Java over the side… I wonder. You can’t target iOS right now (no GC), but Matt Aimonetti coyly told the audience that it “would be possible without a huge effort” to get there. Hmmmm.
On a philosophical “I wonder if other conferences have these sort of talks” level:
- Dave Thomas’ keynote and challenges to the community. Documented here earlier.
- @dhh’s idiosyncratic and foul-mouthed rambling walk through politics, aesthetics, and philosophy titled “Why Ruby?”: his message about personal freedom and responsibility in a programming context paired nicely with a bunch of my recent reading material and the TSA-related horrorshow that cropped up shortly before the conference opened.
And, finally, New Orleans, and the New Orleans ruby community, some of which I got to experience, but not half so much as I wanted to and certainly less than half as fully as they deserved. Job well done as hosts.** Bonus points for my cab driver on the way out who, upon learning I was from Michigan, launched into a more optimistic defense and projection for the auto industry than I would have suspected possible outside Michigan. I had to council lowered expectations! He loves his chevy, though, so that’s something Detroit’s got in its corner that I bet it doesn’t know about: New Orleans-based immigrant cab drivers from the middle east.
(* with apologies to @tenderlove for stealing his joke.)
(** New Orleans felt a lot like a warmer version of Detroit that everyone still likes to visit: old, gorgeous but rundown buildings, tons of vacant lots and breaking down buildings, some new development, but yet nobody seemed intimidated or frightened by it. Southern hospitality? Lack of bad press? Who knows.)
— @tenderlove, from his excellent Rubyconf X presentation “ZOMG Why is this code so slow?” (Hopefully there will be a video. Slides don’t do it justice.)
@pragdave kicked off RubyConf X this morning with a typically quirky history of Ruby’s last ten years, before launching in to the meat of the matter. Now that we’ve had ten years under our belts and moved from a niche-lovers niche to nearly mainstream, what next? He issued three challenges that I think are worth repeating:
- Find someone to inspire who isn’t like you. Get more women involved. Change Hacker culture to no longer subconsciously exclude and intimidate women. Teach kids. Fewer and fewer americans are going into software development, and fewer and fewer of those are women. Women are 47% of the workforce, but only 25% of math/cs, 5.6% of the ruby subgroup, and 1.5% of the F/OSS metagroup. Ouch. And seriously: teach some kids. It’s rewarding!
- Diversify our experience. Not group-level diversity; individual-level diversity. Stop identifying yourself as a monolinguist: “I’m a java programmer / I’m a ruby programmer.” Monolingual people are arrogant to the point of ignorance. Monolingual people are maintenance programmers. Push yourself to learn. Pick a new language or study a classic. Try non-OO programming. Move outside comfort zones.
- Get out of the rut. Ruby is in danger of becoming a suburb; are rubyists actually becoming judgmental and ceremonious? It seems like new projects require all kinds of ceremonial gem installation and configuration. What’s with that? Too many really smart people making incremental advancements to someone else’s stuff. Instead of saying “I could do that better”, start doing something new. Cultivate a Pioneer mentality. Do it first, even if it is the worst.
I detected some skepticism from the grouping around me, but I think these are valuable and admirable goals to have in mind as we create our future, both as hackers and as a community organized around ruby.
Bonus self-congratulatory wankery: I am consistently impressed that rubyists in general constantly explore other languages and other paradigms. It says something positive that such experimentation outside the “walls” is not only condoned but praised and encouraged. Maybe we do need to do a better job bringing what we learn back and interfacing in a positive way, but suburbanites don’t normally like to explore. There’s hope for the future, there.
Wow, it looks like the Chinese nginx community has been kicking some serious ass. Nginx is fast becoming an app framework :). HT @ezmobius
Yes, I’m having a go-round with Seven Languages in Seven Weeks—in my copious free time not devoted to work or my Objective-C kung-fu—and I’ve begun with Io, a little prototype-based language by Steve DeKorte.
I’m something of a javascript expert; in fact, of all the people I know, I’m the only person that actively likes the language. More bluntly: I think I’m the only person I know who doesn’t hate using it.
So: Io. Io is like a clean, pure message-passing version of javascript, sans-DOM. Sans much of anything, really: it’s very lightweight and has some really neat lisp-y features and a mega-simple Coroutine/Agent system, but it has almost no syntactic sugar. The Io Guide is pretty good; but the community seems small and good reference material is hard to come by. Io is also kinda hard to google for. If you do google it, you’ll often find blog posts about the very book I’m using.
Enough rambling! Let’s see some code! Actually, let’s start with the install. It’s hosted on GitHub, so:
- git clone http://github.com/stevedekorte/io.git
- make vm
- sudo make port
- make <name_of_addon_you_want_here>
- sudo make install
And you’ll find yourself with the io command line utility. Many of the port packages (and therefore Io AddOns) wouldn’t compile for me, and I ran out of patience trying to debug. Sadly, these included Yajl, which is a kickass streaming JSON parser and builder. I recommend that you at least `make Socket`, and if you’re a web programmer, `make Volcano` as well. If you want to add the AddOn later, head back to your Io source folder, “make <addon name>” and “sudo make install” again. This has made be appreciate how awesome and blessed the Ruby community is with rubygems and rip.
Typing “io” will get you an interpreter terminal, so it’s easy to have a play. Here’s some sample code:
There’s lots more to it, of course. You get a really super-clean implementation of everything that is awesome about prototypal inheritance. Here’s a basic twitter frontend, to demonstrate how easy building a simple HTTP server can be:
You’ll need Socket and Volcano, I think. There is a Twitter AddOn, but it requires Yajl (reasonable), which I can’t build on either of my Macs.
You can send any message asynchronously by prefixing it with “@”. On line 19 of the twitter thing I send @fetch asynchronously and assign the result to “twits”: this creates a “future”—basically, a placeholder. Only when you check the value of this placeholder does it block waiting for @fetch to complete. It’s pretty cool to have this kind of non-blocking method invocation baked in. It’s a bit like Node.js, another one of my favorite shiny new toys.
I like Io; at least, I like where it is going. I’m not sure that it would replace anything that I currently use, however it did make me focus and clarify my thinking about where I think javascript should go.
Oh, and I put my de-fucko’d sample code up on GitHub here.