Musings on my family, work and things I find interesting. Mainly, this was / is intended to record things for my kids so that they can get an insight into how I feel about them, plus I haven't done any writing for a long time, so would like to get some skill in that sphere again.
I've had a good teacher. Just noting some of the things I've come across.
Default Apache httpd configuration in a cluster with multiple filesystems
By default, Apache httpd generates an ETag of the format inode-filesize-timestamp. A symptom of this sort of physical architecture is seeing ETags for the same resource and representation that have the same last part; e.g. "518854-3504d-ce290380" and "c8578-3504d-ce290380", and probably the same Last-Modified value too. This can be fixed by changing the Apache configuration or ignoring the ETag and just using Last-Modified. I would normally recommend retaining the ETag and just using the MTime and Size parts to calculate the ETag value.
I'm not sure whether this is an application developer issue, or a problem with the EScenic server itself, but the ETag values that I've seen from this server aren't quoted.
The version of Django 0.96.1 that shipped with Google App Engine had a similar problem to the EScenic Server, so I'd recommend bundling Django with your app until Google update the bundled version. I went to fix this in Django trunk, only to find someone beat me to it!
Something happened earlier this year and I'm only now comfortable enough to able to talk about it. It happened on 22nd June. At the time, it was terrifying, but it has a good ending.
Al had gone away for the weekend and I was at home playing single parent. Sunday morning, not quite woken from my reverie by Cameron crying softly, I got up, changed his nappy then put him on the floor in his room to play. Connor started calling to get me to come help him on the toilet. I left Cameron's room, pulled the stairgate shut and went to the bathroom to help Connor, rubbing the sleep from my eyes. About 10 seconds later I heard the worst sound that I've ever heard. A soft thudding as the boy went down the stairs, followed by immediate screaming. Fuck. I raced down to find a scene from a Tarantino film. I don't know whether the detachment comes from my (long expired) medical training, or that's just what people naturally do in these situations. I noted the pools of blood on the Mediterranean-tiled floor. Then the bump on his forehead where the blood was coming from, as I cradled him. "That's a strange looking bump, more of an indentation. Oh, that's his skull." Reaching for a muslin to try to apply pressure to the wound. It was too wide really anyway to allow effective compression, so I tried to pack the wound while talking to the emergency services operator. It was very hard to hear them with my own state and Cameron either in pain or understandably upset. Got the other two to dress themselves while the ambulance came and I got some clothes on and mopped up the blood. A big part of me even at that point was worrying Al'll kill me if she sees this, and I didn't want his brothers to see all the blood.
Nee-nah
The ambulance came and we all piled in. Callum and Connor were thrilled to be in the van with the sirens going off. I was probably white as and trying to speak calmly to Cameron as they strapped me on the bed and we moved swiftly to Frimley Park. The ambulance crew were great and we got there, Cameron having thrown up on the journey and coming close to closing his eyes a few times.
A&E was very quiet. Lots of fabulous nursing staff were there, and able to take some of the load in terms of getting out toys for the other two boys and Cameron showed an interest as well. Then I could phone Al at her hotel on the hen-weekend and relay the bad news. She took it as well as could be expected and we had lots of crying phone calls as she was driven from Bath to get to the hospital. Due to the lack of urgency in how we were being treated, I was getting more confident at this point that it wasn't life-threatening. By this time, it was the boy's nap time and the nursing staff were happy enough that he could go to sleep. Al arrived maybe 15 minutes after he went to sleep and came into the ward to see him sleeping with his eyes open, head lolling back in my arms and a cut wider maybe a centimetre wide and 6 centimetres long on his forehead, with the bone showing through. It looked ghastly and we were both crying again. We had some fraught communication with the Reg / SHO about where the best place for treatment was. Doubtless that wasn't helped by our frame of mind, and the language issue with the guy. But we were immensely happy with the level of treatment and service that the emergency services provide. You only really miss something when you don't have it anymore; I don't ever want to experience that loss with our primary medical care.
Support
Due to the nature of the head injury, Cameron was kept in overnight for observation. Our friends Alan and Alison provided invaluable help in taking the two older boys with them to a rowing regatta where they got spoiled on BBQ and ice-creams until I went to pick them up later. As an indicator of where my head was, I picked them up and promptly drove the wrong way around a roundabout. Fortunately the guy coming the other way was going fairly slowly, then my brain kicked in and I recognised where I was. Al phoned later with the results of the CT scan (she's very persuasive!).
Cameron and Al were transferred to St George's Tooting to go to the Maxillo Facial surgical unit, where Dr Singh did an amazing job of closing him up. We got to take him home the same day.
Retro
We examined the stairgate. It is a retractable one, which clips onto the opposing wall at the top and the bottom. The top clip was on a block screwed into the wall. I had placed the block 4 years earlier, which had then been removed and replaced by the painter, and endured some abuse from the other two swinging on it. We saw that it was fairly easy to just clip the gate on the top alone, without clipping the attachment on the skirting board as well. When set like this, effectively it acted like a catflap and Cameron would have had hardly any resistance to crawling against it. Not ensuring that this was properly attached was completely my fault. We were so lucky with how this turned out; from the blood pattern it looked like he'd surfed on his stomach down the first 5 steps and hit the skirting board with his head. From there, he'd rolled down the rest of the stairs to the tiled floor below, but somehow not done further damage to himself when he got to the tiles. Then the first order was shooting some video so that both sets of grandparents could see the extent of the damage and be assuaged that they didn't need to travel down to see him straight away.
Just noticed that Facebook open-sourced a version of their BigTable data store and it's hosted on Google code, written in Java. I'll omit the obvious snickers about Facebook cloning BigTable and then hosting on Google Code.
I was hoping that now I don't have a Windows machine any more that I could wriggle out of IT support duties for the family. Well, Copilot works under Wine on Ubuntu 7.10. Arse. I was wondering about talking my folks through installing a VNC server on their machine, but just tried the Copilot quick free demo, and it all worked. And it's free on the weekend. So I guess that's my IT support position.
Finally it's happened! I've been able to get off Windows Vista and install Gutsy Gibbon on my work laptop. Herein follows a few notes on things that I noticed, which may help others take the leap. This will probably get updated as I notice things that I've missed, or that went well.
Cygwin. I can't say enough good things about that project. It's been great to have on Windows and ultimately played a very important part in getting stuff off my laptop before wiping the hard-drive. I've found the people involved very helpful and responsive. My initial attempts to rsync data to a safe location failed. If you're using Windows, go fuck yourself, jwz, 2007. Contacting the mailing list led me to try the snapshot versions, report issues and see them fixed very quickly. Thanks Corinna and others.
Firefox. My profile was split over ${HOME}/AppData/Local/Mozilla/Firefox and ${HOME}/AppData/Roaming/Mozilla/Firefox. I consolidated the two by copying to ~/.mozilla/firefox. The profiles.ini file needed editing, since it has an incorrect relative path to the profile folder. I also needed to rename extensions.rdf, so that a new one is built on startup. This preserved all of my extensions (apart from Google Toolbar; there is a Linux-specific version?) and associated data such as ModifyHeaders values, UserAgentSwitcher values, etc. I have needed to manually edit some preferences, such as Download location, and then restart Firefox for it to take effect, but otherwise it all seems to be working fine. Similarly for Thunderbird, although I should have exported my Lightning Calendars first - I seem to have lost them, but that's no biggie. I still have all of the emails (MBOX!) (although my tags seem to have disappeared. That's a bit of a pisser). Maybe I should have migrated that to GMail, rather than copying mboxes around, but it's worked.
SSH. I made sure that I copied my keys over and that they all worked. I seem to have missed the full known_hosts file; I have a copy, but some entries are missing, which is slightly annoying. Also, I forgot my System32/drives/etc/hosts changes, so I'll need to recreate the local aliases that I have for some servers. Sure I can remember that, so not too painful an omission.
sudo aptitude install tofrodos
Ubuntu just flies, versus the same hardware running Vista. That's a shocker, obviously ;-).
Update:
Eclipse was using a lot of file handles (I just install the world in terms of the number of plugins I have), which required an addition to /etc/security/limits.conf. # raise limits due to Eclipse complaining about too many open files * soft nofile 5120 * hard nofile 5120
Just finished Russell Brand's Booky Wook, which is what the title references. Interesting in terms of the honest coverage, but it did feel a little rushed (zeitgeist is everything, darling). At one point he talks about when a mouse lived in his hair (I think it was referenced in the Jonathan Ross interview as well). We can top that. Callum has a nit comb from school; apparently part of the national curriculum to inform hygiene issues. Connor was using it on Al the other night and kept lifting her hair.
There was some loss - mainly source code for personal hacking. My Jython UnicodeData implementation was lost, although I did have a copy of that in my GMail Sent folder which has been contributed to the committers in the hope that someone with more time and enthusiasm than me finds it useful. Apparently they have. The other thing lost was my WideFinder sketching. I surprisingly did have an early warning that the disk was close to failure, when my implementation (which was clocking ten seconds or something) suddenly started taking twenty minutes to complete. Obviously I didn't pick up on this warning; instead blaming it on some horrible mistake in my code. Some learnings from my WideFinder experience.
NIO can be tricky, and should probably have an easier API in comparison to classical IO. It was nice to look at this anyway, and I'll probably have a read of the Jython and JRuby IO stuff to see how others do it, and also the Apache NIO stuff.
Java string matching is slow using regexp. I'd not got as far as implementing Boyer-Moore or similar, but I expected to get a big hike out of my 10 second time when switching to that.
CAS is good, versus synchronized blocks. Brian Goetz has talked about the advantages of non-blocking forms elsewhere.
Java is quite restrictive. I must have been doing too much Common Lisp, Erlang and Scheme recently!
Former colleagues may recall how smug I once had occasion to be, when I migrated my old home machine from dual boot with Linux and W2K to solely Ubuntu. My preparation for that was very informed by this, but it was still slightly nerve-wracking to delete everything and start from scratch. After that, my backups got a little slack. A single 40GB IBM Deskstar with content being intermittently copied over to my external USB drive, with very infrequent backups to DVD. Then the IBM drive crashed. Arse. Oh well, still got the USB drive. Then the USB drive crashed two days later. Oh shit, that's five years of my life in pictures and film gone. The first photos of all the boys... I was feeling physically sick. A few days later and I have a better appreciation for what I've lost. Personal stuff - nothing. The USB drive started working again after leaving it on for half an hour. Everything was taken off that and put on my work laptop, and I still had photos and video on the cameraflash disk and digital tape respectively. Thank fuck for that.
Rebuilt machine - two Maxtor 360GB PATA drives (hey, my motherboard is seven years old!). My motherboard aslo has RAID 1 capabilities, but didn't appear to work too well when I installed Gutsy. It might be possible to do it, but I didn't have the patience and was worried about what happens the next time I upgrade the kernel. So I went for the softwareRAIDoptioninstead. I'm now doing the backups more frequently along with using S3 for anything that would give me serious pain to lose.
So just adding to the generalnoisearound this issue. Look after your data, people!
Does Apple have some quality issues? I'm in the market for a new laptop, and was considering a Mac, having heard good things from some. But recently, there seems to be a spate of problems. Think I'll be staying with Ubuntu on something for now, thanks all the same.
Snagged me a log file and starting cranking out some code tonight. I had some free time to think about this a couple of weeks ago, and got some sketches down, but I've only recently got the data to start seeing how the code can fly. So, I'm starting out on my work Dell laptop, Dual Core Pentium 2GHz with 2GB RAM and a really shitty disk, judging by the slowness and noises it makes (or is that just Vista?) [stay on topic! - Ed]. The Ruby version runs in just over a minute, once all of the caches are warmed up. My initial naive Java version runs in 14 seconds (I haven't figured out yet how to run it using time as per *nix environments - Cygwin says it can't find the time command when I pipe zcat output into it).
Now to start implementing my ideas. I have what I think is the shared update of the accumulator as well as I'm going to get it. I'm hypothesising that most of the updates are uncontended and so don't require the full weight of Java's locking capabilities. Now I just need to parallelize the I/O and determine the most efficient matching algorithm, which seems to be Boyer-Moore from reading the Wide-Finder series. That particular algorithm seems to pop up fairly regularly in searching. Might be interesting to see what else is available in that field, but it should be in a library, surely?
Just logging the early signs. Connor was walking to nursery with Al the other day, and kicked a cat. There is a history there, the cat had previously scratched him, but even so! The other sign to be aware of is from when the boys recently watched the middle Star Wars trilogy. Afterwards, Callum wanted to role play and be Luke. Connor wanted to be Darth Vader. Enough said.
I love Oakley[1], and not just for the quality of the purchased product.
From Lance Armstrong's book, he recounts telling his Oakley sponsor that he's been diagnosed with cancer, but he's not got health insurance. The guy from Oakley tells Armstrong not to worry and he sorts it out by telling the insurance company that Armstrong had better damn well be covered, otherwise Oakley will stop doing their company heath insurance scheme through that insurance company. I'm happy spending money with a company that employs that sort of human being.
When I recently lost one of the rubber noseclips from one of my pairs of Oakleys, I phoned up customer service and they posted some out the same day, no charge. That's just great service, and ensures that I'll continue to buy Oakleys and will probably be getting them from my three sons over time as well. Why aren't more companies that switched on about having a great long-term relationship with customers?
Went back to Sol, to go to the other end of it. Really struggled warming up; my arms would not work, and I have very mushy thin tips on all of my fingers and thumbs. Scott did a nice roof, first or second go. I really struggled to link it until I just got really angry, and just pissed up it. Why didn't I do that the first time and save all of the skin and energy, fool? Found it hard to get pysched today, tiredness and missing the family is starting to tell. Next we tried a really cool roof traverse into a slopey top-out. Great moves, but a bit hard for me in that state. Around 7a again, but I split a tip on about fourth go and that was me done. I'd got overlapping halves on it apart from topping out, which I'd split my tip on. Scottie got overlapping halves and topped out, but then seemed to lose power, the sun came around a bit more or something and he didn't look as smooth on it. I then tucked into the baguettes while he thrashed himself on a couple of other things.
While we were in the area, we went over to Masia. That looks like it's got a few nice things to do as well, so something else to go back for. Final night, we went back to El Molina del Gato, which serves nice beer, has strange music and all of the climbing topos, including French ones so we could work out where we'd gone wrong in looking for Tierra Media. And then another disappointing meal in a place off the main square. Not sure about Spanish food; it must be better than that. Maybe we couldn't speak the language that well, but people couldn't recommend stuff either, and we were getting cold peppers out of a tin served with bad fries and indeterminate meat. Not inspiring. I was already dreaming of Thai green chicken curry.
Had some unfinished business with a sit down start to an arete here, so wanted to go back. Mint conditions, quite cold and hard to warm up. Skin still felt trashed. Met up with the two guys from Bristol that we'd met at the car park earlier in the week. I think it was their first time to the area, so they were running around dead keen. Managed to do a few nice things; there was a place round the back quite similar to l'Elephant with sloping flared cracks. There was a really good-looking 7a rib (8a sit start) which I didn't try due to trying to preserve skin, and the original walls that we'd seen on our first visit to this area that we still hadn't tackled. Oh well...
Day four for the first rest day? Well, not really. The first day wasn't much; an hour or so of tinkering. So we've pretty much done the 2 days on, 1 day off thing. It seems to have worked out well, as this was a planned rest day, and it started raining last night.
So a very late start today, after a lot of vino tinto last night. We decided to go exploring and work out where best to go on our last two days. First off, up towards Techo. This was the first area that we found using the topo and didn't get lost! This looks like quite a brutal hardcore place. OK, so it was a rest day and we're feeling (or I am anyway) quite shredded, but most stuff here looks like you need to be doing 7b to get much out of coming here. There were some inspiring roof lines that looked around 8a; I'll save them until I've lost 10 kg and got strong again.
We carried on up the hill towards Madriles and Pyschokiller; more big stepped roofs again. Although apparently Pyschokiller might not allow climbing there. Some of the areas are restricted, but not at the time we were here.
Then we went looking for the visitor's centre that was listed on the national park signs. Unfortunately, our written Spanish was enough to understand that it was only open at weekends and holiday periods. But the drive to get there was quite something. The park seems to be raised about the plateau, and we had some fantastic views of the flood plain and the sandstone towers elsewhere. It looked like going for a walk in that area would be worthwhile on the rest day as well, if we were there for a longer period.
To round off the day, we tried to find Tierra Media, but our Spanish wasn't up to the task. We did find some striking red trees though; not sure if they were seasonally that colour, or that was their natural plumage, so to speak.
Well, a bit more about where we're staying. We're at Camping Albarracin. It's a somewhat strange place in terms of requiring an international bank transfer to pay the deposit, but they accept Visa when I came to pay the balance on arrival. We're in a bungalow advertised as being suitable for four, and it would do that, but it feels very bijou with just the two of us. Not sure how Andy, Emma et al will find it next week!
Went to Sol today, and again had slight problems finding our way there. We followed our Spanish topo, but went a bit far before breaking up the hill parallel to the road. Sol was good, lots of stuff to warm-up on. My skin is feeling it already though. Trying a big roof today; I couldn't quite use Scott's sequence due to not having sixty foot arms, but need to work on press moves a bit more. I couldn't quite press out over the lip enough.
Had the most awful food at Hotel Albarracin last night. It was steak, but well-done at one end and completely raw (proper raw, not just the raw that I've had in certain French establishments. So, late start before getting up to go climbing. Lovely day again, got a bit lost going to where we intended. We went up to the main car park, and then along the road a bit before striking left into the forest, past a collection of cave paintings. This was thanks to our reading of the topo, and we had inadvertently gone to the wrong side of the hill. We noticed some enticing looking walls on the left (minimum 7a?, so a bit hard to warm up on) and eventually got to where we wanted to be. What we should have done is walked up past the swing park, until you see the climbing area on your right. But our Spanish was non-existent. Another good day, good rock and lovely area. I'm not getting any power onto the rock really, been pulling on blobs too much and got no topping out skills for these slopey topouts, so I'm struggling on everything except the crimpy overhanding walls. Scott is climbing really well, but then he climbs on rock lots! Jealous, moi!?
Flew into Madrid, managed to get all of the bouldering kit including my unfeasibly large extending stick on the plane and then drove the Albarracin. No map in the hire care (thanks Europcar!) but a combination of the AA and Google Maps directions got us there without any mishaps. We got there at about six in the evening and Scott was mad keen. I was more up for a beer, but we went for a drive, found some rocks and had a quick play. The rock and national park is really cool, and we were climbing as the moon came up. Beautiful. Sadly Al's got the camera this week, so I hope that my phone will suffice. Think we're going to have a good week.
Google to the rescue again. In case this helps anyone else avoid locksmith callout charges on a Saturday, I started off here and here, and was sufficiently enlightened as to solve it myself. Try checking that the key is in the correct orientation to be removed, twisting using a screwdriver where necessary. Then you should hopefully be able to use another key to push it out from the other side, and use tweezers to coax it out the rest of the way. The suggested superglue method wasn't necessary, but is a nice trick.
So there's been a bit of a kerfuffle over here. What's happened is that Vodafone UK have started using Novarra's content adaptation technology to transcode the internet for mobile phones. Why has this caused such irate responses in some quarters? Well, a history lesson seems to be in order...
The mobile internet started out with devices unable to render nearly all of the internet due to hardware constraints. WML was introduced as a very limited markup which phones were able to use to display content. Early WML sites were, needless to say, fairly limited in functionality, and tended to be exposed as distinct resources; e.g. Apache user-agent detection would be used to send you to http://wap.example.com/ if you accessed http://www.example.com/ with your phone. Moore's law still holds in this arena; devices got a bit more capable and iMode (CHTML) was introduced in Japan. This was initially something like HTML 2.0 / 3.2 without <table/>s, but with the better networks over there, this was somewhat more successful in the marketplace. The W3C stuck in their thumb and pulled out XHTML Basic, and then there was the related XHTML Mobile Profile.
So who is so offended by what Vodafone UK and Novarra have done? Well, mainly the mobile internet community. The solutions that the community provide have evolved over time from hand-coded WML sites, iMode sites, XHTML Basic sites, sites where the view renders the model to the appropriate markup and DIAL processors / Drutt / Volantis's offerings in this market. There is an entire industry sector dedicated to providing solutions in this area and nearly all of those solutions rely on the HTTP header User-Agent being present and being a reliable indicator of the requesting client. Novarra / Vodafone UK have introduced a fairly disruptive change which could be viewed as an attempt to change the rules of the game. They're making some pretty provacative statements along the way.
2.3.1.7 A content transformation server can do a better job of following mobile best practices The "Mobile Web Best Practices 1.0" W3C Proposed Recommendation [1] contains many recommendations for authoring content that is intended for viewing on a mobile device. A well-designed content transformation server can do a better job of following the mobile best practices than a human author, especially when taking into account the capabilities of the many different mobile devices. The result will be a more consistent, uniform experience.
I call BS. The incumbent mobile content industry is feeling the pain, but this could just be a game-changing move like Google upp-ing the storage limits on webmail. Time will tell whether the market (mobile phone customers) feels that the Vodafone UK solution is good enough, or whether a more open market will be preferred. I'm all for the Ubiquitous Web when it's good for the customer. So here's a little gedank-experiment. What happens to the mobile content industry if all carriers start using a content-adaptation proxy? How else is your company adding value? Evolving markets are hardly a new phenomenon, although maybe the rate of change is a little faster in these modern times...
We were out in a restaurant for Al's birthday meal and Connor was playing with the door where we were sitting. We warned him not to do that or the waitress would come over and tell him off. Five minutes later, the waitress came over and the boy's first reaction?
Been on holiday and had a lot of catching up (reading blogs!)
Been ill
Well, I can fix the second one at least - the first thing isn't really something to complain about, and there's not a lot I can do about the third. Unsubscribed from Planet Intertwingly (sob). That should free up some more time to finish off Jython UnicodeData, read stuff and do more hacking.
I don't think much of the English chances, but bring it on!
Update 1 9 - 17. The French seem to be choking. Lots of basic errors and not converting their chances. The Pumas are really going for it. We could be on for a massive upset and blow to the hosts (and favourites in some eyes) chances... (Loving Will Greenwood as a pundit as well).
I was watching Steve Yegge's talk from OSCON about branding, and one of the things he touched on was Amazon's brand is books, and they want to get out of that since Jeff Bezos thinks that certain consumables will become totally digitized. My current thinking is that they are focusing on other things anyway (hosting, anyone?) and maybe this is taking away from their original core competency. Recent orders of mine have taken a lot longer than they used to. Previously, I'd order stuff on a Monday and it would arrive on Wednesday or Thursday the same week, with Super Saver Delivery. Now it takes a lot longer. So I'm still waiting for the Erlang, ANTLR, Haskell and REST books to arrive that I'd hoped to read on holiday.
There we go, another smasher has arrived. I think there were various events and conversations that I wanted to record today, but it's late and I'm knackered. Blog more with photos tomorrow or the weekend.
Got numeric and decimal working today in between contractions in the Central Delivery Suite at Frimley Park Hospital today. Nearly got categories working as well, except I'm not clear how CPython has implemented unicodedata.category for undefined codepoints.
e.g. Python 2.5 uses Unicode 4.2 for the Unicode database. The integer codepoint 13313(decimal) / 3401 (hex) is not defined within Unicode 4.1.
3400;;Lo;0;L;;;;;N;;;;; 4DB5;;Lo;0;L;;;;;N;;;;;
It isn't defined in Unicode 5.0, which is what I've been using to do the Jython implementation.
3400;;Lo;0;L;;;;;N;;;;; 4DB5;;Lo;0;L;;;;;N;;;;;
So how does CPython define unicodedata.category(unichr(13313)) to be 'Lo'? And it doesn't seem to be just 'Lo' in all cases of undefined items. I'm speculating that it might be falling back to the preceding valid codepoint category. Think I need to post to a CPython list to confirm.
I am directly subscribed to Sam Ruby's feed. I recently added Planet Intertwingly as well, which contains Sam's blog. Both feeds are served as application/atom+xml. In Google Reader, duplicate items show up (for Sam, Steve Loughran, and others that overlap from my other subscriptions. I don't want to remove individual subscriptions in case Sam removes them from Planet Intertwingly.
From my readings of the spec a while ago, that was an explicit rationale for having id's associated with each entry. As you would expect, the id's are the same. From Planet Intertwingly:
So I'm being completely upfront in the title as to where I am on this one, but I think that it's worth giving some airtime to a few of these. Readers might care to note that they should route around the "grumpy Yorkshireman that doesn't like change" for some of these. You never know, I might get some comments explaining why I'm a bozo when it comes to Windows.
Avalon and the new Windows Aero UI.
I gave it two weeks and then I'd had enough. Does it really make me more productive having all that shit, or is it just effects for the sake of it? I have the same opinion on Compiz - I haven't yet seen a compelling reason for it to exist, beyond being secretly sponsored by Nvidia / ATI to make people get shiny new graphics cards. Let the conspiracy theorists chew on that one. And despite paying Dell more for a fancy graphics card in this laptop,
No really, I had one in my first week, and I've had one since then. Lovely. Occasionally (once a quarter?) when running Ubuntu Dapper, I've had X lock up on me and be completely unresponsive, to the extent that I couldn't even switch to a virtual terminal or ssh into the box and do something to it. The first time this happened, I went climbing at lunchtime, came back and it was still borked, so just a hard reboot to fix that. A reboot once a quarter on a development machine doesn't strike me as too bad. Vista is managing once a week at the moment, and in neither case am I writing C or any system level code. It's all Java / Python / Ruby and that sort of level.
That was a Vista new feature for me; I've never had that on previous versions of Windows. This is progress people!
Still no decent shell
I'm using Cygwin, but it doesn't seem to let me tail files and press Return to get some space in between lines. Minor, but annoying.
Continual swapping
Previously I was on a 2GB RAM Dell workstation, and now I have a 2GB RAM Dell laptop. The laptop is always swapping. What's changed? Well, I'm now on Vista rather than Ubuntu and I'm not running Oracle XE anymore, but otherwise the services running are much the same. IDEA / Eclipse, Tomcat, MySQL, Firefox, intermittent email client and a text editor. Don't know why Vista is always swapping (TaskMngr thinks it has 700MB free) but it's bloody annoying.
Broken file permissions
Doing a release today, the VPN crashed (don't know if that was Vista, BT, the Windows 2003 Server or something else. That appears to have left me with the following undeletable file.
So Vista has let me create a file that I don't have the rights to delete. That's smashing!
Random security policies
Or that's what I'm guessing is causing this anyway. If so, then a learning mode like AppArmor has would be nice. See
and
No, when I ask for a large amount of heap to be allocated for my Java process, I don't really know what I'm doing, so please stop me. Thank you Vista, you're my hero.
There was a bag of sweets up on the kitchen top. Connor spotted these and was after them, but I told him "Not for breakfast". After I'd gone to work, he asked Al the same and got the same response. His reaction?
Connor:
OK Mummy, me just hold it, OK?
Al:
OK Connor.
(Al continues ironing. Some time passes)
Connor: (Coming back into the kitchen)
Look Mummy, me just hold it, OK?
Al:
Well done Connor.
(More time passes)
Connor: (Comes back into the kitchen again)
Look Mummy, me still hold it
Al:
Good boy, Connor!
After an hour, the ironing is done and Al's about to phone me to say how well-disciplined the boy's been, just holding the sweets. So she takes the ironing upstairs and comes back down to see Connor doing his Muttley laugh and just shy of shovelling all of the sweets into his mouth! Gamed by a 2 year old.
I posted a comment on this but I thought it worthwhile going a little deeper.
Blogger doesn't support Trackback so I'll just post and link.
My point was not to argue about how little code is required to implement sending an ETag and checking an ETag based on the MD5 hash of your content (that's pretty much a library issue which should level out to be equal over time) but to go a little deeper into ETags.
I've been reading Sam Ruby long enough to have had the benefit of ETags drummed into me. The posts that Bill links to are focused on the network savings aspect of conditional GET. But you can also save server processing power, if you put a little more thought into your application model.
So we come back to the requirements for Java frameworks to support ETags such that it is possible to avoid doing the bulk of the server side processing. Caveat this could well be premature optimization, and is merely me thinking out loud. Struts is the one I'm most familiar with and I think with the struts-chain RequestProcessor, this approach could be used, but anything that works as a chain would do for this (so pure Filters would also work).
/* * Do something that works out what is required to render a response * for this request and generate an ETag based on that. So here we * have moved away from the approach of generating ETags from MD5 * hashes of the response body. */ ETag currentResourceETag = calculateETag(httpRequest); ETag incomingETag = extractETag(httpRequest);
You would need to be able to obtain the items responsible for determining the ETag value reasonably early in the request processing, before any really expensive operations. Not sure what implications that has for the layers in your application, or if you were using strict MVC how disruptive / worthwhile it would be to try this approach...
from test_support import verify, verbose import sha
encoding = 'utf-8'
def test_mirrored():
h = sha.sha()
for i in range(65536): c = unichr(i) h.update(str(unicodedata.mirrored(c))) print "%i : %i%c" % (i, unicodedata.mirrored(c), unichr(10)),
# Value returned by Python 2.5, which uses Unicode 4.2 #verify('91cd30c6c81911835dbcbed083f99fc9fc073e4a' == h.hexdigest(), # h.hexdigest())
# Value returned by current Jython implementation, which uses Unicode 5.0 verify('595795a212ca0ac629d6b2dfb09c703a472adb03' == h.hexdigest(), h.hexdigest())
# Add next test!
if __name__ == '__main__': import unicodedata test_mirrored()
OK, it's only for the BMP, but it's a good start. Supporting supplementary characters (in Java terminology) or the other sixteeen planes would need a more fundamental change to PyUnicode, methinks. Now I need to start adding the other unicodedata methods which should be fairly straightforward. Then I'll have a working implementation to post to the dev list. Maybe end of this month, unless Baby comes and I lose my late night hacking time?
I was hoping to use java.lang.Character.isMirrored(char), but the above is the result of diffing the output for jython and python running my test and diff-ing the output. Looking in more detail, Java 1.4 supports UCD 3.2, then Java 5 and Java 6 both only have support for UCD 4.0.
jabley@miq-jabley ~/work/eclipse/workspaces/personal/jython-trunk/jython $ python Python 2.5.1 (r251:54863, May 18 2007, 16:56:43) [GCC 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> import unicodedata >>> unicodedata.unidata_version '4.1.0'
And I'm getting the sneaking feeling that I've done something like that before, but it's been so long since I did any development in this area that I've forgotten it!
The Bash had his nursery graduation a couple of weeks ago (must put the photos up on Flickr) and then his last day in nursery was yesterday. He didn't seem too bothered; more excited about going on holiday and spending the summer with Al. But that 4 years has gone by fast!
Callum, we don't need to take your toys into Legoland since there's enough things in there to keep you busy. How does playing with your toys make you feel versus going on a ride?
Callum
Happy.
Me
So what's a ride like then...like playing with toys.
Callum
So Daddy, when you're on the ride, it's like the ride is playing with you. You're the toy!
Me (slightly shocked)
Yes, that's right Callum. Good analogy.
Me
So Callum, your homework is to write an essay on the inside of a brick.
I'm posting this using the Ubuntu Feisty Live Disk running on my work laptop. I was able to connect to my wireless connection and it Just Worked, WEP using a passphrase as well, rather than requiring the large hexadecimal keys. So colour me happy with that (for anyone that's interested, this is on a Dell Latitude D820, more details available on request) Think I'll be grabbing an XP install disk from our MSDN Universal subscription or whatever it's called these days and taking a serious look at Xen, along with possibly trying to pick Steve Loughran's brain about virtualisation on Linux.
Steve Yegge's recent post about the second most important course in CS made me smile. I discovered Eric Raymond's How To Become A Hacker fairly early on in my career, and to a Mathematics graduate with a job doing Visual Basic 6.0, that was eye-opening stuff. But you always have to remember that all authors have an agenda (including this one, obviously - Ed) and it has been commented by people other than myself that esr's HOWTO could be alternatively titled 'How To Be Like Eric Raymond'. Well, so be it. It's always the journey that's the interesting part. So can we consider Steve's post to be an equivalent 'How To Be Like Steve Yegge'? Doesn't matter. Again, it's the journey that has value.
As an aside, I had an email from Amazon today.
Your order #xxx-xxxxxxx-xxxxxxx (received 27-March-2007) ------------------------------------------------------------------------- Ordered Title Price Dispatched Subtotal --------------------------------------------------------------------- Amazon.co.uk items (Sold by Amazon EU S.a.r.L.):
1 Compilers: Principles, Tec... £47.49 1 £47.49
Shipped via Home Delivery Network Limited (estimated arrival date: 28-June-2007).
Note the order date as well. Three months to get that book. Ouch! But at least it's given me time to read thesetwo, and I can interpret Steve's post (and Joe's comment) as a good barometer of where I'm heading.
I took the boys to the park yesterday and Callum was very chatty. He noticed that I was quite snottery* and talked about how I had B-fever, rather than hayfever. Clever!
* I must have been married to a Scot for too long to corrupt the English language so.
So I had put this on hold to finish reading Josh Bloch and Neal Gafter's Java Puzzlers. Great book; highlighted some new things for me, which is all I ask for in any book. Partly that is since I'm still not doing Java 5 apart from at home for various minor things, but it was good.
So now back to Jython, finally. Well, reasons for my procrastination first:
New Job - busy as hell.
New job comes with a new laptop, which I was hoping would be a big step up from my nearly six year old self-built machine. The new laptop has reasonably impressive hardware specification, but it's running Vista. What an absolute pile of shit. I honestly don't know how developers are productive using that OS. I've given it nearly two months, just to be sure that it's not the fact that I've been off Windows for three years that is causing me all of the problems, but really. It's got to the point where I'm looking seriously at Xen on Ubuntu for the odd application that I do need to run Windows for. The other alternative would be to install XP, put up with the half life cost and initial downtime of getting the laptop set up for development all over again. I'll enumerate my grievances in a separate post. I don't think XP would get in my way as much as Vista (I did knock up the xmlunitXMLSchema validation patch on my wife's XP machine over Christmas and it wasn't that painful), but I'm not a fan of Windows after using GNU/Linux exclusively for three years.
So I've been doing a little work on UnicodeData again. Since I've not touched it for so long, I wanted to get some code up and running to start seeing how many tests were failing. Until Jython goes to Java 5 and above, I can't use java.lang.Character to do parts of it, or I could do a piecemeal approach of use java.lang.Character for the BMP, and then implement a new part for supplementary characters, or try to provide behaviour based on the running JVM. All a bit more work than I wanted to do, laziness and hubris being key. Instead, go for the brute force approach of the simplest thing that will possibly work. So I wrote a Python script (what else - it's a nice way of bootstrapping this problem) to parse the UnicodeData.txt file and generate some Java classes. The initial approach was to partition the UnicodeData.txt into a class for each plane in Unicode. Anyone that knows Unicode and the assigned codepoints will know that the BMP will take up most of this, but I was interested in getting something working, and then maybe refine it once the tests are passing. Well, my first cut was to have a simple interface:
interface UnicodePlane {
/** * Return a UnicodeCodepoint for the specified codepoint. * * @param codepoint the Unicode codepoint * * @return a UnicodeCodepoint, or null if there is no match */ UnicodeCodepoint getCodepoint(int codepoint);
}
I would have a class that implements this interface for each plane and a static initializer within each class that fills a Map of UnicodeCodepoint classes keyed by Integer codepoint.
Eclipse gives me this error:
The code for the static initializer is exceeding the 65535 bytes limit
Whereas ANT gave me this variation:
[javac] Compiling 2 source files to c:\Users\jabley\work\eclipse\workspaces\personal\jython-trunk\jython\build [javac] c:\Users\jabley\work\eclipse\workspaces\personal\jython-trunk\jython\UnicodeData\generated-src\org\python\modules\unicodedata\UnicodeCharacterDataBasicMultilingualPlane .java:11: code too large [javac] private static final Map CODEPOINTS = new HashMap(); [javac] ^ [javac] 1 error
BUILD FAILED c:\Users\jabley\work\eclipse\workspaces\personal\jython-trunk\jython\build.xml:456: Compile failed; see the compiler error output for details.
So I need to think a bit harder about the data structures. Turning to Bentley's Programming Pearls, the sparseness of certain items stands out, like the mirrored property.
I'll have a think. At least with the Python script that I have to cut up the UnicodeData.txt file, it's very easy to add another list comprehension to it, to see how many items in the file exhibit a certain property. The other way I'm considering is to just generate a properties file and lazily populate a Map as required. That's probably what I'll try next, rather than thinking too hard about how to compress a 1038607 bytes data file into something more reasonable.
Feels like Thames Water have reduced the water pressure in an effort to conserve reserves over the summer. Either that, or reserves are already low enough to cause a pressure drop. Either way, it means that the toilet can take more flushes to clear, and at nine litres a flush, I'm not sure how much water that conserves.
The boys had both been given a chocolate log and some sweets. Connor troughed his as normal and was watching CBeebies when Callum came to tell me about his day. We spotted Connor going for Callum's chocolate log in his bowl on the couch and told him to leave it. He grabbed it and did it in one with a chuckle!
I have what I think is a reasonable use case for Pipes. This blog was started to talk about the kids, so that I didn't forget things about them as they were growing up. But then over time I've obviously started blogging about technical subjects as well, since that's very dear to me! (Blogging is evidently very egocentric at times!)
So my desire was to create a pipe that only contained posts about Jython-related topics, so that Jython developers wouldn't get all the noise about family. This would have seemed a fairly simple thing to do.
Take an XML document.
Apply an XPath filter to it (//item/category/term = 'jython').
Sadly, I haven't been able to get this to work, and posting to the Pipes support forum didn't elucidate any way of doing it. So I've fallen back to filtering based on the title of each post, which seems a bit crappy to me. Tag / Labels / Categories are meta-data about my post, and I should be able to use that meta-data. But this one can handle a post with only a single tag, but doesn't handle posts that have multiple categories. So that leaves me with the option to either always have certain text in the title of each post, or only tag posts with a single category, which kind of misses the point of categorising items. What am I missing?
Not much really! I've moved jobs, so being busy on that meant my motivation to hack in the evening went a bit flat. But I'm settling in to the new thing now and have a shiny new dual core laptop for developing on. I set that up for Jython development last night, so I'm hopeful of picking it up. And for anyone that's interested, I've set up a pipe that will only have Jython-related posts in it, rather than all the family stuff that they might find slightly uninteresting if they don't know me!
Connor's so funny. He can't read, but he's seen that Callum has a book in his bed when he wakes up, so Connor wants to have the same. He's had Bob the Builder and Fireman Sam in with him the last few nights, and you can hear him blethering away to himself before he drops off.
Got the go-ahead from my employer late last week that it's OK for me to contribute to Jython. Cool, I can start properly doing the unicodedata implementation (and I don't have to ask Stefan to back out my xmlunit patch!). The only annoying thing is that I started doing the Josh Bloch / Neal Gafter Java Puzzlers book while I was waiting for the approval to come through, so I want to finish that rather than having too many things on the go at one time. So I'll probably be a week before ramping up on unicodedata again.
I haven't made as much progress with this as I would like, since I'm having some troubles. Not ones of a technical nature, but instead ones of a legal nature. My employment contract is apparently fairly standard and says that my employer owns all of my thoughts (even the ones when I'm writing this!). As what I thought was a courtesy, I asked my manager whether it was OK to contribute to open source projects, so that there would be no shady areas about who owned what code. Well, I'm still waiting for an answer and a bit of paper from my employer. So until I get that, I'm holding off writing any real code.
What I do have is a bit of sketching around the general area. First off, I wasn't sure about some aspects of the CPython implementation, so I asked. It got bounced by the python-dev moderator with the advice that I should post on the python-list. Which I did, but as I expected, it was more of a question for the python-dev list and the only (private) response that I've had is from Martin V. Loewis, who did the last change to that part of CPython. Maybe people are busy with PyCon. I was pointed at the C implementation, which doesn't generate that part from the UnicodeData.txt file, but instead is a horrible case statement, which looks bad. I think I need to raise a bug.
The other thing I've done with it is some Learning Tests about java.lang.Character, to see what it offers me. Obviously, this is attractive since it's a core library, is well tested, debugged and used by millions of people and all the other reasons Josh Bloch enumerates in Effective Java. It seems to have a few little idiosyncracies, which I have captured in my tests. (Note to self: I haven't seen any JUnit (or TestNG - Cedric!) tests in the Jython source tree. Must ask the dev list about that.) Then maybe I should check whether JRuby needs this sort of thing, and make it re-usable, with a Jython wrapper for the API that it needs, etc.
Aye, there's the rub! My initial reaction to java.lang.Character is the extensive use of char in the API. That obviously wouldn't cover all of Unicode. So as a best scenario, maybe the BMP plus a bit can be covered by Character, and then something extra would need to be implemented to support the rest.
A related issue is that all of the nice int overloaded versions of the methods are Java 5, and that's not what I'm targeting here. I'm hoping to get away with a target environment of Java 4, since haven't Sun end-of-lifed Java 3? Java 4 Character only has implemented Unicode 3.0 anyway, so there's a bit of a gap. Python 2.3 contains version 3.2.0 of UnicodeData. There's going to be a gap that I need to fill somewhere.
Thirdly, the API that Character offers seems to be rather different from what I and Python has interpreted under the Unicode specification.
>>> unicodedata.digit(u'\u2468') 9
but then in Java:
assertEquals(true, Character.isDigit('\u2468');
fails. Closer inspection of the isDigit API documentation shows that this is in fact a test for is DECIMAL DIGIT, so it equates to unicodedata.decimal rather than unicodedata.digit. Hopefully, Character will allow me to get a fair way into implementing and making some of the tests run, before I have to start thinking too hard about creating lookup tables and bit-masking the 11 most significant bits.
So it looks like the problem breaks down into creating a suitable data structure from the contents of the UnicodeData.txt file. CPython uses a python script (what else?) to create a C header file with the contents of various data structures. So all I need to do is probably one of the following:
Use the same approach, generate a very similar structure and port the existing C code that accesses the data structures into Java. Not very appealing.
Do something similar, and create a class for each code point. Probably not very good from a resource perspective (OK, potentially premature optmisation since I haven't measured it, but the UnicodeData.txt file is 817k, so that's some data structure). That could be useful from a LearningTest perspective though; e.g. can I use java.lang.Character, or do I need something else entirely.
Use something in existing core Java libraries.
Use a third-party library.
Something else, that I haven't bothered to think about what it could be.
Just one problem. I don't fully understand what is required yet. From reading the UnicodeData commentary, that indicates to me the reasons why the below tests are fine.
2468;CIRCLED DIGIT NINE;No;0;EN; 0039;;9;9;N;;;;;
(UnicodeData.txt entry for code-point 0x2468)
verify(unicodedata.decimal(u'\u2468',None) is None) verify(unicodedata.digit(u'\u2468') == 9) verify(unicodedata.numeric(u'\u2468') == 9.0)
and those tests pass (for CPython - I haven't implemented the Jython version yet!). From the file entry and commentary, that code-point appears to have no decimal digit value, a digit value of 9 and a numeric value of 9. The tests confirm that. I don't understand why these don't also pass.
325F;CIRCLED NUMBER THIRTY FIVE;No;0;ON; 0033 0035;;;35;N;;;;;
(UnicodeData.txt entry for code-point 0x325F)
verify(unicodedata.decimal(u'\u325F',None) is None) verify(unicodedata.digit(u'\u325F', None) is None) verify(unicodedata.numeric(u'\u325F') == 35.0)
The last one fails with: Traceback (most recent call last): File "", line 1, in ? ValueError: not a numeric character
Evidently I need to delve deeper into the spec, or start asking more knowledgeable people some questions.
So a little background as to why I'm doing this. Well, I don't know Unicode as well as I'd like, and I know Python a lot better than I know Ruby, so no temptation to start hacking JRuby at this point (well, maybe just a little).
I've implemented the methods that were missing and now I'm getting failures in the test. For the first implementation, I grabbed the existing Python source. Shit, C programming rots your brain. I learned C at Uni and then again via K&R, but this is a little different. But it's enough to give me the method signatures for everything that I need to stub.
*sys-package-mgr*: processing modified jar, '/home/jabley/work/workspaces/main/jython/dist/jython.jar' Testing Unicode Database... Methods: 38ef24ef104d52e24f9b7c942676c6961f9233cc Functions: 97f3b4a034c7d9a0d0c1f387e216d6b8bf309442 API:Traceback (innermost last): File "dist/Lib/test/test_unicodedata.py", line 91, in ? File "/home/jabley/work/workspaces/main/jython/dist/Lib/test/test_support.py", line 125, in verify TestFailed: test failed
Bit tired tonight (Connor's been throwing up the last two days), so I won't dig much into this. It feels slightly weird to be running the tests as python tests against a Java implementation, but that's what you get for implementing a library like this. No Junit / TestNG in sight. I have a feeling that it's going to require a lot of reading, which is good in that I might learn something, but I also wanted to get back to Stefan with a DocBook example for an xmlunit proposal.
Inspired by Joe Gregario, I thought I'd take a gander at Jython. The proposed JythonSprint seemed to suggest that unicodedata was required, so I thought I'd have a play and maybe even contribute something. We'll see.
So, grab the main trunk from subversion and off we go. TDD all the way, as much as possible. Are you sitting comfortably? Then I'll begin...
Step 1 - create an ant.properties file. This is in .cvsignore, so no worries about clashing with anyone else's settings. Straight off the developer guide.
build.compiler=modern debug=on optimize=off
Step 2 - build it using ANT.
Step 3 - make it accessible. I don't have jython on my machine already, so I take the dirty approach.
Slight tweak from the development guide, and yes, I'm using Eclipse.
sudo chmod 755 /usr/bin/jython
Now see what it looks like:
jython *sys-package-mgr*: processing new jar, '/home/jabley/work/workspaces/main/jython/dist/jython.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.5.0-sun-1.5.0.06/jre/lib/rt.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.5.0-sun-1.5.0.06/jre/lib/jsse.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.5.0-sun-1.5.0.06/jre/lib/jce.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.5.0-sun-1.5.0.06/jre/lib/charsets.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.5.0-sun-1.5.0.06/jre/lib/ext/sunjce_provider.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.5.0-sun-1.5.0.06/jre/lib/ext/sunpkcs11.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.5.0-sun-1.5.0.06/jre/lib/ext/localedata.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.5.0-sun-1.5.0.06/jre/lib/ext/dnsns.jar' Jython 2.2b1 on java1.5.0_06 (JIT: null) Type "copyright", "credits" or "license" for more information. >>>
Cool.
Next run the tests.
jython dist/Lib/test/test_unicodedata.py Testing Unicode Database... Methods: 38ef24ef104d52e24f9b7c942676c6961f9233cc Traceback (innermost last): File "dist/Lib/test/test_unicodedata.py", line 84, in ? ImportError: no module named unicodedata
That's expected. So I added a class org.python.modules.unicodedata and added an entry in org.python.modules.Setup to have a unicodedata module. I'll probably go back to the class name and maybe create it's own package longer-term, but that's the simplest thing for now. Tests again.
jython dist/Lib/test/test_unicodedata.py *sys-package-mgr*: processing modified jar, '/home/jabley/work/workspaces/main/jython/dist/jython.jar' Testing Unicode Database... Methods: 38ef24ef104d52e24f9b7c942676c6961f9233cc Functions:Traceback (innermost last): File "dist/Lib/test/test_unicodedata.py", line 86, in ? File "dist/Lib/test/test_unicodedata.py", line 62, in test_unicodedata AttributeError: class 'org.python.modules.unicodedata' has no attribute 'digit'
I seem to recall reading about some script that will generate stubs for these things - gexpose.py? I'll have a look, but otherwise it looks like my next step will be implementing stubs for the required methods and see where the tests fail next.
Managed to head up north for a day, hooked up with the Banks, Laurie and Dutch. Cracking day, too hot really (and this is February!).
Mooching around under Inertial Reel discussing who had climbed it. Martin Dearden was just next to us, apparently enjoying being the subject of our historical wanderings when we tried to remember who it was that had taken eight years on it. Mind you, that's positively fast given that I first tried Stefan Grossman eleven years ago, before DB had done it. I came close six years ago, and haven't really been back. There's a long-term goal!
Did a bit, felt a bit fat and not moving well, I think I was a bit tired from introducing the weight belt back into the training programme. The Banks did well, getting Teck Crack Superdirect third go or thereabouts. I couldn't get my foot on the starting hold - bit of flexibility work required maybe!
Backed off Stretch and Mantel - I can't mantel and it was a bit high. Then puntered about on Calcutta Buttress before team effort on the world's hardest 6a+ slab. Andy came close; Adam Long complained about old boots not being up to it, Fiona crimped like a beast but couldn't quite get it.
Flashed Stretch Armstrong then it was time to go. I didn't really do much, but had a good day out with the guys. On the way home, Al rang and said it was OK for me to stay over, but I was already halfway home. Will get an overnight pass properly sorted out for the future.
Callum has worked out how to open the child-proof locks on all of the cupboards. I am now locked into the sort of security patch / break / patch cycle that Microsoft administrators must enjoy living. Previously, he had discovered that pulling really hard would get the sweetie cupboard open, but now he's found that the sweetie cupboard is oriented one way, and the biscuit cupboard is oriented another, and he just has to slide it open and press to make sure the latch doesn't engage.
The fittings are oriented at 90° more due to my ineptitude at figuring out how to install them without any instrucions, rather than any conscious effort to prevent them spotting any usage patterns.
Connor's noticed how to use Callum's toilet step to stand on and reach stuff. This currently equates to emptying the cutlery drawer when he can! This is a bit earlier than Callum started to do this, but then Callum didn't have the step until we started weaning him off the potty, which would have been when he was 2 1/2 or so.
(to be said in a thick Yorkshire accent - I'm teaching Callum Northern).
Had the twelve week scan today - all looks fine at this stage. Exciting, and I can announce it to the world, both here and in publishing ages old drafts.
So here's a little ego experiment for me. I'm not sure how many of my mates read this blog - some have asked about it.
I'm also curious as to how many are au fait with Atom and RSS. Well OK, I don't expect them to be that au fait with RFC 4287, but they maybe have come across the general concept. Plus I'm tight (did I mention I'm from Yorkshire?) and want them all to ring me rather than the other way round!
Took Callum swimming today. He's coming on lots and we ought to think about swimming lessons soon. I think he could take a more structured approach OK. He's happy to try swimming on his own with the armbands, but struggles against the current in places!
Connor's volcabuary is coming on. I thought after I got back from Font that there'd been a leap, but I wanted to document it:
So, this is in effect a post-project review. Sad. Next time, I'll have a Gant chart! Anyway, in no particular order of priority:
I was strong - should have got more done.
I had real problems transferring that strength to the rock - getting the power onto the road as it were. That felt like a real technique thing - the majority of training for this trip was done on my board, or doing deadhangs and ladder work. So need more variety generally. Well, I already knew that, but it's a bit hard to get living in Hampshire!
Preserve skin, rest properly.
Take rest days.
I don't live in Sheffield and do twenty hours climbing a week anymore. So don't get sucked into climbing with others that do! Further to that, I am only doing around five hours climbing a week. To get the stamina to do lots of climbing, you need to climb lots. No secrets, just hard work and time.
Specificity! My training mainly consisted of doing thirty problems with two minutes rest. So I was fairly well primed for doing circuits of that length, but not a full day of all-out bouldering.
Session peak. Doing twenty problems like that is not a good warm-up for climbing anywhere near my limit. Doing a short warmup and making the seventh problem that I do at my top-level would have been a better fit.
So major takeaways from that are that I need to climb more - I'm trying to address that by going to Craggy at lunchtime and getting some mileage in on the self-belayer as well as bouldering. That has its own pitfalls, but doing an additional 150 moves per session can't be a bad thing, even if it is climbing on blobs and routes that I know too well. Also, I need to start doing weights again. Not sure how I'm going to fit that in yet!
Scott was really feeling the effects of yesterday on his ankle, so was going for a rest day anyway. We went to the Carrefour up past Cuvier first, to get the obligatory Pommerol before getting the last bit of climbing in. It was a little damp still, and not sticky damp either. But the warmup went well, Marie Rose first time, other stuff flashed and I felt more comfortable, both from having had a rest day so the skin and muscles were better, plus more accustomed to the style of climbing.
I had intended to purely try to get on Charcuterie, via Dutch's sequence of go for the RH crimp from the undercuts, rather than getting into the other undercut. But Scott persuaded me to get on the arete that I'd briefly tried on Wednesday. RH slot, LF on good hold, rock up on LF nobble to get LH sloper / crimpy layaway depending on how you prefer to take it, RF by LF and LF onto smear, then RH into crimp, RF goes into starting slot and then LF kind of hooking / flagging on the side of the arete to throw LH for high chickenhead. RH comes onto pinch the arete above the chickenhead , get the feet high (RF into RH crimp?) and go for the top of the arete, whereupon you really shouldn't fall since it's a good hold and you'd probably miss the mat if you fell from there anyway.
Whereas previously, I couldn't even sort out my feet enough to get the RH into the crimp and do the crux throw for the top, this time I did it first go, despite the damp. Just pysche and concentrate, sufficient rest and skin. Fucking basic things.
There was a group under Charcuterie, so I had a play on L'Abbatoir instead. Not done it for probably eleven years. Couldn't remember the sequence, I was getting close using a high LH sloper and kneebar, but conditions / skin / strength / time weren't permitting it today. Only had three goes, got further each time, but had to sack it off.
Had quite a speedy journey back up; at one point Scott had to brake for a van that was going slowly in the fast lane and fortuitously went past a gendarme with a speed gun. I commented that was a bit lucky and maybe we ought to observe the speed limits. Alas, he got clocked doing 126 in an 80 zone at the turn-off for the ferry-port and we got a motorcycle escort to a cashpoint to pay the 90€ fine.
Got home without too much bother, quick Thai curry and then crashed.
Still no rain, so went to Apremont with the team again. Left my stuff in the car, to enforce the rest day and hopefully just help Scott climb well. He had a good warm up on a few yellows and then the others arrived and we moved over to a new area. Scott, Laura, Sarah and Fi were doing the blues and other stuff to warm up. Scott's ankle seemed to be holding up under all the strapping. Wandered under a problem that Laurie was trying. Cligne de l'oeil, or Wink as it's translated. Font 7a of loveliness; RH high layaway, step up to get good LH dish / crimp. RH crimpy layway, LF into starting (staring!) pocket and then RF heel-hooking on starting layaway. Go for top, match, shuffle right to the good bit and sort the feet out before pressing out the top. Scott got it fourth go or something, very good effort. That's his trip basically, Font 7a in Font. Fair play. Laurie left it for later.
Mooched off to join the others over at Delta Roc, up the route de la solitude. Didn't remember / realise that Apremont is so big. Delta Roc again is 7a, didn't quite look like my sort of thing (slabby arete) but again, quality problem. Scott wasn't quite trusting his ankle on that one, understandable. Again, hero effort from Laurie, getting it seventh go or something stupid, on his fifth day on. Dutch got it with a more obvious hooking method, as did Dave or Hoggie, can't remember which. Barson was close too.
Over finally to Science Friction and la Lune (6c), which was Fi's demon for the day. Couldn't quite get on the top hold enough to pull onto it. Looked good; Scott thought that the first move was too powerful the way she was doing it, but then he'd had a long day. La fleur de rhum (7a+) a bit further up looked flashable; Emma was making progress on it, and then a lovely wall to the right of it, on chickenhead weirdness above a nasty landing (6c/7a?). Coefield said it's not too bad though - he did it last Christmas and exited left rather than right due to snow on top! (Like a Baboon trying to open a Kinder egg!)
Again, Laurie went back to Cligne de l'oeil and got it with the new sequence. Respect.
No rain in sight, so on to Cuvier with the team. Started to warm up but felt very sore. Kept going anyway, just to make sure that I wouldn't let any sort of recovery happen today. Thrashed on Marie Rose, tried three times on some 7a arete opposite la Forge that Laurie was doing. Just not happening, so left the guys to it and Hop-a-long and I went into Font to meet Fi and Emma. Fi was doing some shopping for her new house; Emma was just being professional and avoiding the temptation to climb. Had the world's most expensive beer in one of the cafes and took off to prepare for the BBQ at the gite. Bloody palace!
Late risers, to give the day a chance to dry out the rock. Then went to Isatis; my intention was to have a fairly long day of easy-ish problems on the reds and then take a rest day prior to blasting on Thursday. That tied up with the forecast that we had, that Wednesday was supposed to bucket it down.
We got to Isatis and it didn't seem too bad. The wind was up and drying things out nicely, so sent the guys a text telling them to get their arses in gear. Apparently that tipped them sufficiently to come out, since they were sat there arguing about where would dry out first.
Scott and I did most of the first eighteen reds (missed out a few wet ones), repeating a few that were enjoyable. I didn't feel that I was climbing that well, but felt fairly strong and was looking forward to getting some stuff done. Scottie seemed to be having fun as well and was pretty tuned in to the climbing. The guys arrived, Scott flashed the Crocodile thing (silly thing, see Bleau video / DVD) and we had a bit of lunch.
Then followed the guys over to the Hautes Plaines. Never been over there before, really cool place. Quieter than Isatis and some really nice problems to do. I was trying a problem in a pit up on the ridge; only around 6c but it wasn't happening. Couldn't understand it. We went up a bit higher to where BANKSIE! had found a (7a) roof to suit Emma, but again, I couldn't climb for shit, couldn't concentrate, just thrashed and wasted muscle and skin. Scott looked good on it, Laurie(sp?) was so impressive, getting it about tenth go, just really fighting and stubborn. Oh well, just leave it for another day.
Did I bollocks. Dutch and Kim were trying a really enticing wall lower down (pull on with RH crimp, flag and go up for small projection to balance with LH before extending for high LH crimp / slight gaston. Skin too sore to pull on, but tried a few times, just to make sure.
Then Scott sprained his ankle playing rounders, and I had to help him walk off.
Christ, Scott had a shitty journey last night. But he got here finally and we had a few hours kip before heading out to miss the joys of the M25 on a Monday morning. Got to Dover early doors and snagged an earlier ferry. Ferry food sucks! I don't think there are any eggs in the scrambled eggs, and the beans were watery and tastlesss. Should have stuck to croissants, but I was trying to keep the healthy thing going.
Got to Milly in just under four hours - not bad. Sorted out the tents - John had forgotten to include pegs to the one I'd borrowed, so we improvised and sent slagging texts. Then headed off to Apremont, thinking that it was a bit showery, but it would be close to the road.
Arse. Road was closed, so couldn't drive all the way to the main car park. Instead, parked at the south end and bush-whacked around for a bit.
Finally got to the near car park area. Easy problems were all wet, so ended up doing stuff that was probably too hard, and wasted too much skin. Stupid, where's my self-control? That's what happens when you don't get out on rock much.
Didn't hear back from the others, so we just sorted out food at the campsite. It started to bucket down, so we cooked at the toilet block, hopefully not setting a precedent for the rest of the trip.
So, I've been training reasonably well. I had a bit of a gastric infection a week ago and missed some training, but otherwise I think I'm going pretty well and hope to do some good stuff. Last time I was in Font (two years ago!) I was not quite doing Surprise (bad sequence) and was trying Alta as well, but had the sequence really bad for that. I was trying to go from the starting crimps to a high left good flat hold, but the normal way is to reach into the undercut first with the right and then move across using an intermediate. Hoping to do better with it this time - I've put 5 kg onto my deadhang whilst maintaining the same weight, so I'm stronger than last time. On blobs at Craggy, I'm doing OK, but it will be interesting to see how it transfers to rock.
Al took Callum to a third birthday party for one of his friend's yesterday. One of his other friend's 'had to sit on the naughty step' for spitting at Callum, but Elliot came up to the Bash later and apologised. Callum's response?
'That's not good enough, Elliot'! Where did he learn that ...
Took the boys to Longleat Safari Park today. Callum was very excited, but Connor managed to fall asleep just before we got there!
So we went through the first bit, which had the giraffes, zebras, ostriches and some other stuff. Then we went round the flamingoes up to the monkey enclosure. Al voted to take the shiny new Zafira in whereas I was a bit more cautious, but Callum was pretty vocal about what he wanted to see. So in we went.
It was obviously very funny to watch the monkeys dismantle other peoples cars. They must go through some sort of training programme. Rights lads, next up, Audi A3. Weaknesses, trim comes away easily, remember the arial if they haven't retracted it and the rear wiper will come off if you hang on it hard enough. And so it was that some of the little nasties got on our roof, and went straight for the rear-screen wash projector. Off in a flash. I even saw one using a branch as a crowbar to get a wiper off another car.
Callum and Al thought I accelerated rather hard to coax one of the little fellas off the car, but it was more like controlled kangaroo hops to encourage the monkey to leave. Connor woke up in the next enclosure and saw the gazel-thingies and deer, then caught the tiger and lions as well, so he was bouncing off the walls. Little smashers!
If you arrive in the Pass and it's dry, go climbing. The BBQ can wait, but tomorrow will probably bring rain.
A bunch of Sarf London market boys will not be able to thrash up Snowdon in proper Northern rain that hurts, Wayne and his brother excepting.
Never go hill-walking with a fell-runner. Doing the Llanberis track up and down in a little over three hours is going to hurt later this week.
The Vaynol is very good for supping - good choice with the campsite, Mr Velupillai.
The campsite was basic and I'm probably needing my creature comforts more in my old age.
The Vaynol sucked for food. They got my order wrong, brought the food out cold and is was generally unimpressive. I made up for it by drinking lots of Robinson's. (c.f. point 4)
Not doing any climbing for a while over the hot summer months leaves Fairy Liquid soft hands and flabby muscle which doesn't cope well with the Cromlech boulders.
Whereever you go climbing in the world, you will bump into people you know from Sheffield. Mr Busby looked far too fit and strong for my liking, so I'm going to have to start getting thin so that I can be good enough to hold his rope next time I see him at Rubicon!
So my brother and his family visited, and I didn't write anything at the time. The one thing that sticks in the mind is his son, and my allusion to Beaker.
We went to Alan and Alison's for a BBQ this Sunday. Cracking day, far too hot, and the boys were enjoying playing in the garden while Alan did his manly thing with charring bits of meat over the flames. After the Bash had eaten about four sausages, he sat down for a bit, holding his belly, then turned around and asked "Dad, why are we still here?". That's my boy, fill your boots and leave!
Took the boys to Chessington World of Adventures, courtesy of Tesco's vouchers. Good day out, Big Sausage was covering his eyes on the bigger rides, like the Runaway Train, but they both seemed to have great fun. It wasn't too busy either, given that it was half-term.
I was stayed with Jon and Jay at the weekend up in Sheffield, as part of a climbing trip with Scottie and his mate Dan. I bailed staying in the flat that Scott had sorted out when Andy and Emma were due to come back. Five people into a two-bedroom flat doesn't go for me; I'm getting old and like my creature-comforts.
Jon offered me a blue towel and a white one, then snatched the white one back, saying that he was going to put a coloured wash on in the morning! That boy's changed from when we shared a house post-Uni...
Al has this mannerism of stating Genius! as a thinly veiled sarcastic comment. Now so does the Bash. He was asking one night where his grapes and milk had gone, and Al told him that we'd taken them downstairs since he hadn't appeared interested in them. His response? Genius! :-D
Callum sucks his thumb. Neither of the boys were, or ever will be, given dummys, so now we have this habit to break. Allison told him to 'stop thumb-sucking', but got a little mixed up. 'Stop some-fucking', whereupon we both collapsed. The Bash didn't pick up on why though, otherwise he could have been repeating some choice words in nursery.
Al was traumatised today when she went to wake up Callum and he had a humdinger, but he wasn't really aware of it. She caught sight of it and hastily put him on his potty and ran away! I had to explain to her that Morning Glories aren't just caused by waking up to an obviously very sexy wife, but also because a male is bursting for the loo. Nice.
What a day to go to Penny Hill Park with a load of Scots! We've got the in-laws down at the moment, and took them to Penny Hill Park for afternoon tea. And met half the England team. I'm surprised the Andersons were as restrained as they were!