jack: (Default)
I reread Gideon the Ninth and half way through Harrow the Ninth. I posted a lot of recap and musings on Facebook:

https://facebook.com/story.php?story_fbid=10104135617416710&id=36912084

Should be public to everyone, but you can always comment here if you don't use Facebook
jack: (Default)
I never got around to talking about what my current work do: http://undo.io There was some previous discussion on the topic on facebook: https://www.facebook.com/jack.vickeridge/posts/10103938681712440

What is a Time Travel Debugger

It records everything that happens in a program's execution, so you can step backwards as well as forwards, or rewind execution and then replay it again more carefully. Or you can "replay" it backward, e.g. going to the end of time, seeing your program crashed with a null pointer and then setting a watchpoint on that pointer and reverse-continuing until you find out where the pointer was set to that value.

There's two main modes of use, using it like a debugger sitting in front of a program, or using a companion recorder (which is actually an executable with much of the same code but packaged differently) to record your program in your overnight test suite, or running to replicate a bug that happens in a very long running process. Then once you've reproduced the bug once, you've almost finished, you can just load up the recording and step forward and back in a debugger until you figure out what went wrong.

That sounds impossible!

Yes, it does sound impossible, but it works.

It records literally everything the program does that interacts with the outside world in any way, e.g. any system call (including any file access, network access, gettime, even getpid, etc, etc), any instructions which write to shared memory, etc. That can get large for some programs (but customers do use it successfully!)

It saves a snapshot at several points during history (by forking the process there), so it can create the state of any point in history by forking another process from that snapshot, and playing it forward using the saved events instead of actually doing any of the things that interact with the outside world.

It does all this by rewriting the compiled program in memory, and maintaining a mapping between the rewritten memory and the original assembly. So you the user see the original source code and original assembly, with whatever level of debug info you originally compiled the program with. But behind the scenes, almost any non-trivial instruction is rewritten to do something else, to either to save the result of the instruction in the event log, or to replay the value from the event log.

That means that you can attach it to any program, compiled any way, just like any debugger can. You don't need to compile it with some magic -- people keep expecting this, and it could have been written that way, but instead, you can just connect it to any program you could attach gdb to.

Caveats

Recording multiple threads is slow, and recording multiple processes doesn't exist yet. We're working on it, but right now can help with some multithreading bugs but can't help with others.

Program execution is slower, between 2x and 10x. We are working to improve that. Replaying through execution can be faster than that (and you can usually go directly to the beginning, end, etc without any replaying).

This is all on linux only.

The interface and implementation is based on the gdb forntend/gdb server protocol. So by default it looks like debugging with gdb but with "reverse-next" as well as "next". And it works with any program which uses gdb backend, e.g. visual code, emacs, although some of those are tested extensively and some aren't.

But no linux debugger has a very good UI, so currently it is mainly used by people who have to debug using something like gdb anyway, but want to be able to solve harder bugs quicker. We are trying hard to make it easy for languages like python and java where the translation has to understand an interpreter as well as the code. This works in the sense that it can be recorded and replayed, but getting a good user experience is a lot harder.

Worth and Price

I always describe it as, the difference between "not having a debugger" and "having a debugger". If you have a debugger, maybe actually 90% of problems you can solve with print statements. But the 10% that you can't fix with print statements could take months to solve without a debugger, or hours with a debugger. It's hard to describe why you need a debugger to someone who hasn't tried using one. But almost no-one would go back to not having one.

A time travel debugger makes trivial the small proportion of issues that still feel impossible even with a debugger. You say, "yes, it fails intermittently but we don't know if we'll ever track it down unless someone wants to study the failure for nine months", but that might be only hours with the right tool.

Unfortunately, this tool takes a large amount of programmer effort to create, and is only viable if it's sold commercially. If you view it as "The 5% of bugs we have that take 9 months to track down, instead get solved in a few hours", you compare the cost to the salary for an extra programmer or two, it's very reasonable. But most people including me hate paying for tools, so it's hard to sell.

It has a great retention rate -- any companies which have subscribed to a contract, have almost always kept it, and programmers who have used it regularly (including me) are very very eager to keep having it available.

Currently there are several introductory offers. There's an educational license which is cheaper or free. There might be an offer of free licences to the right open source project if you're interested. There's a 30 day free trial, and a personal license, in the hopes people will become converts and persuade their employer to adopt it. There is standing offer that if you have an intractable hard to reproduce bug that's you'd like to see just go away, we can arrange some sort of trial to have someone come and help capture and diagnose that bug, and see if that leads to a longer term arrangement.

Ask questions in the comments. Feel free to download the trial -- if you've used gdb, it's fairly straightfoward to try out, and it's magical to see "step back, step forward".

Or if it sounds like you might be someone who would actually benefit from acquiring a license, I can put you in touch with helpful people -- we used to focus on big clients because there was a lot of shakedown, but now it works more reliably out of the box, it's plausible for a wider spectrum of companies and people.

Swimming

Aug. 15th, 2021 09:00 pm
jack: (Default)
I went swimming again, almost all afternoon at Jesus Green Lido.

I brought my goggles and for almost the first time I've been there the water was clear enough to see a long way. It was quite magical drifting underwater -- the natural light falling down, and dozens of small leaves hanging suspended stationary in front of you like a living box of light, instead of an empty skybox.

I swam ten good strokes underwater which as much as I usually ever manage, and swam down to the deepest point a few times.

And swam a proper mile.18 lengths, 1800 yards, none of this 1600 or 1700 approximation I end up converting yards to meters and back again :)


Sunday I cycled to Upware along the (broken) cycle route 11, first time I've tried to follow a national cycle route. Description on facebook.
jack: (Default)
As often happens, a friend with experience with ADHD linked me to a quiz inspired by diagnostic questions. One question was "Do you often have difficulty completing tasks because of your own emotions" (or something like that) and I was like YES that's my entire personality. (Exaggerated for effect, that's not my only personality but it is defining a lot of my characteristic experiences.)

Another was "do you tend to give up on tasks that you find hard or confusing" and... yeah, that. Not intellectual things! But "no-one tells you what to do" things

To cut a long quiz short, I had medium levels of forgetfulness and inattention, low levels of impulsivity and forgetfulness, no developmental delays, but maxed out "Emotional Dysregulation" and "Inflexibility". So not classical ADHD but I DO fail to do things: https://www.idrlabs.com/adhd-spectrum/65-45-70-25-100-90-40/result.php

Aside

Obviously those are based on my quiz answers. Lots of the questions I yelled "COMPARED TO WHO?" and I wasn't being contrary -- genuinely the thing I want to know is, given my awareness of my own level of eg coping strategies for being late, is that typical, or high, or low?

I wasn't born knowing how much average people struggle with things! And even if you ask most people can't tell you! So went with best guesses. But assuming the "YES THAT'S ME" questions and the "I guess I do have coping strategies there" q I placed ok results prob mostly right

Continuation

My friend recommended the video "Why is it so hard to do something that should be so easy" by "How to ADHD" BY Jessica McCabe about adhd style emotional dysregulation and "climbing the wall of awful" and strategies that don't work. Short and v watchable: https://www.youtube.com/watch?app=desktop&v=Uo08uS904Rg

I don't want to be premature but that seemed to unlock answers to a lot of questions. I have a lot of friends with similar but different struggles and I seemed to fit in with them but some of my classic experiences didn't fit them and vice versa, so I didn't have a box for me

I like being in literal boxes, and I like being in metaphorical boxes when they're the right shape, but not when they're not. But this seemed right for me. Knowing seemed to help, even in a few days. And gives me an action plan. See how much knowing the things I need to watch fixes them. Possibly diagnosis helps. Possibly medicine helps.
jack: (Default)
I know I asked this before, but which of you have a decent way of crossposting posts between Twitter/Facebook/mastodon or dreamwidth? Do you have a way of crossposting friend only posts? I used to try to cross-post links but now I think cross-posting the content is easier (for micro-posts where there doesn't need to be a canonical comment section).

Ifttt is the thing that's supposed to do that but I've ended up confused whenever I try to set it up. I think the ideal design would be some input feed that everything else is crossposted from, and the crossposting relying on webforms so that it doesn't only work for services that have an existing API and willingness to let people use it. But i don't need s perfect solution, just anything that works for now

Eurovision

May. 24th, 2021 08:57 pm
jack: (Default)
Belated Eurovision reactions :)

Cyprus won on sequins.

Albania had good lyrics, all about having ruined her life and would God forgive her, shedding "tears of rust", in Albanian. But didn't easily come across if you didn't speak the language.

Israel was probably fighting uphill

Belgium hooverphonic. I loved their dark suit aesthetic. If I was choosing on looks alone they might be my favourite

More on FB: https://facebook.com/story.php?story_fbid=10104037873366570&id=36912084
jack: (Default)
Comments and photos from a short walk, connecting to the first of the walks I did this spring:

facebook.com/jack.vickeridge/albums/10104038398863470/
jack: (Default)
Photos: https://www.facebook.com/media/set/?vanity=jack.vickeridge&set=a.10104003128715130

I extended my walk with a short leg joining up Wimpole Hall to Orwell, a nearby village, which joins to another long distance trail I criss-crossed before, the Greenwich Meridian Trail (running roughly south to London).

Now, along with my short walk from Waterbeach up the river to Bottisham Lock along the Fen Rivers Way (which goes from Cambridge to King's Lynn), that joins up bits of route all the way from Bottisham Lock along the river to Cambridge, and the through Cambridge past the CMS and West Cambridge Site to Coton, and on through the villages to Wimpile Hall and thence Orwell.
jack: (Default)
I have been looking over my diary from this time last year. I wrote several entries "dear future historian" trying to capture how I felt, what I felt sure of, what I didn't know.
I'm trying not to dwell on this too much. I think I felt like if it got to the point of a national crisis it was likely to last six months to two years one way or another, which now looks pretty accurate. I deliberately didn't predict WHAT, whether we'd get a vaccine, or competent government, or quick reliable tests, or it would be awful but then mostly over.

The first week in march we knew covid was spreading in London and the government weren't taking any effective action. We were willing to travel to London but knew it would be the last time. The second week, we were judging what was safe day by day based on how far it was likely to spread. I went to the pub and gym on about Tuesday I think, but didn't on Thursday.

Read more... )
jack: (Default)
I decided that after the homebrew Turtle Archipeligo adventure I ran with the support bubble, I would next plan to run some roleplaying which requires no prep and is very much fun, impulsive and silly. And also that I could invite people to come play when I wasn't already running a long campaign :)

I want to run HONEY HEIST, a simple one-shot without a lot of rules, where you play bears who wear trench coats and big hats and badly disguise themselves as humans, and plan to steal a load of extra special honey from a honey convention. Every bear has a criminal professional, a personality, and a type of hat, each determined randomly with a d6. Every bear has only two stats: criminal (for things that are more like criminal than bear) and bear (for doing things more like bear than criminal) which go up and down over the game. It is designed to be silly and fun and encourage trying things out and not worrying about the overall success or failure of the "mission".

You can see the pdf here: https://www.docdroid.net/KJzmn5k/honey-heist-by-grant-howitt-pdf (the whole thing is two pages in a very large font) and the original author's page (with optional donation) here: https://gshowitt.itch.io/honey-heist

Is there anyone who would like to try Honey Heist over video chat?

ETA: Feel free to invite partners/housemates -- nice to play with people you know and there's little prep so it's easy to organise another session if there's accidentally too many people.
jack: (Default)
I've no idea why I'm apparently early in the queue, if my GP just had a surplus of slots, or if it's based on my weight, or something else.

But I've been saying for months not to quibble, just take what's offered, so I must just take my own medicine. On Saturday! In Barnwell.

I'll be able to do things again. At some point. Very eventually. But maybe I'll feel it's responsible to do SOME more things before that, given our current high level of caution. But eventually, public face licking parties! :)

Many condolences to people who have come up unlucky in the queue, especially people who were more vulnerable to start with. That's a lot about the national situation that should have been different. But it's still nice to celebrate some victories whether or not the best victories

I've almost forgotten how to be excited by things. I'm trying to consciously remind myself. I can't have a party (yet), but I used all caps. Non-ironically!!

Go me! Go me!
jack: (Default)
Do you like the way I said "what could still be improved", rather than "what went badly" as if doing creative things is an ongoing journey rather than a pass/fail test? I hope so because it's hard work making my brain do that, but I think the rewards are worth it.

I had to force myself to sit down and go through all the major pieces of prep I did and ask "would the session have gone as well without it" to get my list of "what went well" because my first instinct was to assume that all the things the players did awesomely would have happened anyway, even though when I looked closer, a lot of them wouldn't.

