Earthquake (by )

Last night at 0:57 according to my alarm clock there was an earthquake. It woke me up - at first I thought my back was spasming but there was a marked abscense of pain so I thought the cat must be cleaning herself vigourously on the bed next to me except something didn't seem quiet right with that either.

Then I realised it was the building shaking, it was like being inside a bell, ting ting ting, high pitched and full of harmonics - all the vases and trinket boxes not to mention the glass door cabernates where resonating, chinking and ringing with a sort of strange music. Perplexed I still lay in my bed scrabling for my glasses, then the light switch clicked but alas the shaking had dimished so that I could not rate it on the ....... scale. The motion had been decidedly sideways and I had heared no plane or anything plus the motion was... sustained.

However I know sufficiently large explosions can cuase tremors so I phoned AL to make sure he was ok and too try and convince him to twitter and blog the event but he wouldn't. I phoned my mum whilst doing the rounds to check that Jean etc... was ok - no one else had awoken and I begian to doubt myself especially when Mum said 'you sure you didn't have a dizzy spell.' I answered that no it couldnt have been as there was the sounds I had heared.

Al had asked if there was any other sound and this was a hard question for me to answer as due to having spent my early years almost completely deaf (untill 4 when I had an op) I 'hear' sound with motion such as thumping floor boards - the reason I loved my dads heavy metal initially and not the more melodic sweet music of my mum - I could feel the music. To me the undulation motion was a sort of noise but I don't think there was an actual audiable noise.

Alaric was suprised I was so excited but I was like - its a geological phonominon and I never thought I'd experience my first earthquake in a bed in Gloucestershire! I had sort of assumed that that honour would occure when we finially got to visit places like Japan!

On the news this morning they reported the quake to be 5 on the rictor scale and occuring at 1 in the morning - did anyone else feel this? Which fualt? What depth etc.... more info greatly appricieted!

Flexible data models (by )

Most bits of software have, at heart, a data model for representing whatever it is they process. Be it an SQL database, a bunch of files on disk, a raw disk partition, something purely in memory, or just a file format that is processed sequentially, there is usually some kind of data structure being dealt with.

And when requirements change and the software evolves, that data model often becomes the Achilles' heel, as it turns out to be unable to represent new concepts, and changing it requires rewriting a lot of the application - since, as the "lowest layer", just about everything else depends upon it.

Therefore, I see a challenge in finding ways of designing data models and the software that uses it in the first place so that changing things requires the minimum of effort...

Generalisation (by )

One of the things I instinctively do when designing software, given a client's requirements, is to generalise things as much as possible, in order to make it easier to deal with changing requirements in future, or to avoid having to write special-case code to deal with more unusual situations that they already need handled.

Eg, somebody might say "I want a system to transport email and files between computers in my organisation". So you might think: Ok, I'll start by designing a general packet-switching system to transfer data across an interlinked network of computers, with routing algorithms to work out the best paths, retransmission systems to deal with failures, and so on. Then on top of that I'll build an email system and a file transfer system. That way, most of the difficult stuff is done in a single module that deals with getting data from A to B across an unreliable, changing, network. Email and file transfer are then much simpler modules, with as little duplication of work between them as possible. So it's easy to add more functions to the system in future, and any improvements to the underlying routing engine benefit email, file transfer, and any other application equally.

Standard good software engineering practice, right? Modularise and have an abstract API between layers of a system?

However, sometimes I do this, but am then faced with an uphill struggle, as the client starts wanting changes that break the abstraction layers between the modules...

For example, they might suddenly start saying that they want all the email to go via their fast but expensive transatlantic cable, so it gets their quickly, while spending as little as possible - they pay by the megabyte, but emails are small. Meanwhile, they'd like the file transfers to go via the cheap satellite link, which is slow. But nobody's in a hurry with a large file transfer.

Ok...

But the nice routing module we designed doesn't care what application is using it; it just gets given a bunch of data and told to send it somewhere.

So we have two main classes of choice:

  1. Make the routing system, at the point where it has to choose between satellite or transatlantic cable, break the layers a bit by peeking inside the bunch of data it's given to decide if it's part of a file transfer or an email, and decide how to route it based on that. This is quick and easy, but it means that the routing system now needs to know a bit about the applications, so it'll now need updating if extra applications are added or the rules change, which increases maintenance overhead and scope for error.
  2. Sit down and have a think about this requirement, and how it might impact future applications (a bit of prediction and guesswork is required here), and design a change to the API to fulfill that need. For example, adding a "type of service" field to every chunk of data given to the routing system, saying whether it needs to get there quickly or cheaply. This creates a more maintainable system in future, but is also more up-front work.

However, it really makes my life hard when people, after requesting a system with so many esoteric variant cases on a complex operation, and the expectation that more variant cases will arrive in future, that it has to be a very modularised system to control the complexity - but where one case is by far the most common - then start requesting changes to the system that totally ignore the fact that there are any exceptions to the common case.

Which is then a real headache to deal with, as you have to figure out how their feature applies to all the other variant cases as well, and try to explain this to them...

Experiments on animals (by )

I was doing something in the kitchen; Jean was toddling around playing with a hair grip. The kind that's two plastic jaws closed by a spring. She was gripping it on to bits of her clothing, and various objects around the kitchen, experimenting with what it would hold onto well.

She wandered out of the kitchen into the living room, then came back a bit later, looking thoughtful.

"Cat no like it" she said, waving the hair grip at me.

I'm amazed she wasn't crying and nursing a scratch!

Mental modes (by )

Hmmm, it appears I have two mental modes when working.

  1. Deeply focussed into something. I block out distractions to hold onto the focus. This is what I need when I'm programming. Once I get into this mood, I get a lot done, since I have all the pertinent information sitting in my head and all the correct windows open on my computer, but it can be an uphill struggle to get started.

  2. Event driven. When I'm dealing with emails, phonecalls, broken servers, and that sort of thing, I'm in a very different mode, agily flipping between things. I come across problems that will clearly need some deep focus, and I have to put them off for later, since it takes me a while to get out of deep mode and into event-driven mode.

This morning I've been event-driven, catching up on email, dealing with a down server, and now I really ought to try moving back into deep focus mode to work on something else, and I'm finding it hard; my thoughts just keep jumping around!

I really want to decrease my dependence on lots of deep thought mode for earning money; part of this revolves around getting an underling to do more of the programming so I can be event-drivenly mentoring them while doing the considerably easier form of deep thought required to design software architectures for them to implement... which is a work in progress as we speak...

WordPress Themes

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