A funny thing appears to be happening in the mortgage market, and it's of precisely no help to me, seeing as I just want to buy a house to live in. First some facts to set the scene.

  • Bank of England base rate here in the UK is down at 1%.
  • But you can't get a new mortgage with a rate any better than 5% if you only have a 15% deposit. That's the same rate you could get just 2 years ago, when the BoE base rate was 5.25% as far as I recall.
  • 15% is a not unreasonable deposit by standards of recent years, and it's certainly a huge chunk of cash given the astronomical price of a three bed semi these days.
  • If you have a 40% deposit, you can get a new mortgage with a 2.29% rate. 
  • The price of houses is by the way still about double what it was just ten short years ago.

The net result of this is that people with vast stacks of money just sitting around in savings accounts are realising that they're not getting any interest on their stash and might be better off investing in bricks and mortar. Seeing as they have these giant piles of cash they can pay a 40% deposit no problem and take advantage of the seriously cheap mortgage deals available only to the already mega-rich. I'm told by local estate agents that young folk are now streaming into their offices with their parents in tow (they supply the briefcase full of gold bars) to get their investment property sorted as a nice little earner.

And guess what this influx does? Pushes up property prices, keeping the money-go-round spinning for those lucky enough to be on it. So, I put forward the bold statement that the decrease in base rates combined with the existing lack of credit is actually shutting non-investors out of the market. Which is really annoying because I was hoping for a cheap-houses-for-all feeding frenzy of which I could be a part 🙁

Of course, I'm just bitter.

We stumbled across Vienna's prime schnitzel place, Figlmuller's and ordered the house speciality for lunch. It more than covered the plate and was only about 3mm thick. It tasted like those breaded turkey burgers I used to eat when I was young, which was a little disconcerting. It was basically nice, but became a bit of a chore.

FiglmullerSchnitzel

A cavalcade of beer today! But drunk last weekend in Vienna in holiday mood, with cold wintery weather outside.

First, a warm bar called Centimeter, where many things (including sandwiches) were available by the centimeter. A Paulaner in its correct glass on the right, and I can't remember what the dunkel beer was on the left, other than this wasn't the correct glass for it. Both were delicious!

AustriaBeer1

Then, in a similar district we found ourselves in a big rambling place with its own brewery. I tried the chilli beer, assuming that it would deliver a warm background glow of chilli heat but nothing more, otherwise they'd struggle to sell much of it. I was wrong. This was throat scorching stuff and I probably wouldn't have another, but it was an interesting novelty experience.

AustriaBeer2
The Watercress Wildlife Association (a local nature reserve in St Albans), after the fresh snow this morning.

WWASnow

I saw a little egret, but it flew away every time I came within sight of it. So this is the best I managed.

LittleEgretFlying

I've stumbled across a real irritation with the way the Google App Engine data model works. One among many frankly, but I'll restrict myself to just this one for now.

The issue stems from the fact that db.run_in_transaction(func) insists that func is a function with no side effects, since it may be run repeatedly in an attempt to get the transaction to go through (if optimistic locking fails). Fair enough, but that means it has to freshly fetch any model objects that it wants to modify, otherwise it would have side effects to objects outside its scope. But consider this situation, in which we have an increment() function on our model object, that must use a transaction because it also modifies other related objects at the same time and require atomic behaviour:

class Person(db.Model):
  count = db.IntegerProperty(default=0, required=True)

  def increment(self):
    def tx():
      # Mess with some other related objects in data store.
      <omitted for brevity>
      # Must fetch a separate copy of self to avoid side effects.
      person = db.get(self.key())
      person.count += 1
      person.put()
    db.run_in_transaction(tx)

The problem here is that self hasn't actually been modified at all and is now out of date with respect to the data store (where the count is one bigger, assuming the transaction succeeded). This is a pain for the caller who had a Person object and called increment() on it and naturally expects their object's count to be one higher. But their object hasn't been modified at all – though the data store has, via the freshly fetched person. In case it's not obvious, we can't simply change the code above to use self instead of getting the new person object, since db.run_in_transaction(tx) may run our tx() function multiple times until it completes without an optimistic locking failure. If it did have to run multiple times, self's count would increment by one for each failed attempt, so the final successful attempt could end up with more than one added to the count. Or if the transaction eventually failed outright, self's count would still have been modified even though the data store had not been touched.

So the only solutions I can see are:
  • Put code after the run_in_transaction() call, that synchronises self with the data store. There isn't a sync() or refresh() method on Model objects, so you have to do this painstakingly by getting another fresh person with db.get(self.key()) and then copying across just the fields you know might have changed.
  • Insist that the caller is aware that certain methods on the model objects won't modify the object itself so they need to get a fresh one. This completely wrecks the idea of an object model and encapsulation though. You'd might as well just have a purely functional interface to the data store.
It all seems like madness to me, that defeats the point of trying to have a neat, simple data storage object model. As usual, I can only hope that I've missed some crucial point and that in fact the problem is easily and elegantly solved. I shall look out for that solution, unless some kind reader can enlighten me!

I recently bought a proper 'not tied for you in the factory' bow tie. Just a strip of wavy fabric to be assembled about my own neck! I figured I'd look (even more) dashing with the genuine article, tied just imperfectly enough to make it clear that it's the real deal. The instructions on the back of the box were frankly useless so I turned to Google and after a few pictorial, textual and video tutorials I got the hang of it:

BowTieTied 

It's not easy, and definitely requires a decent understanding of what you're supposed to do, then some practise until you can actually do it, followed by more practice to fettle it into looking half decent. It's worth being familiar enough with the procedure to be able to replicate it as necessary, since you may find some joker pulling yours undone at the ball! But my friends would never do that. And I had a backup pre-tied one in my pocket just in case.

My Marks and Sparks version came with an adjustable clasp in the middle, which is very useful to fit it to the neck properly and allows your hard fought bow creation to be saved for next time.

So, where are my instructions on how to do it? I shall cheekily defer to those that have gone before me, but humbly suggest that the easiest to follow description, and certainly the one that really sorted me out, can be found here: http://www.youtube.com/watch?v=VJv4Qh7zR3E

Of course the very best thing about a real bow tie is that you can do the 'just heading back to the yacht in Monaco harbour for a night cap' look:

BowTieUntied

I've just spent a pleasant long weekend in Vienna, Austria. A scenic detour through Belgium was required, to get us back to Blighty, EasyJet having forsaken us, but we did manage to get back whilst there's still some snow on the ground. I'm still going through the photographs (which are generally disappointing frankly) but I thought I'd stick this one up as a comedy teaser.

This shop's much bigger than it looks you know…

Tardi's