Sorry

This feed does not validate.

In addition, interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://davorg.theplanetarium.org/atom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <feed xmlns="http://www.w3.org/2005/Atom">
  3.  <title>planet davorg</title>
  4.  <link rel="alternate" href="http://davorg.theplanetarium.org/" type="text/html"/>
  5.  <subtitle>Aggregating Dave's stuff</subtitle>
  6.  <author>
  7.    <name>Dave Cross</name>
  8.    <email>[email protected]</email>
  9.  </author>
  10.  <updated>2017-02-23T05:03:10Z</updated>
  11.  <link rel="self" href="http://davorg.theplanetarium.org/" type="application/atom+xml"/>
  12.  <id>http://davorg.theplanetarium.org/</id>
  13.  <entry>
  14.    
  15.    <summary type="xhtml">
  16.      <div xmlns="http://www.w3.org/1999/xhtml">Science Fiction - Christine and the Queens</div>
  17.    </summary>
  18.    <link rel="alternate" href="https://www.last.fm/music/Christine+and+the+Queens/_/Science+Fiction" type="text/html"/>
  19.    <updated>2017-02-22T18:13:44Z</updated>
  20.    <author>
  21.      <name>Christine and the Queens</name>
  22.    </author>
  23.    <id>https://musicbrainz.org/recording/d8b6ddb7-b058-462c-9e6a-b9a662f7c3e4</id>
  24.  <title>last.fm: Science Fiction - Christine and the Queens</title></entry>
  25.  <entry>
  26.    
  27.    <summary type="xhtml">
  28.      <div xmlns="http://www.w3.org/1999/xhtml">I Know My Love - Eliza Carthy</div>
  29.    </summary>
  30.    <link rel="alternate" href="https://www.last.fm/music/Eliza+Carthy/_/I+Know+My+Love" type="text/html"/>
  31.    <updated>2017-02-22T18:08:20Z</updated>
  32.    <author>
  33.      <name>Eliza Carthy</name>
  34.    </author>
  35.    <id>https://musicbrainz.org/recording/10a4d023-2815-4db4-8ca4-6ef9c9b0c1fa</id>
  36.  <title>last.fm: I Know My Love - Eliza Carthy</title></entry>
  37.  <entry>
  38.    
  39.    <summary type="xhtml">
  40.      <div xmlns="http://www.w3.org/1999/xhtml">Singer Not The Song - ABC</div>
  41.    </summary>
  42.    <link rel="alternate" href="https://www.last.fm/music/ABC/_/Singer+Not+The+Song" type="text/html"/>
  43.    <updated>2017-02-22T18:04:27Z</updated>
  44.    <author>
  45.      <name>ABC</name>
  46.    </author>
  47.    <id>https://musicbrainz.org/recording/</id>
  48.  <title>last.fm: Singer Not The Song - ABC</title></entry>
  49.  <entry>
  50.    
  51.    <summary type="text">Jai Ho (feat. Sukhvinder Singh, Tanvi Shah, Mahalaxmi Iyer &amp; Vijay Prakash) - A.R. Rahman</summary>
  52.    <link rel="alternate" href="https://www.last.fm/music/A.R.+Rahman/_/Jai+Ho+(feat.+Sukhvinder+Singh,+Tanvi+Shah,+Mahalaxmi+Iyer+&amp;+Vijay+Prakash)" type="text/html"/>
  53.    <updated>2017-02-22T17:59:51Z</updated>
  54.    <author>
  55.      <name>A.R. Rahman</name>
  56.    </author>
  57.    <id>https://musicbrainz.org/recording/</id>
  58.  <title>last.fm: Jai Ho (feat. Sukhvinder Singh, Tanvi Shah, Mahalaxmi Iyer &amp; Vijay Prakash) - A.R. Rahman</title></entry>
  59.  <entry>
  60.    
  61.    <summary type="text">I'll Find My Way Home - Jon &amp; Vangelis</summary>
  62.    <link rel="alternate" href="https://www.last.fm/music/Jon+&amp;+Vangelis/_/I%27ll+Find+My+Way+Home" type="text/html"/>
  63.    <updated>2017-02-22T17:54:43Z</updated>
  64.    <author>
  65.      <name>Jon &amp; Vangelis</name>
  66.    </author>
  67.    <id>https://musicbrainz.org/recording/cdc417e7-ca49-460b-92bf-fa097b171660</id>
  68.  <title>last.fm: I'll Find My Way Home - Jon &amp; Vangelis</title></entry>
  69.  <entry xmlns:media="http://search.yahoo.com/mrss/">
  70.    <id>tag:github.com,2008:PushEvent/5365504341</id>
  71.    <published>2017-02-21T21:22:17Z</published>
  72.    <updated>2017-02-21T21:22:17Z</updated>
  73.    <link type="text/html" rel="alternate" href="https://github.com/davorg/wasted-inches/compare/0c6a7e0af3...793ce9abac"/>
  74.    
  75.    <author>
  76.      <name>davorg</name>
  77.      <email>[email protected]</email>
  78.      <uri>https://github.com/davorg</uri>
  79.    </author>
  80.    <media:thumbnail height="30" width="30" url="https://avatars1.githubusercontent.com/u/24642?v=3&amp;s=30"/>
  81.    <content type="html">&lt;!-- push --&gt;
  82. &lt;svg aria-label="Push" class="octicon octicon-git-commit dashboard-event-icon" height="32" role="img" version="1.1" viewBox="0 0 14 16" width="28"&gt;&lt;path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"&gt;&lt;/path&gt;&lt;/svg&gt;
  83.  
  84. &lt;div class="time"&gt;
  85.  &lt;relative-time datetime="2017-02-21T21:22:17Z"&gt;Feb 21, 2017&lt;/relative-time&gt;
  86. &lt;/div&gt;
  87.  
  88. &lt;div class="title"&gt;
  89.  &lt;a href="/davorg" data-ga-click="News feed, event click, Event click type:PushEvent target:actor" rel="noreferrer"&gt;davorg&lt;/a&gt; pushed to &lt;a href="/davorg/wasted-inches/tree/master" data-ga-click="News feed, event click, Event click type:PushEvent target:branch" rel="noreferrer"&gt;master&lt;/a&gt; at &lt;a href="/davorg/wasted-inches" data-ga-click="News feed, event click, Event click type:PushEvent target:repo" rel="noreferrer"&gt;davorg/wasted-inches&lt;/a&gt;
  90. &lt;/div&gt;
  91.  
  92. &lt;div class="details"&gt;
  93.  &lt;a href="/davorg" rel="noreferrer"&gt;&lt;img alt="@davorg" class="gravatar" height="30" src="https://avatars0.githubusercontent.com/u/24642?v=3&amp;amp;s=60" width="30"&gt;&lt;/a&gt;
  94.  
  95.    &lt;div class="commits pusher-is-only-committer"&gt;
  96.      &lt;ul&gt;
  97.        &lt;li&gt;
  98.          &lt;span title="davorg"&gt;
  99.            &lt;img alt="@davorg" height="16" src="https://avatars1.githubusercontent.com/u/24642?v=3&amp;amp;s=32" width="16"&gt;
  100.          &lt;/span&gt;
  101.          &lt;code&gt;&lt;a href="/davorg/wasted-inches/commit/793ce9abac45e876a7d1d249a2dfd5c96de34ce7" data-ga-click="News feed, event click, Event click type:PushEvent target:sha" rel="noreferrer"&gt;793ce9a&lt;/a&gt;&lt;/code&gt;
  102.          &lt;div class="message"&gt;
  103.            &lt;blockquote&gt;
  104.              Removed the domain from all of the internal links.
  105.            &lt;/blockquote&gt;
  106.          &lt;/div&gt;
  107.        &lt;/li&gt;
  108.      &lt;/ul&gt;
  109.    &lt;/div&gt;
  110. &lt;/div&gt;
  111. </content>
  112.  <title>github: davorg pushed to master at davorg/wasted-inches</title></entry>
  113.  <entry xmlns:media="http://search.yahoo.com/mrss/">
  114.    <id>tag:github.com,2008:PushEvent/5365241914</id>
  115.    <published>2017-02-21T20:42:14Z</published>
  116.    <updated>2017-02-21T20:42:14Z</updated>
  117.    <link type="text/html" rel="alternate" href="https://github.com/davorg/wasted-inches/compare/b5f24cc6e2...0c6a7e0af3"/>
  118.    
  119.    <author>
  120.      <name>davorg</name>
  121.      <email>[email protected]</email>
  122.      <uri>https://github.com/davorg</uri>
  123.    </author>
  124.    <media:thumbnail height="30" width="30" url="https://avatars1.githubusercontent.com/u/24642?v=3&amp;s=30"/>
  125.    <content type="html">&lt;!-- push --&gt;
  126. &lt;svg aria-label="Push" class="octicon octicon-git-commit dashboard-event-icon" height="32" role="img" version="1.1" viewBox="0 0 14 16" width="28"&gt;&lt;path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"&gt;&lt;/path&gt;&lt;/svg&gt;
  127.  
  128. &lt;div class="time"&gt;
  129.  &lt;relative-time datetime="2017-02-21T20:42:14Z"&gt;Feb 21, 2017&lt;/relative-time&gt;
  130. &lt;/div&gt;
  131.  
  132. &lt;div class="title"&gt;
  133.  &lt;a href="/davorg" data-ga-click="News feed, event click, Event click type:PushEvent target:actor" rel="noreferrer"&gt;davorg&lt;/a&gt; pushed to &lt;a href="/davorg/wasted-inches/tree/master" data-ga-click="News feed, event click, Event click type:PushEvent target:branch" rel="noreferrer"&gt;master&lt;/a&gt; at &lt;a href="/davorg/wasted-inches" data-ga-click="News feed, event click, Event click type:PushEvent target:repo" rel="noreferrer"&gt;davorg/wasted-inches&lt;/a&gt;
  134. &lt;/div&gt;
  135.  
  136. &lt;div class="details"&gt;
  137.  &lt;a href="/davorg" rel="noreferrer"&gt;&lt;img alt="@davorg" class="gravatar" height="30" src="https://avatars0.githubusercontent.com/u/24642?v=3&amp;amp;s=60" width="30"&gt;&lt;/a&gt;
  138.  
  139.    &lt;div class="commits pusher-is-only-committer"&gt;
  140.      &lt;ul&gt;
  141.        &lt;li&gt;
  142.          &lt;span title="davorg"&gt;
  143.            &lt;img alt="@davorg" height="16" src="https://avatars1.githubusercontent.com/u/24642?v=3&amp;amp;s=32" width="16"&gt;
  144.          &lt;/span&gt;
  145.          &lt;code&gt;&lt;a href="/davorg/wasted-inches/commit/0c6a7e0af3ceaa64195b9b405d970fabbf55f67e" data-ga-click="News feed, event click, Event click type:PushEvent target:sha" rel="noreferrer"&gt;0c6a7e0&lt;/a&gt;&lt;/code&gt;
  146.          &lt;div class="message"&gt;
  147.            &lt;blockquote&gt;
  148.              Fixed the URL of the CSS file
  149.            &lt;/blockquote&gt;
  150.          &lt;/div&gt;
  151.        &lt;/li&gt;
  152.      &lt;/ul&gt;
  153.    &lt;/div&gt;
  154. &lt;/div&gt;
  155. </content>
  156.  <title>github: davorg pushed to master at davorg/wasted-inches</title></entry>
  157.  <entry xmlns:media="http://search.yahoo.com/mrss/">
  158.    <id>tag:github.com,2008:PushEvent/5365174494</id>
  159.    <published>2017-02-21T20:31:30Z</published>
  160.    <updated>2017-02-21T20:31:30Z</updated>
  161.    <link type="text/html" rel="alternate" href="https://github.com/davorg/wasted-inches/compare/8cfae099c6...b5f24cc6e2"/>
  162.    
  163.    <author>
  164.      <name>davorg</name>
  165.      <email>[email protected]</email>
  166.      <uri>https://github.com/davorg</uri>
  167.    </author>
  168.    <media:thumbnail height="30" width="30" url="https://avatars1.githubusercontent.com/u/24642?v=3&amp;s=30"/>
  169.    <content type="html">&lt;!-- push --&gt;
  170. &lt;svg aria-label="Push" class="octicon octicon-git-commit dashboard-event-icon" height="32" role="img" version="1.1" viewBox="0 0 14 16" width="28"&gt;&lt;path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"&gt;&lt;/path&gt;&lt;/svg&gt;
  171.  
  172. &lt;div class="time"&gt;
  173.  &lt;relative-time datetime="2017-02-21T20:31:30Z"&gt;Feb 21, 2017&lt;/relative-time&gt;
  174. &lt;/div&gt;
  175.  
  176. &lt;div class="title"&gt;
  177.  &lt;a href="/davorg" data-ga-click="News feed, event click, Event click type:PushEvent target:actor" rel="noreferrer"&gt;davorg&lt;/a&gt; pushed to &lt;a href="/davorg/wasted-inches/tree/master" data-ga-click="News feed, event click, Event click type:PushEvent target:branch" rel="noreferrer"&gt;master&lt;/a&gt; at &lt;a href="/davorg/wasted-inches" data-ga-click="News feed, event click, Event click type:PushEvent target:repo" rel="noreferrer"&gt;davorg/wasted-inches&lt;/a&gt;
  178. &lt;/div&gt;
  179.  
  180. &lt;div class="details"&gt;
  181.  &lt;a href="/davorg" rel="noreferrer"&gt;&lt;img alt="@davorg" class="gravatar" height="30" src="https://avatars0.githubusercontent.com/u/24642?v=3&amp;amp;s=60" width="30"&gt;&lt;/a&gt;
  182.  
  183.    &lt;div class="commits pusher-is-only-committer"&gt;
  184.      &lt;ul&gt;
  185.        &lt;li&gt;
  186.          &lt;span title="davorg"&gt;
  187.            &lt;img alt="@davorg" height="16" src="https://avatars1.githubusercontent.com/u/24642?v=3&amp;amp;s=32" width="16"&gt;
  188.          &lt;/span&gt;
  189.          &lt;code&gt;&lt;a href="/davorg/wasted-inches/commit/b5f24cc6e278d96ff8a338a7316aa709681be41f" data-ga-click="News feed, event click, Event click type:PushEvent target:sha" rel="noreferrer"&gt;b5f24cc&lt;/a&gt;&lt;/code&gt;
  190.          &lt;div class="message"&gt;
  191.            &lt;blockquote&gt;
  192.              Added CNAME
  193.            &lt;/blockquote&gt;
  194.          &lt;/div&gt;
  195.        &lt;/li&gt;
  196.        &lt;li&gt;
  197.          &lt;span title="davorg"&gt;
  198.            &lt;img alt="@davorg" height="16" src="https://avatars1.githubusercontent.com/u/24642?v=3&amp;amp;s=32" width="16"&gt;
  199.          &lt;/span&gt;
  200.          &lt;code&gt;&lt;a href="/davorg/wasted-inches/commit/30bf8d0c9af4288844d17d4ec65ed091ed0542eb" data-ga-click="News feed, event click, Event click type:PushEvent target:sha" rel="noreferrer"&gt;30bf8d0&lt;/a&gt;&lt;/code&gt;
  201.          &lt;div class="message"&gt;
  202.            &lt;blockquote&gt;
  203.              dos2unix
  204.            &lt;/blockquote&gt;
  205.          &lt;/div&gt;
  206.        &lt;/li&gt;
  207.        &lt;li class="more"&gt;&lt;a href="/davorg/wasted-inches/compare/8cfae099c6...b5f24cc6e2" data-ga-click="News feed, event click, Event click type:PushEvent target:comparison" rel="noreferrer"&gt;View comparison for these 2 commits »&lt;/a&gt;&lt;/li&gt;
  208.      &lt;/ul&gt;
  209.    &lt;/div&gt;
  210. &lt;/div&gt;
  211. </content>
  212.  <title>github: davorg pushed to master at davorg/wasted-inches</title></entry>
  213.  <entry xmlns:media="http://search.yahoo.com/mrss/">
  214.    <id>tag:github.com,2008:PushEvent/5365153925</id>
  215.    <published>2017-02-21T20:28:15Z</published>
  216.    <updated>2017-02-21T20:28:15Z</updated>
  217.    <link type="text/html" rel="alternate" href="https://github.com/davorg/wasted-inches/compare/1979cd22bb...8cfae099c6"/>
  218.    
  219.    <author>
  220.      <name>davorg</name>
  221.      <email>[email protected]</email>
  222.      <uri>https://github.com/davorg</uri>
  223.    </author>
  224.    <media:thumbnail height="30" width="30" url="https://avatars1.githubusercontent.com/u/24642?v=3&amp;s=30"/>
  225.    <content type="html">&lt;!-- push --&gt;
  226. &lt;svg aria-label="Push" class="octicon octicon-git-commit dashboard-event-icon" height="32" role="img" version="1.1" viewBox="0 0 14 16" width="28"&gt;&lt;path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"&gt;&lt;/path&gt;&lt;/svg&gt;
  227.  
  228. &lt;div class="time"&gt;
  229.  &lt;relative-time datetime="2017-02-21T20:28:15Z"&gt;Feb 21, 2017&lt;/relative-time&gt;
  230. &lt;/div&gt;
  231.  
  232. &lt;div class="title"&gt;
  233.  &lt;a href="/davorg" data-ga-click="News feed, event click, Event click type:PushEvent target:actor" rel="noreferrer"&gt;davorg&lt;/a&gt; pushed to &lt;a href="/davorg/wasted-inches/tree/master" data-ga-click="News feed, event click, Event click type:PushEvent target:branch" rel="noreferrer"&gt;master&lt;/a&gt; at &lt;a href="/davorg/wasted-inches" data-ga-click="News feed, event click, Event click type:PushEvent target:repo" rel="noreferrer"&gt;davorg/wasted-inches&lt;/a&gt;
  234. &lt;/div&gt;
  235.  
  236. &lt;div class="details"&gt;
  237.  &lt;a href="/davorg" rel="noreferrer"&gt;&lt;img alt="@davorg" class="gravatar" height="30" src="https://avatars0.githubusercontent.com/u/24642?v=3&amp;amp;s=60" width="30"&gt;&lt;/a&gt;
  238.  
  239.    &lt;div class="commits pusher-is-only-committer"&gt;
  240.      &lt;ul&gt;
  241.        &lt;li&gt;
  242.          &lt;span title="davorg"&gt;
  243.            &lt;img alt="@davorg" height="16" src="https://avatars1.githubusercontent.com/u/24642?v=3&amp;amp;s=32" width="16"&gt;
  244.          &lt;/span&gt;
  245.          &lt;code&gt;&lt;a href="/davorg/wasted-inches/commit/8cfae099c6504919827723f0ddc0f9ac278665bb" data-ga-click="News feed, event click, Event click type:PushEvent target:sha" rel="noreferrer"&gt;8cfae09&lt;/a&gt;&lt;/code&gt;
  246.          &lt;div class="message"&gt;
  247.            &lt;blockquote&gt;
  248.              Fixed the CSS
  249.            &lt;/blockquote&gt;
  250.          &lt;/div&gt;
  251.        &lt;/li&gt;
  252.      &lt;/ul&gt;
  253.    &lt;/div&gt;
  254. &lt;/div&gt;
  255. </content>
  256.  <title>github: davorg pushed to master at davorg/wasted-inches</title></entry>
  257.  <entry xmlns:media="http://search.yahoo.com/mrss/">
  258.    <id>tag:github.com,2008:CreateEvent/5364989792</id>
  259.    <published>2017-02-21T20:02:44Z</published>
  260.    <updated>2017-02-21T20:02:44Z</updated>
  261.    <link type="text/html" rel="alternate" href="https://github.com/davorg/wasted-inches/compare/master"/>
  262.    
  263.    <author>
  264.      <name>davorg</name>
  265.      <email>[email protected]</email>
  266.      <uri>https://github.com/davorg</uri>
  267.    </author>
  268.    <media:thumbnail height="30" width="30" url="https://avatars1.githubusercontent.com/u/24642?v=3&amp;s=30"/>
  269.    <content type="html">&lt;!-- create --&gt;
  270. &lt;div class="simple"&gt;
  271.  &lt;svg aria-label="Create" class="octicon octicon-git-branch dashboard-event-icon" height="16" role="img" version="1.1" viewBox="0 0 10 16" width="10"&gt;&lt;path fill-rule="evenodd" d="M10 5c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v.3c-.02.52-.23.98-.63 1.38-.4.4-.86.61-1.38.63-.83.02-1.48.16-2 .45V4.72a1.993 1.993 0 0 0-1-3.72C.88 1 0 1.89 0 3a2 2 0 0 0 1 1.72v6.56c-.59.35-1 .99-1 1.72 0 1.11.89 2 2 2 1.11 0 2-.89 2-2 0-.53-.2-1-.53-1.36.09-.06.48-.41.59-.47.25-.11.56-.17.94-.17 1.05-.05 1.95-.45 2.75-1.25S8.95 7.77 9 6.73h-.02C9.59 6.37 10 5.73 10 5zM2 1.8c.66 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2C1.35 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2zm0 12.41c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm6-8c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"&gt;&lt;/path&gt;&lt;/svg&gt;
  272.  
  273.  &lt;div class="title"&gt;
  274.    &lt;a href="/davorg" data-ga-click="News feed, event click, Event click type:CreateEvent target:actor" rel="noreferrer"&gt;davorg&lt;/a&gt; created branch &lt;a href="/davorg/wasted-inches/tree/master" class="css-truncate css-truncate-target branch-name" data-ga-click="News feed, event click, Event click type:CreateEvent target: branch link" title="master" rel="noreferrer"&gt;master&lt;/a&gt; at &lt;a href="/davorg/wasted-inches" data-ga-click="News feed, event click, Event click type:CreateEvent target:repo" rel="noreferrer"&gt;davorg/wasted-inches&lt;/a&gt;
  275.  &lt;/div&gt;
  276.  
  277.  &lt;div class="time"&gt;
  278.    &lt;relative-time datetime="2017-02-21T20:02:44Z"&gt;Feb 21, 2017&lt;/relative-time&gt;
  279.  &lt;/div&gt;
  280. &lt;/div&gt;
  281. </content>
  282.  <title>github: davorg created branch master at davorg/wasted-inches</title></entry>
  283.  <entry>
  284.    
  285.    <link rel="alternate" href="https://twitter.com/davorg/status/834083975001935873" type="text/html"/>
  286.    <content type="xhtml">
  287.      <div xmlns="http://www.w3.org/1999/xhtml">I’m going to Amanda Palmer @ Heaven. https://t.co/RV7oPeXCJE</div>
  288.    </content>
  289.    <updated>2017-02-21T16:54:50Z</updated>
  290.  <title>twitter: I’m going to Amanda Palmer @ Heaven. https://t.co/RV7oPeXCJE</title></entry>
  291.  <entry>
  292.    
  293.    <link rel="alternate" href="https://twitter.com/davorg/status/834076353930596352" type="text/html"/>
  294.    <content type="xhtml">
  295.      <div xmlns="http://www.w3.org/1999/xhtml">Sounds like an excellent plan. Well done to everyone who supported the campaign. https://t.co/jlPi5XBXaU via @bhahumanists</div>
  296.    </content>
  297.    <updated>2017-02-21T16:24:33Z</updated>
  298.  <title>twitter: Sounds like an excellent plan. Well done to everyone who supported the campaign. https://t.co/jlPi5XBXaU via @bhahumanists</title></entry>
  299.  <entry>
  300.    
  301.    <link rel="alternate" href="https://twitter.com/davorg/status/834027792874475520" type="text/html"/>
  302.    <content type="xhtml">
  303.      <div xmlns="http://www.w3.org/1999/xhtml">@benxo @AntonioLulic Thanks Ben.</div>
  304.    </content>
  305.    <updated>2017-02-21T13:11:35Z</updated>
  306.  <title>twitter: @benxo @AntonioLulic Thanks Ben.</title></entry>
  307.  <entry>
  308.    
  309.    <link rel="alternate" href="https://twitter.com/davorg/status/833978692196040704" type="text/html"/>
  310.    <content type="xhtml">
  311.      <div xmlns="http://www.w3.org/1999/xhtml">I will never understand why civil partnerships are only allowed for same-sex couples https://t.co/FqcRBfApb2</div>
  312.    </content>
  313.    <updated>2017-02-21T09:56:29Z</updated>
  314.  <title>twitter: I will never understand why civil partnerships are only allowed for same-sex couples https://t.co/FqcRBfApb2</title></entry>
  315.  <entry>
  316.    
  317.    <link rel="alternate" href="https://twitter.com/davorg/status/833973845161803777" type="text/html"/>
  318.    <content type="xhtml">
  319.      <div xmlns="http://www.w3.org/1999/xhtml">Here's the setlist from last night's @katenash show - https://t.co/LTEMFPFMty</div>
  320.    </content>
  321.    <updated>2017-02-21T09:37:13Z</updated>
  322.  <title>twitter: Here's the setlist from last night's @katenash show - https://t.co/LTEMFPFMty</title></entry>
  323.  <entry xmlns:flickr="urn:flickr:user" xmlns:dc="http://purl.org/dc/elements/1.1/">
  324.    
  325.    <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/davorg/32184564254/"/>
  326.    <id>tag:flickr.com,2005:/photo/32184564254</id>
  327.    <published>2017-02-21T09:15:49Z</published>
  328.    <updated>2017-02-21T09:15:49Z</updated>
  329.    <flickr:date_taken>2017-02-21T09:15:49-08:00</flickr:date_taken>
  330.    <dc:date.Taken>2017-02-21T09:15:49-08:00</dc:date.Taken>
  331.    <content type="html"> &lt;p&gt;&lt;a href="http://www.flickr.com/people/davorg/"&gt;Dave Cross&lt;/a&gt; posted a photo:&lt;/p&gt;
  332. &lt;p&gt;&lt;a href="http://www.flickr.com/photos/davorg/32184564254/" title="And [email protected] rocking out"&gt;&lt;img src="http://farm1.staticflickr.com/352/32184564254_34ca965e5b_m.jpg" width="240" height="240" alt="And [email protected] rocking out" /&gt;&lt;/a&gt;&lt;/p&gt;
  333.  
  334. &lt;p&gt;via Instagram &lt;a href="http://ift.tt/2lBnb6b" rel="nofollow"&gt;ift.tt/2lBnb6b&lt;/a&gt;&lt;/p&gt;</content>
  335.    <author>
  336.      <name>Dave Cross</name>
  337.      <uri>http://www.flickr.com/people/davorg/</uri>
  338.      <flickr:nsid>[email protected]</flickr:nsid>
  339.      <flickr:buddyicon>http:[email protected][email protected]</flickr:buddyicon>
  340.    </author>
  341.    <link rel="license" type="text/html" href="https://creativecommons.org/licenses/by-nc-sa/2.0/deed.en"/>
  342.    <link rel="enclosure" type="image/jpeg" href="http://farm1.staticflickr.com/352/32184564254_34ca965e5b_b.jpg"/>
  343.    <category term="ifttt" scheme="http://www.flickr.com/photos/tags/"/>
  344.    <category term="instagram" scheme="http://www.flickr.com/photos/tags/"/>
  345.    <displaycategories>
  346.            </displaycategories>
  347.    <title>flickr: And [email protected] rocking out</title></entry>
  348.  <entry xmlns:flickr="urn:flickr:user" xmlns:dc="http://purl.org/dc/elements/1.1/">
  349.    
  350.    <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/davorg/32903383891/"/>
  351.    <id>tag:flickr.com,2005:/photo/32903383891</id>
  352.    <published>2017-02-21T09:13:34Z</published>
  353.    <updated>2017-02-21T09:13:34Z</updated>
  354.    <flickr:date_taken>2017-02-21T09:13:34-08:00</flickr:date_taken>
  355.    <dc:date.Taken>2017-02-21T09:13:34-08:00</dc:date.Taken>
  356.    <content type="html"> &lt;p&gt;&lt;a href="http://www.flickr.com/people/davorg/"&gt;Dave Cross&lt;/a&gt; posted a photo:&lt;/p&gt;
  357. &lt;p&gt;&lt;a href="http://www.flickr.com/photos/davorg/32903383891/" title="Here's @katenash expounding her manifesto"&gt;&lt;img src="http://farm3.staticflickr.com/2620/32903383891_0e0ed532d8_m.jpg" width="240" height="240" alt="Here's @katenash expounding her manifesto" /&gt;&lt;/a&gt;&lt;/p&gt;
  358.  
  359. &lt;p&gt;via Instagram &lt;a href="http://ift.tt/2kGTqSi" rel="nofollow"&gt;ift.tt/2kGTqSi&lt;/a&gt;&lt;/p&gt;</content>
  360.    <author>
  361.      <name>Dave Cross</name>
  362.      <uri>http://www.flickr.com/people/davorg/</uri>
  363.      <flickr:nsid>[email protected]</flickr:nsid>
  364.      <flickr:buddyicon>http:[email protected][email protected]</flickr:buddyicon>
  365.    </author>
  366.    <link rel="license" type="text/html" href="https://creativecommons.org/licenses/by-nc-sa/2.0/deed.en"/>
  367.    <link rel="enclosure" type="image/jpeg" href="http://farm3.staticflickr.com/2620/32903383891_0e0ed532d8_b.jpg"/>
  368.    <category term="ifttt" scheme="http://www.flickr.com/photos/tags/"/>
  369.    <category term="instagram" scheme="http://www.flickr.com/photos/tags/"/>
  370.    <displaycategories>
  371.            </displaycategories>
  372.    <title>flickr: Here's @katenash expounding her manifesto</title></entry>
  373.  <entry>
  374.    <title>perl hacks: Shaving Last.FM Yaks</title>
  375.    <link rel="alternate" href="http://feedproxy.google.com/~r/PerlHacks/~3/Az-FUbgAPfQ/" type="text/html"/>
  376.    <content type="xhtml">
  377.      <div xmlns="http://www.w3.org/1999/xhtml"><p>Long-time readers might remember that I once had a bit of an obsession with aggregating web feeds on sites that I called “planets”. I wrote <a href="https://metacpan.org/release/Perlanet">Perlanet</a> to make this job easier and I registered the domain <a href="http://theplanetarium.org">theplanetarium.org</a> to host these planets.</p>
  378. <p>The planets I built were of varying levels of usefulness – but of all of them, <a href="http://davorg.theplanetarium.org/">planet davorg</a> was the vanity project. It was simply a way to aggregate all the web feeds that I produced. There were feeds from various blogs along with things like Flickr, Twitter and CPAN.</p>
  379. <p>One of the things I liked about planets was that they were self-maintaining. Once you’ve configured a planet, it will just keep on running (well, as long as the cron job is running). If the web feeds they are aggregating have new content, the planet will have new content. And many of the feeds that powered planet davorg were still running.</p>
  380. <p>But last weekend I found a couple of  problems with it. Firstly, it looked like it was designed by an idiot. Which, to be fair, it was. Web design was never my strong point. But we have <a href="http://getbootstrap.com/">Bootstrap</a> now, so there’s no excuse for web sites to look that bad. So that’s how I spent the first hour or  so – slapping a bit of Bootstrap paint onto the site. I think it now looks acceptable.</p>
  381. <p>The second problem was that not all of the feeds were still running some of them (Delicious, for example) were just dead. I can’t remember the last time I posted anything to Delicious – can you? So I spent some time tweaking and fixing the feeds (replacing CPAN with MetaCPAN, for example). Most of this was easy.</p>
  382. <p>However, one feed was a problem. My <a href="https://last.fm/">Last.fm</a> feed was dead. For over ten years I’ve been “scrobbling” ever song I’ve listened to and one of the feeds I was aggregating was that list. According to <a href="http://www.last.fm/api/feeds">this page</a> on their web site, my feed is supposed to be at <a href="http://ws.audioscrobbler.com/1.0/user/davorg/recenttracks.rss">http://ws.audioscrobbler.com/1.0/user/davorg/recenttracks.rss</a> – and that was the URL in my Perlanet configuration. But it doesn’t work. It returns a 404 error.</p>
  383. <p>I tried to contact someone at Last.fm to find out what was going on, but I haven’t got any kind of response. It looks like they’ve been running on a skeleton staff since CBS took them over and they don’t seem to have the time to support their users (not, I suspect, a recipe for long-term success!)</p>
  384. <p>But there was one possibility. You can get the same data through their <a href="http://www.last.fm/api">API</a>. And some quick experimentation, revealed that their API hasn’t been turned off.</p>
  385. <p>And CPAN has <a href="https://metacpan.org/pod/Net::LastFM">Net::LastFM</a> which will make the API calls for me. Ok, so it hasn’t been updated since 2009, but it still works (I’ve just noticed that there’s also <a href="https://metacpan.org/pod/Net::LastFMAPI">Net::LastFMAPI</a> which is a little more recent).</p>
  386. <p>So it just took a small amount of work to write a little program which grabs uses the Last.fm API to get some JSON that contains the information that I want and convert it to an Atom feed. In case this is useful to anyone else, I’ve put <a href="https://github.com/davorg/lastfm-feed">the code on Github</a>. Please let me know if you do anything interesting with it.</p>
  387. <p>And if anyone from Last.fm reads this. Please either turn the web feeds back on or remove the documentation that still claims they exist.</p>
  388. <p>The post <a rel="nofollow" href="https://perlhacks.com/2017/02/shaving-last-fm-yaks/">Shaving Last.FM Yaks</a> appeared first on <a rel="nofollow" href="https://perlhacks.com">Perl Hacks</a>.</p>
  389. <img src="http://feeds.feedburner.com/~r/PerlHacks/~4/Az-FUbgAPfQ" height="1" width="1" alt=""/></div>
  390.    </content>
  391.    <summary type="xhtml">
  392.      <div xmlns="http://www.w3.org/1999/xhtml"><p>Long-time readers might remember that I once had a bit of an obsession with aggregating web feeds on sites that I called “planets”. I wrote Perlanet to make this job easier and I registered the domain theplanetarium.org to host these planets. The planets I built were of varying levels of usefulness – but of all … </p>
  393. <p class="link-more"><a href="https://perlhacks.com/2017/02/shaving-last-fm-yaks/" class="more-link">Continue reading<span class="screen-reader-text"> "Shaving Last.FM Yaks"</span></a></p>
  394. <p>The post <a rel="nofollow" href="https://perlhacks.com/2017/02/shaving-last-fm-yaks/">Shaving Last.FM Yaks</a> appeared first on <a rel="nofollow" href="https://perlhacks.com">Perl Hacks</a>.</p>
  395. </div>
  396.    </summary>
  397.    <author>
  398.      <name>Dave Cross</name>
  399.    </author>
  400.    <id>https://perlhacks.com/?p=1593</id>
  401.    <published>2017-02-19T17:15:42Z</published>
  402.    <updated>2017-02-19T17:15:42Z</updated>
  403.    <category term="Programming"/>
  404.    <category term="cpan"/>
  405.    <category term="last.fm"/>
  406.    <category term="perlanet"/>
  407.    <category term="planets"/>
  408.    <category term="web feeds"/>
  409.  </entry>
  410.  <entry>
  411.    <title>goodreads: Norse Mythology</title>
  412.    <link rel="alternate" href="http://www.goodreads.com/review/show/1917032416?utm_medium=api&amp;utm_source=rss" type="text/html"/>
  413.    <content type="xhtml">
  414.      <div xmlns="http://www.w3.org/1999/xhtml">
  415.      
  416.      <a href="http://www.goodreads.com/book/show/30809689-norse-mythology?utm_medium=api&amp;utm_source=rss"><img alt="Norse Mythology" src="http://images.gr-assets.com/books/1473862693s/30809689.jpg"/></a><br/>
  417.                                      author: Neil Gaiman<br/>
  418.                                      name: David<br/>
  419.                                      average rating: 4.24<br/>
  420.                                      book published: 2017<br/>
  421.                                      rating: 0<br/>
  422.                                      read at: <br/>
  423.                                      date added: 2017/02/18<br/>
  424.                                      shelves: currently-reading<br/>
  425.                                      review: <br/><br/>
  426.                                      
  427.    </div>
  428.    </content>
  429.    <id>http://www.goodreads.com/review/show/1917032416?utm_medium=api&amp;utm_source=rss</id>
  430.    <published>2017-02-18T02:33:53-08:00</published>
  431.    <updated>2017-02-18T02:33:53-08:00</updated>
  432.  </entry>
  433.  <entry xmlns:flickr="urn:flickr:user" xmlns:dc="http://purl.org/dc/elements/1.1/">
  434.    
  435.    <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/davorg/32922685655/"/>
  436.    <id>tag:flickr.com,2005:/photo/32922685655</id>
  437.    <published>2017-02-15T21:34:32Z</published>
  438.    <updated>2017-02-15T21:34:32Z</updated>
  439.    <flickr:date_taken>2017-02-15T21:34:32-08:00</flickr:date_taken>
  440.    <dc:date.Taken>2017-02-15T21:34:32-08:00</dc:date.Taken>
  441.    <content type="html"> &lt;p&gt;&lt;a href="http://www.flickr.com/people/davorg/"&gt;Dave Cross&lt;/a&gt; posted a photo:&lt;/p&gt;
  442. &lt;p&gt;&lt;a href="http://www.flickr.com/photos/davorg/32922685655/" title="Neil Gaiman discussing Norse Mythology"&gt;&lt;img src="http://farm1.staticflickr.com/773/32922685655_3fb3da4294_m.jpg" width="240" height="240" alt="Neil Gaiman discussing Norse Mythology" /&gt;&lt;/a&gt;&lt;/p&gt;
  443.  
  444. &lt;p&gt;via Instagram &lt;a href="http://ift.tt/2kzjOst" rel="nofollow"&gt;ift.tt/2kzjOst&lt;/a&gt;&lt;/p&gt;</content>
  445.    <author>
  446.      <name>Dave Cross</name>
  447.      <uri>http://www.flickr.com/people/davorg/</uri>
  448.      <flickr:nsid>[email protected]</flickr:nsid>
  449.      <flickr:buddyicon>http:[email protected][email protected]</flickr:buddyicon>
  450.    </author>
  451.    <link rel="license" type="text/html" href="https://creativecommons.org/licenses/by-nc-sa/2.0/deed.en"/>
  452.    <link rel="enclosure" type="image/jpeg" href="http://farm1.staticflickr.com/773/32922685655_3fb3da4294_b.jpg"/>
  453.    <category term="ifttt" scheme="http://www.flickr.com/photos/tags/"/>
  454.    <category term="instagram" scheme="http://www.flickr.com/photos/tags/"/>
  455.    <displaycategories>
  456.            </displaycategories>
  457.    <title>flickr: Neil Gaiman discussing Norse Mythology</title></entry>
  458.  <entry xmlns:flickr="urn:flickr:user" xmlns:dc="http://purl.org/dc/elements/1.1/">
  459.    
  460.    <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/davorg/32755517921/"/>
  461.    <id>tag:flickr.com,2005:/photo/32755517921</id>
  462.    <published>2017-02-13T13:40:50Z</published>
  463.    <updated>2017-02-13T13:40:50Z</updated>
  464.    <flickr:date_taken>2017-02-13T13:40:50-08:00</flickr:date_taken>
  465.    <dc:date.Taken>2017-02-13T13:40:50-08:00</dc:date.Taken>
  466.    <content type="html"> &lt;p&gt;&lt;a href="http://www.flickr.com/people/davorg/"&gt;Dave Cross&lt;/a&gt; posted a photo:&lt;/p&gt;
  467. &lt;p&gt;&lt;a href="http://www.flickr.com/photos/davorg/32755517921/" title="Finally got to see Tower Bridge lift"&gt;&lt;img src="http://farm1.staticflickr.com/592/32755517921_c786ffc718_m.jpg" width="240" height="240" alt="Finally got to see Tower Bridge lift" /&gt;&lt;/a&gt;&lt;/p&gt;
  468.  
  469. &lt;p&gt;via Instagram &lt;a href="http://ift.tt/2lI73NN" rel="nofollow"&gt;ift.tt/2lI73NN&lt;/a&gt;&lt;/p&gt;</content>
  470.    <author>
  471.      <name>Dave Cross</name>
  472.      <uri>http://www.flickr.com/people/davorg/</uri>
  473.      <flickr:nsid>[email protected]</flickr:nsid>
  474.      <flickr:buddyicon>http:[email protected][email protected]</flickr:buddyicon>
  475.    </author>
  476.    <link rel="license" type="text/html" href="https://creativecommons.org/licenses/by-nc-sa/2.0/deed.en"/>
  477.    <link rel="enclosure" type="image/jpeg" href="http://farm1.staticflickr.com/592/32755517921_c786ffc718_b.jpg"/>
  478.    <category term="ifttt" scheme="http://www.flickr.com/photos/tags/"/>
  479.    <category term="instagram" scheme="http://www.flickr.com/photos/tags/"/>
  480.    <displaycategories>
  481.            </displaycategories>
  482.    <title>flickr: Finally got to see Tower Bridge lift</title></entry>
  483.  <entry>
  484.    <title>goodreads: Ready Player One</title>
  485.    <link rel="alternate" href="http://www.goodreads.com/review/show/1910912683?utm_medium=api&amp;utm_source=rss" type="text/html"/>
  486.    <content type="xhtml">
  487.      <div xmlns="http://www.w3.org/1999/xhtml">
  488.      
  489.      <a href="http://www.goodreads.com/book/show/9969571-ready-player-one?utm_medium=api&amp;utm_source=rss"><img alt="Ready Player One" src="http://images.gr-assets.com/books/1406383612s/9969571.jpg"/></a><br/>
  490.                                      author: Ernest Cline<br/>
  491.                                      name: David<br/>
  492.                                      average rating: 4.31<br/>
  493.                                      book published: 2011<br/>
  494.                                      rating: 0<br/>
  495.                                      read at: <br/>
  496.                                      date added: 2017/02/12<br/>
  497.                                      shelves: currently-reading<br/>
  498.                                      review: <br/><br/>
  499.                                      
  500.    </div>
  501.    </content>
  502.    <id>http://www.goodreads.com/review/show/1910912683?utm_medium=api&amp;utm_source=rss</id>
  503.    <published>2017-02-12T02:36:59-08:00</published>
  504.    <updated>2017-02-12T02:36:59-08:00</updated>
  505.  </entry>
  506.  <entry>
  507.    <title>davblog: Top of the Pops and Me</title>
  508.    <link rel="alternate" href="http://feedproxy.google.com/~r/realdavblog/~3/daCLCIXguDY/top-of-the-pops-and-me.html" type="text/html"/>
  509.    <content type="html">&lt;p&gt;In 2011, the BBC started repeating old episodes of &lt;em&gt;&lt;a href="https://en.wikipedia.org/wiki/Top_of_the_Pops"&gt;Top of the Pops&lt;/a&gt;&lt;/em&gt;. Initially, they were showing one episode a week, as close as possible to thirty-five years after the original broadcast (starting with shows from 1976). More recently, they’ve been showing two episodes a week, so we’re currently in early 1983.&lt;/p&gt;
  510. &lt;p&gt;I’ve been watching them avidly since they started, but I’ve been even more interested in watching them over the last year or so – since the repeats hit October 1981. That’s because that’s when I moved to London to go to university and I started to watch fewer and fewer episodes as I, increasingly, had better ways to spend my Thursday evenings. So I’m seeing many of these broadcasts for the first time.&lt;/p&gt;
  511. &lt;p&gt;Over the summer of 1982 I pretty much stopped watching completely. I managed to get myself elected as Social Secretary at City University and many of my evenings were spent running gigs, discos and various other entertainments for the students.&lt;/p&gt;
  512. &lt;p&gt;I’ve written before about a couple of things that happened while I was Social Secretary (here’s me being &lt;a href="https://blog.dave.org.uk/2003/08/bad-manners.html"&gt;threatened by the lead singer of Bad Manners&lt;/a&gt; and here I am &lt;a href="https://blog.dave.org.uk/2002/07/progressive-roc.html"&gt;booking Marillion at the start of their first major tour&lt;/a&gt;) but recent episodes of &lt;em&gt;Top of the Pops&lt;/em&gt; have reminded me of a few other incidents.&lt;/p&gt;
  513. &lt;p&gt;There was the time that I was mildly censured by the &lt;em&gt;London Student&lt;/em&gt; newspaper because I had booked &lt;a href="https://en.wikipedia.org/wiki/Toto_Coelo"&gt;Toto Coelo&lt;/a&gt; for a Christmas Party. Or the time I booked the &lt;a href="https://en.wikipedia.org/wiki/The_Hee_Bee_Gee_Bees"&gt;Hee Bee Gee Bees&lt;/a&gt; (featuring Angus Deayton and Philip Pope) and ended up inviting Philip Pope back to a hall of residence party[1].&lt;/p&gt;
  514. &lt;p&gt;A few recent episodes of &lt;em&gt;Top of the Pops&lt;/em&gt; have featured &lt;a href="https://en.wikipedia.org/wiki/Blue_Zoo"&gt;Blue Zoo&lt;/a&gt; singing “Cry Boy Cry”. I’m not sure I realised what a big hit that was. They played a few gigs at the university – including a “Blue Party Night” at a hall of residence where I painted my face blue, using dye that took days to get out. And I’m pretty sure that they were the band I cancelled when I was offered the Marillion date I mentioned above.&lt;/p&gt;
  515. &lt;p&gt;But a recent &lt;em&gt;Top of the Pops&lt;/em&gt; reminded me of the biggest mistake I made while I was Social Secretary. I turned down the chance to book Culture Club.&lt;/p&gt;
  516. &lt;p&gt;To be fair to myself, no-one had heard of them when I was offered them. Well, no-one who wasn’t really in tune with the London music scene. Of course, you could say that someone who was running entertainment for a London university should really be in touch with the music scene. And I’d have no answer to that.&lt;/p&gt;
  517. &lt;p&gt;But when their agent called to offer me the gig, I hadn’t heard of them.&lt;/p&gt;
  518. &lt;p&gt;They were just about to start a tour and wanted somewhere to play a warm-up gig. Back then (and, I suppose, it’s still true now) bands used to like using student unions for warm-up gigs. Student unions were like private clubs – you couldn’t get in without a union card. Acts could get their performances right without making fools of themselves in front of the general public. That was how most student unions got most of their decent acts.&lt;/p&gt;
  519. &lt;p&gt;So Culture Club’s agent called me and offered me a warm-up gig for their first national tour. And I turned them down because I had never heard of them.&lt;/p&gt;
  520. &lt;p&gt;I thought that was the last I would hear of it. But I was wrong. A few months later, at the end of October 1982, they made their first appearance on Top of the Pops. I think this is it (warning, a few seconds of Jimmy Savile at the start of this clip).&lt;/p&gt;
  521. &lt;div class="jetpack-video-wrapper"&gt;&lt;iframe class='youtube-player' type='text/html' width='840' height='503' src='https://www.youtube.com/embed/2Pgu9TP618E?version=3&amp;rel=1&amp;fs=1&amp;autohide=2&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent' allowfullscreen='true' style='border:0;'&gt;&lt;/iframe&gt;&lt;/div&gt;
  522. &lt;p&gt;Of course, these days we’re all used to seeing Boy George on the telly. But in 1982, this wasn’t the case. It was a sensation. He was all over the tabloid front pages the following day. People talked about it for weeks. Instantly, everyone knew who Culture Club were.&lt;/p&gt;
  523. &lt;p&gt;Oh, and the date that I had been offered for the warm-up gig – it was, of course, the day after this &lt;em&gt;Top of the Pops&lt;/em&gt;. If I had taken the booking, it would have been a great night. I would have looked like someone who really had his finger on the pulse of the music scene.&lt;/p&gt;
  524. &lt;p&gt;Instead, I’m the man who turned down Culture Club.&lt;/p&gt;
  525. &lt;p&gt;[1] Although looking at the dates, it seems more likely that this was during the previous year – when I was just a member of the entertainments committee.&lt;/p&gt;
  526. &lt;p&gt;The post &lt;a rel="nofollow" href="https://blog.dave.org.uk/2017/02/top-of-the-pops-and-me.html"&gt;Top of the Pops and Me&lt;/a&gt; appeared first on &lt;a rel="nofollow" href="https://blog.dave.org.uk"&gt;Davblog&lt;/a&gt;.&lt;/p&gt;
  527. &lt;img src="http://feeds.feedburner.com/~r/realdavblog/~4/daCLCIXguDY" height="1" width="1" alt=""/&gt;</content>
  528.    <summary type="xhtml">
  529.      <div xmlns="http://www.w3.org/1999/xhtml"><p>In 2011, the BBC started repeating old episodes of Top of the Pops. Initially, they were showing one episode a week, as close as possible to thirty-five years after the original broadcast (starting with shows from 1976). More recently, they’ve been showing two episodes a week, so we’re currently in early 1983. I’ve been watching … <a href="https://blog.dave.org.uk/2017/02/top-of-the-pops-and-me.html" class="more-link">Continue reading<span class="screen-reader-text"> "Top of the Pops and Me"</span></a></p>
  530. <p>The post <a rel="nofollow" href="https://blog.dave.org.uk/2017/02/top-of-the-pops-and-me.html">Top of the Pops and Me</a> appeared first on <a rel="nofollow" href="https://blog.dave.org.uk">Davblog</a>.</p>
  531. </div>
  532.    </summary>
  533.    <author>
  534.      <name>Dave Cross</name>
  535.    </author>
  536.    <id>https://blog.dave.org.uk/?p=3594</id>
  537.    <published>2017-02-11T14:56:19Z</published>
  538.    <updated>2017-02-11T14:56:19Z</updated>
  539.    <category term="music"/>
  540.    <category term="culture club"/>
  541.    <category term="student union"/>
  542.    <category term="top of the pops"/>
  543.  </entry>
  544.  <entry xmlns:flickr="urn:flickr:user" xmlns:dc="http://purl.org/dc/elements/1.1/">
  545.    
  546.    <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/davorg/32672698042/"/>
  547.    <id>tag:flickr.com,2005:/photo/32672698042</id>
  548.    <published>2017-02-10T21:31:37Z</published>
  549.    <updated>2017-02-10T21:31:37Z</updated>
  550.    <flickr:date_taken>2017-02-10T21:31:37-08:00</flickr:date_taken>
  551.    <dc:date.Taken>2017-02-10T21:31:37-08:00</dc:date.Taken>
  552.    <content type="html"> &lt;p&gt;&lt;a href="http://www.flickr.com/people/davorg/"&gt;Dave Cross&lt;/a&gt; posted a photo:&lt;/p&gt;
  553. &lt;p&gt;&lt;a href="http://www.flickr.com/photos/davorg/32672698042/" title="Lawrence Krauss and Richard Dawkins at the BHA Darwin Day lecture"&gt;&lt;img src="http://farm3.staticflickr.com/2035/32672698042_174f2a5b7f_m.jpg" width="240" height="240" alt="Lawrence Krauss and Richard Dawkins at the BHA Darwin Day lecture" /&gt;&lt;/a&gt;&lt;/p&gt;
  554.  
  555. &lt;p&gt;via Instagram &lt;a href="http://ift.tt/2kBwemX" rel="nofollow"&gt;ift.tt/2kBwemX&lt;/a&gt;&lt;/p&gt;</content>
  556.    <author>
  557.      <name>Dave Cross</name>
  558.      <uri>http://www.flickr.com/people/davorg/</uri>
  559.      <flickr:nsid>[email protected]</flickr:nsid>
  560.      <flickr:buddyicon>http:[email protected][email protected]</flickr:buddyicon>
  561.    </author>
  562.    <link rel="license" type="text/html" href="https://creativecommons.org/licenses/by-nc-sa/2.0/deed.en"/>
  563.    <link rel="enclosure" type="image/jpeg" href="http://farm3.staticflickr.com/2035/32672698042_174f2a5b7f_b.jpg"/>
  564.    <category term="ifttt" scheme="http://www.flickr.com/photos/tags/"/>
  565.    <category term="instagram" scheme="http://www.flickr.com/photos/tags/"/>
  566.    <displaycategories>
  567.            </displaycategories>
  568.    <title>flickr: Lawrence Krauss and Richard Dawkins at the BHA Darwin Day lecture</title></entry>
  569.  <entry>
  570.    <title>perl hacks: Two Weekend Projects</title>
  571.    <link rel="alternate" href="http://feedproxy.google.com/~r/PerlHacks/~3/_weKYQMEN5I/" type="text/html"/>
  572.    <content type="xhtml">
  573.      <div xmlns="http://www.w3.org/1999/xhtml"><p>It’s far too long since I’ve posted anything here. I’ve no excuse really. Following <a href="//perlhacks.com/2016/11/the-fragility-of-contracting/">the end of my contract in Canary Wharf</a>, I was off work for seven weeks. OK, I was on holiday for two of those weeks, but that still leaves five weeks when I could have been doing something constructive, but actually just spent a lot of time watching Netflix.</p>
  574. <p>But there were a couple of things I did. Neither of them took more than a few hours, but I thought it was worth writing them up – if only to give an example of a couple of really useful (to me, at least) things that I was able to build really quickly with Perl.</p>
  575. <h2>Cooking Vinyl</h2>
  576. <p>If you were a music fan in the 1990s, then there’s a good chance that you own at least one album released on <a href="http://cookingvinyl.com/">Cooking Vinyl Records</a>. At times, it seemed like pretty much every album I bought was released by them. Back in 2005, I wrote a blog post where I tried to explain <a href="https://blog.dave.org.uk/2005/06/cooking-vinyl.html">how much they meant to me</a>.</p>
  577. <p>In particular, they produced a series of compilation albums that introduced me to so many of my favourite acts. Ten years ago, I tried to find a definitive list of all of the songs and artists which appeared on those compilation albums. As I failed to find one, I created it myself. At the time, it was a static list of albums which listed the tracks and artists on each of the albums. For ten years I’ve had it in the back of my head to do something more interesting with the data. A few weeks ago, I finally got round to it.</p>
  578. <p>As I said, the original page just had a list of albums with artists and song titles. That’s useful, but it would be more interesting to be able to cross-reference the data in various ways – list all of the albums that an artist appeared on, for example. And for that, we need a database.</p>
  579. <p>If you’ve come on any of my database training course over the last ten years, you’ll know that I use a CD database example. The model that I use is pretty simple and, in particular, it assumes that all tracks on a given CD are by the same artist. As I say in the class “various artists compilations don’t exist in this simplified universe”. Obviously, that’s not going to work in this example. So I needed to come up with another database model.</p>
  580. <figure id="attachment_1580" style="width: 256px" class="wp-caption alignleft"><img class="size-medium wp-image-1580" src="//perlhacks.com/wp-content/uploads/2017/02/cook-256x300.png" alt="Compilation album data model" width="256" height="300" srcset="https://perlhacks.com/wp-content/uploads/2017/02/cook-256x300.png 256w, https://perlhacks.com/wp-content/uploads/2017/02/cook.png 277w" sizes="(max-width: 256px) 100vw, 256px"/><figcaption class="wp-caption-text">Compilation album data model</figcaption></figure>
  581. <p>Here’s the data model I designed. You’ll see that it all hinges on the track table. A track is an instance of a particular song, recorded by a particular album appearing on a particular album. The only extra data on the track table is the “number” column which allows us to declare the order in which tracks appear on an album.</p>
  582. <p>Advanced students will have spotted an omission from the data model. An artist might well have different versions of a song. There could be the original version, an edited single version and many live or remixed versions. So actually, we could add a “recording” table and it’s the recording that appears on an album. That’s, perhaps, an enhancement for the future.</p>
  583. <p>Having designed the database the rest of the code just falls out really. I already had a data file so it was just a case of parsing that and inserting the data into an SQLite database. <a href="https://metacpan.org/release/DBIx-Class">DBIx:Class</a> (and, particularly the find_or_create method) makes this trivial. I then wrote another program that generated the web site using the <a href="https://metacpan.org/release/Template-Toolkit">Template Toolkit</a>. Nothing complex there at all.</p>
  584. <p>The site is at <a href="http://cookingvinyl.dave.org.uk/">http://cookingvinyl.dave.org.uk/</a>. And all of <a href="https://github.com/davorg/cookingvinyl/">the code is on Github</a>. It could do with being made a bit prettier – perhaps I can add some pictures.</p>
  585. <p>Why not have a look. And check out some Cooking Vinyl recordings.</p>
  586. <h2>Tower Bridge</h2>
  587. <p>I’ve lived in London for thirty-five years. And in all that time I have never seen Tower Bridge opening. Oh, I’ve seen it when it’s  open, but I’ve never been in the right place at the right time to see it actually opening. As a Londoner, that’s a matter of supreme embarrassment to me.</p>
  588. <p>But the office I’m working in currently is three minutes walk from Tower Bridge. All I need is a way to get a notification a few minutes before the bridge lifts. Surely, there must be a way to get that?</p>
  589. <p>Sadly, no. The Tower Bridge web site has <a href="http://www.towerbridge.org.uk/lift-times/">a page listing the upcoming lifts</a>, but no service that would send any kind of notification. So, once again, it was up to me to provide one. I asked the London Perl Mongers on IRC what would be a good way to get notifications of upcoming events on an Android phone and <a href="https://twitter.com/tokenscandi">Ilmari</a> pointed out that the obvious method was to create a calendar that could be read by the calendar app on my phone.</p>
  590. <p>So that’s what I’ve done. I use <a href="https://metacpan.org/pod/Web::Query">Web::Query</a> to scrape the data from the Tower Bridge web site (doing some over-complicated madness to account for the fact that they are missing the year from their dates) and then create a .ics file using <a href="https://metacpan.org/pod/Date::ICal">Date::ICal</a> and <a href="https://metacpan.org/pod/Data::ICal">Data::ICal</a>. I also create a JSON version of the data in case it’s useful to anyone (if it is, please let me know).</p>
  591. <p>The site is at <a href="http://towerbridge.dave.org.uk/">http://towerbridge.dave.org.uk/</a> and (of course) <a href="https://github.com/davorg/towerbridge">the code is on Github</a>.</p>
  592. <hr/>
  593. <p>So, there you are. Two (hopefully) little projects that I threw togther in a very small amount of time using the power of Perl. Please let me know if you find either of them useful.</p>
  594. <p>The post <a rel="nofollow" href="https://perlhacks.com/2017/02/two-weekend-projects/">Two Weekend Projects</a> appeared first on <a rel="nofollow" href="https://perlhacks.com">Perl Hacks</a>.</p>
  595. <img src="http://feeds.feedburner.com/~r/PerlHacks/~4/_weKYQMEN5I" height="1" width="1" alt=""/></div>
  596.    </content>
  597.    <summary type="xhtml">
  598.      <div xmlns="http://www.w3.org/1999/xhtml"><p>It’s far too long since I’ve posted anything here. I’ve no excuse really. Following the end of my contract in Canary Wharf, I was off work for seven weeks. OK, I was on holiday for two of those weeks, but that still leaves five weeks when I could have been doing something constructive, but actually … </p>
  599. <p class="link-more"><a href="https://perlhacks.com/2017/02/two-weekend-projects/" class="more-link">Continue reading<span class="screen-reader-text"> "Two Weekend Projects"</span></a></p>
  600. <p>The post <a rel="nofollow" href="https://perlhacks.com/2017/02/two-weekend-projects/">Two Weekend Projects</a> appeared first on <a rel="nofollow" href="https://perlhacks.com">Perl Hacks</a>.</p>
  601. </div>
  602.    </summary>
  603.    <author>
  604.      <name>Dave Cross</name>
  605.    </author>
  606.    <id>https://perlhacks.com/?p=1577</id>
  607.    <published>2017-02-05T12:54:17Z</published>
  608.    <updated>2017-02-05T12:54:17Z</updated>
  609.    <category term="Programming"/>
  610.    <category term="cooking vinyl"/>
  611.    <category term="perl"/>
  612.    <category term="programming"/>
  613.    <category term="tower bridge"/>
  614.  </entry>
  615.  <entry>
  616.    <title>davblog: 2016 in Gigs</title>
  617.    <link rel="alternate" href="http://feedproxy.google.com/~r/realdavblog/~3/WoYKczaIcxk/2016-in-gigs.html" type="text/html"/>
  618.    <content type="html">&lt;p&gt;Time for my traditional round-up of the gigs I saw in the previous year.&lt;/p&gt;
  619. &lt;p&gt;According to &lt;a href="https://www.songkick.com/users/davorg/gigography"&gt;Songkick&lt;/a&gt;, I saw 39 gigs in 2016. That’s the lowest number since 2012 (when I saw 36 – but had the excuse that my leg was in plaster for six weeks and I didn’t get out much).&lt;/p&gt;
  620. &lt;p&gt;Let’s start with the disappointments. I left two gigs at the interval. I had wanted to see Marc Almond for a long time, but when it finally happened it was all just too torch song for my tastes. I’m told the second half was much better.&lt;/p&gt;
  621. &lt;p&gt;Then there was Barclay James Harvest (or rather, John Lees’ Barclay James Harvest – the two surviving members of BJH both have their own touring version of the band). Sometimes going to see an act for the first time for thirty-five years isn’t a good idea. They just didn’t hold my interest the way they did back in the early 80s. When they took an early interval (after only half an hour on stage) I ducked out. I hope the second half was longer.&lt;/p&gt;
  622. &lt;p&gt;I didn’t leave, but I thought the &lt;a href="https://www.songkick.com/concerts/27832739-bjork-at-eventim-apollo" rel="nofollow"&gt;Björk&lt;/a&gt; show at the Hammersmith Odeon was pretty disappointing too. I think I’m in a minority there though.&lt;/p&gt;
  623. &lt;p&gt;I only saw two bands twice – Sunflower Bean and the Magnetic North. And this might be the first year in living memory that I didn’t see any members of the Carthy clan playing.&lt;/p&gt;
  624. &lt;p&gt;I ticked off four more acts in my “acts from my youth that I never got round to seeing” list – Toyah, ELO, ABC and the Human League. I already have a ticket to see ABC again.&lt;/p&gt;
  625. &lt;p&gt;Usually, Amanda Palmer gets a free pass onto the top ten list, but in 2016 I only saw her as a special guest at a Jherek Bischoff show that didn’t quite make the cut.&lt;/p&gt;
  626. &lt;p&gt;Here, in chronological order, are the ten best gigs I saw in 2016.&lt;/p&gt;
  627. &lt;ul&gt;
  628. &lt;li&gt;&lt;a href="https://www.songkick.com/concerts/25578584-sunflower-bean-at-dome-tufnell-park"&gt;Sunflower Bean&lt;/a&gt; – the first show (at the Dome) just trumps the second (at the Scala) proving once again that smaller venues are better. I reckon 2017 will be your last chance to see them in a smallish venue. That’s them in the photo.&lt;/li&gt;
  629. &lt;li&gt;&lt;a href="https://www.songkick.com/concerts/25166119-soak-at-koko"&gt;SOAK&lt;/a&gt; – I’ve loved SOAK since I first saw her support Chvrches a couple of years ago. And live, she gets better and better.&lt;/li&gt;
  630. &lt;li&gt;&lt;a href="https://www.songkick.com/concerts/25375889-jeff-lynnes-elo-at-o2-arena"&gt;ELO&lt;/a&gt; – Yes, incredibly cheesy, of course. But great fun. They have so many fabulous songs.&lt;/li&gt;
  631. &lt;li&gt;&lt;a href="https://www.songkick.com/concerts/25515519-orchestral-manoeuvres-in-the-dark-at-royal-albert-hall" rel="nofollow"&gt;Orchestral Manoeuvres In The Dark&lt;/a&gt; – This was the night they played &lt;em&gt;Architecture &amp; Morality&lt;/em&gt; and &lt;em&gt;Dazzle Ships&lt;/em&gt;. Not really their best-known material – but the fans loved it.&lt;/li&gt;
  632. &lt;li&gt;&lt;a href="https://www.songkick.com/festivals/1509984-guy-garveys-meltdown/id/26430224-guy-garveys-meltdown-2016" rel="nofollow"&gt;Laura Marling&lt;/a&gt; – You can’t go wrong seeing Laura Marling play whenever possible and this show was no exception. I already have a ticket to see her in a couple of months time when she launches her new album.&lt;/li&gt;
  633. &lt;li&gt;&lt;a href="https://www.songkick.com/concerts/24390879-belle-and-sebastian-at-royal-albert-hall" rel="nofollow"&gt;Belle and Sebastian&lt;/a&gt; – Only the second time I’ve seen them, but they are now a must-see. This show had them playing all of &lt;em&gt;Tigermilk&lt;/em&gt;. I’m seeing them again in 2017.&lt;/li&gt;
  634. &lt;li&gt;&lt;a href="https://www.songkick.com/concerts/26638194-orb-at-electric-brixton" rel="nofollow"&gt;The Orb&lt;/a&gt; – The Orb playing all of &lt;i&gt;Adventures Beyond the Ultraworld&lt;/i&gt;. What’s not to like?&lt;/li&gt;
  635. &lt;li&gt;&lt;a href="https://www.songkick.com/concerts/27734784-magnetic-north-uk-at-riba" rel="nofollow"&gt;The Magnetic North&lt;/a&gt; – The show at RIBA was the second time I saw them in 2016. Their new album, &lt;em&gt;Prospect of Skelmersdale&lt;/em&gt; is even better than their debut and I highly recommend seeing them live.&lt;/li&gt;
  636. &lt;li&gt;&lt;a href="https://www.songkick.com/concerts/27002469-abc-at-royal-festival-hall-southbank-centre" rel="nofollow"&gt;ABC&lt;/a&gt; – In the first half, they played random hits along with selections from &lt;em&gt;The Lexicon of Love II&lt;/em&gt;. But in the second half, they played all of &lt;em&gt;The Lexicon of Love&lt;/em&gt;. Everyone in the audience knew every lyric and sang along with gusto. It was sublime.&lt;/li&gt;
  637. &lt;li&gt;&lt;a href="https://www.songkick.com/concerts/27522319-christine-and-the-queens-at-o2-academy-brixton" rel="nofollow"&gt;Christine and the Queens&lt;/a&gt; – What an awesome act. One of the best live performances I’ve seen for a very long time.&lt;/li&gt;
  638. &lt;/ul&gt;
  639. &lt;p&gt;I’ve just deleted &lt;a href="https://www.songkick.com/concerts/25404639-marianne-faithfull-at-roundhouse"&gt;Marianne Faithful&lt;/a&gt; and &lt;a href="https://www.songkick.com/concerts/27044079-staves-at-royal-festival-hall-southbank-centre" rel="nofollow"&gt;The Staves&lt;/a&gt; from this list as it was too long. Other shows bubbling outside the top ten include &lt;a href="https://www.songkick.com/concerts/26679579-barenaked-ladies-at-roundhouse" rel="nofollow"&gt;Barenaked Ladies&lt;/a&gt;, &lt;a href="https://www.songkick.com/concerts/27002474-st-etienne-at-heaven" rel="nofollow"&gt;St. Etienne&lt;/a&gt; and &lt;a href="https://www.songkick.com/concerts/28187219-hannah-peel-at-st-leonards-church-shoreditch" rel="nofollow"&gt;Hannah Peel&lt;/a&gt;. It’s mark of the quality of the shows I’ve seen this year that I haven’t found space for &lt;a href="https://www.songkick.com/concerts/27909884-savages-at-o2-academy-brixton" rel="nofollow"&gt;Savages&lt;/a&gt;, &lt;a href="https://www.songkick.com/concerts/27449424-pixies-at-o2-academy-brixton" rel="nofollow"&gt;Pixies&lt;/a&gt; or &lt;a href="https://www.songkick.com/concerts/27070369-billy-bragg-at-union-chapel" rel="nofollow"&gt;Billy Bragg&lt;/a&gt;.&lt;/p&gt;
  640. &lt;p&gt;And let’s spare a thought for acts we’ll never see performing again. I will alway regret never seeing Prince live and it’s over twenty years since I saw David Bowie play. But of all the talented musicians who died in 2016 I think it’s the two Leonard Cohen shows I saw (in 1993 and 2013) that I will treasure the most.&lt;/p&gt;
  641. &lt;p&gt;There are “&lt;a href="http://blog.dave.org.uk/tag/year-in-gigs"&gt;year in gigs&lt;/a&gt;” posts for every year since 2011.&lt;/p&gt;
  642. &lt;p&gt;The post &lt;a rel="nofollow" href="https://blog.dave.org.uk/2017/01/2016-in-gigs.html"&gt;2016 in Gigs&lt;/a&gt; appeared first on &lt;a rel="nofollow" href="https://blog.dave.org.uk"&gt;Davblog&lt;/a&gt;.&lt;/p&gt;
  643. &lt;img src="http://feeds.feedburner.com/~r/realdavblog/~4/WoYKczaIcxk" height="1" width="1" alt=""/&gt;</content>
  644.    <summary type="xhtml">
  645.      <div xmlns="http://www.w3.org/1999/xhtml"><p>Time for my traditional round-up of the gigs I saw in the previous year. According to Songkick, I saw 39 gigs in 2016. That’s the lowest number since 2012 (when I saw 36 – but had the excuse that my leg was in plaster for six weeks and I didn’t get out much). Let’s start with … <a href="https://blog.dave.org.uk/2017/01/2016-in-gigs.html" class="more-link">Continue reading<span class="screen-reader-text"> "2016 in Gigs"</span></a></p>
  646. <p>The post <a rel="nofollow" href="https://blog.dave.org.uk/2017/01/2016-in-gigs.html">2016 in Gigs</a> appeared first on <a rel="nofollow" href="https://blog.dave.org.uk">Davblog</a>.</p>
  647. </div>
  648.    </summary>
  649.    <author>
  650.      <name>Dave Cross</name>
  651.    </author>
  652.    <id>http://blog.dave.org.uk/?p=3586</id>
  653.    <published>2017-01-07T11:50:30Z</published>
  654.    <updated>2017-01-07T11:50:30Z</updated>
  655.    <category term="music"/>
  656.    <category term="2016"/>
  657.    <category term="gigs"/>
  658.    <category term="review"/>
  659.    <category term="year in gigs"/>
  660.  </entry>
  661.  <entry>
  662.    <title>cpan: DAVECROSS has released Array-Compare-v3.0.0</title>
  663.    <link rel="alternate" href="https://metacpan.org/release/DAVECROSS/Array-Compare-v3.0.0" type="text/html"/>
  664.    <content type="xhtml">
  665.      <div xmlns="http://www.w3.org/1999/xhtml"> </div>
  666.    </content>
  667.    <summary type="xhtml">
  668.      <div xmlns="http://www.w3.org/1999/xhtml">Perl extension for comparing arrays.</div>
  669.    </summary>
  670.    <author>
  671.      <name>DAVECROSS</name>
  672.    </author>
  673.    <id>https://metacpan.org/release/DAVECROSS/Array-Compare-v3.0.0</id>
  674.    <published>2016-12-13T11:59:04</published>
  675.    <updated>2016-12-13T11:59:04</updated>
  676.  </entry>
  677.  <entry>
  678.    <title>perl hacks: Version Numbers</title>
  679.    <link rel="alternate" href="http://feedproxy.google.com/~r/PerlHacks/~3/XVzV5zDqExQ/" type="text/html"/>
  680.    <content type="xhtml">
  681.      <div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://perlhacks.com/2016/12/hacking-symbolapproxsub/">Last week I mentioned</a> how I had uploaded a new version of <a href="https://metacpan.org/release/Symbol-Approx-Sub">Symbol::Approx::Sub</a>. Because there were pretty major changes to the inner workings of the module (although the interface still looked the same) I decided that I would move it from version 2.07 to version 3. At the same time, I decided that I would switch to a <a href="http://semver.org/">semantic versioning</a> scheme.</p>
  682. <p>Later in the week, I released minor updates to a few more of my modules. And I decided to apply semantic versioning to those as well. But as I was only making minor packaging fixes to these modules, I didn’t increment the major version number. For example, Array::Compare went from 12.2 to 12.2.1.</p>
  683. <p>It turns out that was a mistake.</p>
  684. <p>Well, I don’t really think it was a mistake. I think it was the right thing to do. But it appears that my opinion is at odds with what some parts of the Perl toolchain think.</p>
  685. <p>Last night I got <a href="https://rt.cpan.org/Public/Bug/Display.html?id=119216">this bug report</a>. It seems that by switching to three-part semantic versions, the version number can (in some quite common circumstances) appear to decrease.</p>
  686. <p>To my mind, a version number is a dot-separated sequence of numbers. So 12.2 is smaller than 12.2.1. Any sane version number comparison will separate the two strings on dots and compare the individual components. Any missing components (12.2 is, for example, one component shorter than 12.2.1) should be assumed to be zero.</p>
  687. <p>But that’s not what the Perl toolchain does. Observe:</p><pre class="crayon-plain-tag">$ perl -Mversion -E"say version-&gt;parse('2.12')-&gt;normal"
  688. v2.120.0
  689. $ perl -Mversion -E"say version-&gt;parse('2.12.1')-&gt;normal"
  690. v2.12.1
  691. $ perl -Mversion -E"say version-&gt;parse('2.12') &lt;=&gt; version-&gt;parse('2.12.1')"
  692. 1</pre><p>When the version number with two components (2.12) is split into components, the second component is bizarrely treated as a three-digit number so it becomes 12o instead of 12 and when it is compared with the second component of the three-component version, 120 is obviously larger than 12 and any tool which relies on this behaviour to work out which version of a module is the most recent will get the wrong answer.</p>
  693. <p>This leads to other “interesting” effects. In my head, versions 1.1, 1.01 and 1.001 are all the same version. The leading zeroes mean nothing. But under this scheme, they are very different version numbers.</p>
  694. <p>I know that versioning isn’t as easy as it should be and I know that some people use bizarre versioning systems. And I’m pretty sure that no matter how bizarre a versioning system is, you’ll almost certainly find an example of it on CPAN. So I suppose that this behaviour was a “least worse” scenario that was chosen to make the most sense given CPAN’s wide range of versioning schemes.</p>
  695. <p>Personally, I see it as a bug in <a href="https://metacpan.org/pod/version">version.pm</a>. But I’m not going to report it as such as I’m sure the Perl toolchain gang know what they’re doing and have very good reasons for adopting this seemingly broken behaviour.</p>
  696. <p>I just need to remember to be more careful when switching my modules to semantic versioning. Using a minor or patch level version change when switching to semantic versioning is likely to lead to confusion and bug reports. Only a major level change (as I did with Symbol::Approx::Sub) is guaranteed to work.</p>
  697. <p>And, I suppose, I’ll need to release Array::Compare 3.0.0 to CPAN pretty soon.</p>
  698. <p>The post <a rel="nofollow" href="https://perlhacks.com/2016/12/version-numbers/">Version Numbers</a> appeared first on <a rel="nofollow" href="https://perlhacks.com">Perl Hacks</a>.</p>
  699. <img src="http://feeds.feedburner.com/~r/PerlHacks/~4/XVzV5zDqExQ" height="1" width="1" alt=""/></div>
  700.    </content>
  701.    <summary type="xhtml">
  702.      <div xmlns="http://www.w3.org/1999/xhtml"><p>Last week I mentioned how I had uploaded a new version of Symbol::Approx::Sub. Because there were pretty major changes to the inner workings of the module (although the interface still looked the same) I decided that I would move it from version 2.07 to version 3. At the same time, I decided that I would … </p>
  703. <p class="link-more"><a href="https://perlhacks.com/2016/12/version-numbers/" class="more-link">Continue reading<span class="screen-reader-text"> "Version Numbers"</span></a></p>
  704. <p>The post <a rel="nofollow" href="https://perlhacks.com/2016/12/version-numbers/">Version Numbers</a> appeared first on <a rel="nofollow" href="https://perlhacks.com">Perl Hacks</a>.</p>
  705. </div>
  706.    </summary>
  707.    <author>
  708.      <name>Dave Cross</name>
  709.    </author>
  710.    <id>http://perlhacks.com/?p=1530</id>
  711.    <published>2016-12-13T11:12:49Z</published>
  712.    <updated>2016-12-13T11:12:49Z</updated>
  713.    <category term="CPAN"/>
  714.    <category term="cpan"/>
  715.    <category term="semantic versioning"/>
  716.    <category term="semver"/>
  717.    <category term="version"/>
  718.  </entry>
  719.  <entry>
  720.    <title>cpan: DAVECROSS has released AudioFile-Info-Ogg-Vorbis-Header-v1.8.1</title>
  721.    <link rel="alternate" href="https://metacpan.org/release/DAVECROSS/AudioFile-Info-Ogg-Vorbis-Header-v1.8.1" type="text/html"/>
  722.    <content type="xhtml">
  723.      <div xmlns="http://www.w3.org/1999/xhtml"> </div>
  724.    </content>
  725.    <summary type="xhtml">
  726.      <div xmlns="http://www.w3.org/1999/xhtml">Perl extension to get info from</div>
  727.    </summary>
  728.    <author>
  729.      <name>DAVECROSS</name>
  730.    </author>
  731.    <id>https://metacpan.org/release/DAVECROSS/AudioFile-Info-Ogg-Vorbis-Header-v1.8.1</id>
  732.    <published>2016-12-08T07:34:11</published>
  733.    <updated>2016-12-08T07:34:11</updated>
  734.  </entry>
  735.  <entry>
  736.    <title>cpan: DAVECROSS has released AudioFile-Info-MP3-Tag-v1.6.1</title>
  737.    <link rel="alternate" href="https://metacpan.org/release/DAVECROSS/AudioFile-Info-MP3-Tag-v1.6.1" type="text/html"/>
  738.    <content type="xhtml">
  739.      <div xmlns="http://www.w3.org/1999/xhtml"> </div>
  740.    </content>
  741.    <summary type="xhtml">
  742.      <div xmlns="http://www.w3.org/1999/xhtml">Perl extension to get info from MP3 files.</div>
  743.    </summary>
  744.    <author>
  745.      <name>DAVECROSS</name>
  746.    </author>
  747.    <id>https://metacpan.org/release/DAVECROSS/AudioFile-Info-MP3-Tag-v1.6.1</id>
  748.    <published>2016-12-08T07:16:15</published>
  749.    <updated>2016-12-08T07:16:15</updated>
  750.  </entry>
  751. </feed>
  752.  
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda