Search
The CSS Custom Property Toggle Trick
29.10.2020
Back in July 2020, I got an email from James0x57 (I always try to refer to people by their name, but I think I get the sense they prefer to go by screen name) that says:
The entire world of branching conditional logic and bulk feature toggling for custom CSS properties is possible and only exists...
How Hacker News Crushed David Walsh Blog
28.10.2020
Earlier this month, David’s heartfelt posting about leaving Mozilla made the front page of Hacker News. Traffic increased by 800% to his already-busy website, which slowed and eventually failed under the pressure. Request Metrics monitors performance and uptime for David’s blog, and our metrics...
Detect Changed Files with git
26.10.2020
There are numerous reasons to want to know which files have been added or modified in a git repository, one of which is your text editor highlighting those files. Another use case is running tasks against only files which are presently changed, like lint or other validation routines. So how can...
Blockstack PBC changes its name to 'Hiro'
22.10.2020
The name is a reference to the protagonist in Neal Stephenson’s novel, Snowcrash
Wagerr – A Name that Revolutionizes Blockchain-Based Betting
22.10.2020
Sports betting enthusiasts have got a new reason to celebrate with the launch of a decentralized sportsbook named Wagerr that allows users from anywhere in the world to bet anonymously. It is the first-ever blockchain-based sportsbook that has been revolutionizing the world of sports betting since...
How to Think Like a Front-End Developer
21.10.2020
The topical idea of “how to think like a front-end developer” began for me as a series of podcast interviews on ShopTalk Show. That was in preparation for a talk I was preparing (and gave) of the same name. That talk evolved into my essay The Great Divide, which evolved into the essay...
cookieStore: Async Cookie API
20.10.2020
One pattern in the JavaScript API world that web development veterans will notice is that we’ve been creating new methods to accomplish what older, grosser APIs once achieved. XMLHttpRequest became the fetch API, some APIs like Battery became async, and there are dozens of other examples....
How to Prevent Pasting into an Input
19.10.2020
Every once in a while I get to a website that doesn’t allow me to paste into a form input. In most cases it’s something to do with login credentials (username and or password) and auth codes. So how are they preventing me from pasting information? It’s as easy as you’d...
How to Conditionally Add Attributes to Objects
16.10.2020
JavaScript is full of tricks that you don’t know you want until you … want … them. Or maybe just until you see them. One trick I recently realized was conditionally adding attributes to React elements. Of course this trick essentially boils down to conditionally adding properties...
Sports Data for Developers: SportdataAPI (Sponsored)
12.10.2020
Most of the side projects I consider starting revolve around sports, since I’m a huge sports fan. I spend my Saturdays watching soccer, Sundays spent watching soccer and NFL, and of course the mid-week Champions League and Europa League matches. One problem I’ve always had is not being...
Aussie household name threatens to sue The Guardian over Bitcoin scam ads
9.10.2020
The legal team behind the case called it a “prolific cryptocurrency scam.”
Balancing on a pivot with Flexbox
8.10.2020
Let me show you a way I recently discovered to center a bunch of elements around what I call the pivot. I promise you that funky HTML is out of the question and you won’t need to know any bleeding-edge CSS to get the job done.
I’m big on word games, so I recently re-imagined the main menu...
Crypto exchange refuses to name names for Belarusian government
6.10.2020
Kuna’s founder stated that the exchange does "not support violence" or "engage in dialogue with opponents."
39 Shirts – Leaving Mozilla
6.10.2020
In 2001 I had just graduated from a small town high school and headed off to a small town college. I found myself in the quaint computer lab where the substandard computers featured two browsers: Internet Explorer and Mozilla. It was this lab where I fell in love with Mozilla — a browser that...
Curate Custom Content with mediastack
6.10.2020
I used to have a personal aggregator of sites I enjoyed but maintaining it was a nightmare. I needed to grab each site’s RSS feed, categorize their contents, deal with errors and individual rate limits, etc. I had to tear the whole project down because it was a nightmare to manage. Fast...
How to Detect When a Sticky Element Gets Pinned
5.10.2020
The need for position: sticky was around for years before it was implemented natively, and I can boast that I implemented it with JavaScript and scroll events for ages. Eventually we got position: sticky, and it works well from a visual perspective, but I wondered how can we determine when...
Coda Protocol Changes Name After Trademark Dispute With R3
29.9.2020
O(1) Labs-led lightweight blockchain Coda Protocol said that it is relaunching as “Mina,” following a settlement in a trademark dispute with software maker R3
Shoelace 2.0: A Forward-thinking Library of Web Components
29.9.2020
A few years ago, I released a lightweight alternative to Bootstrap affectionately named Shoelace. Shoelace was small and fast because of its minimal design and pure CSS approach to styling. It used CSS custom properties extensively to enable customizations, even when loaded via CDN — something...
How to Detect the Default Branch in a git Repository
28.9.2020
Over the past few years, many engineering teams have switched their default git branch name from master to a different, potentially less offensive term. I’m all for choosing to name your default branch whatever you’d like, but not having a universal default branch name can complicate...
Web Technologies and Syntax
24.9.2020
JavaScript has a (newish) feature called optional chaining. Say I have code like:
const name = Data.person.name;
If person happens to not exist on Data, I’m going to get a hard, show-stopping error. With optional chaining, I can write:
const name = Data.person?.name;
Now if person...