<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: crowdsourcing</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/crowdsourcing.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2021-02-28T05:40:28+00:00</updated><author><name>Simon Willison</name></author><entry><title>Trying to end the pandemic a little earlier with VaccinateCA</title><link href="https://simonwillison.net/2021/Feb/28/vaccinateca/#atom-tag" rel="alternate"/><published>2021-02-28T05:40:28+00:00</published><updated>2021-02-28T05:40:28+00:00</updated><id>https://simonwillison.net/2021/Feb/28/vaccinateca/#atom-tag</id><summary type="html">
    &lt;p&gt;This week I got involved with the &lt;a href="https://www.vaccinateca.com/"&gt;VaccinateCA&lt;/a&gt; effort. We are trying to end the pandemic a little earlier, by building the most accurate database possible of vaccination locations and availability in California.&lt;/p&gt;

&lt;h4&gt;VaccinateCA&lt;/h4&gt;
&lt;p&gt;I’ve been following this project for a while through Twitter, mainly via &lt;a href="https://twitter.com/patio11"&gt;Patrick McKenzie&lt;/a&gt; - here’s &lt;a href="https://twitter.com/patio11/status/1351942635682816002"&gt;his tweet&lt;/a&gt; about the project from January 20th.&lt;/p&gt;

&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;&lt;a href="https://t.co/JrD5mb4TAN"&gt;https://t.co/JrD5mb4TAN&lt;/a&gt; calls medical professionals daily to ask who they could vaccinate and how to get in line. We publish this, covering the entire state of California, to help more people get their vaccines faster. Please tell your friends and networks.&lt;/p&gt;- Patrick McKenzie (@patio11) &lt;a href="https://twitter.com/patio11/status/1351942635682816002?ref_src=twsrc%5Etfw"&gt;January 20, 2021&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;The core idea is one of those things that sounds obviously correct the moment you hear it. The Covid vaccination roll-out is decentralized and pretty chaotic. VaccinateCA figured out that the best way to figure out where the vaccine is available is to call the places that are distributing it - pharmacies, hospitals, clinics - as often as possible and ask if they have any in stock, who is eligible for the shot and how people can sign up for an appointment.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.vaccinateca.com/what-weve-learned-so-far/"&gt;What We've Learned (So Far)&lt;/a&gt; by Patrick talks about lessons learned in the first 42 days of the project.&lt;/p&gt;
&lt;p&gt;There are three public-facing components to VaccinateCA:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.vaccinateca.com/"&gt;www.vaccinateca.com&lt;/a&gt; is a website to help you find available vaccines near you.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;help.vaccinateca&lt;/code&gt; is the web app used by volunteers who make calls - it provides a script and buttons to submit information gleaned from the call. If you’re interested in volunteering there’s &lt;a href="https://www.vaccinateca.com/about-us"&gt;information on the website&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;api.vaccinateca&lt;/code&gt; is the public API, which is &lt;a href="https://docs.vaccinateca.com/reference"&gt;documented here&lt;/a&gt; and is also used by the end-user facing website. It provides a full dump of collected location data, plus information on county policies and large-scale providers (pharmacy chains, health care providers).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The system currently mostly runs on &lt;a href="https://airtable.com/"&gt;Airtable&lt;/a&gt;, and takes advantage of pretty much every feature of that platform.&lt;/p&gt;
&lt;h4&gt;Why I got involved&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://twitter.com/obra"&gt;Jesse Vincent&lt;/a&gt; convinced me to get involved. It turns out to be a perfect fit for both my interests and my skills and experience.&lt;/p&gt;
&lt;p&gt;I’ve built crowdsourcing platforms before - for &lt;a href="https://simonwillison.net/2009/Dec/20/crowdsourcing/"&gt;MP’s expense reports at the Guardian&lt;/a&gt;, and then for conference and event listings with our startup, Lanyrd.&lt;/p&gt;
&lt;p&gt;VaccinateCA is a very data-heavy organization: the key goal is to build a comprehensive database of vaccine locations and availability. My background in data journalism and the last three years I’ve spent working on &lt;a href="https://datasette.io/"&gt;Datasette&lt;/a&gt; have given me a wealth of relevant experience here.&lt;/p&gt;
&lt;p&gt;And finally… VaccinateCA are quickly running up against the limits of what you can sensibly do with Airtable - especially given Airtable’s hard limit at 100,000 records. They need to port critical tables to a custom PostgreSQL database, while maintaining as much as possible the agility that Airtable has enabled for them.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.djangoproject.com/"&gt;Django&lt;/a&gt; is a great fit for this kind of challenge, and I know quite a bit about both Django and using Django to quickly build robust, scalable and maintainable applications!&lt;/p&gt;
&lt;p&gt;So I spent this week starting a Django replacement for the Airtable backend used by the volunteer calling application. I hope to get to feature parity (at least as an API backend that the application can write to) in the next few days, to demonstrate that a switch-over is both possible and a good idea.&lt;/p&gt;
&lt;h4&gt;What about Datasette?&lt;/h4&gt;
&lt;p&gt;On Monday I spun up a Datasette instance at &lt;a href="https://vaccinateca.datasette.io/"&gt;vaccinateca.datasette.io&lt;/a&gt; (&lt;a href="https://github.com/simonw/vaccinate-ca-datasette/"&gt;underlying repository&lt;/a&gt;) against data from the public VaccinateCA API. The map visualization of &lt;a href="https://vaccinateca.datasette.io/vaccinateca/locations?_facet=Affiliation&amp;amp;_facet=Latest+report+yes%3F&amp;amp;_facet_array=Availability+Info"&gt;all of the locations&lt;/a&gt; instantly proved useful in helping spot locations that had incorrectly been located with latitudes and longitudes outside of California.&lt;/p&gt;
&lt;p&gt;I hope to use Datasette for a variety of tasks like this, but it shouldn’t be the core of the solution. VaccinateCA is the perfect example of a problem that needs to be solved with &lt;a href="http://boringtechnology.club/"&gt;Boring Technology&lt;/a&gt; - it needs to Just Work, and time that could be spent learning exciting new technologies needs to be spent building what’s needed as quickly, robustly and risk-free as possible.&lt;/p&gt;
&lt;p&gt;That said, I’m already starting to experiment with the new &lt;a href="https://docs.djangoproject.com/en/3.1/ref/models/fields/#django.db.models.JSONField"&gt;JSONField&lt;/a&gt; introduced in Django 3.1 - I’m hoping that a few JSON columns can help compensate for the lack of flexibility compared to Airtable, which makes it ridiculously easy for anyone to add additional columns.&lt;/p&gt;
&lt;p&gt;(To be fair JSONField has been a feature of the Django PostgreSQL Django extension since &lt;a href="https://docs.djangoproject.com/en/3.1/releases/1.9/"&gt;version 1.9 in 2015&lt;/a&gt; so it’s just about made it into the boring technology bucket by now.)&lt;/p&gt;
&lt;h4&gt;Also this week&lt;/h4&gt;
&lt;p&gt;Working on VaccinateCA has given me a chance to use some of my tools in new and interesting ways, so I got to ship a bunch of small fixes, detailed in &lt;a href="#releases-2021-feb-27"&gt;Releases this week&lt;/a&gt; below.&lt;/p&gt;
&lt;p&gt;On Friday I gave a talk at &lt;a href="https://speakeasyjs.com/"&gt;Speakeasy JS&lt;/a&gt;, "the JavaScript meetup for &lt;g-emoji class="g-emoji" alias="lab_coat" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f97c.png"&gt;🥼&lt;/g-emoji&gt; mad science, &lt;g-emoji class="g-emoji" alias="mage_man" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f9d9-2642.png"&gt;🧙‍♂️&lt;/g-emoji&gt; hacking, and &lt;g-emoji class="g-emoji" alias="test_tube" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f9ea.png"&gt;🧪&lt;/g-emoji&gt; experiments" about why "SQL in your client-side JavaScript is a great idea". The video for that &lt;a href="https://www.youtube.com/watch?v=JyOYqJGrWak"&gt;is on YouTube&lt;/a&gt; and I plan to provide a full write-up soon.&lt;/p&gt;
&lt;p&gt;I also recorded a five minute lightning talk about &lt;a href="https://simonwillison.net/2020/Oct/9/git-scraping/"&gt;Git Scraping&lt;/a&gt; for next week's &lt;a href="https://www.ire.org/training/conferences/nicar-2021/"&gt;NICAR 2021&lt;/a&gt; data journalism conference.&lt;/p&gt;
&lt;p&gt;I also made a few small cosmetic upgrades to the way tags are displayed on my blog - they now show with a rounded border and purple background, and include a count of items published with that tag. My &lt;a href="https://simonwillison.net/tags/"&gt;tags page&lt;/a&gt; is one example of where I've now applied this style.&lt;/p&gt;
&lt;h4&gt;TIL this week&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://til.simonwillison.net/til/til/sphinx_sphinx-ext-extlinks.md"&gt;Using sphinx.ext.extlinks for issue links&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://til.simonwillison.net/til/til/postgresql_show-schema.md"&gt;Show the SQL schema for a PostgreSQL database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://til.simonwillison.net/til/til/github-actions_postgresq-service-container.md"&gt;Running tests against PostgreSQL in a service container&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://til.simonwillison.net/til/til/django_extra-read-only-admin-information.md"&gt;Adding extra read-only information to a Django admin change page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://til.simonwillison.net/til/til/postgresql_read-only-postgresql-user.md"&gt;Granting a PostgreSQL user read-only access to some tables&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="releases-2021-feb-27"&gt;Releases this week&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/flatten-single-item-arrays"&gt;flatten-single-item-arrays&lt;/a&gt;&lt;/strong&gt;: &lt;a href="https://github.com/simonw/flatten-single-item-arrays/releases/tag/0.1"&gt;0.1&lt;/a&gt; - 2021-02-25
&lt;br /&gt;Given a JSON list of objects, flatten any keys which always contain single item arrays to just a single value&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/datasette-auth-github"&gt;datasette-auth-github&lt;/a&gt;&lt;/strong&gt;: &lt;a href="https://github.com/simonw/datasette-auth-github/releases/tag/0.13.1"&gt;0.13.1&lt;/a&gt; - (&lt;a href="https://github.com/simonw/datasette-auth-github/releases"&gt;25 releases total&lt;/a&gt;) - 2021-02-25
&lt;br /&gt;Datasette plugin that authenticates users against GitHub&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/datasette-block"&gt;datasette-block&lt;/a&gt;&lt;/strong&gt;: &lt;a href="https://github.com/simonw/datasette-block/releases/tag/0.1.1"&gt;0.1.1&lt;/a&gt; - (&lt;a href="https://github.com/simonw/datasette-block/releases"&gt;2 releases total&lt;/a&gt;) - 2021-02-25
&lt;br /&gt;Block all access to specific path prefixes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/github-contents"&gt;github-contents&lt;/a&gt;&lt;/strong&gt;: &lt;a href="https://github.com/simonw/github-contents/releases/tag/0.2"&gt;0.2&lt;/a&gt; - 2021-02-24
&lt;br /&gt;Python class for reading and writing data to a GitHub repository&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/csv-diff"&gt;csv-diff&lt;/a&gt;&lt;/strong&gt;: &lt;a href="https://github.com/simonw/csv-diff/releases/tag/1.1"&gt;1.1&lt;/a&gt; - (&lt;a href="https://github.com/simonw/csv-diff/releases"&gt;9 releases total&lt;/a&gt;) - 2021-02-23
&lt;br /&gt;Python CLI tool and library for diffing CSV and JSON files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/sqlite-transform"&gt;sqlite-transform&lt;/a&gt;&lt;/strong&gt;: &lt;a href="https://github.com/simonw/sqlite-transform/releases/tag/0.4"&gt;0.4&lt;/a&gt; - (&lt;a href="https://github.com/simonw/sqlite-transform/releases"&gt;5 releases total&lt;/a&gt;) - 2021-02-22
&lt;br /&gt;Tool for running transformations on columns in a SQLite database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/airtable-export"&gt;airtable-export&lt;/a&gt;&lt;/strong&gt;: &lt;a href="https://github.com/simonw/airtable-export/releases/tag/0.5"&gt;0.5&lt;/a&gt; - (&lt;a href="https://github.com/simonw/airtable-export/releases"&gt;7 releases total&lt;/a&gt;) - 2021-02-22
&lt;br /&gt;Export Airtable data to YAML, JSON or SQLite files on disk&lt;/li&gt;
&lt;/ul&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/postgresql"&gt;postgresql&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/patrick-mckenzie"&gt;patrick-mckenzie&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/datasette"&gt;datasette&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/weeknotes"&gt;weeknotes&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/covid19"&gt;covid19&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vaccinate-ca"&gt;vaccinate-ca&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/personal-news"&gt;personal-news&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jesse-vincent"&gt;jesse-vincent&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="crowdsourcing"/><category term="django"/><category term="postgresql"/><category term="patrick-mckenzie"/><category term="datasette"/><category term="weeknotes"/><category term="covid19"/><category term="vaccinate-ca"/><category term="personal-news"/><category term="jesse-vincent"/></entry><entry><title>free-for.dev</title><link href="https://simonwillison.net/2019/Dec/26/free-dev/#atom-tag" rel="alternate"/><published>2019-12-26T10:03:27+00:00</published><updated>2019-12-26T10:03:27+00:00</updated><id>https://simonwillison.net/2019/Dec/26/free-dev/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://free-for.dev/"&gt;free-for.dev&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
It’s pretty amazing how much you can build on free tiers these days—perfect for experimenting with side-projects. free-for.dev collects free SaaS tools for developers via pull request, and has had contributions from over 500 people.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/addyosmani/status/1209918217193308160"&gt;@addyosmani&lt;/a&gt;&lt;/small&gt;&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/tools"&gt;tools&lt;/a&gt;&lt;/p&gt;



