jack: (Default)
Swam 2mi downstream from Grantchester to the rollers. That's half a mile further than I did to the canoe club at the Slow Swim.

I was out of practice, muscles were v tired but it was v nice to do. I could have gone farther with another little sit down.

I'd been interested to see if I could do that last stretch into town. It's not really good swimming, more punts and more concrete edges, but it was easy to do. I hadn't realised it was only half a mile.

I have previously swum down from Hauxton Mill to Byron's Pool, and Byron's pool to Grantchester. I guess that adds up to 4.5mi of Granta and Cam, compared to ~20mi length of the Cam (excluding the Great Ouse below the Little Ouse and the Granta above Hauxton Mill)
jack: (Default)
Hm. I'm still not sure about writing `2.` but if you have to use floats then I think I came around to preferring to write `2.0` over writing `2`.
jack: (Default)
Hook

Weather-beaten fighter Ludari is still seeking his home city, the legendary first city Uru, which was mysteriously lost to the timeline, accompanied by the happy-go-lucky carnival rogue Slide and grizzled leather-studded anarchist bard Scunt. Their friend and intermittent adventuring companion prehistoric dinosaur ranger Lucy Dikenesh told Ludari that her BiL heard some sort of rumour of an even older city reminiscent of Uru, and Ludari insists this is a good time to visit Lucy's family, even though Lucy begs off.
 
But when they arrive in the jungle near Lucy's family's village, they immediately meet Lucy's sister, one of the young elders of the tribe, who implores their help. Her sweetheart and babydaddy (but not coparent) Maku has disappeared on a recent hunt, can they find him?

Challenges

The jungle has many dangers from poisonous plants, roving dinosaurs, and capricious spirits. The village have a traditional song, recorded in knotted-cord writing often carried like rosaries, recounting the main survival prohibitions. Lucy tries to drill the song into Ludari and Slide, but Scunt takes the "remember the warnings" challenge and runs with it, coining the punk power ballard version "♫ DO NOT EAT THE BERRIES ♫" which becomes a complete hit amongst the party and later the village.

The party lament the absence of their ranger friend who has the only survival skill above 2 and knows the village members well, but they lean on their social skills, common sense, and physically restraining Scunt from provoking village members, spirits and dinosaurs from attacking her to successfully navigate deeper into village territory, avoiding threats more serious than a pile of sleeping rainbow feathered foot-tall cute therapods (their similarly-sized cousins amplify the cuteness with a mesmerising gaze, as do their larger cousins).

The Plot Complications

The party unravel the story of Maku Guphin. He led an important hunt to try to alleviate the last few years' lean hunting, which was ruined by a young overearger hunter called Twinnech. Maku and Twinnech were hunt-lovers and Maku offered himself for judgement to the village's protector spirit the Spindlebeast, to save Twinnech from doing the same.

The party explore options, considering alternative sacrifices, and have a horrific realisation. The Spindlebeast likes sacrifices with meat but also magical reagents. They're familiar with the rainbow mesmerising dinosaurs. They have a familiar for scouting, they have detect magic, they have a variety of skills which complement the local hunters and could make a significant addition to the village's hunt, with more than enough to offer as sacrifice.

But neither the GM nor the players had expected the session to bring in "the party need to kill the cute animals", so that's a new experience for us all! I would never have made them do that on purpose, but when the players found the proposal it seemed inevitable, and we all agreed, the dinosaurs are hunted anyway, it's silly to pretend they're not, and better to save the human.

The Finale

The players rush through a frantic day of hunting, expedited by rapid-resolving a lot of attempts with one or two summary rolls without playing out the "So we have a big sack, the prey are over there, is this going to work...?" They sneak back to the shrine just before dusk when the hunters have left and supplicate the Spindlebeast for Maku's return.

Ludari leads the braveness charge in putting himself forward for judgement for the proposal. The Spindlebeast expresses its frustration at the lean hunting and Maku's stubbornness, but accepts their offering. There is much partying and singing back in the village, and new songs and clues to bring to future sessions.
jack: (Default)
Question on Reddit, "Can you take your hairdresser/barber license to another country?"

Answer, "No, other countries than the US don't require hairdressers/barbers to be licensed."

UK does often require the shop to get a licence from the local council, so it can be inspected for health safety. There's probably other details I don't know.

But it's a reminder to look at what other countries do and see if it's better or worse. Sometimes it's better -- I like British plugs for preventing accidental electrocution. But if you say "we have to do X else Y" and no-one else does X and don't have any more difficulty with Y then maybe you can just not bother and it will be ok.

Sometimes I'm seized with doubt. Can people just do this without needing any permission? But often, yes, there's been no need to regulate it so you just can unless it's banned.
jack: (Default)
Stupid tech questions.

