[#227503] open-uril ECONNREFUSED problem — Cyrus Ghalambor <cyrusg@...>

I'm working on a simple scraping tool and the open() method has suddenly

12 messages 2006/12/01

[#227527] Gateway is malfunctioning — "Trans" <transfire@...>

Someone recently mentioned missing posts. I just did a comparsion of

31 messages 2006/12/01

[#227574] Turtle Graphics (#104) — Ruby Quiz <james@...>

The three rules of Ruby Quiz:

37 messages 2006/12/01
[#227598] Re: [QUIZ] Turtle Graphics (#104) — "Harold Hausman" <hhausman@...> 2006/12/01

On 12/1/06, Ruby Quiz <james@grayproductions.net> wrote:

[#227606] Re: [QUIZ] Turtle Graphics (#104) — James Edward Gray II <james@...> 2006/12/01

On Dec 1, 2006, at 9:42 AM, Harold Hausman wrote:

[#227620] Re: [QUIZ] Turtle Graphics (#104) — "Harold Hausman" <hhausman@...> 2006/12/01

On 12/2/06, James Edward Gray II <james@grayproductions.net> wrote:

[#227661] Re: [QUIZ] Turtle Graphics (#104) — Daniel Martin <martin@...> 2006/12/01

"Harold Hausman" <hhausman@gmail.com> writes:

[#227670] Re: [QUIZ] Turtle Graphics (#104) — James Edward Gray II <james@...> 2006/12/01

On Dec 1, 2006, at 3:44 PM, Daniel Martin wrote:

[#227682] Re: tk.rb warning in Turtle Graphics (#104) — Edwin Fine <efine145-nospam01@...> 2006/12/02

/usr/local/lib/ruby/site_ruby/1.8/tk.rb:1187: warning: instance variable

[#227713] Re: tk.rb warning in Turtle Graphics (#104) — Morton Goldberg <m_goldberg@...> 2006/12/02

On Dec 1, 2006, at 7:22 PM, Edwin Fine wrote:

[#227630] Simple iteration in a function problem — Blake Miller <blakeage@...>

i'm trying to do this, and I'm stuck

34 messages 2006/12/01

[#227702] calculations on lists of numbers — ara.t.howard@...

38 messages 2006/12/02

[#227739] openssl error - ubuntu — "Chad" <carimura@...>

Help!

27 messages 2006/12/02
[#227741] Re: openssl error - ubuntu — Jose francisco Gonzalez carmona <pgonzalez@...> 2006/12/02

[#227787] Re: openssl error - ubuntu — "Chad" <carimura@...> 2006/12/02

Absolutely... I'm not a linux expert though, but I have a feeling

[#227822] Re: openssl error - ubuntu — "Chad" <carimura@...> 2006/12/02

I finally figured it out.

[#305614] Re: openssl error - ubuntu — James George <james@...> 2008/06/19

Thanks a lot pal, it worked perfectly for me too. I had the same openssl

[#305645] Re: openssl error - ubuntu — Marc Heiler <shevegen@...> 2008/06/19

So much for distribution's package managers making your life easier,

[#227801] comma separating output from array.to_s — "jansenh" <henning.jansen@...>

hi comp.lang.ruby

18 messages 2006/12/02

[#227819] Factory pattern, abstract base class — "Daniel Berger" <djberg96@...>

Hi all,

16 messages 2006/12/02

[#227839] Why does a test fail when I predicted it's exception class? — "Richard" <RichardDummyMailbox58407@...>

Hi,

10 messages 2006/12/03

[#227857] File.size() returning negative for large files ???? — "Greg Hauptmann" <greg.hauptmann.ruby@...>

Hi,

13 messages 2006/12/03
[#227859] Re: File.size() returning negative for large files ???? — Damjan Rems <d_rems@...> 2006/12/03

Greg Hauptmann wrote:

[#227860] I'm a new member — "Quỳnh Trần" <quynh_khanh2002@...>

Hi evrybody!

16 messages 2006/12/03

[#227873] Simple and stuppid bug (can anyone find it?) — "paul" <pjvleeuwen@...>

Hi all,

13 messages 2006/12/03

[#227979] method overloading like Java? — Daniel Finnie <danfinnie@...>

In Java, you could write the following code:

12 messages 2006/12/04

[#228031] Question about Ruby philosophy — Zouplaz <user@...>

Hello, when I compare Ruby to Java there is something I don't understand .

46 messages 2006/12/04
[#228134] Re: Question about Ruby philosophy — "Max Muermann" <ruby@...> 2006/12/05

On 12/4/06, Zouplaz <user@domain.invalid> wrote:

[#228047] replace delimiter in unicode encdoded file — "ciapecki" <ciapecki@...>

Is there a way in ruby to:

20 messages 2006/12/04

[#228127] How do I catch a missing method on a passed block? — "J2M" <james2mccarthy@...>

I would like to invoke method_missing on baz in this code;

34 messages 2006/12/04
[#228211] Re: How do I catch a missing method on a passed block? — Daniel Schierbeck <daniel.schierbeck@...> 2006/12/05

On Tue, 2006-12-05 at 08:04 +0900, J2M wrote:

[#228213] Re: How do I catch a missing method on a passed block? — Logan Capaldo <logancapaldo@...> 2006/12/05

On Tue, Dec 05, 2006 at 11:54:06PM +0900, Daniel Schierbeck wrote:

[#228266] md5 function in Ruby — Denys Yakhnenko <dyakhnenko@...>

Hello all:

14 messages 2006/12/05

[#228273] Lisp comprehensions => SQL — "Victor \"Zverok\" Shepelev" <vshepelev@...>

Hi all.

24 messages 2006/12/05

[#228352] Newbie: working with a text file and converting to xml — Adam Teale <ateale@...>

hi Guys,

12 messages 2006/12/06

[#228379] Calling super in overwritten methods — Joerg Diekmann <joergd@...>

Hi - not sure if this is possible - but it feels like it could be with

12 messages 2006/12/06

[#228380] join_with — "Martin DeMello" <martindemello@...>

While golfing with the hex_ip thread, I realised that map takes no

33 messages 2006/12/06
[#229469] map taking an argument (was: Re: join_with) — dblack@... 2006/12/13

Hi --

[#228422] invasive parameters as method mode variables — "Trans" <transfire@...>

Working on a method where I would like one part of it's operations to

15 messages 2006/12/06

[#228605] Show your support for Rubinius! — "Sam Smoot" <ssmoot@...>

(I hope you don't mind a bit of cross-posting, but seeing as how the

17 messages 2006/12/07
[#228613] Re: Show your support for Rubinius! — "Tim Pease" <tim.pease@...> 2006/12/07

On 12/7/06, Sam Smoot <ssmoot@gmail.com> wrote:

[#228618] Re: Show your support for Rubinius! — "Brian Mitchell" <binary42@...> 2006/12/07

On 12/7/06, Tim Pease <tim.pease@gmail.com> wrote:

[#228620] Re: Show your support for Rubinius! — "Wilson Bilkovich" <wilsonb@...> 2006/12/07

On 12/7/06, Brian Mitchell <binary42@gmail.com> wrote:

[#228622] Re: Show your support for Rubinius! — benjohn@... 2006/12/07

I'd like to know more about Rubinius, but all the info I've got on it

[#228628] Array changing after concat function — WKC CCC <wai-kee.chung@...>

Can someone shed some light on this problem. In the example, I am

17 messages 2006/12/07

[#228716] Am I missing something about BER-compressed integer? — "Francis Cianfrocca" <garbagecat10@...>

All:

12 messages 2006/12/08

[#228738] Tournament Matchups (#105) — Ruby Quiz <james@...>

The three rules of Ruby Quiz:

23 messages 2006/12/08

[#228875] Ruby Core + Php FrontEnd (open) — Flaab Mrlinux <flaab_mrlinux@...>

Good afternoon everyone.

13 messages 2006/12/09

[#228945] format problem — chen li <chen_li3@...>

Hi all,

23 messages 2006/12/10

[#229119] else inside rescue is useless? — "cap" <capitain@...>

http://www.awprofessional.com/bookstore/product.asp?isbn=0672328844&rl=1

20 messages 2006/12/11

[#229122] Newbie questions — Dav Jones <kakaze@...21.com>

Hello, I'm quite new to this whole Ruby malarky and I'm having some real

15 messages 2006/12/11

[#229244] Re: Ruby for Kids? — "Jeff_M" <JeffMcGrath@...>

18 messages 2006/12/12

[#229350] C => Ruby plus TCP serialization using Marshal.dump/load — "Nathan Baker" <nathanb@...>

Hey,

12 messages 2006/12/12

[#229351] - Bible 1.0.1 - A bible reference parsing and text retrieval tool — "Justin Bailey" <jgbailey@...>

All,

13 messages 2006/12/12

[#229397] Restricted capture in Regexp — benjohn@...

Is there a regexp feature that lets me require something to be present

16 messages 2006/12/13

[#229398] How to improve my Ruby skills ? — Zouplaz <user@...>

Hello there... Like many others I've discovered Ruby when I started

11 messages 2006/12/13

[#229467] Net::Ldap question — Eduardo Y瘻ez Parareda <eduardo.yanezNOSPAM@...>

Hello, I'm trying this plugin in a rails app and think I need some help.

13 messages 2006/12/13
[#229486] Re: Net::Ldap question — Eduardo Y瘻ez Parareda <eduardo.yanezNOSPAM@...> 2006/12/13

Hehe, sorry again. I've reading documentation of this library and already know

[#229514] Re: Net::Ldap question — "Francis Cianfrocca" <garbagecat10@...> 2006/12/13

On 12/13/06, Eduardo Y瘻ez Parareda <eduardo.yanezNOSPAM@nospamgmail.com> wrote:

[#229511] Random idea - private, blocks, constants — "Daniel Berger" <djberg96@...>

Hi all,

14 messages 2006/12/13

[#229598] CTI Corporativo auto responses — "Daniel Berger" <djberg96@...>

All,

14 messages 2006/12/14

[#229600] Swap contents in two files — Christopher Latif <christopherl@...>

I have two files, I want to swap the contents of the files in my

17 messages 2006/12/14

[#229763] Chess960 (#106) — Ruby Quiz <james@...>

The three rules of Ruby Quiz:

33 messages 2006/12/15

[#229883] ZenTest autotest problems — Zouplaz <user@...>

Hello, I have big troubles using the latest autotest version (3.4.2)

11 messages 2006/12/16
[#229985] Re: ZenTest autotest problems — Eric Hodel <drbrain@...7.net> 2006/12/17

On Dec 16, 2006, at 01:40, Zouplaz wrote:

[#229990] Re: ZenTest autotest problems — Zouplaz <user@...> 2006/12/17

le 17/12/2006 07:43, Eric Hodel nous a dit:

[#230118] Re: ZenTest autotest problems — Eric Hodel <drbrain@...7.net> 2006/12/18

On Dec 17, 2006, at 24:55, Zouplaz wrote:

[#229906] Just some Ruby language ideas, comments wanted. — Daniel Finnie <danfinnie@...>

My first Ruby language idea is simple. Instead of having every method

13 messages 2006/12/16

[#229917] does Ruby generate WINDOWS and dialog boxes? — "Ken Laninga" <personal@...>

I just heard about Ruby and it looks fascinating. I see lots of code being

60 messages 2006/12/16
[#229922] Re: does Ruby generate WINDOWS and dialog boxes? — David Vallner <david@...> 2006/12/16

Ken Laninga wrote:

[#229939] Re: does Ruby generate WINDOWS and dialog boxes? — Joel VanderWerf <vjoel@...> 2006/12/16

David Vallner wrote:

[#229961] Re: does Ruby generate WINDOWS and dialog boxes? — Suraj Kurapati <snk@...> 2006/12/17

Joel VanderWerf wrote:

[#229967] Re: does Ruby generate WINDOWS and dialog boxes? — "Richard" <RichardDummyMailbox58407@...> 2006/12/17

[#229968] Re: does Ruby generate WINDOWS and dialog boxes? — David Vallner <david@...> 2006/12/17

Richard wrote:

[#229973] Re: does Ruby generate WINDOWS and dialog boxes? — "Richard" <RichardDummyMailbox58407@...> 2006/12/17

[#230007] Re: does Ruby generate WINDOWS and dialog boxes? — David Vallner <david@...> 2006/12/17

Richard wrote:

[#230065] Re: does Ruby generate WINDOWS and dialog boxes? — "Richard" <RichardDummyMailbox58407@...> 2006/12/17

> Odds are it Just Won't unless you only

[#230073] Re: does Ruby generate WINDOWS and dialog boxes? — David Vallner <david@...> 2006/12/17

Richard wrote:

[#230127] Re: does Ruby generate WINDOWS and dialog boxes? — "Richard" <RichardDummyMailbox58407@...> 2006/12/18

Disclaimer: All my assertions about Ruby, Rails, WEBrick and MySQL are

[#230008] Grabbing data off a webpage — Bil Kleb <Bil.Kleb@...>

OK, so I haven't done this in years.

12 messages 2006/12/17

[#230011] Ruby IDE — <adaworks@...>

I am new to Ruby, but I have used a lot of other

24 messages 2006/12/17

[#230089] Question regarding threads and I/O — "Michael W. Ryder" <_mwryder@...>

I am a veteran programmer but still am trying to learn Ruby. In the

14 messages 2006/12/17
[#230094] Re: Question regarding threads and I/O — Logan Capaldo <logancapaldo@...> 2006/12/18

On Mon, Dec 18, 2006 at 08:55:10AM +0900, Michael W. Ryder wrote:

[#230147] Problem installing Ruby/Tk — Christopher Latif <christopherl@...>

Installed Linux

14 messages 2006/12/18

[#230256] where have all the experienced users gone? — "Trans" <transfire@...>

seems like there's been a steady drop off in experienced ruby users on

63 messages 2006/12/19
[#230284] Re: [OT] where have all the experienced users gone? — Eric Hodel <drbrain@...7.net> 2006/12/19

On Dec 18, 2006, at 18:50, Trans wrote:

[#230327] Re: [OT] where have all the experienced users gone? — Jeremy Wells <jwells@...> 2006/12/19

Eric Hodel wrote:

[#230332] Re: [OT] where have all the experienced users gone? — "Robert Dober" <robert.dober@...> 2006/12/19

On 12/19/06, Jeremy Wells <jwells@servalsystems.co.uk> wrote:

[#230350] Re: [OT] where have all the experienced users gone? — "Jeremy McAnally" <jeremymcanally@...> 2006/12/19

I think it's also important that we all realize that we use mailing

[#230423] Re: [OT] where have all the experienced users gone? — James Edward Gray II <james@...> 2006/12/19

On Dec 19, 2006, at 7:52 AM, Jeremy McAnally wrote:

[#230322] Re: where have all the experienced users gone? — "Robert Dober" <robert.dober@...> 2006/12/19

On 12/19/06, Trans <transfire@gmail.com> wrote:

[#230507] Re: where have all the experienced users gone? — "Simon Strandgaard" <neoneye@...> 2006/12/20

On 12/19/06, Robert Dober <robert.dober@gmail.com> wrote:

[#230514] Re: where have all the experienced users gone? — "Robert Dober" <robert.dober@...> 2006/12/20

On 12/20/06, Simon Strandgaard <neoneye@gmail.com> wrote:

[#230295] string of strings... — Josselin <josselin@...>

I got an array of id's :

13 messages 2006/12/19

[#230328] compare two objects without take its ID in consideration — Lobosque Lucas <floyd_u2@...>

Is there a way to compare two objects without take its ID in

17 messages 2006/12/19

[#230450] ruby gotchas — Mark Guzman <segfault@...>

I've written up some ruby gotchas that have come up while using ruby.

16 messages 2006/12/19

[#230548] tricky sort for happy visitors of Paris — Josselin <josselin@...>

all happy visitors of Paris know about the 'arrondissement', an

20 messages 2006/12/20

[#230588] openssl on Red Hat not installed — Hueen Hueen <hueen@...>

So I'm one of the unlucky ones that don't have openssl properly

17 messages 2006/12/20

[#230602] Regexp Question: Checking for [joe][/joe] pairs — Joe Peck <joe@...>

Hey, I've got some text in @x and want there to be at least 1 and at

21 messages 2006/12/20

[#230648] Who's maintaining log4r? — jeffz_2002@...

Does anyone know who's maintaining the log4r project? The website at

29 messages 2006/12/20

[#230650] Searching Stings with Arrays? — Phil Cooperking <phil@...>

Hi, I've been having a little problem with this. most of my ruby is from

14 messages 2006/12/20

[#230755] Remove Ruby 1.8.5? — Christopher Latif <christopherl@...>

How do I remove Ruby 1.8.5 from linux? I have built it from source.

20 messages 2006/12/21
[#230874] Re: Remove Ruby 1.8.5? — David Vallner <david@...> 2006/12/21

M. Edward (Ed) Borasky wrote:

[#230879] Re: Remove Ruby 1.8.5? — Vincent Fourmond <vincent.fourmond@9online.fr> 2006/12/21

David Vallner wrote:

[#230792] Method named ***(other) — Julien Gaugaz <gaugaz@...3s.de>

Hi!

15 messages 2006/12/21
[#230799] Re: Method named ***(other) — "Vidar Hokstad" <vidar.hokstad@...> 2006/12/21

[#230829] Ruby's Trac Alternative — Bil Kleb <Bil.Kleb@...>

So I'm trying to use Trac for our FUN3D development,

27 messages 2006/12/21

[#230853] External Ruby Script in HTML — Naked Sushi <runfaster@...>

This probably has a simple answer, but I don't know it.

17 messages 2006/12/21

[#230869] Ruby replacement for ab? — Mat Schaffer <schapht@...>

So I've been hunting for a way to stress test a web application and

17 messages 2006/12/21

[#230983] Merry (slightly early) Christmas! Mr. Neighborly's Humble Little Ruby Book is free! — "Jeremy McAnally" <jeremymcanally@...>

Hello all,

15 messages 2006/12/22

[#231056] Question: Downloading files with open(-uri)? — Mariano Kamp <mariano.kamp@...>

Hi,

16 messages 2006/12/23

[#231072] Help with a ruby idiom — Tim Waters <timgwaters@...>

From the O'Reilly Cookbook there is code that keeps call functions in a

16 messages 2006/12/23

[#231181] Hpricot ri and rdoc documentation — "bbiker" <renard@...>

I have gem installed Hpricot-0.4 (mswin32) but no ri documentation or

15 messages 2006/12/24

[#231198] A problem about replacing a string in a template. — Kuang Dong <kuangdong@...>

File 1: test.tpl

13 messages 2006/12/25

[#231277] Newby - how to round up floating point number? — Dermot Moynihan <der_moyn@...>

Hi guys

14 messages 2006/12/26

[#231303] Hash with two identical keys? — "Trans" <transfire@...>

>From Facets' multiton.rb (which is primarily Floran Franks' work), I'm

15 messages 2006/12/26

[#231341] Peculiar Behavior for a Newby to Undertstand — Charles A Gray <smgspices@...>

I created a class for prime numbers as so:

14 messages 2006/12/27

[#231377] How to do TDD in Ruby? — mekondelta <Chris.Melikian@...>

15 messages 2006/12/27

[#231385] newbie with a weird technical problem (@ least I think it's weird) — "will" <will.graduate@...>

Yep, as the post title implies, I'm a newbie. Being a pragmatic newbie

10 messages 2006/12/27

[#231436] Handling of arbitrary length arrays in arguments to printf builtin — Nick Pavey <nick@...>

Hi Folks,

13 messages 2006/12/27
[#231437] Re: Handling of arbitrary length arrays in arguments to printf builtin — Timothy Hunter <TimHunter@...> 2006/12/27

Nick Pavey wrote:

[#231462] Higher-Order Procedures Tutorial (long) — "Nate Murray" <jashmenn@...>

Hey Guys,

16 messages 2006/12/28

[#231494] Strip is not stripping trailing whitespace — Taylor Strait <taylorstrait@...>

I have files with city names which have one or two trailing whitespaces:

14 messages 2006/12/28

[#231595] What we have here is a retard pretending to be a computer scientist — atbusbook@...

http://www.iam.unibe.ch/~scg/Archive/Papers/Scha04bOOEncapsulation.pdf

14 messages 2006/12/29
[#231602] Paper on strong Object Oriented Encapsulation (Was: some subject with needless insults) — Eric Hodel <drbrain@...7.net> 2006/12/29

On Dec 28, 2006, at 16:05, atbusbook@aol.com wrote:

[#231610] Re: Paper on strong Object Oriented Encapsulation (Was: some subject with needless insults) — "Jeff" <cohen.jeff@...> 2006/12/29

Eric Hodel wrote:

[#231686] how to properly format data when using TCPSocket.send() — Nathan Taylor <onebitcipher@...>

It would be greatly appreciated if someone would clue me in to what I am

12 messages 2006/12/29

[#231726] Methods validating their arguments: good or bad? — Michael Judge <mjudge@...>

15 messages 2006/12/29

[#231763] how to lex javascript for an assert_js system? — Phlip <phlip2005@...>

Ruboids:

14 messages 2006/12/30

[#231785] Proposal to create a new mailing list — Daniel Schierbeck <daniel.schierbeck@...>

Hello fellow Rubyphilics!

31 messages 2006/12/30

[#231801] Little Things — "Trans" <transfire@...>

I was a bit surprised about Matz mention of the little things in his

164 messages 2006/12/30
[#231848] Re: Little Things — Daniel Schierbeck <daniel.schierbeck@...> 2006/12/30

I mostly agree, with some of the additions of course being more

[#231882] Re: Little Things — dblack@... 2006/12/31

Hi --

[#231888] Re: Little Things — "Trans" <transfire@...> 2006/12/31

[#231893] Re: Little Things — Devin Mullins <twifkak@...> 2006/12/31

Trans wrote:

[#231898] Re: Little Things — "Rob Sanheim" <rsanheim@...> 2006/12/31

On 12/31/06, Devin Mullins <twifkak@comcast.net> wrote:

[#232438] Re: Little Things — Paulo Kh <paulo.koch@...> 2007/01/03

On 2006/12/31, at 07:38, Rob Sanheim wrote:

[#232439] Re: Little Things — ara.t.howard@... 2007/01/03

On Thu, 4 Jan 2007, [ISO-8859-1] Paulo Kh wrote:

[#232449] Re: Little Things — "Trans" <transfire@...> 2007/01/03

[#232451] Re: Little Things — ara.t.howard@... 2007/01/03

On Thu, 4 Jan 2007, Trans wrote:

[#232496] Re: Little Things — "Trans" <transfire@...> 2007/01/04

[#232501] Re: Little Things — ara.t.howard@... 2007/01/04

On Thu, 4 Jan 2007, Trans wrote:

[#232502] Re: Little Things — dblack@... 2007/01/04

Hi --

[#232503] Re: Little Things — ara.t.howard@... 2007/01/04

On Thu, 4 Jan 2007 dblack@wobblini.net wrote:

[#232544] Re: Little Things — Devin Mullins <twifkak@...> 2007/01/04

ara.t.howard@noaa.gov wrote:

[#232547] Re: Little Things — "Trans" <transfire@...> 2007/01/04

[#232571] Re: Little Things — Devin Mullins <twifkak@...> 2007/01/04

Trans wrote:

[#232587] Re: Little Things — "Trans" <transfire@...> 2007/01/04

[#232602] Re: Little Things — ara.t.howard@... 2007/01/04

On Thu, 4 Jan 2007, Trans wrote:

[#232615] Re: Little Things — "Trans" <transfire@...> 2007/01/04

[#232616] Re: Little Things — dblack@... 2007/01/04

Hi --

[#232619] Re: Little Things — ara.t.howard@... 2007/01/04

On Fri, 5 Jan 2007 dblack@wobblini.net wrote:

[#232626] Re: Little Things — dblack@... 2007/01/04

Hi --

[#232631] Re: Little Things — ara.t.howard@... 2007/01/04

On Fri, 5 Jan 2007 dblack@wobblini.net wrote:

[#232638] Re: Little Things — "Chris Carter" <cdcarter@...> 2007/01/04

On 1/4/07, ara.t.howard@noaa.gov <ara.t.howard@noaa.gov> wrote:

[#232650] Pervasive Methods [was: Little Things] — "Trans" <transfire@...> 2007/01/04

[#232652] Re: Pervasive Methods [was: Little Things] — ara.t.howard@... 2007/01/04

On Fri, 5 Jan 2007, Trans wrote:

[#232653] Re: Pervasive Methods [was: Little Things] — "Tim Pease" <tim.pease@...> 2007/01/04

On 1/4/07, ara.t.howard@noaa.gov <ara.t.howard@noaa.gov> wrote:

[#232656] Re: Pervasive Methods [was: Little Things] — ara.t.howard@... 2007/01/04

On Fri, 5 Jan 2007, Tim Pease wrote:

[#232657] Re: Pervasive Methods [was: Little Things] — "Trans" <transfire@...> 2007/01/04

[#232659] Re: Pervasive Methods [was: Little Things] — ara.t.howard@... 2007/01/04

On Fri, 5 Jan 2007, Trans wrote:

[#231932] Re: Little Things — Yukihiro Matsumoto <matz@...> 2006/12/31

Hi,

[#231821] Newbie: It works, how can I make it better? — Jay Bornhoft <jbornhoft@...>

I wrote this little prog giving the user two choices.

13 messages 2006/12/30

[#231938] Re: Status of Cardinal (was Re: Proposal to create a new mailing list) — "Francis Cianfrocca" <garbagecat10@...>

I'm not jumping back into this in a big way, since it's obvious

11 messages 2006/12/31

[#231941] Mini-RCR: Extra Argument for Array#join — James Edward Gray II <james@...>

I've been looking at the to_sentence() method in Rails. It's

17 messages 2006/12/31

[#231946] Open source credit card processing in ruby — snacktime <snacktime@...>

Just recently I have the option to open source a credit card

12 messages 2006/12/31
[#231956] Re: Open source credit card processing in ruby — "Francis Cianfrocca" <garbagecat10@...> 2006/12/31

On 12/31/06, M. Edward (Ed) Borasky <znmeb@cesmail.net> wrote:

[#231951] Re: Status of Cardinal (was Re: Proposal to create a new mailing list) — Charles Oliver Nutter <charles.nutter@...>

Robert Dober wrote:

9 messages 2006/12/31

Higher-Order Procedures Tutorial (long)

From: "Nate Murray" <jashmenn@...>
Date: 2006-12-28 01:40:07 UTC
List: ruby-talk #231462
Hey Guys,
I've been going through the video lectures "Structure and
Interpretation of Computer Programs by Hal Abelson and Gerald Jay
Sussman. " (
http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/ ).
The section on Higher-Order Procedures was a huge eye-opener for me and
I wanted to condense down what I learned in Lisp to guys who program in
Ruby. Now I know that for most of the experienced on this list this
will be old-news, but I hope to provide a valuable tutorial of Abelson
and Sussman's material to some guys who are just learning about this
stuff in Ruby.

Posted below is the straight text and code examples of what I have so
far. ( I've also posted the pdf of slides here:
http://tech.natemurray.com/2006/12/higher-order-procedures-in-ruby.html
if you're interested. ) Now, I am not just trying to drive up traffic
to my site. My purpose in posting this here is two-fold:

1) To submit it for peer review. I'd like to know if you guys have any
suggestions or improvements on the code examples and/or copy. For
example a part that seems particularly ugly to me is the

  cube = self.method(:cube).to_proc
  cube.call(3)

part. Any suggestions on how to make this a little more transparent or
simplified?

2) To provide a valuable introductory tutorial to the power of
higher-order procedures and how to implement them in Ruby.

The text below can be copied and pasted into a file. It should run with
no problems.

DISCLAIMER: As mentioned above and below the copy is taken mainly from
"Structure and Interpretation of Computer Programs by Hal Abelson and
Gerald Jay Sussman. " (
http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/ ). A
few paraphrases and examples were added and the code was converted to
Ruby.

enjoy,
Nate Murray
http://www.natemurray.com

----------------------------
#!/usr/bin/ruby
# == Higher-Order Procedures (in Ruby)
# based on Structure and Interpretation of Computer Programs (1985 MIT
Press)
# by Hal Abelson and Gerald Jay Sussman.
# * http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/
# Nathan Murray <nate@natemurray.com> v1.0 12/13/06
# http://www.natemurray.com
#
# == Legal
# The copy in this presentation is taken directly from Structure and
# Interpretation of Computer Programs by Hal Abelson and Gerald Jay
Sussman
# (MIT Press, 1984; ISBN 0-262-01077-1). Specifically section 1.3
Formulating
# Abstractions with Higher-Order Procedures. There are a few
paraphrases and
# additional examples added.
#
# The main difference is that the code has been converted from Lisp to
Ruby.
#
# The full text of this book and accompanying video lectures can be
found at:
# http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/
# http://mitpress.mit.edu/sicp/
#
# The video lectures are copyright by Hal Abelson and Gerald Jay
Sussman.  The
# video lectures, and in turn this document, are licensed under a
Creative
# Commons License.
# http://creativecommons.org/licenses/by-sa/2.0/

# == Slide
# Mathematical procedures are, in effect, abstractions that describe
compound operations on
# numbers independent of the particular numbers. For example, when we

def cube(a)
  a * a * a
end

# define cube we are not talking about the cube of a particular number,
but rather about a
# method for obtaining the cube of any number.

# == Slide
# Of course we could get along
# without ever defining this procedure, by always writing expressions
such as
# (3 * 3 * 3)
# (x * x * x)
# (y * y * y)

# and never mentioning cube explicitly. This would place us at a
serious
# disadvantage, forcing us to work always at the level of the
particular
# operations that happen to be primitives in the language
(multiplication, in
# this case) rather than in terms of higher-level operations. Our
programs
# would be able to compute cubes, but our language would lack the
ability to
# express the concept of cubing. One of the things we should demand
from a
# powerful programming language is the ability to build abstractions by
# assigning names to common patterns and then to work in terms of the
# abstractions directly. Procedures provide this ability.

# == Slide
# Yet even in numerical processing we will be severely limited in our
ability
# to create abstractions if we are restricted to procedures whose
parameters
# must be numbers.

# Often the same programming pattern will be used with a number of
different
# procedures. To express such patterns as concepts, we will need to
construct
# procedures that can accept procedures as arguments or return
procedures as
# values.

# Procedures that manipulate procedures are called higher-order
procedures.
# This presentation shows how higher-order procedures can serve as
powerful
# abstraction mechanisms, vastly increasing the expressive power of our
# language.

# == Slide
# Consider the following three procedures.

# == Slide
# The first computes the sum of the integers from a through b:

def sum_integers(a, b)
  return 0 if a > b
  a + sum_integers((a + 1), b)
end

sum_integers(1, 10) #=> 55

# == Slide
# The second computes the sum of the cubes of the integers in the given
range:
def sum_cubes(a, b)
   return 0 if a > b
   cube(a) + sum_cubes((a + 1), b)
end

sum_cubes(1, 3) #=> 36

# The third computes the sum of a sequence of terms in the series which
# converges to pi/8 (very slowly)
def pi_sum(a, b)
  return 0 if a > b
  (1.0 / ((a + 2) * a)) + (pi_sum((a + 4), b))
end

pi_sum(1, 1000) * 8 #=> 3.13959265558978


# == Slide
# These three procedures clearly share a common underlying pattern.
#
# They are for the most part identical, differing only in the
# * name of the procedure
# * the function of a used to compute the term to be added, and
# * the function that provides the next value of a.
#
# We could generate each of the procedures by filling in slots in the
same template:

# == Slide
# def <name>(a, b)
#   return 0 if a > b
#   <term>(a) + <name>(<next>(a), b)
# end


# == Slide
# The presence of such a common pattern is strong evidence that there
is a
# useful abstraction waiting to be brought to the surface.
#
# Mathematicians long ago identified the abstraction of summation of a
series
# and invented ``sigma notation,'' for example to express this concept.

#
# The power of sigma notation is that it allows mathematicians to deal
with the
# concept of summation itself rather than only with particular sums
#
# For example, you can formulate general results about sums that are
# independent of the particular series being summed.
#
# Similarly, as program designers, we would like our language to be
powerful
# enough so that we can write a procedure that expresses the concept of
# summation itself rather than only procedures that compute particular
sums.
#

# == Slide
# We can do so readily in our procedural language by taking the common
template
# shown above and transforming the ``slots'' into formal parameters:

def sum(term, a, the_next, b)
  return 0 if a > b
  term.call(a) + sum(term, the_next.call(a), the_next, b)
end

# == Slide
# Now to define sum cubes all we have to do is:
def inc(n)
  n + 1
end

def sum_cubes(a, b)
  cube = self.method(:cube).to_proc
  inc  = self.method(:inc ).to_proc
  sum(cube, a, inc, b)
end

sum_cubes(1, 3) #=> 36

# == Slide
# With the aid of an identity procedure to compute the term, we can
define
# sum-integers in terms of sum:
def identity(x)
  x
end

def sum_integers(a, b)
  id  = self.method(:identity).to_proc
  inc = self.method(:inc     ).to_proc
  sum(id, a, inc, b)
end

#Then we can add up the integers from 1 to 10:
sum_integers(1, 10) #=> 55

# == Slide
# We can also define pi-sum in the same way

def pi_term(x)
  (1.0 / (x * (x+2)))
end

def pi_next(x)
  (x + 4)
end

def pi_sum(a, b)
  term = self.method(:pi_term).to_proc
  nex  = self.method(:pi_next).to_proc
  sum(term, a, nex, b)
end

# Using these procedures, we can compute an approximation to pi:
pi_sum(1, 1000) * 8 #=> 3.13959265558978


# In using #sum it seems terribly awkward to have to define trivial
procedures
# such as pi_term and pi_next just so we can use them as arguments to
our
# higher-order procedure.

# Rather than define pi-next and pi-term, it would be more convenient
to have a way to directly specify
# * ``the procedure that returns its input incremented by 4'' and
# * ``the procedure that returns the reciprocal of its input times its
input plus 2.''
#
# We can do this by introducing the special form lambda, which creates
# procedures. Using lambda we can describe what we want as
#
# lambda{ |x| (1.0 / (x * (x+2))) }
# lambda{ |x| (x + 4) }

# == Slide
# Then our pi_sum procedure can be expressed without defining any
auxiliary procedures as in:
def pi_sum(a, b)
  sum( lambda{ |x| (1.0 / (x * (x+2))) },
       a,
       lambda{ |x| (x + 4) },
       b )
end

# == Slide
# The above examples demonstrate how the ability to pass procedures as
# arguments significantly enhances the expressive power of our
programming
# language.
#
# We can achieve even more expressive power by creating procedures
whose
# returned values are themselves procedures.
#
# Lets say we want to filter out the even numbers in a list.
#
# This procedure takes a list and returns a new list containing the
even numbers.
def even?(i)
  i % 2 == 0
end

# at the end, functions that return functions
def filter_evens(list)
  new_list = []
  list.each do |element|
    new_list << element if even?(element)
  end
  new_list
end

list = [1,2,3,4,5,6,7,8,9,10]
filter_evens(list) #=> [2, 4, 6, 8, 10]

# Well, later on we may want to filter by odd numbers, or by prime
numbers.
# What we need is a way to express the concept of filtration.

# == Slide
#
# (predicate : Logic something that is affirmed or denied concerning an
argument of a proposition.)
#
# Notice that #make_filter returns not just a value, but a procedure.
This
# procedure can then be used on other data.
def make_filter(predicate)
  lambda do |list|
    new_list = []
    list.each do |element|
      new_list << element if predicate.call(element)
    end
    new_list
  end
end

filter_odds = make_filter( lambda{|i| i % 2 != 0} )
filter_odds.call(list) #=> [1, 3, 5, 7, 9]

# == Slide
# The power of this is that our filter is not limited to numeric
evaluations.
#
# Lets say we want to filter by numbers where the ordinal ends in th
such as 10th.
require 'facet/integer/ordinal'
10.ordinal #=> "10th"

filter_ths = make_filter(
     lambda do |i|
       i.ordinal =~ /th$/ ? true : false
     end
   )

filter_ths.call(list) #=> [4, 5, 6, 7, 8, 9, 10]

# You do this all the time with #map

# == Slide
# As programmers, we should be alert to opportunities to identify the
# underlying abstractions in our programs and to build upon them and
generalize
# them to create more powerful abstractions.
#
# This is not to say that one should always write programs in the most
abstract
# way possible; expert programmers know how to choose the level of
abstraction
# appropriate to their task. But it is important to be able to think in
terms
# of these abstractions, so that we can be ready to apply them in new
contexts.
#
# The significance of higher-order procedures is that they enable us to
# represent these abstractions explicitly as elements in our
programming
# language, so that they can be handled just like other computational
elements.


In This Thread

Prev Next