Sitting in a security training for work, presenter had a slide with a letter he'd received, with his address blurred out. So I DM'd him (a hash of) his own address, because how can I resist that challenge?
Protip: you also have to censor the barcode under it. https://en.wikipedia.org/wiki/Intelligent_Mail_barcode
tonight's #metalworking adventure: needing some parts with 10mm holes in them and realizing I do not have a single tool that can make 10mm holes.
I don't have anywhere near a full set of metric drills (but I should), and definitely don't have anywhere near this size, so on to the inchy drills: 1/2in is too big, 3/8in is too small, but it's ~9.5mm so what if I do that and then widen it a bit with a boring bar on the la-- nope, boring bar is more than 10mm wide. So I wound up doing a ridiculous thing involving rolled up bits of coarse sandpaper.
One day I will amass enough tools to not have this problem anymore.
I suspect the answer is no, because asking every host to implement both USB and PCIe seems more reasonable than asking every card to implement them.
Why are specs hidden behind paywalls D: I just want the answer to one silly question, I don't want to form a corporation and join the PCI-SIG because that sounds both expensive and exhausting.
Anyway, M.2 has a bunch of unrelated protocols stuffed into one connector. Is the host required to implement all of them, or can it just say "nope, I'm a tiny microcontroller pretending to be a computer, I speak USB and I will ignore anything on the PCIe lanes"?
Mostly. Probably still *should* quote everything like it's JSON, otherwise you'll still eventually get bitten by the thing where `yes: no` parses as `{ "true": false }`.
classism; conferences are actively bad
Since this is on my mind now: in-person conferences are inherently classist and no amount of ~ inclusiveness ~ will change that. All the attendees are going to be people who can afford to travel (or whose employers will sponsor it, which is so correlated that it's not worth considering separately).
No, having an in-person conference and posting videos online doesn't count, because I know your next thing is going to be "but networking~" and that's just you admitting you want to meet fellow well-off people with the explicit goal of giving each other preferential treatment in the future. If you were doing it for the inclusiveness you'd just skip the conference part and post the thing online.
carbon emissions, and humans utterly failing at reducing them
https://www.ietf.org/blog/towards-a-net-zero-ietf/
So the IETF, the people who handle internet standards and stuff, are thinking about how to offset the carbon emissions from people flying to their meetings.
It'd be really neat if the *Internet* Engineering Task Force had some sort of thing to communicate without flying to other places. Like, a global communication network of some sort. Someone should go build that.
I'll probably just slap the CNC spindle on it and move on, and just deal with not being able to use any tools bigger than a 1/4in shaft, and upgrade to a Real Mill one day when I have a garage workshop and not a basement workshop. (The machines I would want to upgrade to are also machines I do not want to try to carry down the stairs.)
I am still curious what went wrong with this one, though. There are entirely too many concentric bearings in there to have that much runout.
javascript: the cursed language that keeps on giving
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test
> JavaScript RegExp objects are stateful when they have the global or sticky flags set (e.g., /foo/g or /foo/y). They store a lastIndex from the previous match. Using this internally, test() can be used to iterate over multiple matches in a string of text (with capture groups).
Which means that if you do normal programmer things like putting `const regex = /.../g;` above several functions that use the same constant regex, you get this Extremely Useful and Exciting Behavior:
```
> re = /maybe/g
/maybe/g
> re.test('maybe')
true
> re.test('maybe')
false
> re.test('maybe')
true
> re.test('maybe')
false
```
ranting about chess turn-sequencing terminology
"A move" referring to two pieces being moved is particularly egregious, because it is also used to refer to specific individual piece movements ("1. Qxd8 is an illegal move").
ranting about chess turn-sequencing terminology
So in #chess, "a turn" and "a move" are the same thing, and refer to *both* players moving a piece each. The numbers in front of written moves are turn numbers; "1. e4 e5" is one turn. Okay.
A single player moving a piece is a ply, or a half-turn, or a half-move. In practice I have never heard anyone say these. People say "your turn" because that is a normal and sensical thing to say. If I told someone it was their ply they would probably look at me weird.
So "a turn" consists of "white's turn" followed by "black's turn".
In practice, this isn't so bad, because context.
But it gets harder when you've constructed a weird extended turn system and you need to describe it for players and phrases like "every n turns" are unclear because that might be "every n turns" or "every n/2 turns" or "every n*2 turns".
Chess's "can't make any move that results in your king being in check" rule is surprisingly hard to implement.
As far as I can tell, to generate the list of valid moves for a piece, you kind of have to just clone the board a bunch of times, make each potential move, and then check for check on the resulting board state.
The obvious optimization (don't *clone* the board, just check if the target square is under attack) does not work because the king itself may be in the way (consider e.g. rook on a1, king on b1, Kc1 is not legal even though the rook currently can't get there).
I make computers go beep boop and tools go spinny. Expert cat petter. Trans woman, she/they.
You can boost/favorite/otherwise interact with my posts. If I didn't want it to be public I wouldn't have posted it on a public thing.
PGP key: https://uni.horse/contact.html