Scott Andrew

Blog

BREAKING: Florida still sandy, moist, full of alligators

Unlike the dry heat of the southwest US, Florida has a wet heat that moistens your skin, and scalp, and underarms, and the areas just beneath your eyesockets. Despite alleged alligator allocations, I didn't see a single alligator in the wild. So enjoy this captive alligator ass, whose owner seemed completely uninterested in any visitors, or turning around, or moving at all.

Florida alligator ass.

Posted February 25, 2025

HERETICAL is finally here, and it only took me eight years

Back in 2016, I started working on HERETICAL, a short adventure comic. Then, as is the way of things, stuff happened, and as more stuff happened the comic fell lower and lower on my list of priorities. So it sat unfinished for a while—like, as two entire presidential administrations came and went. Then last year I found myself with a bit more free time than I am accustomed to and I basically finished it by grinding out one panel at a time.

Well, here we are. HERETICAL is finally done, and I’m excited to share it with you.

As I once told the folks on my newsletter: I have to keep relearning the lesson: the world is always gonna be hot garbage in some way, whether we make art or not. So we may as well make art, and have a hot garbage world with art in it.

I hope you enjoy it! I've already gotten started on the next one. Just don't ask me how long it'll take!

(P.S.: the folks on my newsletter got to see HERETICAL a week ago, and also got to see sketches and process art all last year. If that sounds like your thing, you should subscribe )!

Posted February 10, 2025

Integrating Eleventy with Buttondown to create subscribers-only content

The real reason I wanted to shrinkwrap the Eleventy Edge plugin was to finish another project I'm tinkering with: a sample integration of Buttondown with Eleventy to create subscribers-only content.

For example, if you were, say, subscribed to the Neat Hobby! Newsletter, you might be able to see the cool thing on this page.

There's actually a LOT of subscriber-only content on Neat Hobby! — bonus comics, a hidden blog, etc. — but the only way to see it was to follow hidden links I only include in the newsletter. Those links are otherwise unprotected and that's fine, I don't mind if they get shared. But what I really wanted was something like what Ghost has, where hidden features and content can be unlocked for subscribers by just checking an email address.

And then something cool happened: Buttondown recently made their API free of charge. Kind of a big deal! Now I can use an edge function to call the API and check if an email is subscribed to the newsletter, then use the Eleveny Edge plugin to conditionally render content based on that check. No password required! Exactly the amount of friction I was aiming for.

All the current code is here, minus my site-specific tweaks. If you're curious, see the article Building A Membership Site With 11ty for more about the concepts I used to build this.

Posted January 28, 2025

Use the Eleventy Edge plugin with Eleventy 3 with this shrinkwrapped version

If you're like me and create websites with the Eleventy static website generator, you know how cool it is!

You may have also been like me and excited to discover the Eleventy Edge plugin which allows you to create dynamic content on otherwise static websites!

You may have also been like me and disappointed to learn that the plugin was removed from the Eleventy 3.0 release and deprecated.

Unlike me, you may have started writing your own edge integrations, or decided to stick it out with v2.0, or maybe given up.

But if you're me, you just shrinkwrap the darn thing!

Posted January 26, 2025

A free responsive HTML template for your web comic

This is how I'm applying my 25 years of expertise in web development and software engineering: following Greg Pak's example for making a simple homepage, I've released a basic HTML template for webcomics.

The layout reconfigures itself based on screen width. On mobile devices it'll be a single column layout with a dropdown menu. On laptops and wider screens it expands to a classic two-column layout.

See a live demo here and download a ZIP containing all of the template files. Feel free to use, modify, and share! And if you make something cool with it, let me know!

I've been loving the renewed interest in making websites a bit easier for people who have little desire to become web developers themselves.

Posted January 20, 2025

Pocket Lint: Early December 2024 links

Look out, it's linkin' season.

Pure CSS tic-tac-toe with game AI - "You just lost to a stylesheet!" This is amazing and I someone had to do it eventually! (It helps that tic-tac-toe is a "solved" game.) Lean Rada's whole website is full of cool stuff.

Rarebit: A free, open-source webcomic template built in HTML and JavaScript - Clever if a bit messy single-page app for hosting a webcomic with very little coding.

You Might As Well Use a Content Security Policy - Very thorough and well-written overview of CSP, how to deploy it, and why. Plus, I totally missed that you can do this with a <meta> element!

