An English Translation of G. D. Madgulkar’s Geet Ramayana

April 21st, 2012

Click here to skip my introduction and download the translation.

Facebook, Google, bit.ly, and Outsourcing

Like so many Indian American children, I grew up hearing stories from the Ramayana and enjoying them in English translations, especially Amar Chitra Katha comics. My parents enjoyed playing recordings of Sudhir Phadke’s performance of Geet Ramayana on their reel-to-reel player. In college, I was fascinated by a performance of the Ramayana in Indonesian shadow puppetry. My own daughters have benefited from the delightful Japanese anime version.

I have encountered conservatives who believe epics and scriptures should be read or heard in their original form or not at all. My own strong opinion has been that appreciation of such works dies—they are lost and forgotten—unless they are continually reinterpreted. Preservation of the original is important—indeed, an interpretation should never be mistaken for the original—but it must be made accessible to new generations. This is how they live on and enrich new lives.

When I heard that Sudhir Phadke’s son, Sridhar Phadke, would be performing the Geet Ramayana in Portland, I knew I had to take my family to it.

Yet, how could this performance be made accessible to a teen and a tween, both Indian-American? Although I am fluent in Marathi, I grew up in America. My own ability to understand Marathi poetry is limited. Their understanding is less than my own, and song and music sometimes makes the words harder to understand.

I was inspired, early one morning, to obtain an English translation of the work, and then project supertitles during the performance. This would open the performance up to the entire Indian-American community—indeed, to the entire community of English-speaking people somewhat familiar with the Ramayana. I had five weeks to get everything together.

Google and Amazon searches revealed that an English translation was not readily available, and even if one had been, I could not imagine obtaining permission to use it in a short time. The other half of the inspiration was to outsource the work of translation to friends and relatives knowledgable in Marathi. There were only 56 poems in total, each no more than a full page in length. How hard could it be? (Famous last words.) The final product could be published under a Creative Commons license.

I was relieved to find eight willing participants without difficulty: my parents, my cousin Bhushan Naniwadekar, and five friends who have long demonstrated deep appreciation and understanding for Indian literature: Subhash Phatak, Satish Palshikar, Govind Deshmukh, Alaka Sarangdhar, and Sanjay Vankudre. We agreed that they would complete a translation and I would edit the final product. Luckily for me, one of them, Mr. Phatak, urged me to contact Sudhir Phadke directly, and to undertake translation of only the poems that would actually be sung during his performance. I was amazed that Mr. Phadke responded immediately to my post on his Facebook wall. My maternal uncle, Mr. Arun Nulkar, is well-respected in the Marathi music community, and dropping his name must have helped! We arranged a time for me to call him in Mumbai.

To my dismay, he immediately nixed the idea of supertitles, saying it would distract from the song and music. Thankfully, he was willing for us to prepare a “handout.” I did not think that supertitles would be distracting, especially considering other performances have included dancers and actors, nor did I think a handout would be less distracting. However, I kept my opinions to myself, not wanting to argue. After all, to him, I was just some random person, and considering he was about to start his tour, he had no time to review our work. He insisted that we do the translation exactly and with care, likely fearing the sometimes ridiculous translations we see in movie subtitles. He referred me to a local acquaintance who had the list of songs that would be performed.

The Project is On!

I distributed the 14 poems to the team and asked each to provide one translation in one week, and the second in the following week. To my delight, two arrived in two days, and all fourteen were completed in one week. I was fortunate to have such an enthusiastic team with more history than me in this work. It is, perhaps, a tribute to the poet that once you start, it is difficult to stop, even though the work of translation is very hard.

When the first translation arrived, I began the work of editing. I held to the same ideal I have held to in other translation work: The best translation neither adds to nor subtracts from the original work.

I have seen translations that diverge from the original in order to further the translator’s agenda or personal beliefs. This I find simply unethical.

I have seen translations that diverge from the original for the purpose of producing rhyming verse. Even though the original did not rhyme. These works, I feel, are best suited for starting logs burning in your fireplace. If I see them in the library, I try to hide them behind other books to protect unwitting patrons from accidentally checking them out.

