Dickens of a Blog

The third iteration of Doug Bolden's various thoughts and musings.

Inline Substitution Ciphers to Play with Semi-Hidden Text

jLh 903mO moh0 m3 S6 SnE 0so Vhshn0Sh 3SnmsV3 6Y ShFS SL0S 0nh 903mO0MME ‘Lmoohs ms QM0ms 3mSh’ (C2r!) 9tS 0M36 Vhshn0MME nhO6Vsmd09Mh 03 LtU0s-BnmSShs ShFS 9E nhS0msmsV UtOL 6Y SLh QtsOSt0Sm6s, BLmSh3Q0Oh, 0so 6SLhn hMhUhsS3. jLm3 B6tMo hs09Mh Uh, Y6n ms3S0sOh, S6 BnmSh ShFS SL0S O6sS0msho 3Q6mMhn3 6n L0o 6SLhn 03QhOS3 s6S msShsoho S6 9h nh0o 9E jLh 7MV6nmSLU BLmMh 3tnn6tsoho 9E ShFS SL0S m3 QhnYhOSME LtU0s- 0so U0OLmsh-nh0o09Mh. a O6tMo 30E ‘J6t = Q66 Q66 Lh0o’ BmSL6tS SL0S 9hmsV msohFho. uE NhhQmsV mS 0 36UhBL0S 3mUQMh 3t93SmStSm6s OEQLhn, SLm3 Uh0s3 SL0S mS h03E Y6n Qh6QMh S6 Sn0s3M0Sh h1hs BmSL6tS 0sE 3OnmQS 0so 0MM6B3 mS S6 9h nhM0Sm1hME tso6sh 0S 0 M0Shn o0Sh.


If you click the text above, it should “solve out” to a line of text that reads:

The basic idea is to try and generate strings of text that are basically ‘hidden in plain site’ (PUN!) but also generally recognizable as human-written text by retaining much of the punctuation, whitespace, and other elements. This would enable me, for instance, to write text that contained spoilers or had other aspects not intended to be read by The Algorithm while surrounded by text that is perfectly human- and machine-readable. I could say ‘You = poo poo head’ without that being indexed. By keeping it a somewhat simple substitution cypher, this means that it easy for people to translate even without any script and allows it to be relatively undone at a later date.

And then if you click it again (without refreshing the page), it should do essentially nothing. This is my basic first pass on coming up with an idea I have had for Dickens of a Blog since way back. I am unsure when I first posited it but likely around 2006 or 2007.

The idea was simple: set aside some portion of the text in an otherwise open-to-read blog post {e.g., spoilers, info semi-hidden from scrapers, bits that otherwise might be triggers} through a simple enough cipher or baseline encryption that solving it would not become hostile to Doug’s happiness if keys/etc were lost.

The Code Behind It

Version 1 is above. What happens if I have a fairly simple Python code:

from random import sample

def scramble_AlphaNum(oldAlphaNum):
    return ''.join(sample(oldAlphaNum, len(oldAlphaNum)))

alphaNum = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789"
newAlphaNum = scramble_AlphaNum(alphaNum)

text = "The basic idea is to try and generate strings of text that are basically 'hidden in plain site' (PUN!) but also generally recognizable as human-written text by retaining much of the punctuation, whitespace, and other elements. This would enable me, for instance, to write text that contained spoilers or had other aspects not intended to be read by The Algorithm while surrounded by text that is perfectly human- and machine-readable. I could say 'You = poo poo head' without that being indexed. By keeping it a somewhat simple substitution cypher, this means that it easy for people to translate even without any script and allows it to be relatively undone at a later date."
txet = ""
paraName = "demo01"

for t in text:
    try:
        txet = txet + newAlphaNum[alphaNum.index(t)]
    except:
        txet = txet + t
        
output = """ <p id=\"""" + paraName + """\" onclick="gentleScramble('""" + newAlphaNum + """', '""" + paraName + """'); this.onclick=null;">""" + txet + """</p>"""
        
print(output)

Right now, I have to manually edit the file to have the paragraph, div, or span ID and then the contents. It’s fairly trivial to more generalize this. Running that, it spits out a paragraph tag that looks like:

<p id="demo01" onclick="gentleScramble('70u9wOboihzYgVXLamGHINxMAUrsk6CQfcpnv3jS2tR1DB4FJEZdeyWqP8Tl5K', 'demo01'); this.onclick=null;">jLh 903mO moh0 m3 S6 SnE 0so Vhshn0Sh 3SnmsV3 6Y ShFS SL0S 0nh 903mO0MME 'Lmoohs ms QM0ms 3mSh' (C2r!) 9tS 0M36 Vhshn0MME nhO6Vsmd09Mh 03 LtU0s-BnmSShs ShFS 9E nhS0msmsV UtOL 6Y SLh QtsOSt0Sm6s, BLmSh3Q0Oh, 0so 6SLhn hMhUhsS3. jLm3 B6tMo hs09Mh Uh, Y6n ms3S0sOh, S6 BnmSh ShFS SL0S O6sS0msho 3Q6mMhn3 6n L0o 6SLhn 03QhOS3 s6S msShsoho S6 9h nh0o 9E jLh 7MV6nmSLU BLmMh 3tnn6tsoho 9E ShFS SL0S m3 QhnYhOSME LtU0s- 0so U0OLmsh-nh0o09Mh. a O6tMo 30E 'J6t = Q66 Q66 Lh0o' BmSL6tS SL0S 9hmsV msohFho. uE NhhQmsV mS 0 36UhBL0S 3mUQMh 3t93SmStSm6s OEQLhn, SLm3 Uh0s3 SL0S mS h03E Y6n Qh6QMh S6 Sn0s3M0Sh h1hs BmSL6tS 0sE 3OnmQS 0so 0MM6B3 mS S6 9h nhM0Sm1hME tso6sh 0S 0 M0Shn o0Sh.</p>

I add that to my document via Custom HTML. The first string is the randomized a-z/A-Z/0-9 alphanumeric characters of the common American English alphabet (etc). It is randomized per running of the script.

Then at the bottom of the page, I insert another Custom HTML section with this Javascript:

<script>
function gentleScramble(newAlpha,para) {
	const AlphaNum = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789";
	const newAlphaNum = newAlpha;
	
	let victim = document.getElementById(para).textContent;
	let solution = "";
		
	for (let v = 0; v < victim.length; v++) {
		foundIt = newAlphaNum.indexOf(victim[v]);
		if (foundIt != -1) {
			solution = solution + AlphaNum[foundIt];
		} else {
			solution = solution + victim[v];
		}
	}
		
	document.getElementById(para).textContent=solution;
}
</script>	

That text the paragraph and the substitution cipher and runs it the first click before passing the “this.onclick=null” to stop it from glitching out if a reader spam clicks it.

As it runs through it checks for characters in the defined “alphaNum” and ignores any that are not included. Those that are included it just re-subs them back to their original.

Voila.

Before you might say that this is fairly insecure, that is kind of the point. Is not trying to deeply encode the text, it is more just trying to play at gently hiding the text in a somewhat breakable pattern.

Current Issues

The first issue is that it is pretty hands on to generate the content, which is not 100% a problem for me but if I have several of these elements it will start to wear.

The solution I’m going to do is build a quick tool that allows for different element types {div, p, span} and a bit more of a GUI, probably through just a quick HTML page with text areas and buttons.

The second issue is that it only accepts characters in the a-z/A-Z/0-9 ranges. If I am typing in French and other languages, characters with diacritical marks will be ignored. This means that “ä” will show up as “ä” in the enciphered text. It’s not a deal breaker since the bulk of the text will be gently scrambled, but it can lead to potential weirdness.

The solution to this could be either to scan the contents and generate a shortened “alphaNum” that only includes characters in it while ignoring all the punctuation OR creating a new diaAlphaNum that includes a separate list of diacritically marked text.

I’m not sure which I prefer. I think I prefer to not worry about that so much.

The final issue at a glance is that any HTML elements inside that element {em, a, strong} would likewise be translated which at best would simply glitch them and at worse could in theory create HTML that is broken if it happens to stumble upon a different element than intended.

My solution to this problem is just to not do any of that.

There is a slight non-issue that feed readers and such will likely break in trying to help, but that’s a bit ok for the moment. Not for driving clicks or any such thing, just in that earlier attempts to build CSS/Javascript spoiler type solutions sometimes resulted in said spoilers being clearly visible to feed readers. It does possibly interfere with screen readers and that is a much bigger problem, but I’ll have to test it.

Possibilities for Expansion

My possible end goal for this would include this as a checklist:

  • Perhaps using a Vigenère cipher instead of a simple substitution one [because I prefer those],
  • Making it at least “smart” enough to ignore interior HTML elements, and
  • Generating a bit of styling that makes it more obvious what the reader is supposed to do, possibly including a failsafe type option if the reader has all javascript blocked, etc.

Visiting the Museum of Illusions

I’m going to be absolutely real: I suck as a tourist.

In this context, I am not a tourist right now but I am a currently a long-term visitor in a strange land — and I feel like Belgium counts as a strange, if delightful, land — who at least generally should be engaging in a bit in the culture.

Which I totally do. I talk to magpies and crows and hang out with cats while just enjoying nature and some old streets.

I finally decided to correct my first statement with a visit to Brussels’ Museum of Illusions with Barbara and Kaz. It is a smaller collection of full-sized illusions, mirror tricks, and puzzles. Kind of place you could spend an hour or two. It is quite nice and absolutely surrounded by all kinds of shops and destinations if you wanted to make a day of it.

If nothing else, take these two points to heart:

  • It is well worth a visit and has some cool trinkets in its gift shop.
  • My photo skills inside sucked more normal so I do not have a lot of photos to show it off, alas.

The Museum at a Glance

Once you get up the escalator/elevator there is a bit of confusion about where to go because it is a highly visual place. You come up about 1/3 the way into the exhibits. My natural tendency to curve right almost lead me to enter into the place without paying. Barbara had been there before — as had Kaz, who was joining us very slightly later — and helped point out the desk to pay for entry. I would have spotted it eventually, no doubt. It is not hidden, just also not super obvious compared to some of the kooky fun on display.

Once paid — €17.50 for adults, €14.50 for children of Barbara’s age — you then have the option to get a lock and key to put your stuff into a locker, which nice, and the guy behind the counter double checked that we did not have balance issues — I am a fall risk, after all — or epilepsy — I am just light sensitive enough that one of the attractions (The Vortex) was pushing it for me.

There a few dozen features. They are numbered but the precise count escapes my memory. Maybe half of those are fairly quick images or wall-mounted illusions. The kind of thing where one line looks longer than another. They did a good job of curating some of the more interesting ones and several have been redesigned to have some interactive elements.

Then there are several larger, more interactive pieces. The aforementioned Vortex is the larger carnival classic of walking through a dark, swirling tunnel of lights. That was my one mistake. I should probably have skipped it.

Besides that you have rooms with angled floors and carefully designed wallpaper so that a person on one side looks a lot larger than the other or looks like they are leaning.

My favorites tended to be the pair of rooms playing with lights and the handful of exhibits based on mirrors. The above image show the top of my head is a fun little item where angled mirrors allow you to see yourself and the room from multiple angles. That’s a single photo showing more or less every angle of myself.

There’s an “infinite room” where you can throw your own rave party with hundreds of yourselves. An upside down room where you can your best “clinging to the ceiling.” A hatch that looks like an infinite spot into darkness where you can take “falling” photos.

Then there are a trio of large scale puzzles. A pair of several kaleidoscopes that make for some trippy pictures. A forced perspective chair.

In general, the place is pretty heavy with photo opportunities and your enjoyment will be based on (a) how many fun photos and videos you want take; and (b) how carefully you pay attention to the balance-or-epilepsy warnings. Those wanting a more hands-on variation of learning about light and optics tricks can get some good learning done.

The staff and the other attendees were all perfectly chill and it was a heavily positive experience. It is not necessarily a regular outing type of place but I imagine we’ll go back a few times while in the country.

EU to (possibly) Enforce Stricter Naming on Vegan Meat Substitutes

I write the following with two perhaps important caveats:

  1. I am an American citizen currently under the auspices of the European Union and enjoying the delightful country of Belgium for work- and family-related reasons and therefore mostly have a stake in this “fight” in that, for a period of a couple of years, I will be eating Belgian (et al) food.
  2. I consume a plant-based diet (though lean more towards beans and tofu than pre-processed “meat substitutes”).

Stricter Naming for “Meat-Alternatives” Vegan Products

The European Union Parliament has voted to have stricter naming on vegan meat substitutes (BBC). Other articles are covering it:

And Arjen Lubach gives a nice rant about it which is actually where I first heard about it because, once again, The Algorithm and I have not yet come to terms. His video is in Dutch with English subtitles available. I appreciate his sass.

Finding Context and an Actual List of Terms

Perhaps the best overall context I have seen is in Politico.eu’s “EU lawmakers back ‘veggie burger’ ban”:

The ban, proposed by French center-right lawmaker Céline Imart, was buried in a broader reform of EU farming rules designed to tweak how farmers sign contracts with buyers and adjust a raft of other technical provisions. It was one of more than 100 amendments MEPs decided on at their sitting in Strasbourg.

When the numbers flashed up on the screen — 355 in favor, 247 against and 30 abstentions — Imart looked visibly relieved and drew a round of applause from her colleagues. The overall reform package, including the ban, was later adopted by a comfortable margin.

Following the links in that article, the actual terminology is explained. Adding to a list of suggested “reserved for meat products only” terms introduced in the utter mouthful of the Annex 1 (PDF) to, deep breath, the “Proposal for a REGULATION OF THE EUROPEAN PARLIAMENT AND OF THE COUNCIL amending Regulation (EU) No 1308/2013 as regards the school fruit, vegetables and milk scheme (‘EU school scheme’), sectoral interventions, the creation of a protein sector, requirements for hemp, the possibility for marketing standards for cheese, protein crops and meat, application of additional import duties, rules on the availability of supplies in time of emergencies and severe crisis and securities.” On that document, pages 3 & 4 have the terms including the usual suspects of beef, chicken, pork, and rump.

Amendment 113 (PDF) is what is triggering the above articles and discussions. To the above list, it adds:

  • Steak
  • Escalope
  • Sausage
  • Burger
  • Hamburger
  • Egg yolk
  • Egg white

In the next part, it refers to poultry-meat (note: hyphenation is mine to stop spell checker from shouting at me) as a whole other broad category (via reference to Regulation (EU) No 543/2008) though most of that seems primarily contained within the aforementioned/linked proposal.

Perhaps buried a bit in the coverage is part of Amendment 113, prior to enumerating the list, states: “These names include, for example.” In other words, the above list should not be considered total or all inclusive. It essentially opens up the doors to the argument that any name understood by common-use language that might be associated with meat-adjacent production could be argued to be included by proxy. Jerky, pot pies, and maybe even certain soups and stews could be argued under such rulings.

A semi-frequent, perhaps semi-serious, debate back in the States is whether or not chili must contain meat.

I also think of terms like “sushi” or “barbecue” and how these meat-centric classes of food are perfectly functional without any animal products.

Keep in mind that the products being discussed are generally extremely well labeled. For instance, here is a fairly typical (in Belgium, other countries might vary greatly) vegan burger (via Delhaize’s website):

It is labeled as vegan, soy-based (twice), and a source of fiber (which is distinctly untrue of meat based burgers). It is also labeled as Garden Gourmet though I admit that you could make the argument that “garden” does not necessarily preclude meat.

Back in the States, there are dog treats that have less clear labels. Shout out to this one dog-treat eating redditor.

Why Such Laws at Least Slightly Bother Me (and not exactly the obvious reason)

Let me be clear, I 100% support farmers and I 100% support clear labeling. Consumers deserve options. Farmers deserve recognition as the backbone of society. Society exists as a concept because farmers make the gathering of people into cities and countries possible. It is hard damned work and they rarely get enough credit for the things they do.

Seriously, thank you.

My first issue with any such law, be it here in Europe or elsewhere, is that the conversation almost always turns quickly to consumer confusion. I feel a defined need of consumer harm should be demonstrated before the consumer becomes the main focus of many arguments. I am not sure if there is any evidence that consumers are actually confused, or harmed, by the label. If anything, such terminology helps consumers to find new products and have greater overall choice.

In the vegan space, sometimes the problem is more or less the opposite. Outside of a few restaurants that bury their vegan-lede, meat-eating customers tend to have better labeling than not. On the other hand, if you find a “garden burger” you sometimes have no idea if it is vegan, vegetarian, or just a label meaning “meat-based burger with fun root vegetables” without clarifications. I have ordered plenty of greens and beans and found out that the entire dish is just packed with bacon or ham or meat-broth. Things like kimchi might have their fish sauce component overlooked and served to vega*n customers. One Huntsville restaurant I used to love had hashbrown casserole that made with cream of chicken soup but not labeled as such.

While there is evidence of harm to traditional meat farmers, and therefore an argument fully based on the production side has merit, I am not even sure that such a ban will actually do much to protect them. A similar EU ban on the use of “milk” in reference to plant-based dairy alternatives has not slowed an increasing adoption of plant-based alternatives to replace dairy products. In fact, that’s one of my favorite things about Belgium, there’s a lot of cool soy drink to be had.

Instead, the primary benefit seems to be a chilling effect and re-labeling cost associated to producers of vegan and vegetarian products. “Minced soy patties” instead of veggie burgers or, you know…gehakte soja pasteitjes. Will that really make a difference? While you eat with your mouth and your eyes/nose, etc, the name of food only partially factors into your long term enjoyment of it. It’s not like “burger” or “sausage” or “hot dog” are particularly appetizing words in and of themselves.

