<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss version="2.0">
  <channel>
    <title>swirrl</title>
    <description>Articles from blog.swirrl.com</description>
    <link>http://blog.swirrl.com</link>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Swirrlspeak" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="swirrlspeak" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Launch of the Shakespeare Review</title>
      <description>&lt;div style="float:right;margin-bottom:10px;"&gt;&lt;img style="width:200px;margin-left:10px;" src="http://swirrlspeak.s3.amazonaws.com/shakespeare.jpg" /&gt;&lt;br /&gt;
&lt;div style="margin-left:10px;font-family:arial;font-size:10px;"&gt;Picture courtesy of &lt;a href="http://www.policyexchange.org.uk/"&gt;Policy Exchange&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I had an interesting morning yesterday at the launch of the &lt;a href="https://www.gov.uk/government/publications/shakespeare-review-of-public-sector-information"&gt;Shakespeare Review&lt;/a&gt;, Stephan Shakespeare&amp;#8217;s independent review of public sector information.&lt;/p&gt;
&lt;p&gt;There was an interesting panel session and discussion at the event and the &lt;a href="https://twitter.com/search?q=shakespearereview"&gt;twittersphere&lt;/a&gt; seems to have given it a mainly positive reception.&lt;/p&gt;
&lt;p&gt;I had the opportunity, via the &lt;a href="https://www.gov.uk/data-strategy-board"&gt;Data Strategy Board&lt;/a&gt;, to discuss the review with Stephan on several occasions and it&amp;#8217;s great to see it finalised and opened up for a broader conversation.&lt;/p&gt;
&lt;p&gt;It covers a wide range of important topics, but I&amp;#8217;d like to highlight two of the recommendations here, that are particularly relevant to the work of Swirrl and have the potential to make big impacts.&lt;/p&gt;
&lt;p&gt;One is the recommendation that all government departments should make an immediate commitment &lt;em&gt;&amp;#8220;to publish their Core Reference Data to an agreed timetable, to a high standard to maximise linkability,&amp;#8230;ease of use and free access.  They should commit to maintaining this data and keeping it regularly updated&amp;#8221;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;We&amp;#8217;ve been arguing for some time that making this type of data available is essential infrastructure for the broader exploitation of open data: allowing other datasets to be built on top of the core, enabling diverse data sources to be connected together and providing a solid foundation that private and public sector can build useful services on top of. (And the point about maintaining it is essential).&lt;/p&gt;
&lt;p&gt;Paul Maltby, head of Transparency at the Cabinet Office, &lt;a href="http://data.gov.uk/blog/developing-a-national-core-reference-data-set"&gt;blogged yesterday&lt;/a&gt; on how we might decide what should go into a set of national reference data.&lt;/p&gt;
&lt;p&gt;There are clearly some details to be worked out in how this is implemented, but linked data certainly has an important role to play. There is an opportunity here for the linked data community to provide some guidance on how this data can be made as useful and re-usable as possible.&lt;/p&gt;
&lt;p&gt;The other point I&amp;#8217;d like to highlight is the recommendation that:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;We should expect systematic and transparent use of administrative data and other types of &lt;span class="caps"&gt;PSI&lt;/span&gt; in the formulation, implementation, monitoring and adaptation of government policy and service delivery, and formally embed this in the democratic process&amp;#8221;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s a huge potential for the public sector to exploit it&amp;#8217;s own data to make development and evaluation of policy more effective &amp;#8211; a huge amount of money is spent by government.  Few would dispute that it makes sense to try to measure what works, and increasing data availability and the capacity to analyse it effectively can make this possible and practical in a way that it hasn&amp;#8217;t been hitherto.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s a lot of other important points raised in the review. Not all with simple obvious solutions, but raising areas that should be investigated and debated: for example reform of the trading funds and finding a balance between privacy protection and making effective use of anonymised personal data.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m looking forward to seeing the government&amp;#8217;s response to the review &amp;#8211; and hope the bulk of the recommendations are taken forward for implementation.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=a9mDKWzGRxY:_vH2yfQP5Eg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=a9mDKWzGRxY:_vH2yfQP5Eg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=a9mDKWzGRxY:_vH2yfQP5Eg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=a9mDKWzGRxY:_vH2yfQP5Eg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=a9mDKWzGRxY:_vH2yfQP5Eg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=a9mDKWzGRxY:_vH2yfQP5Eg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=a9mDKWzGRxY:_vH2yfQP5Eg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=a9mDKWzGRxY:_vH2yfQP5Eg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=a9mDKWzGRxY:_vH2yfQP5Eg:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 May 2013 07:56:05 +0000</pubDate>
      <link>http://blog.swirrl.com/articles/launch-of-the-shakespeare-review</link>
      <guid>http://blog.swirrl.com/articles/launch-of-the-shakespeare-review?updated_at=2013-05-16T08:01:05</guid>
    </item>
    <item>
      <title>Hampshire Land Supply Linked Data</title>
      <description>&lt;p&gt;A short time ago we produced a &lt;a href="http://linkeddata.hants.gov.uk"&gt;Linked Data site&lt;/a&gt; for Hampshire County Council.  We modelled their planned home building plans over the next six years as Linked Data and published it through &lt;a href="http://publishmydata.com"&gt;PublishMyData&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://linkeddata.hants.gov.uk"&gt;&lt;img src="http://swirrlspeak.s3.amazonaws.com/hants-data.png" style="border:1px solid #ddd"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As an example of what could be done with this data via the APIs, and to help people explore it, we built an embeddable map based visualisation (see below).&lt;/p&gt;
&lt;p&gt;Working with Hampshire to create this data and visualisation further developed their understanding of Open and Linked Data, which will help inform their future open data initiatives.&lt;/p&gt;
&lt;p&gt;&lt;iframe id="map-explorer" src='http://linkeddata.hants.gov.uk/land-supply-mapper/embedded.html' style="width:600px; height:961px;"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=GYsqZHwP6qk:gNLiDMx3vsE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=GYsqZHwP6qk:gNLiDMx3vsE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=GYsqZHwP6qk:gNLiDMx3vsE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=GYsqZHwP6qk:gNLiDMx3vsE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=GYsqZHwP6qk:gNLiDMx3vsE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=GYsqZHwP6qk:gNLiDMx3vsE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=GYsqZHwP6qk:gNLiDMx3vsE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=GYsqZHwP6qk:gNLiDMx3vsE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=GYsqZHwP6qk:gNLiDMx3vsE:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Mon, 11 Mar 2013 11:53:34 +0000</pubDate>
      <link>http://blog.swirrl.com/articles/hampshire-land-supply-linked-data</link>
      <guid>http://blog.swirrl.com/articles/hampshire-land-supply-linked-data?updated_at=2013-03-11T11:53:34</guid>
    </item>
    <item>
      <title>Tripod: A new SPARQL ORM for Ruby. Read and Write RDF in your Rails apps</title>
      <description>&lt;p&gt;As we&amp;#8217;ve long been promising, we&amp;#8217;ve started to release some open source code to help people publish and consume Linked Open Data. The first component that we&amp;#8217;d like to talk about is &lt;a href="http://github.com/Swirrl/tripod"&gt;Tripod&lt;/a&gt;.  It&amp;#8217;s an &lt;span class="caps"&gt;RDF&lt;/span&gt; and &lt;span class="caps"&gt;SPARQL&lt;/span&gt; &lt;a href="https://en.wikipedia.org/wiki/Object-relational_mapping"&gt;&lt;span class="caps"&gt;ORM&lt;/span&gt;&lt;/a&gt;, designed for use in Ruby-on-Rails apps.&lt;/p&gt;
