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 HackFest Weekend #1 is complete!
- RubyGems and the FreeBSD ports tree
- Stats comp.lang.ruby (last 7 days)
- Google Summer of Code update
- Possible training classes for Ruby programming and for Ruby on Rails
- Gambit Codefest
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.
ports tree. He requests testers.
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.
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.
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.
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.”
User Group News
- Omaha Ruby User's Group
- June 5 Toronto Ruby User Group meeting
- Austin.rb - aka ARCTAN
- Reminder: Hamburg.rb meeting tonight (June 1st, 2005)
Blaine Buxton announced the second meeting of the Omaha Ruby User’s Group, held on June 6 2005 at the Eagle Run Shopping Center.
Mike Stok foretold that the Toronto Ruby User Group would have their monthly meeting on Sunday June 5th at Sushi Rock.
Jim Freeze greeted “fellow Austinites and Texans”, announcing ARCTAN’s weekly Ruby lunch at Chez Zee. It is “this Thursday at 11:20”.
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
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).
Interesting discovery...
Austin Ziegler ran Shugo Maeda’s new profiler overPDF::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, theNoMethodError
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.)
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 = "g...@python.net",
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.”
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 writefoo.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_reader(:foo)
loop() { puts "I'm an infinite loop!" }
raise(AnException)
throw(:something)
exit()
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})"
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#.
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.”
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.”
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).”
New Releases
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.
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.
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.
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…
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.
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.
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.”
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.”
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.
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”.
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.
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.
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.”
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.
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.