<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Computers on Joe&#39;s Blog</title>
    <link>https://blog.afandian.com/categories/computers/</link>
    <description>Recent content in Computers on Joe&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Sun, 21 Dec 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.afandian.com/categories/computers/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Performance of folktunefinder.com and Cloudflare</title>
      <link>https://blog.afandian.com/post/2025/12/folktunefinder-performance/</link>
      <pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.afandian.com/post/2025/12/folktunefinder-performance/</guid>
      <description>&lt;h3 id=&#34;long-story-short&#34;&gt;Long story short&lt;/h3&gt;&#xA;&lt;p&gt;I put Cloudflare and a CAPTCHA on Folk Tune Finder. It&amp;rsquo;s a pragmatic decision, which ensures that the limited resources of the site are used for the people it&amp;rsquo;s intended for. It&amp;rsquo;s an uneasy trade-off that doesn&amp;rsquo;t align with all of my principles. It does, though, align with the fundamental principle of folk tune finder: helping people to find tunes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pipes and Paper: Ancient Abstractions (or: hacking my ReMarkable tablet into a live presentation tool)</title>
      <link>https://blog.afandian.com/2020/10/pipes-and-paper-remarkable/</link>
      <pubDate>Sun, 11 Oct 2020 00:00:00 +0000</pubDate>
      <guid>https://blog.afandian.com/2020/10/pipes-and-paper-remarkable/</guid>
      <description>&lt;p&gt;None of the below is particularly original. That&amp;rsquo;s kind of the point.&lt;/p&gt;&#xA;&lt;img src=&#34;https://blog.afandian.com/images/2020/10/remarkable/screenshot-cropped.jpg&#34; class=&#34;img-responsive&#34;&gt;&#xA;&lt;h2 id=&#34;paper&#34;&gt;Paper&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m addicted to paper. When reviewing documents I prefer to print them out and scribble on them. That&amp;rsquo;s all well and good in an office located on a planet with infinite trees, but I find myself in neither of those situations.&lt;/p&gt;&#xA;&lt;p&gt;As a programmer, I also find it useful to scribble things down on paper, point at various scribble marks and ask people questions. I do enjoy making carefully perfected, data generated, diagrams with arcane tools. But scribbling is a necessary precursor.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Light Box in Heavy Times</title>
      <link>https://blog.afandian.com/2020/02/light-box-heavy-times/</link>
      <pubDate>Sun, 22 Mar 2020 00:00:00 +0000</pubDate>
      <guid>https://blog.afandian.com/2020/02/light-box-heavy-times/</guid>
      <description>&lt;p&gt;My son is nearing his second birthday, which makes him nearly two years old. When he was only four months old I decided that I would make him something with buttons. I didn&amp;rsquo;t have much more of an idea than that, but I ordered one hundred illuminated buttons and started mulling what to do with them. Nothing much happened for a few months; I knew this was a long term plan. But every so often my subconscious would come up for breath, and I would open the drawer and get them out. Just to see how they felt.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Five principles for community altmetrics data</title>
      <link>https://blog.afandian.com/2018/05/five-principles-altmetrics/</link>
      <pubDate>Tue, 29 May 2018 00:00:00 +0000</pubDate>
      <guid>https://blog.afandian.com/2018/05/five-principles-altmetrics/</guid>
      <description>&lt;p&gt;I presented these ideas at the altmetrics18 workshop. &lt;strong&gt;You can &lt;a href=&#34;http://altmetrics.org/wp-content/uploads/2018/04/altmetrics18_paper_4_Wass.pdf&#34;&gt;read a slightly more formal version of this blog post&lt;/a&gt; here.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;These five principles are my answer to some of the difficulties and problems I have observed in the past couple of years. In that time I have been collecting the kind of data that altmetrics are built from, and talking and working with researchers. Altmetrics data is derived from the community. I think that community should continue to be at the heart of &lt;em&gt;every step&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Some thoughts on &#39;General discussion of data quality challenges in social media metrics&#39;</title>
      <link>https://blog.afandian.com/2018/05/zahedi-costas-altmetrics/</link>
      <pubDate>Tue, 29 May 2018 00:00:00 +0000</pubDate>
      <guid>https://blog.afandian.com/2018/05/zahedi-costas-altmetrics/</guid>
      <description>&lt;p&gt;Zohreh Zahedi and Rodrigo Costas recently published a comparison of altmetrics data providers. Included in the comparison was Crossef Event Data, the service that I have been designing and building for the last couple of years. I am writing this blog post as a personal response to their study, &lt;a href=&#34;https://doi.org/10.1371/journal.pone.0197326&#34;&gt;&amp;ldquo;General discussion of data quality challenges in social media metrics: Extensive comparison of four major altmetric data aggregators&amp;rdquo;&lt;/a&gt;. We will also publish an official Crossref response, which I will link to when it is published.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tracking scholarly discussion online, as it happens</title>
      <link>https://blog.afandian.com/2018/04/tracking-scholarly-discussion/</link>
      <pubDate>Wed, 25 Apr 2018 00:00:00 +0000</pubDate>
      <guid>https://blog.afandian.com/2018/04/tracking-scholarly-discussion/</guid>
      <description>&lt;p&gt;This blog post goes with my talk at &lt;a href=&#34;http://oxford.geeknights.net/ogn46&#34;&gt;Oxford Geek Nights&lt;/a&gt;. It&amp;rsquo;s about the work I&amp;rsquo;m doing at &lt;a href=&#34;https://www.crossref.org&#34;&gt;Crossref&lt;/a&gt; but the talk and this blog post are provided in a personal capacity, and don&amp;rsquo;t officially represent Crossref. That mostly means I don&amp;rsquo;t have to use American spelling. Which is fortunate for you, as I&amp;rsquo;m really bad at accents.&lt;/p&gt;&#xA;&lt;h1 id=&#34;what-does-scholarly-mean&#34;&gt;What does &amp;lsquo;scholarly&amp;rsquo; mean?&lt;/h1&gt;&#xA;&lt;p&gt;&amp;ldquo;Scholarly publications&amp;rdquo; are things published in pursuit of scholarship. That&amp;rsquo;s mostly articles, but it also includes datasets, peer reviews, journal issues, monographs, books &amp;amp;c.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gemini PDA</title>
      <link>https://blog.afandian.com/2018/04/gemini-pda/</link>
      <pubDate>Thu, 12 Apr 2018 00:00:00 +0000</pubDate>
      <guid>https://blog.afandian.com/2018/04/gemini-pda/</guid>
      <description>&lt;h1 id=&#34;which-came-first&#34;&gt;Which came first?&lt;/h1&gt;&#xA;&lt;p&gt;I am, after a lag of a few weeks, finally writing a few words about my &lt;a href=&#34;https://www.planetcom.co.uk/&#34;&gt;Gemini PDA&lt;/a&gt;. As tradition, I&amp;rsquo;m writing it on the device itself.&lt;/p&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t feel that it&amp;rsquo;s possible to write a fair review after a short amount of time. I&amp;rsquo;ve had my BlackBerry Passport, my current phone, for about 4 years and I only just feel qualified to start mulling it. My imaginary review, when I get round to it, will say that on balance, it&amp;rsquo;s a very good phone with a nice keyboard, great sound, and that you should have bought one in 2014. All the best historians wait a decade.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A decade of Folk Tune Finder, an open manifesto for the decade to come</title>
      <link>https://blog.afandian.com/2018/02/a-decade-of-folk-tune-finder/</link>
      <pubDate>Tue, 13 Feb 2018 00:00:00 +0000</pubDate>
      <guid>https://blog.afandian.com/2018/02/a-decade-of-folk-tune-finder/</guid>
      <description>&lt;p&gt;Today marks the release of the &lt;a href=&#34;https://www.digitalfolk.org/digital-folk-report/&#34;&gt;Digital Folk report&lt;/a&gt;, a study into the way that folk music is being played and shared in the digital age. The report opens with a timeline of some of the tools available and their history. It reminded me that Folk Tune Finder is ten years old this year - the folktunefinder.com domain was registered at half past nine in the morning on the 27th of January 2008. This seems like a good time to look back at the last decade and think about the future.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Annointing the Threshold</title>
      <link>https://blog.afandian.com/2017/02/annointing-the-threshold/</link>
      <pubDate>Fri, 03 Feb 2017 22:00:00 +0000</pubDate>
      <guid>https://blog.afandian.com/2017/02/annointing-the-threshold/</guid>
      <description>&lt;p&gt;A couple of years ago I fished a large chunk of wood out of the river. It had a very satisfactory heft, oblongularity and poise. A piece of timber solid not only in body, but in character.  In short: a perfect doorstep.&lt;/p&gt;&#xA;&lt;p&gt;I spotted it floating in a weir and thought &amp;rsquo;that would make a fine doorstep&amp;rsquo;. We shan&amp;rsquo;t dwell on the story of how I hoisted it out of the river and, in exchange, lost my brand new, favourite, and first ever, pair of sunglasses. Suffice it to say, it took a length of rope, a boat hook and about ten minutes (it also took something else, but I can always get another pair next time I visit Massachusetts).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why I&#39;m giving up on Facebook</title>
      <link>https://blog.afandian.com/2017/01/why-i-am-giving-up-on-facebook/</link>
      <pubDate>Sun, 22 Jan 2017 22:00:00 +0000</pubDate>
      <guid>https://blog.afandian.com/2017/01/why-i-am-giving-up-on-facebook/</guid>
      <description>&lt;p&gt;One of my new year&amp;rsquo;s resolutions is to try and be more intentional about the way I lead my life. That includes a close look at habits and deeply wired-in behaviours.&lt;/p&gt;&#xA;&lt;p&gt;Last year I had the epiphany that whilst chocolate, ginger nuts, IRN BRU and sugary comestibles were very enticing and almost unthinkable to give up, I&amp;rsquo;m far better off without them in my life. I&amp;rsquo;ve known this for at least 15 years, but last summer I actually did something about it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Snowing now, is it?</title>
      <link>https://blog.afandian.com/2017/01/snowing-now-is-it/</link>
      <pubDate>Fri, 13 Jan 2017 22:00:00 +0000</pubDate>
      <guid>https://blog.afandian.com/2017/01/snowing-now-is-it/</guid>
      <description>&lt;p&gt;My wife sent me an email. It conveyed words to the effect:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It is snowing!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I replied:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is it now&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;We make a point of sending each other grammatically ambigious emails.&lt;/p&gt;&#xA;&lt;p&gt;And that made me realise that in the sentence&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;Now it is snowing&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;has at least two levels of word-order to contend with.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Talking to teams in different timezones: an idea</title>
      <link>https://blog.afandian.com/2016/12/talking-to-teams-in-different-timezones/</link>
      <pubDate>Thu, 01 Dec 2016 22:00:00 +0000</pubDate>
      <guid>https://blog.afandian.com/2016/12/talking-to-teams-in-different-timezones/</guid>
      <description>&lt;p&gt;Working with colleagues spread across Massachusetts, New York, California, Oxfordshire, London, Britanny, Victoria, Lower Saxony (and that&amp;rsquo;s when they&amp;rsquo;re not travelling) means that face-to-face conversations aren&amp;rsquo;t universally available. Instant messaging is good because it&amp;rsquo;s the next-best thing to direct contact.&lt;/p&gt;&#xA;&lt;p&gt;With geographical distance comes timezone distance. Before the invention of immediate communication this was a self-correcting problem (most people can&amp;rsquo;t shout over more than two timezones). Of course, when one simply has to type into a computer (caps-lock for shouting) one must be sensitive to the timezone of one&amp;rsquo;s correspondent. Easy advice to give, but also easy to forget. Slack, like any long-distance communication medium, has the effect of reducing people to avatars somewhat.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Login and favourites are being removed from FolkTuneFinder</title>
      <link>https://blog.afandian.com/2016/11/folktunefinder-login-removed/</link>
      <pubDate>Mon, 14 Nov 2016 22:00:00 +0000</pubDate>
      <guid>https://blog.afandian.com/2016/11/folktunefinder-login-removed/</guid>
      <description>&lt;p&gt;&lt;strong&gt;On November 30th 2016, the login feature of FolkTuneFinder.com will be removed, and you will no longer be able to use favourites and group tunelists.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;One month ago I wrote the a blog post about &lt;a href=&#34;http://blog.afandian.com/2016/16/removing-favourites-on-folktunefinder/&#34;&gt;sign-in on FolkTuneFinder&lt;/a&gt; and placed a message on the site. I also put word out on the &lt;a href=&#34;https://www.facebook.com/folktunefinder&#34;&gt;FolkTuneFinder Facebook page&lt;/a&gt;. Since then I have recieved only two messages. There are 5,367 accounts on FolkTuneFinder. Some of them are spam, but some of them are real users who log in and use favourites.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Royal Mint &#34;most secure coin in the world&#34; website is insecure</title>
      <link>https://blog.afandian.com/2016/10/pound-coin-security-website-insecure/</link>
      <pubDate>Mon, 31 Oct 2016 22:00:00 +0000</pubDate>
      <guid>https://blog.afandian.com/2016/10/pound-coin-security-website-insecure/</guid>
      <description>&lt;p&gt;The Royal Mint are launching a new pound coin. It&amp;rsquo;s&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The most secure coin in the world&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;according to their website. I saw it linked from BBC news.&lt;/p&gt;&#xA;&lt;img class=&#34;img-responsive&#34; src=&#34;https://blog.afandian.com/images/2016/10/pound-coin/bbc.png&#34;&gt;&#xA;&lt;p&gt;The site looks good. It&amp;rsquo;s all about how businesses should look out for the new coin and adjust their security practices.&lt;/p&gt;&#xA;&lt;img class=&#34;img-responsive&#34; src=&#34;https://blog.afandian.com/images/2016/10/pound-coin/site.png&#34;&gt;&#xA;&lt;p&gt;It goes into some detail about just quite how secure this coin is. They&amp;rsquo;ve obviously put a lot of thought, time and energy into the micro-lettering and latent image.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I got a BQ Aquaris M10 Ubuntu tablet</title>
      <link>https://blog.afandian.com/2016/04/i-got-a-bq-aquaris-m10-ubuntu-tablet/</link>
      <pubDate>Tue, 26 Apr 2016 22:06:36 +0000</pubDate>
      <guid>https://blog.afandian.com/2016/04/i-got-a-bq-aquaris-m10-ubuntu-tablet/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m sitting on the bus writing this on my BQ Aquaris M10 Ubuntu edition tablet. It promises &amp;lsquo;full convergence&amp;rsquo; so, taking it on face value, I thought I&amp;rsquo;d start typing a blog post using the on-screen keyboard at work then continue with a bluetooth keyboard once I get home.&lt;/p&gt;&#xA;&lt;p&gt;The tablet ships with LibreOffice, gEdit, mystery &amp;lsquo;browser&amp;rsquo; and Firefox which might be used to access Google Docs. But I&amp;rsquo;m not using any of those to write this blog post. I am instead using the Notes app, for reasons I&amp;rsquo;ll come to.&lt;/p&gt;&#xA;&lt;p&gt;These are my first impressions. All of them are honestly observed, but a couple turned out to be special cases. But they were all things I experienced.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Timelapse Beehive</title>
      <link>https://blog.afandian.com/2015/06/the-timelapse-beehive/</link>
      <pubDate>Thu, 25 Jun 2015 08:57:32 +0000</pubDate>
      <guid>https://blog.afandian.com/2015/06/the-timelapse-beehive/</guid>
      <description>&lt;p&gt;Some background to &lt;a style=&#34;font-size: 1.2em;&#34; href=&#34;http://timelapsebeehive.com&#34;&gt;timelapsebeehive.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve wanted to keep bees for 20 years, and I&amp;rsquo;m finally getting round to doing it. There&amp;rsquo;s a lot of nonsense going around about how it&amp;rsquo;s a new middle-class fad, but I recently dug this book out. It&amp;rsquo;s called the Golden Throng and it was printed in the 1940s.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Co-Operative Online Banking</title>
      <link>https://blog.afandian.com/2015/02/co-operative-online-banking/</link>
      <pubDate>Thu, 12 Feb 2015 18:42:00 +0000</pubDate>
      <guid>https://blog.afandian.com/2015/02/co-operative-online-banking/</guid>
      <description>&lt;p&gt;I bank with the Co-Operative bank. I know there was some awful mis-management in the past, but their heart is in the right place (I think) and they have ethical policies. I think it&amp;rsquo;s a good idea that they should exist, so I&amp;rsquo;m sticking with them.&lt;/p&gt;&#xA;&lt;p&gt;Recently they changed the user interface on their online banking. I don&amp;rsquo;t know why. I preferred the old one, but that&amp;rsquo;s &lt;a href=&#34;https://www.youtube.com/watch?v=pWdd6_ZxX8c&#34;&gt;just, like, my opinion&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;But the more I used it the more careless the design looks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comments on the Oxford Mail site are completely broken</title>
      <link>https://blog.afandian.com/2013/10/comments-on-the-oxford-mail-site-are-completely-broken/</link>
      <pubDate>Thu, 03 Oct 2013 20:20:31 +0000</pubDate>
      <guid>https://blog.afandian.com/2013/10/comments-on-the-oxford-mail-site-are-completely-broken/</guid>
      <description>&lt;p&gt;There&amp;rsquo;s something very odd going on with the comments on the Oxford Mail site. No disrespect to the paper, but I have a tough time tallying up likely size of readership with some of the behaviour seen on the site.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Photoshop Bug</title>
      <link>https://blog.afandian.com/2013/08/photoshop-bug/</link>
      <pubDate>Fri, 09 Aug 2013 21:14:35 +0000</pubDate>
      <guid>https://blog.afandian.com/2013/08/photoshop-bug/</guid>
      <description>&lt;p&gt;A fascinating bug in Adobe Photoshop. Presented here as a photographic essay. Bug report as photojournalism. I only created one triangle and moved it around a bit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interview Questions</title>
      <link>https://blog.afandian.com/2013/08/interview-questions/</link>
      <pubDate>Fri, 02 Aug 2013 12:46:56 +0000</pubDate>
      <guid>https://blog.afandian.com/2013/08/interview-questions/</guid>
      <description>&lt;p&gt;I have recently been on the job hunt (and come out of it with a new job, thanks for asking). I talked to a number of interesting organisations and answered a proportionally  interesting number of questions. No less interesting is that fact that nearly all of these questions, whilst being ideal interview material, were also the kind of questions that would come up every day as part of the job.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unit Testing in Go, talk at London Go Users Group</title>
      <link>https://blog.afandian.com/2013/05/unit-testing-in-go-talk-at-london-go-users-group/</link>
      <pubDate>Wed, 29 May 2013 10:47:14 +0000</pubDate>
      <guid>https://blog.afandian.com/2013/05/unit-testing-in-go-talk-at-london-go-users-group/</guid>
      <description>&lt;p&gt;A quick talk, the same content as given at Oxford Geek Nights in November 2012.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.afandian.com/images/2013/05/go-unit-testing-glug-handout.pdf&#34;&gt;Unit Testing in Go at GLUG : handout version&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Global object appears not to load in Play framework</title>
      <link>https://blog.afandian.com/2013/03/global-object-appears-not-to-load-in-play-framework/</link>
      <pubDate>Sat, 02 Mar 2013 13:45:44 +0000</pubDate>
      <guid>https://blog.afandian.com/2013/03/global-object-appears-not-to-load-in-play-framework/</guid>
      <description>&lt;p&gt;I was scratching my head for a bit over this one. Using Play Framework v 2.1.0 (Scala) in development mode I was defining my global object as per the &lt;a href=&#34;http://www.playframework.com/documentation/2.1.0/ScalaGlobal&#34;&gt;Scala Global documentation&lt;/a&gt;. But it wasn&amp;rsquo;t triggering (and, I thought, wasn&amp;rsquo;t being registered).&lt;/p&gt;</description>
    </item>
    <item>
      <title>OxLork perform at the Ashmolean</title>
      <link>https://blog.afandian.com/2013/02/oxlork-perform-at-the-ashmolean/</link>
      <pubDate>Sun, 24 Feb 2013 20:31:22 +0000</pubDate>
      <guid>https://blog.afandian.com/2013/02/oxlork-perform-at-the-ashmolean/</guid>
      <description>&lt;p&gt;OxLork, a band of musicians in possession of computers (and, I hope, an increasing knowledge of how to make new things with them) had a gig at the Ashmolean Museum on Friday. Very exciting.&lt;/p&gt;&#xA;&lt;img class=&#34;img-responsive&#34; src=&#34;https://blog.afandian.com/images/2013/02/IMAG1467.jpg&#34;  alt=&#34;&#34; /&gt;&#xA;&lt;img class=&#34;img-responsive&#34; src=&#34;https://blog.afandian.com/images/2013/02/IMAG1485.jpg&#34;  alt=&#34;&#34; /&gt;&#xA;&lt;img class=&#34;img-responsive&#34; src=&#34;https://blog.afandian.com/images/2013/02/IMAG1483.jpg&#34;  alt=&#34;&#34; /&gt;&#xA;&lt;img class=&#34;img-responsive&#34; src=&#34;https://blog.afandian.com/images/2013/02/IMAG1478.jpg&#34;  alt=&#34;&#34; /&gt;&#xA;&lt;img class=&#34;img-responsive&#34; src=&#34;https://blog.afandian.com/images/2013/02/IMAG1477.jpg&#34;  alt=&#34;&#34; /&gt;&#xA;&lt;img class=&#34;img-responsive&#34; src=&#34;https://blog.afandian.com/images/2013/02/IMAG1472.jpg&#34;  alt=&#34;&#34; /&gt;&#xA;&lt;img class=&#34;img-responsive&#34; src=&#34;https://blog.afandian.com/images/2013/02/IMAG1468.jpg&#34;  alt=&#34;&#34; /&gt;&#xA;&lt;p&gt;Not brilliant photos, but better than nothing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Visualising folk tune structures</title>
      <link>https://blog.afandian.com/2013/02/visualising-folk-tune-structures/</link>
      <pubDate>Mon, 18 Feb 2013 19:43:30 +0000</pubDate>
      <guid>https://blog.afandian.com/2013/02/visualising-folk-tune-structures/</guid>
      <description>&lt;p&gt;Traditional tunes have a particular shape to them. Many, especially northern European, have two parts, each repeated, possibly with first and second time bars. Within this arching structure that spans the tune in a few leaps, there are smaller repeated phrases, callbacks and variations. I remembered a visualisation I saw a long time ago which took a MIDI file and visualised the structure. I wanted to do something for the tunes in &lt;a href=&#34;http://folktunefinder.com&#34;&gt;FolkTuneFinder&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>All OxLork code samples online</title>
      <link>https://blog.afandian.com/2013/02/all-oxlork-code-samples-online/</link>
      <pubDate>Sat, 16 Feb 2013 16:06:57 +0000</pubDate>
      <guid>https://blog.afandian.com/2013/02/all-oxlork-code-samples-online/</guid>
      <description>&lt;p&gt;I am hosting all of the OxLork ChucK lecture code samples here: &lt;a href=&#34;https://github.com/afandian/oxlork-lecture-code&#34;&gt;https://github.com/afandian/oxlork-lecture-code&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>The trouble with buttons without captions</title>
      <link>https://blog.afandian.com/2013/01/the-trouble-with-buttons-without-captions/</link>
      <pubDate>Mon, 21 Jan 2013 19:11:45 +0000</pubDate>
      <guid>https://blog.afandian.com/2013/01/the-trouble-with-buttons-without-captions/</guid>
      <description>&lt;p&gt;It seems like everyone&amp;rsquo;s got their own idea about how to implement a fairly standard commonplace widget. All broadly consistent. With one exception.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using TASCAM US-122 audio/midi interface with Mountain Lion</title>
      <link>https://blog.afandian.com/2012/12/tascam-us-122-on-mountain-lion/</link>
      <pubDate>Sat, 08 Dec 2012 18:19:45 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/12/tascam-us-122-on-mountain-lion/</guid>
      <description>&lt;p&gt;(punchline: give up it won&amp;rsquo;t work but it&amp;rsquo;s an interesting story)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Oxford Laptop Orchestra – Lecture 4 — Modulation</title>
      <link>https://blog.afandian.com/2012/11/oxford-laptop-orchestra-lecture-4-modulation/</link>
      <pubDate>Sat, 10 Nov 2012 18:54:47 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/11/oxford-laptop-orchestra-lecture-4-modulation/</guid>
      <description>&lt;p&gt;This is number 4 in my series of lectures in &lt;a href=&#34;https://blog.afandian.com/tag/oxlork/&#34;&gt;music technology and ChucK to the Oxford Laptop Orchestra&lt;/a&gt;. Delivered on the 5th of November 2012 at the Faculty of Music. Give the first three a read before reading this.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;The content is complete here (except for a bit about Nyquist) so feel free to read this. But I intend to do a bit of copy-editing, and include sound samples before I declare it complete.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This week we look at low frequency oscillators, using them to modulate other oscillators and in the process how to do more than thing at once._&lt;/p&gt;</description>
    </item>
    <item>
      <title>Oxford Laptop Orchestra — Lecture 3 — Transcending Analogue</title>
      <link>https://blog.afandian.com/2012/11/oxford-laptop-orchestra-lecture-3-transcending-analogue/</link>
      <pubDate>Fri, 09 Nov 2012 21:35:54 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/11/oxford-laptop-orchestra-lecture-3-transcending-analogue/</guid>
      <description>&lt;p&gt;This is number 3 in my series of lectures in music technology and ChucK to the &lt;a href=&#34;https://blog.afandian.com/tag/oxlork&#34;&gt;Oxford Laptop Orchestra&lt;/a&gt;. Read the other two first. Sorry this blog post was a couple of weeks late. It&amp;rsquo;s quite substantial, but conceptually it underpins a lot of material. Persevere, read, ask questions.&lt;/p&gt;&#xA;&lt;p&gt;This week sees a bit of a philosophical turn as we contemplate what &amp;lsquo;digital&amp;rsquo; really means and how we can use it to play Bach on organ without having to build one first.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Oxford Laptop Orchestra – Lecture 2 – Control Structures and Timbres</title>
      <link>https://blog.afandian.com/2012/10/oxford-laptop-orchestra-lecture-2-control-structures-and-timbres/</link>
      <pubDate>Mon, 22 Oct 2012 21:00:38 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/10/oxford-laptop-orchestra-lecture-2-control-structures-and-timbres/</guid>
      <description>&lt;p&gt;This is number 2 in my series of lectures in &lt;a href=&#34;https://blog.afandian.com/tag/oxlork/&#34;&gt;music technology and ChucK to the Oxford Laptop Orchestra&lt;/a&gt;. Give the &lt;a href=&#34;https://blog.afandian.com/2012/10/oxford-laptop-orchestra-lecture-1-music-and-programming/&#34; title=&#34;Oxford Laptop Orchestra – Lecture 1 – Music and Programming&#34;&gt;first lecture&lt;/a&gt; a read before reading this.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.afandian.com/2012/10/oxford-laptop-orchestra-lecture-1-music-and-programming/&#34; title=&#34;Oxford Laptop Orchestra – Lecture 1 – Music and Programming&#34;&gt;Last week&lt;/a&gt; we took a look at why, in my opinion, music and programming are natural bedfellows. We talked about what a program actually is and how it relates to Western music notation. We compared structural features of music and computer programs. We pinned down what the words &amp;lsquo;analogue&amp;rsquo; and &amp;lsquo;digital&amp;rsquo; actually mean, how sound is transmitted, and finally we wrote a program that plays a tune.&lt;/p&gt;&#xA;&lt;p&gt;This week we&amp;rsquo;re going to continue down two parallel paths: more about the programming language and the nature of sound in general. The reason for all of this is to give you the tools to think about what you hear, apply analytical thought to the process of composition and creation, and to enable you to conceive of and make your own ChucK sounds.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Oxford Laptop Orchestra : Lecture 1 : Music and Programming</title>
      <link>https://blog.afandian.com/2012/10/oxford-laptop-orchestra-lecture-1-music-and-programming/</link>
      <pubDate>Wed, 17 Oct 2012 21:19:21 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/10/oxford-laptop-orchestra-lecture-1-music-and-programming/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m very excited to be involved with the nascent Oxford Laptop Orchestra. This project, run by and for students at the University of Oxford, follows on from the work of the Princeton Laptop Orchestra. PLOrk, as its known, and now OxLork, is an effort to reproduce the form of performance embodied by a real orchestra or chamber group — that is, a number of individuals performing in concert, in a certain arrangement in space — with modern advances in electroacoustic music.&lt;/p&gt;</description>
    </item>
    <item>
      <title>IndexError &#39;list index out of range&#39; in Django Admin</title>
      <link>https://blog.afandian.com/2012/08/indexerror-list-index-out-of-range-in-django-admin/</link>
      <pubDate>Wed, 22 Aug 2012 16:12:58 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/08/indexerror-list-index-out-of-range-in-django-admin/</guid>
      <description>&lt;p&gt;Have you just got an exception from Django saying:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;IndexError at /admin/mything/&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;list index out of range&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Sound file Plotter in Go using gosndfile / libsndfile</title>
      <link>https://blog.afandian.com/2012/07/sound-file-plotter-in-go-using-gosndfile-libsndfile/</link>
      <pubDate>Wed, 25 Jul 2012 21:27:46 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/07/sound-file-plotter-in-go-using-gosndfile-libsndfile/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s no secret that &lt;a href=&#34;http://golang.org/&#34;&gt;golang&lt;/a&gt; is my new favourite language. I&amp;rsquo;ve used it to implement the latest &lt;a href=&#34;http://www.folktunefinder.com&#34;&gt;folktunefinder&lt;/a&gt; search engine and really enjoyed it.&lt;/p&gt;&#xA;&lt;p&gt;On an unrelated note, whilst looking at what libraries are available I came across the &lt;a href=&#34;https://github.com/mkb218/gosndfile&#34;&gt;gosndfile&lt;/a&gt; library written by &lt;a href=&#34;http://nynex.hydrogenproject.com/&#34;&gt;Matt Kane&lt;/a&gt; / &lt;a href=&#34;http://twitter.com/nynexrepublic&#34;&gt;@nynexrepublic&lt;/a&gt;. It&amp;rsquo;s a wrapper for &lt;a href=&#34;http://www.mega-nerd.com/libsndfile/&#34;&gt;libsndfile&lt;/a&gt;, a C library for reading and writing sound files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Strange error in Go: &#39;fmt.Println not used&#39;</title>
      <link>https://blog.afandian.com/2012/07/strange-error-in-go-fmt-println-not-used/</link>
      <pubDate>Tue, 03 Jul 2012 11:42:37 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/07/strange-error-in-go-fmt-println-not-used/</guid>
      <description>&lt;p&gt;I had a mysterious error in a project in Go:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;myproject/types.go:89: fmt.Println not used&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If you declare a variable or import a package in Go, that&amp;rsquo;s a compiler error. Good thing too, in my opinion. But this one was puzzling. It wasn&amp;rsquo;t complaining about an imported package, it was complaining about a function within a package. As far as I&amp;rsquo;m aware, the syntax of Go allows only for importing a whole package (or sub-package) at a time, rather than members of that package (as Python does).&lt;/p&gt;&#xA;&lt;p&gt;The odd thing was that the error was reported on the last line of the file. The entire contents of that line was:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Mapping Live River Conditions on the Thames</title>
      <link>https://blog.afandian.com/2012/06/river-conditions-on-the-thames/</link>
      <pubDate>Sat, 23 Jun 2012 10:00:12 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/06/river-conditions-on-the-thames/</guid>
      <description>&lt;p&gt;I love going out on my boat and I do it as often as I possibly can. Unfortunately the recent rain has meant that I&amp;rsquo;ve been unable to as often as I&amp;rsquo;d like. If the current is too fast, it&amp;rsquo;s not sensible or safe to do it.&lt;/p&gt;&#xA;&lt;p&gt;The Environment Agency has an excellent site which gives live information. But I wanted to put it on a map. Cue an evening of hunting down coordinates of every lock on the non-tidal thames (Google data is surprisingly bad) and writing an app to take data out of the online service and put it on a map. It&amp;rsquo;s fun putting things on maps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trouble with local cross-domain Django cookies</title>
      <link>https://blog.afandian.com/2012/05/trouble-with-local-cross-domain-django-cookies/</link>
      <pubDate>Tue, 29 May 2012 23:44:55 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/05/trouble-with-local-cross-domain-django-cookies/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m working on a Django app which is able to serve content on a number of subdomains. The app has a number of sites, which appear as subdomains of the main domain. There&amp;rsquo;s some middleware to look things up from the request and do the right routing.&lt;/p&gt;&#xA;&lt;p&gt;In the wild the subdomains will be done with DNS, but for local development, I&amp;rsquo;m creating entries in my /etc/hosts such as &lt;em&gt;demosite.local,&lt;/em&gt; using &lt;em&gt;.local&lt;/em&gt; as my &amp;lsquo;main domain&amp;rsquo; locally.  After a colleague integrated some authentication code, I suddenly found I couldn&amp;rsquo;t log in on my development environment. It didn&amp;rsquo;t work with either the custom login screen or the Django admin. Very odd.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Subversion with PIP: Cannot find command &#39;svn&#39;</title>
      <link>https://blog.afandian.com/2012/05/using-subversion-with-pip-cannot-find-command-svn/</link>
      <pubDate>Mon, 28 May 2012 22:31:39 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/05/using-subversion-with-pip-cannot-find-command-svn/</guid>
      <description>&lt;p&gt;Came across this when deploying a Django app to a fresh VM, installing with Python PIP from a requirements file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Facebook JavaScript login doesn&#39;t work in Safari</title>
      <link>https://blog.afandian.com/2012/05/facebook-javascript-login-doesnt-work-in-safari/</link>
      <pubDate>Wed, 23 May 2012 09:23:15 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/05/facebook-javascript-login-doesnt-work-in-safari/</guid>
      <description>&lt;p&gt;I have been banging my proverbial head against a brick wall (or my actual head against a proverbial wall) for the best part of a few days, on and off, trying to find the cause of an inconsistency in behaviour between Safari and Chrome in a Facebook canvas app.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GET parameters in Facebook Canvas applications</title>
      <link>https://blog.afandian.com/2012/05/get-parameters-in-facebook-canvas-applications/</link>
      <pubDate>Wed, 09 May 2012 10:23:18 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/05/get-parameters-in-facebook-canvas-applications/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m developing a Facebook app at work and was stuck on an issue for a bit. This post is just a mental note, and to prevent &lt;a href=&#34;http://xkcd.com/979/&#34;&gt;this&lt;/a&gt; happening.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Almost identifying the music in a BBC trailer</title>
      <link>https://blog.afandian.com/2012/04/almost-identifying-the-music-in-a-bbc-trailer/</link>
      <pubDate>Tue, 24 Apr 2012 20:56:29 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/04/almost-identifying-the-music-in-a-bbc-trailer/</guid>
      <description>&lt;p&gt;The BBC love their esoteric, obscure electronic music. I think it all started with Sigur Rós in Planet Earth and proliferated from there. It&amp;rsquo;s even started creeping into BBC Radio 4 trailers now. The trailer for Will Self&amp;rsquo;s &amp;lsquo;&lt;em&gt;A Point of View: In Defence of Obscure Words&lt;/em&gt;&amp;rsquo; had just such a music bed. I decided that I would very much like to know what that music was.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crazy high CPU usage on Snow Leopard and a surprising culprit</title>
      <link>https://blog.afandian.com/2012/03/crazy-high-cpu-usage-on-snow-leopard-and-a-surprising-culprit/</link>
      <pubDate>Mon, 19 Mar 2012 21:21:59 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/03/crazy-high-cpu-usage-on-snow-leopard-and-a-surprising-culprit/</guid>
      <description>&lt;p&gt;After coming back from a team-building trip, I started to notice things were going a bit slow on my work laptop. I took it with me for casual emailing and working on the train, but spent about 4 days not really using it and certainly not &amp;lsquo;working&amp;rsquo; on it. It came out once to display the lyrics to a song about Pithivier, and once to check emails, but that was about it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>WordPress on Apache being Reverse Proxied by Nginx in an Endless Loop</title>
      <link>https://blog.afandian.com/2012/02/wordpress-on-apache-being-reverse-proxied-by-nginx/</link>
      <pubDate>Mon, 13 Feb 2012 14:52:25 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/02/wordpress-on-apache-being-reverse-proxied-by-nginx/</guid>
      <description>&lt;p&gt;I have a couple of WordPress installations running on Apache (on a non-80) port, and I&amp;rsquo;m reverse proxying them through nginx. Somewhere along the line WordPress is getting its knickers in a twist about the port not being the same as it expects. This results in WordPress going into an infinite redirect loop.&lt;/p&gt;&#xA;&lt;p&gt;To solve this, I put this in the nginx virtual server config:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;proxy_set_header Host $host;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Fixed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>In Which we Discover Some Rules About Python Scoping (which we already knew)</title>
      <link>https://blog.afandian.com/2012/02/in-which-we-discover-some-rules-about-python-scoping-which-we-already-knew/</link>
      <pubDate>Thu, 09 Feb 2012 22:00:06 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/02/in-which-we-discover-some-rules-about-python-scoping-which-we-already-knew/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve just been bitten by scoping in Python. If you gave me this code and asked me what it did, I&amp;rsquo;d probably guess that it was a trick question and look carefully at it. What would you say?&lt;/p&gt;&#xA;&lt;pre&gt;def demo():&#xA;number = 100&#xA;one = number / 100&#xA;&#xA;numbers = [one, one+1, one+2]&#xA;big_numbers = [number * 100 for number in numbers]&#xA;bigger_numbers = [big_number * 100 for big_number in big_numbers]&#xA;print number&lt;/pre&gt;&#xA;&lt;p&gt; &lt;/p&gt;</description>
    </item>
    <item>
      <title>From La Mantovana to the Moldau. Musical similarity in the absence of rhythm and what it means to FolkTuneFinder</title>
      <link>https://blog.afandian.com/2012/01/from-la-mantovana-to-the-moldau-musical-similarity-and-what-it-means-to-folktunefinder/</link>
      <pubDate>Fri, 27 Jan 2012 22:24:54 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/01/from-la-mantovana-to-the-moldau-musical-similarity-and-what-it-means-to-folktunefinder/</guid>
      <description>&lt;p&gt;&lt;em&gt;Má Vlast&lt;/em&gt; is a set of pieces written by the composer Smetana in the late 1800s about his homeland, Czechoslovakia. One of the pieces in the set, &lt;em&gt;The Moldau&lt;/em&gt; (&lt;em&gt;Vltava&lt;/em&gt; in Czech) is one of my favourite symphonies of all time ever. It could be something in my partially Czech blood, it could be the fact that I&amp;rsquo;m soppy about Romantic-period orchestral music, whatever it is, I love this piece of music and know it intimately.&lt;/p&gt;</description>
    </item>
    <item>
      <title>FolkTuneFinder index building used to be expensive</title>
      <link>https://blog.afandian.com/2012/01/folktunefinder-index-building-used-to-be-expensive/</link>
      <pubDate>Thu, 05 Jan 2012 23:44:01 +0000</pubDate>
      <guid>https://blog.afandian.com/2012/01/folktunefinder-index-building-used-to-be-expensive/</guid>
      <description>&lt;p&gt;The first version of FolkTuneFinder was written in a combination of Java and PHP. I was still working out the best way to do melodic indexing, and the index build process was parallelised. The job ran across 14 Apple Xserves, made available to me by my university. That was back in 2008. These days it runs in a single virtual machine … somewhere.&lt;/p&gt;&#xA;&lt;img class=&#34;img-responsive&#34; title=&#34;FolkTuneFinder Xserve cluster&#34; src=&#34;https://blog.afandian.com/images/2012/01/cluster-11.jpg&#34; alt=&#34;&#34;  /&gt;</description>
    </item>
    <item>
      <title>Recent downtime on FolkTuneFinder.com</title>
      <link>https://blog.afandian.com/2011/11/recent-downtime-on-folktunefinder-com/</link>
      <pubDate>Tue, 22 Nov 2011 22:54:26 +0000</pubDate>
      <guid>https://blog.afandian.com/2011/11/recent-downtime-on-folktunefinder-com/</guid>
      <description>&lt;p&gt;I started &lt;a href=&#34;http://folktunefinder.com&#34; title=&#34;FolkTuneFinder&#34;&gt;FolkTuneFinder&lt;/a&gt; as a student project back in 2008. I&amp;rsquo;d done websites for a few years before, but this was the first serious one with any kind of heavy lifting or interesting behaviour. Over the years I added features that allowed people to interact, such as the commenting and FolkTuneFinder blogs, which has been surprisingly popular.&lt;/p&gt;&#xA;&lt;p&gt;I have always had a very small problem with spam: I received perhaps a small handful of blog posts a month, which was fine to deal with. It wasn&amp;rsquo;t a problem, and the most time-effective way of dealing with it was to delete the posts when they arose. There has always been a battle with spare time, and various interesting things have happened to me since 2008 meaning that I haven&amp;rsquo;t quite had as much time as I&amp;rsquo;d like.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Storing integers in Redis</title>
      <link>https://blog.afandian.com/2011/11/storing-integers-in-redis/</link>
      <pubDate>Fri, 04 Nov 2011 12:00:02 +0000</pubDate>
      <guid>https://blog.afandian.com/2011/11/storing-integers-in-redis/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been looking into Redis. I wondered about storing integers as keys and values rather than plain old strings. After &lt;a href=&#34;http://stackoverflow.com/questions/7973228/storing-integers-in-a-redis-ordered-set/7994995&#34;&gt;asking on Stackoverflow&lt;/a&gt;, I did my own experiments.&lt;/p&gt;&#xA;&lt;p&gt;It looks like it is possible to use any byte string as a key.&lt;/p&gt;&#xA;&lt;p&gt;For my application&amp;rsquo;s case it actually didn&amp;rsquo;t make that much difference storing the strings or the integers. I imagine that the structure in Redis undergoes some kind of alignment anyway, so there may be some pre-wasted bytes anyway. The value is hashed in any case.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Typing on a one-row keyboard possible?</title>
      <link>https://blog.afandian.com/2011/10/typing-on-a-one-row-keyboard/</link>
      <pubDate>Fri, 28 Oct 2011 12:12:42 +0000</pubDate>
      <guid>https://blog.afandian.com/2011/10/typing-on-a-one-row-keyboard/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve seen a number of special computer keyboards. These include, for example, five-finger units that require learning special &amp;lsquo;chords&amp;rsquo;. The idea of a one-handed keyboard is enticing but I don&amp;rsquo;t like the sound of having to learn specific combinations. What about re-using existing knowledge?&lt;/p&gt;&#xA;&lt;p&gt;Anyone who touch-types knows that each letter belongs to a given finger. I wondered what would happen if you restricted the keyboard to just one row (i.e. one button for each finger) whether this would make a functioning concept.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crazy Idea: Physical haptic feedback of progress through an ebook</title>
      <link>https://blog.afandian.com/2011/10/crazy-idea-physical-feedback-of-progress-through-an-ebook/</link>
      <pubDate>Wed, 26 Oct 2011 15:21:05 +0000</pubDate>
      <guid>https://blog.afandian.com/2011/10/crazy-idea-physical-feedback-of-progress-through-an-ebook/</guid>
      <description>&lt;p&gt;Haptic feedback is still an area where real books win over e-book readers such as Kindles. Being able to tell how far through a book you are by the feel of it, by the balance and thickness of the pages adds something instinctive to the reading process.&lt;/p&gt;&#xA;&lt;p&gt;My idea is to have a little linear actuator with a small weight on it that spans the width of the ebook device. Just a very small motor (the type you get in phone vibrators) and a small worm-gear (like you get in floppy disk drives) would do, and wouldn&amp;rsquo;t take up much space. The weight would gradually move across from left to right as you moved through the book. This would allow you to assess your progress through whatever tome  you were currently reading just by feel.&lt;/p&gt;</description>
    </item>
    <item>
      <title>things</title>
      <link>https://blog.afandian.com/2011/10/127/</link>
      <pubDate>Sun, 23 Oct 2011 22:56:59 +0000</pubDate>
      <guid>https://blog.afandian.com/2011/10/127/</guid>
      <description>&lt;p&gt;&lt;canvas id=&#34;canvas&#34;  style=&#34;background-color: #e0ff00; z-index: 1000;&#34; onclick=&#34;spatter();&#34; width=&#34;800&#34; height=&#34;200&#34;&gt;&lt;/canvas&gt;&lt;/p&gt;&#xA;&lt;script&gt;&#xA;var big = false;&#xA;&#x9;&#xA;// Num nodes&#xA;var NODE_COUNT = 50;&#xA;&#xA;// Radius, anything closer than this becomes a neighbour.&#xA;var NEIGHBOUR_PROXIMITY = 20;&#xA;&#xA;// Flat array of x, y, dx, dy.&#xA;var nodes = Array(NODE_COUNT);&#xA;&#xA;// Flat array of flavours for each node.&#xA;var flavours = Array(NODE_COUNT);&#xA;&#xA;// Flat array of neighbours, proximity for each node.&#xA;var neighbours = Array(NODE_COUNT);&#xA;&#xA;var canvas = document.getElementById(&#39;canvas&#39;); &#xA;var context = canvas.getContext(&#34;2d&#34;);&#xA;&#xA;var width = canvas.width;&#xA;var height = canvas.height;&#xA;&#xA;function setupNodes()&#xA;{&#xA;&#x9;populate(0, NODE_COUNT);&#xA;}&#xA;&#xA;function spatter()&#xA;{&#xA;&#x9;var old = NODE_COUNT;&#xA;&#x9;NODE_COUNT += 10;&#xA;&#x9;&#xA;&#x9;populate(old, NODE_COUNT);&#xA;}&#xA;&#xA;function populate(l, u)&#xA;{&#xA;var i;    &#xA;for(i = l; i &lt; u; i++)&#xA;{&#xA;nodes[i*4+0] = Math.random() * width;&#xA;nodes[i*4+1] = Math.random() * height;&#xA;nodes[i*4+2] = Math.random() * 0.5;&#xA;nodes[i*4+3] = Math.random() * 0.5;        &#xA;flavours[i] = Math.floor(Math.random() * 3);&#xA;&#x9;        neighbours[i] = [];&#xA;}    &#xA;}&#xA;&#xA;function draw()&#xA;{&#xA;canvas.width = canvas.width&#xA;&#xA;var node;&#xA;var nodeNeighbours;&#xA;&#x9;&#xA;&#x9;context.lineWidth = &#34;2&#34;;&#xA;for (node = 0; node &lt; NODE_COUNT; node++)&#xA;{&#xA;nodeNeighbours = neighbours[node];&#xA;&#xA;var neighbour;&#xA;for (neighbour = 0; neighbour &lt; nodeNeighbours.length / 2; neighbour++)&#xA;{&#xA;// Black for same flavour, red for different.&#xA;if (flavours[node] == flavours[nodeNeighbours[neighbour*2+0]])&#xA;{&#xA;context.strokeStyle = &#34;rgba(0,0,0, &#34; + (1 - nodeNeighbours[neighbour*2+1]) + &#34;)&#34;;&#xA;}&#xA;else&#xA;{&#xA;context.strokeStyle = &#34;rgba(255,0,0, &#34; + (1 - nodeNeighbours[neighbour*2+1]) + &#34;)&#34;;&#xA;}&#xA;&#xA;context.beginPath();&#xA;context.moveTo(nodes[node*4+0], nodes[node*4+1]);  &#xA;context.lineTo(nodes[nodeNeighbours[neighbour*2+0]*4+0], nodes[nodeNeighbours[neighbour*2+0]*4+1]);  &#xA;context.closePath();  &#xA;context.stroke();&#xA;}        &#xA;}&#xA;&#xA;for (node = 0; node &lt; NODE_COUNT; node++)&#xA;{&#xA;&#xA;switch (flavours[node])&#xA;{&#xA;case 0:&#xA;context.fillStyle = &#34;rgb(150,0,0)&#34;;&#xA;break;&#xA;case 1:&#xA;context.fillStyle = &#34;rgb(0,150,0)&#34;;&#xA;break;&#xA;case 2:&#xA;context.fillStyle = &#34;rgb(0,0,150)&#34;;&#xA;break;&#xA;&#xA;}&#xA;&#xA;context.fillRect(nodes[node*4+0]-3, nodes[node*4+1]-3, 6, 6);&#xA;}&#xA;&#xA;window.setTimeout(function(){draw();}, 50)&#xA;}&#xA;&#xA;function tick()&#xA;{&#xA;var node;&#xA;for (node = 0; node &lt; NODE_COUNT; node++)&#xA;{&#xA;nodes[node*4+0] += nodes[node*4+2];&#xA;nodes[node*4+1] += nodes[node*4+3];&#xA;&#xA;// Bounce off the edges.&#xA;if (nodes[node*4+0] &lt; 0 &amp;&amp; nodes[node*4+2] &lt; 0)&#xA;{&#xA;nodes[node*4+2] *= -1;&#xA;}&#xA;&#xA;if (nodes[node*4+0] &gt; width &amp;&amp; nodes[node*4+2] &gt; 0)&#xA;{&#xA;nodes[node*4+2] *= -1;&#xA;}&#xA;&#xA;if (nodes[node*4+1] &lt; 0 &amp;&amp; nodes[node*4+3] &lt; 0)&#xA;{&#xA;nodes[node*4+3] *= -1;&#xA;}&#xA;&#xA;if (nodes[node*4+1] &gt; height &amp; nodes[node*4+3] &gt; 0)&#xA;{&#xA;nodes[node*4+3] *= -1;&#xA;}&#xA;}&#xA;&#xA;window.setTimeout(function(){tick();}, 50)&#xA;}&#xA;&#xA;// Refresh neighbours for each node&#xA;function calculateNeighbours()&#xA;{&#xA;var node;&#xA;for (node = 0; node &lt; NODE_COUNT; node++)&#xA;{&#xA;newNeighbours = [];&#xA;&#xA;var dx = 0;&#xA;var dy = 0;&#xA;&#xA;var lx = nodes[node*4+0] - NEIGHBOUR_PROXIMITY;&#xA;var hx = nodes[node*4+0] + NEIGHBOUR_PROXIMITY;&#xA;&#xA;var ly = nodes[node*4+1] - NEIGHBOUR_PROXIMITY;&#xA;var hy = nodes[node*4+1] + NEIGHBOUR_PROXIMITY;&#xA;&#xA;for (neighbour = 0; neighbour &lt; NODE_COUNT; neighbour++)&#xA;{&#xA;if (nodes[neighbour*4+0] &gt; lx &amp;&amp;&#xA;nodes[neighbour*4+0] &lt; hx &amp;&amp;&#xA;nodes[neighbour*4+1] &gt; ly &amp;&amp;&#xA;nodes[neighbour*4+1] &lt; hy &#xA;)&#xA;{&#xA;newNeighbours.push(neighbour);&#xA;var distanceX = Math.abs(nodes[node*4+0] - nodes[neighbour*4+0]);&#xA;var distanceY = Math.abs(nodes[node*4+1] - nodes[neighbour*4+1]);&#xA;&#xA;newNeighbours.push(((distanceX + distanceY) / 2) / NEIGHBOUR_PROXIMITY);&#xA;&#xA;// Different flavours repel, same attract.&#xA;if (flavours[neighbour] == flavours[node])&#xA;{&#xA;dx += nodes[neighbour*4+0] - nodes[node*4+0] ;&#xA;dy += nodes[neighbour*4+1] - nodes[node*4+1];&#xA;}&#xA;else&#xA;{&#xA;dx -= nodes[neighbour*4+0] - nodes[node*4+0];&#xA;dy -= nodes[neighbour*4+1] - nodes[node*4+1];&#xA;}&#xA;}                &#xA;}&#xA;&#xA;neighbours[node] = newNeighbours;&#xA;nodes[node*4+2] *= 1 + (dx / 100);&#xA;nodes[node*4+3] *= 1 + (dy / 100);&#xA;&#xA;// Dampen things a little.&#xA;nodes[node*4+2] *= 0.995;&#xA;nodes[node*4+3] *= 0.995;&#xA;&#x9;&#x9;&#x9;&#xA;&#x9;&#x9;&#x9;// And kill off the over excitable.&#xA;&#x9;&#x9;&#x9;if ((nodes[node*4+2] &gt; 10) || (nodes[node*4+3] &gt; 10))&#xA;&#x9;&#x9;&#x9;{&#xA;&#x9;&#x9;&#x9;&#x9;nodes[node*4+2] = 0.001;&#xA;&#x9;&#x9;&#x9;&#x9;nodes[node*4+3] = 0.001;&#xA;&#x9;&#x9;&#x9;}&#xA;&#xA;}&#xA;&#xA;window.setTimeout(function(){calculateNeighbours()}, 50);&#xA;}&#xA;&#xA;setupNodes();&#xA;tick();&#xA;calculateNeighbours();&#xA;&#xA;draw();&#xA;&#xA;&lt;/script&gt;&#xA;&lt;p&gt;Don&amp;rsquo;t ask me what this does.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Guess the Icon!</title>
      <link>https://blog.afandian.com/2010/11/guess-the-icon/</link>
      <pubDate>Mon, 01 Nov 2010 16:28:55 +0000</pubDate>
      <guid>https://blog.afandian.com/2010/11/guess-the-icon/</guid>
      <description>&lt;p&gt;Microsoft Windows sets the bar high for software developers. Their standards of usability and UI consistency are something that few developers are fully able to attain.&lt;/p&gt;&#xA;&lt;p&gt;With that in mind I present to you…&lt;/p&gt;&#xA;&lt;h3 id=&#34;guess-the-icon&#34;&gt;Guess the icon!&lt;/h3&gt;&#xA;&lt;p&gt;What&amp;rsquo;s this&lt;/p&gt;&#xA;&lt;img class=&#34;img-responsive&#34; title=&#34;guess&#34; src=&#34;https://blog.afandian.com/images/2011/10/guess-300x145.png&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;p&gt;Yes, you guessed it, it&amp;rsquo;s Intel&amp;rsquo;s Active Management Technology Status. And it&amp;rsquo;s disabled.&lt;/p&gt;&#xA;&lt;img class=&#34;img-responsive&#34; title=&#34;guess2&#34; src=&#34;https://blog.afandian.com/images/2011/10/guess2-300x61.png&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;p&gt;Not that you&amp;rsquo;d know.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
