Unsettling
Unsettling. Sounds like there might be a massive scripted hack going on against out of date WordPress installs on Dreamhost. Check your site.
Unsettling. Sounds like there might be a massive scripted hack going on against out of date WordPress installs on Dreamhost. Check your site.
start.gotapi.com. Lightning fast lookups of API documentation; includes Python docs, YUI, HTML, CSS and lots more.
ITA Software Trip Planner. Super nerdy flight booking search site, operated by the company that provides software to everyone else in the industry.
Oxford Geek Night 3 now on the 25th July. The date has been moved back by a week.
I have bought a tin whistle just last week. I highly recommend anyone to get one.
I remember really hating wind instruments when I was a kid, playing the recorder very very badly (so badly I was kicked out of the school band). I never really thought I would one day every be able to play a wind instrument decently. But now it seems I am able to do it with the tin whistle! And I'm really not talented at all. So I am convinced that anyone will be able to play it and with much less effort than I have put in too (which isn't much really).
And it is really cheap. I got mine for 8 quid. You can get them from a music shop. They are just crudely made brass tubing with a mouthpiece, and are so light and hardy, you can carry them everywhere. I think that's the idea.
They are really simple instruments to learn. There are only 2 octaves on the tin whistle, and they typically start on a D note, playing the D major scale (that is Do Re Mi.. but starting with a D instead of a C). The D major scale is one of the most common scales that Irish songs come in. You can also get them in G major and A major scales. But for starters it's best to get D as most tutorials use that.
The songs are really catchy and easy to learn. Lots of repetitions, and can be very lively, like in a polka (the music they dance Ceilidh to). And it is good practice for reading musical notation too, if you aren't too familiar with the musical notation. The tin whistle scores are much easier to read than piano scores as there is just one melody running through it. No chords etc to distract you.
I have found this really useful tutorial on YouTube which has made learning the tin whistle a breeze. The links are below.
Afterall Guinness is such a great beer. Surely everything Irish is yummy.
JavaScript Minifier that doesn’t break code (via). Perl re-implementation of Douglas Crockford’s classic JSMin that doesn’t clobber IE’s conditional comments, by Peter Michaux.
Google Gears DB Abstractions. Here come the ORMs.
The Zonetag API Goes Public. Awesome new API from YRB—given a cell tower ID can provide both a location and a list of suggested tags, based on data collected by ZoneTag.
Oxford Geek Night 3 (via). The date for your diary is July 25th (moved from the 18th).
I’ve just finished writing up the documentation for my latest Rails plugin, Restflection. Probably none of it makes sense because it’s a quarter to 1 and I am bloody tired. But on the off chance it does make sense, here’s the blurb:
“Restflection is a Ruby on Rails plugin designed for use in applications which follow RESTful conventions. It allows you to extract information about resources without necessarily knowing what they are called.
For example, instead of writing
article_path, you could writerestflect(:member).path. Why would you do this? You may have shared code, for instance layouts or library files, which need to make use of a resource, but because they operate on any number of different resources, they cannot refer to them by name. The plugin could also be of use to other plugins.”
Deploying a Django app on the desktop. Silver Stripe used cx_freeze to package their commercial agile project management Django application as an easy to run Windows executable.

