About Topics
Topic pages are concise articles on a single subject, usually related to my identity, experiences or beliefs; articles about other subjects I reference frequently may appear here as well.
⚠️ Attention
These are over-simplifications.
Due to the efficient nature of Topics pages, no landing page is provided: you can use the tags view to view all articles at once (if you see AI below this article, you're already there); or, for an indexed list of links, see the Everything page.
Edit
There's an edit button at the bottom of each page. It looks like this: 📝
This is a single-user wiki, so only I'm able to edit, but---pro tip!---you can still click the edit button and it will allow you to view a page's markdown. This makes it easy to quote or republish material from this blog (with the proper attribution!) on your own blog or other markdown-supported platform.
Long
I try to keep the topics brief for ease of legibility, but some topics, such as neurodivergence, may be ones that I feel require additional context to fully express my understanding of it. Due to my limited time and mental energy, these topics may evolve over time and are likely to be revised multiple times.
IP Theater, Congrats to Rabbit, Bloggodynamism
Thursday May 01st, 2025
Tags: blog, copyright, correspondence, crafting, meta, no-ai
I was thinking about the art I use from openclipart and opengameart and it made me feel bad about publishing with a noderivs license. Having public domain art to draw from adds a lot of life to this website and my other projects, and it would be cool if someone liked one of my stories and wanted to turn it into a comic, or read it on a podcast, or use it as inspiration for a game. I'd be proud if something I made could contribute to open culture, too; I just put the noderivs clause on there as a feeble protest against AI scraping. But this is kind of silly. Technically the "non-commercial" clause should protect me, now that OpenAI is no longer a "non-profit" there's no legal argument that their activity is non-commercial, but the sad reality is that corporations are going to do whatever the fuck they want and I as an individual have no legal recourse, because the system is designed to protect capital and nothing else. So fuck it, I'm going to switch to CC-BY-SA. The only thing ND does is discourage the people who might actually get some value from my work and use it ethically. I'll keep the no-ai disclaimer even though I don't think it legally does anything; I can't legally do anything, anyway. Maybe someday I'll be part of a class-action brought by the EFF or something, that's the best I can hope for. Maybe I should just go full public domain with everything. In practice this is all just intellectual property theater. Legal cosplay. I'm not a member of the class that's allowed protection so I get exploited. That's the game I'm forced to play, so I might as well try to help my team.
Congrats to Rabbit!
Rabbit at jackalope.city finished 100 days to offload! Completing a challenge to blog 100 days in a year doesn't sound that hard on paper, it only requires a 27.4% posting frequency, but if you're not used to that amount of output, it can be quite an adjustment. It takes moxy to stick with a new habit. It takes grit to stay self-motivated. It takes courage to write even on days it doesn't come easy. Well done!
I finished the challenge in July 2022, and in typical me fashion, I didn't tag any of my posts or really talk about it much until I was done. I don't know why I'm so resistant to self-congratulation; I have this knee-jeek reaction that I would be perceived as conceited or narcissistic, but I don't think it's conceited or narcissistic when other people are proud of their accomplishments. Maybe I should try the Be Kind To Myself For 100 Days challenge.
My 100-day challenge was the self-imposed kick in the butt I needed to think of myself as a writer again. Although my output slowed down in 2023 and significantly in 2024, the bug is still with me, hopefully for good.
I'm not doing any kind of official challenge this year, but I'm well on my way to 100 posts again: 40 posts already and it's only May. I think I'm going to be more motivated to write now that I'm doing it on my own website, too. I don't have to worry about spamming any feeds, because I'm not sharing it with anyone else. I have free reign over my domain! Oops, there I go thinking like a landlord. It's hard not to when most of the rest of the internet treats us like digital serfs.
Bloggodynamism
So, I went kind of ham with the custom dynamic variables: I have not one but three custom emoji: pat
, nb
and lander
give you
1
I'm sure I'll add a few more, but I'll try to use them sparingly in the blog: they probably won't show up right in the feed, because they rely on external stylesheets for the formatting. You can't just drop an img src
tag into the middle of a sentence and call it good, you have to make a tiny div that uses the image as a background if you want to be able to size and position it properly. Way too much hassle to do it manually, but a piece of cake with the power of PHP.
But, it kind of leaves feed readers out in the cold, so I'll try not to rely too heavily on them. In fact, most of this stuff is only going to be relevant to page visitors, sorry! Feed readers can skip this section.
I created variables for each of the buttons at the bottom of the blog post: likebutton
, sharebutton
and replybutton
. Just in case I ever want to use them individually. Hey, it could happen! But I also made pagebuttons
so I can drop in all three at once, which is what I'll be doing all the time.
This wasn't that much friction before, because I could include the code in my post template, but now all that ugly HTML is hidden away in the guts of the computer, instead of messing up my nice orderly markdown files. Plus, if I want to change something about them, I can do so on every page at once! If I decide I don't want them, I can replace them with an empty string. Anything I want repeated over and over, it's always better to have a function rather than doing it by hand.
I also created blogtop
, which generates the entire top section of the blog post: the h1
title (including the pagetitle
id attribute that makes the share button work), the block quote div, the date and the tags. For pages, there's pagebottom
which shows a blockquote div with the tags and the date the page was last modified. Ideally, there shouldn't be a single page that you look at and wish you knew when it was from. I find that sort of thing frustrating. There are pages where it's not necessary, I don't think anyone is going to look at the contact page and think "what's the context for this??!", and it seems excessive to use the full pagebottom
on every single topic page. But all the main stuff should have some form of date stamp.
I also cleaned up the buttons: the share button previously broke everything if it was on a page without a pagetitle
id, but now if that attribute doesn't exist, it'll just copy the URL. To encourage inter-blog communication, the reply button will now show you a field to enter a URL to ping me from your own site (a great idea shamelessly stolen from Rabbit), with a link to the contact form if you want to send a message. I'm not using webmentions or anything, it just uses the same script as the contact form and guestbook to send me an email. Webmentions would be cool if every blog was running them and set up to automatically ping every other blog that's mentioned, but since that's not a thing, it might as well just be an email. Maybe the glorious webmention future will arrive someday.
Rather than post all the new code, I'll just link to the repository I set up as a site backup. It's a snapshot of all the HTML generated in static mode, all the markdown files and all the bits of custom code in conveniently-labeled folders. The idea is to do backups on the last day of each month, so if anything happens and I lose my webhosting again, I won't lose that much history. I kinda wish I was doing that with my oddmuse site, there's probably some stuff in there that I would like to have kept maybe I'll try to do weekly backups of my markdown...
Anyway, there are only two more features I want to hack in to call it "done":2 I want the "what's new" section to automatically display the dates and titles of the three most recent blog posts with links to view more,3 and I want the /blog
landing page to automagically show links to all the blog posts. I use a lot of images and footnotes, so I don't think doing a simple tag sort will be the best way to browse the entire blog, especially once I have hundreds of posts here.
I'd prefer if tag search worked more like bear, where it just shows you links to everything with that tag instead of full pages, and I'd like it if I could have a page that shows every tag. There's no easy way to do that with kiki. Which isn't a big deal right now, but you know, I'd like this to be my forever home. Someday, muse willing, this site will contain vast multitudes. I think I'll be able to hack all this in, I feel more confident after messing with dynamic variables and looking at the pagegen code. It'll be a lot more complicated, but it's doable. I know how to do a for loop. I can see which part of the code looks at the page tags and how. I know how to put a div together piece by piece. The main problem is figuring out at which point in the program the variables I need to work with are in scope. It's challenging to figure out by reading the code which variables I can use where.
I know I can do it, but I really, really need to take a break from programming now. I love it but it has taken over my brain. I have a site that I'm really happy with, it's time to use and enjoy it
If you mentioned this post on your own site and would like to notify me, please enter the URL here:
Otherwise, click here to send a message.
-
And now
sad
gives me , which I added for this post. ↩︎ -
But I have the curse of the tinkerer, nothing will ever be done unless I force myself to accept it as done, there will always be bits I look at and think "I should make this different". Lord grant me the wisdom to not change the things that don't need changing. ↩︎
-
I was using an RSS 2 HTML widget for this, which is really handy when you're on neocities and stuck with HTML and js, but I can find a much more elegant way to do it here. Plus, it would sometimes take too long and prevent the rest of the page from loading for several seconds, and for whatever reason the async attribute was making it break the page layout, so something about it doesn't play nice with the pagegen code. ↩︎
Quick Note on Captchas
Wednesday May 07th, 2025
Tags: blog, meta
Well, the "negative captcha" I talked about a few days ago didn't do shit. The oldest reference to the idea I can find is from 2007, so I should've guessed that trick would no longer work. I've been getting a ton of spam in the guestbook for websites about finding pre-owned cars in Ukraine. Even if I were a Ukrainian car-driver, I'd probably have more pressing issues at the moment.
So there's a captcha again, and this time it should be something that's trivial for humans to answer but hopefully subjective enough to trip up a bot-and also not based on image recognition, because that can cause accessibility issues, and doing an audio captcha is a pain.
I expect that these bots are doing some sort of LLM query now, which seems nuts-if my tiny nothing of a website with no external links is a target, the bots must be spamming at a massive scale, and doing an LLM query for thousands or millions of websites must be super expensive; I hardly see how spamming my little website with rounding-error traffic can possibly be worth it. But spambots were able to figure out what color the sky is, and tell me, so there must be some amount of language processing going on.
I feel like identifying that a word "sounds like" another word is something even LLMs would struggle with,1 so hopefully this cuts the spam without being too much of a burden. I mean, I guess I could ask "how many Rs are in the word strawberry" and it'd be effective forever, but that might trip some people up, too.
Also, when I was setting this up, I realized that the form for mention URLs when you press the "reply" button was configured incorrectly, so if you sent any of those, I haven't been receiving them. It should be working now, so feel free to resubmit if you like and sorry about the error. There's no captcha on that form at the moment, but I might add one if it becomes a problem too.
Finally, to the reader who sent a reply to Neurodivergence around when I was messing with the captcha stuff, your message came through and I'll reply when I get a chance. Sorry for all the weirdness.
If you mentioned this post on your own site and would like to notify me, please enter the URL here:
Otherwise, click here to send a message.
-
When I got home from work, I asked one of the leading chatbots to answer and sure enough it flubbed it in spectacular fashion. It clearly didn't understand the question and the rationale for its wrong answer made no sense even in a vacuum. ↩︎
Coding as a Craft
Saturday April 26th, 2025
Tags: blog, crafting, kiki, mental health, meta, programming
Learning about bash and working on whirltube has got me feeling the programming itch again, and I'm not sure what to do with it. Part of me wants to keep adding stuff to whirltube even though I don't need to, but that way lies madness. I need to find a new project (or go back to an existing one.)
I've never approached coding like a programmer. My interest in programming lies in my ability make tangible things. I wasn't blessed with natural artistic talent, I can't paint a painting, or record an album, or build a chair, or grow a garden, or weave a tapestry; but I can create a program. I can visualize what I want a piece of software to look like and do, and I can start with nothing, and I can build it brick by brick.
Most professional software devs will tell you you're a fool if you start from scratch, that you should use existing libraries as much as possible. Why reinvent the wheel? But to me, the invention is the joyful part of the process. It's fun to invent the wheel. There are a lot of wheels I could use, but this one is mine. To me, it's like saying "why paint Mt. Fuji? There are already lots of paintings of Mt. Fuji, just look at one of those."
It's inefficient, of course it is, the same way painting a picture is inefficient compared to taking a photo, or writing a blog post is inefficient compared to telling an ai to write one for me, or watching the sunset is inefficient compared to work. The inefficiency is the point.
This is an unorthodox view of programming, because historically, the efficiency has always been the point. Back in the 60s and 70s, computers had so little processing power and memory to work with, efficiency was everything. You had to be a technical sorcerer to make a computer do anything, much less do it well. High level languages like BASIC and COBOL made computing more approachable, but you had to use machine code to make anything real-time or impressive.
Fast-forward to today, and computers can do billions of things per second, many of them simultaneously, and hold vast libraries in their volatile memory. A bit of inefficiency isn't going to hurt anything. I have no interest in optimizing my program until it can execute commands in 0.005 seconds instead of 0.01.
Video Game Tangent
This optimization fetish is still fairly common among programmers, and we see it manifest in niche game genres. I was excited for the Zachtronics game Exapunks, and pre-ordered the edition that came with the physical zines and other feelies. I loved the retro hacker aesthetic (still do) and was excited to jump into a game that involves actual programming. I thought it would be right up my alley.
I got nothing out of the game and gave up on it almost immediately. I was solving the puzzles, but it didn't feel like fun to me, it felt like work. The game showed me how quickly my friends' programs completed and in how few lines of code. It expected me to want to try to beat their scores, but why would I? I solved the puzzle. Why would I care about solving it better? I achieved the goal.
We see the same zeal for optimization in sims like Factorio and Stardew Valley, and in sandbox games like Minecraft. I get no dopamine at all from these sorts of games. I bought My Time at Portia thinking it'd be an Animal Crossing-esque chill social life sim game with more mechanical depth, and was disappointed when it devolved into optimization porn. I reached a point in the gameplay loop where I was expected to build intricate clockwork systems of widgets creating and refining materials to use to make other widgets, and I was done. It started feeling like drudgery. I came to realize that playing and creating are two very different mindsets for me. With play, I'm extrinsically goal-oriented. I want a game to present fun systems for me to interact with to achieve concrete goals. I also want an interesting world to explore and a character to represent "me" in the world.
Creation is different. My goals are all intrinsic. I want to visualize a thing and have the building blocks I need to make it, self-directed. I want to turn nothing into something. My attitude when I play Minecraft is, why would I build something in this game when I could be building my own game? As usual, this bridge between what I like and what everyone else likes is a shaky one of unattainable passage, but at least I've figured out how my brain works and can adjust my expectations accordingly.
Back To Programming
That was a very long tangent, but hopefully it helps illustrate why I approach programming as a craft and not a science. This isn't to downplay the importance of efficient, optimized, low-level code for the functions that need it. For example, compression algorithms. Our entire media ecosystem is dependent on image, audio, and video compression. These are getting better all the time, and we've seen some truly staggering gains in file size and efficiency, which means we need less bandwidth and less storage for media of higher quality than was possible just a few years ago. I can't even begin to grok the math and physics required to make this possible, and I'm in no way comparing myself to the actual computer scientists. I'm grateful for all their work.
I guess in technical terms one could call me a "front-end developer", although most folks who self-identify this way would probably not accept me into their club, either. My idea of what makes a good interface isn't state of the art.
I think TUIs, or text user interfaces, are cool. I think mouse-driven interfaces are good for UIs that require a lot of non-linear decisions in a small amount of space, like a hypertext document or a LucasArts adventure game. But for a menu-driven interface where each menu only has a few options, I think keyboard control is the way to go. If a menu only has four things to do, why make me move my mouse between them? Why hide options behind multiple clicks? If a menu can be controlled exclusively by the four main fingers of my left hand, it requires almost no thought or effort.
When GUIs were the new hotness in the late 80s and early 90s, and everyone was getting used to this strange new tool called the "mouse", every peg started getting hammered into the "mouse" slot whether it made sense or not. I think that's a shame.
On the extreme other end, which I also don't like, is the command line interface, which I don't really think is an interface at all. It's an interface for other programs, not people. One of my main beefs with linux is that many programs are written with the assumption that people will enjoy interacting with the computer this way, and I don't. I don't want to have to type --help
and scroll through a myopia-inducing codex of arcane glyphs to figure out how to do what I want. I strongly believe that if you invoke a program without any arguments, it should give you a basic TUI with the most commonly-used options and let you select one. That's what whirltube is, it's what I would expect to see if I type "yt-dlp" on the command line and press enter, if the world worked in a way that makes sense to me.
So, TUIs are cool. You know what else is cool? Websites.
What's Next
When I started writing this, I didn't know what my next project would be, but now I know. It's my website.
Kiki came along, and it's exactly what I've been looking for in a "CMS".1 It's a wiki and a blog engine written in PHP, but it's not a gigantic monster of a framework like Wordpress or Mediawiki. It's also not a stripped-down static site generator that requires building on the command line.2 It's a web 1.0 creation tool for the 21st century. You don't have to install node or react or ember or any JavaScript frameworks; you don't need any frameworks whatsoever. Just a webserver that supports PHP (or any webserver at all if you're using it in static mode.)
In Self-Hosting Again I reckoned that I wouldn't be moving off bear anytime soon:
It'd be nice if there was a self-hostable CGI blog CMS for normal people, but [...] that's not really a thing.
Kiki is that thing! It exists! It supports a markdown flavor that's basically exactly the same as what bear uses, so my writing workflow is the same. I can post entries and create pages from my website, without needing to FTP into my site. When I can FTP into my site, that's when it gets really fun.
I forgot how much I enjoy having full control over the l tech stack. I can edit HTML and CSS, but I can also get in and hack the PHP engine itself. I can change any aspect that doesn't suit me. I can add new functionality! I just need to learn how to do it in PHP, which despite what the tech world would have you believe is still quite functional and stable. I can even add a bit of javascript, for fun. I've softened on my anti-javascript stance. Writing raw JS is a good time. I can add all sorts of fun little widgets and Easter eggs. No, as I noted in a recent footnote, the enemy isn't javascript, it's frameworks.
The Mozilla Developer Network says:
JavaScript frameworks are an essential part of modern front-end web development
I live in the modern era, so I guess I still don't qualify as a front-end developer; but you can call me a web crafter 🦝
If you mentioned this post on your own site and would like to notify me, please enter the URL here:
Otherwise, click here to send a message.
Kiki URL Rewrites With Managed Hosting
Saturday April 26th, 2025
Tags: blog, kiki, meta, tech
Just a quick note about URL redirects with kiki: the user guide gives some steps for enabling URL rewriting (under the heading "SEO-Friendly Permalinks") for use with the "easy" style of permalinks. For example, instead of example.com/index.php?page=blog
, it's much cleaner to simply have example.com/blog
.) I figure most people using kiki would prefer this setup, if possible.
The steps in the documentation assume you're running your own apache server1 and have access to the configuration, but with a managed hosting provider (such as mine) the process is different. It took some figuring out, but here's what worked for me:
Create a file in your root folder called .htaccess
. It should be a text file with only the following lines:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
Here's what each line does:
RewriteEngine on enables the URL rewriting feature.
RewriteCond %{REQUEST_FILENAME} !-d says this rule only applies to anything that isn't an existing folder name.
RewriteCond %{REQUEST_FILENAME} !-f says this rule only applies to anything that isn't an existing file name.
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA] is what does the rewriting. ^(.*)$
is what's know
as a "wildcard expression".2 It ensures that the rule applies to whatever the visitor types after the .com/
.3 the $1 is a reference tag. It refers to whatever appears in the first (in this case only) set of parentheses. So if a visitor types example.com/whatever
, as long as "whatever" isn't an existing file or folder name, that it'll display as if the person instead visited example.com/index.php?page=whatever
. Importantly, this doesn't forward the visitor, it actually changes the URL. That's the difference between a rewrite and a redirect; I confused the terminology in a previous draft, sorry about that.
[L,QSA] is part of the Apache rule. L
means "last", i.e. "stop after you process this rule." QSA
is a flag that allows the rule to work with queries, i.e. anything after the ?
in the URL.4
Big thanks to RaVBaker for helping me piece this together, particularly his extended example. This stuff is tricky and most of the tutorials out there do not explain things well.
The solution may be different for you depending on your hosting provider, but hopefully this will point you in the right direction.
If you mentioned this post on your own site and would like to notify me, please enter the URL here:
Otherwise, click here to send a message.
-
I unfortunately don't have any information about nginx. ↩︎
-
To get even more into the weeds: the
^
means "the beginning of the line". The$
means "the end of the line". The.
means "any letter, number or symbol". The*
means "I'll keep looking for the previous thing until you tell me to stop". Putting the wildcard in parentheses like(.*)
means you can refer to whatever is between them later in the expression with$1
. Regular expressions are very powerful, but they can make your head spin a bit. ↩︎ -
Or in my case of course,
.zone/
↩︎ -
See RewriteRule Flags at Apache.org. ↩︎
Why my titles are terrible, and what I intend to do about it
Thursday May 15th, 2025
Tags: blog, meta, writing
The age of online diaries
I started writing on the internet a few months before the term "blog" was invented. I started on websites like scribble.nu, diaryland and livejournal, which all were very much intended as "online diaries". Being public and writing for an audience was more of a side effect than the intended function. Scribble.nu was first, and I don't remember it having a directory or built-in way to find other people who used it. The only way anyone would know it exists is if I gave them the URL directly, or if they saw it linked on my geocities site.
When you write in a paper journal, you generally don't give your entries titles. At least, I never did. I would write the date at the top of each entry, and it was a chronological log of thoughts and events from that day. A title would feel out of place and maybe a little pretentious. Like what, do I fancy myself a newspaper columnist? My "articles" need "headlines" now? Give me a break, me 🙄
This was very much the mindset with these early online diaries—I don't think scribble.nu even had a way to set a title on a metadata level. Like, I could write one at the top of each entry, but why would I? It has the date.
Livejournal had a "subject" field, but it was optional. I usually left it blank. My journal had a title, and when you read it, it has the entries in reverse chronological order with the date. You rarely look at individual entries, so it was easy to keep thinking of it as a paper diary in a slightly different form. There was a calendar view, where you can view entries written in a given week, month, or year. This was the only time I viewed multiple entries in list form, and they were mostly "(no subject)" followed by the date. Pretty unhelpful when I went searching for something I've written! This also predates tags, which wouldn't be added until 2005, so I was still very much thinking of it as a paper journal in website form, with no organizational structure whatsoever.
I remember at one point lamenting on livejournal that I was "bad at thinking of titles", so pretty early on I thought of titles as something that should have some quality of attention-getting or entertainment value that I was simply unequipped to provide; I don't know why I thought this, or why I never thought to just use simple descriptive titles that would if nothing else allow me to catalog my old entries. It would take awhile for this to occur to me.
The commercial blog era
In the mid-2000s, blogs became big business. This brought about the rise of "click bait", a phenomenon where commercial blogs and news outlets would trick people into clicking links to their articles with headlines that are sensationalist or misleading, because the only metric that mattered was ad impressions. This practice exploded once social media came about, and we all know the tactics they used, even the parodies have become cliches: one weird trick. Top 10 tips they don't want you to know. Is absurd statement true?? (Betteridge's law: no). I won't belabor it.
The point is, in protest against click bait, I tried to make sure, once I did start using titles, that they were as boring or as offputting as possible. I wanted my headlines to be anti-clickbait. I wanted expectations to be zero. I wanted no one to ever think "that didn't really deliver on the promise in the headline."
Because in my mind, clickbait isn't just an intentional tactic to mislead: if a headline is interesting enough to make me click, but the article isn't interesting, that's clickbait. Much the same way I define spam as "any message I don't want".
The sad part
Am I saying I don't think what I write is interesting enough to read? On some level, yeah. Like many childhood abuse survivors, I grew up with an extreme negative opinion of myself, and no matter how much teachers and other positive adult figures in my life encouraged me, I never managed to shake this kind of negative self-thought. The proof, in my mind, was that nobody has ever seemed all that interested in reading the things I write independently. I got good grades on assignments, and scored well on tests, but for all the praise I got academically, no one ever volunteered to read the stuff that's actually important and meaningful to me when I told them about it. I think this is probably true for most writers, right up to the point that it isn't, but with my internalized sense of inferiority instilled in me by my father, I never thought my writing was worth anything. So writing for other people to read was never my priority: I'd write for my own satisfaction, put it out there, and if anyone happened to like it, I'd consider it a nice bonus. So there was some truth to my "anti-clickbait" justification, but it was and is rooted in my insecurity.
Why I'm thinking about this
I read How to title your blog post or whatever by Dynomight (h/t maya, the source of most of the interesting articles I read these days) and it got me thinking about my own relationship with titles. I like how this person writes, and most of what they say makes sense to me, so I thought it'd be a good idea to apply their thought process to my own writing and see if it still makes sense.
You should try to make a good thing, that many people would like. That presents certain challenges.
I think it'd be prudent of me not to gloss over this. Do I make good things that people like? I think, in genre of personal blogging, my stuff is above-average. I try to write the kind of blog I want to read. I value nuance and introspection. For people who value the same things I do, I think my blog would be, if not one of their favorites, at least a respectable example of the genre. I tend to compare myself to the best of the best, the nonfiction books and podcasts and video essays that make up the bulk of my media diet, and that's not fair to me. That's not my genre. I wish it could be, and maybe someday it will be, but that's not what I'm doing here.
A title has two goals. First, think of all the people in the world who, if they clicked on your thing, would finish it and love it. Ideally, those people would click. That is, you want there to be people in the like + click region.
Other people will hate your thing. It’s fine, some people hate everything. But if they click on your thing, they’ll be annoyed and tell everyone you are dumb and bad. You don’t want that. So you don’t want people in the hate + click region.
Since starting therapy and dealing with some of my trauma, "person who hates everything" is a type of person I've become quite familiar with. I've become pretty good at identifying haters, and telling when criticism isn't being made in good faith. I'm not perfect, but I'm a lot less sensitive than I used to be. My dad was a hater; I've learned I can disregard everything he ever said to me. There's no point trying to separate the useful criticism from the abuse, because the source is poisoned.
My bad title philosophy was mostly about avoiding haters, who proliferated on the internet communities I found myself in and mainstream social media. Now I'm on the fediverse, here, and nowhere else. I don't have to worry about an onslaught of haters. If one pops up, I can simply block them and move on.
One must be careful not to fall into a mindset where you think everyone who disagrees or criticizes you is being a hater. I'm a fairly perceptive critter, so I don't think I'm at much risk of that, but I can't let myself get complacent.
Everyone is deluged with content. Few people will hate your thing, because very few will care enough to have any feelings about it at all.
The good news is that it’s a big world and none of us are that unique. If you make a thing that you would love, then I guarantee you at least 0.0001% of other people would love it too. That’s still 8000 people! The problem is finding them.
This basically sums up the reason I still write on the internet, and is a good reminder of why my "intentionally bad title" strategy is self-defeating: there's a vanishingly small chance of the 0.0001% of people who would like my work finding me, and if I make the titles intentionally bad, you can tack on a few more zeroes.
That’s hard. Because—you don’t like most things, right? So you start with a strong prior that most things are bad (for you). Life is short, so you only click on things when there’s a very strong signal they’ll be good (for you).
This is a great point, and it seems so obvious to me now: I should pay attention to the titles that (1) make me click on them, and (2) aren't, in retrospect, annoying or misleading, and try to emulate them. "Trying to emulate people" is something I struggle with, because I don't want to be seen as hack or derivative, but a title isn't really a creative pursuit in itself, and I should try to start treating it as functional. Cuz that's what it is.
Say you write a post about concrete. Should you call it, “My favorite concrete pozzolanic admixtures”, even though 99.9% of people have no idea what pozzolanic means? Well, think of the people who’d actually like your thing. Do they know? If so, use “pozzolanic”. That gives a strong signal to Concrete People: “Hey! This is for you! And you know I’m not lying about that, because I’ve driven away all the noobs.”
Another great piece of advice that should be obvious---the title should match the content. I do occasionally write about very niche interests, and I should make sure the title reflects that to draw in the people who would be interested and let the people who aren't interested know they can skip it.
Be careful imitating famous people. If Barack Obama made a thing called “Thoughts on blockchain”, everyone would read it, because the implicit title is “Thoughts on blockchain, by Barack Goddamn Obama”. Most of the titles you see probably come from people who have some kind of established “brand”. If you don’t have that, you probably don’t want to choose the same kind of titles.
I'm definitely not trying to write like I'm a celebrity, but I do tend to pick titles that will only draw in people who already know who I am, and that they like my work, for all the aforementioned reasons.
Traditional advice says that you should put your main “message” in the title. I have mixed feelings about that. On the one hand, it provides a lot of signal. On the other hand, it seems to get people’s hackles up. The world is full of bad things that basically pick a conclusion and ignore or distort all conflicting evidence. If you’re attempting to be fair or nuanced, putting your conclusion in the title might signal that you’re going to be a typical biased/bad thing. It will definitely lead to lots of comments “refuting” you from people who didn’t read your thing.
This touches a bit on my anti-clickbait ethos: a title with a really strong take can get people to click, but it can also be a source of backlash. I think I'm somewhat insulated by not having a "comments section": when people won't see their comments appear immediately, they won't get the same dopamine rush of having "owned" me. People who would take the time to write their own response on their blog or send an email are usually going to be the same type of person who would actually read what you wrote.
I'm also protected from backlash because, well, my takes usually aren't all that spicy. Take one of my recent posts with one of the worst titles: Ren and Stimpy. I have no idea what an interesting title for that post would look like. I don't have any grand conclusions. It's sort of a book review, sort of a show review, and sort of a jumble of personal thoughts. I could've called it "Reviewing the unauthorized Ren and Stimpy book", but that's only partially true, and it's not exactly a barn-burner either. I could've called it "The Ren And Stimpy Book Is Okay But I Have Problems With It". Is that attention-getting? I don't feel like it is. People don't want wishy-washy, they want confidence! But like, these are my actual opinions. Sometimes I don't have a strong take. Sometimes an experiment is inconclusive. Sometimes I'm not sure how I feel.
Conventional (i.e., commercial) wisdom would suggest that I either lie in the headline or don't write the thing at all, but this isn't a commercial endeavor. It's blogging. The honest personal experience is the point. So I should probably accept that some things I write will be more interesting than others, and pick my titles appropriately. I settled on "Ren and Stimpy" because, well, it's probably the only thing I'm going to write about Ren and Stimpy. The title serves the function of making people be able to find that post. That was all the thought I put into it. But honestly, I could do better. Even "I'm conflicted about the Ren and Stimpy" book contains a kernel of an idea, and it still contains the keywords. It's boring, but as Dynomight goes on to point out:
Boring titles are OK. I know that no one will click on “Links for April” who doesn’t already follow me. But I think that’s fine, because I don’t think anyone else would like it.
But then suggests a tactic I'm not on board with:
Consider title-driven thing creation. That is, consider first choosing a title and then creating a thing that delivers on the title. It’s sad to admit, but I think there are many good things that simply don’t have good titles. Consider not making those things. The cynical view of this is that without a good title, no one will read your thing, so why bother? The optimistic view is that we’re all drowning in content, so what the world actually needs is good things that can find their way to the people who will benefit from them. In practice, it’s often something in the middle: You start to create your thing, then you choose a title, then you structure your thing to deliver on the title.
Even if I wanted to, my brain doesn't work like this. The writing will always come first. If I tried to think of a good title for my post about the Ren and Stimpy book first, I wouldn't have written it. If I approached writing from the perspective of "will anyone be interested in this?" I wouldn't have a blog at all. I'd second-guess myself and talk myself out of writing anything. This is probably good advice if attracting readers is your main motivation.1
My favorite thing category is “Lucid examination of all sides of an issue which finds some evidence pointing in various directions and doesn’t reach a definitive conclusion because the world is complicated”. Some people make fun of me for spending so much time researching seed oils and then lamely calling my thing “Thoughts on seed oil”. But what should I have called that instead? Lots of bloggers create things in this category, and no one seems to have solved the problem.
I like that category of thing too. I think attracting this type of reader is hard because curiosity goes hand-in-hand with skepticism. One strategy could be a title like "Seed oils are more complicated than you ever imagined" or "Forget everything you thought you knew about seed oils". But the sort of person who'd be interested in the topic is also more likely to judge it as clickbait, even if, had they read the article, they would find it to be true.
I think a good approach could be a personal connection to your own curiosity, like "I fell down a rabbit hole about seed oil" or "I never thought I'd care this much about seed oil." Curious people like reading about other curious people's rabbit hole journeys. But if you do it too much it might come to be seen as formulaic. Finding the right balance is key.
Conclusion
I'm going to be thinking about all these ideas when I blog in the future, and I'm going to spend more than 0.5 seconds thinking about the title. I'm going to try to figure out a title that I would want to click, that matches the content of the post and wouldn't leave me feeling disappointed. It might attract more haters, but I think I'm at a point in my life that I can deal with them. Not every post will have a natural good title, so if one doesn't come I'm not going to force it. I will do this for one year, and see if it increases the satisfaction I get out of this blog. Even if it doesn't, it probably won't hurt anything, and it'll be a habit by then, so I reckon I'll keep doing it.
If you mentioned this post on your own site and would like to notify me, please enter the URL here:
Otherwise, click here to send a message.
-
I.e., if your goal is writing something to get a lot of views and make ad revenue. But if you don't care about being hated, you could probably write nothing but misleading clickbait headlines and it'll work out for you. ↩︎
Stop Using Relative Timestamps
Thursday May 01st, 2025
Tags: blog, information, meta
I talked briefly in the previous entry about how much I value timestamps, and how frustrating it is to come across information and have no idea when it was presented. Well, as if to underline that point in red ink, I just came across a screenshot of a social media post from an application that showed the time posted as "8 hours ago".
Is it 8 hours ago... from the time the person posted the screenshot? Did they take the screenshot themselves? If not, do they have any idea when it was taken? What could have changed about the contents of the screenshot in the unknown amount of time since it was taken? Who knows?
Relative timestamps are but one small asssult on a healthy information space, but it's an easy fix: don't use them!
They're no good in the long term, either. If you come across an article that states it was published "177 days ago", can you say off the top of your head when that was? I can't. If I take a monute, I can think "Well, 180 days is half a year, so 6 months ago would've been like early November?" I still might not realize until putting it into Wolfram Alpha that 177 days ago was November 5, 2024. US election day. Potentially pretty important context!
And honestly, I usually wouldn't put in the effort, and I think most people wouldn't. Our brains just parse it as "awhile ago" and move on. Relative timestamps are no good for anything.
If you mentioned this post on your own site and would like to notify me, please enter the URL here:
Otherwise, click here to send a message.
Website, Kiki, Brain
Tuesday April 29th, 2025
Tags: blog, crafting, kiki, mental health, meta, programming
Most of my creative energy for the past few days has gone into my website. I'm really happy with how it's coming along. My goal was a design that combined the simplicity of my bearblog with the colorful personalization of my old neocities site, and I think I nailed it. I solved the navigation problem by putting all the major site categories in a well-designed and accessible drop-down menu in the navigation bar. I've always wanted a site with a drop-down menu, but always balked because doing it with pure CSS or a details/summary hack never looked or behaved quite the way I wanted. Like I'm sure it's possible if I beat my head against it long enough, but instead, I just used javascript. Every big website is three javascript frameworks in a trenchcoat, so I can have a little script or two. It looks great.
I think I'm pretty happy with the design and structure of my site, most of the changes I want to make now will involve hacking the PHP to streamline and automate some processes. I'm not going to rush it, because I need to take a break from programming for awhile. I love it, but I tend to get "lost in the sauce" a little bit. It's like the good version of what I experienced during my Linux ordeal. Instead of addiction fueled by frustration, it's fueled by the joy of creation. It's good, but hacking the PHP will be much more challenging than anything I've done with kiki this far and I need to slow my brain down.
Kiki
Speaking of kiki, I'm still very happy with it. There are some functions from other wiki/blog solutions I wish it had, but it's still been a joy to work with. I can't believe how long my workflow for having a website was "writing HTML in the Neocities editor". I don't like writing HTML under the best circumstances, and I love neocities philosophically, but their file management/editing UI is straight-up dog trash. Maybe it's just the devil I know, but markdown works for my brain. Making a new page on neocities involved: deciding what template I want to use, copying and pasting the template, making sure to change all the fiddly bits (there are still pages on the old portfolio site with the wrong title attribute because I just couldn't make myself care,) writing the page, checking the formatting, fixing the formatting, checking the page again, checking the links, fixing the links, and hopefully adding a link to the main page (checking it 2 or 3 more times to make sure everything works properly, usually fixing at least one more thing after it's live...)
With kiki, the process is: create a link to the new page. Click the link. Fill out metadata. Write markdown. Save. Done. I'm still not perfect, but I make way fewer mistakes because markdown stays out of my way. It feels like writing++, not writing subsystem for hypertext
.
Anyway, I've copied most of my stuff from the old site and linked to most of my stuff on third-party sites. There's still probably a lot of blog posts I want to copy over to the archive, but so far I've just got a few recent ones and a few old ones that stick out in my memory. If you've been a reader on bearblog and you think any particular entries are worth highlighting, please let me know.
In other website news, I'm thinking of ditching the guestbook, at least for now. I checked my dashboard to see if all the recent activity has impacted my hosting fees at all, and no, not really; but I noticed that the cost of a SQL database is almost as much as the rest of my website combined. Which is still barely anything, but like, the guestbook is kind of broken anyway. It doesn't escape characters properly, which wouldn't be a big deal, except that it breaks if someone uses an apostrophe,1 which is a pretty important character. Like if you're going to write English with a limited character set, you can get by with just periods, commas and apostrophes. Losing any of those 3 is kind of a dealbreaker. I can fix it by editing the database, but I don't relish the idea of it looking like trash until I notice it and am at home where I can fix it.
I could debug it, but I'd rather spend my energy on a guestbook module I can cleanly incorporate into kiki, preferably using flat files instead of a database.
I mean... I guess the simplest option would be to just use my existing contact form, and if you put "guestbook" in the subject line then I'll add your message to a guestbook. I'll just make a "guestbook" tag and give each entry its own page. Boom, problem solved. People might not want to use it if the message doesn't appear instantaneously, but then they can just not use it. There are plenty of places on the internet for instantaneity, my personal website doesn't have to be one of them. It's cool.
Also, I realized my captcha approach was totally unnecessary. I changed it to a "negative captcha". The idea is, bots that spam forms on websites will put something in each input field. They're not designed to leave anything blank. So I have a captcha field on the form that's invisible to humans but visible to bots. If that field contains anything when the form is submitted, it's identified as a bot submission and rejected. I read about this technique years ago, and apparently it works, I don't know why I didn't think to do that before now. I guess "bots fill out every field" feels slightly more superstitious to me than "bots can't identify emoji". Like, is it true? I feel like I've seen spam comments on blogger where the bot didn't bother to fill out the URL field. Which seems counter-intuitive to the purpose of spam, but nothing about spam makes sense to me. Anyway, I guess I'll see if I get any spam and report back. If it doesn't, I might try giving the bot traps ID attributes like "message" and "email" and see if it's more inclined to fill them out. The actual message and email fields could have gibberish IDs, they only matter to me and the computer.
Brain
So, I just did all the work I talked about for the guestbook. At work, on my phone, even though it would've been way easier if I waited til I got home. This is the problem with my brain problems: if I have an idea, I need to act on it immediately, because I have the motivation now, I may not have the motivation later. A lifetime of ADHD executive dysfunction has trained me to strike while the iron is hot, do the thing now because when I get home, it may be too late. Even though my ADHD is treated, and I'm a lot more likely to be able to follow up on an idea, old habits die hard.
Even as I was writing this, I thought "Now that I integrated the guestbook page into kiki, I know I can do the same with the contact form." Previously both functions were in their own separate sandbox, and I crudely copied the HTML generated from one of my pages to make it appear to be smoothly integrated. But there were seams. I knew I could do it right.
The only PHP function in the form is one that parses the URL for a ?subject=
query and auto-fills the subject field if there's anything in there. Following the instructions in the user guide, I added a new variable to the load_page()
function to allow me to do this from within kiki:
if ($page_source)
{
... snip ...
if (isset($_GET["subject"]))
{
$dynamic_content["subject"] = $_GET["subject"];
} else {
$dynamic_content["subject"] = "";
}
... snip ...
}
Now in my contact form all I have to do is add value="$subject$"
2 to the subject field, and it works! It's seamless!
This is something I was never able to do with oddmuse. I had to use the "copy the HTML" method and keep the contact form sandboxed, because the contact form was PHP and oddmuse was perl.
It's a very small thing, but this is the first time I've actually changed the kiki code for a dynamic function, and not just adding a <title>
attribute or header image. Getting it to work feels incredible, I'm unstoppable. I already know what my next hack will be: custom emoji! It should be dead simple to add a $$headpat$$ variable that will drop in this critter:
See, this is what my brain does. I shouldn't be doing any of this. Remember what I said the other day about debugging PHP on your phone? And how you should not? I can't take my own advice. I said I needed to take a break from programming and slow down and then I did this in the same afternoon. My brain makes me do things I shouldn't. I wish it didn't have a mind of its own
If you mentioned this post on your own site and would like to notify me, please enter the URL here:
Otherwise, click here to send a message.