<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Etienne Laurin</title>
	<atom:link href="http://blog.atnnn.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.atnnn.com</link>
	<description>Nothing is impossible</description>
	<lastBuildDate>Sun, 18 Dec 2011 02:39:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Announcing AtnNn&#8217;s Haxball Stadium Editor</title>
		<link>http://blog.atnnn.com/p/announcing-atnnns-haxball-stadium-editor/</link>
		<comments>http://blog.atnnn.com/p/announcing-atnnns-haxball-stadium-editor/#comments</comments>
		<pubDate>Sun, 18 Dec 2011 02:23:11 +0000</pubDate>
		<dc:creator>Etienne Laurin</dc:creator>
				<category><![CDATA[Haxball]]></category>

		<guid isPermaLink="false">http://blog.atnnn.com/?p=308</guid>
		<description><![CDATA[The latest Haxball update added a feature for custom stadiums in a JSON format. With my new Stadium Editor, there is no more need for coding in JSON. Features include: A complete graphical interface. The ability to create and modify all the supported shape types. A property editor. Copy/paste. Easy undo. Features being worked on [...]]]></description>
			<content:encoded><![CDATA[<p>The latest <a href="http://www.haxball.com/">Haxball</a> update added a feature for <a href="http://blog.haxball.com/post/13808360727/update-custom-stadiums-and-haxball-anniversary">custom stadiums</a> in a JSON format.<br />
<br />
With my new Stadium Editor, there is no more need for coding in JSON.<br />
<br />
<a href="http://www.atnnn.com/haxball/"><img src="http://blog.atnnn.com/wp-content/uploads/2011/12/delme1.png" alt="" title="Stadium Editor" width="891" height="738" class="aligncenter size-full wp-image-312" /></a><br />
<br />
Features include:</p>
<ul>
<li>A complete graphical interface.
<li>The ability to create and modify all the supported shape types.
<li>A property editor.
<li>Copy/paste.
<li>Easy undo.
</ul>
<p>Features being worked on include:</p>
<ul>
<li>Snapping to grids and other objects.
<li>Automatic 2-way or 4-way mirroring.
<li>A color picker.
</ul>
<p><br/><br />
Please send feedback and bug reports as a comment on this post or in the <a href="http://code.atnnn.com/projects/hbedit/boards">bug tracker</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.atnnn.com/p/announcing-atnnns-haxball-stadium-editor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing Haskell Functions With Many Nameless Parameters</title>
		<link>http://blog.atnnn.com/p/writing-haskell-functions-with-many-nameless-parameters/</link>
		<comments>http://blog.atnnn.com/p/writing-haskell-functions-with-many-nameless-parameters/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 10:21:04 +0000</pubDate>
		<dc:creator>Etienne Laurin</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://blog.atnnn.com/?p=285</guid>
		<description><![CDATA[Although it could be considered bad style, it is often useful to have functions that take a large amount of similar parameters that vary in type. I am going to demonstrate a technique that allows to write such functions without naming these parameters and making the function more readable. The function I will use for [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css">
    <!--
      pre { font-family: sans-serif }
      .comment {
        /* font-lock-comment-face */
        color: #b22222;
      }
      .comment-delimiter {
        /* font-lock-comment-delimiter-face */
        color: #b22222;
      }
      .function-name {
        /* font-lock-function-name-face */
        color: #0000ff;
      }
      .keyword {
        /* font-lock-keyword-face */
        color: #a020f0;
      }
      .string {
        /* font-lock-string-face */
        color: #8b2252;
      }
      .type {
        /* font-lock-type-face */
        color: #228b22;
      }
      .variable-name {
        /* font-lock-variable-name-face */
        color: #a0522d;
      }
    -->
</style>
<p>Although it could be considered bad style, it is often useful to have functions that take a large amount of similar parameters that vary in type. I am going to demonstrate a technique that allows to write such functions without naming these parameters and making the function more readable.</p>
<p>The function I will use for demonstration is an example of a common pattern when working with JSON data.</p>
<pre><span class="comment-delimiter">{-</span><span class="comment"># LANGUAGE UnicodeSyntax, OverloadedStrings #-}</span>

<span class="keyword">import</span> <span class="type">Data.Aeson</span>
<span class="keyword">import</span> <span class="type">Data.Aeson.Types</span>
<span class="keyword">import</span> <span class="type">Data.Text</span>

<span class="function-name">person</span> <span class="variable-name">&#8759;</span> <span class="type">String</span> <span class="variable-name">&#8594;</span> <span class="type">Float</span> <span class="variable-name">&#8594;</span> <span class="type">Bool</span> <span class="variable-name">&#8594;</span> <span class="type">Value</span>
<span class="function-name">person</span> name height over18 <span class="variable-name">=</span> object [
  <span class="string">"name"</span> <span class="variable-name">.=</span> name,
  <span class="string">"height"</span> <span class="variable-name">.=</span> height,
  <span class="string">"over18"</span> <span class="variable-name">.=</span> over18]
</pre>
<p>The name of each parameter is repeated three times. Writing many such functions is often done by copying and pasting, which is a red flag and a possible source of errors.</p>
<p>In an attempt to write reusable code, we can define a simple function that builds the result in small steps.</p>
<pre>
<span class="function-name">field</span> <span class="variable-name">&#8759;</span> <span class="type">ToJSON</span> a <span class="variable-name">&#8658;</span> <span class="type">Text</span> <span class="variable-name">&#8594;</span> [<span class="type">Pair</span>] <span class="variable-name">&#8594;</span> a <span class="variable-name">&#8594;</span> [<span class="type">Pair</span>]
<span class="function-name">field</span> k d v <span class="variable-name">=</span>  (k, toJSON v) <span class="type">:</span> d
</pre>
<p>The order of the arguments is important because it fits well into the <tt>$-</tt> combinator. This combinator is the key to the whole exercise. It builds our desired multi-argument function without having to name the arguments.</p>
<pre><span class="keyword">infixr</span> 3 <span class="variable-name">$-</span>
(<span class="function-name">$-</span>) <span class="variable-name">&#8759;</span> (d <span class="variable-name">&#8594;</span> a <span class="variable-name">&#8594;</span> e) <span class="variable-name">&#8594;</span> (e <span class="variable-name">&#8594;</span> k) <span class="variable-name">&#8594;</span> d <span class="variable-name">&#8594;</span> a <span class="variable-name">&#8594;</span> k
(<span class="function-name">$-</span>) f g d a <span class="variable-name">=</span> g <span class="variable-name">$</span> f d a
</pre>
<p>(Some readers may recognise this relative of the infamous cartoon face operator <tt>((.).(.))</tt>)</p>
<p>We can now rewrite the person function.</p>
<pre>
<span class="function-name">person'</span> <span class="variable-name">&#8759;</span> <span class="type">String</span> <span class="variable-name">&#8594;</span> <span class="type">Float</span> <span class="variable-name">&#8594;</span> <span class="type">Bool</span> <span class="variable-name">&#8594;</span> <span class="type">Value</span>
<span class="function-name">person'</span> <span class="variable-name">=</span> (<span class="variable-name">$</span><span class="type">[]</span>)
  <span class="variable-name">$</span>  field <span class="string">"name"</span>
  <span class="variable-name">$-</span> field <span class="string">"height"</span>
  <span class="variable-name">$-</span> field <span class="string">"over18"</span>
  <span class="variable-name">$-</span> object
</pre>
<p>The first part of the function body, <tt>($[])</tt>, is the initial value used to build our object. The last part, <tt>$- object</tt> transforms the list that was built incrementally into the final result.</p>
<p>This technique becomes more powerful when you write other helper functions. For example, we can also have another function that ignores <tt>Nothing</tt>.</p>
<pre>
<span class="function-name">optfield</span> <span class="variable-name">&#8759;</span> <span class="type">ToJSON</span> a <span class="variable-name">&#8658;</span> <span class="type">Text</span> <span class="variable-name">&#8594;</span> [<span class="type">Pair</span>] <span class="variable-name">&#8594;</span> <span class="type">Maybe</span> a <span class="variable-name">&#8594;</span> [<span class="type">Pair</span>]
<span class="function-name">optfield</span> k d (<span class="type">Just</span> v) <span class="variable-name">=</span> field k d v
<span class="function-name">optfield</span> <span class="keyword">_</span> d <span class="type">Nothing</span> <span class="variable-name">=</span> d
</pre>
<p>The <tt>$-</tt> combinator&#8217;s usefulness is not limited to building JSON objects. It can be used to write many functions that need to combine heterogeneous values for which simple utility functions such as field and optfield can be written. Functions written in this style make cleaner, less repetitive code.</p>
<p><span style="font-size: 0.8em"><br />
EDIT: <a href="http://www.reddit.com/r/haskell/comments/kz8gx/writing_functions_with_many_nameless_parameters/c2olh89">made the type of <tt>$-</tt> more general</a><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.atnnn.com/p/writing-haskell-functions-with-many-nameless-parameters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Siamsa Whistle and Fiddle: Week #3</title>
		<link>http://blog.atnnn.com/p/siamsa-whistle-and-fiddle-week-3/</link>
		<comments>http://blog.atnnn.com/p/siamsa-whistle-and-fiddle-week-3/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 08:24:29 +0000</pubDate>
		<dc:creator>Etienne Laurin</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://blog.atnnn.com/?p=256</guid>
		<description><![CDATA[Previous week Fiddle We studied the full part A of Love at the Endings. Whistle We studied the Chicago reel. We practiced adding extra tonging, for example at the beginning of the tune: With a possible cut. We also studied some variations in part. The F♯ seems out of place, so it can be played [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.atnnn.com/p/siamsa-whistle-and-fiddle-week-2/">Previous week</a></p>
<h4>Fiddle</h4>
<p>We studied the full part A of <a href="http://www.thesession.org/tunes/display/990">Love at the Endings</a>.</p>
<h4>Whistle</h4>
<p>We studied the <a href="http://www.thesession.org/tunes/display/840">Chicago</a> reel. We practiced adding extra tonging, for example at the beginning of the tune:</p>
<form target='fragmentpopup' action='http://blog.atnnn.com/wp-content/plugins/scorerender/misc/showcode.php' method='post'>
<input type='image' name='music_image' class='scorerender-image' title='Click on image to view source' alt='Music fragment' src='http://blog.atnnn.com/wp-content/uploads/scorerender//sr-abc-ec6e86fbaffa14d000a184178dcf797d.png' />
<input type='hidden' name='code' value='%5Babc%5D%0D%0A%25%25stretchlast%20no%0D%0AX%3A%201%0D%0AM%3A4%2F4%0D%0AK%3AAdor%0D%0AL%3A1%2F8%0D%0A%28.cd%29.e.d%20.cAGE%0D%0A%5B%2Fabc%5D'>
</form>
<p>With a possible cut.</p>
<form target='fragmentpopup' action='http://blog.atnnn.com/wp-content/plugins/scorerender/misc/showcode.php' method='post'>
<input type='image' name='music_image' class='scorerender-image' title='Click on image to view source' alt='Music fragment' src='http://blog.atnnn.com/wp-content/uploads/scorerender//sr-abc-b4747c76c93ccb84a251212b04c7259d.png' />
<input type='hidden' name='code' value='%5Babc%5D%0D%0A%25%25stretchlast%20no%0D%0AX%3A%201%0D%0AM%3A4%2F4%0D%0AK%3AAdor%0D%0AL%3A1%2F8%0D%0A%28.cd%29%7Bf%7D.e.d%20.cAGE%0D%0A%5B%2Fabc%5D'>
</form>
<p>We also studied some variations in part. The F♯ seems out of place, so it can be played closer to F♮. It can also be played as a rising roll. And because too many rolls do not always sound nice, they can be replaced.</p>
<form target='fragmentpopup' action='http://blog.atnnn.com/wp-content/plugins/scorerender/misc/showcode.php' method='post'>
<input type='image' name='music_image' class='scorerender-image' title='Click on image to view source' alt='Music fragment' src='http://blog.atnnn.com/wp-content/uploads/scorerender//sr-abc-d8df0ae6d63519b59da0d78cbd937f33.png' />
<input type='hidden' name='code' value='%5Babc%5D%0D%0A%25%25stretchlast%20no%0D%0AX%3A%201%0D%0AM%3A4%2F4%0D%0AK%3AAdor%0D%0AL%3A1%2F8%0D%0A%5B1%20cdef%20~g3e%7C~a3f%20~g3e%7C~f3d%20~e3d%0D%0A%5B2%20cdef%20~g3e%7C~a3%3Df%20~g3e%7C%3Df3d%20~e3d%0D%0A%5B3%20%283Bcd%29ef%20~g3e%7C~a3f%20g2ag%7Ce%7Bg%7Df%7Be%7Dfd%20Je3d%0D%0A%5B%2Fabc%5D'>
</form>
<p>Our next tune for this week is <a href="http://www.thesession.org/tunes/display/1354">The Boys of Ballysodare</a> reel. Brian Finnegan plays a fast version of this tune in a set he calls <a href="http://www.paulmcsherry.com/discography/brianfinnegan_tracklist.html"><img src="http://blog.atnnn.com/wp-admin/images/media-button-music.gif?ver=20100531"/>The Highland Fiddle</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.atnnn.com/p/siamsa-whistle-and-fiddle-week-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Siamsa Whistle and Fiddle: Week #2</title>
		<link>http://blog.atnnn.com/p/siamsa-whistle-and-fiddle-week-2/</link>
		<comments>http://blog.atnnn.com/p/siamsa-whistle-and-fiddle-week-2/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 08:20:09 +0000</pubDate>
		<dc:creator>Etienne Laurin</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://blog.atnnn.com/?p=248</guid>
		<description><![CDATA[I am taking two classes this semester at the Siamsa School of Irish Music. Fiddle With Marc-Antoine in the fiddle class we started learning part A of Love at the Endings, a beautiful reel. The title comes from a play called Purple Dust, in which a man wins the heart of his beloved by promising [...]]]></description>
			<content:encoded><![CDATA[<p>I am taking two classes this semester at the <a href="http://siamsa.org">Siamsa School of Irish Music</a>.</p>
<h4>Fiddle</h4>
<p>With Marc-Antoine in the fiddle class we started learning part A of <a href="http://www.thesession.org/tunes/display/990">Love at the Endings</a>, a beautiful reel. The title comes from a play called Purple Dust, in which a man wins the heart of his beloved by promising her &#8220;things to say and things to do, and love at the endings&#8221;. The Comhaltas Archive has a <a href="http://comhaltasarchive.ie/tracks/5017">recording of Ed Reavy, the composer, playing this tune</a>. For this tune we practiced ornaments I had never used in a tune before: a roll on the low F♯ and a few cuts and slides.</p>
<p>My homework for this week: Practice part A with all the ornaments we saw.</p>
<h4>Whistle</h4>
<p>With <a href="http://www.rogermillington.com/siamsa/brosteve/">Steve</a> in the whistle class we studied a jig and a reel. We put aside the <a href="http://www.thesession.org/tunes/display/973">Man of Aran</a> that we had started last week because the off-beat rolls seemed daunting to some.</p>
<p>We played the <a href="http://www.thesession.org/tunes/display/489">Jackie Small&#8217;s</a> Jig together, a tune I first heard on a <a href="http://cormacbreatnach.com/wp/discography/musical-journey/">recording by Cormac Breatnac</a> on his website, although he calls it the Tailor Small&#8217;s. I discovered that it was possible to cut a note immediately after a C♯.</p>
<p>We then learned the first part of the <a href="http://www.thesession.org/tunes/display/840">Chicago</a> reel. It is one of the tunes <a href="http://comhaltas.ie/music/detail/chicago_reel/">available in the Foinn Seisiún collection</a>. This tune is not as easy as it seems. The F♯ is not always played very sharp. The F♯ can also be rolled in a a weird sort of way by playing an E first and then a short roll on the F♯ (without tonguing). Also, the sequence that goes <tt>ecgc acgc</tt> should be played either without tonging or by tonging only the four C♯.</p>
<p>My homework for this week:</p>
<ul>
<li>Practice the jig and both reels and the ornaments we saw
<li>Practice cutting all notes in my range after a C♯
<li>Bonus: try to roll an F♮
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.atnnn.com/p/siamsa-whistle-and-fiddle-week-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visualise Persist Models Using Graphviz</title>
		<link>http://blog.atnnn.com/p/visualise-persist-models-using-graphviz/</link>
		<comments>http://blog.atnnn.com/p/visualise-persist-models-using-graphviz/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 07:33:01 +0000</pubDate>
		<dc:creator>Etienne Laurin</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://blog.atnnn.com/?p=236</guid>
		<description><![CDATA[My current project uses the Yesod framework for web development. One of the advantages of Yesod is the Database.Persist library. It has type-checked queries, custom sql representations for types and automatic schema migration with postgresql, sqlite and mongodb support. Here is a little script I wrote to visualise Persist data models. persist-graph.hs {-# LANGUAGE UnicodeSyntax, [...]]]></description>
			<content:encoded><![CDATA[<p>My current project uses the <a href="http://www.yesodweb.com">Yesod</a> framework for web development. One of the advantages of Yesod is the <a href="www.yesodweb.com/book/persistent">Database.Persist</a> library. It has type-checked queries, custom sql representations for types and automatic schema migration with postgresql, sqlite and mongodb support.</p>
<p>Here is a little script I wrote to visualise Persist data models.</p>
<p><a href="https://gist.github.com/1216001">persist-graph.hs</a></p>
<style type="text/css">
    <!--
      body {
        color: #000000;
        background-color: #ffffff;
      }
      .comment {
        /* font-lock-comment-face */
        color: #b22222;
      }
      .comment-delimiter {
        /* font-lock-comment-delimiter-face */
        color: #b22222;
      }
      .function-name {
        /* font-lock-function-name-face */
        color: #0000ff;
      }
      .keyword {
        /* font-lock-keyword-face */
        color: #a020f0;
      }
      .string {
        /* font-lock-string-face */
        color: #8b2252;
      }
      .type {
        /* font-lock-type-face */
        color: #228b22;
      }
      .variable-name {
        /* font-lock-variable-name-face */
        color: #a0522d;
      }</p>
<p>      a {
        color: inherit;
        background-color: inherit;
        font: inherit;
        text-decoration: inherit;
      }
      a:hover {
        text-decoration: underline;
      }
    -->
    </style>
<pre style="font-family: sans">
<span class="comment-delimiter">{-</span><span class="comment"># LANGUAGE UnicodeSyntax, ViewPatterns #-}</span>

<span class="comment-delimiter">-- </span><span class="comment">usage:
</span><span class="comment-delimiter">--  </span><span class="comment">persistent-graph &lt; config/models &gt; schema.dot
</span><span class="comment-delimiter">--  </span><span class="comment">neato schema.dot -Tpdf &gt; schema.pdf
</span>
<span class="keyword">import</span> <span class="type">Database.Persist.Base</span> (EntityDef(..), ColumnDef(..))
<span class="keyword">import</span> <span class="type">Database.Persist.Quasi</span> (parse)
<span class="keyword">import</span> <span class="type">Data.List</span> (intersperse)

<span class="function-name">main</span> <span class="variable-name">=</span> <span class="keyword">do</span>
  defs <span class="variable-name">&#8592;</span> getContents
  <span class="keyword">let</span> schema <span class="variable-name">=</span> parse defs
  putStr <span class="variable-name">$</span> convert schema

<span class="function-name">graphOpts</span> <span class="variable-name">=</span> <span class="string">"node [shape=record]; overlap=false; splines=true;"</span>

<span class="function-name">convert</span> schema <span class="variable-name">=</span> unlines [<span class="string">"digraph {"</span>, graphOpts, unlines <span class="variable-name">$</span> map entity schema, <span class="string">"}"</span>] 

<span class="function-name">entity</span> (<span class="type">EntityDef</span> name <span class="keyword">_</span> cols <span class="keyword">_</span> <span class="keyword">_</span>) <span class="variable-name">=</span> unlines <span class="variable-name">$</span> [
  name <span class="variable-name">++</span> <span class="string">" ["</span>,
  <span class="string">"label=\"{"</span> <span class="variable-name">++</span> name  <span class="variable-name">++</span> <span class="string">"|"</span> <span class="variable-name">++</span>
  (concat <span class="variable-name">$</span> intersperse <span class="string">"|"</span> (map column cols))
  <span class="variable-name">++</span> <span class="string">"}\"];"</span>] <span class="variable-name">++</span>
  map (links name) cols

<span class="function-name">column</span> (<span class="type">ColumnDef</span> name <span class="keyword">_</span> <span class="keyword">_</span>) <span class="variable-name">=</span> <span class="string">"&lt;"</span> <span class="variable-name">++</span> name <span class="variable-name">++</span> <span class="string">"&gt; "</span> <span class="variable-name">++</span> name

<span class="function-name">links</span> entity (<span class="type">ColumnDef</span> name typ <span class="keyword">_</span>) <span class="variable-name">=</span>
  <span class="keyword">if</span> <span class="string">"dI"</span> <span class="variable-name">==</span> take 2 (reverse typ)
  <span class="keyword">then</span> entity <span class="variable-name">++</span> <span class="string">":"</span> <span class="variable-name">++</span> name <span class="variable-name">++</span> <span class="string">" -&gt; "</span> <span class="variable-name">++</span> reverse (drop 2 (reverse typ))
  <span class="keyword">else</span> <span class="type">[]</span>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.atnnn.com/p/visualise-persist-models-using-graphviz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#define true false</title>
		<link>http://blog.atnnn.com/p/define-true-false/</link>
		<comments>http://blog.atnnn.com/p/define-true-false/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 18:14:55 +0000</pubDate>
		<dc:creator>Etienne Laurin</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://blog.atnnn.com/?p=230</guid>
		<description><![CDATA[What is the output of the following C++ program? #include &#60;iostream> #define true false #define false true int main(){ std::cout]]></description>
			<content:encoded><![CDATA[<p>What is the output of the following C++ program?</p>
<p><code>
<pre>#include &lt;iostream>

#define true false
#define false true

int main(){ std::cout << (
        false ? "false" :
        true  ? "true"  :
                "mu"
) << "\n";}</pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.atnnn.com/p/define-true-false/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>xkcd in Russian</title>
		<link>http://blog.atnnn.com/p/xkcd-in-russian/</link>
		<comments>http://blog.atnnn.com/p/xkcd-in-russian/#comments</comments>
		<pubDate>Sat, 01 Jan 2011 09:39:44 +0000</pubDate>
		<dc:creator>Etienne Laurin</dc:creator>
				<category><![CDATA[Language]]></category>

		<guid isPermaLink="false">http://blog.atnnn.com/?p=219</guid>
		<description><![CDATA[Fans have been translating xkcd into russian. Almost all comics have been translated, complete with title text and transcript for the visually impaired. I surprised myself reading these, my Russian vocabulary is not as limited as I thought it was. I am still going to be creating Anki flashcards for many words and sentence fragments [...]]]></description>
			<content:encoded><![CDATA[<p>Fans have been translating <a href="http://xkcd.ru/">xkcd into russian</a>.</p>
<p><a href="http://xkcd.ru/655/"><img src="http://i.imgur.com/8wbQL.png" alt="" align="center" title="И где ты вообще взял эту стенку? Сейчас же верни ее на место и поставь вертикально!" /></a></p>
<p><a href="http://xkcd.ru/num/">Almost all</a> comics have been translated, complete with title text and transcript for the visually impaired.</p>
<p>I surprised myself reading these, my Russian vocabulary is not as limited as I thought it was. I am still going to be creating <a href="http://ankisrs.net/">Anki</a> flashcards for many words and sentence fragments from these comics.</p>
<p>Notice how <a href="http://www.facebook.com/atnnn">Facebook</a> was translated as <a href="http://vkontakte.ru/id21123006">Вконтакте</a> (Vkontakte). It is not very surprising, considering the popularity of the Facebook look-alike and it&#8217;s nice features.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.atnnn.com/p/xkcd-in-russian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Irish Music History</title>
		<link>http://blog.atnnn.com/p/irish-music-history/</link>
		<comments>http://blog.atnnn.com/p/irish-music-history/#comments</comments>
		<pubDate>Tue, 28 Dec 2010 11:11:07 +0000</pubDate>
		<dc:creator>Etienne Laurin</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://blog.atnnn.com/?p=212</guid>
		<description><![CDATA[There is a plethora of traditional Irish tunes available online from sources such as youtube or thesession.org. It is hard to find two recordings or transcriptions of the same tune that are actually the same tune. Because there are so many local variations, interchangeable parts and modern adaptations, finding the original version of a tune [...]]]></description>
			<content:encoded><![CDATA[<p>There is a plethora of traditional Irish tunes available online from sources such as youtube or <a href="http://thesession.org/">thesession.org</a>. It is hard to find two recordings or transcriptions of the same tune that are actually the same tune. Because there are so many local variations, interchangeable parts and modern adaptations, finding the original version of a tune can be hard. How did the composer want the tune to be played? What notes and ornaments did he or she have in mind?</p>
<p>Danny boy is an example of a song that has a tumultuous history. The lyrics were added to a melody called Londonderry Air, which got its name because it was an untitled tune transcribed by someone from County Londonderry. But the tune did have a name: The Young Man&#8217;s Dream. On his website, <a href="http://www.standingstones.com/dannyboy.html">Michael Robinson reveals the details</a> on the history of this classic air (a fascinating read).</p>
<p>The book <a href="http://www.libraryireland.com/IrishMusic/Contents.php">A History of Irish Music</a> by William H. Grattan Flood lists most of <a href="http://www.libraryireland.com/IrishMusic/AppendixA.php">the earliest collections of irish music</a> from 1725 to 1887. These collections are all public domain.</p>
<p>Some are freely available from the <a href="http://imslp.org/">IMSLP</a> in PDF format:</p>
<ul>
<li><a href="http://imslp.org/wiki/The_Complete_Collection_of_Irish_Music_(Petrie,_George)">The Complete Collection of Irish Music (Petrie, George)</a></li>
<li><a href="http://imslp.org/wiki/The_Ancient_Music_of_Ireland_(Bunting,_Edward)">The Ancient Music of Ireland (Bunting, Edward)</a></li>
<li><a href="http://imslp.org/wiki/Gems_of_Ireland,_Op.45_(Clinton,_John)">Gems of Ireland, Op.45 (Clinton, John)</a></li>
</ul>
<p>Many other collections are available online on the <a href="http://www.pipers.ie/IMCO/">IMCO</a> but they require a proprietary plugin.</p>
<p>Recordings from the early ⅩⅩ century are also easy to find on the web:</p>
<ul>
<li><a href="http://archive.org/">Archive.org</a> has many old recordings. Searching for <a href="http://www.archive.org/search.php?query=subject:%22Celtic%22%20AND%20mediatype:audio">celtic</a> yields both old and modern recordings. It seems that <a href="http://www.archive.org/search.php?query=creator:%22Michael+Coleman%22">some</a> <a href="http://www.archive.org/search.php?query=creator:%22Nelius+O'Cronin%22">uploaders</a> have a nice collection.</li>
<li>The <a href="http://www.itma.ie/English/sound_recordings.html">Irish Traditional Music Archive&#8217;s Sample Recordings</a> page also has old recordings mixed in with newer ones.</li>
</ul>
<p>Nothing short of a working time machine will make me hear the original versions of all the songs that were composed before music could be faithfully recorded.  But going through all these early transcriptions and recordings has given me another viewpoint on Irish music. It has also taught me new tunes and some lovely variations.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.atnnn.com/p/irish-music-history/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Whistles</title>
		<link>http://blog.atnnn.com/p/new-whistles/</link>
		<comments>http://blog.atnnn.com/p/new-whistles/#comments</comments>
		<pubDate>Sun, 05 Dec 2010 10:48:13 +0000</pubDate>
		<dc:creator>Etienne Laurin</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://blog.atnnn.com/?p=199</guid>
		<description><![CDATA[I just added a new set of whistles to my collection! I ordered them ten days ago from the Irish Whistle Shop. It&#8217;s a set of seven nickel-plated whistle bodies, one head and a plastic fipple. There is one body for each key between E (high) and B♭ (low). They were made by David O&#8217;Brien, serial [...]]]></description>
			<content:encoded><![CDATA[<p>I just added a new set of whistles to my collection!</p>
<p><a href="http://blog.atnnn.com/wp-content/uploads/2010/12/20101205_004.jpg"><img class="aligncenter size-medium wp-image-201" title="O'Brien Whistle Set" src="http://blog.atnnn.com/wp-content/uploads/2010/12/20101205_004-300x168.jpg" alt="" width="300" height="168" /></a></p>
<p>I ordered them ten days ago from the <a href="http://www.irishwhistleshop.com/">Irish Whistle Shop</a>. It&#8217;s a set of seven nickel-plated whistle bodies, one head and a plastic fipple. There is one body for each key between E (high) and B♭ (low). They were made by <a href="http://www.obrienwhistles.com/">David O&#8217;Brien</a>, serial number 773.</p>
<p>To give you an idea of how it sounds, here is the <a href="http://blog.atnnn.com/wp-content/uploads/2010/12/garden.mp3">Song of the Garden</a> played in the key of D <a href="http://www.tparents.org/Library/Unification/Topics/Hsong/hse027.htm">(Source)</a>.</p>
<p>I love the sound, it&#8217;s very different than the sound I get from my Feadog whistle. The whistles require a little more breath and a lot more pressure. They have a wide bore and are very loud, especially in the second register.</p>
<p>On the Feadog, I have to blow the low E and the high B very softly to get a nice tone, but my new O&#8217;Brien in D will let me blow as hard as I want, all the way up to the high D. The Feadog has a breathy, lacking tone on the cross-fingered C♮. The same fingering on the O&#8217;Brien D sounds a lot better and it even has a thumb-hole for playing the C♮ perfectly. I play the recorder as well, so the thumb-hole is not a problem for me.</p>
<p>I tried the O&#8217;Brien whistle in all the keys I got. They all sound great except for the B♭, which is <strike>out of tune with itself</strike> <em>harder to play in tune</em>. I suspect I may be able to fix that by using the unusual ajustable window size (also known as embouchure size). <strike>Otherwise,</strike> The ajustable window size seems like a completely useless feature. Changing it by more than a few milimeters can make the whistle go out of tune or gives a horrible tone to either the first or the second register.</p>
<p>I highly recommend that you check out the <a href="http://www.irishwhistleshop.com/">Irish Whistle Shop</a> and <a href="http://www.obrienwhistles.com/">David O&#8217;Brien</a> if you ever want to buy a good quality whistle from nice folks. Overall, my new instrument is now the favourite of my collection. But I am eagerly waiting for a Sindt whistle which is a lot more similar to the Feadog that I am used to playing, but, I believe, will have none of it&#8217;s flaws.</p>
<p><em>I&#8217;m editing this post to mention that, although I bought them second-hand, these whistles seem to have never been played before! I&#8217;ve owned them for less than a week and there are already large red marks around the finger holes where the nickel has rubbed off, letting the copper show. There was not even a hint of copper around any of the holes when I first received the whistles.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.atnnn.com/p/new-whistles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.atnnn.com/wp-content/uploads/2010/12/garden.mp3" length="182105" type="audio/mpeg" />
		</item>
		<item>
		<title>Cheating</title>
		<link>http://blog.atnnn.com/p/cheating/</link>
		<comments>http://blog.atnnn.com/p/cheating/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 04:52:02 +0000</pubDate>
		<dc:creator>Etienne Laurin</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.atnnn.com/?p=193</guid>
		<description><![CDATA[I haven&#8217;t posted anything here in a long time, so I thought I might share a small log from freenode. * s0lidnuts has joined ##prolog &#60; s0lidnuts&#62; Hi. I'd like a commented version of the solution to the 8 queen problem. I do not know prolog nor have time to learn it now (school work). [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t posted anything here in a long time, so I thought I might share a small log from freenode.</p>
<p><code><br />
* s0lidnuts has joined ##prolog<br />
&lt; s0lidnuts&gt; Hi. I'd like a commented version of the solution to the 8 queen problem. I do not know prolog nor have time to learn it now (school work). Anyone willing to help please pvt =)<br />
&lt; AtnNn&gt; s0lidnuts: eight_queens([2,4,6,8,3,1,7,5]).<br />
&lt; s0lidnuts&gt; AtnNn that's cheating<br />
</code></p>
<p>Somehow, this made me laugh more than anything else has this past week.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.atnnn.com/p/cheating/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

