May 16, 2012
After the two days we spent in Vorarlberg, we headed for Rita’s parents’ place in Lower Austria, in the village of Ravelsbach. The drive wasn’t too bad, going through the Vorarlberger tunnel (13 km long, the longest in Austria), then past Innsbruck (very nice), a bit through Germany (now with speed limits on the motorway, although they appear to be entirely optional), past Linz and towards Vienna, then a little “short cut” courtesy of Rita once we got closer to Ravelsbach…
We arrived without incident though and settled ourselves in. Rita’s parents used to run the supermarket in the village, and their house is just over the stream (the Ravel) from the shop, which is convenient. Rita’s room is downstairs, and there’s a sort of self-contained little flat down there with a big living room and entrance to the courtyard/garden, which was very useful for Winnie for the first few days, since she was, unsurprisingly, very uncertain about the whole idea of being in a house with other people, who make noises. I’m writing this after about a week and a half here, and she’s starting to settle in a bit – she spent the evening playing in the courtyard, after eating a marrow bone and a boiled pig’s tail. (What can I say? It’s Austria. It’s the countryside.)
We’ve been taking it pretty easy here, wandering around the local forests, helping out a little with some of Rita’s relatives’ work (getting the rabbits back into their hutches at the end of the day so they don’t get eaten by martens, mowing the thigh-high grass behind Rita’s uncle’s supermarket in Mühlbach, etc.). We’ve also been trying to do a bit of work and a bit of planning for the future. We’ve been spending most of every day with Winnie and generally chilling out. I’ve been working on my German a lot and making pretty good progress with it, I think.
Winnie has been having a good time. She’s been working on her hunting, which is a tricky thing to control. Running after deer or hares or pheasants is a kind of doggie crack for a hunting dog like Winnie. Once she gets going, there is zero chance of calling her back. She was chasing ducks in the stream in the village yesterday evening, and the little ducklings have started appearing now, which means no more off-leash in the village for the time being. No more off-leash in the fields (hares), and only limited off-leash in the forests (deer). It will be good to get into the mountains a bit where there are less animals, and especially less open fields where she can see things to chase from far off. I’ve read a little bit about how to “untrain” this chase instinct, and we’ve started experimenting a bit, but it’s going to be very hard indeed to do anything about it. Too much excitement, too much new freedom, too many new smells for a little dog who spent the first three years of her life without these things.
Anyway, it’s nice here. I often feel pretty stressed in Montpellier – don’t like the city, don’t like my job, don’t have many friends there. Here, I feel like a much better person, much calmer, much happier, much easier to be with. Rita noticed it right away. It’s very good. I’m looking forward to spending a bit of time here over the summer (we’ll be here for all of July and August at least), then moving on and starting something new.
We’re moving on to Innsbruck at the weekend, where Rita has an interview for a place to study occupational therapy. There was supposed to be an interview in Klagenfurt too, but the school there has been monumentally disorganised in arranging things. They said that interviews would be in May, so we arranged to take the whole of May off work in Austria to be able to go to Klagenfurt on any required date. Now though, the interviews are in June… Which means that we would either have to extend our time here (extra unpaid days off work, extending car hire, etc., etc.) or Rita would have to come back here for the (90-minute, in groups of eight!) interview. Not really an option.
So it’s Innsbruck or bust! Well, not really. If she doesn’t get a place in school this year, we’ll figure out something else to do. We’re enterprising mammals and we’re lucky enough to have a bit of a financial buffer, so we should be able to sort ourselves out.
May 15, 2012
So, over the weekend Rita and myself made a big step. We both sent in resignation letters for our jobs in France! Neither of us likes living in Montpellier and, although Rita’s job is more interesting for her than mine is for me, she wants to have a change of career and is trying to get a place to study occupational therapy in Innsbruck.
For me, my current post-doc hasn’t really worked out the way I wanted it to, and I don’t want to apply for a permanent job with CNRS in France, so I’m going to branch out a bit and try to get some freelance contracting work, either programming or writing (or more likely, a bit of both), spend some time working on open-source and personal projects, and learn to make beer and wine and schnapps!
We’re going to spend the summer at Rita’s parents’ place in Ravelsbach, so as to have a bit of time to configure our brains for a complete change of scene. We have lots of things to do over the summer, and we both have that feeling you get when you’ve made a big decision, that you just want, in some sense, to move on to the next thing. We’ll have three weeks more of work in France when we get back from holiday to clear everything up and get all our projects into a state where they can be continued by other people, then we’ll be packing up and moving here to Austria.
We’re both kind of excited by the whole thing. Even if it does mean that I really really have to learn German properly this time!
May 12, 2012
So, we’ve come to Austria on holiday for a month. We drove from Montpellier and stopped off in Vorarlberg in western Austria for a couple of days of mountain climbing before coming here to Ravelsbach, where Rita’s parents live.
The drive from Montpellier through France and Switzerland was fine, and Winnie was well-behaved. We stayed in a village called Hittisau, just over the border into Austria. Navigation was no problem until we actually reached the village itself, which probably has a population of about 2000 people. All of whom appear to be called Hagspiel, which was the name of the family who owned the place we were staying. It took three goes and a phone call to other family members to locate exactly which “Pension Hagspiel” we were booked into. Confusion was compounded when the people at the first place responded to Rita saying “Hello! We have a reservation for two days: we’re the couple with a dog.” with “Are you sure? The couple with the dog already arrived this morning!”. Obviously a different couple with a dog arriving the same day as us at a different pension owned by different members of the same family…
Anyway, we found it in the end, and it was very nice. We had a kitchen and bathroom to ourselves, a big balcony and a view over the valley. We could see mountains from the bed, which is a requirement for any future accommodation, according to Rita.
Winnie wasn’t too impressed with all the newness, but she coped, and soon found a way to let off some steam. We went for a walk the first evening, up to the Hagspiel’s farm and through some fields. There were chickens and cows around and Winnie was very interested in everything. A moment of inattention from the idiot holding her leash (that would be me) allowed her to discover a nice fresh cowpat to roll in. And not just a little dabble of cow poop either, but a full-on shit somersault. We knew that she liked to roll in horse poop (which strangely enough, doesn’t smell too bad on her fur), but we had been speculating over whether or not cow pies would be just as appealing. Question answered: yes they are. First stop once we got back to the pension was the bathroom where we dumped Winnie in the bath and showered her off!
We had two days of really nice walking, the first day up Hittisberg, which is the “Hausberg” of Hittisau and the second a loopy walk up Gschwendalpe. Both days were great, with warm sunny weather (courtesy of the föhn, we heard), steep climbing, lots of snow (it was the first time ever that Winnie had seen snow, and it was a real treat – she loves to play in it, and was running around like she’d been on the crazy cakes), and very few other people around. We even had Victory Beers in a meadow next to a little Gasthaus on the way back.
Evening entertainment was laid on by the neighbours down the hill from the pension. First night: oompah band until one in the morning. Not continuously, obviously. The correct production of Austrian oompah music requires copious lubrication, so there would be five minutes of oompah, then a pause of 20 minutes or so (the length of time it takes to down a beer, if one has an oompah-induced thirst on), then more oompah. Eventually the beer must have run out, because they all went home and we could sleep the rest of the night in something more than 20 minute naps. Second night: the local vintage tractor association descended, with their roaring infernal machines of, perhaps, 1940s or 1950s vintage. We saw them start to arrive as we were preparing dinner and were on tenterhooks for the next half hour as we waited for more of them and an accompanying oompah band. Fortunately, only three tractors (carrying about six people) and no oompah band turned up, and they only stayed for an hour or so.
After two restful days (modulo oompah), we packed up to head east for Lower Austria and Ravelsbach.
May 10, 2012
I was up at our experimental site at Puéchabon the other day, installing a new PC to collect images from our webcam. The previous one had been stolen by some local yokels, along with all the solar panels and the electronics to go with them, and a load of other hardware. The technicians who maintain the site have made a Fort Knox-like enclosure for the instrumentation in our little cabin, and I had a shelf in there to put the Eee PC that collects the images from the camera at the top of our flux tower. (We’re monitoring colour changes in the foliage to see if we can use these not-very-remotely sensed data to detect important phenological changes.)
I got the computer attached to the Ethernet cable and the PoE box going to the camera, connected to the power supply in the cabin, and checked that I could see images from the camera on the live web page view (we’re using a StarDot camera). That all worked fine, so I just needed to set up the regular FTPing of images from the camera to the laptop.
Oops. I’d forgotten to install an FTP server on the laptop. The laptop is running Ubuntu Linux, the camera runs an embedded Linux distribution, and there’s a cron job on the camera that takes an image and FTPs it to an archival server at regular intervals. Of course, the “archival server” in this case is a little laptop in a shed in the woods, and it needs an FTP server. Which I hadn’t installed. And I was off in a shed in the woods, far from an internet connection…
I swore at my stupidity for a couple of minutes, then had a rummage in my rucksack. Yes! USB cable. Two minutes later, I was connected to the internet via my smart phone and a USB tethered network interface on the laptop. Wow. I had to hold the phone up in the air to get decent reception to download an FTP server package, and it wasn’t the fastest, but it was a moment that made me think about how weird our constantly connected world has become. We may not have electricity at our experimental site, but we can haz internets!
April 3, 2012
I was originally planning to write a quick-and-dirty implementation of the simplex algorithm myself to demonstrate some of the gritty details, but I decided to leave that kind of thing for later, since there are going to be other, less well-known, constraint solving algorithms that I want to look at. There is a Haskell implementation of a simple version of simplex algorithm in the Matrix.Simplex module in the dsp package, although that comes with a comment that says “I only guarantee that this module wastes inodes”, so let’s view this more as a way to play with some interface issues than a serious attempt to implement any kind of constraint solver! The code that goes with this article is available here.
The simplex algorithm
The simplex algorithm, as implemented in Matrix.Simplex solves the following problem: find a vector that minimises a linear objective function
subject to the constraints , with all components of non-negative, i.e. .
To set the problem up, you put all the coefficients of the objective function and the constraint equations into a big matrix (usually called the tableau), you turn the handle, then you pick the answers out of a transformed version of the tableau. This is very similar to the way that Gauss-Jordan elimination and such algorithms work (the simplex algorithm looks a lot like Gauss-Jordan elimination with some extra steps and restrictions), and is fine as far as it goes, but it’s not very convenient. Instead of building a big matrix, it would be nice to be able to set a problem up like this:
exampleSystem :: ConstraintSystem String
exampleSystem = buildSystem $ do
let [x1, x2, x3, x4] = map var ["x1", "x2", "x3", "x4"]
con $ x1 + 2 * x3 <=# 740
con $ 2 * x2 - 7 * x4 <=# 0
con $ x2 - x3 + 2 * x4 >=# 1/2
con $ x1 + x2 + x3 + x4 ==# 9
return $ -x1 - x2 - 3*x3 + 1/2*x4
The idea here is that we create some variables, here labelled with strings, although they can be labelled with anything with an Ord instance, we define some constraints, using comparison operators with a # stuck at the end to mark them as constraint operators, then we return an objective function. Some writer monad fiddling gives us a nice little monadic interface to build our system, and we then have a solve function of type
solve :: (Ord a, Show a, Slack a) => ConstraintSystem a ->
Either SimplexError (M.Map a Double)
that takes a constraint system, tries to solve it, and returns either an error or a map assigning numerical values to each of the variables.
This is all pretty pedestrian, but I wanted to have a play with these ideas because a real geometrical constraints system is going to be a bit more complicated and is going to incorporate some extra wrinkles that we don’t have here. The simplex algorithm example is nice and simple…
Expressions
For the moment, I’m using a super-simple ADT for linear expressions, defined as
data Expr a = Expr { vars :: M.Map a Double, numval :: Double }
deriving (Show, Eq)
with a map from variable names to coefficients, plus a constant term. Num and Fractional instances are defined to make these act like numbers under the usual operators. For example, adding two expressions is defined as
(Expr vs1 c1) + (Expr vs2 c2) = Expr (M.unionWith (+) vs1 vs2) (c1 + c2)
Of course, there’s something slightly funny going on here, since we only really want to be able to construct linear expressions. I played around with this, and I sort of convinced myself that it ought to be possible to constrain expressions to linearity using phantom type methods, but I’ve not yet got it working. This is something I’m still undecided about, and the toy code I’ve written here just throws a run-time error when non-linear operations are attempted.
Constraints
Constraints are very simple, built from a left-hand side expression, a right-hand side expression, and a comparison operator, one of <=#, ==# or >=#.
A constraint system is then a list of constraints and an objective function, which is just an expression. By defining ConstraintSystem as
type ConstraintSystem a = (Expr a, [Constraint a])
and defining a couple of writer monad related helpers
con c = tell [c]
buildSystem = runWriter
we can construct constraint systems like exampleSystem as shown above.
Canonicalising…
The implementation of the simplex algorithm in Matrix.Simplex requires the problem to be in a canonical form, which has no inequality constraints, except for the requirement that all variables in the solution are non-negative. We can get from a constraint system involving inequality constraints to one with only equality constraints by introducing “slack” variables. For instance, if we have a constraint , we can introduce a variable , and then write our original inequality constraint as the equality . It’s pretty obvious how to do this for inequalities involving greater than signs as well.
The code to take a constraint system involving inequalities and transform it into an equivalent constraint system involving only equality constraints plus slack variables uses a typeclass called Slack whose sole purpose is to capture the idea of generating a name for a temporary variable. Here, I just define an instance for [Char], since this is what I’m using to label variables. The function makeSlacks does the transformation, introducing slack variables as needed for each inequality:
makeSlacks :: (Show a, Ord a, Slack a) => ConstraintSystem a -> ConstraintSystem a
makeSlacks (obj, cs) = (obj, zipWith makeSlack cs [1..])
where makeSlack (Constraint e1 EQL e2) _ = (e1 - e2 ==# 0)
makeSlack (Constraint e1 GEQ e2) s = (e1 - e2 - var (genSlk s) ==# 0)
makeSlack (Constraint e1 LEQ e2) s = (e1 - e2 + var (genSlk s) ==# 0)
class Slack a where
genSlk :: Int -> a
instance Slack [Char] where
genSlk s = "slk_" ++ show s
Given a canonical constraint system, we can then construct the initial tableau needed to run the simplex algorithm. This isn’t a very interesting step, since it just involves constructing a big array and systematically copying the coefficients from the constraints and the objective function in the canonical system into the right places.
Getting the answer out
Once we’ve run the simplex algorithm, we get either an error return indicating that the problem was unsatisfiable because there were no feasible values or the feasible region was unbounded, or a final tableau that contains the variable assignments for the optimal solution. Picking these out of the final tableau is kind of ugly, since we need to look for columns in the tableau that look like columns of a unit matrix. This isn’t hard to do, although it’s not pretty.
Conclusions
One thing I confirmed from this little exercise is that things like the simplex algorithm are tricky (no surprise there). I was working with a version of the algorithm that’s about as simple as it’s possible to get, but it’s still quite complicated and there’s quite a bit of housekeeping to be done. (In fact, I think there is at least one minor error in the Matrix.Simplex code that I identified.)
The other main points that came out of this exercise were:
The writer monad approach to building constraint systems looks quite nice, and it ought to be possible to extend it to easily build and update more complex types of systems than the ones dealt with here.
Specialised expression types that catch attempts to build invalid constraints at compile time might be a good idea, although I’m not yet convinced that this would be convenient in more general cases. I’ll revisit this later once I have a better picture of the geometrical constraints we need to deal with.
Hiding the implementation details of algorithms like the simplex algorithm makes them much more usable. This will be even more true for the more complex cases I want to tackle later.
I need more Haskell practice. Everything more or less works, but some of the solutions I came up with are a little painful and could probably be cleaned up considerably.
There are two things I want to do next. The first is to read some literature, including the PhD thesis of Michael Gleicher which, in particular, deals with the issue of geometrical objects that have multiple “views” (e.g. Cartesian versus polar coordinates for a point, representation of a line segments by two end points or by a single point, a length and an angle, and so on). The second is to learn more about lenses, and to try to come up with a way to make lenses or some generalisation of them work nicely in a constraint setting.
February 16, 2012
We saw something cool on the way to work this morning. It turns out that they’re considered pests in this part of the world, but a five metre string of nose-to-tail caterpillars counts as cool in my books even if they are pests. Apparently, these little critters make nests high in pine trees (we think we saw the nest – looked like a big ball of spiderweb), then troop down the tree and off into the world to make caterpillary mischief of one sort or another.
We first spotted the caterpillar chain coming out onto the pavement as we were walking up to Rita’s office. Keeping Winnie well out of the way (Rita takes her to work a couple of days a week), since the caterpillars are hairy and would be bad news for a little dog’s nose, we had a good look at what was going on. The caterpillars really were stuck nose-to-tail, wriggling their way along to who knows where.
Most of them were meeting a sad fate on the pavement, as they got stepped on and squashed, so leaving a confusing pile of caterpillar guts that led the caterpillars behind to make strange loops and knots of themselves as they could no longer tell where to go.
We followed the trail of caterpillars inside the fence to the tree they were coming from. The trail stretched all the way through the pine needle litter from the tree to the fence, a distance of about three metres. With the metre of caterpillars still coming down the tree and the metre already on the pavement, that gives us five metres of caterpillars, 500 centimetres. Each caterpillar was about 2.5 cm long, so we had about 200 individuals in this troop.
There’s a (not very good) video here showing the extent of the procession.
Later on, walking home, we saw caterpillar remains in a couple of other places along the road, suggesting that there were quite a few processions that morning. The caterpillars normally come out of their nests together at night, to feed on pine needles, but they leave the nest in the same way when it’s time to pupate, so I guess that was what we were seeing today.
February 15, 2012
My second attempt at a PhD went off rather better than my first. It was all done, dusted and examined in the allotted three years, without too much psychic suffering. Even more remarkable was that, in a period of four years, both my partner Rita and myself finished, wrote up and graduated. Without any domestic bickering at all (well, more or less).
I put most of this down to the excellent atmosphere in the research group I was in in Bristol, founded by Paul Valdes, one of my two supervisors. We had frequent group meetings, both in the department and in the pub, there was a lot of good cross-fertilisation of ideas, and, best of all, the group was full of people I was happy to spend time with (not at all a common situation for me, as anyone who knows me will testify). It was great. Paul had a super attitude for a group leader, letting people mostly get on with what they wanted to do, never coming the big boss, and it worked really well. The BRIDGE group is one of the things I miss most about Bristol.
My other supervisor was Steve Wiggins, in the maths department. He was responsible for enormously broadening my horizons in all kinds of ways. There are mental states I would never have entered without Steve’s prodding, mostly in the form of late night emails with bundles of papers attached, saying “You really ought to know something about this stuff…”. Steve has a work ethic that would kill an ox, and I don’t think he ever missed one of our Friday morning meetings throughout the three years, despite being head of the maths department and running an active research group. I guess someone who has written five or six fat books about dynamical systems probably knows a thing or two about time management. I’m very grateful that he agreed to take me on as a student.
As for the work I did during my PhD time, well, I started off with all sorts of grandiose plans, and ended up producing a workmanlike though not terribly inspiring thesis about nonlinear dimensionality reduction methods. I did learn a lot along the way, and the thesis probably represents only about 20% of the work I did. Since Paul and Steve mostly left me to get on with things, I ended up doing real research, i.e. cocking up repeatedly and having to start over with slightly modified goals and preconceptions. I think that with more guidance, I could probably have written a more impressive end product, but I don’t think I would have learnt as much as I did during my sometimes rather pathetic flailing.
All in all, it was a good time. I met a lot of cool people, did a lot of caving, some kayaking, climbed some mountains, and had a lot of thinking time, something that seems to be sorely lacking as a post-doc!
February 14, 2012
Here’s a rag-bag of entertaining things…
Whatever: John Scalzi’s blog
John Scalzi writes entertaining science fiction books and is also an all-round good egg. His blog, Whatever, has been around since forever (in internet terms). Scalzi has a magic touch when it comes to moderating comment threads: Whatever must be the politest place on the internet, all without threats or banning or rudeness from John. Scalzi’s books tend towards the light and funny, but his blog posts are sometimes more serious. Here are a couple that really stray dangerously close to thought-provoking: Being Poor, Things I Don’t Have To Think About Today.
Mathematical Fiction
Yes, everything is there to be found on the internet. Even a page detailing more or less every work of fiction involving mathematics even tangentially, scored for “Mathematical Content” and “Literary Quality” (although they do need some graphs to show whether there’s any sort of correlation between these scores!). There’s some good stuff on there, and it’s quite interesting just to browse along the “similar story” links to see where you end up.
Structured Procrastination
I’ve never been a fan of the Getting Things Done type of self-help/self-organisation book, but John Perry, a philosophy professor at Stanford, has what sounds like a perfect recipe for making progress on all those tasks that get pushed aside in favour of more interesting things. The key idea seems to be to make a task list with tasks at the top that you’re never really going to do (“Write novel.” “Learn Icelandic.” “Found religion.”) then use your other tasks as excuses to avoid these. That way you can trick yourself into actually doing things. It sounds like a great way to go, and it fits very nicely with the way that a lot of natural procrastinators already work. We don’t do nothing, we just do something more interesting and perhaps less important that what we’re supposed to be doing…
How Your Cat Is Making You Crazy
Finally, here is one of the freakiest things I have heard about for a long time. You think you have free will? You think you’re in control of the decisions you take? Maybe you should think again. Rats infected with the parasite Toxoplasma gondii, which they pick up from cat faeces, exhibit a strange mix of behavioural changes, the most striking of which is that they no longer fear cats. Male rats infected with T. gondii find the smell of cat urine sexually exciting. Result: infected rats get eaten by cats and the parasite goes on its way to explore the next part of its charming life cycle. Big deal, you say. Who cares about freaky rats? The big deal is that T. gondii is a zoonose – it infects humans too. There’s not a perfect match between the parasite and human brains, since T. gondii evolved to jump between cats and rats, but the parasite has enough affinity for human grey matter to cause significant changes in behaviour in some carriers. It gets a little scary when you hear just what those changes are. One is increased recklessness (particularly in males), leading to detectable differences in car accident statistics for carriers compared to non-carriers. Another is schizophrenia, which shows strong correlations with T. gondii status. How weird is that? A parasite that lives in cats and rats may be at least partially responsible for one of the most mysterious and terrifying of mental illnesses. There is still a lot of work to be done on this, but there are some serious people involved in the research, and it sounds pretty solid.
For me, I guess there are two separate “whoah!” moments that come out of this. The first is about the power of evolution. The coevolution of parasites and their hosts is already strange, even before you get to mind-altering parasitic cysts that make one of the parasite’s carriers more likely to be eaten by another. I find it quite hard to get my head around this: it’s like the parasites are farming the rats and cats (albeit unintentionally). The second thing is the idea that schizophrenia in humans may just be collateral damage in the T. gondii/Felis catus/Rattus norvegicus arms race. It would be one thing for humans to suffer the by-blows of some cataclysmic war of the gods, but these are cats, rats and protozoa!
If you want to get even more scary, think about the fact that T. gondii is just one environmental parasite, one of the relatively well-studied ones. There might be dozens of other little suckers shaping you to their ineffable monocellular will. Still think you’re the one driving up there?
February 5, 2012
by Francis Spufford
How do you make a book about central economic planning in the Soviet Union into an entertaining page-turner? You do what Francis Spufford did with Red Plenty, a book that is almost impossible to classify, a mix of fact and fiction and dramatised might-have-beens, plausible if not quite verisimilitudinous narratives populated by a melange of real historical personages and imagined characters.
It’s not quite fiction, not quite history. Some reviews that I’ve read weren’t comfortable with the changeling mood of the book, but I thought it was great. It’s hard to bring to life the enormity of the project, and subsequent events and the all too real lies and corruption that surrounded much of what went on in the Soviet era have obscured the visionary nature of the enterprise, but Spufford gets it across through uncovering the motivations of some of the main actors. Kantorovich and his colleagues really did want to make the world a better place, to alleviate the suffering that they saw as arising from the unequal distribution of wealth in market economies, and to use science and mathematics to make the lives of ordinary working people more pleasant.
Eventually, the project failed, for many reasons, but there was a period in the 1950s where the expansion of the Soviet planned economy genuinely had western economists and politicians worried. The stagnation of the Brezhnev era that followed had many causes, some related to the failure to diversify the economy of the USSR beyond heavy industry and basic agriculture, but the very real achievements of the Soviet planners shouldn’t be understated. Red Plenty gives a realistic and sometimes cynical portrayal of life in a system supposedly based on equality and scientific planning where a word from Khruschev over the telephone condemned a whole village of striking workers to death.
The cynicism is brought into stark focus by the frequent use of genuine Soviet era jokes throughout the book, all of them taken from the PhD thesis of Seth Benedict Graham. Here’s a typical example:
Yuri Gagarin’s daughter answers the phone. “No, mummy and daddy are out,” she says. “Daddy’s orbiting the earth, and he’ll be back tonight at 7 o’clock. But mummy’s gone shopping for groceries, so who knows when she’ll be home.”
A lot of research went into the book: the representations of daily Soviet life feel very authentic, and the characters of some of the historical personalities who appear are finely detailed. Highly recommended.
February 5, 2012
To compensate for the psychopathic driving habits of the French, the Mediterranean climate is often offered up as a benefit of life here. For those of us who are not all that keen on temperatures in the 30s for weeks on end in the summer, that’s not much of a compensation. However, today, I would offer another piece of evidence that this “Mediterranean climate” isn’t all it’s cracked up to be. Here’s the swimming pool in our residence, with a nice layer of ice all across it. And yes, Rita is wearing a down jacket, an article of clothing more common on the ski slopes and high mountains than the Mediterranean coast…