Obituary for Edward Hutchins

Edward Hutchins passed away on June 19th at the age of 83 in McKinney, TX, after a short illness.

Ed was born to Esther and Bert in St Louis, MO, in 1939, but the family soon relocated to Phoenix, AZ. After a brief stint at Arizona State, Ed joined the Army and was stationed in Alaska and then San Francisco. After being discharged, he earned a Bachelor and Masters degree in Electrical Engineering from Santa Clara University. In 1974, he married Eileen Forge and they raised two children in Cupertino, CA.

Ed worked as a chip designer at several Silicon Valley companies, including AMI, Chips and Technologies, IDT and SST. After retiring, he travelled the country on a motorcycle for two years with his tour ending in Vancouver, WA, where he became an avid square dancer with partner Elsie Bartling. He moved to Texas during the pandemic to be closer to his son and grandson.

Ed is predeceased by his parents and his wife Eileen. He is survived by his sons Charles and Edward Paul Jr and grandson William.

Funeral services were be held at St Joseph of Cupertino on August 14 at 1pm. Interment was the following day at Gate of Heaven Cemetery at 10am.


My dad’s funeral is delayed for a few weeks due to logistics reasons. So, going out of order, I’ll be sitting shiva in London Tuesday and Wednesday of this week. Please email, text or signal for my address. I have very recently moved house.

A friend suggested I also do an online session. I am considering logistics and will post further details if I go ahead with that.

Graphic Notation Teaching Tool

This is designed for students with no experience of improvising. The idea is to start with just having one note and dots. Then dots and flat lines. Then gradually adding more notes.

It’s meant to fir the window width, so you may need to scroll sideways if you’re looking at this page with a sidebar.

Your browser does not support the HTML5 canvas tag.
<form id="formElem">
  <label for "notes">Notes:</label>
  <input type="text" name="notes" id="notes" value="C, G">
  <label for "dots">Dots:</label>
  <input type="checkbox" id="dots" name="dots" value="1" checked>
   <label for="lines">Lines:</label>
<select name="lines" id="lines">
  <option value="0">None</option>
  <option value="1">Flat</option>
  <option value="2">Sloped</option>
  <label for "circles">Circles:</label>
  <input type="checkbox" id="circles" name="circles" value="1">

  <input type="submit">
<canvas height="310" id="canvas_images" style="border: 1px solid #d3d3d3;" width="1280">
    Your browser does not support the HTML5 canvas tag.</canvas>

  function drawCircle(ctx, x, y, radius, fill, stroke, strokeWidth) {
  	ctx.arc(x, y, radius, 0, 2 * Math.PI, false)
  	if (fill) {
    	ctx.fillStyle = fill
  	if (stroke) {
    	ctx.lineWidth = strokeWidth
    	ctx.strokeStyle = stroke
	function scoreCircle(ctx, x, y, radius, fill) {}
  function drawDot(ctx, x,y) {
    var dots = document.getElementById("dots").value;
    if (dots ==0) {
      return false;
    drawCircle(ctx, x, y, 5, 'black', 'black', 2);
    return true;
  function drawLine(ctx, x1, y1, x2, y2) {
    ctx.strokeStyle = 'black';
    ctx.lineWidth = 5;

    // draw a red line
    ctx.moveTo(x1, y1);
    ctx.lineTo(x2, y2);
  function scoreLine(ctx, x1, y1, x2, height) {
    var lines = document.getElementById("lines").value;
    if( lines == 0) {
      return false;
    if( lines == 1) {
      drawLine(ctx, x1, y1, x2, y1);
    } else {
      var slopes = [-1, 1, 0, 0, 0, 0, 0]
      var diagonal = slopes[Math.floor(Math.random()*slopes.length)]
      if (diagonal != 0) {
        x2 = x2 + height;
      var y2 = y1 + (height * diagonal);
      drawLine(ctx, x1, y1, x2, y2);
    return true;

  function pickItem(ctx, x1, y1, x2, height, radius, fill) {
    index = Math.floor(Math.random() * options.length);
    switch (options[index]) {
      case 0:
        drawDot(ctx, x1, y1);
      case 1:
        scoreLine(ctx, x1, y1, x2, height);
      case 3:
        scoreCircle(ctx, x, y, radius, fill);
  function drawScore(ctx, staves, dots, lines, circles){
    var canvas_width = ctx.canvas.clientWidth;
		var canvas_height = ctx.canvas.clientHeight;
    var height = 0;
    var stave_height = Math.floor(canvas_height / ( staves + 1));
    var num_items;
    var range = canvas_width / 20;
    for (let i = 0; i < staves; i++) {
  		num_items = Math.floor(Math.random() * 5) + 5;
      height += stave_height;
      //drawDot(ctx, Math.floor(Math.random * canvas_width), height);
      for(let j=0; j < num_items; j++) {
        //  pickItem(ctx, x1, y1, x2, height, radius, fill)
     		//drawDot(ctx, Math.floor(Math.random() * canvas_width), height);
     		var x1 = Math.floor(Math.random() * canvas_width);
     		var x2 = x1 + Math.floor(Math.random() * range) + 20;
     		var radius = Math.floor((Math.random() * (stave_height / 2)) + (stave_height / 2));
     		pickItem(ctx, x1, height, x2, stave_height, radius , Math.floor(Math.random()  * 2));
  function parseForm(ctx) {
     ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
    var allnotes = document.getElementById("notes").value;
    context.fillText(allnotes, 30, 60);
    var notes = allnotes.split(",");
    options = [];
    //var dots = document.getElementById("dots").value;
    if (document.getElementById("dots").checked) {
    var lines = document.getElementById("lines").value;
    if( lines != 0) {
   var circles = document.getElementById("circles").value;
    if( circles != 0) {
    if (options.length > 0 ) {
      drawScore(ctx, notes.length, 1, 0, 0, 0);

    var c = document.getElementById("canvas_images");
    c.width = 0.99 * window.screen.availWidth; 
    c.height = Math.max(c.height, 0.4 * window.screen.availHeight);
    var context = c.getContext("2d");
    //var numGlyphs = Math.floor((Math.random() * 3) + 1) + 1;
    //var blob = new Image();
    //var x, y;

    context.font = "300% Bravura";
    //blob.src = ""
    //blob.onload = function() {
    //    context.drawImage(blob, 0, 0);
    //    for (var i = 0; i < numGlyphs; i++) {
    //        x = Math.floor((Math.random() * i * 50) + 1) + 5;
    //        y = Math.floor((Math.random() * 205) + 1) + 7;
    //        //1f49b
    //        context.fillText("<3", x, y);
    //    };

    //context.fillText("<3", 100, 100);
    //drawScore(context, 1, 1, 0, 0);
    var options = [];
    formElem.onsubmit = async (e) => {


Laptop and Tuba

This post is taken from the lightening talk I gave at AMRO


I have decided to try to solve a problem that I’m sure we’ve all had – it’s very difficult to play a tuba and program a computer at the same time. A tuba can be played one-handed but the form factor makes typing difficult. Of course, it’s also possible to make a tuba into an augmented instrument, but most players can only really cope with two sensors and it’s hard to attach them without changing the acoustics of the instrument.

The solution to this classic conundrum is to unplug the keyboard and ditch the sensors. Use the tuba itself to input code.


Constructed languages are human languages that were intentionally invented rather than developing via the normal evolutionary processes. One of the most famous constructed languages is Esperanto, but modern Hebrew is also a conlang. One of the early European conlangs is Solresol, invented in 1827 by François Sudre. This is a “whistling language” in that it’s syllables are all musical pitches. They can be expressed as notes, numbers or via solfèdge.

The “universal languages” of the 19th century were invented to allow different people to speak to each other, but previously to that some philosophers also invented languages to try to remove ambiguity from human speech. These attempts were not successful, but in the 20th century, the need to invent unambiguous language re-emerged in computer languages. Programming languages are based off of human languages. This is most commonly English, although many exceptions exist, including Algol which was always multilingual.


I decided to build a programming language out of Solresol, as it’s already highly systematised and has an existing vocabulary I can use. This language, Domifare is a live coding language very strongly influenced by ixi lang, which is also written in SuperCollider. Statements are entered by playing tuba into a microphone. These can create and modify objects, all of which are loops.

Creating an object causes the interpreter to start recording immediately. The recording starts to play back as a loop as soon as the recording is complete. Loops can be started, stopped or “shaken”. The loop object contains a list of note onsets, so when it’s shaken, the notes played are re-ordered randomly. A future version may use the onsets to play synthesised drum sounds for percussion loops.

Pitch Detection

Entering code relies on pitch tracking. This is a notoriously error-prone process. Human voices and brass instruments are especially difficult to track because of the overtone content. That is to say, these sounds are extremely rich and have resonances that can confuse pitch trackers. This is especially complicated for the tuba in the low register because the overtones may be significantly louder than the fundamental frequency. This instrument design is useful for human listeners. Our brains can hear the higher frequencies in the sound and use them to identify the fundamental sound even if it’s absent because it’s obscured by another sound. For example, if a loud train partially obscures a cello sound, a listener can still tell what note was played. This also works if the fundamental frequency is lower than humans can physically hear! There are tubists who can play notes below the range of human hearing, but which people perceive through the overtones! This is fantastic for people, but somewhat challenging for most pitch detection algorithms.

I included two pitch detection algorithms, one of which is a time based system I’ve blogged about previously and the other is one built into SuperCollider using a technique called autocorrelation. Much to my surprise, the autocorrelation was the more reliable, although it still makes mistakes the majority of the time.

Other possibilities for pitch detection might include tightly tuned bandpass filters. This is the technique used by David Behrman for his piece On the Other Ocean, and was suggested by my dad (who I’ve recently learned built electronic musical instruments in 1960s or 70s!!) Experimentation is required to see if this would work.


Another possible technique likely to be more reliable is AI. I anticipate this could potentially correctly identify commands more often than not, which would substantially change the experience of performance. Experimentation is needed to see if this would improve the piece or not. Use of this technique would also require pre-training variable names, so a player would have to draw on a set of pre-existing names rather than deciding names on the fly. However, in performance, I’ve had a hard time deciding on variable names on-the-fly anyway and have ended up with random strings.

Learning to play this piece already involves a neural learning process, but a physical one in my brain, as I practice and internalise the methods of the DomifareLoop class. It’s already a good idea for me to pre-decide some variable names and practice them so I have them ready. My current experience of performance is that I’m surprised when a command is recognised and play something weird for the variable name and am caught unawares again when the loop begins immediately recording. I think this experience would be improved for the performer and the listener with more preparation.

Performance Practice

The theme for AMRO, where this piece premiered was “debug”, so I included both pitch detection algorithms and left space to switch between them and adjust parameters instead of launching with the optimal setup. The performance was in Stadtwerkstadt, which is a clubby space and this nuance didn’t seem to come across. It would probably not be compelling for most audiences.

Audience feedback was entirely positive but this is a very friendly crowd, so negative feedback would not be within the community norms. Constructive criticism also may not be offered.

My plan for this piece is to perform it several more times and then record it as part of an album tentatively titled “Laptop and Tuba” which would come out in 2023 on the Other Minds record label. If you would like to book me, please get in touch. I am hoping that there is a recording of the premiere.

Community servers

live blogging AMRO

where have all the servers gone?

Aileen used to run a home LAN which grew into a home server, hosting 60 domains. Domains belong to people. Human relationships are central to all community projects.

Art spaces used to require community ISPs. Some of these have migrated to do hosting for art orgs. Some have migrates to hosting individual artists or collectives.

Some groups use servers as a part of feminist practice, knowledge sharing and collective empowerment. Feminist servers can be intergenerational. They can have joyfulness, reflection, and peer support.

There are still different wants to think about where and how to do servers. Always-on is not necessarily the most important value for arts servers.

Homebew self-hosting is cool again! There are collectives of people doing this. runs a proper data centre. Theyare a membership organisation. They also do operate as service that aims at reliability.

Sharing tech knowledge is a particular skill that not all techies possess.

There are dualities in trying to run an NGO in a capitalist space like the internet. Values about uptime and so forth cause friction. Things break and people get frustrated, so there is serious emotional labour in relationship-based tech services. They are trying to use tools made for profit on a non profit context.

What is the relationship between the server and the community?

User education is important. “The server is a.physical thing. We blew a fuse. Please stand by.”

One group has a mobile raspberry-pi based server. It is currently downstairs. When its on trains, its offline.

ISPs have histories. People working at them encounter users at moments of errors.

Knowledge transmission is always incomplete. Servers are complex and documentation is hard.

Capitalism is an inescapable context. The contradiction this creates is never resolved. Fixing servers can be hard or boring or frustrating.

What if computing was seasonal?

Community server NGOs are chronically underfunded. Membership organisations doing servers make members part owners. This gives a meaningful relationship with the infrastructure and reliability in terms of organisational stability. And data sovereignty.

Self hosting is not safer in terms of data reliability. Back up your data. If the data is necessary for you, then form a plan to preserve it.

How have things changed since serves was founded? People want to form collectives, but its unapid time and effort to document things.

Embrace, extend, extinguish fucks up stable protocols and makes things harder to maintain. Free software companies are also capitalist.

Systems can become hacks upon hacks upon hacks. Even Foss projects can chase shiny overcomplexity. Some building blocks may be politically neutral but systemic tools reflect capitalist values.

Thank your sysadmin!

Systerserver exists for people to learn. They have a system for shared command line sessions so everyone shares a terminal.

A matonaut is now reminiscing about the 90s and that era of websites. In the old days these collectives were about giving access. But now it seems like a lifestyle choice.

arts servers have greater longevity than community servers due to more sustainable funding models. (Oh, to be European!)

Q: Has the war in the Ukraine effected solidarity networks in hosting? What about circumventing blocks? Guides for activists now in effected regions are howto exploit gaps, not how to host. Telegram somehow allows a way to create proxies. This creates dependencies on corporations like Amazon, telegraph etc. How can we regain agency? Can we communalism proxies?

A: Activists in Rotterdam started building up resources. But there’s so much fragmentation. Will USB sticks be a thing? Some activists are still using Facebook because it feels safer than many mastodon servers.

Could mirroring be a useful practice?

What kind of resource sharing would help support community servers? We don’t wish to be islands!

Documentation/ information sharing can be helpful.. Store playbooks in git repos.

the era of websites shoukd be over. Nobody needs websotes any more. We should move on and make text services for text.

its time for an attitude change. Changing philosophy can change terminology can change philosophy can create situated knowledge. We can use this change in mindset to slow down.

Linux community’s are corporatised and isolating.

Q: Ate feminist server communities a service?

A: partially. Artists are relying on etherpad and some other services. There is a syster server mastodon instance.

Farmasoft quit serving schools during the pandemic because they did not have the resources to sustain that useage level. This had implications for teachers who were trying to avoid google docs. But also, it was an emergency and they didn’t have the resource. When should money get involved in these processes?

Data Journalism

libe blogging AMRO

The Evolution of Data Christo Buschek

He does data driven investigation. They won the Pulitzer prize last year.

Data has been using data since the 70s. They used to mostly do statistics. The new idea is data-driven where they use data to discover things.

Human rights research is also often data driven investigation. This is a collaborative process involving technology, design, etc

The process is preservation, exploration, verification and narration

He and some collaborators tried to discover how many people are imprisoned in China in Xinjang. They found camps big enough to hold a million people.

Theystarted knowing that some camps existed, but not much else. Journalists had no access to the region.

Baidu Maps is the Chinese mapping service like google maps. They censor some areas by loading the image and then loading a white box over it. So the journalists decided to first look at censored squares.

They had three types of tiles. Satellite pictures. Watermark images that have no data. And censorship images.

he wrote a script that emulated a human noodling around and ran it across a cluster.

Of 50 million tiles. 5 million were masked. They decided to look for infrastructure that could support camps. This reduced the tiles to 800k.

The next step was verification. This is a human process that takes time. Verification subjects data to due process. It is a creative process.

He wrote a tool for researchers to annotate metadata. They built a rubrick as they looked at the data.

428 locations bear the hallmarks of prisons and detention centres. Around 2017ish structures became permanent.

they had three categories: certain, like and unsure. Certain ones had external verification.

Their output was articles and the data set which was then also used by others. A local activist/ journalist travelled to some of the camps and filmed them.

Christo built the method and tools. He says that humans shapes tools and tools shape humans. He says technology is not neutral. Toolsencode systems of values. He notes that Silicon Valley is extremely ideological. Their tools do not reflect our values. We must make our own tools.

Our tools and systems reflect our social structures. Our communities are organised as open-ended gatherings. Collaboration is central. Tools are.nodes in networks.

Any tool is a positive choice and also a negative trade off of what it can’t do.

investigating border violence, fostering mobility justice: (in)visibilities of arieal surveillance

live blogging AMRO

The Mediterranean isbecoming a militarised border.

Border Forensics is looking at border violence and policing. They are documenting this violence. They rely some on human rights reports and try to augment them with visible data. They are part of network of forensic organisations creating documentation and demanding investigation.

The “left to die” boat was a rubber raft that was tracked leaving Tripoli. They called for help and then entered the Maltese search and rescue zone. 9 out of 72 people died after their boat ran out of fuel and was left to drift for weeks until it drifted back to Tripoli. They had a legal right to assistance and.multiple contacts with state authorities.

A ship wreck in April of last year had 130 passengers which radioed for help and spoke to alarm phone. Alarm phone contacted the EU border frontex, who sighted the boat, but did not help. The Libyan coast card intercepted them and did not help. A merchant boat passed closeby but also didn’t help.

Merchabt boats began to search for them overnight, but nothing was seen until wreckage and bodies were found.

These cases were ten years apart. They were both in a highly surveiled area. Airplanes doing border patrol saw both boats.

There are no survivors from April and thus no witness testimony.

In those ten years, there’s been a shift from sea to sky. Aircraft are used to surveil, but can’t rescue people or bring them to Europe. The duty of rescue only legally applies to boats. The planes radio Libya who capture and mistreat the would-be migrants.

In 2014 Mare Nostrum saved thousands of lives but couldn’t get EU funding. Frontex Operation Tritone was cheaper and covered a smaller area. Their budget got bigger and bigger. In 2018 they launched a new mission, with far fewer naval assets, relying more and more on planes and drones.

Italy and the EU have paid Libya to increase its coverage area.

Frontex is difficult to research and its hard to FOI them.

The presence of drones but the absence of boats is a form of structural violence.

Policies and decisions are also not transparent.

Frontex’s drone is also hard to perceive.

There’s a link between aerial surveillance and increased interception. They want to map their data.

Cross referencing aerial data with geolocation data from the boat is a major technical challenge.

Frontex uses what’s app to contact the Libyan coast guard.

Frontex uses a heron drone. Its hard to tell if a drone has seen a boat on distress by looking at the track. The track also is fragmented. The drone thus escapes oversight.

Aerial surveillance was an infrastructure decision that shows a policy of structural violence. They attempt to escape accountability.

Activism and demanding accountability is the most usefulthing to do.

Toxic Stories

Live blogging AMRO.

e-waste arrives by the trtruckload in some Indian cities. This is disassembled. Another group of people will try to retrieve metals using dangerous, polluting processes. More workers will smelt the reclaimed.metal. They make faucets and like connectors.

However, thrre is a lot of waste and runoff. This is dangerous. Metals end up in top soil.

Yoir smart phone is 54% metal. Mining these causes massive pollution. More than 81% of this metal ends up in an unknown place after being in your phone. Every year, we make 50 millions of e-waste. This is the size of Manhattan.

The US recycles less than 10% of ewaste. Europe is better. (Maybe). The value of the materials in the waste is very high.

e waste is generated in the global north and exported to the global south.

Making computers needs water, fuel and metal. Making chips uses.much more energy than the computer will consume in power consumption during its life.

E waste ends up I’m Acra, where people liveamongst the waste. Workers burn computers to access metals. They were given machines to strip cables, but sold them.

Post industrial pollution also exists in Austria. Old factories have toxic soil and ground water pollution. Some of these toxic places are used by dogwalkers. Could hyperaccumulators help?

Some of the plants are non native and don’t cope well with Austrian weather. But if it did, this would be invasive.

Serpentine soil has toxic dust.

Toxic stories is a collection of an audio archive of people working in remediation.

Earthworm traffic moves soil around which makes toxins hard to measure.

Q: Is gold recycled from e waste because its valuable or because its easy?

A: Different methods get some materials while sacrificing others. So gold may be prioritised. Informal recycling has poor recovery rates. Recycling also is energy intensive.

Recycling could maybe be enabled by making it the responsibility of the producer.

Q: How is labour connected to pollution?

A: Labour conditions in recycling in India is exploitative. Poor people work in dire conditions. The work environment is terrible in Ghana, but displaced rural workers find it an accessible job. Young people aren’t worried are about their health when they start. Its like smoking, said one person.

Q: How has global capital pushed ewaste onto poor countries? Can we change that?

A: There are EU regulations and policies requring European ewaste to be recycled in Europe. But unethical traders claim that they are selling second hand computers. A lot of trash ends up in west Africa.

Capitalism requires inequality. We couldn’t “afford- cheap stuff if we paid globally fair wages. This has implications with regards to externalities, mining, pollution and environmental stewardship.

Recyclers now also have working smartphones.

The price of nickel has spiked in the last year. Hyperaccumulators allow more possibilities for mining as it doesn’t look like mining.

Q: What if you had clothes as a service? Do we own our computers or phones if we can’t modify it? Is there a tradeoff where wecan meaningfully control our phones if we don’t own them?

A: The European Green Deal includes extended producer responsibility. However, meaningful recycling access will need design changes that take end of life into account. Goods should be disassemablable.

India has an ewaste law that’s been in place for years. NGOs had to sue producers. The producers, however, use the informal sector to meet recycling targets. On paper everything is perfect.

Comment: Reduce is the first word in reduce reuse recycle. Badly written software drives the upgrade cycle. Linux is part of the answer.

(In the UK, poor people did not want refurbished linux laptops because it made them feel stigmatised.)