From: timsuth@... (Tim Sutherland) Date: 2004-12-14T17:57:21+09:00 Subject: Ruby Weekly News 6th - 12th December 2004 http://www.rubygarden.org/ruby?RubyNews/2004-12-06 Ruby Weekly News 6th - 12th December 2004 ----------------------------------------- A summary of the week's activity on the ruby-talk mailing list / the comp.lang.ruby newsgroup. This summary is brought to you by Tim Sutherland (TimSuth). Articles and Announcements -------------------------- * [Duck Images Weekly News] [whytheluckystiff] parodied the Ruby Weekly News in response to a comment from Dave Burt that [last week's RubyNews] failed to include the [Duck Images thread]. Your editor gets the last laugh(?) though, the second post in that thread wasn't until the 6th of December, meaning it falls inside this week's summary. See Threads for more duck news. * [RMagick pre-requisite changes] Tim Hunter gave a "heads up" that future versions of the image library [RMagick] (a Ruby interface to ImageMagick and GraphicsMagick) will no longer be tested with versions of ImageMagick earlier than 6.0.0 and may cease to work with them. * [ruby-dev summary] SASADA Koichi posted the latest English summary of the Japanese list ruby-dev, covering messages 24959-25044. * [RSS, Ruby, and the Web] Tom Copeland reported that this month's Dr. Dobb's Journal has an article by Dave Thomas on [RSS, Ruby, and the Web]. (Pay-subscription required to view the article on the web.) * [Dynamic Java: Sun explores dynamic languages] James Britt noticed that Sun is [exploring] how to better support dynamic languages on the Java platform. There was a meeting which included creators/maintainers from Perl, Python, Jython, Groovy and Parrot. No Ruby representative, but Ruby will benefit from any improvements in this area. * [Want to Write a Book?] Dave Thomas wants to launch a series of books from the Pragmatic Bookshelf called "Facets of Ruby". These will be small, focused, technical books on different aspects of Ruby. He's looking for writers for them - this is your opportunity to become an author! "The intent is to create a series of books with a deeply practical focus. We won't just document APIs. Instead, we want to show how to get _value_ from those APIs---how to solve real-world problems. The books will probably be 100-250 pages long, and full of code." * [A neat article on Rails performance...] Tom Copeland drew the group's attention to an article [Session Container Performance in Ruby on Rails] by "Scott Barron of EliteJournal fame". * [Development Assistance] Austin Ziegler asked for volunteers to help enhance some of the libraries he maintains: MIME::Types, Diff::LCS and PDF::Writer. Threads ------- Interesting threads this week included: [Duck images] ------------- Dave Burt wrote: "Phil Tomson recently suggested developing a duck image to represent ruby instead of the standard red stone thing. Nikolai Weibull said this has been proposed before, but copyright encumbrance has been an issue." The duck, of course, refers to DuckTyping (coined by Dave Thomas), the notion that the "type" of an object in Ruby should be seen in terms of the capabilities and methods it supports rather than its class - if it walks like a duck and quacks like a duck then it's a duck. (This is a well-known saying in the English language.) Dave Burt continued, announcing that whytheluckystiff had heard the cries for help and used his artistic skills to create [The Only Copyrightless Duck In Recent History]. The thread began with a small ASCII-art version of whytheluckystiff's duck. Dave also posted a larger version using a short program he wrote (img2ascii.rb) that used the [ruby-gd] library to automatically convert the original image to ASCII. T. Onoma gave an alternative that was constructed with [Jave] (Java ASCII Versatile Editor). whytheluckystiff: "I'm amazed at the progress that has been made in just the last 12 hours. If you'd like to start using any of these ducks, in the form of a one-line signature, here's a DRb line: ruby -rdrb -e 'DRb.start_service;duck=DRbObject.new(nil, "druby://whytheluckystiff.net:6503");puts duck.daves' Several other ducks are available at this service, try "puts duck.toms" or "puts duck.on_the_water". For a complete list: "puts duck.list". Think of it. In time, we could amass ducks to use them as currency on the global markets. I think we can take Switzerland." Combining duck images with the idea of Ruby code in signatures for email and newsgroups (see the Previous RubyNews), Florian Frank gave three lines of Ruby that produce an animated duck swimming on water and quacking. Many people began going back and forth making it shorter. Jannis Harder posted one in 108 characters: i=1;loop{puts"\e[2J\e[;11H_\n%9s(*)____,\n%9s(` =~~/ #{'~^~'[i%=2,2]*9}"%[i>0?'<':'Quack! >',''];i+=sleep 1} [Ruby (quiz?) simulation idea] ------------------------------ Hal Fulton had an idea for a future Ruby Quiz: write a program that models a population of living creatures (similar to Conway's Life) as a grid of squares with moving critters who can mate and produce offspring with different genes. The program would determine when (if ever?) the genotype frequencies of the population stabilised, using two different methods - by running the simulation and also by using mathematics to predict the time when equilibrium occurs. James Edward Gray II (the Ruby Quiz organiser) thought that coming up with the mathematics could be left for "extra-credit", saying "Some of us are easily pleased and would be content watching little dots move around and multiply." Brian Schr�der had heard of an example of evolution using bats: "I'd like to propose something a bit different that stresses the fact that evolution is _not_ survival of the _strongest_ but survival of the _fittest population_. ... A bat may share the blood it has gathered through the night with another bat that had no success. But why should it? If it shares, it needs to gather successfully the next night, otherwise it will starve. So it diminusishes its strength and helps a rival, whose genes will have a better chance to spread. Wouldn't it be better off being egoistic and increasing its survival possibility? In practice, the bats developed some kind of "tit for tat" algorithm. So it is _for the population with this trait_ an evolutionary positive trait to be altruistic." Ducks, bats, [foxes]! What other animals will be co-opted for nefarious Ruby uses next? [[SUMMARY] Crosswords (#10)] ---------------------------- James Edward Gray II summarised the solutions to last week's Ruby Quiz (turning a crossword layout description into an ASCII-art format). One interesting solution was Pit Capitain's, whose code includes a method String#gsub2! which uses two-dimensional regular expressions! [[QUIZ] Learning Tic-Tac-Toe (#11)] ----------------------------------- The latest installment in the adventures of [Ruby Quiz] began with our narrator (James Edward Gray II)... "This week's Ruby Quiz is to implement an AI for playing Tic-Tac-Toe, with a catch: You're not allowed to embed any knowledge of the game into your creation beyond how to make legal moves and recognizing that it has won or lost. Your program is expected to "learn" from the games it plays, until it masters the game and can play flawlessly." Jannis Harder posted a special signature for the occasion. You'll have to run it to see what it does! "bp6siZmijp5CiZlCiW5CgAAChpbiiZYiiZZCi5aCZ2bs".unpack("m")[0]. unpack("C*").map{|x|x.chr}.join.unpack("B*")[0].scan(/.{24}/){i=7 $&.scan(/..../){print"\e[3#{i-=1};1;40m ";$&.each_byte{|z| print" #"[z-?0,1]*2}};puts"\e[0m"} People posted their solutions under the same thread. [IOWA book ideas] ----------------- Stefan Schmiedl received positive feedback on his idea of writing a book on the [IOWA] web application framework. He invited more comments on what chapters people want in the book, listing some ideas he had. [Wiki Spam Report] ------------------ Jim Weirich reported on the status of efforts to free the RubyGarden Wiki from spam. "Spammers are automatically routed to a wiki tarpit. The tarpit is an (almost) exact copy of the real RubyGarden wiki. Making changes to the tarpit looks as if you are making changes to the real wiki. And since spammers get their pages from the wiki, it looks like (to them) that they have successfully spammed our site." This technique appears to be working very well. [Hash freezes String keys are returns copy] ------------------------------------------- Michael Neumann noticed that Hashes seem to behave differently with keys that are Strings compared to other objects. If you try to get back the String (e.g. with Hash#each or Hash#keys) a frozen-copy of the original String is returned. ts explained: "this is made volontary for efficienty : otherwise each time that you modify an object, used as a key, ruby will need to re-hash the hash if you don't want to have strange result like the example that I've given In reality when you write a = "test" hash[a] = "test" the key and `a' share the same string, but `a' is marked copy-on-write" Robert Klemme added: "Yes, it's a special optimization for string keys. You can get your original out if you freeze it before putting it into the hash. :-) In fact, that might be a performance optimization if you put *a lot* string keys into the hash. Because copying an instance is relatively expensive this pattern was not adopted generally, i.e. you have to take care of Array and other keys yourself. Note also, that you need to rehash if you change your array instance after using it as Hash key." New Releases ------------ * [RubyGems 0.8.3] Jim Weirich announced the latest version of the [RubyGems] package management system, fixing some annoying bugs, including a workaround for the "string contains null byte" error several people have reported seeing. Over 150 Ruby libraries or applications are now available as gems. * [ParseTree 1.3.0] Ryan Davis wrote "[ParseTree] is a C extension (using RubyInline) that extracts the parse tree for an entire class or a specific method and returns it as a s-expression (aka sexp) using ruby's arrays, strings, symbols, and integers." This release features improved debugging messages and more nodes. * [RubyScript2Exe 0.2.0] Erik Veenstra updated [RubyScript2Exe]. This is a tool that transforms a Ruby program into a single executable that includes it along with the Ruby interpreter and necessary libraries, simplifying deployment. It works in Windows and Linux. There was some discussion on how to make this work with libraries that are loaded with RubyGems. * [Ruby/Extensions v0.6.0] Gavin Sinclair was pleased to announce a new version of [Ruby/Extensions], a set of additional methods for Ruby's standard classes. New methods in this release include Array#rand for selecting a random item from an Array, Array#one? and Array#none?. require_relative was also added. * [RPA completion for bash: 12/08/04] Brian Schr�der issued an improved [RPA Completion], a tool that allows the bash shell to do tab-completion for RPA packages. Within an hour of the announcement, Mauricio Fern�ndez had included the new version in RPA. An interesting feature of the [RPA Completion homepage] is an animated image at the top which demonstrates the use of RPA Completion. This is something that other developers may find useful for their sites. * [Jabber-RPC] [Jabber-RPC 0.1.0] Massimiliano Mirra created a new library called [Jabber-RPC]. This makes it easy to do RPC (remote-procedure-calls) over the Jabber instant-messaging system. An update was later [announced], fixing the example code and removing the dependency on expat. Subsequently, version 0.1.0 was released with further changes. * [ruby-sphere-0.1.0] Daigo Tomono announced the first release of [ruby-sphere], a set of libraries and tools for calculating the apparent position of stars. This can be used for planning astronomical observations. * [TeX::Hyphen 0.4.0] Austin Ziegler had great pleasure in announcing a new version of [TeX::Hyphen]. This is the last planned release of the library - a replacement will be created to enable support of non-US hyphenation definitions. * [Nitro 0.6.0] George Moschovitis announced a preview of the next version of the [Nitro] web application framework. George invited people to email him concerning the new logo (see the top of the [Nitro homepage]). * [DBus/Ruby 0.1.7] [DBus/Ruby 0.1.8] Leon Breedt fixed some bugs that could result in crashes in [DBus/Ruby], a Ruby interface to the D-BUS message bus system. * [FreeRIDE 0.9.2] Laurent Julliard announced version 0.9.2 of the Free Ruby IDE [FreeRIDE]. A number of bugs have been fixed. In the thread Curt Hibbs lists possible enhancements that the community could contribute to FreeRIDE. * [ruby-growl] Eric Hodel created [ruby-growl], a platform-independent system for generating [Growl] messages. Growl is a notification system for MacOS X. Applications use it to display messages on the screen. * [vflow 0.2 beta] jm wrote "[Vflow] is a netflow processing library for ruby similar to Cflow (perl) and pyflowtool (python) for use with flow-tools". Stability problems have been fixed in this release.