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

<channel>
	<title>Computing Life</title>
	<atom:link href="http://computinglife.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://computinglife.wordpress.com</link>
	<description>Insights from the world of computing</description>
	<lastBuildDate>Mon, 12 Oct 2009 19:40:30 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='computinglife.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/8742adf594215cdfdccab1d9b9ac2470?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Computing Life</title>
		<link>http://computinglife.wordpress.com</link>
	</image>
			<item>
		<title>Making code reviews stick</title>
		<link>http://computinglife.wordpress.com/2009/10/12/making-code-reviews-stick/</link>
		<comments>http://computinglife.wordpress.com/2009/10/12/making-code-reviews-stick/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 18:44:29 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Coding Styles & Code Smells]]></category>
		<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=687</guid>
		<description><![CDATA[The ultimate aim of code review is to find bugs and not be another check box<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=687&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h2><strong>Spot the bug</strong></h2>
<p>Code A</p>
<pre class="brush: cpp;">
STDMETHODIMP CMIB2Iface::CollectData(LONG DeviceId, BSTR IpAddress) {
	list&lt;CString&gt;::iterator listIter;
	for(listIter = ccmList.begin(); listIter != ccmList.end(); listIter++) {
		CString ccmIP = *listIter;
		long tempCCMID = getDeviceID(ccmIP);

		// Handle it only if device ID is valid
		if (tempCCMID != -1) {
				CString component;
				long eventType = 0;
				if (endPointType == 0) {
					eventType = 47;
					component = &quot;Gateway Link - &quot;;
				} else if (endPointType == 1) {
					eventType = 48;
					component = &quot;Unity Link - &quot;;
				}

				component += endPointName;
				// Construct an event.
				LunaEvent ev;
				CString attributes = &quot;linkDestination = &quot; + endPointIP;
				ev.attributes = attributes.AllocSysString();
				ev.eventTypeId = eventType;
				ev.deviceId = theCCMID;
				ev.component = component.AllocSysString();
				ev.timestamp = (COleDateTime::GetCurrentTime()).operator DATE();

				try {
					if (endPointStatus == 0) {
						if (tempCCMID == theCCMID) {
							// Raise/Update an event whenever status is 0
							if (prevEndPointStatus == 0) {
								// Case 00
								unsigned long result;
								MY_LOG_DBG(functionName &lt;&lt; &quot;: Updating Event on Component : &quot; &lt;&lt; component);
								if (faultManager-&gt;updateEvent(ev, &amp;result) == S_OK) {
									MY_LOG_DBG(functionName &lt;&lt; &quot;: Updating Event Secceeded&quot;);
								}
							} else {
								// Case 10
								unsigned long result;
								MY_LOG_DBG(functionName &lt;&lt; &quot;: Raising Event on Component : &quot; &lt;&lt; component);
								if (faultManager-&gt;raiseEvent(ev, &amp;result) == S_OK) {
									MY_LOG_DBG(functionName &lt;&lt; &quot;: Raising Event Secceeded&quot;);
								}
							}
						}
					} else {
						// Case 11 and 01
						// Always clear the event, and for all CCMs in the cluster.
						unsigned long result;
						MY_LOG_DBG(functionName &lt;&lt; &quot;: Clearing Event on Component : &quot; &lt;&lt; component);
						if (faultManager-&gt;clearEvent(ev, &amp;result) == S_OK) {
							MY_LOG_DBG(functionName &lt;&lt; &quot;: Clearing Event Succeeded&quot;);
						}
					}
				} catch(...) {

				}

				SysFreeString(ev.component);
				SysFreeString(ev.attributes);
		} // End of if (deviceID != 0)
	} // End of for loop
	return 0;
}
</pre>
<p>Code B</p>
<pre class="brush: cpp;">

STDMETHODIMP CMIB2Iface::CollectData(LONG DeviceId, BSTR IpAddress)
	{
	this -&gt; m_sLog.SetIpAddress(IpAddress);

	/*   ---------------------------------------------------------------------   */

	m_oInspector.AddCollatedRowInspectorFn_Post(FilterIfTypeInfoCollect,
						(void *) this);

	/*   ---------------------------------------------------------------------   */

	m_oInventory.ClearAllCollectors();

	if (BOMBED(DoTableGenericInit(m_oInventory, sIfaceTblColln, m_sLog)))
		{
		_log(L_ERROR, &quot;Mib2 collect table init failed \n&quot;);
		return S_OK;
		}

	/*   ---------------------------------------------------------------------   */

	if (PASSED(m_oInventory.CollectInventory (DeviceId, IpAddress)))
		{
		GetIfFaultsExistForDevice(DeviceId, LINK_DOWN_NUM , m_iFaultExist, m_sLog);
		m_oInventory. InspectData(DeviceId, eForInventory);
		m_oInventory. SaveData   (DeviceId, eForInventory);
		}

	return S_OK;
	}
</pre>
<div class="wp-caption alignleft" style="width: 147px"><img title="Review " src="http://t0.gstatic.com/images?q=tbn:hrzwY5m1X-CxiM:http://img3.ifilmpro.com/resize/image/stills/films/resize/istd/2921609.jpg" alt="Code Review Department" width="137" height="103" /><p class="wp-caption-text">Code Review Department</p></div>
<p>If tasked at reviewing the 2 pieces of code listed above, chances are that, you might as a reviewer, want to get rid of the task of reviewing A, than spend any more time on an obviously bad effort at coding. Having badly styled code around, allows bugs to remain, and fixes to be nothing more than half hearted patches which neither the patcher nor the original coder can recognize after the act is done.</p>
<p>One bad turn soon begets another and the rate at which the bad code degenerates into sphagetti mess can only be matched by the speed at which engineers long for a total rewrite of this mess. (Failing which they secretly start yearning for a change of job or worse, stick to the same one in a lost/zombie sort of way or decide what they really want to be is a manager)</p>
<h2>Humans are not compilers</h2>
<div class="wp-caption alignnone" style="width: 364px"><img src="http://www.sylvainpaillard.com/wordpress/wp-content/uploads/2009/01/iui.jpg" alt="Human Compiler" width="354" height="400" /><p class="wp-caption-text">Human Compiler</p></div>
<p>Unlike compilers, humans being are quite easily put off by bad code and no act of redemption can save a bad piece of code from degenerating further and further until it can only be discarded. This is frequently the reason why engineers advocate re-architecture, which is hugely more expensive than adapting existing code. <a href="http://www.joelonsoftware.com/articles/fog0000000069.html" target="_blank">The lost business oppurtunity that this represents can be huge</a> and the very effort of doing so could run into millions of dollars per year for a major software company like CISCO.</p>
<p>Any act of review on such a bad piece of code can only seen as a sham &#8211; who after all in their right mind would want to spend so much time reviewing someone else&#8217;s code when it would so obviously take such a long time to do it.</p>
<blockquote><p><em>So the first step in getting working reveiws is to not let the process to be viewed as sham &#8211; and the only way that this can be achieved is by respecting the reviewer&#8217;s time and patience</em>.</p></blockquote>
<h2>How do you respect a reviewers time ?</h2>
<p>By giving readable code (see above)</p>
<h2>How do you make code readable ?</h2>
<ol>
<li>By avoiding <a href="http://martinfowler.com/bliki/CodeSmell.html" target="_blank">coding smells</a></li>
<li> bi folwing sm cdng convntns(by following the same coding conventions aka coding style)</li>
</ol>
<p>Twenty different people and their cousins would have an equal number of vastly differing coding styles. If all of these are to be heaped on same page or on the same reviewer, again its equivalent to implicitly admitting that you have no control and that the whole process is a sham. Therefore getting the same style of code to be used EVERYWHERE is what has to be ENFORCED for successful code reviews to happen.</p>
<h2>My experience</h2>
<p>In the <a href="http://www.omnesys.com/index.htm" target="_blank">only place i have personally seen code reviews to actually work</a>, a body of code could be rejected simply because a character exceeded the max allowed no of column width of 80 or because in a single location in code, variable was not aligned. The rationale behind this was the assumption that that the coder did not know about this rule and therefore there would be many other places where this mistake would be made.</p>
<p>The act of rejecting the whole body of code due to single misfitting character sends the right signals and soon it becomes a matter of pride to get code accepted without major comments.</p>
<p>The other <a href="http://www.codinghorror.com/blog/archives/000615.html" target="_blank"><strong>advantages in having readable code</strong></a> is that</p>
<ol>
<li>Simple Bugs are easier to spot</li>
<li> Design issues are easier to spot</li>
<li> Review happens faster (that builds more support for review)</li>
<li> Bug fixes are easier</li>
<li> Module upgrades or re-architecture would be easier</li>
<li> SPotting reuse chances are easier &#8211; and hence aids faster development</li>
<li>tois which so often happens are much more easier</li>
</ol>
<h2>How can the organizations aid in creating readable code</h2>
<ol>
<li>Use tools that can perform static analysis based on accepted coding styles and flags issues, before reviewer  even reads one line of code</li>
<li> Make code readability indexes, part of statistics of the project so that they can be easily tracked</li>
<li>Use tools that can reformat existing code base to the accepted style, no matter what that is, so that its  easy to get off the block when the process starts</li>
</ol>
<h2>1 out of 2 is still only 50%</h2>
<p>Fixing the code review-ability is only half the fight. Where would a reviewer be, without a programmer who wants the code to be reviewed ? In a team of colleagues, its only more than easy for everyone to scratch everyone else&#8217;s back and implicitly give easy reviews. Its also natural for colleagues to contest one others reviews. Therefore, there has to be an external entity and stimulus to engage in code reviews.</p>
<p>Of-course enforcing the code standards using tools part of the build process and enforced through management numbers would be a good start, though that alone might not make it stick.</p>
<p>My experience is that usually stimulus takes the form of bragging factor or nerd pride amongst peers. When an obviously respected person  / geek is to review your code, you would want it to be more shiny and that extra perfect.</p>
<p>Companies like Cisco can easily make this happen by having more tech leads to review the code, and having a system of recommendations where recommended parts of code can even get promoted to technical evangelists like Stroustrup or Gosling once a year for review, which can be such an honor. Tracking  programmers, coding bullshit index would also be a good measure for wanting a review.</p>
<h2>The human factor</h2>
<p>Coding and reviewing code, is ultimately a very human activity and any mechanical solutions to the problems in this domain are bound to fail. Ultimately a more humane and social solution would be required to transform this bit of &#8216;work&#8217; into something more than statistic, and something of an advantage.</p>
<blockquote><p><strong>“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”</strong></p>
<p style="padding-left:30px;"><em>- Martin Fowler</em></p>
</blockquote>
<p><!--Session data--></p>
<p><!--Session data--></p>
<p><!--Session data--></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/687/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/687/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/687/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/687/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/687/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/687/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/687/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/687/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/687/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/687/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=687&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/10/12/making-code-reviews-stick/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>

		<media:content url="http://t0.gstatic.com/images?q=tbn:hrzwY5m1X-CxiM:http://img3.ifilmpro.com/resize/image/stills/films/resize/istd/2921609.jpg" medium="image">
			<media:title type="html">Review </media:title>
		</media:content>

		<media:content url="http://www.sylvainpaillard.com/wordpress/wp-content/uploads/2009/01/iui.jpg" medium="image">
			<media:title type="html">Human Compiler</media:title>
		</media:content>
	</item>
		<item>
		<title>Which platform to use for a new application?</title>
		<link>http://computinglife.wordpress.com/2009/07/14/which-platform-to-use-for-a-new-application/</link>
		<comments>http://computinglife.wordpress.com/2009/07/14/which-platform-to-use-for-a-new-application/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 17:07:53 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=671</guid>
		<description><![CDATA[We , (me and my kid sis) have been recently thinking of creating an expense manager application. Why an expense manager? Well, because an expense manager would be useful for us to keep expenses and since we could not really find any good ones (UI , usability wise) on the net, for free.
Once we decided [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=671&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>We , (me and <a href="http://computinglife.wordpress.com/2007/06/14/my-kid-sis-sister-wrote-a-better-grep-than-microsoft-programmers/" target="_blank">my kid sis</a>) have been recently thinking of creating an expense manager application. Why an expense manager? Well, because an expense manager would be useful for us to keep expenses and since we could not really find any good ones (UI , usability wise) on the net, for free.</p>
<p>Once we decided to make one, the question was, what tools to use? Which platform /  language and related tools should we chose? Well after ruminating over these for a few days here is what we came up with.</p>
<p><strong>Platform Choice &#8211; iPhone is cool but Apple has entry barriers for dev</strong><strong>elopment. </strong></p>
<p><img class="alignleft size-full wp-image-677" title="Bad apple" src="http://computinglife.files.wordpress.com/2009/07/bad-apple.gif?w=170&#038;h=220" alt="Bad apple" width="170" height="220" /></p>
<p>I was initially in favor of developing the application for the iPhone but there seems to be so many available. We were also discouraged from developing for iPhone by the fact that it required a hacked up VM or a Mac for iPhone application development.  Rumors, of how Apple tight fistedly controls, who could develop for the platform, along with an entry fees for being listed, took out a lot of enthusiasm from Apple development.  I kept having this deja Vu on <a href="http://www.vikingwaters.com/htmlpages/PCHist.htm" target="_blank">how Apple missed the boat on the PC revolution</a>, due to its tight fisted policies of the past regarding Macs and now it seems to be doing the same, all over again.</p>
<p>I do though feel that a mobile phone based application would have more no of users, since the expenses can be entered into it without fail, and therefore very convenient. Its a shame that Apple is playing so hard to develop for. It</p>
<p><strong>Platform Choice &#8211; Re-invent the desktop experience</strong></p>
<p>Since iPhone seemed out of the question, the desktop screen area and its powerful graphics cards seemed the next best for developing a cool eye catching UI application and to utilize the bigger screens for useful reports.</p>
<p>So, its a desktop app that we would do.</p>
<p><strong>What language should i use for desktop development? </strong></p>
<p>Next up the question is the choice of programming language / platform on the desktop, which we are going to use for our apps. I definitely cant use C++ because that doesn&#8217;t seem to make any sense these days with all those .NET and Java or python type easy to use platforms available. These are simply too productive to ignore and we are not making a performance sensitive application anyhow. So that brings our choice down to a compiled Ui friendly language like</p>
<p><strong>.NET or Java</strong></p>
<p style="text-align:left;">I believe a slick UI (User Interface) is going to influence users more than anything else, with customer&#8217;s bar of expectations set high, by the iPhone and Vista user experiences.  .NET with its WPF User Interface and close Windows OS integration, supported by the excellent Visual Studio development environment would make for a great platform is what i felt.</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-675" title="WPF UI" src="http://computinglife.files.wordpress.com/2009/07/wpf-ui.jpg?w=323&#038;h=354" alt="WPF UI" width="323" height="354" /></p>
<p> </p>
<p>I did not want to use Java remembering its old slower Spring based User experience and since .NET looked much more slicker (due to WPF) and Visual Studio would  be a more productive tool to develop with than eclipse can be, for the windows platform. JavaFX is still too unstable and the tool support is lacking to move into it. (We did run a small evaluation and it does seem another six months or one year would be gone before some support of JFX development was available)</p>
<p>Most of our probable customers (and the future ones who might be ready to pay for a better version) are probably running Windows, so cross platform is not a big consideration. NET also plays into my expertise with windows platform and win32 API experience. So we might not get stuck with any platform issues.</p>
<p><strong>Choice of Database</strong></p>
<p>The next tool that we wanted to freeze on was a database that i would want to use along side my application. It would have to be free since i plan to ship my application for free initially. The ones i have heard of that i think might be useful here are Microsft SQL Express, SQL Lite, FireBird, MySQL, PostGres, Ingres and HSQLDB. These are the ones i have heard the most about. The one thing i have learned from my years of experience is that a more widely used tool would have most of its common problems ironed out and the public forum based support might be better too.</p>
<p><strong>So which of these can be my database? </strong></p>
<p>Multi-platform support is not a big deal for me since i have already decided to use .NET and WPF. However it definitely needs to support .Net well and it should be small. I cant expect users to make 100MB downloads to check out if a free tool is good. 6-10MB is what i think the size ought to be for this app download for it to be viable.</p>
<p>That preempts PostGres and Ingres which are both heavy weight. I did not have to try these out to know they are heavy weight because a two minute search on Google reveals how PostGres is already a competitor for enterprise apps and Ingres used to be one. Additionally Ingres seems to have lost out all backing and is being sold so that rules it out too.</p>
<p>MySQL ? Well that&#8217;s not free for commercial use . Plus i have also heard from multiple sources (mainly on Sourceforge), that the sources are a real mess and i know for a fact that till recently it did not have good SQL features like foreign integrity. Not too impressive ,I&#8217;m afraid.</p>
<p>HSQLDB is java based and introduces additional platform considerations. Not interested in that set of problems too.</p>
<p><strong>This leaves SQL server, SQL Lite and FireBird</strong></p>
<p>SQL Server is also heavy though not as heavy as PostGres. It comes to about 53 Mb in size for deployment and once deployed SQL server express behaves like a proper DB consuming lots of memory etc on the client machine.  But no, i would not want to deploy a DB server on my personal laptop just to keep my accounts.</p>
<p><strong>SQL Lite vs FireBird</strong></p>
<p>So it boils down to SQL Lite and FireBird. Between the both it boils down to IF we require the extra functionality offered by FireBird. SQL Lite is very small (230K) but lacks many SQL features like row/table locking and integrity constraints or stored procedures and such. BUT it supports seamless movement to a mobile environment if we require it.</p>
<p>FireBird is great but might not  be suitable for mobile environments. So the question i guess is will i require a mobile environment support, given my infatuation towards mobile development?</p>
<p><strong>Do we require Mobile Environment support?</strong></p>
<p>After some thought i decided to not muddle my development by imposing some arbitrary requirement that might not ever be required. I should develop for Mobile if i want to go Mobile and not ruin my desktop experience for the sake of some doubt-able future compatibility or requirement. I&#8217;m sure a better user experience can be developed instead if i can devote  the time saved in getting around SQL Lite&#8217;s limitations to the development of my application.</p>
<p><strong>Database = FireBird </strong><br />
So FireBird it is and hopefully it plays well with .NET (<a href="http://firebirdsql.org/dotnetfirebird/">http://firebirdsql.org/dotnetfirebird/</a>) else we shall have to move to to SQL Lite.</p>
<p><strong>What does FireBird have?<br />
</strong></p>
<p>Well it has .NET support, deployment size is 2 MB + has XCOPY deployment. It has row and table locking, integrity constraints, stored procedure support for faster data manipulation) and VStudio .NET Visual Design Support.  It also used to be developed by Borland and that speaks for an impressive past history however wrong i might be.</p>
<p>It has all the pluses is what i felt, not to mention a favorable review in the past from a friend who was doing the same kind of research. That was four or five years back. Things can only be better now.</p>
<p>So that&#8217;s it then i guess. The best tools for the job are decided and all it takes is the time to build one. I shall keep this space updated with how good or bad FireBird turns out to be, when we really start using it.</p>
<p>Cheers !!!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/671/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/671/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/671/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/671/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/671/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=671&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/07/14/which-platform-to-use-for-a-new-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>

		<media:content url="http://computinglife.files.wordpress.com/2009/07/bad-apple.gif" medium="image">
			<media:title type="html">Bad apple</media:title>
		</media:content>

		<media:content url="http://computinglife.files.wordpress.com/2009/07/wpf-ui.jpg" medium="image">
			<media:title type="html">WPF UI</media:title>
		</media:content>
	</item>
		<item>
		<title>Abstract Oriented Obect Architecture &#8211; (rant)</title>
		<link>http://computinglife.wordpress.com/2009/07/10/abstract-oriented-obect-architecture-rant/</link>
		<comments>http://computinglife.wordpress.com/2009/07/10/abstract-oriented-obect-architecture-rant/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 07:16:02 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=667</guid>
		<description><![CDATA[ My first job was to program Windows GUI objects using MFC architecture. So i do &#8220;get&#8221; objects and OO terminology.
However i was stumped to read the following explanation, of a .NET Data provider product (aka data source connectivity classes), that can talk to databases and provide integration with the new ORM (Object Relational Mapping) layer, that microsoft [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=667&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p> My first job was to program Windows GUI objects using MFC architecture. So i do &#8220;get&#8221; objects and OO terminology.</p>
<p>However i was stumped to read the following explanation, of a .NET Data provider product (aka data source connectivity classes), that can talk to databases and provide integration with the new ORM (Object Relational Mapping) layer, that microsoft has come up with for .NET applications</p>
<p><em>&#8220;It equips Microsoft .NET based applications, development environments, and programming languages with conceptual entity-based access to native and heterogeneous data sources. &#8220;</em></p>
<div class="wp-caption aligncenter" style="width: 410px"><a href="http://www.thewitz.com/issue-no-1/12-mfa-thesis-paper-parts-i"><img title="Conceptual Entity" src="http://mocoloco.com/art/archives/pittman_three_nov_05.jpg" alt="Conceptual Entity" width="400" height="473" /></a><p class="wp-caption-text">Conceptual Entity</p></div>
<p>How soon can you say WTF?  I wonder why folks feel compelled to string so many heavy words together, when describing anything related to OO technology, in anything more than a  semi formal  setting. </p>
<p> I dont know if an architect / developer or a marketing personnel wrote that statement. In fact i did not find their site by searching on any of the weasel like words found in the description. In fact i searched for more practical stuff that i wanted my software to do, which thankfully was available on the <a href="http://wikis.openlinksw.com/dataspace/owiki/wiki/VirtuosoWikiWeb/VirtAdoNet35Provider" target="_blank">page</a> too.</p>
<p>This weaselization / complexfication of terminology seems to be a given fart to contend with, in the Java world and it makes me sick to see the cancer spreading to maybe the .NET / MSDN world too. Please, would anyone care to provider a linguistic inter mapping layer for conceptual to real word entities in the object oriented technology space?</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/667/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/667/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/667/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/667/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/667/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=667&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/07/10/abstract-oriented-obect-architecture-rant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>

		<media:content url="http://mocoloco.com/art/archives/pittman_three_nov_05.jpg" medium="image">
			<media:title type="html">Conceptual Entity</media:title>
		</media:content>
	</item>
		<item>
		<title>Random Text Generation on Linux</title>
		<link>http://computinglife.wordpress.com/2009/04/20/random-text-generation-on-linux/</link>
		<comments>http://computinglife.wordpress.com/2009/04/20/random-text-generation-on-linux/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 07:04:30 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[pipe]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=653</guid>
		<description><![CDATA[I recently came across a requirement to dynamically generate a password on a Linux system.
Being a password, it implied that the text had to be truly random, which is a tough order of requirement for any home-brew algorithm, once you really get an idea of  on why its hard to generate  randomness
The solution = [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=653&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I recently came across a requirement to dynamically generate a password on a Linux system.</p>
<p>Being a password, it implied that the text had to be truly random, which is a tough order of requirement for any home-brew algorithm, once you really get an idea of  on <a href="http://stackoverflow.com/questions/632873/why-is-it-hard-for-a-program-to-generate-random-numbers" target="_blank">why its hard to generate</a> <a href="http://en.wikipedia.org/wiki/Information_entropy" target="_blank"> randomness</a></p>
<div class="wp-caption alignnone" style="width: 490px"><img src="http://web.archive.org/web/20011027002011/http://dilbert.com/comics/dilbert/archive/images/dilbert2001182781025.gif" alt="Radom is hard" width="480" height="169" /><p class="wp-caption-text">Radom is hard</p></div>
<p><strong>The solution = <a href="http://en.wikipedia.org/wiki/Urandom" target="_blank">/dev/random</a> . </strong></p>
<p>In theory /dev/random is a file you can read infinitely. However in practise you would find that reading this file would block every now and then until it has contents in it, generated randomly from device driver noise bits. So you might have to move your mouse or spin the disk etc to get some random bits into the /dev/random file.</p>
<p><strong>A More practical solution = <a href="http://lwn.net/Articles/261091/" target="_blank">/dev/urandom</a></strong></p>
<p>urandom can get random iput from from /dev/random, else it generates fairly randomized bytes for you, using a Random Number Generator Cryptographic algorithm, provided by a kernel module of the same name. AND, its never guaranteed to block. Talk about best of both worlds !!!</p>
<p><strong>My random Text Command</strong></p>
<p>Bytes read from random or urandom are not likely to be all ASCII and therefore requires to be filtered for ASCII, for which this was the chosen solution -</p>
<blockquote><p>tr -dc A-Za-z0-9 &lt;/dev/urandom |  head -c 14</p></blockquote>
<p><strong>The problem in the solution<br />
</strong></p>
<p>The only doubt that this simple solution envisaged in my rustic Unix mind was if this command line would exit after head had received the 14 characters it required.</p>
<p>If you do not know the answer, it is contained in my <a href="http://computinglife.wordpress.com/2009/04/17/unix-pipe-internals/" target="_blank">previous post on Unix shell pipes</a>.</p>
<p>Happy hacking !!!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/653/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/653/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/653/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/653/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/653/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/653/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/653/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/653/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/653/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/653/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=653&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/04/20/random-text-generation-on-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>

		<media:content url="http://web.archive.org/web/20011027002011/http://dilbert.com/comics/dilbert/archive/images/dilbert2001182781025.gif" medium="image">
			<media:title type="html">Radom is hard</media:title>
		</media:content>
	</item>
		<item>
		<title>Unix pipe internals</title>
		<link>http://computinglife.wordpress.com/2009/04/17/unix-pipe-internals/</link>
		<comments>http://computinglife.wordpress.com/2009/04/17/unix-pipe-internals/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 16:51:22 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Operating system]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=635</guid>
		<description><![CDATA[Say you do this
ls / -R &#124; head -2
The simple command line above, lists (ls) the entire directory structure starting from root in a recursive fashion. Its output is piped to head which will exit after it gets 2 lines of output.
The problem
Its clear that head will complete much before ls will. This poses some [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=635&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Say you do this</p>
<blockquote><p>ls / -R | head -2</p></blockquote>
<p>The simple command line above, lists (ls) the entire directory structure starting from root in a recursive fashion. Its output is piped to head which will exit after it gets 2 lines of output.</p>
<p><strong>The problem</strong></p>
<p>Its clear that head will complete much before ls will. This poses some interesting questions like</p>
<ol>
<li>Will ls run in the background after head exits?</li>
<li>Will the entire command keep running until ls is done or will you get the prompt as soon as head exits but ls will keep running to completion in the background?</li>
<li>Will head run only after ls has finishes giving its output, thus requiring ls to run to completion?</li>
</ol>
<p>I recently ran into these same set of questions about assumptions being made in an install script that was being written for a new reporting tool we where building. So what is the deal here ? Think for a minute before you read the answers.</p>
<p style="padding-left:150px;"><strong>Pipe Basics</strong></p>
<p>I knew that the way pipe worked was to redirect the output of one process (stdout) as the input (stdin) of the process that came next in line. But this did not quite give all the answers. Therefore googling the pipe process gave some more details which i shall describe below</p>
<p style="padding-left:180px;"><strong>The details</strong></p>
<p><img class="size-full wp-image-639" title="pipe-connection2" src="http://computinglife.files.wordpress.com/2009/04/pipe-connection2.jpg?w=501&#038;h=470" alt="shell pipe setup" width="501" height="470" /></p>
<div class="mceTemp mceIEcenter">
<dl class="wp-caption aligncenter">
<dd class="wp-caption-dd">shell pipe setup</dd>
</dl>
</div>
<p><strong>Poetry in design<br />
</strong></p>
<ol>
<li>The shell sets up the pipe. The running processes use stdin / stdout as they would normally have without knowing its a pipe rather than the terminal input / output.</li>
<li>A buffer exists  between the pipe descriptors, which is handled by the kernel. Writing process will block once this buffer is full and will be able to continue once the reading processes read off this buffer.</li>
<li>The process of exec and forking means that it is impossible to say which processes run first and is governed only by CPU scheduling.</li>
<li>All the processes are in the same hierarchical level and have the shell as their parent.</li>
<li>In Linux versions before 2.6.11, the capacity of a pipe was the same as the system page size (e.g., 4096 bytes on i386). Since Linux 2.6.11, the pipe capacity is 65536 bytes.</li>
</ol>
<p><strong>But what happens when one of the piped process exits? </strong></p>
<p>Unfortunately, most of the documentation only explained how the pipe was setup by the shell and kernel.  But what we required was an explanation of what happened if one the process exits.</p>
<p>To test this i ran a few tests. Here are my observations.</p>
<blockquote><p>ls / -R | head -2 | head -20000 (exits immediately)</p>
<p>ls / -R | head -20000 | head -2 (exits immediately)</p>
<p>cat small-file.txt | ls /-R (runs for a long time)</p></blockquote>
<p>Obviously, it is the processes that read input, which makes a difference in how the piped command line behaves. So what causes this behaviour?</p>
<p style="padding-left:90px;"><strong>Enter Unix Signals</strong></p>
<p>Signals are the IPC mechanisms akin to software interrupts used by Unix like operating systems to notify running processes of interesting events. This is possibly the only way an outside event can modify the behaviour of an otherwise normal process.</p>
<p>A process could recieve a signal for IO issues / child processes termination or plain Ctrl-C related interrupt signals.  Most of the default handlers (which you can change if requires) cause the process to exit.</p>
<p>My attention having turned to signals, i ended up walking through the <a href="http://en.wikipedia.org/wiki/Signal_(computing)" target="_blank">wikipedia</a> for the master list of UNIX signals, hoping to find anything related to pipe. This caused me to find an interesting entry &#8230;</p>
<p style="padding-left:150px;"><strong>SIGPIPE</strong></p>
<p>The <a href="http://en.wikipedia.org/wiki/SIGPIPE" target="_blank">wikipedia entry for SIGPIPE </a>says <em>&#8220;When a pipe is broken, <span style="color:#993300;"><strong>the process writing to it is sent the SIGPIPE signal</strong></span>. The default reaction to this signal for a process is to terminate&#8221;.</em></p>
<p><em>If attempt is made to read from a pipe whose write end has been closed, the reader receives an EOF, which causes the read program to close in an orderly fashion.<br />
</em></p>
<p>hmmmm &#8211; applying that knowledge to our pipe commands would show that this would cause the chain of processes to exit, if a listening process exits and thus breaks the pipe chain.</p>
<p>It would have been an extreme waste of resources had ls continued to run even after head exitted in the command line ls / -R | head -2 and shows how well the UNIX system has been thought out.</p>
<p>Even more importantly it is highly intuitive that ls / -R | head -2 to exit immediately after 2 lines have been output.  This is one of the cool things about Unix, that it behaves in the manner you expect it to, as if the commands understand the social niceties of human pysche or at least hacker psyche.</p>
<p>It is also highly interesting to note that the reader receives an EOF, because output finishing first is normal but the write receives a signal if the reader has already exit, since that is an abnormal situation. Very beautiful indeed.</p>
<p>It is no wonder that such clever hacks and excellence in design makes Unix the <a href="http://www.paulgraham.com/gh.html" target="_blank">hacker platform of choice</a>.</p>
<p>Happy hacking !!!!</p>
<p><em>ps : All this would have been clear had i chose to read the documentation of the pipe system call before the investigation was begun. It goes to show how much we ignore existing documentation at our own peril. </em></p>
<p><em></em></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/635/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=635&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/04/17/unix-pipe-internals/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>

		<media:content url="http://computinglife.files.wordpress.com/2009/04/pipe-connection2.jpg" medium="image">
			<media:title type="html">pipe-connection2</media:title>
		</media:content>
	</item>
		<item>
		<title>Enforcing clean coding standards</title>
		<link>http://computinglife.wordpress.com/2009/03/20/enforcing-clean-coding-standards/</link>
		<comments>http://computinglife.wordpress.com/2009/03/20/enforcing-clean-coding-standards/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 03:01:50 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Cool-Stuff]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[code management]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[coding standards]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=630</guid>
		<description><![CDATA[If you ever needed a reason to enforce clean code &#8211; here it is, right out of MIT and researched to the hilt. The video is extremely interesting from a behavioral standpoint and extremely educative. As highly recommended as the famous Steve Jobs video.

I can vouch for what is being said because i have seen [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=630&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>If you ever needed a reason to enforce clean code &#8211; here it is, right out of MIT and researched to the hilt. The video is extremely interesting from a behavioral standpoint and extremely educative. As highly recommended as the famous <a href="http://filmpasset.se/?p=27031" target="_blank">Steve Jobs video</a>.</p>
<p><span style="text-align:center; display: block;"><a href="http://computinglife.wordpress.com/2009/03/20/enforcing-clean-coding-standards/"><img src="http://img.youtube.com/vi/nUdsTizSxSI/2.jpg" alt="" /></a></span></p>
<p>I can vouch for what is being said because i have seen this happening many times in development. The implied up shoot  ?</p>
<p><em>Clean code bases beget new code which is cleaner or clean enough. Dirty code bases attract more code which is at least just as dirty or usually even more so. </em></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/630/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=630&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/03/20/enforcing-clean-coding-standards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/nUdsTizSxSI/2.jpg" medium="image" />
	</item>
		<item>
		<title>Significant Update</title>
		<link>http://computinglife.wordpress.com/2009/02/27/significant-update/</link>
		<comments>http://computinglife.wordpress.com/2009/02/27/significant-update/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 06:10:58 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[multiple consumer]]></category>
		<category><![CDATA[single producer]]></category>
		<category><![CDATA[synchronization]]></category>
		<category><![CDATA[Threading]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=627</guid>
		<description><![CDATA[I had a chance to modify and extensively update an older post on multiple consumer, single producer problem after a reader request.
Cheers !!

       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=627&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I had a chance to modify and extensively update <a href="http://computinglife.wordpress.com/2008/02/26/how-do-you-solve-a-multiple-consumer-single-producer-problem/" target="_blank">an older post on multiple consumer, single producer problem</a> after a reader request.</p>
<p><strong>Cheers !!<br />
</strong></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/627/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/627/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/627/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/627/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/627/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=627&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/02/27/significant-update/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>
	</item>
		<item>
		<title>C++ vs Java vs Python</title>
		<link>http://computinglife.wordpress.com/2009/02/18/c-vs-java-vs-python/</link>
		<comments>http://computinglife.wordpress.com/2009/02/18/c-vs-java-vs-python/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 05:43:54 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Cool-Stuff]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Assembly]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Visual basic]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=608</guid>
		<description><![CDATA[Having been a full-time C++ programmer for all of the past ten years, I recently had the unique opportunity of seriously studying Java almost 10-15 years after it started becoming popular. In the meantime I&#8217;m also playing with Python on a personal note. This affords me a unique perspective, of having seen the past and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=608&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Having been a full-time C++ programmer for all of the past ten years, I recently had the unique opportunity of seriously studying Java almost 10-15 years after it started becoming popular. In the meantime I&#8217;m also playing with Python on a personal note. This affords me a unique perspective, of having seen the past and at the same time looking at two new languages with a fresh eye.</p>
<p><strong>C++ vs Java in 2009 = Assembly vs C++ during the 1980&#8217;s<br />
</strong></p>
<p>The impressions or the vibes that i get in this new learning process is eerily similar to the same doubts and choices i felt / read about during the initial stages of my education, while playing around with assembly, C++ and Visual Basic.</p>
<div class="wp-caption alignleft" style="width: 134px"><img src="http://tbn0.google.com/images?q=tbn:VZJoVZ0WoMgBGM:http://static.howstuffworks.com/gif/restaurant-pager-motorola.jpg" alt="Needs assembly" width="124" height="90" /><p class="wp-caption-text">Needs assembly or C</p></div>
<p>Assembly was THE choice if speed and memory choices was paramount and nothing else mattered but it was damn hard to use.  All the old timers claimed you had to know assembly to understand whats happening on the system and that C++ was only for productivity improvements. They lamented about how new minds never learned / worked seriously with assembly and hence where at a disadvantage when it came to figuring out what really happened inside the box.</p>
<p>However at the time (1980) C++ was fast catching up, even embedded systems where moving to C++(maybe without using the templates feature).  Java currently is in the same state that C++ used to be in 1980 wrt assembly and <a href="http://scobleizer.com/2005/12/29/joel-says-teaching-java-is-bad-for-cs-students/" target="_blank">there are many who clamour for C or C++ to be taught in universities</a> rather than Java for the sake of better understanding.</p>
<p><strong>How can  Java be as fast as C++? </strong></p>
<p>It is not. However the hardware that is around now is vastly superior to <a href="http://images.google.co.in/url?source=imgres&amp;ct=ref&amp;q=http://www.cs.cuw.edu/museum/Vectra286.html&amp;usg=AFQjCNFuwFxjXuIwc6OfG2hOZz5uE3Ksfw" target="_blank">1980</a> and 1990 hardware, which made Java seem slow THEN, in the same way C++ seemed slow in all those small devices compared to raw assembly or binary code. Our current crop of laptops are more powerful than the servers used during the time when Java was beginning to get popular. This improvement in hardware makes the difference in speed highly immaterial for all practical purposes, because human beings cannot make out the difference all that much between 500  and 50 microseconds.</p>
<p><strong>Fast forward to 2010</strong></p>
<div class="wp-caption alignnone" style="width: 460px"><img src="http://www.techgadgets.in/images/nokia-n92.jpg" alt="Is as fast as 1999 computer and runs Java" width="450" height="375" /><p class="wp-caption-text">Is as fast as 1990 computer and runs Java</p></div>
<p>C++ is what you require if you need pure speed like in the critical loops or core libraries. You could substitute the word Assembly instead of C++, in the previous line, had this post been written 15 years back.</p>
<p>But Java is more useful from a business point of view for application development due to increased productivity and more features.  It is therefore no coincidence then that embedded devices like mobile phones  (and even dog collars, according to Java books) are now running Java. In fact the lost Nokia mobile phone that i bought was guided by the factor that it had a data port using which i could upload custom Java program onto it.</p>
<p><strong>Java vs Python = C++ vs Visual Basic<br />
</strong></p>
<p>When C++ used to be THE top language around, and assembly was gradually being kicked to the ground, there was something else in periphery, which was Visual Basic and all other RAD languages, which basically gave you forms based development and automatic memory management.</p>
<div class="wp-caption alignleft" style="width: 122px"><img src="http://tbn1.google.com/images?q=tbn:1hqBz5dFElHTwM:http://cisnet.baruch.cuny.edu/holowczak/oracle/dev2k/9ids/menu_forms6i_properties.gif" alt="Internal IT or back office apps need not be cool" width="112" height="125" /><p class="wp-caption-text">Internal IT or back office apps need not be cool</p></div>
<p>However they were nowhere as fast as C++ and hence where relegated to internal IT applications, which never needed to be as slick as professional, cool looking  applications and could be developed fast enough.</p>
<p>Fast development is very critical when it comes to small shops with less resources or IT departments on a shoe string budget. Many business applications certainly fit the bill and where developed on Visual Basic. It is exactly the same situation now with Python when comparing it to Java.</p>
<p><strong>Python in 2009 = Visual Basic</strong> <strong>in 1990</strong></p>
<p>Developing using Python does definitely seem like a breeze with not much hassles around object orientedness or strict rules around exception declaration or big infrastructures. Is Python as comprehensive as Java, with as many no of apis as Java has ? Probably not, although it is fast catching up in popularity, like Java before it, caught with C++ and  that is saying a lot. There is no denying the fact that Python and Ruby would soon have many programmers who are trained in it by choice.</p>
<div class="wp-caption alignleft" style="width: 290px"><img src="http://image.alienware.com/images/intro_page_images/processing_101/intel_quadcore.jpg" alt="Will run Python as fast as Java" width="280" height="237" /><p class="wp-caption-text">Will run Python as fast as Java</p></div>
<p><em>I have not compared the performance of Java vs Python. But i assumed Python could be slower because of its more script like appearance compared to Java. Please do correct me if iam wrong on the above aspect. </em></p>
<p><em></em>If the economy keeps growing like it did in the last ten years, we would soon have quad core or even eight core desktops a common place and would not have to worry about Python&#8217;s performance compared to Java. I just hope folks don&#8217;t introduce messy co-orporate stuff and make it verbose and bulky as Java before it.</p>
<p>3  cheers for easy coding !!!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/608/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/608/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/608/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/608/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/608/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=608&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/02/18/c-vs-java-vs-python/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>

		<media:content url="http://tbn0.google.com/images?q=tbn:VZJoVZ0WoMgBGM:http://static.howstuffworks.com/gif/restaurant-pager-motorola.jpg" medium="image">
			<media:title type="html">Needs assembly</media:title>
		</media:content>

		<media:content url="http://www.techgadgets.in/images/nokia-n92.jpg" medium="image">
			<media:title type="html">Is as fast as 1999 computer and runs Java</media:title>
		</media:content>

		<media:content url="http://tbn1.google.com/images?q=tbn:1hqBz5dFElHTwM:http://cisnet.baruch.cuny.edu/holowczak/oracle/dev2k/9ids/menu_forms6i_properties.gif" medium="image">
			<media:title type="html">Internal IT or back office apps need not be cool</media:title>
		</media:content>

		<media:content url="http://image.alienware.com/images/intro_page_images/processing_101/intel_quadcore.jpg" medium="image">
			<media:title type="html">Will run Python as fast as Java</media:title>
		</media:content>
	</item>
		<item>
		<title>Been hearing about Web 2.0 ?</title>
		<link>http://computinglife.wordpress.com/2009/02/06/been-hearing-about-web-20/</link>
		<comments>http://computinglife.wordpress.com/2009/02/06/been-hearing-about-web-20/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 10:33:56 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Cool-Stuff]]></category>
		<category><![CDATA[cool]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=595</guid>
		<description><![CDATA[Read this instead for a longer and historic explanation.
Be mystified no longer. Web 2.0 is not a new version of the internet or a new technology or a new standard of the web.
It stands for changes in the way new internet applications are being build. These are
Interactivity.
The current crop of web applications are now way [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=595&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><span style="text-decoration:underline;"><em><a href="http://www.paulgraham.com/web20.html" target="_blank">Read this instead for a longer and historic explanation.</a></em></span></p>
<p>Be mystified no longer. Web 2.0 is not a new version of the internet or a new technology or a new standard of the web.</p>
<p>It stands for changes in the way new internet applications are being build. These are</p>
<p><strong>Interactivity</strong>.</p>
<div class="wp-caption alignnone" style="width: 415px"><a href="http://nexus404.com/Blog/2007/04/18/animated-led-clock/"><img src="http://nexus404.com/Blog/wp-content/uploads/2007/04/cllo-blue-led-animated-clock.gif" alt="Clock-Ad" width="405" height="109" /></a><p class="wp-caption-text">Clock-Ad - animated gif</p></div>
<p style="padding-left:30px;">The current crop of web applications are now way <a href="http://www.mariusroosendaal.com/" target="_blank">more cooler</a> and <a href="http://www.nofrks.com/" target="_blank">more interactive</a> than it was possible using HTML programming. What powers this ? <a href="http://www.engadget.com/2008/09/22/dell-teases-with-17-inch-quad-core-laptop-with-16gb-of-memory/" target="_blank">Faster computers</a>, Faster Internet, <a href="http://en.wikipedia.org/wiki/V8_(JavaScript_engine)" target="_blank">Faster</a> &amp; <a href="http://www.adaptivepath.com/ideas/essays/archives/000385.php" target="_blank">Smarter</a> Javascript Engines and <a href="http://dojocampus.org/explorer/" target="_blank">Cool Libraries</a> to do these tasks.</p>
<p style="padding-left:30px;">ps : Why does Javascript matter? B Cause that&#8217;s what runs inside the pages you download from the internet and makes stuff happen inside them. It powers the internet&#8217;s display side programming.</p>
<p><em>Unfortunately I cant add any JavaScript samples to demonstrate interactivity and hence that animated picture on top to convey the </em><em>idea.</em></p>
<p><strong>Sharing</strong></p>
<p style="padding-left:30px;">You can now access data from <a href="http://ebay.about.com/od/gettingstarted/a/gs_whatisebay.htm" target="_blank">e-bay</a> and match it with <a href="http://en.wikipedia.org/wiki/Craigslist" target="_blank">Craiglist</a> advertisement and build a new application out of this combination, which shows its results on <a href="http://maps.google.com/" target="_blank">Google Maps</a>.  You could perform a similar mix and match (aka MASHUP) using data from <a href="http://www.webware.com/html/ww/100/2008/winners.html" target="_blank">MANY</a> other web apps that choses to exposes its data or tech on the internet.</p>
<p style="padding-left:30px;">
<div class="wp-caption aligncenter" style="width: 810px"><a href="http://orweblog.oclc.org/archives/000713.html"><img src="http://orweblog.oclc.org/mcarthysmap_1-thumb.png" alt="Google maps based app" width="800" height="638" /></a><p class="wp-caption-text">Google maps based app</p></div>
<p><strong>Social Networking</strong></p>
<p style="padding-left:30px;">Think about all the sites like <a href="http://www.insideorkut.com/2005/12/what-is-orkut.html" target="_blank">Orkut</a>,<a href="http://en.wikipedia.org/wiki/Facebook" target="_blank">Facebook</a>, <a href="http://en.wikipedia.org/wiki/LinkedIn" target="_blank">Linked-In</a> and of-course, of  all the blogs on the net.  This  represents an un-unprecedented level of personal and social information on the net. Most of these sites expose their API&#8217;s too. So that you could perhaps pull in your friends from Orkut into your Outlook, IP Phone or even vice-versa.</p>
<p><strong>So what? </strong></p>
<p>So its a possibility for a next wave of cool uses, like the original dot com which produced the ebay and amazon and all those useful sites which nearly everyone use. Like all waves this too will be hyped to be way more than what it really is &#8211; a new form of collaborative and more user friendly internet applications.</p>
<p>Heck, even my new project (that&#8217;s right &#8211; i got moved from my previous project to a new one) sports a web 2.0 tag and my manager is uttering the magic word every now and then to try and spot an oppurtunity to start a new initiative around it. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/595/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=595&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/02/06/been-hearing-about-web-20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>

		<media:content url="http://nexus404.com/Blog/wp-content/uploads/2007/04/cllo-blue-led-animated-clock.gif" medium="image">
			<media:title type="html">Clock-Ad</media:title>
		</media:content>

		<media:content url="http://orweblog.oclc.org/mcarthysmap_1-thumb.png" medium="image">
			<media:title type="html">Google maps based app</media:title>
		</media:content>
	</item>
		<item>
		<title>Been hearing of IP / WAN acceleration?</title>
		<link>http://computinglife.wordpress.com/2009/02/06/been-hearing-of-ip-wan-acceleration/</link>
		<comments>http://computinglife.wordpress.com/2009/02/06/been-hearing-of-ip-wan-acceleration/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 09:05:16 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Cool-Stuff]]></category>
		<category><![CDATA[cool]]></category>
		<category><![CDATA[optimization]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=592</guid>
		<description><![CDATA[but too lazy to read all the white papers?
Read a small story of this in action, from none other than Joel Spolsky trying it out on their product.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=592&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>but too lazy to read all the white papers?</p>
<p>Read a small story of this in action, from none other than Joel Spolsky <a href="http://www.joelonsoftware.com/items/2009/02/05.html" target="_blank">trying it out on their product</a>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/592/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/592/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/592/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/592/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/592/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/592/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/592/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/592/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/592/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/592/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=592&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/02/06/been-hearing-of-ip-wan-acceleration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>
	</item>
		<item>
		<title>How efficient is this query</title>
		<link>http://computinglife.wordpress.com/2009/02/03/how-efficient-is-this-query/</link>
		<comments>http://computinglife.wordpress.com/2009/02/03/how-efficient-is-this-query/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 08:48:14 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Performance & Scalability]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[SQL-Server]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=573</guid>
		<description><![CDATA[This piece of code we are about to discuss was used in production software and i was tasked with reviewing the patch. Try to see if you can spot *any* issues with code. Later we will take a look at the exact observations, which are hugely interesting and instructive regarding system behavior.
The Query
This query retains [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=573&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This piece of code we are about to discuss was used in production software and i was tasked with reviewing the patch. Try to see if you can spot *any* issues with code. Later we will take a look at the exact observations, which are hugely interesting and instructive regarding system behavior.</p>
<p><strong>The Query</strong></p>
<p>This query retains top n records of a particular type and deletes the other rows in the table of the same type from a Sybase database.</p>
<blockquote>
<p style="padding-left:30px;">for (int i = 0;i &lt; ListOfTypes; i++)<br />
{<br />
ExecuteQuery <em>&#8220;delete from table where PrimaryKey NOT IN (select top n PrimaryKey from table where Id = i) AND Id = i&#8221;</em><br />
}</p></blockquote>
<p><strong>Observation &#8211; No Data to be Deleted in the database<br />
</strong></p>
<ol>
<li>CPU consumption during query execution is negligible when there are matching rows to be deleted. The fact that this code is issuing multiple dynamic queries which have to be parsed does not seem to be too much of an issue for Sybase.</li>
<li>2000 queries took around 3 seconds overall at around 12% of CPU cost on a Xeon box.</li>
</ol>
<p><strong>Observation &#8211; delete finds rows for deletion<br />
</strong></p>
<ol>
<li>With data to be deleted, the query took 5 minutes when there was valid data in 30 loops, that is <span style="color:#ff0000;"><em>over 5 hours when deletes are extrapolated to be repeated 2000 times</em></span>.</li>
<li>The CPU consumption figure remained the same.</li>
</ol>
<p><strong>Why are Database Deletes So Slow ? </strong></p>
<p>Relational databases tracks everything using logs or otherwise called Transaction Logs because they record all the transactions aka changes that happen to the database. The ACID nature of transactions are guaranteed using these logs. So when you make a change to the database, a LOG is written to disk.</p>
<p><img class="alignleft" src="http://www.trustedreviews.com/images/article/inline/2333-disk.jpg" alt="" width="300" height="278" /></p>
<p>The actual change is only made in memory and not written to the disks immediately, for efficiency sake. But <em>Logs are always written promptly and without fail</em>, so that if the machine crashes or rollback is required, this log can be used to reconstruct the state of the database with minimal loss of data. This means that every time you make an <strong>individual delete </strong>you are going to make the disk spin and disks spinning are horridly slower that anything else you can think about.</p>
<p><strong>How slow can the disks be</strong> <strong>?</strong></p>
<p>Numbers from a talk by <a href="http://research.google.com/people/jeff/index.html" target="_blank">Jeff Dean</a> (works on both <a href="http://research.google.com/archive/mapreduce.html" target="_blank">MapReduce </a>and <a href="http://research.google.com/archive/bigtable.html" target="_blank">BigTable</a>) of Google, as reported <a href="http://osdir.com/ml/network.peer-to-peer.p2p-hackers/2006-11/msg00072.html" target="_blank">here</a> -</p>
<p style="padding-left:30px;"><span style="text-decoration:underline;">Comparative slowness aka latency in terms of CPU cycles<br />
</span></p>
<p style="padding-left:30px;">Floating point calculations = 0.25 to 3 cycles<br />
L1  cache access                       = 3 cycles<br />
L2 cache access                       = 14 cycles<br />
Dram                                            = 200 cycles<br />
Flash                                            = 3 Million cycles<br />
Disk                                               = 15 Million cycles</p>
<p style="padding-left:30px;"><span style="text-decoration:underline;">Comparative Slowness aka Latency in absolute time</span></p>
<p>L1 cache reference                                                        0.5 ns<br />
Branch mispredict                                                             5 ns<br />
L2 cache reference                                                             7 ns<br />
Mutex lock/unlock                                                        100 ns<br />
Main memory reference                                              100 ns<br />
Compress 1K bytes with XXX                              10,000 ns<br />
Send 2K bytes over 1 Gbps network                 20,000 ns<br />
Read 1 MB sequentially from memory          250,000 ns<br />
Round trip within same datacenter                500,000 ns<br />
Disk seek                                                              10,000,000 ns<br />
Read 1 MB sequentially from network    10,000,000 ns<br />
Read 1 MB sequentially from disk            30,000,000 ns<br />
Send packet CA-&gt;Netherlands-&gt;CA      150,000,000 ns</p>
<p><strong>Can you speed up the disks? </strong></p>
<div class="wp-caption alignnone" style="width: 410px"><a href="http://www.orbitmicro.com/support/resources/raid_tutorials.html"><img title="RAID using scsi disk array" src="http://www.orbitmicro.com/images/support_images/raid5%20array.jpg" alt="SCSI disk array on a server" width="400" height="317" /></a><p class="wp-caption-text">SCSI disk array on a server</p></div>
<p>You bet !!. We tried to speed up this whole experiment by moving the tests from an IDE based system (with 7500 rpm drive) to a system with a single (the picture has six &#8211; no we used just one of them) 15k RPM SCSI disk + SCSI controller (no on board memory).</p>
<p><strong>The results from moving to SCSI system -<br />
</strong></p>
<ol>
<li> The delete time improved by a factor of 4-5 times and the worse case average time period dropped to around 133 minutes from 5 hours.</li>
<li>However with the SCSI system in use, <strong><span style="text-decoration:underline;">the CPU consumption during query execution also jumped</span></strong> <span style="color:#ff0000;">by the same amount,</span> by 4-5 times because there are fewer blocks due to disks and therefore more query execution (4-5 times worth) is done by the DB engine.</li>
</ol>
<p>As you can see, it would be really easy for us to calculate how many disks we would need to speed up the deletes to a manageable time. I might have to go with a couple of SCSI disks in a RAID configuration and try to achieve the speeds that i want.  At the same time the database engine&#8217;s CPU consumption would also have to be separately addressed such that it does not have to do much work in finding the rows to be deleted.</p>
<p><strong>Is there any way to improve this ? </strong></p>
<ol>
<li>Use Transactions -
<p>SQL server engine makes transactional records only as part of a single transaction. Not sure how this works vis via Java and sybase engine using which this query was tested. So if you ensure all your changes are made as part of a single transaction the disks would be less affected than if it was done otherwise.</li>
<li>Do not use a database for real time stuff<br />
An even more optimal<strong> </strong>solution will be to not rely on the database at all and instead do all this in a specialized in memory component in a thread safe hash or something equivalent. Use database only as a slow data backup for being used during failure recovery. This would give the incomparable throughputs compared to any RDBMS / disk based solution. <strong><br />
</strong></li>
</ol>
<p><strong>My suggestion to improve CPU (untested) </strong></p>
<ol>
<li>Move the entire loop into a stored procedure</li>
<li>Run a select to get the top 20 and extract the ID of the bottom one</li>
<li>Run a delete to delete all ID &gt; ID extracted.What are the advantages &#8211; You remove  possible query compilation for the execution of 2000 queries and at the same time, remove usage of possibly highly inefficient NOT IN operator. This needs to be verified though.</li>
<li>Remove all foreign key references to the current table &#8211; but of-course that would be going against the grain of RDBMS concept itself. However for desperate situations, this might work &#8230;.</li>
</ol>
<p><strong>What was implemented in the end? </strong></p>
<p>Well, the production software had this delete sequence running every 30 mins. The no of events this system claims support to is only upto 25 events per hour.  So at this rate, there would be no pile up and no big deletes happening. So we dont have a problem !!!!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/573/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/573/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/573/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/573/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/573/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/573/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/573/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/573/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/573/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/573/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=573&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/02/03/how-efficient-is-this-query/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>

		<media:content url="http://www.trustedreviews.com/images/article/inline/2333-disk.jpg" medium="image" />

		<media:content url="http://www.orbitmicro.com/images/support_images/raid5%20array.jpg" medium="image">
			<media:title type="html">RAID using scsi disk array</media:title>
		</media:content>
	</item>
		<item>
		<title>Recession lessons for IT &#8211; Know your debts</title>
		<link>http://computinglife.wordpress.com/2009/01/27/recession-lessons-for-it-know-your-debts/</link>
		<comments>http://computinglife.wordpress.com/2009/01/27/recession-lessons-for-it-know-your-debts/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 08:58:50 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Quality]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=575</guid>
		<description><![CDATA[If you have been following the sub-prime crisis and the following recession, you would have no doubt heard horror stories about how uncontrolled debt has managed to wipe out many an individual / corporate house.

Uncontrolled spending, reckless taking out of loans, made over a century has blown up. The key element however is not that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=575&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>If you have been following the sub-prime crisis and the following recession, you would have no doubt heard horror stories about how uncontrolled debt has managed to wipe out <a href="http://feedproxy.google.com/~r/NakedCapitalism/~3/_kGlgR7ooyQ/ben-stein-asks-us-to-feel-sorry-for.html" target="_blank">many an individual</a> / <a href="http://feedproxy.google.com/~r/NakedCapitalism/~3/5CazUQ7HHlg/citi-on-its-way-to-breakup.html" target="_blank">corporate house</a>.</p>
<p><a href="http://www.nakedcapitalism.com"><img class="alignleft" src="http://paganshop1.com/images/debt.jpg" alt="" width="329" height="438" /></a></p>
<p>Uncontrolled spending, reckless taking out of loans, made over a century has blown up. The key element however is not that debts where taken, but just how risky those debts where, and how <a href="http://www.bloomberg.com/apps/news?pid=20601170&amp;refer=home&amp;sid=aiETiKXNbDVE" target="_blank">CEOs and corporate boards</a> never really discovered the reality of those debts until all that blew up from down under.</p>
<p>Good independent auditing and more controls on aggressive practices would have perhaps prevented this from happening or the very least reduced the impact by a huge factor. Last minute cleanup after the shit has hit the fan is never the time to do this, as <a href="http://feedproxy.google.com/~r/NakedCapitalism/~3/h2qhVBq9MVY/banks-lowering-boom-on-small-builders.html" target="_blank">it would hurt more to do it near the end</a> than when there is time and expertise around to perform the required audit and cleanup.</p>
<p><strong>Technical Debt</strong> (highly recommended that you read <a href="http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx" target="_blank">this</a>)</p>
<p>I definitely KNOW that this is something IT projects can learn from. There are many projects, where the leadership and implementers never care to track or document the <a href="http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx" target="_blank">technical debts</a> they have around. While it&#8217;s O.K to cut corners to come out with a feature in a short time, it&#8217;s imperative to know exactly what corners have been cut so that you can rebuild them or mend them before something else gets build on top of those shaky corners.</p>
<p><strong>Risk Management + Audit +  Tracking</strong> <strong>= Good Management</strong></p>
<p>And like in Finance a good amount of auditing and tests for worse case scenarios would bring home the point to everyone involved, as to how shaky everything really is. The risk factors once in the open and put on tracking would ensure that the technical debts do not get run over by callous implementations or over zealous marketing folks or program managers anxious to get the product out. This i believe should be the most important task for any IT manager, of tracking the technical debts and to exactly know which valves will burst when.</p>
<p style="text-align:center;"><a href="http://sarianna.org/public/img/comics/"><img class="aligncenter" src="http://sarianna.org/public/img/comics/Calvin%20-%20last-minute%20panic.gif" alt="" width="359" height="468" /></a></p>
<p>Happy Fixing !!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/575/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/575/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/575/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/575/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/575/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/575/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/575/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/575/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/575/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/575/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=575&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/01/27/recession-lessons-for-it-know-your-debts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>

		<media:content url="http://paganshop1.com/images/debt.jpg" medium="image" />

		<media:content url="http://sarianna.org/public/img/comics/Calvin%20-%20last-minute%20panic.gif" medium="image" />
	</item>
		<item>
		<title>Find the type of hardware you have</title>
		<link>http://computinglife.wordpress.com/2009/01/24/find-hardware-typ/</link>
		<comments>http://computinglife.wordpress.com/2009/01/24/find-hardware-typ/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 17:33:30 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Cool-Stuff]]></category>
		<category><![CDATA[cool]]></category>
		<category><![CDATA[Vista]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=564</guid>
		<description><![CDATA[How do you know the type and version of the major hardware components you have in your PC / laptop? Thats easy, run PC Wizard and hope their database is up to date enough for your purposes. (Note that this tool does other cool stuff too like running Benchmarks, getting all sorts of other system related information)
 
I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=564&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:left;">How do you know the type and version of the major hardware components you have in your PC / laptop? Thats easy, run <a href="http://pc-wizard-2008.en.softonic.com/" target="_blank">PC Wizard</a> and hope their database is up to date enough for your purposes. (Note that this tool does other cool stuff too like running Benchmarks, getting all sorts of other system related information)</p>
<p> <img class="aligncenter size-full wp-image-567" title="pc-wizard1" src="http://computinglife.files.wordpress.com/2009/01/pc-wizard1.jpg?w=509&#038;h=248" alt="pc-wizard1" width="509" height="248" /></p>
<p>I had the same dire necessity today, having junked the default Vista installation in a laptop, without checking the hardware, drivers and other requirements.  I had been told all the required CD&#8217;s are available and when i checked, (after re-install i have to admit), the CD that was referred to turned out to be a rescue CD.  The laptop manual did not care to list even the basic facts about which LAN / sound card it carried. (An acer 4620 if you are wondering)</p>
<p><strong>Isnt Rescue CD enough ? </strong></p>
<p>In the olden days, buying hardware gave you bits and pieces of drivers and other software in multiple CD&#8217;s and this was what i had in mind when i asked if the CD&#8217;s where available. But nowadays, machines come with a pre-installed OS partition, containing a valid image with everything pre-installed. So, all that you need in case things go wrong, is a single rescue CD to copy  this image onto your hard disk and get a brand new validated and optimized image running.</p>
<p><strong>Whats wrong with Rescue CD&#8217;s ?</strong></p>
<p>Rescue CD&#8217;s are an excellent solution, in most casual user cases. I remember originally encountering this concept in a Solaris server. I came away impressed with the solution. However in case of personal computers (or latpops) i feel someone ought to have thought of the possibility that a different OS or power user initiated custom installation might be required, in which case this partition idea becomes nothing but a waste of space. After all we are talking about hardware bought for personal use here and its a good idea not to restrict the owners conceptual freedom in trying to use it for whatever purposes they see fit.</p>
<p><strong>The olden days</strong></p>
<p>The olden days of individual driver CD&#8217;s, ensured that I had a valid driver for my hardware for all the OS&#8217;es i required. This was because the individual driver CD would come with drivers required for all the different version of OSes it supported (windows 3.1/95/98/Me/2k etc). This also meant that the different components of my machine was tested for the different OSes i required and it was easy to know which ones had the support by looking at the driver CD.  In fact i remember favouring devices that shipped with Linux drivers since i wanted to use Linux on my PC. However with the new fangled image idea, i&#8217;m not sure if my new box would run another OS or not.</p>
<p>I wish the hardware folks are listening and copied a folder of all required drivers and hardware documentation, into the image itself, which i can then copy out for my new OS, before trashing the old stuff. That way, i would have the best of both worlds, unless of-course i deleted the orignal rescue image partition too, which goes to show that a hard copy CD image of the rescue partition, with all the different OS driver folders in it of-course, would still be of some use.</p>
<p>Happy installations !!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/564/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/564/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/564/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/564/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/564/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/564/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/564/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/564/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/564/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/564/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=564&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/01/24/find-hardware-typ/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>

		<media:content url="http://computinglife.files.wordpress.com/2009/01/pc-wizard1.jpg" medium="image">
			<media:title type="html">pc-wizard1</media:title>
		</media:content>
	</item>
		<item>
		<title>Optimizing one program at a time</title>
		<link>http://computinglife.wordpress.com/2009/01/23/optimizing-one-program-at-a-time/</link>
		<comments>http://computinglife.wordpress.com/2009/01/23/optimizing-one-program-at-a-time/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 07:26:26 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[cool]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tabbed]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=559</guid>
		<description><![CDATA[I recently came across a cool replacement for Acrobat Reader, Foxit. Why do i want to use Foxit?

Less memory consumption
Feels more responsive
Tabbed reading

It goes to proves that building a better mouse trap still works, even against such a de-facto standard like using the Adobe reader for reading PDF files.
       [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=559&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I recently came across a cool replacement for Acrobat Reader, <a href="http://www.foxitsoftware.com/pdf/reader_2/down_reader.htm" target="_blank">Foxit</a>. Why do i want to use Foxit?</p>
<ol>
<li>Less memory consumption</li>
<li>Feels more responsive</li>
<li>Tabbed reading</li>
</ol>
<p>It goes to proves that building a better mouse trap still works, even against such a de-facto standard like using the Adobe reader for reading PDF files.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/559/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=559&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/01/23/optimizing-one-program-at-a-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>
	</item>
		<item>
		<title>Blog -&gt; Discovery -&gt; Sale?</title>
		<link>http://computinglife.wordpress.com/2009/01/21/blog-benefit/</link>
		<comments>http://computinglife.wordpress.com/2009/01/21/blog-benefit/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 14:19:20 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Cool-Stuff]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Marketing]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=556</guid>
		<description><![CDATA[Collaboration might be a weasel word, but i suddenly found how powerful a tool it  can be, by using Google Docs.
Of course Google Docs has been around for some time, but i found out about them anew when i searched an alternative for the paid services of 37Signal&#8217;s BaseCamp software. I was not looking for [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=556&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Collaboration might be a <a href="http://en.wikipedia.org/wiki/Weasel_word" target="_blank">weasel word</a>, but i suddenly found how powerful a tool it  can be, by using <a href="http://docs.google.com" target="_blank">Google Docs.</a></p>
<p>Of course Google Docs has been around for some time, but i found out about them anew when i searched an alternative for the paid services of <a href="http://www.37signals.com/" target="_blank">37Signal</a>&#8217;s <a href="http://www.basecamphq.com/?source=37s+home" target="_blank">BaseCamp software</a>. I was not looking for BaseCamp either, but i stumbled into them through the <a href="http://gettingreal.37signals.com/toc.php" target="_blank">blog posts</a> they had made about building software and they do have many good blog posts for sure.</p>
<p>The blog was good, which made me interested in checking out what they build, which taught me all about how there are mature solutions that allow multiple distributed people to work on the same thing. It kind of proves how blogs can get you new customers.</p>
<p>If you are into new products, concepts or even existing tools to do the same, it proves how essential blogs and podcasts can be in getting your name across to the early adaptors !!!</p>
<p>Happy Blogging !!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/556/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=556&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/01/21/blog-benefit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>
	</item>
		<item>
		<title>It might matter where you start out &#8230;.</title>
		<link>http://computinglife.wordpress.com/2009/01/20/it-might-matter-where-you-start-out/</link>
		<comments>http://computinglife.wordpress.com/2009/01/20/it-might-matter-where-you-start-out/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 09:26:34 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Enterpreneur]]></category>
		<category><![CDATA[Quality]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=550</guid>
		<description><![CDATA[Just listened to a podcast from Scoble, interviewing the so called king of tech shows Leo Laparte.  The talk does impart the impression on how content is most important than any glam and glitter and their wow&#8217;s about the new media, and some general other information about content sharing.
While they went on about the history [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=550&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Just listened to a podcast from <a href="http://en.wikipedia.org/wiki/Robert_Scoble" target="_blank">Scoble</a>, interviewing the so called king of tech shows <a href="http://en.wikipedia.org/wiki/Leo_Laporte" target="_blank">Leo Laparte</a>.  The talk does impart the impression on how content is most important than any glam and glitter and their wow&#8217;s about the new media, and some general other information about content sharing.</p>
<p>While they went on about the history of the show, they mentioned how they both have ran into one another a long time back and how Leo has touched based with many folks in the industry and even launched their careers.</p>
<p><a href="http://www.flickr.com/photos/tonyshi/3108704947/in/photostream/"><img class="aligncenter" src="http://farm4.static.flickr.com/3224/3098420969_4f263d1e76.jpg?v=0" alt="" width="500" height="362" /></a></p>
<p>This seems to be a theme that i have heard repeating every now and then with Scoble and many others. All these guys who have been in the Valley or manage to be in tech scenery in the States, seems to have run into the others &#8220;who matter&#8221;, at some time or other.</p>
<p>It really does seem to matter where you are from, for you to get picked up in the flow, noticed and perhaps to also feed you the enthusiasm to do more, and see more groovy stuff done and launch you into new circles that matter perhaps (VC&#8217;s anyone?)</p>
<p>Since all that is not here, i might as well keep myself fixated on the idea that the useful tool i will create some day will have to be at least 50% better than it might been necessary, had i been from the Valley.</p>
<p>I hope you realize that too.</p>
<p>Cheers !!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/550/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/550/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/550/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/550/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/550/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/550/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/550/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/550/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/550/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/550/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=550&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/01/20/it-might-matter-where-you-start-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>

		<media:content url="http://farm4.static.flickr.com/3224/3098420969_4f263d1e76.jpg?v=0" medium="image" />
	</item>
		<item>
		<title>Design Best Practices</title>
		<link>http://computinglife.wordpress.com/2009/01/19/art-and-common-wisdom/</link>
		<comments>http://computinglife.wordpress.com/2009/01/19/art-and-common-wisdom/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 12:29:08 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=546</guid>
		<description><![CDATA[Yesterday I happened to reverse tab into an old podcast from Scott HanselMan&#8217;s archives.   In case you are wondering what i just said, the background is that i keep a lot of tabs opened in Firefox at all times.

FireFox has a cool feature which will re-open them for you, the next time it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=546&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Yesterday I happened to reverse tab into an old podcast from <a href="http://www.hanselman.com/blog/AboutMe.aspx" target="_blank">Scott HanselMan&#8217;s</a> archives.   In case you are wondering what i just said, the background is that i keep a lot of tabs opened in Firefox at all times.</p>
<p><a href="http://it-help.bathspa.ac.uk/firefox/ff_tabs.html"><img class="aligncenter" src="http://it-help.bathspa.ac.uk/firefox/graphics/ff_tabs.png" alt="" width="764" height="128" /></a></p>
<p>FireFox has a cool feature which will re-open them for you, the next time it comes up after shutdown.</p>
<p>So all this un-read but un-opened tabs stick around as multiple book marks into different tasks, articles and applications i track. This lets me switch my tasks nilly-willy and save time in very minute increments, when my mood or tasks changes to flit from one topic to another.</p>
<p><em>But the down side is that at times i keep some tabs opened for so long, that i never get back to these readings until a month or so after i initially found them.<br />
</em></p>
<p>Anyway, coming back to <a href="http://www.hanselman.com/blog/HanselminutesPodcast145SOLIDPrinciplesWithUncleBobRobertCMartin.aspx" target="_blank">Scott&#8217;s podcast</a> -  This  podcast was a talk by<a href="http://www.objectmentor.com/omTeam/martin_r.html" target="_blank">Robert C Martin</a>, the famous author and Object Mentor founder, on his advices on design practices. It is a nice talk and you should go over and listen to it even if you consider a master on object oriented design.</p>
<p>The other reason that i flipped out on this podcast was how the first two principles he espoused actually turned out to be lessons i had already learned, from multiple sources and from my own experiences .</p>
<p>I haven&#8217;t finished listening to the full podcast yet but here are first two of his (S-O-L-I-D) rules and my corresponding blog posts for the same</p>
<ol>
<li> <a href="http://computinglife.wordpress.com/2008/01/07/real-life-c-class-design-2/" target="_blank">Single Responsibility</a></li>
<li><a href="http://computinglife.wordpress.com/2008/03/05/real-life-c-class-design-4/">Closed to change but open to Extension</a></li>
</ol>
<p>It feels nice to know when the best minds in the Industry gives some lessons and you find that not only did have you already learned it, but you have chosen to express your learnings in the same order too. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/546/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=546&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2009/01/19/art-and-common-wisdom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>

		<media:content url="http://it-help.bathspa.ac.uk/firefox/graphics/ff_tabs.png" medium="image" />
	</item>
		<item>
		<title>Good articles from Joel</title>
		<link>http://computinglife.wordpress.com/2008/12/17/good-articles-from-joel/</link>
		<comments>http://computinglife.wordpress.com/2008/12/17/good-articles-from-joel/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 07:02:32 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=516</guid>
		<description><![CDATA[Sometimes, folks are overwhelmed by the number of articles in the archives of those good bloggers (updated) i recommend to folks. So in the interest of their sanity and my reputation, I decided to post a quick and dirty list of good articles from Joel i could think of, after filtering through his archives.
If people [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=516&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Sometimes, folks are overwhelmed by the number of articles in the archives of those <a href="http://computinglife.wordpress.com/2007/06/14/the-best-computer-blogs/" target="_blank">good bloggers</a> (updated) i recommend to folks. So in the interest of their sanity and my reputation, I decided to post a quick and dirty list of good articles from Joel i could think of, after filtering through his archives.</p>
<p>If people find this useful i might follow up with a post on the Paul Graham articles too.  Note that i haven&#8217;t chosen to list the articles in the order of their quality but simply in the chronological order, copied from <a href="http://www.joelonsoftware.com/Archive.html" target="_blank">Joel&#8217;s site</a> as is and simply filtered the ones i thought where not so important.  Your mileage might vary so please feel free to click around or read selectively or simply head over to the <a href="http://www.joelonsoftware.com/Archive.html" target="_blank">original site.</a></p>
<p><a href="http://www.joelonsoftware.com/items/2008/11/26.html"></a><a href="http://www.joelonsoftware.com/items/2008/05/01.html">Architecture astronauts take over</a> <span style="font-size:x-small;">May 01 2008</span><br />
<a href="http://www.joelonsoftware.com/items/2008/03/17.html"></a><a href="http://www.joelonsoftware.com/items/2007/06/05.html">Smart and Gets Things Done</a> <span style="font-size:x-small;">Jun 05 2007</span><br />
<a href="http://www.joelonsoftware.com/articles/customerservice.html"></a><a href="http://www.joelonsoftware.com/items/2006/11/21.html">Choices = Headaches</a> <span style="font-size:x-small;">Nov 21 2006</span><br />
<a href="http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html"></a><a href="http://www.joelonsoftware.com/articles/DevelopmentAbstraction.html">The Development Abstraction Layer</a> <span style="font-size:x-small;">Apr 11 2006</span><br />
<a href="http://www.joelonsoftware.com/articles/BusinessofSoftware.html"></a><a href="http://www.joelonsoftware.com/articles/SetYourPriorities.html">Set Your Priorities</a> <span style="font-size:x-small;">Oct 12 2005</span><br />
<a href="http://www.joelonsoftware.com/articles/AardvarkSpec.html"></a><a href="http://www.joelonsoftware.com/articles/HighNotes.html">Hitting the High Notes</a> <span style="font-size:x-small;">Jul 25 2005</span><br />
<a href="http://www.joelonsoftware.com/articles/AardvarkMidtermReport.html"></a><a href="http://www.joelonsoftware.com/articles/CamelsandRubberDuckies.html">Camels and Rubber Duckies</a> <span style="font-size:x-small;">Dec 15 2004</span><br />
<a href="http://www.joelonsoftware.com/articles/AboutComment.html"></a><a href="http://www.joelonsoftware.com/articles/APIWar.html">How Microsoft Lost the API War</a> <span style="font-size:x-small;">Jun 13 2004</span></p>
<p><a href="http://www.joelonsoftware.com/articles/Craftsmanship.html">Craftsmanship</a> <span style="font-size:x-small;">Dec 01 2003</span><br />
<a href="http://www.joelonsoftware.com/articles/CoderToDeveloper.html"></a><a href="http://www.joelonsoftware.com/articles/Stupidity.html">Rick Chapman is In Search of Stupidity</a> <span style="font-size:x-small;">Aug 01 2003</span><br />
<a href="http://www.joelonsoftware.com/articles/VC.html">Fixing Venture Capital</a> <span style="font-size:x-small;">Jun 03 2003</span><br />
<a href="http://www.joelonsoftware.com/articles/OfficeNewYork.html"></a><a href="http://www.joelonsoftware.com/articles/LordPalmerston.html">Lord Palmerston on Programming</a> <span style="font-size:x-small;">Dec 11 2002</span><br />
<a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html">The Law of Leaky Abstractions</a> <span style="font-size:x-small;">Nov 11 2002</span><br />
<a href="http://www.joelonsoftware.com/articles/WorstProjectEver.html"></a><a href="http://www.joelonsoftware.com/articles/StrategyLetterV.html">Strategy Letter V</a> <span style="font-size:x-small;">Jun 12 2002</span><br />
<a href="http://www.joelonsoftware.com/articles/JimHighsmithonProductVisi.html">Product Vision</a> <span style="font-size:x-small;">May 09 2002</span><br />
<a href="http://www.joelonsoftware.com/news/20020507.html"></a><a href="http://www.joelonsoftware.com/articles/fog0000000356.html">The Iceberg Secret, Revealed</a> <span style="font-size:x-small;">Feb 13 2002</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000339.html">Fire And Motion</a> <span style="font-size:x-small;">Jan 06 2002</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000319.html"></a><a href="http://www.joelonsoftware.com/articles/fog0000000007.html">In Defense of Not-Invented-Here Syndrome</a> <span style="font-size:x-small;">Oct 14 2001</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000008.html"></a><a href="http://www.joelonsoftware.com/articles/fog0000000014.html">Hard-assed Bug Fixin&#8217;</a> <span style="font-size:x-small;">Jul 31 2001</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000017.html">Good Software Takes Ten Years. Get Used To it.</a> <span style="font-size:x-small;">Jul 21 2001</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000016.html"></a><a href="http://www.joelonsoftware.com/articles/fog0000000018.html">Don&#8217;t Let Architecture Astronauts Scare You</a> <span style="font-size:x-small;">Apr 21 2001</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000019.html"></a><a href="http://www.joelonsoftware.com/articles/fog0000000020.html">Strategy Letter IV: Bloatware and the 80/20 Myth</a> <span style="font-size:x-small;">Mar 23 2001</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000021.html"></a><a href="http://www.joelonsoftware.com/articles/fog0000000022.html">Human Task Switches Considered Harmful</a> <span style="font-size:x-small;">Feb 12 2001</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000023.html">Daily Builds Are Your Friend</a> <span style="font-size:x-small;">Jan 27 2001</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000024.html">Big Macs vs. The Naked Chef</a> <span style="font-size:x-small;">Jan 18 2001</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000025.html"></a><a href="http://www.joelonsoftware.com/articles/fog0000000026.html">Up the tata without a tutu</a> <span style="font-size:x-small;">Dec 02 2000</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000027.html"></a><a href="http://www.joelonsoftware.com/articles/fog0000000039.html">Feedback on Programmer Compensation</a> <span style="font-size:x-small;">Aug 28 2000</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000040.html"></a><a href="http://www.joelonsoftware.com/articles/fog0000000041.html"></a><a href="http://www.joelonsoftware.com/articles/fog0000000043.html">The Joel Test: 12 Steps to Better Code</a> <span style="font-size:x-small;">Aug 09 2000</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000044.html"></a><a href="http://www.joelonsoftware.com/articles/fog0000000050.html"></a><a href="http://www.joelonsoftware.com/articles/fog0000000067.html">Top Five (Wrong) Reasons You Don&#8217;t Have Testers</a> <span style="font-size:x-small;">Apr 30 2000</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000068.html"></a><a href="http://www.joelonsoftware.com/articles/fog0000000069.html">Things You Should Never Do, Part I</a> <span style="font-size:x-small;">Apr 06 2000</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000070.html">Incentive Pay Considered Harmful</a> <span style="font-size:x-small;">Apr 03 2000</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000245.html">Painless Software Schedules</a> <span style="font-size:x-small;">Mar 29 2000</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000071.html"></a><a href="http://www.joelonsoftware.com/articles/fog0000000073.html">The Guerrilla Guide to Interviewing</a> <span style="font-size:x-small;">Mar 23 2000</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000072.html">Command and Conquer and the Herd of Coconuts</a> <span style="font-size:x-small;">Mar 23 2000</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000074.html">Converting Capital Into Software That Works</a> <span style="font-size:x-small;">Mar 21 2000</span><br />
<a href="http://www.joelonsoftware.com/articles/TwoStories.html">Two Stories</a> <span style="font-size:x-small;">Mar 19 2000</span><br />
<a href="http://www.joelonsoftware.com/articles/fog0000000076.html">USER INTERFACE DESIGN FOR PROGRAMMERS </a></p>
<p><em>A book about designing user interfaces, intended for software developers for whom the whole process is a bit of a mystery. Nine chapters are available on this site. A longer version is available <a href="http://www.amazon.com/exec/obidos/ASIN/1893115941/ref=nosim/joelonsoftware">in print</a> from Apress.</em></p>
<blockquote><p><em>Chapter: <a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000057.html">1</a> <a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000058.html">2</a> <a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000059.html">3</a> <a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000060.html">4</a> <a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000061.html">5</a> <a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000062.html">6</a> <a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000063.html">7</a> <a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000064.html">8</a> <a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000065.html">9</a></em></p></blockquote>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/516/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/516/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/516/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/516/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/516/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/516/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/516/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/516/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/516/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/516/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=516&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2008/12/17/good-articles-from-joel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>
	</item>
		<item>
		<title>Relearning the basics &#8211; 1</title>
		<link>http://computinglife.wordpress.com/2008/12/16/relearning-the-basics-1/</link>
		<comments>http://computinglife.wordpress.com/2008/12/16/relearning-the-basics-1/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 08:54:05 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[computing]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=512</guid>
		<description><![CDATA[I &#8216;m beginning this series, as extracts of notes from some of the best comp science classes i have ever witnessed, recorded by MIT.
However i will be emphasizing only the points which struck me, after 10 years of experience as worth remembering again, that I feel the industry might do well to never forget . [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=512&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I &#8216;m beginning this series, as extracts of notes from some of the <a href="http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/" target="_blank">best comp science classes</a> i have ever witnessed, recorded by MIT.</p>
<p>However i will be emphasizing only the points which struck me, after 10 years of experience as worth remembering again, that I feel the industry might do well to never forget . I will try to leave out the details, like the data structures, recursive techniques and such, which most people are likely know. I would highly recommend you to access the <a href="http://mitpress.mit.edu/sicp/full-text/book/book.html" target="_blank">full text</a> or <a href="http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/" target="_blank">videos</a>, if you feel  that you missed out any of your comp classes or have never listened to comparable masters explaining this art.</p>
<p>My aim is to capture the pearls of wisdom that i might pickup listening to this class all over again. This is part 1 of such notes and <a href="http://computinglife.wordpress.com/what-is-computer-science-an-ode-to-teachers/" target="_blank">this is the reason</a> why i felt i ought to do it.</p>
<p><strong>What is Computer Science</strong></p>
<p>Computer Science is not about computers in the same sense, that geometry is not really about surveying instruments. But when geometry was created in ancient Egypt, it really was about surveys and instruments, in the same way computer science started off with computers in the twentieth century.</p>
<p>What computer science is really about is</p>
<p><em> 1. Formalizing intuitions about process ie &#8220;How to&#8221; knowledge</em></p>
<p>eg How to compute sqrt vs &#8220;what is sqrt&#8221;<br />
eg How to draw triangle vs &#8220;what is a triangle&#8221;</p>
<p style="padding-left:30px;">So whats so hard about this? Real issues of computer science is not about telling people how to do stuff. That would be too easy. Real problems come when we try to build very very large systems that performs these processes. Real problems arise with these systems that have programs that are too big to fit in any one person&#8217;s head. Therefore,</p>
<p><em>2. Computer science, is also, all about techniques to control complexity of  large systems.<br />
</em></p>
<p><strong>Abstract Characteristic (vs other engineering disciplines)<br />
</strong></p>
<p>The components we use in computer science are asbtract, like an array or a hash. Unlike other disciplines that also deal with complexity the difference here is that the complexity comp science face is not physical in nature. They do not face the physical realities of real world like in the case of other engineering fields. Leakage, resisitace, heating, drag and such physical issues does not dog computer science. Rather what ails it, are the constraints of human mind in holding and keeping track of big programs.</p>
<p>In this sense computer science is an abstract form of engineering and therefore <strong>its most important tools </strong>are tools for abstraction, that aid human understanding and kill complexity. This is what comp science is mostly all about.</p>
<p><strong>What are the techniques for controlling complexity</strong></p>
<ol>
<li>Black-Box Methods</li>
<li>Conventional Interfaces</li>
<li>Large Scale System Integration Metaphors
<ol>
<li>OO</li>
<li>Streams</li>
</ol>
</li>
<li>New Languages</li>
</ol>
<p><strong>Black Box Techniques</strong></p>
<p style="padding-left:30px;">Refers to making something and building a box about it such that it can be used without knowledge of its internals much like an IC chip. You want to suppress details so that you can build bigger boxes that use this.</p>
<p style="padding-left:30px;">You can also use black box techniques to express generality. eg A routine add might be able to add numbers, vectors, signals etc.</p>
<p><strong>Conventional Interfaces</strong></p>
<p style="padding-left:30px;">Are agreed upon ways of plugging things together.</p>
<p style="padding-left:30px;">These are operations that all kinds of &#8220;abstracts&#8221; might support eg +</p>
<p><strong>Languages</strong></p>
<p style="padding-left:30px;">Help you control complexity by dempahsizing certain aspects of the complexty and emphasizing others eg SQL emphasizes only the data modification part and hides everything else</p>
<p style="padding-left:30px;"><em> Learning a language is like learning chess it just takes 2 minutes but learning the implications takes a lifetime.</em></p>
<p><strong>Framework for evaluating and understanding Languages</strong></p>
<p style="padding-left:30px;">If we view languages in the context of tools in reducing complexity, it immediately becomes clear that a new language is not all about how many lines of code to do the next cool thing. Rather they should be evaluated in terms of  <strong><br />
</strong></p>
<ul>
<li>What are the tools for abstractions it provides</li>
<li>What are the primitives that it provides</li>
<li>What are the ways of combining these primitives</li>
</ul>
<p><em><br />
</em></p>
<p><em>My thoughts : The idea of computer science as only about tools to control complexity is not too well imbibed into the many minds (including my iniitial years)  i have come across in my decade of experience. Rather, computers are all about &#8220;coding&#8221; or Java or C++ and networking. If code is viewed and reviewed from this angle alone, much of the issues that plague the industry would have been non existent. </em></p>
<p><em>In these lectures everything that follows is a function of this characterisitc, of ways to reduce complexity, evident in the way languages are evalauted. I&#8217;m excited to take the new (rather old) take on all other topics in the following series and will be posting the follow up posts on the same. </em></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/512/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/512/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/512/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/512/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/512/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/512/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/512/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/512/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/512/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/512/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=512&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2008/12/16/relearning-the-basics-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>
	</item>
		<item>
		<title>Funny and educational read</title>
		<link>http://computinglife.wordpress.com/2008/12/15/funny-and-educational-read/</link>
		<comments>http://computinglife.wordpress.com/2008/12/15/funny-and-educational-read/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 06:44:59 +0000</pubDate>
		<dc:creator>computinglife</dc:creator>
				<category><![CDATA[Cool-Stuff]]></category>
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://computinglife.wordpress.com/?p=499</guid>
		<description><![CDATA[This is the  blog of a white computer guy who has married a black lady from South Africa.The culture  differences he observes are funny to read and gives a perspective of life in South Africa. 
The pod-casts are quite interesting too, giving more information, political and economical included, of the country. Kind-of makes [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=499&subd=computinglife&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><span style="font-family:Trebuchet MS;"><span class="122474106-15122008"><a href="http://www.hanselman.com/blog/SouthAfrica2008BeingTheWhiteOrBlackGuyInTheFamily.aspx" target="_blank">This is the  blog</a> of a white computer guy who has married a black lady from South Africa.The culture  differences he observes are funny to read and gives a perspective of life in South Africa. </span></span></p>
<p><span style="font-family:Trebuchet MS;"><span class="122474106-15122008">The pod-casts are quite interesting too, giving more information, political and economical included, of the country. Kind-of makes me wish i had some ways to record more of what i heard and saw, when i travelled about in India myself.<br />
</span></span></p>
<div><span style="font-family:Trebuchet MS;"><a href="http://www.hanselman.com/blog/SouthAfrica2008BeingTheWhiteOrBlackGuyInTheFamily.aspx"><br />
</a></span></div>
<div><span style="font-family:Trebuchet MS;"><br />
</span></div>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/computinglife.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/computinglife.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/computinglife.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/computinglife.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/computinglife.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/computinglife.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/computinglife.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/computinglife.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/computinglife.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/computinglife.wordpress.com/499/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=computinglife.wordpress.com&blog=529624&post=499&subd=computinglife&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://computinglife.wordpress.com/2008/12/15/funny-and-educational-read/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">computinglife</media:title>
		</media:content>
	</item>
	</channel>
</rss>