Relational K Values for Elo Calculation
I woke up with a bit of an epiphany relating to the movie rating system I built. The biggest issue with the Elo system is how dynamic the top rankings are. So what I actually want is not an evenly fair system, I want favoritism for the top 50 ranking. So what I am doing is applying bands to the k-value based on the position of the higher ranked movie.
So a top 50 movie has a K value that is 25% of the total K value, which is used for a bottom ranked movie.
Movie Ranking Fun
I have officially added a page to share my top 50 movies based on my MovieRank tool. As the page explains, I built a tool which pulls in movie information and lets me bash them against each other to generate Elo rankings.
The project is inspired by a website, FlickChart.com. As I recently learned, they've updated their system, but the original structure was that when you had two movies face off, if the winner was the lower ranked movie it was placed above the movie that it beat. This ended up with some weird and undesirable movie rankings and it was very hard for movies to drop down in rankings. There are problems with an Elo based system (such as, it takes a lot of matches to generate a comprehensive ranking list) but overall I prefer this method.
As I noted, the system was recently updated, which the site owner actually shared with me on Bluesky:
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.

