A month later, and I haven’t managed to release any of the software I listed in my last post. Although the forthcoming Tony release is now tantalisingly close…
Several of the software projects I’ve been working on at the Centre for Digital Music are in need of a new release.
I ran some queries on the SoundSoftware code site, where much of my code lives, to find
- projects I’m a member of that have seen some work (in the form of repository commits) more recently than have seen a file release, and
- projects I’m a member of that haven’t seen a file release at all
These returned 28 and 100 projects respectively.
I feel I’ve been a bit lax.
These of course include things that aren’t releasable yet, never will be, or don’t need to be packaged up into releases for one reason or another, as well as projects I don’t actively participate in or am not responsible for making releases of. I eventually eliminated about half of the first list and 93% of the second one.
These are the ones that remained—things that could usefully be released and which I am generally responsible for releasing. Let’s see how many of these I can tidy up & release during the next few weeks:
Existing stuff that could do with a new release
- Sonic Visualiser (time and pitch unit converter, display options, multiplexer for passing more than one file to a plugin, bug fixes)
- Sonic Annotator batch audio file analyser (read segment boundaries from file, bug fixes)
- Sonic Vector recording-comparison application (first proper release with binaries)
- Tony singing analysis application (user interface enhancements)
- Silvet note transcription (experimental low-latency “live” mode)
- NNLS Chroma and Chordino chord estimator (bug fixes, including a significant memory leak)
- MATCH audio alignment Vamp plugin (many new parameters and other improvements)
- Vamp plugin SDK (improvements to skeleton builds and RDF generator; bug fixes)
- VamPy, a Python extension for writing Vamp plugins (fixes and updates to newer Python versions)
- Vamp plugin tester (better reporting, fix some false positives)
- Vamp test plugin (new tests for use with Python Vamp host)
- EasyMercurial version control UI (Qt5 build)
- Constant-Q transform library and plugin (add chroma class to library, some fixes)
New stuff that hasn’t been released yet
Some of these projects may still be marked private, in which case the links won’t work yet, but they are all planned for release so that should change eventually.
- Vamp build and test, a hosted multi-platform continuous-integration and testing environment for Vamp plugins, open to plugins from other developers
- Python extension and module for hosting Vamp plugins
- Loudness calculation plugin by Carl Bussey using the method of Moore, Glasberg and Baer (needs some testing still)
- Tuning Difference plugin for comparing the pitch of two recordings
- Azi plugin to look at stereo azimuth in studio recordings
- Low-frequency spectrogram plugin
- Feature extraction preprocessor, a LADSPA effect plugin to do various things that may improve (or harm!) subsequent feature extraction
Apple made a lot of visual changes in release 10.10 (“Yosemite”) of Mac OS/X. One of the most obvious was to change the system font, as used throughout the desktop, from Lucida to Helvetica.
A lot of people love Helvetica, so presumably they were happy. Others were less satisfied, leading to a little rush of code and articles to help you switch the system font back to Lucida or to some other font that happens to appeal.
But these people are missing the point. The substitution you want to make is not to your own desktop, but to that of your most type-conscious Mac-using Helveticaphile friend. And it is to switch the system font from Helvetica to Arial.
Delightfully, you can do this without needing admin privileges—no password required, all you need is to get control of their keyboard for a couple of minutes.
1. On your own machine, provided you are also using a Mac, install Yosemite System Font Patcher and its dependencies following the instructions in its README:
$ git clone https://github.com/dtinth/YosemiteSystemFontPatcher $ brew install fontforge --with-python
2. Retrieve and patch the Arial font files so they report themselves as system fonts:
$ cd YosemiteSystemFontPatcher $ cp '/Library/Fonts/Arial.ttf' '/Library/Fonts/Arial Bold.ttf' . $ bin/patch 'System Font Regular' 'Arial.ttf' $ bin/patch 'System Font Bold' 'Arial Bold.ttf'
3. The above should have created two new font files, in the current directory, called
System Arial.ttf and
System Arial Bold.ttf. Make these available somewhere you can easily retrieve them on your friend’s machine (shared in the cloud or whatnot).
4. On your friend’s machine, when you see the opportunity, retrieve the
System Arial.ttf and
System Arial Bold.ttf files and copy them into the
$HOME/Library/Fonts directory. You must be logged in as your friend to do this, as it must be their home directory whose font library you are copying into.
And you’re done. The change will only take effect for apps started after the fonts have been installed, or globally from the next login—if you want to make it happen immediately, I’m afraid you’ll have to log your friend out.
Now, see how long it takes them to notice. For best effect, engage them in conversation about how clean and elegant Helvetica is, with reference to their own desktop.
A couple of updates since my previous post:
- HMRC held a Q&A session on Twitter about the 2015 VAT changes. Here’s a transcript. It clarifies a lot. (I like the terse style enforced by Twitter for these answers, but some are also usefully expanded on at the end of the transcript.)
- The digital delivery company I currently use, SendOwl, posted an excellent explanation of how they understand the rule changes and what they’re going to do to support people affected by them. It’s particularly noteworthy that they are expecting to handle the 10-year customer data retention problem as well as identifying the right VAT rate for the customer’s location. I am provisionally impressed.
What am I going to do for my own little company?
I sell three sorts of things:
- Developer licences for software libraries.
- Mac apps, both through the Apple app store and as direct sales.
- Windows desktop apps. These are listed on the Windows 8 Store, but it only has a link; the sale is direct.
For developer licences, I could avoid the problem by switching (back) to manual fulfilment—emailing the licence instead of completing the transaction online. The HMRC Q&A made clear that this would be enough to avoid a transaction being classified as a digital one. These sales are infrequent enough and of high enough value to make the extra work acceptable.
The Mac apps sold through the Apple app store are unaffected: Apple is the vendor and handles the VAT.
The direct sales of apps are the problem. Those of Windows desktop apps are especially a problem, because at least the Mac ones are also available in the app store. I sell very few Windows desktop apps, far too few to justify the extra work. The rational thing would be to drop them.
I don’t think I’m going to do that though, because this isn’t a very rational business—as much as anything it’s driven by a feeling that I ought to keep in touch with how software is delivered in the real world, with a vague hope that this can make me a better and more pragmatic developer in general. Or less positively, by stubbornness and pique.
So instead I’m going to get the business VAT-registered, for all its pathetically tiny income, and play along.
Update: Moments after posting this, I found this article: Meeting with HMRC and Treasury. It says, among other things, “The details on how to join VAT-MOSS without losing your UK VAT threshold will be out next week. From the initial comments it sounds pretty sensible and workable.” So I may wait-and-see a little longer.
Another update: HMRC published their suggested workaround: it doesn’t look useful. It amounts to registering for VAT anyway, using the VAT MOSS system for EU trade, and filing quarterly UK returns as normal but with zero VAT listed. It is only available if you give your primary business as “digital services” when registering for VAT. This doesn’t seem much of a simplification—you still have to track EU vs non-EU transactions even if it’s only to remove some of them from the “VAT stream”. So, I’ve submitted my VAT registration and will, at least initially, try doing the full whack.
From the start of 2015, whenever you sell software, licences, or other digital stuff online direct to a customer in the EU, you have to make a reliable record of where they live and then pay VAT at their country’s rate.
There is no threshold for minimum value or sale quantity, and it doesn’t matter where you’re based, only where the customer lives.
The requirements for record-keeping are quite strict, asking for two pieces of evidence about the location of each customer, to be held by the business for ten years.
This is a particularly nasty shock for vendors in the UK because until now the UK has had a high threshold for sales below which you don’t need to register to pay VAT at all. (Currently it is £81,000 per year.) Sole traders and “microbusinesses” in the UK generally haven’t bothered to register for VAT and, because the regulations previously calculated VAT from the country the vendor was based in, this sufficed for small UK-based vendors across the whole EU.
But now if you sell digital goods directly to other people or businesses elsewhere in the EU — directly, not through one of the major app or ebook stores, which handle VAT for you — you’ll need to register, and quickly.
This will be a problem for me because in my spare time I run a tiny, tiny company with a tiny, tiny turnover which sells consumer software (both direct and through app stores) and software library licences. I do my own accounting because it doesn’t bring in enough to pay an accountant. (Also I think everyone should know how to do double-entry and I wanted to learn it myself.) I like the idea of having something in hand, and I want to stay in touch with the mechanics of making and selling software, so I want to keep it going.
Having to register for VAT, figure out how to charge the correct amount for each individual country, and submit extra returns and payments for every little sale I make — it’s going to be a pain in the arse for me, and in fact I don’t even know how to get the necessary duplicate address records using the sales platform I use at the moment, but at least I’m not depending on getting it right for a living as a lot of small UK vendors of digital creative goods will be.
(The alternative, of denying all sales to customers elsewhere in the EU, also appears tricky to implement reliably.)
There are advantages of registering for VAT, principally that you can avoid or reclaim VAT paid on expenses for your company. But that also involves paperwork and, if your company is very small, the value lost to the paperwork might be more than that reclaimed.
As I write this, the government pages about VAT registration have fuck-all about the fact that the £81K VAT registration threshold will disappear in six weeks’ time for a lot of very small businesses. Did HMRC imagine that only big companies would be affected?
- VAT: supplying digital services and the VAT Mini One Stop Shop
- VAT on electronic services
- The horrible implications of the EU VAT “Place of Supply” change
- New EU VAT rules change the game for digital businesses
- London’s thriving tech sector is under threat – from bonkers EU VAT reforms — kind of useful, but I still hate articles using the word “bonkers” for stuff like this. Idiots.
Last year, Luís Figueira and I experimentally submitted a batch of audio analysis methods, implemented in Vamp plugins developed over the past few years at the C4DM, to the Music Information Retrieval Evaluation Exchange (MIREX). I found the process interesting and wrote an article about the results.
I wasn’t sure whether to do a repeat submission this year—most of the plugins would be the same—but Simon Dixon persuaded me. The test datasets might change; it might be interesting to see whether results are consistent from one year to the next; and it’s always good to provide one more baseline for other submissions to compare themselves against. So I dusted off last year’s submission scripts, added the new Silvet note transcription plugin, and submitted them.
Multiple Fundamental Frequency Estimation and Tracking
The only category we didn’t submit to last year. This is the problem of deducing which notes are being played, and at what times, in music where more than one note happens at once. I submitted the Silvet plugin which is based on a method by Emmanouil Benetos that had performed well in MIREX in an earlier year.
The results for this category are divided into two parts, multiple fundamental frequency estimation and note tracking. I submitted a script only for the note tracking part. I would describe the performance of our plugin as “correct”, in that it was reliably mid-pack across the board, pretty good for piano transcription, and generally marginally better than the MIREX 2012 submission which inspired it.
This was a fairly popular category this year, and one submission in particular improved quite substantially on previous years’ results—it may be no coincidence that that submission’s abstract employs the phrase-of-the-moment deep learning.
Audio Onset Detection
The same two submissions as last year (OnsetsDS and QM Onset Detector) and exactly the same results—the test dataset is unchanged and the plugins are entirely deterministic. Last year I remarked that our methods are quite old and other submissions should improve on them over time, but this year’s top methods were actually no improvement on last year’s.
Audio Beat Tracking
Again the same two submissions as last year (BeatRoot and QM Tempo Tracker) and exactly the same results (1, 2, 3), behind the front-runners but still reasonably competitive. While the best-performing methods continue to advance, it’s clear that beat tracking is still not a solved problem.
Audio Key Detection
Last year we entered a plugin that wasn’t expected to do very well here, and it swept the field. This year everyone else seems to have dropped out, so our repeat submission was in fact the only entry! (It got the same results as last year.)
Audio Chord Estimation
This is interesting partly because our submission (Chordino) performed very well last year but the evaluation metric has since changed.
Sadly, there were only three submissions this year. Chordino still looks good in all three datasets (1, 2, 3) but it is now ranked second rather than first for all three. I’m a bit disappointed that the new leading submission seems to be lacking a descriptive abstract.
Categories we could have entered but didn’t
Audio Melody Extraction
Last year’s submission wasn’t really good enough to repeat.
Audio Downbeat Estimation
I overlooked this task, which was new this year. Otherwise I could have submitted the QM Bar and Beat Tracker plugin.
Audio Tempo Estimation, Structural Segmentation
These categories had an earlier submission deadline than the rest, and stupidly I missed it.
In 1992, while I was an undergraduate at Bath university, I went to Berlin for an industrial placement year. I had started out registered for a 3-year maths degree without a placement, but there was a scheme you could apply to if you changed your mind and fancied going abroad in the middle of it. Hardly anyone applied for it, and I don’t think any applicants from my course were rejected unless they failed their end-of-year exams.
I was to work at the Konrad-Zuse-Zentrum (ZIB), a computing research institution that at the time was based in Charlottenburg, a tidy part of west-central Berlin. My girlfriend, also at Bath but studying languages and responsible for encouraging me to apply to go abroad in the first place, had managed to arrange a study year at the Freie Universität. She moved in to a student residence and I into a modern one-person flat organised by the company, in Mariendorf, in south Berlin.
Mariendorf wasn’t very exciting and my girlfriend’s hall of residence wasn’t all that great, so after a few months we decided to find a new flat together. My spoken German was just functional, hers was good, and between us we spent a lot of time talking to Mitwohnzentrale agents and looking around flats until, in February 1993, we rented a flat in Alte Schönhauser Straße, near the centre of what had been East Berlin.
Alte Schönhauser Straße is close to the S-Bahn station at Hackescher Markt, an area officially known as the Spandauer Vorstadt lying just north of Alexanderplatz. This district, and Hackescher Markt especially, is now super-shiny and is known for bars, shops, and lots of tourists. But its present state is a result of a thorough and rapid redevelopment and restoration starting in about 1997. (See p27 onwards of this urban-planning slideshow for an interesting overview of these works.)
In 1993 the area was still a bit of a mess. Many buildings on major streets like Rosenthaler Straße and Neue Schönhauser Straße were pocked with bullet holes or had obvious bits missing. What is now the fancy paved square filled with outdoor cafés, outside the S-Bahn station, was just a road. One of the commercial streets now present (An der Spandauer Brücke) was then a scrubby park, I assume because the buildings had been pulled down after the war and were not rebuilt until the area was restored. The now-restored Hackescher Hof complex was an unremarkable grey residential building: I had no idea there was supposed to be anything interesting about it. It could all feel a bit bleak.
But this was a thrilling area to live in as a transient foreigner at the time. Many of the most decaying buildings were temporarily housing intimidating and/or tantalising makeshift bars, cafés, or art venues, like autonomous growths forcing themselves up through the gaps in what had once been reliable, gentlemanly turn-of-the-20th-century buildings. From Hackescher Markt up Oranienburger Straße to the looming art-project squat of Tacheles the area was full of a sort of place I had never seen before. It all seemed sudden, urgent, about to collapse. I knew very little about any of it and I can hardly even characterise myself as a participant, but I loved being able to be there.
Many of these venues turned out to be longer-lived than I would have expected — Silberstein, on Oranienburger Straße, and Tacheles itself both stuck around until 2013, gradually increasing their plate-glass quotient as they went. (The back of Tacheles, which ended up glazed over, was initially a void you could fall out of.)
* * *
The flat had four rooms, much bigger than the modern one I’d become used to, and it was I think smartly decorated and desirable for its time and place, but it did have certain limitations. Each room had a coal-fired heating stove, which worked pretty well, but of course you had to bring coal up in a bucket from the cellar and light a fire in each stove some time before you needed the heat. These stoves were commonplace at the time, so the air around smelled of coal smoke in a way that western cities hadn’t, I imagine, for some decades by then. There was no bathroom; the loo was outside the flat, shared with the flat next door. Hot water was through a small electric heater above the kitchen sink that could provide about a kettle’s worth. The owners had installed a standalone electric shower unit in the utility room, which was very natty but a bit ineffectual: switch it on, wait ten minutes for it to heat up, get in, enjoy two minutes of warm water.
Still, it was a lovely flat, and I loved the coal tang of the cold night air and the late-night sound of the Rosenthaler Straße tram, its swooping creak as it slowed for a tram stop, carried to the window across the wasteland at the back of the building.
* * *
As it happened, when the day came to move all our belongings to the flat, I was alone: my girlfriend was temporarily in the UK with her family. We didn’t have all that much stuff, so I thought I could just load up a backpack and take it on the U-Bahn. I took three or four loads from my flat and three or four from her rooms, and by the time everything had been moved, it was late and I was very tired. I dumped everything and fell into bed.
February in Berlin can be very cold. I woke up early in the morning and found it difficult to move my limbs. I could move my head, but when I did, a crushing pain rolled through it. I’ve never known a headache to compare.
I realised that I couldn’t move because I was too cold, and that I needed to do something about it. But I’d forgotten to bring up any coal before I fell asleep the previous night. To warm up, I would need to pull on some clothes, find a bucket, make my way out of the flat and down to the unfamiliar cellar, fill up with coal, drag the bucket back up, set up and light a fire, and hang on long enough for the stove to warm up. It was a painfully long journey for such a simple job.
* * *
I’ve been back a handful of times since 1993, though sadly never for long enough to get beyond the initial phase of just boggling at things that have changed. The really obvious changes are of course along the stretch of the Wall, like the whole new Potsdamer Platz, but it’s the details like shops and venues, or changes to transport layout, that are the most interesting for me.
Some of this has to do with the time-telescoping effect of getting older, but it also has to do with not being there. If I’d been working there while all this was happening, I would probably be unable to remember what it had ever been like before, just as I can hardly remember what London’s Docklands area was like before its second big wave of building at the turn of the millennium.