Authenticating JavaScript WebSockets
When a WebSocket fails to connect, you receive no information about why. This makes renewable authentication an absolute nightmare, unless you do in-band authentication.
Assorted thoughts on systems, tech, and existing in this world
When a WebSocket fails to connect, you receive no information about why. This makes renewable authentication an absolute nightmare, unless you do in-band authentication.
I added support for NOMERGE comments to our codebase, which the CI pipeline uses to prevent temporary, unfinished, or debug code from being released accidentally.
Recently I've been thinking about how complex the world is, and how all that complexity makes everyday life feel draining. I don't have the answers, but in the spirit of radical vulnerability, I wanted to share my feelings.
After being hit by a car earlier this week, I started thinking about luck, and how I feel about historical events in my life.
Metaphors can be an amazing tool to communicate quickly with others, but they're not all equal. What makes one metaphor better than another?
Recently, I joined an organisation with some radical ideas about company culture. Let's look back over my time at TalkJS so far, and discuss the things that stood out to me — both good and bad.
When we're trying a new task, it's scary to fail. If we think the task is easy, then failing is even more demotivating. If the only way we can learn is through trial and error, let's make failing fun.
For every blog post I release, I create a header image from scratch using text-to-image AI tools. Let's discuss my workflow, the custom tools I've made, and how you can get started with it too.
It's about time we started to accept that humans have emotions, and share them with each other. As part of my ongoing commitment to radical vulnerability, I built a box that tells everyone how I feel in real time.
For years, I've followed a kind of 'heuristic triangle' to determine whether a thought is worth sharing. However, that triangle has one implication that I've avoided until now, because it feels vulnerable, alien, and uncomfortable.
I used to be a developer, and now I'm helping developers. It's not the change I expected, but it was long overdue. Let's discuss what a Technical Coach is, and how I got here. In other words, let's recap the last year of my life.
All too often, we forget our human sides at work. We lie to ourselves and others, that everything is okay. I think it's time we start opening up, so I'll go first. Last year, I suffered from burnout. Here's the story.
I've always been available to chat, but now I've taken it a step further. Anyone can book time in my diary to chat about anything - even if you just want my advice. Why did I decide to do that? Let's talk about it.
Do the words 'public speaking' strike fear into your heart? It doesn't come naturally to me either, but over time I've slowly improved. This post is all about the things that helped me, so you can learn too.
Javascript can do a lot, but it's really over-used. HTML and CSS are surprisingly powerful on their own, so let's have a look at some of the things you can achieve without Javascript (or a backend) - from animated diagrams to dark mode.
Both Firestore and Svelte are event-driven and reactive. By forgetting everything we know about data layers and building one from first principles, we've made it easy to synchronise data both ways between the browser and the database.
You can read the code for Lexoral, and even use it in your own projects. There's a lot of benefits to being open-source, but there's one that you don't hear people talking about: it lets you punish us for not sticking to our promises.
Over the past few months I've had an ergonomic keyboard obsession. This is my story.
In my last blog post, I introduced the builder pattern in TypeScript and discussed how you can use it to get more accurate types in your code. It was all very abstract, so I thought it might be useful to show another more complex example.
We can use builders to implement complex type constraints in TypeScript, giving us compile-time errors when we make a semantic error, rather than just syntactic errors.
Svelte is an up-and-coming web framework which removes the need for any runtime libraries by adding a transpilation step in its build process. The one thing stopping me going all-in was that it didn't support TypeScript - but now it does!
Some might say I pushed the Micro:Bit too far. This post is not for those people. If your Micro:Bit is also struggling, this post will show you how to optimise your code and push it further
Ray tracing is the process of simulating light rays to render a 3D scene. It seems really complicated at first, but it's actually quite simple. After reading this post, you could easily implement one yourself!
I recently got the chance to play around with a BBC Micro:Bit - an educational toy aimed at helping kids learn to program. It's designed to do a lot of things, but 3D rendering isn't one of them.
Practicing Continuous Integration and Deployment, we can get new features to users faster and tighten our feedback loops. In this introduction to CI/CD, I introduce and explain an example GitHub Actions workflow which builds your front-end and deploys it with GitHub Pages.
Will our daring adventurer optimise his Svelte app to 60fps? Find out in this tech talk!
After hearing about Svelte, a performance-first web framework, I tried it out in a web-based Minesweeper solver. SHOCKINGLY, it didn't automatically make my code fast - that took a process of iterative optimisation
For the past 3 months, I have been a bit obsessed with Minesweeper. It has plagued my honeymoon, stolen my free time, and been the subject of two tech talks. That's a good thing.
Interface Segregation is an important part of writing clean and maintainable code. In most languages, it requires constant maintenance and naturally degrades over time. In TypeScript, we can just Pick the good bits.
In my first ever tech talk, I explained how to algorithmically solve minesweeper
SAT solvers are surprisingly fast and probably under-used. Could one help us improve sprint planning meetings? Maybe, but first you'll have to change the way you think about user stories.
I gave a talk on solving minesweeper at NE:Tech. Things got weird!
DTOs help translate data between server and client. By going back to first principles, how can we utilise static type-checking and integration with modern IDEs to write a better DTO?
In October 2018, I participated in Durhack, a hackathon run by the university's computing society. The idea was simple: An esoteric 2-dimensional visual programming language, where data flies around the screen in real-time.