T
Tim Sutherland
http://www.rubyweeklynews.org/20050605.html
Ruby Weekly News 30th May - 5th June 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
--------------------------
RubyGems and the FreeBSD ports tree
-----------------------------------
Jonathan Weiss is working on integrating RubyGems with the FreeBSD
ports tree. He requests testers.
Stats comp.lang.ruby
--------------------
Balwinder Singh Dheeman posted the weekly statistics for
comp.lang.ruby. 70% of the posts came from the ruby-talk mailing list
(which is bi-mirrored with the newsgroup).
Tom Copeland followed up with a [graph] showing the number of users
added to [RubyForge] each month.
Google Summer of Code update
----------------------------
David A. Black announced that "Unfortunately, it's official that the
Google Summer of Code program is not accepting any more sponsoring
organizations, so Ruby Central will not be able to serve in that
capacity."
See also the threads [Google pays students to develop open source]
and [Google Summer of Code: status of Ruby Central].
As Phil Tomson noted, Google publically announced the program and
opened the application process on the 31st of May. The deadline for
applications was the next day: June 1st.
Possible training classes for Ruby programming and for Ruby on Rails
--------------------------------------------------------------------
Curt Hibbs: "Later this year, there could be a commercial offering of
training classes for both the Ruby Programming Language and also for
Ruby on Rails. I'm not directly involved with this, but I's like to do
what ever I can to help make sure it happens."
He requests those interested to contact him via his blog so he can
guage the level of support.
Gambit Codefest
---------------
Greg Brown (with James Edward Gray II) announced "We are currently in
Day 2 of a 9 day codefest to complete the Gambit gaming library which
won a RubyCentral grant this year. I created a [livejournal account]
to keep everyone up to date on the latest news from the codefest."
He also linked to the CVS repository, "which is being updated just as
fast as we can write the stuff."
RubyGems HackFest Weekend #1 is complete!
-----------------------------------------
In other fest've news, Ryan Davis announced that the first weekend of
the RubyGems HackFest was complete.
"We started our RubyGems Hackfest Saturday, with a turnout of 6
people. Five were regulars from Seattle.rb, and we even got someone up
from Portland!"
A "package listing command extension" was added, and .gemrc now
supports .cvsrc-style command option specifications. RubyGems was
changed to no longer require Date and lots of unit tests were written.
require_gem is around two times faster than before.
Ruby User Groups
----------------
Omaha Ruby User's Group
-----------------------
Blaine Buxton announced the second meeting of the Omaha Ruby User's
Group, held on June 6 2005 at the Eagle Run Shopping Center.
June 5 Toronto Ruby User Group meeting
--------------------------------------
Mike Stok foretold that the Toronto Ruby User Group would have their
monthly meeting on Sunday June 5th at Sushi Rock.
Austin.rb - aka ARCTAN
----------------------
Jim Freeze greeted "fellow Austinites and Texans", announcing ARCTAN's
weekly Ruby lunch at Chez Zee. It is "this Thursday at 11:20".
Reminder: Hamburg.rb meeting tonight
------------------------------------
Stephan Kämper reminded those in Hamburg, Germany to come to the
Hamburg.rb meeting on June 1st.
Quote of the Week
-----------------
The thread [Ruby-VTK-0.2.0]:
Seiya Nishizawa:
| Ruby-VTK is a ruby wrapper of VTK (The Visualization
| Tollkit: http://public.kitware.com/VTK/).
Brian Schröder:
| Very good thing and the timing is perfekt! I'll go
| ahead and investigate it right away. How did you know I'd need this
| today
Seiya:
| Yes, I can use telepathy to get your thinking
|
| I developed it, but I don't test it much. You have to sacrifice
| yourself for debuging. Thank you!!
Josef `Jupp' SCHUGT noticed the "Tollkit", and gave dictionary definitions
of "toll and "tool":
| I send this message to the list because not only Seiya Nishizawa may
| benefit from this:" ... "As a rule of thumb, two identical vowels
| mean a long vovel - this is pretty much the same in Japanese.
Lyle Johnson:
| What is a "vovel"?
Mark Probert:
| I think that it is a little creature, much like a shrew,
| that spends much of its time seaching for food, its favourite being
| worms, that spend much of their lives a little underground.
| The vovel hunts for its prey by placing its long flat nose nose in
| into the ground and then flicking back strongly with its head."
Joel VanderWerf:
| "Ok, I'm beginning to appreciate the lore of the
| "vovel", but what is a "nose nose"?
|
| Oh, well, as long as it "flicks like a vovel", it doesn't really
| matter how the nose is implemented, does it?"
Link of the Week
----------------
TrimJunction: http://www.trimpath.com/project/wiki/TrimJunction
by Steve Yen.
It's a ("< 10%" completed) clone of Ruby on Rails, written in a mixture of
client and server-side Javascript.
Unlike Rails (and other web application frameworks) TrimJunction will be
designed around "offline, occasionally connected databases". It will do as
much on the client as possible and only synchronise with the server when
it needs to.
(Validation, for example, is done first on the client, and only on the
server when you synchronise.)
"The Junction project will be exploring this effect to see if lightweight
disconnected web applications and re-synchronizing data on reconnect are
possible."
Steve's blog at http://www.trimpath.com/blog/ also contains a number of
interesting ideas about Javascript.
(Thanks to Martin DeMello for suggesting this link.)
Threads
-------
Interesting threads included ...
Whiteout (#34)
--------------
James Edward Gray II wrote this week's [Ruby Quiz].
"Perl programmers have all the fun. They have an entire section of the
CPAN devoted to their playing around. The ACME modules are all fun little
toys that have interesting if rarely very useful effects."
The quiz is to port ACME::Bleach to Ruby. It is used to translate programs
into whitespace (with an initial require 'whitespace' line so that they
are still executable).
Package, a future replacement for setup.rb and mkmf.rb
------------------------------------------------------
Christian Neukirchen started thinking about whether the Ruby build and
install scripts mkmf.rb and setup.rb could be improved.
"I have looked into how other languages install source and compile
extensions, and the library I liked best so far is Python's distutils."
An example distutils setup script:
----
from distutils.core import setup
setup (name = "Distutils",
version = "0.1.1",
description = "Python Module Distribution Utilities",
author = "Greg Ward",
author_email = "(e-mail address removed)",
url = "http://www.python.org/sigs/distutils-sig/",
packages = ['distutils', 'distutils.command'])
----
Christian intends to write a Ruby equivalent of distutils, calling it
"Package".
"But now, I'll ask you: Are you satisfied with the way installing Ruby
extensions and libraries works? Do you think there is a place for Package?
Do you have further improvements or can provide alternative ideas?"
Austin Ziegler noted that if Package was going to deal with binary
extensions then it "absolutely *must* work perfectly well on Windows. It
has to work better than setup.rb, and setup.rb works mostly well for that.
Gems, much less so."
Christian added, "Package will try to provide a more clean (no icky
globals, for example) API for the things mkmf.rb does. I think I'll start
with a recent mkmf.rb and refactor it heavily."
ruby-dev summary 26128-26222
----------------------------
Minero Aoki posted the latest English summary of the Japanese list
ruby-dev.
It included the release of Ruby 1.8.3 preview1, issues with hashing
Hashes, and a suggestion by WATANABE Hirofumi that ropt be bundled with
Ruby and preferred over optparse.rb since the latter is too hard to use.
The latter statement induced Aredridel to say that he thought it was
actually the optparse library that had the easier API - "ropt looks more
difficult, even if it is more succinct."
Eric Hodel said that optparse requires too much typing for a program that
only needs a few options, however `a slow loris with poison elbows' posted
the following example to counter:
----
require 'optparse'
require 'ostruct'
opt = OpenStruct.new
p = OptionParser.new {|p|
p.on('-c C') {|o| opt.color = o}
p.on('-i I', Integer) {|o| opt.int = o}
}.parse!
puts "color is: #{opt.color} (#{opt.color.class})"
puts "integer is: #{opt.int} (#{opt.int.class})"
----
RubyScript2Exe and GUI toolkits
-------------------------------
Erik Veenstra began, "I know that some of you use RubyScript2Exe in
combination with a GUI toolkit, like TK, FXRuby, WxRuby, RubyWebDialogs
and others."
"Since I can't test all combinations of RubyScript2Exe, OS-versions,
Ruby-versions and toolkits, I need your help to build a list of success
stories, failures and tweaks."
There were several replies, including one from Jamey Cribbs; "I have used
RubyScript2Exe in several FXRuby applications. The latest and biggest is
an I.T. Infrastructure Management System, which is a FXRuby app going
against an Oracle database. Using RubyScript2Exe, I can create one
executable that is a little over 2MB in size."
Calling a procedure with dinamyc name
-------------------------------------
Marcelo Paniagua had the code table.client_id (arising from his use of the
KirbyBase embedded database management system). How do you use such an
interface when the fieldname is dynamic? (Stored in a String.)
Francis Hwang enlightened:
----
field = 'client_id'
client_id = table.send field
----
Building a business case for Ruby
---------------------------------
Joe Van Dyk attempted to introduced Ruby at work and was told
| XXXX already has Product Standards for Python and Perl as
| Scripting/Dynamic languages. And for Java as a full programming
| language.
|
| Ruby offer nothing significant not found in these XXXXX Standard
| languages, and an addition language just adds variation.
Joe: "Boo, I say! Boo!"
What could Joe say to convince them to allow Ruby?
There were replies giving some of the advantages (and differences) of Ruby
relative to Python and Perl, but also some discussion on the benefits of
additional languages in general.
James Britt wrote:
| Boo, perhaps, but try turning this around. Suppose Ruby, not Python,
| were already on The List, and someone comes to you to make a case for
| adding Python.
|
| What do want to hear to convince you? What are you tossing back when
| told of Zope, or Twister, or the extensive Python XML tools, or the
| amount of documentation, or how it's a great beginners' language, or
| whatever Pythonistas think makes a compelling case?
To Joe's request for "Examples of existing Ruby usages in large scale
applications", Ben Giddings pointed to the [RealWorldRuby] page on the
RubyGarden wiki, and added "I think the NASA and NOAA stuff are some of
the best sources for real world, large-scale stuff. I'm sure Ara will tell
you more about what he's doing."
Lothar Scholz: "You can add BMW here. Sorry if i tell you more i must
shoot you."
Dan Fitzpatrick:
| We build large applications for "huge companies that [fly] really big
| expensive things". We switched to Ruby in January of this year and have
| not looked back since. Ruby is an excellent platform for large-scale
| application development in my opinion because of the excellent namespace
| system, speed of development, code maintainability, and speed of
| execution. Our Ruby system currently services over 200 airlines (all 10
| of the top 10), 800 aircraft part manufacturers and repair facilities,
| and more than a thousand part suppliers. We deliver data on 350,000,000
| inventory items and 2 million repair capabilities to 8,000 users.
The last word goes to Ben, who said
| More tools can be a better thing (until your toolbelt gets so heavy
| that it pulls your pants down and starts showing butt-crack).
Interesting discovery...
------------------------
Austin Ziegler ran Shugo Maeda's new profiler over PDF::Writer with a
sample PDF, and found that about 3% of the time was in Kernel.respond_to?;
there were twenty million such calls. Almost all of these were arising
from Marshal.dump.
Austin's guessed that Marshal was using respond_to? to check whether
custom dumpers were defined.
This led people to discuss two methods for checking whether a method
exists; respond_to? or calling it and rescuing NoMethodError.
It was felt that whichever performed better would depend on whether the
method `usually existed' or `usually did not exist'.
Eric Hodel said that in any case, the NoMethodError technique was
incorrect:
----
class C
def a; Object.no_such_method; end
end
----
The NoMethodError would falsely conclude that C#a does not exist.
(On the other hand, respond_to? can also be incorrect because of
method_missing.)
ternary operator confusion
--------------------------
Belorion didn't understand why 'true ? a.push 1 : a.push 2'
was a syntax error.
Phrogz said that 'true ? a.push(1) : a.push(2)' works.
This led to a discussion over the merits of Ruby having optional
parentheses for method calls.
Eric Mahurin thought that the `(' and `)' should be mandatory. "Why do
people feel the need to drop the ()? I didn't like it in Perl and I don't
like it in Ruby. Do people just want something that is kind of like shell
syntax?"
ES said that "uniform access" was one reason - it allows you to write
foo.bar instead of foo.bar() or foo.get_bar() - without alluding to
whether bar points `directly' to an instance variable or does something
more.
Charles Hixson said that this could have been achieved by making the
parentheses optional only when there were zero parameters.
Austin Ziegler gave another reason "I use it in PDF::Writer because it
makes certain parts feel more like a DSL (domain specific language) than a
program."
Hal Fulton said "Personally I like poetry mode in many cases (not all)."
He asked if Eric would want to have to write code like the following:
----
attr_readerfoo)
loop() { puts "I'm an infinite loop!" }
raise(AnException)
throwsomething)
exit()
----
Ruby in C#
----------
PD: "I am currently working on a project in C# which requires the use of a
Ruby interpreter. I also need to extend Ruby to interact with some methods
built into the host application. So I want to know if all this is possible
and if so, how would I go about doing it?"
Between them, Mark Hubbart and James Britt listed the options, two of
which were bridges between the Ruby and .NET worlds and one which is an
experimental Ruby interpreter written in C#.
Ruby/Odeum vs. Lucene: Part 2
-----------------------------
Zed A. Shaw updated his performance analysis of full-text search engines,
comparing Ruby/Odeum and Lucene.
"The gist of the analysis is that Ruby/Odeum is slower than Lucene, but
uses a lot less memory."
New Releases
------------
eric3 3.7.0
-----------
Detlev Offenbach enhanced Eric3, an IDE for Ruby and Python.
New features include a Ruby class browser, support for generating KDE
UIs, a debugger and syntax highlighting for Ruby.
AllInOneRuby 0.2.3
------------------
Erik Veenstra released AllInOneRuby 0.2.3. This tool is a
"just-in-time and temporary installation of Ruby" - a compressed
executable for Windows, Linux or MacOS X that includes the Ruby
interpreter and runtime libraries.
RubyScript2Exe 0.3.5
--------------------
Erik Veenstra also updated a related project - RubyScript2Exe. This
one transforms a Ruby application into a standalone, compressed
executable for Windows, Linux or MacOS X that bundles your code
alongside the Ruby interpreter and runtime libraries.
RubyWebDialogs 0.2.0
--------------------
Erik Veenstra put out the latest version of RubyWebDialogs, a way of
implementing a "graphical user interface" using an API that underneath
uses HTML and an internal web server. Your web browser is then the
frontend for the application.
ShortURL 0.2.0
--------------
Vincent Foley slipped out ShortURL 0.2.0 then 0.3.0. ShortURL is a
library that uses the URL shortening services rubyurl and tinyurl.
See also his initial announcement [TinyUrl class] and follow-up
[ShortURL 0.0.1].
newsstats 1.1.2 (pre-release) is released
-----------------------------------------
Dr Balwinder S Dheeman released a pre-release (!) of newsstats, a tool
for computing weekly statistics for a newsgroup.
librend 0.0.1
-------------
Ilmari Heikkinen introduced "an OpenGL scenegraph engine written
mostly in Ruby with some critical sections inlined in C."
"Librend is a simple scenegraph engine on top of OpenGL, SDL, Imlib2,
GLEW and Cairo that aims to make it quick and easy to write apps that
mix 2D, 3D and vector graphics."
There was a lot of interest in the project.
parseargs-0.0.0
---------------
Ara.T.Howard released the initial version of parseargs, "a library
that faciltates the parsing of arguments and keywords from method
paramters, setting of default values, validation, contraints via class
based or duck based typing, and coercion/convincing to type/ducktype
when possible."
Observing the version number, Hal Fulton quipped "Hmm, I think I used
a prior version of it... "
Joel VanderWerf:
| Was that 0.0.0.0, or 0.0.0.0.0?
|
| Ruby folks are so conservative in version numbering that it
| wouldn't be surprising to see negative versions...
| "Your library looks nice, but I'm not going to use use it until
| it goes positive."
RubyLexer 0.6.2
---------------
Caleb Clausen announced version 0.6.2 of RubyLexer, "a hyper-correct
stand-alone lexer of Ruby in Ruby."
Bugs were fixed and error handling improved. Input can now come from a
String. Performance enhancements were also added.
tree-0.1
--------
dave released a dRb-based application for KDE that allows you to share
YAML data over a secure network. He plans to use the experience of
creating this application to write a QtRuby tutorial.
Ruby-VTK-0.2.0
--------------
Seiya Nishizawa issued Ruby-VTK-0.2.0, a wrapper for the VTK
Visualization Toolkit, "an open source, freely available software
system for 3D computer graphics, image processing, and visualization."
See also Quote of the Week.
Nitro + Og 0.18.1
-----------------
George Moschovitis released new versions of Nitro and Og. Nitro is a
web application framework, while Og is an object-relational mapper.
Support for WEBrick was improved. Thread safe mode was "added again"
in Og. Error reporting was improved and template overloading added.
Plus more...
Ruby/GLEW 0.0.1
---------------
Ilmari Heikkinen announced the first public release of Ruby/GLEW with
a "yah!"
"Ruby/GLEW provides bindings for the OpenGL Extension Wrangler
Library", "making it possible to use OpenGL extensions like shaders
and rectangular textures from Ruby."
Imlib2-Ruby 0.5.1
-----------------
Paul Duncan fixed a memory leak and improved error reporting in
Imlib2-Ruby.
"Imlib2 is a fast image rendering library used by the Enlightenment
window manager and the Feh image viewer".
Rubilicious 0.1.5
-----------------
Paul also released the latest bindings for the social bookmarking site
del.icio.us, Rubilicious.
Numerous bugs were fixed, plus support was added for tag bundles and
custom HTTP User-Agent strings.
Elsewhere he wrote "You have no idea how confusing it was on my poor
fingers and brain to release one program with a version of 0.5.1, then
immediately release a different program with a version of 0.1.5."
Ruby Weekly News 30th May - 5th June 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
--------------------------
RubyGems and the FreeBSD ports tree
-----------------------------------
Jonathan Weiss is working on integrating RubyGems with the FreeBSD
ports tree. He requests testers.
Stats comp.lang.ruby
--------------------
Balwinder Singh Dheeman posted the weekly statistics for
comp.lang.ruby. 70% of the posts came from the ruby-talk mailing list
(which is bi-mirrored with the newsgroup).
Tom Copeland followed up with a [graph] showing the number of users
added to [RubyForge] each month.
Google Summer of Code update
----------------------------
David A. Black announced that "Unfortunately, it's official that the
Google Summer of Code program is not accepting any more sponsoring
organizations, so Ruby Central will not be able to serve in that
capacity."
See also the threads [Google pays students to develop open source]
and [Google Summer of Code: status of Ruby Central].
As Phil Tomson noted, Google publically announced the program and
opened the application process on the 31st of May. The deadline for
applications was the next day: June 1st.
Possible training classes for Ruby programming and for Ruby on Rails
--------------------------------------------------------------------
Curt Hibbs: "Later this year, there could be a commercial offering of
training classes for both the Ruby Programming Language and also for
Ruby on Rails. I'm not directly involved with this, but I's like to do
what ever I can to help make sure it happens."
He requests those interested to contact him via his blog so he can
guage the level of support.
Gambit Codefest
---------------
Greg Brown (with James Edward Gray II) announced "We are currently in
Day 2 of a 9 day codefest to complete the Gambit gaming library which
won a RubyCentral grant this year. I created a [livejournal account]
to keep everyone up to date on the latest news from the codefest."
He also linked to the CVS repository, "which is being updated just as
fast as we can write the stuff."
RubyGems HackFest Weekend #1 is complete!
-----------------------------------------
In other fest've news, Ryan Davis announced that the first weekend of
the RubyGems HackFest was complete.
"We started our RubyGems Hackfest Saturday, with a turnout of 6
people. Five were regulars from Seattle.rb, and we even got someone up
from Portland!"
A "package listing command extension" was added, and .gemrc now
supports .cvsrc-style command option specifications. RubyGems was
changed to no longer require Date and lots of unit tests were written.
require_gem is around two times faster than before.
Ruby User Groups
----------------
Omaha Ruby User's Group
-----------------------
Blaine Buxton announced the second meeting of the Omaha Ruby User's
Group, held on June 6 2005 at the Eagle Run Shopping Center.
June 5 Toronto Ruby User Group meeting
--------------------------------------
Mike Stok foretold that the Toronto Ruby User Group would have their
monthly meeting on Sunday June 5th at Sushi Rock.
Austin.rb - aka ARCTAN
----------------------
Jim Freeze greeted "fellow Austinites and Texans", announcing ARCTAN's
weekly Ruby lunch at Chez Zee. It is "this Thursday at 11:20".
Reminder: Hamburg.rb meeting tonight
------------------------------------
Stephan Kämper reminded those in Hamburg, Germany to come to the
Hamburg.rb meeting on June 1st.
Quote of the Week
-----------------
The thread [Ruby-VTK-0.2.0]:
Seiya Nishizawa:
| Ruby-VTK is a ruby wrapper of VTK (The Visualization
| Tollkit: http://public.kitware.com/VTK/).
Brian Schröder:
| Very good thing and the timing is perfekt! I'll go
| ahead and investigate it right away. How did you know I'd need this
| today
Seiya:
| Yes, I can use telepathy to get your thinking
|
| I developed it, but I don't test it much. You have to sacrifice
| yourself for debuging. Thank you!!
Josef `Jupp' SCHUGT noticed the "Tollkit", and gave dictionary definitions
of "toll and "tool":
| I send this message to the list because not only Seiya Nishizawa may
| benefit from this:" ... "As a rule of thumb, two identical vowels
| mean a long vovel - this is pretty much the same in Japanese.
Lyle Johnson:
| What is a "vovel"?
Mark Probert:
| I think that it is a little creature, much like a shrew,
| that spends much of its time seaching for food, its favourite being
| worms, that spend much of their lives a little underground.
| The vovel hunts for its prey by placing its long flat nose nose in
| into the ground and then flicking back strongly with its head."
Joel VanderWerf:
| "Ok, I'm beginning to appreciate the lore of the
| "vovel", but what is a "nose nose"?
|
| Oh, well, as long as it "flicks like a vovel", it doesn't really
| matter how the nose is implemented, does it?"
Link of the Week
----------------
TrimJunction: http://www.trimpath.com/project/wiki/TrimJunction
by Steve Yen.
It's a ("< 10%" completed) clone of Ruby on Rails, written in a mixture of
client and server-side Javascript.
Unlike Rails (and other web application frameworks) TrimJunction will be
designed around "offline, occasionally connected databases". It will do as
much on the client as possible and only synchronise with the server when
it needs to.
(Validation, for example, is done first on the client, and only on the
server when you synchronise.)
"The Junction project will be exploring this effect to see if lightweight
disconnected web applications and re-synchronizing data on reconnect are
possible."
Steve's blog at http://www.trimpath.com/blog/ also contains a number of
interesting ideas about Javascript.
(Thanks to Martin DeMello for suggesting this link.)
Threads
-------
Interesting threads included ...
Whiteout (#34)
--------------
James Edward Gray II wrote this week's [Ruby Quiz].
"Perl programmers have all the fun. They have an entire section of the
CPAN devoted to their playing around. The ACME modules are all fun little
toys that have interesting if rarely very useful effects."
The quiz is to port ACME::Bleach to Ruby. It is used to translate programs
into whitespace (with an initial require 'whitespace' line so that they
are still executable).
Package, a future replacement for setup.rb and mkmf.rb
------------------------------------------------------
Christian Neukirchen started thinking about whether the Ruby build and
install scripts mkmf.rb and setup.rb could be improved.
"I have looked into how other languages install source and compile
extensions, and the library I liked best so far is Python's distutils."
An example distutils setup script:
----
from distutils.core import setup
setup (name = "Distutils",
version = "0.1.1",
description = "Python Module Distribution Utilities",
author = "Greg Ward",
author_email = "(e-mail address removed)",
url = "http://www.python.org/sigs/distutils-sig/",
packages = ['distutils', 'distutils.command'])
----
Christian intends to write a Ruby equivalent of distutils, calling it
"Package".
"But now, I'll ask you: Are you satisfied with the way installing Ruby
extensions and libraries works? Do you think there is a place for Package?
Do you have further improvements or can provide alternative ideas?"
Austin Ziegler noted that if Package was going to deal with binary
extensions then it "absolutely *must* work perfectly well on Windows. It
has to work better than setup.rb, and setup.rb works mostly well for that.
Gems, much less so."
Christian added, "Package will try to provide a more clean (no icky
globals, for example) API for the things mkmf.rb does. I think I'll start
with a recent mkmf.rb and refactor it heavily."
ruby-dev summary 26128-26222
----------------------------
Minero Aoki posted the latest English summary of the Japanese list
ruby-dev.
It included the release of Ruby 1.8.3 preview1, issues with hashing
Hashes, and a suggestion by WATANABE Hirofumi that ropt be bundled with
Ruby and preferred over optparse.rb since the latter is too hard to use.
The latter statement induced Aredridel to say that he thought it was
actually the optparse library that had the easier API - "ropt looks more
difficult, even if it is more succinct."
Eric Hodel said that optparse requires too much typing for a program that
only needs a few options, however `a slow loris with poison elbows' posted
the following example to counter:
----
require 'optparse'
require 'ostruct'
opt = OpenStruct.new
p = OptionParser.new {|p|
p.on('-c C') {|o| opt.color = o}
p.on('-i I', Integer) {|o| opt.int = o}
}.parse!
puts "color is: #{opt.color} (#{opt.color.class})"
puts "integer is: #{opt.int} (#{opt.int.class})"
----
RubyScript2Exe and GUI toolkits
-------------------------------
Erik Veenstra began, "I know that some of you use RubyScript2Exe in
combination with a GUI toolkit, like TK, FXRuby, WxRuby, RubyWebDialogs
and others."
"Since I can't test all combinations of RubyScript2Exe, OS-versions,
Ruby-versions and toolkits, I need your help to build a list of success
stories, failures and tweaks."
There were several replies, including one from Jamey Cribbs; "I have used
RubyScript2Exe in several FXRuby applications. The latest and biggest is
an I.T. Infrastructure Management System, which is a FXRuby app going
against an Oracle database. Using RubyScript2Exe, I can create one
executable that is a little over 2MB in size."
Calling a procedure with dinamyc name
-------------------------------------
Marcelo Paniagua had the code table.client_id (arising from his use of the
KirbyBase embedded database management system). How do you use such an
interface when the fieldname is dynamic? (Stored in a String.)
Francis Hwang enlightened:
----
field = 'client_id'
client_id = table.send field
----
Building a business case for Ruby
---------------------------------
Joe Van Dyk attempted to introduced Ruby at work and was told
| XXXX already has Product Standards for Python and Perl as
| Scripting/Dynamic languages. And for Java as a full programming
| language.
|
| Ruby offer nothing significant not found in these XXXXX Standard
| languages, and an addition language just adds variation.
Joe: "Boo, I say! Boo!"
What could Joe say to convince them to allow Ruby?
There were replies giving some of the advantages (and differences) of Ruby
relative to Python and Perl, but also some discussion on the benefits of
additional languages in general.
James Britt wrote:
| Boo, perhaps, but try turning this around. Suppose Ruby, not Python,
| were already on The List, and someone comes to you to make a case for
| adding Python.
|
| What do want to hear to convince you? What are you tossing back when
| told of Zope, or Twister, or the extensive Python XML tools, or the
| amount of documentation, or how it's a great beginners' language, or
| whatever Pythonistas think makes a compelling case?
To Joe's request for "Examples of existing Ruby usages in large scale
applications", Ben Giddings pointed to the [RealWorldRuby] page on the
RubyGarden wiki, and added "I think the NASA and NOAA stuff are some of
the best sources for real world, large-scale stuff. I'm sure Ara will tell
you more about what he's doing."
Lothar Scholz: "You can add BMW here. Sorry if i tell you more i must
shoot you."
Dan Fitzpatrick:
| We build large applications for "huge companies that [fly] really big
| expensive things". We switched to Ruby in January of this year and have
| not looked back since. Ruby is an excellent platform for large-scale
| application development in my opinion because of the excellent namespace
| system, speed of development, code maintainability, and speed of
| execution. Our Ruby system currently services over 200 airlines (all 10
| of the top 10), 800 aircraft part manufacturers and repair facilities,
| and more than a thousand part suppliers. We deliver data on 350,000,000
| inventory items and 2 million repair capabilities to 8,000 users.
The last word goes to Ben, who said
| More tools can be a better thing (until your toolbelt gets so heavy
| that it pulls your pants down and starts showing butt-crack).
Interesting discovery...
------------------------
Austin Ziegler ran Shugo Maeda's new profiler over PDF::Writer with a
sample PDF, and found that about 3% of the time was in Kernel.respond_to?;
there were twenty million such calls. Almost all of these were arising
from Marshal.dump.
Austin's guessed that Marshal was using respond_to? to check whether
custom dumpers were defined.
This led people to discuss two methods for checking whether a method
exists; respond_to? or calling it and rescuing NoMethodError.
It was felt that whichever performed better would depend on whether the
method `usually existed' or `usually did not exist'.
Eric Hodel said that in any case, the NoMethodError technique was
incorrect:
----
class C
def a; Object.no_such_method; end
end
----
The NoMethodError would falsely conclude that C#a does not exist.
(On the other hand, respond_to? can also be incorrect because of
method_missing.)
ternary operator confusion
--------------------------
Belorion didn't understand why 'true ? a.push 1 : a.push 2'
was a syntax error.
Phrogz said that 'true ? a.push(1) : a.push(2)' works.
This led to a discussion over the merits of Ruby having optional
parentheses for method calls.
Eric Mahurin thought that the `(' and `)' should be mandatory. "Why do
people feel the need to drop the ()? I didn't like it in Perl and I don't
like it in Ruby. Do people just want something that is kind of like shell
syntax?"
ES said that "uniform access" was one reason - it allows you to write
foo.bar instead of foo.bar() or foo.get_bar() - without alluding to
whether bar points `directly' to an instance variable or does something
more.
Charles Hixson said that this could have been achieved by making the
parentheses optional only when there were zero parameters.
Austin Ziegler gave another reason "I use it in PDF::Writer because it
makes certain parts feel more like a DSL (domain specific language) than a
program."
Hal Fulton said "Personally I like poetry mode in many cases (not all)."
He asked if Eric would want to have to write code like the following:
----
attr_readerfoo)
loop() { puts "I'm an infinite loop!" }
raise(AnException)
throwsomething)
exit()
----
Ruby in C#
----------
PD: "I am currently working on a project in C# which requires the use of a
Ruby interpreter. I also need to extend Ruby to interact with some methods
built into the host application. So I want to know if all this is possible
and if so, how would I go about doing it?"
Between them, Mark Hubbart and James Britt listed the options, two of
which were bridges between the Ruby and .NET worlds and one which is an
experimental Ruby interpreter written in C#.
Ruby/Odeum vs. Lucene: Part 2
-----------------------------
Zed A. Shaw updated his performance analysis of full-text search engines,
comparing Ruby/Odeum and Lucene.
"The gist of the analysis is that Ruby/Odeum is slower than Lucene, but
uses a lot less memory."
New Releases
------------
eric3 3.7.0
-----------
Detlev Offenbach enhanced Eric3, an IDE for Ruby and Python.
New features include a Ruby class browser, support for generating KDE
UIs, a debugger and syntax highlighting for Ruby.
AllInOneRuby 0.2.3
------------------
Erik Veenstra released AllInOneRuby 0.2.3. This tool is a
"just-in-time and temporary installation of Ruby" - a compressed
executable for Windows, Linux or MacOS X that includes the Ruby
interpreter and runtime libraries.
RubyScript2Exe 0.3.5
--------------------
Erik Veenstra also updated a related project - RubyScript2Exe. This
one transforms a Ruby application into a standalone, compressed
executable for Windows, Linux or MacOS X that bundles your code
alongside the Ruby interpreter and runtime libraries.
RubyWebDialogs 0.2.0
--------------------
Erik Veenstra put out the latest version of RubyWebDialogs, a way of
implementing a "graphical user interface" using an API that underneath
uses HTML and an internal web server. Your web browser is then the
frontend for the application.
ShortURL 0.2.0
--------------
Vincent Foley slipped out ShortURL 0.2.0 then 0.3.0. ShortURL is a
library that uses the URL shortening services rubyurl and tinyurl.
See also his initial announcement [TinyUrl class] and follow-up
[ShortURL 0.0.1].
newsstats 1.1.2 (pre-release) is released
-----------------------------------------
Dr Balwinder S Dheeman released a pre-release (!) of newsstats, a tool
for computing weekly statistics for a newsgroup.
librend 0.0.1
-------------
Ilmari Heikkinen introduced "an OpenGL scenegraph engine written
mostly in Ruby with some critical sections inlined in C."
"Librend is a simple scenegraph engine on top of OpenGL, SDL, Imlib2,
GLEW and Cairo that aims to make it quick and easy to write apps that
mix 2D, 3D and vector graphics."
There was a lot of interest in the project.
parseargs-0.0.0
---------------
Ara.T.Howard released the initial version of parseargs, "a library
that faciltates the parsing of arguments and keywords from method
paramters, setting of default values, validation, contraints via class
based or duck based typing, and coercion/convincing to type/ducktype
when possible."
Observing the version number, Hal Fulton quipped "Hmm, I think I used
a prior version of it... "
Joel VanderWerf:
| Was that 0.0.0.0, or 0.0.0.0.0?
|
| Ruby folks are so conservative in version numbering that it
| wouldn't be surprising to see negative versions...
| "Your library looks nice, but I'm not going to use use it until
| it goes positive."
RubyLexer 0.6.2
---------------
Caleb Clausen announced version 0.6.2 of RubyLexer, "a hyper-correct
stand-alone lexer of Ruby in Ruby."
Bugs were fixed and error handling improved. Input can now come from a
String. Performance enhancements were also added.
tree-0.1
--------
dave released a dRb-based application for KDE that allows you to share
YAML data over a secure network. He plans to use the experience of
creating this application to write a QtRuby tutorial.
Ruby-VTK-0.2.0
--------------
Seiya Nishizawa issued Ruby-VTK-0.2.0, a wrapper for the VTK
Visualization Toolkit, "an open source, freely available software
system for 3D computer graphics, image processing, and visualization."
See also Quote of the Week.
Nitro + Og 0.18.1
-----------------
George Moschovitis released new versions of Nitro and Og. Nitro is a
web application framework, while Og is an object-relational mapper.
Support for WEBrick was improved. Thread safe mode was "added again"
in Og. Error reporting was improved and template overloading added.
Plus more...
Ruby/GLEW 0.0.1
---------------
Ilmari Heikkinen announced the first public release of Ruby/GLEW with
a "yah!"
"Ruby/GLEW provides bindings for the OpenGL Extension Wrangler
Library", "making it possible to use OpenGL extensions like shaders
and rectangular textures from Ruby."
Imlib2-Ruby 0.5.1
-----------------
Paul Duncan fixed a memory leak and improved error reporting in
Imlib2-Ruby.
"Imlib2 is a fast image rendering library used by the Enlightenment
window manager and the Feh image viewer".
Rubilicious 0.1.5
-----------------
Paul also released the latest bindings for the social bookmarking site
del.icio.us, Rubilicious.
Numerous bugs were fixed, plus support was added for tag bundles and
custom HTTP User-Agent strings.
Elsewhere he wrote "You have no idea how confusing it was on my poor
fingers and brain to release one program with a version of 0.5.1, then
immediately release a different program with a version of 0.1.5."