Borderline unethical are translations that attempt to soften bold, explicit, or politically incorrect language or apologize for it.

I have seen others that add explanatory or contextual words and phrases. In my opinion, these belong in introductions or footnotes, as they were not intended by the original author. This point is especially important when poets have intentionally included and excluded words.

Accidents happen when translating poetry, for example when the poet intends speak ambiguously but the translation removes ambiguity.

There are numerous difficulties in holding to this ideal. Tradeoffs must be made. The grammar of two languages can be different, and the original author may have taken poetic license by breaking grammatical rules. Alliteration may add to the beauty of original poetry, and it may be impossible to preserve it. Or it may be possible to preserve it, but only at the expense of facets of meaning. It can be difficult to recognize whether a word as truly meaningful or was just added to preserve the original meter. Sometimes, you come up with a really great translation, but it just sounds dumb. Sometimes, you encounter a pun or a double entendre. These are the times to throw up your hands and insert a footnote.

However, these very obstacles are why it is a sheer delight to find a translation that “clicks.” It seems to achieve the same effect on the modern English-speaking reader that was intended by the author. Sometimes, this is the result of hard work, a large vocabulary, or a highly sophisticated aesthetic sense. Sometimes, the number of syllables in a line come close to the original. Frequently, it is the result of the universality of human languages, the connection of words from different languages to common roots.

In working on this poetry, it has struck me that a word, beyond its consonants, vowels, syllables, and conjugation, can have multiple meanings and parts of speech. It has a history and, deriving from roots, a lineage. The more of these that can be preserved during translation, the higher the fidelity of the translation. Poetic license can also work the other way. We can break the rules of English grammar for fidelity or to create a certain mood.

Getting back to this particular work, I found myself deeply moved when I encountered the following stanza in the first poem:


Out of the heaven of the seven notes
Nine rivers of nine moods
Came cascading into the sacrificial hall.
The audience bathed at their confluence.
Kush, Lav sing Rama’s chronicle.

The original Marathi, relatively easy to understand, gave me goosebumps, and my eyes teared up. I finally understood what people mean when they say poetry can change and enrich your life. Invoked here is the romantic Indian notion of rivers originating in heaven, an idea easily comprehended by anyone who understands the water cycle. In the translation, the rhyming of “heaven” and “seven” was an English bonus, absent from the original. And the word “confluence” has a soft beauty in this context.

Since then, my work on this translation has bordered on obsession. The poetry is stuck in my head, and I can’t stop pondering its larger meaning.

To whatever extent meditation upon Rama accumulates spiritual merit, I must have accumulated a lot over the past couple of weeks! I’m grateful to my friends and relatives for their hard work, and proud to present it to the world.

Click here.

Installing pg Gem on Mac OS X Lion 10.7.3

March 6th, 2012

After upgrading to Lion, I tried installing the pg gem and kept getting the following error, even though I had installed the latest version of XCode (4.3):

checking for libpq-fe.h... RuntimeError: The complier failed to generate an executable file.
You have to install development tools first.

Turns out, you have to install the command line tools separately.

Under XCode –> Preferences, click Downloads, then Components. Select Command Line Tools and click Install.

Fisker Karma First Experiences

November 3rd, 2011


Somehow, I ended up on the right mailing list, and I was invited to test-drive the Fisker Karma.

On the way to the test-drive, another test driver passed me in the opposite direction. I was immediately impressed by the gaping grill, eyeliner LED headlights, muscular curves of the front end, and the apparent length of this vehicle that is the epitome of “low-slung.”

While checking in, a white Karma arrived from behind me, making a noise straight out of Star Wars. My wife and I were told that this is a synthetic sound to reduce risk to pedestrians.

On display were the two charging options for the car, one 110-volt and one 220-volt. One of the polite and knowledgable salespeople informed us that Henrik Fisker, the CEO of the company, was the designer behind the Aston Martin DB9, Aston Martin V8 Vantage and BMW Z8. Solar cells in the roof add visual interest and help to power interior features. The 22-inch rear wheels are driven by an electric motor, but the battery may be recharged by a gasoline engine.

