The Garibaldi Project has created a way for scholars to interact with a work of art that is too fragile and too large for routine study.  Yesterday, I sat in on a forum presentation of this Brown University project.  The project is a collaboration with Microsoft Research and the British Library, using a Microsoft Surface installation along with large screen projection to create a way to explore this historical piece of art along with related documents.
The Girabaldi Panorama is a scroll over 4′ tall and 273′ wide, painted in watercolor on both sides — unrolled, it would almost stretch the length of a football field.  It tells the story of Italian hero Giuseppe Garibaldi in a series of images.  The format was a precursor to modern cinema and was likely set up with a systems of cranks to present a section at a time with a voice over.  As a historical artifact, the panorama is very fragile and scholars have limited access, but Brown University Librarian Harriette Hemmasi envisions the library as a dynamic and transformative learning center and has worked to help create access to the work in this innovative project.

As part of the project, Italian Studies Professor Massimo Riva has students use the technology in a classroom setting.  He sees the library of the 21st century as a laboratory, “an experimental place.”  He highlighted that “in teaching a lot of ideas are generated… students add to the possibilities.”  Students have annotated areas of the panorama with historical documents, as well as creating navigation point that allow you to skip to specific areas of the panorama.

The technical research and implementation of the project is led by Professor Andries van Dam, who pointed out that “you can use things differently, you can create differently if you have a different form factor.” He believes that “it is vital for libraries to be providing leadership in creating the best of virtual and physical places.”

The screen is multi-touch. In addition to allowing you to pan and zoom with natural gestures, you can clip sections of the panorama by holding down two fingers at the corners of the area you want to clip.  You can can then keep that section for comparison with another part of the panorama and if you toss it to the top of the surface, it will appear on the large presentation screen.

The Surface includes 5 cameras (mounted under the surface) and computer vision technology which detect objects placed on the surface. This allowed the student programmers to create a magnifying glass effect when two physical objects that look like small inkwells are placed on the surface. The Surface can also detect a hand before it touches the screen, and I found it effective that there was hover feedback where the area that I was about to touch was highlighted.

One detail that I enjoyed was the use of a pie menu to provide a selection of controls. The lines connecting the options were animated to provide a visual cue that you need to slide your finger along the surface to select an option.

(I found more photos and details about the user interface features on Eric Havir’s blog.)

app engine logoJohn Woodell (@johnwoodell) gave an excellent talk at the App Engine Meetup this evening on using Ruby on Google’s AppEngine. After some highlights of App Engine and a tour of three real-world use cases, John gave a series of quick demos of what seem to be very well-documented resources for getting started. I built the simple “hello” Sinatra app during his talk which was pretty satisfying.  I was distracted by my success with the first app, so I missed some of his Rails presentation, but it looks like the docs go through what he demo’d.


Key Features

  • No need to install or maintain your own stack
  • “We do the scaling for you” -> Google services via standard APIs
  • Charge only for actual usage – Always free to get started
  • Built-in application management console (pretty sweet)


  • no native code
  • no sockets or thread
  • no writing to the files system
  • 30 seconds to do your work, then the request times out (issues with initialization in Rails, but they’ve developed a “deferred dispatch” workaround)
  • takes several seconds to “spin up” a new JRuby instance when your app first starts or your load spikes

Good things to know

  • AppEngine datastore has no schema.
  • Reads are always the same speed no matter how big your data store, writes are slower
  • You use DataMapper rather than ActiveRecord.
  • memcache API is available
  • URL Fetch API is a drop-in replacement for Net::HTTP
  • as of today, there will be a release where openssl “just works” for the first time

Matthew Blain, the engineer for the main bulkloader tool, gave a short talk about it.  Bulkloader lets you put data into the AppEngine data store. You can use it to import data or to move from one AppEngine app to another.  It currently supports limited input:  csv and simple xml.  It also supports “simple text” for output.  You can write any connector you want.

Some real world references to people using Ruby on App Engine:

Very nice getting started guide, which I followed to build a Sinatra app in about 5 minutes.

sudo gem install google-appengine
appcfg.rb generate_app hello
dev_appserver.rb hello

