Quaternion Cube & Simulator
Quaternion Cube & Simulator

Updated 2025-07-31

The Quaternion Cube is a rather easy-to-solve puzzle that I designed to visually demonstrate the Quaternion Group Q₈.

Print it yourself

Simulator

The puzzle turns over the top 4 vertices of a cube, with 1:2 gearing connecting the opposing corners. There are linear slides under the edge pieces that prevent the static corners from blocking the overall movement.

Mora Jai Box Solution Space Analysis
Mora Jai Box Solution Space Analysis

Introduction

Mora Jai boxes are simple-looking puzzles that can be configured into a huge variety of challenges. The original set of puzzles from Blue Prince mostly have short, simple solutions (2-20 moves), but lengthy and difficult solutions can be constructed by exploring deeper state spaces of the tile grid.

Initially, I wanted to create a list of the most difficult configurations by cataloging the longest solutions, but it turns out that length is not the best predictor of difficulty. Many of the longest solutions rely on repetitive patterns rather than complex logic and novel mechanics.

Mora Jai Box Simulator
Mora Jai Box Simulator

Mora Jai Box

A Mora Jai Box is a lock box that involves solving a 3x3 grid of colored tiles. Each color has a unique behavior (see rules). They are originally found in the puzzle/adventure game Blue Prince, but are interesting to analyze on their own.

Warning: leave Spoiler Mode turned off if you’re still playing Blue Prince—it will reveal information relevant to post-endgame puzzles.


Simulator

 

Rules

  • To Solve: Press all 4 outer buttons after the corner tiles’ colors match the target color
  • To Reset: Press any outer button that does NOT match its corresponding corner tile
  • Color Actions: [Reveal All]
    •  ◦ These descriptions are minor spoilers - if you haven't encountered a certain color in-game yet, or want to figure it out yourself, proceed with caution.
    • Gray does nothing.
    • White causes adjacent white tiles (and itself) to turn gray. Adjacent gray tiles turn white.
    • Violet swaps with the tile below it.
    • Yellow swaps with the tile above it.
    • Green swaps positions with the tile opposite it.
    • Pink rotates all the tiles surrounding it clockwise.
    • Black shifts its row to the right.
    • Red changes every black tile into red, and every white tile into black.
    • If a majority of adjacent tiles are the same color, Orange changes to match that color.
    • Blue copies the behavior of whichever tile is in the center (with some quirks).
      • See Yellow Box 3, Blueprint - Pool RoomRed Box 3, Blueprint - FurnaceBlue Box 2, and Blueprint - BallroomBlue Box 3 for examples.

Challenge Puzzles

Based on computer analysis, I included several challenge puzzles that are not found in Blue Prince. The list is curated from a large set of puzzles with lengthy solutions, and arranged in order of perceived difficulty.

Glaze Development - Iron Phosphorus Green
Glaze Development - Iron Phosphorus Green

Introduction

This page documents ongoing attempts to produce a rich, variegated green glaze using an iron/phosphorus mechanism in cone 6 borosilicate glaze.

Some key takeaways so far:

  • A lithium-rich base produces a better green than a soda or potash base
  • A small addition of lanthanum oxide appears to brighten the effect without changing the color

Iron/Phosphorus Glaze

Blue Hare, Hare’s Fur, or Floating Blue is a widely used effect in pottery studio glazes and commercial glazes.

Print it yourself: Illegal Slice Cube
Print it yourself: Illegal Slice Cube

STL Files: https://quirkycubes.com/public/Illegal Slice Cube STL.zip

Sticker Template: https://quirkycubes.com/public/Illegal Slice Cube Stickers.zip

Hardware required:


The Illegal Slice Cube is easy to print and doesn’t require any special hardware.

Bambu P1S print settings:

  • 0.16 mm layers
  • Support raft
  • Half speed
  • Auto snug supports at 25-30°
  • Manual strong tree supports on core - just the overhangs
  • 3 wall loops (for vapor smoothing)
  • Polymaker ABS (Bambu brand ABS does not vapor-smooth)
  • Bambu Support for ABS

Assembly

The core is made up of multiple parts that must be assembled in a specific order.

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

Updated 2025-03-16

STL Files (v2): https://quirkycubes.com/public/QuaternionCube_STL_v2.zip

Sticker Template (SVG, Silhouette Studio): https://quirkycubes.com/public/QuaternionCube_Stickers_v2.zip

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:

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