Watching the white Karma depart, I was puzzled by what looked vaguely like chrome tailpipes. They are merely faux fixtures, apparently to complete the look of the rear end of a traditional sports car.

The door latch was a downward-facing rubber-covered button similar to those found on trunk latches. Not the classiest feel, but it definitely said, “electric.” The doors were light and frameless windows clattered a bit when closed. Not what I would expect from fine German automotive engineering.

The driver’s seat at its highest was too low for my tastes. The view through the windshield was excellent, anchored in the corners by the rises in the hood above the wheel wells. The long hood reminded me of a Corvette I once drove. Side view is also excellent as this sedan has four doors and four side windows. The minimally-sloped rear windshield yields an unfortunately narrow rear view, about a third as tall as you would expect.

The interior was free of clutter and dominated by a bright instrument cluster. This is a digital display pretending to be analog, but it has high enough resolution to pull it off successfully. In the center of the dashboard was a touch-screen display for dual-zone environmental controls and audio. Where console storage would be expected, there was merely a clear case containing colored lights.

The car has three drive modes: stealth, hill, and sport. While I would expect these to be controlled by buttons or a dial on the console, they are actually controlled by levers placed where paddle shifters are expected, which is totally counterintuitive.

We started out in stealth mode with zero engine noise. Hauling a driver and two passengers, the car did not feel as sprightly as I am accustomed to, but was certainly faster than a Prius. The suspension was stiff to the point of being uncomfortable. As soon as we got on the road, there was significant road noise.

We then switched to sport mode, and the engine revved up. Despite the salesperson’s warnings, it was thoroughly unnerving to find that the throttle was disconnected from the engine. The engine revved up or down based on the needs of the battery, and the throttle controlled the (silent) flow of power from the battery to the wheels.

We stopped briefly to take a photograph, and I sat in the rear passenger seat on the way back. The interior door latch was a simple metal button. My elbows rested high on the door handle and console, and there was minimal headroom. We switched to hill mode, which is supposed to feel more sluggish but optimized for regeneration of the battery.

Upon return, we popped the trunk to find a storage space sufficient for “a set of golf clubs.” The engine cover is hinged in the front for a sporty look.

Conclusion

This car is very strong on exterior looks and green/electric features. It has the suspension and spartan interior of a sports car, but falls short on agility. It has the four seats and doors of a sedan, but with minimal rear seating and storage space, falls short on practicality or comfort. With an $80K+ price point, I predict few of these cars will sell.

A Call for Moderation

October 7th, 2011

In his interview with Lynn Neary of NPR, Bill Frezza presents several bitter truths. His perspective is myopic. His choice of words is blunt. The interview was placed immediately after coverage of the Occupy Wall Street movement. This all serves only to polarize the audience between rich and poor, liberal and conservative.

Use of the “cart and horse” analogy incorrectly assumes that either employment drives growth or growth drives employment. The reality, as usual, lies somewhere in between. “Chicken and egg” is the more appropriate analogy.

It is true, as Frezza says, that businesses hire not as a public service, but to serve growing demands from customers. It is true that they are likely to put off hiring during times of economic uncertainty. The truths that Frezza seems to ignore are that customers’ demand for many products disappears when their incomes are spent on food, clothing, shelter, education, transportation and medical care. Employee productivity is also diminished if these basic needs are at risk.

So, though businesses may not have a responsibility directly to feed, clothe, shelter and cure their customers and employees, it is in their best interests to have and show concern for those needs being met.

In a truly free market, businesses that treat people as nothing more than actual or potential revenue sources are at a competitive disadvantage to those that deeply understand customer needs. And by deeply understand, I mean identify their human problems and potential, and incorporate solutions and opportunities into products and services that provide increasing value. Of course, in a free market, businesses are welcome to demand higher prices for that value, based on the law of supply and demand. Similarly, businesses that deeply understand and adapt to employee needs have access to the most productive talent, retain that talent during down times, and avoid switching costs (replacement, training and reduced productivity) from attrition.

