š¾ Archived View for gemini.circumlunar.space āŗ users āŗ adiabatic āŗ scrawlspace captured on 2022-06-03 at 22:52:33. Gemini links have been rewritten to link to archived content
ā¬ ļø Previous capture (2022-04-28)
ā”ļø Next capture (2022-06-11)
-=-=-=-=-=-=-
This is scrawlspace. I scrawl in this space. Do not expect coherence or permanence here.
Thereās been some chatter in Geminispace on the lack of deep, meaningful conversations. Oddly enough, the first-person plural pronoun is used a lot. Iām not sure if this is supposed to be a substitution of the first-person singular to make the sentiment more socially acceptable, or if itās supposed to be a substitution of the second-person plural, or maybe the third-person plural.
Iām in favor of having deep, meaningful conversations, if you can get them.
In general, if you want people to have more of a thing, you should get more of that thing and tell other people how great it is to have more of that thing and the things you did to get more of that thing. Iād be quite happy if, in a month or two, some of the lamenters reported back to mention what changes they made to their lives to get better conversations and what worked and what didnāt.
Some scattered relevant thoughts. But first, a disclaimer:
ā You should not assume that any of this is actually good advice. In fact, you should assume that this is actually worse advice than advice specifically crafted to sound like a good idea but is actually, on net, a bad idea for you. ā
Background reading:
Release notes for Visual Studio Code 1.67.0 (April 2022) (actually released in early May)
Visual Studio Code just released a feature for collapsing files under other files.
However, it doesnāt seem to be able to collapse, say, files named index.gmi under their parent directory. At least, when I tried to have a parent of ā*ā and a child of āindex.gmiā, every file in my capsuleās root, like, feed.yaml, got index.gmi nested underneath it.
Also, when I tried a parent of āfeed.yamlā with children of āfeed.jsonā and āatom.xmlā, all three files were declared children of some other unpublished file.
Pity.
With great brevity comes great responsibility.
I wanted to do only a little bit of thinking, so I started redesigning the guts of a game again.
Iāve been meaning to make a loving homage to Kingdom of Loathing for quite a while. Life always gets in the way before I actually ship something, and by the time Iām ready to come back to it, the best-available software stack that Iād use to make it in is obsolete.
Iām surprisingly OK with this. Maybe itās because I never get very far and Iām not faced with the prospect of writing user-authentication code for the umpteenth time.
Also, the last time I tried this, I tried to make it RESTful initially, but eventually came to the conclusion that the best way to do a lot of things, especially combat actions, was to basically have RPC with nice-looking URLs (often claimed to be RESTful, but isnāt at all).
As I write this, the new hotnesses are GraphQL and TypeScript (currently 4.6). Ideally, Iāll be able to model game stuff well as TypeScript types and GraphQL types.
Anyhow. Let me spec out the lay of the land, so to speak.
There are players in this game. Players do things by expending turns. Most actions cost 1 turn. Fights may cost 1 turn, but are further subdivided into (combat) rounds.
Players have all sorts of properties like hit points, experience points, the number of turns they have remaining, how muscular they are, whether theyāre poisoned, how long the poison will last (in combat rounds or even turns, or maybe forever), and whether theyāve got stuff equipped that will let them regain, say, 3ā5 HP per turn (or even round!).
After quite a bit of thinking, I eventually figured out that I probably needed three different types, probably with better names:
The first type I thought up was StatusEffect. After a little bit, I realized that the additive HP modifier (as opposed to the additive maximum-HP modifier) didnāt make sense as a status effect, so I spun that out into its own type.
Then I realized that an actual status effect can be generated from something that has a range to it, so I split off parts of StatusEffect into the very poorly named StatusWhatCouldHappen. Another candidate name for this was āStatusWhatItSaysOnTheTinā, or something like that. However, this would be a bad name if I ever wanted to be less than 100% forthcoming with my itemsā statuses.
(Everyone laughs at the third item in āthe three hardest problems in computer science are naming things, cache invalidation, and off-by-one errorsā, and the second item is obviously hard, but the first item deserves it place in the list even though itās, by far, the most unassuming problem of the three. Iām convinced one of the reasons why Bootstrap is way more popular than BEM-based solutions is because developers donāt need to think of reasonable, unique names for things all the darn time.)
Also on my mind: how do I handle poison? Iām thinking of poison as a status effect that
Letās say I have a status effect called āA Teeny Bit Poisonedā. It subtracts 1ā5 HP per turn. You might get bitten by a weak asp and have this last for 3ā5 turns, or you might get bitten by a long asp and have this last for ā turns. How do you model all this? ā1 is a bad sentinel value because one might have some kind of poison-duration reduction buff. INT32_MAX isnāt a good option because a lot of this will be in JavaScript, and its maximum non-big integer is Number.MAX_SAFE_INTEGER, or 2āµĀ³ā1.
Then again, treating all numbers equal to or greater than 2āµĀ³ā1 as +ā isnāt the stupidest option. However, the Int type for GraphQL only handles up to 2Ā³Ā²ā1 for obvious reasons, and I like the type safety of not supporting nonintegral values. On the other other hand, 4.3 billion Meat seems utterly attainable, so sticking to double-precision floats everywhere might be the winning play if BigInts arenāt available.
Cream is useful. Trouble is, I seem to have some difficulty finishing it off.
Here, heavy whipping cream:
However, there are 1,550 calories in the entire pint. If I were to finish it all off in a week, Iād be eating 221 calories/day of cream.
Luckily, the cream I have seems to be OK after a week and a half. Iām not quite sure how Iāll polish it off before weekās end, though.
Fiction became slightly more interesting once I internalized that the paleolithic-to-neolithic transition happened 10,000 years ago.
A while back, I heard of Cochran and Harpendingās _The 10,000 Year Explosion_ and, while I never got around to reading it myself, the big round number stuck in my head as the end of the paleolithic.
Of course, 10,000 years can pass in fiction, too.
ā
During the opening sequence of Mighty Morphinā Power Rangers, the main antagonist, Rita Repulsa, declares āafter 10,000 years, Iām free!ā.
Humanity, however, most emphatically did not have giant robots back then; how did she get locked in back then?
ā
In The Legend of Zelda: Breath of the Wild, all the Guardians and similar capital-A Ancient tech is from 10,000 years ago. Granted, Hyrule has a nasty tendency to get squished flat every so many generations, but I canāt help but wonder if ancient Hylians had lactase persistence 10,000 years ago. Maybe one day Nintendo will release a Zelda game set during that time and weāll find out if milk is an option.
Then again, supposedly Skyward Sword is the first (released so far) iteration of the Link-kills-Ganon-or-similar saga, and there doesnāt seem to be any adults consuming milk in it.
ā
Genie, in Disneyās Aladdin, famously declares that 10,000 years will give you _such_ a crick in the _neck_, but I donāt think they had much metallurgy back then, so itās not obvious where his containing lamp came from if heās not messing up the time and this is a consistent universe.
On the other hand, cāmon, this is Disney flick weāre talking about.
ā
Thereās also the Avatar: The Last Airbender universe, where stuff happened 10,000 years ago. On the other hand, they kind of lean into the Chinese meme of using ā10,000ā where we use āgazillionā, with similar levels of non-specificity. So we canāt really set our calendars to it like we can with Hylian archaeologists.
If a stopped clock gives the right time twice a day, then it stands to reason that a clock that goes in reverse gives the right time even more times a day.
My watch pesters me to stand at the 50-minute mark every hour if I hadnāt stood up during that hour. This means I need to plan ahead if I want to sleep in extra on the weekends, but thatās a story for another day.
Usually, when it says āhey, you should stand up for a minuteā all I need to do is go to the bathroom, and I get a second notification about halfway through congratulating me. I wouldāve figured that getting praise for going tinkle in the potty was long behind me, but here we are.
Today, I got the usual notification while I was already seated in the bathroom. I wasnāt too surprised I got this, since it doesnāt take me a whole minute to walk there.
I was surprised, however, when the you-stood-for-a-minute notification came through and I hadnāt finished my afternoon constitutional yet. I had no idea bidet use, to a watch, feels more like standing than sitting.
Palladium Magazine says nice things about Gemini
(Note the publication date.)
Today, I cooked three pounds of tandoori chicken thighs in a Dutch oven, in batches.
Two thoughts:
Well, _that_ was certainly unexpected.
Background:
āModularā, in Apple parlance, means āthe monitor is separate from the computerā.
They announced:
Nothing I need now. I briefly considered getting a new iPad, but the one I have is still OK, has four speakers (not two), a proper home button (instead of a horizontal bar at the bottom taking up some of the real estate), has a Smart Cover instead of a Smart Folio, and wonāt cost me $800 or so after Iāve added on the things I want to the base model.
Theoretically I could buy a 5K display and add it to my current setup, but I donāt need the real estate that badly. I like having a 27ā³ 4K monitor as my side monitor because the extra-big pixels are what I need for something that far away, even if 1080 points is not very wide at all. I mean, itās only a bit bigger than 1024 (of 1024Ć768 fame) and smaller than 1280 (of 1280Ć1024 fame).
I figure my next Mac will be a Mac Studio of some kind. One thing that worries me is how dusty my desktop gets, given that its intake holes are on its bottom. Almost makes me want to buy a banana hammock or something when the time comes so I can suspend it 4ā³ above my desk to keep the dust from coming in at rates faster than my current iMac gets.
As for yesterdayās predictions:
ā¦although what they did announce were near-equivalents of both.
Appleās got an event tomorrow. Theyāre calling it āPeek performanceā.
Predictions:
Probably nothing thatāll make me say āshut up and take my moneyā. My Intel stuff is still fast enough, and not having to think about juggling multiple architectures for work projects is still very nice.
Background:
The relevant (to me) bit. Linebreaks added:
The Gemini community is globally very nice and I've really been enjoying the different interaction I had with fellow geminauts over station, tinylogs, gemlog entries or via email (keep emails coming!).
I really like those interactions, but I feel like interacting with each other over gemlog entries remains difficult. At least to ensure the author see all the responses to their posts.
It's very common to see a gemlog entry being a response to another author entry, but we don't have yet a simple way to notify each other.
The problem is, of course, how to contact the author of a given post to tell them we wrote a response? A "simple" solution would be going to the capsule, find the contact of the author and send an emailā¦ But not every capsule has a contact page and the process is very manual, requiring to use another tool and protocol to communicate.
One of the tradeoffs of a system where youāre going to see all replies to your posts isā¦you see all replies to your posts. Even replies you might not want to have seen.
Of course, people can and do put e-mail addresses or other contact information on their capsules. This is a good idea. I donāt, mainly because I weighed the pros and cons and figured that Iād rather not get a response to something Iāve written than risk the small chance of getting mail in my inbox that Iād rather not have gotten. Sure, Geminispace is mostly Calmā¢ now, but I like keeping my mellow un-harshed and Iām not much of a gambling man.
Of course, this dampens the likelihood of someone else writing a response to what Iāve written here. Without any surefire way to contact me, a potential respondent might wonder āsure, I could write something, but what if heās not checking Antenna that week? He might miss my superlatively enlightening reply! It might be entire months before he checks the relevant backlinks page on geminispace.info!ā and decide to not bother after all.
I take that sort of risk of failure-to-connect as part of communicating on the Internet itself, as opposed to a communication service hosted on top of the Internet, like Twitter or Tumblr.
And, of course, if I want either Twitter or Tumblrā¦I know where to find them.
Normal HTML pages have lots of branding and stuff on them, so if someone decides to download an HTML page from your site and save it on a hard drive somewhere, anyone who views that page will be able to figure out where on the Web it came from.
Ditto printed-out Web pages; they usually have some kind of URL of the page theyāre of printed in the margins somewhere.
One of the nice things about gemtext is that you probably donāt need to brand every single page on your capsule. Any decent client will have Up functionality itself, leaving you to have a first-level heading thatās just the page title, without a sitewide header on every single page.
However, if you donāt, people might download one of your super-cool pages, and, three years later, have no idea where your capsule is, or at least was.
Hereās an example of a superlatively well-branded page:
āWhatās the Deal with Leap Seconds? A Brief Overview of Timescalesā by Solderpunk
It has a preformatted-text pseudo-header, plus a real header for the actual document. The preformatted-text header will help anybody who sees the document figure out āoh, this is from Circumlunar Transmissions, whatever that isā and the āCircumlunar Transmissions - Issue 1ā link down at the bottom will give a further clue as to what the page is from.
But other capsule pages donāt. Most of my own capsuleās pages donāt really say where theyāre from. This saved me quite a bit of work for the Halfway to Mars rebranding, but if, for some reason, someone hits Ctrl-S and saves a page of mine, well, then, good luck figuring out where it came from 18 months later.
At any rate, do you think this is a problem for your capsule? Or, like me, do you not really care?
As mentioned previously, I am the owner of an Apple Watch.
There are three rings:
Given the initial movement target for the red Move ring, there are only a few ways I could fail to close it:
āclose your Move ringā seems like a subtle way to merely get people to wear the watch all day instead of leaving it off. Sure, I could crank it up materially, but Iām not convinced thatās a better idea than making sure I get decent levels of proper exercise per day.
The middle green Exercise ring closes automatically when you get your activity level āabove a brisk walkā, or if you manually start a logged exercise from the watch.
This is the interesting ring to close. Cutoff times are right at midnight, so thereās no fancy logic for people who have a nonstandard sleep cycle. One evening, I started a 45-minute yoga session (with the three-months-free Apple Fitness+) at 11 PM. Still made the midnight cutoff, but if Iād started 35 minutes later I wouldnāt have closed that particular ring that day.
I should probably try HIIT workouts on Fitness+ if Iām feeling too lazy to prep for a gym run or even strap on the Ring Fit Adventure Joy-Con thigh garter, but yoga seems to about as useful for calorie burning as a walk around the neighborhood.
The inner teal Stand ring closes when you stand at least once per hour for at least one minute.
I turned the initial stand count down to 10 hours, mainly because I donāt have the thing on my wrist all the time and I donāt want to get penalized for not wearing the watch. I may turn it up back to 12 or whatever, but I donāt really have a strong incentive to do so.
One of the insights that I had the other day was āif I close all my rings, I wonāt have any incentive to keep the watch on, and Iāll be able to take it off and just leave it on my desk until itās time to go to bedā. This does not sound like the start of a happy, productive relationship with an electronic gizmo.
While I could stand to lose more than a few inches (ask any but one of my pairs of pants), the oblique ākeep me on your wristā clinginess via incentive structure is vaguely unsettling, even if it is useful. The exhortations to close oneās rings at the end of yoga sessions still manage to seem vaguely creepy.
I got an Apple Watch recently. Itās utterly incapable of telling the difference between me sleeping in bed and me lying in bed awake, making it useless for the main reason I bought it, but thatās a story for another day.
One of the ways I keep from morphing into a blob of fat is by doing Ring Fit Adventure for the Nintendo Switch. As you might guess, you can tell it your height and weight and, as part of all its tracking, will tell you how many calories youāve burned during a play session.
Todayās play session lasted one hour and 40 minutes of wall-clock time. This translated into 48 minutes of exercise time (as opposed to resting-pose time, or navigating-through-menus time).
Ring Fit Adventure says that I burned 328.75 calories.
My Apple Watch, set to track calories as I perform āFitness Gamingā, says I burned 891 āactive caloriesā, and had a total calorie-burn count of 1,083 calories. This was counted during a duration of 1 hour and 37 minutes (I counted RFAās cooldown separately).
The Apple Watch says at the outset of the exercise session that anytime it canāt track your calorie expenditure, itāll fill in the estimate with however many calories are burned by a brisk walk, but I donāt have any idea how much workout time it had to use this fallback for.
For reference, 328 calories is, roughly, biking on a recumbent bicycle trainer at a leisurely pace for an hour or so, according to the bicycle trainers Iāve been on. Meanwhile, walking uphill at a 13% incline for an hour at 3 MPH (4.8 kph) burns about 800 calories, according to all the treadmills Iāve been on.
ā
Iād like to have some kind of wrap-up or broader lesson that I drew from all this, but I donāt have one. Iām still stumped. Calling Unsolved Mysteries at (800) 876-5353 wouldnāt do anything, but Iām not sure what would.
Background information:
Overcast, an iOS and iPadOS podcast client
Concourse, a font by Matthew Butterick
Overcast got an update yesterday. From its release notes:
- Now exclusively uses the system font for practicality, modern design priorities, and broader world-language support. I bid a very fond farewell to the excellent Concourse font that served us well for many years.
While I can totally understand why Arment dropped Concourse in favor of SF Pro, the visual change had two pronounced effects on what the UI looked like:
A net negative for my uses, but I really didnāt expect the weak positive on my iPad.
I told you people to not expect permanence. Hereās where I moved older scrawls to:
If you want to stay abreast of updates, have a look at this capsuleās colophon. It has JSON Feed and Atom feeds on it.
ā