<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>The ByteBaker &#187; Programming</title>
	<atom:link href="http://bytebaker.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://bytebaker.com</link>
	<description>Computer Science isn&#039;t a science and it&#039;s not about computers</description>
	<lastBuildDate>Tue, 24 Aug 2010 13:12:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='bytebaker.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/6d47d9dd6b113f7f539237c5cff8cd54?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>The ByteBaker &#187; Programming</title>
		<link>http://bytebaker.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://bytebaker.com/osd.xml" title="The ByteBaker" />
	<atom:link rel='hub' href='http://bytebaker.com/?pushpress=hub'/>
		<item>
		<title>Everything is public</title>
		<link>http://bytebaker.com/2010/08/24/everything-is-public/</link>
		<comments>http://bytebaker.com/2010/08/24/everything-is-public/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 13:12:37 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[object-orientation Java C++ Ruby message-passing]]></category>

		<guid isPermaLink="false">http://bytebaker.com/?p=1176</guid>
		<description><![CDATA[Steve Yegge started blogging again recently and his second post back (which is almost a month old by now) is essentially a parody of Java&#8217;s access specifier system and the prevalence of the &#8220;private&#8221; attribute. The debate over public vs private comes up every now now and then in object-oriented programming and has its fair [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1176&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Steve Yegge started blogging again recently and <a href="http://steve-yegge.blogspot.com/2010/07/wikileaks-to-leak-5000-open-source-java.html">his second post back</a> (which is almost a month old by now) is essentially a parody of Java&#8217;s access specifier system and the prevalence of the &#8220;private&#8221; attribute. The debate over public vs private comes up every now now and then in object-oriented programming and has its fair share of people on either side of the line. So when Steve suggested that private just go away (or seemed to suggest that anyway) he of course got attacked with counter-examples and all sorts of cases where private is helpful.</p>
<p>Saying that everything should be public is certainly an idea that takes getting used to. It&#8217;s like saying that you should publish the details of your drunken escapades on your blog. It&#8217;s unsettling, but then again, the pictures are probably already on Facebook anyway. I think there are two issues here &#8212; one is for fields, and the other is for methods.</p>
<p>Though Steve seems to say that fields should be public (or have getters and setters on them), I personally tend to go the other way: fields should be private by default and only accessible through getters and setters. I like the way Ruby does it &#8212; everything is private by default but the accessors are generated by metaprogramming, so you don&#8217;t have the junk lines of getWhatever and setWhatever that you do with Java. Direct field accesses like Java and C++ allow are just bad ideas.</p>
<p>For methods things are the other way around. Firstly, I don&#8217;t like the idea of invoking methods on an object. I far prefer the Smalltalk notion of sending messages to objects and having them respond. I think it&#8217;s a far better conceptual model than methods and the private/public debate goes away in that model. If your object responds to methods, then being able to use private and public means that the object knows of and cares about where about the message is coming from. However, this breaks encapsulation. Ideally an object should respond to a particular message the same way irrespective of where the message comes from.</p>
<p>But, you say, what of the real world where ideals don&#8217;t necessarily hold? Hmm&#8230; let&#8217;s see what happens to software development under the assumption that all your methods and functions are callable from outside. To start off, you have to be careful about what parameters your methods take. You can&#8217;t assume that they&#8217;ve been pre-sanitized which means that either you&#8217;ll have to check them yourself or fail cleanly (and maybe send a stern warning up the chain). This may be a bit annoying, but I&#8217;d say it&#8217;s on the same level as dynamic typing &#8212; you&#8217;re never 100% sure of what type the arguments are so you take appropriate measures.</p>
<p>Now let&#8217;s talk about safety. One of the arguments in favor of private is that you don&#8217;t want methods to be abused and put the object in an unusable state. Again, I don&#8217;t think this is as big of a problem as it&#8217;s made up to be. It just involves rearranging where checking occurs. Presumably, if you have a private method that makes delicate changes to your object, you have a public method somewhere else that approves the changes and then calls said private method. Why not put the approval inside the private method and dispense with the public method entirely? If you want to make a change to an object, call a method to do it. If it works, fine. If not you get an error back.</p>
<p>I should make it clear at this point, that I don&#8217;t have any real world example to back up my claim (at least no examples that aren&#8217;t hopelessly contrived). What I&#8217;m talking is refactoring to meet a design constraint &#8212; that of total publicness. People will kick and scream and say that it breaks their careful separation of functionality into methods, but I think it&#8217;s just a design pattern, like dependency injection for example. And the trade-off to that is probably more flexible, more powerful software systems.</p>
<p>If everything is public (and designed from the ground up to be public) you start writing code that&#8217;s meant to be used by other code. Which in turn makes it easier to use and extend your code. I think you&#8217;ll eventually end up with something like Emacs &#8212; lots of public functions that do useful things to an object (the text in the editor) and an awesome array of functionality made possible by using these public functions. There is a fundamental change in programming and building ideology that needs to take place. With full publicness you can&#8217;t have a nicely bureaucratic language like Java. You&#8217;re going to end up with something that&#8217;s far more open and flexible like Ruby, Python or *shudder* Lisp.</p>
<p>I think that a lot of the heightened discussion surrounding Steve&#8217;s suggestion stems from the nature of the Java language. It&#8217;s certainly meant to be used by large corporate teams and is designed to stop programmers from hurting themselves (or stepping onto someone else&#8217;s turf). &#8220;Bureaucratic&#8221; is perhaps the best way to describe the language. If you take out private from a language like that, you lose most of its raison d&#8217;etre. So is private a good thing? Probably not. Does it need to stay in Java? Probably.</p>
<p>I&#8217;d like to reiterate that I think that message-passing is a superior way to think about object-orientation and it makes the public/private debate unnecessary. That&#8217;s why the language I&#8217;m building for my thesis will have message-passing. I&#8217;m also stealing Ruby&#8217;s private-by-default and metaprogramming for accessors.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bytebaker.wordpress.com/1176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bytebaker.wordpress.com/1176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bytebaker.wordpress.com/1176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bytebaker.wordpress.com/1176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bytebaker.wordpress.com/1176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bytebaker.wordpress.com/1176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bytebaker.wordpress.com/1176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bytebaker.wordpress.com/1176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bytebaker.wordpress.com/1176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bytebaker.wordpress.com/1176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bytebaker.wordpress.com/1176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bytebaker.wordpress.com/1176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bytebaker.wordpress.com/1176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bytebaker.wordpress.com/1176/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1176&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2010/08/24/everything-is-public/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcafd7571cc4c82dd3e31c7e728eb2d9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Basu</media:title>
		</media:content>
	</item>
		<item>
		<title>Revamping the ByteBaker series</title>
		<link>http://bytebaker.com/2010/07/22/revamping-the-bytebaker-series/</link>
		<comments>http://bytebaker.com/2010/07/22/revamping-the-bytebaker-series/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 14:15:21 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[diigo]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[tumblr]]></category>

		<guid isPermaLink="false">http://bytebaker.com/?p=1129</guid>
		<description><![CDATA[Not too long ago I started writing series of posts on The ByteBaker. I started two of them: Powerful Python and Sunday Selections. Powerful Python was a series of posts about the Python programming languages and how its features make it easier for programmers to write code. As it stands now there are four posts [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1129&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Not too long ago I started writing series of posts on The ByteBaker. I started two of them: Powerful Python and Sunday Selections.</p>
<p><a href="http://bytebaker.files.wordpress.com/2009/03/python.jpg"><img class="alignright size-full wp-image-1126" title="python" src="http://bytebaker.files.wordpress.com/2009/03/python.jpg?w=178&#038;h=242" alt="Python" width="178" height="242" /></a><a href="http://bytebaker.com/2009/03/26/powerful-python/">Powerful Python</a> was a series of posts about the Python programming languages and how its features make it easier for programmers to write code. As it stands now there are four posts in this series:</p>
<ul>
<li><a href="http://bytebaker.com/2008/07/30/python-namespaces/">A guide to  Python namespaces</a></li>
<li><a href="http://bytebaker.com/2008/11/03/switch-case-statement-in-python/">Switch-case  statement in Python</a></li>
<li><a href="http://bytebaker.com/2009/03/31/python-properties-vs-java-access-modifiers/">Python  properties vs Java Access Specifiers</a></li>
<li><a href="http://bytebaker.com/2009/08/17/switch-case-statement-in-python-revisited/">Switch-case statement in Python revisited</a></li>
</ul>
<p>Python is the language that I&#8217;m most familiar with and have written the most code in. Over the last month or so I&#8217;ve been writing Python day in day out and really exercising my Python chops (as well as getting acquainted with features like generators and decorators).  Over the next few weeks I&#8217;m going to be writing more posts exploring Python and adding them to the Powerful Python series. If you regularly write code in Python or just have a passing interest, this is something you&#8217;re going to like.</p>
<p>The second series that I had was Sunday Selections. I try to post two to three times a week, but I didn&#8217;t want to leave the weekends completely bare. I also wanted to spend my weekends doing other things (preferably away from the computer). So I started a series where every Sunday I would post links (with brief intros) to interesting things that I had found the week before. I&#8217;ll admit that I haven&#8217;t been very stable with the post schedule, partly because I kept forgetting or losing what I had found and really didn&#8217;t want to go hunting around the intertubes for whatever it is that I liked.</p>
<p>Over the past few months I&#8217;ve become much better at holding onto things I find online. Using Diigo for bookmarks and Tumblr for &#8220;scrapbooking&#8221; the web I&#8217;ve been managing to keep a good record of all the wonderful stuff I&#8217;ve found (and there is a lot of it). So I&#8217;m bringing back Sunday Selections as well (starting this Sunday) so stay tuned for a steady flow of Internet-y goodness.</p>
<p>I&#8217;m really looking forward to writing series posts again. I feel like my writing can sometimes get either monotonous or spread all over the place without any focus. I&#8217;m hoping that the series (especially the Powerful Python series) will provide a good path for me to write articles that are coherent and progress along a definite line. Stay tuned.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bytebaker.wordpress.com/1129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bytebaker.wordpress.com/1129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bytebaker.wordpress.com/1129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bytebaker.wordpress.com/1129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bytebaker.wordpress.com/1129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bytebaker.wordpress.com/1129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bytebaker.wordpress.com/1129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bytebaker.wordpress.com/1129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bytebaker.wordpress.com/1129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bytebaker.wordpress.com/1129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bytebaker.wordpress.com/1129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bytebaker.wordpress.com/1129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bytebaker.wordpress.com/1129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bytebaker.wordpress.com/1129/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1129&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2010/07/22/revamping-the-bytebaker-series/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcafd7571cc4c82dd3e31c7e728eb2d9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Basu</media:title>
		</media:content>

		<media:content url="http://bytebaker.files.wordpress.com/2009/03/python.jpg" medium="image">
			<media:title type="html">python</media:title>
		</media:content>
	</item>
		<item>
		<title>Inception and abstraction</title>
		<link>http://bytebaker.com/2010/07/20/inception-and-abstraction/</link>
		<comments>http://bytebaker.com/2010/07/20/inception-and-abstraction/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 21:10:32 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[object oriented programming]]></category>
		<category><![CDATA[inception]]></category>
		<category><![CDATA[closures]]></category>
		<category><![CDATA[recursion]]></category>

		<guid isPermaLink="false">http://bytebaker.com/?p=1113</guid>
		<description><![CDATA[I watched Inception with friends last Saturday. I really enjoyed it and thought it was really well made, though it&#8217;s certainly a complex movie which you need to pay attention to. Considering that most of the readers of The ByteBaker are computer savvy (and probably programmers) you&#8217;re going to like it (or hate it) very [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1113&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I watched <a href="http://www.imdb.com/title/tt1375666/">Inception</a> with friends last Saturday. I really enjoyed it and thought it was really well made, though it&#8217;s certainly a complex movie which you need to pay attention to. Considering that most of the readers of The ByteBaker are computer savvy (and probably programmers) you&#8217;re going to like it (or hate it) very much because it touches on some of our core concepts: recursion, closures and abstraction. In this way, it&#8217;s not all that much different from the Matrix &#8212; different premise and plotline but a very similar feel.</p>
<p>Without dropping any spoilers here&#8217;s what you need to know about the movie for the rest of the article: it&#8217;s about people who go into other people&#8217;s dreams in order to steal their secrets. Pretty simple, right? The kicker is that it&#8217;s possible to dream <em>inside </em>another dream leading to all sorts of interesting situations and plot twists. Ok, so that&#8217;s not quite recursion since that would mean that the subject would be dreaming the same dream inside the dream (confused yet?). Come to think of it the dreams of Inception are more like closures.</p>
<p>So what are closures? Wikipedia tells us that:</p>
<blockquote><p>In <a title="Computer science" href="http://en.wikipedia.org/wiki/Computer_science">computer science</a>, a <strong>closure</strong> is a <a title="First-class function" href="http://en.wikipedia.org/wiki/First-class_function">first-class function</a> with <a title="Free variables and bound variables" href="http://en.wikipedia.org/wiki/Free_variables_and_bound_variables">free variables</a> that are <a title="Name binding" href="http://en.wikipedia.org/wiki/Name_binding">bound</a> in the <a title="Lexical environment" href="http://en.wikipedia.org/wiki/Lexical_environment">lexical environment</a>.</p></blockquote>
<p>Perfectly understandable, right? No? Ok let&#8217;s translate. First and foremost, a closure is a function. But it&#8217;s not just any old run-of-the-mill function. A closure generally contains variables that are neither local variables nor arguments to that function. So what do those variables refer to? Their values come from <em>outside</em> the function, specifically the code block that surrounds the function. The wikipedia page on closures gives examples in a number of languages. Though closures aren&#8217;t necessarily a part of a standard curriculum they are extremely powerful constructs that can be used to implement a host of other programming language features (including control flow structures and object systems). Coming back to Inception, once you are inside a dream you can recall  the world outside (though the real world seems like a dream so everything&#8217;s a bit fuzzy). <a href="http://bytebaker.files.wordpress.com/2010/07/recursion.png"><img class="alignright size-full wp-image-1118" title="Recursion" src="http://bytebaker.files.wordpress.com/2010/07/recursion.png?w=360&#038;h=288" alt="" width="360" height="288" /></a></p>
<p>Closures in computer science (and dreams in Inception) are important because they are a prime example of abstraction. Functions are a powerful concept because they essentially let you create little worlds in which you can do stuff. You put something in a function and get something out. You don&#8217;t need to know or care about what&#8217;s going on inside the function (unless something goes wrong, but that&#8217;s a different matter entirely). Functions let you abstract away processes. Closures improve upon functions and let you abstract state. If you&#8217;re using a function that&#8217;s a closure, you don&#8217;t need to know about what it&#8217;s variables are bound to (except the ones you pass in) and you can&#8217;t see what data the closure can manipulate either.</p>
<p>By tucking away state, closures give us less to hold in our minds and make it easier to write code that&#8217;s clean and follows the Single Responsibility Principle (essentially, do one thing and do it well). Suppose you have a bunch of closures inside one larger function. Now magically you have sections of executable code that all operates on the same data and yet can do completely different things. They can also do all this without having to passing in a host of arguments every time (which reduces the chance for making mistakes). Whenever the closures need something, they just refer to their outer environment. Sound familiar? It should because I just described objects and methods. And that is the hallmark of a good abstraction &#8212; it lets you build up other abstractions on top.</p>
<p>Abstractions are in general a good thing. But unless you think through your abstractions, they can be bad. A leaky abstraction is one that doesn&#8217;t quite get it right. The underlying layers somehow &#8220;leak through&#8221; what should be the abstraction&#8217;s water tight boundaries. Joel Spolsky has a <a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html">very good article</a> on leaky abstraction that&#8217;s a must read if you want to learn more. And while we&#8217;re on the topic of abstraction &#8212; too much can be a bad thing. I wrote a Python program two summers ago to experiment with L-systems. Last summer I tried rewriting it such that everything in the system was the instance of some class. Everything was supposed to go through methods and abstraction boundaries. I never finished. This summer I toned it down a little and got a working version in about a week. Yes, this is classic second system effect, but it also shows that sometimes abstractions will just get in the way and force you to jump through hoops.</p>
<p>In conclusion: abstractions are good if used wisely. Closures are one such powerful abstraction. Dream safe.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bytebaker.wordpress.com/1113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bytebaker.wordpress.com/1113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bytebaker.wordpress.com/1113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bytebaker.wordpress.com/1113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bytebaker.wordpress.com/1113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bytebaker.wordpress.com/1113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bytebaker.wordpress.com/1113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bytebaker.wordpress.com/1113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bytebaker.wordpress.com/1113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bytebaker.wordpress.com/1113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bytebaker.wordpress.com/1113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bytebaker.wordpress.com/1113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bytebaker.wordpress.com/1113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bytebaker.wordpress.com/1113/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1113&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2010/07/20/inception-and-abstraction/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcafd7571cc4c82dd3e31c7e728eb2d9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Basu</media:title>
		</media:content>

		<media:content url="http://bytebaker.files.wordpress.com/2010/07/recursion.png" medium="image">
			<media:title type="html">Recursion</media:title>
		</media:content>
	</item>
		<item>
		<title>Getting to some hardware hacking</title>
		<link>http://bytebaker.com/2010/06/28/getting-to-some-hardware-hacking/</link>
		<comments>http://bytebaker.com/2010/06/28/getting-to-some-hardware-hacking/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 16:54:04 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://bytebaker.com/?p=1102</guid>
		<description><![CDATA[I&#8217;m definitely more of a software person than I am a hardware hacker. Even though I&#8217;m getting an electrical engineering degree and like working with low level programmer, I&#8217;m still more comfortable writing code than I am soldering a circuit board.  That being said there is a certain amount of magic involved in being able [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1102&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m definitely more of a software person than I am a hardware hacker. Even though I&#8217;m getting an electrical engineering degree and like working with low level programmer, I&#8217;m still more comfortable writing code than I am soldering a circuit board.  That being said there is a certain amount of magic involved in being able to wire up something that does cool things from spare parts and tiny electronic components. Especially after looking at the stories on Hack a Day for a while I&#8217;ve been really intersted in doing something that doesn&#8217;t involve just punching away at a keyboard.</p>
<p>The question is, what? My suitemate has a projector and we have 3 couches in our lounge (don&#8217;t ask) so yesterday evening we had an impromptu movie party, watching Hangover and eating homemade popcorn. Said suitemate also has a bunch of lights hooked up to a dimmer switch and 5.1 surround sound. So while we were waiting for the projector to warm up a friend of ours decided to play the DJ and plugged his Macbook into the sound system. And while the music was playing yet another tried running switch to the tune of the music. Of course he was much too slow to keep pace but it gave me the idea of trying to set up some electronics so that the dimmer switch (and hence the lights in the room) would modulate along with the music.</p>
<p>The next question is: how? And that&#8217;s not something that I&#8217;ve quite figured out yet. I&#8217;d like to use the Arduino, since I&#8217;ve heard good things about it and I know people on campus who have some experience with it. And since I want to some audio sampling and processing I&#8217;d like something with a decent amount of processsing power. I have no experience with the Arduino at all but one of the people that I&#8217;m working with over summer does (he&#8217;s the one who started playing wiht the dimmer in the first place). I&#8217;m starting my trawling around the <a href="http://www.arduino.cc/">Arduino website</a> and looking over the specs and getting used to the programming environment for it. I technically have all summer to play around with it, but I would like to have a working prototype ready in two weeks (in time for my birthday). I&#8217;m open to suggestions, tips and tricks so if there any Arduino wizards reading this, feel free to drop me a line.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bytebaker.wordpress.com/1102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bytebaker.wordpress.com/1102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bytebaker.wordpress.com/1102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bytebaker.wordpress.com/1102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bytebaker.wordpress.com/1102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bytebaker.wordpress.com/1102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bytebaker.wordpress.com/1102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bytebaker.wordpress.com/1102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bytebaker.wordpress.com/1102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bytebaker.wordpress.com/1102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bytebaker.wordpress.com/1102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bytebaker.wordpress.com/1102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bytebaker.wordpress.com/1102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bytebaker.wordpress.com/1102/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1102&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2010/06/28/getting-to-some-hardware-hacking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcafd7571cc4c82dd3e31c7e728eb2d9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Basu</media:title>
		</media:content>
	</item>
		<item>
		<title>What are the important problems in computer technology?</title>
		<link>http://bytebaker.com/2010/05/18/what-are-the-important-problems-in-computer-technology/</link>
		<comments>http://bytebaker.com/2010/05/18/what-are-the-important-problems-in-computer-technology/#comments</comments>
		<pubDate>Tue, 18 May 2010 14:22:13 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://bytebaker.com/?p=1090</guid>
		<description><![CDATA[Exams are over, summer is here and it&#8217;s time to think about how I&#8217;ll be spending my time over summer and then the rest of the year. Next year is going to be my last year as a undergraduate student and I plan on working on a honors thesis. I&#8217;m really looking forward to work [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1090&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Exams are over, summer is here and it&#8217;s time to think about how I&#8217;ll be spending my time over summer and then the rest of the year. Next year is going to be my last year as a undergraduate student and I plan on working on a honors thesis. I&#8217;m really looking forward to work on it since I like doing research and being able to work independently. The problem is that I need a specific topic and I&#8217;m having a hard time focusing on one. I don&#8217;t want to do something that&#8217;s already been done, or something that&#8217;s superspecialized to death, but I don&#8217;t want to bite off more than I can choose. I&#8217;m going to have about 9 months, part time, with other courses and graduate school applications and at the end of it, I want to have something that&#8217;s a clean finished product (as cleanly finished as research products ever get).</p>
<p>The problem with being a undergraduate researcher is that I don&#8217;t have enough experience to know how big of a project is a good size. Again, I don&#8217;t want to think too much about this and end up limiting myself from what I can achieve. So how should I choose my project? First, I want to get my priorities straight. I&#8217;d rather do something that&#8217;s ambitious and end up with something that&#8217;s a litte incomplete than do something I can neatly finish, but is mundane and unexciting. That being said, I don&#8217;t want to do something that I have no chance of finishing. I&#8217;m not looking to prove or disprove P = NP (and I&#8217;m not a theory guy anyway) but I don&#8217;t want to write yet another Python/Ruby/Java clone.</p>
<p>I remember reading Paul Graham&#8217;s <a href="http://www.paulgraham.com/procrastination.html">essay on procrastination</a> a while ago. What stuck out to me most was his summary of Richard Hamming&#8217;s <a href="http://www.paulgraham.com/hamming.html">essay on research</a>. One of the core themes on that essay is asking yourself three basic questions:</p>
<ol>
<li>What are the important problems in your field?</li>
<li>Are you working on one of them?</li>
<li>Why not?</li>
</ol>
<p>Hamming was talking to professional scientists and researchers and I&#8217;m just a wee young undergraduate working on an honors thesis, but it&#8217;s never too early to get started. So, in keeping with Hamming&#8217;s excellent advice, what are the important problems in computer science? Now that&#8217;s a tricky one. Of course, there are the classic ones. Prove or disprove P = NP, build true AI, build a working quantum computer etc. etc. Then there are the ones with been-there done-that written all over them. For example, the current software stack is a bit of a mess so let&#8217;s build a unified top-to-bottom hardware-software solution all in Lisp (along with a YouTube viewer).</p>
<p>But seriously, what&#8217;s a real, current problem that I can take a chunk of and have a hope of solving? For starters, there&#8217;s parallel computation. Engineers are piling the core on with no sign of stopping and we have absolutely no idea what to do with all of them. Most of our software is still inherently single threaded and keeping up with concurrency with all the ills of shared memory are a pain to keep up with. New programming languages and innovations like software transactional memory are doing a valiant effort, but they still aren&#8217;t tools that you can ship off to everday programmers and have them cranking out parallel code. I&#8217;ve been studying parallel code (mostly in terms of GPUs) for last semester and it&#8217;s definitely something I can get into. However parallel computing is still a wide area and I&#8217;d need to find something more specific. I&#8217;m working on a different sort of parallelization over the summer (MapReduce with Hadoop) so that&#8217;ll give me something more to think about.</p>
<p>I <a href="http://bbs.archlinux.org/viewtopic.php?id=97232">posted to the Arch Linux forum</a> about just this issue and one of the replies that came up multiple times was network security. The internet is everywhere and a computer without a network computer in this age is pretty much useless. And when you connect your computer to dozens of other ones spread out all acrosss the world, there&#8217;s a good chance that one or more of them don&#8217;t want to play nice. With botnets, viruses, trojans, worms and the like being a daily reality security is important and no seems to have a solution that&#8217;s even remotely bulletproof. Unfortunately for me, security just doesn&#8217;t interest me that much. I&#8217;d rather be building interesting stuff than holding down the fort. So on to the next one.</p>
<p>I&#8217;m interested in the way that people interact with their machines, not really in the up-front, HCI sense, but in a more general sense. One problem that I find interesting is how we can manage all the data we have on our machines without having to explicitly name (and then remember the name of) each and every single piece. The filesystem metaphor does not scale to thousands of songs and images or to the many tiny bits of text and video that we&#8217;re continually sharing with each other. Unfortunately, none of the popular operating systems seem to be meeting this challenge head on (iLife is going in the right direction, but the ideas need to spread to the rest of the system). I&#8217;d love to come up with an implementation of a file-less, data centric user model, probably along the lines to what the Etoile project is trying to accomplish. This is certainly something that I&#8217;ll be thinking about more (and I need to come up with a more theoretical basis for an honors project).</p>
<p>There are probably a bunch of other things that could qualify for being among the most important problems in computer science and I could add another few thousand words to this post. But sufficeth to say that this is still something that I need to give a lot more thought to. I still have no idea what my thesis topic could be, but I know what I&#8217;ll be doing over summer. I&#8217;m not going to be solving the multicore crisis or building a completely new operating system from scratch, but I&#8217;m definitely going to be taking my best crack at it.</p>
<p><span style="font-family:verdana;font-size:x-small;"><br />
</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bytebaker.wordpress.com/1090/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bytebaker.wordpress.com/1090/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bytebaker.wordpress.com/1090/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bytebaker.wordpress.com/1090/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bytebaker.wordpress.com/1090/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bytebaker.wordpress.com/1090/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bytebaker.wordpress.com/1090/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bytebaker.wordpress.com/1090/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bytebaker.wordpress.com/1090/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bytebaker.wordpress.com/1090/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bytebaker.wordpress.com/1090/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bytebaker.wordpress.com/1090/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bytebaker.wordpress.com/1090/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bytebaker.wordpress.com/1090/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1090&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2010/05/18/what-are-the-important-problems-in-computer-technology/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcafd7571cc4c82dd3e31c7e728eb2d9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Basu</media:title>
		</media:content>
	</item>
		<item>
		<title>Flamenco dancers, programmers and excellence</title>
		<link>http://bytebaker.com/2010/03/11/flamenco-dancers-programmers-and-excellence/</link>
		<comments>http://bytebaker.com/2010/03/11/flamenco-dancers-programmers-and-excellence/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 14:59:06 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[computer science]]></category>
		<category><![CDATA[excellence]]></category>
		<category><![CDATA[flamenco]]></category>
		<category><![CDATA[practice]]></category>

		<guid isPermaLink="false">http://bytebaker.com/?p=1050</guid>
		<description><![CDATA[Tuesday night I went to see a Flamenco performance by the Flamenco Vivo Carlota Santana company. It was a wonderful performance, especially the second half (at least that&#8217;s what I think, knowing nothing of flamenco). It must have them days of practice to get the choreography and music down right and years to get to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1050&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Tuesday night I went to see a Flamenco performance by the <a href="http://www.flamenco-vivo.org/">Flamenco Vivo Carlota Santana</a> company. It was a wonderful performance, especially the second half (at least that&#8217;s what I think, knowing nothing of flamenco). It must have them days of practice to get the choreography and music down right and years to get to the point where they could actually move the way did. Not to mention, the continuing time and effort investment in keeping in physical shape and on top of their game. Being the nearly obsessed student of programming that I am, I of course thought about programming as well.</p>
<p>It&#8217;s occurred to me more than once that I really don&#8217;t know many great programmers. I go to a small school and most of my fellow students are about the same level as I am (or lower). Actually I don&#8217;t really know what level they are on because I don&#8217;t get to work with them as much as I would have to in order to find out. There is only one person whom I can say for certain is a better programmer than I am and I&#8217;m currently doing a project with him. My professors are good computer scientists, but I have no idea how good at programming they are.</p>
<p>But from what I&#8217;ve read (and what I can attest to from personal experience, to some extent) achieving excellence in any field (especially programming) requires a lot of dedication and hard work &#8212; about <a href="http://bytebaker.com/2008/11/17/10000-hours-of-programming/">10,000 hours</a> of it. I&#8217;ve thought about whether or not it really is worth it to invest so much time in one activity, even if you really love it. I love spinning code, but I don&#8217;t want to be sitting in front of a bright screen all the time. Watching the dancers the other night, I got to see what dedicated practice can bring. They put on a great performance and everyone enjoyed it (including myself) and creating something beautiful and wondrous is a worthy cause. But I&#8217;m also interested in getting to know about what they dancers themselves think about their work. I&#8217;d love to know their feelings and emotions as they dance and have people cheer and whether they think it&#8217;s fair compensation for their commitment. And I don&#8217;t mean compensation in only the monetary sense, though that is important too.</p>
<p>Admittedly there is nothing in the programming world that is quite the same as a great dance performance. Our victories are more personal and what people see (and sometimes applaud us for) is often a small sliver of everything that we do. But that&#8217;s fine by me. When I solve a hard problem after a long time (my personal record is 3 hours hunting a pointer bug) or make something that I think is really cool (a recursive-descent parser for a little language), I think I feel some of the elation, satisfaction and relief that I think the dancers would have felt too. Yes, it does feel really good. As each year goes by I get better at doing what I love doing. But I rarely ever think about all the practice and experience that has gone into making me capable of whatever it is I am doing. Not too long ago, I would never have imagined myself capable of writing a UNIX shell or designing a programming language, but know I am doing both those things and it feels almost natural.</p>
<p>Ok, that last sentence was a lie. It doesn&#8217;t feel natural, but it feels like it&#8217;s just outside the range of being natural. When I&#8217;m doing things like that, I&#8217;m on the <a href="http://www.scotthyoung.com/blog/2010/01/25/living-on-the-edge-of-incompetence/">edge of incompetence</a>. It was hard and it was painful, but now that I know I can do it, I feel much better. In some ways, I wish such chances came more often (I think the education system for computer-related studies needs to be revamped significantly, but that&#8217;s another matter) and I know that each such experience leaves me just a little bit better. Do flamenco dancers feel the same way? Maybe. It would be interesting to find out.</p>
<p>Excellence is a rather strange thing in that it&#8217;s hard to achieve and the return on investment on its pursuit can be very little until you get to a certain tipping point. And then there all the people who <strong>seem </strong>to be trying really hard without getting anywhere. I&#8217;m not surprised that many people choose not to put in the investments that it takes to be excellent. As a girl I liked once told me, there are a lot of people leading average lives who are very happy about it. I guess that&#8217;s true. I&#8217;m not clear about where I stand on excellence myself. I do want to be really good at what I want to do and I fully understand that it won&#8217;t be easy. But I also don&#8217;t want to give up everything on the quest for excellence. &#8220;No sacrifice, no victory&#8221; sounds very noble and all, but there&#8217;s a tinge of recklessness that I really don&#8217;t like.</p>
<p>At this point, the word &#8220;balance&#8221; might seem appropriate. But that&#8217;s bullshit too. I don&#8217;t think people who are great at something got there by seeking balance. The better option is breaking the rules, or at least fracturing them. The prime example is 37signals. They&#8217;re a small company, with little VC funding who don&#8217;t give away their products for free and still make millions of dollars. And they didn&#8217;t do it by working round the clock either. They broke &#8220;rules&#8221; like working 80 hours a week and making free products and other such things. But they also knew what rules to break. They didn&#8217;t break rules about being thrifty or having a solid business plan. They might not be the paragon of excellence and they&#8217;re certainly arrogant, but they&#8217;re doing well so far.</p>
<p>As someone seeking excellence myself, I&#8217;m trying to bend my own set of rules. I bend rules by taking courses out of sequence, doing independent studies where I can write lots of code and meet interesting people and actively trying to talk to people I admire. I need to put in 10,000 hours, so I build my life to provide opportunities to do just that. I really wish that there were a lot more people doing the same.</p>
<p>Happy hacking.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bytebaker.wordpress.com/1050/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bytebaker.wordpress.com/1050/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bytebaker.wordpress.com/1050/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bytebaker.wordpress.com/1050/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bytebaker.wordpress.com/1050/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bytebaker.wordpress.com/1050/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bytebaker.wordpress.com/1050/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bytebaker.wordpress.com/1050/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bytebaker.wordpress.com/1050/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bytebaker.wordpress.com/1050/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bytebaker.wordpress.com/1050/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bytebaker.wordpress.com/1050/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bytebaker.wordpress.com/1050/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bytebaker.wordpress.com/1050/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1050&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2010/03/11/flamenco-dancers-programmers-and-excellence/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcafd7571cc4c82dd3e31c7e728eb2d9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Basu</media:title>
		</media:content>
	</item>
		<item>
		<title>On Essays</title>
		<link>http://bytebaker.com/2010/03/02/on-essays/</link>
		<comments>http://bytebaker.com/2010/03/02/on-essays/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 16:11:22 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[blogs]]></category>
		<category><![CDATA[essays]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://bytebaker.com/?p=1042</guid>
		<description><![CDATA[I&#8217;ve been thinking about essays on and off for the past few days. It all started when I was in the process of updating my static HTML website that I call Basu:shr. I have a section called essays which is currently populated mostly with papers that I wrote for various courses at college. Looking over [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1042&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been thinking about essays on and off for the past few days. It all started when I was in the process of updating my static HTML website that I call <a href="http://basushr.net">Basu:shr</a>. I have a section called <a href="http://basushr.net/essays">essays</a> which is currently populated mostly with papers that I wrote for various courses at college. Looking over some of my older work I realized that I didn&#8217;t really write longer pieces anymore. This blog is my primary writing activity at the moment and most of my posts are in the 700 to 1000 word range. I&#8217;m perfectly happy writing short articles because I&#8217;ve always admired brevity and conciseness (which is why I like Twitter as well). But at the same time, I&#8217;m slightly worried that I might be losing the ability of writing longer, more detailed pieces.</p>
<h2>Ars Longa, Vita Brevis</h2>
<p>As I&#8217;ve <a href="http://bytebaker.com/2010/02/16/ars-longa-vita-brevis/">pondered before</a>, life is short and it takes a fair amount of dedicated effort and time to come up with something beautiful and useful. With the rise of the Internet and instantaneous communications, we&#8217;re becoming a culture that is very much used to continuous streams of small information packets. The essay is becoming a holdover from the old days when having long periods of times to do nothing but sit and read was common. However, there are a number of really good essayists alive today, and a lot of them are on the Internet. There&#8217;s Paul Graham, <a href="http://paulgraham.com/articles.html">whose essays</a> are practically the stuff of legend for programmers. There is also Steve Yegge who seems to have retired, but left behind a fairly large collection of <a href="http://steve-yegge.blogspot.com/">essay-length</a> <a href="http://steve.yegge.googlepages.com/blog-rants">material</a> (including an article on why <a href="http://steve.yegge.googlepages.com/you-should-write-blogs">you should write a blog</a>). Outside the Internet there is Warren Buffet who has written long detailed <a href="http://www.berkshirehathaway.com/letters/letters.html">letters to shareholders</a> for the last 32 years each of which is an education in and of itself (and I can&#8217;t help but wonder how many shareholders actually read through them all).</p>
<p>I don&#8217;t think I&#8217;m making a mistake when I say that the essay is still alive and well today, albeit in somewhat modified forms. But the fact remains that putting out something of such length and depth takes up a lot of time and energy (not to mention the countless hours that go into accumulating the knowledge and organizing the thoughts that must flow into such a work). In many ways, writing an essay is similar to a software project. There is planning and preparation that must happen upfront, but nothing is really for certain until you sit down and start writing. Writing a good essay that other people will want to read and tell their friends about is no easier than writing good software that others will want to use.</p>
<h2>Blog meet Essay</h2>
<p>The blog and the essay are fundamentally different things. A blog is a magazine compared to an essay&#8217;s book. The blog as a format is great for some things: without easy blogging I probably wouldn&#8217;t be writing at all. But the rise of blogs (and accompanying software) has left the long form essay in the dark. You could simply write long articles and put them on your blog like Steve Yegge. But reverse chronological ordering really isn&#8217;t the best format for a collection of essays. For small numbers, a simple list of titles, maybe with a blurb is probably the best. Once you get to a larger number (Paul Graham for example), a simple list doesn&#8217;t cut it any more.</p>
<p>There is also the actual writing experience. Whenever you write a longer piece over the course of many days, you start to go back and visit the old parts. Part of it is for editing, but you also want to read what you&#8217;ve read before so that you know you&#8217;re keeping your essay coherent. Blog software doesn&#8217;t easily let you do this. I know WordPress stores revisions, but there doesn&#8217;t seem to be an easy, upfront way to see diffs of different versions against each other. I suppose a wiki could be better as an essay platform. Dokuwiki has excellent visual diff function and Writeboard also lets you compare versions.</p>
<p>Perhaps we do need some sort of specialized software for writing essays. Something that puts drafting editing at the center as opposed to at the edges. Personally I&#8217;ve been using Emacs with Git to get some of the same result, but I would really like to see a webapp that can do something like that. After all, there isn&#8217;t much use in writing an essay if no one is going to read it (and how better to get people to read it than to put it out on the Internet).</p>
<h2>I, Essayist</h2>
<p>Even though there may be no quick-and-easy publishing solution like WordPress for essays, writing an essay is far less dependent on tech tools than most other things today. Like I said before, Emacs and Git do a fairly good job together. I would like to be able to put all my drafts online with some sort of commenting system so that people can see the evolution of my essays, but I&#8217;ll settle for just being able to show a final product.</p>
<p>Separate from showing the essay is the mental exercise of actually sitting down and writing the essay (and then revising and editing). That&#8217;s something that I&#8217;ll have to get back into the habit of doing and will probably take time. Subject matter is also an issue, but a good starting point would be to simply expand on the themes that I cover in this blog, while making sure that people who read my blog can read my essays without getting bored (and vice versa). Expect my first essay to be on essays, sometime in the next few weeks.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bytebaker.wordpress.com/1042/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bytebaker.wordpress.com/1042/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bytebaker.wordpress.com/1042/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bytebaker.wordpress.com/1042/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bytebaker.wordpress.com/1042/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bytebaker.wordpress.com/1042/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bytebaker.wordpress.com/1042/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bytebaker.wordpress.com/1042/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bytebaker.wordpress.com/1042/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bytebaker.wordpress.com/1042/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bytebaker.wordpress.com/1042/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bytebaker.wordpress.com/1042/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bytebaker.wordpress.com/1042/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bytebaker.wordpress.com/1042/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1042&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2010/03/02/on-essays/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcafd7571cc4c82dd3e31c7e728eb2d9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Basu</media:title>
		</media:content>
	</item>
		<item>
		<title>Lindenmayer Systems in Processing</title>
		<link>http://bytebaker.com/2010/02/22/lindenmayer-systems-in-processing/</link>
		<comments>http://bytebaker.com/2010/02/22/lindenmayer-systems-in-processing/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 13:42:48 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[drawing]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[turtle]]></category>

		<guid isPermaLink="false">http://bytebaker.com/?p=1036</guid>
		<description><![CDATA[Processing is a really powerful language and environment for programming images, animations and visual interactions. For the past few years I&#8217;ve had a passing interest in creating art using computation (thanks in no small part to a few great teachers). This semester I decided to buckle down and get to work doing some cool stuff [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1036&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://processing.org/">Processing</a> is a really powerful language and environment for programming images, animations and visual interactions. For the past few years I&#8217;ve had a passing interest in creating art using computation (thanks in no small part to a few great teachers). This semester I decided to buckle down and get to work doing some cool stuff with computational art. Just to get a feel of Processing and see what might be possible, I decided to revisit a project I had done a few years ago: <a href="http://en.wikipedia.org/wiki/L-system">Lindenmayer systems</a>.</p>
<p>Lindenmayer systems or L-systems are pretty awesome. You start with a string of symbols and a bunch of rules describing how those symbols transform into other symbols. And then you just keep reapplying those rules over and over. L-systems can easily generate a wide variety of interesting forms and patterns including many plant morphologies.</p>
<p>Two years ago I made a  implementation of L-systems in Python using the Python Image Manipulation library. But one of the goals of that project was to create a tool that non-programmers can use. It was an interesting experiment, but after a few months I was no longer sure if it was a good idea to create a &#8220;non-programming&#8221; interface to something that is so computationally powerful. This time around I&#8217;ve eschewed the whole &#8220;pretty interface&#8221; idea in favor of dealing with real code.</p>
<p>I chose to use Processing so that I could work a few steps removed from nitty-gritty image manipulation. Processing is based on Java, so I can use Java with all it&#8217;s libraries if I need to (and to some extent, I did). I would have preferred it if I could have Python underneath, but I&#8217;m not complaining too much. There is also a version of <a href="http://www.scala-lang.org/node/3391">Processing running on Scala</a> and there is a port in the works to <a href="http://processingjs.org/">JavaScript and Canvas</a> which I&#8217;m interested in. It might be an interesting future project to port it to Jython.</p>
<h2>How it works</h2>
<p>L-systems in general work by generating a string of symbols that work as driving instruction to a <a href="http://en.wikipedia.org/wiki/Logo_%28programming_language%29">LOGO</a>-style turtle (think of it as a pen you can move with simple instructions like &#8220;forward&#8221;, &#8220;left&#8221;, &#8220;backward&#8221; etc.). The lowermost layer  is a simple turtle implementation that takes a bunch of movement commands and draws them to a screen (or canvas).</p>
<p>On top of that is a class that represents Lindenmayer systems in general. A class stores the symbols, rules and the mappings from symbols to turtle instructions. It also implements the basic rewriting algorithm and allows to provide an external turtle object (in case you want to process the image outside of the actual L-system). It also takes the generating string of symbols and passes it to the turtle to draw.</p>
<p>The top of the stack is functional Processing code where you have a setup() function that sets up the image canvas and initializes the L-System object. The draw() function executes repeatedly and controls how many generations the L-system goes through. Each L-system is two functions: a setup function that creates the L-system object with symbols and rules and another function that gets called on every draw(). This allows you to do extra processing before or after the L-system&#8217;s actual generation.</p>
<h2>Go Get It</h2>
<p>I&#8217;m calling the resulting system Lisip: LIndenmayer Systems In  Processing. It&#8217;s released under a GNU GPL and is <a href="http://github.com/basus/lisip">available right now on  Github</a>. There are just three source files (the Turtle, the L-System class and the Processing code driver which includes a number of L-systems). I think the code is fairly self-explanatory (thanks to a large extent to how much Processing cleans up the usual Java syntax). I do plan to add some proper documentation within the week.</p>
<p>I&#8217;ll continue to add L-systems to it and probably add to the Turtle&#8217;s functionality in the weeks to come. Feel free to fork it and add your systems, but I&#8217;d appreciate it if you dropped me a line if you do fork it.</p>
<p>Happy Hacking.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bytebaker.wordpress.com/1036/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bytebaker.wordpress.com/1036/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bytebaker.wordpress.com/1036/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bytebaker.wordpress.com/1036/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bytebaker.wordpress.com/1036/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bytebaker.wordpress.com/1036/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bytebaker.wordpress.com/1036/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bytebaker.wordpress.com/1036/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bytebaker.wordpress.com/1036/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bytebaker.wordpress.com/1036/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bytebaker.wordpress.com/1036/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bytebaker.wordpress.com/1036/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bytebaker.wordpress.com/1036/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bytebaker.wordpress.com/1036/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1036&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2010/02/22/lindenmayer-systems-in-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcafd7571cc4c82dd3e31c7e728eb2d9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Basu</media:title>
		</media:content>
	</item>
		<item>
		<title>Combining free and proprietary software</title>
		<link>http://bytebaker.com/2010/02/18/combining-free-and-proprietary-software/</link>
		<comments>http://bytebaker.com/2010/02/18/combining-free-and-proprietary-software/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 14:04:09 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[37 Signals]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[proprietary]]></category>

		<guid isPermaLink="false">http://bytebaker.com/?p=1031</guid>
		<description><![CDATA[I was reading Martin Fowler&#8217;s unscientific agglomeration of opinion on version control tools yesterday when I came up with an idea about finding a compromise between open and closed source tools. Thinking about it, I realize that I&#8217;ve come close to getting this idea a number of times before, but never really quite reached the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1031&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I was reading Martin Fowler&#8217;s <a href="http://martinfowler.com/bliki/VersionControlTools.html">unscientific agglomeration of opinion on version control tools</a> yesterday when I came up with an idea about finding a compromise between open and closed source tools. Thinking about it, I realize that I&#8217;ve come close to getting this idea a number of times before, but never really quite reached the tipping point. Anyways, if you&#8217;re in a hurry, the basic idea is this: make developer tools (compilers, IDEs, version control tools etc.) completely free and open source. Also make underlying architecture free and open source as well (like the Linux kernel or Ruby on Rails). But you also want to make some money from software, right? To do that, anything that is not developer focused stays closed source and is charged for.</p>
<p>What led me to flesh out this idea was Martin Fowler&#8217;s observation that the three most popular version control systems: Subversion, Git and Mercurial are all completely open source. With just a little bit of thought, I realized that there&#8217;s a company that does exactly what I propose: Apple. Apple&#8217;s dev tools like XCode and the Objective-C compilers and libraries are open source are free for everyone to download and use. The core of OS X is  the open source Darwin kernel. But layered on top of this is a closed and really high quality system of interfaces and applications that make for a very appealing user experience.</p>
<p>First let me say that what I&#8217;m about to say isn&#8217;t a commentary on the pay-for-support model that Red Hat and Canonical use. I think that&#8217;s a perfectly legitimate model that has it&#8217;s advantages for consumers, companies and open source hackers. But I want to propose an alternative that focuses on making money from selling the software itself.</p>
<h2>Opening Doors</h2>
<p>Why does this make sense? Leaving aside any moral imperatives, one of the biggest reasons for open source is that you can tinker and fix things that are broken. If you see something that is not right, you can easily pop open the hood and dig around in the internals. Now, the only way that you&#8217;ll know if something is broken is if you either use it yourself or have someone tell you that it&#8217;s broken. However, in my experience it&#8217;s much easier to fix something when you see it broken for yourself. It also gives you a better idea of what the fix should be like. It&#8217;s also more likely that you&#8217;ll change a program for the better if you&#8217;re using it day in and day out. Eating your own dog food has its advantages. If you&#8217;re a programmer, you&#8217;re most likely to find bugs and missing features in tools that you use every day. So it makes sense for you as a developer to use open source tools so that there&#8217;s an easy way for you to fix or change things that in turn will help your own developer experience.</p>
<p>If you&#8217;re a corporation (or organization) like Apple or Microsoft then it makes sense to open source your developer tools as well. For a corporation, the benefit to open sourcing a product is that you get feedback both in terms of ideas, comments and bug reports and also in terms of real working code. What you end up with is a positive feedback loop: you make tools and release them to developers for free who then help you make even better tools. I love the lesson that <a href="http://37signals.com">37signals</a> has taught the world in terms of tools and basic infrastructure: Ruby on Rails is part of their basic infrastructure, but they&#8217;ve decided to open source. As <a href="http://www.loudthinking.com/">DHH</a> claims, it&#8217;s hard to make money off of basic infrastructure (unless maybe if you&#8217;re Microsoft with a huge already installed base). Better to release it into the world and benefit from the improvements that other people make to it.</p>
<h2>Making Money</h2>
<p>So that&#8217;s all nice and dandy for developers, but what about the poor corporation that wants to make a decent buck? The basic idea is that the number of people who aren&#8217;t developers far outweighs the number of people who are. Also the number of people who just want something that works far outweighs the number of people who want something that they can tinker with ad infinitum. Even most of us hacker types occasionally break down and just want something that we can shut off our brains and use (for me it&#8217;s Excel in my engineering labs and Photoshop for  image manipulation). People will pay for convenience, quality and polish. That should be the motivating factor behind businesses who want to sell software.</p>
<p>To make money from selling software you first need to hire good developers and give them good tools that they customize to their needs. Fortunately, you already have great free dev tools. Now pay these people well and give them a concrete goal so that they put real polish into the products, especially in the areas that open source hackers <a href="http://blogs.msdn.com/shawnhernan/archive/2010/02/13/microsoft-s-many-eyeballs-and-the-security-development-lifecycle.aspx">might tend to neglect</a>. Since you&#8217;re going to be charging money, you can afford to put some money into hiring professional designers and UI experts and make sure that your app really looks good as well as works good (something that is still sorely lacking in a lot of open source software). Of course you need other people on team too: at least a fair number of testers who are the same people who will be using your for-pay product day in, day out. You end up with a product that has been crafted by motivated developers using great tools with feedback from your target user base. Admittedly you can still end up with a crappy product that no one wants to pay for, but that doesn&#8217;t mean the idea itself doesn&#8217;t work.</p>
<p>Though I have no real experience making products like that, the cases in front of us are pretty clear to see. Apple and Adobe both make lots of money selling high quality consumer software and I personally consider Microsoft Office to still be a better user experience that OpenOffice.org (especially with the ribbon interface).</p>
<p>One of the questions I haven&#8217;t fully resolved is whether your for-pay app should be open sourced. I am tempted to say no because I can&#8217;t think of a business model where you can open source your product (code and design elements) and still expect people to pay a decent price for it. If someone with more experience than me can come up with a working model, do let me know. However, one compromise that might be fair is to open up your app a few years later once your company has a newer product. Under this model, Apple would open source all their code prior to OS X. I&#8217;m less familiar with Adobe, but I think prior to the Creative Studio editions would be a good time point. Microsoft might consider releasing the pre-NT Windows code and maybe Office prior to 2000 or 2003. That way, your business still makes money today while making a community contribution in the future. It also helps users who can get their hands on a copy of a program if they need to open a file from 10 years ago that the current version no longer supports. It frees up the company to go ahead while worrying a little less about backward compatibility. It also keeps companies on their toes because they know that any market advantage they have will be effectively erased in a few years.</p>
<h2>The Plan Isn&#8217;t Perfect</h2>
<blockquote><p>No plan survives contact with the enemy</p>
<p style="text-align:right;">&#8211; General Field Marshall Helmuth von Moltke</p>
</blockquote>
<p>And this plan will definitely have to be modified if and when a company adopts it. One immediate problem I can see is that inevitably there will be calls to open source all the company&#8217;s product. I don&#8217;t have a suitable response to that apart from saying that would probably cause the business plan to collapse. Also if your product&#8217;s core algorithms don&#8217;t vary much from one generation to the next, open sourcing older versions might be equivalent to shooting yourself in the foot (though if you&#8217;re expecting a handful of algorithms to bankroll your company till the heat death of the Universe, you&#8217;re probably doing it wrong).</p>
<p>Again, I don&#8217;t have any real world business experience (though I would like to, someday). I also don&#8217;t know any company that has a policy like this at its core. If you&#8217;re interested in starting a company like this (or know of one already), do drop me a line. I&#8217;d really like to play a part in making a world where people can get paid for writing their code and then releasing it for other people to use and improve. A business that makes money but still open sources its code (even if its a few years late) would be a great step in that direction.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bytebaker.wordpress.com/1031/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bytebaker.wordpress.com/1031/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bytebaker.wordpress.com/1031/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bytebaker.wordpress.com/1031/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bytebaker.wordpress.com/1031/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bytebaker.wordpress.com/1031/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bytebaker.wordpress.com/1031/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bytebaker.wordpress.com/1031/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bytebaker.wordpress.com/1031/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bytebaker.wordpress.com/1031/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bytebaker.wordpress.com/1031/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bytebaker.wordpress.com/1031/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bytebaker.wordpress.com/1031/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bytebaker.wordpress.com/1031/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1031&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2010/02/18/combining-free-and-proprietary-software/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcafd7571cc4c82dd3e31c7e728eb2d9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Basu</media:title>
		</media:content>
	</item>
		<item>
		<title>Ars Longa, Vita Brevis</title>
		<link>http://bytebaker.com/2010/02/16/ars-longa-vita-brevis/</link>
		<comments>http://bytebaker.com/2010/02/16/ars-longa-vita-brevis/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 14:11:15 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://bytebaker.com/?p=1028</guid>
		<description><![CDATA[I occasionally go and do something crazy, something completely unbecoming an engineer. Last semester I took an Creative Writing course with a most wonderful teacher. This semester I&#8217;m doing an independent study in art with an equally wonderful teacher. Last night I was up till about midnight getting the grip of Processing &#8212; a programming [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1028&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I occasionally go and do something crazy, something completely unbecoming an engineer. Last semester I took an Creative Writing course with a most wonderful teacher. This semester I&#8217;m doing an independent study in art with an equally wonderful teacher. Last night I was up till about midnight getting the grip of <a href="http://processing.org/">Processing</a> &#8212; a programming language and environment for creating stunning visuals. It&#8217;s a pretty sweet environment and I&#8217;ve only scratched the surface of what&#8217;s possible, but boy, was it hard.</p>
<p>All I did last night was recreate an project I&#8217;d done a few semesters ago with Lindenmeyer Systems. In some respects, our previous work was a bit misdirected and we should have been building on top of Processing all along. Last night I was reminded firsthand of the importance of using good tools suited for the task at hand. I didn&#8217;t write much in terms of code, but I did manage to build up a fair bit of functionality (a much better measure of progress I think). But it&#8217;s still not done and I suspect at least an hour or two more of steady work before I get to something that I can show off. This morning as I was trawling in the interwebs I came across this <a href="http://poems.com/special_features/prose/essay_upton2.php">essay</a> written by my creative writing professor and her quotation of &#8220;Ars longa, vita brevis&#8221; rang out as so true. The art is long and life is so short.</p>
<p>I&#8217;m not really an artist, though I like pretty things. I&#8217;m a hacker at heart. More important than the actual beauty of the object is the joy I feel in actually creating it. As  a coder, I guess I&#8217;m half decent by now. I&#8217;d call myself a really really advanced beginner (close to intermediate). But in terms of art, I&#8217;m pretty much a greenhorn. What&#8217;s more, the art that I&#8217;m doing is in code. I thought that would be fun and easy. It&#8217;s not easy and it remains to be seen if it&#8217;s fun. Though I love writing code and can concentrate better on writing code than on anything else, when it comes to art, I&#8217;m a bit lost. It&#8217;s been a while since I&#8217;ve done any drawing or painting, I prefer using my words to create images in people&#8217;s heads. Also without the use of hands and real physical paints and paper, it&#8217;s a bit harder to play around. Admittedly, it&#8217;s easier to tinker, redo and recreate with computerized tools but there is more of an upfront investment and the learning curve is significantly steeper (at least in the beginning).</p>
<p>In some ways, you could say that I&#8217;m painting entirely with mind. It&#8217;s liberating: I don&#8217;t have to worry about drawing a perfect circle or making sure that the sides of my squares are all the same length, the machine does it for me and I can work at a higher level. At the same time, I can&#8217;t just splash some paint on campus and see what it looks like. I have to look up an API reference instead of stroking away extra paint with a brush and I sometimes I have to get my hands dirty debugging (including dealing with Java&#8217;s broken type systems). If real artists did this all the time, we&#8217;d never progress beyond stick figures. That&#8217;s not to denigrate Processing, the people behind it or computational art. The gains in productivity and expression we get from tools like them far away my pain. Don&#8217;t mind me. I&#8217;m just bitching.</p>
<p>The art is long and life is short. It takes some 10,000 hours to become an expert in anything and it takes continued practice to keep up that level of expertise. And life is short. Sometimes I wish that I could sever all human contact and just sit and write code (or stories or whatever) and the next moment I realize that it&#8217;s stupid because it&#8217;s meaningless to live completely in isolation. There&#8217;s no point in my writing code or making art if no one uses and appreciates what I create. It&#8217;s rather ironic that it takes antisocial devotion to a task to create something that others can appreciate. If only our brains could really multitask, things would be so much easier.</p>
<p>Well, that&#8217;s enough bitching and moaning for one day. I&#8217;m going to get back to my code/art.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bytebaker.wordpress.com/1028/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bytebaker.wordpress.com/1028/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bytebaker.wordpress.com/1028/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bytebaker.wordpress.com/1028/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bytebaker.wordpress.com/1028/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bytebaker.wordpress.com/1028/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bytebaker.wordpress.com/1028/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bytebaker.wordpress.com/1028/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bytebaker.wordpress.com/1028/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bytebaker.wordpress.com/1028/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bytebaker.wordpress.com/1028/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bytebaker.wordpress.com/1028/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bytebaker.wordpress.com/1028/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bytebaker.wordpress.com/1028/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&amp;blog=8123270&amp;post=1028&amp;subd=bytebaker&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2010/02/16/ars-longa-vita-brevis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcafd7571cc4c82dd3e31c7e728eb2d9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Basu</media:title>
		</media:content>
	</item>
	</channel>
</rss>