<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: guardian</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/guardian.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2019-12-23T09:36:42+00:00</updated><author><name>Simon Willison</name></author><entry><title>The Guardian’s nifty old-article trick is a reminder of how news organizations can use metadata to limit misinformation</title><link href="https://simonwillison.net/2019/Dec/23/nifty-old-article-trick/#atom-tag" rel="alternate"/><published>2019-12-23T09:36:42+00:00</published><updated>2019-12-23T09:36:42+00:00</updated><id>https://simonwillison.net/2019/Dec/23/nifty-old-article-trick/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.niemanlab.org/2019/04/the-guardians-nifty-old-article-trick-is-a-reminder-of-how-news-organizations-can-use-metadata-to-limit-misinformation/"&gt;The Guardian’s nifty old-article trick is a reminder of how news organizations can use metadata to limit misinformation&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The Guardian displays prominent banners on news stories from more than a year ago warning that it is an older article to help prevent accidental or intentional spread of misinformation using their content as ammunition. Impressively they also display the year prominently on the card images they serve as social media previews fir older articles.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/chronotope/status/1208914080645484546"&gt;@chronotope&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/news"&gt;news&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/misinformation"&gt;misinformation&lt;/a&gt;&lt;/p&gt;



</summary><category term="guardian"/><category term="news"/><category term="misinformation"/></entry><entry><title>Want to see what one digital future for newspapers looks like? Look at The Guardian, which isn't losing money anymore</title><link href="https://simonwillison.net/2019/May/2/guardian/#atom-tag" rel="alternate"/><published>2019-05-02T05:49:52+00:00</published><updated>2019-05-02T05:49:52+00:00</updated><id>https://simonwillison.net/2019/May/2/guardian/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.niemanlab.org/2019/05/want-to-see-what-one-digital-future-for-newspapers-looks-like-look-at-the-guardian-which-isnt-losing-money-anymore/"&gt;Want to see what one digital future for newspapers looks like? Look at The Guardian, which isn&amp;#x27;t losing money anymore&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
After losing money every single year since 1998, the Guardian just managed to turn a profit! Detailed analysis of how they did it by Joshua Benton.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://www.metafilter.com/180676/3-Make-more-money-than-you-did-before"&gt;MetaFilter&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/newspapers"&gt;newspapers&lt;/a&gt;&lt;/p&gt;



</summary><category term="guardian"/><category term="newspapers"/></entry><entry><title>Linked Data at the Guardian</title><link href="https://simonwillison.net/2010/Oct/19/linked/#atom-tag" rel="alternate"/><published>2010-10-19T19:11:00+00:00</published><updated>2010-10-19T19:11:00+00:00</updated><id>https://simonwillison.net/2010/Oct/19/linked/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/open-platform/blog/linked-data-open-platform"&gt;Linked Data at the Guardian&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The Guardian’s Open Platform API can now be queried by MusicBrainz ID and ISBN, opening up some extremely useful new types of query.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openplatform"&gt;openplatform&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/semanticweb"&gt;semanticweb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;&lt;/p&gt;



</summary><category term="guardian"/><category term="openplatform"/><category term="semanticweb"/><category term="recovered"/></entry><entry><title>Today's Guardian, by Phil Gyford</title><link href="https://simonwillison.net/2010/Jun/9/gyford/#atom-tag" rel="alternate"/><published>2010-06-09T23:21:00+00:00</published><updated>2010-06-09T23:21:00+00:00</updated><id>https://simonwillison.net/2010/Jun/9/gyford/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.gyford.com/phil/writing/2010/06/09/todays-guardian.php"&gt;Today&amp;#x27;s Guardian, by Phil Gyford&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
An alternative interface for reading today’s Guardian, built using the new Open Platform Content API and with extensive design notes from creator Phil Gyford.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/contentapi"&gt;contentapi&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/design"&gt;design&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/newspapers"&gt;newspapers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openplatform"&gt;openplatform&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/phil-gyford"&gt;phil-gyford&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;&lt;/p&gt;



</summary><category term="contentapi"/><category term="design"/><category term="guardian"/><category term="newspapers"/><category term="openplatform"/><category term="phil-gyford"/><category term="recovered"/></entry><entry><title>What's powering the Content API?</title><link href="https://simonwillison.net/2010/May/24/solr/#atom-tag" rel="alternate"/><published>2010-05-24T14:08:00+00:00</published><updated>2010-05-24T14:08:00+00:00</updated><id>https://simonwillison.net/2010/May/24/solr/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/open-platform/blog/what-is-powering-the-content-api"&gt;What&amp;#x27;s powering the Content API?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The new Guardian Content API runs on Solr, scaled using EC2 and Solr replication and with a Scala web service layer sitting between Solr and the API’s end users.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/apis"&gt;apis&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/contentapi"&gt;contentapi&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ec2"&gt;ec2&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openplatform"&gt;openplatform&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scala"&gt;scala&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scaling"&gt;scaling&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/solr"&gt;solr&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;&lt;/p&gt;



</summary><category term="apis"/><category term="contentapi"/><category term="ec2"/><category term="guardian"/><category term="openplatform"/><category term="scala"/><category term="scaling"/><category term="solr"/><category term="recovered"/></entry><entry><title>OpenPlatform Content API Explorer</title><link href="https://simonwillison.net/2010/May/20/explorer/#atom-tag" rel="alternate"/><published>2010-05-20T17:42:00+00:00</published><updated>2010-05-20T17:42:00+00:00</updated><id>https://simonwillison.net/2010/May/20/explorer/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://explorer.content.guardianapis.com/#/search?format=json"&gt;OpenPlatform Content API Explorer&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The new API explorer for the Guardian’s Content API.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/api"&gt;api&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openplatform"&gt;openplatform&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/api-explorer"&gt;api-explorer&lt;/a&gt;&lt;/p&gt;



</summary><category term="api"/><category term="guardian"/><category term="openplatform"/><category term="recovered"/><category term="api-explorer"/></entry><entry><title>The Guardian's Open Platform is open for business</title><link href="https://simonwillison.net/2010/May/20/openplatform/#atom-tag" rel="alternate"/><published>2010-05-20T17:40:00+00:00</published><updated>2010-05-20T17:40:00+00:00</updated><id>https://simonwillison.net/2010/May/20/openplatform/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/open-platform/blog/open-for-business"&gt;The Guardian&amp;#x27;s Open Platform is open for business&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The Guardian’s Content API is now out of beta. Of particular interest: you can access basic article metadata (headline, URL and tags) without using an API key at all, and the API supports JSONP—just request format=json and include a callback=foo argument.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/api"&gt;api&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jsonp"&gt;jsonp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openplatform"&gt;openplatform&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/content"&gt;content&lt;/a&gt;&lt;/p&gt;



</summary><category term="api"/><category term="guardian"/><category term="json"/><category term="jsonp"/><category term="openplatform"/><category term="recovered"/><category term="content"/></entry><entry><title>Live blogging the general election</title><link href="https://simonwillison.net/2010/May/10/firstdraft/#atom-tag" rel="alternate"/><published>2010-05-10T16:27:00+00:00</published><updated>2010-05-10T16:27:00+00:00</updated><id>https://simonwillison.net/2010/May/10/firstdraft/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/media/2010/may/10/live-blogging-general-election"&gt;Live blogging the general election&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The Guardian’s ongoing live blogs covering the UK election have been the best way of following events that I’ve seen (yes, better than Twitter). Live-blog author Andrew Sparrow explains his approach.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/blogging"&gt;blogging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/journalism"&gt;journalism&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/election"&gt;election&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrew-sparrow"&gt;andrew-sparrow&lt;/a&gt;&lt;/p&gt;