After this I had an app running locally at http://localhost:8080/ — I find it unsettling to hear that the dev app is running on whatever Ruby I have, but when I deploy it is JRuby.  John reassures me that the only real glitch that I’ll run into is if I have a gem with native code, for which there aren’t also java extensions (or an alternate pure Ruby implementation).

Installation notes: hasn’t been tested with rvm, the env is there, so you don’t need it. gems are stored in a jar file, kept in .gems/bundler_gems in your app directory

Then to deploy my app on App Engine, I needed to use my Google account to register an app. I picked the name “hello-sarah” which I then added to my  I also added a little snippet of Ruby code to the Rack app to report the current time, so I could tell it was mine.

Then I typed some magic words into my local command line:

cd hello/
appcfg.rb update .

Then my app was live at:

Since I tweeted it, I got a chance to see how the application dashboard works. Here’s what it looks like for this app which was first deployed a few hours ago:

Alexander B. Howard wrote an excellent article about why to include women. In response to a reader, he added a comment which I find particularly insightful and compelling.  He quotes a column by David Brooks last year on genius:

If you wanted to picture how a typical genius might develop, you’d take a girl who possessed a slightly above average verbal ability. It wouldn’t have to be a big talent, just enough so that she might gain some sense of distinction. Then you would want her to meet, say, a novelist, who coincidentally shared some similar biographical traits. Maybe the writer was from the same town, had the same ethnic background, or, shared the same birthday — anything to create a sense of affinity.

This contact would give the girl a vision of her future self. It would, Coyle emphasizes, give her a glimpse of an enchanted circle she might someday join. It would also help if one of her parents died when she was 12, infusing her with a profound sense of insecurity and fueling a desperate need for success.

Armed with this ambition, she would read novels and literary biographies without end. This would give her a core knowledge of her field. She’d be able to chunk Victorian novelists into one group, Magical Realists in another group and Renaissance poets into another. This ability to place information into patterns, or chunks, vastly improves memory skills. She’d be able to see new writing in deeper ways and quickly perceive its inner workings.

Then Alexander Howard adds:

Replace “writing” with “coding” and “novelist” with “developer” and perhaps you might see my thinking on the importance of mentorship, networks and modeling.

In as far as the problems that exist in this area, I’m not sure they’re entirely created during childhood, nor that their remediation lies only in education in classrooms, libraries and laboratories.

There are two points here which are key to solving the problem.  One requires that people of privilege and power act differently and one requires that minorities (including women in tech and business) step bravely into their own potential.

I believe that the lack of diversity in tech and tech startups can only be solved one person at a time.  This is a daunting prospect until you start thinking about it in a microcosm.

Sarah Mei and I decided to do something to make it so the SF Ruby Meetup had more women.  There were so few women in the group that we figured that finding 12 more would triple our numbers.  Being geeks, we solved it with math.  Teach 120-150 women Ruby, expect 10% to be interested and stick around, and our goal would be met.  This is a deceptively simple description of the solution, but this simple goal and powerful support from a large number of individual men and women in the group made it work.

I’m convinced that a large reason the workshops have worked is because of the mix of participants — we typically bring together around 50 women and 25 volunteers.  The majority of the women are programmers.  The attendees can bring a man to attend as well, so we’ll always have a handful of guys who are not technical.  The volunteers are both men and women who know Ruby on Rails and have a wide range of skills.  When you start talking to a stranger at a workshop there is no way you can know by looking at each other whether the other person has a technical background or aptitude and they could be a CEO, an engineer at the top of their career or unemployed.  That breaks down stereotypes and creates an incredibly great environment for learning and networking.

I am very excited that this workshop format will be replicated in New York City and San Francisco (soon to be announced) on the same weekend May 20-22nd.  I believe that what is magical about the workshops we have done so far can be replicated in any city by any group of people who genuinely want to share what they know.

As Sarah Mei says “it’s a numbers game.”  We’re creating change through teaching Ruby and Rails to women.  You can join us or you can create your own change by reaching out and mentoring someone and by stretching your boundaries.  Help someone find their genius… or find your own.