</summary><category term="crowdsourcing"/><category term="tools"/></entry><entry><title>6M observations total! Where has iNaturalist grown in 80 days with 1 million new observations?</title><link href="https://simonwillison.net/2018/Jan/28/inaturalist/#atom-tag" rel="alternate"/><published>2018-01-28T20:18:58+00:00</published><updated>2018-01-28T20:18:58+00:00</updated><id>https://simonwillison.net/2018/Jan/28/inaturalist/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.inaturalist.org/blog/11590-6m-observations-total-where-has-inaturalist-grown-in-80-days-with-1-million-new-observations"&gt;6M observations total! Where has iNaturalist grown in 80 days with 1 million new observations?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Citizen science app iNaturalist is seeing explosive growth at the moment—they’ve been around for nearly a decade but 1/6 of the observations posted to the site were added in just the past few months. Having tried the latest version of their iPhone app it’s easy to see why: snap a photo of some nature and upload it to the app and it will use surprisingly effective machine learning to suggest the genus or even the individual species. Submit the observation and within a few minutes other iNaturalist community members will confirm the identification or suggest a correction. It’s brilliantly well executed and an utter delight to use.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/computer-vision"&gt;computer-vision&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/crowdsourcing"&gt;crowdsourcing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/machine-learning"&gt;machine-learning&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/science"&gt;science&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/citizenscience"&gt;citizenscience&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/inaturalist"&gt;inaturalist&lt;/a&gt;&lt;/p&gt;



