The Doom of Decades Turn (by )

It's strange because I can see that professionally and on paper it all looks wow - our decade couldn't help but go from bad to good - we got our house and I had Mary and we found out I couldn't eat gluten not just mono grain wheat and my health improved but then Alaric went through several jobs as companies were bought up by the US and then asset stripped and Brexit vote halted investments so last in first out when money crunching happens and so on.

I hit my head and have has a string of miscarriages one of which almost carried me off with it and this last yr has seen death loom large for us as we've said goodbye to family and friends alike.

I can not help the tears that I cry on a daily basis I sometimes rail against the universe and life and existence that it should all be so damn cruel.

There is more than a whiff of political doom in the air and no matter what I tried I could do nothing to change things and worse between the racism of the loudest Leave voters and the classism of the loudest Remain voters - I feel I don't belong to either side of the rift and am just watching the hate pile on from all sides.

Our fragile Earth system has potentially reached it's tipping point with ice melt and raging fires and storms of gale strength from an ever more energetic and chaotic atmosphere. I have bought my children into this mess of a world and though I tried I don't think I've made much of a difference and have been told that everything I did do re: the upcycling etc just makes things worse.

Dad is gone, I am nearly 40 - Alaric is 40 and we are still looking at this adulting thing and and going - er?

Kind of ironic as we were both youth who were told we were too serious and needed to lighten up and not be so mature.

I want to have optimism but |I feel a snake of fear - a tyrant of pain and loathing is there on the horizon waiting to repeat history and it is vile. I can see people being diploid around me - of groups stopping talking to each other - the US and THEM is here and it is choking the future.

At least I suppose it is highly arguable that this is not the end of the decade - that is technically next year but then it is all rather arbitrary anyway.

Thoughts on Nice Clothes (by )

As I have previously opined, I like practical clothing with lots of pockets; I am generally more interested in practicality (storage capacity, comfort, keeps me warm and dry) than looks in my clothes. So where I get to choose colours or designs, I tend to go for "black" most of the time; the exception being t-shirts and hoodies, where I of course often get things with amusing cultural references or logos of things I'm proud to support. Although I'm agender, my feature-driven taste in clothing is entirely masculine because, sadly, female-gendered clothes tend to be designed for style rather than features...

However, a discussion I was tangentially involved in a while back got me thinking: if I chose to disregard practicality for some reason and wanted to choose clothes purely for what they look like, what would I want to wear?

After much deliberation, I think I like the cut of garment called a Thawb - although it took me a while to find out that's what it's called! But I'm not keen on the white ones as pictured in that Wikipedia article, I'd like a nice dark black/blue/purple one with some kind of angular pattern embroidered on it in white, silver or gold thread. Perhaps a Hilbert curve around the borders, too?

Not that I'd wear it much, mind; I only really dress up for weddings and stuff like that (The jacket I got married in is somewhat similar to a thawb, although shorter; that's served as an inspiration). Although in principle it might be kind of nice to dress up just to lounge around the house and stuff, it would be rare for me to have a day without having to go out in the rain, brave mud, cook, drill holes in walls, etc - not to mention dealing with the unexpected demands that I carry all that stuff in my pockets for!

Designing software (by )

One thing that has often annoyed me in my career as a software designer is coming into conflict with people who want me to do the worst possible job that is "just good enough".

This often comes out in statements like:

  • "There isn't time to design it properly, just hack something so we can start demoing it"
  • "We'll have to rewrite it anyway, requirements always change"
  • "Supporting more features than we need right now is a waste, add them when we need them"
  • "Can't we just do something quick and simple?"

Reading between the lines, they seem to think that "more designing" will mean more complicated software with more features, that will take more time to build.

I think the problem comes from how product management thinks of software - they want a feature, they request the engineers add it (ideally specifying the feature well enough that they actually describe what they want), they get that feature. And there's often some discussion about reducing the scope of the feature by removing some criteria to get it implemented sooner. It seems very much like "more features with more acceptance criteria equals more work".

I'd like to dispell that myth.

I assert that better-designed software.will take less time to write, and will be better due to being more flexible rather than through having more features, and through being easier to extend in future when new requirements come up.

There's a paragraph in the Scheme language standard known as the "Prime Clingerism", and it reads thus:

Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary. Scheme demonstrates that a very small number of rules for forming expressions, with no restrictions on how they are composed, suffice to form a practical and efficient programming language that is flexible enough to support most of the major programming paradigms in use today.

