Archive for November 2007

The Eighth ‘Open’

Earlier, Marc posted a story on KMi planet about the 7 opens in MSG, well, I’ve started to make that 8 😉 as I’ve finally got round to spending a bit of time looking at OpenID.

I’d spent a little bit of time last week looking at the draft of the OpenID book, which explained all the processes well of how it all works, but I struggled a little with the actual example in chapter 5 (or was it 6?!) – following how the URLs & packets matched the workflow previously explained.

This evening, I installed the JanRain PHP OpenID library on my laptop, so I now have a (dummy) OpenID identity provider and consumer up and running on my laptop. The instructions were for setting up on *nix server, but runs fine (with few tweaks to the instructions) on Windows (XP with PHP5) too. What I’ve done is all pretty basic, and probably quite insecure as I’m not using SSL or a ‘proper’ random number generator – but will be good enough for playing with. I hope to be able to rewrite the server part into Java/JSP as that’s what we’re going to be running it on. Although it may seem a little odd just rewriting (esp. when Java libraries already exist for OpenID) but my thinking is that doing it myself should help a lot in my actual understanding of how it all works… possibly!

Volunteer Passport: Launch of ePortfolio system

Volunteer Passport screenshot

Over the last couple of months, in my spare time, I’ve been volunteering doing some programming work for the BTCV (British Trust for Conservation Volunteers) on their Volunteer Involvement Team to develop a “Volunteer Passport”. I’ve been volunteering with BTCV for a number of years, but always on their conservation work projects, so doing programming for them was a little more like my normal day job 😉

What they needed from the Volunteer Passport system was somewhere their key volunteers could record their learning experiences/objectives, skills, courses etc… so essentially an ePortfolio system. So rather than building something from scratch, I’ve adapted ELGG to add in the extra functionality required for the Volunteer Passport – this mainly involved updating the edit profile section to allow for skills and courses entry.

The system is now live on the BTCV servers at: and we’re presenting it at the BTCV volunteers conference this weekend. It’s still not fully complete, there is plenty more functionality that we’d like to add, as well as getting it more closely integrated with existing BTCV IT systems, but it is a working system, so feel free to sign up and have a play 🙂 We’ve created a forum for feedback, so if you have comments, queries or suggestions please post them there.

For those interested I’ve used Google Code as the source code repository for the work I’ve done (see: I know there are other (voluntary) organisations who are very interested in what we’re doing, with a view to creating their own, so all the code I’ve written is open source and freely available to anyone who wants to use it 🙂

Importance of being indexed

We noticed the other day that the MySQL process on one of our MSG servers was using up far more resources that it should do. After a little investigation it turned out that the problem was due to one very slow running query. The query in question had around 200k records in one table joined to a table with approx 80k records. Running the same query against my test database (with 70k and 80k records in the tables) ran in about 0.2 secs, but with the increased no of records it could take up to 630 seconds (yes – over 10 minutes), so no wonder then MySQL process was going into overdrive.

There were indexes on each of the tables, but only through a compound primary key, but the columns used for the join in the 2 tables in question didn’t have their own index. As soon as I added an index on these columns the query started to run in a much more respectable time (<0.2 secs).

So the lesson for me is to check that indexes are created for any columns used for joins on tables which are going to get big!

On a side note, this was in the OpenFire database and I’m not keen on the fact that their database structure uses the username column (a varchar(64) field) as the primary key for the user, rather than a more usual integer value. I suspect that joining two large tables on a varchar type column rather than integer column contributed to the slow running of the query.

BTW… can anyone recommend any (free/open-source) tools for analysing the performance and use of the indexes on a MySQL database? There seem to be loads MySQL admin type tools around, many paid-for products, but hard to tell which are any good for what I’m looking to do. Really I guess I’m looking for the similar features as MS SQL Query Analyser provides! Update 26/11/07 – I’m looking for something which gives me information about the query execution plan (i.e. how MySQL will use the indexes etc in the construction of the query) rather than general db admin tools for simply executing queries.

Video Chat added to MSG

Following my previous post on video chat, we’ve just launched a video chat facility to MSG (more info)

Video chat in progress

Video/audio chat in MSG…

Ever since I started working on MSG we’ve been asked for extra functionality to be added, most notably group-chat and option to have audio/video chat. We’ve always tried to resist giving in to these requests – on the basis that other IM services already do these things so why reinvent them, also, it’s all open source so if you can add them if you want!

However we’ve kinda given in to one of these, the video/audio chat one, the reason being that it’s actually relatively little work – we already have a service (FlashMeeting) which provides this type of functionality – so just need to link the 2 together. Well, we’ve nearly got this finished so when you’re in a chat session, there’s a one click launch flashmeeting – which automatically books the meeting and gives you the link to it…. so far so good – and also dubiously solves the group chat issues, since flashmeeting is multi-user rather than 1-1 (in fact better at multi-user than 1-1)…. but then we realised that we’ll only be able to apply this solution to the OpenLearn server.

The FlashMeeting and MSG OpenLearn servers have the exact same user base and account ids/emails etc all match up – so it’s quite trivial, however we run into problems with our general FlashMeeting and MSG servers as they have different user bases and even different policies on who can get accounts on each server. FlashMeeting accounts are only created by the FM team (you can’t self register – well, not without an OU email address?), but MSG has (or rather, will very shortly have) the ability for anyone to register – so we can’t then automatically auto create accounts the FM server. I know there are ways we _could_ do this but too many variables and too much if.. else if.. else if.. else.. code for my liking 😉 Another case for us to seriously look into whether OpenID and oAuth can really help solve these types of problem for us.

There are other services that we could use (recently found MeBeam – or rather they found us) which offer free to use, no-registration multi-user chat/audio/video facilities. However, we’ve not finally decided on any of these yet… and any other suggestions for services we could link to gratefully received 😉

MSG Netvibes widget update

I’ve (finally) updated the MSG Netvibes widget so that it can connect to the msg-openlearn server (more info). Has taken a bit of time because it needed some changes making on the msg-openlearn server too to allow HttpBasicAuthentication.

Chat history

We’ve (finally!) got round to releasing the chat history function on the live OpenLearn server (more details).. so pleased we’ve now got that done 🙂

Tomcat, MySQL and case sensitive tAblE nAmEs…

Having ‘fun’ this morning trying to figure out another little bug which I need to get fixed to get the chat history working properly on our MSG servers running on *nix. The problem is related to the case sensitivity of table names… we have the table (in MySQL) ‘jiveProperty’ and when I try to select from this table (using the given camel case tablename) from my java class in my servlet, I get the error that table ‘jiveproperty’ doesn’t exist (note the case).

However if I run the same code from a jsp it works fine… so it appears to me that something is turning the table name in my java class from camel case to all lower case, but this isn’t happening for my jsp pages – which are running from the same servlet container, so should be using the same mysql connector classes and settings.

any ideas???

Update (7/11)… problem turned out to be that when we overwrote the compiled classes in the servlet container and restarted tomcat, the tomcat work directory was still using the old version of the class. So before starting tomcat again we needed to clear out the work directory to make sure the new class was being used.

Moodle Online Users Map block

I’ve just made a few updates to the online users map block:

  • made the initial centre point and zoom level options in the block settings
  • Fixed a bug with getting the lat/lng of locations when not url encoded
  • Applied the moodle “fullnamedisplay” setting for mouse overs on the map
  • Translated into French and Hungarian – not by me, but by Valery Fremaux and Peter Csaszar-Cs – cheers 🙂

OpenLearn conference

Spent the last couple of days at the OpenLearn conference, which was all quite interesting, although maybe not directly relevant to my day-to-day work – the things that were really relevant I should know about already!! – but interesting nonetheless. I won’t write about all the presentations I went to as there was some active blogging on all the sessions – so pointless for me to replicate all that here. The sessions I found most interesting were… John Seely Brown, Alan Cann, Erik Duval, Ray Corrigan and Tony Hirst.

One thing I did notice was that whereever Open Educational Resources (OERs) were discussed it generally referred to content – and essentially static content at that. Whenever tools were discussed they were as a surrounding/supporting activity rather than being OERs in their own right – as mentioned in the wikipedia OER article.