Last.fm

November 25th, 2009

A year or so ago, Last.fm started charging for their service. I was pretty gutted, since I had been listening to Last.fm radio pretty much all day. Sure, it’s okay to charge something for a decent service—and Last.fm is very decent—but what really got up my nose was that they were only charging people who were listening outside of the US, UK and Germany. What’s up with that? The internet is a global market—geography means nothing on the internet.

So I stopped listening.

Anyway, twelve months later and I’ve kinda got over it, so this morning I paid up and became a subscriber. Ah, it’s good to listen to my favourite tracks again :)

Last.fm really is a great service. And as if my battery doesn’t last long enough as it is, I downloaded Mobbler to my Nokia E90. Mobbler is—as the name might suggest—a mobile scrobbler. It’ll scrobble music you play with the Nokia music player, but more importantly, it will stream Last.fm radio.

So, if you haven’t already done so, sign up to Last.fm to track your listening, share your taste in music, discover new artists and check out my profile.

Oh, and I’ve added my listening history to the blog sidebar :)

Getting XML data into Symfony, automatically.

November 3rd, 2009

The problem

We have a complex XML file with many different node types, etc. supplied by a third party via a URL reference.
There’s an initial dump, and then an incremental update every couple of weeks, with additions, deletions and updates.

What I’d like to be able to do is to drive a symfony app with this data.

Some thoughts so far

I’m a symfony noob.

Getting the data

I could manually transform the XML into YAML to create the schema and the initial data load, and then build the app. But I don’t want to have to do this manually for the regular updates. Ideally, I’d like to use the symfony ORM to handle all the transactions, rather than a completely separate (outside symfony) script.

… and some images

The XML also contains URIs for remotely hosted images, and I’d like to be able to automagically pull these down to the local app file system and rewrite the references.

Anything that will help us to get started in the right direction would be greatly appreciated.

Redesigning a corporate web environment

July 14th, 2009

The Challenge

I’ve got this friend who is responsible for a corporate front-end web environment with almost a dozen browser-facing web applications. Pretty much all he can do at the moment is change static content in the antiquated and wildly inappropriate CMS. Changing anything significant requires implementation of an expensive one-off SDLC waterfall-type project with a business case, requirements-gathering, PM, BA, dedicated test-resource – the whole box and dice. These projects often under-deliver, with scope being reduced en route to avoid budget and deadline blowout.

He’s not happy with the way things are.

He’s got it into his head that it would be far better to create an easily-manageable front-end, with a unified, standardised UI under the control of his front-end web team. Key aspects are simplicity, speed, cost-efficiency, and trust – none of which can be used to describe the current state of affairs.

Some ideas

I was talking to my friend, and he said that at a high level, he’d like to abstract the various applications from the UI, where possible, by means of API/Web Services/etc. On the front-end would be a web application framework – He’s thinking Symfony or similar. He believes he has sufficient developer resource on his team to build/maintain/support this.

Some other ideas he’s been tossing around, in no particular order:

  • Source repository. (He doesn’t have one at the moment). svn or git? Stable trunk policy?
  • Continuous integration. (thanks Mike!)
  • Test-driven development.
  • Automated processes.
  • Security.
  • Content management.
  • Performance. Code-efficiency, caching, etc. (Although he’s heard it said that performance shouldn’t become an issue until performance becomes an issue)
  • The database. Does CouchDB lend itself to supporting a content-driven web application?
  • Will it blend scale?

More ideas…

… are welcome. He needs all the help he can get. While it’s all very bluesky (with pie) at the moment, he needs to turn it into a watertight, bulletproof, business case. And soon.

An update

June 12th, 2009

It’s been a while since my last post.

During that while, I’ve returned reluctantly to New Zealand from an incredible 12 months in Switzerland. I was working for an outstanding company (Best Of Swiss Web 2009) on some outstanding projects.

I made some great friends, had some great times, learned to snowboard, lost nearly 15 kilograms, braved rubber bullets and tear gas on the 1st of May, and thoroughly enjoyed myself.

I’m now back in Auckland, and am three weeks into my new job as Web Development Manager at Vodafone. I’m part of a great team and am really hanging out to do great things on/with/through the web :)

Another thing I’m looking forward too is the next Auckland Web Meetup on the 2nd of July. It’ll be great to catch up with friends, eat pizza, drink an Epic, learn more and be inspired.

I’ve got a new mobile number (+64 21 623 923) and am making the most of my Nokia E90 (I know, it’s not an iPhone). I use Twibble as my Twitter client, and am continuously updating my location with Google Latitude. You can see my current location on the sidebar, along with a few feeds of Dan-generated content and links.

Empowered to say ‘No’

March 22nd, 2009

Seth Godin writes in his post License to stall about business-to-business sales. He explains that the majority of people you encounter are empowered to stall, to say ‘No’, since they are easier to train and are safer.

The reason this system evolved is straightforward: the yes people are rare in a typical organization, because they have responsibility and power. So they are busy and need to be protected.

I totally see how this works, but Iimmediately thought that this paradigm was equally relevant in the area of Customer Services.

How often is it that – unless we have a very trivial request – the first person we speak to will be able to help us right away? “I’ll just put you through to so-and-so”, or “I need to talk to my manager/supervisor. Can I call you back?” are par for the course.

