It was a pretty day today - in the low eighties and high seventies by mid-afternoon, with a nice breeze, and in the sixties this morning. Tomorrow promises to be the same. Then it is going to rain and dip into the fifties and sixties again - just in time for my vacation next week. Kaloo Kalay.
But hey, clear, no clouds, and lovely today - I took a fifteen minute walk at lunch time through the bike path garden at Battery Park, and up and around the historic section to grab - you guessed it - gluten free chocolate chip cookies.
Most of the day, I worried that someone had stolen the bag that Amazon had allegedly delivered on Saturday. Mainly because I didn't see the package over the weekend. (Considering how hard it is to read the labels on these packages, and how they hide behind other packages - there was an off chance that I just overlooked it.) So when I got home - and looked and gasp, found the package - I was relieved. The bag wasn't necessarily that expensive? But I wanted it. Hippie Cross Body Bag for $16.99. It's perfect for non-work traveling about the city. Big enough to fit grocery bags, light, and easy to cart about.
I'm currently flirting with Wildgrains Gluten Free Products (it's also dairy free). But I have no real freezer space, let alone much refigerator space. I can't freeze that much - my freezer space is very limited (think small box at top of refrigerator). And they give you a ton of stuff. Also, it's high in carbs which in turn equals high blood sugar. And big family size portions. So no, probably not a good idea? But if the link helps anyone else? Go for it.
And, does anyone want to explain - when it became necessary to buy non-cotton materials for hiking? Apparently after years of wearing cotton on long hikes, I can't do it anymore. At least I remember wearing cotton in the 1970s, 1980s and 1990s. Did I? Sigh. It was too long ago - I can't remember.
At any rate - I have next week off as a staycation. I'm not going anywhere. And I don't really want to plan ahead or buy tickets ahead? I want to be spontaneous. Go shopping one day. Maybe take a train to the Bronx Zoo or Botanical Gardens? Or tour the Met? Or just check out the Highline park. Wander about the city, exploring. Check out some parks. Maybe take a ferry ride. Or just clean out my closets and switch clothes around, write, and paint.
***
The Juliet Landau podcasts that she's doing with her husband, Dev Weeks, (original titled "Slaying It" and now, "Revamped") are rather charming, comforting and reassuring. By far my favorite podcasts. I've become quite charmed and enamored of Landau. She's a hard working character actress, who has a ballet background. ( Landau's informative podcasts on the acting and entertainment profession )
I get a kind of schendfreud thrill from listening to it? Or it comforts me? Because I struggle to get my art down and out there too, but as a side hustle. And often just do it for myself. Juliette charmed me - when she states that no one should stop you from expressing yourself through art, whether it is singing, music, painting, acting, performance, what have you - you should be allowed to do it. And some will love it, and some won't. But be free to get it out there.
Also, listening to them - while working on a spreadsheet at work - helps make the time go by faster. It gives me something to look forward to.
It’s a thought I first had over on Metafilter,in a thread about Swift and The Life of a Showgirl, which came out last Friday and has already racked up 3.5+ million in sales. It will almost certainly end its first week with even more, is almost certainly debuting at #1 on the Billboard 200 chart, along with very likely clearing out most if not all of the Billboard Top Ten with the album’s tracks next week (so long, Huntr/x! Glad you got your eight weeks at #1 in!), not to mention winning the movie theater box office crown last weekend with a Showgirl listening party. Not a great week for Swift haters, not that this would stop them.
The thread about Swift and the new album goes all over the place, and I added my comment on both, and how in this moment it’s likely impossible to get a bead on the new work, and where I think Swift goes from here. I’ve reposted it all below (with very minor editing for clarity), for posterity and because I know a lot of you don’t go over to Metafilter, but still might find the comment interesting anyway.
—
The new album is fine, and basically pairs with Reputation. I suspect people who don’t like this album don’t like that one either, and that’s all right. I didn’t need to know how amazing Travis Kelce’s dick is, but I suspect he’s perfectly happy with the quality of his member being immortalized in song, even if it’s likely to get him endless shit in the locker room. The Charli XCX diss track thing is two messy humans being messy at each other, also not my favorite, but inasmuch as Charli XCX has posted an image of herself in the studio in the wake of the track, I think she’s got her own.
In a larger sense, speaking as someone with a mere fraction of Swift’s sales and even merer fraction of her social profile, who nevertheless has a unusually dogged coterie of haters (as well as a certain tranche of easily-pleased fans!): at a certain point of notability (or notoriety) it doesn’t matter what you put out, the range of opinions about it will be so wide and scattershot that anyone looking will be able to pick and choose among them to paint a picture of wild creative success or looming artistic doom. Swift’s work, love it or hate it or somewhere in-between about it, is at this point never less absolutely competent in its construction, which makes the immediate critical evaluation of it even more difficult. The inherent quality of the work will get lost in the noise of the release and it will take time (a year, possibly two, maybe more) for everything to calm down enough to get a more dispassionate bead on the work as a coherent piece of art. By which time it will have sold eight million copies, or whatever, and she’ll have moved on to whatever else she’s doing.
As an aside to the quality of the work, I do think we are at a point where Swift will be moving out of her “imperial” phase as a pop music entity, if only because time comes for every cultural phenomenon; the cultural eye is a gimlet one. The pop stars who most closely align with Swift’s cultural ubiquity – Michael Jackson, Madonna and Prince (and to a lesser extent U2) – all experienced a (relative) decline as a mover of the zeitgeist. This cultural decline doesn’t mean a decline in financial success; look at U2/Rolling Stones/Journey/etc being bigger concert draws today than when their music had immediate musical relevance. But at a certain point you stop picking up fans from the younger end of the age curve, because a fifteen-year-old doesn’t vibe with a 35-year-old. Swift is already shading into mom pop (a complementary genre to dad rock), and that’s going to become more pronounced as time goes on.
I suspect that Swift already knows this – she is extremely smart with her business and her career – and I will be interested in seeing how she will position herself moving forward. I don’t know if she’s going to slow down or “disappear,” since, based only on what I know of her from her public image, she doesn’t strike me as a person interested in slowing down for anything. But it’s possible we might be at the end of Swift’s pop star era and at the beginning of her multi-hyphenate era. All those Swifties are grown up (or are about to be) and have or will soon have a bunch of disposable income. We might be about to see Taylor Swift become whatever the white millennial version of Oprah or Martha Stewart would be. And I think that would be hugely intriguing.
Last night we did a screening of The Lost Boys, and it was epic. Amongst all of our Cyberdeliae, this was the one with the rowdiest audience: lots of screaming and singing along. Excellent costume contest entries, too.
For this one I did something a little different from the others: instead of DJ music over abstract visuals, I filled the pre-roll and intermission with music videos featuring VAMPIRES. I only needed 30 and 20 minutes respectively, but I immediately had way more than that, in fact, more than enough for a mixtape.
It has only been two weeks since the previous mixtape, but hey, why not.
So, in the immortal words of The Kurgan, "Happy Halloween, Ladies!"
The Taco Bell 50k Ultramarathon was run in Denver over the weekend. Competitors must eat at 9 out of 10 Taco Bells along the route. “By the 4th stop, all entrants must have consumed at least one (1) Chalupa Supreme or one Crunchwrap Supreme…”
Yes, it is well established that Smudge gets to claim the top spot on the cat tree, and that Spice takes the middle seat, with a third, lower seat available but usually unclaimed, or was, until Saja came and claimed it. But! Today! An usurpation! Saja has taken the middle seat, in flagrant violation of the scratching order! This aggression will not stand, man!
Yes, there is tension today in the office.
Also, Spice is currently sitting in the Eames chair. But I assure you, she is not happy about it.
Stay tuned for more internecine Scamperbeast drama!
I missed this from a couple of months ago: Inside the World of “The Great British Bake Off”. “No show does so much to hide its true nature: namely, that it is a competition people desperately want to win.”
In a 2014 preface for his 1978 book The Ohlone Way, a description of how the indigenous peoples of California’s Bay Area lived before Europeans arrived, Malcolm Margolin shared a list of what he thought constituted a healthy society:
Sustainable relationship with the environment. In a healthy society, the present generation doesn’t strip-mine the soil, water, forest, minerals, etc., leaving the future impoverished and the beauty of the world degraded.
Few outcasts. A healthy society will have relatively few outcasts — prisoners, homeless, unemployed, insane.
Relative egalitarianism. The gap between those with the most wealth and power and those with the least should be moderate, and those with the least should feel protected, cared for, or rewarded in some other way.
Widespread participation in the arts.
Moderation or control of individual power.
Economic security attained through networks of family, friendship, and social reciprocity rather than through the individual hoarding of goods.
Love of place. The feeling that one lives with emotional attachment to an area that is uniquely beautiful, abundant in natural recourses, and rich in personal meaning.
Knowing one’s place in the world. A sense, perhaps embodied in spiritual practice, that the individual is an insignificant part of a larger, more abiding universe.
Work is done willingly, or at least with a minimum of resentment.
After building my iPhone screenshot framing system, I decided to tackle the problem of Mac screenshots. I’ve been using CleanShot X for a while, but the small annoyances that come with using it have been weighing on me, and it seemed like a good time to return to a system built especially for my needs.
I have some very particular ideas about how Mac screenshots should look. They shouldn’t include the shadow, as that takes up too much space and detracts from the window itself.1 They do, however, need some sort of border if you’re putting them on a white background; otherwise, the screenshot looks incomplete. I like adding relatively thin solid color around my window screenshots so they look like they’re on my Desktop. My wallpaper is a solid dull blue, so that’s what I use for my window screenshot borders. Finally, the window corners should be rounded just as I see them on my screen.
CleanShot X’s window screenshots don’t meet these particulars. It’s not hard to tweak things—either during the screenshot or through postprocessing—to get what I want, but I’m tired of doing the tweaks. The smallest border CleanShot X will give is much larger than I want. And for some reason, the window corners are squared off, not rounded. This, I learned, got especially noticeable with Tahoe’s especially rounded corners. As an example, here are two screenshots of the Tahoe System Settings window.
The first is what I want:
The second is what CleanShot X gives by default:
One way to get around this in CleanShot X is to take a rectangular selection screenshot instead of a window screenshot. But that typically means hiding all the other windows on my screen and then being careful as I drag out the rectangular selection. I’ve had enough of the extra effort.
Instead, I put my effort into writing code that does exactly what I want. The result is a Keyboard Maestro macro called SnapClip that puts up this window:
After I set the options, the cursor turns into a camera. I place it over the window I want a screenshot of and click. Depending on the options, the screenshot will either be on my clipboard, saved to the Desktop, or saved to the Desktop and uploaded to the leancrew server. (Turning the Add Background option off is for taking rectangular selection screenshots, which I can switch to by pressing the space bar.)
If you’ve been reading ANIAT for a while, you may remember that I’ve had different versions of SnapClip over the years. This is a new one. Some of its components were lifted straight from the old versions, some were adapted from old code, and some are brand new. I’m not going to link to any of my old screenshot code—you can search the archives as well as I can.
The main work is done by a Python script, called screenshot. It can be called from the Terminal with options that match up with the SnapClip options shown above. Here’s the help message for screenshot:
usage: screenshot [-h] [-b] [-u] [-t TITLE]
Like ⇧⌘4, but with more options.
options:
-h, --help show this help message and exit
-b, --background add desktop background border
-u, --upload upload to images directory and print URL
-t, --title TITLE image title
Starts in window capture mode and can add a border to the
screenshot. If a title is given, it saves the image to a file
on the Desktop with a filename of the form yyyymmdd-title.png.
If no title is given, the image is put on the clipboard and the
upload option is ignored.
And here’s the source code:
python:
1: #!/usr/bin/env python3
2:
3: import tempfile
4: from PIL import Image
5: import os
6: import subprocess
7: import shutil
8: from datetime import datetime
9: import urllib.parse
10: import argparse
11:
12: # Handle the arguments
13: desc = 'Like ⇧⌘4, but with more options.'
14: ep = '''Starts in window capture mode and can add a border to the
15: screenshot. If a title is given, it saves the image to a file
16: on the Desktop with a filename of the form yyyymmdd-title.png.
17: If no title is given, the image is put on the clipboard and the
18: upload option is ignored.'''
19: parser = argparse.ArgumentParser(description=desc, epilog=ep,
20: formatter_class=argparse.RawDescriptionHelpFormatter)
21: parser.add_argument('-b', '--background', help='add desktop background border', action='store_true')
22: parser.add_argument('-u', '--upload', help='upload to images directory and print URL', action='store_true')
23: parser.add_argument('-t', '--title', help='image title', type=str)
24: args = parser.parse_args()
25:
26: # Parameters
27: type = "png"
28: localdir = os.environ['HOME'] + "/Pictures/Screenshots"
29: tf, tfname = tempfile.mkstemp(suffix='.'+type, dir=localdir)
30: bgcolor = (85, 111, 137)
31: border = 32
32: optimizer = '/Applications/ImageOptim.app/Contents/MacOS/ImageOptim'
33:
34: # Capture a portion of the screen and save it to a temporary file
35: status = subprocess.run(["screencapture", "-iWo", "-t", type, tfname])
36:
37: # Add a desktop background border if asked for
38: if args.background:
39: snap = Image.open(tfname)
40: # Make a solid-colored background bigger than the screenshot.
41: snapsize = tuple([ x + 2*border for x in snap.size ])
42: bg = Image.new('RGBA', snapsize, bgcolor)
43: bg.alpha_composite(snap, dest=(border, border))
44: bg.save(tfname)
45:
46: # Optimize the file
47: subprocess.run([optimizer, tfname], stderr=subprocess.DEVNULL)
48:
49: # Save it to a Desktop file if a title was given; otherwise,
50: # save it to the clipboard
51: if args.title:
52: sdate = datetime.now().strftime("%Y%m%d")
53: desktop = os.environ['HOME'] + "/Desktop/"
54: fname = f'{desktop}{sdate}-{args.title}.{type}'
55: shutil.copyfile(tfname, fname)
56: bname = os.path.basename(fname)
57:
58: # Upload the file and print the URL if asked
59: if args.upload:
60: year = datetime.now().strftime("%Y")
61: server = f'user@server.com:path/to/images{year}/'
62: port = '123456789'
63: subprocess.run(['scp', '-P', port, fname, server])
64: bname = urllib.parse.quote(bname)
65: print(f'https://leancrew.com/all-this/images{year}/{bname}')
66: else:
67: subprocess.call(['impbcopy', tfname])
68:
69: # Delete the temporary file
70: os.remove(tfname)
There’s a lot going on in those 70 lines. Let’s go through them a chunk at a time.
Lines 13–24 use the argparse module to process the options. I’ve always shied away from argparse. It seemed more complicated than necessary, so I used docopt instead. But after reading this tutorial, I decided to give it a go. It wasn’t as complicated as I thought, and you can probably work out what it does without much commentary from me. I will say the following:
The -h and --help options and the help message are created automatically by argparse. That’s why you don’t see any code that builds or prints the list of options.
The description is the optional part of the help message that comes between the usage and options sections.
The epilog is the optional part that comes after the options section.
Creating the ArgumentParser with RawDescriptionHelpFormatter as the formatter_class means that the description and epilog are printed as-is, without line wrapping. I used this to make sure the filename format string, yyyymmdd-title.png, didn’t get broken over two lines.
Lines 27–32 define a set of parameters that will be used later in the script. We’ll talk about them as they come up.
Line 35 calls the screencapture command. This is a macOS command that works sort of like a combination of ⇧⌘3 and ⇧⌘4, but with more options. It’s called with -i, which puts it in interactive mode; -W, which starts it in window selection mode instead of rectangular selection mode; -o, which keeps the shadow out of the screenshot if a window is captured; and -t, which sets the type of the resulting image file. The argument of -t is the filetype, which is defined as png in Line 27. The final argument, tfname, is the file where the screenshot is saved. The file name is defined in Lines 27–29 with the help of the tempfile module.
At this point, we have a temporary file with the screenshot. The rest of the code processes it.
Lines 38–44 add a background border if the -b option to screenshot was given. The Python Imaging Library (PIL) opens the temporary file just created, makes a new rectangular image that’s larger than the screenshot by border (defined on Line 31) on all sides. This rectangle is filled with my Desktop color, bgcolor, an RGB tuple defined on Line 30. The two images are then composited together, honoring the alpha channel in the screenshot image. The result is saved back into the temporary file.
Line 47 uses the ImageOptim app to make the PNG file smaller. I do this to be a good web citizen. Although ImageOptim is a GUI application, it has a command line program buried in its package contents. The path to that program, stored in the variable optimizer, is defined on Line 32. You’ll note that the call to subprocess.run includes a directive to send the standard error output to /dev/null. That’s because the ImageOptim command generates a long diagnostic message as it processes the PNG and I don’t want that appearing when screenshot is run.
Lines 51–67 put the newly optimized image file somewhere. If the -t option was used, the image file is saved to the Desktop with a filename determined by the date and the -t argument. If the -t option wasn’t used, the image is put on the clipboard.
Putting the image on the clipboard requires a command that doesn’t come with macOS, impbcopy. This is a lovely little utility written about a decade ago by Alec Jacobson. It’s basically an image analog to the built-in pbcopy command, which only works with text. impbcopy takes an image file as its argument and puts the image on the clipboard.
If the -u option was used, the file is uploaded to my server via the scp command and the URL of the image is printed. The upload parameters shown here in Lines 61 and 62 have been changed from the actual values. The upload code runs only if an image file was saved. If you run screenshot with -u but no -t option, the -u will be ignored.
You’ll note there’s nothing about SSH keys in the code. I confess I can’t remember whether this is unnecessary because of entries in my ~/.ssh directory, the Keychain Access app, or something else. I do remember granting access via SSH to my server many years ago, and every OS X/macOS upgrade since then has honored that.
Finally, Line 70 deletes the temporary file.
The SnapClip macro (which you can download) is just a GUI wrapper around screenshot. Here’s what it looks like:
Nested if statements are a pain to deal with in graphical coding environments like Keyboard Maestro. I gave the ifs different colors with the hope of making it easier to read, but I’m not convinced it’s much better. You might find this pseudocode easier to follow:
Show window with prompts for user input
If title
If background
If upload
screenshot -bu -t title
Else
screenshot -b -t title
Else
If upload
screenshot -u -t title
Else
screenshot -t title
Else
If background
screenshot -b
Else
screenshot
Play sound
A couple of notes on the macro:
Long ago, I got in the habit of keeping the scripts I wrote in a bin directory in Dropbox. I probably should stop doing that, as iCloud syncing is fine, and I don’t use multiple Macs anymore. Anyway, that bit of history is why you see references to ~/Dropbox/bin/screenshot in the macro.
Most of the calls to execute screenshot are set to ignore the output. The exceptions are when the image file is uploaded. When that occurs, screenshot prints the URL of the uploaded image file, and that gets saved to the clipboard.
Although the print function on Line 65 of screenshot adds a linefeed at the end of the URL, that linefeed won’t be on the clipboard when SnapClip is run. That’s because Keyboard Maestro is clever; it knows you probably don’t want the trailing linefeed and trims it automatically. (If you do want the linefeed, there’s a option in the gear menu to turn off the trimming.)
It’s entirely possible that I’ve missed some options in CleanShot X that would make its screenshots closer to what I want. I could also try another screenshot app, like Shottr, which Allison Sheridan has sung the praises of. But this new SnapClip handles everything I do with screenshots other than annotation (for which I use Acorn or OmniGraffle), so I’m not inclined to switch.
“Mary Brunkow, Fred Ramsdell, and Shimon Sakaguchi won the 2025 Nobel Prize in Physiology or Medicine for work shedding light on how the immune system spares healthy cells, creating openings for possible new autoimmune disease and cancer treatments.”
I moved to a new state a year ago and, in the effort to find community, I joined a grassroots nonprofit as a volunteer coordinator (as a volunteer, not for my job).
Since I’ve joined, we’ve had transparency issues with the board. Every few months, someone would either join or drop off the board, and volunteers wouldn’t hear about it until a week or two after the fact. We also never had the organization’s bylaws or constitution available to volunteers, and no matter how many of us explained why we needed this, select board members would always give excuses as to why we couldn’t. At one point, they finally posted them, but when the website went through a long-overdue redesign, both forms disappeared from it again.
Isadora has been a board member for more than a year. Three months ago, the president and vice president suddenly quit with no explanation. Someone else had to step up as president, and Isadora had to step up as vice president. Both were doing the jobs of two or three people at a time, so Isadora was overwhelmed. I was also doing the jobs of two people. (I never learned about the former president and vice president quitting until it was mentioned in casual conversation a full week later. Two other volunteers learned about it the same way.)
Because Isadora was so stressed out, she chatted openly about stepping down from the board after a big public event we’re holding. Another board member, Duncan, told us he would do the same.
There was a big Instagram post from the barely-new president where he gave a heartfelt goodbye letter, and he talked about how he looked forward to “the new board taking [his] and others’ places.” The post had introductions of all the new members … including Isadora and Duncan. This confused me and made me think that they had changed their minds about leaving, or perhaps that no replacements had been found for them yet.
The next day, Duncan mentioned unprompted that he’s still planning to step down after the public event in three weeks. I asked about the Instagram post, which he didn’t see, but he said it’s correct since he’s still on the board.
I texted Isadora to ask if she changed her mind or couldn’t find a replacement, and she reiterated that she’s still leaving in three weeks. But she also added that her term was supposed to end four months ago, per the (still unavailable) bylaws, which I wasn’t told before. I told her that I understood that, but that my concern was that the Instagram post gave the impression that she and Duncan would be there for longer.
She replied, “How does it give that impression? People wanted us to announce who’s on the board, so we did. But apparently, they’re not happy about that either.” With a rolling-eyes emoji at the end.
I was taken aback by her tone. I replied with a three-paragraph text (that I revised three times to be as empathetic as I could) about the constant mixed messages and the lack of information on the website about the board, bylaws, and constitution. That yes, the post is correct *at face value* about who’s *currently* on the board, but that would change in only three weeks and that “new members” seemed to imply that they’d be there for longer. That I understood that she had been so stressed lately, but I still felt confused by the organization sometimes.
She replied, “So are you asking me to take the post down? Or give two weeks notice? I still don’t feel like this information is contradictory. People have been asking us who is on the board, so we announced it. Also people can quit the board at any time. We don’t force people to stay if they don’t want to.”
I tried to call her because I actually wanted to speak instead of text, but she wasn’t in a place to take a phone call. (And I never tried again because I didn’t want to seem combative or pushy.) I suddenly felt stupid for saying anything at all because I had no idea what exactly I was asking her to do, or what I should ask her to do. I apologized for bringing it up, to which she said that I don’t need to apologize and that she just didn’t understand what I needed from her. The last thing I told Isadora was that I didn’t really know if there was anything I needed from her right now, but that I appreciated her asking. I backed down suddenly because I felt ashamed of myself.
Maybe I just let the stress get to me, but I feel like there’s something not right about the post that I couldn’t place my finger on. And Isadora’s tone made me feel like I’ve crossed some line since she had never used it before with me (I can’t stop thinking about that rolling-eyes emoji). Is it unreasonable to assume that when someone makes a big announcement about “new members” that they won’t be planning to leave in three weeks? Did I cross a boundary?
You didn’t cross any boundary, but you are probably more upset about all of this than you need to be.
This organization is clearly a mess and they can’t hold on to board members.
The thing about the bylaws and constitution not being available to volunteers isn’t necessarily a big deal. It’s weird that they’ve had so much trouble providing them to volunteers when asked, but they’re not required to be publicly accessible. It’s best practice to make them available for transparency’s sake and it’s odd that they haven’t and it doesn’t engender any trust in them — but it seems consistent with the general chaos they operate with.
The confusion about Isadora and Duncan’s status as board members … eh. It seems like the president just referenced all the existing board members without regard to who’s about to leave. It’s not ideal communication, but it’s not a big deal. Isadora was probably annoyed when you contacted her because she’s been trying to get off the board for months and felt you were nitpicking the impression given by someone else’s Instagram post, which she probably didn’t think was a big deal or should need to be her problem to deal with (or anyone’s problem, really). She also sounds fed up with the organization in general.
Here’s the thing: this organization is a mess. I don’t know how well it functions when it comes to achieving its actual goals (not well, I suspect), but its internal operations are in chaos. You are clearly someone who does not enjoy functioning in chaos, so this organization is not a good fit for you; you’re going to find it aggravating (rightly so!) and you’re going to be constantly battling them to be something they aren’t. As a volunteer, you’re just not well-positioned to change any of this. Maybe if you wanted to get on the board, but honestly that sounds like it would be an exercise in frustration too. I’d also bet good money they don’t get great results toward their mission — which alone would be sufficient reason to take your efforts elsewhere.
There are lots of nonprofits doing good work that aren’t this much of a mess and which won’t frustrate you like this. Move your energy there instead!
Last year, Gretchen Rubin wrote a widely circulated piece about trading the “empty nest” metaphor for something that “emphasizes possibility”: the open door. I somehow hadn’t read it when it came out, but being in the midst of emptying the nest/opening the door, it was unsurprisingly resonant for me to read now. Rubin writes:
I balked at empty nest’s connotations of futility or meaninglessness. No wonder so many adults, when and if they anticipate this stage of life, consider it with dread. I found myself searching for a different metaphor — one that could help me and parents like me not to languish but to see this new phase as a time of self-discovery, possibility, and growth.
For me, I’m not so sure the terms or framing matters too much. I’ve been genuinely looking forward to my kids being out in the world and the possibility more freedom & bandwidth, but I am still feeling allllll of this bewilderment and questioning:
That lack of foresight isn’t surprising. The tumult of everyday family routine can make it hard for people to step back and think about their lives. As I often remind myself, something that can be done at any time tends to be done at no time, and the demands of parenthood make it easy to delay facing what can be difficult questions. Am I living the life I want to live? Is it too late to start something new? Do I really want to be married anymore? Or simply: Now is it okay to eat meals in front of the TV?
Some people I’ve encountered whose children have left home have told me — in tones of shame, sadness, or bewilderment — that they’re reassessing long-standing habits and relationships. “I thought I had a group of friends, but I didn’t,” a woman seated next to me on an airplane last year said. Her social circle was tied to her daughter’s activities, such as soccer and violin; once her daughter graduated, those bonds dissolved. Some have reported a crisis of identity. “I keep asking myself, What am I for?” a friend said. Another warned me to resist the lure of all those hours freed up on my schedule: “I know you love to work, but be careful not to work all the time, because now you can.”
What am I for? Am I living the life I want to live?
Through Monday, October 27 the October Horrors begin with the new Achtung! Cthulhu 2d20 Bundle featuring Achtung! Cthulhu, the 2d20 System RPG from Modiphius of cosmic horror amid the chaos and heroism of World War II. Enter a pulp-action world of dauntless Allied heroes, secret agents, and mysterious mystics as Allied servicemen and women, secret agents, members of the French Resistance, or even hapless civilians caught up in the Secret War. All stand firm against the Nazis and their twisted occult forces, including the Cult of the Black Sun, who wield foul magic and summon ancient horrors in their bid to unleash Yog-Sothoth, and Nachtwölfe, who research weird science and super-weapons. Achtung! Cthulhu 2d20 immerses you in a hidden globe-spanning conflict for fast-paced, two-fisted adventure.
Explore ancient ruins and ride drilling machines at top speed through terrifying tunnels filled with fanatical cultists, crazed scientists, and Deep Ones! Peer into tomes of eldritch knowledge, and wield powerful magic and potent psychic powers! Punch brain-sucking horrors in the tentacles – laugh in the face of reality-warping nightmares – grow in power, gain experience, and develop new skills until you’re ready to face down the mind-shattering Master of R’lyeh: dread Cthulhu himself!
Introduced in Mutant Chronicles (2015), and later adapted for Star Trek Adventures, Dune, Fallout, John Carter of Mars, and many other Modiphius RPGs, 2d20 is a narrative-focused dice-pool roll-under system. To attempt a task, you roll two 20-sided dice and compare each roll to a target number based on your character’s abilities. Each die roll under the target number is one success; a 1 counts as two successes. If you roll more successes than you need, you can bank the extra successes in your Momentum pool and spend them later to gain bonuses. You can push your luck, rolling extra d20s, but this may increase a Threat pool that represents things going wrong. Even when success would be automatic, you can still make a “Difficulty 0 roll” to gain Momentum. This represents scouting a situation, gaining intelligence, and prepping for trouble later. Because your Momentum is capped at 5 points, you tend to spend points freely – and so does the Gamemaster, who uses dice from the Threat pool to make life interesting. 2d20 play is dynamic and involving. From turn to turn you’ll make lots of decisions to adjust difficulty thresholds, critical hit ranges, Momentum, Threat, and other factors.
Deploying a visceral dieselpunk vibe with echoes of Hellboy, Indiana Jones, and Castle Wolfenstein, Achtung! Cthulhu 2d20 crackles with energy and style. A!C characters may come from Britain’s Section M, America’s Majestic, or resistance groups. Players build PCs quickly by combining an Archetype (Boffin, Soldier), a Background (Engineer, Navy), and a Characteristic (Born Behind the Wheel, Raised by a Cult). This sets their attributes and skills and gives them access to focused knowledge, special talents, and occult paths. Allied magical traditions avoid Mythos entanglements, but even these battlefield and ritual spells carry great risk. Operations and campaigns pit the heroes against the rival Nazi factions of the Black Sun and Nachtwölfe, the brutal works of the Deep Ones, the arcane plots of Mi-Go, and a host of other cults and creatures. A visual timeline of World War II establishes key operations tied to different eras: from the early globetrotting of Shadows of Atlantis, to the mid-war North African battles of The Serpent & the Sands, to the late war The Forest of Fear, a dark take on The Battle of the Bulge.
And if you pay more than the threshold (average) price, which is set at $29.95 to start, you’ll level up and also get our entire Operations Collection with nine more titles worth an additional $97.50:
My mailing list is the best way to keep up with my work, and people report that they actually enjoy getting it! Sign up here.
Reminder that I have a (very fun little) mailing list and as social media changes and collapses, it’s the best way to keep up with my comics, books, and events.
OpenAI and Advanced Micro Devices have reached a deal that could
see Sam Altman’s company take a 10% stake in the chipmaker. AMD
stock skyrocketed more than 30% on Monday following the news.
OpenAI will deploy 6 gigawatts of AMD’s Instinct graphics
processing units over multiple years and across multiple
generations of hardware, the companies said Monday. It will kick
off with an initial 1-gigawatt rollout of chips in the second half
of 2026.
It only happens once a decade or so, but the most exciting times in tech occur when there’s a breakthrough that’s severely hardware constrained. That includes hardware like infrastructure — bandwidth was a massive constraint during the dot-com boom. It wasn’t even feasible to download audio, like podcasts, for the first decade of the consumer internet boom, let alone video. But it was inevitable that we’d get there.
Right now we’re severely constrained on compute for AI. In a few years, we’ll look back on today’s state of affairs the way we look back on dial-up modems.