1. Open Source Ideas

    All too often, I have ideas which might make a cool website or iPhone app or whatever and I know I just don't have the time to build them. I'm going to post them here in the hope that someone else might find a use for them. These ideas might already be in existence, of course. I'm not claiming they are unique in any way (although some might be).

    You are free to take these ideas and do whatever you like with them. Of course, if they become amazingly successful, I could do with a bigger TV...

  2. SpreadShop

    SpreadShop

    If you wake up every morning and think, "My t-shirts are so dull, I wish I had interesting clothes...", you need to have a look at my online shop.


  3. Scene and Herd archive

    Continuing the webcomic theme from yesterday, I finally uploaded the archive of strips from the webcomic I used to do in 2003.

    It actually started off as a cartoon on flyers advertising Baby Tiger gigs before developing into music reviews for a while before ending up in the final version.

    Start at the far end of the cartoon department, third floor.

  4. Rules: The Comic

    I found some old sketches at the weekend and decided that I shouldn't just leave them in a drawer doing nothing.

    I, therefore, present to you:

    The Rules

    It's kind of a web comic but it only has 19 issues, no plot and won't be continuing.

  5. The Shadow Government and a Hyperbagel

    I listen to a bunch of podcasts. I watch the Daily Show and the Colbert Report. I listen to a lot of They Might Be Giants. When you combine this with the audiobooks I listen to, the shows I go to and the paper books I read, you start to spot a pattern. A slightly sinister pattern...

    This originally started as a connectivity diagram of American Literary Non-fictionists but after I'd finished I realised it's not entirely American, it's not entirely non-fictionists. It's not entirely comedy and not entirely literary. After showing it to a friend though, he immediately suggested 'The New Illuminati' or possibly the Literary Illuminati. Maybe just the Illiternati. Any way round you have it, John Hodgman appears to be as some kind of Literpope in the middle of a literspiracy.

    From what I can figure, I need to write some world economics exposé with Planet Money, discuss the software I used to analyse the markets with This Week in Tech and appear onstage at The Moth to tell the audience how the experience changed my life then I can join the dots on the diagram and reveal the secret Iliternati symbol. I think it'll be somewhere between the CND logo and a hyperbagel.

  6. Some kind of monster

    Some kind of monster

    I've been trying to make myself sketch a lot more recently. This was mostly prompted by my decision to start up The Angry Robot Zombie Factory as an actual company doing web development and illustration.

    I've been keeping an almost daily sketch blog over on tumblr and promoting any good pieces over onto my actual illustration portfolio. At some point, I'll bring all these different sites and things together. Until then, here's a sketch of a few things from the last couple of weeks.

  7. Synchronised Podcasts

    This must exist somewhere. I just can't find it.

    I listen to a lot of podcasts in a week and I use quite a few different computers. One desktop at home, one laptop while out and about and a PC and an iMac at work. I want some service (or combination of web service and application) that I can use to manage my podcast subscriptions regarless of where I am.

    At the moment, I have iTunes installed on my desktop, my laptop and the iMac at work and I have subscribed to my collection of podcasts in each of them. I want to be able to plug in my iPod and have it delete the podcasts I've listened to and get the latest episodes of each of my subscriptions. At the moment, I plug it into the desktop, copy on the latest 'Planet Money' and listen. A couple of days later, there's another episode released so I plug into my laptop and it offers the episode I've just finished listening to and the new one. A few days later, I'm working on the office iMac and plug in my iPod, it suggests the last weeks-worth of episodes. I have to manually go into every subscription and drag over the individual files that I want to listen to.

    What I'd like to have is a web site where I can put in my podcast subscriptions and it will track the latest episodes of each. I can then either point iTunes to this site so that I can point all my installations at it or it will provide an application which can be used to put the latest episodes onto my iPod. When I plug in my iPod, the application tells the site which ones I've listened to and it removes them from my listening queue. The application could, also be stored on the iPod itself to enable it to be used wherever the iPod is plugged in, not just on computers with iTunes.

    Am I explaining myself clearly enough? It just seems so simple, it should already exists within iTunes. It is entirely possible that Apple's recent acquisition of Lala could be the first step in an online iTunes which would solve these problems. If anyone has any suggestions for the best way to achieve this, please let me know. I thought of a way of doing it with Dropbox but it would only work if the music bit of my iTunes library weren't bigger than my Dropbox account.

  8. Appreciate the artisans

    I know that every professional thinks their bit of the process is more important than people give them credit for. Designer's don't just colour in wireframes handed to them by the Information Architect. IAs don't just draw boxes and arrows. Copy writers don't just copy-and-paste the company brochure over the lorem ipsum.

    Now that I've said that, I must now point out: Developers don't get nearly enough credit.

    This may be something to do with the odd confusion that is 'web designer vs. web developer'. In some - and possibly the majority of - agencies, the web designer not only designs what the page looks like in Photoshop/Fireworks/Whatever but also produces the HTML templates, CSS and whatever JavaScript they feel comfortable with (the tutorials at jQuery for Designers probably help, too). In these agencies, if there is such a person as a web developer, they are most likely responsible for moving the relevant bits of HTML into template files, adding in any back-end integration and possibly writing some of the trickier JavaScript. The confusion arises in the other kind of agencies. The kind where web designers make Photoshop files and web developers turn them into HTML. The designer doesn't necessarily need to know anything about HTML, semantics or scripting. Not to minimise the importance of this kind of designer - they'll know a lot about typography, and visual relations, probably quite a lot about user experience and the process involved in bridging the gap between what the client wants to say and how the user wants to hear - but it's this kind of web developer I think doesn't get enough credit.

    If you're designing a site with a full knowledge of how it could be marked up, you will naturally - even if it's subconsciously - be marking it up in your head. This will influence your design and not necessarily in a bad way. You might ensure the semantics are just that little bit clearer or you might nudge these bits over that way so they can be grouped with those other ones there. If, however, you design with no thought at all about how this is going to be made, you will, most likely, do some things that you wouldn't otherwise. If your front-end developer can take this and turn it into a perfectly semantic, clean-coded masterpiece of HTML and CSS then apply JavaScript to progressively enhance the heck out of it and still keep it looking like you designed, they deserve to be lauded, applauded, praised and thanked. Publicly. The usual outcome of this situation is that the designer gets asked along to the awards ceremonies, puts it on their portfolio, an article in the Drum, happy. The developer gets a pat on the back from the team leader and asked if they could just tidy up how it looks in IE5.5 before they head home for the night, that'd be great, thanks.

    Sure, maybe we just need some better awards ceremonies for geeks. The kind of thing that the agency sales team will be able to brag about to potential customers (as that, in essence, seems to be the point of awards ceremonies) but I also think there might need to be a bit of a change of opinion in the industry. Just as designers don't just colour in wireframes, developers don't just open the designs in Photoshop and press 'Save for web...'.

    I hope this doesn't sound too ranty. These thoughts were prompted after seeing a few designer and copy writer portfolios which contained sites that either I'd built or one of my team had built. Writers credited, designers credited, developers (who built some awesome stuff on them, by the way) lost in the mists of time.

  9. Heidi

    This probably won't mean much to anyone unless you're familiar with the Japanese Heidi cartoon which was popular in Germany in the 80s.

    When I first heard the theme, I thought the intro should have gone like this.

  10. User style

    A few years ago, I made a prediction about the way the web was going and so far it hasn't come true but it's definitely coming closer. To me it seems that the logical extension of us developers separating style and substance – what we've been doing for years with semantic mark-up – is for the general consumer to take that substance and give it their own style. I'm in no way suggesting that everyone become a designer. That would be a terrible, terrible thing. What I mean is that the consumer takes in/reads/experiences whatever it is you're giving to them in the manner that best suits them. There are many examples of what I mean around already but they're still not quite where I think they will end up.

    RSS

    We (web developers) already provide RSS feeds on our sites. By subscribing to a site's RSS feed, you get the content delivered directly to your RSS reader. As long as the site is providing the full article content (shame on you, if not) the consumer gets to see your content in a design format you have little control over. There is a basic level allowed for RSS formatting but nothing you can rely on. The control for the visual appearance of your content is now in the hands of the designer of the reader and the consumer (by way of choosing which reader they use).

    userstyle.css

    This was what initially prompted my thoughts on the subject. I've used Opera as my main browser for almost 10 years and I've always liked the Author mode/User mode switch. In essence, you can quickly toggle between seeing a web page as it was intended by the designer or disregarding the original layout and applying your own stylesheets to it. For the most part, this is used to be able to set high contrast for visually impaired users or to test various criteria (showing only images that have missing alt attributes, for example) but they can be used to produce any visual effect achievable with CSS.

    User stylesheets can also be assigned on a per-site basis rather than globally which means that you could have your Google results rendered in courier, right-aligned in green on black while your facebook pages can be set in Times in a sepia colourscheme.

    As with many things on the web, userstyles became a lot more popular once this functionality was available in Firefox (via the add-on Stylish) and not just Opera. Now there's a growing community of Userstyle developers and a directory of styles. Unfortunately, this is still not quite ready for mainstream use. It requires at least a basic level of technical ability to enable userstyles and to install them.

    userscript.js

    The userstyles community is, however, dwarfed in comparison to the userscript community. In pretty much exactly the same way that userstyles work, users can execute a specific Javascript file whenever they visit a site. Again, this can be enabled in Opera using site preferences and in Firefox using the Greasemonkey add-on. These scripts can completely change the way a site functions as well as how it looks. Combine them with userstyles (which userscripts can include automatically) and the only thing you can rely on remaining from your original design is the URL. There's a massive database of userscripts available.

    Again, though, these are still just that little bit too hard. The standard user isn't going to install the extension, isn't going to browse for scripts and isn't going to run Opera so these are still a bit too far away.

    Grab now, read later

    There are now quite a few sites where you can save stuff to read later. If you find an interesting article or a funny blog post but don't have time to read it or if it appears on a site with a garish and unusable design, you can send it to Instapaper or Evernote . You can then read it in their interface, on your iPhone, on your Kindle... all separated from your design.

    It's not only text that gets this treatment, you can use Ember and LittleSnapper to grab and store visuals for later perusal or use Huffduffer to collect any audio files you find and serve them back to you as your very own personalised podcast. Again, this is your content separated entirely from the way you wanted it seen. And that's a good thing.

    For content creators, all this means is that your content can be consumed anywhere, even via sites, tools and delivery mechnisms you've never heard of. Designers, don't despair, users aren't suddenly going to take their content elsewhere and not need you any more – users still want and need things designed well, this just means that if your design works for the user for a particular type of content, they'll use it for any content of that type. I'd much rather watch youtube videos using vimeo's layout than youtube's. Actually, I'd much rather have vimeo's comments, too.

    We're still quite a way off the average user being able to see whatever they want however they want it but these technologies and tools are definitely heading that way. I just wish I'd made a bet on it way back when.

  11. Crowdsourced Weather - Part 2

    So, I couldn't help myself. I had a niggling idea at the back of my head that I needed to get out. After coming up with this Twitter weather idea last week, I decided to spend a couple of hours this weekend building it. As if I didn't have other things I should have been doing instead...

    It works pretty much exactly how the pseudocode I mentioned last time describes. Every few minutes, a script will search Twitter for mentions of any weather words from several different languages. It will then look up the location of the person who tweeted that and store it. Single reports might be wrong and users might not have stored their actual location but over a large enough sample, this system becomes more accurate. The script removes any matching twets older than 6 hours.

    To display, I actually ended up using Geohashes instead of Geotudes because it is easier to simplify them when you zoom out just by cutting off the tail of the hash. For example, the physical area denoted by gcvwr3qvmh8vn (the geohash for Edinburgh) is contained within gcvwr3 which is itself contained within gcv. There are a few technical problems with geohashes but it seems the best fit for this purpose. If anyone knows of any better suggestion, please let me know. I do realise that this is quite possibly the slowest, most inefficient JavaScript I've ever written because it makes an AJAX call for every graticule and it probably should just send the South-East and North-West bounds and get back an array of them but, like I said, there were other things I should have been doing. Because the overlaid grid changes resolution based on zoom level, there are a few places where it is either tragically slow (resolution too fine) or terribly inaccurate (resolution too rough). That's just a case of tweaking the algorithm. Similarly, it's set to display reports of weather if there are 2 or more matches but it could be tweaked to only show if a larger number have reported something.

    So go, play with the Twitter-generated weather map. If someone can come up with a good, catchy name, or some better graphics, that'd be great, thanks.

  12. Crowdsourced Weather

    This is a more general version of the #uksnow map idea. It's a crowd-sourced weather map which relies on the fact that any one individual tweet about the weather might be inaccurate but given a large enough sample, enough people will mention the weather in their area to make this a workable idea. It doesn't require people to tweet in a particular format.

    To get info

    Have an array of weather words in various languages (rain, hail, snow, schnee, ame, yuki)
    every 5 minutes:
    	foreach weatherword
    		search twitter for that word
    			http://search.twitter.com/search.atom?q=rain
    		retrieve latest 100 tweets
    		foreach
    			get user info
    				http://twitter.com/users/show.xml?screen_name=username
    			get user.location if available
    			geocode
    			save:
    				username, time, lat, long, geotude, weatherword
    		Remove any tweets about this weatherword older than 6 hours.
    			
    

    To display info

    Show a Google map
    Based on current Zoom level, split the current map into about 100 geotudes
    foreach geotude
    	search database for any weather results for that block (probably using an ilike "1234%" on the geotude field)
    	sort by weatherword count descending
    	draw an icon on top of that block to show the most common weatherword
    	
    If the user zooms in, recalculate geotudes and repeat.
    

    I quite like that this uses geotudes which I think are an excellent idea.

  13. What's your Google Suggest number?

    The next step in ego-googling: how many letters of your name do you need to type into the google search box before you are the top suggestion? The lower the better, obviously. Including spaces, My name is the top suggestion after 10 characters so I have a Google Suggest Number of 10. My darling wife (who has recently changed her name) has a Google Suggest number of ∞ as she can type in her whole name and Google doesn't suggest her.

    Turns out somebody proposed this first over 5 years ago. Oh well. Nothing's new on the internet.

  14. Side Tab

    After reading Aza Raskin's post about Firefox moving its tabs down the side of the window, I decided to give it a go in Opera. It turns out to be very useful when you have a widescreen monitor. I usually end up with several dozen tabs open at once and it's much easier to be able to put them down the side in an area which is, for most websites at least, dead space. On the rare occasions I do find myself on a website which requires more than the 1470px horizontal space this gives me, I can just tap f4 and get my full 1650px back. As the window sidepanel also groups by window and lists all tabs open across all windows, I can keep them ordered thematically, too.

    This arrangement definitely doesn't work, however, when you have a small screen. When I tried this on my netbook, I had to choose between losing half of my screen to the tab list or only being able to read the beginning of each page title, even if I only had one tab open.

  15. Some simple tips

    The views and opinions expressed within are not those of National Museums Scotland. This site is in no way affiliated with National Museums Scotland or the website www.nms.ac.uk

    First of all, the disclaimer: I am not a designer. If I were to make claim to being anything creative it's an illustrator but there's a huge difference between the two (I've always said that an illustrator makes the thing to go on the t-shirt, the designer says where on the t-shirt it goes). Despite the recent trend for everyone to call themselves web designers, I'm still going to go by web developer. I make things.

    Bearing that in mind, there are still quite a few web design and UX tips and techniques I've picked up along the way which can be applied to most sites and not interfere with the mysterious ways of designers.

    Recently, I've been reworking templates for National Museums Scotland for faster load times and better SEO and I'll illustrate what I'm talking about with a couple of examples from there. The brief on these templates is that the content can't really change and there are some chunks that the CMS generates which can't be changed. Note: the NMS templates are completely finished yet and those that are haven't been rolled out across the whole site but sticking with that whole release early, release often way of doing things, these little incremental improvements can be applied without affecting too much else.

    For reference, here are before and after screen grabs of two of the templates.

    Some people will find these tips blatantly obvious but the fact that pages still get made without considering these means they do need reiterating.

    Link the Logo

    The web's been around for a few years now and there are a few conventions users have gotten used to. One of them is that the logo is a link that takes you back to the home page. It doesn't harm anything to have a link there so even if 99% of visitors don't use it, why annoy the 1% who do?

    Don't link to the search

    From the moment the visitor decides they want to search your site for something, the most important thing is to get the results in front of them as quickly as possible. It therefore makes for a better experience if you bring the results one step closer to them. Rather than requiring the user to click on a link to get to the search form to do their search to get the results, put the search box on every page. They fill it in and go to the results page. If the user wants to take advantage of any advanced search features you may have, they can modify their search from the results page.

    Search box positioned within header

    Line up

    I'm sure there's more to design than this but there are a couple of well tested rules I recommend any non-designer to learn:

    1. If it doesn't line up, make it line up.
    2. If it's already lined up, make it not.

    That and a subscription to iStock and you're done...

    Make the hit area as big as possible

    From the gateway page for Our Museums, there are two ways the user could go. They were either looking for opening times (in which case, they're done), or they want to find out more information about the individual museums on their own pages. To that end, it makes sense to make the next step as easy as possible and bascially turn the content this page into six huge buttons. To keep everything semantic, JavaScript has been used here to extract the destinations from each of the links and apply them to the whole panel area (it'll default to linked text and image with JavaScript disabled). As you can see, doing this changes the hit area for each museum from a line of text to a veritable barn door.

    White text on a white background is not good

    Actually, I'm not sure whether it's the fact that the link wasn't as readable as it could have been or the fact that to go home requires poking her in the eye that upset me most. Either way, if you do need to use an image that has a light bit underneath some light text and you can't shuffle it along like here, a quick wipe with the burn tool in Photoshop works wonders.

    Underline links

    I'm not going to get into the debate over whether or not designers hate underlines but for a high-traffic, public sector with an extremely varied demographic, I'd recommend using them. As Paul Boag mentions, what you do with your design and your solutions for various usability issues depends on the audience. A graphic designer's portfolio might very well eschew underlines when denoting links, a government site probably shouldn't. Especially when you remember that you should never rely on colour alone to convey information, including whether not a piece of text is a link.

    Titles are titles of something

    If you have a title, it generally refers to the thing below it, not the thing above it. Make sure you keep titles and the things they are titles of together.

    Avoid disparate navigation

    Again, another of the rules of web that has evolved over the last several years: Sections go along the top, navigation down the side. To keep consistent with the rest of the site the horizontal museum links were brought down and integrated with the rest of the navigation. This maybe isn't the most illustrative example but, basically, don't have a top nav, left nav, right nav and several others when you could have just one.

    Only a fraction

    There we are, a few handy little tips for your next build project. This hasn't gone into any issues of column width, line-height - or leading (pronounced /ˈlɛdɪŋ/) as designers call it, hover states or any of the myriad other things it could, just a few of the more important and easy-to-do ones.

  16. Building an Objective-C growlView

    Wherein our intrepid hero learns some Objective-C and figures out the easy bits are actually quite hard.

    A couple of days ago, I decided to give myself a little software development task to write a Twitter Growl view. Growl is a centralised notification system for Mac OS X that lots of other applications can use so that there's one consistent way of showing notifications.

    Background

    The idea behind this little experiment wasn't to have tweets appear as growl notifications, there are already plenty of apps that do this, the idea was to have growl notifications sent to Twitter. Some friends have started organising a crowdsourced Friday afternoon playlist via Spotify and I thought it'd be handy if Spotify tweeted each song as it started. The easiest way I could think of doing this was to tap into the fact that Spotify sends a Growl notification on track start and get the Growl display plugin to tweet it as well [1].

    Build

    I downloaded the Growl Display Plugin Sample 1.2 [Zip - 186 KB] from the developer downloads page and the MGTwitterEngine library. I then downloaded Xcode so I could do the development. I have to point out here that this was my first foray into Objective-C programming and, indeed, my first attempt at anything vaguely C-related since I wrote a command-line calculator about 12 years ago. If I do it wrong, please forgive me.

    The first thing to do was open the sample project in Xcode, figure out what files do what, etc. There is very little documentation on how Growl views or display styles work so I pretty much just spend an hour reading all the source from top to bottom. Here's a quick summary:

    Sample_Prefix.pch
    Pre-compiled header. Stuff that's included before every pre-compiled file
    Growl/
    Folder containing standard Growl stuff. Don't need to touch.
    GrowlSampleDisplay.h
    Header file, didn't need to change anything
    GrowlSampleDisplay.m
    Class for setting up things. Again, didn't touch [2].
    GrowlSamplePrefs.h
    Defining default preference values and naming functions to handle them. More on this later.
    GrowlSamplePrefs.m
    The actual functions mentioned in the previous header file
    GrowlSampleWindowController.h
    Not doing anything visual, really so I didn't need to mess around with this
    GrowlSampleWindowController.m
    As above
    GrowlSampleWindowView.h
    Declaring objects needed for execution
    GrowlSampleWindowView.m
    Instantiating the objects then actually using them later on.

    Again, I'm not used to doing this stuff so if I'm using the wrong terminology, just pretend I'm not.

    I then dragged the MGTwitterEngine library into the project drawer, saved and built. At this point it successfully did nothing different which is what I was hoping it would do. Well, it popped up the 'This is a Preview of the Sample Display' message using the MusicVideo style which is what it does when you don't screw with it.

    The next thing was to include the MGTwitterEngine. In GrowlSampleWindowController.h, #import "MGTwitterEngine.h" and create a new object. I just followed the instructions in the README but be sure to follow all of them. If you get errors about LibXML not being installed or YAJL not working, don't worry, you just need to make sure you set USE_LIBXML to 0 in all the places you're supposed to. GrowlSampleWindowController.h now contains this:

    #import "GrowlDisplayWindowController.h"
    #import "MGTwitterEngine.h"

    @class GrowlBirdWindowView;

    @interface GrowlBirdWindowController : GrowlDisplayWindowController {
    CGFloat frameHeight;
    NSInteger priority;
    NSPoint frameOrigin;
    MGTwitterEngine *twitterEngine;
    }

    @end

    In GrowlSampleWindowController.m, I then instantiated the new object:

    @implementation GrowlBirdWindowController

    - (id) init {
    :
    :
    twitterEngine = [[MGTwitterEngine alloc] initWithDelegate:self];
    [twitterEngine setUsername:@"growlbirdtest" password:@"testgrowlbird"];
    }
    :

    And then modified the setNotification function to also send an update:

    - (void) setNotification: (GrowlApplicationNotification *) theNotification {
    :
    [view setTitle:title];
    [view setText:text];
    NSLog(@"sendUpdate: connectionIdentifier = %@", [twitterEngine sendUpdate:[NSString stringWithFormat:@"%@, %@", title, text]]); // The new line
    :
    }

    That was enough to get growl to send messages to appear on http://twitter.com/growlbirdtest but it doesn't make it that useful for anybody else, to be honest. The next thing to figure out was the preferences.

    Preferences

    Without documentation, this took a bit longer that I expected. To start off changing the english version before worrying about localization, find the GrowlBirdPrefs.xib in resources/en.lproj/ and open it. Interface Builder will launch then you can double-click on 'Window' and see the layout of the preference pane. Search in the Library for 'text' and drag a text field into the window then spend about half and hour clicking round the interface. Open up the various inspectors (right-click on an object), look through the different tabs, click between the newly added text field and the sliders and drop-downs that are already there just to see what's different. Once I was a bit familiar, I opened the connections tab so that I could bind the value of the text field to the value 'twitterUsername' in my code. I checked 'value', Bind to 'File's Owner' and entered 'twitterUsername' in Model Key Path. I then repeated this for twitterPassword using a Secure Text Field from the Library. The option nextKeyView is used to say which item is tabbed to next when you're navigating with the keyboard so to keep things tidy, I dragged lines from nextKeyView from each of them to the right places in the layout.

    Back in the code, I added new default preferences in GrowlSamplePrefs.h:

    #define Sample_USERNAME_PREF @"Username"
    #define Sample_DEFAULT_USERNAME @"growlbirdtest"

    #define Sample_PASSWORD_PREF @"Password"
    #define Sample_DEFAULT_PASSWORD @"testgrowlbird"
    :
    :
    @interface GrowlBirdPrefs : NSPreferencePane {
    IBOutlet NSSlider *slider_opacity;
    IBOutlet NSString *twitterUsername;
    IBOutlet NSString *twitterPassword;
    }

    and named some handlers for them:

    - (NSString *) twitterUsername;
    - (void) setTwitterUsername:(NSString *)value;
    - (NSString *) twitterPassword;
    - (void) setTwitterPassword:(NSString *)value;

    Be careful here, I got confused and didn't have the same spelling here for twitterUsername and twitterPassword as I had put in the interface builder as I hadn't realised the two were directly connected. They are. Obviously. The next thing to do is to write the code for these handlers:

    - (NSString *) twitterUsername {
    NSString *value = nil;
    READ_GROWL_PREF_VALUE(Sample_USERNAME_PREF, SamplePrefDomain, NSString *, &value);
    return value;
    }
    - (void) setTwitterUsername:(NSString *)value {
    WRITE_GROWL_PREF_VALUE(Sample_USERNAME_PREF, value, SamplePrefDomain);
    UPDATE_GROWL_PREFS();
    }
    - (NSString *) twitterPassword {
    NSString *value = nil;
    READ_GROWL_PREF_VALUE(Sample_PASSWORD_PREF, SamplePrefDomain, NSString *, &value);
    return value;
    }
    - (void) setTwitterPassword:(NSString *)value {
    WRITE_GROWL_PREF_VALUE(Sample_PASSWORD_PREF, value, SamplePrefDomain);
    UPDATE_GROWL_PREFS();
    }

    Build and reinstall and this will now show the same preference pane as before but with two new text fields which allow you to enter your username and password. In fact, build at several stages along the way. Every time you make a change, in fact. If something breaks, check the error log to see if it's something predictable that should have broken at that point or if you've done something wrong. Also, keep the OS X log app Console open in the background. It will spew out error messages if you do something wrong. It's also good to have your code write out console messages to keep a track on what your code is doing like so:

    - (NSString *) twitterPassword {
    NSString *value = nil;
    READ_GROWL_PREF_VALUE(Bird_PASSWORD_PREF, SamplePrefDomain, NSString *, &value);
    NSLog(@"twitterPassword = %@", value);
    return value;
    }

    You'll notice we're still sending messages to the growlbirdtest account because, even though we are reading and saving the username and password, we're not doing anything with them. That's easily remedied by editing GrowlSampleWindowView.m again and replacing the hard-coded login details with a couple of lines to read from the preferences or fall back on the default:

    twitterEngine = [[MGTwitterEngine alloc] initWithDelegate:self];
    NSString *twitter_username = Bird_DEFAULT_USERNAME;
    NSString *twitter_password = Bird_DEFAULT_PASSWORD;
    READ_GROWL_PREF_VALUE(Bird_USERNAME_PREF, SamplePrefDomain, NSString *, &twitter_username);
    READ_GROWL_PREF_VALUE(Bird_PASSWORD_PREF, SamplePrefDomain, NSString *, &twitter_password);
    [twitterEngine setUsername:twitter_username password:twitter_password];
    NSLog(@"Twitter Login: username = %@", twitter_username);

    And, hooray! It works and posts to the account for which you entered details. Sort of. Some apps double-post. I haven't figured out why yet.

    Renaming

    After all that, the final bit (which I thought would be the easiest) was to rename the growlView from 'Sample' to 'Bird'. I have read that in the latest version of Xcode (which presumably comes with Snow Leopard), there's a global 'Rename' which will do all the relevant stuff for you. If you don't have that, you'll need to read 'On the Renaming of Xcode Projects' and do everything there. If you're still finding your growlView is called Sample, manually open every Info.plist you can find, 'Get Info' on everything, scour through the settings for the different build environments (Debug and Release)... It took longer to rename the project than to actually build it.

    You should now have a completed, installable growlView/Growl View/Growl Display/growlStyle/whatever it's actually called. You can export the current Git project to have a look around or you can just download the finished GrowlBird.zip [Zip - 228KB] if you like. Note, the Git project isn't guaranteed buildable at any moment in time, I might break it. The localisations still need done and the layout of the prefPane isn't the greatest, either.

  17. TV Mark

    TV Mark

    A site which track which episodes of TV shows you have watched. You create an account and enter the name of a TV show (AJAX completed, naturally). Before the show is associated with your account, you are shown a list of broadcast episodes and you must select the latest one you have watched. You can add as many shows as you like. When you visit the site, you see something like the visual here (although with the design not totally ripped from Automatic) so you can instantly tell what the next unseen episode is.

    You can ask to be notified when a new episode is broadcast in a variety of ways (twitter, e-mail, rss). Shows can be broadcast anywhere in any country and so to get around the problem of detecting when a show is broadcast, the site actually follows a collection of well-known torrent providers. Note: this site doesn't provide any links to torrents or video files, it just relies on the fact that shows usually turn up on the torrent scene shortly after they have been broadcast. You can buy episodes or seasons from iTunes or Amazon links provided next to your tracking panel.

    The visual isn't great as there will also be some big button on each show panel to increment the last show watched.

  18. It's not difficult, don't make it difficult

    What's easier? Boiling a single potato, letting it cool, mashing it using a toothpick then repeating with a different potato until you have a plateful of mashed potato...

    or

    Boiling all the potatoes you need at once then mashing them together with a potato masher?

    Okay, choose between one of these methods of determining whether the bathroom light is on: Draw up a list of people who have visited your house recently. Interview them to build a data set of all rooms visited and by whom. Re-interview those who visited the bathroom. Determine a timeline of bathroom visits and light switch position on entry and on exit. Analyse the data to find the last visitor to the bathroom and the position of the light switch. Examine the electrical connections between the light switch and the light bulb to determine what the current status of the light itself might be.

    or

    Go look.

    How are you doing on the quiz so far? Okay. So, final question: What's easier? Building a convoluted web site using proprietary code, conflicting CSS requiring you to target everything with !important, making all interaction rely on JavaScript for even the most basic functionality, fighting between form and function so much that you end up having a website that only works occasionally and even then only works for a subset of the available users.

    or

    Building a straightforward website using nothing but standard mark-up, styles which cascade in a predictable fashion and enhancing already-working functionality with a dash of JavaScript to make people go 'Ooh, shiny'?

    If you thought the second option was easier, I'm sorry, you would appear to be wrong. At least, that's the impression I get every single day while wandering round the internet. It must be really easy to make a ham-fisted, in-bred, should be kept in the basement monstrous-crime-against-nature abomination of a website because otherwise, people wouldn't do it so much.

    I've used Opera as my main browser for almost 10 years now and I've lost count of the number of times I've been faced with a message apologising to me because it appears my browser is out of date. If I could just update my browser to Internet Explorer 5, I could enjoy their site. Seriously, it must be a lot easier to make a web page locking me out of the site than not to. It must be a matter of a few seconds work to write browser-sniffing scripts and learn all the proprietary foibles of IE whereas not writing that script must take hours and not learning bad habits must take years.

    I have some ability to forgive those websites which are obviously the work of someone whose passion is something else. If I'm looking at a site where a guy has meticulously documented the different ways different cats react to different balls of yarn, I'm guessing his interests is in yarn. Or cats. Or the combination thereof. He's not necessarily going to know the best way to make a website. I find it much harder, however, forgive big companies. Either those with an in-house web staff or those who contract agencies. Whatever way they do it, someone is getting paid to make the website. It is someone's job to write code.

    I've always been of the opinion that if you're going to do any thing, you should at least try to do it as well as it can possibly be done. It doesn't matter if you're playing piano, rowing, juggling chickens or making a website, you have no excuse for not at least trying to be awesome at it. If you end up being awesome at it: great! You're the world's best chicken juggler, go into the world knowing that and be happy. If you don't: great! You gave it a darn good try and you probably ended up pretty good, at least. Maybe try juggling cats next time. I have a hard enough time getting my head around the idea that not everybody follows this same level of obsession in their interests but to have people who are actually getting paid actual money to do something (in this case, making a website, not chicken juggling) and who feel it's okay to be 'okay' is a concept I have great difficulty understanding.

    Okay, impassioned rant over. I'm not going to name any sites. Just consider this a warning, Internet.

  19. On holiday, by the way

    In case any regular viewers are unaware, I'm currently on honeymoon. To tie in with this (and to celebrate the fact that my darling wife is almost as much of a geek as I am), there's a honeymoon blog to tide y'all over until I get back.

    The Madines' travelogue.

  20. Ideas

    To continue from the post of about how Noodle was awesome and ahead of its time, I now have to point out Sidewiki. Darn it, Google. Couldn't you just have bought me out? I'd have sold. Quite cheap, too...

    Anyway. Onto the next idea. Or ideas.

    Keen-eyed regulars (those whose don't subscribe via RSS, anyway) will have noticed the new category for 'ideas'. I may as well put all these dumb little ideas I have out there and see if anyone wants to have a go at playing with any of them. Actually, those who subscribe via RSS may have been inundated earlier with a bunch of ideas as I uploaded the backdated ones. Sorry 'bout that.

  21. Okay, unnecesary redesign

    Not two weeks after being pleased with myself that I could subtly rejig the design without only a few lines of CSS, I decided on Friday to completely redo this site.

    Not only did I change the layout but I've made some major changes under the hood, too. I decided to have my first attempt at an HTML5 page. Granted, it might just fall apart at any moment in any given browser but...hey, it might not.

    On the subject of HTML5, Mark Pilgrim (he of the 'Dive into...' series) brought up an interesting point in the WHATWG Blog on the topic of whether XHTML was actually a good idea in terms of enforcing XML syntax on an HTML document:

    It provides no perceivable benefit to users. Draconianly handled content does not do more, does not download faster, and does not render faster than permissively handled content. Indeed, it is almost guaranteed to download slower, because it requires more bytes to express the same meaning -- in the form of end tags, self-closing tags, quoted attributes, and other markup which provides no end-user benefit but serves only to satisfy the artificial constraints of an intentionally restricted syntax.

    And, I guess, it is a good point that a well-formed XHTML document will be larger than the equivalently well-formed HTML document. If, however, developers are given a strict set of rules and a strict validator and told "make your page according to these rules, this alarm will go off if you've done it wrong", they're less likely to fall into bad habits than if they are told "These are mostly rules but sometimes suggestions, this alarm will only go off if you got things very very wrong". Mark Pilgrim is, quite rightly, focusing on the user's point of view but it just seems to me that users will also benefit from more maintainable, better structured code.

    Of course, none of this actually matters yet and won't for the next five years or so. It probably won't matter then, either. It is only the interwebs, after all.

  22. @thingsinjars twitter

      Latest Flickr Photos

    • Multi-platform herding game.

      You start off by choosing a type of animal to herd. These could be real animals or could be similar to real animals but more quirky (and therefore fun). You can start with 15 hens or 8 sheep or 6 pigs, etc. You then are given a top-down (or possibly zelda-style top down-ish) view of your herder and your animals.and you've just to get them from one side of a map to the other. All fine so far, yes? This is the gist of the single-player version. With each trip across the map, you get a gold coin which you can use to buy more animals or customise the ones you have (spray-paint the sheep, buy a new smock for your herder, etc).

      The main bit of the game comes when you go online. Each install of the game has a unique map which is your own home field. When you go online, you can either invite people to come to your field or you can wander off to other people's fields and interact with them. An interesting bit of it is that you can leave your herder and herd to wander off themselves. If you're on a desktop, your herder wanders off whenever the screensaver comes on and you can choose to passively watch as it interacts with other herders on other machines, if you've got a mobile device, you can choose to send your little guy off when you close the game and the central server will track interactions while you're offline. When you start up again, you can choose to see where your herd went. There's also the possibility of having a flash piece which will just let viewers on the website passively watch.

      I think it would also help if there was some system in place so that people's fields could be next to each other, you'd wander off the side of your field and into your neighbour's. If the neighbour stopped playing for a while, the next new player would move in. That way, you could zoom out and see the entire game world.

      It's not as simple idea as my last game design (blob-pushing-around touch-screen, flash crossover thing) but that one has been done now (by someone else). I did actually make this game (above) about seven years ago and it was surprisingly fun but I didn't have the marketing budget to promote it (i.e. none). There are some interesting algorithms you can implement in order to get good herd behaviour. It doesn't need to be strictly accurate so you can get some cartoon-ish wandering-off, notice herd is far away, running after them behaviour.

    • Twampaign?

      A v. simple 'put together a twitter campaign' site (twampaign.com or whatever). You sign up, choose a subdomain (e.g. http://ihateie6.twampaign.com/ ) and give it a list of hashtags, phrases, words and accounts it should keep track of. You then upload a header image, a couple of paragraphs of description, choose a colour scheme and advertise it.

      New twitter campaign (or pretty monitoring software) in 2 minutes. Shazam.

    • Truly

      I've just updated trulyinnovative.com and www.trulyinnovative.co.uk.

      I randomly thought it was about time for a bit of a refresh but writing it, I was amazed at just how much has changed in the 3 years between the first and the second. Despite the fact that they're both supposed to be tongue-in-cheek, they are quite accurate descriptions of two different aspects of the people who 'do web'. Must remember to update them again in 2012.

    • Not-too-subtle subtle redesign

      Okay, it's one of those occasions where I get to feel a bit smug. I decided to update the layout here a little bit, just make the content a bit wider, fonts a bit bigger, that kind of thing. Not a major restyling, just a quick once-round with the vacuum-cleaner, if you like. Less than a minute messing around with CSS later and it's done. It doesn't look like much but I was quite pleased that everything scaled nicely. It's still a bit scrappy round the edges and I wouldn't use this as a CSS showcase but I'm pleased never the less.

    • A new niche?

      "And several months later, our intrepid hero returns to the village to find it full of people he doesn't know..."

      A quick update. It's now over a year since Noodle launched and about 4 months since Wwwitter launched and I seem to have started a whole new niche of web-conversation sites. Most of them, I won't mention here but there are two notable examples: Convotrack and Tweetboard. If only I'd figured out a way to make money out of it before others did...oh well.

      As I've said many times before, I need some kind of marketing genius to take all these little projects of mine and find out where the money-making potential is. I'll quite happily sit in my room repeatedly coming up with the Next Big Thing if someone will then go off and sell it. On a related note, if anyone fancies marketing MonkeyTV, let me know...

    • VoteSocial

      VoteSocial

      A 'create your own vote' social media site.

      Users can create a subdomain of (for example) comptwitition.com and create their own user-votable competition. The emphasis will be on inter-city/international competitions (my city has better manhole covers than yours, for instance)

      When creating a competition, admin makes a competition rules page (choosing from a preset list of rules) an about page (premise of competition), chooses whether the competition is geographical or not and defines the level at which geographical competitions takes place (intercity/international/city street/etc).

      If it is a geocomp, any image uploaded must be placed on a google map (or if it has LatLong EXIF, use that) and will then have the category (side in the competition) suggested. This should be overwriteable if necessary.

      Images can be uploaded either directly via the site, via an iPhone app, having a flickr URL entered or a twitpic url entered. Entries can also be emailed or tweeted @comptwitition.

      Votes are done via a tweet entered on the site. The tweet would be @comptwitition and include the user's vote and a shorturl to the entry page.

    • The Digital Whateveritscalled

      Recently, I've been trying to get to grips with this Brave New Digital Future that I've been hearing so much about. I figured that, seeing as I do this for a living, I should probably try and engage, interface, interact, give face time, connect and generally be a bit proactive about...oh, I don't know. Some buzzword or other.

      That's why I joined Twitter and it has proven to be moderately useful in providing inspiration for the rebirth of Noodle. Wwwitter has had a few thousand unique visitors and several nice reviews (as an aside, I always find the best reviews have a sprinkling of exclamation marks and the worst have a smattering of question marks). The only real issue I have with Twitter is that in order to truly get Twitter, you need to follow the right number of people. Too few and it's like overhearing someone having a good conversation on the telephone – "Yeah, and that was only the first colour!" – too many and checking your feed is like sticking your head into a sugar-rushed playgroup – "I like ham!", "Ha-ha-ha!", "@everybody Look at me, look at me!"

      This connected, emergent, digital whateveritis is also the reason I joined LinkedIn. I am, however, having a hard time trying to figure out what on earth it is. Is it "Your CV online"? I already have that. Is it "Facebook for business professionals"? Surely the business professionals who sign up to LinkedIn are already on Facebook so...why? I don't accept the argument that Facebook is for your fun side and LinkedIn is for your serious side. If it's online, it's out there in the public domain. If you are embarrassed by the possibility that someone from work might log into facebook and see "Jane Fakename joined the group 'LOL, I got drunk and dropped my mobile in the toilet'", the most obvious course of action is to not join that group, no?

      I'm straying from my point, however. I had a look at LinkedIn. It keeps asking me for my goals, my objective, my "Specialties in Your Industries of Expertise". What is it asking? I always thought my goal was "Get old, fat and happy". The way I figure it, if I can do that, I've won whatever game the goal counts in.

      Maybe it's just not aimed at people like me. Then again, I am a "Digital Media Professional" or at least, I play one on TV. I even have the word 'Manager' in my job title. I should be slap-bang in the middle of the target demographic, no?

      Ugh. I need to become a pioneer in anti-social media.

    • Oh, hi again

      And after a six-month hiatus, I'm back at the blog. Coincidentally, for the same six month period I stopped studying Japanese. Pretty much the day I got back from Tokyo, I put away my dictionary and didn't open it again until yesterday. Still, I'm back now and I'm starting private lessons again tonight so sit down and I'll make you a cuppa.

      So, what's been keeping me away from the blogs and books for the last six months? Loads of stuff, to be honest. The new job for one: Digital Media Studio Manager for Whitespace. I wish I could say it's like herding monkeys just because I want to use the phrase "just like herding monkeys" but as it is, it's more like...managing a digital media studio. Or something like that. Outside work (but still within the geek realm), I've been working on Wwwitter, a cool little tool to show twitter discussions about a web page. Regular readers will of course recognise this as a direct copy of noodle but using someone else's content. It turns out that was all that was required to grab the attention of the internets.

      The biggest thing to keep me busy, however, was getting engaged to my beautiful lady, Jenni and all the organising that entails. Well, all the organising Jenni's been doing and the confused nodding from me that entails. I'll try and post when I have more details but the big day is 12th September. Don't worry if you haven't received any kind of 'save the date' notification or anything, Jenni's sent hers out, I've just been a bit slow.

    • The Lab

      A site where people can post ideas for applications/websites/games. Other visitors can help refine them, suggest ideas for them, etc. If an idea proves to have potential, it moves from 'The Bath' (where people have ideas) to 'The Lab' (where people start developing it, proving concepts, looking around for other interested people to help with the final build. If something goes into production, it moves to 'The Factory' where a dedicated build team create whatever it is and keep a blog of development progress before finishing up in 'The Shop' where people can buy/play/download whatever has been created.

      It's a way of getting the peopl with ideas in touch with the people who make things. It will have plenty of collaborative social aspects and encourage community feedback all the way through the process. People should be free to take any of the ideas and develop them however they like (opensourceideas) but if the community builds up around The Lab, keeping it associated would be a good idea.

    • New Rose Hotel

      So there we are, It's my last night in Tokyo and I've definitely got that Case feeling. Standing at my hotel window with a jar of sake, face lit up by the flashing neon outside. Behind me, the room has a cold glow under the light from my computer screen. Unfortunately, the laptop doesn't contain the Dixie Flatline but it's close enough.

      I never did find a Chiba chop shop...

    • Video Encoding on the Sony Mylo COM 2

      Those who know me will know that I have - using the parlance of the modern kids - mad skillz when it comes to video encoding and transcoding. I'll happily admit to wasting far too many hours learning the finer points of ffmpeg, mencoder and vlc, combining them with all manner of shell scripts, web interfaces, cron jobs and the like to set up my own mediacentre, video RSS feeds and shared video chatrooms (currently in maintenance mode).

      So imagine my combination of frustration ("it should just work") and elation ("ooh, a challenge") when I discovered that my shiny new Mylo is extremely temperamental when it comes to video. I had assumed PSP-friendly video would have been fine but it turns out I was wrong. Any slight variation in frame-rate, bitrate, frame-size, aspect ratio, codec or container and I'd get a lovely "Sorry, the Mylo doesn't support this format" error (but in Japanese).

      Anyway. In case you're interested, here's a shell script:

      #!/bin/bash
      ffmpeg -i "$1" -y -threads 2 -map 0.0:0.0 -f mp4 -vcodec xvid -b 768 -aspect 4:3 -s 320x240 -r ntsc -g 300 -me epzs -qmin 3 -qmax 9 -acodec aac -ab 64 -ar 24000 -ac 2 -map 0.1:0.1 -benchmark "$1.MP4"

      call this from the command-line with the path to the file you want converted and 10 minutes later, your Mylo-ready file will be sitting next to the original.

      I'm really only posting this here because in about 6 months, I'll have forgotten all about this and, given my current luck with technology, all my computers and all their backups will have simultaneously formatted themselves.

    • Some kind of code...

      Some kind of code...I found this Ema (votive tablet) in the grounds of Meiji Jingu last month. A month of playing around with various cyphers has yeilded no results. It's not a straightforward substitution code so frequency analysis doesn't work, I've tried substitutions with an increasing or decreasing offset, backwards and forwards alphabets...

      Obviously the person who wrote it wants to keep it a secret so we probably shouldn't probe further but...anybody got any ideas?

      Originally uploaded by thingsinjars on flickr

    • Kotoba

      Kotoba

      After some shuffling around of code and some gradient paint-bucket in Photoshop, the translation widget is done. Remember, of course, that you need a Sony Mylo to use it. Unless you just want to download it, unzip it and have a look at the code, that is.

      You can also download it from the official widget gallery. I'd be interested to find out how well/badly it functions on a non-Japanese Mylo. I have no idea about the language capabilities of other versions.

    • Coding Sickness

      Okay, it's time to accept I have a coding problem. A sickness, an obsession, if you will.

      I was sitting in my kitchen studying Japanese, my shiny new Sony Mylo sitting next to me. I was enjoying having the opportunity of having my computer switched off (seeing as I can just switch on skype on my Mylo). I found a word I didn't recognise in my notes. My paper dictionary was over the other side of the room. Surely there must be a way for me to look up this word easily...

      This is the point at which you can spot the obsession. Any normal person would have opened up the mylo, launched the web browser and looked up the word online. Job done*. I, on the other hand, fired up my laptop, downloaded the reference documents and tech specs of the Mylo and spent two hours writing a Japanese-English dictionary widget for it. It's fully functional and translates between English, romaji Japanese and kana Japanese. I'll upload it here and on the official Sony Mylo Widget gallery once I've come up with a cool name and a shiny logo.

      It's a sickness, I tell you, a sickness...

      * [edit] In retrospect, a normal person would have just walked across the room to get the dictionary.

    • Weather

      Weather

      I'm currently sitting outside typing on my new Sony Mylo watching another mad lightning storm. I'm able to sit outside because there's absolutely no rain at all. The storm is happening directly above me but it's so high, the thunder barely makes it down here. It's also been going on for a surprisingly long time. Normally - in my experience at least - storms come and go in a few minutes but for the last hour, the entire sky's been flickering like a broken fluorescent light. I like the weather here, it's interesting.

      Also, despite having sat patiently through several lightning storms taking photos, this is the closest I've come to a proper photo of a fork. One single bolt barely visible round the corner of my flat. Must try harder.

    • Extension building is complicated

      With Firefox releasing version 3.0.1 yesterday, I spent a chunk of last night trying to update the noodle extension. I decided it would probably be a good idea to enable automatic updates so keen users would be able to take advantage of the latest features immediately (or some such marketing gubbins).

      Basic extension building itself is unnecessarily complicated in my opinion. For a start, XUL is an extremely clever and powerful tool but has abysmal documentation. I've now done two sizeable projects using it and I still don't have a clue how it works. Once you've got that bit sorted, however, you then need to package up your extension in a very particular way taking care not to forget updating all of the required versioning bits.

      If you want to enable automatic updating, you now need to digitally sign it. Not a bad idea, really. It just makes the whole process even more complicated.

      My process roughly goes as follows:


      • Update Extension

      • Update install.rdf with the new version number

      • On the terminal, run './build.sh' (automatic shell script to package, zip, remove hidden files, copy, paste, resequence, etc)

      • Upload noodle.xpi to this server

      • On the terminal, run 'md5 noodle.xpi' (to calculate one of the application hashes)

      • copy key to noodle extension post for in-browser installation

      • update update.rdf with the new version number

      • run 'openssl sha1 noodle.xpi' to generate another application hash)

      • update update.rdf with new update hash

      • resign update.rdf with McCoy (embeds another application hash)

      • upload update.rdf to server

      • cross fingers

      This process is somewhat more complicated the first time you do it as you also have to use McCoy to digitally sign the install.rdf before you build your extension. McCoy itself is also password-protected.

      In total, you have 1 password to run McCoy, 1 extension signature, 1 md5 hash to allow in-browser installation, 1 sha1 hash to allow add-ons menu automatic updating and 1 signed update.rdf. I'm sure I've missed one.

    • The Legend of the Travelling Nev

      The Legend of the Travelling Nev

      The Legend of the Travelling Nev

      Whenever world-weary travellers gather to share a yarn or spin a tale, there will always be a clean shaven, leather-skinned old man with a thick bushy beard who settles in the corner with a whisky in each hand and a pipe in the other, pushes his hat to the back of his head and peers out from under it.

      "Have ye heard the tale o' the trav'llin' Nev?", he'll say, eyes glinting in the moonlight, sun shining through the boarded up windows. Experienced travellers - those that have been around the world twice and back again - will smile to themselves quietly and eye their glass thinking about the next drink. They've heard the tale before and they'll doubtless hear it again but it's never the same twice; maybe this old fellow can weave a good belly laugh or two in there, maybe he can't. We'll keep an ear on him and another can listen for the call for last orders. The other can pick up the gasps of amazement coming from the younger travellers during the telling of the tale.

      Ah, those youngsters...fresh faced and naive as they come. Everyone here was like that at some point but were they ever that young? First time they've been involved in a good old gab and they've thrown themselves into it with every little event that's happened since they left home. Everyone smiles. They're keen. There's nothing nobody's heard a hundred times before. Now they're gathering closer to the old man to find out more about the Travelling Nev.

      "Some say he started his journey many years ago in the foothills of Edinburgh, some say that when he started, there was no such thing as Edinburgh. Either way, it's been many a year since he was able to settle anywhere." the old man takes a deep draught from his glass, wipes the beer from his beard and beckons the youngsters closer.

      "Cursed he was, y'see. With a terrible curse. A terrible, terrible curse had been cursed upon him like a curse. No-one knows why, how, when or why but, since many a year past, the Trav'llin' Nev has been cursed to wander the planet until he finds a town where nobody knows who he is but wherever he goes, his story is already known. Of course, that's the cunningness o' the curse - the more he travels, the more his tale is spread; the more his tale is spread, the further he has to travel to find peace."

      The youngsters are spellbound, their glasses sitting untouched, their mouths open in wonderment. No, it can't be true, can it? Is it? A man travelling endlessly around the world only to find he already knows everyone? No...?

      "Ah, I see fr'm yer faces we've a coupla disbelievers amoungst ye. Well, feast yer eyes on this...", the old man fishes in the inside pocket of his travelling jacket, a jacket that's circumnavigated the globe a few times now and looks like it could probably do it once more on its own. He pulls out an old wrinkled, faded photograph that's been folded more than a few times and hands it over to the group which now includes the season travellers whose interest had been piqued.

      "That, my friends, is the Trav'llin' Nev", he says as he sits back in his chair, a faintly triumphant smile spreading across his lips, and falls asleep.


      In other news, I bumped into Nev this week.

    • How to hose your website...

      ...in several easy steps.

      1: Have a too-clever-for-its-own-good CMS that is child-like in its simplicity yet Canadian-lumber-forest-like in its ability to be hacked.
      2: Build several different websites using said CMS, each with their own unique hacks.
      3: Have all the sites open in your FTP client and in your text editor
      4: Play an episode of Firefly in the background to distrct you.

      Now, the next few steps must be done in very quick succession:

      5: Upload files from site A to site B
      6: Realise mistake, download replacements from site C
      7: Upload replacements to site D
      8: Realise mistake, reset Subversion backup C
      9: Upload site C to site A
      10: Watch River Tam kick ass
      11: Realise you're getting confused, delete everything and start again
      12: Delete Subversion backup B
      13: Delete entire project B

      Now that you've done that, all that's left is to put everything back the way it was on A, C and D and trawl old backup disks and Google cached pages to try and get B back.

      14: Watch Mal shoot someone.
      15: Write it up in a post on the freshly-restored, looks-like-it-was-never-broken site B.

      Fairly straightforward, really.

    • Again with the Barber stories...

      Regular readers will, of course, remember my previous experiences with my Japanese barber. Well, I started to look like some kind of scruffy hippie again so I braved the rain, grabbed the infamous umbrella and headed out for another haircut. This time, I decided to go the whole hog and find out what the full shave-and-a-haircut experience was like.

      He shaved my forehead.

      My forehead! Shaved! With a cut-throat razor! Exclamation mark!11One!Factorial

      I was so busy being shocked that I only just noticed he followed it by shaving my earlobes. I'm now hairless in places that have had hair since before I was born.

      I don't really have any conclusion to take from it other than - He Shaved My Forehead...

    • Noodle Firefox Extension

      You can either download the Noodle Firefox extension from the Mozilla Addons Site (recommended but requires registration) or below.

      Noodle Firefox extension [1.0.5].

      If you download from the Mozilla site, you can leave a review and increase the chance it'll get accepted into the public area (no registration required).

      It has been tested with Firefox 2 and 3. Surprisingly, it also works fine with both of them, too.

    • Stormy weather

      Stormy weather

      I was out on my balcony last night taking photos of the moody stormy weather.

      It turns out lightning isn't quite so pretty when you see it up close. Click through the picture to see more.

    • Aww, shucks...

      Aww, shucks...

      Despite the fact that I generally keep my birthday a fairly well-hidden secret, it seems that some people just won't let it lie. It's not that I'm trying to keep my age a secret - I'm proud to say I was born in 1978, the Golden Age of Disco - I just tend to avoid the kerfuffle that goes with presents, parties and cards.

      Having said that, I was still over the moon on Thursday night when my wonderful other half threw a mini surprise birthday party in a cool little cafe/bar called the Orblight Café (Note: I'm not saying Thursday was my birthday, Jenni just happened to be in the country then). Then, after getting over the surprise (and after the first Guinness), she presented me with what seems to have been several months in the planning: cards and birthday e-mails from practically everyone I know! Really, everyone!* There were all kinds: cards written in binary, cartoon cats, even a picture of me when I was 20 (although I look 14)

      Thanks everybody. I'm now going off to listen to some Bee Gees.

      *except Gary who seems to have completely disappeared. Seriously, e-mail me.

    • Comments

      I've removed the comment form from below each post here and replaced it with a Noodle button. I figured there's no sense in making a website devoted to instant commenting if I'm not going to use it myself.

      This does coincide with the evil evil spambots cracking my (previously thought to be impregnable) anti-spam system earlier this week but it isn't related. Honest. Darned spam. So it may not have been impregnable but it had a fairly decent run. It lasted seven months and several tens of thousands of attempts to bypass it. Oh well.

      At least Noodle uses Google Accounts. If spam starts to come through on it, I'll just remove the ability to post anonymously so everyone will need a google account. I'd rather not do that unless I really have to, though.

    • Noodle

      I think my latest little project is pretty much done. It still doesn't work absolutely perfectly in Internet Explorer 6 but I figure I'll fix that if enough people ask me to.

      So, here it is: Noodle.

      "Okay, what is it?", I hear you ask (I don't but play along). Noodle is a variation on a good old-fashioned forum except that every page on the internet has its own thread. Any time you're looking at something, you just press a button and you get to see the discussion for that page. Sometimes a page won't have any comments on it for months (or ever, even), sometimes a page will be extremely busy.

      The pages that are currently the most popular will appear on the Noodle homepage (it's set to show the top 10 at the moment but I might change that) along with the most recent comments.

      "So, where's this magic button?" you ask (you're full of questions today, aren't you?). It's here:
      noodle

      If you're using Firefox with the bookmarks bar switched on or Opera with the status bar switched on, you can just grab the button, yank it off the page and drag it to your bar. If you're using Internet Explorer 6 or 7, right-click and 'Add to Favourites'. Bear in mind that IE6 is...flaky at times.

      Known issues


      At the moment, the 'Most popular now' section looks a bit daft, seeing as it only has 1 site in it.

      The google account login screen is cut off at the top.

      The google logout screen gives a nastly looking error. This is a problem at google's end. Apparently, you don't get this error in the USA but you do in the UK and Japan.

      Nicknames are cut short. After my earlier musings, I decided the safest way to display nicknames (until google fix it) is just to trim bits out. If anyone has a better RegEx for doing this than the one I'm using, let me know.

      I'm sure I'll post more about this soon, I'm now off to bang my head against IE for a while.

      Yes, I do need better hobbies.

    • Japanese Barbers are great.

      A quick transcript of the conversation I had with my barber just as I was about to leave:

      Barber: Do you have an umbrella?
      Me: No, is it raining? (look outside, it's not)
      Barber: Ah, wait a second
      Barber runs off through the back, comes back with an umbrella.
      Barber: Please, take this.
      Me: But it's not raining.
      Barber: Ah, but it might.
      Me: No, really, it's okay, I live just round the corner.
      Barber: (looking sad) Please? You don't even need to bring it back.

      I took the umbrella. He also gave me a hairbrush.

    • Alex

      I love it, he's just looking after his work! He doesn't give a toss about you but he has a reputation to keep up, and he's clearly determined to look after that haircut he gave you...

      That and the fact that you now feel so indebted to him that you'll never dare use another barber ever again.

    • Language

      My latest pointless programming project is just about finished. There's just one little bit left to figure out and then it's done.

      I'm building this using the new Google AppEngine system (mostly because I needed an excuse to learn python) but there seems to be a bit of a problem with the User object. They haven't finished the User nickname bit yet so when you sign into an AppEngine application or site using a standard Google Account, it uses the bit of your e-mail address that comes before the '@' and, although Google accounts can use any e-mail address, the majority of them will be gmail.com or googlemail.com. This means that if you want to make any kind of public forum, you have to do one of the following:


      • Implement your own nickname system (not really in the spirit of a unified User object)

      • Obfuscate the nickname before displaying

      • Display the nickname and open users up to spam or other unwanted e-mail

      None of these are particularly great. If it were even possible to access the user's first name, that'd solve the problem but, until the nickname functionality is finished, it's not as useful as it could be.


      As an aside, doing a project in python means that I've written code in pretty much every mainstream (i.e. not esoteric) programming language except COBOL.

    • Edited Millionaire

      Here's an updated version of my Ramen Millionaire story. Honestly, I'm going to write an english version soon...


      ラーメン長者

      むかしばなしじゃない。さいきん、渋谷にうんのわるい男が住んでいました。毎日、朝から晩まで まじめに働きましたけどなかなか金持ちになりませんでした。ある日、おなかがぺこぺこだから、ラーメンやたいにいきました。食べながらラーメンやたいの人と話していました。

      「どうしてなかなか金持ちにならない?何をするればいんだろう?」と言いました。

      「ここから出る時に、ころびます。こたいをみつけます。」とおかしく言いました。

      「えええ。。。?彼はあたまがへん。。。」と思っていました。そしてらラーメンやたいを出ました。

      「がんばって」らラーメンやたいの人大きい声で言いました。

      ふりかえったら男がころびました。しかし、立つ前にやたいの下におもしろい物をみつけました。小さいドラエモンのケータイのストラップでした。立ってからラーメンやたいの人に「ああ。。。かわいい物、ね。。。」と言ったけど彼はいませんでした。

      「ええ。。。どこ?」と言いました「じゃ。。。」

      それから道を歩き出しました。「よく考えなくちゃ。。。」と思っていました「たぶん。。。ああ!うるさい!なんか?」

      お母さんと赤ちゃんが店を出ました。赤ちゃんがうるさくないていました。

      「あああ。。。かわいい、ね」

      とつぜん思い出したーストラップ!

      「えーんえーん!」赤ちゃんと大声でないていました。

      男は赤ちゃんにドラエモンのスストラップをあげました。赤ちゃんはすぐに静かになりました。

      お母さんは「どうもありがとう」と言いました。「赤ちゃんがよろこんだんからお礼がしたいんです」。ハンドバッグの中をさがしてペットボトルを取り出した 「あ!ウロン茶どうぞ」お母さんからウロン茶をもらいました。

      男は歩きつづけました。まもなく、女の人と合いました。顔色がよくありません。

      「スポーツクラブ。。。から。。。つかれった。。。のど。。。かわく。。。」と言いました。

      男がお茶をあげまてから女の人が飲み出した。

      「あああ。どうもありがとうございます。体がよくなりました。ああ!明日、KAT-TUNのコンサートがあります。時間がないので、行くことができません。」

      男は女の人にチケットをもらいました。

      男は歩きつづけました。まもなく、サラリマンを見ました。サラリマンの車が壊れました。彼は車をけりつけていました。

      男は「どうしたの?」と言いました。

      サラリマンは「分かりません。動かない。。。」と言いました。「むすめにKAT-TUNのチケットを買ってあげたかったけど店がしまっちゃいました。。。」

      男は「どうぞ」と言ってチケットをあげました。

      サラリマンはよろこびました。車のかぎをあげました。

      「どうもありがとう。車はあなたの。。。」と言って家に走って帰りました。

      男は車の中を見ました。小さいワイアが切れていました。男は繕いました。簡単でした。

      車のとなりにたっていたらおじいさんが来ました。

      「ああっ!さいこう!」と言いました。

      おじいさんは有名な映画のディレクターでした。

      「古いしおもしろいし僕の新しい映画のシーンで車はパフェクトです」。

      「いっしょうに行こう!」と言いました。

      男とディレクターさんはさつえい場所にいったら女の人が来ました。

      ディレクターさんは「こちらは娘です。映画のしゅやくです。もうすぐ、有名じょゆうになります。」

      彼女はスポーツクラブの女の人です!

      アシスタントディレクターがディレクターのところに来て静かに耳打ちしました。

      ディレクターさんは男に「映画のしゅやくが止めたであなたはこの映画の新しいしゅやく。」と言いました。

      後で映画はとても人気になりました。男とディレクターの娘さんも人気になってけっこんしてうれしくなって億万長者になりました。

      皆が幸せになりました。

    • A bit too social?

      A bit too social?

      I've been looking at adding some more features to the greatest PHP CMS around and decided that simple social bookmarking doohickeys would be useful. The idea is to have a little panel in the admin area where you can check which ones you want listed on your page. Straightforward enough so far, right? Nothing groundbreaking or difficult or anything.

      It got tricky when I started trying to figure out what sites should be included. It turns out that while I wasn't looking, social bookmarking sites became quite popular. Full points go anyone who can name them all.

    • Jenni

      How's it going in the wardrobe? Glad you like Heima - hope it was a good surprise. Jx

    • That 'back-of-the-wardrobe' feeling...

      I've just realised what's so odd about being back in Edinburgh. It feels exactly like I've just come back from an adventure in Narnia. I left normality behind 6 months ago and travelled to a magical, mystical land full of everything I could possibly dream of (mostly really cool geek stuff) where everybody spoke strangely. I stayed just long enough for everything to become normal, where I'd come to expect onigiri to be sold in every corner shop then I travelled back and stepped into life exactly where I left. Everything and everyone exactly the same as it was when I left. That's what's weird about it.

      Still, I'll be clambering back into the wardrobe next week now that I've got my new visa.

      In other news, I highly recommend Heima by Sigur Rós

    • Ramen Millionaire

      For my japanese lessons, I've been writing short little essays recently. Usually it's opinions on the weather or plans for the weekend but last week I went a bit mad and rewrote the traditional japanese story "Warashibe Chouja" or "Straw Millionaire" in a modern setting.

      My current version is below but I'll probably update/rewrite it as I continue my studies. I'll also get round to typing up the english translation. Apologies to anyone reading on a PC, you'll probably just see a load of boxes...


      ラーメン長者
      むかしばなしじゃない。さいきん、渋谷にうんのわるい男が住んでいました。毎日、朝から晩まで まじめに働きましたけどなかなか金持ちになりませんでした。ある日、おなかがぺこぺこだから、ラーメンやたいにいきました。食べながらラーメンやたいの人と話していました。
      「どうしてなかなか金持ちにならない?何をするんの?」と言いました。
      「ここから出る時に、ころびます。こたいをみつけます。」とおかしく言いました。
      「えええ。。。?彼はあたまがへん。。。」と思っていました。そしてらラーメンやたいを出ました。
      「がんばって」らラーメンやたいの人とどなていました。
      ふりかえって男がころびました。しかし、立つ前にやたいの下におもしろい物をみました。小さいドラエモンのケータイのストラップでした。立ってからラーメンやたいの人に「ああ。。。かわいい物、ね。。。」と言ったけど彼はいませんでした。
      「ええ。。。どこ?」と言いました「じゃ。。。」


      道を歩きました。「よく考えなくちゃ。。。」と思っていました「たぶん。。。ああ!うるさい!なんか?」
      お母さんと赤ちゃんが店を出ました。赤ちゃんがうるさくないていました。
      「あああ。。。かわいい、ね」
      とつぜん思い出したーストラップ!
      「わああああああ!」赤ちゃんと大声ないていました。
      男は赤ちゃんにドラエモンのスストラップをあげました。赤ちゃんはすぐに静かになりました。
      お母さんは「どうもありがとう」と言いました。「赤ちゃんがよろこぶしてからお礼がしたいんです」。手かばんの中にさがしてペットボテルを取り出した 「あ!ウロン茶どうぞ」お母さんからウロン茶をもらいました。


      男が歩きつづけました。まもなく、女の人と合いました。顔色がよくありません。
      「スポーツクラブ。。。から。。。つかれった。。。のど。。。かわく。。。」と言いました。
      男が茶をあげまてから女の人が飲み出した。
      「あああ。どうもありがとうございます。体がよくなりました。ああ!明日、KAT-TUNのコンサートがあります。時間がないので、行くことができません。」
      男は女の人にチケットをもらいました。

      男が歩きつづけました。まもなく、サラリマンを見ました。サラリマンの車が壊れました。彼は車をけりつけていました。

      男は「どしたの?」と言いました。
      サラリマンは「分かりません。動かない。。。」と言いました。「むすめにKAT-TUNのチケットを買ってあげたかったけど店は閉店しました。。。」
      男は「どうぞ」と言ってチケットをあげました。
      サラリマンはよろこびました。車のかぎをあげあした。
      「どうもありがとう。車があなたの。。。」と言って家に走りました。
      男は車の中を見ました。小さいワイアが切れていました。男は繕いました。簡単でした。

      車のとなりにたっておじいさんが来ました。
      「ああっ!さいこう!」と言いました。
      おじいさんは有名な映画のディレクターでした。
      「古いしおもしろいし僕の新しい映画のシーンで車はパフェクトです」。
      「いっしょうに行こう!」と言いました。
      男とディレクターさんは映画の場所にいったら女の人が来ました。
      ディレクターさんは「こちらは娘です。映画の大切の人です。まもなく、有名じょゆうになります。」
      彼女はスポーツクラブの女の人です!

      アシスタントディレクターがディレクターに来て静かに耳打ちにしました。
      ディレクターさんは男に「映画のしゅやくが止めた。あなたは僕の新しいしゅやく。」と言いました。

      後で映画はとても人気になりました。男とディレクターの娘さんも人気になってけっこんしてうれしくなって長者になりました。

      皆が幸せになりました。

    • Too much code...

      I've obviously been reading and writing far too much code recently. I find myself mentally adding markup to my normal conversations. When I say something like "Despite having a sore back, I managed to vacuum the flat.", I mentally wrap an href round "Despite having a sore back", linking it to a previous conversation (usually with someone completely different) so that the interested listener can open that conversation in a background tab and check it out later...

      As long as I don't start carrying around a small yellow sign saying 'Digg this', I'll probably recover...

    • The answer to your question

      Because I've been doing lots of development work lately, I've had to spend more time than I'd like in various techie forums trying to find answers to various programming issues. I tend not to hang around forums when I don't need to because I largely find them depressingly full of people like me.

      Even though these are technical forums for technically-minded people, there are still too many demonstrations of fuzzy thinking, lots of "Does anyone know how to package xulrunner for OS X", "Has anyone managed to install VLC on an iPhone", "Can anyone make the whatsit do the thing?". Keeping with the free and open sharing of ideas and nurturing of curiosity that The Internet is supposed to encourage, I've created two handy pages with the answer to all these questions.

      For all those times someone asks a question like "Does anyone know how to...":

      To be used in the same frame of mind as this handy tool.

    • Window Sucks.

      No real surprises there, I just needed to point out that it's now five past one and I started installing IE7 just under 3 hours ago. Three. Hours.

      I needed to test some layouts on IE7, I don't trust IE7 enough to not mess up my parallels install so I decided to put it on my development machine in the office in edinburgh via VNC, ran windows update... wait... security updates... wait... restart... windows update... IE7. Yes, install, please. Installing... wait... restart... run IE7.

      "Do you want to run the Phishing filter?"
      No.

      "Welcome to IE7. Do you want to run the Phishing Filter?"
      No.

      "Ah, you've opened a new tab. Do you want to run the Phishing Filter?"
      No.

      I go to the site I wanted to test. True enough, it's gebroken.

      Click "Developer toolbar".

      Crash... wait... restart... run IE7.

      Re-download the Developer Toolbar.

      "Do you want to run this?"
      Yes.

      "Finished downloading. Do you want to run this?"
      Yes.

      "This program may be unsafe. Do you want run this?"
      Dear god, if this computer wasn't in a different hemisphere, I'd lamp it one right now.

      Run the installer, fail.

      Shut down IE7, run the installer again.

      Run IE7.

      Go to the site again.

      "This site may be unsafe, do you want to run the Phishing Filter?"

      Log out of VNC. Step away from the computer, spend 10 minutes ranting to nobody in particular. Feel somewhat better.

    • Jenni

      Hey, at first glance I thought this was a poster for a new kung-fu action movie you want/ went to see. Then I read the rest of the entry...

    • Firemen's Parade

      Firemen's Parade

      I went to the Tokyo Fire Department's annual parade today and took over 200 photos. It was very impressive, all in all. The only thing that bothered me was the poster advertising the event...

      Am I the only person who expects to see Eric Cartman standing in the middle?

    • Jenni

      Banzai!! Cool video. And you had better luck with the weather than we did last time. Wish I could have been there with you...

    • Jenni

      OMG, I'm so jealous. That looks delicious. And I'm not surprised you weren't able to finish it all - there's loads of it!

    • 2 Jan
      2008

      Banzai!

      I went to the Imperial Palace today to see the Emperor and his family. Lovely people. We had tea. And biscuits. If only there wasn't this huge crowd of people cheering the whole time...we couldn't hear ourselves think.

    • Sushi is good for you

      Sushi is good for you

      It's also very filling. I visited a friend from Edinburgh today who's over here helping her mum pack and they made this excellent dinner.

    • Frasr

      Fanbloodytastic!

      Merry Christmas Charlie Brown.

      Looking a bit like an extra from 'My Name is Earl' in the convict shot. Cool.

      There is a little smirk in the second shot isn't there?

      Have good one...

    • Frasr

      Just in time for www.frasr.com

      I'll get time over the next few weeks for a test drive.

    • Alex

      ROFL! Especially the Christmas hat one - although you may have allowed a hint of a flicker of a smile to show...

    • Ann and Tom

      What a nutter!!

      Have a Merry Christmas - and you are sure your pictures are not real????

      Can I have some of what you had then, it's a long time since I couldn't remember what I did last night!!

      Happy holidays .............

    • Lizzie

      Merry Christmas to you Simon, you do have a bit of a Japanese look these days...
      See you in 2008!
      Lx

    • Joel

      Got ya mail, thx,
      merry christmas and a good "Rutsch" ;)
      best wishes, cu

    • Lindy

      That's just how I remember you Si.
      Happy Christmas.
      PS The webbies chose your Christmas Pressie on my morning off. Honest.

    • James McKay

      Merry Christmas to you too! All that hair – what's happened to you in the wilds of Tokyo city? Have a good commercial Christmas binge, see you in 2008!

    • Christmas Card

      Christmas Card

      Before I get any concerned e-mails, I haven't been arrested. I just thought this would be a funny card. I also don't look that rough. At least, I hope not. I've included a couple more recent photos in the pop-up in case you need proof.

      Everything here's going well, my Japanese is coming along slowly but surely. I'm now getting private lessons twice a week to help overcome the fact that Japanese is really hard.

      I think I must have made it to every area of Tokyo by now, I've been going to a different one each weekend but I still keep finding cool new stuff. I'm also deliberately not going near Akihabara at this time of year just in case I get tempted to buy a bunch of stuff as christmas presents to myself.

      Anyway, y'all have a good Christmas and New year...

    • Dooze Done

      Just to keep up my current focus on extreme geekery, Dooze (formerly known as "s is small") is now available for download. It's kind of ended up as a CMS for people who could probably write their own if they wanted to but just haven't the time. It's still possible to install, customize and use it without knowing any PHP but there's a bunch more stuff you can do with it if you do.

      Anyway, enjoy...

    • Monkeying about with XUL

      Monkeying about with XUL

      I've been playing with XUL for a couple of days now. Kind of interesting and kind of really confusing.

      It looks like it could be really useful for making cross-platform applications and the way it works means that it's not a huge jump from HTML development to XUL layouts but getting plugins to work on OS X? Ugh.

      The large number of folders called 'plugins' within the standard application structure definitely didn't help. At the moment, my application works but I have no idea why. It's probably a quantum thing, you can either know what it does or how it does it but not both.

      Still, it's available for download on the (almost finished) MonkeyTV site. Now I just need to go through the process again for Windows...

    • Arbitrary choice

      A web page with two coloured squares for the user to click. They click on one then see how many other people clicked on it. That is all.

    • Finally Gapless...

      A while back I decided to try and fully embrace 'The Mac Way' and use iTunes to listen to my music/update my iPod/browse podcasts/etc. So I fired it up, told it to catalogue my music collection and sat back hoping to be listening to Ben Folds within minutes.

      Hmmmm...

      It's now six weeks later and it finished processing about 10 minutes ago. During those 6 weeks, it was completely unusable while it tried to 'determine gapless playback information'. While it was waiting, I found out how you prevent it from doing this but that has to be done before you start.

      Six weeks. Six. Weeks.

      To be fair, it probably doesn't expect your music collection to be quite so large or – and this is where I think the problem is – live on a server on the other side of the world.

      Still, it's done now. I just need to make sure I never add any more music ever.

    • Monkey TV

      So, my latest little project, Monkey TV is about to shift from the aleph to the bet testing stage (Hebrew's much more fun than greek). The site's only been up in its current state for less than 3 days and already it's been hammered by hundreds of spam bots. Really, they're faster than google.

      More info and cool stuff when I finish.

    • thingsinjars

      I did ask the web host to enable MultiViews but got the fully considered response "Erm...whu?". I've since moved the hosting but still not gotten round to doing it properly.

    • Finally, It's cold!

      After an excessively long summer, it's finally beginning to cool down here. I can't believe I was getting a tan in November.

      Of course, I'm now beginning to realise that this flat is built for the summer. Air conditioning, thin curtains, no heaters... but I shan't complain. I survived typhoon season unscathed and there are a lot fewer cockraches around at this time of year...

    • Earthquakes = Bad

      That's it, I've decided. On the whole, earthquakes are a bad idea. Not that I've experienced any particularly bad ones while I've been here – the biggest being a 5.2 about 70 miles north-east – but the ones I have had have been...unsettling.

      A particularly strange thing happens when I'm on Skype to someone during an earthquake, though. Due to the computer being on the desk, the desk being in the room and the whole room moving as one, it appears on the other end that I start swaying slightly for no apparent reason.

      I have prepared myself a little emergency bag, though, just in case there's a big one. It's got spare socks, my solar charger and – when I'm not using it – my Nintendo DS. At least if there's a disaster, I'll still be able to play Mario Kart.

    • Nev

      Hope you played with Apache multilingual content negotiation...

    • Blob Game

      Something very similar seems to have already been done as an iPhone game now.

      This is a very simple game mechanic which can be applied to multi-touch interfaces as well as keyboard and mouse interfaces.

      Start off with a large blob floating in the middle of the screen. In physics terms, it's probably best thought of as looking down from above on a blob of liquid sitting on a teflon surface. While there is only a single blob on the screen, no points are earned. Using multi-touch, blobs can be separated by pressing on two separate points on the blob and pulling apart. On-screen, move the mouse pointer to where you want one finger to press then hold down shift (left or right), the pointer then splits in two, one stays where it was pinned and the other moves with the mouse. You can then click to hold down your second finger and pull apart.

      Once the blob has been separated, the timer starts counting up points. The two blobs can now be let go and will float around the space freely, bouncing off the walls. If they touch, they will join again and the points will stop increasing. The player can grab hold of any blob at any time and hold it still so technically, they could just hold the two blobs apart and slowly rack up points. However, each of these blobs can also be pulled apart into two smaller blobs and for each extra blob on the screen, the score is multiplied. As before, if any two blobs touch, they join together and the multiplier decreases.

      Blobs don't have to be the same size when pulled apart, holding two points near each other on the same side of the centre of the blob and pulling the outermost will pull out a smaller blob. This could be quickly repeated to create several tiny blobs which would be difficult to control but quickly increase score.

      An alternative game mode can be introduced by having an increasing counter included in the game as well. After you have started scoring points, it will start counting up. If the counter catches up to your score at any point the game is over. The rate of increase can itself also increase as the game progresses

    • b3uk

      She's trying to remember your face so she can hunt you down and kill you.

    • thingsinjars

      It definitely looks that way but nope, just standing straight. I did start the day hunched over a bit but after a while there's no point, you just have to rejoice in the ability to see people's bald spots...

    • s is small

      The reason I finally got round to finishing my site is that I built a neat little CMS temporarily called 's is small' and wanted to do something interesting with it. It doesn't really do anything that other CMSs don't, I just felt like making it.

      It does, however, have some fairly cool things built in:

      Media

      • If you attach a video to a post, it'll be automatically converted from whatever format you have (AVI, MPG, WMV, MP4, MOV, etc) into FLV and embeded in your post using Jeroen Wijering's FLV Player.
      • If you upload an image, it'll get resized then wrapped in Lightbox
      • MP3s are automatically embedded in a flash MP3 player

      Integration

      • Put your last.fm username in and you can get a flash or image based list of your Top 10 artists (or most recent played or whatever...)
      • Put your flickr username in and it'll include your latest photos.
      • You can set up your flickr account to 'blog this' to automatically include people's flickr posts in your blog (using the Metablog API)
      • Put your Open Source Food username in and it'll randomly include one of your recipes.
      • You can set it to be your personal OpenID server
      • Automatic inclusion of a bunch of Google stuff: calendars, analytics and maps.

      Other stuff

      • RSS feeds for each category
      • Some nifty anti-spam stuff...
      • ...which comes in handy for the comments
      • A simple way to add on any kind of extra functionality as modules
      • Support for MySQL and PostgreSQL
      • Automatic installation and database setup (just upload the files and everything will install the first time you visit your site)
      • Depending on your server setup, the whole thing generally comes in at about 2MB (including the flash movie player and everything)

      Of course, the next thing I need to do is make a site for the CMS itself and let other people have a go at it.

    • Beginning of Sunset

      Beginning of Sunset

      And this is the beginning of the most amazing sunset I've seen since arriving. I like the view from my window.

    • Pasmo

      Pasmo

      They finally rereleased the prepay Metro and Tokyu line I.C. card yesterday after running out of them in April. So I got one.

      It's like I'm some kind of local.

      "Hey, do you need a ticket?"
      "No, I have my prepay metro card"
      :)

    • Shougayaki

      Shougayaki

      Or 'Ginger Pork'. I'm not intending to just upload lots of photos of my dinner but some of it does look nice.

    • Carnival Time

      Carnival Time

      Turns out September is carnival season here in Tokyo. This was just a little procession making its way around Ueno.


      Had to jostle my way past a few dozen other guys taking photos of the girls in front. Didn't they realise I was taking these photos for posterity, not for the girls in the tiny bikinis?

    • Setagaya Koen Fountain again

      Setagaya Koen Fountain again

      Spent the afternoon reading a book on Japanese verbs while getting cooled occasionally by the mist coming off this fountain. It looked really cool with the sun going down behind it but I couldn't quite capture it the way I wanted.

    • Tonkatsu Dinner

      Tonkatsu Dinner

      In the continuing effort to prove to various people I am eating well while over here, this is my dinner. Tonkatsu, ramen and a chickeny broth.


      Tasty it was, too.

    • Another Sunset

      Another Sunset

      Another one from my window. Didn't bother messing around with it in Photoshop, this is just how it was taken.

    • Sangenjaya Sunset

      Sangenjaya Sunset

      And here's the view 10 minutes ago from my room. Pretty cool. Guess this is what the sky looks like after a typhoon.

    • Krispy Kreme Queue?

      Krispy Kreme Queue?

      No idea what was going on today but there was a queue of several hundred people to get into Krispy Kreme in Shinjuku today. The queue went round the corner, across a bridge and continued back for a couple of hundred metres.

      I didn't realise doughnuts were so popular...

    • Yurikamome

      Yurikamome

      Even though I was running late, while wandering across Kounan-Ohashi, I had to take a photo of Yurikamome, A great big round-in-a-circle motorway on/off ramp. It heads onto Rainbow Bridge but I couldn't get any decent shots of that, it's too big.

    • Rain on the Roof

      Rain on the Roof

      It just started raining so I thought I'd take some shots. It's properly chucking it down. This is the roof of the building opposite.

    • Cabling

      Cabling

      Of course, with Japan's tendency to have all the cabling overhead (as opposed to the UK's underground cabling), it does mean that this is right outside my window. I could touch it if I were so inclined. And it's dripping wet.

      I'm not 100% sure if this is a good thing..

    • Here Comes the Weather...

      Here Comes the Weather...

      Right before the storm clouds opened, the sky got extremely dark. But, as the sky behind me was still blue, this building's reflective windows stood out quite well.

    • Door Frame

      Door Frame

      More of an instructional shot than anything arty. This is taken at eye-level.

      Note to self: Duck.

      The grey strip is a handy bit of rubber some kind soul put there to make sure it's not as painful walking into the door as it could have been.

    • Daytime Cars (and a fella on a bike)

      Daytime Cars (and a fella on a bike)

      Standing outside the Tokyo Regional Government buildings looking towards the Imperial Palace. The government buildings themselves were quite impressive but I didn't want to risk upsetting the stern-looking guards standing outside them by taking any photos in their direction.

    • Shibuya Mid-Afternoon

      Shibuya Mid-Afternoon

      This is half-way through my commute from the office back to my apartment. Get off one exceptionally busy train, through the exceptionally busy square, onto a slightly less busy train.


      I'm fairly sure the woman on the left posed as soon as got my camera out.

    • Chucking it down

      Chucking it down

      Yeah, I know, Edinburgh gets it fair share of rain, too. But this is like switching on a shower. And then all of a sudden it stops. Kind of like switching off a shower...

    • Pre-cooking

      Pre-cooking

      And this is just to prove that I'm not just eating noodles and tuna.


      Beef, Ginger, Garlic, Shoyu, Mirin

    • Dinner

      Dinner

      Tasty, tasty noodles. Looked all around the flat but couldn't find any chopsticks. Oh well.

    • Home Office

      Home Office

      It's too small to show anything other than the bottom of the desk. No, really.

    • Shower

      Shower

      I have no idea. Tried my best to figure out what this box was for. I know that if I press a random sequence of buttons, hot water comes out of the shower. But if I press another random sequence of buttons, I get a voice telling me I've done something wrong. But I'm not sure what...

    • My kitchen

      My kitchen

      It's tiny. This photo's taken from the bedroom. You've got the oven, microwave, fridge, front door, several different recycling bins and some very complicated insructions on what and how to recycle.


      And, of course, the TV showing anime on prime-time Saturday night. Now that, I like.

    • Bedroom Floor

      Bedroom Floor

      The floor of my bedroom. That is all. Instead of tatami, it's floorboards and instead of a futon, it's a bed. Not as much traditional japanese styling as I'd have hoped for but, hey...

    • UFO

      UFO

      It's probably not a good thing when your food has 'Unidentified' written on it...

    • Setegaya Koen

      Setegaya Koen

      First thing I did after moving into my apartment was have a little wander around the park next door. It's very nice.

    • Strange Sun

      Strange Sun

      There was some bizarre Bazaar on in the park. Couldn't quite figure out what was going on but I did manage to get this photo of a Sun. It's either cute or scary. I'm not sure which yet.