Week 340
12 July 2019A 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
, runshugo
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.
Latest work case studies, summer 2019 edition
11 July 2019The 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 2019I 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 2019I’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 2019On 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 2019I 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.
Week 335
10 June 2019I had a few meetings throughout the week, speaking to somebody about a very early-stage startup, and the role technology might play in it. Nothing very firm right now, but an interesting conversation with an interesting peer, which, right now, is exactly the sort of thing I have time for. Also, a quick conversation about something that may become more concrete in the coming weeks - but it’s at that level of liklihood that doesn’t warrant a codename yet.
I also spent some time on Thursday evening comparing notes with a former colleague about particular aspects of design, and sharing what I’d learned in my career so far around that.
I moved studio this week. I’ve shared with the PAN/Location Games crew for about five years, and they’ve been excellent studio mates and good time. But an opportunity came up for a space perhaps more suited to my freelance needs, so I’m now a couple of doors down - still inside Makerversity - with a small gaggle of freelancers in a shared studio space. It’s a really nice crowd, and I’m hoping it’ll suit my needs and practice well.
Finally, a bit of tinkering with some SAMD51 microcontrollers - the big brother of the SAMD21 chips I’ve been playing with. This are Cortex M4F chips, with floating-point support, and Adafruit have ported the Teensy Audio library to them. So I’ve been tinkering with running some(body else’s) DSP code on them, and seeing if they’ll make a suitable generic bare-chip solution for audio projects… with USB firmware upload, of course.
The project-based work I do always leads to an ebb and flow, and as periods of deep attention end, it’s useful to spend some time in reflection. So I’m not rushing into any new projects too fast. I’m taking a brief breather from client work, working on some personal projects and exploration. I’m collating past project work not just for my website update, but also for my own contemplation - it’s useful to look back on a body of work. And I’m spending some time tinkering with new things, rather than just skimming documentation before I get back to work. Alongside all this: conversations with new people, catching up with peers and old friends. Stocking back up after a period of flow.
Week 334
31 May 2019A quiet week in the studio, looking to the future, and taking some downtime.
I spent some afternoons writing up a fair few more projects. No, they’re not live on this site yet - there’s one big one to go and then the copy for the new site is largely in place. Next up will be sorting out the infrastructure and deploying it!
As part of that, I added a simple
Makefile
to the application to handle some basic tasks, and, following Alice’s example wrote a simplemake week
task to make a new blogpost file with the correct week number. Good!Otherwise, I spent time meeting colleagues and peers and having a good chats about all manner of topics; good to reset my head, open up some new ideas, think about some new topics, and root myself back in the world. A few tickles of potential work via email, but mainly, a week spent tending the (metaphorical) garden.
Next week: office move, some more meetings, starting to get my head back into work again.
Weeks 332-333
28 May 2019All change!
The work I was doing on Highrigg wrapped up. Between weeks 332 and 333, I wrapped up my end-to-end demo, with a fully working backend, front-end authentication, and some basic live updates. As well as the text documentation, I recorded a quick screencast of the demo in operation - that’d make it easy to share with colleagues who couldn’t run the software on their setups.
And with the alpha goal hit, my contract came to an end. So I’m taking a bit of a breath, and wondering what’s next. For now, that involves wrapping up a variety of small personal pieces of work - notably, an up-to-date version of this website with several years’ worth of projects written up!
I’m also moving studio. Not very far - a new space has come up at Makerversity, so, after several years sharing with current studiomates, I’ll be moving a few doors down into a small space with some freelancers I know. It suits my needs well right now, and will be a lovely bunch to share a space with. Many thanks to Ben, Sam, and the rest of the PAN/Location Games crews for the past five years.
I also had a prospective meeting about a small workshop which sounds positive, so I’m working out how best to fit that in around studio change-around and some upcoming travel.
And, of course, this all means that I potentially have upcoming availability. If the sort of thing I do - technology strategy, prototyping engineering, interaction design - sounds like a fit for you, now’s a good time to get in touch!
Week 331
12 May 2019A short week, owing to a bank holiday at the beginning and a day largely not working at the end.
Over at Highrigg, I worked on the spec from last week, getting something closer to a list of things to be achieved, as well as making it easier to specify what other assistance we’d require. I met with some colleagues to share that and understand how best to secure that assistance.
I also had some technical successes: fleshing out my GraphQL service backend and, after some assistance spinning up some Google Cloud services, rewriting a service to store files there (rather than locally) and auto-update them. All the
yarn
tasks to do that are all completed - now I just need to set up whatever the equivalent of a cron job is to run it. And, on another piece of work, I deployed some updates around error logging. Finally, we reviewed some colleagues’ excellent UX research around some changes we were proposing, and gained useful insight into both those changes, and wider issues effecting a particular slice of end-users. A productive couple of days!On Thursday and Friday, I reached feature-parity on my port of this site to Hugo, and also managed to port all the legacy content over, I think. So at some point, I’ll consider swapping over, and possibly refining the appropriate
rsync
incantation. But I’d also like to spend some time writing up all the projects that have happened since Rubato, if only to see if this new platform works a little better.Anyhow, a good few days.
Week 330
6 May 2019Highrigg continued: a series of meetings with partners, an excellent lunchtime lecture and discussion, and more programming.
After a day spent wiring the backend I started putting together last week with the front-end, I ended up with a shell of an application, and at least one screen with real live data. Which was the time to hit the pause button. Why? Well, I was beginning to tip over from learning (about the project) and into production, and it’s not quite the right time for that yet. What I was learning was that it was probably not a one-person job, and it’d go a lot faster with a more experienced React engineer focusing on the client implementation. I was also learning what pace of work would be like on it, and already gaining some confirmation that the architecture I’d settled on was sensible. I was also exposing some of the requirements not captured in our initial documents - for instance, approaches to live updates and data push - that only became more obvious as I began implementing. So that’s something to turn into specification in Week 331.
In the rest of the week, I spent some time exploring updating this website. I’m aware that there’s a long backlog of projects to write-up (especially Selworthy), and I’d like to make it easier to do that. At the same time, I also think I could probably move to something like a static site generator, if only I could find one I could settle on. That’s some work, but would then mean that all my content exists as files, and is relatively easy to port to other platforms in future.
I settled on Hugo. I’ve used it on another project, it’s remarkably fast, and whilst its compiled nature means a lot of implementation comes down to template tricks… it also means it’s not the ‘piece of string’ that Javascript-based engines can be. A solid day and a bit of coding got me to an end-to-end implementation of this site, with all the blogposts up and running, and most of the work done to start importing project pages. When they’re done, it’ll be time to consider making the switch, and also seeing how easy it is to write up new projects. But I’m hoping it’ll be reasonably straightforward. Also: pleasant to work on a new, greenfield project.
Week 329
28 April 2019A four-day week after the bank holiday.
Two days at Highrigg. Last week, I was forcing myself into a deep dive on in React, building a prototype front-end that talked to a third-party API. This week, I decided it was worth introducing our own server-side API between us and the third-party.
This decision - which my colleague Lachie helped me come to, in a highly useful brief rubberducking session - came about for a few reasons. Firstly, so we could separate some responsibility, and make the front-end code a bit less brittle. It also meant that if we wanted to start using other service - notably, some internal data-sources - rather than making growing number of calls on the front-end, we could keep front-end calls down and instead combine all the data from multiple server-side calls into a single payload. That also means we can take a little bit of responsibility for caching in the right place - the server-side.
With that decision made, I wanted to write just enough code to confirm that I’d picked appropriate tools, as well as architecture. I began exploring building a small GraphQL service. GraphQL is very trendy right now, but it feels like an appropriate fit. I’m making something resembling a small mobile app, and being able to serve up all the data for a ‘page’ or ‘view’ in a single lump is ideal. My data model is also fairly hierarchical, and largely read-only, which made life simple.
Unlike last week’s battles with React, this work went more smoothly, and it turns out that I don’t just like the idea of GraphQL, I also really like the implementation. By the end of the second day, I had the beginnings of a service shelled out. More to the point, I’d done enough to decide that this felt like a viable technology to use for the project going forward. I finished up my technical review documents with this knowledge, and updated some architecture diagrams.
On Thursday and Friday, I finished bagging up a run of Foxfield kits for Thonk, and spent some time in the workshop - firstly, starting to brush up some woodwork skills, and secondly, building up an electronics prototype. This second electronics prototype was another SAMD21-based build, which I’ll probably write up, to share my approach for building these boards. It worked first time - and also confirmed that a new footprint was highly viable for what I wanted to do with it.
Week 328
22 April 2019Lots of meetings at Highrigg, across a range of projects; some good time thinking through design interactions with colleagues, and then, around that, spelunking an API I’m coding against.
At the same time, forcing my brain through the React mincer possibly faster than is ideal. I am finding getting up-to-speed with React challenging, and often end up frustrated.
Learning new things is hard, yes, and it’s of course sometimes the work of a technologist to stay up-to-date. What I’m finding hard is the gulf between the basic tutorials and guide (which I’ve completed and re-read a few times) and the real-world project I have to operate in. I know this means I haven’t fully internalised the information - going from knowing to knowing - but it’s a while since I’ve felt like this. It doesn’t help that it feels like something I ought to have some faculty with, as a former front-end developer.
Why am I putting myself through this? Because I think it’s important even if I’m spelunking or prototyping to work in the platform other colleagues are most familiar with, and inside a React+Typescript shop, I think it’s reasonable to work with those. (They also, lack of familiarity aside, seem like highly reasonably technology choices). There’s real internal value to playing ball, especially in a larger organisation, and so a balance between ‘output from prototyping’ and ‘lasting value of prototype’ needs to be trod.
We’ll get there. But a frustrating few hours trying to achieve things I know I could do in other platforms or languages, and resisting the urge to chuck in the towel.
On Thursday, I found that Fedex had failed to deliver parts for a Foxfield run, so delayed that until next week. I spent some time in CAD and lasercutting, wrapping up a prototype panel, and then finishing the electronics of the prototype I’ve been working on. This went well: my workflow from panel to cutter is much tighter now, and a single iteration got things spot on. The prototype is working well, too. Time to make a decision about that prototype soon.
And then, a long weekend. Back Tuesday for a four-day week 329.
Week 327
14 April 2019Highrigg continued. There’s not a lot I can really say easily in public about my work there; suffice to say, an amount of prodding at code, exploring APIs, discussing interactions with colleagues, and drawing up a technical overview of a future product.
On my couple of days in the studio, I made good headway with the electronics project I was working on in Week 325. I managed to get a better understanding of flashing the device over SWD - and managed to do it with a BlackMagic Probe, which is a more affordable, open-source alternative to the full JLink (though the Segger tools are excellent). By the end of Thursday, I could program the bootloader and application code via
gdb
. I also finished porting the code over, and discovered the board worked entirely correctly. A few pin alterations in the firmware, and it looked like it was end-to-end working. I spent a little while thinking what programmer or test boards might look for it, and ordered some material to laser-cut a front-panel in week 328.Broadly, though, I’m quite excited, as the whole SAMD21 unit can be placed into other projects in future relatively easily.
On Friday, I started working up an order for Thonk of some Foxfield products. That entailed a quick stocktake, work out what I already had lying around, and then ordering parts from Mouser and a few runs of PCBs from China. I also stuck on a new prototype to test some EAGLE part layouts I was playing with, potentially as a future revision to 16n.
I also had some nice meetings this week. On Thursday, I had an excellent chat with Ben Pawle from Nord. Ben and I discovered we were both teaching on the same Hyper Island course, so he suggested catching up - last time we’d spoken was at an IoT Coffee Morning that Matt Webb ran. It was great to talk to another practitioner; we talked about design practice, and making bots, and balancing own work with client work, and it was good to be reminded I’m not the only person doing this.
I also spent some time with a colleague at Makerversity who’d initially asked for some assistance with ESP8266 - but we ended up having a deep dive on designing the connected component of IOT products, and it was good to be able to share some experience across that shape of product design. Namely, I ended up recommending against technical complexity too early in the process, and instead we looked at doing the bare minimum to get to end-to-end - and to find out what making a product connected felt like. By doing that, you get to discover surprises on the way sooner, rather than engineering to spec and not leaving space for serendipity.
Week 326
8 April 2019On holiday. No weeknotes! Back for week 327.
Week 325
1 April 2019At the beginning of the week, I made headway at Highrigg with a code integration. I don’t normally go in for code generation, but for a quiuck prototype, feeding someone else’s Swagger-based api into
swagger-codegen
feels like exactly the right thing to do (and, of course, just what Swagger is designed for. And: it largely worked! By which I mean, we had a command-line Typescript demo in around an hour. That means I can take a stab at prototyping something else in due course, and perhaps move to something more bespoke in time. But it’s a starting point, and nice to see all the moving pieces working.I also continued to work on wrapping up the workshop from the week before with some review work, as well as pushing a web project a little further forward.
Thursday was first non-client day in the studio in around a month. I put together some new boards of an internal electronics project that’s been going on for ever. for the first time, I managed to solder QFP packages without a hitch (mainly thanks to a good magnifier and a lake of flux).
The QFP package in question is a SAMD21. I’m making a board that has a microcontroller on it, but also a USB port. Thanks to Microsoft’s UF2 bootloader (which is a brilliant bit of engineering), it should then be possible – once i’ve correctly flahsed the bootloader to the chip – to either program the board from inside the Arduino IDE… or to just drag a .uf2 file over to it and let it flash itself automatically. The idea is that hobbyists can hack on the object, but people uninterested in code can patch firmware with a usb cable and drag/drop – a nice way of doing post-launch patching.
After a few hours of soldering in the morning, I then spent an afternoon working on trying to get UF2 bootloader onto the board. SAMD21 For Dummies has been a useful port of call but it was Tod Kurt’s notes that got me over the hump (along with remembering a key detail from an earlier error message). I spent ages with no avail trying to flash it with an STLink debugger; a Segger JLink proved to be just the ticket. And then, having flashed it with the debugger… it appeared on my desktop and behaved over USB.
Like this:
A good victory to end the week on.
Week 326 is a vacation. I’m actually writing this from a sofa in the Lake District, where I can say I did a first: I climbed the hill an active project is named for! Yesterday, I took myself to the top of High Rigg. I wonder if that coincidence will ever a happen again.
Weeks 323-324
18 March 2019As expected, the past couple of weeks have been really intense: Monday and Tuesday up in Manchester, teaching the Digital Technologies module up at Hyper Island, before three days at Bulb back in London.
Teaching has gone well. Lots of content delivery up-front in the first week – skewed that way perhaps more so than was ideal, owing to time. As well as my usual lectures on Innovation & Trends (picking apart how technological trends are perceived and the major ones that have really underpinned the past decade) and AI (“How Computers (Don’t) Think”, a favourite of mine) I ran an afternoon workshop on programming.
I’m always wary of teaching programming and coding – especially in short periods of time. It can be really unsatisfying to deal with syntax errors or tooling issues early on when you have a very limited window; I’d rather spend that time usefully learning something. So what I did was focus on the feel and practice of programming. We used Google’s Blockly visual language, and, having learned a little about it, focused on its visual interpretation of Logo.
It’s no secret I’m a huge fan of Seymour Papert and his team’s work on Logo. It’s such a smartly designed domain-specific tool – but it also manages to take us on some useful journeys. By using it with the visual Blockly language in a browser, we avoid needing development environments or having ugly syntax errors. My idea then was to anchor what was happening in the Logo world back to programming practice. To that end: we learn about algorithms, and iteration, and variables and function (nouns and verbs) – before going into problems that require more conceptual modelling. Logo even gets you to debugging and ultimately refactoring quite nicely – going from describing individual turtle movements into abstracting them into verbs like
SQUARE
, orHOUSE
, and then improving those to take sizing as a variable. You go on a useful journey without having to do too much tooling.As a first run of a new workshop, it was alright – it’s a little longer than I realised, and it’s appropriate to spend a good while on the first few training runs to get everyone up to the same level. But hopefully some insight emerged, and it’s certainly something I’d like to revisit.
We also got a brief from our client in the first week, and much of my time in the second week was spent coaching the teams on their responses, helping them focus their discovery and ideation phases. In week 325 I’ll be doing some more coaching and then visiting their client to watch their final pitches.
Back in London, Highrigg entailed a moderate amount of coding and refactoring, a decent number of (useful and/or interesting) meetings, prepping a short talk for an offsite workshop, an excellent day workshopping with a good number of colleagues, and beginning to write that workshop up. Hopefully I’ll finish that delivery in week 325.
And that was it. A circuit board arrived for build-up, but I’m not going to have space to do that til at least week 326. In the meantime, it can sit on my desk, tantalizing me.
Weeks 321-322
4 March 2019I’m sat in a hotel bar in Manchester. I’m teaching at Hyper Island for the next two days, and for a handful of days across March. The same course as before, but with the full-time students (in Manchester) rather than the part-time students (who come into London once a month). Looking forward to it. I’ve just revised a pile of talks, and a new workshop on programming, and I think we’re good to go.
Another couple of weeks on Lambrigg: reading documentation, writing code, having meetings, moving office, inching software closer to deployment.
I sent off the SAMD21-based circuit board to America for fabrication – that should be back in a few weeks’ time, to bash together, and see if I can make a micro-USB port work on it. But for now, waiting for factories to do their thing.
Otherwise, I spent the days between Lambrigg prepping for teaching, and having some impromptu meetings: I caught up with Charlie from Museum In A Box to talk audio, electronics, acoustics, and fabrication; I also spent some time with a few friends talking about sound and augmented reality, and have been continuing to think on that ever since.
And now: bedtime, before an intense couple of days.
Week 320
17 February 2019Weeknotes are quite (deliberately) simple this week.
Over at Highrigg I did a little writing, a lot of talking – some meetings, and one meaty design chat that got us to a good place – and a moderate amount of programming. That code took a project to some much better places: it’s now working off live data, which is easily replaced over time. To do that I had to wrap my head around Knex‘s approach to migrations and querying (which turned out to be largely sensible). I also discovered that whilst I still flail a little in lots of deeply nested React, Typescript on the backend is working out OK for me. I still miss Ruby, though.
And then, not on Highrigg, I:
- finished bagging a bunch of kits and posted them to Thonk (after having my bacon saved by Clerkenwell Screws – what a shop!
- nearly wrapped the design of this SAMD21-based circuit board, and ordered the rest of the parts for bringing it up.
- kicked the tires on some ideas for a programming workshop I’ll be running next month. Nothing massive – 1-2 hours – but using some visual programming tools to explore some key ideas around programming, whilst telling a meaningful story about it at the same time. We’re going to be doing a bunch of logo-ish work in a Scratch-like language, and hopefully go from ‘driving the turtle’ to ‘making programs that make sense to other people’. I think some of the pillars of the session are emerging. I should be writing that late next week.
And look: I did my Weeknotes on time, too.
Weeks 318-319
10 February 2019A lot of Week 318 spent writing on Highrigg. For a lot of my work, writing is a solitary activity. I’m writing for myself, or I’m writing to deliver to someone else. Here, it’s more important that it’s a team sport: something that origins within our team, but passes a series of eyes to fettle, fact-check, and generally improve it. I’m learning to navigate this process, but also working out how best to embrace it and write for a team. By the end of the week, the piece was looking up and had been through some good drafts.
The team’s also been deploying code, which is exciting. Pull requests are getting approved, other colleagues are commenting on them, and by Thursday of week 318 I had a whole back-end tool going through the wash (that is, continuous integration), getting deployed, and working correctly. Small steps, but I’m always a big fan of getting to end-to-end fast, and this is a big chunk of this.
Back at the studio, I started putting together a new Foxfield order from Thonk. Stock levels meant it just required some new parts from Europe – which is good, because Chinese New Year means that anything coming from there would take a while. Those parts should be arriving towards the end of week 319, and then there’s a morning of kitting to be done.
I also returned to the project with the EFM32… and set about replacing the EFM32. Yes, this is yakshaving, but there’s a plan behind it. My plan is to make the final product easier to hack or update. To that extent: something you can hack in the Arduino IDE is an order of magnitude easier than getting going in Simplicity Studio. And: something that you can upgrade firmware on just by dragging it over a USB connection, rather than having to use the Arduino IDE. To do that, I’m moving to SAMD21 and UF2. The SAMD21 is what’s in a lot of the new Adafruit boards (and the Arduino Zero), and UF2 is a magic bootloader that handles all manner of IDEs and platform and seems to Just Work. An afternoon in EAGLE had a new layout routed; another morning had the firmware ported back to Arduino. So that’s something to get fabbed up soon.
Over at my personal site, I wrote up an e-ink display I made for my living room, a continuation of years of interest in e-ink displays, and something to keep tinkering with.
I spent a lot of Week 319 being ill – the dangers of working in a large office, I fear, as there’s definitely something going around. A couple of days on Highrigg made some good progress with pairing on code, and continuing some comms work.