Logo design for ReallyWorried.com (site design by Stuff & Nonsense). Created using a hand-drawn version of Expletive Script, coupled with Omnes Black.
Making use of the XRDS. One of the better explanations of XRDS: provides some background information and isn’t too long.
How Ads Really Work: Superfans and Noobs. My variant on this idea is to serve ads only on content that’s at least 6 months old. I’ve made $473.98 since January.
Launching Expectnation. Edd’s conference organisation software. I was a reviewer for XTech and the process was completely painless.
Cross Domain Frame Communication with Fragment Identifiers. Google are using this crazy iframe/fragment trick for their new Mapplets API.
A friend just pointed me towards this fantastically boneheaded statement:
Optimising for search engines such as Google is notoriously difficult when your content is database driven. Although the Televisual Asset TVT pages are crawled and ingested by all common search engines such as Google, this is of little use for searchable archives as they do not have a hyperlinked hierarchy of static pages.
Have they never heard that “URIs shouldn't change”? How about the idea that you should always separate the content layer from the presentation layer?
Someone please tell me how companies like this are still in business?
Review Board. VMWare release a slick looking Django-powered code review system, with hooks in to Subversion and Perforce.
From BBC technology news.
Social music site Last.fm has been bought by US media giant CBS Corporation for $280m (£140m), the largest-ever UK Web 2.0 acquisition.
...
As part of the deal, Last.fm's managing team will remain in place and the site will maintain its own separate identity.
(Last Google Reader theme post, I promise)
Before now, I’ve felt quite protective of my site skins, and have always stated “Feel free to modify the CSS to suit your own tastes, but please don’t redistribute”. This stems from vanity to be truthful – I spend a long time creating these themes, and don’t want other people getting the credit!
That was how I used to think though. As time goes on, I feel like I’m becoming more communist open when it comes to the web. Besides, I have little time to update the themes, and carry out feature/bug requests, and they’re both at a point where I’m happy with them. Sure, there’s so much you could do to them, but the original intention was to create something for myself. Which is where you come in.
These themes are now both “do what you like with them”. Take out the bits you don’t like, put in new bits, whatever. Feel free to re-distribute them anywhere you like, whether slightly tweaked or massively altered. They’re yours to do with as you please! Give them a good home and let me know what do with them (hopefully something better!)
Google Reader Theme
Bloglines Theme for Webkit & Opera
Bloglines Theme for Mozilla
Finally, to answer a much-asked question I don’t have plans to do a GMail or GCal skin, but you never know.
Natalie Downe and Simon Willison have just uncovered oxfordgeeks.net, which is a mashup of Flickr, Upcoming, a mailing list and a planet (the blog aggregation kind!) It’s looking good, and hopefully might encourage me to blog a little more. Natalie is the mastermind of the highly popular Oxford Geek Nights.
I’ve used a fair bit of sampled sound in my recent Speccy productions, and when you’re using a cross-assembler like Pasmo that lets you shuffle PC-sourced data around in the Spectrum memory without really thinking, it’s easy to forget what a big deal that is. Up until now, high quality* samples have been out of reach of people who would rather not mess around with assemblers… and so, by popular demand, I’ve put together this pack that will let reasonably-competent Basic programmers convert WAV files and play them back on the Spectrum’s AY sound chip. Instructions, source code and example files are included in the package, so go and have a play - if it means more digitised gameshow hosts in the Crap Games Compo, I’ll be happy…
Download Samplepack (ZIP, 73Kb)
* The term “high quality” is, of course, relative. We’re talking 4-bit audio as opposed to 1-bit here.
Update (2007-05-30): Windows users of the world can now rejoice, for Karl McNeil has rewritten the sam2ay.pl script in FreeBasic, neatly avoiding the need to install Perl, and packaged the whole shebang up with other essential tools to do the WAV to TAP conversion all in one go. Download WAV2AY (328Kb)
Ten years ago today, I had a car to sell
A VW beetle, that was great, but not doing well
Long distance commutes were not it’s forté
So I sought a buyer (this was before ebay)
Who’d love it, care for, it and take it away
A friend of friend was looking for just such a car
She lived in Oxford, which wasn’t too far.
Her name was Leigh and she came from Lenzie
The first sight of her sent me into a frenzy!
She impressed me with her Jaffa Cake tricks
I wondered then if she could be a Hicks?
The deal was struck and the beetle was sold
But was this the end? Fear took hold
I couldn’t wait to see her once more
I called her and explained it was her I adore
That was the event that changed my life
Before a year was out, Leigh became my wife.
XXXX
(apologies for the cheese)

Sorry things have been so quiet round here recently, but Heather and myself have been busting ourselves stupid trying to get the new version of Scarleteen finished (more on that when it launches). We're not quite done yet but at least the end is in site.
Anyhow, the reason for this post (apart from the apology) is to point out a fantastic article on Matt Haughey's new site, Fortuitous, Some Community Tips for 2007 - Seven tips on how to run a successful community.
Every year or so I write a long post or do a presentation at a conference on the subject of community. Each time I approach the subject, I take what I've already written and add to it with recent things I've learned or learned long before and only recently realized. To prepare for an upcoming presentation, I decided to write down stuff I've learned/realized in the last 12 months. I suspect I'll be revisiting this topic many times on this blog but I wanted to kick off this first foray into community with a list of stuff I've been thinking about recently, but haven't written much about yet.
Matt is the founder of Metafilter (amongst other things) so when he offers up tips about running an online community, you'd better make sure you're taking notes.
I am Tian Goodnight in Second Life. Tian Goodnight is a vagabond who mostly hangs around the beach at Perhaps Patagonia (I have named it after my favourite Kate Clanchy's poem).
Like everyone else, I can't quite decide how she should look, so I keep changing her appearance. At the moment she's adopted the Jap school girl look. ;) Been getting some queer attention..
Lately I have been defining a to_s method on my classes much more. This may seem like a pretty obvious for some, but I have only recently realised how powerful it can be. Basically, to_s is designed to return a string representation of an object:
class Cookie
attr_reader :flavour
def initialize(flavour)
@flavour = flavour
end
def to_s
"A #{flavour} cookie"
end
end
Cookie.new("chocolate").to_s #=> "A chocolate cookie"
The to_s method is automatically called when using:
puts method"some text #{some.code} more text")<%= cookie %> in ERB (“RHTML”) templatesBy using to_s, you are allowing the object to decide how it’s described. This means your code needs to know less about the implementation of that object and is more resistant to change. To continue the example above, imagine we want to print out a list of cookies, and did so by directly accessing the flavour property:
cookies = [ Cookie.new("chocolate"), Cookie.new("strawberry"), Cookie.new("banana") ]
cookies.each { |cookie| puts "A #{cookie.flavour} cookie" }
This is all well and good until we decide to offer sugar-free cookies. After adding in the extra attribute to our Cookie class, we have to modify the display code to include the sugar-free status of a cookie:
class Cookie
attr_reader :flavour, :sugar_free
def initialize(flavour, sugar_free = false)
@flavour, @sugar_free = flavour, sugar_free
end
end
cookies = [ Cookie.new("chocolate"), Cookie.new("strawberry"), Cookie.new("banana", true) ]
cookies.each { |cookie| puts "A #{cookie.flavour} flavoured#{', sugar free' if cookie.sugar_free} cookie" }
Now we’ve not only had to modify code in two different places, but it’s messy, with an inline conditional. If we had used to_s, we could have added the extra attribute into the Cookie class, modified to_s to take note of it and been done with it.
Another use of to_s is to print out other objects referenced by the current object. Imagine, for some reason, a cookie’s flavour needs to be represented by a separate Flavour object and we need to get at just the flavour. We could use code like this:
puts cookie.flavour.name
The problem with this is it violates the Principle of Least Knowledge; the display code needs to know a cookie has a flavour which has a name, rather than just knowing it has a flavour. Putting the above observations aside, we might choose to combat this through delegation:
class Cookie
def flavour_name
flavour.name
end
end
This is a perfectly valid approach, but it might be more appropriate to simply define to_s on the Flavour class, and use:
puts cookie.flavour
A word of warning, however. When deciding between the two, it is important to think about what information you are really trying to get at. If you genuinely want the flavour’s name, use flavour_name; just because to_s returns the name now doesn’t mean it always will. However, in any case where a string representation of an object is desired, to_s is great.
This site is now running on Drupal! Bye bye Wordpress! It was good while it lasted. But Drupal is more cool, sorry.
I ended up spending weeks working on this because of the steep learning curve for Drupal. Also because I was being indecisive about the features and the designs.
And I didn't follow the mockup in the end too, because I realised I was missing a good many things in the mockup, such as a search box. I might still move things around abit or replace this theme.
And this site is hand-pasted! Yes, every blog post and comments, hand-pasted. No slacking off here.
Sorry about the bugs, if any. Do write me (contact at victoriac.net) and let me know. I'm still trying to tie up the loose ends.
Hope you'll like this... if not, there'll be another theme soon. Hopefully I'll get the user registration stuff tidied up so users can select their own themes soon.
Enjoy!
Xxxx Vic
Almost there!

