The Funky Data Model (Again, Again!)

June 3rd, 2009

Just as I was thinking MongoDB was the bees knees. This pops up…

pickled-object-database - Google Code

… which despite being a clever fudge in which objects are picked (aren’t we all) into a SQLite database does have the advantage of being a SQLite database. Which means that you can run it on a shared server and use existing tools to browse the data you create.

This definitely wins the have your cake and eat it category for storing data this week.

Tagged with:

The Hazel Blears Effect

June 3rd, 2009

What is it about Hazel in particular? She is so loathed…

As George says… Just what exactly do you stand for, Hazel Blears - except election? (via Imran).

Which made me look at my local MP, Hugh Bayley and see what he stands for too. It seems he was pro-Iraq war and is pro identity cards and he hardly ever rebels against their party in this parliament.  Marvellous.  Don’t think he’ll get my vote ever again.

I think there’s an extra well of dirt lurking his (and other MP’s) figures to do with how many times he has voted (only 65% of the time) vs. his travel expenses too.It only needs someone with more brain cells in the maths department than me (Tony Hirst are you listening) to find a way to visualise voting record against distance against amounts claimed for travel.

The thing that keeps re-surfacing in my mind about all this expenses furore is that before, when you could claim for biscuits, duck houses and moat-cleaning - who benefited most? And that of course would be the shady un-named figures who knew what you claimed for. This information would be extremely valuable in times of politcal need.

It’s very easy to imagine a situation, where, needing your vote the “powers that be” would be able to simply call you and make quacking noises, saying “imagine if this was leaked” and you’d be snookered. And, because government isn’t transparent you wouldn’t know if duck houses were a regular expense anyway. Duck houses (and the rest, including travel expenses) was a secret between you and the lovely powers that be that could be regularly mined for persuasive reasons.

And of course, if duck houses, can be used to effectively “tell an MP what to do” then who would be the people who would most want to promote your duck house fetish? It’s them again… the powers that be. Them powers that be get everywhere don’t they?

I wonder exactly how and why so many MPs were so easily suckered. I’d also like Tony to have a go at making an “out of touch with the people” quotient - but for now we can just use their expenses claims.

So, whilst we’re all having fun watching career politicians drop like flies, for me the cost of duck house (apart from being the best metaphor imaginable) is just the tip of an iceberg made of shit (which is a much cruder metaphor) where power gets what it wants simply because idiot MPs are naive, greedy and … twats.

Tagged with:

The Holy Grail of the Funky Data Model

June 2nd, 2009

I’ve blogged about the “Funky Data Model” before…

When I was working with some very clever Oracle database dudes I came up with what I thought was a great idea. The idea was that rather than having database tables for users, pages, blog posts etc that we could have just two tables called “things” and “types of things”.

The Oracle guys rolled their eyes and said everyone goes through this stage of thinking sometime and they even had a name for it… “the funky data model”. They told me that The Funky Data Model, although cool, never, ever works. They were probably right.

But there’s something that keeps pulling me back to The Funky Data model simply because working with relational databases is a bit of a pain. Relational databases really are wonderful things, you put your data in, and if you’ve put it in properly, you can get your data out… quickly.

It would seem like that saving data would be an easy thing for a computer to do, wouldn’t it? It’s not. Well actually, saving data is an easy thing to do but if you ever want to get it back before next tuesday then you are probably going to find that a relational database or two will be in the mix somewhere.

The problem with relational databases is that they are pretty “fixed”. For example, if you want to add a “recipe” that has a title, then all recipes have to have a title, a recipe can’t have two titles. You have to pretty much decide what you are going to put in your database before you put it in. Life (and data) often isn’t like that… it’s messier.

So last week, I thought I’d explore what are called schema-less databases for a day and see how far I got. These databases are less “fixed” than relational ones, closer to my idea of what the funky data model is all about and probably don’t work but I wanted to see if I could maybe take one small step towards the funky data model for the hell of it.

My “plan” was to stick a load of data in and then see how easy (and quick) it was to get out using python (my programming language of choice).

I gave dbxml a wide berth simply because the means of getting your data out, called xQuery seems to require brains I don’t have.

In the morning I tried working with CouchDB. I used MacPorts to install all the dependencies and started adding data. Things were going swimmingly until I discovered that you get your data out by writing snippets of JavaScript. My JavaScript isn’t great, but then JavaScript itself isn’t great. The whole JavaScript-iness of it put me off.

In the afternoon, slightly disappointed with CouchDB, Andy suggested I give the ZODB a whirl. The ZODB is what underpins both Zope and Plone. It’s an object database with a long track record and as you know, very python-friendly. After working with a database for a while I struggled to get the “server part” running on MacOS X called the ZEO. And because I base lots of technological decisions on gut-feelings and tea leaves and because I give up quickly I gave up the ZODB quickly and thought the “there has to better way” thought beloved of many a funky data model hunter.

In the evening, thinking that relational databases weren’t so bad after all, I gave a last ditch trial run to MongoDB. Installation was easy enough and the documentation is very pretty (one of the most important things for geek stuff).

MongoDB is a database that stores its data in dictionaries. A dictionary is a complex enough to store anything, for example a recipe might look like this…

recipe = {'title': "Eggs on Toast",
'ingredients': ["eggs", "butter", "toast"],
'yumminess': 7.5}

… but interestingly, because Mongo is “schema-less”,  I could add extra data to my recipe, an image or “preparation instructions” without requiring all my other recipes to have an image.

Even more interestingly, you can create “collections” simply adding something to a collection. This too is unlike the relational model, where you have to make the container BEFORE you put things in it and you have to decide exactly WHAT A THING is before you can put it into your container. With MongoDB you can simply type…

