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

Ruby Weekly News 24th - 30th October 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, with contributions from Christophe Grandsire.

   [Contribute to the next newsletter.]

Articles and Announcements
==========================

     * Are there any lecturers or professionals... 
     ---------------------------------------------

       Daniel Lewis asked if any "lecturers or professionals" were available
       to give a presentation on Ruby, or on Rails, to the Brookes Computing
       Society in Oxford, England.

     * Monitoring network traffic with Ruby and Pcap 
     -----------------------------------------------

       Daniel Berger spotted an article [Monitoring network traffic with Ruby
       and Pcap] on Ars Technica, written by Ryan Paul.

     * OSDC (Melbourne, Australia) open for registrations 
     ----------------------------------------------------

       Australia's second Open Source Developers Conference (held in
       Melbourne) is now accepting registrations. (Australia is an island to
       the west of New Zealand.)

       "The conference is running from Monday 5th - Wednesday 7th December
       2005."

User Group News
===============

     * New Haven Ruby Brigade Formed! 
     --------------------------------

       The University of New Haven Ruby Brigade have voted to disband :-(
       and re-form as the New Haven Ruby Brigade :-), for everyone in Southern
       Connecticut.

       See also [UNH.rb may soon become NewHaven.rb].

     * Beer & Pizza SIG; 8 pm, 10/26, San Francisco, CA, USA 
     -------------------------------------------------------

       Rich Morin announced another Beer & Pizza meeting in the San Francisco
       Bay Area - "No program; just a way for folks to get together and chat
       about Ruby, Rails, etc."

       The meeting is (haha, was) on Wednesday, October 26th 2005.

     * Gauteng.rb meetup tonight (Tuesday 25 October) 
     ------------------------------------------------

       Luke Randall foretold the first meeting of Gauteng.rb, in Sandton
       City, South Africa.

     * grandrapids.rb November Meeting and Preparing for December 
     ------------------------------------------------------------

       November and December meetings for the grandrapids.rb group in Grand
       Rapids, Michigan were covered off by zdennis.

     * VanRuby Meetup Tonight & Canada on Rails Conference Announcement ! 
     --------------------------------------------------------------------

       Nathaniel Brown announced the next VanRuby meeting (Vancouver), as
       well as "Canada on Rails" on April 13th and 14th 2006; the first
       Canadian conference about Ruby on Rails.

Quote of the Week
=================

     * Rent-a-Matz 
     -------------

 |> Hmm, how many of you have had Matz in your car? :D
 |> Myself, Eric, some others...

 |Does a rental count?

 Where was rental Matz available?  I'd like one.

                                                         matz.
Threads
=======

  Ruby Weekly News 17th - 23rd October 2005
  -----------------------------------------

   Last week we cheered James Edward Gray II for reaching a year's worth of
   weeks of Ruby Quiz.

   Curt Hibbs said that it was well deserved, and added that such recognition
   is important, as it "provides people like James with a little extra
   motivation to keep it up."

   | So, the next time you're using some open source ruby project or
   | benefiting from some community effort and you're thinking "this is
   | really nice", don't hesitate to drop a note to the author or to
   | ruby-talk saying thanks. It really does make a difference.

  how private is private in ruby?
  -------------------------------

   Peter Ertl wondered why it was possible to 'send' a private method:

####
 class MyUltraSecretKeystore
   private
   def key
     return "nobody-should-read-this-ever"
   end
 end

 ks = MyUltraSecretKeystore.new

 puts ks.send(:key) # -> "nobody-should-read-this-ever"
