http://www.rubyweeklynews.org/20050313.html

   Ruby Weekly News 7th - 13th March 2005
   --------------------------------------

   Ruby Weekly News is a summary of the week's activity on the ruby-talk
   mailing list / the comp.lang.ruby newsgroup, brought to you by Tim
   Sutherland.

   Special thanks this week goes to Paul van Tilburg, who converted several
   weeks of newsletters from RubyGarden format to Hobix. This provided nice
   syndication with RSS and Atom. I liked his work so much that I decided to
   save him the trouble of doing the conversion every week and just use Hobix
   myself! I intend to translate the old newsletters into this format as
   well.

   I'm interested in feedback on the new layout and functionality.

Articles and Announcements
--------------------------

     * Ruby Central 2005 Codefest Grant recipients
     ---------------------------------------------

       David A. Black announced that there were five recipients of the first
       Ruby Central Codefest Grant program.

       They each receive up to US$500, to be used for hosting "codefests",
       where groups of developers meet up at the same physical location to
       hack.

         1. Ruby Displaytag (Dave Tiu)
         2. Ruby/AGG and Ruby/View (Andrey Melnik)
         3. Gambit (James Edward Gray II)
         4. Ruby Bindings to Lucene Search Engine (Brian McCallister)
         5. RubyGems cleanup and enhancement (Ryan Davis)

     * Who wants to learn Ruby with me?
     ----------------------------------

       Andreas Sprotte is looking for a partner to write a RubyCocoa
       application for the Mac.

       "I want to learn about the model view controller pattern,
       object-orientation, basic networking and accessing a database. We'd
       email us back and forth and would collaborate via SubEthaEdit once a
       week.

       The project should be something that could be completed in about 40
       hours, maybe spread about 4 to 6 weeks."

     * Ruby Developers in Tokyo, Japan
     ---------------------------------

       Zev Blut posted a job announcement in the form of a Ruby program.
       Several people posted patches and comments. Zev followed up with
       "Thanks for all the comments and improvements to the coded request for
       Ruby developers! It was certainly more fun than writing a formal job
       posting. Hopefully, I will get a few resumes in my mailbox..."

     * SIGHTING: Ruby article in Dr. Dobb's
     --------------------------------------

       Kaspar Schiess spotted an article in the February 2005 issue of Dr.
       Dobbs called "Amazon.com - Web Services & Ruby". It was written by Ian
       Macdonald. Kaspar reports "The article is well written and makes you
       want to try out the library." (Registration required to view article.)

Quote of the Week
-----------------

   We're breaking the rules here - but this is Ruby-land, so that's okay. The
   quote this week isn't from the ruby-talk mailing list, it's from
   RedHanded, a blog run by why the lucky stiff. (With some other
   contributors from time to time.)

   _why had just observed the "haha" count between the Python and Ruby lists.

   In response, Wonko the semi-successful magician saw fit to declare

     "It's an established scientific fact that Ruby programmers laugh five
     times more per day than Python programmers, and thirty times more than
     Java programmers. And unlike the mad half-a-laugh-per-week C++ crowd,
     it's not all evil cackling laughs, either."

Threads
-------

   Interesting threads this week included:

  [Codefest Grant - RubyGems cleanup and enhancement]
  ---------------------------------------------------

   Eric Hodel announced that the Seattle.rb users' group will host the
   RubyGems codefest. "We would like to solicit your ideas on what you want
   to see cleaned up or enhanced in RubyGems." "For our Codefest we do not
   plan on making large changes to the way RubyGems works. One thing we would
   like to focus on is making the gem command more friendly when you hit ^C,
   for example."

   gabriele renzi suggested "One little thing I'd appreciate is some kind of
   feedback for the user like a progress bar both in downloading and
   upgrading cache."

   Curt Hibbs thought a GUI front-end is needed, but that it was probably too
   much work for a codefest. "What I want is something like a news reader, or
   windows file explorer. A desktop GUI with a tree control on the left and a
   detail panel of sorts on the right. With the ability to mount and browse
   multiple repositories as well as your installed gems."

   Richard Lyman had created a mockup GUI front-end at one stage, but nothing
   happened after that. He will have more time at the end of April, so may do
   work on it then.

   Jim Freeze made a different request in another thread. "I like the
   versioning of libraries, but I particularly like the versioning of
   applications."

 $ rake --version
 rake, version 0.4.15
 $ rake _0.4.13_ --version
 rake, version 0.4.13

   Jim has a script which launches the application, and would like the user
   to be able to specify which version was run. Perhaps "setenv
   RUBYGEMS_USE_APP_VERSION_xyz_app 1".

  [Possible ruby job in SF Bay Area]
  ----------------------------------

   Joel VanderWerf posted a possible job position for a Ruby programmer. The
   requirements included "Ruby: 2 years, responsible for at least one project
   of >10K lines."

   why the lucky stiff noted "I've always held to the old adage: If you've
   written 10K lines of Ruby code, then you're using it wrong."

   Dave Burt calculated the number of lines in some of the major Ruby
   libraries and applications. Rails is 2K lines, rdoc is 16K and rexml 9K.
   "So the successful applicant will have written one of the (top 5?) largest
   Ruby projects in existence."

   David Heinemeier Hansson (the main author of Rails) agreed with these
   sentiments, saying "I, for one, wouldn't fit the description above. Number
   of years is a utter lackluster indicator for job performance. Rewarding
   the use of 10K lines in Ruby is also fairly questionable."

   Joel defended the requirement, explaining "The app needs to interact with
   3rd party software that has its own highly complex (and often poorly
   designed) input/output system. It needs to do a large variety of
   geometrical calculations (not difficult ones). The programmer for this job
   needs to be comfortable with managing a large number of ugly details. That
   skill is distinct (though of course not exclusive) from writing a lovely
   little ruby library."

  [Watir needs a Win32GUI library]
  --------------------------------

   Bret Pettichord: "We've seen growing enthusiasm for Watir, a web-testing
   library that is good enough that it is convincing people to learn Ruby
   just so that they can use it." He gave a number of quotes from satisfied
   users.

   Watir controls Internet Explorer via the COM interface, but is running
   into some limits with that interface. "I'm writing to ask for help. The
   biggest problem with Watir is its support for various dialogs. These
   dialogs appear when you use a browser; for example, a login dialog or a
   security dialog or a javascript dialog. Watir mostly works by accessing
   the DOM via IE's COM interface. But there is no COM/DOM interface to these
   dialogs."

   Some work has been done using Win32 calls, but Bret thinks it would be
   better to use a general Win32 GUI testing library that already exists. Any
   suggestions?

  [what about a rails-based gforge like?]
  ---------------------------------------

   Lionel Thiry asked "isn't there a need for a rails-based gforge like
   framework?". GForge is a PHP application that provides support for
   collaborative software development, with forums, mailing lists, CVS, bug
   tracking etc. It is used by Rubyforge.

   gabriele renzi thought that it was quite a complex project, and rewriting
   it in Rails wouldn't gain you much. Lionel countered this by quoting the
   claim from Rails enthusiasts that web applications can be developed up to
   ten times faster with Rails. (Although this claim was actually originally
   made in comparison to Java frameworks, not PHP ones.)

   Martin DeMello felt that GForge was not primarily a web application -
   "There are a lot of complex details on the server side that would have to
   be redone for very little gain."

  [need for a class_attr methods collection]
  ------------------------------------------

   Lionel Thiry suggested class_attr methods, similar to attr_reader,
   attr_writer, attr_accessor but for class instance variables.

   class MyClass
       @a = "value"
       class_attr_reader :a
   end
   puts Test.a # it doesn't work

   ts gave the following:

   class MyClass
       @a = "value"
       class << self
           attr_reader :a
       end
   end

   ts also reminded Lionel not to confuse "class instance variable (i.e. @a
   in your example) and class variables (i.e. @@a)".

  [Great Computer Language Shootout]
  ----------------------------------

   Isaac noted that Ruby is currently missing about a dozen programs from the
   Great Computer Language Shootout (a set of benchmarks for many programming
   language implementations).

   "If you have a few moments please contribute stylish Ruby programs."

  [nonblock extension for win32?]
  -------------------------------

   Bill Kelly recalled reading about an issue with blocking IO on Windows,
   and thought that someone had announced a library for Windows that provided
   non-blocking support. Where could he find this library?

   "One of my applications has an unusable feature on windows at present,
   because I need a nonblocking way to read from a pipe returned from
   popen(). Is there any nonblocking way to accomplish this in win32 ruby?"

   Daniel Berger explained that the discussion had been about a patch to the
   Ruby interpreter to fix problems with blocking sockets, not a separate
   library. The patch has been included in CVS. As far as popen() goes, the
   win32-pipe library provides a replacement that will work asynchronously
   (although the API is different).

   Bill said that he'd probably switch to using sockets so his code was
   portable.

  [Redesign 2005 Blog]
  --------------------

   why the lucky stiff linked to the Redesign 2005 Blog. It presents two
   mockups of a new ruby-lang.org website. These were prepared by the
   vit-core team.

   Feedback should be posted to the blog.

  [ODBC OG/ActiveRecords]
  -----------------------

   Luke Galea wanted to use Microsoft Access and Sybase Anywhere databases
   from Ruby. There aren't any Ruby drivers for these at the moment, so he's
   using Ruby-ODBC. "BUT: I would like to use a nice object-relational
   library like ActiveRecord or OG.. Has anyone ever had any success using
   either over ODBC?"

   David Heinemeier Hansson warned that "Generic ODBC adapters are
   problematic because the databases underneath might use different
   strategies for stuff like auto-incremented columns. A Access or Sybase
   adapter that goes through ODBC is certainly possible. I know that shashank
   and a few others were looking into that for Active Record at some point."

   Kirk Haines said that the Kansas ORM (Object Relational Mapper) should be
   able to use ODBC connectios. "Kansas, as an ORM, has been
   feature-incomplete, but stable for many months, and I use it on probably
   20 different production applications. It used DBI for simplicity and
   coverage, making it lightweight."

  [Quoted Printable (#23)]
  ------------------------

   James Edward Gray II set out this week's Ruby Quiz. The task is to write a
   filter that handles the "quoted printable" encoding. (This encoding is
   primarily used in email.)

   For example, the character "<" becomes "=3C".

  [Roman Numerals (#22)]
  ----------------------

   James also summarised last week's quiz, to write a convertor between Roman
   and Arabic numerals.

   One interesting technique was used by Dave Burt. He defined
   Object.const_missing so that constants like IX would automatically be
   converted into RomanNumeral objects.

   "My thanks go out to friends and Romans alike."

  [Malformed UTF-8?]
  ------------------

   Ian Macdonald had recently been getting ArgumentError exceptions from a
   calendar library. The error messages states that the calendar event
   contains malforned UTF-8. Ian gave an example of text that gets rejected
   by String#unpack("U*").

   Simon Strandgaard pointed out the error in the text - it was indeed
   invalid UTF-8.

   Nikolai Weibull posted a program that checks whether text is properly
   formed UTF-8. Unlike String#unpack, this program gives the actual position
   of the first invalid character.

  [YAML obj merging]
  ------------------

   gga wanted to merge two Hash objects in a `recursive' way, e.g.

 irb> a = { 'A' => { 'A1' => 'a' } }
 irb> b = { 'A' => { 'B1' => 'b' } }
 irb> b.mix(a) # ficticious method
 {"A"=>{"A1"=>"a", "B1" => 'b' }}

   Trans said that Ruby Facets provides a weave method which "does what you
   wish and a little more".

  [Is iterating in lock-step possible?]
  -------------------------------------

   This thread considered external vs internal iteration.

 # External
 while g.next?; foo(g.next); end

 # Internal
 g.each { |x| foo(x) }

   The Generator class can be used to convert internal iterators into
   external ones, but it is slow. (1000 times slower according to William
   Morgan's benchmarks.)

   Roshan James wanted to iterate over two Enumerable in parallel, without
   first converting each into an Array. Enumerable#zip can be used for
   parallel iteration, but it converts its arguments into Arrays.

   ts gave the example of

 %w(eins zwei drei).zip([1,2,3]) {|a, b| puts "#{a} #{b}" }

   It was felt that Generator was indeed the right way to go. If it was too
   slow then the objects being iterated over could be changed to have an
   external iterator interface.

  [DRb for dummies !]
  -------------------

   Svend-Erik Kj Madsen had a problem using the ACL (access-control list)
   class with drb (distributed Ruby). The solution was as simple as require
   'drb/acl', but the thread gives us a good excuse to demonstrate ACL.

   Quoting part of Svend-Erik's code, with the extra require,

 require 'drb'
 require 'drb/acl'

 acl = ACL.new( %w[deny all
   allow 192.168.1.*
   allow localhost ] )

 DRb.install_acl(acl)

  [Simple extension question]
  ---------------------------

   Mark Probert asked what the simplest way of clearing an Array from C was,
   i.e. the C equivalent of foo.clear.

   Daniel Berger replied: rb_ary_clear(foo).

   "Tricky, eh? :-P For a complete list of methods, take a look at intern.h."

  [Encoding a multipart/form-data for posting via HTTP]
  -----------------------------------------------------

   Dema announced "After googling around (with no luck) for a while for a
   function that would encode a hash into a multipart/form-data to be sent to
   a HTTP server via POST, I decided to read the RFC and write my own." It
   does not yet handle complex cases.

   Dave Burt thought this should be in Net::HTTP::Post.

New Releases
------------

     * Fast Change Set Tool

       Zed A. Shaw announced the first release of a revision control tool
       he's been working on. FastCST allows you to create full changesets
       between two directories and apply them.

     * GeoIP.rb

       Clifford Heath translated some of the GeoIP C library into Ruby. GeoIP
       is "Geographic database by IP address" and tells you which country the
       user of an IP address is probably in.

     * Rubilicious 0.1.4

       Paul Duncan improved Rubilicious, a Ruby interface to the social
       bookmarking site del.icio.us. #delete and #update are now supported,
       and #all is much more efficient.

     * Imlib2-Ruby 0.5.0

       Paul Duncan also released his latest bindings to the Imlib2 image
       processing library. Packaging and documentation were improved and an
       issue that came up when using Imlib2-Ruby with Rails was resolved.

     * Amrita2-1.9.3

       Taku Nakajima issued forth a new version of Amrita2, an XHTML/XML
       templating library. Support for rich client-side Javascript interfaces
       has been added - Amrita2 now generates both Ruby and Javascript code
       from the template.

     * Irb enhancements

       Cs. Henk made some enhancements to irb, including bash-style
       multi-line editing and context-sensitive history completion. These
       features were met with great enthusiasm.

     * priority queue using RBTree

       Joel VanderWerf "patched" together a PriorityQueue implementation
       using Queue and RBTree (a Ruby red-black tree implementation). He also
       thought that RBTree should be part of the standard Ruby distribution,
       and a couple of people concurred.

     * TkRTTimer class

       This is not exactly a "new release", since Ruby/Tk is part of the
       standard distribution, however: Hidetoshi NAGAI announced the addition
       of the TkRTTimer class to Ruby/Tk. It can be used in place of TkTimer
       and provides something that is closer to a realtime timer.

     * new eric3 snapshot

       Detlev Offenbach announced a new snapshot of eric3, an IDE that
       supports Ruby. A Ruby debugger was added.

     * Kwartz-ruby 2.0.0-beta3 - a template system for Ruby, PHP, and Java

       kwatch enhanced his multi-language templating system. It now includes
       include support.

     * Nitro + Og 0.12.0

       George Moschovitis delivered "A careful blend of new features and
       subtle improvements to the existing infrastructure." Nitro is a web
       application framework, while Og is an object-relational mapper.

       Nitro now allows action meta-data. This is used for example to provide
       routing (rewrite) rules. The templating engine can also now be used
       standalone from the rest of the system.

       A new Og feature is automatic generation of finders for all
       properties.

     * Rails 0.10.1: FCGI stability, WS generator, tons of fixes

       David Heinemeier Hansson announced the latest version of the Rails web
       application framework. "Action Web Service has seen the most
       interesting improvements feature-wise with a new generator and tie-ins
       with the testing setup." XML-RPC support has been improved.