elliot's blog

I am a fool

Turns out my music manager script isn't broken. It's just that I'm an idiot. After rewriting it so it no longer needed the Python ID3 library, I realised that the original version had broken because I'd neglected to install python-id3 on my freshly-installed machine. If I read my own instructions I might get somewhere. Once I installed python-id3, the original script worked again. My new version still works (not as well as the original), but is now rendered pointless.

Beta mania

One service I've been trying out recently is Newsvine (I am a beta whore). This has a very sweet interface (which was the main attraction). It's basically supposed to be a "community news service". I don't use it for reading, but have been "seeding" it with news stories (posting a link and a short comment), instead of putting them into del.icio.us (here's my column). If anyone wants an account, I can send an invite (if invites are no longer available from the front-end). I like it, though I wouldn't pay for it.

I have been trying DropSend, which lets you "email" large files easily (I used to use dropload, but it fails all the time even though it tells you your upload worked). But, frankly, the free DropSend account is crap. I tried to upload a file yesterday (around 25Mb) and was told it would take about 20 minutes (uploading at 25Kbp/s). This is due to throttling at the DropSend side, rather than my internet connection (as I was uploading from work where we have a mighty internet connection). It's practically impossible to get a decent idea of how good the service is when it's so crippled. Fair enough, limit number of free uploads a month (you get 5) and amount of space (I think it's 100 Mb); but don't limit how fast the uploads go. That's crazy and makes it impossible to do a reasonable test. Am I likely to pay for a subscription as a consequence? I could be doing them a dis-service, and it might be that they can't cope with demand, so everyone is getting the same upload speed. But in this case, I am also unlikely to pay for a subscription.

The impossibility of choice

I subscribe to a free copy of Computer Weekly, and my punishment is to have to fill in a questionnaire periodically to retain my subscription. This time, I noticed it contained this mandatory question:

No choice here

Err...my answer?..."yes"?


mooch is the new name for my ecommerce system under development (and I'm very pleased I thought of it, finally). This is a long-term project, with the intention being to run it as a side-business while I do other stuff. I've got the domain for it: moochplace.co.uk (mooch.com and mooch.co.uk are taken, though only by domain squatters, and I refuse to be pulled into a bidding war for them). I've started researching options for online payments, began building the infrastructure up (Subversion repository, deployment scripts etc.) so I can start writing the core system, started compiling user stories, etc.. My aim is to write stuff down as it happens (I've been inspired by The White Ladder Diaries, which I am currently reading and enjoying - a diary by a woman starting a small publishing business with a partner), so expect more as I go.

One interesting internal (as in, inside my head) debate I've been having is how to license the code. I'm thinking of offering a hosted service eventually, but wondering whether I should open source the platform code. There is an ecommerce project written in Rails (I am of course thinking of using Rails :) which will be open source: I've been following its progress out of interest, so potentially I could try to join in there, and use that as a base; but think that perhaps the project's aims are more complex than mine. And there is Shopify of course, whose blog is providing some really useful ideas, and whose screenshots are setting the bar for simple elegance in interface design (I'm dying to find out what it's like to use); but it will probably not be open source (although they have open-sourced their Liquid template engine).

I suppose the issue is whether there is likely to be any interest in my project from other developers (would it be worth the hassle of setting up the project and running it?), and whether open-sourcing would actually undermine any market advantage I might create. Is it possible to live from services? What is the danger of other people being able to offer the same service? Opinion seems to be mixed, and I've been reading a variety of blog entries: some stating that a service-based business model is only viable when a product is already wide-spread. So is the better model one suggested in a research paper I read recently (I'll dig out the reference soon): a delayed open-sourcing model, like the one adopted by the Ghostview people, where the latest version is proprietary, while previous versions are open source? Or perhaps the SugarCRM model, where c. 70% of the code is open source, and 30% is closed (John Roberts, the CEO, stated that the 30% closed source is the stuff which was hardest to code). Still mulling it over.

I've been working on a new version of ROROX, incorporating the latest Ruby, an upgrade to Rake (the build tool), SCGI and rails_scgi (rather than FastCGI), and a few more minor improvements. It should be released soon.

Discovered today that my music manager script is broken in Breezy. This is because the mp3 tag manipulation libraries for Python seem utterly, utterly changed. It should be a minor rewrite, so hopefully I'll put a new version up soon. I still use it, but I'm not convinced it's worthy of a SourceForge project.