I’m just not exactly sure it will actually deter sales. It will require labels, over time, to be adjusted, though, and that costs. And it reframes discussions of vegan diets into more niche terminology.

The Issue of De-meaty-fying (and Mystifying) Meat

My second issue comes out of the general class of words being targeted.

“Burger” and “sausage” terminologies are adopted by vegans and vegetarians because the words’ histories are in a huge class of products only really classified largely by rough shape and product standards.

Amendment 113 says it for me (emphasis mine):

(2) ‘Meat preparations’ means fresh meat, including meat that has been reduced to fragments, which has had foodstuffs, seasonings or additives added to it

(3) ‘Meat products’ means processed products resulting from the processing of meat or from the further processing of such processed products, so that the cut surface shows that the product no longer has the characteristics of fresh meat.

Burger is practically a neologism. Even tracing the roots as a sandwich back to the late 19th century, the general rise of minced meat being flavored with vegan additives like salt, pepper, onions, and other spices and and then shaped into a scone before being served with a light garden salad between two slices of bread is an absolute infant by historical food standards. The Oxford English Dictionary lists “burger” as being first seen in 1939. While I’m sure that fried biscuits of mince-meat are older in technology, we are not talking a particular class of bread-like meat shapes. We are talking about a specific word.

And while sausage is a much older technology (some of which are essentially “burgers,” now), one in which minced meat is combined with more vegan ingredients to give it a better flavor and then shaped roughly like root vegetables or, you know, other things, the sheer variety of presumably-acceptable-by-Amendment-113 recipes is mind boggling.

Taking the piss a bit, I asked ChatGPT to give me a rough count of sausages not including vega* options: it put the number around 1200. Then said that Germany had 1500+ of those 1200, so…you know, much like prepared-meat-adjacent-food, it is best taken with a grain of salt.

Even if you balk at using GenAI for this, there is definitely a cottage industry of books about a variety of sausage makings. And that’s just the ones currently available for sell by Amazon’s USA shop. Burgers are likewise a complexity.

And many of those recipes involve non-meat additives ranging from small amounts to not quite small amounts at all. It is the sorites paradox. When does the pile of sand become a not-pile? How much salt and pepper and vegetable matter in ground beef + beef-fat is too much?

The end result is that there are entire classes of food, let’s add in “nuggets” and “lunch slices” and “filets,” that are popular despite, or possibly because, their removal from the central meat-ness of their ingredients.

I’m more open to phrases like “egg yolk,” “bacon,” and “steak” being recognized. Of course, the latter two are also seeing a general fracturing from a particular food into a wide class of foods.

I mean, I might eat a plant-based diet but even when I was an omnivore, I would rarely wish turkey bacon on anyone.

Just joking, I’m not going to yuck your yum.

I am purposefully going to avoid bringing up a huge variety of food which encroaches upon the same aspect of a naming schema (e.g., pindakaas [peanut cheese]) but are given a pass because they are not pitched as alternatives.

Of course, peanut butter is an awesome source of flavorful protein, but that’s for another day.

To Counter My Own Argument

The big counter to my own argument is that I actually like moving away from meat-derived names in general. Words like patties and nuggets are general enough, but other phrases (e.g., beef-like, chick’n, veggiefish) sometimes pitch the vegan diet as a strange second place to meat-centric diets.

Let me be really clear about something: despite the constant insistence that a plant-based and plant-forward diet is somehow being centered in self-denial and self-limitation, my chosen diet is extremely varied to the point that adding back in meat and dairy (the latter to which I have a strong physical reaction) would be nothing more an opportunity cost vs cheaper, more ecologically friend, more sustainable, and more varied foods. To say it louder for the people in the back:

Despite the constant insistence that a plant-based and plant-forward diet is somehow being centered in self-denial and self-limitation, my chosen diet is extremely varied to the point that adding back in meat and dairy (the latter to which I have a strong physical reaction) would be nothing more an opportunity cost vs cheaper, more ecologically friend, more sustainable, and more varied foods.

While you do cut out some foods, the variety of flavors, tastes, and types of foods is far greater on the plant side of thing unless you perhaps include a wide variety of non-farmed animal meats, more exotic fish meats, and insect protein.

Even then, a lot of the cores of cooking, such a spices, are notoriously vegan. Minus the use of animal fats, meat, and dairy itself.

Non-meat/non-dairy alternatives are rooted in technology centuries or millennia old. Tofu and Sojadrink are both older than many countries in Europe (and way older than America). Wheat gluten goes back for nearly 1500 years. Beans cultivated for food predate stuff like ceramics. Even something as “niche” as quinoa has been consumed since before the height of Ancient Greece.

While the line between “non-beef plant-based hamburger patty” and “centuries old tofu recipe” is wide, my point is merely that such inventions are constantly being treated as a newfangled idea when they, in their purest form, predate many modern food practices. Human society has enjoyed plant based protein long before protein was being studied as a concept.

And I admit I would be absolutely irritated if words like “tofu” or “seitan” were taken out of context and turned into a meat-bearing product (setting aside that plenty of tofu and wheat gluten recipes do involve meat, traditionally).

Maybe this is a good time to come up with a new terminology and recommit to the “Vegan 1.0” of increased food variety, whole foods, sustainable practices, and flavors that are not so beholden to a meat-centric view that is so hardwired that it, checks notes, requires laws to protect it.

Conclusion

I will obviously abide by whatever decision comes out of this, I am just not all that supportive of re-limiting certain words when your average consumer is more than capable of coming to their own informed decision.

The history of food is vast, complex, and as essential to culture as language itself. Using language to reshape that in a prescriptivist manner actually interferes with one of the great joys of human expression: enjoying food, updating old recipes into new delights, responding to cultural change, and sharing all this with others.

All that being said, I will reiterate that I do very much support farmers and their sacrifice. I just also support consumers and their sacrifice.

PS: Shout Out to Dan

My roommate in 2002, Dan, complained about some world-building I was doing in a roleplaying game I was writing where I said that by the late 2010s and early 2020s, a “war of words and their meaning” would be the frontline of the reality wars: where different people fractured into world views framed by their languages. He said such terms as I was using was overblown and never going to happen.

To Dan, I say: neener neener. I win.

Credits

The photo of soybeans: Photo by Daniela Paola Alchapar on Unsplash.

Other photos/videos/etc are generally linked or include their own attribution.

A Day in the Life: #17665

While I would call the current sky approaching noon as “Mostly Just Gray,” there have been a few moments where a color apparently called “blue” and an object that Wikipedia tells me is “the sun” have been visible. Such wonders!

It is actually supposed to be sunny and clear in Grimbergen this weekend, but also the temperature is going to drop again. Win some. Lose some.

One Hour Workout Results

See what it looks like when I use a flash to illuminate the darkness? At least it doesn’t look like I’m working out in the unlit part of the backrooms this time.

Went ahead after yesterday’s post and decided to push it up to a full hour and a bit more speed while retaining the resistance. Final result was around 28km. At an average of speed of…well, I’ll let you math nerds solve that.

I’m not 100% I can keep it up on a daily basis because it definitely flexes the leg a lot but it is also not that difficult. I was more concerned about having to pee starting around the 40 minute mark and just how numb my ass got sitting on the metal seat that long. Tomorrow’s a different day but if I am not overly sore or having trouble with mobility after today I might give it a try.

Dickens of a Blog Reclamation Continues Apace

I have been working on the tech behind fixing up as much of the older Dickens of a Blog as best as I can. The Poetry section is “working complete” which is to say that I have cleared out around half the poems and focused on highlighting the ones I really like, and gotten all of those updated, but there are no doubt others that can be linked.

I’ve been using a mix of WinSCP and Notepad++ to do a lot of heavy lifting. I can copy and paste chunks of HTML and CSS into the backend and then do some document wide find+replace actions to reaching a decently stable point.

I finished up a rewrite of “8 Space” this morning and for now I think I’ll take mostly a break for the day. Give myself something to look at that isn’t just more HTML and terminals.

Having that focus on a single aspect for a couple of days has helped me to figure out the mechanics a lot and I hope I can do a lot more in a shorter time in the future. And if I have to go and do more fixes in the future, the layout should be stabilized enough that I have a better chance of just automating it.

“Mail Bag” Maybe Incoming

I have a small stack of deliveries I’ve gotten recently and wanted to give a shout out to some of them but I need to figure out exactly how I want to do that. I think I’ll divide them up and give myself space to go through more of them one at a time. Or just skip it. I don’t know.

I really need to shower. I still am covered in an hour’s worth of sweat.

Also, look at my hair just give up on me. That’s one way to get out of having curly hair.

Finally Working in a Third Workout Loop: Distance

Ever since my accident, my primary source of aerobic exercise has been a recumbent stationary bike. In terms of my lower body, and especially my left leg, the ability to sustain an increased heart rate in any other way is pretty slim. I can lift weights and such, especially those using just the abs and arms, but good cardio is a trick.

Working Out Just to Stay Alive

I fell in May 2022. Through the rest of the summer, I was mostly on bed rest with only short excursions. By September, I was able to be more active and was returning to work several days a week. I was starting to figure out stairs. Through October and November 2022, I was getting better at navigating slopes and ramps as long as I had assistance (be it mobility aids or someone assisting me).

As we got into 2023, there became an increased need for me to get more mobile in general. In January of that year, Kaz and I ordered a recumbent bike. It took a moment to get it and get it set-up but early on the idea was just to get on it and move. At this point, I could move using just a cane, later using a pair of Nordic walking sticks, though had to be very careful with any kind of obstacles or changes in height.

Early workouts on the bike were usually just me getting to something like 10-11ish mph (16-18km/h) and keeping that going for 10-15 minutes with nearly no resistance. Even that was wiping me out.

Getting into Trackable Patterns

I have been steadily improving while trying to not stress my legs so much that it leaves me too tired to move. In the last couple of years I have worked out two general loops: sprints and uphill jogs.

Sprints will be roughly 20 minutes, give or take, and will be pushing for speed with lower degrees of resistance. 20-22mph (32-40 km/h). Hitting somewhere around the 100w and up (I’ve seen 180w). The idea is to hit the 10km mark as soon as possible and then go past it.

This involves a lot of sweating. A lot of sweating.

I probably look like I have been crying in the rain after I get done.

The “uphill jog” will have moderate to high resistance but a slower overall speed, centered around the 16-17mph (25ish km/h) for half an hour with the focus on strength building.

Trying to Up Endurance

Today I worked in the first cycle of a distance-as-in-time. Pedal as fast as I want, or as slow as I want. Just keep going for the whole time. Keeping the resistance in the upper-low-to-lower-moderate range (for now). Began with just 40 minutes, but it went well enough that I’ll up the time to an hour next time.

Not too bad. Not great. Somewhere in between.

Ends up being an average of ~26km/h over ~17km. It’ll be interesting to see how it goes as I increase it to a full hour.

By the way, yes that image of my final results (and the image I took for the header) are a bit dark. Keep in mind that this is roughly what it looks like outside as I start my workout:

dramatic re-enactment

It’s dark. I could turn on a light but there’s something about being out of breath and sweating bullets in the pre-dawn light that is kind of meditative.

The Reclamation of Dickens of a Blog

In the first post on this blog, I talked about the updates to the “old” wyrmis.com and how I consider this to be a continuation — eight-years later — of the initial project which that blog & website represented. Which was in, in principle, a continuation of various blogs and websites that I had been working on for years.

BY THE WAY: I plan on having a part two to this post, more or less, more of a trip down memory lane type thing. I have screenshots and everything. I’ll come back and link it when I post it. If I post it, I suppose, but I think I will. I’m old enough now that reminiscing is nice.

Here is what the old site looked like around the time it was first launched (I think this screenshot would be more in the 2007-era after it had already gone through some evolution):

Then, around the time it was abandoned (2016), it looked more like:

In that decade in between, while the general color schemes and rough layout had remained the same, the back-end had grown a lot more complicated — involving multiple custom scripts in Python and PHP and a more complicated file structure — while also growing more out of date with modern web practises.

