<?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:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>The ByteBaker</title>
	<atom:link href="http://bytebaker.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://bytebaker.com</link>
	<description>Computer Science is not a science and it's not about computers</description>
	<pubDate>Thu, 17 Jul 2008 12:52:56 +0000</pubDate>
	<generator>http://wordpress.org/?v=MU</generator>
	<language>en</language>
			<item>
		<title>Blog posts or essays?</title>
		<link>http://bytebaker.com/2008/07/17/blog-posts-or-essays/</link>
		<comments>http://bytebaker.com/2008/07/17/blog-posts-or-essays/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 12:34:54 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
		
		<category><![CDATA[Internet]]></category>

		<category><![CDATA[Productivity]]></category>

		<category><![CDATA[bloggging]]></category>

		<category><![CDATA[blogs]]></category>

		<category><![CDATA[essays]]></category>

		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://xcomputers.wordpress.com/?p=165</guid>
		<description><![CDATA[Between my work, traveling back to home and frequent power cuts, my blogging hasn&#8217;t been very regular recently. I haven&#8217;t been suffering from any sort of writer&#8217;s block, in fact I have a list of about 7-8 topics that I&#8217;d like to write about. However there has been one thing that has kept bothering me [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Between my work, traveling back to home and frequent power cuts, my blogging hasn&#8217;t been very regular recently. I haven&#8217;t been suffering from any sort of writer&#8217;s block, in fact I have a list of about 7-8 topics that I&#8217;d like to write about. However there has been one thing that has kept bothering me for quite some time: the size of my postings. I&#8217;ve been trying to use this blog as a way to tell the world about the things that I learn and discover as I pursue my career as a computer science student. However many of the things that I deal with daily and which I think about are quite complex and takes long discussion to get everything together. At the same time I would like to be able to post new things everyday or at least every alternate day. Often these two things don&#8217;t really go together add being an avid reader myself, I understand that it can be very trying to read something long on a topic like computer science. Hence the question: do I write small compact blog posts on a regular basis, or do I write longer essay-style posts where I can talk at length about the topic?</p>
<p>I&#8217;ve been looking at some of my favorite technology oriented bloggers to possible solutions to my dilemma. My favorite bloggers is <a href="http://steve-yegge.blogspot.com/">Steve Yegge</a>, who without fail writes long, sometimes rambling, but always interesting essays on an approximately bimonthly basis. While I find his essays thoroughly entertaining, they are a bit too big for something that I would want to write. More importantly, I certainly want to post more regularly than twice a month. <a href="http://www.paulgraham.com/articles.html">Paul Graham&#8217;s</a> essays are somewhat shorter, but are also published at a similar frequencies. Again, brilliant, but not quite what I&#8217;m aiming for.</p>
<p>Perhaps the closest to what I&#8217;m acheiving would be Jeff Atwood&#8217;s <a href="http://www.codinghorror.com/">Coding Horror</a>. Atwood posts regularly (almost everyday) and his posts are of a good length, long enough to make you feel a sense of actually reading something worthwhile, while being short enough that you don&#8217;t need to set apart an entire hour to go through them. Though occasionally he does err on the side of excess, they are nowhere as long as Yegge&#8217;s posts.</p>
<p>Of course, length isn&#8217;t a separate consideration in itself. It&#8217;s closely tied to the content of what I write. Recently I&#8217;ve been writing more from a software engineering standpoint, though I would like to write posts of a slightly more theoretical nature (especially since I&#8217;m getting increasingly interested in compilers and programming languages). While I&#8217;m willing to accept that such topics might require slightly lengthier posts, I really don&#8217;t want to turn my posts into mini-theses.</p>
<p>Long blog posts also mean longer time investments on my part, something that is a very important consideration because of the heavy course load I plan on taking. Perhaps the best way for me to decide the issue is to think about how much time I would be willing to invest on a daily basis. On average a blog post right now takes me about 40 minutes to one hour to write. I think that it is a good amount of time for me to spend write now. Considering my typing speed, that translates to about 1000 thousands, even considering looking up pertinent links and confirming information. 1000 words might be pushing it a bit, (that&#8217;s about one average sized college paper), but much less would probably be too small for me to clearly say everything. 800 to 1000 words seems like a decent size from what I&#8217;ve been reading. I think a good idea would be to to have a number of sections which are more or less self-contained in terms of content.</p>
<p>I&#8217;m going to trying to work on trying to control my size and structure. However at the same time, my primary concern will be content, so even if I need to write longer or shorter posts to give a coherent, well paced account of everything I need to say, so be it. I&#8217;m sure my readers read other tech blogs, so any comments as to what you prefer would be good very much appreciated.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xcomputers.wordpress.com/165/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xcomputers.wordpress.com/165/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xcomputers.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xcomputers.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xcomputers.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xcomputers.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xcomputers.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xcomputers.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xcomputers.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xcomputers.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xcomputers.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xcomputers.wordpress.com/165/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&blog=229150&post=165&subd=xcomputers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2008/07/17/blog-posts-or-essays/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/basu715-128.jpg" medium="image">
			<media:title type="html">basu715</media:title>
		</media:content>
	</item>
		<item>
		<title>Book Review: Beginning Ubuntu Linux Third Edition</title>
		<link>http://bytebaker.com/2008/07/14/book-review-beginning-ubuntu-linux-third-edition/</link>
		<comments>http://bytebaker.com/2008/07/14/book-review-beginning-ubuntu-linux-third-edition/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 10:39:13 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[Operating Systems]]></category>

		<category><![CDATA[Productivity]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[review]]></category>

		<category><![CDATA[tutorial]]></category>

		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://xcomputers.wordpress.com/?p=163</guid>
		<description><![CDATA[Ubuntu and desktop Linux have come a long way in the past few years. Ubuntu is currently one of the most popular, if not the most popular distro for desktop linux users. It was my first distro and though I no longer use it, I&#8217;ve always acknowledged to be a well-polished piece of work and [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Ubuntu and desktop Linux have come a long way in the past few years. Ubuntu is currently one of the most popular, if not the most popular distro for desktop linux users. It was my first distro and though I no longer use it, I&#8217;ve always acknowledged to be a well-polished piece of work and I always recommend it to people who are just starting on their personal Linux journey. Like most other things in computers, getting used to a new operating system is made easier if there is a good source of documentation available. Beginning Ubuntu Linux, published by Apress is a particularly good example of documentation geared towards to the new user. I&#8217;ve reviewed the <a href="http://bytebaker.com/2007/04/20/book-review-beginning-ubuntu-linux-second-edition/">previous</a> <a href="http://bytebaker.com/2006/06/05/book-review-beginning-ubuntu-linux/">versions</a> of the book and I find that the books have kept improving just Ubuntu itself.</p>
<p>One of the things that makes this book particularly appealing for me is that it starts out with a brief but informative review of the philosophy and history surrounding Linux and Ubuntu. I personally believe (and I think that many other Linux users share this) that there is much more to Linux and open source software than simple technical excellence. It is a way of thinking and acting that I find very appealing and which I wish others to understand. This book does its part in helping new users understand the culture that gave rise to the software that they will soon be using.</p>
<p>The book continues the practice of understanding that most of the people reading it will be Windows users. As a result the chapters dealing with installation also tell users how to properly back up their data and how to smoothen the transition. The guide through the actual installation process is also very in-depth and well written. Partitioning is often the most confusing part of the installation for a new user. I&#8217;m glad to see that partitioning has been dealt with very well with all the options in the install process carefully explained and the pros and cons weighed carefully. The chapter dealing with common installation problems is as good as before but now includes information on more than just installation problems. I particularly liked the section on how to deal with resolution and other common graphics problems since these can be very frustrating if not dealt with properly.</p>
<p>Once installation is complete the book goes on to describe with an equal amount of care how to perform various day to day tasks and how to customize your system. The section that deals with Linux equivalents is also comes in very handy for new users who just want to be pointed quickly in the right direction. The book geos beyond describing simply the core operating system and the user interfaces. Of particular note are the sections devoted to how to use multimedia systems. You&#8217;d be hard-pressed to find a computer user who doesn&#8217;t have a substantial collection of various music and video files and this book helps newbies get up and running with minimal effort. This new edition keeps the sections on using OpenOffice and the BASH shell but adds substantial material regarding the new automatic multimedia setup, the 3D graphics effects that have the Ubuntu desktop much more visually appealing and also on security and encryption. There is also a mini-tutorial on using the GIMP for basic image manipulation which I think shutterbugs will find handy.</p>
<p>The last part of the book is devoted to slightly more advanced topics such as package management, backups and automation and remote access. Personally I feel that package management deserves a more central place, right alongside installation, but the book&#8217;s modular structure means that this isn&#8217;t much of a problem. Overall the last few chapters act as a springboard from where newbies can start another journey to the level of power user and beyond.</p>
<p>The book as a whole is well laid out and material is clearly separated. The use of sidebars and small tips and warning sections means that a good amount of extra information is presented without interrupting the main flow of the text. There are also lots of links to other information sources where the interested reader can go to for more in-depth information. Most of these are freely available online sources and the full URL is often provided resulting in minimum effort for the reader. For Windows and Mac OS X users there are also pointers to third party tools that might make migration easier. The book is replete with high-quality black-and-white screenshots which add to the complete guide experience that the book provides. The third edition updates everything to be in sync with Ubuntu 8.04 and comes with a double-sided DVD containing a ready-to-install image on one side and various ISO images of the Ubuntu derivatives on the other. In essence the book has everything that a user would need to get up and running with Ubuntu.</p>
<p>The book is at a reasonable price of $39.99 and I think it&#8217;s a good investment for anyone looking to jump into the world of Linux. Even though you&#8217;ll get the most from this book in the first few weeks after installing Ubuntu for the first time, the later parts of the book will serve as a handy quick reference for those types you find yourself needing to dig under the hood. There is certainly a large amount of information online which means that books of this type are not strictly necessary, but at the same time it can make things a lot easier to have a quick reference close at hand. My litmus test for this sort of this sort of product is generally: would I give it to my mom? This time the answer is yes.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xcomputers.wordpress.com/163/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xcomputers.wordpress.com/163/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xcomputers.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xcomputers.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xcomputers.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xcomputers.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xcomputers.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xcomputers.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xcomputers.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xcomputers.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xcomputers.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xcomputers.wordpress.com/163/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&blog=229150&post=163&subd=xcomputers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2008/07/14/book-review-beginning-ubuntu-linux-third-edition/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/basu715-128.jpg" medium="image">
			<media:title type="html">basu715</media:title>
		</media:content>
	</item>
		<item>
		<title>Things to do on a 16-hour flight</title>
		<link>http://bytebaker.com/2008/07/08/things-to-do-on-a-16-hour-flight/</link>
		<comments>http://bytebaker.com/2008/07/08/things-to-do-on-a-16-hour-flight/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 13:03:36 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://xcomputers.wordpress.com/?p=159</guid>
		<description><![CDATA[By the time you read this, I will probably on my 16-hour flight from Newark, USA to Mumbai, India. Though I rather like flying (I like machines in general). I don&#8217;t really fancy being stuck in a small cramped space with lots of other people for long periods of time. Why can&#8217;t the laws of [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>By the time you read this, I will probably on my 16-hour flight from Newark, USA to Mumbai, India. Though I rather like flying (I like machines in general). I don&#8217;t really fancy being stuck in a small cramped space with lots of other people for long periods of time. Why can&#8217;t the laws of physics just be simple and allow cheap instantaneous teleportation between arbitrary points? Anyway, enough bitching and complaining on my end, I&#8217;ll save it till after the flight. Even though I&#8217;ll be stuck on a plane for 16 hours, I do not intend to waste all that time simply getting bored. So here is a list of things (in no particular order) that I might try to do during the flight.</p>
<p><strong>1. Sleep</strong></p>
<p>Come on, you don&#8217;t seriously expect me to be at my productive programmer best on a plane do you? A nice airport waiting room, maybe, but not on the plane. Let&#8217;s face, despite my love of flying after an hour or two I will want nothing more than to land. So I will try my best to sleep through as much of the flight as possible. Unfortunately, I&#8217;m not much of a sit-up sleeper so I don&#8217;t know how much of my time will actually be spent sleeping liking a baby. Speaking of babies, I sincerely hope there aren&#8217;t any babies near my seat. I like babies, but not near me on a plane.</p>
<p><strong>2. Read</strong></p>
<p>The all time classic timepass activity. Now the question is, what? I don&#8217;t have many fiction titles at hand and the ones I do I&#8217;m not inclined to read on a plane. I would consider taking something I&#8217;ve already read before and know I like, but from past experience I know that&#8217;s not a good idea. My choices right now are between a number of really good popular-science type books that I&#8217;ve been wanting to read, but haven&#8217;t gotten around to, or one of the equally well written computer/science engineering books that I need to take along. I was seriously considering taking SICP, but I&#8217;ve found that the best place to read that book is in front of a computer with a Scheme interpeter open so that I can work through the examples as they come. I could do some paper programming, but the tray holders aren&#8217;t very conducive to having a book and a large-ish notepad open at the same time. And it is simply an exercise in frustration to paper program on small paper. I&#8217;ll probably take up Roger Penrose&#8217;s <a href="http://www.amazon.com/Emperors-New-Mind-Roger-Penrose/dp/0140145346">The Emperor&#8217;s New Mind</a> and something else a bit lighter.</p>
<p><strong>3. Design</strong></p>
<p>My research project is somewhat stagnated at the moment and it&#8217;s fairly obvious (to me at least) that we need a new design to control all the things that are going on and are likely to happen soon. I think some time of my flight at least will be spent thinking about this design. If I have space left over I&#8217;ll take the Design Patterns book because I think I&#8217;ll be using some of those patterns to come up with a working design. And it&#8217;ll be nice to be able to think without being near a computer for a change. The control language we&#8217;ve been using will also need some fairly heavy changes, so that&#8217;ll be something else (which I am more familiar with) that I&#8217;ll have to think about.</p>
<p><strong>4. Plan</strong></p>
<p>I&#8217;ll be starting sophomore year at college soon. This year is going to be interesting. Not only am I mostly done with all my mundane requirements, I&#8217;ll be involved in some research throughout the year and I plan to take a self-designed independent study. I need to do some thinking about the study and also about what new languages/technologies I want to learn. I read Steve Yegge&#8217;s <a href="http://steve.yegge.googlepages.com/ten-predictions">10 predictions</a> today and I think I&#8217;ll also try to make some sort of predictions regarding the state of the computer world for the sole purpose of seeing how much I understand the things going on around me.</p>
<p><strong>5. Draw</strong></p>
<p>Like many children, once upon a time coloring used to be my favorite sport. As a programmer I&#8217;m often doodling design diagrams and pseudo-flow-charts and other random interaction stuff. I might just feel inclined to try and turn on the creative juices a little. I&#8217;ll probably be doing a fair amount of doodling as part of my designs, but I don&#8217;t have to stop there.</p>
<p><strong>6. Music and Podcasts</strong></p>
<p>I&#8217;ll make sure that my iPod has a full charge which will easily last it the whole flight and more. I have a good 10 gigs of music and 10 episodes of the <a href="http://blog.stackoverflow.com/">Stack Overflow</a> podcast to listen to and I hope all that, if nothing else, will keep me partially alive. I might even look around and see if I can find some more interesting Podcasts and audiobooks. No, I won&#8217;t consider movies, because I can see absolutely no point in watching a movie on such a small screen.</p>
<p><strong>7. Sit and stare</strong></p>
<p>Yes I&#8217;ve done this on my last flight and it&#8217;s actually quite easy. You sit and you stare, that&#8217;s it. You don&#8217;t have to look at anything particular and you don&#8217;t have to react to anything either. Of course if you&#8217;re doing this, you&#8217;re probably in the last stages of boredom before it becomes terminal and chances are you&#8217;ll need rehab once you land (lugging heavy luggage sometimes helps). I&#8217;m certainly hoping I don&#8217;t get to this stage, at least not until I get to the part where we have to buckle down for landing and there is really nothing else to do.</p>
<p>Once I&#8217;ve landed and have sufficiently recovered thanks to my mother&#8217;s cooking, I&#8217;ll list all the things I actually did, that is, unless I&#8217;m in boredom rehab. I do hope it won&#8217;t come to that.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xcomputers.wordpress.com/159/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xcomputers.wordpress.com/159/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xcomputers.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xcomputers.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xcomputers.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xcomputers.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xcomputers.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xcomputers.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xcomputers.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xcomputers.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xcomputers.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xcomputers.wordpress.com/159/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&blog=229150&post=159&subd=xcomputers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2008/07/08/things-to-do-on-a-16-hour-flight/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/basu715-128.jpg" medium="image">
			<media:title type="html">basu715</media:title>
		</media:content>
	</item>
		<item>
		<title>Should we make heavy software</title>
		<link>http://bytebaker.com/2008/07/07/should-we-make-heavy-software/</link>
		<comments>http://bytebaker.com/2008/07/07/should-we-make-heavy-software/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 13:34:19 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
		
		<category><![CDATA[Productivity]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Firefox 3]]></category>

		<category><![CDATA[leopard]]></category>

		<category><![CDATA[OS X]]></category>

		<category><![CDATA[resources]]></category>

		<guid isPermaLink="false">http://xcomputers.wordpress.com/?p=156</guid>
		<description><![CDATA[When I showed off Firefox 3&#8217;s smart address bar to a friend of mine a few days ago, his first reaction was: &#8220;Wow, that&#8217;s cool&#8221; and half a smile. A second later the smile was gone and he let out a disappointed &#8220;Oh but that&#8217;s going to take up so many resources&#8221;. Let&#8217;s leave for [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>When I showed off Firefox 3&#8217;s smart address bar to a friend of mine a few days ago, his first reaction was: &#8220;Wow, that&#8217;s cool&#8221; and half a smile. A second later the smile was gone and he let out a disappointed &#8220;Oh but that&#8217;s going to take up so many resources&#8221;. Let&#8217;s leave for the moment that my friend was not the tech-savviest person in the world and that he would probably not be able to list exactly what those &#8220;resources&#8221; were supposed to be. What his remark got me thinking was simply: &#8220;Is it really a bad thing if my software takes up many resources?&#8221;</p>
<p>I suppose the core issue here is that computer users don&#8217;t really care about resources. Most of my friends wouldn&#8217;t be able to tell me the specs of their computers and much less what those specs meant. What they are interested in is quite simply, speed. They want their software to be zippy and fast, so do I, so does everyone (I hope). When my friend said that Firefox 3 would take up more resources, what he really meant was &#8220;My computer will run slower.&#8221; He quite innocently equated less features to mean lightweight and hence faster. It&#8217;s an honest mistake, but that doesn&#8217;t change the fact that it is not really correct. Tweaks and customizations to programs can often increase actual program size and complexity but give better performance. Apple has been doing with OS X for years now. Many users and benchmarks will vouch for the fact that though OS X has been gaining features, it&#8217;s also utilizing computer resources more efficiently.</p>
<p>Of course, it&#8217;s undeniable that the general trend is towards programs that use more resources. After all, more resources does mean more maneuvering room, more stuff to build with. And resources to keep increasing. Our computers today are vastly more powerful than those available at even the start of the decade. And we&#8217;ve been reaping the benefits with more sophisticated software: better visuals, increasingly powerful desktop search and increasing higher resolution data formats.</p>
<p>At the same time, many people both programmers and not, are becoming increasingly worried that modern software is bloated an unwieldy. Just as Moore&#8217;s Law has been giving us faster processor, our software acts as a Moore&#8217;s Law Compensator. Our computers still take a long time to boot up and become usable, most programs don&#8217;t start in the blink of an eye, in essence, somehow the user doesn&#8217;t really see all the power that&#8217;s tucked under the hood. This has led to a growing trend in lightweight software, especially in the more tech-savvy community.</p>
<p>Among Linux users this dual nature of modern software is very evident. On the one hand Linux systems can now sport powerful 3D window managers and task switchers good enough to rival Vista or Leopard. On the other hand, there have been a wave of new minimalistic window managers lacking ant graphic splendor whatsoever.</p>
<p>I feel myself personally affected by this double trend: I myself use a tiling window manager called Awesome. I shun IDEs, preferring to use the very lightweight Vim from a simple terminal. Firefox is just about the only graphical program that I run. At the same time, I love OS X Leopard. I think the UI is quite beautiful and I&#8217;ve become an avid user of both Expose and Spaces. Not to mention the fact that somehow fonts seem to look much better on OS X than on any other operating system I&#8217;ve ever used. Performance-wise OS X is much better than Vista which takes much longer to start up and respond on a far superior system.</p>
<p>Being a programmer myself, this issue is particularly important because I think about performance almost all the time. Whether it&#8217;s deciding whether to use a high-level language like Python, or lug it out with something closer to the metal like C, or which graphics toolkit to use, I have to factor in resource-use. I&#8217;m still not sure about which way is better. Software bloat is bad. Very bad. At the same it doesn&#8217;t make much sense to let all that computing power sit there unused and the benefits very often outweigh the price to be paid. For the time being, I&#8217;m calling it a truce and letting the decider be something less tangible than performance benchmarks: user experience. If you can use heavy resources but deliver a solid user experience, then go for it. An incomplete user experience for the sake of a lighter program might be occasionally justified, but not all the time. However a bad user experience along with heavier system requirements is definitely a bad thing, to be avoided at all costs. After the best software is not the one that uses least RAM or has the prettiest interface, it&#8217;s the one that gets the job done without getting in the users way.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xcomputers.wordpress.com/156/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xcomputers.wordpress.com/156/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xcomputers.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xcomputers.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xcomputers.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xcomputers.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xcomputers.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xcomputers.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xcomputers.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xcomputers.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xcomputers.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xcomputers.wordpress.com/156/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&blog=229150&post=156&subd=xcomputers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2008/07/07/should-we-make-heavy-software/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/basu715-128.jpg" medium="image">
			<media:title type="html">basu715</media:title>
		</media:content>
	</item>
		<item>
		<title>Write a manual for your software</title>
		<link>http://bytebaker.com/2008/07/02/write-a-manual-for-your-software/</link>
		<comments>http://bytebaker.com/2008/07/02/write-a-manual-for-your-software/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 13:25:01 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://xcomputers.wordpress.com/?p=154</guid>
		<description><![CDATA[If you&#8217;re a computer science student like me, then you probably write a fair amount of code. Depending on your coding style you probably write a fair amount of comments too. But do you write about your software or do you just write your software? Chances are you don&#8217;t. College computer science courses aren&#8217;t exactly [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>If you&#8217;re a computer science student like me, then you probably write a fair amount of code. Depending on your coding style you probably write a fair amount of comments too. But do you write about your software or do you just write your software? Chances are you don&#8217;t. College computer science courses aren&#8217;t exactly writing courses (no matter how much typing you do). While part of a project may involve documenting the concepts behind your program, or why you made a particular design decision, you hardly ever write something like a manual for your software. However, if you&#8217;re planning to write production software at some point, especially if you&#8217;re thinking about creating something independently or as part of an open source project, then writing a manual might be more helpful than you think.</p>
<p>Writing a manual is more about than just putting together instructions on how to use your software. It&#8217;s important to put yourself in the place of someone who will be using your software (and is probably not a programmer). For you your program logic makes perfect sense (if it doesn&#8217;t, why is it even there?) but sometimes what makes sense from a programming point of view isn&#8217;t quite so simple from a user point of view. Looking at your program from a user&#8217;s point of view let&#8217;s you think in terms of what&#8217;s really useful and necessary rather than what&#8217;s easiest to program. Writing a manual is a good way to put yourself in the user&#8217;s seat.</p>
<p>The first things that come to mind whiel writing manual is the user interface. How is easy is it to do simple tasks? Where are the most important parts of your UI located? Is their a general cohesiveness in the way things are put together? Are there some things that you know your program is capable of, but are almost impossible to do due to the UI? Theses are all questions that directly affect how your users&#8217; experience. And so they are top priority. If you find yourself taking up two pages describing something that the user will be doing dozens of time each day, then something needs to be changed.</p>
<p>A critical review of the interface will lead to deeper program logic. Are things which appear close together and related in the UI similarly close together in the program? Are the UI and the program logic equally clear and intuitive? Are you unintentionally exposing internal structure to your user? While writing the manual you should keep an eye out for any bad designs, you should also be thinking about missing or broken features. While that doesn&#8217;t mean you should implement everything that comes to your mind, sometimes some features are useless without supporting features. After all, your clients aren&#8217;t interested in the features themselves, they want to get their work done. If you find yourself writing about how not to do things or what can&#8217;t be done in your manual, rather than how to do them, then your program probably needs more work.</p>
<p>Having a written manual for a small art program, I&#8217;ve realized that there&#8217;s a fairly direct correlation between ease of use and ease of description. If you can explain a function and how to use it in a few lines, it&#8217;s probably mcuh better implemented than a description that takes up half a page. The first version of my program was a fairly tedious text-based program which went out of style around the same time as Apple BASIC stopped shipping. The descriptions for each option and how to get to them were equally complicated. Putting together a simple GUI not only made interaction easier, it also choppped down the interaction part of the manual to a few bullet points.</p>
<p>However, when you&#8217;re writing a manual it&#8217;s fairly easy to write from a developer&#8217;s perspective. After all, you have the guts of your program in your head, and you probably already know half a dozen unobvious little tricks and workarounds. You&#8217;ll either forget to put them in the manual or you&#8217;ll remember and think that they&#8217;ll make as much sense to others as they do to you. Chances are they don&#8217;t and you really don&#8217;t want to be putting workarounds in your manual if they&#8217;re hiding a bug. Fix the bug and then write the rest of the manual.</p>
<p>I&#8217;m starting to think that all students should at least once have a project that requires writing a user manual for non-programmers. Years of writing code and tearing through algorithms can make you think very differently from the average office worker using your program. It&#8217;s necessary to get in touch with your users and how they&#8217;ll be using what you give them. So the next time you write your great new world changing program, take a few hours off and write a manual for it.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xcomputers.wordpress.com/154/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xcomputers.wordpress.com/154/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xcomputers.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xcomputers.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xcomputers.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xcomputers.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xcomputers.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xcomputers.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xcomputers.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xcomputers.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xcomputers.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xcomputers.wordpress.com/154/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&blog=229150&post=154&subd=xcomputers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2008/07/02/write-a-manual-for-your-software/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/basu715-128.jpg" medium="image">
			<media:title type="html">basu715</media:title>
		</media:content>
	</item>
		<item>
		<title>The role of software engineering in research</title>
		<link>http://bytebaker.com/2008/06/26/the-role-of-software-engineering-in-research/</link>
		<comments>http://bytebaker.com/2008/06/26/the-role-of-software-engineering-in-research/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 13:13:50 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
		
		<category><![CDATA[Productivity]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[computer science]]></category>

		<category><![CDATA[research]]></category>

		<category><![CDATA[software design]]></category>

		<guid isPermaLink="false">http://xcomputers.wordpress.com/?p=152</guid>
		<description><![CDATA[As my research project continues our software is gradually growing more and more features, and we&#8217;re adding new functions almost everyday. While it&#8217;s certainly a very good feeling to be adding functionality, it can also get ungainly very quickly. About two weeks ago, Slashdot posted a very interesting query by a person interested in doing [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>As my research project continues our software is gradually growing more and more features, and we&#8217;re adding new functions almost everyday. While it&#8217;s certainly a very good feeling to be adding functionality, it can also get ungainly very quickly. About two weeks ago, Slashdot posted <a href="http://ask.slashdot.org/article.pl?sid=08/06/17/1830216&amp;from=rss">a very interesting query</a> by a person interested in doing a PhD on software design principles. Since then, I&#8217;ve been giving more and more thought to the role that industry-style software engineering principles play (or should play) in computer science research.</p>
<p>Research in science has been mostly held to be separate from engineering. Chemistry research is not performed in quite the same way that chemical engineering is. Even in cases where there is significant amounts of high technology equipment is used (the <a href="http://en.wikipedia.org/wiki/Large_Hadron_Collider">LHC</a> is a good recent example), the engineering teams are separate from the scientists. However, computer science is not really a typical science at all. Research in computer science faces many of the same problems that software development faces:</p>
<ul>
<li>Multiple people working simultaneously on large and growing codebases (team management).</li>
<li>Adding or removing features without requiring major rewrites (extensibility).</li>
<li>A way to collect large amounts of data and detect failures (testing and error logging)</li>
<li>Having multiple copies of the experiment running, with different parameters (scalability and version control).</li>
<li>Last, but not least, the experiment should actually work and produce results (in corporate terms, the software should ship).</li>
</ul>
<p>Keeping the similarities in mind, what lessons can we as researchers learn from industry techniques and practices (by industry, I mean open source as well)? I&#8217;m not sure what other researchers do, or if there is some sort of standard procedure, so I&#8217;ll just talk about what my small team has done to make our work easier.</p>
<p><strong>Divide and conquer:</strong></p>
<p>The first thing we did was to carve up the various parts of the project. While my two teammates took up the core engine and the output system, I chose to deal with the human interaction part. At the same time. we had regular meetings where we planned out how our parts should interact as well making high-level descriptions of what each part of the code should do. This meant we could each develop our code largely independent of the others while still having a fair idea of where the whole project was going.</p>
<p><strong>Throwing away version 1:</strong></p>
<p>Though our first version was a working program, we made it keeping in mind that we would probably have to change a lot of things, possible even rewrite it. As a result, we developed it quickly, and focused on making it &#8220;just work&#8221; without adding too many features. This allowed to get a good feel for what the rest of the project would be like and let us make important decisions before we had invested a lot of time into it. In research you often don&#8217;t know what you&#8217;re looking for until you start looking, and this was the case for us. Our throwaway version gave us a better idea of which direction our research was heading, what concepts had been explored before, what was new and how difficult various aspects were.</p>
<p><strong>Strict Version control:</strong></p>
<p>Right after we started working on our post-throwaway system, we moved all our code to a <a href="http://subversion.tigris.org/">Subversion</a> repository on our college&#8217;s research cluster. We do are own work in our working commits and perform daily commits and updaes. Our repository is also divided into <a href="http://ariejan.net/2006/11/24/svn-how-to-structure-your-repository/">trunk, branch and tag</a> directories to keep separate the most recent copy, older releases and other milestones. This way we can see the evolution of our project at a glance more easily than having to check out older versions. This comes in particularly handy, since being a research project we tend to be looking at what we did before and what results we got rather regularly.</p>
<p><strong>Coding conventions:</strong></p>
<p>Another post-throwaway decision was regarding <a href="http://www.python.org/dev/peps/pep-0008/">coding styles</a>. We fixed general naming and commenting styles, decided on tabs vs. spaces (4-space indent, in case you&#8217;re interested) as well as a number of minor things that weren&#8217;t project-threatening, but could have led to unnessecary confusion later on. We also keep detailed records of how we&#8217;ve changed our codes and any bugs we&#8217;ve introduced/fixed on a common wiki meaning that everyone is always up-to-date on changes.</p>
<p><strong>Personal freedom:</strong></p>
<p>By standardizing some aspects of our project, we&#8217;ve been able to have greater freedom as individual researchers. All our code is in platform-independent Python. Besides that our only other common tool is Subversion, which is also freely available and easy to use. By choosing open source and platform-independence, we have been able to have three developers work on three different platforms using different editors, IDEs and SVN clients. We can work equally well on our own machines sitting in our rooms, on the computers in our CS department&#8217;s labs, or even from the Mac Pro computers in the Arts buildings via SSH. It&#8217;s hard to quantify how much easier this independence has made our work. This has meant that we didn&#8217;t have to rush to the CS Lab&#8217;s whenever we had a thought or problem and we could whenever we wanted, however we wanted as long as we stuck to some simple rules. Scientists and programmers both need a certain amount of freedom and we&#8217;ve been able to secure this freedom by a proper choice of tools and techniques.</p>
<p><strong>Things to do:</strong></p>
<p>It&#8217;s been almost four weeks since we started using software engineering practices for our research work. We don&#8217;t know how things would have turned out had we not implemented the practices that we have. However we have come to rely heavily on the framework and guidelines that we have built for ourselves. At the same time, we&#8217;ve come to realize that there are parts of our project that could benefit from adopting some more industry-standard practices. I&#8217;ll end with a brief list of the things we plan to implement in the next few weeks:</p>
<p><strong>Robust error handling: </strong>We&#8217;re currently using some very ad-hoc methods to handle errors and track down bugs. But we&#8217;re in the process of building a flexible, yet robust error handling and reporting system into our project. Since we intend our tool to be used by non-programmers, we need to implement a system that won&#8217;t mean looking at the code everytime something goes wrong.</p>
<p><strong>Flexibility via a strong framework:</strong> Our work has turned out to have more applications than what we originally intended for it. As a result, we were considering forking our code into two separate branches. Though we still haven&#8217;t reached a proper decision regarding this, I&#8217;ve personally been trying to redesign our project into a &#8220;framework + dynamic modules&#8221; system. This is purely a software engineering effort, since it will mean a lot of refactoring and restructuring, but will not have much of an external effect rather than making our job easier.</p>
<p><strong>Unit testing and other automation:</strong> Till now, an important part of our work has been getting user feedback, partly because our system is very visual intensive and also because we weren&#8217;t quite sure what we were looking for. Now that we have a better idea of where our project should be headed and what we should be looking for, we can begin to automate some parts of our work. However we won&#8217;t just be checking for bugs, but rather generating a large number of results and then further improve our system to get what we want.</p>
<p>I&#8217;d love to hear from anyone who&#8217;s been involved in computer science research projects and has opinions of how to use software engineering principles to make things easier/more effiicient.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xcomputers.wordpress.com/152/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xcomputers.wordpress.com/152/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xcomputers.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xcomputers.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xcomputers.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xcomputers.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xcomputers.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xcomputers.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xcomputers.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xcomputers.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xcomputers.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xcomputers.wordpress.com/152/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&blog=229150&post=152&subd=xcomputers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2008/06/26/the-role-of-software-engineering-in-research/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/basu715-128.jpg" medium="image">
			<media:title type="html">basu715</media:title>
		</media:content>
	</item>
		<item>
		<title>Evolve to Email</title>
		<link>http://bytebaker.com/2008/06/22/evolve-to-email/</link>
		<comments>http://bytebaker.com/2008/06/22/evolve-to-email/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 13:07:41 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://xcomputers.wordpress.com/?p=151</guid>
		<description><![CDATA[
Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can.
- Jamie Zawinski&#8217;s Law of Software Envelopment


Every program in development at MIT expands until it can read mail.
- rec.humor.funny

Both of the above were supposed to be humorous criticisms of software bloat: adding so many [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><div>
<blockquote><p>Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can.</p></blockquote>
<p style="text-align:right;">- <a href="http://www.jwz.org/">Jamie Zawinski&#8217;s</a> Law of Software Envelopment</p>
<p style="text-align:right;">
<blockquote>
<p style="text-align:left;">Every program in development at MIT expands until it can read mail.</p>
<p style="text-align:right;">- <a href="http://groups.google.com/group/rec.humor.funny">rec.humor.funny</a></p>
</blockquote>
<p style="text-align:left;">Both of the above were supposed to be humorous criticisms of software bloat: adding so many unnecessary features to a piece of software that it&#8217;s real functionality gets buried deep under everything else. However, I was recently working with one of our &#8216;clients&#8217; for our summer research projects and email came up. She&#8217;s marked out a number of places on Google Earth which would serve as models for the urban development aspect of the project. When she wanted to give us the placemark information, the easiest thing for her to do was to <a href="http://earth.google.com/userguide/v4/ug_sharingplacedata.html">export them as a .KMZ file</a> and attach it to an email. As we were trying to figure out the whole export-email-import process, I realized that email is a really big part of our lives.</p>
<p style="text-align:left;">Being a college student, sending files to other people, whether it&#8217;s classmates, writing assistants, or the professor, is something that I have to do on a regular basis. Even though there are public and private network drives which are meant to be used for moving files between a group or simply from a lab computer to a personal one, most students simply prefer emailing (to others or to themselves). A program having the ability to read mail might be unnecessary and a sign of bloat, but being able to send email is certainly a feature that would be very handy to most people. (Of course, if you&#8217;re a Emacs fan, then you can read/write email and browse the web from your text editor.)</p>
<p style="text-align:left;">Unfortunately there are two problems that make ubiquitous integrated email a difficult proposition. Firstly, even though many applications, such as Microsoft Office to include the ability to attach documents to email from from within the application itself, most people aren&#8217;t really aware of this feature. And so they fire up an email client to be able to create a new email and attach the document in question. Secondly, and perhaps more importantly, desktop email clients are no longer the norm. In fact, if you&#8217;re emailing a document to yourself, chances are you&#8217;re on a public computer and will be using webmail. Ideally whatever program you&#8217;re using should have a button that opens up your webmail with a new message and starts attaching your file automatically. I don&#8217;t know of any software that does this, and I don&#8217;t even know if this would be possible using current technologies. Perhaps as <a href="http://gears.google.com/">Google Gear</a>s and similar offline web technologies become more popular, you&#8217;ll someday be able to attach straight to webmail. Till then you&#8217;re stuck doing the whole cycle manually.</p>
<p style="text-align:left;">But why email, I here you ask. Yes, email shouldn&#8217;t be used for file transfer, that&#8217;s not what it was built for. In the old days you had dirt simple FTP. Nowadays you have all sorts Web2.0 backup, share, transfer services. But everyone still uses email to transfer files. Why? Once again two reasons. One, it&#8217;s easy. Seriously, what would you prefer, have your files drop into your inbox with no action on your part, or would rather open your browser (or another tab if you&#8217;re in webmail), go to a website, maybe type in a log in and password, click a link, get rid of some dialog warning you that you might be downloading the digital equivalent of leprosy, and then finally see your file? We programmers may deride our users for being lazy, but sometimes that laziness makes perfect sense. Moving on to number 2, (and again this is probably more important than 1), emailing is what people have been doing and most people really don&#8217;t want to learn a new way of doing something that gets them the same result.</p>
<p style="text-align:left;">So email is here to stay. In fact, let me clarify that, webmail is here to stay. Sure every big corporation has some fancy heavy duty email client which all it&#8217;s employees have to use, whether it be Outlook, Entourage or something else. And there are a bunch of old-timers clinging onto the last release of Eudora and <a href="http://www.lifehacker.com.au/tips/2008/01/31/lifehacker_australia_interview.html">Linus Torvalds running Alpine</a>. But webmail is gradually becoming what every normal person uses. So if you&#8217;re out to write the next killer app then you&#8217;ll almost certainly be one step up if you can figure out a way to directly export to webmail attachment (at least the big ones like Gmail, Hotmail and Yahoo). Of course, if you&#8217;re app is some social web thingy with &#8220;sharing&#8221; as the main keyword, you might as well just latch onto Facebook or Twitter.</p>
<p style="text-align:left;">Realizing that email is one of the most powerful forces on the internet (never mind that most web traffic is <a href="http://www.ipoque.com/news_&amp;_events/internet_studies/internet_study_2007">BitTorrent</a>), leads us to understand one of the reasons why Google has in a few years become such a powerful player in the digital world. Let us never forget that their first major product outside of search was Gmail. And Gmail was nice, a gigabyte of space, no glaring graphic ads, no deactivation if you don&#8217;t log in regularly. Throw in the whole beta-invites thing to make forbidden fruit more sweet and you have people lining up. And once they had people pulled in by what was arguably a superior product to anything else available at the time, they could leverage it. People don&#8217;t need a gigabyte to store email, they need it store attachments. So give them quick virus scanning of attachments, give them image-thumbnails so they don&#8217;t sit around forever waiting to download something they didn&#8217;t want to see. Add an MP3 player for people who still don&#8217;t know about P2P. <a href="http://www.techcrunch.com/2006/03/09/writely-confirms-google-acquisition/">Acquire a small startup</a> building a web-based word processor and offer to open up people&#8217;s documents without them having to download. Let them be able to make changes, save and most importantly email back. Etc Etc, you get where I&#8217;m going with all this. Sure this isn&#8217;t the whole story of Google&#8217;s rise to power, but it&#8217;s important to realize the same thing that Google did: that if you structure your business model around something that everyone uses, like email, you&#8217;ll have an easier time drawing them to what other stuff you want them to use.</p>
<p style="text-align:left;">So the moral of today&#8217;s rant is: Email is big, it will be, and it&#8217;s not controlled by a monopoly. If you can leverage, then by all means do so. I&#8217;ll end with a <a href="http://www.jwz.org/doc/groupware.html"></a>succinct quote from another Jamie Zawinski article regarding <a href="http://www.jwz.org/doc/groupware.html">Groupware</a>:</p>
<blockquote>
<p style="text-align:left;">And if it doesn&#8217;t work with webmail, you&#8217;ve lost before you&#8217;ve   even begun, so don&#8217;t do something dumb like requiring a plugin.</p>
</blockquote>
<p style="text-align:left;">
</div>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xcomputers.wordpress.com/151/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xcomputers.wordpress.com/151/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xcomputers.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xcomputers.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xcomputers.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xcomputers.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xcomputers.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xcomputers.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xcomputers.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xcomputers.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xcomputers.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xcomputers.wordpress.com/151/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&blog=229150&post=151&subd=xcomputers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2008/06/22/evolve-to-email/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/basu715-128.jpg" medium="image">
			<media:title type="html">basu715</media:title>
		</media:content>
	</item>
		<item>
		<title>Cocoa, Python and the quest for platform independence</title>
		<link>http://bytebaker.com/2008/06/21/cocoa-python-and-the-quest-for-platform-independence/</link>
		<comments>http://bytebaker.com/2008/06/21/cocoa-python-and-the-quest-for-platform-independence/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 21:54:47 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
		
		<category><![CDATA[Operating Systems]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[cocoa]]></category>

		<category><![CDATA[GUI]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[tk]]></category>

		<guid isPermaLink="false">http://xcomputers.wordpress.com/?p=146</guid>
		<description><![CDATA[For the past few days, I&#8217;ve been looking into Apple&#8217;s Cocoa infrastructure in some detail. The reason once again stems from my research projects. All our code is in platform-independent Python meaning that we can develop on any of the 3 popular operating systems and then run on any others. This has been a great [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>For the past few days, I&#8217;ve been looking into Apple&#8217;s <a href="http://en.wikipedia.org/wiki/Cocoa_(API)">Cocoa</a> infrastructure in some detail. The reason once again stems from my research projects. All our code is in platform-independent Python meaning that we can develop on any of the 3 popular operating systems and then run on any others. This has been a great advantage since the three members of our team each run different OSes. For most of the time our project was purely command-line and text input based, using graphics only for the final display. However we have now come to the point where we need to fork our system into two different systems: one for architects and one for artists. How each program will develop is something that we will work on over the next few weeks, but one thing is clear: for the artists at least, a purely textual interface will simply not do.</p>
<p>Till now our system had been accepting an instruction file as input. While this method of using a instruction was very powerful (we could essentially embed our own programming language), this not the direction we want to go with the artists. And besides, not every artist wants to sit down and right pages of instruction to draw a picture, we might as well ask them to write the program themselves. It would be best to create a GUI for them to use. Even before this had been clear, I had written a simple interface that was essentially a text editor containing a hook to our Python backend. It was written in <a href="http://en.wikipedia.org/wiki/Tk_%28framework%29">Tk</a>, was exceptionally ugly, but got the job done.</p>
<p><a href="http://xcomputers.files.wordpress.com/2008/06/org1.png"><img class="aligncenter size-medium wp-image-149" src="http://xcomputers.files.wordpress.com/2008/06/org1.png?w=300&h=199" alt="My Tk Interface running under Leopard" width="300" height="199" /></a></p>
<p>Now I think the Tk toolkit is capable of letting me create the entire GUI interface that I have in mind and it will be cross platform as well, but there&#8217;s one problem: it&#8217;s ugly, especially on the Mac. I think this is because the Python Tkinter version doesn&#8217;t use Aqua (like Tcl/Tk), but rather uses X11. Though I spend a lot of my time in Vim and at the command line, I&#8217;m still a fan of good looking user interfaces (see my last post). As a result I would feel rather guilty about making something that I know would look bad on the platform it would be used most. So like a good programmer off I went to find a solution.</p>
<p>I thought I would be able to use Cocoa to create a front end, especially since Xcode now has support for the <a href="http://pyobjc.sourceforge.net/">PyObjC</a> bridge. Unfortunately this has turned out to be much harder than it at first appeared. Cocoa is Apple&#8217;s very powerful object oriented API. It is almost everything you will ever need to create a Mac application. While it allows to create native applications by leveraging the powerful infrastructure Apple provides you, it also doesn&#8217;t allow you to perform the sort of rapid duct-tape styling programming that Python and UNIX encourages. In Python it&#8217;s very easy to write your core application in Python with any number of GUI front-ends that are easily interchangeable. Cocoa, on the other hand, is not another GUI toolkit that you can simply add to the mix. If you want to use, you&#8217;ll have to invest a certain amount of time in learning your way around.</p>
<p>Python can&#8217;t communicate with Cocoa directly. To  have your Python programs leverage Cocoa, you need to go through the PyObjC bridge. Though the bridge is certainly effective and I could use it, I&#8217;ve been having troubles finding decent documentation. Apple&#8217;s own tutorial is the sort of document I&#8217;m looking for, but it is dangerously out of date. Lacking a proper tutorial, I would have to figure out a lot of things on my own. Once again, a large time investment.</p>
<p>Considering that I have only two weeks left to make real progress on my project and that learning Cocoa or Objective-C was not my original goal, I&#8217;ve decided not to pursue that avenue at the moment. I would certainly love to learn Cocoa at some point in the future and PyObjC seems like it could become a very powerful tool. But I simply don&#8217;t have the time at the moment. I am going to start working on a proper GUI interface in Tkinter. Perhaps sometime later this year, I&#8217;ll get back to some Cocoa.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xcomputers.wordpress.com/146/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xcomputers.wordpress.com/146/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xcomputers.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xcomputers.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xcomputers.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xcomputers.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xcomputers.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xcomputers.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xcomputers.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xcomputers.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xcomputers.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xcomputers.wordpress.com/146/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&blog=229150&post=146&subd=xcomputers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2008/06/21/cocoa-python-and-the-quest-for-platform-independence/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/basu715-128.jpg" medium="image">
			<media:title type="html">basu715</media:title>
		</media:content>

		<media:content url="http://xcomputers.files.wordpress.com/2008/06/org1.png?w=300" medium="image">
			<media:title type="html">My Tk Interface running under Leopard</media:title>
		</media:content>
	</item>
		<item>
		<title>OS X Leopard, Firefox 3 and native UI</title>
		<link>http://bytebaker.com/2008/06/19/os-x-leopard-firefox-3-and-native-ui/</link>
		<comments>http://bytebaker.com/2008/06/19/os-x-leopard-firefox-3-and-native-ui/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 15:22:51 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
		
		<category><![CDATA[Operating Systems]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[firefox]]></category>

		<category><![CDATA[leopard]]></category>

		<category><![CDATA[snow leopard]]></category>

		<guid isPermaLink="false">http://xcomputers.wordpress.com/?p=144</guid>
		<description><![CDATA[I installed Firefox 3 yesterday on both my old G4 Mac and my Windows laptop. Arch linux, which I normally use doesn&#8217;t have a package for it yet. Firefox 3 has a number of new features, which are being talked about on almost any random technology site, so I won&#8217;t bore you with them. I&#8217;ll [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I installed Firefox 3 yesterday on both my old G4 Mac and my Windows laptop. Arch linux, which I normally use doesn&#8217;t have a package for it yet. Firefox 3 has a number of new features, which are being talked about on almost any random technology site, so I won&#8217;t bore you with them. I&#8217;ll just focus on one thing that I like: the changes to the user-interface.</p>
<p>Firefox 1 and 2 sported a UI that seemed to be uniform across platforms. However this uniformness across platforms also meant that Firefox didn&#8217;t quite look like the other applications for the platform. This isn&#8217;t really a big thing, especially considering the horrible UI inconsistencies introduced in Windows Vista. But at the same time, it&#8217;s little touches like this that can make or break an app. Sure there were skins, but you really want something like that to builtin. One of my favorite pet peeves was regarding Firefox 2 on OS X. The buttons for various web apps like Gmail or the Google search page&#8217;s search button would show up as ugly Windows 95-ish rectangular boxes rather the sleek Mac buttons. It was something that really irritated me, since I spent a lot of time in Gmail. I&#8217;ve been glad to see that the new Firefox fixes that and adopts a very native look and feel.</p>
<p>I also upgraded my G4 Mac to OS X Leopard today. I had been putting it off since it has only a 1.25GHz processor and less than a gigabyte of RAM. However, it turns out that my fears were mostly unfounded. It took about 20 minutes to install and it runs as fast as Tiger did. The only noticeable difference is that the boot and login times are somewhat longer. But considering that I rarely logout or shutdown, that isn&#8217;t really an issue at all. I&#8217;m surprised by how Apple&#8217;s development takes into account older machines and actively works to extend their lifetimes. This stands in sharp contrast to the effect that Windows has as the Great Moore&#8217;s Law Compensator. In fact I will go as far as to say, that some things actually run better on Leopard than on Tiger, the Leopard-Firefox 3 combo in fact seems to very capable.</p>
<p>On Tiger I always experienced Flash videos being somewhat choppy irrespective of what browser I used. That problem no longer exists on Leopard. Furthermore, the UI changes to Firefox fit right in with the overall darker look that Leopard sports. I&#8217;m really looking forward to using Spaces, which should come in really handy as I start doing Cocoa application development. I was also impressed by how little impact Spotlight scanning the disk had on performance. I would never have known it was going on if I hadn&#8217;t tried to use it. There are some features of Leopard which I won&#8217;t be using such as Time Machine ( I have a homegrown SVN backup system), and that will probably mean my system won&#8217;t be under a full load anytime. If it turns out that my system can&#8217;t handle (considering that I&#8217;ll be using Xcode fairly heavily), adding a gigabyte of RAM might help speed things up. I had been considering buying a new Macbook to last me until the end of college, but it seems like my current machine will be all the Mac I&#8217;ll need for a few more years (or at least until Snow Leopard hits the stage).</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xcomputers.wordpress.com/144/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xcomputers.wordpress.com/144/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xcomputers.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xcomputers.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xcomputers.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xcomputers.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xcomputers.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xcomputers.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xcomputers.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xcomputers.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xcomputers.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xcomputers.wordpress.com/144/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&blog=229150&post=144&subd=xcomputers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2008/06/19/os-x-leopard-firefox-3-and-native-ui/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/basu715-128.jpg" medium="image">
			<media:title type="html">basu715</media:title>
		</media:content>
	</item>
		<item>
		<title>Back to the drawing board</title>
		<link>http://bytebaker.com/2008/06/17/back-to-the-drawing-board/</link>
		<comments>http://bytebaker.com/2008/06/17/back-to-the-drawing-board/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 20:53:58 +0000</pubDate>
		<dc:creator>Shrutarshi Basu</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[computer graphics]]></category>

		<category><![CDATA[lindenmayer systems]]></category>

		<guid isPermaLink="false">http://xcomputers.wordpress.com/?p=143</guid>
		<description><![CDATA[I&#8217;ve just returned from meeting one of our clients for my summer projects: a professor in my college&#8217;s art department. What we have developed over the last three weeks is essentially a way to stitch together fixed images into probability-controlled tilings. However, it turns out that what our artist friends really need is more fine [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;ve just returned from meeting one of our clients for my summer projects: a professor in my college&#8217;s art department. What we have developed over the last three weeks is essentially a way to stitch together fixed images into probability-controlled tilings. However, it turns out that what our artist friends really need is more fine grained image control. They want to be able to create much more interesting patterns combining both images and geometric patterns. As I was explaining how our program worked, I realized that our instruction language model was rather complicated and not really suited for what the artists needed. So it seems, that our program is really not a very good match to what the artists need.</p>
<p>At this point, there are a number of things we could. We could go back to the drawing board, start from scratch and rewrite our system according to what the artists need. We could also try to build in top of our existing program and try to add and modify it to bring its functionality close to what we need. However, we need to keep in mind, that we had also planned to use this system to create a automated urban planner. We still haven&#8217;t met with the architect yet, but it seems like our system might be a better fit for what she needs. But that doesn&#8217;t answer the question: what do we do?</p>
<p>Now if this were a real software project with a delivery deadline, this state of affairs would probably be a very bad thing. Luckily this is still very much a research project so there&#8217;s quite a lot of leeway. Unfortunately, we&#8217;re still not quite sure of what exactly we have to do. It seems that our general architecture is still valid and will work, however the details will have to be remade. We&#8217;ll need a new way to generate the patterns from the instructions, simply stitching together images won&#8217;t do. It is possible that we will need multiple drawing systems working on top and parallel to each other. The instruction language also needs to be changed to make it more suitable to the artists&#8217; need. We currently have a system that is geared towards placement of individual large scale elements, and nothing that deals with simple pattern generation. Ideally we would need a blend of both.</p>
<p>At this point, it&#8217;s easy to get disheartened. After all, we&#8217;ve spent almost 3 weeks creating something that we just learned is pretty close to useless. On the flip side, we are certainly not going to get bored. From a personal standpoint, this has still been a success, I&#8217;ve learned about parsing methods and language design. The experience that I&#8217;ve gained will make it easier for me to help develop a language that is powerful enough to express everything that the artists want to, while not requiring them to spend days learning it. It also means that the next version will also hopefully be developed much faster and more smoothly than the previous two versions. I am going to make it my personal project to see how fast and efficiently we can develop subsequent versions.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xcomputers.wordpress.com/143/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xcomputers.wordpress.com/143/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xcomputers.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xcomputers.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xcomputers.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xcomputers.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xcomputers.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xcomputers.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xcomputers.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xcomputers.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xcomputers.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xcomputers.wordpress.com/143/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bytebaker.com&blog=229150&post=143&subd=xcomputers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://bytebaker.com/2008/06/17/back-to-the-drawing-board/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/basu715-128.jpg" medium="image">
			<media:title type="html">basu715</media:title>
		</media:content>
	</item>
	</channel>
</rss>