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.
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.
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 )!
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.
Connect your Buttondown newsletter to your Eleventy website and encourage subscriptions with subscribers-only content. - GitHub - scottandrewlepera/netlify-buttondown-11ty: Connect your Buttondown…
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.
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.
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.
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.
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.
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.
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.
...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.
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.
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.
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.
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.
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.
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.