Many businesses would actually do better to treat employees like “inputs,” but only because they currently treat employees worse than other inputs. They invest heavily in maintaining, upgrading, adapting, and even responsibly disposing of facilities and equipment. Yet, they expect continually increasing levels of productivity from employees and the right to terminate employment, all at no cost.

Mr. Frezza, I’m sorry you feel like a “whipping boy.” Earning over $250,000 a year doesn’t justify being vilified by politicians or the press. I hope you mean to say that the legitimate businessman has become a whipping boy for financial criminals. I hope you are not comparing your disparagement to the real suffering of people who have been laid off, evicted, or forced to make financial choices between basic necessities.

By covering the occupation of Wall Street and then giving voice to broadcasting the blunt words of Frezza, the media is contributing to a dangerous polarization in our society. The fact is, responsible, enlightened capitalism has worked well for our society, creating enormous wealth and high standards of living. The revolutionary sentiments of the occupiers of Wall Street should be rejected along with the myopic vision of American business presented in this interview.

Installing iOS 5 Beta 7

September 30th, 2011

While attempting to install iOS 5 Beta 7 on an iPad, I encountered an “Unknown Error” several times. After installing iTunes 10.5 Beta 7 I encountered the error again, but after unplugging the device, restarting iTunes, and trying again, it worked.

RSpec is Growing on Me

July 20th, 2011

I’m a big believer in Test-Driven Development. Chris Brooks turned me on to Ruby on Rails at least six years ago, and I embraced it immediately, largely because TDD was well-supported. More recently, Chris pointed me to RSpec and Cucumber for test-driven development.

At first glance, I didn’t really see the point or the incremental benefit over Test::Unit as built into Ruby on Rails. Using RSpec involves the chore of managing additional gems, and it just doesn’t feel right to ignore the perfectly useful test/ directory and associated Rake tasks generated by every Rails project. RSpec syntax is more like English, but this seemed to promise capabilities over Test::Unit that I couldn’t see being delivered. I found the religious debate entertaining, and came down on DHH’s side. However, given Ryan Bates’s recommendation, on top of Chris’s, I kept an open mind.

Having written several RSpec specs for Rails 2.3.5 and Rails 3.0 projects, I must say, it is growing on me. Here’s why…

  • Syntax: Much of the benefit I derive from RSpec is from its syntax. I am surprised that syntactic sugar could be so sweet. The describe-it-should syntax keeps reminding me that my code is meant to solve a customer problem. When I write RSpec specs, I feel I am writing an executable specification of my software. I feel I can easily and smoothly translate customer needs into RSpec specs. Traceability between test cases on the one hand and requirements (including defect resolutions) is important, and RSpec seems to provide the right amount of syntactic sugar to facilitate it. I’ve come to believe that the most important quality of code is its ability to express intent clearly and concisely. The RSpec syntax seems to support communication of intent beyond the limits of the code under test.

    The assertions of Test::Unit seem to assume lines of code did what I intended them to do. test-assert makes me focus on return values and types.

    It is a difference of orientation, like the difference between asking “Will this make my customer successful?” and asking “Did this code do what I hoped it did?”

    I know it is just syntactic sugar, but based on my background, I find the former question more productive and profitable, and the RSpec syntax orients me toward it.

    It is a bit surprising that the Rails framework generates “unit,” “functional,” and “integration” directories, while RSpec documentation recommends “model,” “controller,” “view,” and “spec” directories. Given the difference in syntax orientation, one would expect the opposite. However, the RSpec approach definitely feels comfortable.

  • Mock objects: RSpec’s incremental benefit over Test::Unit is its inclusion of mock objects. Test::Unit can easily use mock objects, but they are not built in (I think). To be honest, I never really understood mock objects until I found them in RSpec and tried using them in my specs. Now, they seem indispensable, well worth the management of additional gems.

