-
It's Oregon Trail, but where you take everybody's favourite emo band on tour of the states. Surprisingly deep and detailed, an affectionate tribute to Apple II entertainment and the rigours of being a touring rock band. It is very silly, and somewhat ace, and will be getting a blog post in due course.
-
"Tips and tricks only the pros knew, UNTIL NOW! Get ready to PWN up some NUBS on Xbox Live and get some MAD BP'S BRO!" I'm pretty sure I've played this guy.
-
"These are just various photos taken during the development cycle of the businessib. Enjoy them. We hope you think they are as hilarious as we do." Oh my word.
-
"If you keep the city and concentrate on putting more world into it, imaginativeness becomes the primary obstacle– you can add things into this city without having to add much physical space and new assets. There's legions of empty storefronts and empty buildings, waiting to be filled. And media– web sites, radio stations, tv shows– don't take up space either. Think of this cheap empty space as a place to tell new stories, because as a developer, you are good at this." Iroquois, hitting many nails on the head all at once, again.
-
The Guardian Open Platform launches, with their Content API, their Data Store, and a selection of client libraries for the API (one of which I did a smidge of work on). This is not just a good thing, it's a good thing Done Right, and I'm looking forward to what's next from the Open Platform team.
-
"A collection of accidents that happened while working on maps and other graphics." Bloopers from interactive infographics. Delightful; the patina and happy accidents of the 21st century.
-
Custodian is the Ruby gem for accessing the Guardian Open Platform Content API that James Darling, Kalv Sandhu, and I (although my contribution was minor) built. There's a Google Code link to it, but I'd imagine the github version is where the action will be.
-
"You may not know his name but you will certainly know his work: Morris Cassanova (aka Mr Chicken) designs and makes signs for most of the fried chicken shops in the UK." That's a good market to have sewn up, I'd imagine.
-
Jones annotates his screengrabs from the James Coburn classic; lovely to see it all captured so well, even if I'd disagree that the plot is a thing of "gossamer" – it's a _tiny_ bit thicker, surely?
-
"MOBY is a spout cover that brightens up the bath while keeping baby’s head safe from bumps." As swissmiss pointed out: adorable.
-
"One of board gaming's most prolific and revered designers, Reiner Knizia, is actively searching for iPhone devs to help bring his games to the iPhone, says industry site boardgamenews." Oooooooooh. That is all.
-
Rails plugin for intelligently searching within your application. Not a bad idea; will probably end up using this at some point.
-
"I would love to see more games that use Flower as a model, not in the copycat sense of being "flying games" or "games where you're the wind," but in the high-level approach that the production implies. Smaller, shorter, higher-fidelity, more focused, more sensate experiences that are affordable, accessible, and digestible. The primary obstacle to one designing a game with these principles in mind seem to be finding an engaging core sensation that fits the constraints. I can't wait to see the results that this challenge brings." Some sensible, and lucid, thoughts on Flower from Steve.
-
Jones has now seen "The President's Analyst" which is, by anyone's standards, a remarkable movie. Especially the bit in the cornfield. And the ending. Anyhow, he's screengrabbed loads of it on Flickr because it's just beautiful.
-
"…the Wii’s software stack is designed with little to no future proofing. There are basically zero provisions for any future updates; even obvious things like new storage devices or game patches. What’s worse is that this will affect the compatibility mode of any future Wii successor." Interesting analysis of what's going on inside a Wii, even if the architecture is a little limited.
-
"I smile. I didn't fool him in the slightest. But it doesn't matter. I didn't fall. Wax on the arm." Lovely.
Heroku – a new addition to the toybox
05 March 2009
You can now find out what Schulze – or anyone else, for that matter – is listening to (as described in this post) on the web; just head on over to http://wotlisten.heroku.com.
The utility of the original command-line script is now diluted even farther – mainly because you now have to go to the website to scrape the web – but that wasn’t really the point of putting wotlisten
online; the point was to see just how easy deploying to Heroku really was.
The answer is: remarkably so. I wrapped the original script into a little Sinatra application, with two views, and a tiny bit of error handling for convenience. Sinatra’s something I’ve been playing with for a while now: it’s really excellent for wrapping small scripts into little webapps with the bare minimum of extra code, and when combined with lightweight tools like DataMapper, and sqlite, just powerful enough for the lightweight tinkering I seem to do so much of. If you’re a Ruby developer and you haven’t played around with Sinatra, you owe it to yourself to check it out – it’s a lovely library to have in the toolbox.
With the webapp written, I installed the heroku
gem, which helped me create a new remote git branch pointing at my Heroku account. Deployment is trivial – far simpler than using something like Capistrano; all that is necessary is to push my master branch to the heroku
remote, and upon a successful push, Heroku notices that I’ve pushed out a Rack application – and it directs requests to it automatically.
It took about ten minutes to write the Sinatra app, and another ten to get it up and running on Heroku; the single snag I ran into was the same as Tom did – the need to unpack haml into a vendor directory.
I’m very, very impressed. It’s all very well being able to build small, trivial toys like wotlisten
, but it’s often a hassle to deploy or configure them. Heroku really takes most of that pain away, and makes setting a tiny Sinatra app live a trivial task. It’s definitely going into my toolbox – or, perhaps, that should be toybox – for the near future.
-
"This jQuery plugin generates sparklines (small inline charts) directly in the browser using data supplied either inline in the HTML, or via javascript." Nifty.
-
"…when we step into the shoes of that avatar, be it 1st-person, 3rd-person or otherwise, we exit the darkened movie theater paradigm and enter an intricate, performative, exploratory lab of untested ideas and speculation. We enter a playful space that feels and responds much more like a live theater rehearsal than an interactive movie or a triggered series of movie clips." Michael debunks the games-as-cinema analogy with an interesting take that considers them as more like theatre rehearsal.
-
"This is not a book about the VCS, nor breakout, nor video games and video game culture; it is a chronicle of the experience of that entity we might call “the player.” Oddly, there is little I can take from it in terms of approaches to video gaming or thoughts on the VCS Breakout. But it did enlarge my perspective and help me think about physiological, cognitive, and, let us say, monomaniacal aspects of video game play. Nervous, very dreadfully nervous Sudnow has been, but why would I say that he is mad?" Sudnow passed away very recently; I really ought to read his book, more than ever.
-
"[s3fm]… lets anyone run a streaming radio station, with just a folder of MP3s. Put those MP3s in an Amazon S3 bucket, and give your friends the S3 FM link."
-
Matt's talk (in English) from Lift 09, on scientific fiction, stories, and the design process. Good stuff – not too long – and wonderfully filmed: the cameraman focuses on his hands as much as his face, which is just perfect.
-
NeoGAF users band together to make a perfect, eight-stage, LittleBigPlanet rendition of Contra. Remarkable, especially the behind-the-backdrop puppeteering that makes the walking-into-the-screen levels possible. This had better not get a takedown slapped on it, because it's phenomenal.
-
"Perfect gift for any World of Warcraft player or other MMORPGer in general. You get one "main" glass and one "alt" glass. Serving idea: fill your main with your alcoholic beverage and your alt with your chaser since mains are typically stronger than alts." Oh dear. (But: good gag, and dangerous for drinking games).
-
"SFZero is a Collaborative Production Game. Players build characters by completing tasks for their groups and increasing their Score. The goals of play include meeting new people, exploring the city, and participating in non-consumer leisure activities."
-
"One of my enduring passions is exploring graphic design with programmatic and generative systems. While some aspects of design require the skilled hand of the designer, others can be formalized and explored by computer. For those tasks, Mathematica is an exceptional tool." Some lovely thinking around generative design.
What’s Schulze Listening To?
20 February 2009
So we listen to music on speakers – not headphones – quite a bit in the studio. Or at least Jack does, because they’re in his batcave.
And sometimes, I’m not sure what’s playing from next door, but I know I like it – and it’d be good to know what it is. Fortunately, Jack mainly listens to last.fm radio (and even if it’s not radio, his iTunes would still be scrobbled).
So I wrote wotlisten.rb
. You can see it (and get it) as a gist on github. It doesn’t use audio recognition, or the last.fm API, or RSS; it uses plain-old screen-scraping.
(Somewhere near the top of my list of coding tools is Hpricot, because it’s a lovely HTML parser that you can scrape with as fast as you can think. Or, at least, as fast as you can write selectors. That was the case here.)
So: you throw in a username, and wotlisten.rb
tells you what they’re listening to. Or what they were last listening to. It doesn’t distinguish between the two – and why should it? This is Situated Software at its most useful: I assume you can hear the music that’s playing, and that you know the last.fm tag for the user playing it (and: until very recently, I assumed that person was Jack Schulze; this updated 2.0 release lets you pass in any username).
It’s unremarkable code in the extreme, but notable for the fact it took ten minutes to bang it out; it came out as fast as I could think it. I’m getting to the point where, especially with Hpricot and similar, this kind of tools is second-nature to write. It’s taken a long while to get there, though.
The script proved useful upon several occasions that day. More to the point, it paid for itself handsomely a few hours later, when we discovered that Schulze was playing Bonnie Tyler’s Holding Out For A Hero.
-
Pup ponders the heat-death of the universe. Beautiful, and a lovely use of space, too.
-
"CRM training encompasses a wide range of knowledge, skills and attitudes including communications, situational awareness, problem solving, decision making, and teamwork; together with all the attendant sub-disciplines which each of these areas entails. CRM can be defined as a management system which makes optimum use of all available resources – equipment, procedures and people – to promote safety and enhance the efficiency of flight operations."
-
Scrapes lots of things, produces a useful page which actually manages to stay up. Also, it spells TRANSPORT CHAOS the only way it should be spelt: in capitals.
-
Named for the year the BJP was founded; nicely written, and not just a fast-moving press release stream.
-
All Kenta Cho's code on wonderfl.
-
Kenta Cho's making stuff on wondfl, in ActionScript. This example is ASCII-based bulletty goodness.
-
"So perverse as it might sound, I'm going to plead for less choice in video games. It's a paradox: by limiting the player's discretion, you can expand the narrative possibilities of the medium. Coercion can create a kind of emotional heft that you can't achieve within the confines of the empowerment-myth." All true, and FC2 is a fantastic example of this. But: this is just one way of making games. More of this, yes, but don't forget all the other approaches.
-
"write Actionscript3 code in a textarea, and your code will be compiled server side. Your compiled Flash will be reloaded automatically in the right side of the page, so write code and see it real-time." And you can fork other people's code. It's like github and Heroku all at once, but for Flash.
-
"An experiment I’ve been running for more than two years now is over: running two Macs is more hassle than it’s worth. I write not to praise synchronisation technology, but to bury it." Roughly what I'd always guessed, but Fraser is careful and detailed, and makes some sensible points. I just hope Aperture doesn't chug as much on the new MBPs as it did on the old ones, for his sake.
-
"Yes people use the Internet to do bad thing, and quite possibly Twitter is one of those services that bad people use. But they also plan bad things in coffee house but for the last 300 odd years we’ve realised that trying to legislate against coffee houses is a bad thing for society." I recently finished Markman Ellis' book on coffee houses, and so Tom's post had a special kind of relevance.
-
A neat summary of what's available out there; I use Blueprint for prototyping, but it's interesting to see what else is available – particularly the more stripped-down frameworks.
-
"A whimsical riff on the bookmobile, Mr. Soriano’s Biblioburro is a small institution: one man and two donkeys. He created it out of the simple belief that the act of taking books to people who do not have them can somehow improve this impoverished region, and perhaps Colombia." Awesome.
-
"Flaming Lips vocalist-guitarist Wayne Coyne brought with him what he dubbed the 'Guitar Hero guitar,' an Epiphone double-neck with the lower, six-string neck replaced by a five-button variant and wired to an oscillator. '[It's] because a lot of kids out there think this is actually the way you play guitar…'" Awesome.
-
An interesting series of concept images of what context-aware, mobile search and data-diving tools might look like. Some neat thinking around transparency and context.
-
"I wanted to take portraits of people that would reveal a hidden part of their character. So I had them play videogames."
-
"Why did Weight Watchers work so well? For a really fascinating reason: because it isn't a normal diet. It's something more. Something fun. It's an RPG." Of course. Fantastic deconstruction from Clive Thompson.
-
Braid papercraft. Delightful.
-
Eesh. Tetris in 500 bytes of Javscript and HTML. Yes, they're obfuscated and unpleasant, but wow, etcetera.
A while back I mentioned that the iPhone App Store was a place where we could see people paying for interface alone, regardless of functionality.
This is a useful segue into Daniel Jalkut’s commentary on the nature of independent software development, and, specifically, whether small-software should be free-as-in-beer software. Jalkut makes the point, as an independent developer, that you should support the software you like, regardless of how slight it is. The example he refers to is Pukka, a nice little tool for posting to delicious from OSX. Pukka is nice because it’s always available and it’s very Mac-like in its behaviour. It’s pretty cheap at $12.95.
Jalkut takes exception to Leo Laporte’s commentary in a MacBreak Weekly podcast, where he suggests (as he tells us how much he loves Pukka) that it should be free.
Why did he suggest this? The answer, simply, is that Pukka is an interface to someone else’s functionality rather than a tool in its own right.
To wit: Pukka interfaces to delicious through the delicious API. Most of the hard work of social bookmarking has already been implemented by the delicious time. All Pukka does is talk to the API – it’s a menubar item, an interface, and a window that sends data to the API. Not a product on its own. Of course, if you know anything about development, you’ll know that building things that talk to APIs – on the desktop, on the web, wherever – isn’t always as easy as it sounds. $14.95 seems reasonably to pay for an app that does this well, especially if you use delicious as much as (eg) I do.
Jalkut’s own MarsEdit (which I’m using a licensed copy of to write this) is similar. It’s a $29.95 weblog editor, that interfaces with most popular blogs, and lets me write posts on my Mac desktop. It’s not that I couldn’t write blogposts before; I can always log into WordPress to do that. No, the reason I bought this is because of the convenience and quality. I rather like posting from this fluid, offline interface, rather than having to type into a box in Safari, for various reasons – the quality and speed of preview, the simplicity of media integration, and the multi-blog (and API) support – I use MarsEdit to post to both WordPress and LiveJournal. If I couldn’t spare $30, I could always just blog from the existing admin screens, but I felt the product was so good I should be it.
Sometimes, it’s hard to express to people the value of a product that does something you could already do. A product that does something new, or which is an essential tool, is much easier to justify. Many Mac owners I know didn’t hesitate to pay the €39 for TextMate, because text editing is so fundamental to our work. But $30 on a blogposting client? That one requires more thought, and isn’t such a no-brainer.
I’m not sure what the solution is. It’s a shame that it’s harder to express the value of “service” applications; I think the iPhone might have it better off here, simply because the device itself is so unlike traditional clients that it makes sense to redesign interfaces to services for it. In the meantime, it’s worth remembering that a quality interface to an existing product might still be worth something, however small, and it’s for that reason that developers like Jalkut should be rewarded for their work.
Demonstrating Snap – the Syndicated Next Action pattern – at Web Directions North 2008
06 February 2008
I recently worked with Matt Webb on a proof-of-concept for a new interaction pattern for web applications, that we’ve nicknamed Snap. Matt demonstrated this pattern in his closing keynote at Web Directions North. Matt’s presentation, entitled “Movement”, is now online, as is a longer explanation of the Snap pattern at the Schulze & Webb blog.
Given Matt’s side of things is now online, it seemed only right that I share my side of the story.
We’re demonstrating a concept that’s previously been referred to as RSS-I – “RSS for Interaction“. This is an idea Matt mentioned in his ETech 2007 keynote, from Pixels to Plastic, and also in a presentation from Barcamp London in 2006. Here’s Cory Doctorow writing about the first mentions of the idea. Matt’s new name for this pattern is a bit catchier: Snap, which stands for “Syndicated Next Action Pattern”.
If you’ve read those links, it’ll describe a certain pattern for interaction. If you’re lazy, and haven’t read them, in a nutshell: what if RSS feeds could prompt you not only to updated and new content, but also actions that need to be performed?
This is the kind of thing best explained with a demonstration. And so Matt asked me to build a small application – a to-do list program – to demonstrate Snap at WDN. Our application isn’t anything fancy, and it won’t replace your GTD app of choice just yet, but it does demonstrate some of the interactions that Snap affords rather neatly.
You can watch a short screencast of the application here (The application is called “Dentrassi”. For more on that, see this footnote).
In the application, a user can add todo-list items to it, set a priority, and “tag” them as belonging to a project. There are several listing views of the data in the application. The inbox shows all items in progress that don’t belong to a project (ie: aren’t tagged). There are list views for each tag, and also for items that have been deferred to the future. So far, so good.
All of this data is also available as Atom feeds. The Atom feeds present the same information as the website, with one neat difference: at the bottom of every item, there’s a form embedded. And in that form, you can do everything you can do to the item on the site: defer it, tag it, complete it, or trash it.
So not only can you read all the data you’d normally see on the site, you can also interact with it, without leaving your feed reader. When you complete a successful interaction, a big tick appears.
The big tick was something we stubmled upon whilst we were making Dentrassi. If you’re on the web-app side of Dentrassi, and you mark an action completed, you get a typical Rails-style “flash message” letting you know what’s happened. This was also the case in the feed, to begin with – you’d post the form, and then the web page would render inside the feedreader’s viewport. Which is OK, but not great. Then we hit upon the idea of treating requests from feedreaders and browsers differently. There’s no magic user-agent-sniffing – the RSS feeds have an extra hidden field, that’s all. When that field is set, you get a big tick (or a big cross, if you try to work on stale data). You can see in the video that Matt’s added a really simple “add another task link” to the “big tick” page in certain states, to speed up task entry. Once the big tick was in place, it started to feel like I was actually making a thing, rather than a hack.
There’s also an extra feed, which we’ve called the admin feed. This only ever has two items: a generic message telling you the state of the system – how many things are in it, how many are completed – and a form that lets you create a brand-new todo. From your RSS reader.
That’s it. It’s not very sophisticated, but it demonstrates the interaction Matt’s described pretty well: the syndication of interaction, rather than content.
What’s the future for this kind of thing? I don’t know. “Enclosures for interactions” was the best way I could describe one future I’d like for it: the idea that endpoints for interactions could be specified just as we currently specify things like referenced media files; then the user interface for Snap is down to the tool, rather than the feed itself. That’s easily the most exciting future, but it requires standards, and toolmaker support, and people like Tim or Sam to be onboard (or whoever the Tim and Sam of Snap might be), and all that takes time.
(And: when you can let the agent define the interface, what interfaces you could build! I suggested pedals – I can have my yes/no tasks up in a window and rattle through them with my feet whilst I’m reading, or writing email, or whatever, just like foot-controlled dictation machines. Because Snap emphasises, rather than obscures, the natural flow state we get into when we’re working our way down a list, it generates a sense of immediacy around the simple action of “doing tasks”. The forms can be contextual to the actions in question – complete/wontfix, yes/no, attend/watch – whilst the actual interaction the user performs remains the same.)
Snap also demands different kinds of RSS readers. Traditionally, readers cache all information, meaning as items “fall out” of the feed they remain within your feed reader. But we don’t want that; we’d like items that fall out to disappear. A Snap feedreader should be an exact mirror of all the atom feeds available to it, not a partial mirror.
That’s precisely the opposite behaviour of existing, content-oriented feedreaders. Right now, most of what we’ve shown is a little bit of a hack: we’re relying on the fact that, for whatever reason, you can use <form>
elements in an Atom feed, we’re relying on this being a local application, for a single user, and we’re relying on it working on a very limited number of user agents (I’ve only tested NetNewsWire and Vienna so far). There’s a way to go before full-scale RSS-I is possible – but there’s nothing to stop people taking a simple, hacky approach right now.
And so that’s what we did. Because a simple, hacky approach that exists beats any amount of RFC-drafting and hypothesising. The most valuable thing we have to show for this so far is that it works.
How it works doesn’t really matter. As such, you’re almost certainly never going to be able to download the source code for this application. The code really isn’t important; it’s not bad at all, but to distribute it would be to miss the point. What we’re trying to demonstrate with this is a particular interaction, and that can be demonstrated through narratives, screengrabs, and screencasts.
That’s all there is to say; Matt’s longer post on his company blog encompasses everything I’ve not mentioned here (and a few things I have), and as such, should be viewed as a companion piece. It’ll be interesting to see what happens from here – how, as things like Action Streams take hold, patterns like Snap have a growing place in the web ecology. It’ll also be interesting to see what happens with, say, standards for these kinds of things – enclosures and the like – and how the tool manufacturers react. All in all, it was a fun project to work on, and I hope other people find the interaction as exciting as Matt and I do.
(Matt mentions that I nicknamed that application “Dentrassi”. I find it useful to have names for things; when I’m sitting at ~/Sites/
and am about to type rails foo
to kick off a new project, it’s nice to have something – anything – to call the application. I thought about DEmonstrating RSSI, and the only word in my head that had things in the right order was DEntRaSSI. The Dentrassi, for reference, are an alien race from the Hitch-Hiker’s Guide to the Galaxy. I’m not a Douglas Adams nut, or anything – it was just the only word in my head at the time. So rails dentrassi
it was, and off we went.)