Invent not "Who Are They" But "What are They Trying to Do"

In roleplaying -- or linear narrative fiction like books, tv, computer games -- any interaction is more interesting if the participants are actually interacting. If the PCs have a clear goal for the scene which could succeed or fail. And the NPCs are not just passive, but are pushing in a direction -- be it "make the guests happy" or "make friends" or "do a street performance (without being interrupted)" or "don't let anyone past the bridge".

But I just verbalised that dichotomy now, despite reading a lot of similar advice (goals, "what's my motivation for this scene", every scene should be about resolving a conflict of potentially thwarted success, etc)

So in the past a lot of my worldbuilding was too static -- a status quo of "this person/animal/society usually does this" instead of "is currently trying to do that", like a painting instead of a "in media res". I will try to do the opposite!

And further, not just minor conflict, but I always empathise too much with NPCs, I need NPCs who want something unreasonable and aren't willing to compromise, and even NPCs who are just antagonistic, so there is significant conflict for the players to overcome!

FWIW, I think some mediums make the opposite mistake, e.g. art, fictional encyclopaedias, exploration games are much better suited to showing a snapshot than an unfolding narrative. The same applies to larger bodies of work: The Robin Hood or Arthurian legends, or the stories about a pantheon of gods usually paint a picture of what the characters are like much more than presenting a beginning-to-end story. I think Magic:The Gathering is much better suited to showing what a world IS like than by showing some great transition, and I wish they would take an approach more like greek myths and less like the MCU.

Have clear goal

Related to the above, I tried to have a clear goal "a demon has escaped from the spirit forest, find it and fix it". I even explicitly asked people to think about a few ways that scenario could end. But I think it wasn't immediate enough, and didn't build on people's existing awareness enough, so it felt very abstract and not like a clear goal.

I could have fast-forwarded to start the party in the ruin of a farmstead, with an immediate "help, help, stop it, it went that way" or similar.

Or I could have done a cut-away scene to show the spirit demon causing mayhem even if they didn't know that in character yet, so they had a strong motivation to stop it.

I tried to establish the important points by having the party encounter a lesser dangerous spirit immediately, to establish rules of "how to deal with dangerous spirits" and "what damage they could do" and that helped, but I don't think it did enough.

More minor scene-to-scene goals (e.g. convince X to let you take her boat, scale the cliffs at Y) would also give more stakes and opportunity for establishing trade-offs -- sometimes you fail that thing you wanted, without failing the whole mission, and that makes the whole thing more interesting.

Have meaningful action resolution

I hadn't realised I'd done this, but half the session was "find out about the mission, get in a boat, go there", which was great for getting people used to the setting and mechanics, but didn't have a lot of "Can I do X?" "OK, well, roll, and we'll see", simply because I tried to seed in obstacles to the campaign, but I didn't think of every interaction as one that might go either way, even when choosing an NPC's attitude differently might have turned the conversation from "she gives you a quest" to "you try to convince her you're up to it" or turned "you get in a boat" to "oh no, a character acted out one of their flaws and now the situation is harder, can you fix it?"

Timing

I knew with six people, two of whom are 9 and 12, it would be hard to fit things in, and I pared the plot down a lot to a simple "establish premise, dangerous encounter [with fish], some more role-playing to establish characters, climax confrontation", but even so, people were losing concentration after a couple of hours. So we had a good session, hopefully memorable (especially the bees and the fighting the fish), and people got used to the characters and mechanics, but I feel like I could have done better to make two hours thrilling from the start.

Cookie economy

Because there just wasn't enough difficult resolution, people had few opportunities to spend cookies, so they loved earning them, but they didn't matter often enough so there was no real chance of running out, or a sense of how close they were to losing a conflict over something. Partly, I need more opportunities to make actions that matter, maybe I need to reduce the number of cookies.

Minor bits of prep

There were lots of minor things that would have helped. I planned to use physical counters for cookies but that was a bit risky with Ms Under One's inquisitive hands around, but I think they were much less resonant when they weren't being added and spent all the time. I wished I'd had a chance to prep my helpers a bit more specifically with like, this bit could be written small, this bit could be big so everyone can see, that are automatic if you're used to running games, but you don't necessarily know if you don't.

