I’ve had a great time exploring Kumihimo braiding lately, beginning with tuition during a visit to international expert on braids Makiko Tada while touring Japan (more on that soon). I’ve written up a full report over on the PENELOPE blog. You can keep up with our PENELOPE textile adventures by following us via our twitter feed or facebook page.
TidalCycles (aka Tidal) is a Haskell DSL for making (usually musical) pattern.
I’ve put a lot of time into Tidal the last couple of months, starting with preparation for an advanced tidal workshop in Tokyo, but things got out of hand and ended with a rewrite of its innards, solving some long-standing issues. It feels like I’ve only recently grown to understand what tidal really is in the process of writing (and rewriting) it over many years, and I’ve finally got to put that understanding into action. I’ve had some really useful feedback from the Haskell community in the past and so thought I’d write this post as an effort at getting feedback on this latest iteration.
Tidal is all about pattern. I’ve tried to explain what this means in terms of types in this wiki page – What is a pattern?
That page talks through the first bit of Sound.Tidal.Pattern, which also contains applicative and monad instances for patterns. The previous attempt at these didn’t conform to the applicative and monad laws, but these new versions hopefully are much closer to the mark. I’ve found though that
join aren’t enough for Tidal. I also need
<* for where pattern structure comes from the left, and
*> for where it comes from the right, where
<*> comes from both sides. Similarly, as well as
join (which I’m calling
unwrap) I needed to make
outerJoin. You could have a look at the Combining pattern structure wiki page to get an insight into why these are needed.
Tidal is my only real haskell project and I’ve learned haskell through (admittedly many years) of writing/rewriting it, so all insights much appreciated!
There has been a couple of instances where Haskell fans have been immediately turned off by Tidal, I think because of the large amount of strings used in Tidal code. These strings are actually overloaded, a parser in Sound.Tidal.ParseBP silently turns them into well-typed patterns (which are functions of time, and not strings or lists). Anything in those strings could be expressed in Haskell code, but with a _lot_ more keypresses. This mini-language is heavily influenced by the representation of cyclic structures Indian classical music (i.e. Bernard Bel’s BP2). I’d really like to get to the bottom of why people don’t like the look of these strings though, and whether there is a better alternative.
All feedback, suggestions and criticism much appreciated!
Too long; didn’t read? Basically, please buy me a coffee or so by pressing this button:
I’ve been doing a lot of work on TidalCycles lately. Tidal is very much a labour of love, I’ve put a lot into it over the past decade, motivated by the fun of making music with it and of enjoying what other people are doing with it. That’s not sustainable though, so I’ve been looking for ways of asking some money in return.
I’ve looked at patreon.com, but it doesn’t sit well with me. It seems high maintenance, and doesn’t fit with my motivation to work on Tidal for the fun of it, and not turn it into ‘content’ to be delivered..
I’ve also looked at liberapay, and used it to raise money for server costs. This has actually been really successful, I raised nearly €500 which covered server costs for we.lurk.org, post.lurk.org, talk.lurk.org, algorave.com, toplap.org etc for a while (thanks!). This also made me feel much better at helping keep these things going, that people are up for chipping in some hard earned cash. That money has probably run out by now, there’s a few of us running these services and we’ll look into being a bit more organised about accepting donations.
Liberapay doesn’t feel right for tidal development either, though. It’s based on an anonymous donation model, which is great for some things, but there’s no way of directly thanking people who donate (if you’re one of them, really, thanks!).. Or doing any community building around it.
I’ve also tried crowdfunding. This has been a great experience, I met my funding ‘goal’.. But in truth, crowdfunding is more a way to get people involved in a project than fundraising.. I’ll likely end up in the red overall. Plus I’ve found it really hard to get as far as finishing the project.. People have been outstandingly patient, but it’s been a very long haul (two years late!!). I will get there, though.
Anyway, now I’m looking at ko-fi. This seems to fit much better. No stress for ‘creators’ or ‘supporters’ to detract from actually making stuff. One-off or regular payments, that go straight to me (no extra platform fees). Plus a nice coffee metaphor.. It’s going to take a lot of coffees to get Tidal 1.0 done so I’d really appreciate your support!
One last thing – one reliable way to fund tidal dev that I’ve found is by running workshops. If you’d like to host a one or two-day TidalCycles workshop next year, please get in touch! There’ll a lot of new stuff to learn + share.. Same goes for talks and performances, of course.
Also get in touch if you have ideas for other ways to make tidal happen..
I’m a big fan of wikipedia. It’s by no means perfect, but it’s undeniably a fantastically useful resource, created by people giving their time for free, to share and enjoy. There are of course hidden barriers to participation, but in theory anyone can make an edit or create a page (as long as it’s not about themselves – that’s considered bad form and can backfire spectacularly).
Here’s a quick guide to creating a new page on wikipedia:
- Although you don’t have to create an account to edit a page, you do have to create an account to create a page. This actually makes you more anonymous – otherwise your net connection’s IP address will be shown publically. That’s as long as you choose a name that doesn’t identify you (I do, but probably should – I’ve received legal threats for my edits in the past!).
- I advise not using the article creation wizard. In my experience, that’s a hotline to a well-meaning person, who will however not have any domain knowledge, and will likely be looking for pedantic reasons not to accept your article rather than for reasons to accept it. This makes for a very slow and frustrating experience, and not a joyful sharing of knowledge.
- Instead – just create the page! You can do this by going to the URL for it. For example, if you want to create a page about “blue widgets”, go to https://en.wikipedia.org/wiki/Blue_widgets.
- Well, if this is your first page, that’s probably a bad idea, create it in draft form first by going to https://en.wikipedia.org/wiki/Draft:Blue_widgets. Once you’re happy with it, copy the contents across to the real thing.
- It’s a good idea to find a page similar to your topic, click edit, copy the contents, and then paste it into your new draft as a starting point.
- It’s worth noting that once you start contributing to wikipedia, you are part of it! Wikipedia is not a separate entity from you; likely all the people you’ll interact with will be working in a voluntary capacity, just like you, and decisions about notability and so on are made by consensus.
- However! Unless you’re careful, your new page will likely be ‘speedy deleted’ for not being notable. Despite what some believe, there are no hard rules about what makes something notable, but there are a lot of guidelines.
- So at first, your page will probably not really be about the thing, but instead about how notable the thing is. You can flesh it out with more useful stuff later. For example, here’s the current (at the time of writing) version of an article I just created. The first sentence briefly says who the subject is, and the sentence says why they are notable. Importantly, there’s links to three or four mainstream media articles directly about the subject. Without these, someone will probably speedy-delete the page. You could look into the notability guidelines, but as long as you have some decent mainstream media and book references, you’ll likely be safe. Look on google news and google books to find them.
- (If you can’t find such references, then probably the subject isn’t notable by wikipedia’s definition of the word, and you might be wasting your time with this one)
- Adding references like this is actually really easy – just click the ‘cite’ button in the editor, paste in the URL to a webpage representing the thing you want, and make sure you both confirm and add what it gives you (this involves pressing a button twice, otherwise you lose it – I do this every. single. time.). Apart from that you just have to add a reference section to the end.
- Once you’ve created your page, it’s definitely worth keeping an eye on it (e.g. via your ‘watchlist’), so that you can contest nominations for deletion and so on.
That’s it. Good luck!
Bluedot 2018 was a great time, here’s a nicely live edited film of it.. Catch Sam + me as CCAI from around the 2h1m mark.. As well as top stuff from Innocent, Digital Selves, TYPE and AlgoBabez.
The idea was to work with schoolchildren to explore pattern encoding through textiles and live coding. It’s been a rollercoaster, getting a lot done in a short amount of time, but was really rewarding.
I worked with sixty Y4s (8-9 year olds) at Wybourn Community Primary, first making a big quipu-inspired structure, the tangly thing above. I had half a day with each class (30 in each), teaching them how to self-ply yarn to make quipu-like strands (with a loop one end for cow hitching), teaching them to tie numbers as quipu knots, and then having a free-for-all where they tried hiding messages in string, starting with their age and then moving on to hiding letters and so on. This bit was far more difficult than teaching them to do live coding later on, quite a few weren’t confident with knot-tying to begin with, but they all managed to produce something in the end, with a wide variety of structures… and once I’d hitched them all onto a main strand I think they looked marvellous.
I also worked with the same year group on Algorithmic Drumming Circles, this time in groups of eight. I had just one hour with each group to introduce the concept of live coding, teach them enough Tidal to get them making music together, and capture a performance to be played back at the exhibition. The first couple of groups didn’t have parental permission for the filmed, so I had the opportunity to try some different things out. I had some playing cards prepared with fragments of code for the kids to put together and type in, but I decided not to use them after the first try. In fact, it seemed the more I constrained the task, the more creative the children would get. So in the end I only gave them two sounds each to play with (a high drum and a low drum – each computer with subtly different drums/tones), told them how to make sequences, and some functions for transforming them with some higher-order stuff. They responded to this really well and we actually managed to capture two performances with two of the groups and still be done by end of the hour!
I say ‘we’, it was actually my friend Jon Harrison who did the filming. It was a challenge to capture the circle, Jon managed to get a nice camera attached to the ceiling to film from the top-down, the results are excellent.
On the technical side, I had eight Pis tightly synced together (using ptpd), each running Tidal, Dirt and my new feedforward editor. I had all the keyboard events captured with accurate timing so that the live coding could be perfectly recorded and played back in the or the exhibition itself, the computers were set up in the same way, but without keyboards, and had the film projected down onto the floor. It works well I think, seeing these ghostly children type, and thanks to some network magic, you can look at the screen and see what they’re typing, as well as hearing their music come from their speaker. You can really see where the children hear something they like that one of their friends is making, run round to look at the code, then run back and try out their newly learned technique. Free software at work. With a different rhythm coming from each speaker, all nicely locked to the same tempo, the result is pretty cosmic, eight-channel rhythmic free-for-all that somehow gels at several points into some really nice techno grooves, and at other times breaks up into noisy experimentalism. The kids clearly enjoyed themselves a lot. We captured five different performances in the end that the installation cycles between.
Although we did have parental permission to film the children, we’re still not going to put the films online, as the children themselves might well not want films of themselves on the internet as they get older. But you can still see the work in the Playground exhibition at the Millennium Gallery in Sheffield for a few more days. I might put the music up at some point but the eight-channel nature of it is a bit problematic.
I’m left with a familiar feeling from this kind of short, intense project – the memory of a strong, uncertain feeling at the start of the project when there is a vague idea that seems impossible, mixing with the fleeting elation of somehow having managed to pull it off. I’m looking forward to taking this further, probably working with adults next to see how they can compete…
Anyway it’s not over yet – the exhibition goes on, and tomorrow (Friday) I work with three older kids from a different school – Crofton Academy in Wakefield – for a live performance in the gallery from midday.. Then celebrating with an (adult) Algorave in the evening..
As a result of this project I’m actually much closer to finally releasing my long overdue Spicule album. I put a lot of work into the feedforward editor to make it usable and robust to 8 year olds, and a lot of Raspberry Pi optimisation to make it all sing. More on all that soon..
Anyway thanks to the kids + teachers (esp Julian and Jane) for getting involved, Jon for filming, Kathy and Darren and the rest of the CMC crew, plus Rosie + Laura from Millennium Gallery for all the support! Plus Arts Council England for funding the whole endeavor.
Here’s a quick demo of a ‘simple’ dialect of tidal. Basically it
- avoids parenthesis, `#` etc, through a small, simple library of shortcuts (faster, slower, higher, lower, crunch, quieter, louder, skip, etc)
- allows you to just put e.g. `”bd sn”` and it’ll assume you meant
s "bd sn".
- that’s it
I’ll be trying this out with a large number of 8 year olds soon..
I wrote a paper with Ellen Harlizius-Klück and Dave Griffiths called “Digital Art: A Long History“, accepted to Live Interfaces (ICLI) 2018. From the abstract: “A digital representation is one based on countable, discrete values, but definitions of Digital Art do not always take account of this. We examine the nature of digital and analogue representations, and draw from a rich pre-industrial and ancient history of their presence in the arts, with emphasis on textile weaves. We reflect on how this approach opens up a long, rich history, arguing that our understanding of digital art should be based on discrete pattern, rather than technological fashion.” You can read the pre-print here.
I’ll also be performing with my new Feedforward editor in ICLI, here’s a recent performance with it in Reykjavik:
I actually started ICLI in Leeds back in 2012 with Kia Ng, and I’m super excited to be attending the fourth biannual edition of the conference, especially as it has such a solid programme.
Announcing another project! I’m artist-in-residence at CMC Playground, the exhibition and arts programme that is part of annual Children’s Media Conference in Sheffield, funded by Arts Council England. This is going to be a lot of fun, working with children in Crofton Academy in Wakefield, and Wybourn Community Primary in Sheffield, the results shown in the exhibition at the start of July. I’ve worked with these schools before, doing a crazy tanglebots workshop with a class at Wybourn, and working with a visually impaired pupil at Crofton Academy to control a laser cutter with code for his GCSE coursework. This time I’m planning on exploring coding and pattern – encrypting messages in Quipu-inspired structures, and making music through TidalCycles drumming circles. Fun!