To put it in perspective, while that version was well after the general “Blogging” trend had started, it was an outgrowth of a website that had actually started back in 1997. One of its core issues was that it was dragging along a lot of content and structure as it became less and less a 90’s style website and more a 2000’s era blog.

If you note, the first image shows the “journal” section was off-site — first on Livejournal and latter on Blogger — because it wasn’t until later an adequate but generally poor blogging “software” was integrated by myself into the existing page. By “integrated,” I mean that I coded it and then spent entirely too long making it act like the rest of the website.

If there is one lesson you take from this: Make your tools work for you, do not work for your tools. I violated that principle. It shows.

The Problem(s) As It Stands

There are a few problems with what to do with the old site. The main ones to be:

  • The HTML, CSS, PHP, Python, Images and essentially all the rest are a hodge-podge of 1997-2017. Twenty years of various web eras.
    • Even though the bulk of the site was at least partially updated and badly polished throughout the 2010s, enough issues remain that made it nearly impossible to edit as-is into anything truly fitting a post-2010 website.
    • In fact, some of the multitudinous layers of bandages actually hurt the repair because different eras of pages have different enough code that anything but a hand-coded fix is likely to break other portions.
  • A lot of the content would only be saved for purely archival purposes (we’ll dub this The Librarian Principle). Links are likely broken and fixing them would potentially require longer than any value would be added for anyone. Timely content is no longer near timely. Trends and discussions are based on their era which is not that far ago but over a decade.
  • The contrast of The Librarian Principle is The Embarrassment Principle. Past-Doug was a weird boy. Some of the things typed up because I thought it was funny at the time are decidedly not. A few of the points for which I argue vehemently are no longer anything like a stance I would take. By the time we get to the wyrmis.com-era, that is less true, but…man. I think I might make a third part for this. One where I lecture myself. It’s not quite suited to going into any more for this post.

Is It Worth Solving?

In a word…

I don’t really know. Like I said, I just volunteer here. At least some of it seems worthy. A few bits. Possibly even the majority, really.

I need to write a script that takes all the pages on the site and then just randomly picks five of them to read. See if the Librarian beats out the Embarrassed via dice roll.

The truest answer I can make at this time is that the best solution forward is to “fix” the big pieces and then figure out which of the smaller individual pieces to retain.

It feels dishonest to delete all the portions with which I now disagree or dislike, so I’ll work on something like a balance. A triage. Some will get instantly deleted if they simply do not fit (“fit” is doing some heavy lifting, take it as you will), are too time-locked to be worth saving, or any other heavy complaint I might have. Some will get instantly saved and enshrined into place as a part of my decades online. Some will get updated and possibly ported over here.

I think the lines I’ll draw in the sand is that stuff that is good enough to stay as is will stay where it is (Type A), stuff that could be better might get brought over to this blog and updated (Type B), and stuff that I don’t feel like saving will either join with Type A with minimal fixing or simply disappear. This means the old site/blog will have a mix of highs and lows with the middle joining my new writings.

A hint towards verisimilitude actually masking a large scale “reclamation” project.

The Mechanics of It All

Going back up The Problem(s) As It Stands, the first bullet point and the sub-bullets are the meat of the mechanical issues. There are two variations of solution:

  1. Develop a new schema and then port the old bits into the new bits.
  2. Strip the old schema off and just retain the core bits.

I am currently opting for #3: a bit of both. The new schema is largely just a minimal CSS and jQuery working frame that delivers the text in a readable — both human-readable and machine-readable — manner (albeit fairly bland) but otherwise ignores much of the intricacies of what came before. Headers {e.g., H1, H2} and body content {e.g., P, LI} items will be mostly HTML-standard with a few variations.

In practical terms, this means I am:

  1. Taking the old page (currently one at a time)
  2. Replacing the HEAD content with a newer, improved version.
  3. Deleting all the old menu, footer, counter, and similar code not in the main body.
  4. Replacing the title/banner portion with a simplified version.
  5. Adding in new DIVs that act as placeholder for repeating content {e.g., menus, site-wide idents} and then using jQuery to handle that.
  6. Generally going through the body and making sure things mostly work. Deleting a few portions that no longer fit the criteria above.
  7. Uploading that to the site.
  8. In some cases, adding redirects to “close” a portion of the site or to make up for things that will now be missing.
  9. Eventually, going through and deleting the pages that neither fit into Types A or Type B.

I have worked out the stuff to get the new-schema pages and the site as a whole into HTTPs. And to be more responsive. In theory, I can work on a script that will do #2, #3, and #5 for me though I’ll likely have to do the rest by hand.

I also will be adding this post as at least a temporary link to show up near the bottom to explain to folks why things are happening. Ironically, this will only show up on pages I have partially fixed but so it goes.

Why “Reclamation”?

Just to wrap this up: why am I calling it a reclamation?

It just feels right as a term. There were years of myself in that website and blog. Lots of memories. Lots of creative output. In theory it could stay as is — online or just on my personal storage devices — but I like the idea of retaining some of it. More than that. Making it usable, again. Giving credit to past-Doug where credit is due. Also holding my past-self to a higher standard.

I am me because of his idiocy. I just wish someone had fussed at him like I am about to fuss at myself.

There is also a complicated side-aspect that some of those posts have been taken a bit out of context or been copied over and all sorts of stuff that can happen to websites across decades. By cleaning it up and improving its general SEO-ness, it helps to establish it more as a part of its own record.

What Kind of Time-line Are We Looking At?

As for the question of how long will this take? I have only one answer…

Storm Amy and a Photo: Headless Granny

Turns out that all that “bluster” I was talking about yesterday was Storm Amy. Which tracks in retrospect. We were mostly lucky. It hit some areas a lot harder than it hit us.

I feel like I should have been aware of that but I have not yet trained The Algorithm™ to actually tell me important news for the area. Instead, I get opinion pieces about rowdy youth on e-scooters. I’m going to go and find some actual local news sources and stop trusting the modern equivalent of drunken oracles.