Egoless Engineering - I've been sharing this everywhere. I really good read if you, like me, are often frustrated by teams responsible for a Thing having no power to change the Thing.

unminify - "Free tool to unminify (unpack, deobfuscate) JavaScript, CSS, HTML, XML and JSON code, making it readable and pretty." It all stays in-browser, allegedly.

I made a multiplayer game from scratch because no one is hiring junior devs - The comment section is great:

"Project for getting a job : Multiplayer strategy game written in HTML and JavaScript.
Job : Making a button bigger."

Thousands Turn Out For Nonexistent Halloween Parade Promoted By AI Listing - This kind of thing keeps me awake at night. This is the last election cycle that AI won't be aggressively deployed against us.

Posted December 3, 2024

Frameworkism

Alex Russell:

Frameworkism is now the dominant creed of today's frontend discourse, and it's bullshit. We owe it to ourselves and to our users to reject dogma and embrace engineering as a discipline that strives to serve users first and foremost.

(Emphasis mine.)

I remember the moment I knew we were screwed. I was at our annual developer conference in the early 2010s. Teams usually sent a few devs to demo something cool they were working on.

I started to notice a common narrative from these sessions: we needed front-end, but we didn't have front-end expertise, so React allowed us to do it ourselves. Over and over. By the end of the day one presenter quipped "so, we ended up using React...maybe you've heard of it?" eliciting chuckles from the crowd.

"Front-end engineer" would not become an official role at the company for another five years. It was clear in those early days that React was a way for any engineer to "do" front-end, including those who weren't particularly concerned for the quality of the user experience.

Page preview image

If Not React, Then What? - Infrequently Noted

Frameworkism is now the dominant creed of today’s frontend discourse, and it’s bullshit. We owe it to ourselves and to our users to reject dogma and embrace engineering as a discipline that strives to serve users first and foremost.

Alex Russell

Posted December 3, 2024

Pocket Lint: Is It Over Yet? November 2024 Edition

Welcome to the world of local-first web development. - I didn't know there was a community of devs focused on building web apps that run completely client-side. I'm also wondering why I was surprised by this.

PikaPods - Super-inexpensive ready-to-use hosted apps like RSS readers, blogging software (including Ghost and Wordpress), wikis, notebooks, link sharing and a ton of others. Via Joe Crawford.

PocketBase - an open source fully-contained backend for web apps. You get an SQLite database, authentication, and file storage, wrapped in a single binary with a REST API. Neat! One of the available apps on PikaPods.

Questions to ask a senior front-end developer - I like most of these. It's difficult to find front-end questions that aren't explicitly coding and don't feel like trivia.

Editing Plain Vanilla - a good overview of a VS Code profile for vanilla JS projects. The Plain Vanilla site has a lot of really good and sensible patterns for building sites and apps without frameworks or a huge toolchain, but it's such a bummer to see AI images to adorning their blog posts.

Animate.css - cool library of ready-to-use CSS animations along with best practices. Pull apart to code to see how the animations work.

Quantity Queries for CSS - from 2015! Clever ways to use *-child pseudo-class selectors to configure layouts based on the number of elements in a container. There's a nifty generator here. Via Eric Bailey at piccalil.li

...and a fun bit of web history: Nifty Corners Cube. A 2006 JavaScript library for creating rounded corners on HTML elements, from the time before border-radius existed. The demos still work! The source code is an interesting time capsule of techniques we needed to hack around poor/missing support of APIs like addEventListener and querySelector.

Posted November 4, 2024

I, former Twitter user

I stopped using Twitter (or X, whatever) personally late last year and stopped posting comics on the Neat Hobby! account earlier this year. This week I downloaded a backup of my tweets, set my accounts to private, and deleted all my tweets going back to 2006, almost two decades of tweet, replies, and likes. (Keep reading if you want to know how I did this.)

So I guess I'm done for good. I thought this would be tough emotionally, but I guess not? At one point I couldn't imagine walking away from MySpace, it just really seemed that important. And then one day it just wasn't! Maybe I'd feel different if I didn't have a copy of my stuff.

The announced change to blocking was the final insult. Blocked users will still see your tweets. This is like your landlord saying window curtains are forbidden and everyone should be able to take photos of you from the street. Their reasoning for this is stupid, they know it's stupid, and they know we know it's stupid.