</summary><category term="blogging"/><category term="guardian"/><category term="journalism"/><category term="recovered"/><category term="election"/><category term="andrew-sparrow"/></entry><entry><title>Breakfast Instapaper</title><link href="https://simonwillison.net/2010/Apr/29/breakfast/#atom-tag" rel="alternate"/><published>2010-04-29T11:49:02+00:00</published><updated>2010-04-29T11:49:02+00:00</updated><id>https://simonwillison.net/2010/Apr/29/breakfast/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://breakfast-instapaper.appspot.com/"&gt;Breakfast Instapaper&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Handy tool for selecting and bulk-submitting stories from today’s Guardian and NYTimes to your Instapaper account, by Daniel Vydra.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/daniel-vydra"&gt;daniel-vydra&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/instapaper"&gt;instapaper&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/new-york-times"&gt;new-york-times&lt;/a&gt;&lt;/p&gt;



</summary><category term="daniel-vydra"/><category term="guardian"/><category term="instapaper"/><category term="new-york-times"/></entry><entry><title>Comprehensive notes from my three hour Redis tutorial</title><link href="https://simonwillison.net/2010/Apr/25/redis/#atom-tag" rel="alternate"/><published>2010-04-25T22:36:16+00:00</published><updated>2010-04-25T22:36:16+00:00</updated><id>https://simonwillison.net/2010/Apr/25/redis/#atom-tag</id><summary type="html">
    &lt;p&gt;Last week I presented two talks at the inaugural &lt;a href="http://nosqleu.com/"&gt;NoSQL Europe&lt;/a&gt; conference in London. The first was presented with Matthew Wall and covered the ways in which we have been exploring &lt;a href="http://www.slideshare.net/matwall/nosql-presentation"&gt;NoSQL at the Guardian&lt;/a&gt;. The second was a three hour workshop on Redis, my favourite piece of software to have the NoSQL label applied to it.&lt;/p&gt;

&lt;p&gt;I've &lt;a href="http://simonwillison.net/2009/Oct/22/redis/"&gt;written about Redis&lt;/a&gt; here before, and it has since earned a place next to MySQL/PostgreSQL and memcached as part of my default web application stack. Redis makes write-heavy features such as real-time statistics feasible for small applications, while effortlessly scaling up to handle larger projects as well. If you haven't tried it out yet, you're sorely missing out.&lt;/p&gt;

&lt;p&gt;For the workshop, I tried to give an overview of each individual Redis feature along with detailed examples of real-world problems that the feature can help solve. I spent the past day annotating each slide with detailed notes, and I think the result makes a pretty good stand-alone tutorial. Here's the end result:&lt;/p&gt;

&lt;p&gt;&lt;a href="/static/2010/redis-tutorial/"&gt;Redis tutorial slides and notes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In unrelated news, Nat and I both completed the first ever &lt;a href="http://brightonmarathon.co.uk/"&gt;Brighton Marathon&lt;/a&gt; last weekend, in my case &lt;a href="http://www.sportsystems.co.uk/ss/results.htm?entId=WILLI-DJVYM-SIMNV"&gt;taking 4 hours, 55 minutes and 17 seconds&lt;/a&gt;. Sincere thanks to everyone who came out to support us - until the race I had never appreciated how important the support of the spectators is to keep going to the end. We &lt;a href="http://www.justgiving.com/natalie-simon-marathon-2010"&gt;raised £757&lt;/a&gt; for the &lt;a href="http://www.heart.co.uk/have-a-heart/"&gt;Have a Heart&lt;/a&gt; children's charity. Thanks in particular to &lt;a href="http://clearleft.com/"&gt;Clearleft&lt;/a&gt; who kindly offered to match every donation.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/brightonmarathon"&gt;brightonmarathon&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/marathon"&gt;marathon&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nosql"&gt;nosql&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/redis"&gt;redis&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/running"&gt;running&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/my-talks"&gt;my-talks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/highlights"&gt;highlights&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/annotated-talks"&gt;annotated-talks&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="brightonmarathon"/><category term="guardian"/><category term="marathon"/><category term="nosql"/><category term="redis"/><category term="running"/><category term="my-talks"/><category term="highlights"/><category term="annotated-talks"/></entry><entry><title>Random Guardian</title><link href="https://simonwillison.net/2010/Mar/26/random/#atom-tag" rel="alternate"/><published>2010-03-26T16:47:03+00:00</published><updated>2010-03-26T16:47:03+00:00</updated><id>https://simonwillison.net/2010/Mar/26/random/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://random-guardian.appspot.com/"&gt;Random Guardian&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A random page from today’s Guardian, built by Daniel Vydra.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www.guardian.co.uk/help/insideguardian/2010/mar/26/random-guardian"&gt;Inside Guardian&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/daniel-vydra"&gt;daniel-vydra&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/random"&gt;random&lt;/a&gt;&lt;/p&gt;



</summary><category term="daniel-vydra"/><category term="guardian"/><category term="random"/></entry><entry><title>A day on Chatroulette, the web's weirdest new outpost</title><link href="https://simonwillison.net/2010/Feb/15/chatroulette/#atom-tag" rel="alternate"/><published>2010-02-15T11:15:00+00:00</published><updated>2010-02-15T11:15:00+00:00</updated><id>https://simonwillison.net/2010/Feb/15/chatroulette/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/technology/blog/2010/feb/14/chatroulette"&gt;A day on Chatroulette, the web&amp;#x27;s weirdest new outpost&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
By the Guardian’s Bobbie Johnson.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/bobbie-johnson"&gt;bobbie-johnson&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/chatroulette"&gt;chatroulette&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;&lt;/p&gt;



</summary><category term="bobbie-johnson"/><category term="chatroulette"/><category term="guardian"/></entry><entry><title>What's hot? Introducing Zeitgeist</title><link href="https://simonwillison.net/2010/Feb/5/zeitgeist/#atom-tag" rel="alternate"/><published>2010-02-05T12:17:32+00:00</published><updated>2010-02-05T12:17:32+00:00</updated><id>https://simonwillison.net/2010/Feb/5/zeitgeist/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/help/insideguardian/2010/feb/03/zeitgeist"&gt;What&amp;#x27;s hot? Introducing Zeitgeist&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Dan Catt’s first project at the Guardian. “When something appears on the Zeitgeist page, it’s because it performed better (got more attention) than the norm for that content type/section/day”. The application itself is written in Python and runs on Google App Engine.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/dan-catt"&gt;dan-catt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/zeitgeist"&gt;zeitgeist&lt;/a&gt;&lt;/p&gt;



