<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="pretty-atom-feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Blog Title</title>
  <subtitle>This is a longer description about your blog.</subtitle>
  <link href="https://example.com/feed/feed.xml" rel="self" />
  <link href="https://example.com/" />
  <updated>2025-09-10T00:00:00Z</updated>
  <id>https://example.com/</id>
  <author>
    <name>Your Name</name>
  </author>
  <entry>
    <title>Three Es</title>
    <link href="https://example.com/blog/2025/09/three-es/" />
    <updated>2025-09-10T00:00:00Z</updated>
    <id>https://example.com/blog/2025/09/three-es/</id>
    <content type="html">&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://example.com/blog/2025/09/three-es/Q2hKlE0EH6-240.avif 240w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://example.com/blog/2025/09/three-es/Q2hKlE0EH6-240.webp 240w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://example.com/blog/2025/09/three-es/Q2hKlE0EH6-240.svg&quot; alt=&quot;SVG of 1980s calculator created by Claude.ai&quot; width=&quot;240&quot; height=&quot;320&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Ive read a couple of pieces recently expressing concerns about cognitive unloading that reminds me of being at school in the UK in the 1980s.  At that time calculators were first being introduced to the classroom and the concern was similar.&lt;/p&gt;
&lt;p&gt;To counter this concern and to teach good practice we were introduced to using calculators along with the &amp;quot;three Es&amp;quot;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Estimate&lt;/li&gt;
&lt;li&gt;Evaluate&lt;/li&gt;
&lt;li&gt;Evaluate&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When making a calculation we were taught to first estimate the expected result, then evaluate it, write it down (if it was in the right ballpark) and then evaluate it again to ensure you didnt make a mistake.   If it wasnt in the right ballpark, maybe you were calculating it incorrectly so go back and check your estimate and your approach.   If the two values were the same, then you could proceed, but if not you needed to run it again until you got the same result twice.&lt;/p&gt;
&lt;p&gt;Im not sure if the same is still taught today but it has been quite useful to me over the years.  Perhaps a similar pedagogical approach could be used with LLMs.  i.e. if you&#39;re writing something, plan it out or sketch it first before prompting (ideally with the plan).  Also double check any facts and references provided by the LLM.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Bye bye Wordpress</title>
    <link href="https://example.com/blog/2025/08/bye-bye-wordpress/" />
    <updated>2025-08-25T00:00:00Z</updated>
    <id>https://example.com/blog/2025/08/bye-bye-wordpress/</id>
    <content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://example.com/blog/2025/08/bye-bye-wordpress/9VrfByKMu9-1834.avif 1834w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://example.com/blog/2025/08/bye-bye-wordpress/9VrfByKMu9-1834.webp 1834w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://example.com/blog/2025/08/bye-bye-wordpress/9VrfByKMu9-1834.png&quot; alt=&quot;&quot; width=&quot;1834&quot; height=&quot;2420&quot;&gt;&lt;/picture&gt;&lt;/td&gt;
