Posts tagged APIs

Over the past few days I’ve been doing some serious brain work about Jerome and how we best build our API layer to make it simultaneously awesomely cool and insanely fast whilst maintaining flexibility and clarity. Here’s the outcome.

To start with, we’re merging a wide variety of individual tables1 – one for each type of resource offered – into a single table which handles multiple resource types. We’ve opted to use all the fields in the RIS format as our ‘basic information’ fields, although obviously each individual resource type can extend this with their own data if necessary. This has a few benefits; first of all we can interface with our data easier than before without needing to write type-specific code which translates things back to our standardised search set. As a byproduct of this we can optimise our search algorithms even further, making it far more accurate and following generally accepted algorithms for this sort of thing. Of course, you’ll still be able to fine-tune how we search in the Mixing Deck.

To make this even easier to interface with from an admin side, we’ll be strapping some APIs (hooray!) on to this which support the addition, modification and removal of resources programmatically. What this means is that potentially anybody who has a resource collection they want to expose through Jerome can do, they just need to make sure their collection is registered to prevent people flooding it with nonsense that isn’t ‘approved’ as a resource. Things like the DIVERSE research project can now not only pull Jerome resource data into their interface, but also push into our discovery tool and harness Jerome’s recommendation tools. Which brings me neatly on to the next point.

Recommendation is something we want to get absolutely right in Jerome. The amount of information out there is simply staggering. Jerome already handles nearly 300,000 individual items and we want to expand that to way more by using data from more sources such as journal table of contents. Finding what you’re actually after in this can be like the proverbial needle in a haystack, and straight search can only find so much. To explore a subject further we need some form of recommendation and ‘similar item engine. What we’re using is an approach with a variety of angles.

At a basic level Jerome runs term extraction on any available textual content to gather a set of terms which describe the content, very similar to what you’ll know as tags. These are generated automatically from titles, synopses, abstracts and any available full text. We can then use the intersection of terms across multiple works to find and rank similar items based on how many of these terms are shared. This gives us a very simple “items like this” set of results for any item, with the advantage that it’ll work across all our collections. In other words, we can find useful journal articles based on a book, or suggest a paper in the repository which is on a similar subject to an article you’re looking for.

We then also have a second layer very similar to Amazon’s “people who bought this also bought…”, where we look over the history of users who used a specific resource to find common resources. These are then added to the mix and the rankings are tweaked accordingly, providing a human twist to the similar items by suppressing results which initially seem similar but which in actuality don’t have much in common at a content level, and pushing results which are related but which don’t have enough terms extracted for Jerome to infer this (for example books which only have a title and for which we can’t get a summary) up to where a user will find them easier.

Third of all in recommendation there’s the “people on your course also used” element, which is an attempt to make a third pass at fine-tuning the recommendation using data we have available on which course you’re studying or which department you’re in. This is very similar to the “used this also used” recommendation, but operating at a higher level. We analyse the borrowing patterns of an entire department or course to extract both titles and semantic terms which prove popular, and then boost these titles and terms in any recommendation results set. By only using this as a ‘booster’ in most cases it prevents recommendation sets from being populated with every book ever borrowed whilst at the same time providing a more relevant response.

So, that’s how we recommend items. APIs for this will abound, allowing external resource providers to register ‘uses’ of a resource with us for purposes of recommendation. We’re not done yet though, recommendation has another use!

As we have historical usage data for both individuals and courses, we can throw this into the mix for searching by using semantic terms to actively move results up or down (but never remove them) based on the tags which both the current user and similar users have actually found useful in the past. This means that (as an example) a computing student searching for the author name “J Bloggs” would have “Software Design by Joe Bloggs” boosted above “18th Century Needlework by Jessie Bloggs”, despite there being nothing else in the search term to make this distinction. As a final bit of epic coolness, Jerome will sport a “Recommended for You” section where we use all the recommendation systems at our disposal to find items which other similar users have found useful, as well as which share themes with items borrowed by the individual user.

  1. Strictly speaking Mongo calls them Collections, but I’ll stick with tables for clarity []

