Thursday, September 25, 2025

Kindle Clock

I decided to build my own digital clock. When searching for existing products online, it is surprising that I can't find any products that satisfy my basic checklist:

  1. It should look nice: all I want to see is the time, which should be displayed in a nice font. >99% of current products use ugly segmented displays (blocky numbers with 90 degree angles).
  2. It should be zero maintenance. The time should automatically sync and deal with daylight savings. Why should anyone have to manually set their clocks when Wi-Fi exists? >99% of products expect people to manually set the time!
  3. It should have the correct brightness: not too bright when the room is dark and not too dim when the room is bright. >99% of products don't do this.
Bonus points if the clock has a backup battery and continues working when there is a power outage.


Recently I have been using the Nest Hub ($100) as a clock. It is almost the perfect clock (satisfying all three points on my checklist) except that it has a bug that randomly switches the display out of clock mode and back to the home screen about once a day. This bug is the reason I decided to build my own clock.


I built this using an old Kindle Paperwhite. The Kindle Paperwhite has an amazing e-ink display (perfect for bright rooms) and also has lighting so you can see it when it is dark.


I created a basic website to display the time and opened it in the Kindle web browser. Unfortunately the Kindle has a screen saver that automatically starts showing advertisements when you don't interact with it. In order to keep the time on the screen, I had to jailbreak the Kindle to disable the screen saver. Then I fit it into a picture frame and created a border around the time (so you can't see the browser panel). It can be hung up on a wall, although it will run out of battery when not plugged in. I prefer to keep it plugged in next to my desk.


Here is a comparison with the Nest Hub:


Update (9/29/2025): I found that displaying the clock through the Kindle browser is not reliable (an error message pops up about once a day). Using a Kindle app works much better. I forked a Kindle clock app and posted my changes to GitHub here. That also let me increase the font size to use up more of the display:




Sunday, September 14, 2025

Crux Climber


My favorite sport is bouldering, so I decided to make a rock climbing game: https://byronknoll.com/crux-climber.html

Control the climber by dragging the hands or feet.

Saturday, August 02, 2025

Wednesday, July 30, 2025

Max Flow

 


I have released a new puzzle game on my website called Max Flow. The goal is to rearrange pipes to maximize water flow.

I tried out LLM assisted coding for this project using Visual Studio + GitHub Copilot + Claude Sonnet 4.

Saturday, April 26, 2025

Activity Logger


I tried out "vibe coding" to create an activity logger for myself. I also released it on GitHub: https://github.com/byronknoll/EntityLog. I think it is pretty useful and plan to continue using it going forward.

Friday, April 18, 2025

MazeGPT


I created a game called MazeGPT: https://byronknoll.com/mazegpt.html

ChatGPT created the artwork. My seven year old daughter also helped make the game: coming up with level ideas, tracing the maze boundaries, and play testing.

Saturday, March 16, 2024

Jabber Trail


I have just released a game called Jabber Trail, which you can play for free in a browser. All of the images, music, and character dialog in the game are AI generated. To make progress you have to chat with in game characters, which use a large language model to generate responses.

Thursday, November 23, 2023

Cellular Automaton

 


Today I made a new cellular automaton. It can create similar patterns to an earlier cellular automaton I released here (a simulation of the Belousov-Zhabotinsky reaction). For the Belousov-Zhabotinsky reaction I used a pre-existing algorithm, but for this new cellular automaton I created the algorithm myself. I was trying to replicate some other interesting patterns I have seen:

Sunday, October 01, 2023

Bifurcation

 


I have made a two player strategy game called Bifurcation: link

How to play:

  • The goal is to eliminate all of the other player's units.
  • During your turn, you can move units from up to three locations. Click and drag to choose which locations to move. Use the slider on the right to select how many units to move.
  • You can move to a neighboring location or any location connected by your team's color.
  • At the start of your turn, you will gain units at any locations with a + symbol. The number of + symbols will be the number of units you gain.
  • You can attack enemy units by moving to enemy territory. Opposing units will destroy each other, so you need to attack with more units than the enemy to take over a location.

Monday, April 03, 2023

Stacking Things

 


Today I released a HTML5 game called Stacking Things. It is a physics-based puzzle game. It uses planck.js for the physics and Phaser for the graphics/sound. The images came from a combination of public domain photos and images generated by Stable Diffusion.

Saturday, December 17, 2022

Hexacrystal

I have designed and 3D printed my own board game. It is a two player strategy game called Hexacrystal. Each player controls one color. The game starts with two towers:

The rules are simple. Players take turns placing their pieces. Pieces can be placed anywhere on the board. The game ends when a player resigns, or no more pieces can be placed. The goal of the game is to create a connected path from your tower to the opponent's tower. Neighboring pieces of the same color form a path. The winner is the player whose path (connected to their own tower) gets closest to the opponent's tower. You simultaneously try to extend your path while blocking your opponent's path.


There are 2D and 3D versions of this game. In the 2D version, pieces occupy a single tile on the board. In the 3D version, the crystal pieces can extend beyond the edges of the tile so that they can block neighboring pieces. A valid move requires that the placed crystal doesn't touch any other pieces (verified with a "wiggle" test to make sure neighboring pieces don't move). This introduces more complex strategy: carefully selecting and rotating crystals. Each player gets the same set of crystals (21 unique shapes).

Monday, June 27, 2022

Water Computer

 Using a 3D printer I have built a water-powered computer. Here is a video:


Here is a diagram of the main component: 


The "inverted output" on the left will be ON when the input is OFF, and OFF when the input is ON. The "amplified output" on the right will be the same state as the input, but will have increased water flow. By redirecting the outputs with tubes, this single component is powerful enough to build any logic circuit or computer. This type of computation is known as fluidics.

Here is the binary half-adder circuit that I built (using five of the above components):


Here are the models for the different parts that I 3D printed:

  • transistor - the main logic component
  • nozzle - used for releasing water from the milk carton
  • connector - used to connect funnels to tubes
  • hook - used to provide extra magnet support
  • funnel - funnel with a single output
  • splitter funnel - funnel with two outputs - this can be used to split one larger stream into two smaller streams


Sunday, March 13, 2022

Bitlog

Similar to Turing Paint and Doodle Code, I have released another visual programming language called Bitlog. This is a simulator for electronic logic circuits, represented with bitmap images.

Monday, January 04, 2021

Doodle Code


 I have created a type of barcode called Doodle Code. Similar to QR codes, it can be used to store data.

Sunday, October 25, 2020

Turing Paint

 

I have created my own programming language called Turing Paint. It is a visual programming language: programs are represented using images.

Monday, July 20, 2020

tensorflow-compress

I just released a new open source compression program: tensorflow-compress. It performs lossless data compression using neural networks. Its compression rate is significantly worse than cmix, but it has some nice features:
  • It can run significantly faster using GPUs
  • It is written in Colab and designed to be run through a web browser
I am planning to continue working on it to improve performance and compression rate.

Tuesday, August 07, 2018

Android App

Today I published my first Android app: Squishy Earth

This was based on a HTML5 demo I made a few years ago.

Wednesday, March 07, 2018

cmix updates

There was recently a new winning entry (called phda) for the Hutter Prize. The Hutter Prize is a contest for compressing the first 100MB of Wikipedia (called enwik8). Here is how all of the previous versions of cmix performed on enwik8. phda is incredible - using far less CPU and memory than cmix while getting a similar compression rate. Unfortunately it is closed source, so many of its implementation details are hidden. phda has pushed cmix v14 into second place on the Large Text Compression Benchmark. cmix currently compresses enwik8 to 15113248 bytes, so I am guessing the next cmix release should make it back to first place. Unfortunately there is a bug which is preventing cmix from compressing enwik9 properly, so I need to fix that before the v15 release. This bug is difficult to fix because I have only seen it happen when compressing enwik9... which takes over one week of CPU time for each debugging pass.

Last year I got funding for cmix through the AI Grant. This helped speed up progress by giving me access to more computational resources. I bought a new desktop and can use many virtual machines simultaneously on Google Compute Engine. The new resources let me run cmix on the Lossless Photo Compression Benchmark, getting first place using over 6 months of CPU time!

Thursday, December 14, 2017

Dollar Cost Averaging

Dollar cost averaging (DCA) is an investment strategy where you invest a fixed amount of money on a regular schedule over time. If you have some money, let's say $100, which of these strategies is better?

Strategy #1: invest $100 on day 1
Strategy #2: invest $1 every day for 100 days (i.e. DCA)

You convert your investment back to dollars at some future date, say after 1000 days. As expected, there is a risk vs reward trade off. Both strategies are expected to have some positive interest. Many people I talk to claim that DCA is a valid strategy: although it has a lower expected reward than strategy #1, it also has lower risk. They argue that you should choose strategy #1 or #2 based on your risk vs reward preference.

I have always had an uneasy feeling about this argument. Intuitively I feel like DCA never is a good strategy. In the past I have had various arguments with people about why, but I have never been able to make a convincing argument. Out of the people I have talked to, it also feels like I am the only one who has this opinion.

I have never done any research into this topic or taken any relevant classes. Today I had another argument with some friends, and I finally decided to just run some computer simulations comparing various strategies under different conditions. Figuring out the math is hard, but running computer simulations and looking at the statistics is easy.

One insight with strategy #1 is that you can adjust your risk vs reward trade off by just investing less money. Less investment = lower reward and lower risk. We can introduce this as a new strategy:

Strategy #3: invest $X (e.g. $75) on day 1 and keep $(100-X) in your wallet.

With DCA you can adjust the risk vs reward trade off using different investment schedules. Investing $10 every day for 10 days will have higher risk and higher reward than investing $1 every day for 100 days.

For completeness, we can compare a few other strategies:

Strategy #4: invest $100 on day 50
Strategy #5: invest $100 on day 100

My simulation adds random fluctuations to the investment, so we can measure the expected return and variance of the different strategies using millions of simulated investments. I also experimented with various parameters of the simulations (e.g. how much the investment fluctuates, the duration of the investment, the growth rate of the investment, etc).

Under normal conditions:
- Strategy #1 has the highest expected return and highest variance.
- Strategy #4 and #5 never are useful. You can get the same expected return with lower variance using DCA or strategy #3.
- Strategy #3 is better than DCA. At any level of preferred variance, strategy #3 can get higher expected return. At any level of preferred expected return, strategy #3 can get lower variance.

Surprisingly, there actually are some scenarios where the situation reverses and DCA becomes superior to strategy #3. When the size of the random fluctuations becomes large enough, DCA becomes better. The size of the fluctuations has to become pretty huge - much larger variation than I would expect from normal stock index funds. It might make sense to use DCA for investing in something like bitcoin.