Shortly after I took the photos of the leaves, another round of wind and rain hit — including some sleet — and this time the wind was strong enough that it knocked over our ceramic statue of “Granny.”

A neighbor back in Huntsville had gifted it to us because we have a statue of a creepy doll and I think she thought we liked such front garden kitsch. Which, in her defense, we kind of do.

Alas, Grandpa [not pictured] is a widower now.

Photo(s): Leaves after the Storm

A bit of an addendum to the last post, after several rainy and very windy hours we now get mostly sunny day which is still quite windy. Doing a quick run around the house to check for damage, caught a fun effect where leaves blown about by the morning bluster had caught up on the cement and caused a kind of “attractor” force to protect the water from the sun and the wind and evaporation so there are these little micro-puddles around them.

Just wanted to share.

And yes, we need to cut our grass. It’s just, you know, damp.

A Day in the Life: #17659

Woke up at 6am to get ready for my morning workout and spent a few minutes, as I do every morning, resting in bed to give my joints time to “calm down.” The arthritis/inflammation-meets-disability tends to be worse after prolonged activity and when I first wake up. I’m sure there’s math to explain the latter. Just know that most of my mornings start with a “Daddy, Chill!” moment between me and my aches.

While resting up for that ten- to twenty-minutes that it takes for my body to realize it is indeed ok to get out of bed, I heard a noise that sounded like someone showering which caught me off guard because I was pretty sure I was the only one awake. Then a few seconds later the wind hit and it turned out that Grimbergen was getting a LOT of wind and rain. It was kind of fun getting up in the pre-sunrise darkness and just watching the rain slam into the side of the house.

Pictured above is my cat, Turkey, pondering why the outside was so blustery. Taken in the moments right before sunrise [the light outside is mostly the streetlights but you can see the sky starting to lighten]. It’s a bit blurry because it was taken in fair darkness and it’s hard to get a photo of a cat while your phone is doing night-photo mode.

At some point I need to find my Nikon and try taking some more proper photos. Not just of weather but also like, you know, heavily macroed shots of rusty nails and stuff.

A Return to “A Day in the Life”

Holy crap, it has been a while since I have used that post title template. In fact, I had to dig through the back-end a bit to find out the previous “Day in the Life” was #14194. That’s over 3000 days ago. Also finding it made me a bit sad. It dealt with a fair amount of negativity. 2016 was a hell of a year. Blogs are truly a double-headed beast.

Just to clarify, in case you are wondering, the Day in the Life posts show the number of days I have been alive, not the number of posts I have made. I used Google to calculate it this time but somewhere in my stacks of files is a Python script I made when I would post these “just stuff I did today” type posts on the old Dickens of a Blog. I should find that. Marvel at how my code used to look. Good marvel? Bad marvel? I don’t know.

#!/usr/bin/python
import datetime
YEAR = 1977
MONTH = 05
DAY = 30

d = "%Y/%m/&d"
today = datetime.date.today()
birth = datetime.date(YEAR, MONTH, DAY)
daysinlife = today - birth
print daysinlife.days

You know, frankly, that’s not too bad. It is clearly Python 2 era. And from the time period where I tended to purposefully over-write code so it was easier for me to chunk and fix later. I’m not even sure what one of those lines is doing in this context. It’s like I copy and pasted it from some other function and just changed the bits I need to change. Let’s show some confidence and fix that up, slightly:

import datetime
print((datetime.date.today() - datetime.date(1977, 5, 30)).days+1)

Voila.

Despite being a person who has been sharing stuff online since the late 90s, and having multiple blogs of which only three have been named “Dickens of a Blog,” it is still a bit odd for me to just share my personal stuff without some major context to sort it through. And possibly that’s because when I get personal I tend to get a bit self-incriminating and self-deprecating. I become that stranger on the bus that starts complaining about his ex-wife and his brother’s dog and stuff his boss said. I mean, maybe not that bad but you get the idea.

At any rate, the “Day in the Life” series was a way for me to have a few dips into those waters on the occasional basis without dealing solely with myself as the main topic. It’s nice to have them back in principle whether or not I use “the brand” all that often. Like most Days in the Life, it is less about a day and more about a bunch of random stuff that has accumulated.

EDIT: Shortly after posting this I realized that my code was still wrong. The way I am wording it would need to include a zero-day. As in, on the date of my birth I would be considering that “Day 1”. I could either set the day to the day before my birth or add 1. I added in a cheeky “+”. That means the title of this is off by a day, but eh. So it goes…

Warning: this one might get a bit over-long as I get back into the balance.

Pommelien Thijs’s Gedoe

Pommelien Thijs’s Gedoe — note, link is in Dutch/Nederlands — came out yesterday so I got to listen to that for a bit. Then more this morning while doing my workout. I really enjoy it.

When we first moved to the Flemish-Brabant/Brussels region, I was trying to absorb some language by listening to local news and such. Thijs kept coming up right as I was breaking into the point of following the slightest bit along. Looking up her music videos, I came across “Ongewoon” [in the context of the song, the line is “Alles voelt zo ongewoon” which is “Everything feels so unusual” but possibly “peculiar” or “strange” or “unfamiliar”…the feeling you get when some preconceived emotions are actually out of whack with expectations] and “Het Midden” [“the middle”] (below):

I enjoyed both of those and other stuff I could find. I’m not a pop-head but still, it was an album I wanted to pick up as I return to getting more physical media, again. I pre-ordered it and ordered her first and got them both in the mail.

The issue at first was how to listen to them. Neither my desktop or laptop have optical disk drives. This means I had to a) get out my external drive that was a still in its box from the move, b) get a voltage converter that we bought early on but have not used yet, c) hook a into b and then plug that into a computer. Then tweak/fix the files I ripped. Being me, I then zipped and cataloged the files and moved them into two different backups.

It’s been a long time since I’ve done a proper review of an album so I am thinking about using that as a guinea pig of such. Maybe. Maybe not.

Barbara’s Assembly

