Right-to-Left Styling 101
An extensive guide on how to style for RTL in CSS
Apple Maps' Acceleration (2020)
One of the biggest surprises at WWDC last year was Apple’s announcement that its new map would cover “ the entire U.S. by the end of 2019 ”:
Minimal APIs at a glance in .NET 6
David Fowler doesn't have a blog. I think the psychic weight of having a blog ...
How PHP Opcache Works
The opcache PHP extension implements various functionality to speed up PHP in a transparent manner. As the name indicates, its origin and primary purpose is opcode caching, but nowadays it also contains an optimizer and just-in-time compiler. However, this blog post will focus only on the opcode caching aspect.
Stop Using Icon Fonts
Icon fonts became popular over a decade ago. But their convenience comes at a high cost to your visitors.
The Railsification of SaaS
Every decade since the dawn of the World Wide Web in 1989 there have been about two major paradigm shifts in how web software is built and…
Don’t we all just want to use SQL on the front end?
First there was REST, then GraphQL made RPC cool again, but maybe we need to come full circle with SQL over HTTP.
Building a high-scale chat server on Cloud Run
In this blog, I will show you how to use WebSockets support to build a fleet of serverless containers that make up a chatroom server that can scale a high number of concurrent connections (250,000 clients).
GetElementById vs. QuerySelector
A while ago, I was curious how the speed of document.getElementById compared to document.querySelector in Javascript for selecting a single element by ID. querySelector has to do a lot more work, so one would expect that it would be slower, but I didn't know if the difference was enough to care about.
Towards richer colors on the Web
Preface Introduction Colors on the Web CSS Color Color in Chromium Render pipeline Richer colors Some ideas from WebKit High precision colors in Skia Summary In Closing
What's New in React 18?
Welcome to my website!
Multi-Account Containers to “Exchange messages with programs other than Firefox”
A new version of Firefox Multi-Account Containers requires permission to “Exchange messages with programs other than Firefox.”
Why can't I write code inside my browser?
Notes on rethinking browsers
Generating more interesting image previews using imagemagick
A couple of tries at generating more interesting image previews using imagemagick with the mini_magick gem.
I completely ignored the front end development scene for 6 months. It was fine
I've learnt I don't need to keep up with the hectic pace of Front End development news.
WebGPU computations performance in comparison to WebGL
WebGPU – the successor of WebGL, a brand new API to utilize GPUs in the browser. It is promised to be available in regular Chrome in Q1 2022. In comparison to WebGL, WebGPU promises better performance and better compatibility with modern hardware, but the most recognizable feature of WebGPU is a special API for…
The Web’s Missing Interoperability
Truly unlocking competition in tech means increasing interoperability; an absolutist approach to privacy is doing the exact opposite.
The Web MiniDisc App (2020)
Get control of your MiniDisc device thanks to WebUSB and WASM
Hotwire: A new old way to build web apps
I’d like to share my experience of encountering Hotwire from the team at Basecamp which was extracted from the tooling used to build their…
Building a WebAuthn Click Farm
How I built a click farm to “bypass” Cloudflare’s CAPTCHA killer with some cheap USB security keys, an Arduino, and a bit of python.
Links are not buttons (2013)
Quick: what is this? If the word “Button” comes to mind, you might be right. Unfortunately we’ve been seeing a lot of instances in our testing where an image or CSS styling is used to trigger an action of some kind. Here are some markup samples:
Building a Magical 3D Button with Vanilla HTML/CSS
Every action we take on the web starts with a button click, and yet most buttons are ho-hum and uninspired. In this tutorial, we'll build an animated 3D button with HTML and CSS that sparks joy.
Problems with math rendering on the web (2020)
Since I first started working on my website at age fourteen, the site has gone through many revisions, and hopefully changed for the better. This blog was originally dynamically served using a Python/Flask backend, having a custom login system and post “editor” (just an input box). One of the more strange things about…
Mechanical sympathy for QR codes: making NSW check-in better
QR codes are now critical infrastructure here in NSW, Australia. Let's learn how to make them better.
Faster web fonts
Fine-tune your font files and optimise your loading strategy for maximum speed + minimum FOUT