It is with great and unreserved pleasure that I announce the grand opening of one of ICT’s latest projects, which has been occupying a surprisingly large amount of my time over the last two months and which has led to me wrapping my head around some quite interesting bits of JavaScript.

Zendesk is here. Or, as we prefer to call it, the Support Desk. It’s a one-stop shop for all your ICT and Estates queries and requests, managed by our crack group of support agents and backed by the combined centuries of knowledge and experience offered by the ICT and Estates teams.

It’s been an interesting journey thought the backwaters of the University’s policies and processes, a less than enjoyable romp through bits of law which I didn’t even know existed, and an exhilarating codathon whilst I wrapped my head around slinging JSON across the ether and inserting it into some HTML elements which don’t exist on a page I don’t control using nothing more than a well-crafted bit of JavaScript and a paperclip. All that is behind us now, so it’s time to tell you what’s new and awesome in the world of getting ICT and Estates support at Lincoln.

First of all, we’ve taken the best bits from both, ditched the worst bits and then streamlined the whole process. From the moment you call or email your request it’s placed directly into Zendesk from where we can monitor how it’s doing. Even better, why not submit your query online using our new request form, now with even fewer annoying questions which you don’t know the answer to than before. It’s a simple matter to sign in using your normal University details and skip the whole process of telling us your name, email address, room code, phone number, line manager, inside leg measurement and what you had for lunch yesterday.

As soon as your request is logged you’ll get a request tracking number within seconds, followed up by emails every time we update your request with something you need to know. You’ll never be out of the loop again, and you can even go online and check all your requests to see how we’re getting on. Leave comments, upload files, tell us that it’s solved and more all from right within your browser.

We could have left it there, but we weren’t done. It only took a few minutes of looking to realise that our how-to guides, instruction manuals, FAQs and more were scattered hopelessly around the Portal, Blackboard, paper help sheets, PDF files, student guides, posters and more. This wasn’t good enough, so we decided to bring them all together into Quick Answers. It’s the place to find solutions to your problems both common and esoteric, guides to walk you through getting things done, information on what’s going on and all kinds of other things. Just type your question or a few key words into the search box and see what we can tell you. Think something’s missing? Just drop me an email and we’ll get it added.

At the end of Phase 1 we’re really excited about the changes and we hope that they make everyones lives a lot easier, as well as helping you to get your problems solved faster than before. Support Desk: now open.

Recently I’ve been looking at some exciting new changes which might be in the pipeline for the IT helpdesk, namely replacing our old and somewhat rickety system with a new, shiny SAAS one.

Aside from the savings of £14 bazillion pounds a month this will make (which I may have exaggerated, but it will save us money) and the fact it’s a simply better service, not to mention the way it’s web based with mobile clients so support techs can use it anywhere, its support of elegant automated workflow processing, better information capture and integration with everything else we use; it’s a very social piece of software.

We’ve currently got it working in such a way so that if you send us a problem over Twitter we can seamlessly pull it into the system, deal with it, and respond. You need never know what’s happening behind the scenes, all you know is that we’re handling your problem. However, what we need to know is more than just your Twitter handle – we need to know your full name, your student ID number, which course you’re on and various other things so that we can actually solve the problem. There’s also the fact that anybody can email the helpdesk from any account which produces this same problem. We know exactly who you are if you use your student email account, but we struggle to know who xx_bubble_princess_xx_28463 is.

(more…)

As a few people have requested, our magical URL shortening service at http://lncn.eu now comes with a delicious API. It’s directly compatible with the is.gd API, and is so simple that even a monkey could use it (providing the monkey was familiar with the basics of HTTP GET and URL encoding).

Its usage is very simple. All you need to do is call http://lncn.eu/api with the GET parameter ‘longurl’ set to a URL encoded version of the URL you want shrinking. For example:

http://lncn.eu/api?longurl=http%3A%2F%2Fexample.com

The site will then return (in plaintext) the shortened URL, or if you’ve broken it a HTTP 500 error code.

http://lncn.eu/uv

It’s really that easy. More changes are in the pipeline, and as always I am taking requests.