[syndicated profile] cks_techblog_feed

Posted by cks

In yesterday's entry I described a lingering duplicate system and how it had taken us a long time to get rid of it, but I got too distracted by the story to write down the general thoughts I had on how this sort of thing happens and keeps happening (also, the story turned out to be longer than I expected). We've had other long running duplicate systems, and often they have more or less the same story as yesterday's disk space usage tracking system.

The first system built is a basic system. It's not a bad system, but it's limited and you know it. You can only afford to gather disk usage information once a day and you have nowhere to put it other than in the filesystem, which makes it easy to find and independent of anything else but also stops it updating when the filesystem fills up. Over time you may improve this system (cheaper updates that happen more often, a limited amount of high resolution information), but the fundamental issues with it stick around.

After a while it becomes possible to build a different, better system (you gather disk usage information every few minutes and put it in your new metrics system), or maybe you just realize how to do a better version from scratch. But often the initial version of this new system has its own limitations or works a bit differently or both, or you've only implemented part of what you'd need for a full replacement of the first system. And maybe you're not sure it will fully work, that it's really the right answer, or if you'll be able to support it over the long term (perhaps the cardinality of the metrics will be too overwhelming).

(You may also be wary of falling victim to the "second system effect", since you know you're building a second system.)

Usually this means that you don't want to go through the effort and risk of immediately replacing the old system with the new system (if it's even immediately possible without more work on the new system). So you use the new system for new stuff (providing dashboards of disk space usage) and keep the old system for the old stuff (the officially supported commands that people know). The old system is working so it's easier to have it stay "for now". Even if you replace part of the use of the old system with the new system, you don't replace all of it.

(If your second system started out as only a partial version of the old system, you may also not be pushed to evolve it so that it could fully replace the old system, or that may only happen slowly. In some ways this is a good thing; you're getting practical experience with the basic version of the new system rather than immediately trying to build the full version. This is a reasonable way to avoid the "second system effect", and may lead you to find out that in the new system you want things to operate differently than the old one.)

Since both the old system and the new system are working, you now generally have little motivation to do more work to get rid of the old system. Until you run into clear limitations of the old system, moving back to only having one system is (usually) cleanup work, not a priority. If you wanted to let the new system run for a while to prove itself, it's also easy to simply lose track of this as a piece of future work; you won't necessarily put it on a calendar, and it's something that might be months or a year out even in the best of circumstances.

(The times when the cleanup is a potential priority are when the old system is using resources that you want back, including money for hardware or cloud stuff, or when the old system requires ongoing work.)

A contributing factor is that you may not be sure about what specific behaviors and bits of the old system other things are depending on. Some of these will be actual designed features that you can perhaps recover from documentation, but others may be things that simply grew that way and became accidentally load bearing. Figuring these out may take careful reverse engineering of how the system works and what things are doing with it, which takes work, and when the old system is working it's easier to leave it there.

lannamichaels: Astronaut Dale Gardner holds up For Sale sign after EVA. (Default)
[personal profile] lannamichaels


Title: The People You Meet Along The Way.
Author: [personal profile] lannamichaels
Fandom: The Parent Trap (1998)
Rating: G
Archives: Archive Of Our Own, SquidgeWorld

Summary: Twelve years later, they meet at an airport.


Meredith is so fun to write )

Challenge #1083: plurality

Mar. 21st, 2026 03:47 pm
primsong: (threejo bessie)
[personal profile] primsong posting in [community profile] dw100
Challenge #1083 is plurality.

The rules:
  • All stories must be 100 words long.
  • Please place your story behind a cut if it contains spoilers for the current season.
  • Remember, you don't have to use the challenge word or phrase in your story; it's just there for inspiration.
  • Please include the challenge word or phrase in the subject line of your post.
  • Please use the challenge tag 1083: plurality on any story posted to this challenge.

The passive voice was studied by us

Mar. 21st, 2026 09:24 pm
buttonsbeadslace: A white lace doily on blue background (Default)
[personal profile] buttonsbeadslace
I was a polite student and didn't derail class discussion about grammar to say this, so dear readers, you get it instead. A while ago in Spanish class we were talking about ways of expressing accidental or uninentional actions, and how Spanish uses a specific passive voice type of form for this, unlike English where you have to be much more direct about who did the accidental action.

