<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DkEDQ3wyfCp7ImA9WhRSEkQ.&quot;"><id>tag:blogger.com,1999:blog-2227556516479509948</id><updated>2011-11-14T10:17:52.294-08:00</updated><title>Prasanna Pendse</title><subtitle type="html">Welcome to my new home on the internets!</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://prasannapendse.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://prasannapendse.blogspot.com/" /><author><name>Prasanna Pendse</name><uri>http://www.blogger.com/profile/12443195567331616526</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/PrasannaPendse" /><feedburner:info uri="prasannapendse" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DUADSHo8cSp7ImA9WhRTGEk.&quot;"><id>tag:blogger.com,1999:blog-2227556516479509948.post-5034535623532028097</id><published>2011-11-09T06:02:00.000-08:00</published><updated>2011-11-09T06:09:39.479-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-09T06:09:39.479-08:00</app:edited><title>An interesting find</title><content type="html">&lt;p&gt;We needed to expose a resource such that its url looked like:&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;http://www.example.com/widgets/&amp;lt;url-encoded-identifier&amp;gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;In some cases, we found that the request never made it to the controller. The reason for that was when the identifier contained %2F (url encoded '/') followed by other characters, it appeared as if either apache or passenger url-unencoded it before trying to figure out who send the request to. And it couldn't find anything, so it returned a 404.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;If we start the server using rackup instead of via Apache Passenger, the request would be routed correctly.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Now, if the identifier contained a space (urlencoded as +), then we saw another problem. We know Rails tries to help by unescaping parameters. When the param comes from a URL path, Rails uses URI::unescape. This leaves the + in! The parameter received by the controller is incorrect. If it was only the +, it would be one thing. It turns out that URI::unescape is depracated in Ruby 1.9.2 and it doesn't work for a few other characters as well. So gsub wasn't an option.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;In Ruby 1.9.2, URI::unescape is replaced by CGI::unescape. And it behaves correctly. However, in Ruby 1.8.7, CGI::unescape is not considered stable. So, Rails had to decide which Ruby it will support better. It seems they have taken a half-way approach. Rails uses URI::unescape when unescaping params from the URL path, but it seems to use CGI::unescape when the param comes from the query string!&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Given the two issues, we had to change our URL structure to something like:&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;http://www.example.com/widgets/&amp;lt;hex-identifier&amp;gt;?id=&amp;lt;url-encoded-identifier&amp;gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Grrr...&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Does anyone have a better solution?&lt;br /&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2227556516479509948-5034535623532028097?l=prasannapendse.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PrasannaPendse/~4/qaA4r_LUH7Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://prasannapendse.blogspot.com/feeds/5034535623532028097/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2227556516479509948&amp;postID=5034535623532028097" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/5034535623532028097?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/5034535623532028097?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PrasannaPendse/~3/qaA4r_LUH7Q/interesting-find.html" title="An interesting find" /><author><name>Prasanna Pendse</name><uri>http://www.blogger.com/profile/12443195567331616526</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://prasannapendse.blogspot.com/2011/11/interesting-find.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYERHY4eCp7ImA9WhdSEEU.&quot;"><id>tag:blogger.com,1999:blog-2227556516479509948.post-3180455131741755397</id><published>2011-07-16T09:28:00.000-07:00</published><updated>2011-07-19T07:35:05.830-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-19T07:35:05.830-07:00</app:edited><title>What is Object Oriented Programming?</title><content type="html">I find that a lot of people with a lot of experience in "Object Oriented Programming" really struggle to understand what it actually is. I wanted to find an easy way for people to learn Object Oriented Programming.&lt;br /&gt;
&lt;br /&gt;
Here it is:&amp;nbsp;&lt;a href="http://www.purl.org/stefan_ram/pub/doc_kay_oop_en"&gt;Dr. Alan Kay  on the Meaning of “Object-Oriented Programming”&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
As you reflect upon what you currently consider "OOP", remember an all-too-common anti-pattern:&amp;nbsp;&lt;a href="http://martinfowler.com/bliki/AnemicDomainModel.html"&gt;The Anemic Domain Model&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
That's it! Its that easy! Now try to put it into practice and see if &lt;a href="http://www.extremeprogramming.org/rules/testfirst.html"&gt;TDD&lt;/a&gt; helps you in that quest.&lt;br /&gt;
&lt;br /&gt;
To see how you are doing, here's an easy way to determine whether or not you have taken the first step towards OOP:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Does a single class have setX() and getX() methods?&lt;/li&gt;
&lt;li&gt;If so, then you fail. Its not OOP.&lt;/li&gt;
&lt;li&gt;Please try again.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2227556516479509948-3180455131741755397?l=prasannapendse.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PrasannaPendse/~4/BrOy0n-sijo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://prasannapendse.blogspot.com/feeds/3180455131741755397/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2227556516479509948&amp;postID=3180455131741755397" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/3180455131741755397?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/3180455131741755397?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PrasannaPendse/~3/BrOy0n-sijo/what-is-object-oriented-programming.html" title="What is Object Oriented Programming?" /><author><name>Prasanna Pendse</name><uri>http://www.blogger.com/profile/12443195567331616526</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://prasannapendse.blogspot.com/2011/07/what-is-object-oriented-programming.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcBSHY7eyp7ImA9Wx5SE0g.&quot;"><id>tag:blogger.com,1999:blog-2227556516479509948.post-6820408384814281365</id><published>2010-08-08T19:12:00.000-07:00</published><updated>2010-08-09T05:14:19.803-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-09T05:14:19.803-07:00</app:edited><title>Ruby and Snow Leopard upgrade</title><content type="html">I finally decided to plonk down $29 and install Mac OS X Snow Leopard. When I tried running Cucumber, I got an error about the Gherkin lexer... "gherkin_lexer_en.bundle: mach-o, but wrong architecture". It turns out this was caused by the upgrade to Snow Leopard.&lt;br /&gt;
&lt;br /&gt;
I had to upgrade mac ports, delete all my old gems and reinstall them. I presume vendorized gems will need to add a new 64-bit version.&lt;br /&gt;
&lt;br /&gt;
Here are some links I found useful in this quest:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://weblog.rubyonrails.org/2009/8/30/upgrading-to-snow-leopard"&gt;Upgrading to Snow Leopard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mettadore.com/ruby/ruby-gems-and-snow-leopard/"&gt;Ruby gems and Snow Leopard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://norbauer.com/notebooks/code/notes/snow-leopard-upgrading-for-rails-developers"&gt;Snow Leopard Upgrading for Rails Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.macports.org/wiki/Migration"&gt;Mac Ports Migration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Hope that helps!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2227556516479509948-6820408384814281365?l=prasannapendse.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PrasannaPendse/~4/Krg3FWzqLgo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://prasannapendse.blogspot.com/feeds/6820408384814281365/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2227556516479509948&amp;postID=6820408384814281365" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/6820408384814281365?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/6820408384814281365?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PrasannaPendse/~3/Krg3FWzqLgo/ruby-and-snow-leopard-upgrade.html" title="Ruby and Snow Leopard upgrade" /><author><name>Prasanna Pendse</name><uri>http://www.blogger.com/profile/12443195567331616526</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://prasannapendse.blogspot.com/2010/08/ruby-and-snow-leopard-upgrade.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YDQnc9eSp7ImA9WxBSEEo.&quot;"><id>tag:blogger.com,1999:blog-2227556516479509948.post-6976860470555635422</id><published>2009-12-16T20:40:00.000-08:00</published><updated>2009-12-17T10:39:33.961-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-17T10:39:33.961-08:00</app:edited><title>New Relic is awesome!</title><content type="html">&lt;p&gt;We setup &lt;a href="http://www.newrelic.com/"&gt;New Relic&lt;/a&gt; in production yesterday. Its awesome! If you're running a rails project of any size, I would say its an indispensable tool.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Here's a brief review:&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;What it has meant to us:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Helped us fix 2 new performance problems in 2 hours.&lt;/li&gt;
&lt;li&gt;Helped us identify an intermittent performance problems that we hadn't been able to figure out for the last 3 months (that was mainly because we weren't allowed to increase log level or access apache logs, because of IT bureaucracy. NewRelic allowed us to side-step all of them).&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Pros:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Easy to setup. All it took was to vendorize a gem and add a yml file.&lt;/li&gt;
&lt;li&gt;The ability to see what action is taking the longest and what partial rendering is taking the longest and what sql is taking the longest is awesome.&lt;/li&gt;
&lt;li&gt;Made for rails&lt;/li&gt;
&lt;li&gt;Pretty graphs. Keeps managers busy for hours. ;-)&lt;/li&gt;
&lt;li&gt;Doesn't seem to make any material impact on the performance of the app.&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Cons:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;strike&gt;No visibility into Java code (we run on JRuby in JBoss and have to access some Java code - which is usually the problem). I wonder if there's a way to instrument it so certain calls are visible to New Relic.&lt;/strike&gt; UPDATE: Yeah, there is a way to see what the Java stuff is doing. It works as advertised, but not as automagically as the Rails logging. Also, we weren't able to get it to log to the same "application". Had to give it a new name.&lt;/li&gt;
&lt;li&gt;Rails only as far as I can tell. It won't work for your Java or .NET project. Sorry!&lt;/li&gt;
&lt;li&gt;Have noticed a couple of stack traces with "new_relic" in them. Need to investigate why.&lt;/li&gt;
&lt;li&gt;newrelic.com was down for a few minutes today. That meant we couldn't stare at the pretty graphs for that time period. Will have to see if uptime is good enough for what we're doing over the next month or so&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2227556516479509948-6976860470555635422?l=prasannapendse.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PrasannaPendse/~4/XaHbmLy--QI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://prasannapendse.blogspot.com/feeds/6976860470555635422/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2227556516479509948&amp;postID=6976860470555635422" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/6976860470555635422?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/6976860470555635422?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PrasannaPendse/~3/XaHbmLy--QI/new-relic-is-awesome.html" title="New Relic is awesome!" /><author><name>Prasanna Pendse</name><uri>http://www.blogger.com/profile/12443195567331616526</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>7</thr:total><feedburner:origLink>http://prasannapendse.blogspot.com/2009/12/new-relic-is-awesome.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEBSH07cSp7ImA9WxBTF0g.&quot;"><id>tag:blogger.com,1999:blog-2227556516479509948.post-1413450832446045660</id><published>2009-12-13T18:27:00.001-08:00</published><updated>2009-12-13T18:27:39.309-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-13T18:27:39.309-08:00</app:edited><title>On Maven</title><content type="html">Maven sucks. It's evil. It makes me want to scream! Why? Three big reasons: it hides problems, it promotes the dysfunctional organization of your team and it stains to your code like blood on cotton.&lt;br /&gt;&lt;br /&gt;I know, I know, I shouldn't be quick to judge. Any tool can be misused. Maybe if people learned to use the tool better.&lt;br /&gt;&lt;br /&gt;Uh, no!&lt;br /&gt;&lt;br /&gt;After spending several months working extensively on fixing (or introducing) continuous integration across industries, team sizes, geographies and levels of complexity, I have no doubt in my mind that Maven is the problem. And I swear I went into each engagement with an open mind - even towards Maven.&lt;br /&gt;&lt;br /&gt;The first thing that hit me is that it hides all kinds of problems. I get a jar from someone else's code. Great! I keep working, everything is great. Now I want him to add a new feature. I need to upgrade to the latest version! Oh no! The two code bases have deviated too much! Lets make a rule. We need things to be backwards compatible. Lets not change API. Lets only add new methods. Oh, and maybe if I depend on a SNAPSHOT of the other person's code. But now, he can't change his code willy-nilly. We need a change manager to coordinate changes between teams.&lt;br /&gt;&lt;br /&gt;Then the next problem hits. Hey, why are you touching that code? Its my team's code. If you want it to do that, you need to come through the change manager. Lets meet and discuss why you need to upgrade your JDK.&lt;br /&gt;&lt;br /&gt;Then a consultant comes along and says "WTF?" - you can do all this by not having artificial divisions in teams and code bases. Lets collectively own the code. If different things need to behave differently at different times, then lets refactor the code to meet these needs. But, uh, fixing it within Maven's world is cheaper and takes less time than combining all the code. Oh, and refactor - that sounds risky! Lets just keep going with what works for now even if we're a little less efficient.&lt;br /&gt;&lt;br /&gt;Little does anyone see that their development velocity is excruciatingly low and the incremental investment in maven over time is a lot larger than following a simpler path. And they are completely missing what they really need to be doing: communicating more, gelling as a team, and getting into a flow.&lt;br /&gt;&lt;br /&gt;AAARRGGGHHHH!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2227556516479509948-1413450832446045660?l=prasannapendse.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PrasannaPendse/~4/v-kmHMt5iyA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://prasannapendse.blogspot.com/feeds/1413450832446045660/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2227556516479509948&amp;postID=1413450832446045660" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/1413450832446045660?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/1413450832446045660?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PrasannaPendse/~3/v-kmHMt5iyA/on-maven.html" title="On Maven" /><author><name>Prasanna Pendse</name><uri>http://www.blogger.com/profile/12443195567331616526</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total><feedburner:origLink>http://prasannapendse.blogspot.com/2009/12/on-maven.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAFSXg-eip7ImA9WxdbE0g.&quot;"><id>tag:blogger.com,1999:blog-2227556516479509948.post-102004082908894617</id><published>2008-04-05T17:02:00.000-07:00</published><updated>2008-08-10T01:58:38.652-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-10T01:58:38.652-07:00</app:edited><title>What is education?</title><content type="html">Since 1999, I have been volunteering with &lt;a href="http://www.ashanet.org/"&gt;Asha for Education&lt;/a&gt; - a non-profit focusing on education to wedge disenfranchised communities in India towards socio-economic development.&lt;br /&gt;&lt;br /&gt;I was listening to &lt;a href="http://www.economist.com/"&gt;The Economist&lt;/a&gt; (&lt;a href="http://www.economist.com/audioedition/"&gt;audio edition&lt;/a&gt;) and it brought up the topic of financial education. I had been mulling over this topic and related topics for years and all of a sudden I had an urge to write down my thoughts. So here it goes.&lt;br /&gt;&lt;h4&gt;Political Context&lt;/h4&gt;To the British, educating Indians was a way to filter the best minds and train them to do the Empire's bidding. Initiative had to be suppressed. Meta-thinking, culturally and locally relevant knowledge had to be discarded in favor of abstract non-contextual, specific subjects. That Gandhi, Tagore and Ramanujam came out of this system might be seen as a testament to the quality of education afforded to them. However, I see it as disservice to the masses whose determination and intellect didn't reach super-human levels.&lt;p&gt;Around the world, there are many examples of explicit and implicit subjugation of inquiry for the sake of dogma. Religious indoctrination, communist propaganda, unquestioning prostrations to capitalism and nationalistic fervor are examples of the same ill - closed mindedness. Since this is exactly what education is supposed to counter, one can see how the influence of political context on education defeats the purpose.&lt;/p&gt;&lt;h4&gt;Defining Education&lt;/h4&gt;&lt;p&gt;I divide education into two realms: navigating the world as it is today and open-mindedness. The first must be relevant in your context. The second allows you to adapt with your context, or more importantly change your context as your needs evolve.&lt;/p&gt;&lt;b&gt;&lt;i&gt;Navigating the world as it is today&lt;/i&gt;&lt;/b&gt;&lt;p&gt;First, you need to be able to read, write and do arithmetic. The three-Rs. Its so obvious, right? Yet so many people, even in the west, get it oh so wrong. There are two common threads: 1) Minorities and immigrant groups are almost always behind. Eg: Lower castes in India, African-Americans in the US, Turks in Germany, new immigrants in Sweden. 2) Homogenous populations, especially of affluent communities do well.&lt;/p&gt;&lt;p&gt;That means one thing: people in power set the rules which the outsiders cannot easily navigate. So, even to do something as ‘simple’ as the 3Rs, context is king.&lt;/p&gt;&lt;p&gt;The solution is two fold: improved techniques and curriculum customized to context.&lt;/p&gt;&lt;b&gt;&lt;i&gt;Improved techniques&lt;/i&gt;&lt;/b&gt;&lt;p&gt;A critical phase where teaching techniques need to be improved are in the first six years of a child’s life. Here’s a short list:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;providing a safe environment conducive to exploring,&lt;/li&gt;&lt;li&gt;proper nutrition and physical activity,&lt;/li&gt;&lt;li&gt;using pictures and sounds at a very early age,&lt;/li&gt;&lt;li&gt;teaching words before letters,&lt;/li&gt;&lt;li&gt;exposure to multiple languages and a diverse group of people.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;None of these are new concepts. See &lt;a href="http://en.wikipedia.org/wiki/Jean_Piaget"&gt;Jean Piaget&lt;/a&gt;. Yet, somehow, we manage to de-prioritize, sacrifice or otherwise ignore them.&lt;/p&gt;&lt;i&gt;Custom Curriculum&lt;/i&gt;&lt;p&gt;The criticism for customizing curriculum circles around differing standards. How can you measure progress across the varying curricula? How do you know if you are providing ‘equal’ education? I say lets worry about that at 10th grade. Until then, the path a child takes could be and should be relevant to the particular environment the child is in. A child in coastal regions should learn how to fish and a child in a desert should learn how to ride a camel. What is important is how well they do in their environment and that isn’t always comparable.&lt;/p&gt;&lt;p&gt;Specifically, these would make a huge difference:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Building friendships with people who are different than you and are in your general neighborhood&lt;/li&gt;&lt;li&gt;Learn local crafts and skills - from where to sail to catch fish to when to sow what to how to make a pot.&lt;/li&gt;&lt;li&gt;Local language, stories and math in local context&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;There are additional aspects that are either ignored today or not universally available. Here’s another list:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Financial education&lt;/li&gt;&lt;li&gt;Entrepreneurship&lt;/li&gt;&lt;li&gt;Self-governance&lt;/li&gt;&lt;li&gt;Sex education&lt;/li&gt;&lt;li&gt;Health and sanitation&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;i&gt;Open Inquiry&lt;/i&gt;&lt;/b&gt;&lt;p&gt;When it comes to contextual learning, &lt;a href="http://en.wikipedia.org/wiki/Lev_Vygotsky"&gt;Vygotsky’s work&lt;/a&gt; is very pertinent. Given that context plays a huge role in the development of any individual, it is entirely possible to create a compliant society. However, the next challenge lies in rising above it. How do you create a self-correcting, sustainable and peaceful society? That’s where open inquiry comes in.&lt;/p&gt;&lt;p&gt;To get there, three things need to be nurtured:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Discovery oriented education&lt;/li&gt;&lt;li&gt;Initiative&lt;/li&gt;&lt;li&gt;Meta-cognition&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I remember how I learned as a child. I learned a lot of things by watching others and imitating - cricket, for instance. But I also learned things by discovering them. I discovered sewage treatment plants in the forest. I discovered Mercury (its found in thermometers). I discovered electricity (its found in batteries). I even discovered non-conformism before I ever heard of Thoreau. While following others and doing as you are told are important, the next level of learning takes place through discovery.&lt;/p&gt;&lt;p&gt;When a child discovers something, it increases self-confidence, it increases curiosity and it increases initiative. I believe discovery oriented education, be it in science, social studies, language or geography, is critical in a child’s intellectual development.&lt;/p&gt;&lt;p&gt;As self-esteem, joy of learning and initiative are established, it is also important to step outside the Vygotskian trap - that of social context. It is critical that kids are introduced to those on the other side of the tracks. Further, making friendships across caste, ethnic or class boundaries allows one to question one’s own perspectives and biases. It leads to open inquiry and a meta-level understanding of one’s society and self.&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;But why?&lt;/h4&gt;&lt;p&gt;I don’t buy into too many absolutes. The end-goal isn’t the ideal state defined by any particular ideology. To me, the end-goal is two-fold: graceful adaptability in an ever-changing world and continuous drive to make the world a little better. &lt;/p&gt;&lt;p&gt;This includes how we react to daily hurdles as well as to tragedies. Lets take tragedies first. There are several things that are tragic. The ones that get me riled up the most though are when people with the capacity to change a tragic situation don’t - either because they don’t want to go against the grain, or because they don’t see the tragedy or even worse they think somebody else should do it. Whether it be Darfur or the Tsunami or Hurricane Katrina. As a people, we can react sooner and more effectively if we (myself included) had a greater empathy, initiative and sense of responsibility. This can be developed as outlined above.&lt;/p&gt;&lt;p&gt;Day-to-day hurdles, on one hand, are a practice-field for how we react to the big ones. On the other hand, they are much more relevant and have a greater impact on each individual. How do we react to finding ourselves in debt or in a &lt;a href="http://en.wikipedia.org/wiki/Racial_segregation_in_the_United_States"&gt;racially segregated city&lt;/a&gt; (like Chicago) or in a jealous rage or in the middle of an armed conflict or around a corrupt bureaucracy?&lt;/p&gt;&lt;p&gt;I believe the answer lies in education as defined above.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2227556516479509948-102004082908894617?l=prasannapendse.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PrasannaPendse/~4/W2OJruaje34" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://prasannapendse.blogspot.com/feeds/102004082908894617/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2227556516479509948&amp;postID=102004082908894617" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/102004082908894617?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/102004082908894617?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PrasannaPendse/~3/W2OJruaje34/what-is-education.html" title="What is education?" /><author><name>Prasanna Pendse</name><uri>http://www.blogger.com/profile/12443195567331616526</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://prasannapendse.blogspot.com/2008/04/what-is-education.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUAQHYyeCp7ImA9WxdbE0g.&quot;"><id>tag:blogger.com,1999:blog-2227556516479509948.post-4801998811350168730</id><published>2008-04-04T01:33:00.000-07:00</published><updated>2008-08-10T01:34:01.890-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-10T01:34:01.890-07:00</app:edited><title>Murder!</title><content type="html">(Spoiler alert: Overlook by Michael Connelly and Simple Genius by David Baldacci)&lt;br /&gt;&lt;br /&gt;Recently, I read Overlook by Michael Connelly. A few chapters in it was pretty easy to guess who the murderer was. The story kind of dragged into terrorism and that word 'Allah'. It was a cheap attempt at exploiting both America's national fear and leaps in logic based on stereotypes. Pretty early on it was obvious that the wife - Alicia - was one of the murderers. The whole terrorism thing was just a distraction. (The victim was screaming his wife's name when he was shot - hence the sound of "Allah" immediately followed by a gun shot). Well written, good twist at the end, but not a great story, IMO.&lt;br /&gt;&lt;br /&gt;Soon after, I read Simple Genius by David Baldacci. I liked this book a lot better. The story was good and the surprises were actually unexpected and yet realistic in the context of the story. When it was discovered that one of the murder victims had a love interest in a woman named Alicia, I immediately thought of the Alicia in the Overlook and wondered if this Alicia was a murderer too.&lt;br /&gt;&lt;br /&gt;Sure enough, she was! How weird is that? Two consecutive novels with a murderer named Alicia!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2227556516479509948-4801998811350168730?l=prasannapendse.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PrasannaPendse/~4/xMiZncIdLSo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://prasannapendse.blogspot.com/feeds/4801998811350168730/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2227556516479509948&amp;postID=4801998811350168730" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/4801998811350168730?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/4801998811350168730?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PrasannaPendse/~3/xMiZncIdLSo/murder.html" title="Murder!" /><author><name>Prasanna Pendse</name><uri>http://www.blogger.com/profile/12443195567331616526</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://prasannapendse.blogspot.com/2008/04/murder.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYNRXk8cSp7ImA9WxdbE0g.&quot;"><id>tag:blogger.com,1999:blog-2227556516479509948.post-659452141146718740</id><published>2008-03-22T07:00:00.000-07:00</published><updated>2008-08-10T01:33:14.779-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-10T01:33:14.779-07:00</app:edited><title>Ctrl-R in bash</title><content type="html">I started using bash in 1996 when I installed Slackware 3.1 on a Packard Bell 486 SX2 50 MHz machine. Eleven and a half years later, I learn about Ctrl-R to reverse search commands in bash. Granted, I'd been using ksh with vi bindings for six or seven intervening years. But I should have known!&lt;br /&gt;&lt;br /&gt;Then, I come to find out bash supports all the emacs bindings. Not only that, so does TextMate. &lt;a href="http://www.gnufoo.org/macosx/"&gt;As does Cocoa&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;That is cool! Now I'm gonna have to learn all the &lt;a href="http://www.cs.colostate.edu/helpdocs/emacs-bindings"&gt;emacs bindings&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2227556516479509948-659452141146718740?l=prasannapendse.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PrasannaPendse/~4/yq1btFDJMJw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://prasannapendse.blogspot.com/feeds/659452141146718740/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2227556516479509948&amp;postID=659452141146718740" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/659452141146718740?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/659452141146718740?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PrasannaPendse/~3/yq1btFDJMJw/ctrl-r-in-bash.html" title="Ctrl-R in bash" /><author><name>Prasanna Pendse</name><uri>http://www.blogger.com/profile/12443195567331616526</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://prasannapendse.blogspot.com/2008/03/ctrl-r-in-bash.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYASHk9cSp7ImA9WxdbE0g.&quot;"><id>tag:blogger.com,1999:blog-2227556516479509948.post-8076039207343083939</id><published>2007-09-12T15:27:00.000-07:00</published><updated>2008-08-10T01:15:49.769-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-10T01:15:49.769-07:00</app:edited><title>Branching for code-reuse</title><content type="html">You wrote some code. Your app works. Now you want to do something slightly different. Timelines are tight. You want to give the new team enough control to get their job done. Yet you want to leverage what you've already done.&lt;br /&gt;&lt;br /&gt;"Lets create a branch of the same code for the new team", you say, "Once they are through their time crunch, lets integrate the two branches."&lt;br /&gt;&lt;br /&gt;Sounds simple. But there are three main problems with that:&lt;br /&gt;&lt;ol type="i"&gt;&lt;br /&gt;&lt;li&gt;The time crunch never really ends. There is no time to take a break and merge.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If you do find the time, you also find that the code has diverged to the point where merging becomes more expensive than maintaining multiple branches.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Features are added, time goes on and re-use becomes next to impossible.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;You started out thinking that re-use through branching is going to have a multiplier effect to the functionality you deliver. Initially, it is. But soon, it becomes a multiplier on how much you invest into getting simple stuff done.&lt;br /&gt;&lt;br /&gt;So, what's the right way to do it? How do we avoid this? How do you get out of it? Well, there has been a lot written on code re-use. And I really don't feel like getting into that right now. It maybe a topic for another day. Today, I just wanted to say that if you're looking to branch your source code for re-use, then don't! If you really want to, then don't expect everything to be merged back. If you really really want to merge it back, then its going to cost you!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2227556516479509948-8076039207343083939?l=prasannapendse.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PrasannaPendse/~4/nPQeGcbePyM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://prasannapendse.blogspot.com/feeds/8076039207343083939/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2227556516479509948&amp;postID=8076039207343083939" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/8076039207343083939?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/8076039207343083939?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PrasannaPendse/~3/nPQeGcbePyM/branching-for-code-reuse.html" title="Branching for code-reuse" /><author><name>Prasanna Pendse</name><uri>http://www.blogger.com/profile/12443195567331616526</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://prasannapendse.blogspot.com/2007/09/branching-for-code-reuse.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ANSX08fyp7ImA9WxdbE0g.&quot;"><id>tag:blogger.com,1999:blog-2227556516479509948.post-4538176255730718902</id><published>2007-07-04T00:21:00.000-07:00</published><updated>2008-08-10T01:09:58.377-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-10T01:09:58.377-07:00</app:edited><title>A girl named Suhasini</title><content type="html">Her father left their village in northern Karnataka to find work in Bangalore. He never returned. Three children and the social stigma of being a single mother were more than Suhasini's mother could handle. That is when Suhasini was sold for the first time.&lt;br /&gt;&lt;br /&gt;It was only four years later when she went to school again. But for Suhasini, a lifetime had passed before she landed at the orphage. Reading and writing would get easier once she learned to trust grown-ups again. She missed her mother. Or at least what she remembered of her.&lt;br /&gt;&lt;br /&gt;Suhasini was one of the lucky few. She was rescued. Millions of children have been pushed into a life much more horrifying than hers. Having been involved with Asha for Education since 1999, I have met dozens and seen hundreds of children whose life has been altered for the better by organizations fighting child labor and trafficking. Their eyes twinkle with hope and their beaming smiles remind us that while we need to find a strategic solution to this despicable injustice, the tactical solution of taking care of these kids makes the world of difference to them.&lt;br /&gt;&lt;br /&gt;This year, Asha for Education is bringing focus to these issues through our annual online fundraiser, "Work an Hour". Please visit &lt;a href="http://www.ashanet.org/workanhour"&gt;http://www.ashanet.org/workanhour&lt;/a&gt; to engage and to contribute.&lt;br /&gt;&lt;br /&gt;PS: Details of this story have been modified to protect the privacy of the kids involved.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2227556516479509948-4538176255730718902?l=prasannapendse.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PrasannaPendse/~4/TTwsl6mGbu0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://prasannapendse.blogspot.com/feeds/4538176255730718902/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2227556516479509948&amp;postID=4538176255730718902" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/4538176255730718902?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/4538176255730718902?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PrasannaPendse/~3/TTwsl6mGbu0/girl-named-suhasini.html" title="A girl named Suhasini" /><author><name>Prasanna Pendse</name><uri>http://www.blogger.com/profile/12443195567331616526</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://prasannapendse.blogspot.com/2008/07/girl-named-suhasini.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8ASXwyfyp7ImA9WxdUFE4.&quot;"><id>tag:blogger.com,1999:blog-2227556516479509948.post-7255976574689147119</id><published>2007-06-16T13:00:00.000-07:00</published><updated>2008-07-30T09:20:48.297-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-30T09:20:48.297-07:00</app:edited><title>I'm starting a blog!</title><content type="html">Woohoo! I’m excited! But what am I going to blog about? My intention is to write about two topics, primarily: socio-economic development (especially in India) and the art of software. But I’m sure other topics will creep up. We’ll see how it goes!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2227556516479509948-7255976574689147119?l=prasannapendse.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PrasannaPendse/~4/AlNAASUtyrg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://prasannapendse.blogspot.com/feeds/7255976574689147119/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2227556516479509948&amp;postID=7255976574689147119" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/7255976574689147119?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2227556516479509948/posts/default/7255976574689147119?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/PrasannaPendse/~3/AlNAASUtyrg/im-starting-blog.html" title="I'm starting a blog!" /><author><name>Prasanna Pendse</name><uri>http://www.blogger.com/profile/12443195567331616526</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://prasannapendse.blogspot.com/2007/06/im-starting-blog.html</feedburner:origLink></entry></feed>

