Archives for June 2007

Introducing Spindle

The n800 has quite a few media players already, and they all have their good points. None, however, seemed to be very useful, or indeed easy to use, while walking; if you want to change song, they all need you to get the n800 out of your pocket, unlock the screen, tap a button, lock the screen again, and put it back.

Having gotten tired of this, I decided to write a media player that worked for me while walking - and did virtually nothing else. The result is Spindle.

Spindle's Main View

For starters, there’s no fiddling around with playlists; you just select the songs/albums you want, and hit play. If you don’t like the song, you can skip it, but there’s no going back (so make sure you have at least 50% good songs in your selection!). Selection is done via a large, finger-friendly interface, with album covers for instant visual recognition.

The best part (and only other real feature) is the ‘locked mode’. Hit the <- button, and the program locks the touchscreen, but not the hardware buttons. You can still hit Fullscreen to skip songs, and the center of the D-pad to play and pause, and you don’t have to worry about stray clicks on the screen while the device is being jolted around in your bag/pocket/whatever.

I must thank Urho Konttori for some of the inspiration here; the UKMP sourcecode has provided a excellent jumpstart to getting things like GStreamer working from within Python. There’s no verbatim copying, but there are a few areas of similarity (I did think about submitting patches to UKMP, but it’s too away from what I am looking to create).

I’ll be releasing an initial beta version soon, so keep a look out.

26 June 2007 | Maemo, Python | No Comments

Meticulously Multitasked Occasional Games

Over the years, many project ideas have sprung into (and out of) my head, but some persist for a worryingly long time. The latest contender in this category is the MMOG, or Massively Multiplayer Online Game.

See, at the start of 2006, I had a great idea; what if there was, like, some game that, like, erm, you could run around with other people that, err, wasn’t an MMORPG. Of course, this gap has already been filled by Second Life, and several other lesser-known contenders.

Oblivious to this, and being rather naive, I decided to have a go at writing such a thing, just to see what it was like. Perhaps rather surprisingly, I got a networked game engine that actually synced, passed events around players and streamed all content over the network. It didn’t do much else, and at this point my exams appeared, and so ‘quspace’, as it was codenamed, languished in my Programs folder.

Recently, though, the implementation of things like Second Life has been bugging me. Even the metaverse evangelists readily admit to its problems, the most important of which seems to be the complete reliance on Linden Labs.

Sure, there are things like the framerate, but the lack of decentralisation really worries me. It’s not a sustainable model - the Internet is, and that’s really very decentralised. So, I got out my thinking tools (some A4 paper and a pen), and decided to think.

I eventually came up with a design for a fully decentralised system, including authentication/identity, multiple worlds, chat, user permissions, and so on. The idea relies on an OpenID-like system, where each user is identified with their username identity server, rather than just by some username which has to be compared againstt a big (central) database.

Worlds need only store information about a user relevant to their system - such as the user’s status in this world, how much of any items they have, and so on. The obvious drawback here is that the items/money/whatever values aren’t shared between different clusters of Worlds, but then why would you want to? If the ‘money’ you have in one world is translatable into something in another, then obviously the two Worlds are somehow related, and a sending/exchange system could be implemented.

It’s quite analogous to something like IRC; while you may be lord and master of one channel, your status means nothing in another. The idea is extended even further, however; the only thing that needs to be common between two worlds is you. If you want some way to build up virtual items and feel good, you’re free to stay on one server. If you want variety, or just to explore, go and visit as many as you can. In this sense it’s like the Web; your profile on Digg has no effect on your profile at Reddit. Things can interact if they want to, but it’s really not necessary.

The problem is that ideas like this are almost doomed to failure. Perhaps, if you get the right combination, make the barrier to entry low enough, and make it popular, it will work, but there’s a lot of competition. Will this deter me from having a go at writing it again? Probably not.

22 June 2007 | General | 5 Comments

LastAftermath

Well, it’s been a few weeks since I released LastGraph upon the world, and around a week and a half since I posted it to the Stats group on last.fm in an attempt to get some users.

Well, it certainly worked.

As I write, it’s already passed the 2500 graphs mark, and that was after the counter was reset during an upgrade, so it’s actually a few hundred more. People just keep coming, from various places; I’ve taken to having a Google Alert on the term ‘lastgraph’, to get some idea of how it’s spreading.

Thankfully, the current hardware is just about up to the load. Over the past few days, I’ve got the site off a very old SQLite and onto a MySQL database; this means I’ve been able to bump up the number of webserving threads from one to around 30 (yes, the old sqlite wasn’t threadsafe). I’ve also improved the graph colouring, and the renderer itself, to make them more efficient and portable.

I’ll soon be releasing a lastgraph render client to the world, so anyone can contribute CPU time to the good cause of making pretty graphics; hopefully, I’ll be able to keep up with the rising number of users that way, and perhaps even be able to give my laptop a rest every now and again.

Email notifications were added this afternoon, so now you don’t need to remember to visit your user page all the time.

You’re all doing a good job of promoting it, anyway. It’s unnnervingly satisfying to check the queue and see that over a hundred users have suddenly appeared out of nowhere. My last.fm profile’s shoutbox is getting the workout it never deserved, and things are generally going pretty well.

There is still work to be done; adding more nodes, adding more options, and trying to make even nicer graphs. But, still, it’s come a long way in a few weeks, and I’m very happy about this. My host may not be, but a gigabyte of bandwith a day isn’t that much transfer, really…

11 June 2007 | General, LastGraph, Python | 2 Comments

LastGraph version two is on the way…

Yes, upgrades are continuing, and somewhat sporadic thanks to exams and a visit back home, but going nonetheless. Colouring now actually works quite well, and more as it does in Lee Byron’s original idea, and the backend system is getting upgrades to support custom colour schemes and proper distributed rendering where nodes can specialise in tasks (because PDF conversion is very specialised, for example).

Stay tuned for more news.

2 June 2007 | General, LastGraph, Python | 2 Comments

LastGraph Upgrades

I’ll be upgrading the LastGraph renderer today, which will involve some render node downtime (I’ll attempt to keep the main site up, however).

I plan to separate the downloading, processing and rendering stages, so I can easily add more nodes (the rendering stage requires Inkscape, so can only be performed on computers with it installed as LastGraph expects), as well as adding in some decent colouring - the current graphs are looking worse with all the little lines removed.

I’ll post again with status updates once I’ve gotten somewhere!

1 June 2007 | General, LastGraph, Python | No Comments