The closest English equivalent I can think of for the Spanish phrases that we were learning is "The computer broke on me." The Spanish phrase has the object that got damaged doing a reflexive action to itself, and the person (who perhaps dropped it, or pressed the wrong button, or in some other way did break it, just not on purpose) appears as an indirect object of the verb. Us English speakers in class agreed that English does indeed do this very differently, since 99% of the time we would just say "I broke it," and that passive voice is very rare in English.

What I did not say in class is that there's one major exception to this rule, that's actually very common if you know where to look. If you want to see the passive voice in English used to downplay someone's responsibility for some negative action, you need look no further than headlines about police officers.

RIP Nicholas Brendon

Mar. 21st, 2026 08:49 pm
ffutures: (Default)
[personal profile] ffutures
Just heard that Nicholas Brendon, who played Xander Harris on Buffy the Vampire Slayer, died on the 20th, apparently of natural causes.


To me he was always the best viewpoint character for the show, the normal guy who was doing his best to cope with the sheer insanity of living on the mouth of hell, but some people seen to think that that wasn't sufficiently cool and and that Xander should have had superpowers far beyond anyone else in the show. I'm afraid that they're missing the point; he was the closest to normal of a team that was otherwise super-powered to some extent, and the best bridge between our world and theirs, and he played the role spectacularly well. He'll be missed.

SSH certificates and git signing

Mar. 21st, 2026 12:38 pm
[syndicated profile] mjg59_codon_feed

When you’re looking at source code it can be helpful to have some evidence indicating who wrote it. Author tags give a surface level indication, but it turns out you can just lie and if someone isn’t paying attention when merging stuff there’s certainly a risk that a commit could be merged with an author field that doesn’t represent reality. Account compromise can make this even worse - a PR being opened by a compromised user is going to be hard to distinguish from the authentic user. In a world where supply chain security is an increasing concern, it’s easy to understand why people would want more evidence that code was actually written by the person it’s attributed to.

git has support for cryptographically signing commits and tags. Because git is about choice even if Linux isn’t, you can do this signing with OpenPGP keys, X.509 certificates, or SSH keys. You’re probably going to be unsurprised about my feelings around OpenPGP and the web of trust, and X.509 certificates are an absolute nightmare. That leaves SSH keys, but bare cryptographic keys aren’t terribly helpful in isolation - you need some way to make a determination about which keys you trust. If you’re using someting like GitHub you can extract that information from the set of keys associated with a user account1, but that means that a compromised GitHub account is now also a way to alter the set of trusted keys and also when was the last time you audited your keys and how certain are you that every trusted key there is still 100% under your control? Surely there’s a better way.

SSH Certificates

And, thankfully, there is. OpenSSH supports certificates, an SSH public key that’s been signed by some trusted party and so now you can assert that it’s trustworthy in some form. SSH Certificates also contain metadata in the form of Principals, a list of identities that the trusted party included in the certificate. These might simply be usernames, but they might also provide information about group membership. There’s also, unsurprisingly, native support in SSH for forwarding them (using the agent forwarding protocol), so you can keep your keys on your local system, ssh into your actual dev system, and have access to them without any additional complexity.

And, wonderfully, you can use them in git! Let’s find out how.

Local config

There’s two main parameters you need to set. First,

1
git config set gpg.format ssh

because unfortunately for historical reasons all the git signing config is under the gpg namespace even if you’re not using OpenPGP. Yes, this makes me sad. But you’re also going to need something else. Either user.signingkey needs to be set to the path of your certificate, or you need to set gpg.ssh.defaultKeyCommand to a command that will talk to an SSH agent and find the certificate for you (this can be helpful if it’s stored on a smartcard or something rather than on disk). Thankfully for you, I’ve written one. It will talk to an SSH agent (either whatever’s pointed at by the SSH_AUTH_SOCK environment variable or with the -agent argument), find a certificate signed with the key provided with the -ca argument, and then pass that back to git. Now you can simply pass -S to git commit and various other commands, and you’ll have a signature.

Validating signatures

This is a bit more annoying. Using native git tooling ends up calling out to ssh-keygen2, which validates signatures against a file in a format that looks somewhat like authorized-keys. This lets you add something like:

1
* cert-authority ssh-rsa AAAA…

which will match all principals (the wildcard) and succeed if the signature is made with a certificate that’s signed by the key following cert-authority. I recommend you don’t read the code that does this in git because I made that mistake myself, but it does work. Unfortunately it doesn’t provide a lot of granularity around things like “Does the certificate need to be valid at this specific time” and “Should the user only be able to modify specific files” and that kind of thing, but also if you’re using GitHub or GitLab you wouldn’t need to do this at all because they’ll just do this magically and put a “verified” tag against anything with a valid signature, right?

Haha. No.

Unfortunately while both GitHub and GitLab support using SSH certificates for authentication (so a user can’t push to a repo unless they have a certificate signed by the configured CA), there’s currently no way to say “Trust all commits with an SSH certificate signed by this CA”. I am unclear on why. So, I wrote my own. It takes a range of commits, and verifies that each one is signed with either a certificate signed by the key in CA_PUB_KEY or (optionally) an OpenPGP key provided in ALLOWED_PGP_KEYS. Why OpenPGP? Because even if you sign all of your own commits with an SSH certificate, anyone using the API or web interface will end up with their commits signed by an OpenPGP key, and if you want to have those commits validate you’ll need to handle that.

In any case, this should be easy enough to integrate into whatever CI pipeline you have. This is currently very much a proof of concept and I wouldn’t recommend deploying it anywhere, but I am interested in merging support for additional policy around things like expiry dates or group membership.

Doing it in hardware

Of course, certificates don’t buy you any additional security if an attacker is able to steal your private key material - they can steal the certificate at the same time. This can be avoided on almost all modern hardware by storing the private key in a separate cryptographic coprocessor - a Trusted Platform Module on PCs, or the Secure Enclave on Macs. If you’re on a Mac then Secretive has been around for some time, but things are a little harder on Windows and Linux - there’s various things you can do with PKCS#11 but you’ll hate yourself even more than you’ll hate me for suggesting it in the first place, and there’s ssh-tpm-agent except it’s Linux only and quite tied to Linux.

So, obviously, I wrote my own. This makes use of the go-attestation library my team at Google wrote, and is able to generate TPM-backed keys and export them over the SSH agent protocol. It’s also able to proxy requests back to an existing agent, so you can just have it take care of your TPM-backed keys and continue using your existing agent for everything else. In theory it should also work on Windows3 but this is all in preparation for a talk I only found out I was giving about two weeks beforehand, so I haven’t actually had time to test anything other than that it builds.

And, delightfully, because the agent protocol doesn’t care about where the keys are actually stored, this still works just fine with forwarding - you can ssh into a remote system and sign something using a private key that’s stored in your local TPM or Secure Enclave. Remote use can be as transparent as local use.

Wait, attestation?

Ah yes you may be wondering why I’m using go-attestation and why the term “attestation” is in my agent’s name. It’s because when I’m generating the key I’m also generating all the artifacts required to prove that the key was generated on a particular TPM. I haven’t actually implemented the other end of that yet, but if implemented this would allow you to verify that a key was generated in hardware before you issue it with an SSH certificate - and in an age of agentic bots accidentally exfiltrating whatever they find on disk, that gives you a lot more confidence that a commit was signed on hardware you own.

Conclusion

Using SSH certificates for git commit signing is great - the tooling is a bit rough but otherwise they’re basically better than every other alternative, and also if you already have infrastructure for issuing SSH certificates then you can just reuse it4 and everyone wins.


  1. Did you know you can just download people’s SSH pubkeys from github from https://github.com/<username>.keys? Now you do ↩︎

  2. Yes it is somewhat confusing that the keygen command does things other than generate keys ↩︎

  3. This is more difficult than it sounds ↩︎

  4. And if you don’t, by implementing this you now have infrastructure for issuing SSH certificates and can use that for SSH authentication as well. ↩︎

A quiet Saturday

Mar. 21st, 2026 11:59 am
sholio: (B5-station)
[personal profile] sholio
I posted some more Babylon 5 fic in the last couple of days: a new Londo/G'Kar fake dating fic plus a new chapter of the B5 catacomb WIP.

It's been a year this month since I started watching the show - my first post under the B5 tag was posted March 3, 2025 after watching the first couple of episodes. Still completely gone on it! I regret nothing!

In other news, NYT gift link to an article about Paul Brainerd, creator of Aldus PageMaker and inventor of the term "desktop publishing." This was a fascinating nostalgia read for me because, while I had no idea of the actual history, this guy (and Adobe and Apple) created the professional world of my young adulthood. My first job out of college in (I think) 1998 was working in the layout department of a newspaper that had just recently (last few years) gone from paste-up to an all-Mac layout room using a program similar to PageMaker from a third-party software maker that no longer exists. PageMaker - which I also learned to use in the college computer lab, and later at work - was the direct predecessor of InDesign, widely used even today. It's interesting to think back on those old newspaper days and how thoroughly they shaped me and continue to shape me. The computer/layout/marketing experience I got as a layout artist in the late 90s and 2000s has been immensely useful for my current self-publishing career.

It continues to be horrendously cold. We've been sitting under a high-pressure ridge and have had gorgeous sunny days that are absolutely freezing. It was -20F when I got up this morning and it's 0F out there right now. My husband's (uni-age) students are over here today because they wanted to help him dig out an ancient non-working snowblower that someone gave us ages ago from a snowbank and try to get it working again. (We do actually have TWO other snowblowers. This is just for fun.)

I took this picture on a walk up our driveway to the highway to get the mail a couple of days ago:

a long expanse of snow-covered road with piles of snow on each side

At least at this time of year, the sun warms it up SOMEWHAT during the day - in January it can sit at -40 24/7 for weeks; at this time of year we're still experiencing 20-40 degree increases during the day .... which is still barely enough to push us above 0F. The 10-day forecast shows that it will be glacially (haha) warming up, but still may not have crawled into above-freezing temps by the end of the month. UGH, I'M READY FOR SPRING.
spiralsheep: Sheep wearing an eyepatch (Default)
[personal profile] spiralsheep
It's a wrap! Or a warp. I like to offer you an informed choice. ;-)

Film: Nouvelle Vague, 2025, is US / French film about the making of A bout de souffle. So it's a Richard Linklater homage to Jean-Luc Godard - a movie god making a film about a god of cinema, or at least a godard of cinema. Exactly as you'd expect in every way. I felt it didn't quite deserve full marks due to minor blandness and predictability, but there are no actual faults with the film: the audience gets what it deserves. ;-) 4.5/5
P.S. That dance scene from Bande à part referenced again (but Le Week-End is still my fave recreation).
P.P.S. So, now I've mentioned the other film, Nouvelle Vague has a smart script with slick direction and cinematography and production... but it's also sorta shallow compared to Le Week-End, which gave audiences three truly great film actors* allowed space by the director to explore everyday human experience in depth. Both movies focus on trivia, one more intellectually and one more emotionally, but only one of them finds additional profundity. Quoting philosophical one-liners is not in itself a profound activity and any parrot can be trained to do it. Nouvelle Vague is a tribute, while Le Week-End is an original.
* Lindsay Duncan, Jim Broadbent, and Jeff Goldblum.

Film: Grass, a Nation's Battle for Life, 1925, US / Bakhtiari documentary film about the seasonal migration of 50,000 of the Bakhtiari (Lurs) and all their sheep, goats, cows, horses, donkeys, and dogs from exhausted pasture to fresh pasture, across several rivers including the Karun and over a snow covered mountain pass through the 4,221m Zard-Kuh subrange. Just crossing the river takes a week! (Spoiler for history: when the team considered remaking the film in 1947 they were told the migration was now done mostly in cars and trucks.) It is, of course, a silent movie, although the music track for the screening I attended was painfully ear-splittingly loud for no apparent reason. There are explanatory intertitles throughout, beginning with typical USian self-congratulatory racism about "Aryans" supposedly originating in West Asia and progressing westwards as civilisation progressed... with the implication that Hollywood is the peak of human culture, lmao (USians: so modest!). If you're wondering why the intertitles keep shouting "Yo, Ali!" it's because the Bakhtiari are Shia Muslims.
Presenter: Marguerite Harrison.
Conclusion: worth seeing on a BIG screen for the spectacle, but the commentary is as racist as most "Aryan" ethnography of the time. No rating.

