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

Ruby Weekly News 12th - 18th September 2005
-------------------------------------------

   Ruby Weekly News is a summary of the week's activity on the
   ruby-talk mailing list <=> comp.lang.ruby newsgroup,
   brought to you this week by Tim Sutherland and Christophe Grandsire.

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

     * Registration for RubyConf 2005 is now CLOSED!
     -----------------------------------------------

       David A. Black: "Registration for RubyConf 2005 is now closed. We have
       reached full capacity, based on paid registrations."

       | Any registration fees we receive from this point on will be refunded
       | to you, minus processing fees if any.

     * Job site
     ----------

       Jason Toy announced a website created by himself and John Li for
       posting and finding Ruby related jobs.

       Jobs.Rubynow.com was created using Rails and PostgreSQL.

       James Edward Gray II: "How funny! You just stole the Ruby Quiz idea
       for tomorrow."

     * Article: The Fine Art of Computer Programming
     -----------------------------------------------

       Christophe Grandsire linked to an article from the Free Software
       Magazine entitled "The Fine Art of Computer Programming".

       | Since fun in programming is a recurrent theme among Rubyists, and
       | there is quite a culture among us of clear, readable code, I thought
       | it might interest some people here.

User Group News
---------------

     * The 2nd Hamburg.rb meeting in September
     -----------------------------------------

       Hamburg.rb are meeting more often, with September 21st being the
       second one of the month.

     * Boston.rb Meeting Tonight!
     ----------------------------

       "Tonight" = September 13th, so if you're a Bostonite who is hearing
       about this for the first time then you'll have to wait for the next
       one.

     * LA Ruby Meetup
     ----------------

       Joshua IT Smith announced that work was being done to organise an LA
       Ruby group. The first meeting is scheduled for October 13, 2005.

Threads
-------

  detaching required scripts
  --------------------------

   MiG's application used .rb files to represent `plugins' that could be
   loaded and unloaded, with each one containing a module definition.

   The application implemented unloading by calling remove_const to remove
   the module, however attempts to then re-require the plugin would fail,
   because Ruby, noting that the file has already been required, won't load
   it again.

   Lyndon Samson pointed out that you could just use load instead of require
   in this case. The latter un-conditionally loads the file without worrying
   about whether the file has already been seen.

  ruby-dev summary 26862-26956
  ----------------------------

   Masayoshi Takahashi summarised the Japanese list ruby-dev, "in these
   days."

   Inside is Enumerable#count with block, String tainting, and a patch from
   nobu to return an Enumerator for methods like Array#each when they are
   called without a block.

  ruby and aop
  ------------

   Ever written code like this?

 ###
 class OneTreeHill < TheDomain
   alias old_tree tree

   def tree
     warn("No longer any tree")
     old_tree
   end
 end
 ###

   Did you feel wrong and dirty? Dirty and wrong? Had nightmares about
   someone else also wrapping the same method in the same way?

   gabriele renzi reminded us of an article by Mauricio Fernandez from 2004
   that shows how to do it in a nicer way, by using instance_method and
   define_method.

 ###
 class OneTreeHill < TheDomain

   prev = instance_method(:tree)

   define_method(:tree) do
     warn("No longer any tree")
     prev.bind(self).call
   end

 end
 ###

   Even better, with Module#wrap_method from the Ruby Facets project:

 ###
 require 'facet/module/wrap_method'

 class OneTreeHill < TheDomain
   wrap_method(:tree) do |old|
     warn("No longer any tree")
     old.call
   end
 end
 ###

   The thread discussed several points related to AOP (Aspect-Oriented
   Programming) in Ruby.

  gsub(/Ads by Goooooogle/, "PayPal DONATE").suggest?
  ---------------------------------------------------

   x1 thought it would be better to have a `donate' option on
   http://www.ruby-lang.org/ rather than the current Google ads, and
   personally offered to give USD$100 if this was done.

   James Britt said that it was possible to donate at Ruby Central.

   David Brady:

   | I know all ads are annoying, but Adsense seems to be the least obtrusive
   | of the lot. I have no idea what ruby-lang.org is making but all of my
   | sites typically make $US5-20 per month per thousand daily visitors. All
   | of my sites are running donations as well; adding Adsense had no effect
   | on donation rates. So if ruby-lang.org is pulling 20k daily visitors,
   | that's somewhere around $US200 of "free money" to help pay for hosting.

   James Britt: "Does ruby-lang.org get 20K daily visits?"

   Gavin Kistner: "Hell, does ruby-lang.org get 20k *monthly* visits?"

   How much money is gained from the ads? How many people would be willing to
   make a donation if it meant getting rid of the ads?

  Ruby Jobs Site (#47)
  --------------------

   James Edward Gray II's Ruby Quiz for the week:

   | When I first came to Ruby, even just a year ago, I really doubt the
   | community was ready to support a Ruby jobs focused web site. Now though,
   | times have changed. I'm seeing more and more posting about Ruby jobs
   | scattered among the various Ruby sites. Rails has obviously played no
   | small part in this and the biggest source of jobs postings is probably
   | the Rails weblog, but there have been other Ruby jobs offered recently
   | as well.
   |
   | Wouldn't it be nice if we had a centralized site we could go to and scan
   | these listings for our interests?

   Develop such a site, using whichever Ruby tools you choose.

  implode function?
  -----------------

   Julian Leviston asked if Ruby had anything like PHP's implode function.

   It would work like:

 ###
 z = %w[yeah cool mad awesome funky]
 z.implode(', ') # -> 'yeah, cool, mad, awesome, funky'
 ###

   "I guess I'll just go write one."

   No need, thanks to Array#join:

 ###
 z = %w[yeah cool mad awesome funky]
 z.join(', ') # -> 'yeah, cool, mad, awesome, funky'
 ###

   Florian Frank noted that String#* can also be used here:

 ###
 z = %w[yeah cool mad awesome funky]
 z * ', ' # -> 'yeah, cool, mad, awesome, funky'
 ###

   This led Martin DeMello to say that its a shame there is no String#/. Of
   course, Florian then popped back in with "Ha, now there is", making / an
   alias for split.

  Get to the Point: Ruby and Rails Presentation Slides
  ----------------------------------------------------

   John W. Long and Ryan Platte's uploaded their introduction to Ruby and
   Rails presentation slides that they used at the Chicago ACM.

   "Comments and suggestions are welcome. We would like to present this again
   in the future, so it would be good to clarify things a little."

  website screen scraping with Mechanize or Rubyful Soup
  ------------------------------------------------------

   Dan Kohn was trying to do some website "screen scraping" - i.e. write a
   script that acts like a web browser, submitting forms and extracting data
   from web-pages.

   He had come across WWW::Mechanize and Rubyful Soup which looked useful,
   however he couldn't find much in the way of examples or documentation for
   them.

   (Rubyful Soup is a HTML parser that is tolerant of incorrect markup, so
   can work with HTML that WWW::Mechanize chokes on. Lyndon Samson mentioned
   an alternative called Tidy, which transforms invalid HTML into something
   more parsable.)

   | Dan: My ultimate goal is to create a series of screen scrapers that are
   | able to access airline websites (including entering username and
   | password, dealing with redirects, etc.), find my mileage and recent
   | flights, parse the data, put it in some variables, and save it to MySQL
   | (with rails).

   Dan did find one example using WWW::Mechanize, but his modification of it
   didn't work. Michel Martens pointed out his error, and Dan was then able
   to run the example successfully.

  Ternary operator request
  ------------------------

   Robert Mannl asked for feedback on the idea of adding a ternary operator
   expression in cases of methods ending in a question mark, in order to
   allow:

 ###
 some_method? a : b
 ###

   instead of:

 ###
 some_method? ? a : b
 ###

   Although Alex Fenton called it a "cute idea", he and others were of one
   mind to say that it would be extremely difficult to parse, both for Ruby
   and for humans. David A. Black summed it up nicely:

   | I also think the two ?'s in question, though both ?'s, are really
   | semantically quite distinct.

   and:

   | There's always `if' :-)

   Ara T. Howard then showed how something similar (but not identical) could
   be achieved, using traits:

 ###
 harp:~ > cat a.rb
 require 'traits'

 trait 'foo' => true

 puts( foo ? 'foo' : 'not foo' )
 puts( foo? ? 'foo' : 'not foo' )

 foo false

 puts( foo ? 'foo' : 'not foo' )
 puts( foo? ? 'foo' : 'not foo' )

 harp:~ > ruby a.rb
 foo
 foo
 not foo
 not foo
 ###

   The trick is that both foo and foo? are defined.

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

  RType-0.2
  ---------

   Yuichi Yoshida wrote a new Ruby interpreter, in Haskell.

   gabriele renzi: "this is really cool, thanks for sharing it. But I wonder
   why did you choose to write a ruby interpreter in Haskell?"

   | Yuichi: The strange feature of Haskell absorbed me, especially lazy
   | evaluation did. What a good sound, lazy! ;-)
   |
   | I wanted to write somthing and learn more about Haskell, and Ruby
   | interpreter is a good theme to satisfy my desire.

  RedCloth 3.0.4 -- Humane Text for Ruby
  --------------------------------------

   whytheluckystiff polish'ed humane markup parser RedCloth.

   "Lists that were throwing exceptions are gone. Escaping of stray angle
   brackets. Single- and double-quote directional wrongness is made aright."

  World's 1st Hamster-Powered Mud Server! (in Ruby)
  -------------------------------------------------

   Jon A. Lambert announced the "World's 1st Hamster-Powered Mud Server! (in
   Ruby)". Presumably, until now Hamster-Powered Mud Servers had been written
   in other languages.

   Read the announcement to see why Nick Faiz described it as "the best
   software release announcement email I've ever read!"

  gmailer 0.1.0
  -------------

   Park Heesob's gmailer library can fetch emails, use file attachments, get
   contact lists, invite people, edit labels, preferences, star and archive
   messages.

   The API is slightly more high-level now, with methods returning objects of
   classes like Conversation and Contact instead of hashes.

  Zero to Rails
  -------------

   Ryan Davis: "From absolutely nothing to a running rails app in under two
   minutes. SQL not required."

   All due to "one part OmniGraffle 4, one part applescript, one part ruby,
   and a dash of animosity towards SQL". (OmniGraffle is a diagramming tool
   for MacOS X.)

   "Awesome, disarming, astonishing!" tittered Piergiuliano Bossi.

  Pimki 1.8.092
  -------------

   Assaph Mehr fixed bugs in Pimki, "The Wiki-based PIM to GetThingsDone".

  acgi-0.1.0
  ----------

   Ara.T.Howard released the second version of acgi, "a drop-in replacement
   for ruby's built-in cgi", but with persistence, speed and "no apache
   modules" (unlike fastcgi).

   Benchmarks with Apache showed that acgi was around five times faster than
   plain CGI, but FastCGI was a further three times faster.

   Dan Janowski: "My applause to you on trying to replace FastCGI. I gave up
   on it after inexplicable weirdness began to set in."

   He also gave some ideas for improving acgi's performance.

  ritex 0.1: WebTeX -> MathML
  ---------------------------

   William Morgan happily announced the first version of ritex, a tool for
   converting WebTeX into MathML.

   "WebTeX is an adaptation of TeX math syntax for web display", while MathML
   is the standard, low-level and verbose, way of representing maths symbols
   on the web.

   | Ritex is based heavily on itex2mml, a popular TeX math to MathML
   | convertor-so much so that the default correct answer to unit tests is to
   | do whatever itex2mml does!

   Unlike itex2mml, ritex is written in Ruby and supports macros.

  KirbyRecord 0.0.0
  -----------------

     Logan Capaldo: I am proud(?) to announce the first actual release of
     KirbyRecord. KirbyRecord is an ORM layer for the very cool pure ruby
     database, KirbyBase.

  eric3 3.7.2 released
  --------------------

   Eric3 is a Python and Ruby IDE written in Python and PyQt. It comes with
   "all batteries included". The new 3.7.2 release fixes some bugs.