All 6 entries tagged BlogBuilder

View all 69 entries tagged BlogBuilder on Warwick Blogs | View entries tagged BlogBuilder at Technorati | View all 5 images tagged BlogBuilder

September 13, 2006

Implementing the Atom Publishing Protocol

Writing about web page

Yesterday I did a deploy of BlogBuilder that includes support for the Atom Publishing Protocol (APP). What this essentially means is that you can use a desktop client, a web service or your own programming to create, edit and delete entries from a Warwick Blog.

We chose the APP because the other blogging APIs out there are all a bit horrible really and the APP is new and shiny and relatively easy to understand and program for.

The implementation was not without its difficulties. For a start reference clients and servers are very thin on the ground at the moment as the spec is not actually 100% complete (although almost there). This meant a fair bit of time just getting my head around how it worked and sniffing traffic to spot what a working client and server actually did when they talked to each other.

In the end, with the help of the Atomic Client, Tim Bray’s Atom Protocol Exerciser and Elias Torres’s public server implementation I was able to get it all working…and here’s how I did it :)

We already used Rome in places for our Atom/RSS feed creation and parsing. It’s slightly tricky to get it to do everything you need to create an Atom Protocol server as you don’t always need to send and receive whole feeds. Sometimes you’ll just want to parse/create a single entry. This leads to code which manually creates or strips the feed around the single entry so that Rome can then parse it properly… blah.

As we’re a Spring shop here, I used a single MultiActionController to do all of the GET/POST/PUT/DELETE functionality that the Atom Protocol needs. You can easily map incoming requests to the right method with something like this MethodNameResolver:

public class HttpMethodTypeMethodResolver implements MethodNameResolver {

    private Map<String, String> methodMappings;

