Tip: Be with People who Love what You Love

This morning, I attended another of Jeff Pulver’s Social Media Breakfasts.

Every time I go, I end up risking a parking ticket. The metered spots are invariably for 2 hours, and 10AM comes almost instantaneously. I can’t tear myself away to go mind the meter; been lucky, so far.

At these events, I’m continuously engaged with friends new and old; like-minded people who love ideas like I do, and who can bat them around like tennis pros.

If you’re like me, you find this kind of intense interaction to be exhilarating and stimulating.

This is what we want to facilitate at SocialDevCamp East — a thoughtful conversation about new ideas and how to realize them. We want to discuss the future in an informed way, synthesizing the lessons of the past with today’s emerging trends. We want to include economics, psychology, and design in this discussion. And iPhone and Rails and Twitter.

Anyway, if this sounds like a conversation you want to have, we guarantee that SocialDevCamp is going to be a blast, and that the day (and the party afterwards) will be a blur. A good blur; a blur you can leverage in the form of new ideas, relationships, and opportunities.

We want to thank our two newest sponsors: AwayFind.com and WebConnection.com. Also thanks to David Kirkpatrick, Senior Technology Editor at Fortune magazine, for attending.

Looking forward to seeing you and your ideas in Baltimore on May 10th!

Sincerely,
Dave, Ann, Keith, and Jennifer

ActsAsRenderer Brings Output to Models

Judging by the fact that there are several posts about this topic out in the wild, and that I have come across a need for it more than once, I thought it would be helpful to wrap up this functionality into a plugin and put it out into the world. Give a warm welcome to ActsAsRenderer!

Before you go off on a tirade about the evils of violating MVC, let me first say I know the arguments and I agree with you. However, in a world of complex systems where not everything is done via full-stack HTTP, there are legitimate reasons to output data directly from models, and ActsAsRenderer helps you do it.

With ActsAsRenderer, you get four cool new functions.

For your model class, you get render_file and render_string. For your instances, you get render_to_file and render_to_string.

Probably the most common (and legitimate) use of this kind of functionality is for rendering data out of a Rails script (say with script/runner). Since that environment is not a full-stack HTTP view of the world, it’s a real pain to render any kind of structured output. Not anymore! With acts_as_renderer in your model, you can render your views and give your model the voice it’s been lacking!

I’ve had this need come up several times. Most recently, I built a server configuration management system using Rails. While it is nice to preview the rendered configuration files using Rails-over-HTTP, it is also essential to be able to write those same configuration files out to the filesystem. In another case, I had a background DRb process that needed to be able to render templated output to the filesystem. I had to go build a mock-controller and do some pretty unsavory things; all of that would have been obviated with acts_as_renderer.

Now, I can simply say:

class Server < ActiveRecord::Base  acts_as_renderer

  def build_configuration    CLIENT_CONFIG_FILES.each do |f|      render_to_file("configs/#{f}", "#{config_dir}/#{f}.conf")    end  endend

The render_to_file function renders the templates located in configs (under app/views by default) and writes them to the files specified in the config_dir; it’s also smart enough to know that render_to_file is being called from a ‘server’ instance and sets @server accordingly. So my templates in configs are simply:

; Configuration Snippet for Server <%=@server.description%>

<%= render :partial => 'configs/queue', :collection => @server.queues %>

Please do think before using this plugin. It can be used for some seriously evil violations of good MVC design practice, and you are responsible for your own actions. However, this can also be used to make your existing designs *much* more robust and elegant, and I encourage you to use it where that is true.

It’s ready to drop in. Everything is there, including tests. Enjoy!

NOTE: Version 1.0 only supported Rails 2.0; I just added version 1.01 which will work with either Rails 1.2.x or 2.0.x. Please feel free to ping me with any questions.

acts_as_renderer at RubyForge

MoMA NY Selects Twittervision & Flickrvision

Yesterday, I received final confirmation that the Museum of Modern Art in New York has selected my mash-ups twittervision.com and flickrvision.com for its 2008 exhibition Design and the Elastic Mind.

I’m certainly very flattered to be included and have never considered myself to be an artist. I didn’t seek out MoMA on this. I am just very, very happy to have an opportunity to participate in a small way in the ongoing dialog about what technology means for humanity. Crap. Now I sound like an artist.

Incidentally, this means that twittervision.com and flickrvision.com are the first ever Ruby On Rails apps to be included in a major art exhibition. I already told DHH.

Anyway, at RailsConf Europe a few weeks ago, Dave Thomas’ keynote speech emphasized the role of software designers as artists. He said, “treat your projects as though they are artworks, and sign your name to them.” Or pretty close to it. I think this is incredibly valuable advice for software designers today.

We’re past the days of using machines as amplifiers of our physical efforts. It’s not enough to jam more features into code just so we can eliminate one more position on the assembly line. We’re at a point where the machines can help amplify our imaginations.

Today, creativity and imagination (what some folks are calling the right brain) are becoming the key drivers of software and design. With imagination, we can see around the corners of today’s most pressing challenges. While technical skill is certainly valuable, if it’s applied to the wrong problems, it’s wasted effort.

Creativity, imagination, and artistry help us identify the areas where we should put our efforts. They help us see things in new ways.

Everywhere I turn (perhaps partly because I am a Rubyist), I hear discussions of Domain Specific Languages, and of framing our problems in the right grammars.

This is hugely valuable because the creative part of our brain thinks in terms of semantics, grammars, and symbols. If we can’t get the words right, our imaginations can’t engage.

Everything stays stuck in the left side of our brains when we have to jump through hoops to please some particular language or development environment.

I hope you all will come out to see Design and the Elastic Mind when it opens at NYC MoMA, Feb 24 – May 12 2008. I’m not sure how we’re going to present the sites but we’re going to see if we can get some partners and sponsors involved to do something really beautiful.

And again, thanks to MoMA for the selection. And here’s to creativity, imagination, and artistry as the next big thing in software design!

Adhearsion is Moving Forward in a Big Way!

Over the next two weeks, Jay Phillips, Chad Fowler, Marcel Molina, Rich Kilmer, Ed Guy, Glenn Dalgliesh and myself are getting together to work on advancing Adhearsion, the open source VoIP technology.

For those of you who don’t know about Adhearsion, it brings a simple, elegant grammar to the world of VoIP. It’s an object-oriented DSL (domain specific language) written in Ruby. But that’s what’s going on underneath. Here’s what’s going on for you, the user:


# This is an example extensions.rb file which
# would handle how calls are processed by
# Asterisk. This is all completely valid Ruby
internal {
case extension
when 100...200
callee = User.find_by_extension extension
unless callee.busy? then dial callee
else
voicemail extension

when 111 then exec :meetme

when 888
play weather_report('Dallas, Texas')

when 999
play %w(a-connect-charge-of 22
cents-per-minute will-apply)
sleep 2.seconds
play 'just-kidding-not-upset'
check_voicemail
end
}

Obviously this is much more palatable than what you might find in your average asterisk extensions.conf file.

Chad, Marcel, and Rich are some of the biggest names in the Ruby & Rails communities. Ed Guy is a legend in Open Source telephony. Jay is the originator of Adhearsion. Glenn, Ed, Jay, and I all work together for the project’s sponsor, Truphone. There is some thought that with all of us on the job, Adhearsion might just become the next big thing to come out of the Ruby community.

We’ll see about that; it could certainly happen. One thing that is for sure though is that our efforts should bring a level of beauty and clarity heretofore unrealized in the VoIP/telephony/collaboration world, and that certainly is a good thing.