And then there's training their AI on your tweets which, let's face it, we all knew was coming. I don't know if deleting your tweets actually prevents this, and it wouldn't surprise me at all if tweets are just flagged as deleted but still retained in their system. Whatever. No need to make it easy for them. They have an opt-out setting, but do you trust it?

Twitter was fun and its impact can't be understated, but for the last decade it felt like the place where journalists and politicians cursed with posting disease went to over-index on the sentiment of less than 20% of Facebook's DAU, some significant percentage of which are bots or sockpuppets.

Anyway, I'm still "on social media" but I've taken down all the links to my socials from this site. I don't see the need to give them free advertising. I'm pretty easy to find: I'm either "scottandrew" or "neathobby" everywhere.

I enjoyed Twitter, but I was never "good at Twitter" I suspect whatever was left of my followers were actually abandoned ghost accounts, like empty cicada shells clinging to a tree.

And I think it's not just me!

Post is up nearly a whole day, on an account with 16.7K followers.

18 likes.

[image or embed]

— John Skullen (@nellucnhoj.bsky.social) October 20, 2024 at 4:02 AM

How I did it

First, I downloaded an archive of my Twitter data. To do this from the app or website, go to Settings and privacy > Your account > Download an archive of your data. Here's a direct link. You may be asked to re-enter your password and go through 2-step authentication if you've set it up.

Twitter/X should message you when it's ready. It took about a day to get my data, which came as a downloadable ZIP file. Unzip it and check that everything you want is there. Twitter archives used to be just a mess of folders and files, but this most recent archive came with a pretty nice little web dashbord to navigate everything:

My Twitter archive dashboard.
My Twitter archive dashboard.

Alternately there are some free web apps that will convert your ZIP data into something browsable, like Darius Kazemi's Twitter archiver.

To delete tweets, I used a free app called Redact. Redact has paid options that allows you to delete posts from more services, delete posts on a schedule, etc. but at the time of this writing, deleting Twitter data is free with Redact. It also has an option to archive your data before deleting, which I did not use.

If you have more than 2-3K tweets, Redact will warn you to use the "delete from file" option, which is a paid feature. You don't have to do this if you're patient. I had over 8000 tweets and just deleted them in batches one year at a time.

It wasn't perfect. I occasionally had to re-run a batch to get everything, and I had to go in and delete a few things by hand. Sometimes the program appeared to get stuck in a waiting loop. When this happened, I just cancelled and restarted the scan.

There are other web apps and programs that will mass-delete tweets but most of them cost money, some requiring a subscription. I guess this makes sense if you're a social media manager where scheduled mass deletion is part of your job.

Posted October 20, 2024

The return (revenge?) of addEvent

Long long ago before the invention of social media, when browsers were nothing alike and "web designer" was your job title, I wrote a tutorial on browser event handling which included a small snippet of JavaScript code encapsulating the various implementations in a single function I named addEvent.

I didn't know this at the time, but this naïve scrap of JS would become the most-copied-and-pasted code I would ever write. When I was hired at Amazon in 2003, I had some heart palpitations upon finding addEvent strewn throughout the codebase. Today it's been mostly replaced, made redundant not so much by the broad adoption of the web standard addEventListener but by the arrival of jQuery. I still found a few references as recently as 2018, and I half-regret that I didn't file a ticket to remove it, lol.

addEvent caught the attention of web standards expert and devotee Peter-Paul Koch, aka PPK, who wrote what I consider my true crowning achievement, an extensive "considered harmful" treatise criticizing addEvent. And he was, and still is, correct!

Nineteen years later you can still read PPK's original article at the same URL. But I've migrated and redesigned this website many, many times, eventually breaking all links to my JavaScript writing. Cool URIs don't change, but that's my secret, Captain -- my links have never been cool.

Until today, when I put my addEvent article back online at its original URL! Tidied up with some modern syntax highlighting and everything!

It's very strange to look back on this after 23 years. The tone is very conciliatory ("let's not be too hard on Microsoft, I'm sure they're trying very hard!"), and the targeted browsers -- Netscape 6 and Internet Explorer 5 -- are so long gone I don't think anyone thinks of them.

Also: the case logic ends with an alert()? What? Not console.log()? Oh, hang on, developer consoles weren't a thing until 2006, and then you had to install Firebug!

We would get MySpace, Ajax, and YouTube several years before we had any in-browser debugging tools.

Let that sink in.

Posted October 17, 2024