Lux Absio Bervatum

Monday, November 21, 2022

Figuring out Mastodon

If I did it right, this should verify me on the new Mastodon instance:

Thursday, November 10, 2022

Render distance differences

Checking to see how different Minecraft render distances look on map view

Render distance: 20 chunks

Render distance: 32 chunks

Wednesday, November 9, 2022

Minecraft frivolities: a QR code

Finished a little project in Minecraft, a working QR code. Made it out of white wool and polished blackstone bricks since they seemed to have the best black/white contrast in map views. Built it across a large cave opening. Here are some in-game screencaps:

from the cave below

And some map views:

very zoomed-out, QR code circled in red

closer view

And here's a much wider map view at 1:1 scale (3025px × 1879px):

This is from my Minecraft world "mundo unopuntounoocho." Not that it matters, but the in-game coordinates for this build are -15,928, 68, 642 (xyz). I have a basic ID scheme for portals in that world; the one under the QR code is portal A-XIX and it connects to portal B-XIX with nether coordinates (N) -1,996, 65, 95.

Thursday, November 3, 2022

Ha3Mogom (a macrostructure made of Hex Translator strings)

Over a year ago I finished a "Hex Translator" project I was working on for a while. I didn't want to post it here until I'd gotten prints to all the contributors. And the last one took me a while, but now that's done and I can share it here! The final print is 30 inches wide and 20 inches tall.

Here's a copy-paste of the "overview" text from the piece:

Ha3Mogom Macrostructure (HTb20210227A)

The Hex Translator is a deterministic algorithm that transforms character strings into patterns of hexagons with various qualities. The version used here, Hex Translator build 20210227A, can output patterns with three types of hexagons (solid, hollow, broken), six icons, and 1,216 colors. Colors are generated from, and cycle through, a 16-color palette.

The large, multicolored object at right is a macrostructure composed of eight different string patterns produced by the Hex Translator. Its label (Ha3Mogom) comes from shorthand for each string's source (Hill, Austin, 3, MIT, Older, Get, Own, Meteorology). In total, the macrostructure represents 4,935 characters.

Low-ish res raster render (~150 dpi):

And here's a photo of one of the framed prints:

I find it weirdly satisfying to look at this clumpy spatter of hexagons knowing that it's expressing all the input strings. It's neat to see that information with new patterns revealed all at once through a different lens.

Sunday, August 28, 2022

Summer 2022 Playlist

I curated a thing: "Henry's Summer 2022 Playlist"
It's 66 songs, mostly recent (57% with release dates after 2018), total length around 3 hours 52 minutes. The songs are ordered in a way that I find pleasing, mainly focused on punctuating high-energy chunks with chill, low-intensity respites. But I've mostly been listening to it on shuffle and I think it works well in random order also. My advice would be to first try it in the order shown then shuffle thereafter.

I struggle to describe the kind of music in the playlist. Some of it is very mainstream, like "Sweetest Pie" by Megan Thee Stallion, and some is pretty obscure, like "Mirror Maru" by Cashmere Cat. There are a few odd tracks with short bits of spoken-word stuff (a Heaven Sent jingle from late-60s/early-70s, some Dawn FM DJ patter, a handful of lines from Fiddler on the Roof). There are songs from 1909 and 2022. There is a lot of variety. Hope you like it.

Friday, July 15, 2022

Hardcopy Wordle - W01

Ever wanted to play Wordle by yourself, offline, using a pen and paper? Do you love looking up numbers in tables and indexes? Then have I got the just the thing for you!

Hardcopy Wordle (W01, June 2022, 4 pages) (801 KB)

This is a four-page monochrome document formatted for standard US letter paper. Instructions are on the first page and six puzzles follow. I noticed there are Wordle puzzle books for sale, but every one of them I looked into "cheated" in some way: Some presented mostly-complete puzzles that have the player fill in the last guess only, some require a second human player to act as the computer (telling the first player which letters in their guess match, etc.). So I made an offline, solitaire version that tries to be faithful to the original experience and prevents players from accidentally spoiling solutions.

It works, but I think it's a little unwieldy because each time the player writes a guess they have to look up letter/position references in a table, then look up those references in the index. This process seemed like it would be fun (to me), but it's a little tedious in practice. Or maybe it contrasts too sharply with the instant gratification of the online version.

