Photo (c) Jan Trutzschler von Falkenstein; CC-BY-NCPhoto (c) Serge BelongiePhoto (c) Rain RabbitPhoto (c) Samuel Craven


I am an academic computer scientist, conducting research into automatic analysis of bird sounds using machine learning.
 —> Click here for more about my research.



Older things: Evolutionary sound · MCLD software · Sponsored haircut · StepMania · Oddmusic · Knots · Tetrastar fractal generator · Cipher cracking · CV · Emancipation fanzine


I had a great time at the Biodiversity_next conference, meeting a lot of people involved in Biodiversity informatics. (I was part of an "AI" session discussing the state of the art in deep learning and bioacoustic audio.)

I was glad to get more familiar with the biodiversity information frameworks. GBIF is one worth knowing, an aggregator for worldwide observations of species. It's full of millions and millions of observations. Plants, animals, microbes... expert, amateur, automatic observations - lots of different types of "things spotted in the wild". They use the cutely-named "Darwin core" as a data formatting standard (informatics folks will get the joke!).

Here's my first play at downloading some GBIF data. I downloaded all the data they've got about rose-ringed parakeets in Britain - the bright green parrots that are quite a new arrival in Britain, an invasive species which we can see in many city parks now. I plotted the observations per year. I also plotted a second species on the same chart, just to have a baseline comparison. So the parakeets are plotted in green, and the other species (common sandpiper) in yellow:

Many caveats with this data. For a start, each dot represents an "observation" not an "individual" - some of the observations are of a whole flock. I chose to keep it simple, not least because some of the observations list "5000" birds at a time, which may well be true but might swamp the visualisation! Also, some of the co-ordinates are scrambled, for data-privacy reasons - you can see it in the slight grid-like layout of the dots - and some are exact.

Further, I don't think I have any way of normalising for the amount of survey effort, at least for most of the data points. There seems to be a strange spike of parakeet density in 2009 - probably due to some surveying initiative, not to some massive short-term surge in the bird numbers! I think if the numbers really had increased eight-fold and then fallen back again, someone would have said something...

Regarding "survey effort": GBIF does offer ways of indicating survey effort, and also "absences" as well as "presences", but most of the data submissions don't make use of those fields.

The sandpiper data fluctuates too. There's definitely an increase as time goes by, primarily due to the increasing amount of surveys adding to GBIF. That's why I added a comparison species. Even with that, you can clearly see the difference in distribution between the two.

My simple python plotting script is here and the source data are here: parakeet data, sandpiper data.

science · Fri 25 October 2019

I'm just back from State of the Map 2019, the annual global OpenStreetMap meetup. I gave a talk about the solar mapping project (video here) and had lots of great conversations with people.

Here are some notes from conversations I had about solar PV mapping:

Overall, there was lots of enthusiasm for the idea of mapping all the solar PV, and I'm really glad to have been at SotM to talk about it.

openstreetmap · Tue 24 September 2019

The OpenStreetMap UK community has come together for a 3-month "quarterly project" to find all the solar panels in the UK. And the results so far... wow!

-> We've just reached over 100,000 standalone solar PV installations mapped in the UK!

-> Plus we also have almost 600 solar farms mapped, representing almost 5 gigawatts!

To give you an idea of completeness: the UK government believes there are about 1 million solar panels in the UK, and official solar farm listings have about 8 GW. What we've mapped so far is way more than I thought we'd manage, so I really deeply want to thank every person who contributed, large or small. We can use these data to pilot CO2-saving initiatives - and so can anyone else. Open data for the win!

