Tomorrow is International Women’s Day, a celebration spinning out of the global labor movement, designed to bring attention to issues that women face in society that—let’s be clear—are directly responsible for most of the issues that men face in society.

Rough painting of a 1910s German woman waving a large red flag

If you’re here to demand that someone tell you why there’s no International Men’s Day…it’s in November. And unlike International Women’s Day, it was just created to celebrate the accomplishments of men…as if history has been covering up all the powerful men. I hope that everybody can see the difference. Likewise—and this should probably become a full post, some day—if you’re worried about men having a much higher on-the-job risk of dying, the solution is to fight for women to be taken seriously in dangerous jobs, not to talk about how strong men are.

However, being a man, I suppose that men’s accomplishments are also the best opportunity for a segue that I’m going to get to what I did, this week…


GitHub - jcolag/iungimojiA generator for simple memory games. Contribute to jcolag/iungimoji development by creating an account on GitHub.

While this isn’t a major change to anything, Iungimoji’s repository now ignores the generated game.html file.

Also, if you’re a regular reader of the blog, then you probably already know that I officially launched my Daily Iungimoji puzzle, in yesterday’s post, which also explains more about what’s happening in that repository.

The short version, though, is that it generates implementations of a card-matching game, using emoji for the card contents. As usual, the defense against cheating is minimal, because I wrote this primarily for myself, meaning that the biggest concern is that I accidentally cheat, such as accidentally double-clicking and either selecting the emoji underneath without flipping the card or causing the card to match itself.

The nice thing about this—if you’re looking at code ideas, and assuming that I haven’t already described it—is that the majority of this work gets handled in CSS transitions. Clicking a card adds or removes a class, which slowly flips and hides/reveals the face of the card. When the player finds a match, JavaScript adds a third CSS class, which shows the cards as permanently exposed. It’s especially gratifying to me, because I tried to build something similar on Windows, about twenty years ago; the code to manage the cards was a nightmare, even after I worked out the geometric transformations.

Morning Dashboard

GitHub - jcolag/dashA morning "dashboard" generator. Contribute to jcolag/dash development by creating an account on GitHub.

Similar to Iungimoji, this is hardly the end of the world, but the repository now ignores the generated morning.html file. It’s hardly a crisis, but I keep noticing the “alien” file in my list when it’s time to commit changes, which is a bit of a waste.

I could write the output file to the system’s temporary folder, but that would require embedding the CSS, and I’d rather not do that when I go in to tweak the styles.

Honestly, it surprises me that I didn’t do this from the start, since I literally generate the file every morning…


GitHub - jcolag/g-l-o-b-eA generator for daily scavenger hunt puzzles at. Contribute to jcolag/g-l-o-b-e development by creating an account on GitHub.

G.L.O.B.E.—or Geo-Locate Objects Before Enemies—is a third puzzle game that I’ll (soon) publish daily, alongside the Daily Iungimoji and Daily Nonogram. Unlike the others, you need to find the country displayed at the top of the page, based on both the outline and the directions given on wrong guesses.

As I mention in the repository, the version of the game in my head is that you’re racing against a hypothetical opponent—the “Enemies” in the title—moving at a fixed speed per mile, meaning that you have a maximum travel distance between the first and final guess to find the MacGuffin. The actual game doesn’t do this, but it feels like a reasonable pretense.

It also “narratively” massages a problem that most people, including myself, are going to have playing: The idea of a “country” is shockingly fuzzy, with places like the Faroe Islands or British Indian Ocean Territory sitting on the list, waiting to be selected randomly. Since most of us probably wouldn’t consider either of them “countries” in any reasonable sense, the idea of a budget for distance allows the player to wander around the vicinity of an obscure country (or non-country) before finally pulling up a map of the area.

One interesting aspect—to me, at least; many readers probably already know about it—is that modern HTML has a convenient way to create a text input with suggestions, what we used to call a combo box, before platforms weirdly stopped providing them.

<input id="user-guess" type="text" list="suggest"></input>
<datalist id="suggest"></datalist>

The <datalist> container takes a series of <option> objects, which are easy for the user to select, which fills in the <input> that references it with its list attribute. In the case of G.L.O.B.E., JavaScript rewrites that list as the player types. The updates aren’t quite reliable—sometimes, I need to backspace to convince the code to update, and I’m not sure why—but that’s almost certainly a bug in the JavaScript code, rather than the component.

Anyway, you can preview the Daily G.L.O.B.E., until I announce it.

Fýlakas Onomáton

GitHub - jcolag/fylakas-onomatonFýlakas Onomáton is the server for Doritís Onomáton - jcolag/fylakas-onomaton

The minor tweaks that I have made over the last couple of weeks—including a library update earlier this week—have run into build problems on Heroku. I have ignored this, because the app (unfortunately) has definitely not been my top priority.

However, I finally took a look at the logs, and it appeared that the problem was a Webpack component failing to build. So, I manually updated that version.

That did it, so I can go back to ignoring those warning e-mails from a couple of weeks ago…

Entropy Arbitrage

GitHub - jcolag/entropy-arbitrage-codeThe Jekyll blog for - jcolag/entropy-arbitrage-code

As it turns out, writing the previous section on Fýlakas Onomáton wasted hours of my week. Jekyll’s build process kept crashing, insisting that I had mismatched some obsolete ASCII code page—which it couldn’t be bothered to identify for me beyond 8-bit ASCII—and Unicode. For some reason, Jekyll also can’t be bothered to identify what specific text string causes the error, instead just providing a stack dump telling me that something went wrong in rendering a post. That all seems like a huge oversight, given that Jekyll’s entire world is processing text, but sure.

So, I spent a while applying an informal binary search to the post, deleting ever-smaller fractions of the file, until I had all the file except for whatever caused the problem. The problem, though, was…the GitHub preview tag.

The next step, then, was to perform the same search inside the preview tag that I created a few weeks ago. There, the culprit was more painful—because I didn’t structure my text-handling code—but more straightforward to see, once I had reorganized the string to make it easier to delete parts: The og:image:alt metadata is somehow recognized as 8-bit ASCII text, despite—based on inspecting the binary data—being UTF-8 Unicode as expected.

The solution is to tell the Ruby interpreter that it’s wrong.

image_alt = repo['image_alt'].force_encoding('UTF-8')

The .force_encoding() method changes nothing about the string, itself, but rather forces the interpreter to accept the string of bytes as coming from the specified encoding. Obviously, you don’t want to do that in the general case, but I have a sneaking suspicion that GitHub isn’t likely to start serving its metadata using 1990s Windows code pages anytime soon.

Library Updates

I needed to bump library versions for RenewDB, Bicker, and Generic Board Game.


As I mention in the G.L.O.B.E. repository, I may take some time, this week, adding a “travel budget” to the game and adding localization settings. Maybe. And as I keep saying, the library updates have been backing up.

Also, expect the formal announcement of the Daily G.L.O.B.E. puzzle on Sunday, after I’ve had more time to make sure that it doesn’t easily break.

Credits: The header image is extracted from Frauentag 1914 Heraus mit dem Frauenwahlrecht by Karl Maria Stadler, in the public domain since 2014.