&lt;td&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://example.com/blog/2025/08/bye-bye-wordpress/Ek5dRIP6OQ-1834.avif 1834w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://example.com/blog/2025/08/bye-bye-wordpress/Ek5dRIP6OQ-1834.webp 1834w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://example.com/blog/2025/08/bye-bye-wordpress/Ek5dRIP6OQ-1834.png&quot; alt=&quot;&quot; width=&quot;1834&quot; height=&quot;2420&quot;&gt;&lt;/picture&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This blog has been hosted on Wordpress since 2007 and was self hosted until a few years ago when I migrated to wordpress.com.  But last year at renewal I felt that the time had come to migrate to an old school static web framework and added this task to my list.  This year as renewal approached I got my finger out and completed the task.&lt;/p&gt;
&lt;p&gt;Last year I had originally looked at using &lt;a href=&quot;https://jekyllrb.com/&quot;&gt;jekyll&lt;/a&gt; with &lt;a href=&quot;https://docs.github.com/en/pages&quot;&gt;github-pages&lt;/a&gt; but this wasnt easy for several reasons.  Firstly, these days Im much more familiar with the node ecosystem than ruby.  Secondly wordpress required extra money to enable the jekyll export (which was an unwelcome surprise) and thirdly, github didnt like the latest version of jekyll.  So this year I ended up using &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;Eleventy&lt;/a&gt;, having seen it being used in &lt;a href=&quot;https://kaleidawave.github.io/&quot;&gt;Ben&#39;s engineering blog&lt;/a&gt; and &lt;a href=&quot;https://webawesome.com/&quot;&gt;webawesome&lt;/a&gt; (previously called shoelace) and thought it looked decent.  The migration was quite straightforward and much helped by two projects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lonekorean/wordpress-export-to-markdown&quot;&gt;https://github.com/lonekorean/wordpress-export-to-markdown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/11ty/eleventy-base-blog&quot;&gt;https://github.com/11ty/eleventy-base-blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I was able to create an xml export from wordpress and then use the first project to process that xml file into markdown files and then copy/paste those files into the second default blog project.  I updated the export-to-markdown project to add dates to drafts (I was surprised by the number of drafts I had - they overwhelmed the live posts in dev mode) and I tweaked the base-blog to show the number of posts for each tag in the tags page.&lt;/p&gt;
&lt;p&gt;Some reflections on this process include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;a href=&quot;https://web.archive.org/&quot;&gt;wayback machine&lt;/a&gt; is awesome (used to recover image files that had been lost at some point)&lt;/li&gt;
&lt;li&gt;the 11ty engine doesnt pickup raw urls and make them clickable&lt;/li&gt;
&lt;li&gt;the export file from wordpress contains comments and it would be great to show them here&lt;/li&gt;
&lt;li&gt;new comments / contact should be made via social media&lt;/li&gt;
&lt;li&gt;is it 11ty or eleventy?&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Markwhen</title>
    <link href="https://example.com/blog/2024/12/markwhen/" />
    <updated>2024-12-08T00:00:00Z</updated>
    <id>https://example.com/blog/2024/12/markwhen/</id>
    <content type="html">&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://example.com/blog/2024/12/markwhen/a4XN6SjqMg-1023.avif 1023w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://example.com/blog/2024/12/markwhen/a4XN6SjqMg-1023.webp 1023w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://example.com/blog/2024/12/markwhen/a4XN6SjqMg-1023.png&quot; alt=&quot;&quot; width=&quot;1023&quot; height=&quot;470&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://markwhen.com/&quot;&gt;https://markwhen.com/&lt;/a&gt; is a beautiful website for an interesting project. The comments in the &lt;a href=&quot;https://news.ycombinator.com/item?id=42289690&quot;&gt;nyc&lt;/a&gt; thread that drew my attention to it led me down a rabbit hole of coding horror posts from a decade ago that Id missed or forgotten:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.codinghorror.com/responsible-open-source-code-parenting/&quot;&gt;https://blog.codinghorror.com/responsible-open-source-code-parenting/&lt;/a&gt; - 29 Dec 2009&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.codinghorror.com/standard-flavored-markdown/&quot;&gt;https://blog.codinghorror.com/standard-flavored-markdown/&lt;/a&gt; - 3 Sep 2014&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.codinghorror.com/standard-markdown-is-now-common-markdown/&quot;&gt;https://blog.codinghorror.com/standard-markdown-is-now-common-markdown/&lt;/a&gt; - 4 Sep 2014&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this series of posts Jeff Atwood first laments the lack of a specification for markdown, then announces that as a result of that first post a consortium of players has now build an standardised library and then within twenty four hours has renamed that library to commonmark when John Gruber the inventor of Markdown expresses his displeasure. Jeff Atwood played a blinder in that series of posts, as was often the case on coding horror in those days. It was nice to see the Meteor team get a call out in the second post.&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://example.com/blog/2024/12/markwhen/GD0KFIOxGx-1022.avif 1022w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://example.com/blog/2024/12/markwhen/GD0KFIOxGx-1022.webp 1022w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://example.com/blog/2024/12/markwhen/GD0KFIOxGx-1022.png&quot; alt=&quot;&quot; width=&quot;1022&quot; height=&quot;548&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;The Markwhen example. Does it have too many features? Could it be that John Gruber&#39;s light touch / benign neglect management style helped markdown, at least in the early days.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Another thing I got from the comments and that I had forgotten about is &lt;a href=&quot;https://docs.markwhen.com/syntax/dates-and-ranges&quot;&gt;EDTF&lt;/a&gt; (Extended Date Time Format) which is worth knowing about.&lt;/p&gt;
&lt;p&gt;Finally, &lt;a href=&quot;https://mermaid.js.org/&quot;&gt;mermaid&lt;/a&gt; gantt and timeline diagrams are also well worth looking at for the same use case.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>JsonLogic</title>
    <link href="https://example.com/blog/2021/11/jsonlogic/" />
    <updated>2021-11-14T00:00:00Z</updated>
    <id>https://example.com/blog/2021/11/jsonlogic/</id>
    <content type="html">&lt;p&gt;I took a reasonably deep dive into &lt;a href=&quot;https://jsonlogic.com&quot;&gt;JsonLogic&lt;/a&gt; recently, evaluating it as a possible drop-in replacement for expression evaluation in &lt;a href=&quot;https://gitlab.com/openclinical/proformajs&quot;&gt;proformajs&lt;/a&gt;. In the process I got my hands dirty with &lt;a href=&quot;https://vuejs.org&quot;&gt;vue3&lt;/a&gt; and &lt;a href=&quot;https://getbootstrap.com&quot;&gt;bootstrap5&lt;/a&gt; to create a JsonLogic &lt;a href=&quot;https://mattsouth.github.io/json-logic-vue/?expr=!flag&amp;amp;context=%5B%7B%22name%22%3A%22flag%22%2C%22values%22%3A%5Bnull%2Cfalse%2Ctrue%5D%7D%5D&quot;&gt;sandbox&lt;/a&gt; along with a &lt;a href=&quot;https://github.com/mattsouth/json-logic-to-js&quot;&gt;library&lt;/a&gt; for serialising JsonLogic expressions that maybe useful.&lt;/p&gt;
&lt;p&gt;The library is indeed a suitable drop-in but the evaluation process has made me think twice of leveraging javascript expression semantics. Though it was a prudent time saving strategy at the time it was made, it may need reviewing.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Colour Diary</title>
    <link href="https://example.com/blog/2017/10/colour-diary/" />
    <updated>2017-10-01T00:00:00Z</updated>
    <id>https://example.com/blog/2017/10/colour-diary/</id>
    <content type="html">&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://example.com/blog/2017/10/colour-diary/K7DrFmGILX-180.avif 180w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://example.com/blog/2017/10/colour-diary/K7DrFmGILX-180.webp 180w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://example.com/blog/2017/10/colour-diary/K7DrFmGILX-180.png&quot; align=&quot;left&quot; alt=&quot;a screenshot of colourdiary app&quot; class=&quot;img-left-aligned&quot; width=&quot;180&quot; height=&quot;300&quot;&gt;&lt;/picture&gt; My family spent a week in Finland this summer as part of our summer holiday. One of the many highlights was a visit to the design museum in Helsinki which is excellent and well worth a visit if you go there. The ground floor was dedicated to the work of Margrethe Odgaard, an artist/artisan from Copenhagen who has an exquisite eye for colour, particularly, but not exclusively, in textiles. One of the things presented were &lt;a href=&quot;https://vimeo.com/205349549&quot;&gt;colour diaries&lt;/a&gt; that she’d kept on visits to Morocco and Cuba that were fascinating and beautiful. It gave me an idea for a simple phone app that I could build that would allow me to do the same thing, so I created it using &lt;a href=&quot;https://www.meteor.com/&quot;&gt;Meteor&lt;/a&gt;. If you have an android phone, you can download it for yourself from the &lt;a href=&quot;https://play.google.com/apps/testing/net.mattsouth.colourdiary&quot;&gt;Google Play store&lt;/a&gt;. It’s in beta because Ive not done this before and at the moment I only know that it works on my phone. I’d love to hear any feedback you might have.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Munin on Ubuntu</title>
    <link href="https://example.com/blog/2016/05/installing-munin-on-ubuntu/" />
    <updated>2016-05-24T00:00:00Z</updated>
    <id>https://example.com/blog/2016/05/installing-munin-on-ubuntu/</id>
    <content type="html">&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://example.com/blog/2016/05/installing-munin-on-ubuntu/hTDBm83xqi-199.avif 199w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://example.com/blog/2016/05/installing-munin-on-ubuntu/hTDBm83xqi-199.webp 199w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://example.com/blog/2016/05/installing-munin-on-ubuntu/hTDBm83xqi-199.png&quot; align=&quot;left&quot; class=&quot;img-left-aligned&quot; alt=&quot;munin logo&quot; width=&quot;199&quot; height=&quot;96&quot;&gt;&lt;/picture&gt; I like &lt;a href=&quot;http://munin-monitoring.org/&quot;&gt;munin&lt;/a&gt;.  It&#39;s an old school pluggable server monitoring framework that suffices well for my current purposes.  This week I installed it on a new ubuntu box and it wasnt as straight forward as I&#39;d hoped so here are some notes&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-install-the-munin-monitoring-tool-on-ubuntu-14-04&quot;&gt;These instructions&lt;/a&gt; will get you up and running but you wont get the rather useful dynamic zoom behaviour on the graphs and you&#39;ll have added an unnecessary level of indirection when you changed the web directory from /var/cache/munin/www /var/www/munin.  To get the dynamic zoom you need the &lt;em&gt;fcgid&lt;/em&gt; (fast cgi daemon) apache2 mod which in turn needs the &lt;em&gt;libapache2-mod-fcgid&lt;/em&gt; package.   Also you&#39;ll need the &lt;em&gt;libcgi-fast-perl&lt;/em&gt; package.  With these installed you just need to make a couple of small adjustments to the provided apache config and you&#39;ll be good to go.  I&#39;ve created an &lt;a href=&quot;https://gist.github.com/mattsouth/001228b74744fffa9d95705913cfcf0c&quot;&gt;ansible playbook&lt;/a&gt; to do this for you if that&#39;s your thing.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Coffeescript constructor options with defaults</title>
    <link href="https://example.com/blog/2013/12/coffeescript-constructor-options-with-defaults/" />
    <updated>2013-12-02T00:00:00Z</updated>
    <id>https://example.com/blog/2013/12/coffeescript-constructor-options-with-defaults/</id>
    <content type="html">&lt;p&gt;Coffeescript has a nice way of &lt;a href=&quot;http://coffeescript.org/#destructuring&quot;&gt;destructuring assignment&lt;/a&gt; in a class constructor, e.g.&lt;/p&gt;
&lt;pre class=&quot;language-coffeescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-coffeescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Person&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;options&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token class-member variable&quot;&gt;@name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-member variable&quot;&gt;@age&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-member variable&quot;&gt;@height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; options&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is elegant and efficient and has the additional benefit of explicitly communicating anticipated class attributes, cf:&lt;/p&gt;
&lt;pre class=&quot;language-coffeescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-coffeescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Person&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;options&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; key&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; val &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; options
      @&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; val&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;which allows any old thing to be added to your object (although admittedly this is sometimes desirable).&lt;/p&gt;
&lt;p&gt;Coffeescript also has a neat way of setting &lt;a href=&quot;http://coffeescript.org/#literals&quot;&gt;default values for functions&lt;/a&gt;, e.g.&lt;/p&gt;
&lt;pre class=&quot;language-coffeescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-coffeescript&quot;&gt;fill &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;container&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; liquid &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;coffee&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;Filling the &lt;span class=&quot;token interpolation variable&quot;&gt;#{container}&lt;/span&gt; with &lt;span class=&quot;token interpolation variable&quot;&gt;#{liquid}&lt;/span&gt;...&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But this pattern doesnt seem to transfer to destructuring class assignment.  I can&#39;t for instance use any of these approaches:&lt;/p&gt;
&lt;pre class=&quot;language-coffeescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-coffeescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Person&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;options&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token class-member variable&quot;&gt;@name&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Ken&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-member variable&quot;&gt;@age&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-member variable&quot;&gt;@height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; options &lt;span class=&quot;token comment&quot;&gt;# (yields an &quot;UNEXPECTED=&quot; error) or&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;@&lt;span class=&quot;token property&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Ken&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-member variable&quot;&gt;@age&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-member variable&quot;&gt;@height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; options &lt;span class=&quot;token comment&quot;&gt;# (yields a &quot;Ken&quot; CANNOT BE ASSIGNED error)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token class-member variable&quot;&gt;@name&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Ken&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-member variable&quot;&gt;@age&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-member variable&quot;&gt;@height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; options &lt;span class=&quot;token comment&quot;&gt;# (yields an &quot;UNEXPECTED COMPOUND ASSIGN&quot; error)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token class-member variable&quot;&gt;@name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Ken&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-member variable&quot;&gt;@age&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-member variable&quot;&gt;@height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; options &lt;span class=&quot;token comment&quot;&gt;# (yields an &quot;UNEXPECTED LOGIC&quot; error)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token class-member variable&quot;&gt;@name&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Ken&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-member variable&quot;&gt;@age&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-member variable&quot;&gt;@height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; options &lt;span class=&quot;token comment&quot;&gt;# (yields an &quot;UNEXPECTED LOGIC&quot; error)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It turns out that the best way (IMO) is:&lt;/p&gt;
&lt;pre class=&quot;language-coffeescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-coffeescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Person&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;options&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token class-member variable&quot;&gt;@age&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-member variable&quot;&gt;@height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; options&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token class-member variable&quot;&gt;@name&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; options&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Ken&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that the default value for options is included, so as not to force a parameter on the constructor.  As always, stack overflow &lt;a href=&quot;http://stackoverflow.com/questions/11493163/deconstructing-a-list-of-parameters-in-class-constructor-coffeescript&quot;&gt;provides a deeper picture&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Home NAS</title>
    <link href="https://example.com/blog/2013/09/home-nas/" />
    <updated>2013-09-02T00:00:00Z</updated>
    <id>https://example.com/blog/2013/09/home-nas/</id>
    <content type="html">&lt;p&gt;So I&#39;m looking at acquiring some network attached storage (NAS) and wondering how best to get a cute, quiet, efficient box that will store and share the family pictures / emails / music / files (not videos) within a mixed environment (Windows, Ubuntu, Android, Smart TV) and not be a burden to maintain.  Software-wise I like Ubuntu (for the OS) and Subsonic (for the music streaming) but I&#39;m not especially attached to either. &lt;a href=&quot;http://www.danielandrade.net/2011/08/29/diy-home-ubuntu-nas-server/&quot;&gt;This home built server matches these &amp;quot;requirements&amp;quot;&lt;/a&gt;  but the diy angle is a little too onerous for me right now.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://plus.google.com/u/0/+LinusTorvalds/posts/REfnCV1y8Dy&quot;&gt;Linus Torvalds&lt;/a&gt; went through a similar process earlier this year and has some nice suggestions in the comments on his google+ thread.  In particular people seem to like the drobo, qnap, synology offerings but most vendors get a mention.  After this first pass I&#39;m quite taken with the &lt;a href=&quot;http://www.amazon.co.uk/Synology-DS213-DiskStation-Diskless-Performance/dp/B0091MHMZ4&quot;&gt;Synology DS213+&lt;/a&gt; as it&#39;s linux, it seems to do all I require and people are almost raving about it in the comments, but I&#39;ll look into the options a little deeper before jumping in...&lt;/p&gt;
&lt;p&gt;[Edit - &lt;a href=&quot;https://plus.google.com/u/0/+LinusTorvalds/posts/hvnMn1fFKEm&quot;&gt;seems Linus&lt;/a&gt; came to the same conclusion re: vendor after his post]&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Woodentrack</title>
    <link href="https://example.com/blog/2013/07/woodentrack/" />
    <updated>2013-07-17T00:00:00Z</updated>
    <id>https://example.com/blog/2013/07/woodentrack/</id>
    <content type="html">&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://example.com/blog/2013/07/woodentrack/Qn5ybBmzWa-112.avif 112w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://example.com/blog/2013/07/woodentrack/Qn5ybBmzWa-112.webp 112w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://example.com/blog/2013/07/woodentrack/Qn5ybBmzWa-112.png&quot; alt=&quot;a diagram showing the trigonometry of a curved piece of track&quot; align=&quot;left&quot; class=&quot;img-left-aligned&quot; width=&quot;112&quot; height=&quot;135&quot;&gt;&lt;/picture&gt; Last year in a slow period I knocked up a &lt;a href=&quot;http://www.github.com/mattsouth/woodentrack&quot;&gt;javascript library for making wooden toy train designs&lt;/a&gt; as a useful/interesting exercise.  After getting some implicit feedback on it last week (somewhat baffled), I decided to review it, give it a spruce up and add some more explanation.  It&#39;s still barely a proof of concept but you can see the results &lt;a href=&quot;http://mattsouth.github.io/woodentrack/demo.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The next pieces of work (should I get the chance) will probably focus on:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;finessing the API, i.e.   &amp;quot;Create a track at the browser command prompt, attach a track painter and watch the drawn track change as you add/remove pieces and edit the track properties&amp;quot; and&lt;/li&gt;
&lt;li&gt;adding annotations to the free ends of track drawn in the DSL demo so it&#39;s clear how to add more track to them.&lt;/li&gt;
&lt;/ol&gt;
</content>
  </entry>
  <entry>
    <title>Presentation smells</title>
    <link href="https://example.com/blog/2012/06/presentation-smells/" />
    <updated>2012-06-25T00:00:00Z</updated>
    <id>https://example.com/blog/2012/06/presentation-smells/</id>
    <content type="html">&lt;p&gt;In software development, code reviewers sometimes talk about &lt;a href=&quot;http://blog.codinghorror.com/code-smells/&quot;&gt;smells&lt;/a&gt; - observations about a piece of code that, while not damning, are signs that the code may not be very good. I saw a presentation last week that suggested the idea of smells could be applied more widely. Presentation smells that I can think of include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apologising for not having enough sleep due to being up all night preparing the talk&lt;/li&gt;
&lt;li&gt;Not having a narrative for your talk - why are you doing it? - why do you think it might be interesting to your audience?&lt;/li&gt;
&lt;li&gt;Suggesting that there is too much content to fit into the talk&lt;/li&gt;
&lt;li&gt;Reading your own (very dense) slides&lt;/li&gt;
&lt;li&gt;Not following time cues from the facilitator&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&#39;m sure there are more. Any suggestions?&lt;/p&gt;
</content>
  </entry>
</feed>