db.recipes.save( {'title': 'Bacon Sandwich"})

… and not only have you added a recipe, you’ve created the collection called “recipes”. This is staggeringly “fall off the chair” close to what I think of a Funky Data Model.

Now, I know what you’re thinking. You are thinking “Any fool can put data INTO a database, it’s getting it OUT that counts”. And you, as ever, are totally right. How do you do it?

I was pleasantly suprised that you get data out of MongoDB by creating a query that is itself a dictionary. So using my example above, to write a query that gets my bacon sandwich out of the database, I simply …

cursor = db.recipes.find( {'title': "Bacon Sandwich"} )
bacon_sandwich = cursor.find_one( )
print bacon_sandwich['title']

… There! How funky, easy and simple was that? So, I then set about tweaking my engagement engine crawlers to fill up a database to see how it performed in the “getting data out” tests. Within minutes I’d added my database to Django and although I’d only added a few thousand records, it seemed to be able to get them out very quickly and easily indeed. I’d expected my crawlers, which run multiple threads would have blown MongoDB up, but it seemed to cope fine.

Of course, one of the wonderful thing about relational databases is that you can write pretty complex queries that bring you data back quickly (normally). I can see that MongoDB is probably going to struggle when I start looking for recipes that include “bacon” and have a yumminess factor of 8 or above (which is most of them as it happens).

My big problem now, is that when looked in the eye by the Funky Data Model, I realise that, like a blank piece of paper, a totally fluid database is a very daunting thing. Would you create a collection called “recipes” or one called “sandwiches”? Would you create a collection called “ingredients” or, as in the real world, put the ingredients in the sandwich itself? Or both?

So… here I am, really impressed with MongoDB and realising that my brain is still vaguely stuck in relational mode. It seems that with MongoDB I might have to spend a lot more time thinking about how to get my data out, time that you wouldn’t need to spend with a relational database.

I’m planning to give MongoDB a more thorough test in the next few weeks, I’m both excited and scared it’s capabilities, it really might be the funky data model that has eluded me for so long and I may not have the abilities to be able to deal with it.

I’m also planning to be a bit more careful about what I wish for.

Tagged with:

Extending the Django Admin Interface

June 2nd, 2009

This blog post is just a collection of notes I took along the way that might help you if you’ve had a play with the Django Admin and now are wondering how to get a little more out of it.

I have just spent a few weeks working on the first phase of an anlaytics dashboard application that is built using a mixture of Django, jQuery and Flash with the Isotoma crew. The project needed some way to set up the different sites and regions and rather than create these screens “by hand” we decided that the default Django Admin functionality would do this job well.

django_admin

When I first saw the Django Admin screens I was shocked at how much you get “for free”. Having designed your database you can start editing it using screens that look better and work better than many CMSs.  And as a developer, the thought of writing code to do very simple tasks, such as adding data, deleting data, finding data is painfully boring and Django provides this functionality, along with user management, memberships, searching, filtering and permissions … all out-of-the-box.  And did I say it looks nice too?!

The example above shows a “Region listing” screen, that with a few quick tweaks has links to the Region on the site, lovely icons, shows a list of sites in that region and even has a handy dandy plus button that preopulates the site creation form with the relevant region.

Despite Django Admin’s obvious abilities it is often thought of as being “only for the developer” and not something that you’d let a client loose on. And if it was the case that a client wanted bespoke features you would of course need to create your application from scratch, but I believe that the default Django Admin can get you a lot further than you might first assume.

My Approach

All of the Django Admin application is hackable, but I am loathe to hack it willy-nilly because I like to be able to swap in a later version of Django and know that it’ll just work without having to remember a whole heap of tweaks I’ve made to Django Admin files. For this reason, I’m uncomfortable with the gorgeous Django Grappelli project, which adds a shade more visual pzazz to the Django Admin screens because it requires me to alter files in the Django Admin application ( I have a cludge that fixes this though ).

I like things to be simple. Lots of the solutions for extending the Django Admin screens you can find on Django Snippets are a step too far for me, requiring too many inter-dependent settings to work in combination, or worse.

And, with the 3 or 4 Advanced approaches I’ve used (below) you can add functionality to lists of objects, change the way the editing form behaves, add extra functionality to the editing forms AND make it look nice.

The Django Way Of Doing Things

One of the things that irks me about the Django community is that there isn’t the Django recommended way of doing things. The community assumes that I’ll have my own ideas and to force me to accept their arbitrary design decisions would be wrong.

Of course, they are kind of right, but at times I’d like a little guidance on best practice about where to keep your image files, your CSS files etc. I’d like there to be default way of doing things designed by people cleverer than me. I’d like someone to build a version of Django that included WYSIWYG editing on the admin side (with JQuery) and a load of examples of how to use jQuery built into the public site. I want jam on it!

Despite lots of Django applications advertising themselves as pluggable, they rarely are. When I’ve browsed the source code for lots of these applications I’ve found different ways of arranging templates, urls, libraries and graphics, making it almost impossible to drop a Django app into your project and have confidently make the changes that will guarantee it will work.

There a huge list of so-called pluggable apps here. It’s worth exploring how other apps do things just for the hell of it.

The Starter Project Poisoned Chalice?

I have seen Starter Projects being mooted and failed again and again. And whilst I doubt the use of them for anything too complex they are great for sharing a House Style (without dictating it) and for plonking copy & paste example of code for those things you can never quite remember how to do. There are quite a few starter projects on Google Code too.

My Starter Project  is one that I use to do the boring things that always need, often forget to implement but shouldn’t really waste time developing. You the kind of thing, favicons, robots.txt, RSS feeds… but also things like jQuery and the like.

Pretty much every Django project I create has a “templates” folder in which there is a base.html, index.html (which extends base.html). Every project I create has a CSS file somewhere in the mix. I wish that ./manage.py was more “on rails” than it currently is.

A good example of Django’s “hands off” approach is media handling. For example, Django kind of pushes you towards using a “/media/” URL for your Admin media and  folder called “static” for images,css and .js files. Early on I decided that I’d prefer it if this folder was called “media” and set about fixing up the URL handling to “work my way” - which was fine until I tried to integrate other peoples’ code. Other people assumed I wouldn’t be so stupid as to go against the grain and do things my way. Other peoples’ code didn’t work.

I tend to have a folder structure that looks a bit like this…

folders

… with css, images and js folders being used for shared items. In this case my application is called “main” so have a folder called “main” and in that put the css, images and js files used only by this application. The only reason for doing this is that it makes applications very easy to re-use. You simply add them to your settings file, move the media and then wire in the URLs.

There are a number of real  “starter” projects for Django such as this one, which have examples of how to create a blog, events or book databases.

And yes, I appreciate the lunacy of calling my application “main” but it does mean that I can often drop an application folder into Django and know that main.views.index will automatically map onto “/”.

My Misc Application

A frequent pain in the arse (for me) with Django was getting a WYSIWYG editor ( such as TinyMCE ) to play nicely with Django Admin. Ideally, I often want to create an editing interface that both looks and works as good as Wordpress (without having to use PHP).

And with this in mind, I’ve created an application called “Misc” that has WYSIWYG editing installed by default that I can use when setting up a project to check that everything is in the right place and working before I start work on my application proper.

This app can have data bundled with it (in the form of fixtures) and contain a heap of code that I use for reference. For example, it’d be great if Django would auto-generate admin.py files but it doesn’t and I can never remember how to define an Admin class, so having an example to hand makes development quicker.

I always create a constant called LOCAL_FOLDER with the full path to django project for when I’m running it locally and on a server.

I tend to create a “libs” folder and a “scripts” folder at root level and add their paths to sys.path in settings.py

My Standard Imports

As part of my Starter Project approach, there are a number of “must have” additions.

  • Django Evolution. This is, for me, the most essential Django app because it let’s me change my database models and update the database without exporting and re-importing all the data. Whilst it might be useful as a database versioning tool, I’ve never used it to rollback to a previous database schema.
  • Django Filebrower. This is essentially a popup window that let’s you chose files from a given folder integrated into TinyMCE.
  • Django Tagging. This is wonderful. Lots of external apps use it so it’s worth adding it just for that reason.
  • Django Pagination. Great code that lets you do pagination in the template.

Honorable mentions go to…

  • DjangoLogging. This puts debugging information into the response object. Very cool (but watch out when it adds stuff to your Alax responses).
  • Django Extensions. This adds extra commands to manage.py. I already love it for ./manage.py shell_plus alone.

Standard Django Admin Stuff

Getting started with Django admin is great. The latest version of Django has lots of lovely new features to explore. The admin functionality has a raft of features you might not have tried yet… including…

  • Listing viewings list_display can take a function (but a list_filter can’t)
  • Filters are lovely. I almost always create a “modified” field so that I can just see the objects I’ve edited today. Because I can.
  • Default ordering is handy.
  • Slug fields are great (but need a little care) for creating textual urls (or slugs).
  • You can use Fieldsets to re-organise the editing form, and hide things a bit.
  • You can define a function for upload_to in FileFields to make personalised upload folders so that uploaded images don’t overwrite each other.
  • I just discovered the CurrentUserField ( very useful )
  • You can make the names of database classes more friendly with the class Meta: verbose_name_plural in models.py
  • You can put the buttons at the top AND the bottom of a change form.
  • You can add images or links in the listings view by defining a function then adding my_func.allow_tags = True

Warning. Admin.py hasn’t totally evolved from the “old way” of doing things yet. Somethings are still defined in models.py such as the help_text attribute.

Rebranding Your Django Admin Site

Every client wants their admin screens to be branded.They are like that.

And, I’ve found that if you are running lots of Django sites, then for your own sanity making each admin site different really helps. One of the first things I do is to install a proper favicon to make jumping between Firefox tabs more intuitive. Trust me this really helps.

Given that I don’t like hacking the Django Admin code… my solution was to hack the Django Admin code. I did try to copy only the admin files I’d hacked, sort of  overshadowing the templates.  And whilst this is a good idea, it doesn’t work. Django isn’t Zope.

What I do is copy the templates folder from django.contrib.admin into the root of my project and the add it to my settings.py like this…

TEMPLATE_DIRS = ( ’templates’, )

This then means I can hack a logo into admin screens but I always have the fallback of removing my hacked folder and using the vanilla admin screens if it all goes horribly wrong. I can also easily update django in one hit.

In general, you can quickly theme your site simply by editing these files.

  • login_form.html
  • base_site.html
  • base.html

Whether you choose to play with Grappelli, which makes the admin screens even more beautiful is up to you, but I found I could get most of visual eye-candy by simply using their css file and avoid some of the issues they have when it comes to displaying collapsed fieldsets (trust me they’re lovely).

Adding this to my base_site.html

<link rel=”stylesheet” type=”text/css” href=”/static/css/grappelli.css” >

…after having fixed up the paths to media in grappelli.css creates something like this…

grappelli version

Advanced Django Admin Stuff

The features in the standard Django Admin are enough for most projects but I frequently come across issues where I wish there was a way of pushing Django a just that bit further.

As ever, any admin hacking has to take a “light touch” approach (not requiring lots of changes or patches) and not be about jQuery manipulation ( I’m not a JavaScript programmer! ).

Custom Django Forms

When you start using forms.ModelForm then you a whole heap of new features, such as being able to define actions (see below). My only issue with django forms is that when searching for examples you tend to get lots of old newforms examples.

Whilst you can create a Django admin site without touching ModelForms (which is nice)… the more powerful features come when you use these forms.

1. Custom Actions in Object Listings

New in Django 1.0 is the ability to create “actions”. Adding custom actions to the list view (for multiple items) means that you can do things like add an “approve” method to work list of objects, like this..

def approve(modeladmin, request, queryset):
    print queryset # the selected objects
    msg = "Items have been approved"
    self.message_user(request, "%s" % msg)
    approve.short_description = "Approve selected items"
class CountryAdmin( ButtonableModelAdmin ):
    list_display = ['name', 'code', 'small_image_img']
    actions= [approve]

See the http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#ref-contrib-admin-actions.

custom actions

The example above shows both CustomActions and adding HTML to the list_display attribute to show the flag image.

2. Custom Display Widgets in the Change Form

To be frank, editing uploaded images in Django Admin is weak. I tried a number of approaches to improve on how images are handled in and editing form but found that the AdminImageWidget worked for me. To use it, I simple add the class to my admin file and overshadow the render() method. Simple! I can then add this line to my form.

large_image = forms.ImageField(widget=AdminImageWidget() )

You can see a simple example of this in the large and small image above, where I have changed the image widget to also display the image.

3. Custom buttons to the Change form

Lastly, it’s great to be able to add buttons to the editing form (next to the history button). Again, I simply add the  ButtonableModelAdmin class to my admin file and then add a function to my admin class and bingo, my admin forms have new features.

class CountryAdmin( ButtonableModelAdmin ):

    def my_button(self, obj):
         "do something here"
         url = "/admin" + "/".join(str( obj._meta ).split(".")) + "/" + str(obj.id) + "/"
          return HttpResponseRedirect( url )
my_button.url = "my_button"    #puts this on the end of the admin URL. my_button.short_description='My lovely button' buttons = [ my_button,]

You can see “My Lovely Button” in one of the forms above. Isn’t it lovely?

4. Collapsed Fieldsets

Collapsed fieldsets are for when you want to edit lots of messy related objects. I first came across them in the Grappelli theme, and having tried them, there’ no going back.

Collapsed fieldsets really tidy up the interface, but I found another way of achieving the same idea here  http://www.djangosnippets.org/snippets/1492/

In the example below, the Statistics have been hidden by using ‘classes’:['collapse'], in the fieldets attribute, whilst  the Status Messages (a collection of related objects) are hidden using collapsed fieldsets. Both approaches are essential for tidying up a complicated interface.

collapsed fieldsets

A Common Django Admin Gotcha

Apart from old documentation lying around the internet, the most common admin gotcha that still gets me is the one whereby you make a change to your admin.py file, the server noticing the changes, reloads. You then get the error that your model has already ready been registered. Bizarrely, if you then make another request to the server you get a 404. Rebooting the server fixes this.

Conclusions

Having dug around a little I found that it was easier than I thought to…

  • Add actions to lists of objects
  • Add buttons to the edit form of individual objects
  • Create custom widgets for editing individual rows (such as images)
  • Theme the Django Admin without knackering your django install
  • Display related Inlines nicely (ish)

… which for most admin needs, is all you need.

Tagged with:

Growling Tweets

June 1st, 2009

It’s nice to see that John has taken my ropey old AppleScript code to display tweets with Growl and improved upon it here, Growling Tweets - John’s World Wide Wall Display, so that it doesn’t need to use Vienna (why didn’t I think of that?).

And then as if by magic, Pete (I think) shares his Python version to do the same thing.

One of my pet hobby horses (I have a stable full of them) is about how the presentation of dialogue alters what kinds of dialogues we have. The simple version of this might be, “Aren’t most forum tools totally rubbish?”…. or “No wonder twitter visualisation projects get so much attention!”

More later

Tagged with:

The Death of Blogging… Again!

June 1st, 2009

I haven’t blogged in ages, but then, neither have you. It seems much of the blogosphere, meaning you and me, have been lured, entertained and distracted by twittering instead.

Twitter satisfies many of the needs that blogging used to sate. It’s instant, social and fun. But Twitter is so much easier, so easy that even talentless celebs can do it. And Twitter is a much better platform than blogging for “showing off” because one’s followers (or readers) are explicitly “on show”. Measurment is transparent.

But the twitter can’t half be annoying. And when I say “twitter” I mean you … and me. What I hate most is not the people who tweet what they had for breakfast which I quite like, I mean, any sentence with “kipper” in it is automatically improved in my book but the people who ruthlessly self-promote, ALL THE TIME!

Recently I was watching “Question Time” a political UK talk show. The audience and twitter alike were full of tough questions, humour and vitriol and someone (at 10:30PM) tweeted “New Blog Post: 15 ways to increase your traffic”. I’ve got nothing against self-promotion at all, it’s a dirty job and all that, but to push a crappy SEO blog post whilst everyone else is fuming about duck islands, moats and second homes apart from being beyond the pale seems unbelievably one dimensional and boring.

And whilst I’m probably more guilty than you are of mindless bandwagon jumping and I too find myself trotting out excuses about “not having time to blog” and “not quite seeing the point” I’m going to have a bash at old skool blogging again where I simply share what I’m doing, what I’ve done and what I’m thinking about doing in a “think out loud” way. Not with any alterior promotional motives, but just in the hope that it makes a connection for someone somewhere.

You never know.

p.s Like lots of people, I use Google Reader to read my RSS feeds. I had to move to Reader because NetNewsWire simply couldn’t cope anymore and neither could I. News reading had become a chore because Google Reader (apart from having a raft of usability issues) was just so bloody ugly. So thank goodness for Feedly (image above) which makes reading blogs not just easy on the eye but also has enough small usability additions to have me hooked.

Every little helps.

Tagged with:

Launched! The Random Activity Generator

April 2nd, 2009

The RAG iphone app is now available on the AppStore. It’s an educational-inspiration-onometer that generates lots of, well, random and educational activities. It’s hard to explain.

If you want to watch a movie of the app or  find out more about the RAG you can go here http://theragis.us/ or you might want to follow @raggler on twitter (it gives you a randomly creative challenge every day) but I know that deep down all you  want to do is go get your copy right now…. so go on… help yourself….

Tagged with:

These Are Cosmetic Surgery Times

April 1st, 2009

As you are leafing through this month’s copy of Cosmetic Surgery Times ( April 2009 ) you might notice that they’re done a feature on using Social Media and that they’ve used a few of my doodles from Nowhereware to illustrate their articles. It’s really enjoyable to see my doodles “in print” - some hard copies arrived yesterday by post .

It’s been lovely to work with Teresa, one of the few people that seem to get my ahem, random sketches. I’ve even discovered what words like “Surgetiquette” mean ( find out here… @TAMatCST ). But the best part, for me at least, was that this was an enjoyable seed that grew in the rich compost that is social media.

You see, it all came about like this…

I wrote a blog article about Twitter which got taken up and passed on by a social media site. It then got linked to by a blogging surgeon ( who knew they existed? ) which somehow got my details in front of Teresa, the Editor at CST. Teresa, using the undeniable linky powers of hyperlinks then found my doodles, many of which are about social media and read them (all) and thought they’d be great to use in this month’s edition of CST. After a flurry of hand-written letters delivered by hand discussing terms we were ready to go (or maybe we used email).

The rest, as they say, is history… or in this case, doodles about social media in a magazine for cosmetic surgeons. Stranger things have happened, just not to me this week.

Tagged with:

A Tangible Million

March 16th, 2009

Occasionally, certain ideas seem to insist themselves upon me, seeming important, not going away and popping themselves up like toast everyday around breakfast. Lately, it has been the idea that we generally have no idea what a million really is. Not really. Not in a real sense, like how many hairs on your head or blades of grass on a football pitch.

You know, I’m not even sure if a million really exists. I have no way of really knowing, not in an instinctual way . And then there’s all this talk about the economy and bailouts where billions and trillions enter the mix and I think that, as humans that we do take a lot things on trust. We need to, if someone is running past you bleeding shouting BEAR! you would probably not care too much about the tangibility of the bear. Maybe there is no bear… this IS York!

I know it’s my problem, but when trying to understand anything I often visualize it, to make it into something where I can see the big messy picture. Mind maps are great at this. A great way of both representing nearness and re-representing that back to yourself. Doodles are good too… tapping your subconscious for meaning and seeing what it serves up (mileage may vary).

I then often need to nickname items, or create a reference that brings back the essence of the thing. Pattern Languages are great at this because they force you to give each “thing” a catchy title. Catchy titles rock (that could be a pattern in itself).

One “trick” that people often use to help with the problem of understanding big numbers is to introduce time or space into the equation. For example, if a trillion were steps you could walk to Venus etc… Which at times although memorable ( I just made that up by the way) is totally meaningless in that I have no plans to walk to Venus. A hiking trip to outerspace is just not a tangible thing - who could carry the amount of Kendal Mint Cake you’d need? Impossible! Think about the blisters!

Sometimes I try to personalize the thing, to bring the subject down to human size. For example, it’s interesting to note that Chris Garrett ( a local blogger and author and lovely bloke ) has roughly the same number of Twitter followers as people who attend a home match at Bradford City. Knowing that fact alters the way I think about Bradford and his audience, I mean, suddenly twelve thousand, in terms of cheers and boos seems like a LOT of people… intimidating even. When was the last time you spoke to ( and received feedback from ) even a quarter of that many people. It must be weird being a successful blogger or playing for Bradford City.

But here’s the thing, a million people is a very different number to a million pounds (or any object). Nobody may have told you, but people are not the same as things… You heard it here first.

And finally, to really understand something, I need to play with it. For it to become something that really is part of me. I’m like a big baby. Unless I’ve chewed something, it’s not real.

And so, when people try to make any abstract thing real, I applaud them. Especially big numbers which I’m yet to fully believe exist.

See the Visualizing One Trillion Dollars on the Mint.com Blog, it’s great but I immediately want to play with the data. In the “tanks” visualisation, would altering the size of tank to match each country’s spend on defence have improved or ruined the visualisation? I wonder why they didn’t include the table of data they’d collected?

If someone wanted to give you a million quid in used notes, they could probably fit it in a shoe box… if they used large denomination notes and had big feet. A million isn’t what it used to be is it.. and you’d think someone that rich would at least spend something on a nice box… Crikey!

But even the language aspect of numers fails us, I mean, a trillion doesn’t sound a lot more than a billion which is next door but one to a million, in the same way that a tricycle isn’t a lot more than a bicycle, it’s just a bit tricky when speeding around corners.

Now take a look at this

p.s If anyone would like to send me a shoe box stuffed with used notes you really don’t have to wrap it nicely but at least send it registered delivery will you.

Tagged with:

1 of 3. Social Media slides from Tom Smith

March 14th, 2009

Thanks for all the lovely, well, comments about my presentation at ThinkVisibility. Mental?! And I never knew that I never finish sentences… I really don’t…

This video is a sketchy look at some of social media projects I’ve been working on, with a peep at the tool I’ve created to help us with our social media efforts called The Engagement Engine.

1 of 3. Social Media slides from Tom Smith at Think Visibility

Tagged with:

The Man in the White Coat (or My Think Visibility Review)

March 11th, 2009

This weekend I did a session at Think Visibility ( #thinkvisibility ), a mini-conference that brought together a great variety of people who’s lives touch the internet. From marketers to accessibility, geeks, seos and usability people.

All the talks I saw were brilliant and I heard the one’s I didn’t were too.

Who will ever forget Tim’s huge buckets of exploding juice?

I was surprised to discover that Chris Garrett, the blogging guru, is actually a real person and not an alien from the Planet Nice, he even has a northern accent! And he’s genuinely nice with it. I wonder why in my head he was so obviously Californian…

Peter Cooper riffed on Passion, Desire, Dating and Why Journeys are Important, Sales, Speed-Dating and the fact that he’s married. Lucky woman.

Dave Naylor, who I didn’t know as our very own SEO star ( I am celebrity blind ) gave a talk that had an element of jovial menace to it. The best kind of menace in my view. Something we need more of … round your way.

Tom C talked about how to do Reputation Management by taking skin-care seriously, changing sex, getting married and changing your name. He works with MPs you know, they really need this stuff.

Patrick Altoft gave a cool, calm and measured presentation about Supersonic Link Building, which was ironic.

Kieron, shared some of his ingenious ways to make money at Affiliate Marketing…

There are other people’s reviews of the event out there, including NorthSouthMedia, WebsiteDoctor, PoLR, AndrewBurnett, Linda Broughton and JamesWard’s (my own particular favourite review… ahem! which means I can put my hourly rate up a few pence).

Thanks to @Sk8Geek for the photos of the event.

I came away having perhaps drunk one too many, learned loads from the delegates, about more than just SEO, usability, marketing etc.  And a notebook full of great ideas and approaches I’ll be using in the coming weeks.

I reckon Dom won’t have any bother selling tickets for the next Think Visibility, he now just needs to find a venue big enough for the coming demand. See you there!

Tagged with:

New Doodles - The Hole of a Dog

March 11th, 2009

Inspired by a number of strange things, like events and other people … I’ve done a few new social media-ish doodles over on Nowhereware.com ( done with the new drawing app for Mac, Scribbles ).

Tagged with: