Although the days of every site having an RSS feed have long past, I still find that it remains one of the few ways left to curate your own garden of content on the internet. There’s no algorithm deciding what you see or optimized feed pushing rage bait to the top (like the terrible trend of short-form video content). In a previous post , I mentioned how I am using RSS to monitor individual…
I subscribe to a lot of YouTube channels via RSS in NewsGoat , and the one thing that I can’t stand are Shorts. Every channel seems to produce them now, and they clutter up the feed with content I never want to watch. To help, I just added regex-based filters to NewsGoat to deal with this. Setting Up a Filter In newsgoat, press f on a feed or folder to open a filter in $EDITOR . The filter…
A year after my last Neovim configuration post , I’ve made another significant change to how I manage my setup. This time, I switched from kickstart-modular.nvim to MiniMax , a minimal configuration built on top of the mini.nvim ecosystem. Why I Switched While I was happy with kickstart-modular.nvim , the upstream project ( kickstart.nvim ) appears to be no longer actively maintained . There…
I’ve been using RSS to monitor single files or directories on GitHub and GitLab for a long time, and it still surprises me when people don’t know this is possible. Granted, not everyone uses RSS so that part isn’t surprising, but it is quite a convenient way to keep track of files in repositories without having to manage email notifications for the entire project. Why would you do…
It’s wild that these days you can vibe code an entire app in the same time it would previously take to contribute a single feature. Take the RSS reader I use regularly, Newsboat. It always had a few stability issues and was only about 80% there as far as the features I wanted in a terminal-based reader. There were other alternatives that came along, but nothing matched what I was used to…
2025-08-17 UPDATE : I’ve modified this post to use hooks.enter and hooks.leave after seeing how my previous solution was not working in all cases. Since my last post on using mise I’ve updated how I use Mise with 1Password. Before, I was only using hooks.enter to set env variables from 1password. This had some disadvantages: Variables would be left set when leaving the project…
It’s been a while (3 months!) since my previous post on this little game I’ve been writing in my free time, so I thought it was probably a good time to give an update. The game is called STAR DEWAR which is a space trading game that is inspired by the early BBS game Trade Wars . Three months ago, I had created the basic hexagon map generation, multiplayer, and movement UI, but that was…
A quick update about some new features recently added to FlyEmoji . These are a couple of changes that should make the site easier to use, especially for anyone running multiple surveys or wanting to track what they’ve participated in. User accounts and login With the new account system you can sign up with an email and password (or log in if you already have an account). Once logged in, any…
As I mentioned in my last post in my free-time I’ve been tinkering around with multi-player space themed game. The game is called STAR DEWAR, and will be a tribute to an old BBS game called Trade Wars 2002 that I played as a kid. Trade Wars was a classic multi-player BBS game that had its peak popularity in the 1990s. It was one of the insiprations for Eve Online (early 2000s) and plenty of…
I’ve been playing around lately with procedural map generation and different ways to generate contiguous areas on a hexagonal grid. To keep things a simple as possible I started with a Random Walk (also known as “Drunkard’s Walk”) but found it a bit lacking. Part of my map generation needs to include dead-ends (or hiding spots) that will be difficult to discover when…
Here are some notes on how my Neovim configuration management evolved in the last year. For longtime Vim → Neovim users like me who prefer a simple and sane way to manage their configuration, I highly recommend kickstart.nvim as a starting point. It provides a minimal yet functional configuration that is easy to understand, making it ideal for those who don’t want to commit to a pre-built…
The Partitioned attribute on browser Cookies is supported on Firefox and Chrome and these are some notes on changes I observed recently with it, and how these browsers handle Cookies. This post assumes you have a basic understanding of how HTTP cookies work. What is Cookie Partitioning? This feature targets analytics providers, specifically those that drop the same cookie in your browser when…
I’ve been using Mise for some time now for both personal projects and work to manage versions of the tools used in my projects. Recently, Mise has added functionality for tasks and environment handling, leading me to consolidate tools like direnv , Make , and entr . When I create a new project, I often set up the following: Mise for versioning binaries like node , go , etc. A bin/ directory…
One of my emoji-based side-projects has button elements and centering emoji characters on them is a key part of the design. My initial thought was that this would be simple for a single emoji character by setting font-family, font-size and line-height for consistent centering. I mean, how complicated can it be, right? Once I had things looking decent on chrome/firefox/safari it seemed as though my…
I was building a site that uses QR codes that when scanned take the user back to the same site. For example, if the site was https://example.com the QR code would bring them to https://example.com/qr like this: The site uses a session cookie that is necessary to track user settings for anonymous users. Initially, I set the SameSite attribute to Strict on the cookie. What was not obvious to me then…
Server-Sent Events (SSE) are a simple way to send real-time updates from the server to the browser. Go channels pair nicely with SSE as they allow easy communication between Go routines. This post will examine using SSE in a recent side project and the implementation of a ring buffer in Go. If you aren’t already familiar with SSE, like WebSockets, they enable updates on the web browser…
Tiny side-projects Lately there hasn’t been much time in my life for recreational programming but I still find time to create tiny services and put them on the public internet. I’m sure this stretches the definition of “side-projects”, but one advantage of having a VM somewhere in the cloud and a registered domain is you can create your own little kingdom of subdomains.…
Occasionally, cmdchallenge.com would get into a state where requests to list user-submitted solutions to challenges would hang. The first few times it happened, I restarted the service which was enough to get it working again. Only later did I try to figure out what is going on, and thought I would do a small write-up as it ended up being a very common problem with deadlocks in Go. Background When…
There are a lot of DevOps tools for managing both configuration and infrastructure as code. While some can be extremely helpful for managing configuring for a large distributed service, not all are as helpful for deploying something simple in the cloud, or a personal project that runs on a single virtual machine. IaC or a configuration thingy $job personal stuff Kubernetes ✅ ❌ Configuration…
Very recently I switched from running a couple side-projects that were hosted on AWS EC2 to a single Hetzner Cloud VM. During that transition, this page (jarv.org) was moved to it from GitHub pages. Static generation using Hugo stayed the same, but in the process of switching VMs I checked out Caddy as a new webserver. After making the switch, this ended up being a great NGINX replacement for all…
I’ve been slowly re-writing most of cmdchallenge in Go. It started with porting all of the Python code running in AWS Lambda , and now I am in the process of re-writing the command runner. This is the component that executes user provided commands, originally written in Nim . The command runner takes user submitted shell commands and executes them in a Docker container. In the Go program, I…
I’m pleased to announce that the transition from a distributed serverless architecture in Python to a single VM with a service written in Go is done for CMDChallenge . The final patch was merged and there is nothing sweeter than removing close to 100K lines of vendored Python. It was around 4 months ago that I started on this adventure but honestly a lot of life got in the way and I probably…
I’ve been stealing small chunks of time in the evening here and there and finally have a functioning Go rewrite of cmdchallenge which will replace all of the Python code that is running in AWS Lambda. The first diff for this is massive, I am really looking forward to removing all of this vendored Python! And we will say goodbye to some AWS services: Cloudflare Route53 DynamoDB Replaced with…
I’ve decided to take what was written years ago for cmdchallenge.com and port it to a single Go app. This is a pretty big change because I will be removing most of the AWS serverless components including API Gateway, Dynamo and possibly CloudFront. In the process, I would also like to simplify the architecture a bit. It seems like a single process with Docker running locally, and a db like…
Command Challenge has been running for over 3 years now and I would consider it one of those “serverless” architectures. The front-end services requests using API Gateway and Lambda functions and commands are forwarded to a Docker executor running on a VM. Overall, the costs have been minimal thanks to mostly low-ish traffic and keeping it inside the AWS free-tier limits. By…
HTTP API Gateway When HTTP API Gateway was announced in 2019 the Amazon said: Our goal is to make it as easy as possible for developers to build and manage APIs with API Gateway. We encourage you to try the new HTTP APIs and let us know what you think. Today I decided to switch from using the REST API for cmdchallenge.com to the HTTP API and I must say it is a lot easier to build and setup for…
Recently we were looking at enhancing our deployment pipeline so that we run validation checks between every batch that is upgraded. For our VM deployments in Ansible we normally have serial: 10% so that 10% of the fleet is operated on at once, this includes draining from a load balancer before we upgrade the node, and adding it back to the load balancer after. With Ansible, it doesn’t seem…
Recently a challenge was added that asks you to identify a process and kill it. This was a new type of exercise that requires a running process in the docker container where all commands are run. This itself wasn’t really an issue except that with caching, it requires that the state of the container to be identical from one run to the next. PIDs however, are not so predictable, even when you…
Say you want to display the contents of a file on the command line. The first tool we most of us reach for is cat , which does a fine job at just this. But what happens when you are on a Linux machine and when you try to cat a file this happens: $ cat file.txt -bash: cat: command not found or even: $ cat file.txt bash: fork: retry: No child processes This post explores this idea and was a feature…
Hello world from the new blog using Hugo as the static site generator. After cutting away the cruft from the old one, which used Pelican as a static site generator, I decided to make a switch on a lazy Sunday. I definitely think the design is much nicer and site generation is much faster! There is a great selection of themes, this one uses the kiera which is exactly what I wanted for a layout that…
When I was learning to use the shell for the first time I remember teaching myself to do things as I ran into problems, and the first problem I ran into was how to take the output of one command and write it to a file or pipe it a second command. So like most people, I learned: cmd1 | cmd2 to take the output of cmd1 and send it to cmd2 , and cmd1 > path/to/file to take the output of cmd1 and write…
Yeah it’s another blog update, just really some style updates and looking back at something I did a long time ago and say what the heck was I thinking? . I don’t know, I think things that I don’t have time to spend up usually end up being a craptastic design by copy-and-paste. Anyway, still using Pelican but upgraded to Python3 and fixed the CI configuration a bit. Got rid of the…
I’m writing this as a reminder to my future self never to use git submodules. For most things I would say never say never but let’s make an exception for this one. I’ve used submodules for the following reasons: There is some logical separation or a clear defined interfaces between two things, and repos are cheap There is a 1 to many (usually 2 or 3) relationship between this…
One experience of mine, though it has roughly mapped to previous side projects: Wow this thing that has no business model is a cool idea, I wonder if anyone has done it before? This is fun, let’s spend an evening hacking on it Wow this is taking way more time than I thought it would … Can I do this without spending any money? Let’s use AWS free tier to get this going OK…
In the process of making all of my private repositories public on Github and moving off of GitHub pages I have also decided to move most of my repos over to GitLab. One reason is that setting up a CICD pipeline makes it extremely easy to publish these posts automatically. This in combination with GitLab’s web IDE makes minor changes a little bit easier to make. CICD piplines in GitLab are…
Today I decided to remove all private repositories from GitHub. Why? Interesting that having private repositories generally meant that I was not being as careful about managing secrets properly. Checking in API tokens, keys and especially cloud tokens into git never a good idea and looking through some of my old private repos I was doing exactly that. So for others who are interested in going from…
Have you ever thought about building a side-project for fun without spending a lot on hosting? This post might be for you. With the most tech-buzz-wordy title I could conjure up here is a quick overview of how cmdchallenge.com is built. The site is a simple web application side-project that executes shell commands remotely in a docker container in AWS. The front-end gives the feeling of a normal…
Adding to the interesting 191 ways to echo hello world I’ve now added the ability to see user-submitted solutions to cmdchallenge . There are some gems if you dig through them including maybe the longest regex I’ve ever seen for pulling an IP address out of a file: ( 25 [ 0-5 ] | 2 [ 0-4 ][ 0-9 ] | [ 01 ] ? [ 0-9 ][ 0-9 ] ? ) \. ( 25 [ 0-5 ] | 2 [ 0-4 ][ 0-9 ] | [ 01 ] ? [ 0-9 ][ 0-9 ]…
I was looking for a cool ending for cmdchallenge and decided to dust off a 2 year old javascript project which created a breakout game from figlet fonts. Not quite a full re-write but fixed a lot of bugs and did away completely with coffee-script. More info on the github page . Or you can click here to play .
It’s been about 12 days since the launch of cmdchallenge , a weekend project to create some common command-line tasks that can be done in a single line of bash. One common request has been to share user-submitted solutions. Or to put it another way, you may be wondering what do random people on the internet and hackernews type if you give them some basic command-line tasks and a shell…
Using data from page-watch.com this shows a time-lapse of reddit overnight on January 20th taken at 5minute intervals. This excludes images which is why there are occasional jumps where advertisements are.
Before this year is over it’s time for a small redesign. I’ve replaced the old custom theme, water-iris with a new theme jarvican . Most of my updates these days are when I redesign the blog and I think I’m fine with that.
Hello world! It’s been awhile and what better way to re-visit a blog then to do a re-design. pelican with a custom theme bourbon/sass - CSS compilation and general typography bourbon/neat - For layout and responsive design I’ve cleaned house and removed some old articles, kept some of the AVR hacks and hopefully will post updates more than once a year :)
Below is a quick tutorial on how flask web framework might be used for simple highscore tracking. All of the source code the state game is now on github . This code will accept an AJAX GET or POST at the end of each game so that scores can be tracked and read. Since the use-cases are simple it’s easy to write the tests first: class StateTestCase ( unittest . TestCase ): def setUp ( self ):…
Below is a recent weekend programming project that I did to play with canvas. Who doesn’t like a geography game? It uses a simple svg image for the map with a canvas overlay to detect state clicks. On the back-end it uses a very short python script with web.py. Most people who tried it out found the rotation to be annoying and difficult; for me it makes it more interesting :)
Here is a weekend hack that uses the midi to AVR conversion script and library . With xmas fast approaching I thought it would be fun to convert a pacman candy tin to an xmas ornament and have it play music. Below is the result, pressing a button on the tin will cycle through three Ms. Pacman songs converted from midi files found online.
With an attiny13A, an IR motion sensor, and a candy Mario Brothers mushroom tin, this project turns them into a USB powered IR sensor that also blinks and sings.