I blog when I go abroad, and occasionally when I do stuff in the UK too. There's a nicer interface over here.

Wednesday, December 03, 2008

Tesco Finance really can just fuck off

It's 16 days since I requested a signature verification letter. I still don't have it, but I sent one in after getting Ruth to print one out at her work. Yesterday, 2nd December -- about 8 months after opening the account -- I finally got online access to my "Internet Saver" account.

Naturally the first thing I tried to do was transfer the money out. Except I can't. In order to transfer money, I need to add a payee -- and in order to do that, I need a card reader.

Some background: Tesco Finance is essentially a franchised RBS service, in the same way (but on a smaller scale) as NatWest is. In fact the Tesco Finance online banking site is an obvious reskinning of NatWest Online Banking, and this thing about needing a card reader is the same on both systems.

With NatWest I can understand it. I have a current account. Consequently I have a card, which is fairly crucial to the operation of a card-reader. But with Tesco I just have a savings account. No card. So, they're going to send me a "suitable card" as well as a reader. Within 15 days. Right.

I phoned Tesco up, and asked to transfer all the money out and close the account. They said oh, no, because this is an internet saver account, the only way to close the account down is by sending them a letter. Of course! How stupid of me. But, OK, at least please transfer all the money out to my current account... oh. I can't do that either. Because, you see, if I transferred all the money out, I wouldn't have the minimum balance (£1) required to keep the account open, would I? And as they'd just explained, I can't close the account. Never mind the fact I wanted the account to close, I can neither explicitly do that nor trigger it by taking the balance below the minimum.

I swore at the bloke, hung up, and wrote a letter to Tesco. I don't need this shit at the best of times, certainly not when I"ve got a cold. I wonder how long it will take to close my account? Tempted to predict that it'll take long enough that I'll actually earn some interest (I don't have any yet -- it's paid annually, at the end of March). What a fucking colossal waste of time and effort.

Thursday, November 27, 2008

American Express shows how it's done

I just got a call from American Express. It came from a withheld number, so I didn't answer it. But I know it was American Express, because this is what happened afterwards:

  1. they left a voicemail
  2. the voicemail told me what it was about, gave me a number to call back, and referred explicitly to the fact they came from a withheld number: they were going to send a corresponding SMS to go some way to proving it was really them
  3. they sent me a corresponding SMS
  4. I called back the 01273 number (verifiable on the Amex website) they gave me
And then to the call itself. I was on hold for less than 15 seconds, didn't have to tell them what it was about ("Are you returning our call or is it about something else?"), and got a clear explanation for what happened with PayPal the other day. PayPal had decided -- without telling me while I was trying to make the payments -- to send through two transactions flagged as tests, because it was the first time my card was being used by them. This is apparently a trick scammers use, guessing card numbers and trying to open up access to them with test transactions. So, Amex just wondered if I'd tried to use PayPal and whether they could OK it.

American Express, you are awesome. Can you do current accounts? Savings accounts? Or contract your staff out to Tesco, NatWest, Nationwide, ... ?

Tuesday, November 25, 2008

Financial institutions and me (again)

Still fucking hate dealing with most of them. Britannia are a particularly honourable exception and if they did current accounts I'd be with them like a shot, but they don't.

When I "switched" from NatWest to Nationwide all my direct debits moved across. I saw them in online banking on both accounts, cancelled on the former and set up on the latter. So far so good, until Kingston Council sent me a letter complaining I hadn't paid the last month's council tax. And then Orange called me up complaining I hadn't paid the last month's bill. And then PayPal sent me 4 emails in 5 minutes telling me a subscription payment had failed to fetch the cash out of the old account.


Went to PayPal. I have a "Backup Funding" credit card set up, and it's a credit card I use all the time. I've used it a few times in the last couple of days, in fact. PayPal claim that my card issuer is refusing payment, however, and that I need to call them. Thankfully a different card worked, but still. Fucks sake.


I'm at home today, because someone was coming round to value my flat. I thought I'd make lunchtime useful, and go to HSBC to close down 2 bank accounts. I had previously been told I could do this by going into any branch, see. Queued up, got to the front, was told I had to submit something in writing. Queried this and they said ah, OK, go upstairs and speak to one of their advisors. Went upstairs. There are 4 little booths with desks in. Only one had an advisor in it, and as far as I could tell she was sat there with her mum. They saw me, but did nothing. Maybe it was another customer, but the snippets I could make out earwigging didn't convince me. Either way, there was no little reception desk to that floor, just a waiting area with a coffee machine. I sat in one of the chairs for ~10 minutes and didn't spot a single other member of staff -- just another customer who popped their head up, saw there was no-one around, and fucked off. After those minutes I fucked off too. So I still have 2 HSBC accounts to my name, neither of which I want.


After spending so long on the phone with Tesco last week I ended up requesting the signature verification form again, in the post, so I can send it back to them. Today's post has come and gone and I still don't have it.


I fucking hate this shit. It winds me up so much that I shake and almost feel tearful, for fucks sake. I utterly dread dealing with any of them, and my experience nearly always vindicates that feeling. They make me feel depressed and angry and helpless all at once.

Monday, November 17, 2008

Tesco personal finance are fucking shit

I opened a Tesco "internet saver" account in April. I ranted about it here in October. I phoned them up today.

Actually I phoned them up about 4 times. Beforehand I'd gone through my daily routine of trying unsuccessfully to login to their banking website, but because I was in a bit of a sort-out-finances mood I took the plunge and called them up. The first time went like this:

Welcome to Tesco Personal Finance. For savings or Clubcard Plus, press 1.
one
For automated service, press 1. For ...
one - thought I'd give automation a go, see if I couldn't transfer money out without speaking to someone
Please enter your customer number.
customer number
Please enter the 3rd and 1st digits of your security number
3rd and 1st digits
This service is temporarily unavailable. Please call back later. Thank you for calling Tesco Personal Finance.


And it hung up on me.

Er. Oh. OK. So I called back. This time, instead of automated service, I pressed 3 to talk to a customer services representative. I had to enter the numbers etc again, but I assumed this was so the person I would imminently be talking to would already know who I was. First line of security and all that.

I was wrong. The same thing happened. Computer said no, click, BYE.

I called back again and listened to every option of every menu. Apparently the only way I could talk to a human about savings was the route from the previous call, but I knew that didn't work; so this time, instead of actually entering my customer number, I did nothing:

You did not enter a customer number. Please enter your customer number.
more nothing
You did not enter a customer number. For help, press the star key.
*
To enter your customer number, use your phone's keypad to type in the digits. To speak to a customer services representative at any time, press the star key.
*

Hold music! Delightful hold music! I was in a queue, they were terribly busy you see, but I was in a queue to talk to a human! Salvation was surely near!

I waited on hold for 5 minutes or so. Finally a woman answered, frightfully sorry to have kept me waiting, she wondered how she could help me today. I explained, with not inconsiderate exasperation, how I'd had an account for 7 months yet not been able to login, and she took some details. Specifically she took my customer number and 2 digits from my security number -- the same details as I enter every day in the website, the same as I'd typed into the phone earlier -- and said she couldn't help me. My account is locked, see, pending receipt of proof of my signature. I swear she'd gone to the fucking website same as I do and gone through the whole thing and was just reading it out. She couldn't do anything for me. No withdrawals, no closing the account, no fucking anything. Great customer service!

I did get put back on hold briefly while, supposedly, she got someone to check all the way back to July (account was opened in late March/early April; not sure why they only went back to July). Of course they found no evidence of me sending them anything my signature on it. Never mind that they've got my fucking money and that I can type in account numbers and sort codes and customer numbers and security numbers and any other details they want: because they've only received about 4 things with my signature on instead of 5 I can't have my money and she can't help me.

Click. Human says no. BYE.

I went back to my desk, back to my laptop, back to the website. Tried to login, failed, clicked on "send me the signature verification letter". The fucking bastards. Perhaps in 2 weeks or so I'll be able to login.