Here are a couple of simple plots from me, to show where the items are in the UK. (The data I've used are from yesterday, which is why my plot says not-quite-100,000 items.) I've plotted two different types of item: (1) "standalone" solar panels (i.e. ones that are not inside solar farms); (2) solar farms. You'll notice the distributions are really different:

Some of the darkest blobs on the map are evidence of focussed effort. I know that Jerry (SK53) has been mapping around Nottingham, Cornwall and other areas, so may be the source of some of these blobs. We've shown that with some local effort, and a bit of scanning through imagery, a lot of this can be done.

You'll notice that many of the solar farms are in the southern part of the UK, at least according to our data. That's not unexpected!

For more detailed data breakdowns, you can peruse Gregory Williams' solar mapping analysis site.

We have more time to go until the end of the quarter... and we'll be able to use the data for sustainable energy projects whenever you contribute - so please do join in!

openstreetmap · Thu 12 September 2019

The 2019 International Biocaoustics Congress (IBAC) was its fiftieth year! And it was a very stimulating conference, held in Brighton and organised by David Reby and a lovely team of co-organisers. Shout out to Eilean Reby who designed a really neat visual identity for the conference, with T-shirt and bags designed for everyone - we had a choice of designs featuring bat, bird, insect, fox...

It was my third IBAC (after IBAC 2015 in Germany and IBAC 2017 in India) and I was very happy to chair a session on advanced computational methods, and to see some great work in there. In this post I'll make notes of other things I saw.

Our QMUL bird group presented their recent work. Lies Zandberg spoke about her great work with Rob Lachlan, as part of our project to understand sound similarity from a birds' point of view. Mahalia Frank presented her studies (her PhD with David Clayton) on the neuroanatomy that might explain what zebra finches can hear while still in the egg.

The most shocking bird news, for me, came from the superb lyrebird. Now, the superb lyrebird is a famously showy Australian songbird - the male does this bizarre-looking dance on top of a little mound he's built. The shocking revelation was in Anastasia Dalziell's talk about her studies on the lyrebird's mimicking song. She showed us evidence that the song incorporates sounds from other bird species' mobbing calls (i.e. what groups of birds do when there are predators about), and further, that this mimicry might have evolved to con the female lyre bird into staying around for some copulation when she may be on the verge of wandering away. It's one possible way that complex mimcry might arise through evolution (antagonistic co-evolution) ...and it's very odd behaviour.

Also making a splash was ... RoboFinch! A very eyecatching piece of work presented by members of Katharina Riebel's lab, as part of a project called "Seeing Voices". Ralph Simon presented about the technical development, and Judith Varkevisser on her vocal learning studies. The idea is to explore how the visual modality affects vocal learning. They tried various things: young birds housed with the tutor, or watching the tutor from the next chamber, or hearing him only; or showing videos of the tutor to the young birds; then a "hologram" (a Pepper's ghost) bird... Then they went as far as building lifesize animatronic zebra finches, with robotic heads/beaks and colours painted to match the exact colour profile of real birds. It seems the young birds really do like to get along with RoboFinch, much more than the other methods, or the traditional audio-only "tape" tutoring.

We all like a clever and informative data visualisation technique. A few years ago it was Michael Towsey's "false colour spectrograms" I was excited about - and we saw some use of those at IBAC 2019. A new visualisation was Julia Hyland Bruno's work (part of her PhD with Ofer Tchernikovsky) - surprisingly simple, she renders many different renditions of a zebra finch song as a colourful image in which each row is a colour-mapped time series for one rendition. With a bit of judicious alignment, the effect is to give an immediate visual impression of the repeatability and the structure in the song. A paper showing the technique is here.

I continue to be interested in rhythm and timing in animal and human sounds, and IBAC is a good place to catch some research on this.

Good to catch up on large-scale and ecoacoustic monitoring too.

As usual for IBAC, I learnt some amazing things about bioacoustics outside the realm of birds. Some great bat work represented, e.g. from Sonja Vernes' group (I remember IBAC 2015 when I think she might have been literally the only person talking about bats).

One little observation: both Julie Oswald and Jack Fearey had used a neural net called "ARTwarp" to cluster the vocalisations in their whale data, to try and understand their repertoires. I don't know this method, but it seems to be an unsupervised clustering method incorporating time-warping - might be of interest.

And even more, I continue to learn from the weird world out there beyond the vertebrate animals. Amazing little insects that nibble holes in leaves, for example, so that they can create little acoustic cavities to broadcast well. The most out-there bit of acoustic communication was as follows... a type of ants drilling holes in acacia tree thorns, which then create a whistling signal in the wind, to scare away cattle. Even better, the researchers are currently tested this hypothesis by drilling thousands of little holes in trees in Africa, to see if the reduced whistling affects the cattle behaviour. (This was presented by Kathrin Krausa on behalf of Felix Hager.)

Oh one more thing -- the vocal imitation competition had some fantastic results. As the final event of the entire conference, we listened to a deluge, a menagerie of inexplicable animal sounds that had been imitated by IBAC attendees themselves. This could become a fixture in the calendar...

science · Fri 06 September 2019

It looks like the bigger consequences of the Brexit vote are about to hit. Everyone thought "no deal" was a laughable extreme back in 2016, and now our government seems to be sailing deliberately towards it.

Do we blame David Cameron, who naively called an ill-prepared vote? Theresa May who dogmatically stuck to extreme "red lines" in the negotiations, failed to get a majority in a General Election, failed to get the agreement voted through, and yet dogmatically refused to consider compromise positions, again and again? Or do we blame incompetent cartoon character Boris Johnson - whose main achievement as London Mayor was the foolish "garden bridge" plan that went nowhere after wasting tons of our money - now arrogantly pushing us to no-deal despite the danger for ordinary people, as well as the democratic deficit?

It's crucial to remember that none of these people is at the root of all this. The Conservative Party as a whole should carry the blame. (Or the credit, if no-deal is a success - sure, why not.) They are currently pushing a heck of a lot of effort into trying to blame the EU for any no-deal Brexit: pretending the EU is refusing to negotiate, when in fact the EU is refusing to reopen negotiations it's just spent two years on, or at least refusing to reopen them unless the UK government proposes a way forwards. The Conservative party have got us into this mess - not just the British public! There were many different routes the government could have taken from 2016 onwards, and this embarrassing mismanagement comes from the Conservative party, again and again. Their MPs and leaders, the government ministers, the membership. We can consider blaming Corbyn for not being an EU cheerleader, but frankly, his subdued triangulating is a minor footnote in this shambles of bad tactics.

I might be tempted to go deeper and say our First-Past-The-Post (FPTP) voting system is on the hook, since that's the reason that the Conservative Party (and Labour) sticks together in the shape it does, and why they feel the need to pander to extremists. But that might be a little too indirect.

We're already suffering the consequences of the Brexit vote. (Personally: I've lost multiple colleagues who have gone overseas, lost opportunities, etc. Collectively, we've lost a lot of influence, and we've wasted a heck of a lot of time we could have been spending fixing the climate crisis.) I'm particularly concerned about what will happen next. In particular, a perverse incentive of a crisis such as no-deal: it gives the sitting government a rare opportunity to ram through emergency legislation which might reshape the British settlement more radically than is normally achievable. The Conservative Party has already shown simple-minded cruelty in voluntarily imposing a cost-slashing "austerity" agenda on the UK for a decade - an agenda wihch may have led to over a hundred thousand excess deaths. They have demonstrated that they don't worry about whether poorer people suffer the side-effects of their big ideas. What more would they like to do?

We see some hints of changes that Brexit might enable: today the food industry claimed it's going to need exemption from the laws of fair competition in order to keep everybody fed. That argument wouldn't get anywhere near the table in ordinary times.

I'm opposed to Brexit but I certainly think naively "cancelling" it would be as harmful as going forward. The right way to proceed, clearly, is to take more time to find a true compromise outcome (which may well turn out to be a soft-ish Brexit, although no-one on any side wants to admit that). The rush now is for selfish reasons. We don't yet have a plan. - And, for our current government, perhaps it's more than just a necessary evil, perhaps not-having-a-plan is an opportunity they are looking forward to?

Politics · Wed 07 August 2019

We've sampled LOTS of alcohol-free beer in the past year. Why? Well - you might not believe me about this - some of it's getting really good. And it's great to be able to have a lovely beer even if you don't want to be woozy afterwards.

So WE HAVE DONE THE RESEARCH and YOU can benefit from it! We've drunk beers good and bad from all over Europe. Here are six fabulous alcohol-free beers that are truly excellent and you should DRINK THEM!

bottle photo1. Mariestads "Sommarlager" (Sweden, 0.5%): a delightful lager, perfectly balanced, fizzy yet with creaminess/butteriness. I'm amazed that a lager (rather than an IPA) is in here in the top spots but there you go. It's refreshing and beery and delightful.
bottle photo2. van de Streek "Playground IPA" (Netherlands, 0.5%): This IPA is phenomenal, with the full complex and vibrant flavour you want from a modern IPA. I don't know how they did it. Out of all the low-alc IPAs, this one is the one that can compete with normal ones.
bottle photo3. Värmdö "Ingarö Eko IPA" (Sweden, 0.5%): delightful unsweet, slightly sour almost kombucha-y, yet juicy and no bad notes. I liked this one for being a little bit different.
bottle photo4. Big Drop "Pale Ale" (UK, 0.5%): Another IPA that passes the test. I've no notes on this one, and only a fuzzy paparazzi photo (must have been a good night huh?) so you'll just have to try it.
bottle photo5. Mikeller "Drink'in the sun" (Denmark/Belgium, 0.3%): A good IPA (allegedly a wheat pale) with summery juicy grapefruit.
6. Clausthaler "Original 0.5%" (Germany, 0.5%): this is in the classic German style, and was the first time I drank an alcohol-free beer and felt refreshed, without that curious slightly-wrong flavour that's in the mainstream alcohol-free beers. Since I first tried it, I discovered the other ones, but this one is still great, and notable for getting the balance of flavours just right to make a quality German beer despite the constraint.

Others which are ALSO recommended:

Plus there are plenty I don't recommend, of course :) but I won't bore you with them. Some more of my tasting notes are in this twitter thread.

While writing this, I found a nice list of top 70 low-alcohol beers from "Steady Drinker". However... it looks like he hasn't been to Sweden! He hasn't reviewed Mariestads, Värmdö or Sigtuna, which is why he's missed some of my top ones. In Sweden they have quite hefty taxes on alcohol, which may be why it's become a great place for innovative low-alcohol beers.

food · Mon 15 July 2019

Our holiday this year was great "grounded travel" - we went from the UK to Sweden, going all the way by train! We stopped in multiple cities on the way, in Germany and Denmark as well as Sweden.

I want to tell you how we did it. But before all that there's one handy thing you need to know:

We met LOTS of people on our travels who said "Oh I thought that was just for under-25s". It's not. There are some extra-cheap offers for young people, but even without those it was the most economical way for us to do it.

I'm not going to tell you the details about Interrail passes, because I don't need to: the magnificent Seat 61 Interrail guide is all you need. We bought ourselves Interrail passes, and then added a couple of reservations: there are some services in particular Eurostar (Channel tunnel) where you'll need a reserved seat in addition to the pass. I used the UK phoneline for Deutsche Bahn to book my Eurostar and other reservations, and it was all really easy and friendly.

A nice European train

Taking the train in Europe is great. The trains are generally more modern, spacious and relaxing than UK trains, at least in the countries we've seen. You get to see some great countryside - fields, mountains, lakes, rivers, little town centres - from your seat. And of course there's none of the hassle of flying (getting to the airport; going through security; hanging round after security). We only had to show our passports at two points: the Eurostar, and at the Danish border when we got off a boat.

Oh yes, a boat: we didn't 100% exactly take the train all the way. There was one point in Denmark where we took a rail-replacement bus. And in order to get from Germany to Denmark we took the train that goes on a ferry, woo!

We met lots of lovely people on the way. We shared food with people, we got some excellent local tips for things to do. We even played Yahtzee with some strangers, and played a game of memory-game with a six-year old Swedish girl :)

Playing Yahtzee

How far did we get? Stockholm. It takes two days to get from London to Stockholm (stopover in Hamburg or Cologne) and seat61 has some tips for other ways to do it.

Saloon in our lovely train hostel

We then went into the Swedish countryside and stayed in a... converted train! In a beautiful setting by a lake.

Lakeside train view

We spent about £350 each on getting the Interrail pass that lets you travel on 10 different days (over a stretch of two months), plus about £60 extra on reservations (mainly the Eurostar). In the end we only travelled on seven of the days meaning we could have gone for a cheaper (£300) ticket, but we weren't sure which we'd need.

You can do it much cheaper if you don't want to visit other places on the way. We deliberately wanted to hop around.

Here's our route:

Our route map

Some random tips for you:

And enjoy it! We did :)

eco · Sun 07 July 2019

I've been enjoying using Mopidy and ncmpcpp as my music player.

On Ubuntu though I encountered a persistent problem:

  1. I had set Mopidy up to run as a service, which seemed like a good idea - it's not just some application I want to start from time-to-time, it's the main music player for my flat, so I want it to be there on tap.
  2. I had set Mopidy up to connect to PulseAudio, which seemed like a good idea since then it should "play nicely" with other things on the computer, e.g. it should be able to play music even when there's a video playing from Firefox.

However, it kept failing to connect to PulseAudio. It seemed to be unable to make any sound play back, unless I manually killed pulse, after which it could start playing.

Yes I had followed all the instructions. I had changed Mopidy's config as well as PulseAudio's config. I tried everything, setting PulseAudio to be as permissive as possible (allowing remote connections etc).

The solution, as far as I can tell, for my standard Ubuntu 18.04 is: you should not do both of these things. This is because if you run as a service, you're running something that starts up as soon as the computer boots, and doesn't use your login userid. PulseAudio, however, does not run on startup, but is part of your login session. So it simply isn't there for Mopidy to connect to, until you log in. (I still don't know why that should mean it's unable to connect, even after logging in. I suspect it's because it's running under a different user id.)

So here's what I've got now: instead of running Mopidy as a service (using mopidyctl to control it), I'm running it as a "startup application", i.e. something that runs on my own user account as part of my graphical desktop login. On Ubuntu there's a program called "Startup Applications" that you use to add/remove things easily. The one small drawback with this approach is that the music player won't be running if the machine reboots and I haven't logged in yet. However, there's usually a logged-in session running.

You might think that "running as a service" and "outputting audio via PulseAudio" would be compatible, especially as they're both listed on the same piece of documentation on the Mopidy website. Perhaps there's an extra trick (e.g. some permissions) that my system needs. But this non-service setup works fine.

EDIT 2019-09: I have had issues with the recommended way to connect to PulseAudio, specifically with the config output = pulsesink server='. Actually, if I use the more simpleoutput = autoaudiosink', my current version of Mopidy seems to be able to connect to PulseAudio transparently. I presume that there's something overly-specific in the `pulsesink' way of connecting, and that in 2019 the better thing to do is to let mopidy find its own way to pulseaudio...

linux · Sun 16 June 2019

Other recent posts: