<?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>Blog::Log</title>
	<atom:link href="http://www.stpe.se/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stpe.se</link>
	<description>Not a blog, more a log.</description>
	<lastBuildDate>Sat, 17 Mar 2012 22:48:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Simple Mantis JSON API</title>
		<link>http://www.stpe.se/2012/03/simple-mantis-json-api/</link>
		<comments>http://www.stpe.se/2012/03/simple-mantis-json-api/#comments</comments>
		<pubDate>Sat, 17 Mar 2012 22:48:05 +0000</pubDate>
		<dc:creator>stefan</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[mantis json javascript soap api]]></category>

		<guid isPermaLink="false">http://www.stpe.se/?p=223</guid>
		<description><![CDATA[Mantis has a SOAP API, but I wanted JSON to display the most recent tickets on a web page using JavaScript. Hence I wrote a simple wrapper in PHP that does a SOAP call and returns the result as JSON to be conveniently digested by JavaScript. Put the mantisconnect_json.php file wherever you want, it doesn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mantisbt.org/">Mantis</a> has a <a href="http://www.mantisbt.org/demo/api/soap/mantisconnect.php">SOAP API</a>, but I wanted JSON to display the most recent tickets on a web page using JavaScript. Hence I wrote a simple wrapper in PHP that does a SOAP call and returns the result as JSON to be conveniently digested by JavaScript.</p>
<div id="gist-2065862" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="cp">&lt;?php</span></div><div class='line' id='LC2'><span class="sd">/**</span></div><div class='line' id='LC3'><span class="sd"> * Example usage (using jQuery):</span></div><div class='line' id='LC4'><span class="sd"> *  var url = &quot;/path/mantisconnect_json.php?name=mc_project_get_issues&amp;project_id=0&amp;page_number=1&amp;per_page=10&quot;;</span></div><div class='line' id='LC5'><span class="sd"> *  $.getJSON(url, function(data) {</span></div><div class='line' id='LC6'><span class="sd"> *      $.each(data, function() {</span></div><div class='line' id='LC7'><span class="sd"> *          console.log(data.id + &#39;: &#39; data.summary);</span></div><div class='line' id='LC8'><span class="sd"> *      });</span></div><div class='line' id='LC9'><span class="sd"> *  });</span></div><div class='line' id='LC10'><span class="sd"> */</span></div><div class='line' id='LC11'><br/></div><div class='line' id='LC12'><span class="c1">// URL to your Mantis SOAP API (the mantisconnect.php file)</span></div><div class='line' id='LC13'><span class="nb">define</span><span class="p">(</span><span class="s1">&#39;MANTISCONNECT_URL&#39;</span><span class="p">,</span> <span class="s1">&#39;http://www.whereyouhaveyourmantis.com/api/soap/mantisconnect.php&#39;</span><span class="p">);</span></div><div class='line' id='LC14'><br/></div><div class='line' id='LC15'><span class="c1">// the username/password of the user account to use for calls</span></div><div class='line' id='LC16'><span class="nb">define</span><span class="p">(</span><span class="s1">&#39;USERNAME&#39;</span><span class="p">,</span> <span class="s1">&#39;yourmantislogin&#39;</span><span class="p">);</span></div><div class='line' id='LC17'><span class="nb">define</span><span class="p">(</span><span class="s1">&#39;PASSWORD&#39;</span><span class="p">,</span> <span class="s1">&#39;yourmantisloginpassword&#39;</span><span class="p">);</span></div><div class='line' id='LC18'><br/></div><div class='line' id='LC19'><span class="c1">// ------------------------------------------------</span></div><div class='line' id='LC20'><br/></div><div class='line' id='LC21'><span class="nb">parse_str</span><span class="p">(</span><span class="nv">$_SERVER</span><span class="p">[</span><span class="s1">&#39;QUERY_STRING&#39;</span><span class="p">],</span> <span class="nv">$args</span><span class="p">);</span></div><div class='line' id='LC22'><br/></div><div class='line' id='LC23'><span class="c1">// get SOAP function name to call</span></div><div class='line' id='LC24'><span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nb">isset</span><span class="p">(</span><span class="nv">$args</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]))</span> <span class="p">{</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">die</span><span class="p">(</span><span class="s2">&quot;No name specified.&quot;</span><span class="p">);</span></div><div class='line' id='LC26'><span class="p">}</span></div><div class='line' id='LC27'><span class="nv">$function_name</span> <span class="o">=</span> <span class="nv">$args</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">];</span></div><div class='line' id='LC28'><br/></div><div class='line' id='LC29'><span class="c1">// remove function name from arguments</span></div><div class='line' id='LC30'><span class="nb">unset</span><span class="p">(</span><span class="nv">$args</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]);</span></div><div class='line' id='LC31'><br/></div><div class='line' id='LC32'><span class="c1">// prepend username/passwords to arguments</span></div><div class='line' id='LC33'><span class="nv">$args</span> <span class="o">=</span> <span class="nb">array_merge</span><span class="p">(</span></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">array</span><span class="p">(</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="s1">&#39;username&#39;</span> <span class="o">=&gt;</span> <span class="nx">USERNAME</span><span class="p">,</span></div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="s1">&#39;password&#39;</span> <span class="o">=&gt;</span> <span class="nx">PASSWORD</span></div><div class='line' id='LC37'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">),</span></div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$args</span></div><div class='line' id='LC39'><span class="p">);</span></div><div class='line' id='LC40'><br/></div><div class='line' id='LC41'><span class="c1">// connect and do the SOAP call</span></div><div class='line' id='LC42'><span class="k">try</span> <span class="p">{</span></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$client</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">SoapClient</span><span class="p">(</span><span class="nx">MANTISCONNECT_URL</span> <span class="o">.</span> <span class="s1">&#39;?wsdl&#39;</span><span class="p">);</span></div><div class='line' id='LC44'><br/></div><div class='line' id='LC45'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$result</span> <span class="o">=</span> <span class="nv">$client</span><span class="o">-&gt;</span><span class="na">__soapCall</span><span class="p">(</span><span class="nv">$function_name</span><span class="p">,</span> <span class="nv">$args</span><span class="p">);</span></div><div class='line' id='LC46'><span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">SoapFault</span> <span class="nv">$e</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC47'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$result</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span></div><div class='line' id='LC48'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="s1">&#39;error&#39;</span> <span class="o">=&gt;</span> <span class="nv">$e</span><span class="o">-&gt;</span><span class="na">faultstring</span></div><div class='line' id='LC49'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">);</span></div><div class='line' id='LC50'><span class="p">}</span></div><div class='line' id='LC51'><br/></div><div class='line' id='LC52'><span class="k">print</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$result</span><span class="p">);</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/2065862/f93a1adb949e2f7c4ea3bf781385f3c4814504aa/mantisconnect_json.php" style="float:right;">view raw</a>
            <a href="https://gist.github.com/2065862#file_mantisconnect_json.php" style="float:right;margin-right:10px;color:#666">mantisconnect_json.php</a>
            <a href="https://gist.github.com/2065862">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>Put the <code>mantisconnect_json.php</code> file wherever you want, it doesn&#8217;t need to be on the same server or have the same domain as the Mantis installation. Edit the MANTISCONNECT_URL and your Mantis username and password.</p>
<p>The query string parameter <code>name</code> defines what SOAP action to call, the rest of the query string parameters are passed as arguments in the SOAP call. Note that the Mantis username/password is inserted automatically as arguments by the PHP code to avoid having you expose it publicly in JavaScript (but they may be overridden if desired).</p>
<p>Please note that this is a very simple wrapper for read-only purpose (e.g. it will not work to create new issues).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stpe.se/2012/03/simple-mantis-json-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wipe and shutdown remote Linux server over SSH</title>
		<link>http://www.stpe.se/2012/03/wipe-and-shutdown-remote-linux-server-over-ssh/</link>
		<comments>http://www.stpe.se/2012/03/wipe-and-shutdown-remote-linux-server-over-ssh/#comments</comments>
		<pubDate>Fri, 09 Mar 2012 12:13:31 +0000</pubDate>
		<dc:creator>stefan</dc:creator>
				<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.stpe.se/?p=216</guid>
		<description><![CDATA[Wiping and shutting down a headless linux server over SSH. Wipe Copies zeros over the whole disk. dd if=/dev/zero of=/dev/sdaX Where sdaX is the device you want to wipe. Read discussion at security.stackexchange. Shutdown Since the shutdown command will be trashed by the wiping, we need to force shutdown in another way. echo 1 > [...]]]></description>
			<content:encoded><![CDATA[<p>Wiping and shutting down a headless linux server over SSH.</p>
<p><strong>Wipe</strong><br />
Copies zeros over the whole disk.</p>
<p><code>dd if=/dev/zero of=/dev/sdaX</code></p>
<p>Where <em>sdaX</em> is the device you want to wipe. Read discussion at <a href="http://security.stackexchange.com/questions/12070/how-can-i-remotely-wipe-the-contents-of-a-linux-laptop-if-its-been-stolen">security.stackexchange</a>.</p>
<p><strong>Shutdown</strong><br />
Since the shutdown command will be trashed by the wiping, we need to force shutdown in another way.</p>
<p><code>echo 1 > /proc/sys/kernel/sysrq<br />
echo o > /proc/sysrq-trigger</code></p>
<p>Don&#8217;t try this at home.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stpe.se/2012/03/wipe-and-shutdown-remote-linux-server-over-ssh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fix Tab Indenting in Coda</title>
		<link>http://www.stpe.se/2010/11/fix-tab-indenting-in-coda/</link>
		<comments>http://www.stpe.se/2010/11/fix-tab-indenting-in-coda/#comments</comments>
		<pubDate>Sun, 28 Nov 2010 19:07:44 +0000</pubDate>
		<dc:creator>stefan</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[coda]]></category>

		<guid isPermaLink="false">http://www.stpe.se/?p=213</guid>
		<description><![CDATA[Since I&#8217;ve got a Swedish keyboard on my MacBook Pro tab-indenting using &#8220;Shift Left ⌘[" and "Shift Right ⌘]&#8221; does not work (or actually only Shift Right works). The reason for this is that you must use the Alt-key to get a bracket [, and apparently Command-Alt-[ is already taken by toggling zoom on/off. To [...]]]></description>
			<content:encoded><![CDATA[<p>Since I&#8217;ve got a Swedish keyboard on my MacBook Pro tab-indenting using &#8220;Shift Left ⌘[" and "Shift Right ⌘]&#8221; does not work (or actually only Shift Right works).</p>
<p>The reason for this is that you must use the Alt-key to get a bracket [, and apparently Command-Alt-[ is already taken by toggling zoom on/off.</p>
<p>To make tab-indenting work in Coda, open <strong>System Preferences</strong>, <strong>Keyboard</strong>, click <strong>Keyboard Shortcuts</strong> tab, select <strong>Universal Access</strong> and finally uncheck the box for <strong>Turn zoom on or off</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stpe.se/2010/11/fix-tab-indenting-in-coda/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Developing Large-Scale JavaScript Web Sites &#8211; SWDC2010 slides</title>
		<link>http://www.stpe.se/2010/06/developing-large-scale-javascript-websites/</link>
		<comments>http://www.stpe.se/2010/06/developing-large-scale-javascript-websites/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 12:46:03 +0000</pubDate>
		<dc:creator>stefan</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[swdc]]></category>

		<guid isPermaLink="false">http://www.stpe.se/?p=203</guid>
		<description><![CDATA[Being very humbled to be part of the star struck lineup at The Scandinavian Web Developer Conference 2010 I did a talk about Developing Large-Scale JavaScript Web Sites (slides available here as PDF). The presentation is basically a quick high-level overview of some of the main points I&#8217;ve encountered after several workshops at different clients [...]]]></description>
			<content:encoded><![CDATA[<p>Being very humbled to be part of the star struck lineup at <a href="http://www.swdc-central.com">The Scandinavian Web Developer Conference 2010</a> I did a talk about <i>Developing Large-Scale JavaScript Web Sites</i> (slides <a href="http://www.stpe.se/presentations/DevelopingLargeScaleJavaScriptWebSites-SWDC2010.pdf">available here as PDF</a>).</p>
<p>The presentation is basically a quick high-level overview of some of the main points I&#8217;ve encountered after several workshops at different clients wanting to take the step from a legacy server centric web site architecture to a modern rich client side implementation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stpe.se/2010/06/developing-large-scale-javascript-websites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax and REST architecture &#8211; Optimera STHLM slides</title>
		<link>http://www.stpe.se/2010/06/ajax-rest-architecture-slides/</link>
		<comments>http://www.stpe.se/2010/06/ajax-rest-architecture-slides/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 11:56:23 +0000</pubDate>
		<dc:creator>stefan</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[presentation]]></category>

		<guid isPermaLink="false">http://www.stpe.se/?p=199</guid>
		<description><![CDATA[I did a presentation at Optimera STHLM entitled Faster websites with AJAX and REST architecture. The talk are more on an architecture level, rather than about implementation details. Slides are available as PDF here (this is an english version of what was presented). The demo I did of the Friendly Iframe ad-loading optimization by Tobias [...]]]></description>
			<content:encoded><![CDATA[<p>I did a presentation at <a href="http://www.internetdagarna.se/pages/seminarier/optimera-sthlm">Optimera STHLM</a> entitled <i>Faster websites with AJAX and REST architecture</i>. The talk are more on an architecture level, rather than about implementation details.</p>
<p>Slides are available as <a href="http://www.stpe.se/presentations/AJAXRESTArchitecture-OptimeraSTHLM.pdf">PDF here</a> (this is an english version of what was presented).</p>
<p>The demo I did of the Friendly Iframe ad-loading optimization by Tobias Järlund at Aftonbladet is available at the <a href="http://blogg.aftonbladet.se/dev/2010/06/aftonbladet-pa-optimera-sthlm">Aftonbladet dev blog</a> (swedish).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stpe.se/2010/06/ajax-rest-architecture-slides/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Optimera STHLM</title>
		<link>http://www.stpe.se/2010/05/optimera-sthlm/</link>
		<comments>http://www.stpe.se/2010/05/optimera-sthlm/#comments</comments>
		<pubDate>Wed, 12 May 2010 12:22:57 +0000</pubDate>
		<dc:creator>stefan</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[presentation]]></category>

		<guid isPermaLink="false">http://www.stpe.se/?p=197</guid>
		<description><![CDATA[I&#8217;m speaking at Optimera STHLM (that&#8217;s Optimize Stockholm) 31st of May about modern web architecture using JavaScript, Ajax and RESTful web services and what that means to both frontend and backend.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m speaking at <a href="http://www.internetdagarna.se/pages/seminarier/optimera-sthlm">Optimera STHLM</a> (that&#8217;s Optimize Stockholm) 31st of May about modern web architecture using JavaScript, Ajax and RESTful web services and what that means to both frontend and backend.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stpe.se/2010/05/optimera-sthlm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction to Google Maps API</title>
		<link>http://www.stpe.se/2010/04/introduction-to-google-maps-api/</link>
		<comments>http://www.stpe.se/2010/04/introduction-to-google-maps-api/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 21:22:01 +0000</pubDate>
		<dc:creator>stefan</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[gtug]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.stpe.se/?p=191</guid>
		<description><![CDATA[I just did a short talk at the Google Technology User Group meetup in Stockholm this evening about the Google Maps API. The purpose of the talk was to give a quick introduction on how to get started as well as show off some of the features. I wanted to emphasize how easy, using only [...]]]></description>
			<content:encoded><![CDATA[<p>I just did a short talk at the <a href="http://sites.google.com/site/stockholmgtug/">Google Technology User Group</a> meetup in Stockholm this evening about the Google Maps API. The purpose of the talk was to give a quick introduction on how to get started as well as show off some of the features. I wanted to emphasize how easy, using only a few lines of code, it is to leverage power-full features like geocoding, directions and streetview in your own implementation.</p>
<p>Here is the <a href="http://stpe.se/javascript/gmaps/gtug-april-gmaps.pdf">presentation as pdf</a> and the <a href="http://stpe.se/javascript/gmaps/">implementation examples</a> I demonstrated.</p>
<p>It was great fun as always, with lots of people (<a href="http://twitter.com/psvensson/status/11842283528">apx 90</a>). Thanks for having me!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stpe.se/2010/04/introduction-to-google-maps-api/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Speaker at Scandinavian Web Developer Conference</title>
		<link>http://www.stpe.se/2010/01/speaker-at-swdc2010/</link>
		<comments>http://www.stpe.se/2010/01/speaker-at-swdc2010/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 05:32:02 +0000</pubDate>
		<dc:creator>stefan</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[swdc]]></category>

		<guid isPermaLink="false">http://www.stpe.se/?p=189</guid>
		<description><![CDATA[I will share my experiences with Developing Large-Scale Websites using JavaScript on the upcoming Scandinavian Web Developer Conference 2010 in Stockholm, 24-25 May. I&#8217;m looking forward to it, it is great being back doing presentations &#8211; something I did frequently many years ago during the dot-com period.]]></description>
			<content:encoded><![CDATA[<p>I will share my experiences with <em>Developing Large-Scale Websites using JavaScript</em> on the upcoming <a href="http://swdc-central.com">Scandinavian Web Developer Conference 2010</a> in Stockholm, 24-25 May. I&#8217;m looking forward to it, it is great being back doing presentations &#8211; something I did frequently many years ago during the dot-com period.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stpe.se/2010/01/speaker-at-swdc2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coders at Work book review</title>
		<link>http://www.stpe.se/2010/01/coders-at-work-book-review/</link>
		<comments>http://www.stpe.se/2010/01/coders-at-work-book-review/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 21:39:20 +0000</pubDate>
		<dc:creator>stefan</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[book review]]></category>

		<guid isPermaLink="false">http://www.stpe.se/?p=184</guid>
		<description><![CDATA[I recently read Coders at Work (published by Apress), here is a quick book review&#8230; One way to describe this book, in a somewhat generalized way, is to say &#8220;Old people talking about when they were programmers&#8221;. The book is a collection of transcript style interviews with some of the most protruding people in the [...]]]></description>
			<content:encoded><![CDATA[<p><em>I recently read </em><a href="http://www.apress.com/book/view/1430219483"><em>Coders at Work</em></a><em> (published by Apress), here is a quick book review&#8230;</em></p>
<p>One way to describe this book, in a somewhat generalized way, is to say &#8220;Old people talking about when they were programmers&#8221;. The book is a collection of transcript style interviews with some of the most protruding people in the history of computer programming. 15 interviews in all, from <a href="http://en.wikipedia.org/wiki/Jamie_Zawinski">Jamie Zawinski</a> of Netscape fame (the young one of the lot, thereby the &#8220;old people&#8221; tongue-in-cheek reference) to <a href="http://en.wikipedia.org/wiki/Donald_knuth">Donald Knuth</a>.</p>
<p>Each interview is prefaced with a short introduction of the interviewee, followed by a discussion around a number of topics; how did you learn to program, how do you prefer to read code, hardest bug you tracked down, do you think of yourself as a scientist, engineer, artist or craftsman, what do you think of formal proofs, have you used <a href="http://en.wikipedia.org/wiki/Literate_programming">literate programming</a>, how do you interview candidates for employment, and more.</p>
<p>The author, Peter Seibel, is himself an experienced programmer resulting in insightful questions that only someone with great knowledge about programming may ask, making the interviews more free and targeted towards the interest of the particular person. It also makes the discussion feel more genuine and honest, rather than a set of questions and answers following a strict agenda.</p>
<p>The focus of the interviews are not technology, but the person being interviewed and how they look back on their career. The technical discussions typically centers on systems like <a href="http://en.wikipedia.org/wiki/Programmed_Data_Processor">PDP</a> and programming in <a href="http://en.wikipedia.org/wiki/Lisp_(programming_language)">LISP</a>. Although most issues are still relevant today in some way or another, the context is usually not on today&#8217;s technology (you do not program using punch cards, do you?).</p>
<p>That means that this book is not for someone looking at quick technical tips to apply in their current programming language of choice. But for those genuinely interested in the craft of software development this book is inspiring and gives insight into the people who were significant in some way bringing the industry into what it is today.</p>
<p>The book really does not analyze the answers in the interviews to a greater extent, leaving that to the reader. But to mention a few reoccurring themes there seems to be a consensus that programming is harder today (mostly because of parallelization) and C++ (and especially pointers) is crap.</p>
<p>Notable famous people missing from the list are Linus Torvalds (Linux) and John Carmack (Doom/Quake). Both were contacted by author Peter Seibel but he never got an answer. Additionally, most of the interviewees look back at the time when they were programming as their main profession, this is not a list of the superstar programmers of today (which would make a great follow up book).</p>
<p>All in all, if you are interested in the people, how they are and what their thoughts and experiences are like, then this book is for you &#8211; you&#8217;ll likely find it both inspiring as well as entertaining as I did. If you want source code listings, look elsewhere.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stpe.se/2010/01/coders-at-work-book-review/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Clone VirtualBox images (.vdi)</title>
		<link>http://www.stpe.se/2009/12/clone-virtualbox-images-vdi/</link>
		<comments>http://www.stpe.se/2009/12/clone-virtualbox-images-vdi/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 11:54:52 +0000</pubDate>
		<dc:creator>stefan</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[virtualbox]]></category>

		<guid isPermaLink="false">http://www.stpe.se/?p=177</guid>
		<description><![CDATA[Just copying a VirtualBox .vdi file and the opening it results in the error: Cannot register the hard disk &#8216;myhd.vdi&#8217; with UUID {ABCD} because a hard disk &#8216;myhd2.vdi&#8217; with UUID {ABCD} already exists in the media registry (&#8216;path/VirtualBox.xml&#8217;). The solution is to generate a new UUID for the copy. This is done using: VBoxManage internalcommands [...]]]></description>
			<content:encoded><![CDATA[<p>Just copying a VirtualBox .vdi file and the opening it results in the error:</p>
<blockquote><p>Cannot register the hard disk &#8216;myhd.vdi&#8217; with UUID {ABCD} because a hard disk &#8216;myhd2.vdi&#8217; with UUID {ABCD} already exists in the media registry (&#8216;path/VirtualBox.xml&#8217;).</p></blockquote>
<p>The solution is to generate a new UUID for the copy. This is done using:</p>
<p><code>VBoxManage internalcommands setvdiuuid myhd2.vdi</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stpe.se/2009/12/clone-virtualbox-images-vdi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