At work the source tree has a bunch of different components. A couple are "big" like the FPGA image, and the whole device image which includes that, plus a linux distro which includes some of the other components as well. The other components are mostly "small", small individual C/C++ programs or python packages.

The small components are mostly managed by conan package manager. This is ever so useful for assuring that each explicitly lists its dependencies and doesn't just depend on lots of header and source files from elsewhere in the source tree. But we are not using most of the functionality of a package manager -- everything in the source tree is assumed to be compatible, nothing depends on an earlier version of anything else or anything.

In effect the package management (a) is an easy way to install the latest thing on a different computer, as is done during the automated tests which interface with real hardware and (b) a convenient way of caching results between different builds. This doesn't matter that much for most of the components which use the package manager, but does matter for the FPGA image which takes 40 minutes to build, and is usually downloaded from jenkins rather than built fresh.

What I don't like is that there's no way to say "build everything necessary". You need to know all the individual components to build, or the sequence of jenkins jobs to trigger. And as there have been more added, I think it's got less convenient to build all the ones which could have been affected by a change, and to make sure you haven't missed any.

The other concern is that at the moment, "packages" built locally or from main are usually identified by a "release" number, but that is not always different. Whereas other builds identify packages by a git hash, which we would like to use in more places, but doesn't make it clear which is "the latest".

This is not all how we want it to be! It was put together for valid reasons but not planned in advance.

What I want is... a way of building all the different components that need to be built. With some (but not necessarily conmplete) ability to figure out prerequisites, or "which things have changed". Which is effectively... a build system. It feels like it should be obvious what build system to use, but I'm not finding it obvious yet!

Like, that could be make. But one requirement is that it's easy to say "the linux/windows version of this python package depends on the linux/windows version of this C++ package" and "the fragle configuration of the device image depends on the blah configuration of the fpga" and Make doesn't easily support that sort of parameterised target. I think?

I could write a simple script to "build everything". I quite like that. But... surely writing a NEW build system isn't correct?

We could use one of the systems we have, like conan. But conan seems optimised to be a package manager installing prerequisites, not "rebuilding these directories". Bitbake seems very well designed for this but is designed for building embedded linux systems and is probably more heavyweight than we want. And atm each component is built from some command line, we don't really want conan build system invoking other conan build systems.

It might be simpler if we moved away from the packaging and used an old school "The outputs are HERE in the source tree. You use the ones in the source tree and build them if necessary." But I'm not sure.

There's a bunch of ways which would be fine but maybe not great. It feels like there must be some standard answer but I'm not sure what it is. Thoughts?
jack: (Default)
I've been learning rust by writing a simple tile-based puzzle game. To my immense pleasure, the simple game engine I was using, Macroquad, made it mostly easy to put the existing game on a website (as well as on linux, windows, and android, not all tried out.) So far there's no actual puzzles, but I really like the fish I drew (the crab is not mine).

Play online at:

https://cartesiandaemon.github.io/rusttilegame/tilegame.html

It runs on mobile browser, but it's a lot easier to control on a desktop browser. If you have a keyboard, control the crab with the arrow keys and try to get to the exit. You can also click/press the top part of the screen to move up, etc.

Rust (an an extra decade or so of experience) has been great for "if it compiles, it probably works"!

PS. See source on github: https://github.com/CartesianDaemon/rusttilegame
jack: (Default)
Acts 10-11

God: *shows Peter a vision of tasty animals*
Peter:
God: Eat!
Peter:
God: EAT!
Peter: God, what can you be trying to tell me?
God: *deep breath*

God: OK, here's *another* miracle.
God: *concentrates* I'm here to tell you... some men just arrived at your front door.
God: (helpfully) They're about to knock!

Apostles: Peter, is it true that you went to eat treif from a centurion's kitchen?
Peter: (quickly) God told me to do it.

Acts 11

Ex-Jerusalemite Jew: I was driven from Jerusalem by Saul's persection.
Ex-Jerusalemite Jew: He tortured Stephen to death.
Ex-Jerusalemite Jew: ...
Ex-Jerusalemite Jew: BUT HAVE YOU HEARD THE GOOD NEWS ABOUT JESUS!!?

Antioch Gentile: Pick me! Pick me!

Barnabus: Hi!
Antioch Christian: Hi!
Barnabus: Oh, you're not Jewish?
Barnabus: Well, I guess that's ok too.
Barnabus: Pretty good in fact.
Barnabus: Sorry I kind of hesitated there. At least I didn't need a divine revelation or something to get the point across, ha ha, right?

Barnabus: Would you like *some* more theological instruction?
Antioch Christian: Oh, yes please.
Barnabus: I know a guy.
Antioch Christians: Please, anyone. Well, as long as it's not Saul or someone.
Barnabus:
Barnabus: Let's go with "Paul".

Acts 12