Barbara’s P3 class had their first assembly at her school, yesterday. She spent a fair amount of her own time building up wings using old construction paper and Amazon boxes:

This was all for about half a minute when she was on a stage pretending to be a bird of the Amazon while her class talked about education around the world and how environment impacts education opportunities.

NOTE: I have a photo B wearing her wings but I asked her if she was ok with me sharing and she said no. Since one of the reasons I pulled out of social media because of a personal disagreement with parents oversharing elements of their children’s lives to the wide public, I respect her decision. She was ok with me sharing the wings, though.

Between her planning and construction of a costume largely on her own; her sense of stage direction; and her (at one point) helping another student to remember his lines during the show: she’s a natural stage manager. At eight, she better at handling the chaos of stagecraft than I ever was.

Finally, an American-Style Peanut Butter!

There is actually very little American food that I miss over here with the slight exceptions of Back Home™ has a better selection of types of beans and, via mail order, an overall better selection of TVP (textured vegetable proteins) shapes/sizes. There are plenty of beans here and some variations of soy product [and cheaper soya drink/milk and tofu], but it required some adjustment.

Still, I’ve had a few sad moments where I miss American style peanut butter (or pindakaas [peanut cheese] in Nederlands). Yesterday, swinging by the Carrefour in Vilvoorde, I found this beauty:

I have not been this excited about 2g of added sugars per serving for a minute. I mean, compared to some American foods, this peanut butter is still relatively a healthy food. And, most importantly, it tastes amazing.

I’m not throwing any shade at the availability of plant-based Nutella or the decent selection of other nut butters including some quite decent Belgische pindakaas. It just, good salty-sweet peanut butter hits different.

“Breaking” and Fixing a Garage Door

One aspect of the move that cannot be overstated is how much the large beats are sometimes easy to adapt towards since a lot of support tends to exist to learning the language, replacing electronics, etc but the small beats can practically haunt you as you learn what some minor device or some local custom means. Learning how to say, “Pardon, waar is het toilet?,” can take less time than figuring out how to ask what a small symbol might mean on food packaging when everyone around you thinks of such things as derived from universal common sense. Even somewhat universal symbols can shift slightly enough to imply different things. This is well, good, and expected. Language is a product of the people using it. It just sometimes catches you out.

One way you adjust, which is to say one way that I adjust, is just occasionally pushing a button or pulling a string to see what happens. Buy the product. Tap the card.

This morning, post-workout, I realized our garage had a pull cord and so I went, “Hmm, ik kan aan dit koord trekken.” And then a loud pop answered my call as the cord turned out to be a release to detach the door from the mechanism.

Kaz and I fixed it shortly after but it was a good life lesson. Push the buttons, pull the cords, and bring a toolbox to fix the fallout when you do.

With the above photo, don’t sweat about the power cord with duct tape. It’s not actually plugged in. We’ll replace it if we ever need to use it.

Social Anxiety Haunted House Ideas: My Contribution

Jason K. Pargin — the author behind such Doug-favorite novels as John Dies at the End and, more recently, I’m Starting to Worry About This Black Box of Doomposted a Youtube Short yesterday about social-awkwardness-slash-anxiety in the context of haunted houses. He references a post on X [a…tweet? xeet? I should look up the hip new nomenclature] about setting up a room which looks like a break room and someone half out of costume says, “You can’t be back here!” Then he comes up with his own. People in the comments are adding their own.

https://youtube.com/shorts/lxeWmY3tk3k

And, of course, being a person interested in horror and all its related vibes, I thought about my own take. The one that came to mind is maybe a little bit less “social anxiety” and a little more “existential confusion brought about by liminal space” but still.

Doug’s Idea: Trapped in a Loop (Thought Experiment)

This will require either twins or at least two people who look enough alike [possibly by use of costume] to work. In fact, more than one set of doppelgangers would only enhance. It also require people going through roughly one (or one-group) at a time. And a LOT of space and effort. It’s more a thought experiment than something I would personally want to build.

The Rough Steps to the Haunted Loop

Step One: The victim enters into a lobby to start the experience. Someone [Twin A] is in a defined space that matches general expectations for a lobby. There are distinct elements in place, possibly including other people who are “enjoying the experience.” This space should only be entered through an outside or otherwise disassociated region.

Step Two: The victim goes through the exhibit [Path A]. While mostly a normal haunted house, certain elements should be emphasized to trigger a sense of disorientation. More empty space than expected. Points of quiet. Hallways that tilt slightly so it is hard to track exactly where you are in the total experience. Nothing so obvious as to spoil “the joke”. They can hear other people in the distance, but if some of the screams seem a bit distorted or anxious, it is a haunted house after all.

Step Three (optional): At some point the victim comes across a person who seems to be another person just “enjoying” the experience. There clothes are torn a bit. Their face a bit scruffed. Maybe they are a prop. Maybe not. Hard to tell in the light. The person is saying something about being here for hours, there’s no way out, where’s the exit? People dressed as workers approach and very nicely and kindly come up to help the person and then knock on a section on the wall which turns out to be hidden door. They go through it and the door closes, fading back into the background.

Step Four: A few rooms later, maybe the next room, a clear “EXIT” sign is seen. Behind, laughter and playful screams from other guests who are never spotted, no matter how long the victim waits. Finally, the victim goes through the EXIT. If they choose to not go through the exit and backtrack, the voices in front of them fade out and are again behind them.

Step Five: To find the first room’s perfect duplicate down to TWIN B. Every detail should be the same, including other people who were waiting. The second TWIN is directing them towards the door to go on through. “Hurry up!”

Step Six: The entire experience plays out in the exact same way. There is only one difference. The stressed person will be met again only this time their clothing is less torn and while they are clearly a bit confused about where they are, this seems to be them from an hour or two ago.

Step Seven: If you have a really big space and triplets, have another round.

Post Credits

Featured art is modified from: Photo by Nathan Wright on Unsplash.

Liminal subway station art: Photo by Markus Spiske on Unsplash.

Page 1 of 2

Powered by WordPress & Theme by Anders Norén