• Week 356

    28 October 2019

    Another week of writing: this time, writing a course on HTML and CSS for total beginners. This is slightly more practical than last week’s: more about doing than thinking.

    But gosh, it’s hard. It’s a very short course, and so we’re going at a lick to cover a reasonable tour of the environment. Very quickly, we get into jargon and complexity, despite my best attempts to avoid it. One reason for this is my avowal to avoid jargon when I can, but to never tell you things that aren’t correct. So when I have to introduce a thing as a declaration or property or selector… I do exactly that.

    Fortunately, the browser, and markup, are forgiving environments: they do their best to render whatever you throw at them, regardless of mistakes (and in part for long historic reasons). And we’re doing everything in the browser, without having to install software - CodePen makes for a great beginner IDE.

    I’m also relying a little on asking the learner to trust me in the course of a short article. I hope that’s justified. What I’m really asking them is: “if things have briefly stopped making sense, can you trust me for a little? I promise to bring things into land in a little while - but we might have to briefly leave the ground.” Or, in plain English: I can give you clarity paragraph-to-paragraph, but not always sentence-to-sentence. Perhaps that’s a weakness in my writing style.

    Still, having just written a course about more imperative styles of code, it’s nice to look at languages where I can show a learner the majority of the syntax in a few hundred words - and where the complexity is located in the implementation detail.

    Of course, there are still cans of worms that I’m finding and then having to write my way out of. Writing about CSS, I was talking about styling rules overriding one another, and used this as an example:

    p.intro {
      color: #ff0000;

    I am most familiar with writing CSS colors in the format #RRGGBB, where RR, GG, and BB are two-digit hexadecimal numbers; it’s also what I’ve seen used most in the world.

    And yet this adds extra complexity for the absolute beginner. I have a limited word count, and do I all of a sudden want to lose 100 words to explaining hexadecimal numbers? Not really. So I replaced it with this, for the time being:

    p.intro {
      color: red;

    which lets us focus on the real idea I wanted to write about (namely, how p.intro overrides and extends p).

    In some down hours, I spent some time wrapping my head around KiCad. All my electronics work to date has been done with EAGLE. I’ve spent long enough with that piece of software that I’ve developed a kind of Stockholm Syndrome for it, despite its unintuitive nature (along with a large parts library). But a particular open-source project I’m working on is not ideally suited to EAGLE, especially if other people are to work on it, and I feel that future versions of it may be better supported in an open-source tool. Hence investigating KiCad.

    I’ve never really got my head around KiCad before. Partly that’s time; partly that’s it behaving much more like most schematic capture/EDA tools (where you do one, then the other), unlike EAGLE’s merging of the two functions. It required a shifting of my mental model.

    What helped me overcome this hurdle was Chris Gemmell’s Getting to Blinky 5.0, and I wanted to write about that quickly because it’s helped me thinking about teaching new topics.

    Getting To Blinky teaches KiCad by going through the whole process of making a circuit board. It’s a simple circuit: a timer that flashes an LED, with a coin cell battery. The course takes the viewer through making a schematic symbol, drawing up a schematic, annotating it and matching it to footprints, making a new footprint where one is missing, laying out a board, and getting their board fabricated.

    What I like about the course that it covers “one of everything”: at the end of it, you have done each major task that you’ll ever need to do exactly once. You can then adapt what you’ve learned to your own work. I found it particularly helpful coming from another tool as, at each stage, I was mapping what Chris showed me to what I knew. I like the focus on end-to-end, with a simple (eight component) board - and in particular, teaching making symbols/footprints early on.

    I am not sure what it’s like for the total beginner - it goes quite fast, for sure (although the pause and rewind buttons are underrated features of video content). But for me, it gave me exactly enough of the tour that with a little bit of time each day across the week, I had designed a development board for a potential project from to-to-bottom in it:

    Also, it has a surprisingly good 3D layout preview and raytracer in it.

    This project is to be filed away for November, but it was nice to pick up a new tool, and thinking about how somebody else was teaching it helped me think about my own teaching.

  • Week 354

    20 October 2019

    Weeknotes this week are dry, I’m afraid. I am still writing Longridge. I’d hoped to move onto writing my second course, but spent much of the week wrangling feedback on the first.

    On the flipside, the feedback was all useful, and easily sorted, by and large. It should also help to make the other two courses a bit faster to write, now I have a better idea of what’s expected. But it’s put me back a bit.

    Mainly, I rewrote exercises, edited an interview, drew up some quizzes, recorded one more voiceover, and then two more chunky screencasts that had me deep in Hitfilm’s composite clip editor to tell the story correctly. Phew.

    I did get some time on Tuesday afternoon to spend thinking about an exercise for the second course - actually taking the plan in my head and walking through it myself. The good news is that at least half of it should be reasonably straightforward; however, I’m going to have to solve the second half of the exercise in the course of writing next week. Still, it’s had me ruminating on the issues ahead, so that’s a good thing.

  • Week 353

    11 October 2019

    A week on Longridge.

    I wrote an end-to-end draft of the first of the courses. Primarily, that was writing prose, but it’s more than just long articles: I’m writing a mix of informative essays, the odd quiz, and exercises for learners.

    The exercises were versions of ones I’ve run before, but they prove particularly time-consuming - as well as writing them, I need to run them myself to check they work, and write scripts or articles to describe successful outcomes.

    But they’re done, and now they’re being reviewed by other members of the team.

    I also spent some time on my end of the videos for all three courses. That meant more assemblies of interviews to end the week, once the course content was shipped, and also submitting sample screencast videos recorded at home to see if they’d pass muster with the production team. It sounds like they will - so now I’ve just got to get on with the recording there.

    My home screencast recording setup goes like this: I record screen and audio simultaneously. I use Quicktime Player to capture the screen, and record audio from my external microphone as I do - a Red5 condenser mic going into my audio interface. At the same time as recording the audio+video in Quicktime, I also set the audio recording in Logic Pro, where a simple channel strip is setup on a mono channel. When I finish the recording, I open the video and both audio tracks in a video editor, align the Quicktime audio with the processed audio, and then disable the Quicktime-recorded audio. That way, I get the captured video with the processed audio. It sounds and looks pretty good to my eyes and ears.

    That made for a full week - not much time for much else. Next week, we move onto writing a full draft of course number two.

  • Week 352

    6 October 2019

    Back after a few weeks away, and straight to the studio. No time to build up the boards and stencils that arrived for Dent: instead, I went straight into writing and content review on Longridge.

    I got my head down on writing content so the team could review my style and give me some pointers. I managed a first draft of about a third of one course; I need to wrap up the rest by next Wednesday.

    I also reviewed the interview films that had been shot whilst I was away. The team kindly provided transcripts and timestamped footage to go over, and I had to work out what should go into the final film. It’s hard to do this solely from a transcript - you end up finding that intonation is key, or that sometimes the way somebody’s said something just flows more naturally in a different take. So I sat down with the footage and Hitfilm and hammered out a couple of ‘assembly’ edits - nothing final, and they wouldn’t contain any of the cutaways or B-roll that the video team had for the final film - but enough to get a feel for if the final edit we were hoping for would flow. I know I could have just supplied a script or a cut-list, but it helped reassure me that what I hoped was possible would work.

    In a spare moment, I fixed a firmware bug on 16n that had been nagging a lot of people for quite a while. No great breakthrough on my part; instead, a well-framed bug report suddenly made the issue very clear, and half an hour in an editor got the bug fixed. Now I’m just finding people to help me confirm there’s been no regression, and then I’ll try to package that up into a release in the coming weeks.

  • Week 350-351

    22 September 2019

    Out of the studio, on vacation. Back at the beginning of October!

  • Week 349

    14 September 2019

    Head down on production for Longridge. That meant a few phone meetings with the production team, finalising a few more participants, and lots more pre-interviews with video subjects.

    That’s all done, now, and the video shoots will be taking place over the next couple of weeks.

    I also spent some time preparing a few more scripts for non-interview films, and getting drafts of them out for review. One - just trying to describe in simple terms, the round-trip of a browser request - flummoxed me for a long time; it got lost in hundreds of words on DNS and ended up baggy, boring, and over-long.

    A few days away from it and I found a different approach. I sat down and worked out what the point of this film was - what I wanted learners to come away from it with. I knew this in my head, but needed to emphasise it to myself, so it was time to write out the big ‘beats’.

    Seeing them laid out gave me a slightly different direction on the same story, and allowed me to bring it in well within our time limit. Yes, it simplifies a few things, but it still tells the truth. The change is it now ‘spends’ its time on the key beats, and pulls focus on things that we don’t need to know about (yet). If you write for a living, you likely know this lesson innately; for me, it’s reminder of muscles I need to keep exercising.

    Finally, before I head off for a vacation, I generated a “revision B” of the boards for Dent and ordered them - along with a plastic solder stencil. They should be with me when I return, and perhaps we’ll have more joy. I’ll be head-down writing Longridge then, but a project for spare moments.

  • Week 348

    8 September 2019

    Head down on Longridge this week.

    I wrestled with a script for an animation early in the week, and just couldn’t get it to anywhere I was happy with. I clearly need to zoom back out a level, and reminder myself what work this video is doing. Then I can work out what I want to show in it. I have a feeling the trick is, for what I want it to convey, to say far less. There’s a follow-up piece of text that I can go into further detail if I want to.

    Another four-minute script went a little better, so that’s in review now.

    Otherwise, I’ve mainly been thinking about production tasks: finding interview subjects, performing pre-interviews, writing them up as quasi-scripts for the production crew.

    I’m fortunate that I learned a bit about this during making Future Speak, where Kirsty - the excellent producer - ran a lot of these. “Pre-interviews” are where the interview subject gets phoned up ahead of the ‘real’ interview… and we discuss what we’re going to ask them. This does a few useful things. Firstly, it prepares them for the questions they’ll definitely get asked; for documentary-type work, there’s nothing to be gained by anyone being surprised. Secondly, it allows us to help the interviewee frame their responses in the way we’d like - we can tell them a bit about what our target audience might or might not know, or ask them to be prepared to explain particular things in more detail. Finally, it also allows us to be surprised. When somebody says something interesting or exciting - great! We can dive deeper and add it into our script. Or if an expert in a field offers a better way of framing something than I might have asked - let’s put that in, too.

    I take notes in writing, but ask if I can record them, just in case I miss anything or want to return to them. Piezo proves invaluable in that regard. There are lots of ways of recording audio from apps - such as VOIP calls or hangouts - but I’ve found Piezo to be reliable and remarkably simple; no messing with routing, just click some buttons and hit record. Really useful to have.

    Several interviewees all lined up and prepped, and a pile of short scripts drafted. Week 349 should see me sorting out the final interviews and submitting final scripts.

    But with Dent benched for a little while, that was my week.

  • Week 347

    1 September 2019

    On the projects front:

    • Longridge is getting off to a good start. I’m hunting down contributors, doing introductions, firing off emails. I’m also beginning to write some scripts just to get my hand in and to see if they line up with what the production crew are expecting. Not quite where I wanted to be by the end of Friday, but the team seem pleased where we are, and I had several good meetings with them during the week so I’ll take that and carry that momentum into next week.
    • Dent is going back to the drawing board, but possibly not for a month or so, given Longridge combined with impending holiday. It turns out the current build just won’t behave; I spent some time with a J-Link really prodding at the thing and no amount of work in gdb would solve my problems. So we’ll start again in October.

    I spent a little time getting myself quickly up-to-speed with some new technologies this week - always good to keep my hand in, and at least one of them was an audition for Longridge:

    • I finally wrapped my head properly, clearly around CSS Grid; gosh, what a breath of fresh air. It makes two-dimensional grid layouts just a breeze to write. I also managed to understand its relationship with (and differences to) flexbox. After a long period of reading docs, I now had understanding in my hands. Good.
    • To that end, I managed to tear out all of Bootstrap from this site - which had used it for positioning. Replaced the lot with CSS Grid and Flexbox in under an hour. Very happy with that - and also happy that the trade-offs for users of older browsers are, to my mind, totally acceptable.
    • I continue to poke and prod at Javascript frameworks, and spent an evening (off-duty) kicking the tyres on Svelte. I’m interested in Svelte for how it approaches the reactive-UI pattern, but also how it removes the load on the client by just… being a compiler. Given the Javascript community’s fondness for (or, perhaps, reliance on) transpilation, going the whole hog doesn’t seem that much of a difference. I quickly ported my personal ‘hello world’ of reactive UIs to it, and enjoyed the process, the clarity, and the light page load. I’m still not sure how I feel about the ‘magical’ binding and slightly higher need for simple stores; I found myself using stores and subcription in places React would force me to explicitly pass functions and state down, endlessly, which to my mind is both good and bad., Still, I like its approach to reactivity and its single-file component structures, and especially its approach to performance and webbishness.

    And that was the technology I played with; not project-oriented, but useful for me in lots of ways, and worth sharing here, as a log of what I get up top.

    A good week - but gosh, the next two are going to be busy.

  • Week 346

    23 August 2019

    Longridge is now fairly positioned on the launchpad.

    The structure and broad content of the courses are now signed off; that means all that’s left is writing them (and making a number of films). I had a call about content creation for the project, and that means I’m going to be kicking off equal amounts of writing and production tasks next week. A little bit nervewracking, but we’ve got a plan and a list of things to burn down, and so the job now is to work through it and make sure everybody’s happy. I’m going to be making some spreadsheets to keep track of everything (or, maybe, some crazy walls)

    I also kicked some tires on an exercise I was thinking about using on Longridge, and everything seemed to work as I hoped, so that’s a goer. One less thing to worry about.

    Over on backburner projects, my prototype PCBs for Dent arrived early in the week, along with the stencils for soldering it up. So I spent Monday bringing the board up: getting the paste applied, getting components on the board, baking them on, and then looking to flash the firmware.

    Which, not entirely unexpectedly, just didn’t work at all. Not a complete write-off - I can see the board over SWD, but no joy flashing it, and the main thing that happens when you power it up is that the microcontroller gets really hot. That’s… not the desired functionality.

    I wondered if it was my solderpaste, so I built up a second board largely by hand, with only hot-air used for the QFN MCU, but no dice. I went back to the drawing board - EAGLE - and decided that I’d definitely been having some strange ideas about how the schematic should come together. I drew up a Revision B, from some better reference material, and perhaps I’ll send that off soon-ish and we’ll try again. I also spent a while double-checking everything I could about flashing Atmel SAMD51 chips, and learned a fair bit: I might well use a different toolchain next time around.

    Anyhow, it’s probably worth another iteration, so that’s a thing to be going on with. It’s going to be a few weeks before new revisions will arrive, which is a good thing, as I’m going to be busy! A long weekend coming up; Week 347, we begin some typing in earnest.

  • Week 345

    18 August 2019

    A quiet week spent exploring with my hands.

    I continued my explorations of Dokku as a hosting option, spending some time looking at best-practice for deploying Wordpress to it - and then working out how that lined up with my own preferences around deployment (notably, specifying Wordpress as a dependency in composer).

    That was a useful exploration - getting hand dirty with some servers, turning something I’d often end up doing by hand into something more automated - and I at least got to something sensible and working by the end of the week.

    I spent a day documenting what I’d done. Not ‘documentation’ that resides in the text files I use as a digital notebook; ‘documentation’ other people would find useful. That’s a challenging thing to write clearly and unambiguously. The end result was perhaps too long, but I think it explains itself clearly enough, and includes appropriate code snippets and samples.

    I hope I’ll publish that somewhere next week. If nothing else, it was good practice to write some real documentation for something technical, multi-stage, and complex. I’ve got more writing coming up this month, and it was good to get a handle on my pace of writing (and, for technical work, getting a feel for how often I need to bounce between edits and writing). And, who knows, it may still be useful for someone.

    On Friday, my circuit boards for Dent arrived from China and I set about assembly. These are the smallest component sets I’ve ever had to assemble - the 0603 is all fine, but the QFN microcontroller has been a pain. (QFN is probably the first of the surface-mount IC packages that is ultra-hard to do by hand, as it has no exposed pins. It’s really designed for a robot and oven to do).

    I’ve been practicing with solder paste, stencils, and hot air, and whilst the first stage of my assembly seemed to go OK, the usb socket on the board has possibly not gone in correctly, leading to some powering issues, a very hot chip, and a frustrated me to end the week with.

    Still, I have an idea where to take it next week, and I solved a few problems at the firmware/bootloader end for once I’ve got the chip up and running.

    Quiet, but busy, and some good studio conversations with my colleagues throughout.

  • Week 344

    11 August 2019

    After an intense week 343, 344 was much quieter. I got some feedback on the work so far on Longridge, so spent another afternoon or so wrapping up my work there, going over that feedback, adding some new things, and sending it all off for approval.

    A box of parts arrived for Dent. Not much happening there til the prototype boards arrive, however, so that’s sat on my desk.

    In “learning things” time, I spent a little while exploring new deployment options for servers. In particular, I spent some time looking at Dokku, a containerised deployment platform that installs to a greenfield server environment and then allows deploys via git pushes. It uses Heroku-style ‘buildpacks’ to provision and configure server infrastructure. I’m not sure I’ll move to it just yet, but a small amount of work got me a setup that will compile Hugo sites upon deployment and then point nginx at the deployed folder. Useful to consider as a way of gardening future servers, and also of standardising deployments and tools for myself.

    And at the weekend, I saw in this picture of Richie Hawtin playing live… that he’s got a 16n as part of his rig (spot the faders between the tangle of cables that is his modular synthesizer, and the little 303-clones by his waist):

    I was pleased and proud of that.

  • Week 343

    4 August 2019

    A busy week: lots of work, not a huge amount to say, as a result.

    I spent four days at After the flood on High Vinnalls. This was a product development and data exploration exercise. I worked on exploring some datasets for an ongoing client project over theirs, building tools to quickly spelunk around in the data and establish signal, noise, and see what other things would reveal themselves. Not in order to visualise them, necessarily, nor to make a data-exploration product. Rather, the exploration was to support product development and invention. What products might be possible? Does the data support various ambitions?

    ATF presented to the client at the end of the week, so it was an intense few days of thinking, sketching, and coding. Really good to be in the room working closely with designers as we tried to understand the shape of what we’d been given to work with.

    In amongst that, I went up to Leeds on Wednesday night to spend all day THursday on a workshop at the University for Longridge. The goal of the workshop was to devise the structure and outline of three short courses I’d been writing. This too was very, very intense; I think we made good progress, but I’ll need to return to what we did in week 344 to finish up a few last things - and to be able to look back on it with the benefits of some perspective!

    I also got a goahead at the weekend for an initial exploration into Dent, which may, or may not, turn into a project in due course. For now, it’s a quick pass to just see if anything is possible. This is a small hardware project - very much something on the side, but a nice backburner project if it comes off.

    Phew. Busy, busy week.

  • Week 342

    28 July 2019

    Longridge is really beginning to motor. I finished writing a the initial preparatory work for a workshop in Week 343. That was harder than planned. Lots of variables are still up in the air, and the later stages of the work are highly dependent on these ones; as a result, I sometimes get tangled trying to think about all the possible outcomes. But: I got enough done to generate the raw materials I was required to for the workshop, which was most important.

    Also, the topic area is now well established around in my head, which means I have lots more thoughts still unwritten - some aren’t quite ready for that, others might emerge in the right context. I think that’s all fine: it’s the right place to be in at this point, and will be more things to feed in to the workshop next week.

    Towards the end of the week, a short piece of work for After The Flood came in. I’m going to be spending the rest of Week 343 with them, working on some product exploration around data for them - coding, talking, thinking work. Looking forward to working with that team again.

    I also have a small hardware project that has had some external encouragement to suggest it’s worth getting to the end of phase zero on it. Phase zero is, I suppose, the point where something reveals if it’s going to be A Thing or not. Sometimes, you do the work, and there’s just not a product there (or not one worth building); better to find that out with as little effort as possible. I’m going to finish up this exploration phase and see where it lands. For now, that means getting some PCBs spun and assembling them when they arrive.

    My little React prototype is in good shape. Something clicked and I tore out lots of component-spaghetti. Now there are just enough components. All of a sudden, passing state down looks tidy, rather than baroque. I spent some time adding a few little features, and continuing to refine my knowledge of new browser APIs. It still feels like a delight to find so many browser APIs being generally supported - I come from an era where most of the Good Stuff just wans’t standard enough. And, on top of it: the little tool is beginning to feel usable.

    And that’s about it. Week 343 is a busy one: in Leeds on Thursday for Longridge, and at ATF for the rest of the week.

  • Week 341

    20 July 2019

    I kicked off work on Longridge this week, with a remote meeting to go over the shape of the initial work, and some of the approach. That’s given me some grounding, some ideas for a deadline at the end of Week 342, and - most importantly - some homework before a workshop in week 343. That homework lead to some planning, research, and an afternoon of kicking tyres on the internet - amongst other things. I actually need to check what I can say about Longridge - I think I can be reasonably public - so I might describe that more next week.

    I spent a day brushing up on the state of web development in 2019. I’m a lapsed front-end developer back from the days when that primarily involved deep knowledge of HTML and awful, awful browsers. (I definitely have built some IE6-compatible sites in my time). Since then, I’ve seen front-end change a lot, and done a nice pile of work on Captionhub with the HTML5 media extensions and spec. But there’s still new things to learn, so I spent an afternoon bringing myself up-to-speed with CSS Grid. Gosh, it’s good, isn’t it? It solves a problem elegantly, and still gives - in many situations - completely acceptable fallbacks when it’s not available. A really elegant API, and a nice bit of technology. I have a small backburner project that I’m using to learn new things on, and I spent some more time on that this week, too; it’s nearly hitting a nice alpha point, so perhaps a concerted day or two in the future will push that over the hill.

    It’s nice catching up with technology once it’s a little established. I subscribed hugely to the notion of choosing boring technology. I’ve never been let down by boring technology, and, some days, it’s been reassuring to have my bacon saved by not picking something that goes out of fashion as fast as it came in, or doesn’t have support, or just ended up being the wrong horse. It’s why I still am entirely comfortable shipping Rails projects: it works, it’s expressive for developers, Performant Enough, and gets web-apps based around shipping content to/from databases over HTTP out the door quickly. Uncontroversial. So rather than hurtling to stay up-to-date with trends, I’m comfortable keeping one eye on them, and the other on the Unexciting Present. I’ll read, think, compare, but committing to using them is a very different process. Now that I’m in a lull, it’s time to catch up a little and explore.

    I also shipped a few small pieces of code related to things I’ve been doing recently.

    Firstly, some Javascript: wxr_to_json is a small command-line node tool for converting Wordpress eXtended Rss to JSON files, simply for ease of processing. It’s a little opinionated - it flattens some one-item arrays into objects - but it works very well for large WXR dumps; v8 and xml2js are very, very quick.

    Secondly, some Ruby. I packaged up a gist by Stefan Daschek into a gem to use as a Capistrano plugin. It’s ideal for deploying static sites (including build processes) with cap: it makes a clean local checkout, gives you hooks to run build processes, and then uses rsync to move built content to a server (and lets you use all of cap’s versioned deployment tools). The code worked, but it felt cleaner to turn it into a gem, rather than a lib file floating around my repository. So I finished the bundling job and wrote a pile of documnetation. No idea if either of these will be useful to other people, but they’re easily shared. So let’s do that, then, and perhaps someone else will find them useful. (Why are you using a server and not a CDN for a stic site, you might ask? To avoid yakshaving, primarily. Change one thing at once!)

    And that was a week.

  • Week 340

    12 July 2019

    A good week! Most visibly, I updated the case studies on this site with lots of new projects over the past three-and-a-half years. Really pleased to have these write-ups done: they illustrate lots of nice angles on my work, and I’m glad to show off Captionhub in detail.

    Under the hood, I’ve moved everything over to Hugo and a lot of static files. That’s been a largely delightful process.

    I got a little blocked at deployment - I was hoping to move to some kind of CDN-backed deployment, but things were getting a little complex, so I simplified the problem, and just deployed to my existing host.

    That involved some neat wrangling of Capistrano. I like cap simply because I use it everywhere, be it for Wordpress (with the composer plugin), Ruby, or static sites. It versions directories, allows for rollbacks, and is a neat layer of glue around ssh.

    For this site, I took this sample rsync plugin, and then wrote my own cap tasks so that each deploy checks out the clean site to a temporary folder, runs yarn, runs hugo to build the site, rsyncs that to a server, and finally updates a symlink. It didn’t take long to have that running in my current setup - nice! I might wrap up that rsync plugin into a proper gem next week as nobody seems to have done that yet.

    Anyhow, enough about infrastructure.

    In new work news, it looks like there’s a writing project - to be known for now as Longridge kicking off next week, and that’ll run in the background for a couple of months. I’ll have more to say on that one in due course, but for now, I scheduled in an early workshop and some onboarding calls.

    However, I’m also looking for new projects to run in parallel with that. Ideally, something more technical - prototyping, exploration, or communication and technical consulting. Themes I’m particularly interested in: sound, video, and interaction with those; connected objects and whatever we’re calling “IoT” now; and, perhaps most vitally, tools to empower, enable, and enrich. Work on tools like CaptionHub and instruments like Twinklr and 16n scratches the same itch: giving someone the tool to do work with, to create, and to do things I couldn’t even imagine. I’m interested in continuing to explore that space. get in touch if that sounds like it’s up your street.

  • The case studies on this website were getting a little stale. No more! I’ve just published lots of new case studies of individual projects over the past three years.

    The big headline that I’m most keen to talk about is a long, detailed writeup of my work on CaptionHub - a project I worked on for 3.5 years, known in this feed as Selworthy. CaptionHub is an online tool for collaboratively captioning and subtitling video. I served as technical lead and pathfinder, taking the initial idea - the “what if?” - to a prototype and beyond into a shipping product, whilst the team grew and the product acquired clients. The write-up is detailed not just because of the length time I worked on the project, but because of the way the product changed as it developed and grew in scale. It’s a project that shows the breadth of my capabilities well, and the finished product is something I’m very proud of.

    But there’s lots more in there too. Highlights include: an open source tool for musicians; teaching on the Hyper Island MA; building a digital musicbox; creating a Twitter bot for an installation at the Wellcome Collection.

    The write-ups all include extended thought on process, and, of course, link back to the relevant weeknotes that I wrote during the process.

    You can find out more at the updated projects list.

    I’m currently looking for new projects to work on: technical leadership, early stage exploration, communication of ideas, are all areas I’m keen to continue in. Topic areas I’m particularly interested in include building tools for creatives and professionals, the bridge between the physical and digital, and audio and video. I’ve written more about my capabilities here.

  • Week 339

    8 July 2019

    I wrapped up the order for Thonk at the beginning of the week when the final parts arrived from China - another excellent job from AllPCB, after some wrangling over my slightly unusual Gerber files. So that was good to get shipped and invoiced.

    I also wrapped migrating the Foxfield site to Hugo and Netlify. Whilst I’ve moved a few sites to Netlify now, this was the first Hugo port, so getting things like the RSS feed behaving, and automatic build happening, were good to wrangle on a smaller project than this site.

    Speaking of this site, I finally started the big write-up of Selworthy. Unsurprisingly, this took longer than planned - primarily, to find a through-line and plot for describing it, and also to fact-check it. Fortunately, that’s an area where Weeknotes come in handy! I’m going to continue a second pass in week 340, but for now, these are pretty much there.

    I had a few phone calls with people I’d been speaking to about a couple of projects. No work really there - so making sure those don’t overrun - but good to consult at early stages if only for half an hour, and perhaps a project may emerge in the nearer term there.

    I also spent some time writing some Go. I know, deep down, very, very little Go, but it felt like it might be useful for a script I had an idea for: fast, built-in HTTP library, compiles to a single binary. So I spent half a day writing a script I could probably have written in a hour in Ruby in something new. I greatly enjoyed the process, in the end: the tooling available makes it nicely straightforward, there are good docs, and there was lots to enjoy, such as gofmt everywhere, and slices. A pleasant afternoon feeling competent and productive at code.

  • Week 338

    1 July 2019

    I’m making progress on the latest Thonk order, but kitting is taking a little longer than planned, broken up over the course of days, as parts arrive, or inaccuracies in BOMs reveal themselves (notably - when multiple suppliers are involved). So I push forward, doing what I can when I can, and spending the rest of the time on other work.

    That other work has included overhauling some of my websites - and where, and how they’re hosted. I’m trying to work out I can offload to simpler hosting setups in order to reduce my workload and responsibilities. That’s included porting a few sites from Wordpress to Hugo and moving to CDN-style hosting, through services such as Netlify.

    Of course, by moving to flat files, I’m not locked in to those services: HTML is HTML, and can be hosted almost anywhere. So the work to simplify and strip down actually means I can be confident that should my hosting needs change, hosting them anywhere else is also straightforward.

    Hugo’s been really satisfying to work with. I’ve poked at a fair few static site generators in my explorations before settling on this. The decision making came down to a few points:

    • I’d love incremental-build (where only dirty changes are compiled) to be working, but even SSGs that say they support it don’t really. So, rather than prioritising incremental build, why not prioritise pure speed? Hugo is very, very fast.
    • I like that it’s a compiled Go binary; it works “everywhere”, is easily portable, and doesn’t require huge module dependencies just to run.
    • Because it’s precompiled, it doesn’t have a dynamic plugin structure. That may sound limiting. But, in fact, it forces me to do more with ‘just template language’. The Go template language is a bit idiosyncratic, but I like templating languages a lot, and it forces me to think about markup and structure, rather than just bodging everything with dynamic code. I mean, I used to work with Velocity a lot, so I’m used to getting a lot out of limited tools. (I should note - Velocity was… 13 years ago. I’d rather not ever use it again now…)

    And, of course, by getting me to reduce content to Markdown and templates, not only is the output easily portable, but the source code is also relatively easily portable - if I ever move away from Hugo, obviously templates will need rebuilding, but the content is in a neat portable format - not tied up inside a database schema that will need exporting.

    So that’s been productive, and largely changed my opinion on SSGs for my own personal use.

    I greatly enjoyed playing with Ableton’s Learning Synths earlier in the week. Not just because I’m interested in the subject area, either! It made lots of smart pedagogical choices that I really enjoyed, as someone thinking about explanation and education a fair bit:

    • before introducing anything technical, start with abstract tools and aesthetic output. In Ableton’s case, that meant: boxes that make noises as you drag around. Things that sound satisfying. Descriptions of things you’ve heard. Supply the learner with context for what you’re about to present.
    • only then is it time to start mapping those things to terminology such as pitch or timbre.
    • using pitch to illustrate modulation options - envelopes and LFOs - makes it very easy to hear their input. Even though other controls are more common destinations for modulation, starting with pitch makes understanding the metaphor clearer, quicker.
    • making all the later examples Just Work with any attached keyboard attached is a superb idea

    There’s so much care in the implementation of the project, too, from the delightful animations through to the richness of the tools. And, a common strand with Ableton: note their willingness to promote applicable knowledge, rather than their own tools, in their education work.

    Full marks, and ideas I’m sure I’ll keep thinking about.

    And that was Week 338.

  • Week 337

    24 June 2019

    On Wednesday, I went over to Method. They regularly get outsiders in to give lunchtime talks, and they asked me to deliver something for them. I worked up an edit of “How Computers (Don’t) Think“, a lecture I do for my Hyper Island students around “AI”, Machine Learning, and implementations of it such as computer vision or speech recognition. Of course, as the title suggests, it also dives into the language and manner in which these technologies are communicated, unpacking what Marvin Minsky called suitcase words, to understand that more often than not, we’re talking about counting, arithmetic, or statistics rather than new forms of cognition. (Mike Mallazzo’s recent The BS-Industrial Complex Of Phony AI is a good point of reference on this). On the way, we took in MENACE, Clever Hans, and looked at other futures for AI beyond lazy Skynet metaphors.

    Re-editing and prepping that took a moderate amount of time, but the effort was definitely worth it: the talk came out the tightest it’s ever been, and better suited to a design-agency audience. I was particularly pleased to be able to talk to one of Method’s machine-learning experts (of the very much non-bullshit kind) who clarified a few points for me but otherwise was highly enthusiastic about the accuracy and clarity of the talk.

    What else?

    I spent an afternoon ordering parts and components for a new Foxfield kits run, which also involved a while fettling gerbers and liasing with my Chinese producer; I do some funky things with silkscreening that aren’t always straightforward to produce. That’s all ordered now, so should be coming together in the coming weeks.

    I finished my studio move: all the cruft is now tidied away on storage shelves, and my storage boxes have gone. Glad to have all that dealt with.

    Beyond that, some good conversations; notably, a pleasant catch-up with Max from After The Flood, about design, strategy, and the various roles that agencies serve for their clients.

  • Week 336

    14 June 2019

    I think what I’m doing at the moment is akin to gardening: tending to things that need tending to, spending time in my workspace, going at the pace of things around me. Perhaps that’s a little poetic, but that’s where I am right now: resting and reorienting, spending time on many little things.

    I was on holiday until Wednesday, so a short week. I had some really pleasant meetings on Wednesday with a couple of colleagues; one a more generic catch-up about life, work, and process, and the other, a chat with Gabi from Hyper Island about what we might turn our attention to next year. It was great to hear feedback, and exciting to see what might be next - and to start thinking about what topics we might turn to.

    Some PCBs cleared customs from China, and so I built up a small personal project, which appears to be working correctly (good) and will get put into place next week.

    I worked on a pull request for the monome Ansible documentation (which is not currently live yet). A new mode - a port of Earthsea - is nearly ready to go live in the main branch, and a while back, I worked up some documentation for that. I think documentation’s an important thing, especially for tools and instruments; it’s all too easy for us to work on new features without thinking about explaining them. So whilst scanner darkly worked on the code, I wrote some docs. I spent my flight back from Berlin on Tuesday making a few new images and updating the docs to reflect the latest state of the patch. That got merged in and will go live when the new firmware is completed. A nice community contribution to be able to make in my downtime.

    And, to wrap up, I did a quick stocktake to work out what I needed to order for a new run of Foxfield kits. With that out of the way, I can put a few orders into China and get the house in order.

    Not much else to report, in a good way. Reading, clearing up, admin, ordering storage for the new studio.