Ode to a matriarch

By , December 14, 2012 12:13 pm

Mary Spiers, 1915-2012

knitting another pair of her famous socks

In this Monday afternoon’s fresh air, we buried my grandma Mary under clear skies and the glow of a winter sun which was doing its best to comfort us despite the distance, and so said farewell to the oldest member of our family.  There were of course tears but also plenty of pride and laughter as we reminisced and celebrated her life with gratitude.

To say that my Nana lived a full life would be a gross understatement. During her 97 years on this planet, she experienced things on a scale we can only attempt to imagine. She saw my dad go from nappies to being a grandparent. She lost her husband (my grandpa) to cancer after 45 years of marriage, and then out-lived him by another 26 years. She saw the world go through transformations which would have been utterly unthinkable at the time she was born: two world wars, radio, automobiles, home appliances, air travel, TV, plastics, nuclear power, space travel, personal computers, and the internet. She was 37 when Elizabeth was crowned Queen in 1953, and experienced 23 changes of Prime Minister. How do you summarise and pay tribute to a life like that?

Mary was first and foremost a people person, and as repeated by a few of her friends who I met for the first time at the post-funeral gathering, no-one who got to know her could fail to notice her loving nature. She was incredibly proud of her family, devoted to friends, and always put others ahead of her own needs. Apparently she originally intended to be cremated, but then recently decided she wanted to be buried next to her husband so that we would visit him more often!!

In contrast to her warm heart, she was tough as nails. There was one time only 2 or 3 years ago when she slipped and accidentally head-butted a fairly thick glass door pane. It shattered and she was bleeding fairly heavily but flat-out refused to allow us to take her to hospital for a check-up, insisting that she was perfectly fine (and she was). This probably stems back to her childhood – she was raised in absolute poverty in Glasgow’s infamous Gorbals, one of the roughest areas in the whole country, but had nothing but happy memories of her early years playing out in the yard with the other kids, where she said their imaginations were all they needed to keep them entertained for hours. The whole family of 7 lived in one room, without the basics we take for granted like electricity, hot running water etc.

There are plenty more stories of her strength. I wish I could travel back in time and meet her as a young adult. She was too unassuming to volunteer information about her youth, but we did squeeze quite a few stories out of her over the years. One of my favourites was how in her early 20s she got mugged on the street by a guy who snatched her handbag, and ran away. She ran after him, caught him up, and wrestled it back! I can’t imagine that ever happening these days.

on a family walk

on a family walk

Around the same time as this story, she moved from Glasgow to Birmingham, but somehow retained her Scottish accent for the next 70+ years. She had various jobs, including a fairly short stint at Cadbury (prematurely terminated by her three sons who were terrified she’d get fat from all the free chocolate), and a very long stint at Marks and Spencer where she made many life-long friendships. But these all took a back seat compared to her duties as mother and housewife. She was particularly famous for her home-made fishcakes, Xmas trifle, and pantry with hidden treats which often got raided by naughty sons and grandchildren. She always kept her house spotlessly clean, even recently cleaning her windows on a weekly basis, and at the funeral we joked that anyone mentioning “dust to dust” would get in serious trouble if she was around.

She was full of energy, fiercely independent, and for the last few decades quietly and continually defied conventions about what is possible in old age. She was a volunteer worker well into her eighties, regularly visiting “old” people’s homes to care for those in some cases over 20 years younger than herself. If I recall correctly, she also maintained a daily keep fit routine (including press-ups of course) into her eighties, and in a similar period joined a country-side rambling club (and then got puzzled why she felt tired after a 6 hour walk). She gave blood for years until finally her doctor said it wasn’t safe any more. She lived independently into her nineties, only reluctantly agreeing to move into a mildly assisted living arrangement when it started getting difficult to walk to the shops. After the initial shock of her only change of environment in over half a century, she quickly made friends and discovered a whole new social life.

in the garden of the house she lived in for over half a century

