Hurwitz Quaternion Algebra Simulator
Hurwitz Quaternion Algebra Simulator

A comment on my last YouTube video pointed out that the SL(2,3) group expressed by the Quaternion Cube is isomorphic to the group formed by multiplication of the unit Hurwitz quaternions.

Simulator

‘Order’

There are five different orders of unit Hurwitz quaternions: 1, 2, 3, 4, and 6; On the puzzle, the order represents how many times a sequence must be repeated to return to where you started.

Print it yourself: Quaternion Cube
Print it yourself: Quaternion Cube

STL Files: https://quirkycubes.com/public/QuaternionCube_STL.zip

Sticker Template: https://quirkycubes.com/public/QuaternionCube_Stickers.eps

Hardware required:

Hardware


I printed my copy out of ABS and vapor-smoothed it to post process it. I don’t see any reason that it wouldn’t work in PLA, but you will need to sand the edge hooks a little to get smooth motion. Here are the settings I use on a Bambu P1S:

Geared Mathieu M12 Puzzle
Geared Mathieu M12 Puzzle

DoDot M12

VIDEO

The DoDot M12 is a twisty puzzle that mechanically demonstrates Mathieu group M12. It’s a modification of my original vertex-turning dodecahedron where sets of three turning axes are geared together internally. This gearing was chosen to greatly reduce the number of possible permutations of the ‘dot’ pieces, which behave according to the rules of the 12-element M12 permutation group. The edge pieces of the puzzle behave as 6 disjoint orbits of 5 pieces, which makes them easy to solve. I greyed out the petals to avoid making the puzzle too complicated.

Glaze Material Substitution Calculators
Glaze Material Substitution Calculators

Glaze Material Substitutions

This page provides a set of calculators to help with calculating common material substitutions in glaze recipes.

Warning: These calculators are based on theoretical UMF analysis of the materials, and I have not verified them experimentally. Oxide analysis isn’t the only factor that determines how a material will behave in a glaze.

Each calculator allows for conversions between two material forms. Click “Switch” to toggle the conversion direction. Red cells indicate that a material should be subtracted from the recipe.

Conical vector decals in Inkscape
Conical vector decals in Inkscape

Wrapping vector artwork around a conical object in Inkscape

Free vector editing tools are pretty lacking in intuitive ways to wrap a template around a conical object (i.e. mug or vase). I aim to produce a vinyl decal that can be applied perfectly to a ceramic piece without any stretching.

This post is not a step-by-step procedure, but rather a general overview of the steps that I use to fit vector artwork to pieces of pottery using Inkscape and a vinyl cutter.

Detect via-in-pad in KiCAD DRC
Detect via-in-pad in KiCAD DRC

Current development builds for KiCAD 7 include the new constraint keyword physical_hole_clearance for detecting hole and pad collisions within a common net. This is useful for detecting via-in-pads which are often undesirable, as some PCB vendors upcharge to plug vias that could cause wicking during assembly.

To set up the custom design rule, first install a nightly build of KiCAD (6.99). Please note that saving a project with a development version of KiCAD will prevent older versions from opening the PCB file. To prevent this, I run the DRC from KiCAD 6.99 and make the necessary changes from KiCAD 6.

Iron-filled PLA as a transformer core
Iron-filled PLA as a transformer core

I bought a spool of Protopasta iron-filled PLA to test in a project where I need to fit a flyback transformer into a confined space. The prototype will likely be 3D-printed in PLA plastic and contain some moving parts wrapped in magnetic wire for power transfer.

For optimal performance, flyback transformers are generally wound around a ferrite core, which has high magnetic properties but low conductivity to reduce eddy currents.

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