</summary><category term="computer-vision"/><category term="crowdsourcing"/><category term="machine-learning"/><category term="science"/><category term="citizenscience"/><category term="inaturalist"/></entry><entry><title>Color Survey Results</title><link href="https://simonwillison.net/2010/May/5/colour/#atom-tag" rel="alternate"/><published>2010-05-05T15:59:00+00:00</published><updated>2010-05-05T15:59:00+00:00</updated><id>https://simonwillison.net/2010/May/5/colour/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.xkcd.com/2010/05/03/color-survey-results/"&gt;Color Survey Results&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
XKCD asked anonymous netizens to provide names for random colours. The results (collated from 222,500 user sessions that named over 5 million colours) are fascinating.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/crowdsourcing"&gt;crowdsourcing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/science"&gt;science&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/surveys"&gt;surveys&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xkcd"&gt;xkcd&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/colours"&gt;colours&lt;/a&gt;&lt;/p&gt;



</summary><category term="crowdsourcing"/><category term="science"/><category term="surveys"/><category term="xkcd"/><category term="recovered"/><category term="colours"/></entry><entry><title>WildlifeNearYou talk at £5 app, and being Wired (not Tired)</title><link href="https://simonwillison.net/2010/Apr/11/wired/#atom-tag" rel="alternate"/><published>2010-04-11T20:42:11+00:00</published><updated>2010-04-11T20:42:11+00:00</updated><id>https://simonwillison.net/2010/Apr/11/wired/#atom-tag</id><summary type="html">
    &lt;p&gt;Two quick updates about &lt;a href="http://www.wildlifenearyou.com/"&gt;WildlifeNearYou&lt;/a&gt;. First up, I gave a talk about the site at &lt;a href="http://fivepoundapp.com/"&gt;£5 app&lt;/a&gt;, my favourite Brighton evening event which celebrates side projects and the joy of Making Stuff. I talked about the site's &lt;a href="http://simonwillison.net/2010/Jan/12/wildlifenearyou/"&gt;genesis on a fort&lt;/a&gt;, &lt;a href="http://www.wildlifenearyou.com/best/"&gt;crowdsourcing photo ratings&lt;/a&gt;, how we use &lt;a href="http://www.freebase.com/"&gt;Freebase&lt;/a&gt; and &lt;a href="http://dbpedia.org/"&gt;DBpedia&lt;/a&gt; and how integrating with Flickr's machine tags gave us &lt;a href="http://code.flickr.com/blog/2010/02/10/5-questions-for-simon-willison/"&gt;a powerful location API for free&lt;/a&gt;. Here's the video of the talk, courtesy of &lt;a href="http://ianozsvald.com/2010/03/31/22nd-5-app-write-up-for-wildlife-plaques-robots-go-and-golf-gadgets/" title="22nd £5 App Write-up for WildLife, Plaques, Robots, Go and Golf Gadgets"&gt;Ian Oszvald&lt;/a&gt;:&lt;/p&gt;

