Present Perfect


Picture Gallery
Present Perfect

Developer Productivity Presentation

Filed under: Work — Thomas @ 15:50


Dear interweb,

recently I've been doing a bunch of thinking on how to have productive developers. We've been having some discussions on the topic on the business side, and there are things that I take for granted that aren't always as obvious to the more commercial side. Things like, 'flow is the most important part', 'context switches should be avoided', or 'a 3 month deadline for development with 1.5 months of testing/deployment/... can be given double the development work with only 50% more time'.

So I started thinking it would be nice to be able to give a quick presentation to those people, explaining some of the basic concepts they should consider, and references to back it up (studies, papers, ...) that give some weight to the argument beyond 'trust me, I know because I'm a developer'.

I went out googling for something like this but I didn't find anything, possibly because I don't know what to look for. It seems like something useful for any kind of technical/dev manager.

If you have an idea, please let me know!

Friday night couch surf

Filed under: Hacking — Thomas @ 23:15


It's Friday night, the missus is away from home, and I have the place to myself after work. Most people would spend it either out or on the couch. I went for option two, with a twist - dust off that CouchDB book again and see if we can get it to work this time.

I last tried this a bunch of weeks ago, and couldn't really get a magic mix working of that day's version of the book (it's a work in progress), CouchDB's trunk (it didn't yet have user authentication I think), and Sofa's git master (there's only one branch, master, and it already implemented user authentication from the 0.11 branch). It was a frustrating experience for a newcomer, since when things go wrong because of a version mismatch you end up with obtuse or confusing error messages. The #couchdb IRC channel on freenode was helpful but couldn't offer much more than an apology that the book was in a state of flux.

Today I definitely had more luck. I was able to clone the sofa app, which is a blog example, make a post, and see some JSON action.

Now I understand most of the concepts, but I don't know how to get started. The book explains how to get the sample sofa application and run it, and even customise it, but I don't know how you're supposed to start from scratch.

Again, IRC helped out: there is a 'couchapp generate' command that sets you off with a default structure. After that, I copied the shows/edit.js and templates/edit.html from the sofa example because I thought I'd start out by providing an edit page for my test application.

I was then greeted with an obtuse error message, that included something like this:

[error] [<0.6600.0>] OS Process Error :: {compilation_error,
< <"expression does not eval to a function.

and then a bunch of javascript code expanded from edit.js

I was guessing this was a syntax error somewhere, so I started removing code until I figured out path.js was the culprit. I haven't actually written javascript before outside of a web app, so I wanted to verify by syntax checking the javascript files. Apparently these days you can just install a javascript binary on your system, and sure enough, running that on path.js gave me:

(sandbox)[thomas@ana gtd]$ js vendor/couchapp/path.js
vendor/couchapp/path.js:8: SyntaxError: syntax error:
vendor/couchapp/path.js:8: if (!noJson) && (name == "key" || name == "startkey" || name == "endkey") {
vendor/couchapp/path.js:8: ...................^

While I am no javascript expert, I just randomly guessed I needed additional parenthesises around the if argument, and lo and behold, that fixed my problem.

I went around browsing through couchapp's github pages to see if the code still has that issue, and found this fix (interspersed with unrelated fixes, boo).

A quick check later on IRC told me that there is in fact a newer release than the couchapp I was using (0.3.31 vs. 0.3.32) that somehow easy_install did not pick up on - with a little luck you won't run into the same problem as me.

Anyway, why go through all this detail ? Because it reminds me of an opinion of mine about the five minute run experience of a project. I truly believe that most people evaluate a project within the first five minutes of trying it. People will invest a little bit of their time in your project, increasing the time they spend at each step if the previous step gave them a good feeling and/or a rewarding experience. It usually starts by reading the elevator pitch of your project somewhere. That's a five second read. If that piques their interest, they might follow through on a blog post or go to your website. Another quick step.

If that looks promising, they may read your about page, your FAQ, skim through your introductory chapter if it's short enough, or go look at your screenshots. Maybe a minute ? And if they're still with you, they may try to download and install the software so they can actually run it.

If that is easy (and that means, it's just one click or command - the .exe or an installation instruction for a distro package) you've gotten them to the point where they can actually run the software. If it's harder (a bunch of commands, building from source, dependency hunting, ...) you're likely to loose them. Imagine it's easy and takes a few minutes waiting to download.

Now the clock really starts. Your app has five minutes to convince the user that it actually seems like it's working, has some level of quality, and might do something interesting the user cares about. If the user can do something useful within those five minutes, you've won him over. But if within those five minutes he manages to make the program throw up errors, do something wrong, or just plain crash, or if he can't do anything useful in it, he's likely to discard it completely and go on to the next app he wants to try.

This counts doubly when someone actually needs to do something specific and is just looking for different applications to do the task. If you find ten twitter clients on Freshmeat, how do you decide which one you'll want to use ?

Of course, there are exceptions. So far CouchDB's five minute run experience hasn't been so good compared to everything before it. The elevator pitch is right up my alley, this thing does something I'm interested in exploring. The website ticks all the right boxes, the description is excellent, and that couchdb book looks good.

But then actually trying it quickly became a swamp. Fedora only had 0.9.1 - not CouchDB's fault of course, but the book is written for 0.10 which wasn't released yet. Worse, the book was out of sync with the versions it recommended I use to try it. I didn't make time to look at CouchDB for a few weeks. That was a lucky shot - this time around that part was much better, and I invested an hour in playing with Sofa.

The second roadblock was this couchapp problem. A really minor code bug, but again took me a while to figure out what was going on, not helped by the confusing error message.

Why am I breaking my own five minute run rule here ? Because I want to see if CouchDB lives up to the promise - if it really can do all this replication stuff, it seems like a perfect match for a few of my projects. I'm believing the opinion of a few people I trust. But normally, I would have moved on to playing with one of the other key-value stores instead and give them an equal chance for my developer dollar.

In any case, I'm going to push ahead some more now that I found the bug. Hopefully I have a simple edit and view working sometime this weekend if I find some more time.

Sleepy time!

Where’s my $100K?

Filed under: GStreamer — Thomas @ 21:03


Linked from the blog of the always excellent Harald Welte is this LIMO paper on the economic value of merging back changes to an open source project.

Quoting from there:

Currently, GStreamer comprises some 911,000 SLOC. Using our $50/SLOC factor, this equates
to an equivalent engineering cost of $45.5 million to develop this technology from scratch.

HFSNW! Surely at least $100K of that is my work. Where is my money?

Streaming Media Europe award and panel

Filed under: Conference,Flumotion,Work — Thomas @ 10:50


So, it's now official: Flumotion has won the 'Best Streaming Innovation' award at last week's Streaming Media Europe conference in London. Thank you for all who voted! I'm surprised to see so many people in total vote, that means that there are quite a few real users out there.

I wasn't there myself to accept the award (our commercial team accepted what basically is a technology award, but we get along well enough :)), but I did go on Friday to replace Julien on a panel about the promise and disruoption about Open Source Video (scroll to the bottom).

This was actually my first panel, but I think we did well, especially considering it was the last panel of the day. There certainly were many more questions from the audience then in the transcoding panel I attended earlier that day. The panel was led by Dr. Tsur from Kaltura, an open source video platform.

After the conference I took the underground with Damien from New Bamboo who was also on the panel. They developed Panda, a cloud transcoding solution with the very catchy tagline of 'video solved'. It uses ffmpeg at its core, which might get them in trouble now that they want people to run it as a cloud service, so I suggested he take a look at GStreamer instead. My first suggestion was that it should be doable to provide a drop-in binary replacement with the same interface, but having looked at the output of ffmpeg -h this weekend, I'm not sure anymore - that binary was already complicated to use way back when and it has only exploded further.

In any case, since it's an open tool, maybe someone at work should take a look and see how easy it would be to teach it GStreamer. Or, maybe instead, we should open our own transcoder solution.

Anyway, back to London and the conference. Since the conference was over after the panel and people didn't hing around, I called Lotte, a friend living there, to go have a drink before taking the Eurostar back. And thus it happened. I felt like a real global cosmopolite, having a drink in London after a conference for my Spanish job coming in from Belgium wearing a Spanish jacket, American shoes bought in London, a Florentine shirt, and New York pants.

London 2

Filed under: Travel — Thomas @ 19:47


Arrived in London this morning by Eurostar, slightly under 2 hours from Brussels Midi. Met Lotte and we went to Le Pain Quotidien. I remarked on another successful Belgian export product, and both girls looked at me and said 'It's French.' No it's not. But they wouldn't have it.

Found postcards inside the place that were in English, French, and Dutch. Why would a French bakery in London have post cards in Dutch ? For tourists, they claimed. They still wouldn't give in.

Took me a while to get online to show the website to make sure they finally accepted that Le Pain Quotidien started in Brussels. Sigh - the women I know are wisenoses.

Spent most of the day walking around Spitfields and Camden. Found the Rough Trade store by chance, and they had guests from Barcelona over presenting themselves: scanner fm.

Between that store and a used store on Camden (the one that has Monday discounts where each CD left goes down 1 pound in price) I bought 20 cd's already. I love the powerful euro, London is basically 50% cheaper than I remember it to be.

So, tomorrow, some more walking, meeting up with a partner, possibly doing a job interview with someone for system administration, and Spiritualized performing their seminal 'Ladies and Gentlemen We are Floating in Space' Tuesday evening...

Next Page »