[#390749] Why are there so many similar/identical methods in core classes — Kassym Dorsel <k.dorsel@...>

Let's look at the Array class and start with method aliases.

14 messages 2011/12/02

[#390755] Inverse Operation of Module#include — Su Zhang <su.comp.lang.ruby@...>

Hi list,

21 messages 2011/12/02
[#390759] Re: Inverse Operation of Module#include — Ryan Davis <ryand-ruby@...> 2011/12/02

[#390764] Re: Inverse Operation of Module#include — Isaac Sanders <isaacbfsanders@...> 2011/12/02

I would suggest an Adapter pattern use here. IF there is something that has

[#390876] black magical hash element vivification — Chad Perrin <code@...>

Ruby (1.9.3p0 to be precise, installed with RVM) is not behaving as I

12 messages 2011/12/05

[#390918] WEB SURVEY about Ruby Community — Intransition <transfire@...>

Did any one else get this survey request?

14 messages 2011/12/07

[#390976] Confusing results from string multiplication — Rob Marshall <robmarshall@...>

Hi,

19 messages 2011/12/08

[#391019] How can I do h["foo"] += "bar" if h["foo"] does not exist? — "Andrew S." <andrewinfosec@...>

Hi there,

13 messages 2011/12/09

[#391027] reading from file without end-of-lines — Janko Muzykant <umrzykus@...>

hi,

20 messages 2011/12/09
[#391028] Re: reading from file without end-of-lines — Gavin Sinclair <gsinclair@...> 2011/12/09

> i'm trying to read a few text values from single file:

[#391031] Re: reading from file without end-of-lines — Robert Klemme <shortcutter@...> 2011/12/09

On Fri, Dec 9, 2011 at 9:58 AM, Gavin Sinclair <gsinclair@gmail.com> wrote:

[#391042] Re: reading from file without end-of-lines — Gavin Sinclair <gsinclair@...> 2011/12/09

On Fri, Dec 9, 2011 at 8:18 PM, Robert Klemme

[#391135] I need advice on what to do next. — Nathan Kossaeth <system_freak_2004@...>

I am new to programming. I read the ebook "Learn to Program" by Chris

23 messages 2011/12/12

[#391216] perf optimization using profile results — Chuck Remes <cremes.devlist@...>

I need some help with optimizing a set of libraries that I use. They are ffi-rzmq, zmqmachine and rzmq_brokers (all up on github).

13 messages 2011/12/13
[#391218] Re: perf optimization using profile results — Chuck Remes <cremes.devlist@...> 2011/12/13

On Dec 13, 2011, at 9:57 AM, Chuck Remes wrote:

[#391234] Re: perf optimization using profile results — Charles Oliver Nutter <headius@...> 2011/12/14

A couple quick observations.

[#391238] Re: perf optimization using profile results — Chuck Remes <cremes.devlist@...> 2011/12/14

On Dec 13, 2011, at 7:03 PM, Charles Oliver Nutter wrote:

[#391324] ruby 1.9 threading performance goes non-linear — Joel VanderWerf <joelvanderwerf@...>

12 messages 2011/12/16
[#391325] Re: ruby 1.9 threading performance goes non-linear — Eric Wong <normalperson@...> 2011/12/16

Joel VanderWerf <joelvanderwerf@gmail.com> wrote:

[#391420] Accessing class instance variables from an instance? — "Shareef J." <shareef@...>

Hi there,

26 messages 2011/12/20
[#391454] Re: Accessing class instance variables from an instance? — Khat Harr <myphatproxy@...> 2011/12/21

Actually, now that I'm thinking about it the existing behavior sort of

[#391456] Re: Accessing class instance variables from an instance? — Josh Cheek <josh.cheek@...> 2011/12/21

On Tue, Dec 20, 2011 at 9:42 PM, Khat Harr <myphatproxy@hotmail.com> wrote:

[#391545] Kernel#exit raises an exception? — Khat Harr <myphatproxy@...>

While I was working on embedding an interpreter I wrote a function to

13 messages 2011/12/24

[#391618] rvmsh: An easy installer for RVM — Bryan Dunsmore <dunsmoreb@...>

I have recently begun work on a project called [rvmsh]

12 messages 2011/12/29

[#391783] Mailspam — Gunther Diemant <g.diemant@...>

Is there a way to stop this mailspam of Luca (Mail)?

12 messages 2011/12/29

[#391790] What’s the standard way of implementing #hash for value objects in Ruby? — Nikolai Weibull <now@...>

Hi!

23 messages 2011/12/29
[#391792] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Gunther Diemant <g.diemant@...> 2011/12/29

I think you can't access instance variables from a class method, so

[#391793] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Nikolai Weibull <now@...> 2011/12/29

On Thu, Dec 29, 2011 at 15:52, Gunther Diemant <g.diemant@gmx.net> wrote:

[#391811] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Robert Klemme <shortcutter@...> 2011/12/29

On Thu, Dec 29, 2011 at 4:06 PM, Nikolai Weibull <now@bitwi.se> wrote:

[#391812] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Nikolai Weibull <now@...> 2011/12/29

On Fri, Dec 30, 2011 at 00:26, Robert Klemme <shortcutter@googlemail.com> w=

[#391816] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Josh Cheek <josh.cheek@...> 2011/12/30

On Thu, Dec 29, 2011 at 5:47 PM, Nikolai Weibull <now@bitwi.se> wrote:

[#391833] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Robert Klemme <shortcutter@...> 2011/12/30

On Fri, Dec 30, 2011 at 12:47 AM, Nikolai Weibull <now@bitwi.se> wrote:

Re: Searching an array for a pattern derived from another array

From: Rob Biedenharn <rob@...>
Date: 2011-12-13 13:13:54 UTC
List: ruby-talk #391205
On Dec 13, 2011, at 5:12 AM, Robert Klemme wrote:

> On Tue, Dec 13, 2011 at 12:41 AM, Chaim Keren-Tzion
> <chaim@intercomp.co.il> wrote:
>> Hi,
>> I've just started using Ruby last week and have a somewhat complex =
task to
>> complete in a short amount of time and nobody local to ask.
>>=20
>> Here is what I'm trying to find:
>> Given two arrays containing IP addresses like the ones below, how =
would I
>> search for the first element in 'servers' that pattern matches and =
element
>> in 'nics' where only the first 2 parts of the IP addresses need to =
match,
>> like 192.168.*.* or 10.14.*.* or 98.139.*.*
>>=20
>> servers =3D Array["192.168.0.251","10.14.0.142","98.139.180.149"]
>> nics =3D Array["10.10.0.255","173.194.37.16","10.14.0.170"]
>>=20
>> I've got some kind of beginning with the code below but I'm stuck. =
Any
>> hints?
>>=20
>> ----------------
>> log_server =3D "nothing"
>>=20
>> until log_server !=3D "nothing" servers.each |thisip| do
>>=20
>> # Consider only the first two parts of the 'thisip' IP address =
(192.168.*.*
>> or 10.14.*.* or 98.139.*.*)
>> # Compare it with each element in 'nics'
>> # Set 'log_server' equal to the first value of 'thisip' that pattern
>> matches an element in 'nics'
>> log_server =3D thisip
>>=20
>> end
>> ----------------
>=20
> I would approach this like this:
>=20
> 1. Write a method which receives two arguments (servers and nics of =
course).
> 2. Let the method start by preparing the data, i.e. #map both arrays
> into something which is quicker to match.
> 3. iterate by doing servers_converted.each or maybe
> servers_converted.each_with_index and returning from the method on
> first match.
> 4. return nil at the end of the method (nothing found) or raise an
> exception depending on the wanted semantics
>=20
> Now, how to do the matching?  I would not use regular expressions for
> the matching as you really want to match numeric values.  Conversion
> could use ip.scan(/\d+/).map(&:to_i).  You could use Array#[] to
> obtain a two element Array from a four element Array.
>=20
> You could as well search for a gem which deals with IP addresses.
> Since the problem is so common chances are that such a beast exists.
>=20
> Kind regards
>=20
> robert
>=20
> --=20
> remember.guy do |as, often| as.you_can - without end
> http://blog.rubybestpractices.com/
>=20

Rather than search for a gem, look no further than the standard library =
and you'll come across the IPAddr library. (It's been in there long =
before 1.9.3 so you're almost certain to have it.)

$ irb
irb(main):001:0> RUBY_VERSION
=3D> "1.9.3"
irb(main):002:0> require 'ipaddr'
irb(main):003:0> servers =3D ["192.168.0.251", "10.14.0.142",  =
"98.139.180.149"].map {|ip| IPAddr.new(ip)}
irb(main):004:0> nics    =3D [ "10.10.0.255", "173.194.37.16", =
"10.14.0.170"   ].map {|ip| IPAddr.new("#{ip}/16")}
irb(main):005:0> log_server =3D servers.detect {|ip| nics.any? {|nic| =
nic.include? ip } }
=3D> #<IPAddr: IPv4:10.14.0.142/255.255.255.255>
irb(main):006:0> log_server.to_s
=3D> "10.14.0.142"

The /16 added to the mapping of nics is the number of bits in the =
network mask.

So translating Robert's approach:

1. Write a methods that receives two arguments, servers and nics (as =
arrays of IP strings). (Optionally, a third argument that gives the bits =
in the netmask, perhaps defaulting to 16.)
2. map the Strings to IPAddrs
3. detect (find) the first server having an IPAddr that is included in =
the nic's network.
4. (there is no step 4 ;-)

-Rob


In This Thread