&lt;object width="450" height="255"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=10578232&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=10578232&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="450" height="255"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/10578232"&gt;£5 App #22 WildLifeNearYou by Simon Willison and Natalie Downe&lt;/a&gt; from &lt;a href="http://vimeo.com/user707645"&gt;IanProCastsCoUk&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Secondly, I'm excited to note that WildlifeNearYou spin-off &lt;a href="http://owlsnearyou.com/"&gt;OwlsNearYou.com&lt;/a&gt; is featured in UK Wired magazine's Wired / Tired / Expired column... and we're Wired!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/simon/4511451405/"&gt;&lt;img src="http://simonwillison.net/static/2010/wired-owls-small.jpg" alt="Wired / Tired / Expired column from May 2010 Wired UK" width="450" height="176" /&gt;&lt;/a&gt;&lt;/p&gt;

    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/api"&gt;api&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/crowdsourcing"&gt;crowdsourcing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fivepoundapp"&gt;fivepoundapp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/flickr"&gt;flickr&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/freebase"&gt;freebase&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/natalie-downe"&gt;natalie-downe&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/owlsnearyou"&gt;owlsnearyou&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/wildlifenearyou"&gt;wildlifenearyou&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wired"&gt;wired&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="api"/><category term="crowdsourcing"/><category term="fivepoundapp"/><category term="flickr"/><category term="freebase"/><category term="natalie-downe"/><category term="owlsnearyou"/><category term="my-talks"/><category term="wildlifenearyou"/><category term="wired"/></entry><entry><title>Help pick the best photos, but watch out, it's addictive!</title><link href="https://simonwillison.net/2010/Jan/25/best/#atom-tag" rel="alternate"/><published>2010-01-25T00:36:35+00:00</published><updated>2010-01-25T00:36:35+00:00</updated><id>https://simonwillison.net/2010/Jan/25/best/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.wildlifenearyou.com/blog/2010/jan/24/best-photos/"&gt;Help pick the best photos, but watch out, it&amp;#x27;s addictive!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
My favourite WildlifeNearYou feature yet—our new tool asks you to pick the best from two photos, then uses the results to rank all of the photos for each species. It’s surprisingly addictive—we had over 5,000 votes in the first two hours, peaking at 4 or 5 votes a second. The feature seems to be staying nice and speedy thanks to Redis under the hood. Photos in the top three for any given species display a medal on their photo page.


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



</summary><category term="crowdsourcing"/><category term="photos"/><category term="projects"/><category term="redis"/><category term="wildlifenearyou"/></entry><entry><title>WildlifeNearYou: Help identify animals in other people's photos</title><link href="https://simonwillison.net/2010/Jan/15/crowdsourcing/#atom-tag" rel="alternate"/><published>2010-01-15T01:35:07+00:00</published><updated>2010-01-15T01:35:07+00:00</updated><id>https://simonwillison.net/2010/Jan/15/crowdsourcing/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.wildlifenearyou.com/blog/2010/jan/15/identify/"&gt;WildlifeNearYou: Help identify animals in other people&amp;#x27;s photos&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The first of a number of crowdsourcing-style features we have planned for WildlifeNearYou—users can now help identify the animals in each other’s photos, and photo owners get a simple queue interface to approve or reject the suggestions.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/crowdsourcing"&gt;crowdsourcing&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="crowdsourcing"/><category term="projects"/><category term="wildlifenearyou"/></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>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>The Straight Choice | The election leaflet project</title><link href="https://simonwillison.net/2009/Jun/8/straight/#atom-tag" rel="alternate"/><published>2009-06-08T16:23:30+00:00</published><updated>2009-06-08T16:23:30+00:00</updated><id>https://simonwillison.net/2009/Jun/8/straight/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.thestraightchoice.org/"&gt;The Straight Choice | The election leaflet project&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Nice crowdsourcing app by Richard Pope, Francis Irving and Julian Todd—UK political leaflets are hard to keep tabs on due to the way they are distributed over small geographical areas, so this site encourages you to take photos of leaflets delivered to your home and tag them with postcode, party and key topics.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/crowdsourcing"&gt;crowdsourcing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/francis-irving"&gt;francis-irving&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/julian-todd"&gt;julian-todd&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/politics"&gt;politics&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/richard-pope"&gt;richard-pope&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/thestraightchoice"&gt;thestraightchoice&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ukpolitics"&gt;ukpolitics&lt;/a&gt;&lt;/p&gt;



</summary><category term="crowdsourcing"/><category term="francis-irving"/><category term="julian-todd"/><category term="politics"/><category term="richard-pope"/><category term="thestraightchoice"/><category term="ukpolitics"/></entry><entry><title>Flickr Shapefiles Public Dataset 1.0</title><link href="https://simonwillison.net/2009/May/22/shapefiles/#atom-tag" rel="alternate"/><published>2009-05-22T18:12:10+00:00</published><updated>2009-05-22T18:12:10+00:00</updated><id>https://simonwillison.net/2009/May/22/shapefiles/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.flickr.com/blog/2009/05/21/flickr-shapefiles-public-dataset-10/"&gt;Flickr Shapefiles Public Dataset 1.0&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Another awesome Geo dataset from the Yahoo! stable—this time it’s Flickr releasing shapefiles (geometrical shapes) for hundreds of thousands of places around the world, under the CC0 license which makes them essentially public domain. The shapes themselves have been crowdsourced from geocoded photos uploaded to Flickr, where users can “correct” the textual location assigned to each photo. Combine this with the GeoPlanet WOE data and you get a huge, free dataset describing the human geography of the world.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/creativecommons"&gt;creativecommons&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/crowdsourcing"&gt;crowdsourcing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/flickr"&gt;flickr&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geoplanet"&gt;geoplanet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geospatial"&gt;geospatial&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/maps"&gt;maps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/shapefiles"&gt;shapefiles&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/yahoo"&gt;yahoo&lt;/a&gt;&lt;/p&gt;



</summary><category term="creativecommons"/><category term="crowdsourcing"/><category term="flickr"/><category term="geoplanet"/><category term="geospatial"/><category term="maps"/><category term="shapefiles"/><category term="yahoo"/></entry><entry><title>ScenicOrNot</title><link href="https://simonwillison.net/2009/May/12/scenicornot/#atom-tag" rel="alternate"/><published>2009-05-12T13:32:53+00:00</published><updated>2009-05-12T13:32:53+00:00</updated><id>https://simonwillison.net/2009/May/12/scenicornot/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://scenic.mysociety.org/"&gt;ScenicOrNot&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
MySociety are crowdsourcing opinions on how “scenic” different parts of the UK are, by rating representative photos from Geograph.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/crowdsourcing"&gt;crowdsourcing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geograph"&gt;geograph&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mysociety"&gt;mysociety&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scenicornot"&gt;scenicornot&lt;/a&gt;&lt;/p&gt;



</summary><category term="crowdsourcing"/><category term="geograph"/><category term="mysociety"/><category term="scenicornot"/></entry><entry><title>Map Maker for Developers</title><link href="https://simonwillison.net/2009/Feb/21/google/#atom-tag" rel="alternate"/><published>2009-02-21T09:05:57+00:00</published><updated>2009-02-21T09:05:57+00:00</updated><id>https://simonwillison.net/2009/Feb/21/google/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://googlegeodevelopers.blogspot.com/2009/02/map-maker-for-developers.html"&gt;Map Maker for Developers&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Tiles from Google’s Map Maker crowdsourcing effort are now available in the JS and static maps APIs on an opt-in basis. Maybe I’m misunderstanding something here, but Google Map Maker seems like a big step backwards for open geographic data. People donate their mapping efforts to Google, who keep them—unlike OpenStreetMap, where the donated efforts are made available under a Creative Commons license.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/creativecommons"&gt;creativecommons&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/crowdsourcing"&gt;crowdsourcing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/googlemapmaker"&gt;googlemapmaker&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-maps-api"&gt;google-maps-api&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openstreetmap"&gt;openstreetmap&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/staticmaps"&gt;staticmaps&lt;/a&gt;&lt;/p&gt;



</summary><category term="creativecommons"/><category term="crowdsourcing"/><category term="google"/><category term="googlemapmaker"/><category term="google-maps-api"/><category term="openstreetmap"/><category term="staticmaps"/></entry></feed>