</summary><category term="dan-catt"/><category term="google-app-engine"/><category term="guardian"/><category term="python"/><category term="zeitgeist"/></entry><entry><title>World Government Data</title><link href="https://simonwillison.net/2010/Jan/27/world/#atom-tag" rel="alternate"/><published>2010-01-27T12:27:03+00:00</published><updated>2010-01-27T12:27:03+00:00</updated><id>https://simonwillison.net/2010/Jan/27/world/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/world-government-data"&gt;World Government Data&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Launched last week, this is the Guardian’s meta-search engine for searching and browsing through data from four different government data sites (with more sites planned). Under the hood it’s Django, Solr, Haystack and the Scrapy crawling library. The application was built by Ben Firshman during an internship over Christmas.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ben-firshman"&gt;ben-firshman&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/data"&gt;data&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/datagovuk"&gt;datagovuk&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/haystack"&gt;haystack&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/projects"&gt;projects&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scrapy"&gt;scrapy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/solr"&gt;solr&lt;/a&gt;&lt;/p&gt;



</summary><category term="ben-firshman"/><category term="data"/><category term="datagovuk"/><category term="django"/><category term="guardian"/><category term="haystack"/><category term="projects"/><category term="python"/><category term="scrapy"/><category term="solr"/></entry><entry><title>Applications: the real stars of the data.gov.uk launch</title><link href="https://simonwillison.net/2010/Jan/27/applications/#atom-tag" rel="alternate"/><published>2010-01-27T12:23:54+00:00</published><updated>2010-01-27T12:23:54+00:00</updated><id>https://simonwillison.net/2010/Jan/27/applications/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blogs.cabinetoffice.gov.uk/digitalengagement/post/2010/01/26/Applications-the-real-stars-of-the-datagovuk-launch.aspx"&gt;Applications: the real stars of the data.gov.uk launch&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A write-up of the data.gov.uk launch event at the Guardian. I demonstrated the Guardian’s World Government Data search engine and a small data.gov.uk inspired feature on WildlifeNearYou.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/datagovuk"&gt;datagovuk&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/projects"&gt;projects&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wildlifenearyou"&gt;wildlifenearyou&lt;/a&gt;&lt;/p&gt;



</summary><category term="datagovuk"/><category term="guardian"/><category term="projects"/><category term="wildlifenearyou"/></entry><entry><title>Notes on designing the Guardian iPhone app</title><link href="https://simonwillison.net/2009/Dec/20/iphone/#atom-tag" rel="alternate"/><published>2009-12-20T12:55:48+00:00</published><updated>2009-12-20T12:55:48+00:00</updated><id>https://simonwillison.net/2009/Dec/20/iphone/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://johnhenrybarac.com/http:/johnhenrybarac.com/notes-on-designing-the-guardian-iphone-app/"&gt;Notes on designing the Guardian iPhone app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
By John-Henry Barac, the principal designer of he iPhone application who also previously worked on the Guardian’s print transition to the Berliner format.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/design"&gt;design&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/iphone"&gt;iphone&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/john-henry-barac"&gt;john-henry-barac&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;&lt;/p&gt;



</summary><category term="design"/><category term="guardian"/><category term="iphone"/><category term="john-henry-barac"/><category term="mobile"/></entry><entry><title>Crowdsourced document analysis and MP expenses</title><link href="https://simonwillison.net/2009/Dec/20/crowdsourcing/#atom-tag" rel="alternate"/><published>2009-12-20T12:07:53+00:00</published><updated>2009-12-20T12:07:53+00:00</updated><id>https://simonwillison.net/2009/Dec/20/crowdsourcing/#atom-tag</id><summary type="html">
    &lt;p&gt;As &lt;a href="https://web.archive.org/web/20091204154825/https://www.guardian.co.uk/politics/mps-expenses"&gt;you may have heard&lt;/a&gt;, the UK government released a fresh batch of MP expenses documents a week ago on Thursday. I spent that week working with a small team at Guardian HQ to prepare for the release. Here's what we built:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://web.archive.org/web/20091213164102/http://mps-expenses2.guardian.co.uk/"&gt;http://mps-expenses2.guardian.co.uk/&lt;/a&gt; &lt;em&gt;Updated March 2021: all links now go to the Internet Archive&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2009/mp-expenses-2-cropped.png" alt="Screenshot of the homepage from December 2019" style="max-width: 100%" /&gt;&lt;/p&gt;

&lt;p&gt;It's a crowdsourcing application that asks the public to help us dig through and categorise the enormous stack of documents - around 30,000 pages of claim forms, scanned receipts and hand-written letters, all scanned and published as PDFs.&lt;/p&gt;

&lt;p&gt;This is the second time we've tried this - the first was back in June, and can be seen at &lt;a href="https://web.archive.org/web/20090802094829/http://mps-expenses.guardian.co.uk/"&gt;mps-expenses.guardian.co.uk&lt;/a&gt;. Last week's attempt was an opportunity to apply the lessons we learnt the first time round.&lt;/p&gt;

&lt;p&gt;Writing crowdsourcing applications in a newspaper environment is a fascinating challenge. Projects have very little notice - I heard about the new document release the Thursday before giving less than a week to put everything together. In addition to the fast turnaround for the application itself, the 48 hours following the release are crucial. The news cycle moves fast, so if the application launches but we don't manage to get useful data out of it quickly the story will move on before we can impact it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://web.archive.org/web/20091124150940/http://www.scalecamp.org.uk/"&gt;ScaleCamp&lt;/a&gt; on the Friday meant that development work didn't properly kick off until Monday morning. The bulk of the work was performed by two server-side developers, one client-side developer, one designer and one QA on Monday, Tuesday and Wednesday. The Guardian operations team deftly handled our EC2 configuration and deployment, and we had some extra help on the day from other members of the technology department. After launch we also had a number of journalists helping highlight discoveries and dig through submissions.&lt;/p&gt;

&lt;p&gt;The system was written using Django, MySQL (InnoDB), Redis and memcached.&lt;/p&gt;

&lt;h4 id="asking-the-right-question"&gt;Asking the right question&lt;/h4&gt;

&lt;p&gt;The biggest mistake we made the first time round was that we asked the wrong question. We tried to get our audience to categorise documents as either "claims" or "receipts" and to rank them as "not interesting", "a bit interesting", "interesting but already known" and "someone should investigate this". We also asked users to optionally enter any numbers they saw on the page as categorised "line items", with the intention of adding these up later.&lt;/p&gt;

&lt;p&gt;The line items, with hindsight, were a mistake. 400,000 documents makes for a huge amount of data entry and for the figures to be useful we would need to confirm their accuracy. This would mean yet more rounds of crowdsourcing, and the job was so large that the chance of getting even one person to enter line items for each page rapidly diminished as the news story grew less prominent.&lt;/p&gt;

&lt;p&gt;The categorisations worked reasonably well but weren't particularly interesting - knowing if a document is a claim or receipt is useful only if you're going to collect line items. The "investigate this" button worked very well though.&lt;/p&gt;

&lt;p&gt;We completely changed our approach for the new system. We dropped the line item task and instead asked our users to categories each page by applying one or more tags, from a small set that our editors could control. This gave us a lot more flexibility - we changed the tags shortly before launch based on the characteristics of the documents - and had the potential to be a lot more fun as well. I'm particularly fond of the "hand-written" tag, which has highlighted some &lt;a href="https://web.archive.org/web/20091223091650/http://mps-expenses2.guardian.co.uk/page/1062/"&gt;lovely examples&lt;/a&gt; of correspondence between MPs and the expenses office.&lt;/p&gt;

&lt;p&gt;Sticking to an editorially assigned set of tags provided a powerful tool for directing people's investigations, and also ensured our users didn't start creating potentially libelous tags of their own.&lt;/p&gt;

