🏳️🌈 Technology enthusiast with a focus on Free Software and embedded systems. Science fiction promised us general purpose electronics, let's build them! (And get their security properties right.)
Public Key
npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf Profile Code
nprofile1qqsyhth6f04zwlryhhx7pcnmlpz9c909ff5jfay49weja998vrvnavcpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqs6amnwvaz7tmwdaejumr0dsm7xefa
Show more details
Published at
2026-05-28T12:38:16Z Event JSON
{
"id": "1a75def6bfad2831b4f40cdab49cb510dc879f5c030dd28a4cd81867726faada" ,
"pubkey": "4baefa4bea277c64bdcde0e27bf8445c15e54a6924f4952bb32e94a760d93eb3" ,
"created_at": 1779971896 ,
"kind": 0 ,
"tags": [
[
"proxy",
"https://chaos.social/users/chrysn",
"activitypub"
],
[
"client",
"Mostr",
"31990:6be38f8c63df7dbf84db7ec4a6e6fbbd8d19dca3b980efad18585c46f04b26f9:mostr",
"wss://relay.ditto.pub"
]
],
"content": "{\"name\":\"chrysn\",\"about\":\"🏳️🌈 Technology enthusiast with a focus on Free Software and embedded systems. Science fiction promised us general purpose electronics, let's build them! (And get their security properties right.)\",\"picture\":\"https://assets.chaos.social/accounts/avatars/000/144/098/original/a25570b32d79a4ed.png\",\"banner\":\"https://assets.chaos.social/accounts/headers/000/144/098/original/1f5c2f3bb5c5dbf3.jpg\",\"nip05\":\"[email protected] \",\"fields\":[[\"Website\",\"https://christian.amsuess.com\"],[\"pronouns\",\"he/him\"],[\"Other metadata for machine consumption\",\"searchable (eg. through tootfinder), https://justmytoots.com/@[email protected] \"],[\"Also contributes posts to\",\"@[email protected] , @[email protected] , @endor_creative, @flachwitz\"]]}" ,
"sig": "ed13d17ab0cff146f772ce704f9da37830d9502dd7b4abda3d14aa277b8c03895396cb13c1fd06d06788d415b0a27b57e6527860fc60a01d3fe2bde5f148041f"
}
Last Notes npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn Funny how people, in light of the LiteLLM compromise, jump to the conclusion that the solution is to make your supply chain even more intransparent by vendoring in dependencies through an LLM's processing, rather than just using pinned and vetted dependencies by default over tools' defaults "yolo there has been an update and it claims to be semver compatible" attitude. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…jydu Are you sure on 3? Inkscape does a good job pruning data from outside the MediaBox these days. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…mcwl I don't think you can get rid of that big core switch, but would be delighted to be shown wrong. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…mcwl I think in general you can't, you'll need methods like fn as_service(&self) { match self { MyThing::A(a) => Service::APrime(a.into()), ... } } etc. If you don't want to create them on foot, macros make this reasonably easy. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…mudw @nprofile…pafg @nprofile…4esm Genaugenommen bedingt clone das nicht -- ARandR könnte auch die Beamerauflösung nativ einstellen, und scaling für's 2. Display verwenden -- gerade bei Photovorträgen kann das cool sein. Hab ich in ARandR aber leider noch nicht implementiert, und ist für die konkrete Zielgruppe vielleicht auch nicht so essenziell. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…mudw @nprofile…pafg @nprofile…4esm Vorsicht nur: gespeicherte ARandR-Skripte funktionieren nur dann, wenn der angeschlossene Monitor auch die eingestellte Auflösung kann. Ggf. also beim Erstellen besser eine wählen, die alle relevanten Beamer können. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…jydu Just wait until you use Python 3.14: It has the tools for this too, so you don't want to debug the native code, you can work a level above it as well, or get yourself a REPL into any Python process. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn If you still have your project on GitHub and think that it is a public project, try this: Log off (eg. using a private tab), go to your project, and try reading 3-4 issues. Chances are you're Too Many Requests'd for a few minutes before you even got a decent overview of the project's state. Is this then still a public project? (For comparison, #Codeberg might run you through a round of Anubis, which is not great either, but still way better, and they run on a tiny fraction of MS's budget.) npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…mfuv I don't know of any way to count the threads, let alone to turn thread spawning off (esp. as that may not just happen through std::thread, but also through any C library). npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…mfuv Clippy claims that () as the E is bad practice (<https://rust-lang.github.io/rust-clippy/master/index.html#result_unit_err>). For your case, that'd probebly just be `#[derive(Debug)] struct ErrorWasShown;` (or `enum Error { SeeLogOutput }`) / `Result<T, ErrorWasShown>`, which does the very same thing at runtime, but tells that an error was shown at unwrap. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…f7sz `ls --sort time | head -n100 | xargs -n1 sh -c 'cat $0/.git/HEAD' | sort | uniq -c` gives me 45 main and 23 master for projects I touch regularly, and that ratio only gets stronger the less I extend this to ages old projects. Looks pretty default to me, and the technical git default comes with a big yellow warning "hint: Using 'master' as the name for the initial branch. This default branch name is subject to change.". npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…f7sz https://xkcd.com/1172/ ;-) More seriously: Given how widespread the new default is by now, at some point there's a break-even between breakage from the change and users whose muscle memory needs constant overwriting forcing `master` instead of `main`, esp. when other ma- branches defeat tab complete. That break-even may just as well be now-ish. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…f7sz So what, it's just a branch rename, as has happened in many projects. As long as they take care of any GitHub fallout (autoclosed PRs for lack of target) ... for a user in git, that's well managable. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…00z7 @nprofile…uy6d Zivilgesellschaftliche Organisationen kenn ich keine (nur technische), aber die Kollegys in Tschechien iaben da was vorgelegt: https://konecipv4.cz/en/ npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn I share the general concern from DJB in https://blog.cr.yp.to/20251004-weakened.html -- with much of the collective #IETF payroll being subject to the whims of US agencies, there is a risk of policy based strongarming-in of weak #cryptography. For now, the concern may be premature: WGA is mainly about whether there is drive to do the work. Until this is done, there are more important checks, especially before Recommended=Y: Tougher chair review, but also the shepherd report pointing out dissent, and the IESG itself. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…kxtw @nprofile…j8hy Would they be comfy as seat sized bean bags? npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…nhea While you are joking: @nprofile…lrh8, what'd it take for an MPTCP host to advertise a v6 option and then unadvertise all prior v4 options? npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…ss2n @nprofile…88lj Ah! I'm more of a wood person in that department. https://assets.chaos.social/media_attachments/files/114/878/500/455/967/465/original/9c6eab0dc165a90c.jpg npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…ss2n A whistle? (Not by design, but from the aspiration of using anything as a musical instrument). npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…u7qg I don't know anything about UniFi; the Thread routers should (on the long run) follow the SNAC spec as far as I understand. Do I see this right that it doesn't work for you because your multiple HomePod devices (those are the Thread border routers IIUC) don't see each other on the infrastructure network (where the UniFi router sits) because they are not on the same link (ie. because the UniFi router routes between them)? npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…u7qg But maybe I misread https://www.ietf.org/archive/id/draft-ietf-snac-simple-07.html -- or they don't deploy it that way yet. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…u7qg That's odd, because I vaguely remember that at least on a spec l evel, they talk about advertising an IPv6 ULA on the WiFi, which should even work in regions where due to monopolies, ISPs get away with not offering v6. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…528n Do those connections go up high enough to have an official French fediverse instance that could host, say, @academie@fr, and beat the pope to it? (cf. https://chaos.social/@chrysn/114477389021336262) npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn We're launching the embedded-cal project: Providing access to hardware accelerated and formally proven cryptographic algorithms on #embedded systems in #RustLang. For this, I'm teaming up with @nprofile…u6wh Paris and @nprofile…pkv8, supported by the #EU funded @nprofile…zzgr. Right now we're going through requirements. If you want to add hardware accelerated security to your #IoT project, chime in at our wishlist issue: <https://github.com/lake-rs/embedded-cal/issues/1> #EmbeddedCAL #NGI0Commons npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…ss2n @nprofile…8j6a For the symlink trouble I like exposing the repo over WebDAV (eg. loopback nginx) -- helps my TV, and helped back when "copy some photos onto USB" was an everyday operation that'd fail due to Nautilus/Thunar blindly defaulting to `cp -a`. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…8j6a @nprofile…ss2n Having a remote sounds better because it is tracked; also, that'd enable getting data from there by other clients. (E.g. I sometimes load files onto my laptop from a relative's NAS rather than my server just b/c their uplink has more bandwidth.) npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…uy6d http://test-ipv6.com/ sollte das zeigen. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…uy6d Schaffen die Path MTU? Deren Disconter bob vergeigt da voll. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…ndcz Hate to break it to you, but last time I saw that was on our 2012'ish server, and while far be it for me to call the constructors "grown up", they've all been approaching 30 back then. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…8j6a Well, if it just says it's locking, then I think C already has a copy, it's just not locked, and locking is supposed to be fast so no need to elaborate by default. (There could probably be a different trust model where there is no LOCKCONTENT required; maybe if the remotes were trusted, that'd already suffice). npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…8j6a What is your numcopies? Maybe it needs more copies than the new one to satisfy that. And which remotes are trusted, semitrusted and untrusted? npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…7093 Are the recipients really in a better position to judge what the network state is? The negotiation for block sizes is already ... I wouldn't say brittle, but def'ly not well tested. Adding an extra option and protocol would best be done if there is a clear and benchmarked problem (which there may well be and I don't see it yet) npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…7093 Block size negotiation is mainly there to account for different supported MTUs in heterogenous 802.15.4 networks -- doesn't AX.25 provide that information already? npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…8j6a @nprofile…ss2n You won't get around running some script per file, but you don't have to have all at the same time, but also don't have to have a commit per tagging: Just get "some" (like, however many fit on your system, possibly in smaller tranches to parallelize with the tag processing), assign the tags, and drop them -- but run everything git-annex related with `git -c annex.alwayscommit=false`. That way, your changes only go to the index, and a final `git annex merge` to commit. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…ss2n @nprofile…8j6a I've seen there's a new feature to have `compute` as a remote, this might be viable too -- declare that each of those files is a compute result of the other. (pristine-tar says hi). Still, I'd prefer an ecosystem where we don't have to go through those tricks and just occasionally nudge audio player authors to support sidecar files. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…ss2n @nprofile…8j6a `drop --unused` and then force drop them from the remotes where they used to be and then forget them. Or is there some automation for that process by now? npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…ss2n In @nprofile…8j6a 's case, the files are already in git-annex with bad metadata. A smudge/clean filter that acts on the annexed data would probably be viable, but then still needs to place the actual data (or whiteouts for to-be-deleted tags) in some sidecar file or the git-annex metadata. (I'm a big fan of git-annex, but am troubled by the metadata feature: It's one more format that is only understood by a single tool.) npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…8j6a Yes and no... they usually read tags from files, but as that's not a well usable data structure, they all build their media library in separate files anyway. Some gladly read external metadata, but sadly they don't even agree on formats there (some using m-tags, some extended m3u). npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…8j6a Ok then I phrased it badly. I never alter the binaries, I only add data in extra files that tell the next user how to use them. E.g. for photos, that means having raw files checked into git-annex; darktable then stores cropping, exposure and white balance corrections in an extra file next to it (which I add into git). I have not done this for music yet, but do plan to make my music player (mpd) look at the same kind of extra files (and/or @nprofile…8hqs ) to create its database. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…8j6a The perspective I take there is that when binary files are checked in, they're some kind of third party artifact that's immutable (b/c had I made it, it'd be versioned notes with playing instructions precise enough for reproducible builds, amirite?); own statements on how to best use them then go to versioned sidecar files. I've done this for photos, but sadly don't have a workflow to share for music yet. (But minimally for films, there it looks like this: <https://gitlab.com/chrysn/films-metadata>) npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn Don't trust security check websites. I just went through 10 online #TLS checkers from <https://techarry.com/top-ssl-tls-testing-tools-open-source-online-scanners/>, and only 2 of them (<https://testtls.com/> and <https://www.ssllabs.com/ssltest/>) even managed to scan the #IPv6-only site I was scanning. For all the others: How do you expect to run a comprehensive test when you can't even resolve half the addresses? npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn Die @nprofile…xpk0 sind übrigens auch hier. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn Spring at the stable: plants out of muzzles' reach grow undisturbed. #plant #photography #haiku https://assets.chaos.social/media_attachments/files/114/386/497/151/666/180/original/ee61324293a51976.jpg https://assets.chaos.social/media_attachments/files/114/386/497/765/015/057/original/801ea628ad4c2556.jpg https://assets.chaos.social/media_attachments/files/114/386/498/465/290/637/original/80ae35332db588c2.jpg https://assets.chaos.social/media_attachments/files/114/386/499/115/208/275/original/05560a664029312c.jpg npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…qfh3 This is not specific to Python: it's the same in Rust and general mathematics. all(empty) is true and any(empty) is false. This aligns well both with implementations (a la `for item in iterator: if item: return false` and eventually return true) and with the definition (there is not a single element in there that is false, so the result must be true). npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn Nice new milestone for #embedded #Rust development: defmt 1.0 has been released. The crate enables logging for microcontrollers without text or number formatting on the device – instead, the device sends numbers of interned strings to the host, which composes log messages. 1.0 is not only a stable release, but also enables logging #CBOR data into diagnostic notation on the host. #RustLang npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…ndcz Weird recommendation, but OK. Convinced me to watch it. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…cwcm Viel Spaß! Ich bin diesmal nicht dabei, aber die Freunde und Kollegen von @nprofile…drvc und @nprofile…86am halten die Stellung für embedded-Systeme. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…zfuh Ooh, turtle, my favorite RDF serialization 😻 Technically, RFCXML supports internal links with arbitrary text; maybe I should just give it a try and spread as many links as I'd usually do in hypertext, and see if anyone complains. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…zfuh IIUC, the rationale is faithful rendition (the HTML form was not the "official" form). But the effect applies to the HTMLized versions of older documents. Newer documents (eg. https://www.rfc-editor.org/rfc/rfc9528.html) have a first-class HTML form that does not suffer from this, and in those documents there are no page breaks any more even in the text version either. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…8j6a Kind of yes, but what would that mean for my vim modelines? npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @nprofile…wwe7 Just spitballing: trait TypedDaemon<T> { fn input(&mut self, id: usize, data: T); // etc, with some fns not carrying T } and there is struct MessageSerializer<D> { daemon: D, active_typed: HashMap<usize, std::any::TypeId>, } impl<D, T: Ser+De> TypedDaemon<T> for MessageSerializer<D> { fn connect(&mut self, id: usize) -> { self.active_typed.insert(id).expect_none(); } } npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn A good 8-minute summary of the #SIGINT situation in #Vienna, based on @nprofile…x7ar's investigation, has been published by @nprofile…l8jc (a journal affiliated with the Austrian NEOS party): https://www.youtube.com/watch?v=CddUToKXZJ8 npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @npub16mt…pnwy Not arbitrary code, but OpenSCAD does load files from different formats with more focus on compatibility than security, and >20 open issues around segfaults. Not a bad situation for a program that is usually run with trusted input, but I'd guess that all that keeps this from being exploited in a thumbnailer is lack of install base. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @npub16mt…pnwy and the security implications of this are why we can't have nice things :-( npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @npub1hg2…k372 I think it's a good question. If nothing else, it shows other potential contributors how that project is being developed. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @npub1nlt…t44t @npub1ynl…873s @npub1adl…7nuk There was a good session during #IETF 113 on this, that showed one agreement across the technical community: Guardian controlled devices are the only way to exclude kids from content the guardians don't want them to see. Video at https://youtu.be/tHbIaQG_UFs?feature=shared&t=867, minutes & slides on https://datatracker.ietf.org/meeting/113/session/secdispatch/ (presentation named "Encrypted Client Hello Deployment Considerations") npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn The new match rules of #OpenSSH 9.4 look like they'll finally let me use jump hosts only on demand: A `!localnetwork=2000::/3` condition on the ProxyJump directive for an #IPv6-only host should make direct connections used as long as I'm on a real network, and send data through a gateway on demand. I'll try it out as soon as it's available on my system. npub1fwh05jl2ya7xf0wdur38h7zyts272jnfyn6f22an9622wcxe86esqqnhyf chrysn @npub1evu…uf5t @npub1llz…08cq I think my #IETF work could be eligible, but the scope is unclear to me -- on the one hand the type-of-contributions description reads like the "boring" everyday stuff (WG chairing, reviewing documents) is part of the plan, but the application form looks very project centric, as do the times (the "long term" parts are 6mo; that'd have worked for most of RFC9290, but that was the fastest doc I ever contributed to). Can you help me reconcile those?