My publications list – updated
My publications list was missing some entries and many of the PDFs. I started uploading everything to Zenodo, but although they archive things well, it’s not ideal as a publications list, for example you can’t browse by publication date. So now I’ve switched to keeping my zotero publications list up to date. It’s really perfect for this, and it was quick to add PDFs to as much as possible – it does its best to convert any URLs/DOIs to PDF attachments. It still took a little while to tidy up, but considering how long it took to write, it is worth the little extra time and effort to make it easy to find and read!
The list is viewable here on slab.org/publications, but probably best to view directly on zotero.org/yaxu. Please let me know if you spot something missing.
Tidal 2.0 beatMode (TidalCycles vs TidalBeats?)
I’ve been rewriting Tidal again for a while but resisting actually using it, mostly out of a weird sense of delayed gratification.. Ideas expressed as code can get fixed once they become instrumentalised in a end-user interface..
But I’m finally starting to get a feel for Tidal 2.0. It’ll have two sides to it, the existing cycle-oriented pattern transformations, and a new realm of beat-oriented transformations. I wasn’t sure how both could be contained in the same interface, but just by renaming a function from
beatMode, I can start to get a feel for it. Here’s a tech test (not intended to sound nice!):
In ‘beat mode’, most things will look the same, but act differently. E.g. when you reverse a pattern in beatmode, the whole sequence gets reversed, rather than every cycle reversed independently. Even the mini-notation works, but becomes beat-oriented.
There’s a lot of reworking that’s gone into this. There’s now a Signal type which is like the old Pattern type, as well as a new Sequence type. Both Signals and Sequences are instances of a new Pattern typeclass. The nice thing is that the Signal and Sequences definitions are becoming mostly concerned with how to align and combine things of their type, most of the pattern operations can then be defined in terms of the more abstract Pattern typeclass.
This is only just starting to work, and already it’s fun to play with beatMode with its very strong polymetric affordance. It reminds me of early days of Tidal, when it was only beat-oriented. I love polymeter, and although the mininotation has always made it fairly easy to play with, it feels good to be able to do that outside of the mininotation without having to calculate ratios by hand.
Really though the payoffs for all this work are still to come. Coming up with a nice code interface for doing Carnatic-style addition/subtraction/manipulation of beats fluidly, following Aravind’s work. Also exciting are the possibilities of formalising alignment of sequences before combining them – I’ve been feeling my way around alignment of patterns for a while, including some prototyping in Strudel, and the possibilities feel limitless at the moment..
Of course beat representation is normally the very first thing you would implement in a music tech, using lists/2d arrays etc. It’s fun though to push against the usual grid-based approach, which tends towards score-like representations that are very much geared towards recording/transcribing, and not manipulating or indeed live coding with.. I continue to feel that staff notation, piano roll and all those DAW music interfaces that have flowed from them have really limited music, wherever they dominate. Lets see how it goes.
How to start a movement / love is the message
I’ve been thinking a bit about leadership over the past year or so, especially since being awarded a ‘future leader fellowship’ to explore algorithmic patterns.
Here’s a fun 3 minute talk from Derek Sivers that gives an interesting perspective on this:
His take-home is that leadership is over-rated, it’s really the second and third person who starts turning a lone weirdo doing something strange, into something with real momentum. I can definitely see this with the movements I’ve been involved with (e.g. dorkbot meetings, Placard headphone festivals, TOPLAP, Algorave, TidalCycles and the fledgling Pattern Club). A big part of their success has been in a) folks coming along and taking on an idea, and pushing it forward in their own way and b) co-founders being happy about that, not centering themselves too much or constraining things, letting the movement have its own life as it spreads. An Algorave in Mexico City will feel different from one in the UK. Good !
I think there is another message in this video though. There’s a clear sweet spot in this ‘movement’, about 1m45s in. The people are having a wild time, getting to know each other, expressing themselves together. After that it quickly gets swamped, and by the end it’s completely lost. People are standing around looking confused, probably not even knowing why they’re there, they just went towards the crowd. The movement was not only created inside 3 minutes, but also extinguished itself. By the end it’s just a very conventional crowd vaguely waving their hands in the air.
That’s not necessarily a bad thing, of course it’s totally fine for a movement to have its time. The Dorkbot meetings of ‘people doing strange things with electricity’ spread from New York City to dozens of places around the world in the ’00s, but there are very few active dorkbot events happening now. If a movement persists for a long time, then it’s not leaving space for new movements to grow and flourish. (This is why institutionalised movements, e.g. electroacoustic music, can sometimes feel ‘stuck’, and as if they’re punching down).
Maybe part of the problem is that we’re living in cultures with a really unhealthy attitude towards growth, and in particular wilful ignorance of the consequences of overgrowth. Perhaps you can see it in the “how to start a movement” video, but you can surely see it in our increasingly polarised economic system.
I’ve been enjoying the ‘Love is the message‘ podcast a lot, where two cultural theory professors and soundsystem enthusiasts chat about radical musical movements from the 1960s onwards. David Mancuso’s parties in NYC Loft are a clear obsession, and it’s pretty fascinating how someone like Mancuso instigated counter-cultural change by making space for things to happen, basically putting parties on in his house that challenged the social (and financial) rules that constrained conventional commercial venues, to instigate change in the world ‘one lounge at a time’.
So maybe doing something weird, inviting people to join you en mass (a reasonable prospect if we can find the right balance of controversy and relatability to make a social media post or TEDx talk go viral), and quickly getting swamped by your own meme isn’t the best approach to leadership. Instead, it could be better to focus on doing things on a small, local scale, while embracing the out-of-control nature of ideas.. A collective approach where you make space for ideas to be explored, in a way that they can spread without a centre. Love is the message, indeed!
Performing openness in academic publishing
I was unsure about writing this blog post, but today I was turned away from signing up for the openly-advertised University of Sheffield’s Open Research initiative’s inaugural annual Open Research lecture for not being a current member of the institution. So urged on by a deep sense of irony, here I am with a rant about trying to publish a book open access.
After much collaborative work over many years, I’m really happy that the Live Coding book came out a couple of weeks ago, on MIT Press. A fresh editorial team at MIT were really helpful and responsive in taking it over the line, with copy-editing helping iron over the different voices in the book into what I think is a great text that I hope people will enjoy.
Between four of our institutions – the Deutsches Museum, London South Bank University, Nottingham Trent University, and University of Sussex, we raised the $15k subvention necessary from European and UK public funds to make the book open access under a Creative Commons Attribution-Sharealike license. As I understand it, this $15k was required to cover the loss in sales revenue due to the ebook/pdfs being made freely available. Given the live coding topic, it’s great that this means that not only is the book free to read in ‘digital’ form, it can in theory be modified while it’s being read.
In practice though the road was a bit bumpy. Although all copies of the book are openly licensed into the creative commons, some are nonetheless paywalled. Indeed, the ebook is has wide digitally distribution to the kindle, apple, google, kobo etc ebook stores where you can buy access to this creative commons license for $25.99. Unfortunately, the digital rights management (DRM) imposed by the store makes it difficult to benefit from the freedom to share and modify the text that the open license grants you. So really, you are paying $25.99 to lose benefits. No wonder creative commons are against this kind of DRM.
Worse, the MIT Press website steers you towards these digitally-rights-managed, $25.99 paywalls and away from the otherwise identical free-to-download ebook that we paid the subvention for. If you click the big ‘ebook’ button, which tantilisingly has no price next to it (screen shot below), you are directed to the Penguin Random House commercial distribution of it:
To access the ebook for free, you have to instead click on the ‘resources’ tab, and find a link to the epub or mobi ebook download there. Of course, this isn’t a mere resource for the book, but the actual book, so that’s a bit like hiding the free download behind a door that says ‘beware of the leopard’. I did negotiate putting some text on the bottom of the page pointing to this badly named tab, but unfortunately the tab could not be changed and the ebook links couldn’t be added to the front page.
It also took MIT over a week after publication to make this resource tab appear, the non-paywalled ebooks weren’t available at all via MIT until that point. [Edit: To clarify, this was due to technical issue with MIT’s service provider which I now understand was causing serious problems across MIT’s site. I didn’t mean to imply that there was anything nefarious in this delay.]
You can also click on the ‘open access’ tab. After a couple of clicks this takes you to a different website, where the book is freely downloadable, but as fifteen separate PDF files. Many people (myself included) would find reading a book as separate PDFs awkward to download/sync to an e-reader, and difficult to read – the layouts are designed for print. So for most people, they’d want to click that ‘resources’ tab.
Actually, although ‘open access’ is a familiar term for academics, according to my (unscientific) poll on mastodon, unless you have an academic background, you probably don’t know what it means. So ironically, ‘open access’ is academic jargon, which acts here to guide the user away from itself.
MIT were happy to discuss all these issues, and to some extent agreed that the situation isn’t ideal, but nothing could really be done. They were open about the fact that they relied upon these ebook paywalls for ‘open access’ books to make the them financially tenable, even with a $15k subvention. They said that ‘epub’ ebook files will in the future appear on the ‘open access’ site alongside the per-chapter pdfs, which is good news. They also suggested we made our own website where the ebook can be downloaded, which we’ve done at livecodingbook.toplap.org, but really, promoting and distributing a book is the job of its publisher.
I believe that MIT Press are a non-profit themselves, so this isn’t about profiteering, but about the pragmatics of publishing research products in a financially sustainable way. The end result though is that authors can raise funds to make their books open access, but the publishers are still motivated to make people pay for them anyway. Actually for this kind of book, authors get some royalties too, so have some motivation to increase commercial distribution of open access books as well. That seems particularly unethical – authors personally paid to subvert the open license that they’ve used public funds to pay for.. When they were salaried via public funds to write the book in the first place! (I hearby pledge to donate my cut to an open source project.)
So I guess open access can be a kind of performance done to placate the funding requirements that come with public funding, and not a genuine effort to make publicly funded work readable by everyone. If you are considering publishing open access, my advice is to think and negotiate hard before signing the contract, to be clear about what versions will be creative commons, which of those will be open access, and how they will be promoted together. The best thing to do is retain copyright, then I believe according to the creative commons licenses, you have control over DRM.
All that aside, it is a lovely book, and it is especially nice to be able to hold a physical copy in my hands, and read it afresh.
Live Coding: A User’s Manual
“Live Coding: A User’s Manual is the first comprehensive introduction to the practice and a broader cultural commentary on the potential for live coding to open up deeper questions about contemporary cultural production and computational culture. This multiauthored book—by artists and musicians, software designers, and researchers—provides a practice-focused account of the origins, aspirations, and evolution of live coding, including expositions from a wide range of live coding practitioners. In a more conceptual register, the authors consider liveness, temporality, and knowledge in relation to live coding, alongside speculating on the practice’s future forms.”
A book written over a period of many years, together with the lovely Alan Blackwell, Emma Cocker, Geoff Cox and Thor Magnusson, and many more contributors. Read it here!
Talk abstract: Pattern and groove in live coding
I’m happy to have a talk accepted for the first groove workshop happening in Jan 2023, “an online meeting seeking to bring together researchers from a wide range of domains and with differing research questions and approaches, all centered around the topic of musical groove.” Here’s my abstract:
Live coding is a performing arts practice, prevalent in computer music, where people write and manipulate code to make live music (Collins et al, 2014). It is an umbrella term for a varied range of approaches, but this paper addresses improvised live coding, where performers begin with a blank page, and write code to make music ‘from scratch’. This often take place in nightclub and festival contexts, where people dance to live coded music at events known as ‘algoraves’.
The concept of groove (Duman et al, 2021) offers a challenging viewpoint on live coding. On one hand, groove is an unspecifiable and embodied experience, whereas code is clearly an explicit, formal specification and therefore seen as disembodied. How can groove find a place for itself in code-based music?
The concept of tacit knowledge throws light on this situation by offering the idea that we “know more than we can tell”, the classic example being knowing a face of a friend so that we can spot them in a large crowd, despite not being able to describe their face in words to any level of detail (Polanyi, 1966). Groove is tacit, as something we know without being able to articulate. Accordingly in Polanyi’s terms, we say that groove is proximal – close yet inexplicable, whereas code is distal – distant and therefore explainable.
A key property of tacit knowledge is that proximal knowledge can be used to structure distal knowledge. Applied to live coding, this suggests that although code generates music, from a human perspective, it is rather the close experience of music that structures our understanding of code. We can say then that code is meaningless until we run it and experience its output – only then can we read that code from the perspective of the music. To use another metaphor, the code is the map, the music is the territory, and we can’t read the map until we know the territory.
Through this talk, I will explore the practicalities of this tacit relationship between computation and experience, and generalise it from live coding to heritage pattern-based craft practices.
Interview with Benjamin Tassie
Here’s a nice interview I did with lovely fellow Sheffield-resident Benjamin Tassie, for his Future Classical show on Resonance FM. It was a fun chat and the 64th episode, you should definitely check out all the others – so many good people!
Chat with Kate Sicchio about Algorithms, Patterns, Robots and Errors
Kate Sicchio and I had a nice chat about our interest in patterns as part of this year’s International Conference on Live Interfaces, organised by Adriana Sa. I really enjoyed this format, the informal nature of it somehow got a bit deeper as an interdisciplinary exchange than a usual overloaded powerpoint-style conference talk.
Appearance on ZINE podcast
I had a great time chatting to Axel, Okkie and Ziphoid for the ZINE podcast, which is all about the demoscene – a really nice movement which has it’s own kind of live coding..
Making robots with AX-12A servos
I’ve been getting my head around Robotis AX-12A servos, and am so far at the stage where I can control a weird robot arm with an arduino. It was a bit difficult to navigate to this point, and there was some interest from a friend (Les), so I thought I’d share what I needed to get and do. Please note that I otherwise have no knowledge of robots and this is all based on naive guesswork. But it works!
I’m talking/working with algorithmic choreographer Kate Sicchio about patterns in choreography, and although she is already way ahead working with robots herself on her ongoing projects, I thought it would be good to start from scratch exploring patterns of movement, with simple robots that we could duplicate in both of our labs.
AX-12A servos a handy modules for this, I think it’s what Patrick Tresset uses for his drawing robots. You can link them together with standard parts, screwing them together into arms etc a bit like lego.
The aesthetic is of course very post industrial engineering, all gray and black modules. It’s well designed, fitting together nicely, and with some nice feedback data – it’ll be interesting to explore two-way interaction with the servos. So it’s a nice platform for prototyping, but nonetheless longer term we will likely want to explore cheaper, more textile approaches to robots, following from Dave’s earlier work on his Penelopean maypole dancers.
Please see the note below about the very damaging potential of connecting a 12v supply up to your laptop. Please be careful!
So what do you need to start making custom robot arms?
- The AX-12A servos themselves. You can get them in a bulk box of six, which is better value, but they don’t come with anything else so it takes a while to find out what else you need. Read on
- Bits of plastic for connecting the servos together into something like an arm. I got a pack of FP04-F3 (flat panels for making twisty type joints) and FP04-F2 (‘c’ shapes for making elbow type joints). I realised after that to make use of the latter I also needed a “BPF WA/BU set”.
- Screws/bolts and nuts. You’ll need M2x6 bolts (a standard size meaning 2mm across and 6mm long) and matching M2 nuts (I got 50 of each) for connecting the servos together and M3x10 bolts (I got 20) for attaching the FP04-F2 to the servos with the “BPF WA/BU set” bits.
- Something for telling the servos what to do. I already had arduinos for this, but needed to get a “dynamixel shield” as well.
- Something for communicating with the dynamixel board while it’s running.
Unfortunately this can’t be the arduino that the shield is sitting on. I used a second arduino, following the EXCELLENT instructions in the video below.May 2023 update – in the end the dual-arduino and other ‘software serial’ approaches just didn’t work reliably enough. What did work was using a usb-serial cable, talking to the additional hardware serial ports available on the Arduino Mega boards.
- Cables! This took ages to work out.
- You need “Robot cable-3P” for connecting the servos together, I got a pack of 10, 140mm long. This was guesswork, but they’re just about long enough when using the plastic bits to connect the servos fairly closely together.
- Annoyingly, the 3P has the wrong connector for the dynamixel shield. Luckily, I’d originally bought the “Robot cable-X3P” cables which happened to have the right connector for the shield (but the wrong one for the servos). So I ended up splicing an X3P and 3P cable together. But that’s an expensive way to do it. Alternatively you could just use some male-female jumper cables or something to go between a 3P cable and the board.
- A power supply for the servos, between 9v-12v. I used a 12v, 2250mA power supply that I had lying around.
In terms of getting it all to work, the below fantastically explained video helped massively and probably saved me days worth of stress:
May 2023 update: This did help get me started, but as mentioned earlier, the software serial approach created too many transmission errors for us, even with extensive error checking etc. Using the arduino mega’s extra hardware serial ports instead was far better.
Here’s my first test:
Notes / tips
Important: There was a jumper on the board, that should be removed otherwise I think it’ll try to get power from the arduino, and in the process connect up the 12v power supply with somewhere bad (like a laptop).
Again, the above video is super helpful. They talk through a lot of stuff, including how to use a second arduino to get a serial connection to the dynamixel shield for debugging.
The example dynamixel arduino code needs the baud rate changing to 1000000, and protocol to 1.0.