Week 17

April 2015—May 2015

This is a post about weeknotes.

Looking back, planning forward

Facilitated a retrospective for another team, looking back at the last year or so of their project. There were a lot more people than the last one I ran and one of the challenges was how to ensure everyone as heard. I didn't know a lot about the details of the events in their project so it was difficult to try and explore the issues that came up.

Later in the week, I put my project manager hat on and tried to schedule in time to kick-off a project we've been talking about for a while. Using the Eurovision Song Contest as a focus and connecting devices as the research area. We've had success before by having intense iterations with a multidisciplinary team working together which means clearing the decks for a block of time.

Named WebSockets

A little more work on Named WebSocket implementation. During a restless night, I decided to spike switching from the Chrome packaged app implementation to one that uses Electron. It took about an hour, using the quick start which was a lot faster than I anticipated. Since it's node.js, I replaced the WebSocket server code cobbled together from Chrome App samples with the faye-websocket-node node.js library. This is well-tested and also supports TLS so implementing the security aspects of the protocol later on should significantly easier. Deleting lots of code is quite satisfying.

Since it's just node.js under the hood, it was trivial to create a simple CLI command so that the proxy can be run in a headless environment, such as a prototype-radio device platform thing.

The hardest part of this project is getting my head around the things in the system and how they can interact. The proxy runs on a device and can have any number of other proxies communicating with it. Understanding what state the proxy is in is difficult to understand from the logs, because they're just telling you about actions that have happened. Data visualisation to the rescue again! The simple d3 circles visualisation I created last week showed a peer's view of the system - you can't use that to get inside the proxy to see what's going on at a higher level.

I realised I needed an overview of the main data structures so I created a simple dashboard view using d3. It's very simple. Each data structure is an HTML unordered list, where each item in the data is a list item with the id of that object. At a glance, you can see if, when a peer connection closed, the id is removed from the list. Using Electron, it's easy to pass data from the node.js main process into a browser renderer process, showing as a window on the desktop. Using this new view I found a bug where remote peers weren't being removed from the system properly. The list of remotes just increases over time.


It's a bank holiday weekend, so having a lazy on before Berlin next week. Playing around with lissajous a Web Audio-based live coding environment. You use the web inspector console to create tracks and beats and make music. In my case, it was making terrible noise. But it's a start. I had a quick go at creating some sort of UI with it. Basically, you select a circle to set the beat on the underlying track. Nothing fancy, but a start.