Roll Your Own Analytics
How to build a free, privacy-focused alternative to Google Analytics
CSS Utility Classes and “Separation of Concerns” (2017)
Over the last several years, the way I write CSS has transitioned from a "semantic" approach to something more like what people call "functional CSS." In this post I explain how I got to this point and share some of the lessons and insights I've picked up along the way.
Syntax Highlighting Is Backwards (2018)
Most code editors color different pieces of your program in different ways. For instance, they’ll make keywords like if bold and bright so that you notice when you’ve misspelled them. They’ll make non-executable parts like comments and documentation fainter so that you know that the computer isn’t seeing that part of…
Why I believe Rails is still relevant in 2019
Cloud-Native Full-Stack Software Engineer and Solutions Architect
Minify Your SVGs
How I optimize SVGs for this blog and why you probably should, too.
Run Your Own Website
I go back and forth on running my own website. I love [working](Re Introducing First Crack.txt) [on](First Crack Release Notes 0619.txt) [First Crack](/projects.html#firstCrack), but that work can become trying. I have little time for [projects](/projects.html), and the more I spend coding, the less I [read](My…
Why I don't use web components
For my first post on dev.to I thought I'd write about a nice, safe topic that's free of controversy:...
Google Play Store Now Open for Progressive Web Apps
Chrome 72 for Android shipped the long-awaited Trusted Web Activity feature, which means we can now distribute PWAs in the Google Play…
The Order of the JSON
When I read Fitz’ tweet about ordered JSON my body shuddered, as my brain was flooded with a past experience that taught me a frightening lesson on technology being used by non-technical comp…
Scheduling in React
In modern applications, user interfaces often have to juggle multiple tasks at the same time. For example, a search component might need to…
On Dat
My teardown of Beaker and the Dat network.
Adblock Plus filter lists may execute arbitrary code in web pages
A new version of Adblock Plus was released on July 17, 2018. Version 3.2 introduced a new filter option for rewriting requests. A day later AdBlock followed suit and released support for the new filter option. uBlock, being owned by AdBlock, also implemented the feature. Under certain conditions the $rewrite filter…
Companies may be losing millions due to emails buried in collapsed Gmail threads
Disclaimer: The events depicted in this story are purely factual and described to the best of my memory. Prelude Many years ago, in the City of London… The Expedia empire reigns. Having conqu…
How I made a website with Svelte
Just like last year, I made a list of the best media I enjoyed over the year. This includes music, films, series and games.
CERN day 1: rebuilding the first web browser
This marks the beginning of a week long adventure in Geneva Switzerland at CERN, to work on a hack project.
A Dead-Simple Web Stack in Haskell
Haskell has a proliferation of libraries to choose from for all of your basic backend needs, from logging to database access to routing and web server definition. It's nice to have the freedom of choice, but if you're just starting out, the amount of decisions needed can be overwhelming. Maybe you're not even…
WebWindow, a cross-platform webview library for .NET Core
Steve Sanderson's Blog
Wolfenstein: Ray Tracing on Using WebGL1
Since the introduction of the Nvidia RTX graphics cards last summer, ray tracing is back again. In the last months, my Twitter feed flooded with a continuous stream of RTX On / RTX Off comparisons. After seeing so many nice
Syntax highlighters are wrong (2014)
Syntax highlighters make value judgments about code. Most highlighters judge that comments are cruft, and try to hide them. Most diff viewers judge that code deletions are bad.
Plausible Deniability and Gaslighting in Fighting Ad Blockers
Google is planning changes in Chrome impacting ad blocker extensions and people are wondering whether those changes are motivated by self-interest or whether there are plausible, benign explanations.