Moving downwards with speed u and acceleration g, if I start thrusting with acceleration -a, how far do I travel (s) before my speed equals zero?

Then, as I'm falling I can recaculate with u = current v, and when s = current height I can turn my engine on and reach the ground when my speed is 0 (ignoring for now that my thrust changes as I use up fuel)

v² = u² + 2as
v² - u²  = 2as
(v² - u²)/2a = s
-u²/2(g-a) = s

Check that the units make sense

(ms⁻¹)²/ms⁻² = m
m²s⁻²/ms⁻² = m
m=m

Yup, that checks out. Time to give it a try.


I've picked up Kerbal again, still playing with the kOS plugin. This time, instead of going straight for orbit, I've spent a bit of time messing around with sub-orbital hops (which has got me lots of lovely science!).

I've also written a landing script that slams the engines on at just the right height to reach zero velocity at the surface. I've tasted it on Kerbin and it's looking good, next stop Mun!

However, I can't put it off any longer, next session is orbit or bust!


(The maths posted at 14:22 today works btw, it's correctly calculating the hight I need to turn my engines on at.(Which is quite scarily close to the ground, I can tell you!)


So the theory goes that it should be easier to write Lisp on the phone because it uses fewer funky characters:

(define test (+ a b))

I can see that working, although writing a formatter goes on the list.


Mal is scheme-ish, but certainly not scheme. I'm going to need to commit one way or the other fairly soon, and I'm still not sure which way to jump.

I'm much more likely to find online help for scheme. It's got it's own interpreter, it's even got a compiler!

Mal is small enough that I could write a JavaScript implementation, so I can run stuff client side. Also, because I've written the interpreter I should have a better idea what's going on (I'm not sure that I do, but I should). It's also much easier to extend (although I should look at how scheme does it).

I think I want to use mal, but I'm worried about support. It's probably close enough that I can translate, and I can change the name of some things to make it closer. I very much like the idea of client side evaluation, so I can write simple scripts on my phone (Oh, Psion, I still miss you!), although there's a bunch of saving/synchronization to think about.


Grinding through mal-js implementation, can't decide between using js objects or a bunch of classes.

JS doesn't have 'symbol' or 'keyword' separate from string, or 'vector' different from array, but I can add a type property for the times when things are different.

Writing my own types is theoretically safer, since mal code won't be calling js methods directly there's less surface area for naughy code to fall through.

Dunno. Going to sleep on it.


It's been a bit odd at work the last few days. I've ported a couple of tools from Visual Basic for Applications (VBA - Microsoft Excel macros) and powershell to modern C# (for reasons that I haven't paid a lot of attention to, but I think are related to the security people at work tightening up execution policies).

The code isn't very complex - download a few files, calculate and compare a hash, unzip them, and move then into place - but the team are all like "OMG they're so fast!"

The download/install now takes two/three minutes with a good network and fast disk, compared to maybe half an hour previously. That's a useful speed up, sure, but the amount of praise I'm getting feels very out of proportion to the amount of work it took (especially as I didn't put any thought into speed).

Husband's advice is to just accept the praise, and I'm doing my best, but I'd far prefer someone to gush over my clever stuff.

Ah, well.


I do have a couple of ideas about how I could speed up the install, but I'd have to test them to see if it's worth it.

Mostly, it's to not bother saving the zip to disk, but instead unzip the stream on the fly, teeing off the stream into the hash calculation as we go.

There are four zips, a root and then three children that unzip into a folder under the root. At the moment I'm unzipping all four each into their own folders, moving the children into place under the root, and then swapping the root info final position.

If I go for the stream unzip, then I'd skip the first step, and unzip all the files into place (so skipping one of the moves). I'm not sure how much it would save, the moves are all on the same filesystem, so should be cheap/fast (and watching the process supports this). It would also create complexity, as files from any given folder might end up in more than one of the child zips (don't ask! I tried to get some clarity on this but just got white noise) so there might be conflicts/races when creating folders.

It's a well known trope, apparently, that users really don't care about fancy coding tricks but will very much like the duck animation they get while they're waiting....


Made a couple of updates to the blog code, Google search was getting confused because all the pages link to the login page and it wasn't sure which one was "right". I've added a link header pointing at the return url, let's see if that makes it happier.

I've finished another couples of steps in mal-js, eval and environment, so (+ 1 2) now correctly evaluates to 3, and def! and let* special forms work. (I'm going to lose the funky characters once I'm done, although I could just edit the tests now. Hmm)

Using JS types directly didn't work (because a string value isn't an object, so one can't set arbitrary properties in it), so I've gone for a simple wrapper class with a (string) kind property (to tag the type) and a value property to hold a JS value.

It seems to be working so far, it's nice not to have the big stack of classes and worry if hash should extend sequence. (Having just written that, I'm idly thinking about adding an "isSeq" method, since the only difference between lists and vectors is the shape of the brackets when they're printed)

Mentally it was a rough day. I never really engaged with work (Y'know, I say that but I did deliver a product and refactored shared code into a library. I'm starting to think that my standards for 'good enough' may just be far to high. Husband, if/as/when you read this, you were right so along and I'm sorry for doubting you) and so I bailed an hour early.


Mental note: I want to post something during the good the clocks go back so I've got something with a stupid timestamp to test against.


An extra three hours at work today, investigating a problem with a service. The service is running fine, except it's looking like it's taking IIS three to four minutes to start processing the first request from a cold browser. Other requests are fine after the first one, so long as the browser stays open. There's nothing obvious in the IIS logs, other then the trace logs don't start until 3-4 minutes after netstat shows a connection.

I'm back home now, and I'm going to try to squash any more thinking about it this evening, but I'm probably going to be back in the office tomorrow. Which sucks.



Feeling better again, that was weird. Came home from the office and was wiped out by (what felt like) immune system response. I was hot, mildly confused, and aching so over. I slept for maybe 4 hours, got up, managed to get downstairs, lay on the sofa for another hour, and then just felt well again.

Two theories: I picked something up at work and my immune system did it's job, or I made myself sick at the idea of being in work. Hard to tell which it is.

Ah, well.


I haven't been using my primary laptop for maybe six months because the keyboard was broken. Yesterday, while waiting for w traffic light to change, I saw a little PC repair shop. I phoned them this morning to get a price check on taking the laptop apart enough to resit the plug at the end of the keyboard connector cable (£10-15, apparently). So I booted up the laptop to confirm the problem is still happening, and it's not?

Does this mean it's fixed? I don't think so, but I'd be very happy to be wrong so I'm going to fettle it up like it's working and use it as my primary until it starts being broken again.

This does leave me with the traditional "Windows or Linux" question, although given a hybrid Intel/Nvidia graphics card, and how well WSL2 works, the Windows option is fairly strong.


Old laptop is still working, so far so good.

I've wiped it and installed Windows 11. First impressions are that it's going to be fine, it's fairly close to Windows 10 and the differences are minor. Windows 11 feels rounder (like, all the corners have got a border radius of something), and my first impressions are probably trained by the stupid keyboard on that laptop (I paid extra for a "mechanical" keyboard, boy was I dumb).

The key spacing is different/wrong, and I'm constantly typing one character to the right of where I should be Also the Windows key doesn't work (nothing happens when I press it, haven't investigated any deeper yet), which is bloody irritating given how much I use Windows snap.

I'll clone down a couple of repos tomorrow and see how I get on.



That's mal-js finished and installed as a client side app into this site. Now to come up with a use case....

Kittens were at the vets today getting chipped and chopped (neutered). They seem to be ok so far, not very happy with the cones, but they're temporary. We've moved the screen door to keep them locked into the lounge/kitchen (with the screen door set so Storm can come and go from the rest of the house).

Teeth have settled down again, thank science for antibiotics. There was a weird lump in the roof of my mouth next to the tooth that hurt, that's also shrinking, so I guess it was related to the infection? The root cause this time was a filling that's fallen out, but the dentist will replace it free since it's under warranty.

Emotion-wise, nothing spectacular seems to be going on. I've got very little enthusiasm/engagement at work, except I'm grinding through the bit of Ocelot v2 that's replacing classic ASP (in JavaScript) with c# MVC (ish - the controllers are fairly straight ports of the JavaScript right now, I'm sitting very firmly on the urge to "improve" or even "tidy up"). So my work emotions are confused; I'd rather not be at work, except I've got this nice low-impact, fairly open-ended job to do.

Shrug. But if you come up with a use case for Mal, please do let me know.


Not sure what to do next. Mal-js is done. Webmail probably needs looking at ("Webmail always needs looking at").

Actually, let's take that one. I'm still not really happy with webmail. I want new mail notification, but without to much client side stuff.

I was idly thinking about JMAP the other day, writing a wrapper for MailKit as a start, and then maybe writing a proper server.

I could give shopping list another stab, I've got most of the components for a web based version using commands/events.

Actually, that one does grab me. I'm off to a better keyboard to think about it.


Shopping by events

Events are things that have happened, so should be in the past tense.

  • ListCreated

    • listId
    • listName
    • ownerId (maybe)
  • ListDeleted

    • listId
  • ItemCreated

    • listId
    • itemId
    • itemName
    • itemState
  • ItemUpdated

    • listId
    • itemId
    • itemName
    • itemState
  • ItemDeleted

    • listId
    • itemId

I might have been over thinking sharing. If I add an Out Of Band (OOB) portion, then it all becomes much easier.

  • User A clicks "Share List"
  • Server generates a unique id and stores it along with the list id, user id, and timestamp
  • Server gives User A a link containing the id
  • User A sends the link to user B OOB
  • User B uses the link
  • Sever uses the id to look up the list and:
    • Adds User B to the users for the list
    • Deletes the id
    • Notifies User A

Need to add user models, including a per-user notification queue.

Also need new events for ListShared (or UserAdded, can't decide which).

Also need to think about commands, since the local client can't create share links. (But most traffic from local client will still be events, as the thing will have happened by the time the server funds out about it)

Rule: The local client is the source of truth.

is there any need for lists to have a clock? Yes, need to be able to order events well enough that lists are consistent between users.


I've been thinking about writing a build-time tool to replace strings in source files (specifically to add version numbers to <script> tags, and to the load service worker call), and I've just realised that if/since I'm doing build time shenanigans anyway, I might as well do JS/CSS/HTML minification at the same time.

(I was going to say something about HTML minification being hard as it interacts with the ASP stuff, but that's what Rosyln is for, yeah?)


Hello world, Monday evening, not much to report.

Teeth are back to normal, got a sedation assessment appointment Wednesday morning, one of my filings has fallen out and needs to be replaced (under warranty!).

Work is still porting Ocelot from Asp classic to Asp core. It's going well, I'm using Selenium to write tests to properly exercise the code. Selenium is really quite neat! It's a web automation platform, which means it starts up a browser and then uses an API to control it. The tests are things like "Find the element with this css selector and then click it", which means that it's the same as a person running through a script, but faster and reproducible.

I'm very happy with it, and I'm nearly at the point where I trust it not to give me false negatives. The only issue I've got with it is that the logging could be better - I still have to load the site manually to find the underlying why a test failed (but that's probably me asking to much, it's still much faster than manually starting the site and navigating to the problem to test a fix, and it's trivial to run all the other tests at the same time)

Kittens have been neutered, they seem to be recovering well (Havok faster than Carnage, but Carnage feels a lot more delicate than Havok). Carnage peed on the stairs this morning (right in front of me, so I know it was her) (not an ideal way to wake up). I think she was a bit altered from the pain meds we'd given her yesterday. (She should have had them with food but we have them on an empty stomach), but it could have been a protest, or some other communication.

I'm doing ok, ish, maybe a little below baseline. I think I'm just feeling the weight of another 30 years of work.

Ah, well. I'm going to read my phone for a while and then sleep. Picking up my new work laptop tomorrow, that might be interesting.


I'm having a lot of fun playing with mal-js, but I need to build a better way of storing/reusing scripts than emailing them to myself. (Or I need to build an email endpoint that evaluates mal. One or the other)

Anyway:

(def! acc (fn* (fn z args) (
  if (empty? args) z
    (acc fn (fn z (first args)) (rest args))
)))

(def! range (fn* (n) (
  if (= n 0) ()
    (cons n (range (- n 1)))
)))

(def! reverse (fn* (l) (
   apply conj () l
)))

(acc str "" (reverse (range  9)))

Accumalate, generate range, and reverse (because range creates numbers in the "wrong" order). Next up is let*.


I'm updating the interface for Mal to give the user multiple open files. (Because often when I'm working on something, I need to try an idea without disrupting the current code).

I'm also debating if I should offer backend storage (instead of just local storage). It's going to be "Yes, but only if you've got an account" (so me only), and only so I can make transfers between the laptop and the phone easier. On the other hand, there's suddenly a whole bunch of concurrency stuff to think about.

I want to improve the editing experience. First up is formatting, I'm developing a set of rules to apply to an ast to get pretty output, something like "start a new indent level of the current item is a list with more than zero children that are lists". (I should write it in mal as an exercise).

Anyway, it's lunchtime at work so I'm going to get ten minutes shut eye.


Just finished watching Bullet Train, a movie recommended to me by husband as "a very [me] friendly film", and yes, they were exactly right!

Plot: Our protagonist, a former professional killer who is trying to work out some things, takes an easy pick up job, to recover a case from a train. However, several stands of fate are entwined with the case so wacky highjinks ensue.

However, that description really doesn't do justice to the complex, tightly written, and complete story that follows. It's an action movie, in that there are plenty of action scenes, but it's well paced with breathing space in the right places that didn't turn into stalls.

The effects were mostly subtle enough that I didn't see them, the direction and camerawork was just brilliant, framing shots cleanly and dropping in enough hints and pointers to let me keep up without overwhelming me or getting in the way.

I've got a couple of quibbles about some of the exterior train shots, when a 200kmh train turns a corner sharp enough to see, but I'm prepared to forgive those as they weren't relevant to the plot (and could just be edited out, probably (I'm not an expert)).

It's reset the standard for a good movie, replacing R.E.D as "best action movie I can remember watching".

Highly recommended.



I'm frustrated because I I'm having trouble choosing the "right" language to default to for projects.

The choices are:

  • C Static typing, manual memory management, complied, exemplary standard library, lots of 3rd party libraries. It's a lot of work to get started with C, but I could build up a library of useful tools.
  • C# Static typing, automatic memory management, complied, good standard library, lots of 3rd party libraries. The development environment (VS Code, or even Visual Studio) is first class, the documentation is extensive and consistent, and it's got a good crop of answers on stack overflow. Problem is, it's owned by Microsoft and while they give the tooling away, they're starting to move towards closing off important components (e.g., the c# debugger may only be used with Microsoft tooling, which includes telemetry back to Microsoft).
  • JavaScript Dynamic typing, automatic memory management, interpreted, piss poor standard library, lots of 3rd party stuff of varying code quality (but mostly mediocre at best). Every time I start something new with JavaScript it takes me a bit of time to get my JavaScript head on, but once I'm there I very much like it as a language. Using QuickJS on the server has potential, although I'd need to write a bunch of stuff (in C) to turn it into a server side environment
  • mal/lox Both of these are teaching languages, designed more to show how to implement a language than to be useful languages. Since I write them myself, they're both relatively easy to extend to match my exact needs. In the other hand, they'd both need extending to match even my minimal needs.

I dunno. I think I might be reacting against node/npm in rejecting JavaScript. There are at least a couple of fairly good looking http C server libraries that I could hook into QuickJS (or vice versa), to build a basic server. That would scratch my C itch, and give me a relatively fun place to work from.

Or I could ignore the politics and stick with C# for the scale and simplicity, except that's just making it harder to move away from C# when Microsoft does pull the rug.


Big programming win at work today, I've got Vault working with auth from k8s - meaning that apps can get all the way to runtime before finding out secrets (like their database login details).

I've got a couple more things to investigate/get working, pulling the HTTPS cert from vault, and integrating vault into the configuration system. I want to do that now, but I'm not at work? Having said that, the new work machine ("HP Elitebook") is quite nice as a laptop, so I could go grab it and mess around down here.


There's definitely something wrong with the login cookies here, although logging back in doesn't take very long.


I seem to be taking a break from my programming projects, which is fine, of course. This has been a semi-concious choice, in that I saw it coming/happening and decided to go with it.

Instead of programming I've been sinking time into sleep and games; sleep, as ever, is still brilliant (I'm getting dreams, which I'm not wild about, but they're not bad dreams, just frustrating), the game I'm playing most is "Turing Complete", which takes the player through building up a computer from NAND gates. It's a nice reminder that this whole computing thing is a whole pile of levels/abstractions over some really brute simple stuff - chip complexity is measured in transistors because that's really all you need.

(On the other hand, the abstractions get pretty far away from transistors, and even gates, fairly quickly. I'm up and running on a Turing complete CPU already, and it's made of components that are made of components that are made of gates. I should contact the author with a wishlist request to be able to flip a design back into NAND gates.)

Also, toothache is back. On the other (left hand) side of my mouth, and not really concentrated with a particular tooth, but still, ouch, and I'll go see the dentist tomorrow and hopefully get another antibiotic prescription (although there shouldn't be anything left after the last couple of courses).


It was so liberating being told that I didn't need to put a title on every (or even any) blog post. I can just write and post without needing to add a label! It's brilliant!


Back from the dentist (like, twelve hours ago). Got an abscess above one of my teeth ("upper left three") which needs a root canal (because the previous filling didn't take enough out?).

I asked why I'm getting new infections after taking two courses of anti biotics in the last month(ish), got some kind of garbled response that I'm parsing as a shrug. I'm a little annoyed, this all started about a year also when I went in with an infection, send came out with a bunch of fillings and a mild sense of shame.

For something like thirty years (from early teens to mid-forties) I didn't brush my teeth, and I had approximately zero problems during that time (maybe an infection or two over the years, but no fillings or other work). However, a couple of years back I started drinking cola for the caffeine, and eating boiled sweets for the stim/sugar, and that combination seems to have seriously damaged my teeth.

Last autumn, dentist said I had to start brushing regularly or they wouldn't do any work (and I was only in for toothache). They stuck in a big of fillings in January, a few more over summer, and I've got more work scheduled in a couple of weeks.

And I'm just passed off, yeah? My teeth were fine for actual decades without any real maintenance, and now I've got fillings (which react very badly if i touch them with a metal teaspoon), and regular tooth infections,b and I'm still brushing my teeth twice a day.

I know it's paranoid/stupid/wrong, but I can't help seeing the conflict of interest between people who are paid when my teeth just, and people who recommend teeth maintaince plans.


Otherwise, another day at work. Got Vault/asp core/certificates all working together nicely, including 30 second lifetime certificates (mostly as a stunt/for testing, but it's opened the door to 30 hour certificates, which are actually a significant security improvement).

I should look into Helm, since that's what $work want me to use, but the whole "yaml template" thing is just too terrible.

Ah, well. It's late and I should sleep. Hello anyone (still) reading, hope you're enjoying the show.


I've switched to the emails as storage plan, this entry (assuming it's saves) is the first under the new regime (all the older entries were moved over with a script).

Feeling at a bit of a loose end. I've got a kitten sat on me, which is very nice in the short term but doesn't really help me put together medium or long term goals.


Blog navigation

Definitely want 'first' and 'last' links, got plans for the archive (using the calendar widget).

Permalink pages should probably have 'previous'/'next' (or 'earlier'/'later', which might be easier to understand)

I think the "Track my reading progress" tickbox might be too big/prominent, but I don't want to hide it behind an options toggle. I could just turn tracking on globally, but I do want readers to have a choice.

There is still plenty of space in the header so I guess I just need to mess about a bit and see what works.


Ooh! I could put the "Track my position" control in the entries! Specifically, have it track alongside the current last read, so it moves as the reader scrolls.

That frees up space in the menu, and hopefully indicates what the control does ("Increases the affordance of the control", according to what I remember about UI design).


That's the archive deployed to live. Still TODO:

  • The interaction between month/year view and earlier/later is wrong, currently defaulting to days. I think I just need to check the model to see if day/month/year is null, and skip the value if it is.

    Sounds easy, but it's a bunch of typing I can't be bothered with tonight.

  • Turn track position back on. Currently disabled because I'm using the space for earlier/archive/later, will think about where it could fit.

  • Add an up to month/year link?

Anyway. Havok is back sitting on me, so it's probably time to quit for the night.


Poot, depression again. I should go feed the cats/brush my teeth/take my pills (and, crap, I forgot my 14:00 antibiotic) but instead I'm here on the sofa talking to you.

I don't even have the energy to rant properly.

On the plus side, flicking through the post archive has increased the weighting in favour of comments on posts, especially now that I've moved to a storage format that will support them.

(Either as a whole set of nested multiparts, or, more likely, a linear array of comments with references to parents that can be turned into a tree at render time).

I wonder how the bots are coping with the archive? I hope they're happy at all the new links.


I'm feeling depressed again, which is irritating since I've had a fairly good day, at least programming wise.

Hubbs and me had a small argument this morning, which is probably contributing, but otherwise it's just the same old life.

I think I've cracked service workers, at least enough for a dirt simple sleep tracker app. It's all client side JavaScript, using IndexDB for storage. At some point I'm going to need to look into data export, although the current plan for that is "Here's a csv to download".

Bollocks to it. Snack, pills, teeth, bed. See y'all later.


Practicing cooking steak as husband wants some for birthday, so we've got a couple of big chunks of fillet each. Husband is also trying tripple-cooked chips, so looking forward to those.

I forgot to pull my facebook/twitter/everyone else archives off the old machine, so I've applied for them again. I've got a better idea of how I'm going to handle facebook posts than I did before, so might get further.

From what I remember of Facebook's export format, there's a bunch of stuff that's in arrays that there's generally only one of. I'm going to use the MIME email format again,


Next project roundup

A list of potential next projects

Paint

A simple web based image manipulation tool. Operations like crop, rotate, resize. Could easily be client side with canvas doing the heavy lifting.

More about getting the UI right than anything else, although that's probably became I'm assuming that writing and composing manipulation functions is fairly easy.

Facebook import

Now under got a copy of my Facebook data I want to pull it into something that I can play with (at least enough to add to the blog).

An exercise in JSON parsing and data storage. How much of the data do I want/need to keep? What kind of access patterns am I going to have? Am I going to be able to access the data in ten years when I stumble across it again?

Server side Mal

I want to be able to make stupid toys on the site, from my phone. I could do it with HTML/JavaScript, or even C#, but typing those on the phone is irritating. Mal has much simpler syntax, and should be at least as powerful (and much more so if the rumours are true). Also, having the same client and server side scripting languages might be fun.

I did that C# version of Mal before, but I'm not happy with my choices and want to write it again, which is a bit of a job. (I could use mal-js and QuickJS, although I'd need to wrap them in a CGI interface.

Where does that leave me?

It's going to be Mal, I think. The Facebook thing needs a bit more thought (really, I need to convince myself either that SQLite is a sensible way to store data, or that it's worth my time to write a bunch of models for the data, and keep the original Facebook data), and I'm not looking forward to the UI stuff for paint (which, to be fair, is kind of a reason I should do it).

The only real problem with Mal is that, at least for the first but, one done it before and I'm not sure what I'll get out of it. Maybe I should cannibalise the existing mal-sharp code?


More projects that didn't get listed above:

Offline Blog Entries

Since the service worker stuff for the Sleep Tracker works, I should start looking at all the other phone apps that have got backed up in the queue. (See also: Shopping List below). I'd like to think that adding an offline mode to the blog would be easy, but I've got a feeling that I made the entry submission stuff far too complex (although I might be thinking of Chat).

Shopping List

The classic phone app. An opportunity to use Notifications and Push API, and a bunch of other stuff. I dunno. It's the sharing stuff (and I guess the sync stuff, although there are ways to do that).

Slow Movies

Since I've got £60 to spend for my birthday, I could buy the hardware for this and get something up and running. [Pause to check the website] Yup, within my budget


Loaded the ol' codebase into Visual Studio and ran a bunch of clean up on it. Eek. But it seems to be working.


Not a bad weekend as these things go, got done nice programming done, got a bit of sleep in, spent a bit of time with husband, played with some kittens.

Work tomorrow as usual, talking to at least one of the Dave's about the .NET template I wrote list week, maybe bang my head against Vault and local development some more.

Otherwise, next big thing is birthdays. I've booked a week off (and I need to check the dates for that) and I've got a couple of things planned (including: plenty of programming, a trip inland to get out of town, plenty of rest).

Husband has invited some old friends to visit (friends who are our age that we have known for a long time), they'll be camping out in the study over birthday weekend, so there's that. I'm fairly neutral in the whole thing, possibly because I don't really think it's going to happen. I should probably start believing it so I can get used to the idea before it happens.

However. it's late and I should do my teeth and get to bed/sleep. G'd night y'all.


Also for the Todo list: Improve the webmail parts of oauth (specifically, use the site name instead of '[somewhere]'.

I've added sunrise/sunset and moon phase to the landing page, but it's not right yet Maybe I should lose the calendar?

I think I'm also going to add weather, but in low resolution (only use the 12h data).

Work was quiet, had a bit of a chat with DW, who said nice things about my the Vault stuff I've been writing, and also reassured me about feeling embarrassed about something I haven't done (I asked for an API key months ago, and then never picked out up. I've been feeling all "argh, they're going to zap me if I follow up", but DW reminded me that a) we're all humans and b) nobody cares). Solid lad is DW.

Husband dyed my hair, it's a bit blue now (this should have been a photo, but I guess that's broken!).

Four days till birthday week!


To remember your current position in the blog, this page must store some data in this browser.

Are you OK with that?