Been busy revising for PHP Certification, as my exam is next Tuesday. However, I am a bit worried, as according to the study guide, there are likely to be a lot of questions about obscure parts of PHP I never tend to use. Like date formatting (I look it up, and can never remember the format strings), date comparisons (all that time zone stuff is a bit of a mystery to me), and file input/output (how often does a web application write to files?). I'd be alright if it concentrated on databases and web forms, as I know these inside out. Hopefully I'll do well enough to pass, at least.


Amazon Mechanical Turk is a kind of artificial artificial intelligence (sic). Basically, if you are a software developer, you can write code into your program which will submit tasks to the Mechanical Turk website. The tasks get added to a list, from which humans registered with the site can choose. The humans complete the tasks online (the samples they have currently are all US-based and ask opinions on traffic, restaurants, etc. in US cities), and the Mechanical Turk makes the results available to the program which initally set the task. The program presumably has to poll the API periodically to find out if the task has been completed, and picks up the human-generated results when they are ready. These results are then incorporated into the program's inner workings. Interesting. Mad, but interesting. There's got to be some potential in there somewhere...

Selling frenzy

Must get rid of all stuff. Must sell things. So can buy more things. Even found myself thinking tonight (after watching a marvellous documentary where Richard Dawkins basically laid into loads of religious types and told them they were abusing children with their religious lies), I'm unlikely to read Climbing Mount Improbable again, good as it was: sell the bastard, while the public's interest is piqued. Sold on Amazon within about an hour. See that, that's complementary marketing. Put a load of CDs up there as well. GreenMetropolis has also raised a few sales, and is good for stuff which is ubiquitous on Amazon. Although I did stop myself when I was slavering with greed, prowling round the living room for prey to sell, and said enough's enough.

BookmarksToDelicious trundles on

I haven't edited this code in a while, but have released a new version (0.5) after someone requested my code be released under the LGPL, so they could use my Mozilla bookmark parser (in Python). So it's now all under the LGPL. All in all, it has been downloaded 500 times so far, so it's been useful by the looks of things.


Wondering what the music is in an advert? I do all the time.

Want to see Web 2.0 pilloried and mocked in a childish manner?

Need to write into NTFS partitions from Linux, but can't be arsed recompiling your kernel? It works, really it does.

