T
Tim Sutherland
http://www.rubyweeklynews.org/20050828.html
Ruby Weekly News 22nd - 28th August 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.
Articles and Announcements
--------------------------
* beaten to the punch, and a request
------------------------------------
pat eyler is writing a Rake tutorial for IBM (to be published in 2-3
months).
"Does anyone have an interesting, useful rake task or rule they'd be
interested in sharing?"
* Euruko 05: T-Shirts
---------------------
Stefan Schmiedl said that people who signed up to the Euruko
conference early would receive t-shirts. "Please also sign up if you
want to give a talk."
Euruko is the European Ruby Conference, which this year is held on
October 15 and 16 in Munich.
Threads
-------
Interesting threads included
Ruby 2
------
Alexander Fleck asked about the status of Ruby 2, and whether he will have
to throw out all his existing code when it is released.
Trans said that Ruby 1.9 (the current `development' version) is
Ruby-2-in-progress.
"And most of your scripts will run fine, though there may be some small
changes to be made. From what I can tell Matz is pretty hard nosed about
backward compatibilites."
Gateway Broken (Aug 25, 2005)
-----------------------------
Daniel Berger reported that the `comp.lang.ruby ruby-talk' gateway
appeared to be broken.
The gateway is responsible for forwarding messages from the newsgroup to
the mailing list, and vice versa.
ts said "Perhaps it's a coincidence but the gateway stopped when
greylisting was set up." (As a guard against spam.)
(ruby-core discussion indicated that it was indeed related to this. The
problem has now been fixed.)
string =~ string expressions
----------------------------
Mark James quoted ruby-doc.org and PickAxe 1 as saying that he should be
able to do
----
"cat o' 9 tails" =~ "\\d"
# This actually produces the error
# `=~': type mismatch: String given (TypeError)
----
Robert Klemme said that the behaviour changed between Ruby 1.6 and 1.8.
Ruby 1.8 requires one of the arguments to be a regular expression, and the
other to be a string.
The reason for the change is that the old behaviour could be ambiguous.
For example,
----
'foo' =~ 'bar'
/foo/ =~ 'bar'
'foo' =~ /bar/
----
Would the first line be equivalent to the second or the third? (In Ruby
1.6, it was the third. Did you guess right?)
Chris Game noted that the change is mentioned on page 69 of the second
edition of the PickAxe book.
He quoted: "In previous versions of Ruby, both [operands] could be
strings, in which case the second operand was converted into a regular
expression behind the scenes".
KDevelop Ruby Debugger
----------------------
Martin Ankerl: "Hi everyone, today I found out that kdevelop has the best
Ruby debugger I have ever seen and thought I must tell everyone about this
;-)"
He gave a link to a nice looking screenshot from kdevelop.org.
One-Click Installer: iconv, curses
----------------------------------
Dave Burt packaged up Iconv and Curses for users of the Windows One-Click
Installer.
The packages include everything you need to utilise these two libraries.
Iconv is used to translate strings between various encodings, while Curses
provides support for character-based user interfaces.
This will be very useful: discussions around Ruby's Unicode support will
say "use iconv, unless you're on Windows" no longer!
ANN: MRW online demo
--------------------
Phlip said that MiniRubyWiki can now host graphical acceptance tests.
MiniRubyWiki has for some time allowed you to specify data for unit tests
in a wiki format, making it easy for non-programmers to take on this task.
With the new feature, pages can contain screenshots that will be manually
checked by a human.
| High Moon Studios uses this rig to test DarkWatch. You change Lua
| script, hit Test, and their game runs on the server and collects a
| screenshot of the hero springing some trap in the game.
|
| Forget games. Imagine if you need to localize a GUI to 10 languages. You
| configure the same test suite to run in each language, taking screen
| shots as it goes. Then you tell your linguists to review all the
| outputs, looking for all the little typos and missing ` marks that we
| gringos wouldn't notice.
PL/Ruby in untrusted form?
--------------------------
Robby Russell posted a couple of blog entries; PL/Ruby loves RubyGems and
DRb and Installing untrusted PL/Ruby for PostgreSQL.
They both discuss PL/Ruby, the library that allows you to write Ruby
stored procedures for PostgreSQL.
By default the library will run under $SAFE = 12. This is necessary to
prevent users from writing procedures that use methods like system to do
things they shouldn't be allowed to.
Robby experimented with building the library to run against $SAFE = 0
(anything goes).
This allowed him to write procedures like:
----
CREATE FUNCTION redcloth(text) RETURNS text AS '
require ''rubygems''
require ''redcloth''
content = args[0]
rc = RedCloth.new(content)
return rc.to_html
' LANGUAGE 'plruby';
----
Example usage:
----
SELECT redcloth('*strong text* and _emphasized text_');
----
More evily, he went on to write a function that used DRb to make a remote
call from within a stored procedure.
See also the RedHanded post.
(http://redhanded.hobix.com/inspect/drbInsideStoredProcs.html)
define_method allowing any name?
--------------------------------
gabriele renzi found that it was possible to define methods via
define_method having names that were not allowed by def.
e.g. in irb
----=> "happy!"
----
"I think this behaviour should be prohibited (but on the other hand it
opens great possibilities "
Trans thought that there was nothing wrong with this behaviour, and
furthermore, that C.new."^_^" could be useful for DSLs (Domain-Specific
Languages).
gabriele: "well, I think most reasonable DSLs should use proper words not
punctuation, but I'd appreciate an Emoticon Specific Language "
Variable value "dump"
---------------------
Brian Takita had an idea for improving the logging of exceptions in his
application. It required the ability to capture the values of local
variables.
He followed up saying he had found a solution using the local_variables
method (part of the Kernel module). Dave Burt concised it:
----
local_variables.each {|name| puts name + "=" + eval(name).inspect }
----
www.ruby.net
------------
Daniel Schierbeck suggested that www.ruby.net be purchased for our lady in
crimson. (May She Bless us in Her Radiance.)
He noted that ruby.org is being used as an email domain, so it is unlikely
that we could get control of that one.
Matz: "I have mailed the owner of ruby.net about two years ago, and got no
response. Perhaps I should have shown him (big amount of) money."
(Johan Toki Persson said "How about establishing a foundation of some
sort, dealing with donations and such?". "RubyCentral" exclaimed Timothy
Hunter and David A. Black.)
nobu observed that http://ru.by/ would be an even shorter domain. "Nobody
in Belarus? "
Anatol Pomozov: "I am from belarus. It is great idea "
Jared Nuzzolillo purchased agilelanguage.com, agilelanguage.net and
agilelanguage.org, and offered to donate them to the Ruby community.
"Obviously, they cannot be the `main' domains, but I think they're cool
nonetheless."
luke dot: "i wonder if the del.icio.us people would let us have
rubyl.icio.us ; )".
Phil Tomson: "Is there a .rb country code? ruby.rb Perhaps we should bet
Ruby delcared it's own country with it's own .rb tld."
George Ogata: " I'd just like to point out that chunky-bacon.com is still
available. "
BoilerPlate 0.2.0 -- easy data-centric applications on Rails
------------------------------------------------------------
Michael Schuerig announced a new release of BoilerPlate. This is a
framework on top of Rails "that is intended to make development of
data-centric applications as easy as possible."
It's like a super-souped-up version of Rails' scaffolding. Instead of
simple HTML pages though, it provides a pretty, rich, AJAX'ed interface.
Unlike Rails' scaffolded views, it also provides an interface for managing
relationships such as manymany.
No Keys, nor other hash methods on multidimensional hash
--------------------------------------------------------
Auto-vivifying hashes lurk inside.
----
hash_factory = lambda { Hash.new {|h,k| h[k] = hash_factory.call }}
hash = hash_factory.call
hash[1][2][3] = "foo"
# -> { 1 => { 2 => { 3 => "foo" } } }
----
job posting ok?
---------------
Steve Conover: "I checked the c.l.r. faq and didn't find any restrictions
on job posting, I just wanted to confirm that it's ok before I go ahead...
(?)"
Phil Tomson said that if it was Ruby-related then it should be okay,
although "....of course, in a year or two if we start having several job
postings/day the sentiment could change."
File in which Module or Class is defined
----------------------------------------
Trans: "Is there a built in way to find out what file a class or module is
*initially* defined in?"
Robert Klemme said that the following could be used:
----
class Class
def inherited(cl) cl.const_set("FILE", caller[-1].freeze) end
end
----
Then you can look at Foo::FILE for each subsequently defined class Foo.
HTTP, client cookie and client form handling
--------------------------------------------
Yannick Turgeon was going to be writing a Ruby script to login to the
Yahoo website and extract some information from pages therein.
He enquired as to whether there were any libraries for doing this, apart
from the lower-level Net::HTTP, which for example does not do anything
special with cookies.
Aleksi gave links to three libraries: WebFetcher, Mechanize and
ruby-yahoo-finance.
Yannick ended up using Mechanize.
Ruby Weekly News 22nd - 28th August 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.
Articles and Announcements
--------------------------
* beaten to the punch, and a request
------------------------------------
pat eyler is writing a Rake tutorial for IBM (to be published in 2-3
months).
"Does anyone have an interesting, useful rake task or rule they'd be
interested in sharing?"
* Euruko 05: T-Shirts
---------------------
Stefan Schmiedl said that people who signed up to the Euruko
conference early would receive t-shirts. "Please also sign up if you
want to give a talk."
Euruko is the European Ruby Conference, which this year is held on
October 15 and 16 in Munich.
Threads
-------
Interesting threads included
Ruby 2
------
Alexander Fleck asked about the status of Ruby 2, and whether he will have
to throw out all his existing code when it is released.
Trans said that Ruby 1.9 (the current `development' version) is
Ruby-2-in-progress.
"And most of your scripts will run fine, though there may be some small
changes to be made. From what I can tell Matz is pretty hard nosed about
backward compatibilites."
Gateway Broken (Aug 25, 2005)
-----------------------------
Daniel Berger reported that the `comp.lang.ruby ruby-talk' gateway
appeared to be broken.
The gateway is responsible for forwarding messages from the newsgroup to
the mailing list, and vice versa.
ts said "Perhaps it's a coincidence but the gateway stopped when
greylisting was set up." (As a guard against spam.)
(ruby-core discussion indicated that it was indeed related to this. The
problem has now been fixed.)
string =~ string expressions
----------------------------
Mark James quoted ruby-doc.org and PickAxe 1 as saying that he should be
able to do
----
"cat o' 9 tails" =~ "\\d"
# This actually produces the error
# `=~': type mismatch: String given (TypeError)
----
Robert Klemme said that the behaviour changed between Ruby 1.6 and 1.8.
Ruby 1.8 requires one of the arguments to be a regular expression, and the
other to be a string.
The reason for the change is that the old behaviour could be ambiguous.
For example,
----
'foo' =~ 'bar'
/foo/ =~ 'bar'
'foo' =~ /bar/
----
Would the first line be equivalent to the second or the third? (In Ruby
1.6, it was the third. Did you guess right?)
Chris Game noted that the change is mentioned on page 69 of the second
edition of the PickAxe book.
He quoted: "In previous versions of Ruby, both [operands] could be
strings, in which case the second operand was converted into a regular
expression behind the scenes".
KDevelop Ruby Debugger
----------------------
Martin Ankerl: "Hi everyone, today I found out that kdevelop has the best
Ruby debugger I have ever seen and thought I must tell everyone about this
;-)"
He gave a link to a nice looking screenshot from kdevelop.org.
One-Click Installer: iconv, curses
----------------------------------
Dave Burt packaged up Iconv and Curses for users of the Windows One-Click
Installer.
The packages include everything you need to utilise these two libraries.
Iconv is used to translate strings between various encodings, while Curses
provides support for character-based user interfaces.
This will be very useful: discussions around Ruby's Unicode support will
say "use iconv, unless you're on Windows" no longer!
ANN: MRW online demo
--------------------
Phlip said that MiniRubyWiki can now host graphical acceptance tests.
MiniRubyWiki has for some time allowed you to specify data for unit tests
in a wiki format, making it easy for non-programmers to take on this task.
With the new feature, pages can contain screenshots that will be manually
checked by a human.
| High Moon Studios uses this rig to test DarkWatch. You change Lua
| script, hit Test, and their game runs on the server and collects a
| screenshot of the hero springing some trap in the game.
|
| Forget games. Imagine if you need to localize a GUI to 10 languages. You
| configure the same test suite to run in each language, taking screen
| shots as it goes. Then you tell your linguists to review all the
| outputs, looking for all the little typos and missing ` marks that we
| gringos wouldn't notice.
PL/Ruby in untrusted form?
--------------------------
Robby Russell posted a couple of blog entries; PL/Ruby loves RubyGems and
DRb and Installing untrusted PL/Ruby for PostgreSQL.
They both discuss PL/Ruby, the library that allows you to write Ruby
stored procedures for PostgreSQL.
By default the library will run under $SAFE = 12. This is necessary to
prevent users from writing procedures that use methods like system to do
things they shouldn't be allowed to.
Robby experimented with building the library to run against $SAFE = 0
(anything goes).
This allowed him to write procedures like:
----
CREATE FUNCTION redcloth(text) RETURNS text AS '
require ''rubygems''
require ''redcloth''
content = args[0]
rc = RedCloth.new(content)
return rc.to_html
' LANGUAGE 'plruby';
----
Example usage:
----
SELECT redcloth('*strong text* and _emphasized text_');
----
More evily, he went on to write a function that used DRb to make a remote
call from within a stored procedure.
See also the RedHanded post.
(http://redhanded.hobix.com/inspect/drbInsideStoredProcs.html)
define_method allowing any name?
--------------------------------
gabriele renzi found that it was possible to define methods via
define_method having names that were not allowed by def.
e.g. in irb
----=> "happy!"
----
"I think this behaviour should be prohibited (but on the other hand it
opens great possibilities "
Trans thought that there was nothing wrong with this behaviour, and
furthermore, that C.new."^_^" could be useful for DSLs (Domain-Specific
Languages).
gabriele: "well, I think most reasonable DSLs should use proper words not
punctuation, but I'd appreciate an Emoticon Specific Language "
Variable value "dump"
---------------------
Brian Takita had an idea for improving the logging of exceptions in his
application. It required the ability to capture the values of local
variables.
He followed up saying he had found a solution using the local_variables
method (part of the Kernel module). Dave Burt concised it:
----
local_variables.each {|name| puts name + "=" + eval(name).inspect }
----
www.ruby.net
------------
Daniel Schierbeck suggested that www.ruby.net be purchased for our lady in
crimson. (May She Bless us in Her Radiance.)
He noted that ruby.org is being used as an email domain, so it is unlikely
that we could get control of that one.
Matz: "I have mailed the owner of ruby.net about two years ago, and got no
response. Perhaps I should have shown him (big amount of) money."
(Johan Toki Persson said "How about establishing a foundation of some
sort, dealing with donations and such?". "RubyCentral" exclaimed Timothy
Hunter and David A. Black.)
nobu observed that http://ru.by/ would be an even shorter domain. "Nobody
in Belarus? "
Anatol Pomozov: "I am from belarus. It is great idea "
Jared Nuzzolillo purchased agilelanguage.com, agilelanguage.net and
agilelanguage.org, and offered to donate them to the Ruby community.
"Obviously, they cannot be the `main' domains, but I think they're cool
nonetheless."
luke dot: "i wonder if the del.icio.us people would let us have
rubyl.icio.us ; )".
Phil Tomson: "Is there a .rb country code? ruby.rb Perhaps we should bet
Ruby delcared it's own country with it's own .rb tld."
George Ogata: " I'd just like to point out that chunky-bacon.com is still
available. "
BoilerPlate 0.2.0 -- easy data-centric applications on Rails
------------------------------------------------------------
Michael Schuerig announced a new release of BoilerPlate. This is a
framework on top of Rails "that is intended to make development of
data-centric applications as easy as possible."
It's like a super-souped-up version of Rails' scaffolding. Instead of
simple HTML pages though, it provides a pretty, rich, AJAX'ed interface.
Unlike Rails' scaffolded views, it also provides an interface for managing
relationships such as manymany.
No Keys, nor other hash methods on multidimensional hash
--------------------------------------------------------
Auto-vivifying hashes lurk inside.
----
hash_factory = lambda { Hash.new {|h,k| h[k] = hash_factory.call }}
hash = hash_factory.call
hash[1][2][3] = "foo"
# -> { 1 => { 2 => { 3 => "foo" } } }
----
job posting ok?
---------------
Steve Conover: "I checked the c.l.r. faq and didn't find any restrictions
on job posting, I just wanted to confirm that it's ok before I go ahead...
(?)"
Phil Tomson said that if it was Ruby-related then it should be okay,
although "....of course, in a year or two if we start having several job
postings/day the sentiment could change."
File in which Module or Class is defined
----------------------------------------
Trans: "Is there a built in way to find out what file a class or module is
*initially* defined in?"
Robert Klemme said that the following could be used:
----
class Class
def inherited(cl) cl.const_set("FILE", caller[-1].freeze) end
end
----
Then you can look at Foo::FILE for each subsequently defined class Foo.
HTTP, client cookie and client form handling
--------------------------------------------
Yannick Turgeon was going to be writing a Ruby script to login to the
Yahoo website and extract some information from pages therein.
He enquired as to whether there were any libraries for doing this, apart
from the lower-level Net::HTTP, which for example does not do anything
special with cookies.
Aleksi gave links to three libraries: WebFetcher, Mechanize and
ruby-yahoo-finance.
Yannick ended up using Mechanize.