Film: Köln 75, 2025, is a German film about... well, that's a problem because it doesn't know what it's about. Cut for moaning. )
Conclusion: the filmmakers and their male gaze didn't find Vera Brandes that interesting as a central subject, they couldn't focus on their hero Keith Jarrett, so they produced a confused hash spiced up with teenage girl sex-appeal for their chosen audience. No rating because the film is too inconsistent.
P.S. There's a documentary, Lost in Köln, 2025, which I haven't seen but I'm guessing would be a more worthwhile investment of time than... whatever this was that I watched.
P.P.S. Only fun if you understand German but... Floh de Cologne - Sei Ruhig Fließbandbaby.

* Piano tuners being a hot theme for movies made in 2025 for some reason?
sovay: (Lord Peter Wimsey: passion)
[personal profile] sovay
The afternoon's mail brought my contributor's copy of Not One of Us #86, containing my poem "Northern Comfort." I wrote it out of my discoveries of the ghost-ground that has been directly underfoot all my life and longer, from King Philip's War to Pomp's Wall, and this administration and its murderous terror of history. It shares a page and an issue of emptiness with a precisely targeted incantation by Gwynne Garfinkle as well the equally hollowing fiction and poetry of Kris Schokrowsky, Penny Durham, Carsten Cheung, Jennifer Crow, and more. I almost referred to the covert art by John and Flo Stanton, obscured by shattered webs of negative space or the rust-light of abandoned industries. Subscribe! Contribute! Make the right kind of strangeness in this world. I am off to South Station to collect one north-traveling seal.

Security advisory for Cargo

Mar. 21st, 2026 12:00 am
[syndicated profile] rust_feed

Posted by The Rust Security Response Team

The Rust Security Response Team was notified of a vulnerability in the third-party crate tar, used by Cargo to extract packages during a build. The vulnerability, tracked as CVE-2026-33056, allows a malicious crate to change the permissions on arbitrary directories on the filesystem when Cargo extracts it during a build.

For users of the public crates.io registry, we deployed a change on March 13th to prevent uploading crates exploiting this vulnerability, and we audited all crates ever published. We can confirm that no crates on crates.io are exploiting this.

For users of alternate registries, please contact the vendor of your registry to verify whether you are affected by this. The Rust team will release Rust 1.94.1 on March 26th, 2026, updating to a patched version of the tar crate (along with other non-security fixes for the Rust toolchain), but that won't protect users of older versions of Cargo using alternate registries.

We'd like to thank Sergei Zimmerman for discovering the underlying tar crate vulnerability and notifying the Rust project ahead of time, and William Woodruff for directly assisting the crates.io team with the mitigations. We'd also like to thank the Rust project members involved in this advisory: Eric Huss for patching Cargo; Tobias Bieniek, Adam Harvey and Walter Pearce for patching crates.io and analyzing existing crates; Emily Albini and Josh Stone for coordinating the response; and Emily Albini for writing this advisory.

Post of links and music

Mar. 21st, 2026 05:52 pm
dolorosa_12: (persephone lore olympus)
[personal profile] dolorosa_12
Rather than share each item individually, I'm just going to link to [personal profile] goodbyebird's mostly good news links roundup. There's some fantastic environmental and sociopolitical news there.

I'll add to all this with the news that you can now walk around the entire coastline of England. It's worth reading the article in full, because this undertaking is extremely impressive and future-focused.

Another good news story, via 2022 Ukrainian Nobel laureate Oleksandra Matviichuk: the tropical plants in the greenhouse of Kyiv's Hryshko Botanical Garden survived Russia's winter bombardment of energy facilities, thanks to the concerted efforts of staff and ordinary Kyivan citizens.

And I just find this latest batch of artistry from [instagram.com profile] wisdm, in which he styles the celestial bodies of the solar system in high fashion clothing, to be breathtakingly good.

I've basically been immersively living in these two songs for the past week:



(no subject)