I am becoming convinced that for any given company, having quality Customer Service is more important than the quality of their product or service. For a large established company, quality Customer Service seems to me to be more important than sales or acquiring new customers. And yet it seems that the larger the company, the poorer the customer service. They have huge outsourced, off-shore, standardised, systems that have you pushing every number on the keypad before you get through to the wrong department, who aren’t able to help you and aren’t able to transfer you to the appropriate person.

These systems are set up to be defensive – the goal is to reduce cost, which means getting rid of the customer as soon as possible. That is not customer service.

Oh, and customer service also includes website usability, IA and quality of your search tool; read Lance Wiggs’ experience with Dell.

I’ve still not heard back from Dell about the dead graphics adapter in my Inspiron notebook, either. But that’s another post.

Doug Bowman is an outstanding web designer

March 20th, 2009

…who was, until recently, Visual Design Lead at Google.

He now works for Twitter.

It saddens me to see so many people knocking Doug for the less-than-inspiring design work found in many of Google’s products. Take this Gawker / Valleywag article, particularly the comments, for example.

If anyone of these deriders knew of Doug and the standard and quality of the work he produces, they’d be holding their tongues.

It helps to know the full story, so here it is from the horse’s mouth. It also helps to know a bit of background from others, like Joe Clark, and to get a picture of the sort of people that run the show at Google, such as Marissa Meyer.

It’s surprising Doug stuck it out at Google for as long as he did – with such a vast array of products, and what appears to be just one visual designer amongst a multitude of engineers and mathematicians – it must have been an incredibly trying experience.

All the best, Doug, for your move to Twitter! I hope they can really let you go to work, and I can’t wait to see the outcome!

Making 2 million a year from blogging. Without ads.

February 11th, 2009

Read it here.

Sunspider JavaScript benchmarking

December 5th, 2008

I’ve had a blog post in draft for ages, but this isn’t it. The draft post has extensive tables of stats that lie half-finished, but it was getting a bit out-of-hand, so here’s a very abridged version.

The post looked at benchmarking the JavaScript performance of various browsers. Here is a sneak preview:

Browser Speed and tolerance
Firefox 3 (v3.0.4) 3772.6ms +/- 1.3%
Google Chrome (v0.4.154.29) 1808.0ms +/- 6.6%
Opera (v10.00alpha) 4696.4ms +/- 3.6%
IE6 (v6.0.2900.5512 or something) 47651.0ms +/- 15.1%
Safari (v3.1.2) 4260.8ms +/- 5.1%

Of course these stats mean nothing without some explanation, so here goes.
I’m using the SunSpider JavaScript benchmark. You should read what it’s benchmarking – it does a bunch of core JavaScript stuff, like raytracing and string operations and stuff, no DOM or browser API tests.
I ran these tests under Windows XP, on a Dell Inspiron 9300.

My draft post was/is going to also include the browsers on my MacBook Pro, as well as results from the Mootools Slickspeed JavaScript framework benchmark tool.

The results are interesting, especially with IE6 thrown into the mix. The separation between the old and new generations of browsers is clear.
Opera 10.00 alpha was only released yesterday, running on a new rendering engine, Presto 2.2, which utilizes Opera’s new futhark JavaScript engine, and so I expected it to be a bit faster than it is; Safari, FF3, and Chrome are all faster.

Google Chrome is considerably faster that the others.

I do most of my work on the Mac, and so use Firefox with its extensive array of invaluable extensions, particularly Joe Hewitt’s Firebug, and Chris Pederick’s Web Developer Toolbar. On the PC, I use Firefox, and occasionally Chrome, when I feel the need for speed.

Google Chrome

September 2nd, 2008

Google have today released their new web browser, Google Chrome, in beta.

Man is it fast!!!! I’ve been using it this evening and it really flies. While it supposedly uses more memory than other browsers, this use of extra memory is due to the fact that it spawns a new process for each tab, so if, for example, some nasty JavaScript on a particular page decides to strangle your browser, justthat one tab will be affected. And this also alledgedly prevents the memory leaks that plague other browsers.

It’s only available to Windows XP/Vista users at this stage; I’m eagerly awaiting the Mac version.

Any, back to some awesome browsing…

Goodbye .clearfix, old friend.

July 17th, 2008

You all know the old ‘floated elements inside a container cause the container to collapse’ problem?

Well, up until recently, I’d always just called on an old friend, .clearfix, and he’d sorted it out for me. I met .clearfix three or four years ago, and hardly a project has gone by since where I haven’t required his services. You know, I didn’t really ask him how he did it; he’d just quietly go about his job as I directed him, much like Michael Clayton, but without the gambling problem.

But yesterday, when I asked him to help out a colleague for me, little did I know I’d given him his last assignment.

Something happened early this morning – completely coincidentally. A little bird (or rather a tweet) came by and told me that, despite the fact Blueprint CSS uses .clearfix, .clearfix was no longer the way to go. And to be honest, it was almost a relief; the reason I’d never really asked .clearfix how he did his work was that deep down I knew that he was really a hack, and that if I just turned a blind (or ignorant) eye, then I could just pretend like everything was okay and we could all just carry on getting work done.

.clearfix is indeed inelegant, and really is a hack. And would you believe that the alternative solution is not so tricky…
Using overflow: auto; (or overflow: hidden;) on the container with a width will sort it all out for you.
Rather than explain it all here, I’ll just link to a few articles that have already put further effort into describing this:

So, farewell, .clearfix, you’ve served us well.
…and thank you, MB, for the enlightenment.