There are ways this could be optimized. Most players probably wouldn't remember the symbols (answers) associated with specific three-digit reference numbers if there was enough time between them, so I think you could reuse something like 30% of the reference numbers and shrink the size of the index.

If I were doing this as a book, another possible approach for the index might be to have tabbed sections for each position and a page for each alphabet letter at that position. Then each puzzle could have a unique non-sequential code and that's all a player would need to remember as they worked the puzzle. Of course, there would be more page-flipping. But it would be easier for folks with poor short-term memory and would probably decrease the player's chances of making errors.

Friday, February 18, 2022

Playing Sid Meier's Alpha Centauri on modern computers

Sid Meier's Alpha Centauri (SMAC) was released in February 1999⁠— 23 years ago as of this writing. That's nuts. It's the only computer game that old that I keep coming back to after such a long time. One of my all-time favorites. But I hadn't been able to play it for a while because an OS upgrade rendered all versions incompatible (or at least nonworking even with my tinkering). Now I'm on a new computer that's got enough mojo to run a proper Win10 virtual machine, so of course I downloaded GOG and SMAC. Noticed I was having some minor issues (display messing up after alt-tabbing, a menu option being unselectable) so I started googling around and found some unofficial patches that vastly improve the game on modern systems.

Did you know that if you have the Windows/GOG version you can just copy the Alpha Centauri directory from C:\Program Files (x86)\GOG Galaxy\Games, paste it anywhere, and run the executables?

There's a great wiki that has links to the fan-made patches here. I started by applying scient's v2.1 patch, then PRACX by PlotinusRedux/DrazharLn. Massive improvement. Here's a screencap from the current GOG-release SMAC:

And here's a screencap of the PRACX version with support for widescreen displays and multiple zoom levels:

Being able to zoom in and out with the mousewheel makes it so much nicer to play. Really grateful to these folks for making and sharing these patches.

Friday, January 14, 2022

Mood Tracking Stats for CY2021

I've done mood tracking in the past, but only for a few weeks or months at a time when things were particularly bad. In mid-2020 I finally succeeded in making it a daily habit and have kept up on it since then. So 2021 is the first full year for which I have detailed daily mood data. The tracker app I use doesn't go into quite as much detail as I wanted, so I exported the numbers to CSV and made some charts in Excel.

Tracking can be really helpful for mood disorders. You can measure the effects of interventions to see what's worthwhile. Also, depression can cause memory impairment, so daily logging gives more reliable data than, say, a weekly or bi-weekly recap.

The following charts are based on my 01/01/2021-12/31/2021 data. Mood ranges from 1 to 5 (bad to good). First, Average Mood by Week Number and Average Mood by Month, both with linear and polynomial trendlines.

One pattern I can see here is that my average mood improved substantially when I began working from home in early July.

Work has a big influence on this next chart too—Average Mood by Day of Week:

I imagine those Day-of-Week numbers are a common pattern for folks that work Monday-Friday; gradual rise up to Friday and then much higher on the weekend.

This last one, Average Mood by Day of Month, is probably more specific to me. A lot of the work I do is very cyclical with a heavy load at the beginning of the month that usually starts to lessen around the 9th or 10th, then pretty steady till "crunch time" around the 25th or 26th. (Edit: The red dashed line is a 3-day moving average.)

There's also extra work following the end of each quarter. I don't think I have enough data for that effect to be discernible yet, but maybe in a couple more years. I'm also interested to see how these numbers might be affected by weather or temperature.

Monday, October 11, 2021

Unfinished drawing- circulatory circuits (2018)

Came across this drawing I was working on in 2018 and gave up on (because it started feeling too arbitrary? ugly?). The idea was something like "nerves and circulatory system laid out as circuits." I wanted twisty, branching paths that you could follow through different layers in a grid. Still think it's a neat idea, but not at all satisfied with this execution.

Saturday, September 18, 2021

COVID-19 case rate stuff

Here's a short post about COVID-19. A lot of people I know, even people I normally consider very rational, get angry and upset when talking about the pandemic. Go ahead and skip this if the topic causes you distress.