&lt;h4&gt;What&amp;#8217;s the point of Tripod?&lt;/h4&gt;
&lt;p&gt;If you&amp;#8217;re writing a Ruby application that reads or writes a lot of &lt;span class="caps"&gt;RDF&lt;/span&gt; data from &lt;span class="caps"&gt;SPARQL&lt;/span&gt; endpoints, then Tripod should make life easier for you. Tripod lets you define &lt;a href="https://github.com/rails/rails/tree/master/activemodel"&gt;ActiveModel&lt;/a&gt;-compliant Rails models for use in your applications, providing a familiar interface for use in your Rails controllers and views.&lt;/p&gt;
&lt;p&gt;To use all features of Tripod, you need to have access to a &lt;span class="caps"&gt;SPARQL&lt;/span&gt; 1.1 database endpoint (over &lt;span class="caps"&gt;HTTP&lt;/span&gt;). We use &lt;a href="http://jena.apache.org/documentation/serving_data/index.html"&gt;Fuseki&lt;/a&gt;, part of the Apache Jena project. If you want to be able to persist any changes to data, the endpoint needs to support &lt;span class="caps"&gt;SPARQL&lt;/span&gt; &lt;span class="caps"&gt;UPDATE&lt;/span&gt; (and you&amp;#8217;ll need the appropriate permissions), but note that Tripod is also useful for read-only use cases too.&lt;/p&gt;
&lt;h4&gt;How to use Tripod&lt;/h4&gt;
&lt;p&gt;Just include &lt;code&gt;Tripod::Resource&lt;/code&gt; into your model class, and specify as much or as little information as required. Here&amp;#8217;s quite a specific Person model, with a default type and graph:&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;class Person
  include Tripod::Resource

  # these are the default rdf-type and graph for resources of this class
  rdf_type 'http://person'
  graph_uri 'http://people'

  field :name, 'http://name'
  field :knows, 'http://knows', :multivalued =&amp;gt; true
  field :aliases, 'http://alias', :multivalued =&amp;gt; true
  field :age, 'http://age', :datatype =&amp;gt; RDF::XSD.integer
  field :important_dates, 'http://importantdates', :datatype =&amp;gt; RDF::XSD.date, :multivalued =&amp;gt; true
end&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;#8230; and here&amp;#8217;s a fairly free-form Resource model, with only the label predicate specified.&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;class Resource
  include Tripod::Resource
  field :label, RDF::RDFS.label
end&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Defining a &lt;code&gt;field&lt;/code&gt; just creates the relevant getters and setters on the instances of the model.&lt;/p&gt;
&lt;p&gt;Note: If you don’t specify a type or graph at the class-level, you can still set them on specific instances. For now, we assume that everything in the database is stored in named graphs, so if you don&amp;#8217;t set a graph at all then you won&amp;#8217;t be able to persist a resource to the db.&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;p = Person.new('http://ric')
p.name = 'Ric'
p.age = 31
p.save

r = Resource.new('http://myresource', 'http://mygraph')
r.label = 'my resource'
r.save

person = Person.find('http://ric')
person.name #=&amp;gt; Ric&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There&amp;#8217;s also chainable query &lt;span class="caps"&gt;DSL&lt;/span&gt; which helps you &lt;a  href="https://en.wikipedia.org/wiki/Don't_repeat_yourself"&gt;&lt;span class="caps"&gt;DRY&lt;/span&gt;&lt;/a&gt;-up your code by preventing you from having to write lots similar sparql queries throughout your application.&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;Person.where("?uri &amp;lt;http://name&amp;gt; ?name").limit(1).offset(0).order("DESC(?name)")&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is just a taster of what Tripod can do. For full installation and usage details see the &lt;a href="http://github.com/Swirrl/tripod"&gt;Github repo&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Uses of Tripod in the wild&lt;/h4&gt;
&lt;p&gt;We first used Tripod in the &lt;a href="http://blog.swirrl.com/articles/smartjourney-realtime-travel-weather-for-aberdeen-and-aberdeenshire"&gt;SmartJourney application&lt;/a&gt; we worked on for Aberdeen City and County councils.  And we&amp;#8217;re currently working on an &lt;a href="http://github.com/Swirrl/publish_my_data"&gt;open source version of our PublishMyData engine&lt;/a&gt;, which uses Tripod for database access.&lt;/p&gt;
&lt;h4&gt;Licence&lt;/h4&gt;
&lt;p&gt;We&amp;#8217;ve released Tripod under the &lt;a href="http://opensource.org/licenses/MIT"&gt;&lt;span class="caps"&gt;MIT&lt;/span&gt; Licence&lt;/a&gt;, which means that there are almost no restrictions on what you can do with it. We&amp;#8217;d love to hear about what you build with it.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=7QhXb-3iNQk:wWou4IPerJY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=7QhXb-3iNQk:wWou4IPerJY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=7QhXb-3iNQk:wWou4IPerJY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=7QhXb-3iNQk:wWou4IPerJY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=7QhXb-3iNQk:wWou4IPerJY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=7QhXb-3iNQk:wWou4IPerJY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=7QhXb-3iNQk:wWou4IPerJY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=7QhXb-3iNQk:wWou4IPerJY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=7QhXb-3iNQk:wWou4IPerJY:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 05 Mar 2013 09:43:56 +0000</pubDate>
      <link>http://blog.swirrl.com/articles/tripod-a-ruby-sparql-orm</link>
      <guid>http://blog.swirrl.com/articles/tripod-a-ruby-sparql-orm?updated_at=2013-03-05T09:46:37</guid>
    </item>
    <item>
      <title>Swirrl awarded new DCLG Linked Open Data contract</title>
      <description>&lt;p&gt;&lt;a href="http://opendatacommunities.org"&gt;&lt;img src="http://swirrlspeak.s3.amazonaws.com/odc_home_screenshot.png" style="float:right; border:1px solid #ddd; margin-left:10px; margin-bottom:10px;"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We are pleased to announce that we were recently awarded a contract to work on a production version of &lt;a href="https://www.gov.uk/government/organisations/department-for-communities-and-local-government"&gt;&lt;span class="caps"&gt;DCLG&lt;/span&gt;&lt;/a&gt;&amp;#8217;s open data initiative, &lt;em&gt;OpenDataCommunities&lt;/em&gt;. This exciting project was awarded through &lt;a href="http://blog.swirrl.com/articles/publishmydata-now-available-through-g-cloud"&gt;G-Cloud&lt;/a&gt;, and we are delighted that the department chose us to help them execute their vision for open data.&lt;/p&gt;
&lt;p&gt;The current version of &lt;a href="http://opendatacommunities.org"&gt;OpenDataCommunities&lt;/a&gt; is a Linked Open Data pilot study, which we began work on over a year ago. It provides a selection of Local Government statistics, as well as supporting geographical data, released under the Open Government Licence.&lt;/p&gt;
&lt;p&gt;The new project will establish a sustainable and reliable way that &lt;span class="caps"&gt;DCLG&lt;/span&gt; themselves can publish their data. We&amp;#8217;ll be working with the department to create internal APIs for streamlining and automating the data publishing process.&lt;/p&gt;
&lt;p&gt;We are also learning about how people want to use the open data and encouraging more people to use it. So, in addition to the technical tasks, we will be involved in fostering partnerships and building relationships amongst data owners and users. Importantly, &lt;span class="caps"&gt;DCLG&lt;/span&gt; is now committed to maintaining this service, which means that data users can rely on it being available into the future.&lt;/p&gt;
&lt;p&gt;The public-facing service will be an evolution of the existing OpenDataCommunities, but we will be basing it on a brand new, open source version of our Linked Data publishing platform, &lt;a href="http://publishmydata.com"&gt;PublishMyData&lt;/a&gt; (more details coming soon!). As such, the initial release of the new service, in about a month, will see the removal of a few existing features, providing us with a solid base on which to build new data-browsing and discovery tools, for a broad range of users.&lt;/p&gt;
&lt;p&gt;We will also be publishing a large amount of new data over the coming months.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=DaH59sDCJrk:88vm9r9pSF0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=DaH59sDCJrk:88vm9r9pSF0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=DaH59sDCJrk:88vm9r9pSF0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=DaH59sDCJrk:88vm9r9pSF0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=DaH59sDCJrk:88vm9r9pSF0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=DaH59sDCJrk:88vm9r9pSF0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=DaH59sDCJrk:88vm9r9pSF0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=DaH59sDCJrk:88vm9r9pSF0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=DaH59sDCJrk:88vm9r9pSF0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Mon, 04 Mar 2013 09:30:52 +0000</pubDate>
      <link>http://blog.swirrl.com/articles/swirrl-awarded-dclg-linked-open-data-contract</link>
      <guid>http://blog.swirrl.com/articles/swirrl-awarded-dclg-linked-open-data-contract?updated_at=2013-03-04T09:33:41</guid>
    </item>
    <item>
      <title>Creating Asynchronous, Embeddable JavaScript Widgets</title>
      <description>&lt;p&gt;For a &lt;a href="http://blog.swirrl.com/articles/dclg-impact-indicators-dashboard"&gt;recent project&lt;/a&gt;, we needed to the ability to allow users to embed portions of the site in their own websites and blogs by copy-pasting a little bit of code. This blog post explains how we arrived at a solution for this.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Warning!&lt;/strong&gt; This blog post gets pretty techy and is intended for other nerds who may find this technique useful in their own work.&lt;/p&gt;
&lt;h4&gt;More detailed requirements&lt;/h4&gt;
&lt;ul&gt;
	&lt;li&gt;As we don&amp;#8217;t know what browsers our users&amp;#8217; sites are targetting, we want embedding to work on a range of browsers, including older versions of Internet Explorer (we aimed to support IE6+).&lt;/li&gt;
	&lt;li&gt;The code snippet should have no prerequisites (other than JavaScript being enabled) and be relatively short.&lt;/li&gt;
	&lt;li&gt;In case our service is being temporarily slow to respond for any reason, we don&amp;#8217;t want to block the rest of the target page from loading.&lt;/li&gt;
	&lt;li&gt;We shouldn&amp;#8217;t interfere with any other events on the target page.&lt;/li&gt;
	&lt;li&gt;We can&amp;#8217;t rely on any external JavaScript libraries, and we shouldn&amp;#8217;t pollute the global namespace of the target page.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="final-embed-solution"&gt;Our embed script&lt;/h3&gt;
&lt;p&gt;Here&amp;#8217;s an example of the code snippet for embedding a widget from the &lt;a href="http://dclgapps.communities.gov.uk/indicators"&gt;DCLG&amp;#8217;s Impact Indicator Dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;&amp;lt;script type="text/javascript" id="dclg-impact-indicators-embedder-5b8cf3a4-b0f0-13e9-3737-d5a159268ae6" class="dclg-impact-indicators-async-script-loader"&amp;gt;
  (function() {
    function async_load(){
      var s = document.createElement('script');
      s.type = 'text/javascript';
      s.async = true;
      var theUrl = 'http://opendatacommunities.org/impact_indicators/indicators/housing-starts/dashboard_widget';
      s.src = theUrl + ( theUrl.indexOf("?") &amp;gt;= 0 ? "&amp;amp;" : "?") + 'ref=' + encodeURIComponent(window.location.href);
      var embedder = document.getElementById('dclg-impact-indicators-embedder-5b8cf3a4-b0f0-13e9-3737-d5a159268ae6');
      embedder.parentNode.insertBefore(s, embedder);
    }
    if (window.attachEvent)
      window.attachEvent('onload', async_load);
    else
      window.addEventListener('load', async_load, false);
  })();
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let&amp;#8217;s break down what&amp;#8217;s going on here&amp;#8230;&lt;/p&gt;
&lt;h4&gt;A simple solution for modern browsers: HTML5 async attribute.&lt;/h4&gt;
&lt;p&gt;Much of the complexity above is there to support older browsers. If we only wanted to support modern browsers, then we could have achieved most of the desired functionality in one line (I&amp;#8217;ll get onto what the remote script actually does later on).&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;&amp;lt;script async src="http://opendatacommunities.org/impact_indicators/indicators/housing-starts/dashboard_widget"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The key thing to note here is the use of the &lt;code&gt;async&lt;/code&gt; attribute. This tells the browser to execute the script asynchronously. The problem is, though, the async attribute is &lt;a href="https://developer.mozilla.org/en-US/docs/HTML/Element/script#Browser_compatibility"&gt;not supported on old browsers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Without support for the &lt;code&gt;async&lt;/code&gt; attribute, any content after the &lt;code&gt;script&lt;/code&gt; tag is blocked from loading until its &lt;code&gt;src&lt;/code&gt; has loaded and executed. This isn&amp;#8217;t very polite at the best of times, and if our service was being slow or temporarily down, then it would be very annoying for users of the target page.&lt;/p&gt;
&lt;h4&gt;Creating a script tag with JavaScript.&lt;/h4&gt;
&lt;p&gt;To get around lack of support for &lt;code&gt;async&lt;/code&gt;, our snippet creates a &lt;code&gt;script&lt;/code&gt; tag with JavaScript and appends it to the document immediately before our snippet&amp;#8217;s &lt;code&gt;script&lt;/code&gt; tag. Note: We&amp;#8217;ve used a guid in the id of the script tag to make sure we find the right one, if multiple widgets have been embedded.&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;&amp;lt;script type="text/javascript" id="dclg-impact-indicators-embedder-5b8cf3a4-b0f0-13e9-3737-d5a159268ae6" class="dclg-impact-indicators-async-script-loader"&amp;gt;
  var s = document.createElement('script');
  s.type = 'text/javascript';
  s.async = true;
  s.src = 'http://opendatacommunities.org/impact_indicators/indicators/housing-starts/dashboard_widget';
  var embedder = document.getElementById('dclg-impact-indicators-embedder-5b8cf3a4-b0f0-13e9-3737-d5a159268ae6');
  embedder.parentNode.insertBefore(s, embedder);
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We&amp;#8217;re getting there, but the code above would block &lt;code&gt;onload&lt;/code&gt; from triggering on some browsers until the script has been loaded and run, which isn&amp;#8217;t really acceptable if we&amp;#8217;re aiming to be a polite little widget.&lt;/p&gt;
&lt;h4&gt;Waiting until after onload&lt;/h4&gt;
&lt;p&gt;To prevent us from blocking &lt;code&gt;onload&lt;/code&gt;, we wrap everything in a function, and call that once the page has finished loading (in a cross-browser compatible way). Note that we don&amp;#8217;t just use &lt;code&gt;window.onload&lt;/code&gt; to avoid stomping on any existing onload events on the target page.&lt;/p&gt;
&lt;p&gt;Wrap the code in a closure, and add a referer parameter onto the url (so we can track who&amp;#8217;s embedding our widgets), and we have our final solution. &lt;a href="#final-embed-solution"&gt;Scroll back up&lt;/a&gt; for a reminder of what it looks like.&lt;/p&gt;
&lt;h3&gt;The remote script&lt;/h3&gt;
&lt;p&gt;So far we&amp;#8217;ve talked a lot about how to call a remote script without blocking the target page from loading, but what does the remote script actually do?&amp;#8230;&lt;/p&gt;
&lt;p&gt;In our case, the &lt;code&gt;src&lt;/code&gt; url points to a Rails application route which responds with some JavaScript. The response creates a &lt;code&gt;div&lt;/code&gt; in the target page, and injects our content into it. We also add a style tag into the &lt;code&gt;head&lt;/code&gt; of the target page so that we can style our widgets.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s a (slightly simplified) example of the response for a widget:&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;(function (global) {
  // add array index of for old browsers (IE&amp;lt;9)
  if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(obj, start) {
      var i, j;
      i = start || 0;
      j = this.length;
      while (i &amp;lt; j) {
        if (this[i] === obj) {
          return i;
        }
        i++;
      }
      return -1;
    };
  }

  // make a global object to store stuff in
  if(!global.OpenDataCommunities) { global.OpenDataCommunities = {}; };
  var OpenDataCommunities = global.OpenDataCommunities;

  // To keep track of which embeds we have already processed
  if(!OpenDataCommunities.processedScripts) { OpenDataCommunities.processedScripts = []; };
  var processedScripts = OpenDataCommunities.processedScripts;

  if(!OpenDataCommunities.styleTags) { OpenDataCommunities.styleTags = []; };
  var styleTags = OpenDataCommunities.styleTags;

  var scriptTags = document.getElementsByTagName('script');
  var thisRequestUrl = '&amp;lt;%= raw(request.url) %&amp;gt;';

  for(var i = 0; i &amp;lt; scriptTags.length; i++) {
    var scriptTag = scriptTags[i];

    // src matches the url of this request, and not processed it yet.
    if (scriptTag.src == thisRequestUrl &amp;amp;&amp;amp; processedScripts.indexOf(scriptTag) &amp;lt; 0) {

      processedScripts.push(scriptTag);

      // add the style tag into the head (once only)
      if(styleTags.length == 0) {
        // add a style tag to the head
        var styleTag = document.createElement("link");
        styleTag.rel = "stylesheet";
        styleTag.type = "text/css";
        styleTag.href =  "http://opendatacommunities.org/assets/impact_indicators_embed.css";
        styleTag.media = "all";
        document.getElementsByTagName('head')[0].appendChild(styleTag);
        styleTags.push(styleTag);
      }

      // Create a div
      var div = document.createElement('div');
      div.id = '&amp;lt;%= div_id %&amp;gt;';

      // add the cleanslate classs for extreme-CSS reset.
      div.className = 'dclg-impact-indicators-embeddable .dashboard_widget cleanslate';

      scriptTag.parentNode.insertBefore(div, scriptTag);

      div.innerHTML = '&amp;lt;%= j(render(partial_name)) %&amp;gt;';

    }
  }
})(this);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Again, let&amp;#8217;s break this down a bit&amp;#8230;&lt;/p&gt;
&lt;h4&gt;Support for Array.indexOf&lt;/h4&gt;
&lt;p&gt;First, to make our lives easier later on, we add an indexOf function to Array for browsers that don&amp;#8217;t already have it:&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;// add array index of for old browsers (IE&amp;lt;9)
if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(obj, start) {
    var i, j;
    i = start || 0;
    j = this.length;
    while (i &amp;lt; j) {
      if (this[i] === obj) {
        return i;
      }
      i++;
    }
    return -1;
  };
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Namespaced objects for tracking progress&lt;/h4&gt;
&lt;p&gt;Next, we make some objects (under an OpenDataCommunities namespace in our case) to track:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Which embed scripts have already been processed (in case there are multiple embeds on the target page)&lt;/li&gt;
	&lt;li&gt;How many style tags have been injected into the head.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Find all our embed scripts on the target page, and loop over them.&lt;/h4&gt;
&lt;p&gt;For the scripts we haven&amp;#8217;t processed yet, and where the request url matches the &lt;code&gt;src&lt;/code&gt; of the &lt;code&gt;script&lt;/code&gt; tag, we&amp;#8217;ll do our magic. (Again, this caters for when people have embedded multiple widgets).&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;var scriptTags = document.getElementsByTagName('script');
var thisRequestUrl = '&amp;lt;%= raw(request.url) %&amp;gt;';

for(var i = 0; i &amp;lt; scriptTags.length; i++) {
  var scriptTag = scriptTags[i];

  // src matches the url of this request, and not processed it yet.
  if (scriptTag.src == thisRequestUrl &amp;amp;&amp;amp; processedScripts.indexOf(scriptTag) &amp;lt; 0) {

    processedScripts.push(scriptTag);
    // do our magic here!
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note: for those not familiar with Rails, the content inside &lt;code&gt;&amp;lt;% %&amp;gt;&lt;/code&gt; tags are little snippets of embedded ruby (ERb) that are run inline before the response is returned from the server.&lt;/p&gt;
&lt;h4&gt;Add a style tag into the head of the target page.&lt;/h4&gt;
&lt;p&gt;Nothing much to say here, except that in our case, we included the &lt;a href="https://github.com/premasagar/cleanslate"&gt;cleanslate&lt;/a&gt; &lt;em&gt;extreme &lt;span class="caps"&gt;CSS&lt;/span&gt; reset&lt;/em&gt; in our &lt;span class="caps"&gt;CSS&lt;/span&gt;, so that we can be sure that no existing styles in the target page bleed into our widget.&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;// add the style tag into the head (once only)
if(styleTags.length == 0) {
  // add a style tag to the head
  var styleTag = document.createElement("link");
  styleTag.rel = "stylesheet";
  styleTag.type = "text/css";
  styleTag.href =  "http://opendatacommunities.org/assets/impact_indicators_embed.css";
  styleTag.media = "all";
  document.getElementsByTagName('head')[0].appendChild(styleTag);
  styleTags.push(styleTag);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Create the div and inject its content&lt;/h4&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;// Create a div
var div = document.createElement('div');
div.id = '&amp;lt;%= div_id %&amp;gt;';

// Add the cleanslate class for extreme-CSS reset.
div.className = 'dclg-impact-indicators-embeddable .dashboard_widget cleanslate';

scriptTag.parentNode.insertBefore(div, scriptTag);

div.innerHTML = '&amp;lt;%= j(render(partial_name)) %&amp;gt;';
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We use Erb again here to allow us to provide a unique &lt;code&gt;div&lt;/code&gt; id, and render the contents of the widget into the &lt;code&gt;innerHTML&lt;/code&gt; of that div.&lt;/p&gt;
&lt;hr/&gt;
&lt;h3&gt;Resources&lt;/h3&gt;
&lt;p&gt;I found thse pages useful while figuring this stuff out:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://friendlybit.com/js/lazy-loading-asyncronous-javascript/"&gt;Lazy Loading Asyncronous JavaScript&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.shootitlive.com/2012/07/developing-an-embeddable-javascript-widget/"&gt;Developing An Embeddable JavaScript Widget&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=D-fB2clkWh4:WQjrIi8WSPM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=D-fB2clkWh4:WQjrIi8WSPM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=D-fB2clkWh4:WQjrIi8WSPM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=D-fB2clkWh4:WQjrIi8WSPM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=D-fB2clkWh4:WQjrIi8WSPM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=D-fB2clkWh4:WQjrIi8WSPM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=D-fB2clkWh4:WQjrIi8WSPM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=D-fB2clkWh4:WQjrIi8WSPM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=D-fB2clkWh4:WQjrIi8WSPM:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Mon, 11 Feb 2013 15:28:19 +0000</pubDate>
      <link>http://blog.swirrl.com/articles/creating-asynchronous-embeddable-javascript-widgets</link>
      <guid>http://blog.swirrl.com/articles/creating-asynchronous-embeddable-javascript-widgets?updated_at=2013-02-11T15:29:46</guid>
    </item>
    <item>
      <title>DCLG Impact and Input Indicators Dashboard</title>
      <description>&lt;p&gt;We recently worked with &lt;span class="caps"&gt;DCLG&lt;/span&gt; (Department for Communities and Local Govermnent) to produce an &lt;a href="http://dclgapps.communities.gov.uk/indicators"&gt;online dashboard&lt;/a&gt; that enables users to see how the department is performing against key indicators in priority areas:&lt;br /&gt;
&lt;strong&gt;Impact Indicators:&lt;/strong&gt; the performance or output of public services.&lt;br /&gt;
&lt;strong&gt;Input Indicators:&lt;/strong&gt; how the efficiency and productivity of public services are improving.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dclgapps.communities.gov.uk/indicators"&gt;&lt;img src="http://swirrlspeak.s3.amazonaws.com/indicators_dash.png" style="float:left; margin-left:20px; margin-right:40px;" alt="dashboard" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dclgapps.communities.gov.uk/indicators/housing-starts.html"&gt;&lt;img src="http://swirrlspeak.s3.amazonaws.com/indicators_detail.png" style="float:left;" alt="detail page" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="clear:both; float:none;"&gt;&lt;/div&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;The data on the dashboard widgets and detail pages is pulled in ‘live’ from APIs on &lt;a href="http://opendatacommunities.org"&gt;OpenDataCommunities.org&lt;/a&gt; (DCLG’s linked open data store, which we helped create). This data-driven approach means that as new data arrives for the indicators in the data store, the dashboard is automatically kept up to date.&lt;/p&gt;
&lt;p&gt;Additionally, the dashboard widgets can be easily embedded into any website or blog (like we have done below) by copying and pasting a little bit of JavaScript.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://swirrlspeak.s3.amazonaws.com/indicator_embed.png" style="margin-top:10px; margin-bottom:10px; border:1px solid #ddd" alt="embedding screenshot" /&gt;&lt;/p&gt;
&lt;p&gt;As the widgets pull in data directly from the data store, figures will always be kept current. We feel this is a valuable technique for sharing interesting or useful data and we’ll blog again soon with details of how the embedding works.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(Here&amp;#8217;s the actual embedded widget):&lt;/strong&gt;&lt;/p&gt;
&lt;script type="text/javascript" id="dclg-impact-indicators-embedder-d7078266-2784-0683-82d2-3cfd363acced" class="dclg-impact-indicators-async-script-loader"&gt; (function() { function async_load(){ var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; var theUrl = 'http://web.opendatacommunities.org/indicators_dash/indicators/housing-starts/dashboard_widget'; s.src = theUrl + ( theUrl.indexOf("?") &gt;= 0 ? "&amp;" : "?") + 'ref=' + encodeURIComponent(window.location.href); var embedder = document.getElementById('dclg-impact-indicators-embedder-d7078266-2784-0683-82d2-3cfd363acced'); embedder.parentNode.insertBefore(s, embedder); } if (window.attachEvent) window.attachEvent('onload', async_load); else window.addEventListener('load', async_load, false); })(); &lt;/script&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;If you’re interested in the raw data, the relevant datasets can be found in the &lt;a href="http://opendatacommunities.org/datasets?theme=business-plan"&gt;Business Plan section&lt;/a&gt; of OpenDataCommunities.&lt;/p&gt;
&lt;p&gt;Steve Peters from &lt;span class="caps"&gt;DCLG&lt;/span&gt; has also written about the dashboard (with more background) &lt;a href="http://openviz.wordpress.com/2013/01/20/one-small-step-the-dclg-business-plan-indicator-dashboard/"&gt;on his own blog&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=dezuYdn80UE:4ZGIRDBUg8Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=dezuYdn80UE:4ZGIRDBUg8Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=dezuYdn80UE:4ZGIRDBUg8Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=dezuYdn80UE:4ZGIRDBUg8Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=dezuYdn80UE:4ZGIRDBUg8Y:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=dezuYdn80UE:4ZGIRDBUg8Y:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=dezuYdn80UE:4ZGIRDBUg8Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=dezuYdn80UE:4ZGIRDBUg8Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=dezuYdn80UE:4ZGIRDBUg8Y:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 06 Feb 2013 21:51:09 +0000</pubDate>
      <link>http://blog.swirrl.com/articles/dclg-impact-indicators-dashboard</link>
      <guid>http://blog.swirrl.com/articles/dclg-impact-indicators-dashboard?updated_at=2013-04-15T19:34:23</guid>
    </item>
    <item>
      <title>SmartJourney: Realtime travel and weather for Aberdeen and Aberdeenshire</title>
      <description>&lt;p&gt;&lt;a href="http://smartjourney.co.uk" style="text-decoration:none; border:none;"&gt;&lt;img src="http://swirrlspeak.s3.amazonaws.com/smartjourney-screenshot.png" alt="SmartJourney Screenshot" style="float:right; margin-left:10px; margin-bottom:10px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A couple of weeks ago, we launched &lt;a href="http://smartjourney.co.uk"&gt;SmartJourney&lt;/a&gt;. Built in collaboration with Aberdeen City and Aberdeenshire Councils, and part-funded by &lt;a href="http://nesta.org.uk"&gt;Nesta&lt;/a&gt;, SmartJourney combines crowd-sourced and official information and weather and travel conditions in the North-East of Scotland.&lt;/p&gt;
&lt;p&gt;Anyone can view existing issues, and report new ones through the mobile-focused web interface. By signing up for a free account, users can additionally subscribe to email alerts for updates to issues they&amp;#8217;ve reported, or for issues reported in their chosen geographic zones of interest.&lt;/p&gt;
&lt;p&gt;For us, one of the most interesting aspects of this project is that all data generated by users of the site (except for the personal details of users, of course) is published in realtime as fully queryable and browsable Linked Open Data at &lt;a href="http://data.smartjourney.co.uk"&gt;data.smartjourney.co.uk&lt;/a&gt;. For convenience, we&amp;#8217;ve also provided a &lt;a href="http://data.smartjourney.co.uk/docs#rest-overview"&gt;RESTful &lt;span class="caps"&gt;JSON&lt;/span&gt; &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/a&gt; for reading and writing issue-reports.&lt;/p&gt;
&lt;p&gt;Another outcome of this project was that we built a Ruby &lt;span class="caps"&gt;ORM&lt;/span&gt; for working with &lt;span class="caps"&gt;RDF&lt;/span&gt; data in a Ruby on Rails app, that we call &lt;a href="http://github.com/swirrl/tripod"&gt;Tripod&lt;/a&gt;. Tripod is by no means finished, and we&amp;#8217;ll be adding more features soon (more details in another blog post). In fact, this is the first of many open source &lt;a href="http://publishmydata.com"&gt;PublishMyData&lt;/a&gt; components that we&amp;#8217;ll be releasing over the next few months.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=DrFdNGYr4fI:1wScpxUS33c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=DrFdNGYr4fI:1wScpxUS33c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=DrFdNGYr4fI:1wScpxUS33c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=DrFdNGYr4fI:1wScpxUS33c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=DrFdNGYr4fI:1wScpxUS33c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=DrFdNGYr4fI:1wScpxUS33c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=DrFdNGYr4fI:1wScpxUS33c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=DrFdNGYr4fI:1wScpxUS33c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=DrFdNGYr4fI:1wScpxUS33c:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Fri, 21 Dec 2012 16:32:02 +0000</pubDate>
      <link>http://blog.swirrl.com/articles/smartjourney-realtime-travel-weather-for-aberdeen-and-aberdeenshire</link>
      <guid>http://blog.swirrl.com/articles/smartjourney-realtime-travel-weather-for-aberdeen-and-aberdeenshire?updated_at=2012-12-21T16:35:18</guid>
    </item>
    <item>
      <title>PublishMyData now available through G-Cloud</title>
      <description>&lt;p&gt;We are pleased to announce that UK public sector organisations can now buy our hosted &lt;a href="http://publishmydata.com"&gt;PublishMyData&lt;/a&gt; service through &lt;a href="http://gcloud.civilservice.gov.uk/cloudstore/"&gt;Cloudstore&lt;/a&gt;.  This is a new initiative, set up by the UK government &lt;a href="http://gcloud.civilservice.gov.uk/"&gt;G-Cloud Programme&lt;/a&gt;, to simplify the process of buying cloud based &lt;span class="caps"&gt;ICT&lt;/span&gt; services for public sector organisations.&lt;/p&gt;
&lt;p&gt;As regular readers of this blog will know, PublishMyData is Swirrl&amp;#8217;s Linked Data publishing platform, which we offer as a hosted supported service, together with associated implementation and consultancy.  As more government organisations are now starting to publish linked data as part of their open data strategy, we aim to make that as simple for them as possible by looking after the technology and maintenance, letting the data owners concentrate on the data itself.&lt;/p&gt;
&lt;p&gt;The Cloudstore site has a &lt;a href="http://gcloud.civilservice.gov.uk/customer-zone/"&gt;detailed explanation&lt;/a&gt; of how the buying process works and a list of which organisations are eligible to use Cloudstore &amp;#8211; it&amp;#8217;s a very comprehensive list of UK public sector organisations.  G-Cloud is very much for the whole public sector, not just central government.&lt;/p&gt;
&lt;p&gt;You can find all the details of our Cloudstore offering &lt;a href="https://marketplace.procserveonline.com/JPBC/0_5StartPage.jsp"&gt;here&lt;/a&gt;.  Just search for Swirrl or PublishMyData.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=JRAJJjunlb4:OtC9zXu6i_I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=JRAJJjunlb4:OtC9zXu6i_I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=JRAJJjunlb4:OtC9zXu6i_I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=JRAJJjunlb4:OtC9zXu6i_I:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=JRAJJjunlb4:OtC9zXu6i_I:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=JRAJJjunlb4:OtC9zXu6i_I:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=JRAJJjunlb4:OtC9zXu6i_I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=JRAJJjunlb4:OtC9zXu6i_I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=JRAJJjunlb4:OtC9zXu6i_I:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 15 Nov 2012 09:51:17 +0000</pubDate>
      <link>http://blog.swirrl.com/articles/publishmydata-now-available-through-g-cloud</link>
      <guid>http://blog.swirrl.com/articles/publishmydata-now-available-through-g-cloud?updated_at=2012-11-15T09:51:17</guid>
    </item>
    <item>
      <title>Swirrl is Hiring! Help shape the Future of Linked Open Data</title>
      <description>&lt;p&gt;We&amp;#8217;ve seen strong demand for our services since launching our Linked Data Publishing platform, &lt;a href="http://publishmydata.com"&gt;PublishMyData&lt;/a&gt;, and now we need some extra help.  So we&amp;#8217;re looking for someone to join our small team here in Manchester (UK), either on a permanent or long-term contract basis&lt;/p&gt;
&lt;h3&gt;What we&amp;#8217;re looking for&lt;/h3&gt;
&lt;p&gt;We&amp;#8217;re looking for a motivated and sharp web developer to work predominantly in our central Manchester office on our Linked Data related products and projects.&lt;/p&gt;
&lt;p&gt;Ideally you&amp;#8217;d be experienced in &lt;span style="background:lemonChiffon"&gt;Ruby on Rails, JavaScript, &lt;span class="caps"&gt;TDD&lt;/span&gt; and NoSQL databases&lt;/span&gt;, although we will consider proven polyglot programmers with other core skill-sets.&lt;/p&gt;
&lt;p&gt;Some knowledge of &lt;span class="caps"&gt;RDF&lt;/span&gt;, Linked Data and triple stores would be a bonus but we appreciate it&amp;#8217;s a fairly niche skill at the moment.&lt;/p&gt;
&lt;p&gt;One of our core aims is to enable all kinds of users (from laypeople interacting with visualisations through to software developers using our APIs) to understand, use, and get value from open data. So although we don&amp;#8217;t expect you to be a fully fledged designer, a strong aesthetic sense and a good feel for user experience would come in very handy.&lt;/p&gt;
&lt;p&gt;Finally, but importantly, we&amp;#8217;d like to find someone who shares our passion for open data and open source, and wants to make a difference in that area.&lt;/p&gt;
&lt;h3&gt;We think Swirrl would be a great place to work&lt;/h3&gt;
&lt;p&gt;You’d be making a big impact on our small company, helping to shape our products and future.&lt;/p&gt;
&lt;p&gt;This will be a very challenging and rewarding role, working on interesting projects for high-profile clients, as well as developing our own suite of Linked Data products. We&amp;#8217;re looking for the best, and will offer a competitive salary/day-rate, a healthy holiday entitlement, and profit share for the right candidate. You would also get to spec your own development machine.&lt;/p&gt;
&lt;p&gt;Although we&amp;#8217;re looking for someone to work mostly with us in our informal but dynamic central-Manchester office (which we share with a &lt;a href="http://theagileplanner.com"&gt;few&lt;/a&gt; &lt;a href="http://kennelboard.com/"&gt;other&lt;/a&gt; &lt;a href="http://crowd.fm"&gt;startups&lt;/a&gt;), we&amp;#8217;d be happy to accommodate some remote working.&lt;/p&gt;
&lt;h3&gt;Get in touch&lt;/h3&gt;
&lt;p&gt;If you&amp;#8217;re interested, &lt;a href="mailto:hello@swirrl.com"&gt;send us an email&lt;/a&gt; or call us on 0845 0035 389, and we can arrange to have an in-person chat over lunch or a drink. All enquiries/negotiations will be treated in the strictest confidence.&lt;/p&gt;
&lt;p&gt;Strictly no recruiters or agencies, please.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=jdGgXaALtQg:5_Hnq84kpFA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=jdGgXaALtQg:5_Hnq84kpFA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=jdGgXaALtQg:5_Hnq84kpFA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=jdGgXaALtQg:5_Hnq84kpFA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=jdGgXaALtQg:5_Hnq84kpFA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=jdGgXaALtQg:5_Hnq84kpFA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=jdGgXaALtQg:5_Hnq84kpFA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=jdGgXaALtQg:5_Hnq84kpFA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=jdGgXaALtQg:5_Hnq84kpFA:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 18 Sep 2012 21:45:51 +0000</pubDate>
      <link>http://blog.swirrl.com/articles/swirrl-is-hiring</link>
      <guid>http://blog.swirrl.com/articles/swirrl-is-hiring?updated_at=2012-09-19T12:13:44</guid>
    </item>
    <item>
      <title>Linked Open Data Business Models</title>
      <description>&lt;p&gt;In the wake of our respected competitor, &lt;a href="http://talis-systems.com/2012/07/refocusing-our-efforts-and-investments/"&gt;Talis, retiring from the general Linked Data software and consulting market&lt;/a&gt;, I thought it would be a good time to explain how we perceive the market, and position ourselves at Swirrl.&lt;/p&gt;
&lt;p&gt;Over the last couple of years, we&amp;#8217;ve found a slow but steady increase in demand for Linked Data hosting, consulting, and bespoke software development, which we&amp;#8217;ve served by building our &lt;a href="http://publishmydata.com"&gt;PublishMyData&lt;/a&gt; platform and selling related services. By &lt;a href="http://en.wikipedia.org/wiki/Bootstrapping#Business"&gt;bootstrapping our business&lt;/a&gt; and calling on our network of trusted freelancers to help meet bumps in workload, we&amp;#8217;ve been able to ride the wave of demand at what we feel is the right pace. With each additional project, we&amp;#8217;re able to improve our product, adding value for our customers and data users, and at the same time, making the process more efficient for us.&lt;/p&gt;
&lt;p&gt;Despite being proud Linked Open Data advocates at Swirrl, we firmly believe in giving people what they actually need and want. This means not forcing any particular standard or technology on users or customers, or assuming every problem is a nail for our &lt;span class="caps"&gt;RDF&lt;/span&gt; hammers. For us, this means judicious use of standards where appropriate, while recognising that not everyone are &lt;span class="caps"&gt;SPARQL&lt;/span&gt; and &lt;span class="caps"&gt;RDF&lt;/span&gt; nerds like us &amp;#8211; these skills are definitely &lt;em&gt;not&lt;/em&gt; mainstream yet &amp;#8211; although we have experienced an encouraging willingness to learn at nearly every turn.&lt;/p&gt;
&lt;p&gt;But it&amp;#8217;s not all about the technology. I personally think that one of the reasons for Linked Data not permeating through to popular Web-consciousness is that mature user interface patterns don&amp;#8217;t yet exist for describing and navigating the kinds of multi-dimensional data that &lt;span class="caps"&gt;RDF&lt;/span&gt; modelling produces. The tech is relatively simple; the hard parts are understanding your client&amp;#8217;s problem-domain, and creating an effective and pleasant user experience for the various audiences for the data. This is by no means a solved problem, but we think we&amp;#8217;re already going a pretty good job of making the data accessible, and we&amp;#8217;re constantly trying to improve in this area.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m happy to say that we&amp;#8217;ve been turning a modest but healthy profit from our Linked Data activities and that gives us confidence to keep investing. We&amp;#8217;re currently busy working on several Linked Data projects, and have a few more prospects in the pipeline. For now we have the capacity to match our workload, but we expect to need more freelance or permanent help in the future. If you&amp;#8217;re a passionate LoD geek who&amp;#8217;d like to work with us, we&amp;#8217;d love to hear from you.&lt;/p&gt;
&lt;p&gt;Organisations interested in our Linked Data consulting, hosting or development services, should check out our &lt;a href="http://publishmydata.com"&gt;PublishMyData site&lt;/a&gt; for more details. You can get in touch by emailing &lt;a href="mailto:hello@swirrl.com"&gt;hello@swirrl.com&lt;/a&gt; (other ways of contacting us &lt;a href="http://www.swirrl.com#about"&gt;are listed on our company website&lt;/a&gt;).&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Be among the first to hear our PublishMyData news by &lt;a href="http://eepurl.com/bBM9L"&gt;signing up to our newsletter&lt;/a&gt;. You&amp;#8217;ll get no more than 1 email per month, and we&amp;#8217;ll never sell your address or spam you.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=oH3xGNNigOA:or7lQKOPKTM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=oH3xGNNigOA:or7lQKOPKTM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=oH3xGNNigOA:or7lQKOPKTM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=oH3xGNNigOA:or7lQKOPKTM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=oH3xGNNigOA:or7lQKOPKTM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=oH3xGNNigOA:or7lQKOPKTM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=oH3xGNNigOA:or7lQKOPKTM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?i=oH3xGNNigOA:or7lQKOPKTM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Swirrlspeak?a=oH3xGNNigOA:or7lQKOPKTM:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Swirrlspeak?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 11 Jul 2012 09:15:27 +0000</pubDate>
      <link>http://blog.swirrl.com/articles/linked-data-business-models</link>
      <guid>http://blog.swirrl.com/articles/linked-data-business-models?updated_at=2012-07-11T10:24:21</guid>
    </item>
  </channel>
</rss>
