Mister Squawk

Cryptic Build Chain

Since my last post here, I've set my first puzzle. Concurrent with writing the puzzle I also created an author-build-publish infrastructure, within my idiosyncratic computing constraints:

Authoring Tools

Mine has been a Chromebook-only household for at the past least 10 years. I use the released Linux container on an Intel-based Asus Chromebook Plus for my desktop environment, and I have a small Linux server running on a fanless Atom-based PC.

Qxw for Grids

Qxw is a Linux-native application with a nice GUI and helpful grid-filling tools. It exports grid images in PNG or SVG as well as an XML grid description in a file format that might be used by the proprietary Crossword Compiler for Windows tool.

It does not support the entry of clues, however.

XML for Clues

I defined a simple XML format for puzzle clues, and I simply edit this file using VS Code.

<puzzle>
  <title>Keep on Trucking</title>
  <date>2026-01-22</date>
  <across>
    <entry>
    <index>1</index>
    <clue>Cabot was taken aback by the company; it left a bad taste in the mouth.</clue>
    <length>7</length>
    <answer>TOBACCO</answer>
  </entry>
  ...

I find the process of playing around with clues much easier using pen and paper, so I built a simple XSL transform that generates a triple-spaced list of clues and answers for me to print.

First Build Chain: Static HTML and PDF

I wrote a small XSL transform that generates a non-interactive HTML page and a printable-PDF from the XML file.

As I prefer to solve puzzles on paper, this seemed workable to me.

image

But after posting my first puzzle to r/crosswords, a kind commenter directed me to Exolve, a remarkably easy-to-use (for both setters and solvers) Javascript-based tool to create interactive crosswords.

Second Build Chain: Interactive HTML

To use XSL to generate a complete Exolve document, I wrote a short script to combine the Qxw-generated XML with my clues XML into a single XML input file. I then created a second XSL transform to generate the Exolve file.

Testing Shortcomings

The goal for any automation is to ... automate. Unfortunately, the export of grid images and XML files from Qxw must be done through the UI. There is a CLI, but it doesn't support those operations, so I need to take care not to make grid updates without re-exporting the grid XML file.

Deployment

Currently, at least until my ISP catches up with me, the puzzles are deployed from the Atom-based server sitting on my desk. I use Cloudflare to handle DDNS chores and Google Analytics and GoAccess to monitor traffic.

Next Up: .PUZ File Export

While the Exolve is great, the most popular tooling for crosswords is based on the .PUZ file format. Across Lite offers a free application to generate .PUZ files, but that's not a solution for me (see idiosyncratic constraint #1, above).

Time permitting, I hope to leverage the code in exet, from the author of Exolve, to add this to my build chain.

Older Posts

Touristfahren

From the archive: A lap around the Nürburgring in 2015.

Two for One

Cryptic crossword of the day.

Edge Case

A programming fail.

Cryptic Crossword 'Solving Aid'

Cryptic crossword of the day.

Targetrage

Market arbitrage for bakers yeast.

Chuck and Michael

Koching out.

Bagelnomics

Making bagels to save money.

Google Domains, We Hardly Knew Ya

Burned by a Google beta, again.

Magic

Optimizing the cell service.

Stolperstein

Historic echoes in a European city.

Saturday

Competitive crosswording.

Illustration

Fooling around with illustrations for a shop project.

User Error

Tracking down a network outage.

Quality of Life

Optimizing VS Code on a Chromebook.

Free hosting (multiple domains, SSL, subdomains)

Taking care of domains

vi

Editing the old-fashioned way

Icy Morning

Nürburgring Nordschleife

Going fast in Deutschland

Top of the World, New England Edition

Hiking Mt. Washington