Monthly Archives: February 2012

A post a day

This post is about regular posting – and changing behaviour. I believe under international law all bloggers are allowed one post about how difficult posting regularly is – this is my contribution to the oeuvre!

A while back I resolved to post more regularly, but as the evidence here shows that resolution was a failure. Then recently I finished reading Switch – How to Change Things When Change is Hard. Changing into a regular poster certainly seemed hard, and I knew I’d failed before. Could Switch help me?

A few key ideas seemed like they could help:

  1. Shrink the Challenge. Instead of trying to post regularly forever, make it for a week
  2. Black and White goal. Instead of posting regularly, change to post every work day. No wiggle room there!
  3. Celebrate progress. Note I’m posting this on Wednesday, having already made 2 posts this week. Yay, I’m 40% of the way there!
  4. Instant habits. Set an “action trigger” for when I’m going to write a post each day. For me, it’s after each day’s scrum meeting.

I don’t yet know if I will succeed in changing into a regular blogger, but so far the techniques seem to be working. More on Switch in a future post…

Memcached can count – pylibmc can’t

In my recent talk to Big Data London I said that memcached can’t count. Turns out that’s not really true, and the problem lies somewhere else.

Here’s the original evidence memcached has counting issues, using Python & pylibmc:


In [2]: cache.set('wibble', 0)

In [3]: cache.get('wibble')

Out[3]: 0

In [4]: cache.decr('wibble', 1)
Out[4]: 0L

In [5]: cache.incr('wibble', 1)
Out[5]: 1L

In [6]: cache.incr('wibble', -1)
Out[6]: 4294967296L

Incrementing by -1 has resulted in memcached incrementing by 2^32-1 – a classic signed/unsigned conversion problem.

But hang on – according to the memcached spec, incr takes unsigned 64bit integers – and it’s an error to send a signed number.

Sure enough, using the ASCII protocol (with memcached 1.4.9):


get wibble
VALUE wibble 0 1
1
END
incr wibble -1
CLIENT_ERROR invalid numeric delta argument

It seems memcached can count after all, or at least refuse to do operations it might get wrong. It’s another question why memcached won’t deal with signed numbers…

So where’s the weird behaviour above coming from? It’s a couple of bugs in pylibmc – bug 74 and bug 73.

The good news? Both bugs are now fixed in the latest github version, so very soon memcached and pylibmc will be able to count. Three cheers – hooray, hooray!

 

UX Sketching – seeing inside the minds of your users

Yesterday I went to a User Experience Sketching session hosted by Devin Hunt from Lyst. I had no idea what UX Sketching was about, but it sounded interesting and some people I follow on Lanyrd were going, so what the heck.

If you haven’t heard of UX Sketching either, it turns out to be a way to see inside the minds of your users and experience your site/product through their eyes. Even better, it’s really simple:

  1. Find a user
  2. Ask them to quickly sketch the page/feature/item of interest
  3. Look at what they draw – and what they don’t draw
  4. Repeat until you’ve got a bunch of data points

By getting the user to draw from memory, you find out what’s most important/salient to them. One example from Devin – on Lyst they had a “Love” feature. Click metrics said people were clicking on it – but it never showed up in sketches. Turns out when they dropped the feature, no-one noticed – it was only being clicked because it was there, not because it was useful.

So when is this tool useful? Obviously, you have to have some users who have some familiarity with the site/feature. It’s no use if they haven’t seen it – so it can’t start a design process for a new feature.

What it can do is tell you where your design is working, or where it’s not. Perhaps you want reviews to be central to a buying page, but users aren’t sketching them. That could trigger a round of design work, mockups, A/B testing etc to see what raises the awareness. Maybe you’re trying to figure out where on a page things should go – looking at where users sketch them will tell you where they intuitively think they should go.

I think seeing through others eyes is one of the hardest things to do in design, so this seems like a great quick, easy way to do it.

Now off to get some users sketching…

Talk at London Big Data meetup

I spoke at the London Big Data meetup a couple of weeks ago about counting, and how difficult it is if you want to count things very very fast. My slides from this are now up here and on Slideshare.

More on the joy of counting soon, including why Memcached can’t count.