[#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

[SUMMARY] Chess960 (#106)

From: Ruby Quiz <james@...>
Date: 2006-12-21 13:37:02 UTC
List: ruby-talk #230769
There are a surprising number of ways to think about this problem, each leading
to a different solution.  Let's examine several.

First, you can think of this as a constraints problem.  We have the rules of a
board setup which are the constraints and any board meeting those rules is one
of the 960 positions.  Way back when we did the Constraint Processing Ruby Quiz,
I learned that the Amb library is a fun way to handle such problems.  Here's my
solution, using Amb:

	require "amb"
	
	setup = Amb.new
	count = 0
	seen  = Hash.new
	begin
	  squares = Array.new(8) { setup.choose(*%w[r n b q k b n r]) }
	  
	  %w[r n b].each do |piece|
	    setup.assert(squares.select { |s| s == piece }.size == 2)
	  end
	  %w[k q].each do |piece|
	    setup.assert(squares.select { |s| s == piece }.size == 1)
	  end
	  king = squares.index("k")
	  setup.assert(squares.index("r") < king)
	  setup.assert(squares.rindex("r") > king)
	  setup.assert((squares.index("b") + squares.rindex("b")) % 2 == 1)
	  board = squares.join(' ')
	  setup.assert(seen[board].nil?)
	  
	  puts "#{count += 1}: #{board}"
	  
	  seen[board] = true
	  setup.failure
	rescue
	  # do nothing, we're done
	end

What I really love above this approach is that it requires almost no thought. 
All I am doing here is translating the rules to code.  Ruby and Amb do the rest.

The above code works by building an Amb object that is considering piece
placement in eight squares.  After that, I define the rules for placement.

Since I gave it all eight pieces as possible choices for each square, the first
two rules have to establish the allowed counts for each piece.  This prevents
Amb from building a position of eight rooks or similar wrong setups.

For the next two rules I locate the king and verify that we have a rook to the
left of him as well as to the right.  The following rule adds the locations of
the two bishops and verifies that we got an odd number.  This ensures the
bishops are on different colors, since an even plus an odd will be odd but even
plus even or odd plus odd both yield even numbers.  This group of rules covers
the constraints from the quiz description.

The final rule prevents duplicate positions being found.  It's needed because
positions like the following example seem different to the computer, but not to
a chess player:

	N1 B1 B2 R1 K R2 Q N2
	N2 B2 B1 R2 K R1 Q N1

With the rules in place, Amb will have found a viable solution.  I print that
out, then manually trigger a failure(), to cause it to find another.  When it
fails to find one an Exception will be thrown.  I catch that and exit quietly
since we will have seen all 960 positions at that point.

The downside of this approach is that Amb uses Ruby's continuations to under the
hood to backtrack and find new solutions.  Those are a bit on the slow side and
this simple script of mine takes about six and a half minutes to complete, on my
box.  One solution to this is just to generate the positions once and cache them
for future runs but there were other solutions that could think a lot faster.

For a faster solution, let's shift how we are thinking about the problem. 
Another approach is to think of this challenge as a permutations problem.  We
really just need to examine all possible permutations of the eight pieces and
select those that match the quiz rules.  Multiple solutions did this, including
the following code from David Tran:

	def permutation(pieces)
	 return [pieces] if pieces.length <= 1
	 result = []
	 pieces.uniq.each do |p|
	   _pieces = pieces.dup
	   _pieces.delete_at(pieces.index(p))
	   permutation(_pieces).each do |perm|
	     result << (perm << p)
	   end
	 end
	 result
	end
	
	results = permutation("RNBKQBNR".split(//)).select do |position|
	 r1 = position.index('R')
	 r2 = position.rindex('R')
	 b1 = position.index('B')
	 b2 = position.rindex('B')
	 k = position.index('K')
	 r1 < k && k < r2 && ((b1+b2) % 2 != 0)
	end
	
	puts "Total positions = #{results.length}"
	puts results[rand(results.length)].join(' ')

The permutation() method here is a recursive generator of all possible
permutations.  It works by adding each() uniq() piece to all possible smaller
permutations.  Those are found by removing one piece from the set each time and
recursing.

The rest of the code calls that method and then select()s the positions matching
the quiz rules.  Those rules are almost identical to my implementation of them
that we examined earlier.

This code does the same thing as mine but runs in under a second on my box.

Shifting the approach again, several methods have been developed to help players
create positions using these rules as needed, some using dice.  Bodlaender's
dice-rolling method is a pretty easy system to translate into code and Jamie
Macey did just that:

	class Chess960
	 attr_reader :board_id, :board
	
	 def initialize
	   @board = generate_board(bodlaender_line)
	 end
	
	 def generate_board(white)
	   # Black's starting line is mirror of white's
	   black = white.map{|piece| piece.downcase}
	
	   # middle of board is always the same
	   middle = [
	     %w(p p p p p p p p),
	     %w(_ _ _ _ _ _ _ _),
	     %w(_ _ _ _ _ _ _ _),
	     %w(_ _ _ _ _ _ _ _),
	     %w(_ _ _ _ _ _ _ _),
	     %w(P P P P P P P P)
	   ]
	
	   # add back rows
	   [black] + middle + [white]
	 end
	
	 def bodlaender_line
	   free = (0...8).to_a
	   white = []
	
	   dark_bishop = rand(4) * 2
	   light_bishop = rand(4) * 2 + 1
	   white[dark_bishop] = 'B'
	   white[light_bishop] = 'B'
	   free.delete(dark_bishop)
	   free.delete(light_bishop)
	
	   queen = rand(6)
	   white[free[queen]] = 'Q'
	   free.delete_at(queen)
	
	   knight1 = rand(5)
	   white[free[knight1]] = 'N'
	   free.delete_at(knight1)
	   knight2 = rand(4)
	   white[free[knight2]] = 'N'
	   free.delete_at(knight2)
	
	   white[free[0]] = 'R'
	   white[free[1]] = 'K'
	   white[free[2]] = 'R'
	   white
	 end
	end

The first two methods are trivial with initialize() kicking off the process and
generate_board() building a board representation.  The interesting stuff happens
in bodlaender_line().

This algorithm works with a collection of free indices and an Array of the final
piece arrangement.  As pieces are placed in the Array, those indices are pulled
from the free list so they won't be reused.

The first step is to place both bishops.  That's done by choosing a random
number between one and four and placing it on the selected light or dark square.
After that, a random selection places the queen on one of the six remaining
squares.  The same technique is used to place the knights on the remaining five
and then four squares.  That leaves us three empty squares which must be R, K,
and R, in that order, to satisfy the rules.

Making one more leap of thought with regard to this problem, there has been an
effort to enumerate all 960 positions.  This has a lot of value to chess players
since we can record the game using our usual techniques and just add a note
like, "Started from Chess960 position #351."  Even better, once you have a
system for enumerating the positions, you can use that system to build the
entire list or select a position.  Morton Goldberg gave us the code for that:

	class Chess960
	   BISHOP_TABLE = [
	      "BB------", #0
	      "B--B----", #1
	      "B----B--", #2
	      "B------B", #3
	      "-BB-----", #4
	      "--BB----", #5
	      "--B--B--", #6
	      "--B----B", #7
	      "-B--B---", #8
	      "---BB---", #9
	      "----BB--", #10
	      "----B--B", #11
	      "-B----B-", #12
	      "---B--B-", #13
	      "-----BB-", #14
	      "------BB"  #15
	   ]
	
	   N5N_TABLE = [
	      "NN---", #0
	      "N-N--", #1
	      "N--N-", #2
	      "N---N", #3
	      "-NN--", #4
	      "-N-N-", #5
	      "-N--N", #6
	      "--NN-", #7
	      "--N-N", #8
	      "---NN"  #9
	   ]
	
	   # ...

The official numbering scheme, invented by Reinhard Scharnagl, works by using
simple charts to position the pieces.  Above you can see Morton's translation of
the two charts he will use, giving piece placements and their indices.  The
knight charts are narrower because they are placed after the bishops and queen,
taking three squares out of consideration.

Here's the main algorithm from Morton's code (with a minor fix from me):

	   # ...
	   
	   def initialize(number)
	      q, @bishop_index = number.divmod 16
	      @knight_index, @queen_index = q.divmod 6
	      @white_pieces = BISHOP_TABLE[@bishop_index].split('')
	      @white_pieces[nth_dash(@queen_index)] = 'Q'
	      knights = N5N_TABLE[@knight_index]
	      m = knights.index('N')
	      n = knights.index('N', m + 1)
	      m, n = nth_dash(m), nth_dash(n)
	      @white_pieces[m] = 'N'
	      @white_pieces[n] = 'N'
	      @white_pieces[@white_pieces.index('-')] = 'R'
	      @white_pieces[@white_pieces.index('-')] = 'K'
	      @white_pieces[@white_pieces.index('-')] = 'R'
	   end
	   
	   def nth_dash(n)
	      dashes = []
	      @white_pieces.each_with_index { |ch, i| dashes << i if ch == '-' }
	      dashes[n]
	   end
	   
	   # ...

Most of the clever work is done in initialize().  First, a little math is used
to find the lookup index on the bishop's chart, an index for the queen, and an
index on the knight's chart.  The row selected from the bishop's chart becomes
the basis for the final arrangement of pieces and nth_dash() is used to properly
slot the queen in that template.  The knight's are then pulled from their chart
by index and nth_dash() is again used to place them.  The three squares left
then must be a rook, king, and rook in that order.

The rest of Morton's code is just for displaying the results:

	   # ...
	   
	   def inspect
	      @white_pieces.join
	   end
	
	   def to_s
	      white_pieces = @white_pieces.join + "\n"
	      white_pawns = 'P' * 8 + "\n"
	      black_pieces = white_pieces.downcase
	      black_pawns = 'p' * 8 + "\n"
	      empty = ('.' * 8 + "\n") * 4
	      black_pieces + black_pawns + empty + white_pawns + white_pieces
	   end
	end
	
	if __FILE__ == $0
	   begin
	      if ARGV.empty? then n = 1 + rand(960)
	      else
	         n = ARGV.first.to_i
	         raise StandardError unless (1..960).include?(n)
	      end
	      puts "Initial position #{n}"
	      print Chess960.new(n).to_s
	   rescue StandardError
	      puts "Usage:  #{$PROGRAM_NAME} [<integer>]"
	      puts "where <integer> is in 1..960"
	      puts "Omitting <integer> produces a random initial position"
	   end
	end

If you want to read more about the systems for assigning pieces, check out:

	http://en.wikipedia.org/wiki/Chess960_starting_position

and:

	http://en.wikipedia.org/wiki/Chess960_Enumbering_Scheme

There were a lot more creative elements in the solutions I didn't cover.  Jamie
Macey even built a complete Camping application to display the positions. 
Definitely take the time to look over them.  It's worth it.

My thanks to all for another great quiz.  I'm a big chess nut some problems like
this always thrill me.

There will be no Ruby Quiz tomorrow.  I'll be busy having a merry Christmas and
I wish the same for others.  See you in a week!

In This Thread

Prev Next