<?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>The Breakfast Post</title>
	<atom:link href="http://thebreakfastpost.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://thebreakfastpost.com</link>
	<description></description>
	<lastBuildDate>Fri, 26 Apr 2013 12:47:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='thebreakfastpost.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>The Breakfast Post</title>
		<link>http://thebreakfastpost.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://thebreakfastpost.com/osd.xml" title="The Breakfast Post" />
	<atom:link rel='hub' href='http://thebreakfastpost.com/?pushpress=hub'/>
		<item>
		<title>Looking at the Sonic Visualiser user survey (part 1)</title>
		<link>http://thebreakfastpost.com/2013/04/26/looking-at-the-sonic-visualiser-user-survey-part-1/</link>
		<comments>http://thebreakfastpost.com/2013/04/26/looking-at-the-sonic-visualiser-user-survey-part-1/#comments</comments>
		<pubDate>Fri, 26 Apr 2013 12:47:10 +0000</pubDate>
		<dc:creator>Chris Cannam</dc:creator>
				<category><![CDATA[Programs for Music]]></category>
		<category><![CDATA[c4dm]]></category>
		<category><![CDATA[soundsoftware]]></category>

		<guid isPermaLink="false">http://thebreakfastpost.com/?p=1948</guid>
		<description><![CDATA[Ever since Sonic Visualiser hit version 1.7 in mid-2009, it has included a survey feature to find out what its users think of it. It waits until you&#8217;ve used it a few times. Then it pops up a dialog, just once, asking if you&#8217;d like to fill in the survey. If you say yes, you [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1948&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Ever since <a href="http://www.sonicvisualiser.org/">Sonic Visualiser</a> hit version 1.7 in mid-2009, it has included a survey feature to find out what its users think of it.</p>
<p><a href="http://sonicvisualiser.org"><img alt="" style="float:right;" src="http://www.sonicvisualiser.org/images/sv-1.0-notetracker-thumb.png" width="393" height="285" /></a></p>
<p>It waits until you&#8217;ve used it a few times. Then it pops up a dialog, just once, asking if you&#8217;d like to fill in the survey.</p>
<p>If you say yes, you get the survey page in your browser. If you say no, it won&#8217;t ask again—not even after an upgrade to a new version (unless you reinstall on a different machine).</p>
<p>This survey has been running ever since, unchanged, and has been completed over 1000 times. We&#8217;ve periodically read through the survey submissions, but we haven&#8217;t previously published any results from it. Since the survey was designed rather hastily four years ago and it&#8217;s high time we updated it, this is probably a good time to catch up on the responses before we do that.</p>
<h2>What&#8217;s in this post</h2>
<p>The survey had both open questions (with big text fields) and simple multiple-choice ones. This post will deal with numerical results from the simple questions.</p>
<p>Many of these results are pretty basic, so please don&#8217;t be disappointed if the analysis doesn&#8217;t turn out to be all that exciting. If you have any suggestions or questions, please do post a comment!</p>
<p>I intend to follow up by summarising the open questions in another post.</p>
<h2>Number and distribution of responses</h2>
<p>We have 1071 responses in total, from 6 October 2009 to 25 April 2013 (as of this analysis—the survey is still open).</p>
<p>However, I won&#8217;t be using all of those here. Owing to &#8220;technical problems&#8221; (and/or my incompetence) some responses from mid-2010 have been lost, so to ensure the record doesn&#8217;t have any holes in it, I&#8217;ll be limiting this post to the 821 responses from 11 Oct 2010 onwards. Here&#8217;s the number of responses per quarter:</p>
<p><a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/response-count-quarterly.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/response-count-quarterly-nonnorm.png"></a></p>
<p>Note that the most recent quarter (starting April 2013) only has three weeks&#8217; worth of responses.</p>
<p>(Every chart in this post is linked to the data in text format, so click through if you&#8217;re interested in the numbers.)</p>
<h2>Who are these people?</h2>
<p>We asked,</p>
<p><em>Which of the following best describes your position?</em></p>
<ul>
<li><em> A student, researcher, or academic in music</em></li>
<li><em>A student, researcher, or academic in audio engineering, audio analysis, multimedia, or a related discipline</em></li>
<li><em>I am employed in some field that is related to my use of Sonic Visualiser</em></li>
<li><em>I use Sonic Visualiser solely for personal purposes</em></li>
<li><em>None of the above</em></li>
</ul>
<p>Sonic Visualiser comes from an academic environment, and if you add up the slightly arbitrary academic subdivisions they&#8217;re close to an overall majority, but there are plenty of personal-use responses and quite a few professionals:</p>
<table>
<tr>
<td>
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/iam-quarterly.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/iam-quarterly.png"></a>
</td>
<td>
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/iam-summary.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/iam-summary.png"></a><br />
</tr>
</table>
<p>Approximate IP geolocation shows that most respondents come from the US and Europe. Here are the top ten countries:</p>
<div align="center">
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/location-summary.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/location-summary.png"></a>
</div>
<p>But 66 countries are represented in total, and the top ten only make up 70% of responses.</p>
<h2>Platform, browser, and software version</h2>
<table>
<tr>
<td>
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/sv-platform-quarterly.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/sv-platform-quarterly.png"></a>
</td>
<td>
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/sv-platform-summary.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/sv-platform-summary.png"></a>
</td>
</tr>
</table>
<p>Windows users are most numerous, while Linux users appear to be relatively on the wane. (Their numbers aren&#8217;t actually decreasing, they just haven&#8217;t increased as much). Neither of these surprises me, but I am surprised that Windows has been going up more than OS/X. Maybe Mac users don&#8217;t like being asked to fill in surveys.</p>
<p><a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/sv-platform-profession.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/sv-platform-profession.png"></a></p>
<p>As you might expect, academics, particularly in music, are relatively likely to be using OS/X, while a high proportion of those using SV for personal use are doing so on Windows.</p>
<p><a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/location-platform.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/location-platform.png"></a></p>
<p>Linux is overrepresented in France, which makes sense, as it is a civilised nation.</p>
<table>
<tr>
<td>
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/ua-quarterly.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/ua-quarterly.png"></a>
</td>
<td>
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/ua-platform.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/ua-platform.png"></a>
</td>
</tr>
</table>
<p>Firefox is the most common browser, but it&#8217;s been losing out here as everywhere recently. I&#8217;m a bit surprised that IE is only in third place even on Windows. I&#8217;m probably just a decade or so behind the times.</p>
<table>
<tr>
<td>
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/sv-version-quarterly.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/sv-version-quarterly.png"></a>
</td>
<td>
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/sv-version-summary.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/sv-version-summary.png"></a>
</td>
</tr>
</table>
<p>Few surprises in the breakdown of Sonic Visualiser version number. New versions take over fairly quickly after each release, but that&#8217;s to be expected because the survey only polls new installations—this doesn&#8217;t tell us anything about upgrade rates.</p>
<p><a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/sv-version-platform.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/sv-version-platform.png"></a></p>
<p>Linux users seem more likely to be using an old version, presumably because they often install from distribution packages.</p>
<h2>Ease of use and general contentment</h2>
<p>We asked,</p>
<p><em>Do you enjoy using Sonic Visualiser?</em></p>
<ul>
<li><em> Yes, I do!</em></li>
<li><em>I have no strong feelings about it</em></li>
<li><em>I don&#8217;t enjoy using it, but I haven&#8217;t found any other software to replace it</em></li>
<li><em>I don&#8217;t enjoy using it, I use it because I&#8217;ve been told to (by a teacher, for example)</em></li>
</ul>
<p>and</p>
<p><em>How easy do you find Sonic Visualiser to use?</em></p>
<ul>
<li><em> I find it straightforward to use</em></li>
<li><em>Getting started was tricky, but I&#8217;m OK with it now</em></li>
<li><em>I can get things done, but it&#8217;s frustrating and I&#8217;m often caught out by unexpected behaviour</em></li>
<li><em>I can use a few features, but I don&#8217;t understand most of it</em></li>
<li><em>I don&#8217;t understand it at all</em></li>
</ul>
<p>Most respondents are happy, but the results for ease of use are less satisfactory:</p>
<table>
<tr>
<td>
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/happy-summary.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/happy-summary.png"></a>
</td>
<td>
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/easy-summary.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/easy-summary.png"></a>
</td>
</tr>
</table>
<p>A great many respondents checked the &#8220;getting started was tricky&#8221; or &#8220;I don&#8217;t understand most of it&#8221; boxes. I think there is room for a simpler Sonic Visualiser. The open survey questions, to be covered in a subsequent post, might give us more ideas.</p>
<h2>Features and plugins</h2>
<p>We asked,</p>
<p><em>Which of the following features of Sonic Visualiser have you used? (Please select all that apply, or none.)</em></p>
<ul>
<li><em>Saving and reloading complete sessions</em></li>
<li><em>Running Vamp plugins</em></li>
<li><em>Speeding up or slowing down playback</em></li>
<li><em>Annotation by tapping using the computer keyboard</em></li>
<li><em>Annotation by tapping using a MIDI keyboard</em></li>
<li><em>Data import or export using RDF formats</em></li>
<li><em>Audio alignment using the MATCH plugin</em></li>
<li><em>Editing note or region layers</em></li>
<li><em>Image layers</em></li>
</ul>
<p>This isn&#8217;t a well-judged question. It has too many options and some of them are too ambiguous. In particular, &#8220;image layers&#8221; was intended to refer to layers in which external images can be attached—quite a niche feature—yet it appears as the third most popular option in the survey:</p>
<div align="center">
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/feature--multichoice.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/feature--multichoice.png"></a>
</div>
<p>I assume this means people were (quite reasonably) interpreting &#8220;image layers&#8221; as meaning &#8220;any layers that look like images&#8221;, such as spectrograms.</p>
<div align="center">
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/feature-image-layer-respondents.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/feature-image-layer-respondents.png"></a>
</div>
<p>Looking more closely at this, it seems that users who said they used the &#8220;image layer&#8221; feature were less likely to also report using common features such as session save/load or Vamp plugins, but more likely to report using uncommon features such as MIDI tapping or alignment.</p>
<p>This suggests these respondents could probably be clustered into a large group of novice users who use only the built-in analysis tools on a single audio file at a time (for whom &#8220;image layers&#8221; means spectrograms), and a smaller group who use many features and for whom, perhaps, &#8220;image layers&#8221; means layers of image type.</p>
<p>Also worth noting is the generally low number of people reporting use of any single feature—none of the features listed here gained support from more than 50% of respondents. Yet more than 90% of respondents checked at least one box. It seems there are different sets of users starting out with quite disjoint needs.</p>
<p>The survey also included a record of which Vamp plugins were installed. Here are the top ten overall:</p>
<div align="center">
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/sv-plugs--multichoice.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/sv-plugs--multichoice.png"></a>
</div>
<h2>Programming</h2>
<p>We asked whether users were familiar with any programming languages (from a fixed multiple selection list, plus &#8220;Others&#8221; box) and whether they would have any interest in developing new plugins.</p>
<div align="center">
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/prog--multichoice.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/prog--multichoice.png"></a>
</div>
<p>I was surprised by the language familiarity question: nearly 60% of respondents checked at least one box, and over a third claimed familiarity with C or C++. That&#8217;s far more than for Python, MATLAB, Java, Javascript or PHP, but all of those have pretty good showings even so.</p>
<p><a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/prog-by-profession.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/prog-by-profession.png"></a></p>
<p>Even among academics in the music field, over 40% professed familiarity with some programming language and over 20% with C.</p>
<p>I&#8217;m not quite sure what to make of this. Perhaps Sonic Visualiser is <em>so</em> hard to get started with that only very technically-minded users get as far as answering a survey about it!</p>
<p>Some respondents mentioned further languages in the Other box; these are the ones that appeared most often:</p>
<div align="center">
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/otherlang--multichoice.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/otherlang--multichoice.png"></a>
</div>
<p>(BASIC includes Visual Basic; Lisp variants include Scheme and Clojure.)</p>
<p>Having asked about programming languages, we asked:</p>
<p><em>Have you ever considered writing <a href="http://vamp-plugins.org/" target="_new">Vamp plugins</a> for use in Sonic Visualiser or any other host application?</em></p>
<ul>
<li><em>Yes, I have written some plugins already</em></li>
<li><em>Yes, I&#8217;m interested in the idea</em></li>
<li><em>No, I wouldn&#8217;t be technically capable</em></li>
<li><em>No, I don&#8217;t see any reason to</em></li>
<li><em>No, I&#8217;ve looked at Vamp and found the format unsatisfactory in some way</em></li>
</ul>
<div align="center">
<a href="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/entry/1/textout/vamp-summary.txt"><img src="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/vamp-summary.png"></a>
</div>
<p>As you can see, most respondents thought they wouldn&#8217;t be technically capable, but a pretty high number did express an interest.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/breakfastpost.wordpress.com/1948/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/breakfastpost.wordpress.com/1948/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1948&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thebreakfastpost.com/2013/04/26/looking-at-the-sonic-visualiser-user-survey-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/b85af1a84933dd3133496b82bd995e41?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">cannam</media:title>
		</media:content>

		<media:content url="http://www.sonicvisualiser.org/images/sv-1.0-notetracker-thumb.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/response-count-quarterly-nonnorm.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/iam-quarterly.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/iam-summary.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/location-summary.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/sv-platform-quarterly.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/sv-platform-summary.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/sv-platform-profession.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/location-platform.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/ua-quarterly.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/ua-platform.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/sv-version-quarterly.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/sv-version-summary.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/sv-version-platform.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/happy-summary.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/easy-summary.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/feature--multichoice.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/feature-image-layer-respondents.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/sv-plugs--multichoice.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/prog--multichoice.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/prog-by-profession.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/otherlang--multichoice.png" medium="image" />

		<media:content url="http://code.soundsoftware.ac.uk/projects/sv-survey-output/repository/raw/1/charts/formatted/vamp-summary.png" medium="image" />
	</item>
		<item>
		<title>Yertle: an RDF/Turtle library in Yeti</title>
		<link>http://thebreakfastpost.com/2013/03/19/yertle-an-rdfturtle-library-in-yeti/</link>
		<comments>http://thebreakfastpost.com/2013/03/19/yertle-an-rdfturtle-library-in-yeti/#comments</comments>
		<pubDate>Tue, 19 Mar 2013 16:27:56 +0000</pubDate>
		<dc:creator>Chris Cannam</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[yeti]]></category>

		<guid isPermaLink="false">http://thebreakfastpost.com/?p=1918</guid>
		<description><![CDATA[I wrote a little while back about the Yeti programming language and the most pleasant time I was having with it, learning and re-learning some functional programming idioms. One of the first things I set about writing—because I could think of a use for it and it seemed like a nice thing to make—was a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1918&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I wrote <a title="Functional programming and the joy of learning something again" href="http://thebreakfastpost.com/2013/01/08/functional-programming-and-the-joy-of-learning-something-again/">a little while back</a> about the <a href="http://mth.github.com/yeti/">Yeti</a> programming language and the most pleasant time I was having with it, learning and re-learning some functional programming idioms.</p>
<p>One of the first things I set about writing—because I could think of a use for it and it seemed like a nice thing to make—was a parser for the <a href="http://www.w3.org/TR/turtle/">RDF/Turtle</a> language. I&#8217;m afraid I couldn&#8217;t resist calling my Yeti Turtle module &#8220;Yertle&#8221;, after the <a href="http://en.wikipedia.org/wiki/Yertle_the_Turtle_and_Other_Stories">Dr Seuss turtle</a>. You can find the code <a href="https://bitbucket.org/cannam/yertle">here on Bitbucket</a>. It is also an in-memory datastore and a Turtle serialiser, but the parser is the complicated bit.</p>
<h3>How I got on</h3>
<p>I don&#8217;t recall ever having written a non-trivial parser before, so this was an exercise in learning how to do that, as well as practice in Yeti. One reason I thought a Turtle parser would be a good exercise is that it&#8217;s a simple, <a title="Spare us humans from XML" href="http://thebreakfastpost.com/2012/03/06/spare-us-humans-from-xml/">human-readable</a> language that I (thought I) already knew.</p>
<p>In fact it&#8217;s not as simple as all that: the Turtle grammar is very straightforward, but it&#8217;s lexically disappointingly fiddly. And while I had thought it could be processed with only single-character lookahead and no backtracking, this turns out not to be the case.</p>
<p>The result is a recursive-descent parser without a preceding tokenizer, in which the parse functions return either partially constructed triples (complete triples being emitted directly into a state object) or an error variant.</p>
<p>Unwinding errors through parse function return values rather than, say, exceptions seems nice and tidy, but it does lead to a lot of nested decisions:</p>
<pre>aOrPrefixedName state =
    case pnameCandidate state of
    OK tok:
        case tok of
        Token "a": OK rdfTypeIRI;
        Token t: prefixExpanded state t;
        esac;
    Error e:
        Error e;
    esac;</pre>
<p>However, with this structure we can add a composition operator to apply a chain of parse functions, dropping out when we get one that returns an error:</p>
<pre>(~&gt;) a b =
    case a of
    OK result: b result;
    Error e: Error e;
    esac;</pre>
<p>making our example</p>
<pre>aOrPrefixedName state =
    pnameCandidate state ~&gt;
       \case of
        Token "a": OK rdfTypeIRI;
        Token t: prefixExpanded state t;
        esac;</pre>
<p>in which the second part of <code>aOrPrefixedName</code> (the case lambda expression) is evaluated only if the first part (<code>pnameCandidate</code>) succeeds and returns an <code>OK (Token t)</code> variant; otherwise it is short-circuited and the error returned immediately.</p>
<p>This seems to be a pretty basic construct in <a href="http://www.haskell.org/happy/doc/html/sec-monads.html">monadic parsers</a> and the like—being clueless about parsers and even more clueless about monads, I was unaware of this, but this kind of thing drops out by itself when looking at how to simplify a potentially repetitive bit of code.</p>
<h3>How well does it work?</h3>
<p>The parser passes all the W3C spec tests, plus a few additional unit tests.</p>
<p>Yertle has about half the number of lines of code of David Robillard&#8217;s <a href="http://drobilla.net/software/serd/">Serd</a>, the cleanest C implementation I know. But Yertle uses quite a number of regular expressions, and I&#8217;m not sure I would argue that it&#8217;s more readable than Serd. On the other hand, it would certainly be even less readable if <em>I</em> had written it in C.</p>
<p>Yertle is fast enough to handle modest documents in many practical situations, but it isn&#8217;t all that fast. It currently takes about four times as long to parse and re-serialise a large Turtle file as <a href="http://librdf.org/raptor/rapper.html">rapper</a> does and around ten times as long as the Serd serdi conversion utility. The times aren&#8217;t quite comparable because rapper and serdi don&#8217;t load to an indexed store on the way through (in fact serdi can convert arbitrarily large documents, which neither rapper nor Yertle can). And neither of those utilities, in the versions I compared with, quite implements the current W3C Turtle spec. But I don&#8217;t imagine those things make a huge difference.</p>
<p>(I decided beforehand I&#8217;d be happy to be within a factor of 5 of current C parser/serialisers, by which I really meant rapper. But as it turns out, now it&#8217;s written, I&#8217;d like to be a bit closer than that! I may have a bit of work to do, if only for my own satisfaction.)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/breakfastpost.wordpress.com/1918/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/breakfastpost.wordpress.com/1918/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1918&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thebreakfastpost.com/2013/03/19/yertle-an-rdfturtle-library-in-yeti/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/b85af1a84933dd3133496b82bd995e41?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">cannam</media:title>
		</media:content>
	</item>
		<item>
		<title>What are, or were, Nintendo good at?</title>
		<link>http://thebreakfastpost.com/2013/02/03/what-are-or-were-nintendo-good-at/</link>
		<comments>http://thebreakfastpost.com/2013/02/03/what-are-or-were-nintendo-good-at/#comments</comments>
		<pubDate>Sun, 03 Feb 2013 11:56:38 +0000</pubDate>
		<dc:creator>Chris Cannam</dc:creator>
				<category><![CDATA[Things That Are A Bit Like Other Things]]></category>
		<category><![CDATA[nintendo]]></category>

		<guid isPermaLink="false">http://thebreakfastpost.com/?p=1911</guid>
		<description><![CDATA[Marco Arment: At the high end, there’s room for a small number of huge-budget blockbuster titles that usually involve realistic sports simulations or killing people, none of which Nintendo does well. They compete by pushing the boundaries of cutting-edge graphics hardware, which Nintendo doesn’t produce anymore, and licensing real-life sports teams, which Nintendo doesn’t do. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1911&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.marco.org/2013/02/02/nintendo-in-trouble">Marco Arment</a>:</p>
<blockquote><p>At the high end, there’s room for a <em>small</em> number of huge-budget blockbuster titles that usually involve realistic sports simulations or killing people, none of which Nintendo does well. They compete by pushing the boundaries of cutting-edge graphics hardware, which Nintendo doesn’t produce anymore, and licensing real-life sports teams, which Nintendo doesn’t do. Or, more often on the PC side, they operate massively multiplayer online social fantasy worlds, which Nintendo also doesn’t do well.</p></blockquote>
<p>While I can&#8217;t disagree with much in this article, it&#8217;s a bit sad that so much of it is a litany of <em>things Nintendo doesn&#8217;t do well</em>. It&#8217;s as if their success during the past decade was more-or-less accidental, resting on a passing fad rather than any very distinctive quality.</p>
<p>I don&#8217;t think this is true.</p>
<p>Nintendo have, or had, one area of great strength: they made consoles that were <em>fun to play with more than one person, in the same room, together</em>. The enormous success of the DS and Wii came about because of games that were wildly fun to play socially, with friends or family who were actually physically present.</p>
<p>Nintendo have often been criticised for not &#8220;getting&#8221; multiplayer, because their online multiplayer support has never been as slick or effective as that from Microsoft in particular. But for millions of players, Nintendo have long had the best multiplayer support of all.</p>
<p>(In light of this, the Wii U looks a bit alarming because of the way its controller layout—with one big controller and multiple smaller ones—privileges a single player. The sense of equal competition is at risk.)</p>
<p>Whether there&#8217;s anything Nintendo can do to halt their present decline, I don&#8217;t know. If there is, it surely must have something to do with live, local social gaming.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/breakfastpost.wordpress.com/1911/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/breakfastpost.wordpress.com/1911/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1911&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thebreakfastpost.com/2013/02/03/what-are-or-were-nintendo-good-at/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/b85af1a84933dd3133496b82bd995e41?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">cannam</media:title>
		</media:content>
	</item>
		<item>
		<title>Did you know? Some people like Helvetica</title>
		<link>http://thebreakfastpost.com/2013/01/23/did-you-know-some-people-like-helvetica/</link>
		<comments>http://thebreakfastpost.com/2013/01/23/did-you-know-some-people-like-helvetica/#comments</comments>
		<pubDate>Wed, 23 Jan 2013 23:23:52 +0000</pubDate>
		<dc:creator>Chris Cannam</dc:creator>
				<category><![CDATA[America]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[usa]]></category>

		<guid isPermaLink="false">http://thebreakfastpost.com/?p=1788</guid>
		<description><![CDATA[Helvetica is—as every font geek who enjoys a repulsive turn of phrase must agree—one of the most iconic fonts of our time. Which is a pretty strange thing. Designed in 1957 by two not very famous type designers as a neutral typeface for the Haas foundry in Switzerland, Helvetica might almost have been drawn to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1788&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Helvetica"><img class="alignright" alt="" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/28/HelveticaSpecimenCH.svg/200px-HelveticaSpecimenCH.svg.png" width="160" height="189" /></a><a href="http://en.wikipedia.org/wiki/Helvetica">Helvetica</a> is—as every font geek who enjoys a repulsive turn of phrase must agree—one of <em>the most iconic fonts of our time</em>.</p>
<p>Which is a pretty strange thing. Designed in 1957 by two not very famous type designers as a neutral typeface for the Haas foundry in Switzerland, Helvetica might almost have been drawn to Jan Tschichold&#8217;s 1928 prescription for the &#8220;New Typography&#8221;:</p>
<blockquote><p>Among all the types that are available, the sans-serif is the only one in spiritual accordance with our time&#8230; But all the attempts up to now to produce a type for our time are&#8230; too artistic, too artificial&#8230; to fulfil what we need today.</p>
<p>I believe that no single designer can produce the typeface we need, which must be free from all personal characteristics: it will be the work of a group&#8230; For the time being it seems to me that the &#8220;jobbing&#8221; sans-serifs&#8230; are the most suitable for use today.</p></blockquote>
<div class="wp-caption alignleft" style="width: 160px"><a href="http://en.wikipedia.org/wiki/IOS"><img class=" " alt="" src="http://upload.wikimedia.org/wikipedia/en/7/7d/IOS_6_Home_Screen.png" width="150" height="225" /></a><p class="wp-caption-text">Gloomy</p></div>
<p>Helvetica is a basic, functional, not particularly charming typeface. But it has become the Graphic Designer&#8217;s Font. It&#8217;s <a href="http://www.fonts.com/browse/all-best-sellers">currently the best-selling font</a> from fonts.com. There are <a href="http://designbeep.com/2010/07/21/40-stylish-typographical-wallpapers-for-helvetica-lovers/">wallpapers</a>. There&#8217;s <a href="http://www.helveticafilm.com/">a film</a> about it (at least, I assume it&#8217;s about it—I haven&#8217;t seen it, partly because the title is a bit offputting). There are <a href="http://www.cafepress.co.uk/mf/23251536/helvetica-font_tshirt">T-shirts</a>, and I&#8217;ve seen people wearing them. It is the system font for iPhone and iPad: the squatting toad that contributes to the nagging sense of gloom that accompanies both devices.</p>
<p>No, I don&#8217;t like it a great deal. It&#8217;s a font to respect, not to like. Its design is almost perfectly invisible, unless you&#8217;re the sort of person made gloomy by almost-invisible fonts. As its basic shape goes, it is pretty much unimprovable.</p>
<h3>Corporate image, shoddiness, America</h3>
<p>No, the reason I write about Helvetica is not because I dislike the font—at least not as much as <a href="http://www.smashingmagazine.com/2012/12/06/why-wont-helvetica-go-away/">Alastair Johnston appears to</a>—but because I read something about corporate branding, namely <a href="http://dcurt.is/american-airlines-brand/">this post</a> by Dustin Curtis. He writes of American Airlines, who recently redesigned their logo from something using Helvetica to something not-using-Helvetica:</p>
<blockquote>
<div id="attachment_1812" class="wp-caption alignright" style="width: 160px"><a href="http://en.wikipedia.org/wiki/American_Airlines"><img class="size-thumbnail wp-image-1812  " alt="" src="http://breakfastpost.files.wordpress.com/2013/01/blah.jpg?w=150&#038;h=91" width="150" height="91" /></a><p class="wp-caption-text">With Helvetica</p></div>
<p>American Airlines&#8217; previous visual identity &#8230; was a beautiful tribute to modern American design. The simplicity of Helvetica, set in red, white, and blue, and positioned next to an iconic eagle, defined the company with a subtle homage to the country it represents.</p>
<p>After forty-six years, one of the finest corporate brands in history has been reduced to patriotic lipstick.</p></blockquote>
<p>I&#8217;m 40 years old and to me, in my youth, the American Airlines logo represented shoddiness. Crap font, cheesy colours, a bit ungainly, thrown together: the essence of America.</p>
<p>I have a bit more appreciation for it now, but let me explain.</p>
<p>I have only once ridden in a Cadillac, the classic American luxury car. This was fifteen-odd years ago, and it was a car of about this type:</p>
<p style="text-align:center;"><a href="http://www.cargurus.com/Cars/1993-Cadillac-DeVille-Pictures-c1518_pi35772499#pi35886933"><img class="aligncenter" alt="" src="http://static.cargurus.com/images/site/2012/11/17/14/08/1993_cadillac_deville_base_sedan-pic-4670169660439304678.jpeg" width="307" height="230" /></a></p>
<p>It wasn&#8217;t very good. It wallowed and pitched along, and although it had every possible feature inside the cabin, details such as switches seemed to have been thrown together from the cheapest bits and bobs to hand. The dashboard looked like an imitation of that from a 1970s Volvo. Actually, it <em>was</em> a car that I can imagine its owners loving—comfy but awkward and homely. But it wasn&#8217;t very well done.</p>
<p>American products have been seen like that for a long time globally. In the UK, &#8220;Made in Germany&#8221; and &#8220;Made in Japan&#8221; have been badges of quality for decades, but &#8220;Made in America&#8221; was a badge only applied to products too embarrassing ever to reach these shores at all.</p>
<p>Helvetica was designed in Switzerland, but it&#8217;s now an American font. It&#8217;s used mostly by American companies, and has been since American Airlines first adopted it. It suggests the qualities of American products. And the very plainness of the font, the ungainly quality in some letters like the &#8220;e&#8221;, and the implication from its sheer ubiquitousness that it probably wasn&#8217;t <em>chosen</em> but simply picked from the bucket, reinforce those qualities.</p>
<p>In other words—a logotype in Helvetica, in two obvious colours, with the word American in it,<br />
is a <em>badge of crap</em>.</p>
<h3>Hipness good, for once</h3>
<p>The bright spot for Helvetica and its associated American corporate baggage is Apple.</p>
<p>To me, Helvetica brings down iOS: it&#8217;s a weak point. But to people who don&#8217;t give a crap about fonts, but love using their iPhones and iPads, Helvetica will be a subconscious reinforcer of quality.</p>
<p>Perhaps American Airlines—who had several rather cool logos before they got stuck with the venerated Helvetica one—might have been better making this decision a decade ago. Or else now staying put for a while, just to see.</p>
<p><em>Next week: &#8220;Made in England&#8221;, British Leyland, and the shocking legacy of Frutiger in books for children</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/breakfastpost.wordpress.com/1788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/breakfastpost.wordpress.com/1788/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1788&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thebreakfastpost.com/2013/01/23/did-you-know-some-people-like-helvetica/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/b85af1a84933dd3133496b82bd995e41?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">cannam</media:title>
		</media:content>

		<media:content url="http://upload.wikimedia.org/wikipedia/commons/thumb/2/28/HelveticaSpecimenCH.svg/200px-HelveticaSpecimenCH.svg.png" medium="image" />

		<media:content url="http://upload.wikimedia.org/wikipedia/en/7/7d/IOS_6_Home_Screen.png" medium="image" />

		<media:content url="http://breakfastpost.files.wordpress.com/2013/01/blah.jpg?w=150" medium="image" />

		<media:content url="http://static.cargurus.com/images/site/2012/11/17/14/08/1993_cadillac_deville_base_sedan-pic-4670169660439304678.jpeg" medium="image" />
	</item>
		<item>
		<title>&#8220;What&#8217;s the difference between Mercurial and git?&#8221;</title>
		<link>http://thebreakfastpost.com/2013/01/22/whats-the-difference-between-mercurial-and-git/</link>
		<comments>http://thebreakfastpost.com/2013/01/22/whats-the-difference-between-mercurial-and-git/#comments</comments>
		<pubDate>Tue, 22 Jan 2013 10:14:12 +0000</pubDate>
		<dc:creator>Chris Cannam</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[soundsoftware]]></category>

		<guid isPermaLink="false">http://thebreakfastpost.com/?p=1786</guid>
		<description><![CDATA[A short post I wrote over at the SoundSoftware site. Spoiler: The answer I gave was not &#8220;Mercurial can be understood by human beings&#8221;. Let me know if you spot any mistakes (or just want to flame, of course). A colleague pointed out that a big problem I didn&#8217;t help with at all is how [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1786&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>A short post I wrote <a href="http://www.soundsoftware.ac.uk/whats-the-difference-between-hg-and-git">over at the SoundSoftware site</a>.</p>
<p>Spoiler: The answer I gave was not &#8220;Mercurial can be understood by human beings&#8221;.</p>
<p>Let me know if you spot any mistakes (or just want to flame, of course).</p>
<p>A colleague pointed out that a big problem I didn&#8217;t help with at all is how to understand the difference between git and <a href="https://github.com/">github</a>, which is what people are often really talking about when they talk about sharing code with git. Ironic that we all move to distributed version-control systems and then appoint a single company to run a central server for them.</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/breakfastpost.wordpress.com/1786/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/breakfastpost.wordpress.com/1786/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1786&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thebreakfastpost.com/2013/01/22/whats-the-difference-between-mercurial-and-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/b85af1a84933dd3133496b82bd995e41?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">cannam</media:title>
		</media:content>
	</item>
		<item>
		<title>Compiling a program is a strange thing to do</title>
		<link>http://thebreakfastpost.com/2013/01/17/compiling-a-program-is-a-strange-thing-to-do/</link>
		<comments>http://thebreakfastpost.com/2013/01/17/compiling-a-program-is-a-strange-thing-to-do/#comments</comments>
		<pubDate>Thu, 17 Jan 2013 18:58:22 +0000</pubDate>
		<dc:creator>Chris Cannam</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://thebreakfastpost.com/?p=1720</guid>
		<description><![CDATA[Following my previous post about functional languages, a suspicious reader asked about the list of prerequisites I gave for a language: purely functional, Hindley-Milner typing, compiling to JVM bytecode, blah blah blah. Was that list genuine—or was I by any chance just listing the properties of a language I&#8217;d stumbled over at random and decided [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1720&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Following my <a href="http://thebreakfastpost.com/2013/01/08/functional-programming-and-the-joy-of-learning-something-again/">previous post</a> about functional languages, a suspicious reader asked about the list of prerequisites I gave for a language: purely functional, Hindley-Milner typing, compiling to JVM bytecode, blah blah blah.</p>
<p>Was that list genuine—or was I <em>by any chance</em> just listing the properties of a language I&#8217;d stumbled over at random and decided I liked?</p>
<p>The list was in fact real, if tidied up a bit after the fact. I was looking for something like ML, that I could use in a Java-based environment, for fun, and the things I listed roughly describe that combination. (Looking for a specific language reworked &#8220;for the JVM&#8221; is not such a strange thing to do: there are quite a lot of them.)</p>
<p>There was an outlier in my list of priorities, though, something that I might not have cared about until recently: the REPL.</p>
<h3>Read, evaluate, print</h3>
<p>A REPL is a fancy name for a very simple thing: the interactive prompt that comes up when you start a language interpreter without giving it the name of a program to run. You type something, and it types the result back at you. If you keep typing, you might build up a whole interpreted program.</p>
<p>ML does have an interactive environment, but I hardly remember using it. It&#8217;s more recent experience with Python and Ruby that reminded me just what a nice thing it is. Interactivity makes a big difference when exploring and understanding a new language. I wouldn&#8217;t want to start learning a language without it, now.</p>
<p>The funny thing is that until I first went to university, most of my programming experience involved some sort of interactive environment. I&#8217;d never used a compiler. All my programming (such as it was) had been in interpreted BASIC with occasional bits of raw machine code, mostly on the ZX Spectrum home computer. Spectrum BASIC (you can try it <a href="http://www.zxspectrum.net/">here</a>) was slow and limited, but it had an interactive prompt and a helpful editor that would prevent you even entering a line if it spotted a syntax error.</p>
<p>So what a magical day it was, at university, when first we learned what real programming looks like:</p>
<pre>$ cc my_first_program.c
$ ./a.out
Segmentation fault (core dumped)
$</pre>
<p>Things got even better as C++ took off; it&#8217;s always been slow to compile, and I spent a decade or so working largely on programs that took over an hour to build. That&#8217;s a tricky feedback loop, which encourages you to try to work on multiple independent things for each compile cycle—probably not to the benefit of any of them.</p>
<p>Compiling your code is a pretty strange thing to do, really. Interpreted languages and languages with automatic bytecode compiling and runtime loading have been around for decades. Even if they&#8217;re a bit slower, surely the first priority of a language should be to make things easier for the programmer and increase the chances of getting a program that actually works correctly.</p>
<h3>Why compile?</h3>
<p>So, why do we still compile code so much of the time?</p>
<p>Here are a few guesses.</p>
<h4>Separating low-level from high-level concerns is hard</h4>
<p>Interpreted and byte-compiled languages have the possibility of being nearly as fast as compiled ones. Bytecode evaluation optimisers can be very good, and would presumably be better if more work had gone into them rather than into optimising compilation to machine code; alternatively, domains (such as signal processing) that benefit from low-level optimisation might be written using <a href="http://en.wikipedia.org/wiki/Domain-specific_language">domain-specific</a> languages in which common activities at very high level are interpreted using blocks of optimised low-level code.</p>
<p>But to get these right—particularly at the domain-specific level—you have to do a very good job of understanding the field, the requirements, and the programmers who will be working in the environment. If it&#8217;s not good enough, developers will fall back on something they can trust rather than wait for it to improve.</p>
<h4>It&#8217;s a known quantity</h4>
<p>And developers <em>can</em> trust compiled languages, on the whole. Not every task can use an interpreted or domain-specific language: those environments need to be implemented in something, and they need to run on some platform. I guess it&#8217;s simpler in the long run to make stable compilers than to implement a multitude of interpreters directly using low-level machine code.</p>
<h4>Compiling &#8220;finishes&#8221; the program</h4>
<p>A psychological trick. When you compile something, it&#8217;s done. If it seems to work, you can ship it. If you haven&#8217;t yet discovered version control, you can copy the binary somewhere and get a treacherous feeling of safety while you mangle, or lose, the source code. In contrast, with an interpreted language, every edit you make seems to risk breaking the whole program.</p>
<h4>Humans can&#8217;t read machine code</h4>
<p>Finally, when you have a compiled binary you can ship it <em>without the source</em>. Thus the whole edifice of proprietary software sale and distribution.</p>
<p>Any more ideas?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/breakfastpost.wordpress.com/1720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/breakfastpost.wordpress.com/1720/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1720&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thebreakfastpost.com/2013/01/17/compiling-a-program-is-a-strange-thing-to-do/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/b85af1a84933dd3133496b82bd995e41?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">cannam</media:title>
		</media:content>
	</item>
		<item>
		<title>Functional programming and the joy of learning something again</title>
		<link>http://thebreakfastpost.com/2013/01/08/functional-programming-and-the-joy-of-learning-something-again/</link>
		<comments>http://thebreakfastpost.com/2013/01/08/functional-programming-and-the-joy-of-learning-something-again/#comments</comments>
		<pubDate>Tue, 08 Jan 2013 12:10:48 +0000</pubDate>
		<dc:creator>Chris Cannam</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[nostalgic reverie]]></category>
		<category><![CDATA[yeti]]></category>

		<guid isPermaLink="false">http://thebreakfastpost.com/?p=1672</guid>
		<description><![CDATA[Twenty years ago, as a maths-and-computing undergraduate at the university of Bath, I was introduced to functional programming using the ML language by the excellent Julian Padget. We undergrads were set the traditional assignment of writing a sed-like text processor in ML, and found it first baffling and then, if we were lucky, rather exciting. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1672&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Twenty years ago, as a maths-and-computing undergraduate at the <a href="http://www.bath.ac.uk/">university of Bath</a>, I was introduced to functional programming using the <a href="http://en.wikipedia.org/wiki/ML_%28programming_language%29">ML language</a> by the excellent <a href="http://www.cs.bath.ac.uk/~jap/">Julian Padget</a>. We undergrads were set the traditional assignment of writing a <a href="http://en.wikipedia.org/wiki/Sed">sed</a>-like text processor in ML, and found it first baffling and then, if we were lucky, rather exciting. I got all enthusiastic about functional languages and, like any proper enthusiast, spent a delightful pointless while trying to design a toy language of my own.</p>
<p>Then I went off and got a job as a C++ programmer.</p>
<p>C++ is a practical, useful language, but it&#8217;s also complex, verbose, and baroque, with many different schools of practice. I&#8217;ve done a fair bit of work in other languages as well (equally boring ones, like Java) but effectively, I&#8217;ve spent much of the past two decades simply continuing to learn C++. That&#8217;s a bit crazy.</p>
<p>So when messing about with Android recently, I decided I wanted to try to get some of that old sense of joy back. I went looking for a language with the following properties:</p>
<ul>
<li>It should be primarily functional rather than object-oriented</li>
<li>It should be strongly-typed, ideally with <a href="http://en.wikipedia.org/wiki/Hindley%E2%80%93Milner">Hindley-Milner typing</a> (the most exciting thing about ML, for the undergraduate me)</li>
<li>It should have a compiler to JVM bytecode, so I could use it directly in Android apps, and should be able to use Java library code</li>
<li>It should have <a href="http://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop">a REPL</a>, an interactive evaluation prompt for productive messing around</li>
<li>It should be nice to read—it should be obviously a language I <em>wanted</em> to learn, and I was going to be happily guided by personal whim</li>
<li>It must be simple enough for the old, stupid me to have a chance of getting to grips with it</li>
<li>And, while I wasn&#8217;t going to care very much how mainstream it was, it did need to be reasonably complete and reliable.</li>
</ul>
<p>There are lots of languages out there for the JVM, including quite a few functional ones. <a href="http://www.scala-lang.org/">Scala</a> and <a href="http://clojure.org/">Clojure</a> are the best-known.</p>
<p><a href="http://www.scala-lang.org/">Scala</a> (<a href="http://en.wikipedia.org/wiki/Scala_%28programming_language%29">here</a> in Wikipedia) is a multi-paradigm language that, for me, has shades of C++ in that it feels like it&#8217;s designed to improve on all sorts of things in Java rather than be something simple of its own. It also looks object-oriented first and functional second; doesn&#8217;t prioritise interactive evaluation; and although it has a sophisticated type system, it doesn&#8217;t do inference on function parameter types. All in all, it just seemed a bit <em>chunky</em> to me.</p>
<p><a href="http://clojure.org/">Clojure</a> (<a href="http://en.wikipedia.org/wiki/Clojure">here</a> in Wikipedia) looks more fun. It has a very vibrant community and seems well-loved. It&#8217;s basically a Lisp for the JVM, and I&#8217;ve written Lisp before. That&#8217;s definitely interactive and functional. But I wasn&#8217;t really setting out to find Lisp again.</p>
<h3>Yeti</h3>
<p>Having sifted through a few other possibilities, the one that really seemed to fit the bill was <a href="http://mth.github.com/yeti/">Yeti</a>.</p>
<p>Yeti is a functional language with Hindley-Milner type inference, for the JVM, with a relatively simple syntax and interoperability with Java, that has an interactive REPL up front. (See the <a href="http://linux.ee/~mzz/yeti/intro.html">snappy tutorial</a>.) It seems to be basically the work of one programmer, but a programmer with taste.</p>
<p>The syntax of Yeti looks a bit like the way I remember ML—although on reviewing ML, it turned out not to be as similar as I&#8217;d thought. Functions are defined and applied with just about the simplest possible syntax, and the language deduces the types of all values except Java objects. The lack of commas in function application syntax makes it obvious how to do <a href="http://en.wikipedia.org/wiki/Partial_application">partial application</a>, a straightforward way to obtain <a href="http://en.wikipedia.org/wiki/Closure_%28computer_science%29">closures</a> (functions with context).</p>
<p>Here&#8217;s a trivial function, an application of it, and a partial application. The lines starting &gt; are my typing, and the others are type deductions returned by the evaluation environment. Comments start //, as in Java.</p>
<pre>&gt; f a b = a + b   // f is a function taking two arguments
f is number -&gt; number -&gt; number = &lt;code$f&gt;
&gt; f 2 3           // apply f to two numbers
5 is number
&gt; f 2             // apply f to one number, returning a new function
&lt;yeti.lang.Fun2_&gt; is number -&gt; number
&gt; g = f 2         // assign that function to g
g is number -&gt; number = &lt;yeti.lang.Fun2_&gt;
&gt; g 3             // apply g to the second number
5 is number</pre>
<p>So far, so academic toy language. But the more I apply Yeti to practical problems, the more I find it does work as a practical language.</p>
<p>What is challenging, of course, is that every language or language family has its set of idioms for handling everyday problems, and on the whole I simply don&#8217;t know those idioms yet in a functional language. This is the first time I&#8217;ve really tried to do anything serious with one. I know the language, roughly, but I don&#8217;t really <em>speak</em> the language. I&#8217;m still leafing through the phrasebook. My hovercraft is still full of eels.</p>
<p>With most of my incredibly stupid questions on the Yeti mailing list—which get very patient responses, but I really do need to cut back on the late-night stupidity and start reviewing my code in the morning instead—the answer turns out to be, &#8220;it&#8217;s simpler than I thought&#8221;. And I&#8217;m really enjoying it.</p>
<h3>Why type inference?</h3>
<p>A footnote. Why did I want a language with type inference?</p>
<p>Well, I&#8217;m lazy of course, and one of the most obvious sources of tedium in C++ and Java is having to <a href="http://telegraph-road.org/blog/2012/05/20/objective-c-and-c-verbosities-compared/">type everything out over and over again</a>.</p>
<p>And I&#8217;m a bit nostalgic about those undergrad days, no doubt.</p>
<p>But also, I&#8217;m increasingly mistrustful of my own work. In languages such as Python and Objective-C the concept of <a href="http://en.wikipedia.org/wiki/Duck_typing">duck typing</a> is widely used. This essentially means employing objects on the basis of their supported methods rather than their nominal class (&#8220;if it walks like a duck&#8230;&#8221;). This relaxed approach reaches a bit of a pinnacle in Ruby on Rails, which I&#8217;ve been working with a bit recently—and I find the magic and the assumptions go a bit far for me. I like to have some of the reassurance of type checking.</p>
<p>So, type inference gives you—in theory—the best of both worlds. You get to write your code using <a href="http://chrisichris.wordpress.com/2011/02/24/yeti-probably-the-most-dynamic-of-the-statically-typed-languages-on-the-jvm/">duck-typing principles</a>, and the compiler proof-reads for you and checks that your types really do work out.</p>
<p>That&#8217;s the theory. Does it scale? <a href="http://news.ycombinator.com/item?id=1377501">Not sure</a>. And if it was so great, wouldn&#8217;t it have become more mainstream during the past 30 years? Some moderately widely-used languages, like <a href="http://www.haskell.org">Haskell</a>, use it, but they&#8217;re still only <em>moderately</em> widely-used. So, we&#8217;ll see.</p>
<p>There are some obvious immediate disadvantages to type inference. Long error messages, for a start.</p>
<p>And as a C++ guy I somewhat miss function overloading and even (sometimes) operator overloading. A function argument can take more than one type, of course—that&#8217;s the whole point—but only if the types can be unified in terms of their properties; you can&#8217;t just reuse a function name for a second function that has a similar effect but works on unrelated types.</p>
<p>Most of the situations in which I want function overloading can be handled instead using <a href="http://linux.ee/~mzz/yeti/intro.html#variant-types">variant types</a> or <a href="http://linux.ee/~mzz/yeti/intro.html#modules">module namespaces</a>, both of which work well in Yeti, but sometimes it seems to come down to inventing slightly more awkward function names than I&#8217;d really like.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/breakfastpost.wordpress.com/1672/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/breakfastpost.wordpress.com/1672/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1672&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thebreakfastpost.com/2013/01/08/functional-programming-and-the-joy-of-learning-something-again/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/b85af1a84933dd3133496b82bd995e41?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">cannam</media:title>
		</media:content>
	</item>
		<item>
		<title>What laptop, tablet, or smartphone to buy? It&#8217;s a complicated business</title>
		<link>http://thebreakfastpost.com/2013/01/06/what-laptop-tablet-or-smartphone-to-buy-its-a-complicated-business/</link>
		<comments>http://thebreakfastpost.com/2013/01/06/what-laptop-tablet-or-smartphone-to-buy-its-a-complicated-business/#comments</comments>
		<pubDate>Sun, 06 Jan 2013 11:41:34 +0000</pubDate>
		<dc:creator>Chris Cannam</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Computers That Are Telephones]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[laptops]]></category>
		<category><![CDATA[market]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[products]]></category>
		<category><![CDATA[tablets]]></category>

		<guid isPermaLink="false">http://thebreakfastpost.com/?p=1570</guid>
		<description><![CDATA[My Dad asked me recently what sort of computer he should buy to replace his ten-year-old HP laptop. And what sort of phone should he get to replace his old Nokia? And while I was at it, should he get one of those tablet things? There are a lot of possible options at the moment, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1570&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>My Dad asked me recently what sort of computer he should buy to replace his ten-year-old HP laptop. And what sort of phone should he get to replace his old Nokia? And while I was at it, should he get one of those tablet things?</p>
<p>There are a lot of possible options at the moment, because all kinds of devices from smartphones to traditional PCs have become broadly capable of doing the same work, and because a whole raft of new Windows 8 laptops and convertibles have just arrived to clutter up the shelves.</p>
<p>Therefore I&#8217;d suggest mostly ignoring the nominal capability and specs of any device, and considering instead <strong>how it feels to hold and operate</strong> and<strong> what <strong>ecosystem</strong> it is part of</strong>.</p>
<p>Let me explain, and then give some more concrete advice.</p>
<h3>Ecosystems</h3>
<p>This slightly absurd term describes a set of services and systems that work together, many of which are likely to have been provided by the company that made the device&#8217;s operating system.</p>
<p>Increasingly, when you buy a device, you are making a decision to participate in its maker&#8217;s ecosystem: it will make your life easiest if you are prepared to use backup, file and photo sharing, music download, email, mapping, browsing, app installation, and other services all from the same supplier.</p>
<p>For example, if you buy an Android device, you&#8217;ll be most content if you also use Google mail, maps, marketplace, etc. Buy a Mac or an iPhone, and you&#8217;ll have the happiest time if you use Apple services wherever they exist. Windows 8 and Windows Phone expect you to have a Microsoft account and to use it. If you have two devices, say a laptop and a phone, they&#8217;ll get on best if they&#8217;re both within the same ecosystem as well.</p>
<p>You can make a conscious decision to mix and match—I do that myself, somewhat, because it pains me to side with any one megacorporation more than I have to—but it can be heavy going. If the idea of understanding what you&#8217;re doing and why you&#8217;re doing it appeals to you more than having an easy life, then install Linux and subscribe to no single ecosystem; I&#8217;ll be happy to help out. But I&#8217;m guessing you don&#8217;t really want to do that.</p>
<p>So no, the usual thing seems to be to decide which company you dislike least, then let that one have your credit card details and as much goodwill as you can muster. And that means picking one of: Apple (with OS/X and iPhone/iPad), Google (with Android), or Microsoft (with Windows and Windows Phone).</p>
<h3>&#8220;Feel&#8221;</h3>
<p>Modern computing devices, from smartphones to PCs, are increasingly touch-driven (either through a multi-touch touchpad or a touchscreen), portable, and versatile. The way you hold and interact with them does matter.</p>
<p>I&#8217;d strongly suggest you start by trying out the best devices you can find from each ecosystem, hands-on, either by borrowing from a friend or in a very relaxed shop. Decide which one you enjoy the basic interactions with the most.</p>
<p>If the design, interaction and animation (and materials and heft, for specific devices) please you every time you pick it up, you&#8217;re probably going to be happy with it. If they annoy you, you&#8217;re not. If it&#8217;s ugly and inconvenient now, it&#8217;ll be ugly and inconvenient in five years&#8217; time.</p>
<h3>The options</h3>
<p>These are the things you can buy at the moment.</p>
<p><strong>Laptops</strong> you know. They run either Windows (if PCs) or OS/X (if Macs). Some of the Windows 8 ones now have touchscreens, but not all of them (and nor do any of the Macs).</p>
<p><strong>Tablets</strong> such as Apple&#8217;s iPad, the Google/Samsung Nexus 10, or the Microsoft Surface are slatelike touchscreen devices in which a separate keyboard is strictly optional (there is a &#8220;virtual&#8221; one on the screen). They typically run one program at a time, full-screen, rather than having multiple separate windows side by side, and the programs are redesigned for touch rather than mouse operation (the buttons are bigger and they have fewer menus, for example). All software is installed from a central &#8220;app store&#8221; run by the operating system manufacturer.</p>
<p><strong>Smartphones</strong> are small tablets that can make phone calls. Most mobile phones nowadays are smartphones.</p>
<h3>Things to bear in mind</h3>
<p><strong>A modern smartphone is a computer.</strong> It can do practically anything, but it&#8217;s sometimes fiddly because of the small size, and it has amazingly awful battery life compared with a classic mobile phone—be prepared to charge it every day. If you buy a nice new phone and make use of it as a handheld computer, you&#8217;ll probably find you use your laptop less.</p>
<p><strong>Tablets overlap with both smartphones and laptops.</strong> If you have a smartphone, the laptop or tablet is likely to take jobs like &#8220;reading long documents, and doing anything that needs a lot of typing&#8221;. Don&#8217;t buy both a tablet and a laptop, just make sure whatever you get has a good clear screen and you can stand it up on a desk and type with it.</p>
<div class="wp-caption alignright" style="width: 130px"><a href="http://eee.asus.com/en/transformer-prime/features"><img class="      " alt="" src="http://brain.pan.e-merchant.com/4/4/13657744/l_13657744.jpg" width="120" height="106" /></a><p class="wp-caption-text">Asus Transformer</p></div>
<p><strong>Proper keyboards are available for every kind of tablet:</strong> you can always get something you can either plug in or attach wirelessly. But <strong>convertible tablets</strong> (with a keyboard stand included, like the Asus Transformer, right) are nice too. They&#8217;re very like laptops to use and can be folded up and packed away the same way, but you can also pull off the screen and sit on the sofa with it. Most run Android.</p>
<p><strong>There are also small tablets, but&#8230;</strong> While the iPad, Nexus 10, Transformer series, and Surface are in the 10-11&#8243; diagonal range, there are also several in the 7-8&#8243; range like the iPad Mini or Nexus 7. The small ones are natty and better for carrying around, but less good for sofa-surfing and can&#8217;t really replace a laptop.</p>
<p><strong>If you&#8217;re buying an Android device, look for Android 4 or newer and get a Google Nexus if you can.</strong> They sell a phone (the Nexus 4), a small tablet (Nexus 7) and a big tablet (Nexus 10) and they&#8217;re all pretty good. Being Google&#8217;s &#8220;own&#8221; devices, they have good compatibility and <a href="http://thebreakfastpost.com/2012/02/09/operating-system-updates/">more updates</a>. You can&#8217;t generally get them through mobile network contracts though.</p>
<p><strong>Don&#8217;t buy an Amazon tablet.</strong> The Kindle Fire series are really designed for only one thing: <a href="http://mcld.co.uk/blog/blog.php?378">consuming content from Amazon</a>.</p>
<p><strong>If you&#8217;re buying a Windows 8 laptop, get one with a touchscreen.</strong> Windows 8 makes very little sense without a touchscreen. You can still use a mouse as well.</p>
<p><strong>Windows 8 is extra-confusing</strong> because of the existence of both Windows 8 and &#8220;Windows RT&#8221;. These are essentially the same, except that Windows RT can&#8217;t run any &#8220;legacy&#8221; Windows software apart from Microsoft Office: it only runs touch-optimised full-screen apps from the Windows app store, of which there are not all that many available yet. Windows RT is found on tablets and some laptops. It&#8217;s a perfectly capable operating system, but there&#8217;s a big risk of disappointment if you want to run arbitrary Windows applications from around the internet and discover too late that you can&#8217;t.</p>
<p><strong>So the range of applications available matters, but it&#8217;s not the be-all and end-all.</strong> Off the top of my head: Apple&#8217;s iPhone has the most apps, then Android phones, then the iPad, then desktop operating systems (Windows, OS/X), then Android tablets, and in last place Windows Phone and Windows RT. Numerically the difference from first to last pretty big, but it can be oversold: in practice you won&#8217;t find many things you can&#8217;t do, nor run out of new stuff to try out, on any of them.</p>
<p><strong>You can safely ignore any review</strong> in which the star rating appears to be correlated to how fast the computer&#8217;s processor is. That&#8217;s practically irrelevant nowadays. Do test how smoothly the screen scrolls and zooms though.</p>
<p><strong>Don&#8217;t forget to check</strong> whether you use any software that absolutely must continue to run on whatever you replace your laptop with. In most cases, all you need is software that does the same sort of thing (it doesn&#8217;t have to be exactly the same software) but you don&#8217;t want to get caught out if there&#8217;s anything specific you rely on.</p>
<p><strong>The whole mobile-network contract business</strong> is an extra layer or three of bafflement that I can&#8217;t really help with. I generally buy hardware unsubsidised and stick a pay-as-you-go SIM in it.</p>
<h3>Some suggestions</h3>
<p>Give each of the ecosystem contenders a test run, and then, from the options below, pick the phrase you most agree with and read that bit!</p>
<p>(Although by the time you&#8217;ve given each them a test run, you may well already know what you want. That would be a good outcome.)</p>
<p>I&#8217;m totally ignoring price here, although sadly the most interesting options almost always turn out rather expensive.</p>
<p><strong>&#8220;I really like the way the Apple things work&#8221;</strong> Well, that was easy. If you&#8217;re dead set on having a laptop or you want as much flexibility and control as possible, then you want a <a href="http://www.apple.com/uk/macbookair/">MacBook Air</a> (probably the 13&#8243; size, although the keyboard is <a title="Hard edges, small keys" href="http://thebreakfastpost.com/2012/02/10/hard-edges-small-keys/">just as titchy</a> as the one in the 11&#8243;). Otherwise, get an <a href="http://www.apple.com/uk/ipad/">iPad</a> and forget about the laptop. Either way, buy the laptop or tablet first, then think about phones (the phone to get is obviously an iPhone, it&#8217;s just a question of which one and that basically comes down to price).</p>
<p><strong>&#8220;Windows 8 and Windows Phone appeal to me, and I don&#8217;t think of Microsoft as an objectionable enemy&#8221;</strong> You&#8217;d probably find a Windows Phone 8 phone (any one, though the <a href="http://www.nokia.com/gb-en/products/phone/lumia920/">Nokia Lumia 920</a> has the most lovely screen) and a touchscreen Windows 8 laptop a good combination. Look at the <a href="http://www.johnlewis.com/231740087/Product.aspx">Lenovo Yoga 13</a>, which is a fine laptop that I predict will sell half-a-dozen at best because of the weird way it&#8217;s being displayed on a stand in the shops (the screen flips back to make it resemble a large and heavy tablet, but it&#8217;s really a laptop). Or consider the Samsung <a href="http://www.johnlewis.com/231740137/Product.aspx">Series 5 Touch laptop</a> or possibly the <a href="http://www.amazon.co.uk/Samsung-11-6-inch-Touchscreen-Convertible-Laptop/dp/B009SJCW28/">ATIV SmartPC</a> convertible. Although Microsoft&#8217;s <a href="http://www.microsoftstore.com/store/msuk/en_GB/cat/ThemeID.30273200/categoryID.60118200?tid=sYJ9qA4vm&amp;cid=5366&amp;pcrid=21048357045&amp;pkw=surface%20rt&amp;pmt=e&amp;WT.srch=1&amp;WT.mc_id=pointitsem_Microsoft+UK_google_Surface+-+UK&amp;WT.term=surface%20rt&amp;WT.campaign=Surface+-+UK&amp;WT.content=YJ9qA4vm&amp;WT.source=google&amp;WT.medium=cpc">Surface RT</a> is a <a href="http://thebreakfastpost.com/2012/11/29/i-quite-like-the-surface-rt-it-must-be-doomed/">beautiful object that I&#8217;d like to recommend</a>, it isn&#8217;t yet quite the laptop replacement it thinks it is. There&#8217;s a Pro version due out in a few weeks that might be worth a look, though.</p>
<p><strong>&#8220;I use a few Google services already, and I&#8217;ve tried at least one Android device I thought was nice to use&#8221; </strong>An Android tablet convertible like the <a href="http://www.johnlewis.com/231659141/Product.aspx">Asus Transformer</a><strong></strong> series can in principle replace a laptop quite well. Try one out, but if you&#8217;re thinking &#8220;hm, maybe Android might work&#8221; it&#8217;s probably cheaper to give it a go with a phone first. Google&#8217;s <a href="http://www.google.com/nexus/4/">Nexus 4</a> is the obvious choice if you can find one.<strong><br />
</strong></p>
<p><strong>&#8220;Those touchscreen laptops and tablets are all a bit small, I like my bigger PC&#8221; </strong>There are some reasonable touchscreen laptops with somewhat larger screens, including several from HP like the <a href="http://www.johnlewis.com/231740039/Product.aspx">Envy TouchSmart 14</a>. I hesitate to recommend one because I&#8217;ve actually never seriously used Windows 8 with a touchscreen on a larger screen. It might be a bit tiring. Do try it though.</p>
<p><strong>&#8220;This is still all too complicated&#8221;</strong> Then stick with what you&#8217;ve got. The new Windows 8 machines have only just come out, and everything will look a bit simpler in six months&#8217; time when the disasters have subsided and the new-fangled things have got cheaper.</p>
<h3>What would I do?</h3>
<p>If: money was no object; I had no corporate loyalty and lacked my affection for <a title="Linux" href="http://thebreakfastpost.com/2012/12/17/linux/">open Unix-type systems</a>; I wanted to be able to do anything <em>except</em> programming; I didn&#8217;t have a laptop, tablet or smartphone already; and I didn&#8217;t mind if my phone was too big to fit in a small pocket&#8230; I&#8217;d buy a <a href="http://www.nokia.com/gb-en/products/phone/lumia920/">Nokia Lumia 920</a> and a <a href="http://www.johnlewis.com/231740087/Product.aspx">Lenovo Yoga 13</a>.</p>
<p>That&#8217;s because I like the Windows 8 look and feel, the different Windows 8 devices work well together, and both of these are attractive well-made objects that are a pleasure to use. I&#8217;d pick the Nokia over the otherwise excellent <a href="http://www.htc.com/www/smartphones/htc-wp-8x/">HTC 8X</a> because of its better screen and camera and the inclusion of Nokia maps with navigation.</p>
<p>But in real life, I couldn&#8217;t afford that. If I wanted to keep the price down a bit and avoid being too locked in to any one ecosystem, I&#8217;d look at a <a href="http://www.johnlewis.com/231740137/Product.aspx">Samsung Series 5</a> touchscreen laptop and a second-hand unlocked Google Nexus S phone <a href="http://www.ebay.co.uk/sch/Mobile-Smart-Phones-/9355/i.html?SIM%2520Lock=Unlocked&amp;_from=R40&amp;_nkw=nexus+s&amp;_dmpt=UK_Mobile_Phones&amp;rt=nc&amp;LH_ItemCondition=3000">from eBay</a>. But I would go and have a play with a Surface RT tablet <a href="http://www.johnlewis.com/231836601/Product.aspx">in John Lewis</a> first, just in case. It&#8217;s a nicer physical object, for all its limitations.</p>
<p>And if money was <em>the</em> object—if it was the main thing that mattered, but the other conditions were the same—I might buy the entry-level full-size <a href="http://www.apple.com/uk/ipad/">iPad</a> and nothing else. It&#8217;s much cheaper than a touchscreen laptop and has a lot of software. I don&#8217;t really go for the visual design, but it&#8217;s cheaper than the alternatives I do really like, the basic interaction and feel are fine, and having all those apps available counts for a lot.</p>
<p>Of course, being a typical human creature I&#8217;d really do none of the above. I&#8217;d just buy whatever I happened to like the look of on the day and rationalise it afterwards. I trust you&#8217;ll do the same!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/breakfastpost.wordpress.com/1570/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/breakfastpost.wordpress.com/1570/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1570&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thebreakfastpost.com/2013/01/06/what-laptop-tablet-or-smartphone-to-buy-its-a-complicated-business/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/b85af1a84933dd3133496b82bd995e41?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">cannam</media:title>
		</media:content>

		<media:content url="http://brain.pan.e-merchant.com/4/4/13657744/l_13657744.jpg" medium="image" />
	</item>
		<item>
		<title>Linux</title>
		<link>http://thebreakfastpost.com/2012/12/17/linux/</link>
		<comments>http://thebreakfastpost.com/2012/12/17/linux/#comments</comments>
		<pubDate>Mon, 17 Dec 2012 22:18:38 +0000</pubDate>
		<dc:creator>Chris Cannam</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Operating systems]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://thebreakfastpost.com/?p=1524</guid>
		<description><![CDATA[I write plenty of tedious posts about computers and technology, and I usually tag them according to what they&#8217;re about. As I write this, the tag cloud for this blog looks like the picture on the left—Apple and Microsoft loom large, Nokia and Oracle get a look in, and there&#8217;s no reference to Linux at [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1524&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://breakfastpost.files.wordpress.com/2012/12/tags.png"><img class="alignleft size-thumbnail wp-image-1525" alt="tags" src="http://breakfastpost.files.wordpress.com/2012/12/tags.png?w=92&#038;h=150" width="92" height="150" /></a>I write plenty of tedious posts about computers and technology, and I usually tag them according to what they&#8217;re about.</p>
<p>As I write this, the tag cloud for this blog looks like the picture on the left—Apple and Microsoft loom large, Nokia and Oracle get a look in, and there&#8217;s no reference to Linux at all.</p>
<p>But Linux is the main operating system I use, and it has been for the last 15 years or more.</p>
<p>I never write about it because, like the boy in the <a href="http://www.guardian.co.uk/world/2006/may/23/germany.features11">German child joke</a>, I&#8217;m content with it. I write about things that fascinate me, and there&#8217;s nothing less fascinating than a system that does what you expect it to, again and again.</p>
<p>Although I also develop software for Windows, OS/X, and Android among others, Linux is my home platform.</p>
<p>I like that it gives me a sense of independence from any particular platform I might deploy to. I like that it allows me to make my own decisions about the type of desktop environment I choose. (Never trust an OS that won&#8217;t allow you to change the system font.) I like the transparency of the development environment, and I appreciate being given the opportunity to find out how anything in it works—even though I don&#8217;t take as much advantage as I might.</p>
<p>So far, using mostly Linux has been a fine way to observe developments in other operating systems, from just enough distance not to get too caught up in any one of them.</p>
<h3>A touch of froth</h3>
<p>A jolt, though, comes with the arrival of touch interfaces. I&#8217;m not the only one to be surprised to find <a href="http://www.theverge.com/2012/11/30/3710900/gorilla-arm-touchscreen-laptop-windows-8-apple">how pleasant</a> a touch screen is to use with a laptop. For me, <a href="http://www.wired.com/gadgetlab/2010/10/gorilla-arm-multitouch/">Apple had it wrong</a>: though familiarity means I still prefer a mouse for detail work, I&#8217;d rather have a touch screen than a trackpad.</p>
<p>Maybe I just haven&#8217;t used touch screens enough to become really fatigued. But I wonder whether the research might not have underestimated how fatiguing the crabbing action of using a touchpad is. I don&#8217;t think &#8220;I&#8217;ve been waiting all my life for this touch screen&#8221;; I think &#8220;thank goodness I don&#8217;t have to use the touchpad&#8221;.</p>
<p>I&#8217;ve heard it remarked that innovative input devices interest consumers in a way that novel output devices seldom do. There are many examples of new input devices becoming mainstream, sometimes in wildly popular ways: the joystick, the mouse, the D-pad, the touchpad, gaming controllers with accelerometers and gyroscopes, computer vision devices (the Kinect) and so on. Meanwhile various innovations in output (such as 3D and very high-resolution screens) have appeared repeatedly and been largely ignored—unless they came in packages that were attractive for other reasons, such as the LCD display with its slender physical dimensions.</p>
<p>So, over the years I&#8217;ve taken quite good advantage of the ability to pick and choose my desktop interface on Linux. Like all self-regarding programmers, I&#8217;ve used <a href="http://all-day-breakfast.com/wmx/">my own window manager</a>. I&#8217;ve used KDE, until I switched away when KDE4 arrived. Then I used GNOME, until I switched away when GNOME 3 arrived. Right now I&#8217;m using XFCE4. But it&#8217;s not at all touch-friendly, and nor are any of the applications I use. This one has so far completely passed me by.</p>
<p>In short, then, those <a href="http://unity.ubuntu.com/about/">Ubuntu</a> and <a href="http://www.gnome.org/gnome-3/">Gnome</a> people that I&#8217;ve probably been rather rude about might have had a point. There was some reason to be piddling about with the basics of the user interface after all. I need to start finding out whether Linux, other than Android, can work well in the touch screen world.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/breakfastpost.wordpress.com/1524/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/breakfastpost.wordpress.com/1524/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1524&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thebreakfastpost.com/2012/12/17/linux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/b85af1a84933dd3133496b82bd995e41?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">cannam</media:title>
		</media:content>

		<media:content url="http://breakfastpost.files.wordpress.com/2012/12/tags.png?w=92" medium="image">
			<media:title type="html">tags</media:title>
		</media:content>
	</item>
		<item>
		<title>Windows Phone: a bit like BeOS</title>
		<link>http://thebreakfastpost.com/2012/12/07/windows-phone-a-bit-like-beos/</link>
		<comments>http://thebreakfastpost.com/2012/12/07/windows-phone-a-bit-like-beos/#comments</comments>
		<pubDate>Fri, 07 Dec 2012 10:28:43 +0000</pubDate>
		<dc:creator>Chris Cannam</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Operating systems]]></category>
		<category><![CDATA[Things That Are A Bit Like Other Things]]></category>
		<category><![CDATA[Things that Are Gone]]></category>
		<category><![CDATA[beos]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://thebreakfastpost.com/?p=1506</guid>
		<description><![CDATA[Today&#8217;s possibly stretching-a-point Technology Analogy In a previous article I compared the situation of Windows 8 on the desktop to that of OS/2 in the late 80s. Windows Phone 8 is in a different position. While Windows 8 gets its awkwardness from the need to provide compatibility with the dominant platform—which in this case means [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1506&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><em>Today&#8217;s possibly stretching-a-point Technology Analogy</em></p>
<p><a href="http://www.aresluna.org/attached/pics/usability/articles/biurkonaekranie/beos5.big.png"><img class="alignright" alt="" src="http://www.aresluna.org/attached/pics/usability/articles/biurkonaekranie/beos5.big.png" height="288" width="384" /></a>In a <a title="Windows 8: A bit like OS/2" href="http://thebreakfastpost.com/2012/11/06/windows-8-a-bit-like-os2/">previous article</a> I compared the situation of Windows 8 on the desktop to that of OS/2 in the late 80s.</p>
<p>Windows Phone 8 is in a different position. While Windows 8 gets its awkwardness from the need to provide compatibility with the dominant platform—which in this case means earlier versions of Windows—the dominant platforms competing with Windows Phone are iOS and Android. And it&#8217;s totally incompatible with both.</p>
<p>So, why choose Windows Phone? Not because it has greater capabilities, all in all, than its competition. It doesn&#8217;t have any very significant platform-exclusive applications. It isn&#8217;t any more open (in either a useful or fun kind of way). There are two reasons you might choose it: a preference for its interaction design, or integration with some networked services.</p>
<p><a href="http://en.wikipedia.org/wiki/BeOS">BeOS</a> is an operating system dating from the mid-90s developed, according to Wikipedia, &#8220;on the principles of clarity and a clean, uncluttered design&#8221;. (Sounds familiar?) It was pretty to look at and nice to use. It had decent networking support and made good use of the hardware available to it.</p>
<p>But it was always going to have niche appeal. By the time of its release, Windows 95 was dominant and generally tolerated by mass-market users, while Unix-based operating systems like Linux, FreeBSD, and NeXTSTEP were working their way down from higher-end workstations with hacker appeal. BeOS was incompatible, no cheaper, no more open, and ultimately more limited by lack of useful applications. It remains a likeable curio.</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/breakfastpost.wordpress.com/1506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/breakfastpost.wordpress.com/1506/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebreakfastpost.com&#038;blog=31090627&#038;post=1506&#038;subd=breakfastpost&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thebreakfastpost.com/2012/12/07/windows-phone-a-bit-like-beos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/b85af1a84933dd3133496b82bd995e41?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">cannam</media:title>
		</media:content>

		<media:content url="http://www.aresluna.org/attached/pics/usability/articles/biurkonaekranie/beos5.big.png" medium="image" />
	</item>
	</channel>
</rss>
