T
Tim Sutherland
http://www.rubyweeklynews.org/20050515.html
Ruby Weekly News 2nd - 15th May 2005
------------------------------------
Ruby Weekly News is (usually) a summary of the week's activity on the
ruby-talk mailing list / the comp.lang.ruby newsgroup, brought to you by
Tim Sutherland.
This week it's a catchup double-dose - the last two weeks rolled into one.
Articles and Announcements
--------------------------
Ruby Quiz RSS Feed
------------------
James Edward Gray II announced an RSS feed for Ruby Quiz.
Call for Papers: ACM Symposium on Dynamic Languages
---------------------------------------------------
Curt Hibbs reminded us that the ACM were having a one-day symposium on
dynamic languages, immediately after RubyConf 2005.
gabriele renzi observed that "the program committee includes matz ".
Ruby Central, Inc. Donation and Pledge Site
-------------------------------------------
David A. Black (on behalf of Ruby Central, Inc.) announced the opening
of the Ruby Central, Inc. Donation and Pledge Site.
It allows you to make a general donation to Ruby Central, or "sponsor
or partially sponsor a specific RubyConf 2005 item or activity (meals,
t-shirts, and Matz's travel expenses)".
New Presentation on Ruby and RoR available for download
-------------------------------------------------------
Curt Hibbs posted a link to a presentation given by Obie Fernandez
from ThoughtWorks to the Agile Atlanta group. The topic was Ruby on
Rails.
http://ruby-co.de/: show the world your love for Ruby code
----------------------------------------------------------
Jan `jast' Krueger announced http://ruby-co.de/, a free URL direction
service "for the Ruby lovers out there". (For example,
"http://foo.loves.ruby-co.de/".)
NegaPosi Compiler
-----------------
YARV developer SASADA Koichi introduced a new
language called "NegaPosi". (Part of) a sample program looks like
"+-+--++--+--+++-+--+-++-+-+-+++-+---+++-+".
"Yes, it's a only joke software "
Ruby User Groups
----------------
unless baltimore.rb?
--------------------
Sam Goldman said "If anyone wants to set up a ruby meet-up in
Baltimore I can get us a very nice conference room at my university
and probably free pizza."
Yahoo group for Austin (and) Texas Ruby users
---------------------------------------------
Hal Fulton announced that the first meeting for the Austin and Texas
group had been held. "Mexican food was consumed and plans for code
were laid."
The group will probably use the name "ARCTAN" - "Austin Ruby Coders'
Texas Area Network".
phoenix.rb
----------
James Britt announced the next meeting of the Phoenix Ruby Users Group
(on the 12th of May).
"b.square unless b.there?"
Central Ohio Ruby Users
-----------------------
Joe OBrien introduced a new group - the Columbus Ruby Users Group
(Central Ohio in the U.S.).
"Please, come one come all."
Hamburg.rb meeting
------------------
Stephan Kämper said that the Hamburb.rb group were having a meeting on
May 4th.
Any Rubyists in Oslo?
---------------------
Chris Pine is moving to Oslo this year and was "wondering if there are
any fans of Ruby up there?"
Kent Dahl said that indeed there were, and suggested looking at
NorwayRUG.
List Invite - London Ruby Users Group
-------------------------------------
Robert McGovern announced a new list for the London Ruby Users Group.
Quote of the Week(s)
--------------------
John Carter in "What sound does no duck make?",
"Imagine a flock of ducks in the sky.
Listen. Now remove the ducks. Listen.
What is the sound of no duck quacking?
What should nil respond_to?"
Ryan Leavengood gave the best response, ruby-talk:141586.
(If you're confused, see the "RCR 303..." thread below.)
Threads
-------
Interesting threads included:
another Tk question
-------------------
Joe Van Dyk asked, "In Tk, what's the best way to show a large table of
data that gets constantly updated?"
Hidetoshi NAGAI said that the TkTable extension can be used for this.
Ruby/Tk support for it is included with Ruby.
Object#inside_metaclass?
------------------------
This was another thread considering the issue of what to name the obj in
class FrederickTheFrog
end
fred = FrederickTheFrog.new
obj = class << fred; self; end
obj is a class that belongs only to fred. You can define methods in it
that are only for fred - no other instances of FrederickTheFrog will have
them. (This is the exact reason such a concept exists.)
The usual syntax for adding such a method is as follows,
fred = FrederickTheFrog.new
class << fred
def hoppityhop
puts("Ribburrt")
end
end
It's as though when you create a new instance, a new class is created that
sits between the instance and the original class.
(For efficiency reasons, the Ruby interpreter doesn't really create the
class unless you actually need it, but that's just an implementation
detail. See rb_singleton_class in class.c for details.)
class JustForFred < FrederickTheFrog
end
fred = JustForFred.new
(For whatever reason, in Ruby methods are defined for classes, not for
objects. However, since each object has its own personal hidden class, it
doesn't matter.)
Matz calls obj a "singleton class", but some people call by names such as
"meta-class" and "idioclass".
One argument against the term "singleton class" is that it is also used in
some other language communities to mean a class which only ever has one
instance. (For example, in the original book on Design Patterns.)
Matz: "Interestingly, I started to use the term before the book was
published in 1995. Sad coincidence."
He added, "Until we find a better term. I don't think other terms proposed
such as "exclusive class" are better. I assume Ruby users smart enough to
deal with them by context until the time."
Query about the top level object
--------------------------------
In a related thread, Gavri Fernandez asked about methods that are defined
at the "top-level".
He quoted the first edition of the Pickaxe,
At the top level, we're executing code in the context of some predefined
object. When we define methods, we're actually creating (private)
singleton methods for this object.
Gavri wasn't sure this was true, he'd read somewhere that they were
defined as private methods of Object, and his testing appeared to show
this was the case.
def whoa
puts "in whoa"
end
Object.new.private_methods.include?('whoa') # true
This means that every Ruby object then has a private method called whoa.
An alternative is to define the method in the Kernel module.
module Kernel
def whoa
puts "in whoa"
end
end
Object.new.private_methods.include?('whoa') # false
whoa() # prints "in whoa"
There is a bit of a confusion, since if you look at self at the top-level,
you see it is an instance of Object called main.
(Warnng: Be careful about experimenting with this sort of thing in irb.
Because of the way irb is implemented, visibility - public, private etc. -
can be different to usual.)
Christoph explained that "Defining a (private) method at the "top" scope
is equivalent to defining a private method at the scope of the class
Object."
RCR 303: nil should accept missing methods and return nil
---------------------------------------------------------
John Carter suggested changing nil to never raise NoMethodError. Instead,
when a method of nil was called which otherwise did not exist, nil would
be returned.
"Not only does this simplify ruby programs considerably, it also changes
certain crash bugs silently into correct programs."
Matz replied with:
"I know Objective-C's nil works like that. I once developed an OOP system
(which was an early version of Ruby) where nil would respond to all
undefined messages by doing nothing. In production code, it does nothing
bad, since any production code should not raise an exception. Rather it
introduces new scheme of error handling.
But during development, it can hide bugs. It is very difficult to
distinguish correct error handling by ignoring unknown message, and
uncontrolled unintentional misbehavior caused by bugs. It's against the
principle of "early death"."
Regarding John's assertion that the proposed behaviour wouldn't hide bugs
in real code, Austin Ziegler said that "I can tell you from experience
over the last four days that I have fixed no fewer than five *real* bugs
in PDF::Writer that would have resulted in the incorrect generation of PDF
output had I done this."
A number of others also thought the proposal was a bad idea.
John started a new thread No Thing Here vs Uninitialized and RCR 303
(under the nickname "Cyent"), which argued that nil is "overloaded too
heavily" - we should distinguish between `uninitialised' and `nothing'.
Christoph said this sounded like Javascript (ECMAScript), which has both
null and undefined.
AIX Status?
-----------
Jaime Fournier asked what the status of Ruby support on AIX was. There had
recently been discussions of problems with the socket library on AIX.
KUBO Takehiro said that the CVS version now works on AIX 4.3.3.
Ruby/DL SendInput
-----------------
Peter C. Verhage wanted call SendInput, a win32 function from the
user32.dll Windows library. (Roughly, he wants to use Ruby to call a
particular C function.)
"Unfortunately this method takes some complex arguments; several nested
structs, including a union and a pointer to an array of a certain struct
etc. How can I use Ruby/DL to call this method?"
Takaaki Tateishi gave a link to sendinput.rb from his "DL Cookbook", which
shows exactly how to do this. It uses DL2, the `next generation' version
of DL.
One interesting line in the code was
extern "UINT SendInput(UINT, LPINPUT, int)", :stdcall
Note the second argument to extern, which indicates the calling convention
that should be used. This matters on Windows platforms, where different
functions often have different calling conventions, and is a new feature
of DL2 over the original DL.
Amazing Mazes (#31)
-------------------
Matt Linnell wrote Ruby Quiz number 31.
"We've had crosswords, cryptograms, chess puzzles, madlibs ... so why
don't we try our hand at mazes?"
There were two parts; writing a program to generate a maze, and writing
one to solve it.
Cows and Bulls (#32)
--------------------
The following Ruby Quiz was created by Pat Eyler.
"My kids like to play a variant of "Cows and Bulls" when we're driving.
One of them (the server, to use a computing term-you'll see why in a
minute) will think of a word (we usually play with either three or four
letters), and the other (the client) will try to guess it. With each
guess, the server will respond with the number of `cows' (letters in the
word, but not in the right place) and bulls (letters in the correct place
in the word)."
Write a client and server to play this game.
ruby-dev summary 26011-26089
----------------------------
SASADA Koichi posted the latest English summary of the Japanese list
ruby-dev.
The CVS version of irb now has improved "save history" support, and mkmf
supports C++.
ruby-dev summary 26090-26127
----------------------------
A symlink security problem was found with FileUtils.rm_rf.
How to interface with an API written in C++?
--------------------------------------------
Derek Haskin asked how he could call C++ functions from Ruby.
Nikolai Weibull posted a couple of links, the first of which was a link to
the excellent ruby embedded into c++ article by Simon Strandgaard.
It demonstrates how to use C++ classes from Ruby, and vice versa, both
with and without SWIG.
Piers Harding said that you could always use extern "C" around the C++
code to provide a C interface which Ruby would then use.
Gennady Bystritksy recently started using SWIG and was very impressed.
"It transforms your C++ classes into Ruby classes practically seamlessly,
even giving you opportunity to adjust to naming conventions simply by
edditing a SWIG interface file. Included typemaps allow you, for example,
return std::string from your C++ method, aautomatically gets converted and
returned to the Ruby world as Ruby string, without you doing a stir. Isn't
it amazing? ;-)"
Relax NG validator in Ruby?
---------------------------
Miles Keaton asked if there was a Relax NG validator for Ruby. The only
library he could find was for Java.
("Relax NG" is an XML schema language, defining elements such as list and
define.)
James Britt said that REXML has some experimental support for this.
Net::HTTP:roxy using one or more proxies
------------------------------------------
Botp Peña wondered, "is possible to use multiple proxies in
Net::HTTP:roxy?"
Minero Aoki: "In a word, No. You must use multiple Net::HTTP objects
explicitly."
rbtree in the stdlib
--------------------
Martin DeMello proposed in RCR-306 that rbtree be included in the Ruby
standard library, and also that PriorityQueue and other such classes be
added.
rbtree is a library providing a Red/Black Tree implementation for Ruby.
There are many algorithms where a balanced tree structure is useful, for
example where you need a Set of Arrays. Computing a hash in that case may
be a relatively slow operation.
Rubyist formerlly known as Newbie
---------------------------------
Jason Ashbaugh posted a "Thank you" to Chris Pine for his Learn to Program
tutorial that teaches programming using Ruby.
"I started learning Ruby about 2 years ago (something came up early on,
and I had to drop most of my "learning" activities). Chris' introduction
to programmning was much shorter then . But About two months ago I
decided I had time to finally learn to program, and I knew Ruby was still
the language I wanted to learn, so I google for "Ruby Pine" (I still
remembered his last name it made such an impression) and I printed out
your webpages.
After two months of toting them back and forth to work on a clipboard I
finally feel like I understand enough programming to start learning "
Redesign 2005, Round Two
------------------------
With a paraffin banjo on his knee, why the lucky stiff presented Round Two
from the ruby-lang.org website redesign team.
There were many favourable comments on the design, plus discussion on the
logo and slogan used. A sexless duck stole the fish's bicycle.
Rendering text with OpenGL
--------------------------
Ilmari Heikkinen wanted to render nice-looking text onto an OpenGL
texture. "By nice-looking I mean variable width anti-aliased truetype
fonts with different font sizes, hinting, line heights and all the usual
font rendering lib niceties."
George Ogata said that GLUT has simple text-rendering, or you can use
libfreetype to render to a 2D image buffer. (Both GLUT and libfreetype
have Ruby bindings.)
Alternatively, there was the FTGL library. "It has lazy-loaded,
texture-based fonts for fast rendering, and extruded geometry fonts for
when you want render text as a solid object from different angles."
Unfortunately, it doesn't (yet) have Ruby bindings.
Bill Kelly thought that FTGL sounded great, and plans to write bindings
for it in the next month or two.
Ilmari himself went for rcairo, a Ruby interface to the Cairo vector
graphics library.
ruby vs. java?
--------------
Franz Hartmann, a physics student from Berlin, asked about using Ruby to
do physical model calculations.
The appropriateness of Ruby or other languages for this task was debated.
Michael Ulm suggested GNU Octave, a language designed for numerical
computations.
Fortran, Mathematica and others were also mentioned.
"maybe its the inbreeding but i am confused" was uttered.
We need a comprehensive test suite
----------------------------------
Daniel Berger exclaimed "Matz's announcement of 1.8.3 beta 1 reminds me of
something. We need a test suite. A large, comprehensive test suite.
Written using test-unit. And we need it NOW."
Eric Hodel said that it should be based on Rubicon, a test suite
originally written by Dave and Andy of PragmaticProgrammer fame. It needs
some work to be updated to Ruby 1.8, but has "75% of the work done for you
already, has nice reports, and has many of the platform/version
differences spelled out."
Chad Fowler recalled that Matz had agreed in the past to the idea of
including Rubicon with Ruby. It just requires someone with enough time and
motivation to add it to the CVS tree in a clean way.
String Hashing Algorithms
-------------------------
String hashing algorithms were discussed. Phrogz benchmarked some
algorithms, and Zed A. Shaw gave alternatives to hashing.
Ruby on Windows CE?
-------------------
Volker Voigt asked if Ruby could run under Windows CE.
nobu replied - "Yes, see wince/README.wince" in the source for
information.
New Releases
------------
Updateable 0.0.3
----------------
John W. Long made the first public release of a small module that
allows you to update the attributes of an object from a Hash.
RJournal 0.1.1
--------------
Vincent Foley released his first open source project, RJournal, a
simple LiveJournal client. He plans to add a Fox GUI to it in the
future.
HighLine 0.3.0-Now with ANSI colors!, HighLine 0.4.0, HighLine 0.5.0
--------------------------------------------------------------------
James Edward Gray II released new versions of HighLine, a library to
make it easy to write an application that takes input from the
console.
0.3 added support for colours in the output, whitespace handlng,
improved type conversions, and single-character input.
0.4 added word wrapping and "paged printing" output.
0.5 brought an "echo setting (for passwords)", confirmation questions
and case-sensitivity settings.
Ruby Editor Plugin for jEdit 0.6.1 - method completion release II
-----------------------------------------------------------------
Rob released a new version of the Ruby Editor Plugin for jEdit. The UI
for method completion was improved. An integrated Ruby documentation
viewer was also added.
He later asked for feedback on how users feel about the method
completion.
There was discussion in the thread announcing 0.6.0.
Subsequently, "Ruby Editor Plugin for jEdit - release 0.6.5" was
posted, adding class hierachy information to the documentation viewer.
An extension to Rational - friendlier with Floats and Strings
-------------------------------------------------------------
Dave recalled a recent thread about converting a Float to a Rational,
for example 1.5 to 3/2.
He took a look at how Python handled this, and wrote some new methods
for Ruby in a similar spirit.
For example, 1.5.to_r returns Rational(3, 2). Other methods added
include Rational#approximate, to simplify a Rational, to +/- some
error.
MuraveyWeb 0.2.1-Ruby on Rails CMS, MuraveyWeb 0.2.2-Emergency Release
----------------------------------------------------------------------
Dmitry V. Sabanin put out a bugfix release for the MuraveyWeb content
management system. He quickly made an "Emergency Release" of 0.2.2 to
fix a bug in 0.2.1 that made SimpleFolders unusable.
Transaction::Simple 1.3.0
-------------------------
Austin Ziegler announced the latest release of Transaction::Simple, a
library allowing you to easily use in-memory transactions. "This is to
allow "test" changes to be made to an object before making the changes
permanent."
This version adds "transaction groups", allowing you to have a single
transaction for multiple objects.
John Lam said "Wow wow wow! This is so massively cool."
Classifier 1.3.0
----------------
Lucas Carlson announced that Classifier is now available as a
pure-Ruby library, as well as a version that uses the GSL library.
A new method String#summary was also added. This uses Classifier to
automatically summarise a block of text by guessing what the most
important sentences are.
color-tools 1.1.0
-----------------
Austin Ziegler updated his color-tools package. This library is used
to manipulate RGB and CMYK colours.
It can now read GIMP colour palette definition files.
Pages-BibTeX
------------
Tom Counsell announced a script to help users of iWord on MacOS X. It
fixes bibliographies in the Apple Pages word-processor.
Pimki 1.7
---------
Assaph Mehr announced Pimki 1.7.092, which he hopes will be the last
release before Pimki2.
Bugs were fixed and features added.
RubyInline 3.3.1 Released
-------------------------
Ryan Davis fixed some bugs in RubyInline, a library that makes it easy
to embed C and C++ code within a Ruby source file.
traits-0.0.0, traits-0.1.0
--------------------------
Ara.T.Howard announced the first version of traits (really, just the
renaming of attributes.rb). It provides "a better set of attr_*
methods".
trails-0.1.0 was also released.
Packgen 0.1
-----------
Ghislain Mary released Packgen, a "simple network packet generator
handling diffserv markers, useful for testing network bandwidth and
QoS."
KirbyBase 2.2
-------------
Jamey Cribbs made some major internal changes to KirbyBase, a simple
pure-Ruby database management system that stores its data in
plain-text files.
The design of the code is now much cleaner. Some functional changes
were also made.
Rant 0.3.6
----------
Stefan Lang improved Rant, a "flexible build tool written entirely in
Ruby, similar to Rake".
Generated files are now automatically cleaned up, and "constraining
variables" and "directed rules" were added.
Ruby-GetText-Package-0.9.0
--------------------------
Masao Mutoh's Ruby-GetText-Package was updated. It is a Native
Language Support Library Tool.
CGI and ERB are now supported.
Ri18n 0.0.3 Ruby application internationalization library
---------------------------------------------------------
In a related release, dm1 laid out Ri18n-0.0.3, a library whose goals
are similar to Ruby-GetText-Package - to help internationalisation of
Ruby programs.
Ruby/Odeum 0.3.1 Pre-Release
----------------------------
Zed A. Shaw announced a pre-release of Ruby/Odeum, a binding to the
QDBM Odeum inverted index library. (Useful for implementing a search
engine.)
The major new addition is a boolean expression query language,
allowing you to search for e.g. "Zed & Shaw ! (Frank Blank)".
Performance has also been improved in some circumstances.
session-2.4.0
-------------
Ara.T.Howard added the ability to specify stdin for
Session::Bash and Session::Sh.
Session is a set of classes for "driving external progams via pipes."
sldb-0.0.0, sldb-0.1.0
----------------------
Ara.T.Howard announced "sldb is a multi-thread,
multi-process, and nfs safe abstraction of sqlite databases." It deals
with locking and retrying transactions so you don't have to.
He had earlier introduced sldb-0.0.0.
webgen 0.3.4
------------
Thomas Leitner improved webgen, a tool to generate web pages from page
description and template files.
ERB can now be used, file handling has been enhanced, bugs fixed and
other features added.
Webstar Tools 0.5.0 Released!
-----------------------------
Zach Dennis posted the latest iteration of his set of command-line
utilities for the WebSTAR V Internet Server on MacOS X.
Production Log Analyzer 1.2.0
-----------------------------
Eric Hodel released a new version of his Production Log Analyzer, used
to determine which pages on a dynamic website are the slow ones.
This version includes a new time summary, plus support for sending
email with sendmail.
Ruby Weekly News 2nd - 15th May 2005
------------------------------------
Ruby Weekly News is (usually) a summary of the week's activity on the
ruby-talk mailing list / the comp.lang.ruby newsgroup, brought to you by
Tim Sutherland.
This week it's a catchup double-dose - the last two weeks rolled into one.
Articles and Announcements
--------------------------
Ruby Quiz RSS Feed
------------------
James Edward Gray II announced an RSS feed for Ruby Quiz.
Call for Papers: ACM Symposium on Dynamic Languages
---------------------------------------------------
Curt Hibbs reminded us that the ACM were having a one-day symposium on
dynamic languages, immediately after RubyConf 2005.
gabriele renzi observed that "the program committee includes matz ".
Ruby Central, Inc. Donation and Pledge Site
-------------------------------------------
David A. Black (on behalf of Ruby Central, Inc.) announced the opening
of the Ruby Central, Inc. Donation and Pledge Site.
It allows you to make a general donation to Ruby Central, or "sponsor
or partially sponsor a specific RubyConf 2005 item or activity (meals,
t-shirts, and Matz's travel expenses)".
New Presentation on Ruby and RoR available for download
-------------------------------------------------------
Curt Hibbs posted a link to a presentation given by Obie Fernandez
from ThoughtWorks to the Agile Atlanta group. The topic was Ruby on
Rails.
http://ruby-co.de/: show the world your love for Ruby code
----------------------------------------------------------
Jan `jast' Krueger announced http://ruby-co.de/, a free URL direction
service "for the Ruby lovers out there". (For example,
"http://foo.loves.ruby-co.de/".)
NegaPosi Compiler
-----------------
YARV developer SASADA Koichi introduced a new
language called "NegaPosi". (Part of) a sample program looks like
"+-+--++--+--+++-+--+-++-+-+-+++-+---+++-+".
"Yes, it's a only joke software "
Ruby User Groups
----------------
unless baltimore.rb?
--------------------
Sam Goldman said "If anyone wants to set up a ruby meet-up in
Baltimore I can get us a very nice conference room at my university
and probably free pizza."
Yahoo group for Austin (and) Texas Ruby users
---------------------------------------------
Hal Fulton announced that the first meeting for the Austin and Texas
group had been held. "Mexican food was consumed and plans for code
were laid."
The group will probably use the name "ARCTAN" - "Austin Ruby Coders'
Texas Area Network".
phoenix.rb
----------
James Britt announced the next meeting of the Phoenix Ruby Users Group
(on the 12th of May).
"b.square unless b.there?"
Central Ohio Ruby Users
-----------------------
Joe OBrien introduced a new group - the Columbus Ruby Users Group
(Central Ohio in the U.S.).
"Please, come one come all."
Hamburg.rb meeting
------------------
Stephan Kämper said that the Hamburb.rb group were having a meeting on
May 4th.
Any Rubyists in Oslo?
---------------------
Chris Pine is moving to Oslo this year and was "wondering if there are
any fans of Ruby up there?"
Kent Dahl said that indeed there were, and suggested looking at
NorwayRUG.
List Invite - London Ruby Users Group
-------------------------------------
Robert McGovern announced a new list for the London Ruby Users Group.
Quote of the Week(s)
--------------------
John Carter in "What sound does no duck make?",
"Imagine a flock of ducks in the sky.
Listen. Now remove the ducks. Listen.
What is the sound of no duck quacking?
What should nil respond_to?"
Ryan Leavengood gave the best response, ruby-talk:141586.
(If you're confused, see the "RCR 303..." thread below.)
Threads
-------
Interesting threads included:
another Tk question
-------------------
Joe Van Dyk asked, "In Tk, what's the best way to show a large table of
data that gets constantly updated?"
Hidetoshi NAGAI said that the TkTable extension can be used for this.
Ruby/Tk support for it is included with Ruby.
Object#inside_metaclass?
------------------------
This was another thread considering the issue of what to name the obj in
class FrederickTheFrog
end
fred = FrederickTheFrog.new
obj = class << fred; self; end
obj is a class that belongs only to fred. You can define methods in it
that are only for fred - no other instances of FrederickTheFrog will have
them. (This is the exact reason such a concept exists.)
The usual syntax for adding such a method is as follows,
fred = FrederickTheFrog.new
class << fred
def hoppityhop
puts("Ribburrt")
end
end
It's as though when you create a new instance, a new class is created that
sits between the instance and the original class.
(For efficiency reasons, the Ruby interpreter doesn't really create the
class unless you actually need it, but that's just an implementation
detail. See rb_singleton_class in class.c for details.)
class JustForFred < FrederickTheFrog
end
fred = JustForFred.new
(For whatever reason, in Ruby methods are defined for classes, not for
objects. However, since each object has its own personal hidden class, it
doesn't matter.)
Matz calls obj a "singleton class", but some people call by names such as
"meta-class" and "idioclass".
One argument against the term "singleton class" is that it is also used in
some other language communities to mean a class which only ever has one
instance. (For example, in the original book on Design Patterns.)
Matz: "Interestingly, I started to use the term before the book was
published in 1995. Sad coincidence."
He added, "Until we find a better term. I don't think other terms proposed
such as "exclusive class" are better. I assume Ruby users smart enough to
deal with them by context until the time."
Query about the top level object
--------------------------------
In a related thread, Gavri Fernandez asked about methods that are defined
at the "top-level".
He quoted the first edition of the Pickaxe,
At the top level, we're executing code in the context of some predefined
object. When we define methods, we're actually creating (private)
singleton methods for this object.
Gavri wasn't sure this was true, he'd read somewhere that they were
defined as private methods of Object, and his testing appeared to show
this was the case.
def whoa
puts "in whoa"
end
Object.new.private_methods.include?('whoa') # true
This means that every Ruby object then has a private method called whoa.
An alternative is to define the method in the Kernel module.
module Kernel
def whoa
puts "in whoa"
end
end
Object.new.private_methods.include?('whoa') # false
whoa() # prints "in whoa"
There is a bit of a confusion, since if you look at self at the top-level,
you see it is an instance of Object called main.
(Warnng: Be careful about experimenting with this sort of thing in irb.
Because of the way irb is implemented, visibility - public, private etc. -
can be different to usual.)
Christoph explained that "Defining a (private) method at the "top" scope
is equivalent to defining a private method at the scope of the class
Object."
RCR 303: nil should accept missing methods and return nil
---------------------------------------------------------
John Carter suggested changing nil to never raise NoMethodError. Instead,
when a method of nil was called which otherwise did not exist, nil would
be returned.
"Not only does this simplify ruby programs considerably, it also changes
certain crash bugs silently into correct programs."
Matz replied with:
"I know Objective-C's nil works like that. I once developed an OOP system
(which was an early version of Ruby) where nil would respond to all
undefined messages by doing nothing. In production code, it does nothing
bad, since any production code should not raise an exception. Rather it
introduces new scheme of error handling.
But during development, it can hide bugs. It is very difficult to
distinguish correct error handling by ignoring unknown message, and
uncontrolled unintentional misbehavior caused by bugs. It's against the
principle of "early death"."
Regarding John's assertion that the proposed behaviour wouldn't hide bugs
in real code, Austin Ziegler said that "I can tell you from experience
over the last four days that I have fixed no fewer than five *real* bugs
in PDF::Writer that would have resulted in the incorrect generation of PDF
output had I done this."
A number of others also thought the proposal was a bad idea.
John started a new thread No Thing Here vs Uninitialized and RCR 303
(under the nickname "Cyent"), which argued that nil is "overloaded too
heavily" - we should distinguish between `uninitialised' and `nothing'.
Christoph said this sounded like Javascript (ECMAScript), which has both
null and undefined.
AIX Status?
-----------
Jaime Fournier asked what the status of Ruby support on AIX was. There had
recently been discussions of problems with the socket library on AIX.
KUBO Takehiro said that the CVS version now works on AIX 4.3.3.
Ruby/DL SendInput
-----------------
Peter C. Verhage wanted call SendInput, a win32 function from the
user32.dll Windows library. (Roughly, he wants to use Ruby to call a
particular C function.)
"Unfortunately this method takes some complex arguments; several nested
structs, including a union and a pointer to an array of a certain struct
etc. How can I use Ruby/DL to call this method?"
Takaaki Tateishi gave a link to sendinput.rb from his "DL Cookbook", which
shows exactly how to do this. It uses DL2, the `next generation' version
of DL.
One interesting line in the code was
extern "UINT SendInput(UINT, LPINPUT, int)", :stdcall
Note the second argument to extern, which indicates the calling convention
that should be used. This matters on Windows platforms, where different
functions often have different calling conventions, and is a new feature
of DL2 over the original DL.
Amazing Mazes (#31)
-------------------
Matt Linnell wrote Ruby Quiz number 31.
"We've had crosswords, cryptograms, chess puzzles, madlibs ... so why
don't we try our hand at mazes?"
There were two parts; writing a program to generate a maze, and writing
one to solve it.
Cows and Bulls (#32)
--------------------
The following Ruby Quiz was created by Pat Eyler.
"My kids like to play a variant of "Cows and Bulls" when we're driving.
One of them (the server, to use a computing term-you'll see why in a
minute) will think of a word (we usually play with either three or four
letters), and the other (the client) will try to guess it. With each
guess, the server will respond with the number of `cows' (letters in the
word, but not in the right place) and bulls (letters in the correct place
in the word)."
Write a client and server to play this game.
ruby-dev summary 26011-26089
----------------------------
SASADA Koichi posted the latest English summary of the Japanese list
ruby-dev.
The CVS version of irb now has improved "save history" support, and mkmf
supports C++.
ruby-dev summary 26090-26127
----------------------------
A symlink security problem was found with FileUtils.rm_rf.
How to interface with an API written in C++?
--------------------------------------------
Derek Haskin asked how he could call C++ functions from Ruby.
Nikolai Weibull posted a couple of links, the first of which was a link to
the excellent ruby embedded into c++ article by Simon Strandgaard.
It demonstrates how to use C++ classes from Ruby, and vice versa, both
with and without SWIG.
Piers Harding said that you could always use extern "C" around the C++
code to provide a C interface which Ruby would then use.
Gennady Bystritksy recently started using SWIG and was very impressed.
"It transforms your C++ classes into Ruby classes practically seamlessly,
even giving you opportunity to adjust to naming conventions simply by
edditing a SWIG interface file. Included typemaps allow you, for example,
return std::string from your C++ method, aautomatically gets converted and
returned to the Ruby world as Ruby string, without you doing a stir. Isn't
it amazing? ;-)"
Relax NG validator in Ruby?
---------------------------
Miles Keaton asked if there was a Relax NG validator for Ruby. The only
library he could find was for Java.
("Relax NG" is an XML schema language, defining elements such as list and
define.)
James Britt said that REXML has some experimental support for this.
Net::HTTP:roxy using one or more proxies
------------------------------------------
Botp Peña wondered, "is possible to use multiple proxies in
Net::HTTP:roxy?"
Minero Aoki: "In a word, No. You must use multiple Net::HTTP objects
explicitly."
rbtree in the stdlib
--------------------
Martin DeMello proposed in RCR-306 that rbtree be included in the Ruby
standard library, and also that PriorityQueue and other such classes be
added.
rbtree is a library providing a Red/Black Tree implementation for Ruby.
There are many algorithms where a balanced tree structure is useful, for
example where you need a Set of Arrays. Computing a hash in that case may
be a relatively slow operation.
Rubyist formerlly known as Newbie
---------------------------------
Jason Ashbaugh posted a "Thank you" to Chris Pine for his Learn to Program
tutorial that teaches programming using Ruby.
"I started learning Ruby about 2 years ago (something came up early on,
and I had to drop most of my "learning" activities). Chris' introduction
to programmning was much shorter then . But About two months ago I
decided I had time to finally learn to program, and I knew Ruby was still
the language I wanted to learn, so I google for "Ruby Pine" (I still
remembered his last name it made such an impression) and I printed out
your webpages.
After two months of toting them back and forth to work on a clipboard I
finally feel like I understand enough programming to start learning "
Redesign 2005, Round Two
------------------------
With a paraffin banjo on his knee, why the lucky stiff presented Round Two
from the ruby-lang.org website redesign team.
There were many favourable comments on the design, plus discussion on the
logo and slogan used. A sexless duck stole the fish's bicycle.
Rendering text with OpenGL
--------------------------
Ilmari Heikkinen wanted to render nice-looking text onto an OpenGL
texture. "By nice-looking I mean variable width anti-aliased truetype
fonts with different font sizes, hinting, line heights and all the usual
font rendering lib niceties."
George Ogata said that GLUT has simple text-rendering, or you can use
libfreetype to render to a 2D image buffer. (Both GLUT and libfreetype
have Ruby bindings.)
Alternatively, there was the FTGL library. "It has lazy-loaded,
texture-based fonts for fast rendering, and extruded geometry fonts for
when you want render text as a solid object from different angles."
Unfortunately, it doesn't (yet) have Ruby bindings.
Bill Kelly thought that FTGL sounded great, and plans to write bindings
for it in the next month or two.
Ilmari himself went for rcairo, a Ruby interface to the Cairo vector
graphics library.
ruby vs. java?
--------------
Franz Hartmann, a physics student from Berlin, asked about using Ruby to
do physical model calculations.
The appropriateness of Ruby or other languages for this task was debated.
Michael Ulm suggested GNU Octave, a language designed for numerical
computations.
Fortran, Mathematica and others were also mentioned.
"maybe its the inbreeding but i am confused" was uttered.
We need a comprehensive test suite
----------------------------------
Daniel Berger exclaimed "Matz's announcement of 1.8.3 beta 1 reminds me of
something. We need a test suite. A large, comprehensive test suite.
Written using test-unit. And we need it NOW."
Eric Hodel said that it should be based on Rubicon, a test suite
originally written by Dave and Andy of PragmaticProgrammer fame. It needs
some work to be updated to Ruby 1.8, but has "75% of the work done for you
already, has nice reports, and has many of the platform/version
differences spelled out."
Chad Fowler recalled that Matz had agreed in the past to the idea of
including Rubicon with Ruby. It just requires someone with enough time and
motivation to add it to the CVS tree in a clean way.
String Hashing Algorithms
-------------------------
String hashing algorithms were discussed. Phrogz benchmarked some
algorithms, and Zed A. Shaw gave alternatives to hashing.
Ruby on Windows CE?
-------------------
Volker Voigt asked if Ruby could run under Windows CE.
nobu replied - "Yes, see wince/README.wince" in the source for
information.
New Releases
------------
Updateable 0.0.3
----------------
John W. Long made the first public release of a small module that
allows you to update the attributes of an object from a Hash.
RJournal 0.1.1
--------------
Vincent Foley released his first open source project, RJournal, a
simple LiveJournal client. He plans to add a Fox GUI to it in the
future.
HighLine 0.3.0-Now with ANSI colors!, HighLine 0.4.0, HighLine 0.5.0
--------------------------------------------------------------------
James Edward Gray II released new versions of HighLine, a library to
make it easy to write an application that takes input from the
console.
0.3 added support for colours in the output, whitespace handlng,
improved type conversions, and single-character input.
0.4 added word wrapping and "paged printing" output.
0.5 brought an "echo setting (for passwords)", confirmation questions
and case-sensitivity settings.
Ruby Editor Plugin for jEdit 0.6.1 - method completion release II
-----------------------------------------------------------------
Rob released a new version of the Ruby Editor Plugin for jEdit. The UI
for method completion was improved. An integrated Ruby documentation
viewer was also added.
He later asked for feedback on how users feel about the method
completion.
There was discussion in the thread announcing 0.6.0.
Subsequently, "Ruby Editor Plugin for jEdit - release 0.6.5" was
posted, adding class hierachy information to the documentation viewer.
An extension to Rational - friendlier with Floats and Strings
-------------------------------------------------------------
Dave recalled a recent thread about converting a Float to a Rational,
for example 1.5 to 3/2.
He took a look at how Python handled this, and wrote some new methods
for Ruby in a similar spirit.
For example, 1.5.to_r returns Rational(3, 2). Other methods added
include Rational#approximate, to simplify a Rational, to +/- some
error.
MuraveyWeb 0.2.1-Ruby on Rails CMS, MuraveyWeb 0.2.2-Emergency Release
----------------------------------------------------------------------
Dmitry V. Sabanin put out a bugfix release for the MuraveyWeb content
management system. He quickly made an "Emergency Release" of 0.2.2 to
fix a bug in 0.2.1 that made SimpleFolders unusable.
Transaction::Simple 1.3.0
-------------------------
Austin Ziegler announced the latest release of Transaction::Simple, a
library allowing you to easily use in-memory transactions. "This is to
allow "test" changes to be made to an object before making the changes
permanent."
This version adds "transaction groups", allowing you to have a single
transaction for multiple objects.
John Lam said "Wow wow wow! This is so massively cool."
Classifier 1.3.0
----------------
Lucas Carlson announced that Classifier is now available as a
pure-Ruby library, as well as a version that uses the GSL library.
A new method String#summary was also added. This uses Classifier to
automatically summarise a block of text by guessing what the most
important sentences are.
color-tools 1.1.0
-----------------
Austin Ziegler updated his color-tools package. This library is used
to manipulate RGB and CMYK colours.
It can now read GIMP colour palette definition files.
Pages-BibTeX
------------
Tom Counsell announced a script to help users of iWord on MacOS X. It
fixes bibliographies in the Apple Pages word-processor.
Pimki 1.7
---------
Assaph Mehr announced Pimki 1.7.092, which he hopes will be the last
release before Pimki2.
Bugs were fixed and features added.
RubyInline 3.3.1 Released
-------------------------
Ryan Davis fixed some bugs in RubyInline, a library that makes it easy
to embed C and C++ code within a Ruby source file.
traits-0.0.0, traits-0.1.0
--------------------------
Ara.T.Howard announced the first version of traits (really, just the
renaming of attributes.rb). It provides "a better set of attr_*
methods".
trails-0.1.0 was also released.
Packgen 0.1
-----------
Ghislain Mary released Packgen, a "simple network packet generator
handling diffserv markers, useful for testing network bandwidth and
QoS."
KirbyBase 2.2
-------------
Jamey Cribbs made some major internal changes to KirbyBase, a simple
pure-Ruby database management system that stores its data in
plain-text files.
The design of the code is now much cleaner. Some functional changes
were also made.
Rant 0.3.6
----------
Stefan Lang improved Rant, a "flexible build tool written entirely in
Ruby, similar to Rake".
Generated files are now automatically cleaned up, and "constraining
variables" and "directed rules" were added.
Ruby-GetText-Package-0.9.0
--------------------------
Masao Mutoh's Ruby-GetText-Package was updated. It is a Native
Language Support Library Tool.
CGI and ERB are now supported.
Ri18n 0.0.3 Ruby application internationalization library
---------------------------------------------------------
In a related release, dm1 laid out Ri18n-0.0.3, a library whose goals
are similar to Ruby-GetText-Package - to help internationalisation of
Ruby programs.
Ruby/Odeum 0.3.1 Pre-Release
----------------------------
Zed A. Shaw announced a pre-release of Ruby/Odeum, a binding to the
QDBM Odeum inverted index library. (Useful for implementing a search
engine.)
The major new addition is a boolean expression query language,
allowing you to search for e.g. "Zed & Shaw ! (Frank Blank)".
Performance has also been improved in some circumstances.
session-2.4.0
-------------
Ara.T.Howard added the ability to specify stdin for
Session::Bash and Session::Sh.
Session is a set of classes for "driving external progams via pipes."
sldb-0.0.0, sldb-0.1.0
----------------------
Ara.T.Howard announced "sldb is a multi-thread,
multi-process, and nfs safe abstraction of sqlite databases." It deals
with locking and retrying transactions so you don't have to.
He had earlier introduced sldb-0.0.0.
webgen 0.3.4
------------
Thomas Leitner improved webgen, a tool to generate web pages from page
description and template files.
ERB can now be used, file handling has been enhanced, bugs fixed and
other features added.
Webstar Tools 0.5.0 Released!
-----------------------------
Zach Dennis posted the latest iteration of his set of command-line
utilities for the WebSTAR V Internet Server on MacOS X.
Production Log Analyzer 1.2.0
-----------------------------
Eric Hodel released a new version of his Production Log Analyzer, used
to determine which pages on a dynamic website are the slow ones.
This version includes a new time summary, plus support for sending
email with sendmail.