RSSAmplifier

Blog

Steven Waterman's Blog

Assorted thoughts on systems, tech, and existing in this world

stevenwaterman.ukRSS feed ↗35 posts

Latest posts

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.

Prevent Mistakes with NOMERGE Comments in CI/CD Pipelines

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.

The burden of deliberate choice

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.

Luckily I got hit by a car

After being hit by a car earlier this week, I started thinking about luck, and how I feel about historical events in my life.

Supercharge your Teaching with Metaphors

Metaphors can be an amazing tool to communicate quickly with others, but they're not all equal. What makes one metaphor better than another?

Onboarding at a Radical Enterprise

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.

The Sunk Cost Fallacy, and what it isn't

Don't Worry, it's Rocket Science

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.

Decorate your Blog with AI

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.

My Balance Box

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.

Kind and True

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.

A New Trajectory

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.

Opening Up About Burnout

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.

We Need to Talk (if you want)

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.

You can learn to Speak Confidently

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.

5 things you don't need Javascript for

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.

Database sync like magic, with Svelte + Firestore

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.

Lexoral is open-source so you can punish us

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.

Down the ergonomic keyboard rabbit hole

Over the past few months I've had an ergonomic keyboard obsession. This is my story.

Better Redux Reducers with TypeScript Builders

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.

TypeScript Builders: Improving your types one step at a time

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 and TypeScript - Together at last!

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!

Optimise your Micro:Bit code with Chrome DevTools

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

How to Write a Ray Tracer Intuitively

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!

3D Rendering on a Children's Toy

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.

GitHub is a free CI/CD/Hosting solution

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.

Stevie W and the Quest for 60 FPS

Will our daring adventurer optimise his Svelte app to 60fps? Find out in this tech talk!

Slow Code HATES him! From 1 to 60fps

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

Embrace your Obsessions!

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.

Typescript Pick 'n' Mix

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.

How to solve Minesweeper in 3 minutes

In my first ever tech talk, I explained how to algorithmically solve minesweeper

Planning 56 sprints per second with SAT4J

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.

Solving Minesweeper in Polynomial Time

I gave a talk on solving minesweeper at NE:Tech. Things got weird!

Rethinking the Java DTO

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?

Introducing SharpShot

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.