Mar. 21st, 2026 04:21 pm
jayblanc: (Default)
[personal profile] jayblanc
I had my enby'ness confirmed, a neighbours dog that 'is sexist towards men' came up to me and licked my hand.

Just Create - Straw Edition

Mar. 21st, 2026 08:31 am
silvercat17: a white anthro tiger in a jumpsuit (tiger mek)
[personal profile] silvercat17 posting in [community profile] justcreate
 What are you working on? What have you finished? What do you need encouragement on?
 
Are there any cool events or challenges happening that you want to hype?
 
What do you just want to talk about?
 
What have you been watching or reading?
 
Chores and other not-fun things count!
 
Remember to encourage other commenters and we have a discord where we can do work-alongs and chat, linked in the sticky.

(no subject)

Mar. 21st, 2026 10:22 am
skygiants: Rue from Princess Tutu dancing with a raven (belle et la bete)
[personal profile] skygiants
I've seen two Boston Ballets in relatively quick succession over the past month, both combo programs featuring two pieces; the first was "The Rite of Spring" (Elo's, not Nijinsky's) paired with Pite's "The Seasons' Canon," and the second was a premiere, Stromile's "The Leisurely Installation of a New Window," paired with Ashton's "The [Midsummer Night's] Dream."

Breaking with the actual curation of the productions, I'm going to talk about "The Rite of Spring" and "The Leisurely Installation of a New Window" together because they both came first in their productions, they had kind of similar vibes, and I experienced similar feelings of mild disappointment about both of them that were not technically the fault of the productions. I was really excited about "The Rite of Spring" because I wanted to see some ballet dancers do a dramatic ritual sacrifice, and I was really excited about "The Leisurely Installation of a New Window" because I wanted to see some ballet dancers slowly install a window. Instead, both of these pieces were kind of abstract explorations through dance of the Relationship between the Individual and Society, and I think both would have been enjoyable for fifteen minutes but ran a bit long at half an hour.

The description for "Window" in the playbill reads:

Eighteen dancers inhabit the work through distinct but interdependent roles. The Seeker stands close to tradition, moving with discipline and clarity. The People operate within shared systems, attentive to both order and its quiet tensions. The Reformers introduce disruption, not as spectacle, but as pressure applied from within.

This did help me understand better what was going on in the dance, as the Seeker stalked around holding a book and then portentously passed it off to some dueting Reformers, but also made it feel a bit like a LARP that I was not participating in. On the other hand Reeves Gabriel of The Cure was There and Participating in Ballet Music (and every bit of marketing wanted you to know that Reeves Gabriel Of The Cure was There and Participating in Ballet Music) and occasionally the music would get very thrillingly electric guitar and you'd be like "Hello, Reeves Gabriel of The Cure!" So it's not that I didn't have a fine time, I just would have been okay with somewhat less of that time.

However, after these very mildly disappointing openers, I loved both "The Seasons' Canon" and "The Dream" very much! The Seasons' Canon is, justifiably, a known Boston Ballet showstopper -- a huge piece with a huge cast, and as you guys know I often have trouble with a piece that is not trying to tell me a story but this piece is truly just Humans Make Big Shapes and it's riveting. Could not take my eyes off it. The trailer here gives a bit of a sense but of course is not that much like seeing it Actually On Stage, but it does let you see one of the things I found most striking about the piece which is how extremely non-gendered it is -- everyone on that stage is dressed identically in pants and nude tank that makes them look topless, the whole corps looks like one and moves like one and there is nothing to distract you from that. Really, really cool experience.

And "The Dream" -- look, I'm a simple soul, and what I have discovered is that I love Ashton's silly panto-esque ballets. They are fun and they are funny and I love it when people get to be funny in dance! Dance jokes are good actually! Titania ballet-hopping her way towards Bottom in a way that manages to be simultaneously fairy-like and hilariously sultry, the arguing lovers constantly picking each other up and pirouetting a partner firmly Away from them Thank You, the rude mechanicals!! we wanted more rude mechanicals but I was so glad we got what we got. A+ Midsummer Night's Dream, would see again.

January 2026

S M T W T F S
    123
45678910
111213141516 17
18192021222324
25262728293031

Most Popular Tags

Expand Cut Tags

No cut tags