The C Programming Language
This book definitely was nostalgic for me. It was one of the first books I bought when I started Computer Science at Georgia Tech.
Behemoth
A few weeks ago, I began thinking about a tool that integrated all my various online feeds. At the time I was thinking about integrating:
- RSS
- Podcasts
- Reminders / Notifications
I've abandoned this idea for primarily two reasons.
- Writing my own RSS reader would be a big task. Thus the project's codename 'Behemoth.' Dave Winer's concept of RSS is great, but the realities of it is that there are a LOT of corner cases and things to take care of, etc. I read a blog entry about it a few months ago that cemented how much I was going to be facing and that really turned me off the idea.
- Twitter was going to absolutely dominate the feed. My Twitter account followed hundreds of people and it was really going to be a problem for this structure.
The first remains a massive project and undertaking. The second though has changed. I've been stepping back from Twitter. I'm not off it, but I am using it far less. And I think that the Fediverse would actually be a better usage here. The underlying nature and 'inefficiency' of it, the "content warnings" which are really subject lines, etc. This could really prove to be a better integration aspect.
Along with this idea, I am reminded of my custom Twitter client from back around 2007. I can't remember what I called it, but the defining feature I had come up with was that I hid any post a user made after their three most recent ones.
Back then we were pre-threads, and we were dealing with people going on massive tweet storms about topics. I got frustrated when they dominated my feed. So I decided to collapse any of these extra posts. You knew they were there, but it didn't fill your feed. I could see something similar here.
Ideally, another aspect of the Behemoth RSS portion would be combining RSS posts about similar topics. I subscribe to a number of feeds which overlap and so I can get a half-dozen entries on a news item. Having a system which groups based on topic and keywords would be a huge benefit.
So I guess saying I abandoned this idea isn't true. It continues to sit in the back of my mind as something I'm thinking about. But still, no immediate plans to work on it.
Starting the day with newsletter coding. Not sure what is going on, but the newsletter isn't sending. As far as I can see, it is working on my side and an issue with tinyletter. We'll see if this resolves tomorrow or what.
I have already been thinking of moving the newsletter to another sender, and just haven't made the move yet.
Integrating with Mastodon and the Fediverse
If this works correctly, the blog will identify this entry's link as being a post on the Fediverse which then properly generates code to make an embed on the blog. (Update: It worked perfectly.) The post is the first in a short thread, where I delved into this. I'm not going to embed it into the newsletter email, though I am beginning to think I should re-evaluate that.
First, I found a free and open API which tracks and provides info on instances of Fediverse. I don't have a need for the list to be perfect or completely up to date, so I just query for the 1000 biggest instances, once a week. The risk of problems is low enough I don't think it is worth me devoting more time to it until it becomes a problem.
So now, when I create a post on the blog, it checks the URL against the list of Instances and if it finds a match then it knows to generate it as a Fediverse embed. Nice and simple.
Apologies to the newsletter readers, there has been a bug where some post links were not included in the emails. I fixed that this morning.
The newsletter goes out most evenings and shares the entire day's posts for easy consumption in your inbox.
Did a little coding on Glowbug today. First in a long time. With the growth of Mastodon as a social network, decided I needed to improve the cron bot daily posts for Mastodon. On twitter, it self deletes the previous post before making a new one. I was working on getting that implemented for Mastodon, so my account will not be cluttered with the bot posts.
I'll know better tomorrow if it works or not, but it should. The API is very straightforward for Mastodon.
Seth Godin on Feature Creep
It's a short post so I'd be basically reprinting it in full if I pulled an excerpt, you should just go read it. While I think he draws correlation as causation for his Yahoo & Google example but, in general, I support the belief and the core point. Too often we accept feature creep in our lives as a whole and need to be better at removing older features.
Python spelling correction deep dive
Ran across this old article about how Google does their spelling correction on searches. You search for 'speling' and they say 'Returning results for 'spelling'' - It's a bit of a deep dive for anyone who isn't proficient with programming.
Coding for flexible scheduling
This morning's back-of-my-mind coding puzzle I'm trying to figure out. How to best handle flexible scheduling of things. I want to do a rotation of posts that are of a similar format: "What I'm Reading," "What I'm watching," "What I'm listening to," and "What I'm working on" - these would rotate through books, tv, podcasts / audiobooks, and the things I'm spending my time on.
But I'd like to add it as a feature in Glowbug as a scheduled prompt sort of thing. But I need to figure out how I store it flexibly so I can say "First Saturday", "Second Saturday", etc.
Right now my idea is to make use of PHP's strtotime() function which works on the above, but doesn't handle "every Monday" etc. So I'm trying to wrap my head around this puzzle and figure out how to tackle it.
"The Four Pillars of Data Observability"
Answering questions like “is our data anomalous?” and “how has this metric trended over time?” requires historical knowledge of our data over time. Until storing complete historical snapshots of our data becomes feasible, we’re left with storing approximations.
How much data do we need to reconstruct a useful picture of our data? That’s the question we attempt to answer in this article. The groupings of questions we need to answer in order to describe our data are the “pillars” that underlie data observability.
Aug. 13, 2022 - Glowbug's Tag Synonyms