It has been my experience that this approach applies to all forms of software design, not just programming languages. As a software architect, I see designing a feature as more like Michelangelo making the statue of David (famously, he said that the process of making a statue is just to get a big enough block of stone, and remove all the bits of it that aren't the statue).

Rather than thinking in terms of each acceptance criterion in the specification for the feature as a thing that will have to be done separately (so more ACs means more work), I like to work the other way: what's the simplest piece of software that can do all of these things? Most problems have a "core" that it can be boiled down to, plus some "details". I try to design software that has to meet specific requirements by making the "core" with the fewest assumptions and then adding "details" to tailor it to the exact requirements - which tends to mean I can add more details later to fulfill more requirements.

An example

For instance, many years ago, I worked at a CRM SaaS company. A big part of the app was sending out HTML emails to subsets of a user's customers to offer them some special offer, serving up the images in the email from our HTTP server (and tracking who saw the email by including the email message ID and the recipient ID in the image URL), and tracking what links they clicked by replacing URLs in the email body with URLs hosted by our HTTP server that would log the email message ID and recipient ID then redirect the user.

I was given a feature request: people were occasionally forwarding the emails to their friends, and when they did so, their viewing of the email images and their clicking of links would be logged against the original recipient, as their ID was in all the URLs. Our server would see the same person viewing the email lots of times and clicking the links lots of times. Learning how users responded to these messages was a big priority for our customers (we had extensive reporting systems to analyse this data!), so they were tetchy about this, and desired the ability to put "forward to a friend" forms in the email HTML. The recipient would put their friend's email address into this form and hit a button, and our system would send a fresh copy of the email to their friend, with their own recipient ID - so our user would know the forward had happened, and could see the friends' response separately.

Now, the "simplest" solution would be to add an extra feature to our HTTP server, accepting a form submission to a URL containing the recipient and message IDs, extracting an email address from the form submission in the usual manner, creating a new recipient in the DB with the email address (or finding an existing one), recording a forward from the original recipient ID to the "friend"'s ID, and sending a copy of the email to the "friend" - then responding to the form submission with either a hardcoded thankyou page or responding with custom thankyou-page HTML uploaded by our user, or a redirect to a URL set by the user.

A quick chat with the boss revealed that being able to host custom thankyou pages was a very desirable feature, and as that would involved embedded CSS and images (and maybe javascript), I clearly needed some kind of generic user-uploaded-content HTTP serving infrastructure. So I threw that together, letting customers created websites in the application and upload files, and an HTTP server that would server resources from them with a URL containing the website ID and the path of the file "within" that website - and with the ability to tag URLs with email message and recipient IDs for tracking purposes. We already had an engine to "personalise" HTML message content for a specific recipient, which also handled modifying all the URLs to embed email message and recipient IDs, so I used that again for hosting textual content such as HTML, meaning that if a link came in from an email message with message and recipient IDs, they would be fed into all further URLs returned by the system. To prevent spoofing of the IDs in the URLs, I reused the method we used on the image and redirect server URLs: the URL itself was "signed" with a short cryptographic signature when the software generated it.

But rather than hardcoding the forward-to-a-friend feature into that, I did something that took perhaps ten minutes more programming: I allowed an arbitrary number of named "commands" to be included in a URL. The only named command I implemented was "forward" that would do the forward-to-a-friend logic (finding all form submission fields called "forward-to" and using them as recipient email addresses, so you could make forms that accepted lots of addresses; making it loop over all fields with that name rather than just looking for one was the first assumption I removed to simplify the software while making it more flexible) then proceed with handling the HTTP request in the normal way.

But when a requirement came in to support unsubscribe forms, I just added an "unsubscribe" command, which took all of five minutes. Adding an "update" command handler to let people update their details in the master DB took a little longer, just because I had to list all the supported field names in the documentation and include a more lengthy example. And then, because I'd implemented the recipient and email message IDs in the URLs as optional things from the start, adding a "subscribe" command handler that created a new recipient in the DB from scratch, along with a tweak to the UI to let the user get an anonymous URL for any file in their website took an hour or so - and meant that users could now create subscription forms and generate a URL they could publish. I think I also added a "send" command handler to send a copy of a specific email message to the recipient ID in the tracking context; as the "subscribe" command put the new recipient's ID in the tracking context, a URL with a "subscribe" command followed by a "send-" command would handle a subscription and then send a welcome email to the new subscriber...

I added a few other command types that did various other things in the system, and all was good.

Now, I didn't "set out" to design an "overcomplicated super-flexible" HTTP server system that could do all these things when I was asked to add the forward-to-a-friend system. I just spotted that the following assumptions would be really easy to NOT bake into the core of the implementation:

  • Forward to a friend is always to a single friend; it's easy to create multiple form fields with the same name in an HTML form, and easy to make my server loop over any it finds.
  • Every visit to the new generic HTTP server will have a recipient ID and an email message ID; although forward-to-friends will as they will be linked from an email, it's easy to imagine that we might want to host subscription forms in future. So making the tracking IDs in the email optional (or allowing for other kinds of tracking IDs in future) by making the URL structure by a series of tagged fields (it looked something like http://domain/sss/Rxxx/Eyyy/Wzzz/foo.html for a request for file foo.html in website ID zzz for recipient xxx from email yyy, with sss being the anti-tamper signature) was worth the few minutes' work.
  • Requests to the web server will be forward-to-friend requests or just static resources in support of a response page; it was easy (given we already had an ordered list of tagged components in the URL) to added an ordered list of arbitrary commands (with URL path components like forward, subscribe, etc; any component before the Wzzz/filename part was considered a command or tag, and tags started with an uppercase letter).

The "extra work" required to do things that way rather than the "simple" way was tiny. But it meant that the core of the HTTP server was simple to read and didn't need to change as we extended it with more and more commands (by adding them to a lookup table); it made a powerful system that was easy to extend, easy to understand, and capable of things we didn't have to "add as features" (some or our users did quite creative things by stacking commands!). As the HTTP server core and the commands were small separate modules with a clearly-defined interface, they could be understood individually and were well isolated from each others' implementation details, the benefits of which are well documented.

So please help me fight the assumption that putting thought into designing software means it'll be complicated, more effort to implement, and that "it'll need rewriting anyway so there's no point"! Let me do my job well 🙂

That Which Does Not Kill Us…. (by )

I used to write about "The Curse" a lot - so many damn things go wrong for us that it has just become a kind of on going sitcom comedy type situation. I tried to twist things round and be more positive and things were great for a while... then they weren't but it was the Head Injury and the migraines before it and the recovery and I generally forgot about the curse.

And of course this year has had lots of wonderful, amazing things in it but it is also a dark time for us. A sad time, a devastated time - the last 2 and a bit years have been full of tragedy and pain. I haven't felt up to sharing a lot of it... the people we are missing, the physical after affects of miscarriages and the shake up of domestic things to try and make sure everyone who needs stuff has it.

It is too depressing in many ways.

But I do want to be sharing stuff a bit more again - and there is joyous, wondrous and creative stuff in the mix but I am afraid that is not what this post is about - nope - this is about the crap!

Not the deep sorrow stuff just the crap.

Where to start?

Well my new computer (not new now I know but still not exactly old) has never really been fast and I have had issues with stuff just working on it, with email and the spam thingies stopped working on my blogs and I have over 20 so my emails got broken by all the spam, some of the blogs got broken with the spam, our wifi is periodically being blocked by something that likes to move channels and therefore follows our attempts to get away from it. This means that a) it as well as emails was hampering work greatly and b) has meant my phone bill is a lot higher than it should be because I wasn't checking what it was using and it was on roaming data whilst I was watching videos in bed rather than on our wifi :/

Yes stupid me.

I did amazing arty things in the summer and mostly it was absolutely a positive experience but some of it was really soul crushingly negative and had me not wanting to go to events and thing - such nastiness does not belong anywhere let alone the creative sector. This was multiple things and they all bundled up and have made me hacked off with Gloucester and I don't want to be hacked off with Gloucester - it is my home.

On top of that I still have not been paid for three different things I did in the Summer - let alone my autumn stuff - this has had ramifications and has seen me having to trek out to bank meetings - fitted in between physio for Jean and other medical stuff for my mother (I need to book my own appointments and just haven't managed!). Bank meetings where fun!

Here is the Facebook comment I made about it:

Due to multiple people having not payed me - I had to go to the bank to try and stop credit card spiral debt - I explained the situation but nope... they would rather lock me into a spiral of debt than give me a loan to pay off the credit card I'd had to put stuff on and then cancel the card - reason is they won't cancel the card but are worried I'd just rack the same debt up again as my spendings been erratic - well yes because I wan't paid when expected by multiple people and I thought the money would be through before the end of the first month and I am now getting to more than four months down the line and the interest is now more than I spent in the first place. I've found a way around this but only because I... am married to someone with a high end job and even then when I say sorted I mean we've just stopped the spiral being unmanageable but I'm still going to be paying the bank back about 4 times min what I actually spent - and none of this would have happened if I'd damn well been paid on time. I am so annoyed - I tried to sort it out the first month when it looked like the money was going to be on the card a while but we couldn't prove who I was - AGAIN - so proving I exist has been fun :/ I hate banks - oh and the spends where so I could continue working not random shizzle. Interest rates make a huge difference to debt management - hence wanting the loan - but also they don't like freelancers.

The support I've been offered from family and friends over this has been amazing but I feel embarrassed that it has come to this :/ And worse - if this was the money that paid the mortgage and/or food rather than DIY and festivities and vets bills and opticians then we would be screwed.

Incidentally I need new glasses desperately - the anti scratch coating got scratched in the summer - probably all the rock handling sessions I did - blooming meteorites! But obviously I have been putting it off until I get paid... and so it goes and goes around again :/

Wednesday was supposed to be the big Christmas shop were we go up to Bristol and make a day of it and see friends etc... but what happened was that I found 3 of our new hens dead. I have never lost them in a batch before which had me contacting hen experts and asking if others had experienced the same on forums and facebook etc... the conclusion is that they were either sickly to begin with - they weren't from the rescue org I normally go with and where a direct rescue via a friend so that was very probable or Mr Fox had scared them to death.

Illness in live stock is a serious thing and bird flues etc... can be passed on to humans so this was a bit of a stress and involved poo picking and of course a little hen funeral 🙁 Also just be extra disturbing some chickens have a tendency to have movement after death - hence running around like a heads chicken - they really can do this - I have in fact seen this as a kid but this was the first time I'd seen it in one of my chickens - it is very disturbing.

The dead chickens where bad and stressful enough but there was an added issue - the kids are supposed to check for eggs in the morning and feed and water the chooks after school - they are very slap dash about this so I tend to go out at lunch time to do a check up and remove any packaging from pellets etc... that the kids have left behind. So the chickens should have been found by the kids - obviously it kind of a good thing they were but... it means that the kids didn't check on them that morning.

I set a trap by which they could lie and dig themselves deeper but both independently told me the same thing - the crooks had been very "chickeny" moving about and chasing them for food but they had forgotten to do the chickens - I was actually impressed with their honesty and they were very upset about the chickens but the duty of care to the animals is very important and can not be shirked. This means they are not in as much trouble as they could have been but combined with some other things I had to call a family and put the entire house on chore lock down.

I will confess I can not cope with the housework and Alaric is great but is finding he can't even start helping with dinner because the kitchen needs cleaning before he can start so dinner is getting later and later.... so everyone has a semi screen ban - the xbox, blue ray and fire stick are unplugged and tablets and phones are rationed - for everyone - including the grown ups, including Nanny.

There is more laundry to do that before and I am trying to work and take my mum out on a regular basis - Mum has had two lots of cancer and is in her 70's and still heart broken from the loss of my dad. Domestically we are in a bit of a pickle as I try to fit another house into my already cluttered home - the kids toys are currently covering the living room being culled and sorted etc... and it is taking me forever because I too do not have motivation, time or energy and so have had to set a time when we all just plough into this sorting and cleaning. It falls to pieces every time I have to disappear out of the house for events - nothing gets done and that is something that can not continue - I have mobility issues and mum is a wheel chair user and we have had to have a stair lift and stuff fitted - things can not be left on the floor or in piles in the way - it's just not going to work and is unsafe.

Sadly this is a source of stress for Jean as she has a lot of home work some nights having started her GCSEs and it takes her ages and hurts her due to what now appears to by her version of the hyper-mobility that plagues the family. She felt she had no time to begin with - so we have had to sit down as a family and draw up a plan of exactly how this is going to work and work best for everyone,

So we didn't do our big Christmas shop - this is normally the big outing that gets the bulk food for December and January plus some treaty things and presents and is our family outing with pizza (I have jacket potato these days due to that whole not being able to eat the yummy foods anymore).

So that was Wednesday then there was Thursday - I try and take my mum out and about every other day but sometimes it's only once a week - and Thursday was the only day I could really do this an we went to Dunelm to get her some house thing - we ended up with house things too - because you always do when you enter such shops! This was an extended lunch break for Alaric who then has to make the time up later - but this seems to be working ok at the moment.

Anyway she decided she wanted to push the boat out and get her medicines by herself. So Alaric dropped her off at the ASDA as they have a pharmacy - this was the first proper out on her own that she'd done since my dad died in April.

Her scooter had been fully charged but then she didn't come home and I began to fret - it was starting to get dark - she didn't have her phone on her - it was in her bedroom :/

It was now starting to rain - I started opening the door to check for her - I ended up getting the neighbours to look for her... she was fine she'd gone to look at the cloths in ASDA as well but by the time she turned up I was frazzled and she was being sleeted on and was cold and wet even in her big yellow Mac and me and Jean just helped her into the house and were fussing about making her warm drinks and getting her dry cloths. When I went back the scooter was gone - I thought Jean and Al had put it back in the car... I was wrong.

The mobility scooter - my mum's life line to going out of the house had been stolen. From our front garden and taken down to the carpark at the end of the road and smashed up. Of course I wasn't going to find that out until Friday evening.

Friday I had been given the opportunity to attend a free training course and series of talks including on photography - it was also a networking event with free lunch!

Yay! Things were looking up - I was a little stressed due to running slightly late but my friend and co-story teller was also running late - in fact later than me so other than ending up in an awkward seat it was fine. And I got an entire pack of biscuits to myself - yay for the no gluten or yummy food thing - also the biscuits where yummy.

I met lovely people and was leaning things and had bought a blanket so I wouldn't get cold etc...

Lunch time arrived and I had HOT food and the session I really wanted to attend was after lunch. I ate my food and then took the lift down to the toilets - leaving my phone behind me because I am being paranoid about bad things always happening to me unless I have my phone on me and this was a safe space - so pikachu was relegated to guarding the note book.

I was saving my energy for the event so was using the lift - I am still having to use a crutch to walk any distance at the moment.

All fine... I get into the lift to come back up - the basically new lift in the refurbed historical site and it shonks out... "going going going going going up" reeeee "going going going..." The door won't open to let me out. Dude at the desk spots me and comes over and does magic reset and the door opens and I want to get but think I am just being daft - being trapped with no way out is a big thing for me - just writing this makes my pulse quicken and the panic in stomach and throat start. It's not claustrophobia as I am perfectly happy with small spaces and the trapped in space can be huge and I will still be panicking if I can not see an escape route.

Anyway - he's reset the lift so it should all be fine and I give him the thumbs up and up I go until CLONK it comes to rest almost exactly between the two floors - so that now I can't even see out of a window - there is maybe 20 cm of the window for the ground floor visible at the bottom of the lift. I hit that alarm button until muffled voices appear and the faff starts...

The events organiser appears and I have to tell him that I have seizures and the chances of seizures goes up with stress levels and I don't like being trapped. I say it all calmly and I was working very hard on calm because the last thing I wan't was to have a seizure and plus my instincts tell me to kick and climb my way out of such situations - in the natural world this makes sense - in a lift in a building that is not on fire - it doesn't

I end up sitting on the floor because standing up is too much hard work - literally my legs start shaking with fatigue and I am in pain and now sitting on the floor which I was trying not to do because I know the chances of me needing help back up are really high and Alaric is not there and I can't phone him or even play Pokemon go and there is a poke stop just out side - damn me and trying not to be taken over by my paranoia!

Any way the events organiser stayed by the lift taking to me to keep me calm and then the engineer was there and fixing things - but it seemed like forever - I think the whole thing was half an hour maybe 40 mins and the engineer worked really hard to fix the lift for when I needed to come back down but I opted to go slowly down the stairs.

I had missed the rest of lunch and most of the photo workshop but the talker gave me his contact info so I could ask questions later - I was shaky and got hugged lots. I was going to walk home to a) do fitness and b) to hatch pokamon eggs but I phoned Al and he came and got me.

Then we found the scooter was bashed up and then there was contacting the police and then Saturday we took Mum out in the wheel chair to a caftfair - we have to be careful with the wheel chair as Alaric has sciatica and issues with his back and Jean has issues with her wrists, neck and back.

The craft fair was lovely... the cafe however was very busy and our large lunch order.... well after waiting for over an hour they had to come and give us a refund as they'd run out of food!

Fortunately there was a chip shop but there were hanger issues occurring (angry because you are hungry!) - so yeah that is kind of where I am - it's been one hell of a week

WordPress Themes

Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales
Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales