<?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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">

<channel>
	<title>Dan Siemon &#187; Computer Science</title>
	<atom:link href="http://www.coverfire.com/archives/tag/computer-science/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.coverfire.com</link>
	<description>Thoughts and musings</description>
	<lastBuildDate>Wed, 21 Jul 2010 00:39:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/ca/</creativeCommons:license>		<item>
		<title>A new way to look at networking</title>
		<link>http://www.coverfire.com/archives/2008/03/25/a-new-way-to-look-at-networking/</link>
		<comments>http://www.coverfire.com/archives/2008/03/25/a-new-way-to-look-at-networking/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 01:43:03 +0000</pubDate>
		<dc:creator>Dan Siemon</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Networking]]></category>

		<guid isPermaLink="false">http://www.coverfire.com/archives/2008/03/25/a-new-way-to-look-at-networking/</guid>
		<description><![CDATA[I finally got around to watching A new way to look at networking yesterday. This is a talk given by Van Jacobson at Google in 2006 (yes, it has been on my todo list for a long time).This is definitely &#8230; <a href="http://www.coverfire.com/archives/2008/03/25/a-new-way-to-look-at-networking/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I finally got around to watching <a href="http://video.google.com/videoplay?docid=-6972678839686672840&amp;q=google+tech+talk+networking&amp;total=124&amp;start=0&amp;num=10&amp;so=0&amp;type=search&amp;plindex=0" title="A new way to look at networking">A new way to look at networking</a> yesterday. This is a talk given by <a href="http://en.wikipedia.org/wiki/Van_Jacobson" title="Van Jacobson">Van Jacobson</a> at Google in 2006 (yes, it has been on my todo list for a long time).This is definitely worth watching if you are interested in networking.</p>
<p>A couple of quick comments (These are not particularly deep or anything. This is mostly for my own reference later.):</p>
<ul>
<li>He says that the current Internet was designed for conversations between end nodes but we&#8217;re using it for information dissemination.
<ul>
<li>Me: This distinction relies on the data being disseminated to each user being identical. However, in the vast majority of cases even data that on the surface is identical such as web site content is actually unique for each visitor. Any site with advertisements or with customizable features are good examples. As a result we are still using the Internet for conversations in most situations.</li>
</ul>
</li>
<li>He outlines the development of networking:
<ul>
<li>The phone network was about connecting wires. Conversations were implicit.</li>
<li>The Internet added metadata (the source and destination) to the data which allowed for a much more resilient network to be created. The Internet is about conversations between end nodes.</li>
<li>He wants to add another layer where content is addressable rather than the source or destination.</li>
</ul>
</li>
<li>He argues for making implicit information explicit so the network can make more intelligent decisions.
<ul>
<li>This is what IP did by adding the source and destination to data.</li>
</ul>
</li>
<li>His idea of identifying the data not the source or destination is very interesting. A consequences of this model is that data must be immutable, identifiable and build in metadata such as the version and the date. It strikes me how the internal operation of the <a href="http://git.or.cz/" title="Git">Git version control system</a> matches these requirements.
<ul>
<li>At the moment I write this <a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=cc7feea39bed2951cc29af3ad642f39a99dfe8d3" title="A commit in Linus's kernel tree">cc7feea39bed2951cc29af3ad642f39a99dfe8d3</a> uniquely identifies the current version (content) of Linus&#8217;s kernel development tree.</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.coverfire.com/archives/2008/03/25/a-new-way-to-look-at-networking/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Git for Computer Scientists</title>
		<link>http://www.coverfire.com/archives/2007/09/06/git-for-computer-scientists/</link>
		<comments>http://www.coverfire.com/archives/2007/09/06/git-for-computer-scientists/#comments</comments>
		<pubDate>Fri, 07 Sep 2007 02:32:08 +0000</pubDate>
		<dc:creator>Dan Siemon</dc:creator>
				<category><![CDATA[Computer Science]]></category>

		<guid isPermaLink="false">http://www.coverfire.com/archives/2007/09/06/git-for-computer-scientists/</guid>
		<description><![CDATA[If you are interested in how Git works internally take a look at Git for Computer Scientists. This document explains how Git stores data in a DAG and even has pretty pictures.]]></description>
			<content:encoded><![CDATA[<p>If you are interested in how <a href="http://git.or.cz/" title="Git">Git</a> works internally take a look at <a href="http://eagain.net/articles/git-for-computer-scientists/" title="Git for Computer Scientists">Git for Computer Scientists</a>. This document explains how Git stores data in a DAG and even has pretty pictures.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coverfire.com/archives/2007/09/06/git-for-computer-scientists/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Semicolon Wars</title>
		<link>http://www.coverfire.com/archives/2006/08/11/the-semicolon-wars/</link>
		<comments>http://www.coverfire.com/archives/2006/08/11/the-semicolon-wars/#comments</comments>
		<pubDate>Fri, 11 Aug 2006 19:26:08 +0000</pubDate>
		<dc:creator>Dan Siemon</dc:creator>
				<category><![CDATA[Computer Science]]></category>

		<guid isPermaLink="false">http://www.coverfire.com/archives/2006/08/11/the-semicolon-wars/</guid>
		<description><![CDATA[Interesting programming language article. The Semicolon Wars from American Scientist. A catalog maintained by Bill Kinnersley of the University of Kansas lists about 2,500 programming languages. Another survey, compiled by Diarmuid Piggott, puts the total even higher, at more than &#8230; <a href="http://www.coverfire.com/archives/2006/08/11/the-semicolon-wars/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Interesting programming language article.</p>
<p><a title="The Semicolon Wars" href="http://www.americanscientist.org/template/AssetDetail/assetid/51982/page/1">The Semicolon Wars</a> from <a title="American Scientist" href="http://www.americanscientist.org/">American Scientist</a>.</p>
<blockquote><p>A catalog maintained by         Bill     Kinnersley of the University of Kansas lists about         2,500 programming     languages. Another survey, compiled by         Diarmuid Piggott, puts the     total even higher, at more than         8,500. And keep in mind that whereas     human languages have         had millennia to evolve and diversify, all the     computer         languages have sprung up in just 50 years. Even by the         more-conservative standards of the Kinnersley count, that means         we&#8217;ve been inventing one language a week, on average, ever since     Fortran.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.coverfire.com/archives/2006/08/11/the-semicolon-wars/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Extra, Extra &#8211; Read All About It: Nearly All Binary Searches and Mergesorts are Broken</title>
		<link>http://www.coverfire.com/archives/2006/06/04/extra-extra-read-all-about-it-nearly-all-binary-searches-and-mergesorts-are-broken/</link>
		<comments>http://www.coverfire.com/archives/2006/06/04/extra-extra-read-all-about-it-nearly-all-binary-searches-and-mergesorts-are-broken/#comments</comments>
		<pubDate>Sun, 04 Jun 2006 18:35:48 +0000</pubDate>
		<dc:creator>Dan Siemon</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Software development]]></category>

		<guid isPermaLink="false">http://www.coverfire.com/archives/2006/06/04/extra-extra-read-all-about-it-nearly-all-binary-searches-and-mergesorts-are-broken/</guid>
		<description><![CDATA[If you follow many software or computer science related blogs you may have already seen the article linked below. I&#8217;m going to link to it again anyway because everyone who is involved in software should read it. Extra, Extra &#8211; &#8230; <a href="http://www.coverfire.com/archives/2006/06/04/extra-extra-read-all-about-it-nearly-all-binary-searches-and-mergesorts-are-broken/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you follow many software or computer science related blogs you may have already seen the article linked below.  I&#8217;m going to link to it again anyway because everyone who is involved in software should read it.</p>
<p><a title="Nearly all binary searches are broken" href="http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html">Extra, Extra &#8211; Read All About It: Nearly All Binary Searches and Mergesorts are Broken</a></p>
<blockquote><p>The general lesson that I take away from this bug is humility: It is hard to write even the smallest piece of code correctly, and our whole world runs on big, complex pieces of code.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.coverfire.com/archives/2006/06/04/extra-extra-read-all-about-it-nearly-all-binary-searches-and-mergesorts-are-broken/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Operating system design</title>
		<link>http://www.coverfire.com/archives/2006/05/06/operating-system-design/</link>
		<comments>http://www.coverfire.com/archives/2006/05/06/operating-system-design/#comments</comments>
		<pubDate>Sat, 06 May 2006 18:27:38 +0000</pubDate>
		<dc:creator>Dan Siemon</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Computers]]></category>

		<guid isPermaLink="false">http://www.coverfire.com/archives/2006/05/06/operating-system-design/</guid>
		<description><![CDATA[The following article offers a nice introduction to some design techniques that may be used to create more reliable operating systems. Nevertheless, it is interesting to note that microkernels—long discarded as unacceptable because of their lower performance compared with monolithic &#8230; <a href="http://www.coverfire.com/archives/2006/05/06/operating-system-design/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The following article offers a nice introduction to some design techniques that may be used to create more reliable operating systems.</p>
<blockquote><p>Nevertheless, it is interesting to note that microkernels—long discarded as unacceptable because of their lower performance compared with monolithic kernels—might be making a comeback due to their potentially higher reliability, which many people now regard as more important than performance. The wheel of reincarnation has turned.</p></blockquote>
<p><a title="Can We Make Operating Systems Reliable and Secure?" href="http://www.computer.org/portal/site/computer/menuitem.5d61c1d591162e4b0ef1bd108bcd45f3/index.jsp?&#038;pName=computer_level1_article&#038;TheCat=1005&#038;path=computer/homepage/0506&#038;file=cover1.xml&#038;xsl=article.xsl&#038;">Can We Make Operating Systems Reliable and Secure?</a> by Andrew S. Tanenbaum</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coverfire.com/archives/2006/05/06/operating-system-design/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Computer science growing into a basic science</title>
		<link>http://www.coverfire.com/archives/2006/02/13/computer-science-growing-into-a-basic-science/</link>
		<comments>http://www.coverfire.com/archives/2006/02/13/computer-science-growing-into-a-basic-science/#comments</comments>
		<pubDate>Tue, 14 Feb 2006 03:05:42 +0000</pubDate>
		<dc:creator>Dan Siemon</dc:creator>
				<category><![CDATA[Computer Science]]></category>

		<guid isPermaLink="false">http://www.coverfire.com/archives/2006/02/13/computer-science-growing-into-a-basic-science/</guid>
		<description><![CDATA[Computer science growing into a basic science The talks demonstrated that research in computer science is moving beyond the study of a set of ‘computing machinery.’ Just as mathematics and physics have matured into fundamental sciences, computer science, too, is &#8230; <a href="http://www.coverfire.com/archives/2006/02/13/computer-science-growing-into-a-basic-science/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Computer science growing into a basic science" href="http://fecolumnists.expressindia.com/full_column.php?content_id=115045">Computer science growing into a basic science</a></p>
<blockquote><p><font size="3" face="Times New Roman, Times, serif">The talks demonstrated that research in computer science is moving beyond the study of a set of ‘computing machinery.’ Just as mathematics and physics have matured into fundamental sciences, computer science, too, is graduating into one.</font></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.coverfire.com/archives/2006/02/13/computer-science-growing-into-a-basic-science/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Perils of JavaSchools</title>
		<link>http://www.coverfire.com/archives/2005/12/29/the-perils-of-javaschools/</link>
		<comments>http://www.coverfire.com/archives/2005/12/29/the-perils-of-javaschools/#comments</comments>
		<pubDate>Fri, 30 Dec 2005 04:06:45 +0000</pubDate>
		<dc:creator>Dan Siemon</dc:creator>
				<category><![CDATA[Computer Science]]></category>

		<guid isPermaLink="false">http://www.coverfire.com/archives/2005/12/29/the-perils-of-javaschools/</guid>
		<description><![CDATA[The Perils of JavaSchools, read it.]]></description>
			<content:encoded><![CDATA[<p><a title="The Perils of JavaSchools" href="http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html">The Perils of JavaSchools</a>, read it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coverfire.com/archives/2005/12/29/the-perils-of-javaschools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CASCON 2005</title>
		<link>http://www.coverfire.com/archives/2005/10/20/cascon-2005/</link>
		<comments>http://www.coverfire.com/archives/2005/10/20/cascon-2005/#comments</comments>
		<pubDate>Thu, 20 Oct 2005 16:27:54 +0000</pubDate>
		<dc:creator>Dan Siemon</dc:creator>
				<category><![CDATA[Computer Science]]></category>

		<guid isPermaLink="false">http://www.coverfire.com/?p=138</guid>
		<description><![CDATA[Last Tuesday I attended CASCON 2005. CASCON is hosted by IBM&#8217;s Centers for Advanced Studies. I have been to many technology conferences in the past such as Internet World but this was the first academic conference I have attended. As &#8230; <a href="http://www.coverfire.com/archives/2005/10/20/cascon-2005/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last Tuesday I attended <a href="https://www-927.ibm.com/ibm/cas/cascon/index.shtml">CASCON 2005</a>.  CASCON is hosted by IBM&#8217;s <a href="https://www-927.ibm.com/ibm/cas/">Centers for Advanced Studies</a>.  I have been to many technology conferences in the past such as Internet World but this was the first academic conference I have attended.  As such, I don&#8217;t have anything to compare CASCON against.  The conference itself seemed to be organized well.  The atmosphere was very relaxed.</p>
<p>The keynote speech for the day was by Rob Clyde from Symantec Corp.  His speech was entertaining and had lots of good statistics on the current state of computer security.  Throughout the whole speech one thought kept circling in my mind, the security industry is far more worried about managing the security problems that plague computer networks than solving them.  This makes sense since it is hard to sell solutions to problems that no longer exist.  The moral for this story is that computer science as a discipline shouldn&#8217;t be looking to the main stream computer security industry for solutions to basic security problems.</p>
<p>A key part of CASCON is the technology showcase.  Interested faculty and students are given small booths where they can present their current research to anyone interested.  The closest analogy may be an elementary school science fair for adults.  This is a great way to get some idea of what other people are currently researching and also provided me with many ideas for my own thesis topic.</p>
<p>Perhaps the most memorable part of my CASCON experience came after the conference was over for the day.  During diner I lucked into sitting beside <a href="http://www.cs.dal.ca/cspeople/m_gentleman.shtml">Dr. Morven Gentleman</a>.  A short while into the meal I discovered that among several other distinguished positions, Morven had worked at Bell Labs during the late sixties.  If you know anything about the history of computing you probably know that both Unix and C were developed at Bell labs during this time.  Hearing first hand anecdotes about the formative years of Unix and C was absolutely fabulous.  The rest of the diner consisted of me peppering Morven with questions about the history of computing which he seemed happy to answer.  Hopefully I wasn&#8217;t too annoying.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coverfire.com/archives/2005/10/20/cascon-2005/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software patents</title>
		<link>http://www.coverfire.com/archives/2005/08/13/software-patents/</link>
		<comments>http://www.coverfire.com/archives/2005/08/13/software-patents/#comments</comments>
		<pubDate>Sun, 14 Aug 2005 02:00:12 +0000</pubDate>
		<dc:creator>Dan Siemon</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Society]]></category>

		<guid isPermaLink="false">http://www.coverfire.com/?p=124</guid>
		<description><![CDATA[For an interesting opinion on software patents check this article out. I really like his conception of the line between what is patentable and what is not.]]></description>
			<content:encoded><![CDATA[<p>For an interesting opinion on software patents check this <a href="http://www.spectrum.ieee.org/WEBONLY/resource/jul05/0705inve.html">article</a> out.  I really like his conception of the line between what is patentable and what is not.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coverfire.com/archives/2005/08/13/software-patents/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Memory efficient doubly linked list</title>
		<link>http://www.coverfire.com/archives/2005/04/16/memory-efficient-doubly-linked-list/</link>
		<comments>http://www.coverfire.com/archives/2005/04/16/memory-efficient-doubly-linked-list/#comments</comments>
		<pubDate>Sun, 17 Apr 2005 02:36:12 +0000</pubDate>
		<dc:creator>Dan Siemon</dc:creator>
				<category><![CDATA[Computer Science]]></category>

		<guid isPermaLink="false">http://www.coverfire.com/archives/2005/04/16/memory-efficient-doubly-linked-list/</guid>
		<description><![CDATA[Linux Journal has an article in the January 2005 issue that introduces a doubly linked list that is designed for memory efficiency. Typically elements in doubly linked list implementations consist of a pointer to the data, a pointer to the &#8230; <a href="http://www.coverfire.com/archives/2005/04/16/memory-efficient-doubly-linked-list/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.linuxjournal.com">Linux Journal</a> has an <a href="http://www.linuxjournal.com/article/6828">article</a> in the January 2005 issue that introduces a doubly linked list that is designed for memory efficiency.</p>
<p>Typically elements in doubly linked list implementations consist of a pointer to the data, a pointer to the next node and a pointer to the previous node in the list.</p>
<p><img src="http://www.coverfire.com/blog_files/dbl-linked-list-1-20050416.png" alt="Picture of a typical linked list" /></p>
<p>The more memory efficient implementation described in the article stores a single offset instead of the next and previous pointers.</p>
<p><img src="http://www.coverfire.com/blog_files/dbl-linked-list-2-20050416.png" alt="Diagram of the memory efficient linked list" /></p>
<p>The pointer difference is calculated by taking the <a href="http://en.wikipedia.org/wiki/Xor">exclusive or</a> (XOR) of the memory location of the previous and the next nodes.  Like most linked list implementations a NULL pointer indicates a non-existent node.  This is used at the beginning and end of the list.  For the diagram above, the pointer differences would be calculated as follows:</p>
<p>A[Pointer difference] = NULL XOR B<br />
B[Pointer difference] = A XOR C<br />
C[Pointer difference] = B XOR NULL</p>
<p>One nice property of XOR is that it doesn&#8217;t matter what order the operation is applied.  For example:<br />
A XOR B = C<br />
C XOR B = A<br />
A XOR C = B</p>
<p>The memory efficient linked list uses this property of XOR for traversals.  The trick is that any traversal operation requires both the address of current node and the address of either the preceding or following node.</p>
<p>Using the example figure above, calculating the address of the B node from A looks like:<br />
B = NULL XOR A[Pointer difference]</p>
<p>What is really interesting is that traversing the list operates exactly the same in both directions.      As shown below calculating the address of node A or C from B is simply depends on which direction the traversal is going.</p>
<p>A = C XOR B[Pointer difference]<br />
C = A XOR B[Pointer difference]</p>
<p>The <a href="http://www.linuxjournal.com/article/6828">original article</a> presents some time and space complexity results.  I won&#8217;t bother repeating them here.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coverfire.com/archives/2005/04/16/memory-efficient-doubly-linked-list/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