Herod: *Executes some people*
Herod: *Looks around gauging the applause like a contestant on The Price is Right*
Herod: Lets arrest... Peter!

Peter: Hi.
Prisoner: That's a LOT of chains.
Peter: Yes.
Peter: It's ok. I'm going to pray to get out of here.
Prisoner: Good luck with that.
Peter:

Angel: Psst!
Angel: I'm here to break you out.
Angel: But put some clothes on, man!

Peter: What is going on?
Angel: You really need supernatural beings to spell things out to you in a lot of detail, don't you?

Peter: *narrates his escape*

Peter: Guess who's back!
Mary: It can't be him.
Peter: Don't piss about, Mary. Let me in quick before the soldiers come back.

Peter: Well, I guess it would only take one more thing to make today perfect.
Herod: *is eaten by worms*
jack: (Default)
Watching Star Wars Ashoka series. She's the jedi with three red head tentacles. I didn't know anything about her before. It's pretty decent.

The characters are decent. She parries a space fighter!! The space whales are cool. The villains are decent. The callbacks to Anakin work surprisingly well. The plot involves Thrawn who I know lots of people love.

Worldcon

Aug. 4th, 2024 12:40 pm
jack: (Default)
We are going to Worlcon in person in Glasgow. Travelling up Thursday, and there for most of the day on Monday.

I know of quite a few of you going, but who else is going? Are there any particular panels it would be good for me to consider going to?
jack: (Default)
A little while ago I was reminded that in the Jesus-sponsored version of the afterlife people "die, wait for judgement day, be sent to eternal life or to eternal fire" (despite the common expectation of going to heaven or hell immediately).

I thought I had understood that (with some variation like whether "eternal life" is heaven or messiah-perfected-earth or something else, or whether eternal fire is eternal punishment or not). And separating out what Jesus' listeners would have thought from how people interpret Jesus nowadays.

But this week I was suddenly reminded of the harrowing of hell. If you believe in that, and Jesus descended into the underworld and released some of the people there, where did they GO after getting released? Did they get fast tracked to heaven but everyone else still has to wait for the end of time? Did they go straight to heaven but heaven exists outside time so everyone who goes to heaven ever have always been up there?

Wikipedia thinks that it was common for Jesus' contemporaries to believe in a greek-underworld-like afterlife (Sheol) which is mentioned in the torah but wasn't the official belief of priests or rabbis at the time. If so the story may be, "Jesus let good people out of Sheol and into heaven". And that Jesus was describing an end-of-time judgement, but that belief about where people were in the meantime was ambiguous, perhaps previously assumed to be sheol, but now more interpretations like "nothing" and "purgatory" were starting to occur and be debated in Christianity?
jack: (Default)
Finally put some of my bashrc and git aliases in a private GitHub repo.

Most recent tweaks:

"g a" for "git add ." and "g a xxxx yyyy" for "git add xxxx yyyy"

"g s" shows staged changes and unstaged changes, in git diff --stat format. (Green/red for changes and blue/magenta for staged! :))

I just now twigged that I could write a "git-a" script to get that effect, without merging bash aliases and got aliases so much.
jack: (Default)
I did some experimenting with rust macros. The idea is to make a rich assert that displays the values of any variables and expressions used in the assert condition (with some useful default omitting redundant ones).

It looks like writing this in the source:


...
rsst!( two.pow(2+3+5)+1 == 1025 ); // Passes. Execution continues.
rsst!( two.pow(2+3+5)+1 == 1023 ); // Panics. See below.


And getting this output:


$ cargo run
...
Assertion failed: two.pow(2+3+5)+1 == 1023
two.pow(2 + 3 + 5) + 1: 1025
two.pow(2 + 3 + 5): 1024
two: 2
2 + 3 + 5: 10


There's more info including functioning examples at https://github.com/CartesianDaemon/assrt

It was interesting to learn what was possible. As people intimated, rust macros were very powerful and flexible, but very hard to write.

I know this will probably never go anywhere from here, but I wanted to try what it looked like. I assume the same functionality exists, although I didn't find it immediately. I didn't try to publish the crate yet because it's not really functional, although I'll see if it works in my projects.

I am curious how much people think that's cool, how much people think that's pointless, and how much people think that's horrific. I always thought Catch.hpp which includes a similar thing in C++ using macros with horrific class magic hidden inside was really useful because it's presumably horrific to write the library, but perfectly seamless to use the library.

I followed tradition and hesitated a lot over choosing any names. I wanted something that looked like "assert" but wasn't taken. Knowing people may take objection I seriously considered "asst" or something else with "ass" centrally. For now it's "assrt" for the crate and "rsst" or "csst" for the macros.
jack: (Default)
I wanted to learn some rust and started using it for a small hobby project, a tile-based computer game.

My natural inclination is very much towards what C++ and rust are trying to do, of creating a language which has good abstractions, but which compiles to something that runs efficiently and detects broken code at compile time, so I was interested to see what was the same and what was different.

These are my random impressions based on a short dive:

SPECIFIC OBSERVATIONS: ERROR PROPAGATION

Read more... )
jack: (Default)
A Passover Seder is a ceremony built around a meal to commemorate the exodus from Egypt. It's traditionally the time of year for a big family gathering. Religious jews usually also have a community Seder on the second night of passover. I've only really been to seders with Rachel in a generally observant-reform-ashkenazi tradition so this won't be the same in all families.

In our family, there's typically an hour or two of ceremony, a large meal, some more ceremony, and fun singing (with animal noises). A bit longer at Rachel's birth family, a bit shorter at polycule Seder. The tone is a little bit serious but also gregarious and fun. Many families have smaller or token amount of service.

A big purpose of a seder is to show traditions to children and to guests, and guests invited and children running around is actively good, not an imposition. People will explain lots of things but but, everyone will muddle through following whatever they can manage, there's almost nothing where it matters to get it right, you just move on anyway.

Random background: Read more... )
jack: (Default)
Continued recap. Last time covered ancient events about the resurrection, and status quo of the empire in the 10,000 years since. This time covers the events from the last generation or so leading up to the books. Next time will discuss events during Gideon's lifetime.

I think the two bits I wished were book series in their own right were the swashbuckling emotional drama of John and the lyctors flirting and feuding with each other during their immortality, and Gideon and Harrowhark's emotionally charged feuding as teens. I guess being of Tumblr, Tamsin Muir knows that everyone can fill in those parts, and skipped to writing the "ok, after the necromancer relationship anime got SERIOUS" part :)

Massive spoilers for everything )

As always I probably got some parts wrong. There's probably a few things which the books gestured towards which don't fit together perfectly too, which always makes it hard to be sure when you've read too much into it and when not.

If you're interested in other summaries, it's worth checking out someone's timeline: https://darkveracity.tumblr.com/post/638331299048849408/presenting-the-complete-locked-tomb-timeline and reading the fandom wiki for some of the most notable characters https://thelockedtomb.fandom.com/wiki/John_Gaius. I didn't find anywhere with a good list of "Unanswered questions and most likely answers" like there used to be for Wheel and Time and Name of the Wind, but browsing the entries reminded me of most of the confusing clues.
jack: (Default)
The actual plot is really really cool but impossible to understand at first. I got sucked into trying to summarise the most important or cool points as they happened rather than as they were told in obscure hints and flashbacks. Part one of um several.

Massive spoilers for everything )

I tried to stick with what was fairly clearly implied but I've probably remembered a few points completely wrongly, do check me on anything which doesn't sound right.
jack: (Default)
Question 1

You have a graph on an even number P people where each node has E=3 edges connected to it. You colour in one edge. Then you colour in another edge such that each person has at most one coloured edge, aka not touching a previous coloured edge (without planning ahead). You keep doing this as long as you can.

I think for some graphs (e.g. 4 people, or 6 people each connected to the adjacent people and the opposite person) you are guaranteed to be able to colour P/2 edges so that each person touches exactly one coloured edge, whatever your early choices were. Whereas for other graphs (e.g. the corners of a triangular prism?) you can end up in a "dead end" where you've coloured two edges and then the two people left over with no coloured edge have no edge between them to colour.

Is there a description of which graphs guarantee and which don't? What about if E=2 (probably usually not guaranteed?). Or E=4?

Question 2

You have a graph with even P nodes each with E=3 edges. There are A=3 acts. In the first, you colour P/2 non-touching edges. In the second you colour P/2 non-touching edges, not colouring edges that were coloured in act 1 (without planning ahead to act 3). In the third act, you also try to colour P/2 non-touching edges that weren't coloured in acts 1 or 2. Are there graphs where if you colour the edges one at a time you're guaranteed to fill in all the edges without discovering you need to backtrack?

What about for different values of E and A? If E is greater than A? If E is ALL the possible edges then it's always possible, but for values less than that?

Question 3

You have a graph with even P nodes each with E=3 edges. There are A=3 acts. In the first, you colour P/2 non-touching edges with +1, 0 or -1. In the second you colour P/2 non-touching edges, not colouring edges that were coloured in act 1, with +1, 0 or -1 (without planning ahead to act 3). In the third act, you also try to colour P/2 non-touching edges that weren't coloured in acts 1 or 2, also with +1, 0 or -1, but try to ensure that three values each node touches sum to 0. Are there graphs that guarantee that's possible in act 3, regardless of what you did in acts 1 and 2?

What if you had E=4 and coloured +1 or -1?
jack: (Default)
Changed fuse in car for first time ever. It was surprisingly straightforward!

Active Recent Entries