&lt;h4 id="breaking-up-assignments"&gt;Breaking it up in to assignments&lt;/h4&gt;

&lt;p&gt;For the first project, everyone worked together on the same task to review all of the documents. This worked fine while the document set was small, but once we had loaded in 400,000+ pages the progress bar become quite depressing.&lt;/p&gt;

&lt;p&gt;This time round, we added a new concept of "&lt;a href="https://web.archive.org/web/20091215224727/http://mps-expenses2.guardian.co.uk/assignment/"&gt;assignments&lt;/a&gt;". Each assignment consisted of the set of pages belonging to a specified list of MPs, documents or political parties. Assignments had a threshold, so we could specify that a page must be reviewed by at least X people before it was considered reviewed. An editorial tool let us feature one "main" assignment and several alternative assignments right on the homepage.&lt;/p&gt;

&lt;p&gt;Clicking "start reviewing" on an assignment sets a cookie for that assignment, and adds the assignment's progress bar to the top of the review interface. New pages are selected at random from the set of unreviewed pages in that assignment.&lt;/p&gt;

&lt;p&gt;The assignments system proved extremely effective. We could use it to direct people to the highest value documents (our top hit list of interesting MPs, or members of the shadow cabinet) while still allowing people with specific interests to pick an alternative task.&lt;/p&gt;

&lt;h4 id="get-the-button-right"&gt;Get the button right!&lt;/h4&gt;

&lt;p&gt;Having run two crowdsourcing projects I can tell you this: the single most important piece of code you will write is the code that gives someone something new to review. Both of our projects had big "start reviewing" buttons. Both were broken in different ways.&lt;/p&gt;

&lt;p&gt;The first time round, the mistakes were around scalability. I used a SQL "ORDER BY RAND()" statement to return the next page to review. I knew this was an inefficient operation, but I assumed that it wouldn't matter since the button would only be clicked occasionally.&lt;/p&gt;

&lt;p&gt;Something like 90% of our database load turned out to be caused by that one SQL statement, and it only got worse as we loaded more pages in to the system. This caused multiple site slow downs and crashes until we threw together a cron job that pushed 1,000 unreviewed page IDs in to memcached and made the button pick one of those at random.&lt;/p&gt;

&lt;p&gt;This solved the performance problem, but meant that our user activity wasn't nearly as well targeted. For optimum efficiency you really want everyone to be looking at a different page - and a random distribution is almost certainly the easiest way to achieve that.&lt;/p&gt;

&lt;p&gt;The second time round I turned to my new favourite in-memory data structure server, &lt;a href="http://code.google.com/p/redis/"&gt;redis&lt;/a&gt;, and its &lt;a href="http://code.google.com/p/redis/wiki/SrandmemberCommand"&gt;SRANDMEMBER&lt;/a&gt; command (a feature I &lt;a href="http://twitter.com/simonw/status/5027987857"&gt;requested&lt;/a&gt; a while ago with this exact kind of project in mind). The system maintains a redis set of all IDs that needed to be reviewed for an assignment to be complete, and a separate set of IDs of all pages had been reviewed. It then uses redis set intersection (the &lt;a href="http://code.google.com/p/redis/wiki/SdiffstoreCommand"&gt;SDIFFSTORE&lt;/a&gt; command) to create a set of unreviewed pages for the current assignment and then SRANDMEMBER to pick one of those pages.&lt;/p&gt;

&lt;p&gt;This is where the bug crept in. Redis was just being used as an optimisation - the single point of truth for whether a page had been reviewed or not stayed as MySQL. I wrote a couple of Django management commands to repopulate the denormalised Redis sets should we need to manually modify the database. Unfortunately I missed some - the sets that tracked what pages were available in each document. The assignment generation code used an intersection of these sets to create the overall set of documents for that assignment. When we deleted some pages that had accidentally been imported twice I failed to update those sets.&lt;/p&gt;

&lt;p&gt;This meant the "next page" button would occasionally turn up a page that didn't exist. I had some very poorly considered fallback logic for that - if the random page didn't exist, the system would return the first page in that assignment instead. Unfortunately, this meant that when the assignment was down to the last four non-existent pages every single user was directed to the same page - which subsequently attracted well over a thousand individual reviews.&lt;/p&gt;

&lt;p&gt;Next time, I'm going to try and make the "next" button completely bullet proof! I'm also going to maintain a "denormalisation dictionary" documenting every denormalisation in the system in detail - such a thing would have saved me several hours of confused debugging.&lt;/p&gt;

&lt;h4 id="exposing-the-results"&gt;Exposing the results&lt;/h4&gt;

&lt;p&gt;The biggest mistake I made last time was not getting the data back out again fast enough for our reporters to effectively use it. It took 24 hours from the launch of the application to the moment the first reporting feature was added - mainly because we spent much of the intervening time figuring out the scaling issues.&lt;/p&gt;

&lt;p&gt;This time we handled this a lot better. We provided private pages exposing all recent activity on the site. We also provided public pages for each of the tags, as well as combination pages for party + tag, MP + tag, document + tag, assignment + tag and user + tag. Most of these pages were ordered by most-tagged, with the hope that the most interesting pages would quickly bubble to the top.&lt;/p&gt;

&lt;p&gt;This worked pretty well, but we made one key mistake. The way we were ordering pages meant that it was almost impossible to paginate through them and be sure that you had seen everything under a specific tag. If you're trying to keep track of everything going on in the site, reliable pagination is essential. The only way to get reliable pagination on a fast moving site is to order by the date something was first added to a set in ascending order. That way you can work through all of the pages, wait a bit, hit "refresh" and be able to continue paginating where you left off. Any other order results in the content of each page changing as new content comes in.&lt;/p&gt;

&lt;p&gt;We eventually added an undocumented /in-order/ URL prefix to address this issue. Next time I'll pay a lot more attention to getting the pagination options right from the start.&lt;/p&gt;

&lt;h4 id="rewarding-our-contributors"&gt;Rewarding our contributors&lt;/h4&gt;

&lt;p&gt;The reviewing experience the first time round was actually quite lonely. We deliberately avoided showing people how others had marked each page because we didn't want to bias the results. Unfortunately this meant the site felt like a bit of a ghost town, even when hundreds of other people were actively reviewing things at the same time.&lt;/p&gt;

&lt;p&gt;For the new version, we tried to provide a much better feeling of activity around the site. We added "top reviewer" tables to every assignment, MP and political party as well as a "most active reviewers in the past 48 hours" table on the homepage (this feature was added to the first project several days too late). User profile pages got a lot more attention, with more of a feel that users were collecting their favourite pages in to tag buckets within their profile.&lt;/p&gt;

&lt;p&gt;Most importantly, we added a concept of &lt;a href="https://web.archive.org/web/20091223091046/http://mps-expenses2.guardian.co.uk/discoveries/"&gt;discoveries&lt;/a&gt; - editorially highlighted pages that were shown on the homepage and credited to the user that had first highlighted them. These discoveries also added valuable editorial interest to the site, showing up on the homepage and also the index pages for &lt;a href="https://web.archive.org/web/20091215191906/http://mps-expenses2.guardian.co.uk/labour/"&gt;political parties&lt;/a&gt; and &lt;a href="https://web.archive.org/web/20091215050919/http://mps-expenses2.guardian.co.uk/conservative/gerald-howarth/"&gt;individual MPs&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id="light-weight-registration"&gt;Light-weight registration&lt;/h4&gt;