####

   James Edward Gray II indicated that although tools like send could indeed
   be dangerous because of the ways they bypass method scope, it was a
   trade-off with their sheer power.

   Edward Faulkner added that Peter's choice of example indicated a
   misunderstanding of the meaning of "private" :

   | "private" is not intended as a security measure. It's an encapsulation
   | technique. You'll find this is generally true in other languages as
   | well. You can certainly subvert "private" in C++.

   an explanation that Hal illustrated with a very good (and applauded)
   analogy:

   | I made an analogy the other day with the movie Apollo 13. Remember when
   | Bacon's character had been awake for many hours and was, as he said, "a
   | little punchy"? There was a toggle switch which would separate the two
   | modules (and thus doom to death the other two astronauts who were
   | spending their time in the other one). He taped a piece of paper over it
   | saying "NO."
   |
   | That's how "private" works.

   Jeremy Kemper mentioned that currently in Ruby 1.9 one cannot send private
   methods.

   But in the end privacy in Ruby can never be 100% ensured since as David A.
   Black indicated, one can always reopen the class itself and redeclare the
   private methods public.

  What's your Ruby Number? (self.to_i)
  ------------------------------------

   Hal Fulton offered a test to determine your Ruby number "in the spirit of
   the old "purity test" and the "nerdity test" that was derived therefrom."

   The instructions are "cut, paste, run. Or just cut and run."

   Hal suggested that Jim Freeze should get extra points for having a last
   name the same as a method in Ruby's core library, to which David A. Black
   generously offered:

   | We doubled our number of core-method-named people at RubyConf this year,
   | thanks to the presence of Adam Keys as well as Jim Freeze.
   |
   | I'm still holding out for Matt Tainted? or Joe Instance_variable_get.
   | And if anyone legally changes his or her last name to a core method, he
   | or she will be admitted free of charge.

   Ezra Zygmuntowicz:

   | Hopefully we will never have a method called zygmuntowicz ;-) But I
   | thought =~ was pronounced "zygmuntowicz"! ...

   Joel VanderWerf: "That's it. I'm legally changing my name to <=>.
   Sincerely, Mr. Spaceship."

   _why:

   | I think JEGII should keep his score cause he hacked it. David Black
   | deserves more points, though. I ended up with 4, but only because I knew
   | that I couldn't take the test in good conscience without adding a few
   | questions that would severely dock points for unsavory traits.
   |
   | I also filled it out for Minero Aoki, as a kind of fantasy quest. And
   | that really got me excited about starting an RPG based around the
   | premise of being Minero Aoki. Or maybe just a flight simulator.

  Ruby's GC
  ---------

   Jeremy Tregunna asked for a technical description of Ruby's current
   garbage collector.

   Eric Hodel said that the short answer is "a conservative mark and sweep
   garbage collector", and Matz gave the longer one:

   | conservative
   |
   |   we use system stack and CPU registers for tracing root as well as
   |   usual language roots (global/local variables etc.). jmpbuf is used
   |   to access registers.
   |
   | mark and sweep
   |
   |   simple mark and sweep, but uses Knuth's algorithm to avoid crash for
   |   deep recursion.

   Gabriele Renzi asked about the `generational' GC that he recalled was
   being worked on - "are there some news or this simply never happened and
   I'm crazy?"

   Matz said that a generational GC had been implemented, but it had failed
   to perform better than the current collector. He will try again after YARV
   is merged.

  TumbleDRYer (#53)
  -----------------

   Hugh Sasse created this week's Ruby Quiz. The task is to write a program
   which takes repetitive input and creates a Ruby program that generates the
   input, without the repetition. It's all about DRY: Don't Repeat Yourself.

   "This quiz is about writing a program which we'll call TumbleDRYer, which,
   given repetitive input, will create ruby code to generate that input, such
   that the generating program has much less repetition in it."

  Cleaner syntax for .map (is there already a way, or ruby2 idea?)
  ----------------------------------------------------------------

   Ron M found himself writing code like the following all the time:

 people.map { |person| person.email_addr }

   This is pretty short already, but could we make it even shorter (and less
   repetitive) by adding syntax like people[*].email_addr ?

   The syntax could be extended to support nested arrays, so that
   departments[*].people[*].email_addr would be equivalent to today's

 departments.map { |dept|
   dept.people.map { |person| person.email_addr }
 }

   Trans said that Facets supports something like this already with
   people.every.email_addr, or people.%.email_addr.

   What's wrong with just using map?, asked David A. Black.

   Dave Burt argued that it's too verbose for simple cases, offering the
   example of
   
 result = array.map { |element| element.transform }

   where the word element is written twice, compared to Groovy, where
   implicit parameters enable

 result = array.map { it.transform() }


   David A. Black came back with a new thread, ["Readability" inflation] in
   which he pondered the suggestions for changing Ruby's syntax that keep
   popping up.

   | I think what's happening is that people who've used Ruby for a while get
   | used to it, and then they sort of shift their readability threshold. In
   | other words, if you've seen this:
   |
   | a.map {|b| b.meth }
   |
   | for several years, then even though it looked beautiful and concise and
   | transparent to you at first, it will start to look verbose and
   | syntactically inefficient. So then you might want to have:
   |
   | a.every.meth {|b| (or implicit var, or whatever) }

   ...

   | So I think there's a kind of readability inflation going on: people who
   | are acclimatized to Ruby start feeling comfortable about going to the
   | "next" level of line-noise and/or compactness.
   |
   | I'd like to sound a note of caution about this. I think it has the
   | potential to disserve Ruby's interests, by moving the language away from
   | the thing that has been proven to be so attractive.

   James Britt had a couple of theories. The first was that early users of
   Ruby were "language geeks" already, who were accustomed to a wide range of
   syntaxes. The second theory is that "Ruby is a "victim" of its own
   success" - users' expectations are raised because it is good for creating
   DSLs (Domain-Specific Languages).

   Several people said they didn't find the { |foo| ... } syntax that great
   when they started with Ruby anyway.

   The thread swung back to the "redundant block argument" topic of the
   original thread, with suggestions like
 playlist.sort_by :track_length
   as an alternative to
 playlist.sort_by { |e| e.track_length }

   Brian Schr?der proposed that a well-named argument can make the code
   easier to read. Compare for example
 playlist.sort_by :length
   with
 playlist.sort_by { |track| track.length }

   This can be particularly important with a dynamically typed language
   (perhaps more precisely, "latently-typed") like Ruby, where you don't have
   type declarations in your code telling you what sort of objects you have.
   Your editor can attest that this extra bit of verbosity has proven
   invaluable when it comes to maintaining his own code - especially in
   keeping track of the shape of his data-structures. (For example, that a
   playlist is made up of tracks.)

New Releases
============

  priority-queue 0.1.2
  --------------------

   Brian Schr?der polished'n'released his priority queue implementation,
   containing both a pure-Ruby version and a C extension.

  FuseFS-0.5
  ----------

   "Lo, another travesty was visited upon the ruby-talk community ... and
   this one was named ... FuseFS 0.5!", trumpeted Greg Millam.

   FuseFS allows you to define filesystems in Ruby, for example the
   railsfs.rb filesystem which exposes your ActiveRecord objects as files
   containing YAML data.

   Changes were made to update the library to FUSE 2.4, as well as adding the
   ability for filesystems to specify the sizes of their virtual files, and a
   lower-level interface to FUSE (useful for streaming).

   FuseFS is Linux only, for now.

  RubyPhone 0.1 released.
  -----------------------

   Gregarican introduced RubyPhone, which allows a "TSAPI-compliant PBX
   system to join a CTI environment". Mkay.

  Rails 1.0 Release Candidate 3 (0.14.2): A bunch of little things
  ----------------------------------------------------------------

   David Heinemeier Hansson announced the third release candidate for Rails
   1.0, fixing a memory leak with render_component and other issues.

  Instant Rails 1.0 preview3 Released
  -----------------------------------

   Curt Hibbs posted preview3 of Instant Rails 1.0, a "one-stop Rails runtime
   solution containing Ruby, Rails, Apache, and MySQL, all preconfigured and
   ready to run." (Currently Windows-only.)

   Several bugs were fixed and the components were upgraded (including Rails
   to 1.0 preview3.)

  Nitro Spark 0.6.0
  -----------------

   George Moschovitis happily announced a new version of Nitro Spark, a wiki
   system powered by the Nitro web application framework.

  Facets 2005-10-30
  -----------------

   Trans announced the Halloween version of "The Proverbial Zoo-of-More for
   Ruby".

   "Ruby Facets is a cornicopia of extension methods and module/class
   additions for the Ruby programming language."

  rttool-1.0.0
  ------------

   rubikitch released version 1.0.0 of rttool, a program for converting files
   in the RT human-readable table format into HTML and plain-text.

   rttool-1.0.1 was later announced.

  Nitro + Og 0.24.0, Annotations, KirbyBase, SCGI, Og Evolution, Gen, Dynamic
  ---------------------------------------------------------------------------
  CSS...
  ------

   George Moschovitis released new version of Og and Nitro, the former being
   an object-relational mapper library, and the latter a web application
   framework.

   A number of significant features were added.

  gdiff / gpatch 0.0.1 released
  -----------------------------

   Brian Schr?der posted gdiff / gpatch version 0.0.1 - pure-Ruby versions of
   the Generic Diff binary-diff format.

   See also [Ruby Quiz for building up Ruby?], which proposed this task as a
   Ruby Quiz, as it will help RubyGems, which has a problem with the index
   file being too large.