Right now, Three Rings seems to be eating up virtually all of my time. It’s hardly the first time
– I complained about being incredibly busy
with Three Rings stuff just a couple of years ago, but somehow right now it’s busier than ever. There’s been the Milestone: Jethrik release, some complications with our uptime when our DNS servers
were hit by a DDoS attack, and – the big one – planning for this weekend’s conference.
The Three Rings 10th Birthday Conference is this weekend, and I’ve somehow
volunteered myself to not only run the opening plenary but to run two presentations (one on the history of Three Rings, which I suppose I’m the best person to talk about, and one on
being an awesome Three Rings Administrator) and a problem-solving workshop. My mind’s been on overdrive for weeks, and I’m pretty sure I’m not even the one working the hardest (that
honour would have to go to poor JTA).
Still: all this work will pay off, I’m sure, and Saturday will be an event to remember. I’m looking forward to it… although right now I’d equally happily spend a week or two curled up
in bed under a blanket with a nice book and a mug of herbal tea, thanks.
In other news: Matt P‘s hanging out on Earth at the moment, (on his best behaviour I think) while
Ruth, JTA and I decide if we’d like to live with him for a while. So far, I think he’s making a convincing argument. He’s
proven himself to be house trained (he hasn’t pooped on the carpet even once) and everything.
The other Three Ringers and I are working hard to wrap up Milestone:
Jethrik, the latest version of the software. I was optimising some of the older volunteer availability-management code when, by coincidence, I noticed this new bug:
I suppose it’s true: Lucy (who’s an imaginary piece of test data) will celebrate her birthday in 13/1 days. Or 13.0 days, if you prefer. But most humans seem to be happier
with their periods of time not expressed as top-heavy fractions, for some reason, so I suppose we’d better fix that one.
They’re busy days for Three Rings, right now, as we’re also making arrangements for our 10th
Birthday Conference, next month. Between my Three Rings work, a busy stretch at my day job, voluntary work at Oxford Friend, yet-more-executor-stuff, and three different courses, I don’t have much time for anything else!
But I’m still alive, and I’m sure I’ll have more to say about all of the things I’ve been getting up to sometime. Maybe at half term. Or Christmas!
Those of you who’ve been following Three Rings over the last decade (either
because you’ve volunteered somewhere that used it, or because you’ve listened to me rave about it over the years) might be interested in this new post on the Three Rings blog. It’s about how Three Rings has evolved
over the last 10+ years of its life from a tiny system designed specifically for the needs of Aberystwyth
Nightline into the super-powerful charity management tool that it is today, and how it’ll continue to evolve to meet the needs of the helplines and other charities that use it
for the next ten years.
It still blows my mind that something that began as a bedroom project has come to support over 13,000 volunteers around the UK, Ireland, and further afield (we’ve recently been getting
started with supporting Samaritans branches in New Zealand and Australia). Now, of course, Three Rings is a volunteer-driven company with a “core” team of half a dozen or so… as well as
tens of others who help with testing. It’s eaten tens of thousands of development hours and it’s become bigger and more-important than I’d ever dreamed. Of all of the volunteer work
I’ve been involved with, it’s easily the one that’s helped the most people and had the biggest impact upon the world, and it still excites me to be part of something so huge.
On this day in 2004 I
handed in my dissertation, contributing towards my BEng in Software Engineering. The topic of my dissertation was the Three Rings project, then in its first incarnation, a web application originally designed to help university Nightlines to run their services.
I’d originally started developing the project early in the previous academic year, before I’d re-arranged how I was going to finish my course: Three Ringscelebrates its tenth birthday this year. This might be considered to have given me a head start over my peers,
but in actual fact it just meant that I had even more to write-up at the end. Alongside my work at SmartData a few days a week (and sometimes at weekends), that meant that I’d been pretty damn busy.
I’d celebrated hitting 10,000 words – half of the amount that
I estimated that I’d need – but little did I know that
my work would eventually weigh in at over 30,000 words, and well over the word limit! In the final days, I scrambled to cut back on text and shunt entire chapters into the appendices (A
through J), where they’d be exempt, while a team of volunteers helped to proofread everything I’d done so far.
Finally, I was done, and I could relax. Well: right up
until I discovered that I was supposed to have printed and bound two copies, and I had to run around a busy and crowded campus to get another copy run off at short notice.
Looking Forward
Three Rings went from strength to strength, as I
discussed in an earlier “on this day”. When Bryn came on board and offered to write programs to
convert Three Rings 1 data into Three Rings 2 data, in 2006, he borrowed my dissertation as a reference. After he forgot that he still had it, he finally
returned it last month.
Today, Three Ringscontinues to eat a lot of my time, and now supports tens of thousands of volunteers at hundreds of different helplines and other charities, including
virtually every Nightline and the majority of all Samaritans branches.
It’s grown even larger than I ever imagined, back in those early days. I often tell people that it started as a dissertation project, because it’s simpler than the truth: that it
started a year or two before that, and provided a lot of benefit to a few Nightlines, and it was just convenient that I was able to use it as a part of my degree because otherwise I
probably wouldn’t have had time to make it into what it became. Just like I’m fortunate now to have the input of such talented people as I have, over the last few years, because I
couldn’t alone make it into the world-class service that it’s becoming.
This blog post is part of the On This Day series, in which Dan periodically looks back on
years gone by.
The last few months, and especially the last few weeks, have been incredibly hectic. The giveaway, I suppose, should have been how little I’ve blogged recently: it’s a dead giveaway
that I’m really busy when I’m able to neglect writing about how busy I am. I’m not complaining, of course, just apologising to the Internet at large.
Mostly, my time’s been eaten up by Three Rings. We launched Milestone: Iridium,
the latest new version of the helpline management software, at the weekend, after an extended testing period and a long-extended development cycle. There’s a metricfucktonofnewfeaturesinthisrelease, including the massive Rota Autopopulation feature,
which uses some incredibly complicated mathematics and fine-tuneable weighting preferences to find the best people for each shift, with minimal human interaction. Oh, and we got a new
server. And launched a documentation website. I’ve no doubt that this is our biggest release to-date.
It’s amazing to see how far we’ve come. It still boggles my mind every time I look at the statistics, and see that we’re now helping over ten thousand volunteers. When I started, we
were supporting about ten. Sometimes it scares me. Mostly it thrills me. It’s a great project to be involved with, even when it does consume all of my free time for weeks
on end.
This evening, I found myself momentarily at a loose end. I felt like there were things I ought be be doing, urgently, but there weren’t. There’s a backlog of personal
email to catch up on, and a stack of little jobs to be doing, but there’s nothing critical.
It took a few minutes to reassure myself that I really had nothing that needed doing immediately. Then I poured myself a glass of wine, popped my feet up, and played some video
games. My Steam catalogue has gotten bloated, full of games that I’ve bought over the last few
months to play “when I get the time”. Time to cut that list down.
Family Picnic: Joining Ruth and JTA at Ruth’s annual family picnic, among her billions of
second-cousins and third-aunts.
New Earthwarming: Having a mini housewarming on New Earth, where I live with Ruth, JTA, and Paul. A surprising number of people came from surprisingly far away, and it was fascinating to see some really interesting networking being done by a
mixture of local people (from our various different “circles” down here) and distant guests.
Bodleian Staff Summer Party: Yet another reason to love my
new employer! The drinks and the hog roast (well, roast vegetable sandwiches and falafel wraps for me, but still delicious) would have won me over by themselves. The band was just
a bonus. The ice cream van that turned up and started dispensing free 99s: that was all just icing on the already-fabulous cake.
TeachMeet: Giving a 2-minute nanopresentation at the first Oxford Libraries
TeachMeet, entitled Your Password Sucks. A copy of my presentation (now with annotations to make up for the fact that you can’t hear me talking over it) has been uploaded to the website.
New Earth Games Night: Like Geek Night, but with folks local to us, here, some of whom might have been put off by being called “Geeks”, in that strange way that
people sometimes do. Also, hanging out with the Oxford On Board folks, who do similar things on
Monday nights in the pub nearest my office.
Meeting Oxford Nightline: Oxford University’s Nightline is just about the only Nightline in the British Isles to not be using Three Rings, and they’re right on my doorstep, so I’ve been
meeting up with some of their folks in order to try to work out why. Maybe, some day, I’ll actually understand the answer to that question.
Alton Towers & Camping: Ruth and I decided to celebrate the 4th anniversary of us getting together with a trip to Alton Towers, where their new ride, Thirteen, is really quite good (but don’t read up on it: it’s best
enjoyed spoiler-free!), and a camping trip in the Lake District, with an exhausting but fulfilling trek to the summit of Glaramara.
That’s quite a lot of stuff, even aside from the usual work/volunteering/etc. stuff that goes on in my life, so it’s little wonder that I’ve neglected to blog about it all. Of
course, there’s a guilt-inspired downside to this approach, and that’s that one feels compelled to not blog about anything else until finishing writing about the first neglected thing, and so the problem snowballs.
So this quick summary, above? That’s sort-of a declaration of blogger-bankruptcy on these topics, so I can finally stop thinking “Hmm, can’t blog about X until I’ve written about
Code Week!”
Between SmartData work, Three Rings work, freelance
work, strange new bits of voluntary work, and the rapidly-looming wedding between Ruth & JTA (along with handling
all of the crises that come with that, like the two mentioned on the wedding blog and the threat of rail strike action on the weekend of the
event, which may affect the travel plans of guests from Aberystwyth), things are a little hectic here on Earth. And I’m sure that I’ve not even got it the worst.
So in order to distract myself from it during this 5-minute moment-to-breathe, I’d like to share with you some photos on the subject of “living with Paul“. As usual, click on a picture for a larger version.
Our shopping trips have become in different ways both more and less organised, thanks to Paul (seen here posing under a “single lemon” sign). More organised in that Paul does a sterling
job of making sure that our shopping list whiteboard is up-to-date, and less organised in that we’re even less likely to comply with it… not least because it’s cute the way that his
little head explodes when we deliberately and maliciously make minor deviations in our shopping plans.
Well-known as somebody who outright rejects Twitter, Facebook and the like,
Paul’s come up with his own mechanism for sharing his current status with those he cares about: the low-tech alternative – note cards. Held up by a WALL-E figurine at the door to his
room, Paul keeps us up-to-date with a series of about half a dozen pre-written messages that cycle in accordance with what he’s up to at any given time. They’re quickly out of date
(right now, it says “In. Please wave.” but he’s clearly not here), limited in length, and mundane, just like the vast majority of Twitter posts… but at least he’s not attempting to
subject the world to them. I’m still not sure, though, whether this tiny protest against social networking (if that’s what it is) is sheer genius, complete insanity, or perhaps both.
Paul is now officially in charge of all Yorkshire pudding production on
Earth, after we enjoyed this gargantuan beast.
Right: my break’s over and I need to get back to my mountain of work. If you’ve not had your fill of Paul yet, then I point you in the direction of a video he’s just uploaded to YouTube…
Some time ago, I wrote a web-based calendar application in PHP, one of my favourite programming
languages. This tool would produce a HTML tabular calendar for a four week period, Monday to Sunday, in which the current date (or a
user-specified date) fell in the second week (so you’re looking at this week, last week, and two weeks in the future). The user-specified date, for various reasons, would be provided as
the number of seconds since the epoch (1970). In addition, the user must be able to flick forwards and backwards through the calendar, “shifting” by one or four weeks each time.
Part of this algorithm, of course, was responsible for finding the timestamp (seconds since the epoch) of the beginning of “a week last Monday”, GMT. It went something like this (pseudocode):
1. Get a handle on the beginning of "today" with [specified time] modulus [number of seconds in day]
2. Go back in time a week by deducting [number of seconds in day] multiplied by [number of days in week] (you can see I'm a real programmer, because I set "number of days in week"
as a constant, in case it ever gets changed)
3. Find the previous Monday by determining what day of the week this date is on (clever functions in PHP do this for me), then take
[number of seconds in day] multiplied by [number of days after Monday we are] from this to get "a week last Monday"
4. Jump forwards or backwards a number of weeks specified by the user, if necessary. Easy.
5. Of course, this isn't perfect, because this "shift backwards a week and a few days" might have put us in to "last month", in which case the calendar needs to know to deduct one month
and add [number of days in last month]
6. And if we just went "back in time" beyond January, we also need to deduct a year and add 11 months. Joy.
So; not the nicest bit of code in the world.
I’ve recently been learning to program in Ruby On Rails. Ruby is a comparatively young language which
has become quite popular in Japan but has only had reasonable amounts of Westernised documentation for the last four years or so. I started looking into it early this year after reading
an article that compared it to Python. Rails is a web application development framework that sits on top of Ruby and promises to be “quick and
structured”, becoming the “best of both worlds” between web engineering in PHP (quick and sloppy) and in Java (slow and structured). Ruby is a properly object-oriented language – even your literals are objects – and Rails takes full advantage of
this.
For example, here’s my interpretation in Rails of the same bit of code as above:
@week_last_monday is just a variable in which I’m keeping the result of my operation.
7.days might fool you. Yes, what I’m doing there is instantiating an Integer (7, actually a Fixint, but who cares), then calling the “days” function on it, which returns me
an instance of Time which represents 7 days of time.
Calling the ago method on my Time object, which returns me another Time object, this time one which is equal to Time.now (the time right now) minus the amount of
Time I already had (7 days). Basically, I now have a handle on “7 days ago”.
The only thing PHP had up on me here is that it’s gmdate() function had ensured I already had my date/time in
GMT; here, I have to explicitly call gmtime to do the same thing.
And then I simply call monday on my resulting Time object to get a handle on the beginning of the previous Monday. That simple. 24 characters of fun.
+ params[:weeks].to_i.weeks simply increments (or decrements) the Time I have by a number of weeks specified by the user (params[:weeks] gets the number of weeks
specified, to_i converts it to an integer, and weeks, like days, creates a Time object from this. In Ruby, object definitions can even override operators
like +, -, <, >, etc., as if they were methods (because they are), and so the author of the Time class made it simple to perform arithmetic upon times and dates.
This was the very point at which I feel in love with Ruby on Rails.
(15:53:41) Dan: It [an online weather forecast on a web site I run] says we should expect a wet weekend, clearing up for an overcast week.
(15:53:54) Suz: and who puts it on the web site?
(15:53:59) Dan: The BBC.
(15:53:59) Suz: i always thought it was paul
(15:54:02) Suz: oh
(15:54:06) Dan: No – it’s taken from the BBC, who take it from the MET office.
(15:54:11) Dan: It’s entirely automatic.
(15:54:28) Suz: oh i see. i wondered why paul had the time or botherdness to do it
Sweet that she thought that Paul was spending about an hour a week keeping an online calendar up-to-date manually.
People who are in on the Secret Of The Jukebox will be delighted to hear that I’ve had a good long hack at it tonight (hence it being 4:30am) and I’ve managed to get heaps done
and ready for Paul to break test, including but not limited to the new “Alone, And With…” engine, which doesn’t seem to suffer any
longer from the age-old bug that gives it it’s name.
I’ve just finished listening to some old hard-to-get Goo Goo Dolls albums that I acquired a little
while ago. One is silly over-punky shouty hard rock stuff; very coarse and unrefined, much unlike their later stuff. The other, ‘Hold Me Up’, is much recommendable: some tracks I’d
heard before, some stuff I hadn’t heard, all very very good. In particular, enjoyed ‘Laughing’, ‘Kevin’s Song’, and the older version of ‘Two Days In February’. Toy.
A day of energy and focus. Paul and I hacking through stuff, fixing, tweaking, making work, prodding, pushing.
Its a slick operation. Paul and I discuss bugs and problems, mark them up on a whiteboard on the wall (installed for the purpose) and clear off fixed issues. Dan chews through
problems in staccato style – a quick hit and run raid on a bad patch of bugs, followed by some Civilisation 3.
I spent much of the early part of the day creating new icons for the help section and improving some others. Later on Paul replaced me at the terminal – weaving together a gossamer of
information into a cohesive and structured explanation of how the system works.
Bryn closes hostilities with a QA roundup. Vigorous and detailed, he pulled out anything he found that was out of place or untidy in the help system and listed it for change.
So its morning. We’re a touch behind schedule – but quality of the product is all. We are determined to fix the “showstoppers” (big bugs) and make a good dent in anything silly
outstanding before we declare it released. I can see that taking a few more days.
Paul and I were left discussing its worth in our currently debris-strewn living room. What does this project actually mean? It means a lot – to me, to Dan, to everyone involved. Most
of all its yet more proof of the magic that is Aberystwyth.
At the edge of darkness, all that is left is tomorrow.
Been excessively busy this last week: lots and lots of work. Pulled a 16-and-a-half hour work day on Wednesday, fixing the entire network where my co-workers were unable to. It’s a lot
nicer now. In other news, I won an eBay auction for a copy of the 1974 edition of Parker Games “Careers” board game, which is fab, and Claire, Bryn,
Paul, Kit and I have been playing it all week.
Three Rings schedule looks tighter and tighter. Having some doubts about getting it to a stable 1.0 release by next weekend, the deadline.
Tonight, sometime after midnight, my awful ex-, Reb (if you ever hear me complain about my ex-, it’s undoubtedly her) dropped me two text messages out of the blue asking if I’m awake
and to call her, in capitals (followed by two “X”s, which I take to be kisses). I can’t be arsed. I’ll drop her a text in the morning and find out what she wants.
Right now, I’m going to coax Claire to bed for rumpy-pumpy. ;-)
Things that are causing me excess stress and reduced sleep:
WORK
I’m writing program features that have been paid for, but may never be used.
I can’t keep a pcAnywhere connection to the client open for more than a few minutes.
I’ve been abandoned to sort out the database replication by myself.
A colleague insists upon demonstrating how stressed they are about their upcoming deadline, as if I needed reminding about mine (I’m already past it, and the client keeps phoning me
to tell me all about it).
Pulling extra hours isn’t actually getting that much more work done.
HOME
I still have lots of Three Rings to go, most notably a file-storing system, and I can’t find a way to focus on it.
I have heaps of laundry to do…
…oughta tidy up, too…
…and sort some things out with the bank, with my parents, with the Dept. of Comp. Sci…
But, above it all – the killer:
I can’t find the motivation to get on with any of it, and it’s all building up into a mammoth heap of incompleteness.
It seems that NatWest now only open during the hours at which I am at work. Yet somehow I’m expected to deposit my paycheque. This makes no sense.
Mostly, I’ve been watching Futurama and drinking good beer. On
Saturday, Claire and I went up to a forest North of Dolgellau and ate sandwiches and failed to find climbable trees. And I twisted
my ankle. In any case, after a week of working late and coming home to evenings with everybody-in-Aber-I-know, it was good to spend some time alone with her.
I should be coding Three Rings, or Kit will shout at me. Better get on.