She was generous almost to a fault and a shining example of the joy of minimalist living, giving away possessions (including recently received presents!) at every opportunity. She enjoyed several creative outlets, including gardening, flower arranging, wood working, tapestry, dress making, painting, and knitting – in particular she was an extremely prolific knitter of high quality woollen socks, and over the years everyone in the family (even in-laws) has amassed sizeable legacies of these coveted items.

She was uncompromisingly honest, to a degree of bluntness which over time we learnt to receive with amusement and delight rather than the awkwardness which is socially conventional when you give someone a present they don’t like or take them to the wrong restaurant! This honesty also brought me some important lessons in life. Like everyone else I hope to live a long time, but it was only through Nana that I realised the cost: you see almost everyone else from your generation die, make younger friends, watch them die, make even younger friends, and so on. I don’t know how she found the strength to bear so many losses without complaining or even expecting sympathy, but it explains why she never minced words and always made sure to let us know she loved us.

knocking up a wooden cabinet from scratch, as you do

knocking up a wooden cabinet from scratch, as you do

You don’t always fully appreciate your blessings until they are gone, and I had to fight hard not to completely lose it as I watched her being lowered into the ground. But the day had to come, and she was more ready and prepared for it than any of us. Just a few weeks ago, she gave my sister instructions “not to be sad when I go”, and after a bit of negotiation conceded to a request for permission to be just a little bit sad with “oh all right then”.

She always loved a good laugh, and even on this occasion managed to get the final joke. She was the most religious member of our family (although that’s not saying much). Just before the funeral it came up in conversation that Jewish law says that mourners should tear their clothing, but my uncle Barry said that there was no way he was doing anything to his nice suit! So of course when it came to helping shovel the dirt over her coffin, he bent down and heard a 30cm long rip appear in his trousers. Days later and I can still hear her delighted Scottish cackle mocking her disobedient son. R.I.P. Nana, you will be missed.

Share

riding with a champion

By , November 11, 2012 6:09 pm

Glorious sunny ride in the Kent hills this morning with Glenn, nice humble chap but I’ve known him long enough to know of his psychopathic love of extreme endurance events …

Me: “Weren’t you training for something big last time I saw you?  When we started heading back home you went on to do an 8 hour ride.”

Glenn: “Oh yeah, I just came back from Mexico – did the Quin out there.”

Me: “WHOA! How did it go?”

Glenn: “Umm, pretty good actually – I won.”

Holy crap, I just rode 110km with the Quintuple Ironman world champion!

Share

7 principles for contributing patches to software projects

By , November 10, 2012 3:28 pm

In the Free and Open Source software worlds, it seems that a lot of people with good intentions don’t understand how to contribute efficiently and effectively to upstream software projects. I say this based on personal experience: I sometimes receive patches to projects I maintain, where despite good intentions and a perfectly valid goal (e.g. a bug-fix or feature implementation), the patches are fundamentally flawed in a variety of ways. So unfortunately I cannot accept them without negatively impacting the quality or maintainability of the project.  And I don’t even maintain any wildly popular projects.

It is possible to spend a lot of money on training to learn how to avoid these mistakes, and also many well-organized projects already provide good documentation on how to contribute, such as the Linux kernel and git. However, these documents typically mix up generic advice with project-specific advice. In this post I would like to present a list of generic advice on how to write patches which have the maximum chance of being accepted quickly and with gratitude rather than resentment!

Continue reading '7 principles for contributing patches to software projects'»

Share

Upgrading to openSUSE 12.2

By , September 25, 2012 12:15 pm

Yesterday I did an online upgrade of my laptop from openSUSE 12.1 to 12.2, using this procedure. It was almost a painless process; however unfortunately something crashed the whole X session part-way through the upgrade so I had to manually re-run zypper dup from a virtual console to complete it. The procedure should probably warn about that scenario in some way, although there is no obvious clean solution, e.g. switching to runlevel 3 before starting the upgrade would probably kill the network when NetworkManager is in use. I also had some weirdness related to my encrypted /home partition (despite the advice in the release notes).