&lt;p&gt;For both projects, we implemented an extremely light-weight form of registration. Users can start reviewing pages without going through any signup mechanism, and instead are assigned a cookie and an anon-454 style username the first time they review a document. They are then encouraged to assign themselves a proper username and password so they can log in later and take credit for their discoveries.&lt;/p&gt;

&lt;p&gt;It's difficult to tell how effective this approach really is. I have a strong hunch that it dramatically increases the number of people who review at least one document, but without a formal A/B test it's hard to tell how true that is. The UI for this process in the first project was quite confusing - we gave it a solid makeover the second time round, which seems to have resulted in a higher number of conversions.&lt;/p&gt;

&lt;h4 id="overall-lessons"&gt;Overall lessons&lt;/h4&gt;

&lt;p&gt;News-based crowdsourcing projects of this nature are both challenging and an enormous amount of fun. For the best chances of success, be sure to ask the right question, ensure user contributions are rewarded, expose as much data as possible and make the "next thing to review" behaviour rock solid. I'm looking forward to the next opportunity to apply these lessons, although at this point I &lt;em&gt;really&lt;/em&gt; hope it involves something other than MPs' expenses.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/crowdsourcing"&gt;crowdsourcing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/innodb"&gt;innodb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/memcached"&gt;memcached&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mpsexpenses"&gt;mpsexpenses&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mysql"&gt;mysql&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nosql"&gt;nosql&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/politics"&gt;politics&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/projects"&gt;projects&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/redis"&gt;redis&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="crowdsourcing"/><category term="django"/><category term="guardian"/><category term="innodb"/><category term="memcached"/><category term="mpsexpenses"/><category term="mysql"/><category term="nosql"/><category term="politics"/><category term="projects"/><category term="python"/><category term="redis"/></entry><entry><title>Guardian iPhone app</title><link href="https://simonwillison.net/2009/Dec/14/iphone/#atom-tag" rel="alternate"/><published>2009-12-14T13:29:29+00:00</published><updated>2009-12-14T13:29:29+00:00</updated><id>https://simonwillison.net/2009/Dec/14/iphone/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/iphone"&gt;Guardian iPhone app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Released today, ad-free, £2.39 for the application, has an excellent offline mode. I helped build the backend web service, which is a Django app running on EC2.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ec2"&gt;ec2&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/iphone"&gt;iphone&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="ec2"/><category term="guardian"/><category term="iphone"/><category term="python"/></entry><entry><title>UK Scale Camp</title><link href="https://simonwillison.net/2009/Nov/4/ukscalecamp/#atom-tag" rel="alternate"/><published>2009-11-04T23:12:17+00:00</published><updated>2009-11-04T23:12:17+00:00</updated><id>https://simonwillison.net/2009/Nov/4/ukscalecamp/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/open-platform/blog/uk-scale-camp"&gt;UK Scale Camp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
We’re hosting a one day web performance and scalability unconference at the Guardian on the 4th of December. If you’re involved in running a high-scale website in the UK (or abroad) we’d love you to come along. Spaces are going fast.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/events"&gt;events&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/performance"&gt;performance&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scalability"&gt;scalability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ukscalecamp"&gt;ukscalecamp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unconference"&gt;unconference&lt;/a&gt;&lt;/p&gt;



</summary><category term="events"/><category term="guardian"/><category term="performance"/><category term="scalability"/><category term="ukscalecamp"/><category term="unconference"/></entry><entry><title>Why I like Redis</title><link href="https://simonwillison.net/2009/Oct/22/redis/#atom-tag" rel="alternate"/><published>2009-10-22T10:58:21+00:00</published><updated>2009-10-22T10:58:21+00:00</updated><id>https://simonwillison.net/2009/Oct/22/redis/#atom-tag</id><summary type="html">
    &lt;p&gt;I've been getting a lot of useful work done with &lt;a href="http://code.google.com/p/redis/"&gt;Redis&lt;/a&gt; recently.&lt;/p&gt;

&lt;p&gt;Redis is typically categorised as yet another of those new-fangled NoSQL key/value stores, but if you look closer it actually has some pretty unique characteristics. It makes more sense to describe it as a "data structure server" - it provides a network service that exposes persistent storage and operations over dictionaries, lists, sets and string values. Think memcached but with list and set operations and persistence-to-disk.&lt;/p&gt;

&lt;p&gt;It's also incredibly easy to set up, &lt;a href="http://code.google.com/p/redis/wiki/Benchmarks" title="How Fast is Redis?"&gt;ridiculously fast&lt;/a&gt; (30,000 read or writes a second on my laptop with the default configuration) and has an interesting approach to persistence. Redis runs in memory, but syncs to disk every Y seconds or after every X operations. Sounds risky, but it supports replication out of the box so if you're worried about losing data should a server fail you can always ensure you have a replicated copy to hand. I wouldn't trust my only copy of critical data to it, but there are plenty of other cases for which it is really well suited.&lt;/p&gt;

&lt;p&gt;I'm currently not using it for data storage at all - instead, I use it as a tool for processing data using the interactive Python interpreter.&lt;/p&gt;

&lt;p&gt;I'm a huge fan of REPLs. When programming Python, I spend most of my time in an &lt;a href="http://ipython.scipy.org/"&gt;IPython&lt;/a&gt; prompt. With JavaScript, I use the &lt;a href="http://getfirebug.com/cl.html"&gt;Firebug console&lt;/a&gt;. I experiment with APIs, get something working and paste it over in to a text editor. For some one-off data transformation problems I never save any code at all - I run a couple of list comprehensions, dump the results out as JSON or CSV and leave it at that.&lt;/p&gt;

&lt;p&gt;Redis is an excellent complement to this kind of programming. I can run a long running batch job in one Python interpreter (say loading a few million lines of CSV in to a Redis key/value lookup table) and run another interpreter to play with the data that's already been collected, even as the first process is streaming data in. I can quit and restart my interpreters without losing any data. And because Redis semantics map closely to Python native data types, I don't have to think for more than a few seconds about how I'm going to represent my data.&lt;/p&gt;

&lt;p&gt;Here's a 30 second guide to getting started with Redis:&lt;/p&gt;

&lt;pre&gt;&lt;code class="shell"&gt;$ wget http://redis.googlecode.com/files/redis-1.01.tar.gz
$ tar -xzf redis-1.01.tar.gz
$ cd redis-1.01
$ make
$ ./redis-server&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And that's it - you now have a Redis server running on port 6379. No need even for a &lt;samp&gt;./configure&lt;/samp&gt; or &lt;samp&gt;make install&lt;/samp&gt;. You can run &lt;samp&gt;./redis-benchmark&lt;/samp&gt; in that directory to exercise it a bit.&lt;/p&gt;

&lt;p&gt;Let's try it out from Python. In a separate terminal:&lt;/p&gt;

