<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>So I decided to take my work back underground</title>
	<atom:link href="http://gaiustech.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gaiustech.wordpress.com</link>
	<description>To stop it falling into the wrong hands</description>
	<lastBuildDate>Sat, 13 Apr 2013 19:41:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='gaiustech.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/0a1f076fa7fc2f9e2944ef7437e6a709?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>So I decided to take my work back underground</title>
		<link>http://gaiustech.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://gaiustech.wordpress.com/osd.xml" title="So I decided to take my work back underground" />
	<atom:link rel='hub' href='http://gaiustech.wordpress.com/?pushpress=hub'/>
		<item>
		<title>MongoDB Days</title>
		<link>http://gaiustech.wordpress.com/2013/04/13/mongodb-days/</link>
		<comments>http://gaiustech.wordpress.com/2013/04/13/mongodb-days/#comments</comments>
		<pubDate>Sat, 13 Apr 2013 17:40:32 +0000</pubDate>
		<dc:creator>Gaius</dc:creator>
				<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Random thoughts]]></category>

		<guid isPermaLink="false">http://gaiustech.wordpress.com/?p=2166</guid>
		<description><![CDATA[Last week I attended MongoDB Day London. Now MongoDB itself is a technology that I&#8217;m fairly interested in, I can see where it would have its uses. But the problem is the people! They all talk like this: Some problem &#8230; <a href="http://gaiustech.wordpress.com/2013/04/13/mongodb-days/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2166&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Last week I attended <a href="http://www.10gen.com/events/mongodb-london-2013">MongoDB Day London</a>. Now MongoDB itself is a technology that I&#8217;m fairly interested in, I can see where it would have its uses. But the problem is the people! They all talk like this:</p>
<ol>
<li>Some problem that just doesn&#8217;t really exist (or hasn&#8217;t existed for a very long time) with relational databases</li>
<li>MongoDB</li>
<li>Profit!</li>
</ol>
<p>An example would be the first speaker, who didn&#8217;t like normalized data because it had &#8220;bad locality&#8221;. Now ignoring for a second the difference between a <a href="http://en.wikipedia.org/wiki/Logical_data_model">logical</a> and a physical data model, and the existence of the <a href="http://en.wikipedia.org/wiki/Normal_forms">normal forms</a>, if you ever did find that the bottleneck on your joins specifically was <a href="http://en.wikipedia.org/wiki/Seek_time#Seek_time">seek time</a>, you could pre-compute the join and refresh it whenever anything changed &#8211; in Oracle using a <a href="http://docs.oracle.com/cd/A97630_01/server.920/a96567/repmview.htm">materialized view</a> (1996!), a <a href="http://docs.oracle.com/cd/E18686_01/coh.37/e18677/api_continuousquery.htm">continuous query</a>, the <a href="http://www.confio.com/logicalread/huge-performance-gains-using-oracle-11g-result-cache/#.UWmVaILLpjA">result cache</a>&#8230; And that&#8217;s on top of the block buffer cache and the query optimizer already being very smart. Another of the same speaker&#8217;s examples overlooked the existence of <a href="http://www.orafaq.com/wiki/NESTED_TABLE">nested tables</a>, saying what you could do with them is impossible in &#8220;SQL databases&#8221;. It&#8217;s claimed that MongoDB is more flexible because it doesn&#8217;t constrain you to tables. Well that&#8217;s backwards&#8230; We don&#8217;t work the way we do because tables are a limitation of the technology, we use the <a href="http://en.wikipedia.org/wiki/Relational_model">relational model</a> because it has <a href="http://en.wikipedia.org/wiki/First-order_logic">sound mathematical underpinnings</a>, and the technology reflects that&dagger;. Where&#8217;s the rigour in MongoDB&#8217;s model? </p>
<p>Another speaker claimed that it was far better for <a href="http://gaiustech.wordpress.com/2011/09/18/learning-the-wrong-lessons/">each application to have its own database</a>, and expose all its data through <a href="http://en.wikipedia.org/wiki/Service-oriented_architecture">web services</a>. Sounds good, except you now need <em>another</em> technology, a directory to find all these things, since they aren&#8217;t just table names or stored procedure names in the one place, and manage access control and auditing. And if you need to touch data across several of them then you&#8217;ll need something to coordinate that&#8230; We could call it a <a href="https://en.wikipedia.org/wiki/Transaction_processing_system">transaction processing facility</a>, since that&#8217;s what IBM called it in 1960. He handwaved over both of those. There were many similar examples. </p>
<p>Another recurring theme was of an organization refreshing its hardware and modifying its architecture, one component of which was introducing MongoDB, yet all the performance gains attributed to it. For example splitting OLTP and OLAP from one database into two, and introducing a delay of a few minutes between data coming in and being available for reporting. Well that will give you a performance boost in <em>any</em> database! If you can tolerate the delay, of course. But if you could, why build it that way in the first place (or having built it, complain that it&#8217;s slower than you&#8217;d like), and if you can&#8217;t, then you can&#8217;t do this. In the roadmap they are promising point-in-time recovery in a future release. Oracle had that in 1988, when I had just left primary school. </p>
<p>So anyway, since it&#8217;s free&Dagger;, there&#8217;s no reason not to evaluate MongoDB, and see if it suits your use cases. But just remember that these kids think they&#8217;re solving problems that IBM (et al) solved quite literally before they were born in some cases, and the features are probably already there in your existing database/technology stack (I have used Oracle for my rebuttals just because I am most familiar with it, but I expect the same is true for SQL Server and DB/2 as well). Talk to your friendly local DBA&#8230;</p>
<p>&dagger; I personally predict that in a few years there will be a lot of work re-normalizing the data in MongoDB and its rivals so it can actually be useful. That&#8217;s reason enough to become an expert in it. In about 2001, the company I joined then had just completed a massive engineering effort to get off <a href="http://actian.com/products/versant/vod">Versant</a> and (back) into Oracle&#8230; All this object-database stuff gives me massive deja vu for the 1990s when they were all the rage.</p>
<p>&Dagger; In the same way that <a href="http://www.oracle.com/technetwork/indexes/downloads/index.html">Oracle is also free</a> for evaluation purposes. No-one would deny that Oracle is expensive in production! But there is no such thing as cheap or expensive in business, there is only worth the money or not.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gaiustech.wordpress.com/2166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gaiustech.wordpress.com/2166/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2166&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gaiustech.wordpress.com/2013/04/13/mongodb-days/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ced82e97b7a13f79da0aaaca2302cd45?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">gaiush</media:title>
		</media:content>
	</item>
		<item>
		<title>The Grand Challenges</title>
		<link>http://gaiustech.wordpress.com/2012/11/13/the-grand-challenges/</link>
		<comments>http://gaiustech.wordpress.com/2012/11/13/the-grand-challenges/#comments</comments>
		<pubDate>Tue, 13 Nov 2012 19:51:59 +0000</pubDate>
		<dc:creator>Gaius</dc:creator>
				<category><![CDATA[Random thoughts]]></category>

		<guid isPermaLink="false">http://gaiustech.wordpress.com/2012/11/13/the-grand-challenges/</guid>
		<description><![CDATA[What would you say are the greatest challenges facing modern computing? Protein folding to discover new pharmaceuticals? Sifting the vast quantities of sensor readings from the Large Hadron Collider? Rendering movies so lifelike that human actors are obsolete? Well if &#8230; <a href="http://gaiustech.wordpress.com/2012/11/13/the-grand-challenges/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2164&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>What would you say are the greatest challenges facing modern computing? Protein folding to discover new pharmaceuticals? Sifting the vast quantities of sensor readings from the Large Hadron Collider? Rendering movies so lifelike that human actors are obsolete?</p>
<p>Well if you are Apple, I&#8217;d say your greatest challenges were scrolling a document, responding to a mouse click and keeping up with a user typing. Hell, you can&#8217;t even manage it for this blog post&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gaiustech.wordpress.com/2164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gaiustech.wordpress.com/2164/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2164&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gaiustech.wordpress.com/2012/11/13/the-grand-challenges/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ced82e97b7a13f79da0aaaca2302cd45?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">gaiush</media:title>
		</media:content>
	</item>
		<item>
		<title>Those Who Forget History Are Doomed To Repeat It&#8230;</title>
		<link>http://gaiustech.wordpress.com/2012/07/03/on-legacy/</link>
		<comments>http://gaiustech.wordpress.com/2012/07/03/on-legacy/#comments</comments>
		<pubDate>Tue, 03 Jul 2012 18:29:04 +0000</pubDate>
		<dc:creator>Gaius</dc:creator>
				<category><![CDATA[Random thoughts]]></category>

		<guid isPermaLink="false">http://gaiustech.wordpress.com/?p=2140</guid>
		<description><![CDATA[&#8230; first as tragedy, then as farce. There is a strange attitude among many in this industry towards what are contemptuously referred to as legacy systems. No-one would ever articulate this of course, because when you say it out loud &#8230; <a href="http://gaiustech.wordpress.com/2012/07/03/on-legacy/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2140&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<blockquote><p>&#8230; first as tragedy, then as farce.</p></blockquote>
<p>There is a strange attitude among many in this industry towards what are contemptuously referred to as <i>legacy systems</i>. No-one would ever articulate this of course, because when you say it out loud it sounds ridiculous, but the implicit belief is, in the 70s, 80s, 90s they had: smartphones and AJAX&dagger; and Ruby-on-rails and Chrome (and a long shopping list of &#8220;modern&#8221; technologies) but <i>because they were stupid</i> they chose to use dial-up modems, and <a href="http://www.bbc.co.uk/news/magazine-18610692">dumb terminals</a>, and program in FORTRAN. And because they were stupid, we have nothing to learn from them.  </p>
<p>On a similar note, it is a common refrain to hear that <a href="http://www.coastalpost.com/09/01/07.html">newspapers are obsolete</a>. And as a business model, that may well be true &#8211; but <a href="http://en.wikipedia.org/wiki/Wapping_dispute">since the 1980s</a>, newspaper publishing has defined mission-critical computing. Come hell or high water, the paper <I>has</i> to be on the newsstands in the morning. The desktops, the networks, the servers, the presses, the logistics, and all the software and IT <i>have</i> to work. Nowadays, it is as much as anyone can hope for for most software to mostly work, most of the time. If a browser or an operating system crashes or freezes, you take it in your stride and restart it. If a website is down, you might try again later, or you might just not bother. Even <a href="http://www.forbes.com/sites/kellyclay/2012/06/30/aws-power-outage-questions-reliability-of-public-cloud/">major bits of infrastructure</a> are unreliable. The skills required to do serious computing are simply decaying, while individuals such as myself retain and practice the <a href="http://prog21.dadgum.com/140.html">old ways</a>, I don&#8217;t think when the last newspaper switches off its presses, that talent will then make its website five-9s reliable&#8230; Even the best civil engineer can&#8217;t build a castle on a fetid swamp. We&#8217;ll have to nuke it from orbit &#8211; only way to be sure &#8211; and start again.</p>
<p>&dagger; I recently used AJAX to build the interface for one of my projects. Even with bolt-ons like <a href="http://en.wikipedia.org/wiki/Comet_%28programming%29">Comet</a>, it&#8217;s pretty crude and feeble compared to <a href="http://www.tcl.tk/">Tcl/Tk</a>&#8230; From the last century. I&#8217;m sure by the end of this decade it will be as-good&Dagger;, only to be swept away by some shiny new thing, and we&#8217;ll be back to square one in terms of getting useful work done. Since the 80s, every decade in computing has been a shallow copy of the previous decade. Eventually it will go full circle, like pocketwatches being replaced by wristwatches, to be replaced by clocks on mobile phones in your pocket&#8230;</p>
<p>&Dagger; And yet, actually no more powerful or easy to use than <a href="http://en.wikipedia.org/wiki/Curses_%28programming_library%29">Curses</a>, for either developers or end users.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gaiustech.wordpress.com/2140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gaiustech.wordpress.com/2140/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2140&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gaiustech.wordpress.com/2012/07/03/on-legacy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ced82e97b7a13f79da0aaaca2302cd45?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">gaiush</media:title>
		</media:content>
	</item>
		<item>
		<title>Quick histograms</title>
		<link>http://gaiustech.wordpress.com/2012/06/15/quick-histograms/</link>
		<comments>http://gaiustech.wordpress.com/2012/06/15/quick-histograms/#comments</comments>
		<pubDate>Fri, 15 Jun 2012 20:35:48 +0000</pubDate>
		<dc:creator>Gaius</dc:creator>
				<category><![CDATA[Ocaml]]></category>
		<category><![CDATA[OCIML]]></category>
		<category><![CDATA[Operation Foothold]]></category>
		<category><![CDATA[Random thoughts]]></category>

		<guid isPermaLink="false">http://gaiustech.wordpress.com/?p=2122</guid>
		<description><![CDATA[Having come back to actively working on OCI*ML recently, it&#8217;s time I cracked on with some more features (I have been promising LOBs for a long time, sorry to anyone who&#8217;s still waiting). Just to get warmed up, inspired by &#8230; <a href="http://gaiustech.wordpress.com/2012/06/15/quick-histograms/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2122&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Having come back to actively working on <a href="http://gaiustech.github.com/ociml/">OCI*ML</a> recently, it&#8217;s time I cracked on with some more features (I have been promising <a href="http://docs.oracle.com/cd/B28359_01/appdev.111/b28393/adlob_intro.htm#ADLOB001">LOBs</a> for a long time, sorry to anyone who&#8217;s still waiting). Just to get warmed up, inspired by <a href="http://github.com/holman/spark">spark</a> I have added a quick histogram function, similar to <a href="http://gaiustech.wordpress.com/2011/05/14/ocaml-as-a-sqlplus-replacement/">quick query</a> for interactive use. This requires a query of the form of a label and a number, for example a simple view:</p>
<pre class="brush: sql; title: ; wrap-lines: false; notranslate">
SQL&gt; create view v1 as
select object_type, count(1) as howmany from user_objects group by object_type;
</pre>
<p><a href="http://gaiustech.files.wordpress.com/2012/06/qh.png"><img class="aligncenter size-full wp-image-2124" title="qh" src="http://gaiustech.files.wordpress.com/2012/06/qh.png?w=640&#038;h=206" alt="" width="640" height="206" /></a><br />
The histogram automatically <a href="http://pleac.sourceforge.net/pleac_ocaml/userinterfaces.html">scales</a> to the width of the current window.</p>
<p>Also, I have been reading Jordan Mechner&#8217;s book <em><a href="http://www.amazon.co.uk/The-Making-Prince-Persia-ebook/dp/B005WUE6Q2/ref=sr_1_1?s=digital-text&amp;ie=UTF8&amp;qid=1333205986&amp;sr=1-1">The Making Of Prince Of Persia</a></em>&dagger;. It&#8217;s both fascinating and inspiring. Just before that, I read <em><a href="http://www.amazon.co.uk/Future-Here-Platform-Studies-ebook/dp/B007V5BVJG/ref=sr_1_1?s=digital-text&amp;ie=UTF8&amp;qid=1339795151&amp;sr=1-1">The Future Was Here</a></em>, the story of the Commodore Amiga&Dagger;. The book is made even more poignant by my Mac inexplicably showing the beach ball as I scroll through a simple web page, or the mighty RHEL servers at work being unable to keep up with my typing. The future is <em>still</em> back in the 80s.</p>
<p>&dagger; The <a href="http://github.com/jmechner/Prince-of-Persia-Apple-II">original code</a> is also on Github.</p>
<p>&Dagger; I have an <a href="http://en.wikipedia.org/wiki/Amiga_500_Plus">A500+</a> on my desk right now, the best of them IMHO. I might write a post comparing it with the <a href="http://en.wikipedia.org/wiki/Atari_STE#STE_models">Atari STE</a>, and the <a href="http://gaiustech.wordpress.com/2012/01/04/happy-new-year-2/">BBC</a> with the C64, in the cold light of day as an experienced adult. I have a fine collection of classic machines now, often acquired broken with the intention of repairing them myself. Another time-sink from OCaml work&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gaiustech.wordpress.com/2122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gaiustech.wordpress.com/2122/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2122&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gaiustech.wordpress.com/2012/06/15/quick-histograms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ced82e97b7a13f79da0aaaca2302cd45?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">gaiush</media:title>
		</media:content>

		<media:content url="http://gaiustech.files.wordpress.com/2012/06/qh.png" medium="image">
			<media:title type="html">qh</media:title>
		</media:content>
	</item>
		<item>
		<title>OCaml 4 beta</title>
		<link>http://gaiustech.wordpress.com/2012/06/07/ocaml-4-beta/</link>
		<comments>http://gaiustech.wordpress.com/2012/06/07/ocaml-4-beta/#comments</comments>
		<pubDate>Thu, 07 Jun 2012 18:17:03 +0000</pubDate>
		<dc:creator>Gaius</dc:creator>
				<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Ocaml]]></category>
		<category><![CDATA[OCIML]]></category>

		<guid isPermaLink="false">http://gaiustech.wordpress.com/?p=2118</guid>
		<description><![CDATA[OCaml 4 beta 2 has been released, and so I quickly tested OCI*ML with it. Only a couple of minor tweaks were necessary, due to the following changes: Some .cmi for toplevel internals that used to be installed in`ocamlc -where` &#8230; <a href="http://gaiustech.wordpress.com/2012/06/07/ocaml-4-beta/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2118&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://caml.inria.fr/pub/distrib/ocaml-4.00/">OCaml 4 beta 2</a> has been released, and so I quickly tested <a href="http://gaiustech.github.com/ociml/">OCI*ML</a> with it. Only a couple of minor tweaks were necessary, due to the following <a href="http://caml.inria.fr/pub/distrib/ocaml-4.00/notes/Changes">changes</a>:</p>
<ul>
<li>Some .cmi for toplevel internals that used to be installed in`<code>ocamlc -where`</code> are now to be found in  <code>`ocamlc -where`/compiler-libs</code>. Add &#8220;<code>-I +compiler-libs</code>&#8221; where needed.</li>
<li>Warning 28 is now enabled by default.</li>
</ul>
<p>The impact of these was that the <a href="http://gaiustech.wordpress.com/2011/05/28/ociml-minor-updates/">toplevel prompt</a> wasn&#8217;t working in the shell, and one non-fatal warning when compiling, so nothing that would have broken any code, but it&#8217;s good to be up-to-date. The necessary changes have been checked in on Github. </p>
<p>Speaking of which, bearing in mind the <a href="http://www.bbc.co.uk/news/technology-18338956">LinkedIn d&eacute;b&agrave;cle</a>, I have a <a href="http://github.com/gaiustech/MkPasswd">password generator</a> too&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gaiustech.wordpress.com/2118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gaiustech.wordpress.com/2118/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2118&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gaiustech.wordpress.com/2012/06/07/ocaml-4-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ced82e97b7a13f79da0aaaca2302cd45?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">gaiush</media:title>
		</media:content>
	</item>
		<item>
		<title>Raspberry Pi: Who is it really for?</title>
		<link>http://gaiustech.wordpress.com/2012/02/29/raspberry-pi/</link>
		<comments>http://gaiustech.wordpress.com/2012/02/29/raspberry-pi/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 13:05:21 +0000</pubDate>
		<dc:creator>Gaius</dc:creator>
				<category><![CDATA[BBC]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Random thoughts]]></category>

		<guid isPermaLink="false">http://gaiustech.wordpress.com/?p=2093</guid>
		<description><![CDATA[There is a lot of discussion on the Internet today about the Raspberry Pi. This is a project over which I am deeply ambiguous. On the one hand, exposure to computing at an early age was enormously influential on my &#8230; <a href="http://gaiustech.wordpress.com/2012/02/29/raspberry-pi/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2093&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>There is a lot of discussion on the Internet today about the <a href="http://www.raspberrypi.org/#foundation">Raspberry Pi</a>. This is a project over which I am deeply ambiguous. On the one hand, exposure to computing at an early age was enormously influential on my life. I was fortunate enough to have a BBC Micro, a machine that was and indeed still is, extremely capable&dagger;, and easy to program. Not just in the sense that <a href="http://en.wikipedia.org/wiki/BBC_BASIC">BBC Basic</a> was an excellent language, the entire machine was easy to understand &#8211; you could maintain a pretty good mental model of &#8220;where&#8221; everything was in its 32k RAM, and what happened when and why. Everyone wrote their own simple games (today&#8217;s <a href="http://www.angrybirds.com/">Angry Birds</a> is just a modern twist on the <a href="http://en.wikipedia.org/wiki/Artillery_game">artillery game</a>, perfectly do-able by a keen 10-year-old in those days). Whether on the BBC or the C64 or whatever, dabbling in BASIC programming was not unusual, even for kids who mainly played games, and using a home computer mainly for programming wasn&#8217;t unusual either. Magazines had annotated listings to type in, and hardware projects interfacing with or even <a href="http://en.wikipedia.org/wiki/Acorn_Electron#Slogger.2FElektuur_Turbo_Board">modifying</a> machines. <a href="http://www.bbc.co.uk/news/technology-15969065">Schoolchildren in the 80s</a> made the UK the software powerhouse it is today. </p>
<p>A lot of that was lost in the intervening years. It was certainly possible to program the &#8220;next generation&#8221;, the 16-bit home computers like the Atari ST and Commodore Amiga, of course. It just wasn&#8217;t what they were <i>for</i>. The creators of the BBC went to great lengths to include a fantastic BASIC dialect, whereas ST Basic was notoriously bug-ridden, and <a href="https://sites.google.com/site/stessential/development/devpac">Devpac</a> was a third-party product that you had to pay for. I don&#8217;t know so much about the Amiga world, but on the ST, the barriers to entry to programmers were certainly higher. Not insurmountably so, for one such as me who had grown up on the BBC and took programmability for granted, but I wonder how accessible I would have found it if it were my first machine. Certainly there was more to learn in order to, as on the BBC, produce a &#8220;professional&#8221; looking program, one that would operate with GEM for example. But, whether it was truly an unexpected emergent property of the more advanced machines, or the general zeitgeist, programming fell out of the mainstream. Games were the normal use, consoles such as the Sega Megadrive replaced 8-bit micros in some households. </p>
<p>Since then (fast-forwarding over most of the &#8217;90s and all of the &#8217;00s) programming has simultaneously gotten easier and less accessible. How is this possible? <b>Abstraction</b>. Moving further from the machine, or placing <a href="http://gaiustech.wordpress.com/2011/07/19/is-virtualization-worth-it/">more and more layers</a> between the programmer or user and the machine (once those terms were nearly synonymous). It is very easy for a user to write a macro in VBA that gets a lot of useful work done, and I would never advocate taking this type of programming away for that reason. But it encourages thinking of the machine as a &#8220;black box&#8221;, it is difficult to reason about what it is <i>actually</i> doing, and that in turn discourages the very powerful mindset that <i>it&#8217;s all just code, all the way down</i> that is needed to be an actual programmer. This is not necessarily intended as a value judgement; for many people computers are just tools and that&#8217;s fine, for them the macro-style approach is highly productive. </p>
<p>But someone has to make the tools, and the question is, is the Raspberry Pi going to nurture a new generation of tool-makers? Abstraction is useful because it allows one to do work without repetitive detail and focus on the problem domain. But I argue that abstraction should only be introduced once the fundamentals are understood. Learning on a machine like the BBC teaches that, no so much the details which become obsolete, but the concepts, (e.g. I do my real work in Python on Linux on x64 not BBC Basic on a Model B, but I use <a href="http://docs.python.org/library/dis.html">dis</a> and GDB regularly). The Raspberry Pi has <a href="http://www.youtube.com/watch?v=TgR74Kp6Ws4">video</a>, ethernet, USB, 256M RAM. It comes with a GUI and a web browser. It has more in common with a PlayStation than it has with a BBC Micro (and I make the same criticism of the OLPC). I know a lot of <a href="http://www.zdnet.co.uk/blogs/fuss-free-phones-simon-rockman-10024919/is-raspberry-pi-a-mid-life-crisis-10025449/">people of my age</a> are excited about getting one and using it as a cheap embedded controller, like an <a href="http://www.arduino.cc/">Arduino</a>. But I don&#8217;t think it&#8217;s a useful teaching tool, or at least, no more useful than a common PC. For that, you&#8217;d want something like a <a href="https://sites.google.com/site/libby8dev/fignition">FIGnition</a>. I honestly don&#8217;t know why that project has been relegated to the sidelines while the Pi gets all the press. </p>
<p>&dagger; Thought experiment: If you had a BBC clocked at 2<strong>G</strong>hz what &#8220;real work&#8221; could you <i>not</i> do on it? What would you need to add? What about a BBC with a <a href="http://en.wikipedia.org/wiki/WDC_65816/65802">65816</a> instead of a 6502, giving it 16M RAM, and ADFS access to modern storage &#8211; but fundamentally the same <a href="http://en.wikipedia.org/wiki/Acorn_MOS">OS</a>, <a href="http://en.wikipedia.org/wiki/Acornsoft#Acornsoft_Languages_range">languages(s)</a>, the same model of computation, switch it on, BASIC <code>&gt;</code> prompt and off you go? I am struggling to think of anything&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gaiustech.wordpress.com/2093/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gaiustech.wordpress.com/2093/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2093&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gaiustech.wordpress.com/2012/02/29/raspberry-pi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ced82e97b7a13f79da0aaaca2302cd45?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">gaiush</media:title>
		</media:content>
	</item>
		<item>
		<title>Illiquid Markets</title>
		<link>http://gaiustech.wordpress.com/2012/02/21/illiquid-markets/</link>
		<comments>http://gaiustech.wordpress.com/2012/02/21/illiquid-markets/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 19:38:48 +0000</pubDate>
		<dc:creator>Gaius</dc:creator>
				<category><![CDATA[BBC]]></category>
		<category><![CDATA[Random thoughts]]></category>

		<guid isPermaLink="false">http://gaiustech.wordpress.com/?p=2083</guid>
		<description><![CDATA[Some crazy prices on eBay: RAMAMP RA20+44 for &#163;500. This (I believe) is a board that adds 32K to a standard Model B, which can be used as sideways or shadow RAM. A shadow RAM only Aries B20 goes for &#8230; <a href="http://gaiustech.wordpress.com/2012/02/21/illiquid-markets/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2083&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Some crazy prices on eBay:</p>
<ul>
<li><a href="http://www.ebay.co.uk/itm/200695349906#ht_500wt_1230">RAMAMP RA20+44</a> for &pound;500. This (I believe) is a board that adds 32K to a standard <a href="http://en.wikipedia.org/wiki/BBC_Micro#Hardware_features:_Models_A_and_B">Model B</a>, which can be used as sideways or shadow RAM. A shadow RAM only <a href="http://www.cjemicros.co.uk/micros/individual/newprodpages/prodinfo.php?prodcode=CCC-ARIESB20">Aries B20</a> goes for &pound;20, same again for a B12 which can take sideways RAM. To put that into perspective, the BBC B when new cost &pound;399.</li>
<li><a href="http://www.ebay.co.uk/itm/250994434091#ht_500wt_1230">Electron +3</a> for &pound;200, a <a href="http://en.wikipedia.org/wiki/Acorn_Electron#Acorn_Plus_3">disk drive</a> for the Acorn Electron, for 5&times; what an Electron itself goes for.
</ul>
<p>The retro stuff I bought I use (well, play with!), but at these prices I can only assume people are keeping them in glass display cabinets&#8230; I could understand if someone desperately needed some data off old disks for sentimental reasons, but the price for the RAMAMP, given that it lives inside the case and there are functionally identical substitutes (e.g. <a href="http://acorn.chriswhy.co.uk/8bit_Upgrades/Aries_B32.html">Aries B32</a>, or B20+B12) for a fraction of the price, is completely inexplicable.</p>
<p><b>Update</b></p>
<ul>
<li><a href="http://www.ebay.co.uk/itm/190646019117?ssPageName=STRK:MEWAX:IT&amp;_trksid=p3984.m1423.l2649#ht_690wt_1213">Commodore 1540 for &pound;205!</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gaiustech.wordpress.com/2083/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gaiustech.wordpress.com/2083/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2083&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gaiustech.wordpress.com/2012/02/21/illiquid-markets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ced82e97b7a13f79da0aaaca2302cd45?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">gaiush</media:title>
		</media:content>
	</item>
		<item>
		<title>Happy New Year</title>
		<link>http://gaiustech.wordpress.com/2012/01/04/happy-new-year-2/</link>
		<comments>http://gaiustech.wordpress.com/2012/01/04/happy-new-year-2/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 22:18:17 +0000</pubDate>
		<dc:creator>Gaius</dc:creator>
				<category><![CDATA[BBC]]></category>
		<category><![CDATA[Random thoughts]]></category>

		<guid isPermaLink="false">http://gaiustech.wordpress.com/?p=2078</guid>
		<description><![CDATA[Regular readers may have noticed that I&#8217;ve gone a bit quiet of late. Part of this is down to the new job which has been keeping me busy; it builds on my existing skills of course, but there is plenty &#8230; <a href="http://gaiustech.wordpress.com/2012/01/04/happy-new-year-2/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2078&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Regular readers may have noticed that I&#8217;ve gone a bit quiet of late. Part of this is down to the <a href="http://gaiustech.wordpress.com/2011/10/18/how-to-interview/">new job</a> which has been keeping me busy; it builds on my existing skills of course, but there is plenty to learn too.</p>
<p>But the other reason is a re-awakened interest in the <a href="http://en.wikipedia.org/wiki/BBC_Micro">BBC Micro!</a> I had one of these when I was a child, it was my first machine, but even now as a highly experienced adult, it still fascinates, in fact, even more than the first time round. I am intrigued by <a href="http://gaiustech.wordpress.com/2011/07/25/peacocks/">how much I can do with how little</a> by today&#8217;s standards &#8211; 32<b>k</b> of memory and a 2<b>M</b>hz processor. Right now I am playing at running &#8220;background&#8221; tasks by <a href="http://central.kaserver5.org/Kasoft/Typeset/BBC/Ch43.html">interrupt handling</a>, e.g. to run <a href="http://6502.org/">6502 code</a> during the <a href="http://en.wikipedia.org/wiki/Vertical_blanking_interval">VBI</a>. And with an <a href="http://www.sprow.co.uk/bbc/masternet.htm">ethernet interface</a>, the possibilities are endless&#8230;</p>
<p>Tho&#8217; of course I have not forgotten about <a href="http://gaiustech.github.com/ociml/">OCI*ML</a>&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gaiustech.wordpress.com/2078/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gaiustech.wordpress.com/2078/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2078&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gaiustech.wordpress.com/2012/01/04/happy-new-year-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ced82e97b7a13f79da0aaaca2302cd45?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">gaiush</media:title>
		</media:content>
	</item>
		<item>
		<title>How To Run Your Own Apps on RAC</title>
		<link>http://gaiustech.wordpress.com/2011/10/19/how-to-run-your-own-apps-on-rac/</link>
		<comments>http://gaiustech.wordpress.com/2011/10/19/how-to-run-your-own-apps-on-rac/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 19:37:49 +0000</pubDate>
		<dc:creator>Gaius</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://gaiustech.wordpress.com/?p=2027</guid>
		<description><![CDATA[RAC, or Real Application Clusters, is Oracle&#8217;s proprietary clustering solution, for highly-available databases. Let&#8217;s break down the name. The &#8220;real&#8221; I assume refers to the fact that it is active-active; all nodes in the cluster are available to do useful &#8230; <a href="http://gaiustech.wordpress.com/2011/10/19/how-to-run-your-own-apps-on-rac/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2027&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.oracle.com/technetwork/database/clustering/overview/index.html">RAC</a>, or Real Application Clusters, is Oracle&#8217;s proprietary clustering solution, for highly-available databases. Let&#8217;s break down the name. The &#8220;real&#8221; I assume refers to the fact that it is active-active; all nodes in the cluster are available to do useful work, in contrast with active-passive systems such as <a href="http://www.microsoft.com/en-us/server-cloud/windows-server/failover-clustering-network-load-balancing.aspx">Microsoft&#8217;s</a> where one node is idle, awaiting failure of the first before taking over its services. The &#8220;application&#8221; is the interesting bit; altho&#8217; most implementations I have seen only use RAC for the database (and <a href="http://gaiustech.wordpress.com/2011/09/18/learning-the-wrong-lessons/">code running inside it</a>) it can easily be used as a general-purpose failover clustering solution for any in-house or third-party <a href="http://gaiustech.github.com/ociml/">code</a>, saving the administrative overhead of having one type of cluster for the database and another for the applications. Just run the whole lot on your RAC!</p>
<p>The key to this is, to borrow the <a href="http://www.symantec.com/business/cluster-server">VCS</a> terminology with which most people are familiar, the agent script. This acts as a proxy between RAC (or <a href="http://en.wikipedia.org/wiki/Oracle_Clusterware">CRS</a>, really) and your own code, allowing the cluster to start and stop it, and to check it&#8217;s health&dagger;. This is very similar to the scripts found on typical Unix systems in <code>/etc/init.d/</code> that are invoked when changing <a href="http://en.wikipedia.org/wiki/Runlevel">runlevels</a> &#8211; it takes the action to perform as the first parameter, and the body of the action can be any reasonable Unix commands. These must be sufficient to execute the program with no prerequisites, e.g. setting up <code>LD_LIBRARY_PATH</code>, the <code>ORACLE_HOME</code>, and so forth, and checking that the environment is sane, e.g. that necessary directories exist and are writeable.  This script should live on a filesystem shared by all RAC nodes, let&#8217;s assume it is mounted as <code>/common</code> and the agent is called <code>myapp.sh</code>.</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash

# a simple CRS agent script
#
# 19-OCT-2011   Gaius       Initial version

# set up the environment - on each node, /home/oracle/this-node.env is a
# symlink to the environment variables (e.g. ORACLE_SID for the instance,
# PATH, LD_LIBRARY_PATH etc)
. /home/oracle/this-node.env

# check that the environment is sane, e.g. we can write to the log dir
# CRS looks at the exit code of this script to see if the operation was
# a success
if [ ! -w /common/log ]; then
    exit 1
fi

# parse the command line to see what CRS wants to do
case $1 in
'start')
    # do any prior cleanup, then start myapp and store its PID
    mv /common/log/myapp.log{,.old}
    myapp &gt;/common/log/myapp.log 2&gt;&amp;1 &amp;
    EXITCODE=$?
    echo $! &gt;/common/pids/myapp.pid
    ;;
'stop')
    kill `cat /common/pids/myapp.pid`
    EXITCODE=$?
    ;;
'check')
    # check that 1 process named myapp is running - CRS will
    # automatically do this check on the correct node every 60s (default)
    # and if it returns non-zero take corrective action
    NUMPROCS=`ps -ef|awk '/[m]yapp/ {X += 1} END {print X}'`
    if [ $NUMPROCS -eq 1]; then
        EXITCODE=0
    else
        EXITCODE=1
    fi
    ;;
*)
    echo &quot;Usage: $0 [start|stop|check]&quot;
    ;;
esac

exit $EXITCODE
# End of file
</pre>
<p>Next on each RAC node, put in a symlink <code>$CRS_HOME/crs/script/myapp.sh &rarr; /common/myapp.sh</code>. This ensures that any node can execute the script, but there is only a single copy of it to maintain. Make sure it is executable with <code>chmod</code>. This can be tested on each node by calling it manually in the shell with the parameters and seeing what it does. Next, we register the agent script with the cluster:</p>
<pre class="brush: bash; light: true; title: ; notranslate">
$ crs_profile -create myapp -a $CRS_HOME/crs/script/myapp.sh -t application
$ crs_register myapp
</pre>
<p>This creates a cluster resource called <code>myapp</code>, with an agent script defined by <code>-a</code>, of a type <code>application</code>. </p>
<p>Now, we can start to manipulate our own program with the standard Oracle commands:</p>
<pre class="brush: bash; highlight: [1,4,9,12]; light: true; title: ; notranslate">
$ crs_start myapp
Attempting to start `myapp` on member `oel1`
Start of `myapp` on member `oel1` succeeded.
$ crs_stat myapp
NAME=myapp
TYPE=application
TARGET=ONLINE
STATE=ONLINE on oel1
$ crs_stop myapp
Attempting to stop `myapp` on member `oel1`
Stop of `myapp` on member `oel1` succeeded.
$ crs_stat myapp
NAME=myapp
TYPE=application
TARGET=OFFLINE
STATE=OFFLINE
</pre>
<p>You can see this is running on my <a href="http://gaiustech.wordpress.com/2010/10/19/oracle-uninstallable-linux/">Oracle Enterprise Linux</a> test system rather than my usual Debian.</p>
<p>This is a trivial example not suitable for real Production usage, for example, the <code>check</code> action should do more than just verify the process exists (it could be stuck) and the <code>stop</code> should try a clean shutdown, then a hard kill if that does not complete within a certain threshold, and all steps should write comprehensive logging to enable quick troubleshooting (you can see CRS&#8217;s own log in <code>$CRS_HOME/log/`hostname`/crsd/crsd.log</code>). Nevertheless it serves to demonstrate how simple it is to <a href="http://en.wikipedia.org/wiki/High_availability">HA</a> your own applications (assuming you have RAC already!), and a basis for further development. I have been using this technique in Production for several years now for a variety of purposes.</p>
<p>The official documentation is <a href="http://download.oracle.com/docs/cd/B28359_01/rac.111/b28255/crschp.htm">here</a>. If your application is a server itself, it will also need a VIP of its own, so clients can connect whichever RAC node it is on. A very useful parameter for <code>crs_profile</code> in this case is <code>-r</code>, to make the application depend on its VIP, so the cluster knows to start them in the correct order, on the same node. There are many options viewable with <code>crs_profile -help</code>, including check interval, number of restart attempts, and so on.</p>
<p><font size="1">&dagger; Alert VCS operators will have noted the absence of the &#8220;clean&#8221; action. You could do this in stop, or in start before actually starting</font></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gaiustech.wordpress.com/2027/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gaiustech.wordpress.com/2027/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=2027&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gaiustech.wordpress.com/2011/10/19/how-to-run-your-own-apps-on-rac/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ced82e97b7a13f79da0aaaca2302cd45?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">gaiush</media:title>
		</media:content>
	</item>
		<item>
		<title>How To Interview</title>
		<link>http://gaiustech.wordpress.com/2011/10/18/how-to-interview/</link>
		<comments>http://gaiustech.wordpress.com/2011/10/18/how-to-interview/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 18:40:28 +0000</pubDate>
		<dc:creator>Gaius</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[cron job]]></category>
		<category><![CDATA[incremental backups]]></category>
		<category><![CDATA[oracle dba]]></category>
		<category><![CDATA[standby database]]></category>

		<guid isPermaLink="false">http://gaiustech.wordpress.com/?p=1999</guid>
		<description><![CDATA[One of the things I do at my present job is interview candidates for my team, and occasionally other teams too. I estimate I&#8217;ve seen ~150 people over the last 5 years. Of those very few that I do say &#8230; <a href="http://gaiustech.wordpress.com/2011/10/18/how-to-interview/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=1999&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>One of the things I do at my present job is interview candidates for my team, and occasionally other teams too. I estimate I&#8217;ve seen ~150 people over the last 5 years. Of those very few that I do say &#8220;hire!&#8221; based on 2&times;1-hour interviews, talking in a meeting room rather than watching them actually do work, the vast majority turn out pretty well, as in, they do turn out to be highly productive. The strategy I use for this is something I call the <i>leap of logic</i>. Firstly, I establish that a candidate knows some basic facts, then I ask a question requiring them to synthesize some new knowledge.</p>
<p>Here is an example from a recent interview, for an Oracle DBA position. First, I asked the candidate if he knew what was an <a href="http://www.orafaq.com/wiki/SCN">SCN</a> was, and he did. Next I asked about <a href="http://download.oracle.com/docs/cd/B19306_01/backup.102/b14192/bkup004.htm">incremental backups</a>, and he knew what those were too. Thirdly, I asked him if he knew what a <a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14239/create_ps.htm">physical standby</a> was, and again, he did. All good so far, but these are just facts that can be recited from memory, or looked up on <a href="http://www.bing.com/">Google</a> (as I did to make those links!). A better measure of a candidate is a realistic problem to solve, so next I described a scenario in which a standby database is stuck on <code>WAIT_FOR_GAP</code> and <code>All defined FAL servers have been attempted</code>, and the archived redo log is no longer on the primary (e.g. deleted by a naive cron job&dagger; that catches everything older than a day). He replied that the only way to solve this problem was to completely rebuild the standby, as if setting it up for the first time. I reminded him of the previous three facts we had discussed, and asked again, and got the same reply. </p>
<p>Now a strong candidate would have thought about this (out loud):</p>
<ol>
<li>I can easily find the SCN of the standby database</li>
<li>A physical standby database is a block-by-block copy of its primary</li>
<li>I can do an incremental backup of the primary from that SCN and <a href="http://download.oracle.com/docs/cd/B19306_01/backup.102/b14191/rcmdupdb.htm#BGBCEBJG">apply it to the standby</a>.</li>
<li>Then resume log shipping (having stopped deletion on the primary if the previous step would take longer than the retention period)</li>
</ol>
<p>Of course, in that particular case, it is a documented technique, tho&#8217; if you hadn&#8217;t happened to have read it, it&#8217;s still obvious, particularly when you have established all the underlying facts already. In fact this is true about most things in IT: if you grasp the <a href="http://olvemaudal.wordpress.com/2011/10/10/deep-c/">underlying principles</a> then, even if you don&#8217;t know the specific command or syntax&Dagger; off the top of your head, you can probably figure out the solution, or at least, be able to re-frame the problem in a way that someone else can jump in and help with just the piece you&#8217;re missing. At least you know what to ask or what to look for. There was obviously more to the interview than just that, but with a few other other scenario questions, a clear pattern emerges, giving an accurate picture of the candidate. That&#8217;s the point of thinking out loud, and freezing up is the last thing you want in a DBA when there is a production outage! Those are the kinds of people I look for, and this experience sets me up very well when I am on the other side of the table.</p>
<p>I wrote a few months ago about a <a href="http://gaiustech.wordpress.com/2011/01/09/happy-new-year/">slight sense of ennui</a> with my present role; the time has come to do something about that, so next month I join the dangerous, glamorous world of <a href="http://en.wikipedia.org/wiki/Algorithmic_trading">algo trading</a>. The people that I&#8217;ve hired will get along just fine without me (tho&#8217; some of them should have been paying more attention over the last few years to <a href="http://news.efinancialcareers.co.uk/newsandviews_item/newsItemId-34200">learning Python</a>!) and so will the organization&#8230; <em>if</em> it manages to hang onto them.</p>
<p><font size="1">&dagger; Unfortunately, even in these days of RMAN, those are still common<br />
&Dagger; For this reason, I almost never ask candidates to write code on a whiteboard, tho&#8217; sometimes I will have them draw a diagram<br />
</font></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gaiustech.wordpress.com/1999/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gaiustech.wordpress.com/1999/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gaiustech.wordpress.com&#038;blog=15595609&#038;post=1999&#038;subd=gaiustech&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gaiustech.wordpress.com/2011/10/18/how-to-interview/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ced82e97b7a13f79da0aaaca2302cd45?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">gaiush</media:title>
		</media:content>
	</item>
	</channel>
</rss>
