Twitter tracking; creepy, not creepy (I hope, in response to this).
⌘-` cycles between windows of the active application, ⌘-~ cycles backwards. Learning this somewhat lessens the pain of not having a working Witch.
Since moving to Leopard, I've had to do without two of my favorite little apps; Witch, a window switcher, and growlnotify, a command line growl notifier.
growlnotify is still dead - this workaround doesn't work for me, nor does the beta, and I can't even work out where to download the Python bindings.
Witch 2.0 is out today. Sadly, that's still not working either. Sigh. Windows in spaces other than the active one still don't show up. Apart, strangely, for iTunes and Notes.
Now Textpander has stopped working too. Bugger.
The good news; the new Guardian Sport and Football sites were launched successfully, and seem to be working fine. The bad news; 24 hour licensing notwithstanding, we couldn't find anywhere to serve us a beer at two in the morning. Grrr.
Update: More on the new sites here; Our new look.
Nice post from Sean on not so obvious features at the Guardian. I particularly like the Charlie Brooker feed.
Thanks to Jemima Kiss for the special key that we've been using for site launching:
Cluetrainwreck - Comcast have been monitoring twitter for averse comments about them, and responding with messages along the lines of "I hope we can change your perception".
The creepy stalkerish twitter-scanning side of this aside, this so reminds me of New Labour. Whenever some New Labour apparatchnik appears on TV to discuss an unpopular policy, the line always seems to be "we accept that we have to work harder to get our message across". The idea that we all understand the message perfectly well, but don't like it, doesn't seem to occur.
We often have applause rippling around our office. Usually it's positive but not always...
Yesterday, one of our devs (who shall remain nameless) was looking for duplication in some form of content or other, and came up with a script. It was always going to be evil - it was in Perl. The script made calls to Google, looking for duplicate results. He kicked it off, then went out for lunch.
Google, naturally, blocked us PDQ. Quite right too - see 5.3. They blocked the entire Guardian. (You could still use Google, but had to get past a captcha for each search.)
Of course, we've all done it. Haven't we? But blocking the entire Guardian was a bit of a coup.
Took us a while, but we managed to find the box in question and kill the script. The nameless dev was late back from lunch - we were speculating that he might have been bundled into a black van with a G on the side. But he did get back safe and sound, to a rousing round of applause from the entire office.
Backward looking old fart that I am, I've only just started twittering.
One of the most interesting things about the GAE to me is the non-relational data store. I've blogged only recently about my doubts about that approach.
A friend of mine from the big G go back to me about this. "To answer your question about what's wrong with a real database, the datastore is all about scalability. The API trades off flexibility with access paths and transaction boundaries for the ability to store terrifyingly huge volumes of data, while serving a bazillion concurrent accesses.
Compared to an RDBMS, I find this style of data storage requires a bit more thought and design up front. However, almost every RDBMS based app I've ever written has required me to go back and optimise my schema and queries any way, so overall, schema-related work is about the same. Not having SQL does make running arbitrary reports and so forth more difficult."
Hmmmm. Now, coming from Google, this bears thinking about. Scalability as an issue I can see. We do have to put in a lot of work to keep guardian.co.uk performant, and it's almost all at the database, fiddling with schema and queries level. Much to think about...
Other people's thoughts on this; Google Datastore and the shift from a RDBMS and Google AppEngine, BigTable and why RDBMS mentality is harmful.
More on the GAE:
Up and Then Down, fascinating article about lifts. Did you know that the close button usually doesn't do anything?
In future, I'm taking the stairs.
If you suffer from vertigo, do not watch this:
Freaked me right out, I can tell you. Right, I need a cup of tea...
Via Binary by Accident.
I was appalled to read about my colleague Megan's battles with medievalism in Women without a country. It's shocking that this kind of bigotry is still enshrined in law.
I hope that this kind of thing wouldn't happen over here due to the frequently (thought almost always unjustly) maligned Human Rights Act. We do have our share of bigots, though.
Megan, my heart goes out to you. Good luck.
dawkins:release-33 simon$ history|awk '{a[$2]++} END{for(i in a){printf "%5d\t%s\n",a[i],i}}'|sort -rn|head 232 svn 29 cd 25 sudo 22 svnlog 18 rm 17 ls 15 ssh 12 notify 11 python 10 mate
Update: I like Tom's; cowsay, brilliant.
Sky-high prices, flat beer and no fags: how the pub bubble burst
Right, I'm going to do my bit to support this ailing, vital industry, and I expect each and every one of you to do the same.
Err, OK, except you, Mum. ;-)
Loads of stuff in the blogsphere about the Google App Engine, unsurprisingly, some of it even worth reading.
So, it's looking good, though I'm still concerned about lock-in. It's not just the Datastore API which locks you in - that's probably fairly east to emulate - but also the Authentication and Authorization API, which looks much trickier.
Update: As Ade says, you certainly don't have to lock yourself in to GAE's Users API.
The Guardian wins the website of the year award at the British Press Awards. Well done us. There will be cake today. ;-)
Fingers crossed for the webbies...
Oh, and some people appreciate the fine details, too.
This is what I call a bad day. First you die, then they lose your luggage. Bummer.
I've had some pushback from Felix over my relational databases aren't dead yet post. He points to db4o.
Now, I've not used db4o, but I've tried out ZODB, and very good it is too. especially with a dynamic language it's really nice to be able to tag arbitrary attributes onto your objects, and to be able to persist and retrieve them complete.
But still, I've be wary of using one for a real project. Performance aside, there are things that you just can't do as easily with an ODBMS as with an RDBMS. I'm thinking of things like:
Also, I find it hard to imagine that an ODBMS can be optimized to the same extent as something as notionally simple as a relational database can be.
All this is leaving aside things that don't yet exist AFAIK but which are probably just a small matter of programming - management tools, clustering, that kind of thing.
No, I'll be sticking with the RDBMS for the foreseeable.
I picked up Music Hole, and have been listening to it pretty much ever since.
I was a little disappointed to start with. It's a bit less consistent than the stellar Le Fil, and two of the weakest tracks are amongst the first four, so it's not a great start. Worse, she's singing in English half the time! That's terrible - the French is half the attraction.
But still, there's some great stuff here. Home is Where it Hurts, Cats and Dogs, Money Note and Waves are all fabulous. Inventive, catchy, surprising, funny; classic camille.
On my way home yesterday, I spotted a review of Music Hole in one of the free rags over someone's shoulder. Glad as I am to see camille getting some mainstream exposure, I was disappointed to see her compared to Björk. And in the first sentence of the review, no less.
Now I can see where this comes from. Both are talented female singer-songwriters, both have superb voices, both are rather experimental, both not native English speakers, both rather beautiful in an unconventional way. Not least, both are totally Upton Park.
But the thing is, though, that this was supposed to be a music review, and they don't really sound anything like one another.
The Guardian review was better, even if they didn't like as much as they should have done. Yes, should have done, dammit!
(Upton Park - two stops short of Barking.)
The Python blogsphere has been exploding with the news of the Google App Engine today. And fascinating it is too - free hosting for Python web apps, Django included. With the might of Google behind it, this will push Python big style. Take that, Rails hype!
I'm a bit uneasy about the datastore, though. Not only does this gut any existing Django app, it also any means that any app that you write that persists data (read - non-toy) will be bound to the GAE API. What's wrong with a real database?
Naturally, I've signed up already. ;-)
Who will write tomorrow's code? Perhaps no one will need to, thanks to Proj-o-matic!
Seriously, there's a good point here. When I was a kid I had a ZX81. You couldn't play any worthwhile games on it, so the only real fun you could have with it was to program it, if you were so inclined. (Lord, did I dream of getting a QL. I mean, 128K and 2 built-in microdrives? Wow! Never could afford one, though.)
Programming requires a certain way of looking at a problem, a certain approach to breaking it down into automatable chunks. I firmly believe that this way of thinking can only be developed by exercising it, and that it's most easily learned as a child, while your thought processes are still developing. I hold this belief with no evidence whatsoever. Hey, it's my blog! So sue me. ;-)
These days, more kids have a console than a general purpose computer. Most of those that do have a general purpose computer are running Windows on it, so they don't get built-in development tools. Of course, you can simply download something for a general purpose computer, and even for a console there might be solutions for anyone who's really keen. But either way it's much easier just to fire up Call of Duty and blast stuff. So, what's going to happen?
Brilliant. PZ Myers, uh, social engineered his way into a public conference call by producers of Expelled, bided his time, then jumped in and pointed out where they were lying.
All this, and a Firefly reference too. The man's my new hero.
See I always aim to misbehave.