12 comments

[ 3.2 ms ] story [ 28.1 ms ] thread
The right tool for the right job.
And sometimes, you have to make that tool yourself.
What an awesome marriage of Qt and Ruby. Two of my favorite languages and toolkits used appropriately to solve a real problem.

Well done! And thank you for open sourcing this.

Well done!

whats Qt ? If I google I get a GUI platform from Nokia. I guess Qt being referred here is different ?
(comment deleted)
It's the same Qt. It also provides lots of stuff besides GUI Libraries.
Qt's a pretty general toolkit for C++ applications – a pretty huge chunk of it has nothing to do with GUI programming (and what, for instance, the KDE desktop and associated tools are built on):

http://doc.qt.nokia.com/4.6/classes.html

It was fairly recent that Nokia bought them; before that Trolltech was an independant company.

It's a kickass toolkit (and my toolkit of choice) for cross-platform desktop apps. Just keep in mind that it's GPL licensed for free apps and that the commercial license is expensive for a one-man shop.
As a side note, I managed to drop it into an existing ActiveResource-using app with this code:

  module HashAccessor
    def method_missing(method)
      value = self[method] || self[method.to_s]
      raise NoMethodError.new unless value
      value
    end
  end

  Hash.send :include, HashAccessor

  module ActiveResource
    class Base
      def self.find(from=nil, params={})
        resource = from == :all ? self.collection_name : self.element_name
        values = QAR::Resource.new(self.site.to_s, resource).find(from, params)
      end
    end
  end
Qt is an excellent platform for building things, this is another demonstration of that.

More people should look at it. Even the datastructures are pretty much a joy to use.

As somebody who has dealt with ActiveResource in a production environment, thank-you!

My company noticed an absolutely whopping performance boost when we dropped XML in favor of JSON for a transport format, fwiw. Ruby has quite possibly the slowest XML parsing libraries on the block (even when you wrap libxml), and we avoid parsing XML at all costs now.