Want to contact your MP? This year must be the year when I get some things off my chest (why haven't I got a wheely-bin, and as a consequence have rats under my shed? why does no one collect my bottles and cans for recycling?).

Many kinds of thing

I've been meaning to write some stuff down for a while, and have it all whirling around in my mind tank. This could be a bit random, so here goes:

  • Doing a bit of ego surfing, I found Afzal Upal's homepage, containing several papers which in turn reference my work. Nice to think that at least one person has made use of my Ph.D. research.
  • I decided I should make an effort to write down some of the things Madeleine currently says and does, as they are both fascinating and hilarious (I know I have very few readers, so it can't hurt for me to be indulgent). I know all children can do them, and we take it for granted, but watching it emerge in your own child is astonishing. I spent 4 years trying to coerce a computer into understanding very simplistic stories which weren't even in English (they were represented as trivial logical statements), and I got nowhere near; in two years, Madeleine can understand 100 times as much as any computer program yet devised:
    • She has taken to saying "Nice X, daddy/mummy". For example, the other night when I was giving her a bath, I leaned over and she said "Nice buttons, daddy". She said to Nicola the other day: "Nice hair, mummy".
    • When I go off to work, I normally call "Bye, honey" to Nicola. Madeleine thinks this is hilarious and has started copying me and calling it out as I go through the door.
    • She has started to work out the concept of time. When I ask her to get out of the bath, for example, she will sometimes say "One minute, daddy" while holding up her forefinger. She also says "Stay here moment" and "Play for a minute".
    • She has been potty training this week (doing very well with few accidents so far) and whenever she sees me on the toilet, she repeats my advice to her: "Hold on tight!".
    • She has worked out what "me" and "own" mean, and will say things like: "Play on own", "Me do it daddy", "Do it self". For a while, I would point at a photo of her and say "That's you", and when asked who it was, she would say "You". She's now realised that "you" and "me" have a semantics dependent on context (in fact, she's grasped the idea of what pronouns are, which is incredible).
    • She has started applying quantitative adjectives to nouns. For example, at the moment she says "Too much dark" when she goes to bed if we pull the door shut too far.
    • She is very adept at memorising nursery rhymes, and can recite "Mary, Mary, Quite Contrary" and "Pop Goes the Weasel". Not word perfect, but you can tell what they are.
    • She makes analogies between disassociated objects. For example, she has a water wheel in the bath, which one day all of a sudden she started rocking back and forth and singing "See Saw Marjorie Daw"; and she has a bowl with a picture of a wand, and made a connection with one of her favourite books, "Room on the Broom", which also features a wand. This transfer of concepts between domains is amazing.
    • She loves books, and her current favourites are "The Cat in the Hat", "The Cat in the Hat Comes Back", "The Gruffalo", "The Gruffalo's Child", "Room on the Broom", "Where's My Teddy?", and "The Hairy MacLary Omnibus".
  • My status in Ultracorps is slipping considerably, and I've lost my early momentum in the game. Never mind. I've started thinking about my own space strategy game.
  • I've got a paid account for Backpack now. This gives me neat to-do lists, "writeboards" (collaborative whiteboards), reminders, a limited amount of file upload space, and a few other bits and pieces. It's handy as an online notepad for scratching stuff on. Also it is a great example of the real potential and usefulness of AJAX for enabling web interfaces.
  • I've joined the development team for Instant Rails, as some of their aims overlap with those of ROROX. They are a really friendly bunch, and I'm looking forward to working with them. Their emphasis seems to be more on writing a Rails management environment for developers, while ROROX is pretty low tech and only for advanced users. I'm also interested in pursuing SCGI as a method for running Rails, which is what Instant Rails uses. They are also on the verge of moving to XAMPP (which I love) from EasyPHP, so they can go cross-platform (currently Instant Rails is Windows-only).
  • I dallied with a new work laptop over Christmas, the gorgeous little Sony VAIO TX1. It worked OK with Ubuntu "Breezy", but not brilliantly: suspend didn't work, it inexplicably refused to power off when I was at work, the keyboard was a bit small, the screen made me squint, I couldn't turn off mouse taps on the touchpad, the volume control buttons didn't work, etc.. The main thing it had going for it was that it was very light. However, I had a hardware failure last weekend, so on Monday and Tuesday I moved back to my IBM Thinkpad T42. This is a beautiful machine. The screen isn't at such a high resolution as the VAIO, but I can read it; the keyboard is the best of any laptop I've ever used; suspend works (!) - for the first time on any Linux laptop I've ever owned; and I can turn off touchpad taps. I don't think I'll be tempted away again.
  • Much of today and yesterday has been spent rewriting my PHP code examples and slides for my PHP/MySQL course (I'm doing a 4 day course in February). One thing I like to have is a set of code samples which incrementally grows, mirroring how we build it during the course: so I have the code as it exists at the end of each exercise. In the past, I've done this using copying, but this causes havoc if I change something in an early version and have to forward propagate it to later versions. I decided Subversion would be the solution: I would tag the code as I was developing it with the exercise number, so I would in effect have multiple copies, but should be able to do forward-propagation more easily.
    However, it turns out forward-propagating changes in Subversion from one copy to another is not trivial. Much of the last two days was spent working out how to do this. I also put together a Ruby script to encapsulate what I found out. So what happens now goes like this: let's say I have four exercises: ex1, ex2, ex3, and ex4. These are basically tagged snapshots of the codebase, where ex1 < ex2 < ex3 < ex4 (in terms of time); ex2 contains all of ex1, ex3 contains all of ex2, and ex4 contains all of ex3.
    If I change something in ex1, I want this to be reflected in ex2, ex3, and ex4 (i.e. I want to forward-propagate the changes to those snapshots). The procedure for this goes as follows:
    • Check out all the snapshots into a temporary directory; each snapshot ends up in a sub-directory with the same name as its tag (so I get ex1, ex2, ex3, ex4 directories).
    • Enter the ex1 directory and make edits.
    • Get the revision number of the working copy in ex1 (call it M).
    • Commit the changes to the ex1 tag in the repository.
    • Update my working copy ex1 from the repository (which is a new revision).
    • Get the revision number of the working copy in ex1 again (call it N).
    • For each working copy WC which is a later snapshot than ex1 (i.e. the snapshots in ex2, ex3, ex4):
      • Get the changes between M and N which occurred in ex1.
      • Apply those changes to the WC.
      • Commit WC back to the snapshot in the repository.
  • Sounds complicated, and it is. It is also a bit fragile, relying on a fixed directory structure and a particular naming scheme for directories and snapshots. But it does work, and will save me a lot of manual editing and breaking stuff. (By the way, as well as being great to work with in Rails, Ruby is a fantastic language for shell scripts - easily better than Bash, and better than Python.) I've attached my subversion change propagation script for reference below.

Telemarketer counter-script

This is really cool! I will definitely be printing a copy and using it on any unwanted phone callers.

Syndicate content