<?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/"
	>

<channel>
	<title>Observations from Uppsala &#187; Joel Spolsky</title>
	<atom:link href="http://jakob.engbloms.se/archives/tag/joel-spolsky/feed" rel="self" type="application/rss+xml" />
	<link>http://jakob.engbloms.se</link>
	<description>Computer Technology: Simulation, Virtualization, Virtual Platforms, Embedded, Multicore and Multiprocessing (by Jakob Engblom)</description>
	<lastBuildDate>Sun, 29 Jan 2012 19:45:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<image>
    <title>Observations from Uppsala</title>
    <url>http://jakob.engbloms.se/favicon.png</url>
    <link>http://jakob.engbloms.se</link>
    <width>32</width>
    <height>32</height>
    <description>Observations from Uppsala - http://jakob.engbloms.se</description>
    </image>		<item>
		<title>Reddit Reflects on The Joel Discussion</title>
		<link>http://jakob.engbloms.se/archives/967?&#038;owa_medium=feed&#038;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/967#comments</comments>
		<pubDate>Mon, 12 Oct 2009 18:36:51 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[blogging]]></category>
		<category><![CDATA[Joel Spolsky]]></category>
		<category><![CDATA[Reddit]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=967</guid>
		<description><![CDATA[Reddit has an active discussion on the quote by Joel Spolsky that I posted&#8230; the other day. Which is way longer than the discussion here, but explains how I suddenly got 3500 page views in a day&#8230; about a 50x increase from the typical average. Tweet]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.reddit.com/r/programming/comments/9t0sw/joel_spolsky_you_cannot_program_parallel_in_c/ "></a><a href="http://jakob.engbloms.se/wp-content/uploads/2009/10/reddit_blog.png"><img class="alignleft size-full wp-image-984" style="margin: 5px;" title="reddit_blog" src="http://jakob.engbloms.se/wp-content/uploads/2009/10/reddit_blog.png" alt="reddit_blog" width="35" height="40" /></a>Reddit has an active discussion on the quote by Joel Spolsky that I posted&#8230; the other day. Which is way longer than the discussion here, but explains how I suddenly got 3500 page views in a day&#8230; about a 50x increase from the typical average.</p>
<div class="simple_likebuttons_container_small">
      <div class="simple_likebuttons_googleplus">
        <g:plusone size="medium" count="false" href="http://jakob.engbloms.se/archives/967"></g:plusone>
      </div>
    
      <div class="simple_likebuttons_twitter simple_likebuttons_twitter_s">
        <a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-url="http://jakob.engbloms.se/archives/967" data-lang="en">Tweet</a>
      </div>
    
      <div class="simple_likebuttons_facebook">
        <div id="fb-root"></div>
        <script>(function(d, s, id) {
          var js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) {return;}
          js = d.createElement(s); js.id = id;
          js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, "script", "facebook-jssdk"));</script>
        <div class="fb-like" data-href="http://jakob.engbloms.se/archives/967" data-send="false" data-layout="button_count" data-show-faces="false" data-width="90"></div>
      </div>
    </div>]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/967/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Joel Spolsky: You cannot program parallel in C, period</title>
		<link>http://jakob.engbloms.se/archives/953?&#038;owa_medium=feed&#038;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/953#comments</comments>
		<pubDate>Sun, 11 Oct 2009 17:40:11 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Joel Spolsky]]></category>
		<category><![CDATA[stackoverflow.com]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=953</guid>
		<description><![CDATA[I found this quote in Stackoverflow Podcast #68 quite funny in its extreme dislike of parallel programming in C&#8230; Thanks to the community transcripts wiki: Spolsky: Quite probably. I mean C is a car, it&#8217;s very dangerous – it doesn&#8217;t have seatbelts, but it&#8217;s very powerful because it goes very fast. In fact, I&#8217;d go [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2008/10/stackoverflowlogo250hq2.png"><img class="alignleft size-full wp-image-300" style="margin: 5px 10px;" title="stackoverflowlogo250hq2" src="http://jakob.engbloms.se/wp-content/uploads/2008/10/stackoverflowlogo250hq2.png" alt="stackoverflowlogo250hq2" width="47" height="61" /></a>I found this quote in <a href="http://blog.stackoverflow.com/2009/09/podcast-68/">Stackoverflow Podcast #68 </a>quite funny in its extreme dislike of parallel programming in C&#8230;</p>
<p><span id="more-953"></span>Thanks to the <a href="https://stackoverflow.fogbugz.com/default.asp?W29083">community transcripts wiki</a>:</p>
<blockquote><p><strong>Spolsky: </strong>Quite probably. I mean C is a car, it&#8217;s very dangerous – it doesn&#8217;t have seatbelts, but it&#8217;s very powerful because it goes very fast. In fact, I&#8217;d go so far as to say, unless some people are gonna punch me about this one, but you cannot write multi-threaded code in the C programming language. You just can&#8217;t. Although technically all the capabilities are there, it is <em>beyond</em> the capability of mortal humans – and I know, some of you out there are very smart and you think that you have the capability of writing multi-threaded code in the C programming language, because you&#8217;re hot shit. Well, let me tell you, it is <em>beyond </em>the capability of humans on this planet, for their brains are just not adequate to the task of writing multi-threaded code in <em>most</em> languages, least of all low-level languages like C. It&#8217;s just not gonna work, it&#8217;s just not gonna make you happy. So there.</p></blockquote>
<p>The only problem with this statement is that it means we are all doomed: since all operating systems are written in C, and all low-level libraries, it means that we have no way to build the first level of abstraction needed to provide the higher-level primitives for C# and Python and everything else higher up the stack.</p>
<p>But in general, I think this is a fairly true statement for volume programming.</p>
<div class="simple_likebuttons_container_small">
      <div class="simple_likebuttons_googleplus">
        <g:plusone size="medium" count="false" href="http://jakob.engbloms.se/archives/953"></g:plusone>
      </div>
    
      <div class="simple_likebuttons_twitter simple_likebuttons_twitter_s">
        <a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-url="http://jakob.engbloms.se/archives/953" data-lang="en">Tweet</a>
      </div>
    
      <div class="simple_likebuttons_facebook">
        <div id="fb-root"></div>
        <script>(function(d, s, id) {
          var js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) {return;}
          js = d.createElement(s); js.id = id;
          js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, "script", "facebook-jssdk"));</script>
        <div class="fb-like" data-href="http://jakob.engbloms.se/archives/953" data-send="false" data-layout="button_count" data-show-faces="false" data-width="90"></div>
      </div>
    </div>]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/953/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>StackOverflow interviews CouchDB</title>
		<link>http://jakob.engbloms.se/archives/830?&#038;owa_medium=feed&#038;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/830#comments</comments>
		<pubDate>Tue, 07 Jul 2009 18:29:55 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[desktop software]]></category>
		<category><![CDATA[multicore software]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[couchDB]]></category>
		<category><![CDATA[Damien Katz]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Jan Lehnard]]></category>
		<category><![CDATA[Jeff Atwood]]></category>
		<category><![CDATA[Joel Spolsky]]></category>
		<category><![CDATA[parallelized software]]></category>
		<category><![CDATA[stackoverflow.com]]></category>
		<category><![CDATA[transactions]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=830</guid>
		<description><![CDATA[Last year, FLOSS Weekly interviewed Jan Lehnard of the CouchDB project. I put up a blog post on this, noting that it was interesting with a scalable parallel program written in Erlang, a true concurrent language. The interview was interesting,  but not very deeply technical. Now, almost a year later, the StackOverflow podcast, number 59, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-237" style="margin: 5px 10px;" title="couchdb" src="http://jakob.engbloms.se/wp-content/uploads/2008/08/couchdb.png" alt="couchdb" width="158" height="96" />Last year, <a href="http://www.twit.tv/floss">FLOSS Weekly </a>interviewed Jan Lehnard of the CouchDB project. I put up a <a href="http://jakob.engbloms.se/archives/236">blog post </a>on this, noting that it was interesting with a scalable parallel program written in Erlang, a true concurrent language. The interview was interesting,  but not very deeply technical. Now, almost a year later, <a href="http://blog.stackoverflow.com/category/podcasts/">the StackOverflow podcast</a>, <a href="http://blog.stackoverflow.com/2009/06/podcast-59/">number 59,</a> interviewed the founder of the project, Damien Katz. This interview goes a bit more into the technical details and what CouchDB is good for and what not, as well as some details on the use and performance of Erlang.</p>
<p><span id="more-830"></span>An interesting point made is that the light-weight user-level threading of the virtual machine in Erlang optimizes for massively threaded performance. The key property is that the context for each thread is very small compared to an OS-level application thread (like pthreads, for example), and this means that the context switch cost is dramatically smaller thanks to less cache and TLB contents needing to be swapped in and out. Thus, for lots of threads, Erlang tends to get more work done per time unit, as there is less execution time lost to friction in the memory system. I am not sure you can emulate this in C using a user-level package. The very small initial stack and heap size of the Erlang VM is partially achieved by the very fact that in a VM, you have more insight into and control over when memory allocation happens, and thus you can more easily do stack and heap grow operations in small units.</p>
<p>Another interesting aspect of Erlang as opposed to C/C++ brought out in the interview is how to do error handling. In Erlang, this is part of the language, while in C/C++, writing code to handle all cases (and handle them correctly) quickly gets painful and overwhelming. Instead in Erlang, you have a system policy to kill any thread that does something bad and restart it. With that simple strategy imposed on you, the code gets much simpler.</p>
<p><img class="alignright size-full wp-image-300" title="stackoverflowlogo250hq2" src="http://jakob.engbloms.se/wp-content/uploads/2008/10/stackoverflowlogo250hq2.png" alt="stackoverflowlogo250hq2" width="47" height="61" />The podcast also brought up <a href="http://stackoverflow.com/questions/299723/can-i-do-transactions-and-locks-in-couchdb">a StackOverflow question about CouchDB </a>that resulted in a good explanation of the concurrency model (optimistic concurrency on entire documents, an nothing smaller or larger than that). Damien Katz came in with some more insights on transactions and CouchDB, in a discussion on how to solve the classic bank account problem: moving money from one account to another. The &#8220;ACID&#8221; solution is to make sure that changes to two accounts are always both done or none done. The CouchDB solution is to put in a record of the account-to-account money transfer (I won&#8217;t use the word &#8220;transaction&#8221; as that is overloaded in this context) in the database, and just go through all records pertaining to a particular account to arrive at its current balance. That does feel more like proper bookkeeping practice, rather than having a single unauditable  balance in an account record&#8230;</p>
<p>Overall, worth its time to listen to.</p>
<div class="simple_likebuttons_container_small">
      <div class="simple_likebuttons_googleplus">
        <g:plusone size="medium" count="false" href="http://jakob.engbloms.se/archives/830"></g:plusone>
      </div>
    
      <div class="simple_likebuttons_twitter simple_likebuttons_twitter_s">
        <a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-url="http://jakob.engbloms.se/archives/830" data-lang="en">Tweet</a>
      </div>
    
      <div class="simple_likebuttons_facebook">
        <div id="fb-root"></div>
        <script>(function(d, s, id) {
          var js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) {return;}
          js = d.createElement(s); js.id = id;
          js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, "script", "facebook-jssdk"));</script>
        <div class="fb-like" data-href="http://jakob.engbloms.se/archives/830" data-send="false" data-layout="button_count" data-show-faces="false" data-width="90"></div>
      </div>
    </div>]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/830/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