Anecdotally, there's a lot of non-essential travel going on right now and I don't understand it. I'm talking about otherwise-sane folks. People that are vaccinated, people that mask up appropriately. But this is a bad time for doing stuff that might contribute to spread or increase the likelihood of needing to visit a hospital. Case rate (cases per 100K population) is almost at its all-time high in WA.

WA case rate (Dept of Health data dashboard)

And currently at a record-high in our county:

Local county only (still DOH)

A little better in the U.S. as a whole, but still fairly high (this is 7-day, CDC doesn't do 14-day automatically for some reason):

CDC data tracker

Non-essential travel and large gatherings aren't a great idea during a pandemic, but if you're going to do it, wouldn't it make sense to at least try to aim for periods of lower risk? Maybe I'm overcautious. In our area, the vaccine became widely available in Spring 2021. It doesn't make someone invulnerable though. It's good to consider how your actions affect community spread and add load to healthcare resources even if your personal risk is small.

Saturday, September 11, 2021

Random Walk Fun

You know how a three-panel art piece is a triptych? A nine-panel piece is an "enneaptych." Here's an enneaptych of some CA random walks in a 64x64 grid.

And a couple images of earlier iterations:

I was working on a different thing that involved random walks and thought they looked neat, so I started layering a bunch of them on top of each other and ended up with what you see above.

Thursday, August 5, 2021

Re: a very specific problem with Chrome sync on iPhone

This is a post about a really specific technical problem involving Chrome sync on iOS. I'm putting it here because I spent two days trying to figure out what the issue was and could not find a solution anywhere. This way, maybe someone with the same problem will be saved some trouble.

I recently upgraded to a new phone and it was great except I could not get Chrome to sync properly on the new device. Logged into Gmail fine, Google Calendar worked normally, and connecting my Google account in Chrome seemed to work okay except it didn't fully sync (it pulled a little of my history but none of my passwords or payment methods).

I was upgrading from an iPhone 8 to an iPhone 12. I backed up the iPhone 8 to my computer, then restored that backup onto the iPhone 12. Had to log back in to some apps but all my data seemed intact. Great. Everything was behaving itself except Chrome. I googled like mad trying to figure out why:

  • chrome ios won't sync
  • chrome sync ios broken
  • chrome iphone won't sync passwords
  • force chrome sync iphone
  • chrome sync stuck ios
  • chrome not syncing ios 14.7.1
I tried turning the phone off and back on, totally logging out of my Google account in every app and then logging back in, turning sync off and back on. Nothing worked. The Chrome browser on my phone would say it was in the process of syncing but it made no progress even if I waited hours.

So here's the solution I stumbled upon by accident and was not mentioned in any of the documentation or various sites I read: If you are trying to sync Chrome on a device that was restored from a backup, make sure the original device (the source of the backup) is turned off. Seems fairly obvious in hindsight, but nothing I read mentioned that. As soon as I turned off the old iPhone 8 the Chrome sync on the iPhone 12 completed fully in a couple minutes or less.

Tuesday, March 30, 2021

Turning strings into pattern instructions with the hex translator

I thought it would be interesting to try to explain, step by step, how my Hex Translator thing turns strings into instructions. Specifically, how the first direction (for the 2nd cell of the pattern) is determined.

First, a few definitions: UniCh is the unicode value of the current character in the string. UniCu is the sum of the unicode value of the current character and the unicode value of every character preceding it. UniMx is the sum of all unicode values for all characters. StrLen is the number of characters in the input string. Constants are various primes with special focus on 48,271 and 2^31-1 (the 8th Mersenne prime).

Green bracketed text shows values and calculations for the example string "Sassafras." starting from the first character "S" (UniCh=83).

Let DirA = (StrLen + 389) times UniMx. [(10+389)*981=391,419]
Let DirB = mod(DirA, 701). [391,419 mod 701=261]
Let DirC = 48,271 times UniCu. [48,271*83=4,006,493]
Let DirD = mod(DirC + DirB, 2^31-1). The sum of DirC and DirB is way less than the modulus, so the modulo operation doesn't really matter here. [(4,006,493+261)=4,006,754; 4,006,754 mod 2,147,483,647=4,006,493]

Now we advance to the 2nd character, "a" (UniCh=97 so UniCu=180).

Let DirE = 48,271 times DirD. [48,271*4,006,493=193,410,022,334]
Let DirF = DirE + UniCu. [193,410,022,334+180=193,410,022,514]
Let DirG = mod(DirF, 2^31-1). [193,410,022,334 mod 2,147,483,647=136,494,284]
Let DirH = (DirG divided by 2^31-1) rounded to 16 decimal places if number of decimal places is greater than 16. [136,494,284/2,147,483,647=0.0635601040271856]
Let DirI = the last 7 digits of DirH. [0.0635601040271856 (last 7 digits)→ 0271856]
Let DirJ = the first 6 digits of DirI + UniCh. [0271856 (first 6 digits)→ 027185; 027185+97=27282]
Let DirK = mod(DirJ - 1, 6) + 1. [27282-1=27281; 27281 mod 6=5; 5+1=6]

Now we look up DirK's value on this table to get the direction:

6 = NW (northwest).

Why is this process so convoluted? I wanted to make the output hard to predict and ensure that relationships between different properties weren't obvious. Over many iterations the system got more and more complex. It isn't elegant, but I'm satisfied with how it behaves. The patterns it produces are what matter.

Sunday, March 21, 2021

How I make crosswords

I recently made my last crossword ("crossweird") for Tumbleweird. Coincidentally, it turned out to be my 50th published crossword. Here are all 50 together in chronological order:

This is meant to be an overview of how I make crosswords. My approach is a little unorthodox (overly verbose clues, non-rectangular/asymmetrical puzzle shapes, an obsession with Roman numerals, etc.), so it's not a how-to. Doing a lot of crosswords by mainstream crosswordists (is that a thing? syndicated puzzlemakers) would probably prepare a person better than hearing my process. But I'm going to explain it anyway.


I start in Excel, but any spreadsheet software should work. Google Sheets works fine. Sorting out snarls and making words fit together with as much overlap as possible is way easier with word/pattern search engines. OneLook is the best for this, no question. A2zWordFinder can be useful too; has some foreign language options. People by Initials is good for 2- and 3-letter strings. Wikipedia and Wiktionary go without saying. Once the puzzle is done, Inkscape to pretty it up. But Inkscape doesn't play nice with CMYK (at least, in my experience; even if the color tools in Inkscape say something is K-100 black I always seem to end up with rich black when I view the ink separations independently). So I take that output and use Scribus to make the colors behave themselves. Import the puzzle to InDesign, type up the clues, add extras like title, byline, etc. Done!

Making the Solution to the Puzzle

It helps to pre-format the spreadsheet by setting every cell to the intended font and sizing the rows and columns to make each cell square.

I usually try to begin with one or two "anchor" words meant to run the width and/or length of the puzzle. Here's an example:

STRANGERTHINGS is the Across anchor and DUFFERBROS is the Down anchor. This kind of synergy is nice because the Down clue can refer back to the Across answer (e.g., "9-Across: Netflix series that follows Mike, Lucas, Dustin, and Will as they contend with otherworldly forces in the 1980s (2 words)" and "21-Down: Creators of 9-across (2 words)"). Ideally, I can hang the rest of the puzzle off the anchors, though it doesn't always work out that way. I find making puzzles requires a lot of patience because oftentimes a great "mesh" of words turns out to be unresolvable and it's better to scrap it for something more elegant than to kludge it together with too many unconnected letters (i.e., letters with black cells on either side of them) and lazy clues (e.g., "D_ey__al_" (Dreysdale) to produce RSDE). Early on it felt like a waste of time, but I came to accept that progress requires a willingness to backtrack from dead ends.

Next, I try to work out at least one 4x4 section with no black cells. There are different ways to attack this. I like to pick one 4-letter word as a starting point, then focus on the letters in the center 2x2 section. It's easier when the center letters are common (re: dictionary letter frequency). And of course some combinations here are the kiss of death, like ?SN? or ?NS? (even though S and N are very common by themselves). In smaller areas like this, when word options seem equally good, I usually tilt toward the one that lets me alternate vowels and consonants in the crossing (perpendicular) words.

The Puzzle Grid & Numbering

Once the solution is done I end up with something like this in my spreadsheet:

Apply the borders and black cells:

Then I copy it over to one side, delete the text, decrease the font size, change cell alignment to top-left and number the Across and Down answers:

Important note on numbering: There's an established system for numbering the puzzle answers. Start with the leftmost cell in the topmost row. That's 1. Move across that entire row, left to right, skipping over gaps, and assign the next number to the next Across answer you encounter (ignore the Downs). Then move down one row and start at its leftmost cell. Assign the next number to the next Across answer you encounter. Repeat this process all the way down for all the Across answers. When all the Across answers are numbered, go back to the leftmost cell in the topmost row and repeat the numbering process for the Down answers.

My first puzzles were numbered incorrectly and I didn't realize it until my friend Molly explained the numbering system to me. Numbering answers correctly makes the puzzle easier to navigate. It also makes mistakes (like failing to number an answer) less likely.

Vector Post-Processing

With this part done, I select the "solution" grid and print the selection to PDF. Repeat for the puzzle grid. With Excel, this produces 8.5x11 in. pages with the content way up in the upper-left corner. That needs to be cropped properly and Excel does some odd things with PDFs that can lead to printing problems, so these get imported to Inkscape for cleanup. In Inkscape, I ungroup everything and convert it all to paths (including borders, which need Stroke to Path). Some elements can be nested, so I do a few rounds of Ungroup-Object to Path-Stroke to Path to make sure it's all normal paths with black fills and no strokes.

I find Excel doesn't get the numbers quite as far into the corners as I like, so I select those and tweak the positioning. While I have them selected, I make them all a tiny bit narrower (Transform > Scale > width 95%, apply to each object separately, Apply).

Once the puzzle grid looks the way I want, I select everything and use Union to make it a single object. Then I put a colored rectangle behind it, Duplicate the puzzle object, Difference the duplicate onto the rectangle (destroying the duplicate), Break Apart the rectangle, select the rectangle region outside the puzzle, delete that, select everything again, un-select the puzzle object, and Union the rest together. This makes a perfect uniform background for the puzzle cells. However, its edges are exactly identical to the puzzle's edges, which can cause tiny hairline defects when printed. So I select the background object, zoom way in, and use Dynamic Offset to pull the edge in about half the thickness of the puzzle's outer border. Then Object to Path on the background, change fill to white, and group with the puzzle. Now the puzzle can be dropped onto any background and the puzzle's cells will always have nice white backgrounds and everything will print the way it appears on the screen.

At this point, I dress the puzzle up a little. The style I like best, the one I've settled on anyway, is a black circle that totally encompasses the puzzle. I decorate the circle's black space with white vector traces of public domain clipart (thank you, British Library!) and stars. Like so:

My last step before saving as PDF is to go to Document Properties and resize page to content.

As I said earlier, Inkscape doesn't play nice with CMYK so I open that PDF in Scribus and force all the colors into CMYK with K-100 black. This is really important if you're designing for print because rich black will blur easily. Also, people touch the page when they're working the puzzle and if you stack lots of color in one place it'll rub/smear onto their skin much more easily. That's gross.

Layout, Writing Clues

With the puzzle part done, I place the post-Scribus PDF in InDesign and start writing the clues. I find it's very helpful to place the solution in the pasteboard area just off the page so I can refer to it easily.

If the puzzle is numbered correctly all the Across clues will be sequential and the Down clues will have one or more gaps in the numbering.

That's about it!

Friday, March 5, 2021

Hex translator XII

Made a particularly large one this time, 507 characters. The input is "the largest non-titanic prime which can be expressed as the difference of equal powers of two consecutive primes (i.e., 3^1061 - 2^1061)." (Credit to Shyam Sunder Gupta for submitting this number to Prime Curios!)

This is what the pseudocode looked like:

This was my 36th hexagon-translator-output-thing. Need a word for these. They kind of look like macromolecules. Hex patterns? Will think on it.

Wednesday, February 24, 2021

Hex translator number distributions issue

I was wrong, those numbers were biased. In more than one way. Hopefully fixed now. I made another worksheet to collect stats and the distributions look okay. The flatter these bars are, the more even the distribution (and the more "random" the output).

A recent one made with the new 2021.02.23A build, 74 characters:

Think I might stop posting new hex thingies (maps?) here for a little bit. At least until there's some kind of notable development. I'll keep throwing them in this Flickr album if anyone wants to see.