Download gReader.zip, or if you use Stylish with Firefox/Flock, you install directly into Stylish from userstyles.org. There are 2 versions, one for Mozilla browsers and one for WebKit & Opera.
Once you have the Stylish extension installed, you need to install 2 styles. OS X Google Reader and OS X Spinner (they had to be split to avoid the 64k file limit on userstyles). You should be able to update via Stylish > Manage Styles > Find Updates.
If you don’t want to use Stylish, follow the Camino method below.
Add the following @import rule into the top line of your /Library/Application Support/Camino/chrome/userContent.css file, (or create it if it doesn’t exist).
@import url(greader.css);
Place the greader.css file in the same chrome folder. The theme will be applied when you restart Camino.
Once Safaristand is installed, place the greader.css file in your user/Library/Safari/Stand/UserStyleSheets folder. Then visit Google Reader, go to SafariStand > Settings > Site Alteration. Add the site, enable Site Alteration and choose the greader file from the list. Make sure the matching pattern is just www.google.com. You may have to empty your cache, restart Safari and refresh before seeing any changes!
In Site Preferences > Page Appearance, choose the greader.css file under ‘Style Sheet’. The change should happen instantly!
Put the greader.css file anywhere you like! Right-click on the Google Reader page, choose "Edit Site Preferences" and select the CSS file through the display tab, under ‘My Style Sheet’. Like Omniweb, the change should apply immediately.
I’ve been looking for a public calendar to subscribe to for Dr Who Season 3, but can’t find one. So, I made one on Google Calendar instead. I’ll try and make sure the broadcast times are kept up to date!
If anyone knows of a service that creates iCal feeds based on a search for a TV Show, I’d love to hear about it! It’s something that Ben Ward blogged about on backstage.bbc.co.uk but so far I’ve not seen anything more than the RadioTimes saved favourites function. With all these startups, surely someone has dreamed up a ‘watchr’ service? Or is UK TV schedules data only accessible via screen scraping?
I keep the subject constantly before me and wait 'till the first dawnings open slowly, by little and little, into a full and clear light.
I’ve found myself learning a number of interesting facts about iPods this past day or two that perhaps I’d rather not have ever known:
So, there you have it: if you use an iPod as a bridge between your solar charger of choice and the mains voltage, chances are it will nigh-on catch fire. It’s a rather long and drawn-out way of destroying the device, but it has a certain Goldfinger charm to its convolutions. Bring in an experimental death ray or a room that fills with poison gas in twenty seconds and you’re all set to be the next Bond villain.
In a sense I was lucky that my iPod was already showing the archetypal signs of pod wear, as it’s now turned into an unresponsive metal brick: this finally gives me the impetus to free myself from the tyranny of making-do. Anyway, I’m now looking for a new portable music player (money willing) if I can find a suitable device. It really has to be:
If anyone has any suggestions then do let me know.
Here's an example of how to make a drop box in Second Life that allows people to drop notecards into it. The box will then email the note to you.
It's nothing new, but could be convenient for quick copy-paste if you are new to LSL (like I am). Hope it'll come in handy for you!
If you're lazy to copy and paste, you can also visit my SL home at Perhaps Patagonia . There is a freebie box on my land which contains an editable example of this that you can copy.
This example includes:
//---------------------------------------------
// --- DESCRIPTION: Dropbox that sends dropped notecard as email to owner
// --- CODER: Tian Goodnight (http://blog.victoriac.net)
// --- RELEASE: Version 1.0
// --- DATE: 03 MAY 2007
// --- SL: Sentinel(12, 88, 21)
// --- INSTRUCTION: Edit 'myEmail' variable to update to your email address
// --- IMPT: Make sure that the permission of your email dropbox is set correctly so no one can copy it! (Unless you want them to!).
// --- COPYRIGHT: Feel free to modify, and redistribute this code, but please mention me somewhere and provide a link to my url!
//---------------------------------------------
//configuration variables
string myEmail = "youremail@yourhost.net";
//holder variables
string senderID = "";
string senderName = "";
string notecardName;
integer notecardLine = 0;
key notecardQueryID;
string thisMsg = "";
default{
state_entry(){
senderID = "";
senderName = "";
llSetText("Don't be shy,\n leave me a note?", <1,1,1>, 1);
llAllowInventoryDrop(TRUE);
}
touch_start(integer total_number){
//IM toucher with instructions
llInstantMessage(llDetectedKey(0), "Drop me a notecard by dragging it into me from your inventory.");
}
changed(integer mask){
//move to next state if notecard is dropped
if(mask & (CHANGED_ALLOWED_DROP | CHANGED_INVENTORY)){
state emailNote;
}
}
}
state emailNote {
state_entry() {
llSetText("Sending...\nThis will take a couple of minutes...", <1,1,1>, 1);
llWhisper(0, "Hang on there! Sorting out your notecard... This will take a couple of minutes.");
llAllowInventoryDrop(FALSE);
if(llGetInventoryNumber(INVENTORY_NOTECARD) > 0 ){
//get latest notecard
notecardName = llGetInventoryName(INVENTORY_NOTECARD, llGetInventoryNumber(INVENTORY_NOTECARD) - 1);
notecardQueryID = llGetNotecardLine(notecardName, notecardLine);
notecardLine = 0;
//get notecard creator info (not neccessarily is sender)
senderID = llGetInventoryCreator(notecardName);
senderName = llKey2Name(senderID);
thisMsg = "Notecard titled: "+notecardName+ "\nFrom: " + senderName + "(" + senderID + ")" + "\n\n";
}else{
//not a notecard
llWhisper(0, "My sources say that wasn't really a notecard. Try again?");
state default;
}
}
dataserver(key query_id, string notedata) {
if (notedata != EOF) {
//Concatenate message
thisMsg += notedata + "\n";
++notecardLine;
//get next line
notecardQueryID = llGetNotecardLine(notecardName, notecardLine);
}else{
//send concatenated email
llEmail( myEmail, "SL Notecard: " + notecardName, thisMsg );
//say thanks
llWhisper(0, "Ta! Your note has been emailed to Tian.");
state default;
}
}
}
If you are completely new to LSL, here's a screenshot to help you with. You basically just create an object and when editing the object, at the object's inventory tab, select 'new script'. Then edit the script and copy and paste the above code into it.
And here's one I made earlier:
If a tree falls in the forest, and no one hears it fall. Did it fall?
If I am interesting, but no one knows it. Am I interesting?
No. That will just make me narcissistic.
I have a pithy bad feeling in my chest from being unappreciated, misunderstood. People these days are so unforgiving and so swift in passing out judgement, stereotyping you based on your one moment of uncoolness. I do that to people sometimes too. I know.
The thing is, we're all multi-faceted and mutable. I'm sure that like myself, most people have wondered at some point if they have bipolar personality disorder or if they are too temperamental. But we should not always be the same person all the time!
This is especially so of younger people who are still discovering themselves, or self-renewing people like myself (like a snake shedding its skin), trying on different beliefs and personalities, like trying on different fashion before one has discovered their personal style. And even when the personal style has been found, people still dress differently every now and then. We're just not static and immutable!
So now, I am feeling uninteresting because the people I want to impress do not find me interesting. But I know I am interesting... I remember feeling smug, feeling too pleased with myself for being interesting. But I'm not so sure when I look into other people's eyes now.
I know the old saying, how we should not let ourselves be affected by what other people think about us. But really, if we are to be perfectly honest, don't we do get such a kick out of flattery and compliments, and admiration? Don't we feel shitty to be criticised or rejected? How unaffected can we be without being self-absorbed and self-deluded? Is solipsism possible?
How do you ultimately know who you are except by looking at your reflection reflecting off an external surface?
Purchase it via the official site and the Drupal Foundation will get some loving in the form of cold hard cash.
Something different today, a public announcement if you will.
For some bizarre reason my subscriber count has shot up in the past few weeks, so as a public service to those of you in the Oxfordshire area, there's a little flickr meet up taking place tonight at the Three Goats Heads in Oxford.
We have them semi-regularly, usually every other month. They're social events, where topics of conversation range wide and free (I suspect Adrian and myself will mainly be discussing episode 20 of Heroes tonight) and you get the chance to share a few beers with fellow flickrites.
There's a thread with more details on the Oxford flickr group, and if you're an Upcoming user you can register your interest on the event page.
The results of this search are a classic example of why DRM won't work.
As was once said...
Given enough eyes all bugs are shallow
... and when we're talking about DRM, it is most definitely a bug.
Update (2nd May): Interesting developments overnight. Turns out Digg was removing posted stories about the HD-DVD key, that of course triggered a user revolt, and now Digg has changed it's position. Heh.
I debated about adding the 'funny' tag to the original post, and in the end decided not to. Events last night have made me change my mind.
This is just a quick note to say that I intend to be blogging again – I don’t know how often but certainly to some degree. I have also created a new website at jonathanleighton.com which incorporates both my blog and portfolio, which in turn means I am closing down turnipspatch.com and focussing my efforts on just the one site. As you can see it’s not completely finished yet (particularly the photography and music sections) but I hope to work on that when I get time.
We went to see The Dresden Dolls at the Roundhouse on Friday. It was amazing… words cannot really describe the feeling of standing in a crowd of people all looking at their index fingers pointed to the ceiling, spinning round and round and round whilst singing along to some ridiculously silly drinking song. And that was just one of the support acts. The Dolls themselves were epic and so much work had evidently been put into arranging the plethora of performers, actors, artists and musicians we enjoyed before even seeing Amanda or Brian. I managed to fill my 1GB card with photos, and you can see the better ones on Flickr.
Long live punk rock cabaret!
Going to see a fantastic band and there only being around 40 people there. What the fuck was going on people? You had something better to do on a Monday?!
Still, the band were up for a laugh, took it all in their stride, and played their socks off.
Your loss.