Automated updates: 2022-03-07

This commit is contained in:
John Colagioia 2022-03-07 06:46:37 -05:00
parent 46ca940e7f
commit d34531ec0f
1 changed files with 104 additions and 0 deletions

104
2022-03-07-women.md Normal file
View File

@ -0,0 +1,104 @@
---
layout: post
title: Developer Journal, International Women's Eve
date: 2022-03-07 06:46:05-0500
categories:
tags: [programming, project, devjournal]
summary: Progress on assorted projects
thumbnail: /blog/assets/Frauentag-1914-Heraus-mit-dem-Frauenwahlrecht.png
proofed: true
---
Tomorrow is [International Women's Day](https://en.wikipedia.org/wiki/International_Women%27s_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](/blog/assets/Frauentag-1914-Heraus-mit-dem-Frauenwahlrecht.png "I've seen better rhythmic gymnastics routines...")
If you're here to demand that someone tell you why there's no [International Men's Day](https://en.wikipedia.org/wiki/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...
## Iungimoji
{% github jcolag/iungimoji %}
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**](/iungimoji) puzzle, in [yesterday's post]({% post_url 2022-03-06-iungimoji %}), 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/dash %}
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...
## G.L.O.B.E.
{% github jcolag/g-l-o-b-e %}
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**]({% post_url 2021-02-21-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](https://en.wikipedia.org/wiki/Faroe_Islands) or [British Indian Ocean Territory](https://en.wikipedia.org/wiki/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](https://en.wikipedia.org/wiki/Combo_box), before platforms weirdly stopped providing them.
```html
<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.**](/globe), until I announce it.
## Fýlakas Onomáton
{% github 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](https://webpack.js.org/) 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-code %}
As it turns out, writing the previous section on **Fýlakas Onomáton** wasted hours of my week. [Jekyll](https://jekyllrb.com/)'s build process kept crashing, insisting that I had mismatched some obsolete ASCII [code page](https://en.wikipedia.org/wiki/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](https://en.wikipedia.org/wiki/Binary_search_algorithm) 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.
```ruby
image_alt = repo['image_alt'].force_encoding('UTF-8')
```
The [`.force_encoding()`](https://en.wikibooks.org/wiki/Ruby_Programming/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**](https://github.com/jcolag/RenewDB), [**Bicker**](https://github.com/jcolag/Bicker), and [**Generic Board Game**](https://github.com/jcolag/generic-board-game).
## Next
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](https://commons.wikimedia.org/wiki/File:Frauentag_1914_Heraus_mit_dem_Frauenwahlrecht.jpg) by Karl Maria Stadler, in the public domain since 2014.