Perhaps.

Sunday, November 16, 2008

The Amazon saga continues

Can't say as I'm actually annoyed by the pricing shenanigans any more, but the email idiocy is reaching amazing heights/depths. The date they said they'd respond on came and went, and 2 days later they phoned me (withheld number, so I didn't respond; I've also explicitly asked them to not phone me...) and left a long rambling voicemail. Upshot: they can't figure out how to unsubscribe from their email lists. Good effort, Amazon.

Monday, November 10, 2008

Looking forward to an email from Amazon

Bit of a spleen-vent this one. Move on if you've no time for thinking online retailers should feel obliged, if not legally then morally, to honour the slight pricing mistakes they make from time to time. Lots of them do, but Amazon don't. Indeed, they have a policy which basically says you can't trust their pricing at all.

A few weeks ago, 3 or so I think, I did my daily routine of visiting Amazon.co.uk to refresh my basket and see if the price of what I had in it had changed. It had -- the Sony BDP-S350 blu-ray player was at £129! I'd been waiting for it to drop to £150 or so before pulling the trigger; £129 was an unexpected bonus. Not a huge discount, less than 1/3rd off the £179 price they'd had for a few days previous, just a great deal and better than most other sites. I ordered one, told a few friends, and posted it on the whathifi.com forums.

The next morning someone on avforums.com was saying they'd had their order cancelled. Mine was intact until the afternoon, when it too disappeared from the site. I asked them to reinstate it, they replied saying no, they wouldn't, and if I'd been paying attention they actually have a published and explicit policy allowing them to (a) change the price of any item after you order it, and (b) cancel your order later than you can cancel it yourself. A very biased "contract" (which, to their benefit, is not actually a contract until they've dispatched the goods). Thank fuck I'd not bought a load of blu-ray discs in the afternoon!

Amazon did honour the £129 price for some punters, just not everyone, and despite a sickenly patronising email imploring me that the author personally didn't want Amazon to lose my custom -- for having spent so much with them over the years (it's probably not more than £300 in 8 years, pfft!) -- they weren't going to do the same for me. No fucking dice.

Amazon win out of this: they look good to anyone who saw the price but didn't buy. In the absence of a public admission that the price wasn't honoured, they have given the impression of being a retailer that occasionally has really decent offers. They're likely to attract and retain customers because of that. People will use the site more on the look out for similar offers. And similar discounts are available all the time, 20-odd percent discounts on RRP or the price of items elsewhere are not uncommon. So it seems they can just use their policy to price up any popular item with a slightly bigger than normal discount, honour a few purchases, up it again later, nice zero-cost marketing campaign right there.

I think it's out of order -- they can't have taken that many orders that it would make a dent in their profits; it wasn't an obvious mistake price, the discount was less than 33% for crying out loud; and at least one other retailer offered the same price and honoured it themselves. And surely it's just good customer service? No, it appears not: Amazon just say fuck off. So I was really in a huge huff with them, and opted out of all their emails except the ones they send when you actually make a purchase.

That was all about 3 weeks ago. About 4 days after I unsubscribed I got a promo email, so I complained. How do you unsubscribe if the unsubscribe options don't work? In response they phoned me from a withheld number, so I didn't answer, and then they emailed me to say sorry, sorry, sorry, really sorry, my email is now on not a single one of their promotional lists. Sorry again. Sorry.

A few days later, I got a promotional email from them again. Went to my account to confirm I was still unsubscribed, and complained again. They phoned, left a voicemail, but didn't follow it up with the email they promised.

This morning I got another promotional email from Amazon.co.uk. Complained again. I've explicitly asked them not to phone me, and shockingly they've done that -- they've emailed me to say it's being looked at and I'll get a full response on November 13th. I monitor my spam folder with interest.

Sunday, November 02, 2008

Football vs the word "deserve"

If you use Google to search for "define:" followed by a word, you get back a dictionary definition or two for it. This is what you get for the word "deserve":

