While convalescing from a recent surgery, I had a flash of insight. One can view the Internet and a file system as one big, really big, Hash.

What is a Hash if not a way to access a value referenced by a key ?

What is a filename ? A key.

What is a URL ? A key.

the_internet.rb

1 require uri
2 require open-uri
3 require singleton
4
5 # Access the Internet through a Hash-like interface
6 # Code originally written by
7 # Fran├žois Beausoleil (francois@teksol.info)
8 # This code is released in the public domain.
9 class TheInternet
10 include Singleton
11
12 def [](url)
13 uri = url.respond_to?(:read) ? url : URI.parse(url)
14 uri.read
15 end
16
17 def []=(url, value)
18 # POST, PUT or whatever to URL
19 end
20 end

filesystem.rb

1 require singleton
2
3 # Access the filesystem through a Hash-like interface
4 # Code originally written by
5 # Fran├žois Beausoleil (francois@teksol.info)
6 # This code is released in the public domain.
7 class Filesystem
8 include Singleton
9
10 def [](path)
11 File.read(path)
12 end
13
14 def []=(path, value)
15 File.open(path, wb) do |f|
16 f.write(value)
17 # Could do fancy stuff here:
18 # YAMLize value, marshall it, etc.
19 end
20 end
21 end

The above allows us to do very interesting things:


1 # Copy from the Internet to a local file:
2 Filesystem.instance[teksol.info/index.html] =
3 TheInternet.instance[http://blog.teksol.info/]
4
5 # Given a suitable implementation of TheInternet#[]=,
6 # we could do:
7 search_results =
8 (TheInternet.instance[http://www.google.com/search] =
9 {:hl => en, :q => rails})

Is this rambling interesting ? Certainly. Is it useful ? You tell me !

DISCLAIMER: The Filesystem object above is full of security holes. It should be implemented in a chrooted, environment, check permissions, etc.

Search

Your Host

A picture of me

I am François Beausoleil, a Ruby on Rails and Scala developer. During the day, I work on Seevibes, a platform to measure social interactions related to TV shows. At night, I am interested many things. Read my biography.

Top Tags

Books I read and recommend

Links

Projects I work on

Projects I worked on