    public final String getHandlerMethodName(final HttpServletRequest request) throws NoSuchRequestHandlingMethodException {

        String method = request.getMethod().toUpperCase();

        if (methodMappings.containsKey(method)) {
            return methodMappings.get(method);

        throw new NoSuchRequestHandlingMethodException(request);


    public final String[] getSupportedMethods() {
        return methodMappings.keySet().toArray(new String[] {});

    public final Map<String, String> getMethodMappings() {
        return methodMappings;

    public final void setMethodMappings(final Map<String, String> methods) {
        this.methodMappings = methods;


Then you just set this up to map your DELETE -> deleteEntry() method and PUT -> updateEntry() method and so on…

Another little thing with Rome is that you have to use the Atom specific parts of the API, you can’t just use the generic SyndFeed/SyndEntry classes as they do not convert to/from the exact Atom markup you need. So instead you need to use the Feed and Entry classes in the com.sun.syndication.feed.atom package.

So far I’ve only tested our implementation against Tim Bray’s APE and the Atomic client (which doesn’t send authentication headers when doing POST/PUT/DELETE operations so we could only really try it out with the GET stuff.

We’ll be trying it out against the new Office 2007 Atom client code later on today so it’ll be interesting to see if we need to tweak it a bit more (as I think everyone interprets the as to be completed standard a little differently).

April 24, 2006

What I've been up to

I've not blogged for a while because I don't really feel like I've finished anything recently.

I've been jumping between quite a few different little projects recently and all seem to not get finished.

  1. Single change password screen: I've been working on a really nice new change password screen for SSO. It will change your Novell password if you're a main ITS user or it'll change your external user password if you're of that type. What's neat about it is the AJAX password strength meters. I'll link to this when it is finally done, it's very neat though :)
  2. Importing academic data into our WebGroups project. We have a system called WebGroups that lets people create arbitrary groups for use in permissions for things like Forums, Sitebuilder and soon BlogBuilder. This import will automatically have groups for departments, modules, courses, etc… Although we already have a system that does similar, this is a much nicer system but we are just waiting on the right data right now.
  3. Various other little bits and pieces that always get in the way, bug fixes here and there. I've done a bit of work recently on SiteBuilder2 (but not much), SSO, External Users System, BlogBuilder (fixing some code that has grown really ugly).
  4. Had a bit of disaster recovery to do recently too which was a bit scary because you never know if you can get things back for real until it actually happens. Thankfully we got everything back up and running pretty quickly…phew.

So, fairly busy. The frustrating thing is not being able to concentrate on one thing. It can be quite difficult to chop and change all the time, although that is probably party my fault :)

Hopefully I'll start looking at Shibboleth for Athens again soon as it looks like JISC and co. are getting themselves sorted out and the momentum seems to be building around the academic community for this again.

February 21, 2006

CIPR Midlands PRide Awards 2005/6

Writing about web page

Seeing as no one else has got around to mentioning it, I may as well…

The Warwick Blogs marketing campaign won two awards at the CIPR Midlands PRide Awards 2005/6 on Friday night. Not having my camera, I can't show you any pictures of the Warwick bunch in all their black tie and gown glory, but here are a few thumbnails photos from the official photographer.

Use of Photography, Design or New Media

  • Gold – Warwick University, Warwick Blogs
  • Silver – The Bright Consultancy, Cable Guy
  • Finalist – Derbyshire County Council, “Face of B-Line” Bus
  • Finalist – Neon Communications, Ten4 Magazine
  • Finalist – Seal Communications, Well Constructed!

In House Campaign

  • Gold – University of Warwick, Launching the University of Warwick in London
  • Silver – University of Warwick, Warwick Blogs Silver

The great one to win was the "Use of Photography, Design or New Media" because it was up against quite a few people (rather than just other stuff from Warwick), including some proper PR consultancies. So, congrats especially to Hannah and Karen for all their hard work and great design skills. Hopefully John, Casey or Karen will put up some proper photos soon.

PR and marketing is not something that generally gets done well in a university environment, especially for IT projects. All too often departments will work hard on projects only for them to fall short of their potential through bad PR, marketing and advertising. The challenge for the future is to keep up the profile of the services that ITS offer so that our users know about all the great stuff we can provide them.

February 16, 2006

Denormalising and rolling up data for performance reasons

As I finally got jProfiler working on a live load of BlogBuilder the other day, I've been finding bottlenecks where you'd not really expect them.

It's one thing to profile a bit of code or a few requests and see where problems might be, but profiling real load for 10 minutes or so gives a much better big picture. Without the efficiency of jProfiler 4 and Java 5, doing this on a live system would not be practical…but thankfully it worked. I didn't leave it running long because inevitably it increased the load on the system considerably, but it was bearable.

If you've got a bad bit of code, but it hardly ever gets called, you can let it slide. If you've got bad code that gets hit a lot…you've got a problem.

Most of the code that we've now optimised wasn't a problem as such before, but with the hibernate bug I mentioned in my last post, we're trying to reduce querying more aggresively than we were before.

The database person in me says that I want a nicely normalised database, but sometimes it's just not efficient. We have now rolled up comment, trackback and image counts as these were disproportionately expensive counts.

What makes doing these roll-ups a pain in a lot of places is the permissions system as we generally serve a completely personalised page to everyone. We do however have a "publcly viewable" flag for many objects which makes things a bit easier for non-logged in views.

The other thing that was surprisingly expensive is our textile renditions. We use textile in a lot of places to turn textile markup into html. These conversions range from one line titles to entries with thousands of words. We have always cached the converted textile->html for entries as these are large chunks of text. However, we have not until today (thanks to some coding done by Mat today) cached the converted text of comments. Even now with those cached, it is tempting to do a textile-lite that doesn't do the full parse of every little string (there are just too many bloody regexs), but just things like bold and italics.

November 07, 2005

Dojo rich text editing

Writing about web page

Our entry editor for BlogBuilder is fairly basic in that it does not provide any WYSIWYG functionality. We do however try and make life easier for people by letting them use either HTML or the super-simple Textile markup.

However, would a WYSIWYG editor be better? I would not want to sacrifice and compatibility or speed and take on a full blown Java editor like the one used in SiteBuilder, but I wonder if people would like Dojo

September 27, 2005

A year of Warwick Blogs

So, Warwick Blogs has been officially live for a year now. We've certainly come a long way in 12 months. It's almost hard to remember what it felt like at the start of last year, but this year certainly feels calmer as Warwick Blogs is no longer the new exciting thing it used to be.

So, how has it weathered once the initial interest died down? Depends who you ask and how you measure success, but I would (of course I would) say that it's been a success.

We've certainly let potentially thousands of staff and students express themselves online in a way that they just couldn't before and out of that has come some 42,000 entries, over 100,000 comments and 53,000 images. In the past there was just no easy way to share your thoughts, ideas, rants and photos with the Warwick community (and beyond).

When asked at the start of last academic year how many blogs and entries I thought we would get by Xmas, I said that I really had no idea what so ever as what we were trying was so untested within a university in this country and almost anywhere else. By the end of November 2004 we were getting 20,000 page views per day (proper page views not including images/robots/etc.). As it turned out we had 13,000 entries, 2,000 blogs and 26,000 comments at Xmas, turning it into the biggest educational blogging site in the world in just 3 months.

We are clearly not going to see that kind of rocketing growth again this year as it is only new to the 1st years rather than the whole University this time. However, we have steadily increased the features, reliability and power of the system over the last year and hope that there are new things to offer people who didn't try out blogs before or who gave up early on. Our BlogBuilder News blog has kept track of these changes and shows how far we've come.

I like my graphs, so here are a few showing a years worth of Warwick Blogs (they look a bit poor, but click on them to see a larger view of each graph)

The above entries per day graph shows that we really do quite closely follow the term and holiday times with a hardcode of bloggers keeping going over the holidays. Generally speaking though we've stood at around an average of 150 new entries per day. I must admit a little disappointment that this has not grown much more, but it is still more than I had originally hoped for.

Comments per day is an interesting one. Again it tracks term time very well, but pleasingly it also shows that we have an average of 2/3 comments per entry, showing a good community around Warwick Blogs as the average entry on a blog in the wide world will be lucky to every get a comment at all.

Images were another nice surprise for us. Although at the start we only provided single image upload (now we have zip upload and nicer galleries), people were uploading pictures left, right and centre. We have more images than we do entries, showing that people love to share their pictures, I can only hope that that will continue this year. Now that we have image tagging (like Flickr), finding and categorising images across the system is even easier.

This is a slightly strange one in the sense that the growth is fairly clear, whereas the number of new comments/entries/images a day has not really kept growing, page views has. These stats are for real people viewing pages of entries, not images/css/javascript/robots/etc. We had 30,000 page views yesterday for instance.

Karen and Hannah have yet again done some great publicity again this year, but the emphasis has been a little more on the academic side of using blogs this time as we didn't really push it that way last year. Fingers crossed we can get some more involvement from our academics and get them communicating and interacting with their students online a bit more.

August 2022

Mo Tu We Th Fr Sa Su
Jul |  Today  |
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31            


Search this blog

Most recent comments

  • One thing that was glossed over is that if you use Spring, there is a filter you can put in your XML… by Mathew Mannion on this entry
  • You are my hero. by Mathew Mannion on this entry
  • And may all your chickens come home to roost – in a nice fluffy organic, non–supermarket farmed kind… by Julie Moreton on this entry
  • Good luck I hope that you enjoy the new job! by on this entry
  • Good luck Kieran. :) by on this entry


Not signed in
Sign in

Powered by BlogBuilder