Yesterday's Claude Experiments
So I've been playing with Claude programming for a while via the web browser, this week I added it into my desktop VS Code to see how it worked. I pay for the minimum for a Claude account and I wasn't sure how it would work for me since I wasn't paying for Claude Code higher tiers.
Turns out, it works very well. Basically I get a certain amount of usage in hour chunks, and also overall for a week. After two days of use I've used roughly half of the week's quota. Which, honestly is pretty good for my casual project use case.
The quality of the code has been largely very solid. Everything I'm asking it to do are things which have well defined patterns which makes the quality better since it has more experience to pull from.
I also experimented with using self hosted Qwen 3.5 Coder and unfortunately the coding quality gap remains quite noticeable. Hopefully someday.
Claude enabled me to work through basically my entire backlog of Glowbug bugs and feature ideas. Many of these being things from over a year ago where the friction of doing it overcame my need to do it since this is a personal project.
Beyond those, I did some quality of life updates and general improvements.
Here is an incomplete list:
- Refactored the publish functionality for the statice website to make it smarter. Since I wrote it, it has basically required full archive updates on every publish.
- A general pass of security vulnerabilities and bugs identified in code
- Updated and improved the template engine in Glowbug
- Updated and improved how tags are handled by the system, including improving my admin page for them and adding tag archive pages with pagination for ones which go very long
- Added new code that allows me to input footnotes as part of a post.
- Fixed the bug with how the spoiler function works where it now hides text across multiple lines, this was a longstanding bug but since I use the spoiler tag so infrequently it's languished in the backlog
- Added an improved system for managing my movie radars for rating them, including integrating them directly into search and pulling movie information via API. Previously they were just implemented in a post's body with no overall tracking.
- I realized my coding backlog / todo is short enough that I should implement it into glowbug's admin itself rather than use a 3rd party tracker. So we coded a simple tracker into the admin section.
- I had it rewrite and improve most of my admin pages. They are all still barebones, but it added functionality and improved how they perform.
To be clear, in all cases, I review the code it writes. I don't merge anything without reading it and making sure I understand it or understand the gist of it.
It's been an interesting experiment and I definitely see the value for my use cases as a hobbyist coder and since I am using well trodden and documented languages and use cases. There are definitely still bugs it creates that I have to generate, but it has definitely saved me time overall these past few days.
As is tradition for this time of year, I've started picking up on side coding projects once again, including Glowbug - my custom CMS for this blog. I did some backend tweaking - fixing a few lingering bugs and adding some admin functionality which I needed.
I also did the (somewhat) yearly update of the About Me page. Adding a TLDR at the top, and then adding my short summation for 2025 to the end.
"Write 'Freehold' Software"
A blog entry where the author dives into the need to support software which is not a service, a term he proposes be 'freehold' to make use of the term's definition as it relates to real estate: "Permanent and absolute tenure of land or property with freedom to dispose of it at will."
"The Art of Lisp & Writing"
A wonderful essay that discusses the creative process, the process of discovery, of sharing knowledge and more.
I loved this paragraph:
As people need or want to do things with materials and the world, people with special skill take the fore and devise or discover how to manipulate the physical world to make those things. To avoid future mistakes, these makers write down rules of thumb, patterns of creation and making, and safety factors as a practical matter. Today we call them engineers. When we think of engineering today we think of carefully planned scientific engineering such as building bridges, where it is a fairly linear though costly and complicated process to go from the planning stage to a completed bridge. We forget the centuries of tinkering with bridge design in prehistoric and ancient times when bridges were gingerly tested as designers searched for principles. Even still, on November 7, 1940, at 11:00AM, the Tacoma Narrows Bridge collapsed from wind-caused vibrations after being open to the public for a few months, showing that even sophisticated engineering techniques—one could even call them contemporary engineering techniques—can fail.
This reminds me I was meaning, one day, in my plentiful free time to return to programming Lisp. I did some of it in college, and I recall enjoying it on a technical / logic level, though I never reached any real capabilities that had it do more than just things like simple terminal applications, or using Alan Kay's Smalltalk. Without a doubt, I saw the great power and potential. Lamba functions were a revelation for college-me.
Now more languages have similar functionality, and I don't know how Lisp has grown and evolved over the past twenty years (oh god, I can now refer to the time since I was in college as 'decades') -- but I am adding a note to myself to go looking into it again.
Boneheaded mistake on the new search - the server code required a user to be logged into the backend. Oops.
That works for me, but not so much for you. (Whoever you may be.)
RSS Middle Layer
I posted a few days ago about my hassle trying to figure out a FreshRSS extension before finally giving up.
The problem is there is one RSS feed I follow which keeps HTML entities in the titles of posts. So rather than "This isn't a bad example", I get "This isnXXX;t a bad example"
Today I wrote code which solves it by being a MITM script that fixes the text before feeding the URL to the RSS Reader. It feels like a silly solution, and the "right" way is definitely the integrated extension for FreshRSS, but when I can't get it to work it's time to go back to the next best working solution.
"The Monster-Slaying Game You Can Play Almost Anywhere"
A neat article that delves into the story of how Doom became the game which the world loves to run on any gadget that can.
Id had programmed Doom to be easily modifiable by players. Four years after its debut, the company took the radical step of releasing the game's source code to the public for noncommercial use; an international community of fans suddenly had access to the guts of the game, and could retrofit it to all kinds of hardware. "It was not only a gracious move but an ideological one — a leftist gesture that empowered the people and, in turn, loosened the grip of corporations," David Kushner wrote in his book "Masters of Doom."
Site search is live
Well, here it is. It's not perfect. But it's mine. I am particularly proud of the integration of my social posts from X, Bluesky, and Mastodon. The system auto updates my social posts from Mastodon and Bluesky nightly. X requires me to do a manual update process, which is fine as I don't post there almost at all anymore.
It doesn't yet handle pagination which I still need to do, but I've run out of steam for it tonight and it's completely usable without it.
I did manage some more work on the search for the blog last night, mostly fixing bugs and working on the front end. I also realized that while I needed to make pagination based searches, I also needed a way to determine the total number of pages in a search for the pagination, so figuring out how I would handle that took a bit.
Secondly, and perhaps embarrassingly, I finally spent time relearning branches and how to use them with git. As a solo developer, I don't make a lot of use of them, and I am trying to get better, especially when it comes to new features which touch a lot of things.
I plan to put more time into it tonight and hopefully get it to the launch point? We'll see.
Search update
I am still working on Glowbug's site search, I did some more programming for it last night. I've got the back end largely built, and the basics of the front end for the search interface, but still have more to do. And tonight is D&D, so possibly tomorrow I'll hammer it out and finish it. We'll see.
To Do:
- Finish display of matching social posts
- Pagination of search
- Anti spam/abuse protections
- Other things I've forgotten I need to do
After spending 30 minutes trying to troubleshoot adding a new extension to my selfhosted FreshRSS I finally abandoned it and just did a quick 30 second Userscript that does it client side with Javascript.
I don't know what is going on with the FreshRSS extension, but sometimes it isn't worth doing it right - I just want to fix my problem.
Adding Search
Tonight I started work on writing code to add a search function to this blog. However, not just posts on the blog, also posts I make on social media. So I wrote code for importing posts from Bluesky and Mastodon, the latter mainly for completeness as I don't post there much anymore. It imported my backlog and then I modified the same code to be usable for a nightly cron job.
The search itself is still something I'm wrestling with. Aside from the added sources of content, I am trying to figure out how to best do this.
It's no secret that search is complicated. Which makes this a fun mental challenge.
So I have the most basic parts done, and now it is the gritty details of adding logic for ordering these posts, as well as adding things like spam protection, caching, XSS protection, etc. And then it will be writing the client side code and display functionality.
I'd guess I'm like 30% done.... famous last words. We'll see.
Windows has its own 'Vim' (sort of)
It's definitely not vim. I'm just being snarky. But interesting to see how it does as it rolls out.
Testing to see if my blog posting to bluesky now properly handles links, like trickjarrett.com - as well as handle hashtags in copy: #programming
Update: It does!
Radar Charts
Okay, the radar in the previous post was generated out of my test code. Now comes the real test, integrating it into the blog itself... Let's see.
Here's my rating for the movie G20, that we watched last month.
Update: Tada! It works. I did have to go into the database and change some stuff, but cool to get it implemented in the blog. Now I can generate radar graphs in the back end of my blog.
Example COBOL Program
After coming across an article about the COBOL code used in government and banking, I decided to go see what its code looked like. It's, as expected, very old. And this code takes me back to my earliest days of programming, though I never wrote COBOL.
**********************************************************
* COBCALC *
* *
* A simple program that allows financial functions to *
* be performed using intrinsic functions. *
* *
**********************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. COBCALC.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PARM-1.
05 CALL-FEEDBACK PIC XX.
01 FIELDS.
05 INPUT-1 PIC X(10).
01 INPUT-BUFFER-FIELDS.
05 BUFFER-PTR PIC 9.
05 BUFFER-DATA.
10 FILLER PIC X(10) VALUE "LOAN".
10 FILLER PIC X(10) VALUE "PVALUE".
10 FILLER PIC X(10) VALUE "pvalue".
10 FILLER PIC X(10) VALUE "END".
05 BUFFER-ARRAY REDEFINES BUFFER-DATA
OCCURS 4 TIMES
PIC X(10).
PROCEDURE DIVISION.
DISPLAY "CALC Begins." UPON CONSOLE.
MOVE 1 TO BUFFER-PTR.
MOVE SPACES TO INPUT-1.
* Keep processing data until END requested
PERFORM ACCEPT-INPUT UNTIL INPUT-1 EQUAL TO "END".
* END requested
DISPLAY "CALC Ends." UPON CONSOLE.
GOBACK.
* End of program.
*
* Accept input data from buffer
*
ACCEPT-INPUT.
MOVE BUFFER-ARRAY (BUFFER-PTR) TO INPUT-1.
ADD 1 BUFFER-PTR GIVING BUFFER-PTR.
* Allow input data to be in UPPER or lower case
EVALUATE FUNCTION UPPER-CASE(INPUT-1) CALC1
WHEN "END"
MOVE "END" TO INPUT-1
WHEN "LOAN"
PERFORM CALCULATE-LOAN
WHEN "PVALUE"
PERFORM CALCULATE-VALUE
WHEN OTHER
DISPLAY "Invalid input: " INPUT-1
END-EVALUATE.
*
* Calculate Loan via CALL to subprogram
*
CALCULATE-LOAN.
CALL "COBLOAN" USING CALL-FEEDBACK.
IF CALL-FEEDBACK IS NOT EQUAL "OK" THEN
DISPLAY "Call to COBLOAN Unsuccessful.".
*
* Calculate Present Value via CALL to subprogram
*
CALCULATE-VALUE.
CALL "COBVALU" USING CALL-FEEDBACK.
IF CALL-FEEDBACK IS NOT EQUAL "OK" THEN
DISPLAY "Call to COBVALU Unsuccessful.".
It seems my code yesterday broke the automated post function. Oops. I'll fix that tonight.
Edit: Was able to debug it remotely!
Small blog updates
Made some small blog updates today:
- I tweaked some small CSS display things which were bothering me.
- I removed the social links at the top for the platforms I don't use (X, Threads.)
- I've attempted to reintegrate my writing tracking into the end of day automated post. It's not quite as robust as it was, but this was meant to be quick and simple.
- Modified our url code to include the github user when it shows the github.com url after a link.
Update: One more idea I am messing with, but I like the idea of displaying my blog posts by day similar to the Github activity grid. I started messing around with it but it's a bit more complicated.
Update 2: Okay, the Github heatmap grid is now done. It's on the sidebar and will fill through the year, but also I have added it to the date archive page under each year header.
The Desk, my new writing tool
So, I have been working on something. This week, with the inspiration to dive back into my writing, I also whipped up this new project thanks to the help of Claude.ai. The idea is to have a central hub for tracking the progress of my writing, as I find the charts and data about my progress very motivating. But, as you'll see, it has some more features built in, including the ability for me to do my writing inside the tool if I want to.
It's not perfect, the AI generated code base always means there are bugs and pain points to be hunted down. But, it works for the base needs. I can refine and fix the remaining issues in the coming days.
Alright, let's take a look at things.
Here is the main dashboard. The red blobs are titles for my projects. I went back and forth on hiding them. Aside from suggesting the writing genre, I don't think they give anything major away, but also - I figured I may as well keep some mystery.
Right now I'm only actively working on the first project. The other four in the system are either ideas I have, or ones I have worked on previously and just haven't brought into the system yet.
The next view is the project specific one.
So, here is the project view for the current book. It gives the full overview of the data it has collected, shows how each writing session has gone, and even lets me look at previous versions of the story (so long as I am uploading them.)
I don't have to upload the manuscript, I can also manually enter the data for each writing session. But the advantage of uploading is that it acts as a backup in case something happens, and also allows the system to measure both words written as well as words removed from the most recent previous version. This is relevant as one of my pain points with a system like this is that sessions which were predominately editing, weren't easy to track as we were just tracking the total word counts, and so revisions, and cuts, and additions which come during editing were largely missed.
I'll also note, the first session here is misleading as I had done a few bits of writing on this project before importing it into the system and thus the first session is heavily inflated. But I didn't feel it was really worth diving into. It'll even out the more I write.
And the last feature, the one I am most happy with, is the in-browser writing tool.
Normally, I write using an app called FocusWriter, which blocks out all other apps and notifications and just lets you focus on writing. But, with the integration of my own selfhosted tool, I decided to recreate the base parts of it in browser.
Yep, retro CRT green on black. I don't know why, but I really like that scheme for writing. Additionally, I'm using the fantastic Monaspace Neon font, which is also my preferred font for programming. So far, it's been quite comfortable to write in.
That's really it. There are a few other small features (milestones are in the code, but not something I've fully implemented.) There are the rough corners I mentioned which still need addressing, but overall - I'm happy with the core functionality.
Previously I had my code integrated into Glowbug (this blog's admin tools), but it is very rough and barebones. Nowhere near as fleshed out as the above system. The main benefit was I could easily integrate it into the automated end of day posts where it would record the amount of writing I had done during a day.
I still can do that with this system, they're on the same system, but it will just take some reworking of the system. But I'm deciding what I want it to be and if I want to keep the same format, or maybe make the Sunday post a special edition with more information for writing from the past week, etc.
We'll see. I'm still deciding on the implementation. But now, back to writing for a bit.
Last night I finally sat down to resume work on the rewrite of a novel I've been working on. That interview with Sanderson left me feeling inspired and motivated. I was able to write almost 3,000 words. In addition, thanks to some help from Claude.ai, I was able to throw together a new tracker which I can use for recording progress on my writing.
I had a version of it that I had previously written and integrated with this blog, but the UI was very rough and I had some core feature updates I wanted. The biggest of which is now it more elegantly will record progress for both new writing and when I go back and edit to change things. The way it does this is I can now upload a copy of the document I'm working on, and it parses the file and compares it to the most recent version, counting new words and words removed.
I'll share more about it after I've been using it a bit longer, and I make sure it's all working how I want. This is the sort of project where I do think AI coding support is useful. It wasn't perfect and I've had to chase a few random bugs, but it is a promising new tool for me.