The final issue was Google Chrome failing to start with the following error:

/usr/bin/google-chrome: error while loading shared libraries: libbz2.so.1.0: cannot open shared object file: No such file or directory

It seems that this is at least in part due to a disagreement between Google engineers and Linux distros on what symlinks ldconfig should generate. If you look in the %post section of the google-chrome-stable rpm, you’ll see

# Most RPM distros do not provide libbz2.so.1.0, i.e.
# https://bugzilla.redhat.com/show_bug.cgi?id=461863
# so we create a symlink and point it to libbz2.so.1.
# This is technically wrong, but it'll work since we do
# not anticipate a new version of bzip2 with a different
# minor version number anytime soon.

I don’t have time to decipher openSUSE’s shared library packaging policy, but I assume it’s deliberate that /usr/lib64/libbz2.so.1.0 does not exist as a symlink even though /usr/lib64/libbz2.so and /usr/lib64/libbz2.so.1 do.
It has been suggested to me that this omission could be related to http://en.opensuse.org/openSUSE:Usr_merge. Regardless, google’s hack should have compensated for this, but for some reason (presumably related to the upgrade), there was a dangling symlink in /opt/google/chrome:

lrwxrwxrwx 1 root root 18 Sep 24 10:17 libbz2.so.1.0 -> /lib64/libbz2.so.1

This symlink is not owned by any rpm, which suggests that google’s hack might be in violation of the FHS for modifying a static and potentially read-only filesystem – although that’s moot since the modification would only happen at install-time at which point opt has to be mounted read-write anyway. Regardless, removing that dangling symlink and pointing it to /usr/lib64/libbz2.so.1 fixed the issue.

Share

Tool-building hacks #1: audible pings

By , February 11, 2012 8:07 pm

I think I’m genetically a tool-builder. My dad and uncle both take great pleasure in carefully selecting and buying or building tools for their workshops, my mum’s an expert woodcarver with a fair array of sharp pointy things, and these are not the only examples in the family. For me, the habit has manifested in electronic form, and I really enjoy programming new scripts etc. to help me work more efficiently. In fact I’ve collected such a vast array of them over the years that I had to start tracking them under version control back in 1999. (CVS did me proud for many years, but it did not age well, and I finally migrated them to git a few months ago.)

I can’t claim to be remotely unusual in this respect though – there’s a whole subculture of programmers (“hackers”) who can relate to this mindset. Sometimes when I build a new tool, I get the impulse to share it with the world in case it turns out to be of use to anyone else. In the past, these hacks have ended up on my software web page, but I think this blog might be a better medium.

So, without further ado, here’s a cute hack I just built: bping, a wrapper around ping(8) which makes it do a lot of beeping ;-) – one beep per packet received, with pitch going up an octave for every doubling of the response latency. (See below for installation instructions.) Why did I want this?

I use ethernet over power to connect the machines in my bedroom to the equipment in the lounge. In a high-rise apartment block with about 100 wireless networks fighting over the same spectrum band, this is (normally) a much more reliable option. However yesterday the connections in my home network started behaving very weirdly. I tried pinging various machines on the network from each other to narrow down the problem, but it was annoying to have to keep going between rooms to visually monitor the output from the various pings when it would have been quicker to be able to hear the quality of the connections being tested. So I wrote bping, which also turns a laptop into a sort of Geiger counter for wifi.

Currently bping uses bip (here’s a suggested approach to installation) which in turns uses sox to make the beeps. This works fine on Fedora 15 but unfortunately for some reason takes longer than one second to run on Ubuntu 11.10 and openSUSE 12.1, regardless of how short the beep is. I think it’s something to do with pulseaudio, but I haven’t bothered to figure it out yet. Answers on a e-postcard please …

By the way, many of my hacks are already publically available on my github account, but most aren’t documented yet. The current exceptions are:

I’ll try to document some of the others soon. Watch this space!

Share

Panorama Theme by Themocracy