&lt;pre&gt;&lt;code class="shell"&gt;$ cd redis-1.01/client-libraries/python/
$ python
&amp;gt;&amp;gt;&amp;gt; import redis
&amp;gt;&amp;gt;&amp;gt; r = redis.Redis()
&amp;gt;&amp;gt;&amp;gt; r.info()
{u'total_connections_received': 1, ... }
&amp;gt;&amp;gt;&amp;gt; r.keys('*') # Show all keys in the database
[]
&amp;gt;&amp;gt;&amp;gt; r.set('key-1', 'Value 1')
'OK'
&amp;gt;&amp;gt;&amp;gt; r.keys('*')
[u'key-1']
&amp;gt;&amp;gt;&amp;gt; r.get('key-1')
u'Value 1'&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now let's try something a bit more interesting:&lt;/p&gt;

&lt;pre&gt;&lt;code class="shell"&gt;&amp;gt;&amp;gt;&amp;gt; r.push('log', 'Log message 1', tail=True)
&amp;gt;&amp;gt;&amp;gt; r.push('log', 'Log message 2', tail=True)
&amp;gt;&amp;gt;&amp;gt; r.push('log', 'Log message 3', tail=True)
&amp;gt;&amp;gt;&amp;gt; r.lrange('log', 0, 100)
[u'Log message 3', u'Log message 2', u'Log message 1']
&amp;gt;&amp;gt;&amp;gt; r.push('log', 'Log message 4', tail=True)
&amp;gt;&amp;gt;&amp;gt; r.push('log', 'Log message 5', tail=True)
&amp;gt;&amp;gt;&amp;gt; r.push('log', 'Log message 6', tail=True)
&amp;gt;&amp;gt;&amp;gt; r.ltrim('log', 0, 2)
&amp;gt;&amp;gt;&amp;gt; r.lrange('log', 0, 100)
[u'Log message 6', u'Log message 5', u'Log message 4']&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That's a simple capped log implementation (similar to a &lt;a href="http://www.mongodb.org/display/DOCS/Capped+Collections"&gt;MongoDB capped collection&lt;/a&gt;) - &lt;samp&gt;push&lt;/samp&gt; items on to the tail of a 'log' key and use &lt;samp&gt;ltrim&lt;/samp&gt; to only retain the last X items. You could use this to keep track of what a system is doing right now without having to worry about storing ever increasing amounts of logging information.&lt;/p&gt;

&lt;p&gt;See the documentation for a &lt;a href="http://code.google.com/p/redis/wiki/CommandReference"&gt;full list of Redis commands&lt;/a&gt;. I'm particularly excited about the &lt;samp&gt;RANDOMKEY&lt;/samp&gt; and new &lt;samp&gt;SRANDMEMBER&lt;/samp&gt; commands (&lt;a href="http://github.com/antirez/redis/commit/2abb95a9a849453eeb864e919ea0b8d6495a6a2a"&gt;git trunk only&lt;/a&gt; at the moment), which help address the common challenge of picking a random item without &lt;code class="sql"&gt;ORDER BY RAND()&lt;/code&gt; clobbering your relational database. In a beautiful example of open source support in action, I &lt;a href="http://twitter.com/simonw/status/5027987857"&gt;requested SRANDMEMBER on Twitter&lt;/a&gt; yesterday and &lt;a href="http://twitter.com/antirez" title="Salvatore Sanfilippo"&gt;antirez&lt;/a&gt; committed just 12 hours later.&lt;/p&gt;

&lt;p&gt;I used Redis this week to help create &lt;a href="http://www.guardian.co.uk/news/datablog/2009/oct/19/bnp-membership-list-constituency" title="BNP membership where you live"&gt;heat maps of the BNP's membership list&lt;/a&gt; for the Guardian. I had the leaked spreadsheet of the BNP member details and a (licensed) CSV file mapping 1.6 million postcodes to their corresponding parliamentary constituencies. I loaded the CSV file in to Redis, then looped through the 12,000 postcodes from the membership and looked them up in turn, accumulating counts for each constituency. It took a couple of minutes to load the constituency data and a few seconds to run and accumulate the postcode counts. In the end, it probably involved less than 20 lines of actual Python code.&lt;/p&gt;

&lt;p&gt;A much more interesting example of an application built on Redis is &lt;a href="http://hurl.it/"&gt;Hurl&lt;/a&gt;, a tool for debugging HTTP requests built in 48 hours by Leah Culver and Chris Wanstrath. The &lt;a href="http://github.com/defunkt/hurl"&gt;code is now open source&lt;/a&gt;, and Chris talks a bit more about the implementation (in particular their use of sort in Redis) &lt;a href="http://ozmm.org/posts/sort_in_redis.html"&gt;on his blog&lt;/a&gt;. Redis also gets a mention in Tom Preston-Werner's &lt;a href="http://github.com/blog/530-how-we-made-github-fast"&gt;epic writeup&lt;/a&gt; of the new scalable architecture behind GitHub.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/chris-wanstrath"&gt;chris-wanstrath&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/github"&gt;github&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hurl"&gt;hurl&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/interactivedevelopment"&gt;interactivedevelopment&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ipython"&gt;ipython&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/leah-culver"&gt;leah-culver&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/performance"&gt;performance&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/redis"&gt;redis&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="chris-wanstrath"/><category term="github"/><category term="guardian"/><category term="hurl"/><category term="interactivedevelopment"/><category term="ipython"/><category term="leah-culver"/><category term="open-source"/><category term="performance"/><category term="python"/><category term="redis"/></entry><entry><title>The Guardian 1000 Novels Everyone Must Read in FluidDB</title><link href="https://simonwillison.net/2009/Sep/13/novels/#atom-tag" rel="alternate"/><published>2009-09-13T23:48:26+00:00</published><updated>2009-09-13T23:48:26+00:00</updated><id>https://simonwillison.net/2009/Sep/13/novels/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://abouttag.blogspot.com/2009/08/guardian-1000-novels-everyone-must-read.html"&gt;The Guardian 1000 Novels Everyone Must Read in FluidDB&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Nicholas J. Radcliffe loaded the Guardian’s list of 1000 novels in to FluidDB, where the ability for users to add their own ratings style metadata makes it an ideal dataset for exploring the capabilities of the platform.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/fluiddb"&gt;fluiddb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;&lt;/p&gt;



</summary><category term="fluiddb"/><category term="guardian"/></entry><entry><title>Hack Day tools for non-developers</title><link href="https://simonwillison.net/2009/Jul/28/tools/#atom-tag" rel="alternate"/><published>2009-07-28T14:23:53+00:00</published><updated>2009-07-28T14:23:53+00:00</updated><id>https://simonwillison.net/2009/Jul/28/tools/#atom-tag</id><summary type="html">
    &lt;p&gt;We're about to run our second internal hack day at the Guardian. The first was &lt;a href="http://www.guardian.co.uk/global/insideguardian/2008/nov/18/guardian-hack-day-results" title="Results from Hack Day at the Guardian"&gt;an enormous amount of fun&lt;/a&gt; and the second one looks set to be even more productive.&lt;/p&gt;

&lt;p&gt;There's only one rule at hack day: build something you can demonstrate at the end of the event (Powerpoint slides don't count). Importantly though, our hack days are not restricted to just our development team: anyone from the technology department can get involved, and we extend the invitation to other parts of the organisation as well. At the Guardian, this includes journalists.&lt;/p&gt;

&lt;p&gt;For our first hack day, I put together a list of "tools for non-developers" - sites, services and software that could be used for hacking without programming knowledge as a pre-requisite. I'm now updating that list with recommendations from elsewhere. Here's the list so far:&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.freebase.com/"&gt;Freebase&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Originally a kind of structured version of Wikipedia, Freebase changed its focus last year towards being a "social database about things you know and love". In other words, it's the most powerful OCD-enabler in the history of the world. Create your own "Base" on any subject you like, set up your own types and start gathering together topics from the millions already available in Freebase - or add your own. Examples include the &lt;a href="http://battlestargalactica.freebase.com/"&gt;Battlestar Galactica base&lt;/a&gt;, the &lt;a href="http://tallships.freebase.com/"&gt;Tall Ships base&lt;/a&gt; and the fabulous &lt;a href="http://database.freebase.com/"&gt;Database base&lt;/a&gt;. If you &lt;em&gt;are&lt;/em&gt; a developer the tools in the &lt;a href="http://www.freebase.com/make"&gt;Make Things with Freebase&lt;/a&gt; section are top notch.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.dabbledb.com/"&gt;Dabble DB&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Dabble is a weird combination of a spreadsheet, an online database and a set of visualisation tools. Watch the 8 minute demo to get an idea of how powerful this is - you can start off by loading in an existing spreadsheet and take it from there. You'll need to sign up for the free 30 day trial.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://docs.google.com/"&gt;Google Docs&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;You can always build a hack in Excel, but &lt;a href="http://docs.google.com/"&gt;Google Spreadsheets&lt;/a&gt; is surprisingly powerful and means that you can collaborate with others on your hack (including developers, who can use the Google Docs API to get at the data in your spreadsheet). Check out the following tutorials, which describe ways of using Google Spreadsheets to scrape in data from other webpages and output it in interesting formats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ouseful.wordpress.com/2008/10/14/data-scraping-wikipedia-with-google-spreadsheets/"&gt;Data Scraping Wikipedia with Google Spreadsheets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ouseful.wordpress.com/2008/10/23/calling-amazon-associatesecommerce-web-services-from-a-google-spreadsheet/"&gt;Calling Amazon Associates/Ecommerce Web Services from a Google Spreadsheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's also a simple way to &lt;a href="http://docs.google.com/support/bin/answer.py?hl=en&amp;amp;answer=87809"&gt;create a form&lt;/a&gt; that submits data in to a Google Spreadsheet.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://pipes.yahoo.com/"&gt;Yahoo! Pipes&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Visual tools for combining, filtering and modifying RSS feeds. Combine with the large number of &lt;a href="http://www.guardian.co.uk/help/insideguardian/2008/oct/22/full-fat-rss-feed-upgrade" title="Upgrading our RSS feeds"&gt;full-content feeds on guardian.co.uk&lt;/a&gt; for all sorts of interesting possibilities. Here's &lt;a href="http://ouseful.wordpress.com/2008/10/20/mashup-reuse-are-you-lazy-enough/" title="Mashup Reuse – Are You Lazy Enough?"&gt;a tutorial&lt;/a&gt; that incorporates Google Docs as well.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://maps.google.com/help/maps/mymaps/create.html"&gt;Google My Maps&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Google provide a really neat interface for adding your own points, lines and areas to a Google Map. Outputs KML, a handy file format for carting geographic data around between different tools.&lt;/p&gt;

&lt;p&gt;If you already have a KML or GeoRSS feed URL from somewhere (e.g. the output of a Yahoo! Pipe), you can paste it directly in to the Google Maps search box to see the points rendered on a map.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://sketchup.google.com/"&gt;Google SketchUp&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;A simple to use 3D drawing package that lets you create 3D models of real-world buildings and then import them in to &lt;a href="http://earth.google.com/"&gt;Google Earth&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.openstreetmap.org/"&gt;OpenStreetMap&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Try your hand at some open source cartography on OpenStreetMap, the geographic world's answer to Wikipedia. If you have the equipment you can contribute GPS traces, otherwise there's a clever online editor that will let you trace out roads from satellite photos - or you could just make sure your favourite pub is included on the map. The export tools can provide vector or static maps, and if you export as SVG you can further edit your map in Illustrator or Inkscape.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://maps.cloudmade.com/"&gt;CloudMade Maps&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Commercial tools built on top of &lt;a href="http://www.openstreetmap.org/"&gt;OpenStreetMap&lt;/a&gt;, the most exciting of which allows you to create your own map theme by setting your preferred colours and line widths for various types of map feature.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://manyeyes.alphaworks.ibm.com/manyeyes/"&gt;Many Eyes&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;IBM Research's suite of data visualisation tools, with a wiki-style collaboration platform for publishing data and creating visualisations.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.dapper.net/open/"&gt;Dapper&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Dapper provides a powerful tool for screen scraping websites, without needing to write any code. Output formats include RSS, iCalendar and Google Maps.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.tiddlywiki.com/"&gt;TiddlyWiki&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;TiddlyWiki is a complete wiki in a single HTML file, which you can save locally and use as a notebook, collaboration tool and much more. There's a large ecosystem of plugins and macros which can be used to extend it with new features - see &lt;a href="http://tiddlyvault.tiddlyspot.com/"&gt;TiddlyVault&lt;/a&gt; for an index.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.wolframalpha.com/"&gt;WolframAlpha&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;The "computational knowledge engine" with the &lt;a href="http://unqualified-reservations.blogspot.com/2009/07/wolfram-alpha-and-hubristic-user.html"&gt;hubristic search-based interface&lt;/a&gt;, potentially useful as a source of data and a tool for processing and visualising that data.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.tumblr.com/"&gt;Tumblr&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Useful as both an input and an output for feeds processed using other tools, and with a smart bookmarklet for collecting bits and pieces from around the web.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://wiki.english.ucsb.edu/index.php/Toy_Chest_(Online_or_Downloadable_Tools_for_Building_Projects)"&gt;The UCSB Toy Chest&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;An outstanding list of tools that people "without programming skills (but with basic computer and Internet literacy) can use to create interesting projects", compiled by the English department at UC Santa Barbara.&lt;/p&gt;

&lt;h3&gt;Your help needed&lt;/h3&gt;

&lt;p&gt;There must be dozens, if not hundreds of useful tools missing from the above. Tell me in the comments and I'll add them to the list.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/freebase"&gt;freebase&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-maps"&gt;google-maps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hackday"&gt;hackday&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mapping"&gt;mapping&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nondevelopers"&gt;nondevelopers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openstreetmap"&gt;openstreetmap&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pipes"&gt;pipes&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sketchup"&gt;sketchup&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tools"&gt;tools&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/yahoo-pipes"&gt;yahoo-pipes&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/computer-literacy"&gt;computer-literacy&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="freebase"/><category term="google"/><category term="google-maps"/><category term="guardian"/><category term="hackday"/><category term="mapping"/><category term="nondevelopers"/><category term="openstreetmap"/><category term="pipes"/><category term="sketchup"/><category term="tools"/><category term="yahoo-pipes"/><category term="computer-literacy"/></entry><entry><title>Curating conversations</title><link href="https://simonwillison.net/2009/Jul/16/curating/#atom-tag" rel="alternate"/><published>2009-07-16T19:34:08+00:00</published><updated>2009-07-16T19:34:08+00:00</updated><id>https://simonwillison.net/2009/Jul/16/curating/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/open-platform/blog/curating-conversations"&gt;Curating conversations&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Chris Thorpe has open-sourced the Guardian’s moderated Twitter backchannel app, for displaying back channels at high profile (and hence high potential for abuse) events. It’s a Python application that runs on App Engine.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/chris-thorpe"&gt;chris-thorpe&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/twitter"&gt;twitter&lt;/a&gt;&lt;/p&gt;



</summary><category term="chris-thorpe"/><category term="google-app-engine"/><category term="guardian"/><category term="python"/><category term="twitter"/></entry><entry><title>Four crowdsourcing lessons from the Guardian's (spectacular) expenses-scandal experiment</title><link href="https://simonwillison.net/2009/Jun/24/four/#atom-tag" rel="alternate"/><published>2009-06-24T15:31:59+00:00</published><updated>2009-06-24T15:31:59+00:00</updated><id>https://simonwillison.net/2009/Jun/24/four/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.niemanlab.org/2009/06/four-crowdsourcing-lessons-from-the-guardians-spectacular-expenses-scandal-experiment/"&gt;Four crowdsourcing lessons from the Guardian&amp;#x27;s (spectacular) expenses-scandal experiment&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Michael Andersen from the Nieman Journalism Lab interviewed me about the MP expenses crowdsourcing site.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/crowdsourcing"&gt;crowdsourcing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/interviews"&gt;interviews&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mpsexpences"&gt;mpsexpences&lt;/a&gt;&lt;/p&gt;



</summary><category term="crowdsourcing"/><category term="guardian"/><category term="interviews"/><category term="mpsexpences"/></entry><entry><title>The breakneck race to build an application to crowdsource MPs' expenses</title><link href="https://simonwillison.net/2009/Jun/19/breakneck/#atom-tag" rel="alternate"/><published>2009-06-19T22:16:04+00:00</published><updated>2009-06-19T22:16:04+00:00</updated><id>https://simonwillison.net/2009/Jun/19/breakneck/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/politics/2009/jun/18/mps-expenses-crowdsourcing-app"&gt;The breakneck race to build an application to crowdsource MPs&amp;#x27; expenses&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Charles Arthur wrote up a very nice piece on the development effort behind the Guardian’s crowdsourcing expenses app.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/charles-aurthur"&gt;charles-aurthur&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/crowdsourcing"&gt;crowdsourcing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mpsexpenses"&gt;mpsexpenses&lt;/a&gt;&lt;/p&gt;



</summary><category term="charles-aurthur"/><category term="crowdsourcing"/><category term="guardian"/><category term="mpsexpenses"/></entry><entry><title>Investigate your MP's expenses</title><link href="https://simonwillison.net/2009/Jun/18/investigate/#atom-tag" rel="alternate"/><published>2009-06-18T23:16:43+00:00</published><updated>2009-06-18T23:16:43+00:00</updated><id>https://simonwillison.net/2009/Jun/18/investigate/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://mps-expenses.guardian.co.uk/"&gt;Investigate your MP&amp;#x27;s expenses&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Launched today, this is the project that has been keeping me ultra-busy for the past week—we’re crowdsourcing the analysis of the 700,000+ scanned MP expenses documents released this morning. It’s the Guardian’s first live Django-powered application, and also the first time we’ve hosted something on EC2.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/crowdsourcing"&gt;crowdsourcing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ec2"&gt;ec2&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mpexpenses"&gt;mpexpenses&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/projects"&gt;projects&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="crowdsourcing"/><category term="django"/><category term="ec2"/><category term="guardian"/><category term="mpexpenses"/><category term="projects"/><category term="python"/></entry><entry><title>Dealing with election results data</title><link href="https://simonwillison.net/2009/Jun/12/hublog/#atom-tag" rel="alternate"/><published>2009-06-12T18:06:05+00:00</published><updated>2009-06-12T18:06:05+00:00</updated><id>https://simonwillison.net/2009/Jun/12/hublog/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://hublog.hubmed.org/archives/001862.html"&gt;Dealing with election results data&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Alf Eaton loaded the Guardian’s European election results spreadsheet in to Google’s new Fusion Tables tool.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/alf-eaton"&gt;alf-eaton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/datablog"&gt;datablog&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/datastore"&gt;datastore&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/elections"&gt;elections&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fusiontables"&gt;fusiontables&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;&lt;/p&gt;



</summary><category term="alf-eaton"/><category term="datablog"/><category term="datastore"/><category term="elections"/><category term="fusiontables"/><category term="google"/><category term="guardian"/></entry><entry><title>Exactly how well did the BNP do where you live?</title><link href="https://simonwillison.net/2009/Jun/11/exactly/#atom-tag" rel="alternate"/><published>2009-06-11T11:37:56+00:00</published><updated>2009-06-11T11:37:56+00:00</updated><id>https://simonwillison.net/2009/Jun/11/exactly/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/news/datablog/table/2009/jun/09/european-elections-elections-2009"&gt;Exactly how well did the BNP do where you live?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Guardian journalists spent a day and a half calling round different local authorities to get a proper breakdown of the European election results (which are only officially published in aggregate) and published the results as a spreadsheet on the Datablog.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/bnp"&gt;bnp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/datablog"&gt;datablog&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/datastore"&gt;datastore&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/elections"&gt;elections&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;&lt;/p&gt;



</summary><category term="bnp"/><category term="datablog"/><category term="datastore"/><category term="elections"/><category term="guardian"/></entry><entry><title>You ask, they answer: Neal's Yard Remedies</title><link href="https://simonwillison.net/2009/May/27/ouch/#atom-tag" rel="alternate"/><published>2009-05-27T10:35:45+00:00</published><updated>2009-05-27T10:35:45+00:00</updated><id>https://simonwillison.net/2009/May/27/ouch/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.guardian.co.uk/environment/ethicallivingblog/2009/may/26/you-ask-neals-yard-remedies"&gt;You ask, they answer: Neal&amp;#x27;s Yard Remedies&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
After reading the comments, something tells me Neal’s Yard Remedies may be regretting their decision to answer questions from Guardian readers.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/homeopathy"&gt;homeopathy&lt;/a&gt;&lt;/p&gt;



</summary><category term="guardian"/><category term="homeopathy"/></entry><entry><title>Muck Rack: Links posted by Guardian Journalists on Twitter</title><link href="https://simonwillison.net/2009/May/22/muckrack/#atom-tag" rel="alternate"/><published>2009-05-22T22:02:34+00:00</published><updated>2009-05-22T22:02:34+00:00</updated><id>https://simonwillison.net/2009/May/22/muckrack/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://muckrack.com/guardian/links"&gt;Muck Rack: Links posted by Guardian Journalists on Twitter&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I’m rather impressed by the Sawhorse Media collection of Twitter aggregation sites (Muck Rack aggregates journalists)—a simple idea very well executed. Here’s a nice example—this page shows links posted to Twitter by known Guardian journalists, but goes a step further and scrapes in the favicon, the real title of the page and resolves the domain from any shortened links.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/aggregation"&gt;aggregation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/favicons"&gt;favicons&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/journalists"&gt;journalists&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mashups"&gt;mashups&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/muckrack"&gt;muckrack&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sawhorsemedia"&gt;sawhorsemedia&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/twitter"&gt;twitter&lt;/a&gt;&lt;/p&gt;



</summary><category term="aggregation"/><category term="favicons"/><category term="guardian"/><category term="journalists"/><category term="mashups"/><category term="muckrack"/><category term="sawhorsemedia"/><category term="twitter"/></entry></feed>