Letters to the future
On one hand, it shows optimism, hope and compassion for the future of the planet. On the other hand, it shows the ever lasting detriment of our actions when it comes to single-use plastic.
On one hand, it shows optimism, hope and compassion for the future of the planet. On the other hand, it shows the ever lasting detriment of our actions when it comes to single-use plastic.
The French have a wonderful phrase, lesprit de l’escalier. It describes that feeling when you’ve stormed out of the room after an argument and you’re already halfway down the stairs when you think of the perfect quip that you wish you had said.
I had a similar feeling last week but instead of wishing I had said something, I was wishing I had kept my mouth shut.
I have an annoying tendency to want to get the last word in. I don’t have a problem coming up with a barbed quip. My problem is wishing I could take them back.
This happened while I was hosting the conference portion of UX Fest last week. On the hand, I don’t want the discussions to be dull so I try to come up with thought-provoking points to bring up. But take that too far and it gets ugly. There’s a fine line between asking probing questions and just being mean (I’m reminded of headline in The Onion, “Devil’s Advocate Turns Out To Be Just An Asshole”).
Towards the end of the conference, there was a really good robust discussion underway. But I couldn’t resist getting in the last word. In the attempt to make myself look clever I ended up saying something hurtful and clumsy.
Fucking idiot.
I apologised, and it all worked out well in the end, but damn if I haven’t spent the last week on the staircase wishing I could turn back time and say …nothing.
Hot nuclear blasts in your area.
(like Eric’s HYDEsim)
While not every white man who dislikes The Last Jedi overtly dislikes its gender balance or diversity, many feel a level of discomfort with this film that they can’t name, and that expresses itself through a wide variety of odd, conflicting complaints about its filmmaking.
If you haven’t seen The Last Jedi (yet), please stop reading. Spoilers ahoy.
I’ve been listening to many, many podcast episodes about the latest Star Wars film. They’re all here on Huffduffer. You can subscribe to a feed of just those episodes if you want.
I am well aware that the last thing anybody wants or needs is one more hot take on this film, but what the heck? I figured I’d jot down my somewhat simplistic thoughts.
I loved it.
But I wasn’t sure at first. I’ve talked to other people who felt similarly on first viewing—they weren’t sure if they liked it or not. I know some people who, on reflection, decided they definitely didn’t like it. I completely understand that.
A second viewing helped to cement my positive feelings towards this film. This is starting to become a trend: I didn’t think much of Rogue One on first viewing, but a second watch reversed my opinion completely. Maybe I just find it hard to really get into the flow when I’m seeing a new Star Wars film for the very first time—an event that I once thought would never occur again.
My first viewing of The Last Jedi wasn’t helped by having the worst seats in the house. My original plan was to see it with Jessica at a minute past midnight in The Duke Of York’s in Brighton. I bought front-row tickets as soon as they were available. But then it turned out that we were going to be in Seattle at that time instead. We quickly grabbed whatever tickets were left. Those seats were right at the front and far edge of the cinema, so the screen was more trapezoid than rectangular. The lights went down, the fanfare blared, and the opening crawl begin its march up …and to the left. My brain tried to compensate for the perspective effects but it was hard. Is Snoke’s face supposed to look like that? Does that person really have such a tiny head?
But while the spectacle was somewhat marred, the story unfolded in all its surprising delight. I thoroughly enjoyed the feeling of having the narrative rug repeatedly pulled out from under me.
I loved the unexpected end of Snoke in his vampiric boudoir. Let’s face it, he was the least interesting part of The Force Awakens—a two-dimensional evil mastermind. To despatch him in the middle of the middle chapter was the biggest signal that The Last Jedi was not simply going to retread the beats of the original trilogy.
I loved the reveal of Rey’s parentage. This was what I had been hoping for—that Rey came from nowhere in particular. After The Force Awakens, I wrote:
Personally, I’d like it if her parentage were unremarkable. Maybe it’s the socialist in me, but I’ve never liked the idea that the Force is based on eugenics; a genetic form of inherited wealth for the lucky 1%. I prefer to think of the Force as something that could potentially be unlocked by anyone who tries hard enough.
But I had resigned myself to the inevitable reveal that would tie her heritage into an existing lineage. What an absolute joy, then, that The Force is finally returned into everyone’s hands! Anil Dash describes this wonderfully in his post Every Last Jedi:
Though it’s well-grounded in the first definitions of The Force that we were introduced to in the original trilogy, The Last Jedi presents a radically inclusive new view of the Force that is bigger and broader than the Jedi religion which has thus-far colored our view of the entire Star Wars universe.
I was less keen on the sudden Force usage by Leia. I think it was the execution more than the idea that bothered me. Still, I realise that the problem lies just as much with me. See, lots of the criticism of this film comes from people (justifiably) saying “That’s not how The Force works!” in relation to Rey, Kylo Ren, or Luke Skywalker. I don’t share that reaction and I want to say, “Hey, who are we to decide how The Force works?”, but then during the Leia near-death scene, I found myself more or less thinking “That’s not how The Force works!”
This would be a good time to remind ourselves that, in the Star Wars universe, you can substitute the words “The Force” for “The Plot”—an invisible agency guiding actions and changing the course of events.
The first time I saw The Last Jedi, I began to really worry during the film’s climactic showdown. I wasn’t so much worried for the fate of the characters in peril; I was worried for the fate of the overarching narrative. When Luke showed up, my heart sank a little. A deus ex machina …and how did he get here exactly? And then when he emerges unscathed from a barrage of walker cannon fire, I thought “Aw no, they’ve changed the Jedi to be like superheroes …but that’s not the way The Force/Plot works!”
And then I had the rug pulled out from under me again. Yes! What a joyous bit of trickery! My faith in The Force/Plot was restored.
I know a lot of people didn’t like the Canto Bight diversion. Jessica described it as being quite prequel-y, and I can see that. And while I agree that any shot involving our heroes riding across the screen (on a Fathier, on a scout walker) just didn’t work, I liked the world-expanding scope of the caper subplot.
Still, I preferred the Galactica-like war of attrition as the Resistance is steadily reduced in size as they try to escape the relentless pursuit of the First Order. It felt like proper space opera. In some ways, it reminded of Alastair Reynolds but without the realism of the laws of physics (there’s nothing quite as egregious here as J.J. Abrams’ cosy galaxy where the destruction of a system can be seen in real time from the surface of another planet, but The Last Jedi showed again that Star Wars remains firmly in the space fantasy genre rather than hard sci-fi).
Oh, and of course I loved the porgs. But then, I never had a problem with ewoks, so treat my appraisal with a pinch of salt.
I loved seeing the west of coast of Ireland get so much screen time. Beehive huts in a Star Wars film! Mind you, that made it harder for me to get immersed in the story. I kept thinking, “Now, is that Skellig Michael? Or is it on the Dingle peninsula? Or Donegal? Or west Clare?”
For all its global success, Star Wars has always had a very personal relationship with everyone it touches. The films themselves are only part of the reason why people respond to them. The other part is what people bring with them; where they are in life at the moment they’re introduced to this world. And frankly, the films are only part of this symbiosis. As much as people like to sneer at the toys and merchandising as a cheap consumerist ploy, they played a significant part in unlocking my imagination. Growing up in a small town on the coast of Ireland, the Star Wars universe—the world, the characters—was a playground for me to make up stories …just as it was for any young child anywhere in the world.
One of my favourite shots in The Last Jedi looks like it could’ve come from the mind of that young child: an X-wing submerged in the waters of the rocky coast of Ireland. It was as though Rian Johnson had a direct line to my childhood self.
And yet, I think the reason why The Last Jedi works so well is that Rian Johnson makes no concessions to my childhood, or anyone else’s. This is his film. Of all the millions of us who were transported by this universe as children, only he gets to put his story onto the screen and into the saga. There are two ways to react to this. You can quite correctly exclaim “That’s not how I would do it!”, or you can go with it …even if that means letting go of some deeply-held feelings about what could’ve, should’ve, would’ve happened if it were our story.
That said, I completely understand why people might take against this film. Like I said, Rian Johnson makes no concessions. That’s in stark contrast to The Force Awakens. I wrote at the time:
Han Solo picked up the audience like it was a child that had fallen asleep in the car, and he gently tucked us into our familiar childhood room where we can continue to dream. And then, with a tender brush of his hand across the cheek, he left us.
The Last Jedi, on the other hand, thrusts us into this new narrative in the same way you might teach someone to swim by throwing them into the ocean from the peak of Skellig Michael. The polarised reactions to the film are from people sinking or swimming.
I choose to swim. To go with it. To let go. To let the past die.
And yet, one of my favourite takeaways from The Last Jedi is how it offers a healthy approach to dealing with events from the past. Y’see, there was always something that bothered me in the original trilogy. It was one of Yoda’s gnomic pronouncements in The Empire Strikes Back:
Try not. Do. Or do not. There is no try.
That always struck me as a very bro-ish “crushing it” approach to life. That’s why I was delighted that Rian Johnson had Yoda himself refute that attitude completely:
The greatest teacher, failure is.
That’s exactly what Luke needed to hear. It was also what I—many decades removed from my childhood—needed to hear.
A really nice interactive timeline of data from ten years of scrobbling music to Last.fm.
This is rather brilliant: recycle your old credit cards into plectrums.
An excellent little service: give it your Last.fm username and it finds music blogs you’ll probably like. I’ve found a treasure trove of Huffduffer sources through this.
Matt encapsulates a lot of what I've been thinking about recently: the real-time web is all well and good, but let's not forsake the enormous potential for fulfilment in archives.
A great write-up of the latest additions to the Guardian's Open Platform API including a lukewarm assessment of Semantic Web technologies like RDF.
Best. Robots.txt file. Ever.
A cute little mashup: find out what you were listening to according to Last.fm when you were posting to Twitter.
I’ve already described how machine tags on Huffduffer trigger a number of third-party API calls. Tagging something with music:artist=...
, book:author=...
, film:title=...
or any number of similar machine tags will fire off calls to places like Amazon, The New York Times, or Last.fm.
For a while now, I’ve wanted to include Flickr in that list of third-party services but I couldn’t think of an easy way of associating audio files with photos. Then I realised that a mechanism already exists, and it’s another machine tag. Anything on Flickr that’s been tagged with lastfm:event=...
will probably be a picture of a musical artist.
So if anything is tagged on Huffduffer with music:artist=...
, all I need to do is fire off a call to Last.fm to get a list of that artist’s events using the method artist.getEvents
. Once I have the event IDs I can search Flickr for photos that have been machine tagged with those IDs.
There’s just one problem. Last.fm’s API only returns future events for an artist. There’s no method for past events.
Undeterred, I found a RESTful interface that provides the past events of an artist on Last.fm. The format returned isn’t JSON or XML. It’s HTML. It turns out that past events are freely available in the profile for any artist on Last.fm with the identifier last.fm/music/{artist}/+events/{year}
. Here, for example, are Salter Cane gigs in 2009: last.fm/music/Salter+Cane/+events/2009
.
If only those events were structured in hCalendar! As it is, I have to run through all the links in the document to find the href
s beginning with the string http://www.last.fm/event/
and then extract the event ID that immediately follows that string.
Once I’ve extracted the event IDs for an artist, I can fire off a search on Flickr using the flickr.photos.search
method with a machine_tags
parameter (as well as passing the artist name in the text
parameter just to be sure).
Here’s an example result in the sidebar on Huffduffer: huffduffer.com/tags/music:artist=Bat+for+Lashes
It’s messy but it works. I guess that’s the dictionary definition of a hack.
A few weeks back, I saw that Fanfarlo were going to be playing at The Hanbury Ballroom in Brighton this Wednesday. I figured I’d probably end up going to the gig so I marked myself as “maybe attending” on the event page on Last.fm.
Fast forward to last week and I’m browsing through the list of upcoming events in Brighton on Last.fm. I see that The Fiery Furnaces will be playing in The Prince Albert on October 7th. When I click through to the event page, this is what I see:
Don’t forget you might be going to Fanfarlo at The Hanbury Club on the same date.
That’s nice. That’s really nice. It’s a small touch but it’s the combination of all those small things that adds up to a pleasant experience. This felt …thoughtful.
Of course, it still doesn’t change the fact that I have to choose between Fanfarlo and The Fiery Furnaces.
Rev. Dan Catt's augmented reality future is here; it just isn't evenly distributed yet.
I know I’m not the sharpest knife in the drawer but there’s one recurring topic that makes me feel downright stupid. I’ve heard a lot of my fellow designer/developers talking about how page zoom (rather than text zoom) spells the death of liquid layouts.
Now, forgive me for being dense, but I just don’t get it. I totally understand how page zoom could spell the death of elastic layouts; using ems for layout won’t be necessary if browsers natively resize pixel-based layouts. But both pixel- and em-based layouts have a set width and that width doesn’t change depending on the width of the browser window.
A liquid layout will resize depending on the browser width, right? Page zooming doesn’t do away with that flexibility. If I open a fixed or elastic width page in a browser window that’s narrower than the size dictated by the designer
, I’ll get a crawlbar. Now I could use the browser’s page zoom feature to shrink down everything until the content fits within my browser window but the content would become illegible.
Text-resizing and viewport-resizing are related only in as much as they are both ingredients in good bulletproof design:
Native page-zooming in browsers obviates the first concern. It does absolutely nothing for the second concern.
I’m perplexed. Either a whole swathe of my peers are confusing elastic and liquid layouts or I’m missing something fundamental.
A more plausible explanation for this strange equation of page zoom and liquid layout mortality is that designers
who have already decided that they don’t want to deal with liquid layouts—for the very understandable reason that they’re harder to do than fixed layouts—are attempting to retroactively justify that decision without really thinking through the argument.
Rather than clutching at ill-thought-out strawmen like page zooming, their time might be better spent reading a good book.
After I wrote about the hoops I had to jump through to get Amazon’s API to output JSON (via XSLT), Tom detailed a way of avoiding JSON by using XML-RPC. That’s very kind of him but the truth is that:
Anyway, having successfully created a Huffduffer-Amazon bridge using machine tags, I thought I’d do a little more hacking. Instead of restricting the mashup love to Amazon, I figured that Last.fm would be the perfect place to pull in information for anything tagged with the music
namespace.
Last.fm has quite a full-featured API and yes, it can output JSON. To start with, I’m using the artist.getInfo
method for anything tagged with music:artist=...
, music:singer=...
or music:band=...
. Here are some examples:
I’m pulling a summary of the artist’s bio, a list of similar artists and a picture of the artist in question. For maximum effect, view in Safari, the browser with the finest implementation of CSS3’s box-shadow
property.
Nice as Last.fm’s API is, it’s not without its quirks. Like most APIs, the methods are divided into those that require authentication (anything of a sensitive nature) and those that don’t (publicly available information). The method user.getInfo
requires authentication. Yet, every piece of information returned by that method is available on the public profile.
So when I wanted to find a Last.fm user’s profile picture—having figured out through Google’s Social Graph API when someone on Huffduffer has a Last.fm account—it made far more sense for me to use hKit to parse the microformatted public URL than to use the API method.
Just over two years ago, Drew delivered a superb presentation called Can Your Website Be Your API? In some situations, the answer is definitely “Yes.”
Update: It all ties together, as Julian explains on Twitter:
@adactio ha, I went to Drew’s presentation you mentioned on your blog; it made me add microformats to Last.fm in the first place :D
One of the runners-up in the Last.fm hackday, this is a simple little service that tells you what band you should be listening to.
The Last.fm hack day took place in London yesterday. Much nerdy fun was had by all and some very cool hacks were produced.
Nigel made a neat USB-powered arduino-driven ambient signifier à la availibot that lights up when one of your friends is listening to music. Matt made Songcolours which takes your recently listened-to music, passes the songs through LyricWiki, extracts words that are colours, passes them through the Google chart API and generates a sentence of cut up lyrics (Hannah’s was the best: love drunk home fuck good night
). The winning hack, Staff Wars, is a Last.fm-powered quiz that allows people to battle for control of the office stereo—something that could prove very useful at Clearleft.
I knew I’d never be able to compete with the l33t hax0rs in attendance, so I cobbled together a very quick little hack to enhance Huffduffer. I hacked it together fairly quickly which gave me some time to hang out with Hannah in the tragically hip environs of Shoreditch. My hack has one interesting distinguishing feature: it doesn’t make use of the API. Instead, it uses two simpler technologies: microformats and RSS.
rel="me"
. If that URL also links back to the Last.fm profile with rel="me"
—even if in a roundabout way—that reciprocal link will be picked by Google’s Social Graph API. I’m already making use of that API on Huffduffer to display links to other profiles under the heading Elsewhere. So if someone provides a URL when they sign up to Huffduffer and they’re linking to their social network profiles, I can find out if they use Last.fm and what their username is. The URL structure of user profiles is consistent:
http://www.last.fm/user/USERNAME
.enclosure
s. The URL structure of these podcasts is consistent: http://ws.audioscrobbler.com/2.0/user/USERNAME/podcast.rss
.So if, thanks to magic of XFN, I can figure out someone’s Last.fm username, it’s a simple matter to pull in their recommended music podcast. I’m pulling in the latest three recommended MP3s and displaying them on Huffduffer user profiles under the heading Last.fm recommends
. You can see it in action on my Huffduffer profile or the profiles of any other good social citizens like Richard, Tom or Brian.
This isn’t the first little Huffduffer hack I’ve built on top of the Social Graph API. If a Huffduffer user has a Flickr account, their Flickr profile picture is displayed on their Huffduffer profile. When I get some time, I need to expand this little hack to also check for Twitter profiles and grab the profile picture from there as a fallback.
None of these little enhancements are essential features but I like the idea of rewarding people on Huffduffer for their activity on other sites. Ideally I’d like to have Huffduffer’s recommendation engine being partially driven by relationships on third-party sites. So your user profile might suggest something like, You should listen to this because so-and-so huffduffed it; you know one another on Twitter, Flickr, Last.fm…