nmap (reference ruby class which combines narray and mmap)
na_str (c extension)


mmap : http://moulon.inra.fr/ruby/mmap.html
narray : http://narray.rubyforge.org/




na_str is designed to allow data sharing between narray object and
other ruby
objects. the shared data is that returned by the objects to_s or
to_str method
and rb_string_new4. using this technique memory mapped (using guy’s
extensions) data can be altered with no explicit io on the users part
partial changed to numerical grids can occur very quickly and

the nmap.rb reference impl is a concrete example of this usage and is
included in the distribution.


jib:~/eg/ruby/na_str > cat a.rb
# the nmap extension is installed along with na_str
  require 'nmap'
# the NMap ctor interface is similar to NArray's, but a backing

file must also
# be specified
path, x, y = ‘int.data’, 3, 4
nmap = NMap.int path, x, y
# copy the last row to the first
nmap.na[true, 0] = nmap.na[true, 3]
# set the last row to be the current time. if you run this a few
times you’ll
# notice that changes to the narray are automatically written to the
# backing file via the magic of mmap
nmap.na[true, 3] = Time.now.to_i
# show the narray
p nmap.na

jib:~/eg/ruby/na_str > ruby a.rb
[ [ 0, 0, 0 ],
[ 0, 0, 0 ],
[ 0, 0, 0 ],
[ 1151439012, 1151439012, 1151439012 ] ]

jib:~/eg/ruby/na_str > ruby a.rb
[ [ 1151439012, 1151439012, 1151439012 ],
[ 0, 0, 0 ],
[ 0, 0, 0 ],
[ 1151439014, 1151439014, 1151439014 ] ]


jib:~/eg/ruby/na_str > cat a.rb

reference impl installed with na_str

require 'nmap'

setup a narray grid containing 1 gb of ints

gb = 2 ** 30
mb = 2 ** 20
sizeof_int = [42].pack('i').size
gig_of_ints = gb / sizeof_int
nmap = NMap.int '1GB',  gig_of_ints

set about 1 million of the ints to 42

nmap.na[0 .. mb] = 42

show that the data was written

p nmap.na[mb - 1]

jib:~/eg/ruby/na_str > time ruby a.rb

real 0m0.078s
user 0m0.020s
sys 0m0.020s

jib:~/eg/ruby/na_str > ls -ltar 1GB
-rw-rw-r-- 1 ahoward ahoward 1073741824 Jun 27 14:28 1GB

On Sun, Jul 25, 2010 at 11:24 PM, ara.t.howard [email protected]

nmap (reference ruby class which combines narray and mmap)

this uver cool, but i am lost. is that v 1.1.0 or 0.1.0?
do you have gem for this?
best regards -botp

eeks. it’s 1.1.0


the gem is here (search for ‘nmap’ on the page)


ps. as i’ve mentioned to nick/tom/eric - gem syncing is, and has
been, broken ever since the move to gemcutter. i think i’m the only
one who seems to notice/care - but it’s never worked and many, many
gems, including this one, have been orphaned since then or, worse,
stale versions are being served.

cfp:~ > gem list|grep nmap
nmap (1.1.0, 1.0.0)

cfp:~ > gem list --remote|grep nmap
nmap (0.1.0)


ara.t.howard wrote:

eeks. it’s 1.1.0


the gem is here (search for ‘nmap’ on the page)


Any idea why narray.h doesn’t get found (or more to the point, why the
narray header dir doesn’t get put on the include path)?

This is via “gem install na_str-0.1.0.gem”, with the gem downloaded from
the above link:

Makefile:134: warning: overriding commands for target
/usr/local/lib/ruby/gems/1.8/gems/na_str-0.1.0/lib' Makefile:132: warning: ignoring old commands for target/usr/local/lib/ruby/gems/1.8/gems/na_str-0.1.0/lib’
gcc -I. -I/usr/local/lib/ruby/1.8/x86_64-linux
-I/usr/local/lib/ruby/1.8/x86_64-linux -I. -fPIC -g -O2 -I
/usr/local/lib/ruby/site_ruby/1.8/x86_64-linux -c na_str.c
na_str.c:3:20: error: narray.h: No such file or directory
na_str.c:4:27: error: narray_config.h: No such file or directory

The extconf.rb assumes that narray is in sitearchdir, but
my narray is installed as a gem and its headers are at:


Does anyone know how to tell extconf to look for headers in the gem