Transcript:
This morning has been nice and relaxed. Had a nice breakfast with family and then had to come back and do some "homework" as I have been tasked with teaching my niece and her son to play the Pokemon card game and I had to refresh on the rules.
After which I played a few games of chess. I lost most of them, so I switched to some coding. Glowbug now handles tag synonyms. If I rename a tag it saves the old tag info so that if I try to recreate that tag, it points to the synonym instead. Should help avoid some silly tag errors from occurring more than once. Hopefully.
Trick
Counting Character Appearances in Excel
=SUM(LEN(A1)-LEN(SUBSTITUTE(A1,"A","")))
The above is how you count the number of times the letter "A" appears inside the contents of cell A1 in Excel. I don't know if there is a better way, but this was how I came to do it when I was working on something in Excel this morning and felt like sharing.
Essentially what it does is take the total length of the word, then takes the word and removes every "A" in it, and then compares the length difference to determine how many As it removed.
N.B. - Capitalization matters here. You could modify it to capture lowercase 'a's as well, however for my purposes I just used UPPER() to make the words I was checking all uppercase to do these counts.
I just remembered an idea I had for this blog. I have half-implemented a "Chapter" feature, which is an old blog feature I had from the days when I was primarily blogging as a public journal of my life. Something which I still do, but nowhere near as much.
The idea of the Chapters feature was to allow easy grouping of posts chronologically into eras of life. Like you could do monthly, or based on life events, etc.
But a problem with this idea is that it is primarily something done after-the-fact and doing it in the middle of experiencing life is difficult.
My realization this morning was also that I should implement "series" as the feature for the blog. Sure, some might be chapters of life updates, but it would also handle things like my post from a few days ago regarding basic online and personal security to make it more difficult to hack you. The next post is going to be about password managers, what they are, and why to use one. I'm not sure what the third post will be, but whatever it is, will go into that series.
I've just got to figure out how to add it to the admin UI and then I'll sit down and code it.
Auto Embeds for Books
This afternoon I coded a book embedding function for this blog. Now I can input a book's ISBN inside my blog's custom embed tag and it queries Google to get book title, author, and book cover. With that stuff, it generates a quick embed into blog posts.
I am also linking these embeds to bookshop.org rather than Amazon, however there is no API for the site as far as I can find. So I am using the simple "send you to search their site with the ISBN" which works but isn't ideal.
Error with Newsletter Emails and Special Characters Finally Fixed
Sometimes you're just about to go to bed and one of the smaller bugs that you know exist in your code grabs you. I had already done some coding on the blog, there wasn't anything notable for you all so I wasn't going to mention it.
But the bug that grabbed me is reader-facing, specifically to the handful of folks who read the posts on the blog in their email everyday. There was an issue where some special characters were showing up wrong and giving obvious UTF encoding errors.
For example this excerpt of a headline: "Decolonize New Zealand’s Name"
Showed up as: "Decolonize New Zealand’s Name" (bolding for effect, not part of the actual bug.)
Not something which was the end of the world, and also something which I had fixed with the rest of the blog already, from input, to database, to publish, it's all UTF-8 safe and coded. It was nefarious and I couldn't figure out where it was coming from. I was befuddled but I just let it be, it wasn't an end of the world thing - but I wasn't happy about it.
Well, tonight, the blindingly obvious answer struck me out of the blue. The error had to be in the email itself, specifically in the encoding information I used when sending the email. And, sure enough, after adding a UTF-8 header and meta tag to the emails, all appears to be fixed!
With that, time to publish the fixed newsletter and head to bed.
Custom Paths
Making tonight an early night after yesterday's (admittedly) productive insomnia. After work, went out to do a quick bit of errands with the wife, and after we got home and watched What We Do in the Shadows I got back into my code.
Mostly finished my taxonomy rewrite - There is still more to do, but we're back to parity with the previously (badly) written page and we've added the ability to define hierarchy in the tags. Though the backend doesn't yet do anything with that information. That's phase 2 of this bit of work.
Custom paths - Unlike Wordpress and most other blog engines, this CMS was conceived for links and Twitter-esque posts (the very first name of this blog engine was 'Blips' before I moved to 'Glowbug' as its name.) I've been expanding Glowbug's capabilities as I use it more, but due to this original design concept I didn't give posts their own pages by default.
Most of them exist only on the main index (while they're new) or on date archive pages. However, I did eventually add the functionality for standalone posts - but, again, I opted for maximum simplicity at first. Every post is given a unique hash string identifier (for example, this post's hash is 'fa340ae8'), and up to now that string has been used when generating the page urls. Simple.
Tonight I started the code to allow me to set custom paths. It's probably 60-75% of the way done. I can add them. And when I publish it sets the URLs correctly across the site. But the work, as always, remains on the admin side. Things like the paths still don't show up correctly in the admin panel, or needing to be able to edit paths once published, or when I have a post drafted but not published, that currently doesn't handle paths properly. But - we're getting there.
Delete ghost posts - As part of the above work, I uncovered an overlooked bug. The way the site published posts has, up to now, been entirely additive given that file paths were all fixed. No generated html files were being deleted. Again, this structure was perfectly find under the original design specs. But adding standalones is when this became a bug. Once a standalone post was published specifically.
Standalone posts could live on as ghost posts after I deleted them in the blog's database. Because, the way it was written, even if I deleted it from the database, it's generated html file would remain. I fixed this by adding code to remove any standalone files when a post is deleted. I still need to catch when a post path is changed after publish, and some other corner cases. But as we have a userbase of 1, I can be confident that that is not a major problem I'm going to run up against in the short term.
And that's it. I'm calling it quits for the night. Sending out the day's newsletter and heading to bed to read until I fall asleep and make up for some of last night's sleep debt.
Insomnia into Code
I suffered some pretty horrendous insomnia last night (speaking comparatively for myself.) But the good news is I've really been enjoying coding in Javascript and I spent most of that time doing it. I expect later today to be in a pretty dour mood given the lack of sleep and the heat, but I'll survive.
I spent most of last night working on basically a complete rewrite of my taxonomy system for posts. I'm adding hierarchy to tags, and also completely rewriting the way the admin page that manages them works. I'd say I'm about 75% of the way there, and then I'll dig into reorganizing them. Once they are reorganized I'll be changing how they function in the backend when I'm writing a new post (for example, when I choose a tag that has a parent tag it will auto-add that tag to the post), and then I'll be experimenting with how they're displayed on the front end.
This will also likely mean that I begin making the tag archive pages. Which has been on my to do list for a while, but I have just held off.
One of the "gardening" tasks for tags is to go through and catch typos (I had both "conspiracy" and "conspirazy"), or when I use synonyms (I decided last night to use "programming" instead of "coding" and also that when a tag is a verb, I'll use the -ing form of it.)
One feature I realize I need to add in my admin tool is that when I merge tags, rather than simply deleting the old one I should save it and what it's merging into. So, in the future, if I try to add that tag again the system will be able to autocorrect it to prevent the "weed" tag from popping back up. Not doing that now, I've added it to my backlog of things to add. Adding that feature now requires a bit more back-end reconfiguration and I don't want to rabbit hole on this all, I'm hoping to be done with my current run at the taxonomy system later today. Who knows though. Maybe another night of insomnia will make it happen.
The next big thing is figuring out the right level of complexity to enable with nesting of tags. For example, I could group all of the programming language tags under the 'programming' tag - that makes perfect sense. Is it worth grouping all the tags which are names of individuals (Boris Johnson, Joe Biden, Elon Musk, etc.) into a group under 'Person'? I don't think so, at least not as of now. Or I have a slew of "us politics", "us history", "us soccer" - do those go under "USA"? As I'm working on implementing the tag hierarchy, I'm thinking about these things and trying to decide my feelings on them.
After this bit on taxonomy, I think the next "big" feature for the blog is to add a photolog of sorts. I've never been a consistent photologger, though I've tried a few different photologs over the years. I also never really adapted Instagram as a regular place to post. But, I do post photos here from time to time, and I could add an auto-tweet for new photos, etc. It's in the backlog, we'll see when I get to it. I still have another small coding project that isn't part of Glowbug to distract myself with.
As far as my enjoying working in Javascript: What I mean is that I'm enjoying working without any library. Historically I've relied on jQuery when writing complex Javascript, but I've come to realize it isn't needed anymore. The language has come a long way over the years, especially with its growth as a backend language rather than just for browser frontends. I'm doing things with native JS which I never would have been able to do without wanting to gouge out my eyes and it's as elegant and simple as jQuery.
It's just really impressive to dive in and really appreciate how far the language has come. Well done to its maintainers.
Tweaking the Newsletter
Spent a little bit this morning tweaking the newsletter code. I cut out some empty space to make it look better.
Also, I've decided to invert the order of posts. It has been publishing posts newest to oldest for the newsletter, I've decided to invert it, so the emails will now read chronological through the day. It hasn't happened since I started the newletter, but there are some days where I do multiple entries on a developing news story. And I think for the purposes of the newsletter, this makes more sense.
I'm still trying to figure out why some UTF8 characters don't encode right for it. Not sure where it's getting mucked up.
And, sort of invisible to you, I'm changing the creation process for the newsletter. Up to now, the email sending has been a quasi-automatic process. The system would automatically generate it via a cron job. But then the newsletter tool still requires me to manually approve it. So, depending on how late I stay up it might go the same night or first then in the morning when I wake up or, honestly, it sometimes goes out when the dogs wake me up to go outside in the middle of the night.
In any case, I've now made it so that it will be a fully manual process. The intent being when I've made my last post for the night, I can click a link to initiate the process. I dislike the fact that more often than not the newsletter for yesterday is arriving at 9am Eastern for most people. There is of course the chance that this new process is simply not going to work and I'll keep forgetting to send it. I have an idea for a more elaborate system which has the safety catch of sending it each night if I haven't manually done so, but I don't know if that system is needed yet. We'll see.
Late Sunday coding, mostly for quality of life as I move back to Linux.
First, I had to update my "To Listen" Podcast tool to reflect the new file structure. Simple enough.
Second, I wrote a script to replace some software I had in Windows. I utilize ObsidianMD for a second-brain, personal library of store. And to that end, I store it on my own server so I can sync it to my phone. On Windows, I used some freeware to make the sync happening, but the same tools don't exist in Linux. However, lftp does. This post on askubuntu.com dives into it, though I ran into an issue and had to fix SSL required access for the server. But, we got there, and now I can easily sync again.
Now, time to retreat from the heat and head to bed to start a new work week.
New blog site idea (this digs back to an old old idea I had years ago.)
What if, instead of an author defined templated design, instead the blog presents you with options to build its layout to your liking. Not just overall layout, but lets you filter posts, etc.
Then, when you hit the site, it loads XML/JSON of posts and builds the page as you laid it out. Also, with this, it knows the last posts you saw, so it puts the ones which are new since your last visit front and center.
It (relatively) minimizes the server hit as you're being served an html page, js file, css file, and the post xml/json file.


