Double Shot #456

Late to bed and early to rise. Hmm.

  • jQuery vs MooTools - An extensive comparison from a MooTools contributor. He appears to be trying to do a fair job, though.

  • Need Code Help? - Zach Moazeni hooks up with RailsBridge to offer some pro bono code review. You'll see more of this from RailsBridge very soon.

  • Meet MacRuby - The latest from PeepCode.

  • Critical Mac OS X Java Vulnerabilities - It appears to be time to disable Java applets on OS X.

  • ModelFactory - Another factory-based replacement for Rails fixtures.

  • IP and Non-Competes for Employees - A generally sensible viewpoint from Obie (ie, he agrees to me that you shouldn't force employees to sign a ridiculous non-compete).

Double Shot #455

Today, I need to write more words about code.

Double Shot #454

Crossing fingers for a new contract today.

Double Shot #453

This would be a good day for a few things to get finished.

  • teachingkids - One of the new RailsBridge projects is getting moving.

  • GitHub Documentation - Looks like GitHub is working closely with rdoc.info to integrate docs now.

Twitter Screws Up

I don't often use this space to rant, but I'm up early with a small child and I'm a bit peeved at the moment. And my peevishness has something to do with software development, so it's moderately on-topic.

The target: Twitter, which in a "small settings update" decided to make things much less useful for those of us who use the service to discover new people. It used to be that if you followed Joe and he tweeted "@Mary: Like your new blog post on wombats" you'd see that update in your Twitterstream even if you didn't follow Mary (more precisely, you could turn on an option to make this happen). Then if you were interested in wombats, you could click through to @Mary's account and decide whether you wanted to follow her. Easy serendipity.

Now the option is gone, "to better reflect how folks are using Twitter regarding replies" and a unilateral declaration that the old behavior is undesirable. Horseshit. If it's confusing to new users, then change the default for the setting, don't remove it entirely. Seems to me that one of two things is going on here. Either this change was necessary for performance reasons (in which case Twitter's spin on the issue is a lie), or else this is another instance of the pernicious developer arrogance that says "we know better than our users." Either way, it stinks.

Will this be the end of Twitter? Nope. But if the change isn't reversed (which will mean Twitter is deaf to the crescendo of #fixreplies tweets), it'll make the service less useful to a significant number of users. And that's a shame.

Update: In a new blog post, Biz writes: "The engineering team reminded me that there were serious technical reasons why that setting had to go or be entirely rebuilt." Compare that with the wording from the first post: "However, receiving one-sided fragments via replies sent to folks you don't follow in your timeline is undesirable. Today's update removes this undesirable and confusing option." It is difficult to come to any conclusion from those two statements other than the simple: Twitter lied.

I'll miss the feature. I'll miss even more the thought that I could trust Twitter to be open and transparent with its users.

Double Shot #450

Wondering what coding joys today will bring.

  • dots - Gem to provide "progress dots" for your scripts, like Test::Unit uses. (via RubyFlow)

  • Rake 0.8.6 Released - With better Windows compatibility, something that more Ruby tools could use.

  • Rails Rumble - Coming again August 22.

Seed Data in Rails 3

One of the perennial code smells in many Rails applications is the use of migrations as a way to carry seed data (data that needs to be added to the database on deployment). This doesn't work well because it's tough to maintain and doesn't play well with loading up the database from the schema file.

Rails 3 now has a new answer to this: a file convention and a rake task. The file is db/seeds.rb and it can contain arbitrary Ruby code, but generally it will look something like this:

[sourcecode language='ruby']
cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
Mayor.create(:name => 'Daley', :city => cities.first)
[/sourcecode]

This file then gets run by using the new db:seed rake task, or via rake db:setup which runs create, schema:load, and seed in succession.

As with some other parts of Rails, this is the simplest thing that can possibly work. For a somewhat different take (that also works in Rails 2) take a look at Michael Bleigh's seed_fu or my own db-populate.

Double Shot #449

And so another week begins.

Better Google with Firefox

I spend an enormous amount of time with Google, and I spend it in Firefox. Fortunately, the two work well together for me. A combination of scripts and Add-ons make Google much better for me than it is out of the box. If you want to supercharge your own Google, and get rid of unnecessary nonsense, here's the combo that works for me:


  • CustomizeGoogle - Way too many options to wade through, but some of them are critical, including getting rid of all the damned ads (sorry, Google, but they're just noise to me) and rewriting image links to go to the images.

  • GooglePedia - A lot of time the info I'm after is in Wikipedia. This extension puts the best-guess Wikipedia article right on the search results page. Only useful if you have a fairly wide monitor.

  • No SearchWiki - Sorry again Google - the "SearchWiki" icons are not useful to me. This Greasemonkey script nukes them.

  • QuickDrag - Highlight any word or phrase and then give it a quick flick with the mouse to open it in a search tab.

  • Twitter Search Results on Google - If you don't want to wait for Google to build their own "real-time search" this GreaseMonkey script is a good start.

Double Shot #447

Today needs to be about writing code.


  • Record Filter - A pure-ruby DSL to replace SQL in ActiveRecord. Personally, I'd be happy with more SQL, but to each their own.

  • on APIs: more craft, less magic - "Rails seems to assume that you want to expose your database object model transparently through your API. In my experience, this is rarely what you want to do. In fact, it is a crazy way to live."

  • A git-style wiki system - Bryan Thompson ponders a way to help Rails newbies with common questions.

  • Double Shot #446

    Up early with sleepless children. Gonna be a fun day.


  • Spree 0.8.0 Released - Another milestone for this open source Rails commerce platform.

  • Maps, Geolocalization and Optimization with Maptimize - Some fun techniques for those of you doing mapping in Rails.

  • Boks - AIR application that gives you a visual designer to set up layouts for Blueprint CSS.

  • How-To: Rack Middleware for API Throttling - A more reasonable use case for Rack than some I've seen.

  • Dreaming of Rails as the Next Microsoft Access - As an ex-bigshot in the Access world, I understand the sentiment here, but...no. I approve of devs with hats though.

  • Liquibase - XML-based tool for handling database change management. Looks interesting, but hard to see how I'd integrate it with Rails development.

  • Inkscape - Open source scalable vector graphics editor. Spiffy.

  • lazy_developer - A bunch of rake tasks to make working with Rails easier, notably (for me at least) one to reverse-engineer the schema to clean migrations.

  • Double Shot #445

    Life goes on after the very successful RailsBridge launch.


  • RubyTrends - See which projects, addins, books, and practices are popular in the community. Or at least the part of the community that votes.

  • The First Rule for Software Development - Keith Casey explains why it's "Don't Trust the Users."

  • Inochi 1.0.0 - A milestone for this gem builder with lots of bells and whistles.

  • honeypot - Simple honeypots to keep spammers away from your Rails forms.

  • Double Shot #444

    Hope folks are having a good time at RailsConf. Here are a few links for those who are still reading blogs this week.


  • Rails Contributors - This project has a nice new look and up to date stats.

  • Installing Sphinx with Postgres on Leopard - Another set of instructions worth stashing away.

  • Compass - CSS meta-framework that provides a bunch of other CSS frameworks ported to Sass.

  • Ruby Toolbox - Overview of various popular projects from GitHub.

  • CrossTwine - Apparently some flavor of magic beans to speed up dynamic languages like Ruby or Python.

  • Github Pages for Fun and Win - Some people are getting pretty sophisticated about the way that they use the GitHub web UI.

  • StaticMatic - Another alternative for doing quick static sites with some syntactic sugar.

  • CouchDBX - One-click CouchDB package for OS X.

  • Tonido Plug - This is one of those things that threatens to suck money out of my wallet for no good reason: a tiny web server in a power plug.

  • Announcing RailsBridge

    This morning, I'm pleased to be able to announce a new initiative that I've played a small part in launching: RailsBridge. The easiest way to explain the reasoning behind RailsBridge is to quote from the web site:




    The RailsBridge Mission:

    To create an inclusive and friendly Ruby on Rails community.

    The RailsBridge Guidelines:

    • First, do no harm. Then, help where you can.

    • Bridge the gap from aspiring developer to contributing community member, through mentoring, teaching, and writing.

    • Reach out to individuals and groups who are underrepresented in the community.

    • Collaborate with other groups with similar goals.





    RailsBridge is the product of intense discussions among 40 or so Rails and Ruby developers. We have quite a number of projects in the launching stage, from public Rails workshops to mentoring initiatives to some fun learning experiences for Ruby newcomers.

    But the key message of RailsBridge is simple, and goes beyond any one project: the Rails community is the product of everyone who participates, and it can be a positive force for good in the world. We think there are enough Rails developers who feel this way that the somewhat negative image of Rails that is current in some parts of the web can be revised - not by claiming that we're welcoming, but by actually acting that way.

    If you're already living in the Rails community that you want, great. But if recent events have convinced you that things could be improved, come join us! If we all work together to move things forward, then the awesome Rails codebase can be joined with an equally awesome community, and everyone wins. There's more information on the RailsBridge home page, or you can come join us on the RailsBridge Google Group to help build a better future.

    Double Shot #443

    Technical first, then for those who want it, community.
    • Generate On A Lot Of Crack - Rails generator that aims to put even more magic into starting a new Rails project.

    • Aardvark - New service that promises answers from real humans by passing questions out to an IM-based network. Email me if you want an invite.

    • MetricFu 1.0.0 is Out - Rake tasks to run a whole bunch of metrics stuff over any Rails application, now exposing metrics via YAML for other tools to use as well.

    • Hg-Git - A Mercurial plugin that allows using Mercurial with a git repository.

    • inequal_opportunity - Plugin that lets you use inequality comparisons in ActiveRecord conditions with a hash syntax.

    Links about Rails, community standards, porn, and related topics start here. I think this is an important topic, but I realize many of you are just here for the software links. Skip 'em if you've had enough of the topic for now.

    Double Shot #442

    End of the month, hooray. If you're not madly rushing to meet deadlines, you might enjoy some of these links.

  • Testy - Yet another BDD framework for Ruby, this one with a minimalist vibe.

  • DFECT 0.1.0 - And yes, another testing library for Ruby as well.

  • Shmacros - A bunch of useful shoulda macros.

  • rdoc.info - Github-connected RDoc builder that you can hook into pretty much any project.

  • Flashbake - Git interface for text files written in Python that can suck things like your Twitter status into commit messages. Just plain wacky.
  • subscribe via RSS