The jury is still out on Cucumber. When I gave it a solid try, I found it hard to start. Should I specify high-level, non-technical features and capabilities or low-level, technical expectations? Both are important, so how and where should they live? Perhaps I should start a new development project with Cucumber tests, rather than trying to add them to an existing project.

VirtualBox “Session Locked”

June 9th, 2011

This is on Mac OS X Snow Leopard.

I discovered this morning that a couple of my VirtualBox virtual machines would not start. Double clicking on the name did not work, and the “Start” button remained dim when they were selected.

I ran Disk Utility, selected the hard drive where my VMs were stored, and clicked “Repair Disk Permissions”. After a few minutes of repair work, the virtual machines were unlocked and worked fine.

Chromium OS on VirtualBox on Mac OS X

May 17th, 2011

I just got Chromium OS running on a VirtualBox on a Mac OS X Snow Leopard (10.6.7).

I downloaded Ubuntu Linux 10.4 64-bit and got it running on the VirtualBox. I had to allocate a 50 GB disk for this virtual machine–20-25 GB was insufficient.

Following the instructions for building Chromium OS here, I successfully reached the execution of ./image_to_vm.sh --format=virtualbox. This particular script failed at the very end because it expected VBoxManage to be installed locally (which it wasn’t).

I transferred the 3.22 GB vm_temp_image.bin to the host Mac using SFTP, then ran
VBoxManage convertfromraw vm_temp_image.bin vm_temp_image.vdi --format VDI

Then, I created a new VirtualBox VM. For Operating System, I selected “Linux” and for Version, I selected “Ubuntu”. For Base Memory, I selected 1024 MB. For Virtual Hard Disk, I selected the existing hard disk vm_temp_image.vdi I had just generated.

IMPORTANT: I then had to fix the network settings. I selected Adapter 1, Attached to: Bridged Adapter, Name: en0: Ethernet. Under Advanced, I selected Adapter Type: “Intel PRO/1000 MT Desktop (8254OEM).

Ten seconds after clicking Start on the virtual machine, I got the initial setup prompts!

Ruby is Very Concise

March 29th, 2011

For a work project, we needed the locations of all US Apple Stores. I couldn’t find a list, so I decided to “scrape” Apple’s site for the addresses. Less than 20 lines of Ruby did the trick:

#! /usr/bin/ruby

require 'open-uri'

open("http://www.apple.com/retail/storelist") do |file|
  file.read
end.split("<a href=").map do |seg|
  (match = seg.match(/"\/retail\/([a-z0-9]+)/)) ? match[1] : nil
end.compact.each do |loc|
  contents = open("http://www.apple.com/retail/#{loc}/") do |file|
    file.read
  end
  puts [
    /\<span class="street-address"\>(.*)\<\/span\>/,
    /\<span class="locality"\>(.*)\<\/span\>,/,
    /\<span class="region"\>(.*)\<\/span\> /,
    /\<span class="postal-code"\>(.*)\<\/span\>/
  ].map { |pat| contents.match(pat)[1] }.join(", ")
end

I’m always wary of using temporary variables (in this case, match and contents) but I couldn’t figure out a way to avoid them.

Determining Facebook Like Count and Twitter Tweet Count for a URL

February 25th, 2011

I recently worked on a web site which let users set up a personalized web page, including a Facebook Like button and a Twitter Tweet button.

We needed to determine how many likes and how many tweets each personalized web page got—without visiting each site and noting the count by hand.

This site had the solution for Facebook likes. Let’s say your page, containing like and tweet buttons is at http://the.url.com. Simply type the following at the command line:

curl "https://api.facebook.com/method/fql.query?query=select%20%20like_count%20from%20link_stat%20where%20url=%22http://the.url.com%22"

You’ll get back an XML document containing the like count.

For Twitter, I had to reverse-engineer their button code. Simply type the following at the command line:

curl "http://urls.api.twitter.com/1/urls/count.json?url=http://the.url.com"

You’ll get back a JSON document containing the tweet count.