Software

Crammed Cube & Simulator
Crammed Cube & Simulator

The Crammed Cube is an internally geared twisty puzzle that expresses the Mathieu M11 group over its 12 edge pieces. The puzzle features a modifiedCompy Cube mechanism with 6 axes that would normally have 11 moving edge pieces. It is called the ‘Crammed Cube’ because, while the axis system would normally have 11 moving edges, I’ve crammed an extra one into the red/white edge and lifted the corner angle to make space. This edge duplication is necessary to make the group actions fit over cubic geometry.

Fano Gem Puzzle & Simulator
Fano Gem Puzzle & Simulator

The Fano Gem is a twisty puzzle that I designed to showcase the symmetries of the Fano Plane, which is a familiar object in combinatorics, coding theory, and algebra. The Fano Plane is the smallest possible finite projective plane, constructed from 7 points and 7 lines, where each line contains exactly 3 points.

From the red face (pictured left), the numbers on the corners of the puzzle match up with the numbers on the plane (with number 7 on the back of the puzzle, out of view).

Hotfixing ZipInputStream
Hotfixing ZipInputStream

This bug is fixed in Java 23u10

I came across an apparent bug in java.util.zip.ZipInputStream where reading a certain type of zip file causes an exception:

java.util.zip.ZipException: invalid entry size (expected 0 but got 199 bytes)
	at java.util.zip.ZipInputStream.readEnd(ZipInputStream.java:384)
	at java.util.zip.ZipInputStream.read(ZipInputStream.java:196)
	at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:122)

The file in question reads fine using archiving utilities and Java’s ZipFile, so the issue is likely rooted in ZipInputStream. My application requires reading the zip file sequentially, so ZipInputStream is my only option besides a third-party library. I decided to search for a solution using vanilla Java rather than pulling in a new dependency.

HTTP Cheatsheet

This post will be continuously updated with useful commands related to HTTP.

Python3 HTTP Server

Launches an HTTP server in the current directory for serving files

1python3 -m http.server [port]

cURL - Post Multipart Form

Post two files

1curl -X POST -F "file1=@file1.png" -F "file2=@file2.png" --no-buffer https://chandler.io/test