It's been a very busy month, I can tell you.
Ruby/Google is at
release 0.4.0 now. This is a beta release and will probably
be the last for a while. All the useful features that I can
think of are now present and, to the best of my knowledge,
functioning correctly.
bash-completion
continues to do well. It's in Debian and Mandrake's Cooker
release, but was pulled from Red Hat 7.3 for the fourth
beta. Oh well...
I'm currently working on Ruby/DICT, which will be a client
and client-side library for the DICT protocol, as defined in
RFC2229.
I really can't speak highly enough of the Ruby programming
language.
Just look at this piece of code:
module HTML
def method_missing(methId, data, attrs={})
tag = methId.id2name
tag.upcase!
attr_str = ''
attrs.each do |key, value|
attr_str << sprintf(' %s="%s"', key.upcase, value)
end
sprintf("<%s%s>%s</%s>", tag, attr_str, data, tag)
end
end
Assuming that has been saved as html.rb, you now
have a very simple module that returns strings marked up as
HTML, just like CGI.pm in Perl.
You call it like this:
#!/usr/bin/ruby -w
require 'html'
include HTML
puts a('Google', 'href' => 'http://www.google.com/')
puts ul(li('item1') + li('item2') + li('item3'))
The output looks like this:
<A HREF="http://www.google.com/">Google</A>
<UL><LI>item1</LI><LI>item2</LI><LI>item3</LI></UL>
Voila, no more arsing around with HTML tags in your scripts.
This is how it works. You simply call the tag that you
require as if it were a method in the module HTML.
However, no such method is defined, so Ruby invokes the
method method_missing to handle the error. By
default, this method is, itself, undefined, which leads Ruby
to raise an exception.
However, in the module above, the method has been defined.
As its argument, it is passed the method as a symbol name,
then the original arguments to the non-existent tag method.
The last argument is optional and is a hash of
attribute/value pairs, common in so many HTML tags.
The method then converts the tag and attributes to
upper-case, formats the tag around its content, and
ultimately returns it to the calling code.
The thing that's remarkable about the above code is how
brief it is and how easy it was to write. It took me all of
five minutes. Consider how the same code would look in Perl
or Python.
Sarah and I are leaving for a long weekend in Vancouver,
Canada on Friday. I'm rather looking forward to that. It
will be another nice break, probably our last in the run-up
to the wedding in August.
It looks like we're going to have to move. Our landlord
wants to sell our apartment and we're not about to cough up
the $425,000 he wants for the place, so we're going to be on
the move again.
I think we're going to end up in Menlo Park this time. We've
seen a couple of really nice places and I hope to sign a
lease later this week.
It'll be a shame to leave this place. I really like Palo
Alto and being close to University Avenue has been
fantastic, but there just seems to be a dearth of large
apartments in this town. Menlo Park's just up the road,
though, so it's not like we'll be travelling very far.