R
Ruby Quiz
The three rules of Ruby Quiz:
1. Please do not post any solutions or spoiler discussion for this quiz until
48 hours have passed from the time on this message.
2. Support Ruby Quiz by submitting ideas as often as you can:
http://www.rubyquiz.com/
3. Enjoy!
Suggestion: A [QUIZ] in the subject of emails about the problem helps everyone
on Ruby Talk follow the discussion.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Twice this week, I've gone looking for the Ruby equivalent to a simple Perl
module and had trouble finding what I was after. Both times I've peeked inside
the source and been surprised at how trivial the operations are. "I could port
that in no time," I thought. This quiz is my thinly disguised attempt to pass
my homework on to others.
Seriously, this quiz is *not* intended to be a lot of work. Don't underestimate
the power of a simple library. (See the "Rethinking Memoization" thread where
we are trying to improve a very helpful library that is literally 10 lines of
code, in one of the forms presented.)
Given all that, this is a build-it-yourself Ruby Quiz. Most of us are familiar
with another language. Go into their libraries and find something you like,
that is also simple, and port the library to Ruby. (You might want to search
the RAA and RubyForge first, just to make sure someone hasn't done similar work
already.) If a library is over 200 lines, forget it. This one is for the
little guys!
If you'll allow a brief aside here, it can be interesting to consider what the
word "port" means. Obviously, the goal of this is to build a library that does
the same things for Ruby. Don't think that means you should copy every method,
verbatim though. If you don't think a method is needed, leave it out. See a
better way to do something, use your way. Most important though, remember to
Rubyize the interface. It's fine to port your favorite Java library, but Ruby
programmers don't want to call methodsNamedLikeThis(). Watch for chances to use
blocks and jump on them *when they lead to a better experience*. Just remember
the adage, "If it ain't broke, don't fix it."
A few more details: Please tell us what your library does and show an example
of simple usage in your submission email. Be kind to your quiz summarizer.
Also, please credit the original library and author who worked so hard to give
you something cool to play with!
Now, if you have no idea what to port, here are two suggestions. (Please feel
free to post other suggestions to Ruby Talk. These are *not* spoilers!)
File::ReadBackwards
This is a Perl module (by Uri Guttman) for reading a file in reverse,
line-by-line. This can often be helpful for things like log files, where the
interesting information is usually at the end.
Don't worry about the Perl interface on this one, copy Ruby's File instead.
Heck, all I really want is a foreach() iterator. Anything else is extra.
This module is so well commented, you should be able to understand how it works,
even if you aren't familiar with Perl. Here's a link straight to the source:
http://search.cpan.org/src/URI/File-ReadBackwards-1.04/ReadBackwards.pm
WWW::RobotRules
This is another Perl module (by Gisle Aas) and it is actually over the 200 line
limit. Trust me though, it doesn't need to be.
The idea here is that many web sites provide a /robots.txt file, telling spider
programs which pages they should not visit. This module gives you a way to
parse these rules and make queries about what you are allowed to visit. You can
learn all about the interface and even the file format of /robots.txt at:
http://search.cpan.org/~gaas/libwww-perl-5.805/lib/WWW/RobotRules.pm
1. Please do not post any solutions or spoiler discussion for this quiz until
48 hours have passed from the time on this message.
2. Support Ruby Quiz by submitting ideas as often as you can:
http://www.rubyquiz.com/
3. Enjoy!
Suggestion: A [QUIZ] in the subject of emails about the problem helps everyone
on Ruby Talk follow the discussion.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Twice this week, I've gone looking for the Ruby equivalent to a simple Perl
module and had trouble finding what I was after. Both times I've peeked inside
the source and been surprised at how trivial the operations are. "I could port
that in no time," I thought. This quiz is my thinly disguised attempt to pass
my homework on to others.
Seriously, this quiz is *not* intended to be a lot of work. Don't underestimate
the power of a simple library. (See the "Rethinking Memoization" thread where
we are trying to improve a very helpful library that is literally 10 lines of
code, in one of the forms presented.)
Given all that, this is a build-it-yourself Ruby Quiz. Most of us are familiar
with another language. Go into their libraries and find something you like,
that is also simple, and port the library to Ruby. (You might want to search
the RAA and RubyForge first, just to make sure someone hasn't done similar work
already.) If a library is over 200 lines, forget it. This one is for the
little guys!
If you'll allow a brief aside here, it can be interesting to consider what the
word "port" means. Obviously, the goal of this is to build a library that does
the same things for Ruby. Don't think that means you should copy every method,
verbatim though. If you don't think a method is needed, leave it out. See a
better way to do something, use your way. Most important though, remember to
Rubyize the interface. It's fine to port your favorite Java library, but Ruby
programmers don't want to call methodsNamedLikeThis(). Watch for chances to use
blocks and jump on them *when they lead to a better experience*. Just remember
the adage, "If it ain't broke, don't fix it."
A few more details: Please tell us what your library does and show an example
of simple usage in your submission email. Be kind to your quiz summarizer.
Also, please credit the original library and author who worked so hard to give
you something cool to play with!
Now, if you have no idea what to port, here are two suggestions. (Please feel
free to post other suggestions to Ruby Talk. These are *not* spoilers!)
File::ReadBackwards
This is a Perl module (by Uri Guttman) for reading a file in reverse,
line-by-line. This can often be helpful for things like log files, where the
interesting information is usually at the end.
Don't worry about the Perl interface on this one, copy Ruby's File instead.
Heck, all I really want is a foreach() iterator. Anything else is extra.
This module is so well commented, you should be able to understand how it works,
even if you aren't familiar with Perl. Here's a link straight to the source:
http://search.cpan.org/src/URI/File-ReadBackwards-1.04/ReadBackwards.pm
WWW::RobotRules
This is another Perl module (by Gisle Aas) and it is actually over the 200 line
limit. Trust me though, it doesn't need to be.
The idea here is that many web sites provide a /robots.txt file, telling spider
programs which pages they should not visit. This module gives you a way to
parse these rules and make queries about what you are allowed to visit. You can
learn all about the interface and even the file format of /robots.txt at:
http://search.cpan.org/~gaas/libwww-perl-5.805/lib/WWW/RobotRules.pm