There were a few practical inconveniences like, how do I print out a few copies of the quick start rules and make it obvious at a glance which bits of paper are duplicates and which people should try to look at both of.
jack: (Default)
I put a lot of thought into how to make a game work where there were six players who want a variety of different things. I don't usually recommend that, but I wanted to play with all the support bubble! In particular, I wanted to avoid a system like DnD that defaults to "we kill it". But I also wanted to include some conflict along the lines of combat where you have a particular ability, and you use it, and get the thrill of rolling a dice and being effective.

Map

I predicted this and I was super right, that drawing a map of the area the PCs would go to would be incredibly useful. I got a lot of "ooh, what's that" and "can we go there" which was exactly what I hoped for -- it gave the players a meaningful sense of being familiar with the islands on these specific turtles, and immediately conveyed the general "how big is this" without me having to describe it verbally.

I drew a (very provisional) sketch of the whole turtlepeligo: one big miles-long grandma turtle with the spirit forest on her back, and a dozen young-to-middle-age turtles with villages, pastures, seaweed, etc, etc. And players were immediately invested in "where do I live" "what's the turtle like on my island".

And I drew the three islands the players were likely to visit, so they could rapidly see the status quo and decide where to go. It would have been well worth drawing some of the specific locations too.

It also forced me to realise specifics about layout I might not otherwise have thought of, like "there should always be a few boats drawn up on the beach, right?"

I didn't even expect to use the maps for trying to have people move around, which I think was the right approach. The main focus was giving the PCs handles to interact with the world. Although in a scuffle I might break out a map and PC/NPC standees, not to judge exact distances, but to see "who's fighting who"

Character sheets

Read more... )
jack: (Default)
I feel really stupid that I live in a house and don't understand how to fix it (with either competence or money). But slow progress!

Dishes were clean. Bailed standing water out successfully. Unscrewed the filter drain bit at the bottom

I had the magic right size star screwdriver, so +1000 past Jack for buying a too extensive screwdriver set. Why are there so many different shapes of screw? WHY CAN'T THERE JUST BE ONE?

Took out a little basket, and some related bits. Really needed cleaning, vinegar plus soaking plus scrubbing made them a lot more palatable! That's the bit I've done before but should do more regularly

Actually those bits came out first, before I got to the screws. But once the screws are off, the larger filter drain component seems like it only comes off from underneath the dishwasher

Waggling the dishwasher out from under the counter looks possible but difficult
jack: (Default)
Me: Time to get things done.
My brain: Ooh, lets write a story where Tony Stark teases Bruce Banner about the six snakes he had to fight for theses defence.
Me: Exactly! Thank you, that's what I'm talking about.
jack: (Default)

Alpacaoids at Coton!

Went for a muddy walk :) Think I went that way decades ago when it was a footpath behind the CMS, before a lot of the nice path was put in.

I cycled to West Cambridge site and walked along the cycle path bridge to Coton, dodging road works.

Near Coton church, looking very lively


Read more... )

jack: (Default)
Now I'm consuming THREE SEPARATE stories about Greek n mythology: reading Percy Jackson, playing Hades, and reading digital comic Lore Olympus. It's not as confusing as you might think! All the characters are very different in each, but that COULD be the same people seen from different perspectives
jack: (Default)
https://ourworldindata.org/covid-vaccinations

Nice to see the vaccination graph still going upwards. If that's accurate the UK is 4.5% vaccinated, rising at about 5% per month. (?) I hope we can ramp up further (we ideally need to get to like 170% or something) but that's a good start!

I know it's not meaningful but it feels nice to have numbers of people having been vaccinated starting to rival number of people who have been infected.
jack: (Default)
First good news, it looks like number of infections in UK (and London) have JUST started to fall. If so (and it's very early to be sure), that's some evidence lockdown #3 is working. I was genuinely scared it wasn't enough.

And genuinely scared that if it wasn't enough, the government would continue to double down on blaming people for exercising outside while infections climbed, and done nothing to address the most likely causes of infection (businesses and public transport where people HAVE to be indoors, but the guidance on how to minimise risks is outdated and unhelpful).

On the downside, deaths are still rising. Looks like it's worse than the first wave and hospitals will continue to struggle 🙁