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...
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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:
If it doesn't line up, make it line up.
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.
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 TwitterGrowl 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:
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:
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:
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:
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:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
"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...
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.
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.
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.
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.
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.
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:
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.
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?
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.
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.
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.
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)
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.
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.
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.
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...
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.
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.
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.
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.
"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:
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.
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 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.
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.
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.
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.
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...
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...
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...":
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.
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?
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.
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!
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...
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.
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...
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.
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.
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.
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...
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.
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
This is the website for the German Church in Edinburgh. The most fun bit was making it do everything in two languages. I set them up with a set of Google Calendars so they can update service and event information and itll automatically be pulled into the events pages on the site.
The Visitor Studies Group website was my first big Drupal project. Along the way, I think I must have rewritten the drupal source-code at least twice before I ended up with a tiny handful of theming functions. I think drupal might just be too smart for its own good... Awesomest Web Producer
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...
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
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?
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.
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.
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.
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.
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.
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.
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.
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...
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...
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.
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...
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.