Definitions of deserve on the Web:

  • be worthy or deserving; "You deserve a promotion after all the hard work you have done"
    wordnet.princeton.edu/perl/webwn
  • To earn or merit a reward or punishment
    en.wiktionary.org/wiki/deserve

  • Dictionary.com has quite a few more, so I'll not reproduce all of its definitions; just the following:
    –verb (used with object)
    1.to merit, be qualified for, or have a claim to (reward, assistance, punishment, etc.) because of actions, qualities, or situation: to deserve exile; to deserve charity; a theory that deserves consideration.
    –verb (used without object)
    2.to be worthy of, qualified for, or have a claim to reward, punishment, recompense, etc.: to reward him as he deserves; an idea deserving of study.

    I wish someone would explain all this to every football player, manager, commentator and pundit. I am sick and tired of hearing them all trot out this fucking daft bollocks about "deserving at least a point", "deserving a win", and so on. No: you get a point if you score the same number of goals as your opponents, none if you score fewer and 3 if you score more. It's really that simple. If you scored 1, and your opponents scored 1, then you did not deserve 3 points. OK? OK. And while I'm at it, if someone heads the ball wide of the goal then they manifestly did not deserve to score. A good pass does not deserve a goal to be scored by the receiving player: it's just a good pass. And so on.

    Thursday, October 30, 2008

    Russell Brand and Jonathan Ross

    I just sent this to the BBC:

    I'd like to register my disapproval of the BBC's handling of the Ross and Brand prank call affair.

    It is my sincere wish that the BBC had defended its stars more vigorously, and I am shocked and disappointed by the apparent kowtowing to an angry mob which has occurred in recent days. Prank phone calls -- funny or not, targeting the general public or celebrities -- have been a staple of radio for years, yet such an obvious defence seems absent from the reports I have seen; although this is not my main concern. What perturbs and, in fact, offends me the most is that the BBC's reaction seems to betray a willingness to pander to the fleeting, agenda-fueled witch-hunts perpetrated by the less salubrious members of our fourth estate. As a result I cannot help but expect a downturn in progressive, risk taking, experimental or groundbreaking programme making.

    Brand and Ross's call was of course none of those things -- but having "won" their attack on mainstream targets over a frankly innocuous and childish prank, the press will justifiably feel vindicated and empowered to push their agenda again and again in the future. A consistent BBC will surely comply, although I hope I am wrong.

    God it winds me up. The Daily Mash has the right idea.

    Tuesday, October 28, 2008

    Financial institutions and me

    Why is it so difficult to get anything done with banks? Credit card companies fall over themselves to give me good service -- nothing bad to say about my BA Amex, and MBNA have given me an 18k limit on a single card, for crying out loud! But banks fucking hate me, and I don't know why. This is what has happened this year.

    Natwest

    My NatWest debit card expired in 02/08. Having not received a new card in the last week of February, I phoned them up asking when I'd get it. They said they hadn't sent one out (what the fuck?) but would do immediately, and suggested they send it to my local branch, Surbiton. I asked if they'd inform me when it arrived and they said no need, just go in to pick it up. I went in on March 4th and they had no card, and told me to wait to be called.

    I didn't get called. So I called back. They'd lost the card, and said they'd send a new one out, this time to my home address. That didn't arrive either, so I called them again and they had no idea what had happened to it. A stop was put on it and a third new one was being sent to the Wandsworth branch. My account is still held there because they advised me not to bother moving it when I moved house. Wandsworth is a pain in the cock to get to from work or Surbiton.

    A week later, beyond the Easter bank holiday and 4 weekends since I should have got my automatic replacement, I went to Wandsworth and picked the card up. Because it was a replacement the man explained I would not need to activate it, it would just work immediately. I went back to work. That evening I tried to draw some money out, and my PIN didn't work. I called them up the next day and they said no, of course it didn't, my previous card was stolen and they needed to send me a new one.

    Fucking useless. I went a month with no debit card/cash card. They offered me £12 compensation. This was less than the amount in charges I had to pay for using credit cards to withdraw cash during that period.

    Tesco

    Also in March, I opened an account with Tesco savings. I have some money put aside and wanted to take advantage of a bonus clubcard points offer they had for new account holders. I opted for the "Internet saver" account, the main benefit being that you can manage everything online. It is October 28th and I have still never once managed to log in to my Tesco account.

    The initial application happened online. One of the things it asked for was a password, which I provided. All the details were sent to me in a form I had to sign and return, but "password" had become "mothers maiden name", so I scribbled out what was there and wrote the term I use for that instead.

    A week or so later they sent me something else in the post, saying that since I'd changed something they needed an extra signature. So I sent that back and waited.

    Sometime later I got more stuff in the post. Spread apart by a few weeks I got a one-time registration number, my account number and sort code, and my online customer number. Precisely because they all came in the post, and were sent at different times, I could never manage to lay my hand on all of these things at once. Massively frustrated by the amount of things I'd had to do through the post for an Internet saver account, I gave up for a while. About 2 months, in fact, after which I had a huge hunt for stuff and found all the details. I went through the, what, 3rd stage of online registration? And hey presto, their site says they need another signature. I have no printer at home, so I had to wait another week for them to send me a copy of the form themselves. I signed it and returned it, 4 weeks ago. I still can't login to my savings account. I do hope the money's safe.

    Nationwide

    Because of the NatWest fiasco, I wanted to move away from them. Fuck them if they can't do a simple fucking thing like send out replacement debit cards. Oh, what a mistake this has turned out.

    I started opening the account in June. Another fill-stuff-out-online-then-do-stuff-offline load of nonsense, it took me almost to the limit of 90 days to get round to visiting a branch with proof of who I am and stuff.

    When my account finally opened, Nationwide gave me a cash card. No overdraft, no chequebooks, no debit card, no chip + PIN. It seems I am 12 years old or something. Nationwide come with a great reputation and I tried to find out what had happened and if I could change it, by using their recommended way of contacting them: through secure messaging on internet banking. They aim to respond within 5 working days. I sent them 2 messages on October 10th and here we are on the 28th with no responses at all. So now I have two bank accounts, both of which I need to keep, because my direct debits have made their way across but I'm not transferring my salary + spending money to an account that doesn't have a bloody debit card on it.

    Why do banks hate me so fucking much? I'm really angry and depressed by them all.

    Monday, September 29, 2008

    A new type of django relationship: Generic Intermediaries

    Bloody hell, it's a second technical post in the space of a week. I was really bored last night (when I wrote most of it, as the publish date suggests); had seen both of the Family Guy episodes on FX several times before, and similarly I've seen Die Hard enough times for it to not really require another viewing. Now, if it had been in HD... anyway, the upshot was that out came OmniGraffle, before I knew it I'd created a diagram and then, well, a picture needs a thousand words of explanation. So, after the lozenge, here they are.

    NB this stuff is also included in the django-slots wiki; I thought it would be sensible to post it somewhere that might have an audience, as well as this blog.


    Generic intermediaries: relationships with characteristics

    Introduction

    This document describes the GenericIntermediary django model and IntermediaryKey, a key-like object. Together these two classes provide a mechanism for giving characteristics to relationships between models.

    Existing relationships in django

    fixed relationships

    Django already provides relationships between models. These allow you to link single or multiple instances of models to one another. Their existence is reflected in the database schema behind those models, be it generated when using syncdb or defined explicitly with dmigrations. I'm calling these relationships fixed because the model on either side of the relationship is explicitly specified in the code.

    generic relationships

    The content types application (django.contrib.contenttypes) ships with django and is in INSTALLED_APPS by default. As well as providing a unique identifier to all model instances in your project through an app/model/id triplet, you also get the ability to specify a generic foreign key and/or generic relation. This lets you genericise one side of a foreign key relationship: that is, specify that your model can be attached to any other model. This relationship is specified by using two fields: a ForeignKey to ContentType, and a regular field used to store the ID of an instance of that type. As with the fixed relationships, therefore, this requires columns in your schema, to reflect the fact that the model is related to something else.

    Generic intermediaries

    Generic intermediaries are a way of specifying that a relationship exists between two model types separately from the instances of those models. The relationship is then given characteristics through a new model, in which the fields containing the instance IDs are also stored. This model can then be used to create a mixin, a Manager-style object or Key-style object, to give new attributes to existing models without requiring schema changes. This is how django-slots is implemented.

    Diagram

    This is a diagram of how django-slots is implemented, including the slots_demo app which provides the Page and Style models.



    Explanation

    Page and Style are django models, implemented as normal, with whatever attributes they require.

    Between them is GerenicIntermediary In concrete terms this is a model with just two attributes, each of them a ForeignKey on ContentType and a unique_together constraint ensuring only one relationship between two types -- in one direction -- can exist. The direction is important: as with the diagram, the two keys represent the models on the _left_ and _right_ hand side. The left-hand model is that which the right-hand types are _against_; in django-slots therefore Page is on the left.

    Slot is a django model which has a ForeignKey on GenericIntermediary This is, in effect, a declaration that Slot implements characteristics of a relationship. Missing from the diagram (bolded to remind the author to remedy this!) are the attributes which contain the IDs of the instances which are related, that is, the ID of the Page objects and that of the Style objects.

    Left at this, scheduling would be possible. You would create a slot like this:


    # assume we have Page and Style objects called page
    # and style respectively; we also have two datetime
    # objects, start_time and end_time
    cp = ContentType.objects.get_for_model(Page)
    cs = ContentType.objects.get_for_model(Style)
    gi = GenericIntermediary.objects.get(left=cp, right=cs)
    slot = Slot(relationship=gi, against_object_id = page.id,
    slotted_object_id = style.id,
    start_time = start_time, end_time = end_time)


    and retrieve it so:


    # same assumptions as above; also same cp, cs,
    # and gi assignments
    now = datetime.datetime.now()
    # look for a slot that now falls inside,
    # against our page
    try:
    current_style_slot = Slot.objects.get(
    relationship=gi, start_time__gte=now,
    end_time__lte=now,
    against_object_id = page.id)
    except Slot.DoesNotExist:
    current_style_slot = None
    else:
    current_style = cs.get_object_for_this_type(
    id=current_style_slot.slotted_object_id)


    This is horribly verbose and inconvenient. It's also not required.

    Intermediary keys

    Also missing from the diagram above is IntermediaryKey. As the name suggests this is a key-like object which relates to the GenericIntermediary. Informed heavily by the GenericForeignKey API, IntermediaryKey works by specifying which two fields together point to the instances on either side of the relationship. The first argument denotes both the relationship field (the foreign key on GenericIntermediary) and the side of the relationship, using normal django key__attr syntax; attr will always be one of left or right.

    By having an IntermediaryKey the model gets an attribute which, like the fixed relationships, returns the actual instance of the related model.

    This is how Slot uses IntermediaryKey


    against = IntermediaryKey('relationship__left',
    'against_object_id')
    slotted = IntermediaryKey('relationship__right',
    'slotted_object_id')


    all this really gives us is the ability to use .against and .slotted as shortcuts to the instances of Page and Style in a relationship. The only improvement we can make to the previous examples is to shorten the current_style assignment:


    current_style = current_style_slot.slotted


    Still horrible, though.

    Usage by django-slots

    All the verbosity can be reduced (to taste) by the implementation of a class to define characteristics of the relationships, and the use of techniques to attach these classes to existing models.

    django-slots' Slot model/class is the first such relationship (because GenericIntermediary and IntermediaryKey were invented for this project!); ScheduleMixin is the technique which attaches them to existing models.

    The introductory blog post explains at a high-level what this means, in that it shows the API of django-slots. To fully understand the way to get from the above code to provision of attributes and methods, read up on mixin classes and see ScheduleMixin in models.py

    Conclusion

    GenericIntermediary and IntermediaryKey are not replacements for fixed relationships, nor generic relationships. Instead they are a way of representing the fact that a relationship exists between two arbitrary classes separately from the instances of those classes in the relationship. This is useful where:

    • the relationship between two models has characteristics itself;
    • one model's relationship with another is not, or need not be, an attribute of either;
    • a model wants to declare which other models are related to it, rather than the other way round; or
    • there is a need for another model to key on your own, when you cannot change its schema (eg in 3rd party apps you don't want to fork)

    The mixin technique currently employed by django-slots demonstrates the first three of these use cases:

    • the relationship exists between two times
    • Style and Page are separate models with no explicit fixed relationships
    • Page declares that it would like Style to be attached to it; Style does not declare itself as tied to Page -- or anything at all

    other random thoughts

    I don't believe time is the only characteristic that could use this technique, which is why I've written such verbose documentation. I'm struggling to come up with proper use cases for, say, geographic foreign keys (where instead of start_time and end_time you might declare a bounding box, or latlong + radius?), but I have a gut feeling it could be useful.

    Friday, September 26, 2008

    alice


    alice
    Originally uploaded by Darren Foreman
    After being sent a youtube clip of a stealth ninja cat this afternoon I was searching for evidence that Ruth's cats aren't evil. That made me look at my own photos of them, and find this one, which I just feel like flagging up here as my absolute favourite. Awwww.

    Tuesday, September 23, 2008

    Introducing django-slots

    Sigh. Was it inevitable? I don't think it was, but it's happened anyway: I'm putting a purely technical post on my blog. Sorry and all that. Those of you who couldn't give a toss about python, django, coding, my job, and so forth can turn away now. Normal lack of service will resume shortly.

    django-slots

    This post introduces django-slots, a system for scheduling relationships between django models. It's an open-source (head-above-parapet) project which allows django developers to include time-based foreign keys in their applications/projects.

    At the time of writing django-slots should be considered pretty nascent. Some reasons for this are detailed near the end. Nonetheless I believe even its current state provides enough useful functionality to justify its release.

    Background and rationale

    The first iteration of django-slots was a weekend pet project of mine, inspired by two things. Firstly, the team to which I belong at work were busy implementing several different solutions to what I considered a single problem: making a relationship between two objects occur for a period of time. Secondly, I believe that as a software engineer my job is to make my job easier; and as a software engineer on a CMS this mostly means that my job is to make everyone else's job easier too. This comes down to two things:
    1. Engineers should not be required to make changes happen at a particular time (and this means doing deployments etc).
    2. Users should not be using my software at times when I could really do without them calling me up saying it's broken (ie weekends, midnight, etc)
    Both problems are solved by writing software which allows the future state of the data in my CMS to be scheduled, and previewed, in advance.

    What django-slots is not

    • django-slots is not a system for making things appear and disappear, or exist and not exist
    • django-slots is not a tool to explicitly make something happen. It is not a replacement or wrapper for cron; nothing is ever triggered.
    • django-slots is not a replacement for foreign keys, or other normal relationships between entities
    • django-slots is not perfect or finished. By a long way.

    What django-slots is

    django-slots aims to provide developers with a way to satisfy the generic requirement of scheduling changes to relationships, designed with websites in mind. The most common concrete and specific example is probably to schedule a particular ad/sponsor/promotion to appear on a site between two times.

    django-slots allows developers the freedom to define what "something" is through an intermediary mechanism. Unlike a normal ForeignKey, a relationship between two models exists separately from the instances of those models; the instance-instance relationship is bound to a period of time, known as a slot.

    With this approach django-slots also provides a platform on which developers can build other tools to report, audit, preview, and more. A timeline of relationships means you can see the state of your data in the past, present, and future.

    Furthermore, django-slots decouples models from one another, allowing them to exist and develop independently. No changes are required to the models which are scheduled, and no schema changes are involved in declaring the schedules attribute. django-slots is designed to be simple.

    Finally, the mechanisms in use to implement the relationships inside django-slots are available for use by other applications. Specifically this means the definition of generic relationships between arbitrary model types on both sides (as opposed to the one-sided relationship already possible with GenericForeignKey). Where django-slots is concerned only with time, I envisage other applications in areas where similar concepts (universally identifiable points, etc) apply, eg geography.

    Code

    django-slots is hosted on Google Code, and there is a minimal installation guide on the wiki system which it provides.

    http://code.google.com/p/django-slots/wiki/QuickstartGuide

    Description

    django-slots is used by telling your models to use a provided mixin class, and declaring a schedules attribute. This attribute should be a tuple of other class objects, which must be other django models.

    By setting up your model like this you are declaring that a relationship can exist between it and those in the tuple. Your model is extended with properties and methods for querying and managing instances of these relationships. You can then schedule a relationship to exist, retrieve the current relationship or that for a given time, and retrieve a timeline of all relationships between your instance and instances of the other models.

    API/usage


    # models.py
    from django.db import models
    from slots import ScheduleMixin

    class Style(models.Model):
    # define your style model here
    ...

    class Page(ScheduleMixin, models.Model):
    # Style is the foreign key which varies according to time.
    # NB. you don't need a default it it makes no sense to have one
    ...
    default_style = models.ForeignKey(Style)
    schedules = (Style,)

    # views.py
    def detail(request,...):
    page = Page.objects.all()[0]
    # the Style scheduled for right now, if there is one
    style = page.current_for_model('Style')
    if style is None:
    style = page.default_style
    # do stuff with style
    ...

    # properties
    # dictionary of schedules keyed by model,
    # each entry is an array of slots ordered by time
    page.schedule
    # dictionary of all objects (or None) currently
    # scheduled, keyed by model name.
    page.current
    # returns next scheduled objects (ie, where start time is
    # later than right now) in same format as current
    page.next
    # returns last scheduled objects (ie, where end time is
    # earlier than right now) in same format as current
    # per-type query methods
    page.last
    # just the array of slots for Style
    page.schedule_for_model('Style')
    # the Style object currently scheduled, or None
    page.current_for_model('Style')
    # the Style object scheduled next, or None
    page.next_for_model('Style')
    # the Style object which most recently finished, or None
    page.last_for_model('Style')
    # finding what's scheduled at a particular time.
    # NB this only works on a per-relationship basis;
    # you cannot pass a datetime object to page.current()
    page.current_for_model('Style',jan_1st)
    # scheduling an object
    page.add_to_schedule(style_object, start_datetime, end_datetime,
    notes)
    # a signal catches this and deletes all relevant slots
    style_object.delete()

    What's missing

    As mentioned above django-slots is by no means complete. To my mind there are a few fairly crucial missing pieces right now:
    1. Removal (descheduling) of individual slots
    2. An admin interface.
    3. A test suite.
    And there are bound to be far, far more. Hopefully such holes will be filled; better yet, hopefully others will (help) fill them.

    Colophon

    django-slots should work in any out of the box django installation, though it was written alongside django 1.0. The only configuration requirement is that django.contrib.contenttypes is in INSTALLED_APPS (this is the default).

    Sunday, September 14, 2008

    men and boats


    Haven't confirmed whether or not it really was a race, but in the course of trying to put decent titles etc on the flickr set about the walk described in the previous post I have stumbled across this: Hampton Court Model Yacht Club.

    Oh wow. I don't know what to make of that at all. The idea, the web "design", the any of it.

    blimey, a walk

    After getting a prod on twitter I managed to do today what I've failed to do so many times this year, and drag my sorry carcass away from the TV/xbox/laptop on a Sunday to go for a walk. Turned out to be a very good idea 'n all, for a number of reasons.

    Not that I hadn't spent a bunch of time in front of the TV, xbox, and laptop this morning anyway. Got up with a vaguely woolly head and did a bit of coding unrelated to work, a habit I've surprisingly fallen back into after a 4+ year hiatus. More of that later, possibly; I'm undecided whether to ever launch or publish anything, the main motivation is just to learn how to do python well so I can do my job better.

    Aaaaanyway. Coding on hold I put the xbox on to play Death Magnetic a bit more (what an album!) but left meself on Yahoo! Messenger so I could chat to the still-in-Pakistan missus when she popped up. Pop up she did, apparently with a very bad hangover, and she soon went back to bed after not much more than a quick hello. After that the twitter prod happened so I showered, sorted my GPS and camera (k850 in flight mode! hah) out, put a spare shirt in me bag and buggered off towards the Thames, destination Richmond.

    I didn't go to Richmond. I did this:

    Surbiton, Kingston, Home Park, Thames Ditton at EveryTrail

    Map created by EveryTrail:GPS Geotagging

    Hmm. That's not a bad embeddable widget (the other one everytrail do is worse). Anyway, I took the familiar route from home to Kingston Bridge, which on a day like today always reminds me, as if I need reminding, why I love living here. It's just such a nice view and walk. But I wasn't really hanging around to savour it, this was a very workmanlike trip, done to take advantage of the nice weather as an opportunity to do something vaguely healthy. I had my mp3 player on very loud, a bag on my back to both make sure my posture was OK and to provide some extra weight (the dual aim being to get some upper body benefit as well as lower body, and to just generally use up a few more calories than normal), and I was keeping up a pace that meant after just a mile or so I could feel me shins saying hello.

    Mind you, it would have been really stupid to be out and not take any photos at all. I took some duplicates (ie, I've done this bit quite a lot) around the river and at Kingston Bridge -- including a pretty poor panoramic effort -- before diverting off a familiar track and into Home Park (which seems to also be called Hampton Court Park).

    Oh, wait, I already skipped over the whole didn't-go-to-Richmond thing. Yeah. I got to Kingston Bridge and decided it was a daft idea. For one, I don't actually like Richmond. I do like locks, which means Teddington Lock would have been good, but I fairly recently walked with Ruth to Richmond Park which involved trekking as far as Ham along the river. But even with the spare shirt (designed to change into at my destination, out of the super-sweaty one I'd be in at that point) I didn't relish the idea of finishing up that far away and having to get a couple of buses back. Also I was sort of time-bound, in that I wanted to get back in time for QPR vs Southampton (4-1! Come on!) on the box at 4pm. So, all those factors combined to make me decided on a new route: from Kingston bridge, back on the other side to Hampton Court and then a train to Surbiton and home.

    Turns out I went to Richmond, though, sort of. On the north side of Kingston Bridge there's a sign saying "Welcome to Richmond Upon Thames". Sure, it's only the borough, but, meh... along the river towards Hampton Court I spotted a sign which piqued my interest (the royals are going to kill a bunch of animals), discovering in the process of photographing it that I was next to a gate into Home Park that I hadn't previously known about. I knew there was a golf course there, and that in that area there was also a park, but I didn't know there were a few public entrances. Having stumbled upon that one I diverted my route.

    Christ, was I ever glad I did. Not that I don't like walking that stretch of the Thames, but I've done it a few times and new things are always better than old. Better still, there were mushrooms and deer! The 'shrooms were pretty cool, but the deer took me by surprise, almost literally. I first spotted a few wandering around the car park of Hampton Court golf course, and then there were 3 just sitting on either side of the path I was walking along. Being a huge wouss I avoided walking between them, but did use poor digital zoom to get a snap of them once I was a safe distance beyond.

    Home Park does actually seem to mostly be a golf course. It's quite boring. Oh, but before the deer I had gone past a lake where loads of blokes were, I think, racing radio controlled yachts. They were certainly using them, and a little portable tannoy thing was counting down 60 seconds until the start of something. I didn't hang around to see what it was.

    Jubilee Gate was quite useful because it gave me a you-are-here moment, and showed me I was on the right path to one of the exit/entrances which is right near Hampton Court -- and that I could still avoid walking alongside the river. After crossing a couple of fairways I headed up a big corridor of trees towards a fairly majestic gate with the palace behind it. The gate was shut. It's shut from April 1st to the end of September. Toss. But it said I could go to ... Jubilee Gate, and walk along the river, to get to the Palace. Ah well. I hadn't actually expected to find a gate directly into the Palace gardens there, and am glad I haven't been there by myself since Ruth wants to take me there anyway. But it did annoy me that I had to backtrack.

    If any of the above is interesting that's quite a surprise, and it's also quite sad, because that's about it. The rest of the walk was, obviously, along the river to Hampton Court bridge, then an ice cream before changing my mind (again) about the train and treading the roads through Thames Ditton and back home. Really nothing special, and that's why the pictures end as well. Still, 9.2 miles at 3.4 miles an hour is decent, in fact my brother had suggested I try to do a round 10 miles in 3 hours and that's the pace I managed, if not quite the distance.

    Back home in plenty of time for the game. Got a call from Ruth telling me it wasn't and isn't a hangover; she's proper ill. :-(

    Thursday, September 11, 2008

    Blogging about things which aren't travelling is hard

    Hard enough that I don't think I can be bothered with it. I did vaguely think about posting some reviews of all the books I've read recently but tbh I think I'd rather do that using @oo5 on twitter.

    Clearly, in order to keep this blog going, I need to go travelling somewhere. Alternatively I could post something about scheduling arbitrary models against one another in django, but I'm not a tech blogger and don't really intend to turn into one.

    Thursday, September 04, 2008

    Crathes Castle


    Crathes Castle

    Crathes Castle
    originally uploaded by Darren Foreman

    Tuesday was easy. We had it all planned out. Go see a castle, come back, go walking, eat.

    After a breakfast -- comprised of cereal, then scrambled eggs on toast cooked by the German Apprentice (still learning English, but apparently understood enough to know what 'salmonella' meant, judging by the instruction from the kitchen we could overhear) -- we went back to the bus station to get our transport to Crathes Castle. About 2/3rds of the way back towards Aberdeen, this castle had two distinct advantages: it was supposed to be really good, and the bus stopped right at the gate to the grounds.

    Brushing aside the incomprehensible footwear compliments I received from an alighting passenger, we boarded and, as far as the driver was concerned, Ruth asked for two returns to Crathie [mumble]. Crathie is a village in the opposite direction, which the bus does indeed go through. After some confusion while the driver figured out that he wasn't driving towards Crathie, I realised the error and said "Crathes". Mix-up cleared up, the driver then sold us a ticket which doesn't exist -- a pass that would let us travel all over the place on that route, and other Stagecoach services. The exact kind of ticket we'd asked about on Monday at Aberdeen bus station and had been told doesn't fucking exist. In fact this was a better ticket -- cheaper than two individual passes, he sold us a family ticket that costs 19 quid for two adults and up to 2 children. Zero is, after all, "up to 2".

    Crathes was great. It's the ancestral home of the Burnett family, and beyond that I don't have much to say about it that wouldn't just be a rubbish description of the pictures I took. That said I do of course need to boast about having seen and photographed a real live red squirrel. :-D Upon my return to London, and mostly as a result for having twittered about it, I learnt that this was actually something people were jealous of. Coo!

    Actually, one notable thing which you won't find by reading up on the history of Crathes elsewhere is the sales technique of the woman in the ticket office and merchandise shop. We just wanted day tickets, but she virtually imprisoned us in her attempt to get us to join the National Trust. Despite our perfectly reasonable, logical, and sensible objections, she nonetheless kept insisting that we should pay the 50-odd quid fee to get a year's free entry to, and apparently of even more use, free car parking at NT properties.

    We have no car, and Ruth is spending 10 of the following 12 weeks out of the country. Even when we said this, and promised to join the Trust upon her return -- so that we got a full year's benefit of our membership, of course -- she still insisted that joining NOW NOW NOW was the best thing we could do. Her basis for this argument was some utter nonsense about winter being a shit time anyway, and buying it now we'd already have our membership ready for when the weather starts clearing up.

    That woman was fucking mad. We managed to pay just for day tickets, and escaped. As I said, the castle was great, and the gardens were too.

    Back at the gate for the bus, we found ourselves unfortunately in the midst of the 2 hours where there are no buses to Ballater. So instead we had to go to Banchory, a fairly nondescript town about halfway between Aberdeen and our real destination. Had a pint, went in WH Smiths, got the next bus. It was a pikey shitty bus only really suitable for journeys of, say, 600 yards, rather than 20-odd miles. Cramped, uncomfortable, it was the first long road trip of the whole holiday that made Ruth feel ill :-( plus any chance of walking had disappeared. Ah well.

    Back at the B&B we needed to get changed and find somewhere to eat. What with Tuesday not being Monday we'd envisaged having our pick of the restaurants in Ballater; and being Ruth's birthday she wasn't to pay a single penny towards it. The only thing required was that she needed to pick and book the place, since I hate using the phone.

    She phoned every restaurant in Ballater, including the hotel bar at the Hilton Craigendarroch (oh how I wish we'd known about that place earlier! think of the loyalty points, the room upgrade, ... sigh), and found nothing. Zip. Nada. FUCK. ALL. Every restaruant in Ballater was full, apparently, and we had to go further afield. Specifically we found a table at a place in Aboyne, probably the nearest village once again back in the direction of Aberdeen. Called the Candlestick Maker, it was virtually empty and we learnt it was shutting within the next month. In fact the day we were there was the last Tuesday they were opening at all, as for some reason that was the weekday they were taking off in their last month. Who knows why?

    As it happens the food and service were both spot on. Shame. I guess if Ballater's food really is that good then they just couldn't deal with the competition...

    The bus timetable was very kind to us, either side of the meal. It dropped us off 10 minutes before our booking, and picked us up 10 miutes after we left. Who needs cabs? Even the local scrotes weren't particularly scrotal.



    I did think I'd blog about Wednesday separately, but to be frank I can't be bothered. There wasn't much to it: bus to Aberdeen, lunch, train to Dyce, cab to the airport, couple of hours in the lounge, flight to T5, bus home, hello cats, hello Wooj.

    Wednesday, September 03, 2008

    turn that wine back into water


    Ballater from on-high
    Originally uploaded by Darren Foreman.
    We checked into our B&B properly after lunch, a bit surprised to find we essentially had an entire wing to ourselves. Certainly an entire floor, they said "your room is upstairs" and it, our toilet, and our shower room, were the only things that were. And after tourist information had asked for a double room, which by the sounds of the phone call was likely to be a twin room turned into a double, the presence of a bunk bed was an eyebrow-raiser.

    Thankfully there was a double bed as well. The bedroom was the full depth of building, giving us a view above the caravan park to the hills beyond at one end, and to Craigendarroch over the local housing at the other. The latter window was slightly worrying as it had no curtains, yet also the most scope for being spied on(!)

    Also worrying, to us big city types surrounded on a daily basis by the scrotes of Broken Britain, was the knowledge that the front door was never locked and being asked if we wanted a key to our room. Such things are apparently not required in sleepy Ballater, and we felt almost guilty for saying we would like one. It reminded me of my bag quandary in Auckland the other year.

    Anyway, the weather was gorgeous and the day was still young. On came the walking boots, out came the GPS and camera, and off we went. In Ballater tourist information we'd snagged a leaflet of local walks and decided to combine two of them: first walk along the river Dee until it met the one which went up Craigendarroch, the big fucking hill. So we started out through the caravan park, past the golf course, through a car park, and up to a church. Except it wasn't a church, it was an ex-church that's now a "restaurant with rooms" called The Auld Kirk.

    At this point we actually had no accomodation for the following night (Tuesday). When booking in Aberdeen we'd deliberately given ourself an extra bit of freedom, although I'd tried pretty hard to convince Ruth that staying 2 nights in the same place would give us freedom, as we wouldn't have to check out and find somewhere that day. And I'd succeeded :-) but this place tested that, because it looked like a fucking cool place to stay. But we didn't, deciding instead to explicitly look in advance for opportunities to stay in a converted church on some future holiday.

    The Auld Kirk was also the place where the two walking routes joined, so we left the first and joined the second. The trek up the hill is graded DIFFICULT but unlike another one of the same grade, it did not (apparently) require a high level of fitness or proper hill walking equipment. Good job, as I have neither.

    Not really sure how far up we were when we turned back. It wasn't all the way, and from some angles it looked quite near the top... but from others it didn't at all. Either way it was a decent walk, got the heart going and the sweat beading, and was exactly the sort of things we'd had in mind for this holiday.



    The Auld Kirk
    Originally uploaded by Darren Foreman.
    We headed back down the hill -- and it was probably a good idea we'd given up, as it started to rain. The descent would have been a bit more slippery and dangerous if we'd not. Back to the Auld Kirk where we waited for about 2 minutes for a waitress to come out, then we gave up and went to a pub in the centre instead. Beer and quiz/bingo machine session later we went back to the B&B. We ran into the landlord who was so happy about our request to stay a second night he did a little dance(!), and he'd just sorted out a curtain on the rear window too. Mint. In the room we happened to catch a good BBC show about learning magic tricks and stuff. Can't remember what it was called or I'd use the name and link to it.

    It was only about 6pm. It would have been a shame to waste the great weather and countryside, so we actually went out for another walk. Cambus O'May had been on a signpost in a picture in the Aberdeenshire brochure we'd gone through back in the Aberdeen hotel, partially responsible for convincing us we could head inland for a better time. It's a few kilometres from Ballater along a walking track which traces the old train line, and it was that we headed along, finding its start point after a wander through the local housing estate.

    Ice cream van music still in our ears, we wandered for a while, stopping at one point for a chat with a local dog owner whose Collie dog apparently loved rounding up sheep... just so long as it was on its own terms. It hated being told what to do. Daft thing, does it think it's a cat or summat? ;-)

    We didn't bother going all the way to CoM though. It was getting nippy, we were getting hungry; we got as far as a decent view of a little castle-turret shaped house and turned back.

    This whole Deeside area had done a very good job of reminding me of Tasmania, but I couldn't quite figure out why. It hit me on the way back into Ballater that the reason was fucking obvious: probably more than half of the towns and villages in the state were essentially Scottish, built on very similar lines in very similar countryside. A further similarity was soon evident as we struggled to find somewhere to eat. It was a Monday, and most of the restaurants were fucking shut.

    In the end we had a meal in another hotel, which was piping through a fucking terrible local line-dancing AM radio station which interspersed the songs with ads the likes of which I thought had died out in the 80s. The best song by far was Turn The Wine Back Into Water, a Christian country lament from a guy imploring that God sorts out his addiction to grog. Nothing like taking responsibilty for your own actions, eh. I've since discovered, in the course of writing this, that it's by a bloke called T Graham Brown. Now that's a website.

    Despite the awful music and terrible decor, the food and service weren't that bad really. Shame we had to tell about 4 different members of staff that no, we weren't staying there (and we never will!).

    On Tuesday we were going to do one of the things you pretty much have to do, given how many there are in the local area: go see a castle.

    Monday, September 01, 2008

    the Dee after tomorrow

    the Dee
    the Dee,
    originally uploaded by Darren Foreman.
    It's a bit sad when I make a pun that doesn't actually make any sense, but, meh. I have totally lost my decent-title-writing mojo (if indeed I ever had such a thing). Anyway, about last Monday...

    After a considerably calmer breakfast than Sunday (which was a fucking awful zoo-like experience), we checked out from the hotel and headed, via a Diet Coke purchase, to Aberdeen bus station. Everywhere was pretty busy because unlike in England on the same day, it wasn't a public holiday. The buses into Deeside run every 20 minutes, but not the whole way -- the service to Ballater is only hourly.

    We'd given ourselves 20 minutes or so to buy a ticket, having researched the night before that a Bluebird Explorer would sort us out. It was only about 0930, and our plan was this: get the bus to Ballater (just under 2 hours), see if the B&B would take our bags, then double back and go to Crathes Castle. Back to Ballater in the afternoon and check in properly, explore, etc.

    This plan failed. Immediately. First, we were in the queue for tickets until after 0945, thanks to there being only one person selling them and a couple of very awkward customers ahead of us. When we finally got to the front of the queue the woman said there was no pass she could sell us, and that our best bet was just to buy two singles to Ballater. Oh well. Two singles to Ballater then please...oh. You buy them on the bus. So we queued, and missed the bus, for nothing. Thanks a bunch, Aberdeen bus station! We spent a couple of minutes cursing our lack of foresight -- with hindsight, if we'd come to the bus station the day before, just after booking our B&B, we'd have found this out and not missed the 0945. Bollocks.

    ... time passes ... Diet Coke ... T3 magazine (load of shite that is) ...

    Got the 1045 bus, paying £15 each for period returns to Ballater. It was £12 for a single, and we thought the extra 3 quid was worth it so we could come back on Wednesday, if we wanted (at this point I favoured a cab to the airport).

    It fucking tipped it down while we were on the bus. Really bad weather. Things weren't looking good...until we got to Ballater. Off the bus, the sun was out, storm passed. With hindsight, our lack of foresight had turned into a blessing -- if we'd got that 0945 we'd have been utterly pissed on.

    Ballater landscape
    originally uploaded by Darren Foreman.

    When booking the B&B we had discussed with the staff at the tourist information centre that we were using public transport, so they explicitly said they'd book us into somewhere in the centre of Ballater. So, a not-as-short-as-expected walk ensued -- past 2 hotels and a few more B&Bs, next to the caravan park on the edge of town, there we go.

    Even after our delay and the walk it was still a bit bloody early, but the people at the B&B were super-friendly and took our bags in, letting us go free, even giving us a recommendation for lunch venue.

    Wandering slowly to take in the views all around us, we strolled back to where the bus dropped us off and beyond and found the venue. It was a restaurant in the building where Ballater's own tourist information is; it looked busy, so we went in next door for leaflets instead, and ended up paying a quid to visit the Royal Train Station exhibit/reconstruction. There used to be a train line which terminated in Ballater, for Balmoral castle which is only a couple of miles away. It was built for Queen Victoria and was in use right up to the 1960s, though most of the exhibit is set in the 1800s. There's a replica super-posh-opulent carriage, and some interesting titbits of information. For example, her maj back then didn't trust the accordion-style things which join carriages (and were very very new back then), so instead made the whole train -- which was up to 800ft in length -- stop, whenever she wanted to move to a carriage other than her own. Now that's posh.

    By now we were really quite hungry so went for lunch in another restaurant (website fucked at the time of writing), where I had the phenomenally Scottish combo of haggis to eat, Irn Bru to drink. Christ I love haggis, but even I had a bit of a struggle with the quantity they served. Conversation focused mainly on an angry, anti-Royalist Ruth getting constantly pseudo-riled by my consistent and persistent devil's advocacy. Heh.

    Lunch over, it was back to the B&B to check-in properly. First impressions of Ballater were, frankly, fucking great.

    Sunday, August 31, 2008

    Park and Walk

    It just occurred to me that, as well as gloss over Old Aberdeen way too much, in the last post I failed to mention something else about Aberdeen that we discovered on the Sunday. Aberdeen city centre has a Park and Walk scheme.

    I'll say that again. With emphasis. Aberdeen has a Park and Walk scheme.

    I'd heard of Park and Ride schemes before, but this was new to me. New and confusing and stupid. Isn't "park and walk" the same as just "park"? Y'know, park your car, because you're within walking distance of your destination. Where's the scheme? Why have roadsigns? Aren't "park and walk" regions just, err, car parks?

    I wonder if anyone will ever come up with a "park and drive" scheme: drive somewhere, stop for a bit, then drive on until reaching your destination...

    Footnote: somewhat unbelievably, "park and walk" schemes seem to be commonplace. I'm going to stick my neck out here and offer it as evidence of broken Britain. Harumph.

    Exit condition


    William Wallace
    Originally uploaded by Darren Foreman.
    So, hmm. Aberdeen. Bit grey. But hey, maybe that's just because it was the early evening, the skies being grey, maybe first impressions aren't always accurate. After all we hadn't made it to the beach, hadn't made it to Old Aberdeen, in fact let's face it we'd done very little other than wander up the main shopping drag. Aberdeen, after all, is a city with a sightseeing bus tour from a chain company, which to my mind implied that it must be a decent tourist city.

    So, our plan was to get that bus. At the very least it was a form of 24hr bus pass for the bits which were likely to interest us. Yes, our London attitudes may have been a little patronising towards the place -- we had already learnt, courtesy of a tourist city map given to us by reception staff at our hotel, that one of Aberdeen's claims to fame is that there are over 30 places called Aberdeen in the world (another is that it has the largest permanent funfair in Scotland; the council website has a list of amazing things about Aberdeen) -- but we were trying to rectify that.

    First though, a Diet Coke. An easy purchase, but not a quick one, thanks to untold grief being had by the woman in front of us in Somerfield. She was about 150, being served by an under-18, and there was a little communication issue going on. The girl behind the till had mistakenly typed in 2 quid instead of 20 quid, and the resulting odd-looking receipt made the old woman desperately confused and convinced she had been short changed. To top it off her fags had had to be put through the till separately, so she had to hand some money back, and, oh, it was just so traumatic. Noticing this, a supervisor opened another till and we got through. I suspect the difficulties are still going on at the other till a week later.

    Up to tourist information and, hmm, it's all still very grey, isn't it. Even with a blue sky, it seemed to kind of just accentuate how grey the buildings were. But we'd still not been elsewhere... and were destined not to venture far for an hour or so, because we missed the sightseeing bus by one minute. D'oh! So after getting our leaflets etc we went for a wander around some back streets and, fucking hell, we found some colour. Not immediately; first we found some more grey buildings, but less square, on a less straight road, basically some character and stuff. We found sculptures and things, and then we found a big park, in the middle of the city, leading towards the bridge on Union Street which would have been lovely if it was over a river, but in fact was over a busy road and a railway line.

    At the end of the path in the park we went up the steps, which was a mitsake. Heading back the way we came might have taken an extra 10 minutes, but at least it wouldn't have had the strongest stink of piss this side of the old coach station in Manchester. By christ it was awful.

    Right. The bus. It starts outside Marischal College, a building that looks like a church but as the name suggests is not. However, it also isn't a college (any more); there's a bit of scaffold around it, as it's being refurbished for use as the council offices. This is great, because as they told us, the current council offices -- built in the 60s with no respect for the surroundings -- are going to be demolished when it's completed. Those offices are fucking horrible, and hide Provost Skene's House as well. There's a photo on flickr.

    After setting off the bus goes first past stuff we'd already seen, so rather than take much notice I instead spent a bit of time trying to work out what the bloke in front of us was all about. This was a man on an Aberdeen sightseeing bus, in Aberdeen (duh), wearing an Aberdeen FC shirt and 2 Aberdeen FC wristbands. So presumaby he knows the city already, which probably meant he wasn't missing much by putting his (red, possibly Aberdeen FC branded) headphones on so he didn't hear the commentary.

    beach at Aberdeen
    Aberdeen beach
    Originally uploaded by Darren Foreman.
    He didn't get off. We did, after going first through Old Aberdeen (which looked very very nice) and getting to the beach, just beyond Pittodrie, Aberdeen FC's ground. Just opposite was the most terrifying looking bar this side of Gibraltar, and I intend to never go in it even if for some reason AFCW play up there one day. It makes me shiver to remember it. And I can't find a photo of it anywhere, except as a tiny part of this one (about halfway up, on the right, in the car park).

    The stop at the beach was just beyond "the Aberdeen Eye", which offended Ruth. It's a big wheel in a small seaside funfair, probably 1/8th the size of the London Eye. Ruth was not impressed with the whole Eye naming therefore. She'll be glad to know that googling for "Aberdeen Eye" in quotes gets no results other than for opticians, at least on the first page; though without quotes it led me to discover that its real name is the Grampian Eye Big Wheel.

    She was impressed, perhaps worryingly so, with the 2p machines (which seem to be called "Penny Pushers", but I can't find a decent page about them anywhere, only gadget sellers with nostalgia-fest desktop versions for sale) though, and we spent the best part of 90 minutes in the arcade, heh. Then we wandered along the seafront, took a few photos, had an ice cream, and got back on the bus 2 hours after getting off it.

    The Aberdeen bloke was still on the bus. In a different seat, but still on the bus. Perhaps he had got off at some point, but even if so it meant he'd got off later than us and got back on again, having done more than a full circuit. That seemed odd to us. Still had his headphones on too.

    After the beach the bus winds through the harbour area, full of working boats off out to either fish or do stuff at the oil rigs. It's not pretty. But after that, it heads out past some old city walls, across the Dee, near an old prison, and then to a big park. There was a pony show on that day, coming to a close at the time we got there, and we'd pretty much decided not to bother getting off until we got all the way back round to Old Aberdeen.

    At Marischal College we were kicked off. Everyone was, even Mr Aberdeen, because the bus was broken. Not some trivial thing like a broken exhaust or engine or something, no; the CD player was fucked so there was no commentary. Rather than have a person do it, they were just piping a recording through the speakers (and badly, as it was about a minute out of sync with where were were for most of the journey). Being broken they just took the bus out of service and told everyone on board to come back in an hour. The buses are only once an hour, and they finish at about 4.30pm, so an hour is a big chunk of the day lost!

    Mr Aberdeen wandered off down some side street while we went back to the tourist board, but first a phone call. Despite what we'd seen on the tour, and were about to go and see, we were still pretty keen to get out of the city. I had booked 4 nights at the Holiday Inn Express and we'd only stayed one night so far, but we wanted out. Ruth phoned up and asked them if we could check out in the morning with no penalty, and thanks to my having booked a flexible rate we were told we could. So, tourist information board it was and within half an hour we had a room booked at a B&B in Ballater, some 40-odd miles inland, in the Cairngorms national park.

    Diet Coke bought, we got back on the bus (as did Mr Aberdeen!) and got off in Old Aberdeen. The main thing here is King's College, nowadays part of Aberdeen University. It's lovely and we spent 45 minutes or so doing the tour our leaflet suggested, taking loads of photos and feeling invigorated -- the weather had been great all day, we'd loved the funfair and now found something really nice in this city, and best of all had an escape route sorted. Aberdeen is not somewhere to stay for 4 nights, but 2 nights was spot on.

    Walked back to the city rather than wait for the bus and do the whole circuit again, went for a pint in a decent pub in the city then went back to the hotel. Booked ourselves a table in the Indian we'd been turned away from the previous night, had a fantastic curry, then went to a WORLD FAMOUS pub just down Union Street that neither of us had ever heard of before, and whose name now escapes me (lasting impression that it left). Played a lot of quiz machine, then back to the hotel. The Untouchables was on TV! Senior.

    Saturday, August 30, 2008

    Dragons' Den ideas

    I love Dragons' Den. Can't get enough of it (so long as "it" refers to the UK version, not the dodgy Nigerian version we stumbled across on Sky one night). And I want to go on it, so I've been compiling ideas in my head. Now I've decided to commit them to blog post, so I don't forget them.

    1. The Scotch Easter Egg. Like a normal Easter Egg (ie, huge) but not chocolate. Instead, a scotch egg. Initial market research conducted at a friend's birthday party suggests I would be able to sell at least 3 of them, not including the ones I'd buy myself. Not sure yet how much I'd ask for, or for what equity stake.
    2. The Party. I'll host a party where the tickets are 20 quid, but only spend a tenner per person on catering and venue hire etc. I want a 400 quid for 50% stake. 100 people at a party is 2 grand income, 1 grand profit, 500 quid each, 25% profit on investment. That's my projection for month one, after which the business will cease trading.
    3. The Bank. They're quite profitable, so I want to start one. I'd like £30million investment for a 30% stake. With the money I intend to hire a few people who know how to run a bank, that can invest the rest in the things banks invest in to make money, while I draw a huge fatcat salary and bonus, much to the ire of that bloke who presented the worst episode of Dispatches I have ever seen ("oh no! private firms pay their bosses loads of money, while their customers lose out if they go bust! oh no!").
    4. My house. I want £60k for a 25% stake in my house. It's a good house, easily worth that much right now and in a nice area. It's already worth more than that. When I sell it they're as guaranteed a profit as it's possible to be. What I intend to do with the money is piss it away on fruit machines, lager, holidays, and plastic musical instruments for my xbox 360.
    Not sure how I can fail really. All my ideas are better than the wondercock pants that show off yer meat and two veg prominently, as seen on a recent episode (9.17pm paragraph in the linked page).

    Friday, August 29, 2008

    Capital Radio and me

    When I were a lad I used to listen to Capital Radio a lot. I have fairly vivid memories of Saturday mornings filled with it, on the occasions that my brother and I would stay at home rather than go down to stay with our maternal grandparents, as happened every weekend until 1988. At Christmas there was always the top 500 songs, played virtually back to back (maybe just between 9am and 5pm? was radio even 24hr back then?) over the course of several days, almost always culminating in Me and Mrs Jones, Layla, and Hey Jude. I remember listening to Pat and Mick's individual shows, not just their single(s), and to the commercial chart show which differed in some way to the one on Radio 1, though I can't remember how. I even remember some of the ads. Well, two of them: Harry Enfield in Stavros mode advertising a new newspaper, the Independent, with the strapline of "It flippin' is or are you what"; and new train route (now defunct!) Thameslink, singing "Thames-link! Thames-link! The train that takes you // straight through London // without changing stations // yeah!".

    Well, now I work at Capital Radio. Actually I work for Global Radio (I think), who just bought the company I joined in March (GCap Media), and who own Capital Radio amongst a whole host of other stations across the country. Odd that we're named Global really, but meh. I'm not really a fan of Capital these days, but it is ace to work at a place I've known all my life. Still getting the hang of working for a company that isn't a pure internet company (this being my first such job!), but there are actually quite a few benefits to that. And best of all I get to keep working in central London, and bumping into (literally) DJs. In the last few months I have managed to stumble past David 'Kid' Jensen, Pat Sharp (uttering the word 'cunt', though not at me), Paul Gambaccini, and Henry Kelly in the corridors or at security. What a list! I'm sure I've also been in close proximity to various people who weren't broadcasting in some way in the 80s too, but I couldn't care less about them (actually I know full well that I've seen Alex Zane an awful lot).

    Aaanyway, the real point of this post is just to puff my chest out a little bit. Capital launched their new website yesterday. It's not just a redesign -- it's a complete rewrite from the ground up by the team I belong to, a wholesale move from the outsourced version which existed before to an entirely in-house solution. I'm pretty proud of it for a number of reasons. Every part played is a big part given the small size of the development team here, but I'm (hopefully not unreasonably) particularly proud of my own contribution because of the technology we're using. As if this post wasn't boring enough already...

    Capital's site, and the CMS which powers it, is built using Django, a framework written in Python. Nothing majorly special about that, but before March this year I had never coded with either, having never even heard of the former. Leaving Yahoo! after 8.5 years was a gamble for me, and likewise this place took a punt on me, believing my "I'll have no trouble picking it all up" spiel having been presented with a CV that said I could only code in Perl. I'm double pleased that I've repaid their faith, and proved (to myself, even) that I wasn't just boasting.

    Though maybe this django and python lark is just really, really easy ;-)