Showing posts with label work. Show all posts
Showing posts with label work. Show all posts

Wednesday, 28 November 2012

Widgets, Web Services and Libraries - Oh My!

The time has come to fulfill my promise [0] to write a blog post on our use of widgets at Swansea University.

Background


To cut a long story short, the decision to focus on developing widgets came about through the realisation that the Web Team were being asked increasingly to provide data to a number of disparate university web based systems such as Blackboard, iFind Discover (Our library catalogue powered by VuFind and Voyager) iFind Research (Our remote discovery service powered by Xerxes and Metalib / SFX) and our intranet and web pages. We therefore wanted to create a service which followed a recognised pattern, required very little technical proficiency to implement on the client side and was easy to share and distribute. Thankfully, our lead developer Geraint always has his finger on the pulse so he was able to suggest that widgets, self-contained, platform agnostic web elements, would meet all our needs, allowing us to deliver content, style and functionality in one easy to access bundle.

The fundamental basis of approach was taken form an article by Alex Marandon [1]. In our environment, this equates to something like:

1) Data API (e.g. Rebus List - our reading list solution from PTFS Europe)
2) Data Access Object (Web Team Developed object which queries the API)
3) Widget Controller (Loads the Data Access Object, processes data, returns data in required format)
4) Widget JavaScript (Collects variables, sends them to the controller via ajax and uses a callback function to process the results)
5) Client added script tag and target html element:

<script type="text/javascript" src="http://example.com/widget/data.js"></script>
<div class="widgety-goodness" data-id="1234"></div>


This method of delivering content places virtually all of the development requirements for a service on the web team. All a client needs to be able to do is embed two lines of code in their web page with any required variables. The only further developments a client may wish to undertake is to create custom css styles or JavaScript / jQuery behaviours.

A Guided Example


For those more interested in the technical details of the service, I will now try to outline the development of our Rebus List Widget with a particular emphasis on modifications we have made to Alex Marandon's original post.

Requirements:


Get a particular course reading list from Rebus List by supplying a valid course code

Process:


1) Script tag and HTML element (Blackboard Team - Swansea University)

The Blackboard team embed the required script and html elements to each course page and generate the course id. They have also created their own style sheet which will override the default css supplied by the widget.

Example:

<script type="text/javascript" src="https://www.swan.ac.uk/widgets/js/rebus/course-reading-list.js"></script>
<div class="rebus-course-reading-list-widget" data-course="CS-061">&nbsp;</div>



2) Widget JavaScript (Web Team - Swansea University)


The Widget JavaScript grabs the course id from the html element attribute and submits it via Ajax to the Widget controller. If successful, it loads the returned content in to the html element in addition to grabbing required resources like html5shiv [3] or css files.

The major differences in our JavaScript files compared to those suggested is that we have formatted them using JSLint [4] and added methods to deal with problems caused by the way IE7 loads css and js files.

This particular example does not have any jQuery actions associated with the delivered content but it could be added as part of the $.getJSON method if required.

Example:

/*jslint browser: true, devel: true, sloppy: true */

(function () {
    var jQuery,
        script_tag,
        main = function () {

            jQuery(function ($) {

                var $targets = $('.rebus-course-reading-list-widget'),
                    devEnv = window.location.search.indexOf('env=dev') !== -1,
                    baseUrl = devEnv ? '/widgets' : '//www.swan.ac.uk/widgets',
                    styleSheet = baseUrl + '/css/rebus/course-reading-list.css';

                (document.createStyleSheet)
                    ? document.createStyleSheet(styleSheet)
                    : $('head').append($('<link>', {
                        rel:  'stylesheet',
                        type: 'text/css',
                        href: styleSheet
                    }));
                       
                // Do we need html5shiv?
                if ($.browser.msie && $.browser.version < 8) {
                    script_tag = document.createElement('script');
                    script_tag.setAttribute("type", "text/javascript");
                    script_tag.setAttribute("src",  baseUrl + "widgets/vendor/html5shiv/html5shiv.js");
                    (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
                }

                $targets.each(function () {
                    var $this = $(this),
                        course = $this.attr('data-course'),
                        uri = baseUrl + '/controllers/rebus/course-reading-list.php?callback=?&course=' + course;

                    $.getJSON(uri, function (data) {
                        $this.html(data.html);

                    });
                });
            });
        },
        scriptLoadHandler = function () {
            jQuery = window.jQuery.noConflict(true);
            main();
        };

    if (window.jQuery === undefined || window.jQuery.fn.jquery !== '1.5.2') {
        script_tag = document.createElement('script');
        script_tag.setAttribute("type", "text/javascript");
        script_tag.setAttribute("src", "//ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js");

        if (script_tag.readyState) { // old-IE
            script_tag.onreadystatechange = function () {
                if (this.readyState === 'complete' || this.readyState === 'loaded') {
                    scriptLoadHandler();
                }
            };
        } else {
            script_tag.onload = scriptLoadHandler;
        }

        (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
    } else {
        jQuery = window.jQuery;
        main();
    }
}());

3) Widget Controller - (Web Team - Swansea University)


The widget controller receives the course id, calls the getListsByCourseId method in the data access object, assigns the result to a variable used by Mustache to create a html template and finally returns the template using the json content type.

NB: You don't have to use Mustache - you could use any html templating system or just build the html yourself in the controller.

Example:

require_once realpath(__DIR__ . '/../../..') . '/config/config.php';

require PATH_TO_HELPERS . '/handle-error.php';

// Validate request

$clean = new stdClass();

if (! array_key_exists('course', $_GET)) {
handleError('HTTP/1.1 400 Bad Request', 'Required parameter "course" not specified');
exit();
} else {
$clean->course = (strpos($_GET['course'], "_") !== false)
? preg_replace('/^.*_/', "", $_GET['course']): $_GET['course'];
}

if (array_key_exists('callback', $_GET)) {
$clean->callback = $_GET['callback'];
}

// Fetch Data

try {
require_once 'SU/DataAccess/Rebus.php';
$dao = new SU_DataAccess_Rebus();
$view = (object) array(
'lists' => $dao->getListsByCourseId($clean->course, true, true)
);
} catch (SU_Exception $e) {
handleError('HTTP/1.0 404 Not Found', $e->getMessage());
exit();
}

// Render
$template = file_get_contents(PATH_TO_TEMPLATES . '/rebus/course-reading-list.mustache');
$m = new Mustache();

$data = (object) array(
'html' => $m->render($template, $view)
);

if (isset($clean->callback)) {
header('Content-Type: text/javascript');
header('X-XSS-Protection: 0');
printf('%s(%s)', $clean->callback, json_encode($data));
} else {


// Used for debugging only
print $data->html;
}


Example Output:

jQuery15205464451520296695_1354114033050({"html":"<div id=\"rebus-reading-list\"> ..."})



4) Rebus Data Access Object (Web Team - Swansea University)

The Rebus data access object receives a course identifier, builds and calls a url using the Zend HTTP Client, parses the received XML data and returns an array of item data, optionally sorted by the reading list category heading.

Example Output:

Array ( [0] => Array ( [list_id] => 15 [org_unit_id] => 16 [org_unit_name] => Science [year] => 2012 [list_name] => CS-061 Introduction to computing I [published] => y [no_students] => 0 [creation_date] => 1345540250 [last_updated] => 1349271819 [course_identifier] => CS-061 [associated_staff] => [categories] => Array ( [0] => Array ( [title] => Essential reading [items] => Array ( [0] => Array ( [category_heading] => Essential reading [material_type] => Book [title] => Java for everyone / Cay Horstmann. [secondary_title] => [authors] => Horstmann, Cay S., [secondary_authors] => [edition] => [volume] => [issue] => [start_page] => [end_page] => [year] => c2010. [publisher] => John Wiley & Sons, [publication_place] => Hoboken, New Jersey: [publication_date] => c2010. [print_control_no] => 9780471791911 [elec_control_no] => [note] => [creation_date] => 1345540306 [modified_date] => 0 [lms_print_id] => 598756 [lms_elec_id] => [url] => [tags] => ) [1] => Array ( [category_heading] => Essential reading [material_type] => Book [title] => Computer science : an overview / J. Glenn Brookshear. [secondary_title] => [authors] => Brookshear, J. Glenn. [secondary_authors] => [edition] => 10th ed. [volume] => [issue] => [start_page] => [end_page] => [year] => c2009. [publisher] => Pearson Addison-Wesley, [publication_place] => Boston, Mass. ; [publication_date] => c2009. [print_control_no] => 9780321544285 [elec_control_no] => [note] => [creation_date] => 1345540363 [modified_date] => 0 [lms_print_id] => 561530 [lms_elec_id] => [url] => [tags] => ) ) ) ) ) )


5) Data API (PFTS Europe - Rebus List)

Rebus List comes with a very useful API which will return a list of items in a reading list in an xml format when supplied with a valid course code. It can be access using the syntax:

http://xxx.xxxxxxx.com/api?service=lists_by_course_identifier&course_identifier=ASQ201

The Widget Output

Default Styling:



Blackboard Styling:





[0] http://shambrarianknights.blogspot.co.uk/2012/10/library-camp-2012-part-2.html
[1] http://alexmarandon.com/articles/web_widget_jquery/
[2] http://mustache.github.com/
[3] http://code.google.com/p/html5shiv/
[4] http://www.jslint.com/

Wednesday, 17 October 2012

Library Camp 2012 - Part 2

Lunch and Cake

When the third session had finished, it was time for lunch which was actually just a continuation of the eating which had taken place throughout the morning sessions - I had been constantly nibbling on the splendid variety of cake and baked produce which accompanies every library camp. Unfortunately, I didn't get my first cup of tea of the day until after 9am and I had therefore begun to revert to my default state during early mornings, that of a Zombie. In hovering around the tea & coffee (yuch) zone however, I was able to spot familiar faces and get first dabs on any new cakes which arrived on the scene.

Though I was trying to curb my consumption of cake in an effort to avoid last year's sugar induced palpitations and out-of-body transcendental experience, I did manage to sample most of the delights on offer. I must mention @rachelsbickley's Rocky Road & @Sonja_Kujansuu's Sweet Potato Pie [0] in dispatches as they were absolutely delicious and provided a much needed breakfast.

Cake! (One of 6 tables)
My contribution to Cake Camp was a Chocolate Guinness Cake - a concept originally brought to my attention via @KelleherBex - for which I received some very kind remarks. When I came to collect the tin at the end of the day, the cake had been reduced to a few crumbs so I'm officially filing the recipe under "success".

Lunch itself was very tasty - in addition to the main offering of rice and chili-con-carni, cold meats, tuna, salad, couscous, bagels, bread rolls and more were on offer.

Sessions 4 & 5

The great thing about a library camp is that do whatever you think you'll get the most out of. I didn't think any of the options on offer during sessions 4 & 5 were particularly relevant to me so I spent the time preparing for the session on Widgets and Web Services which I had proposed on the spur of the moment. It also gave me the chance to have a chat with @benelwell who I knew was working on an analytics project, a topic which I hoped to broach in my session and develop for work.

I was interested to discover that while The Amazing @Daveyp (His official title) at Huddersfield was doing a lot of work analysing database circulation data, Ben was focusing his efforts on analysing data returned by custom JavaScript code [1] from user interaction with Summon. Ben had a nifty set of graphs generated by "R", an open source programming language for statistical computing and graphics [2], by which he was able to demonstrate user behaviour such as the link between the length of the search term and the use of facets.

Fun in the Sun
We were joined throughout the afternoon by various library camp attendees who were taking breaks from the afternoon session for a spot of tea or to enjoy the autumn sun. It was fascinating to watch @joeyanne and @SaintEvelin knitting up a storm whilst @SarahNicolas, @evarol and @sarahgb discussed the virtues of the Sony NEX-5N, a rather spiffing camera which I am seriously considering purchasing.



Session 6: Widgets, Web Services and Libraries - Oh My!

The idea for my session sprung from recent developments at work and the discussion of Open Source Software in the morning session.

At Swansea University, the Web Team have been beavering away creating all and sundry web services for cross-campus consumption with the intention of maximizing the exposure of our most important services. As most of these web services are now complete, we faced a quandary on how best to deliver them. The usual step would be to provide our fellow developers with web service connection details but our resident scrumming, agile, waterfall soaked guru, @g_mawr, suggested that we should consider the use of web widgets. 

From our perspective, a widget is a self-contained, platform agnostic web element. The principle function of a widget is to deliver all the content, style and functionality in one easy to access bundle. Using an article by @amarandon as a basis [3], we are able to deliver a widget with little more than:

<script type="text/javascript" src="http://example.com/widget/data.js"></script>
<div class="widgety-goodness></div> 

I plan to write a complete technical post on @g_mawr's work at a later date.

Putting my library cap on, I think widgets have great potential for library services as they could provide an opportunity for libraries to reach a wider audience through distribution of services and targeted implementation. It could be something as simple as a search box which will direct users to library resources or the addition of library account data to high use sites like Facebook. The embedding of library branding into widgets will also act free advertisement on every site the widget appears on.

Having pitched this idea, the group settled into a discussion of the practicalities of adopting such a practice. I was particularly interested in how the use of widgets might benefit special projects within libraries such as the Health in Mind service represented by @helenkielt. [4]  A brief look at their website immediately suggested two opportunities a) A widget which search the Libraries NI library and eBook Catalogue for relevant mental health material b)The delivery of Health in Mind branded searches on library and local government pages (Health in Mind has a vivid, strong brand which would be perfect for advertising).

Whilst most commentators agreed that the theory and benefits were sound, many, particularly from public library backgrounds lamented the lack of resources and system accessibility which would be required to adopt the widget approach. I had always envisioned library developers working on their own widgets, but several people approached me afterwards inquiring as to the feasibility of creating generic widgets which could be consumed by any library service. As always, this led to a discussion on standards and the pipe dream of a universal Library Management System API which could be used to construct such widgets.

Librarians Chatting (via @SarahNicholas)
The second strand of discussion in the group centred around the use of social media as I suggested the ultimate goal of our project would be to create a Facebook widget, largely because I feel that if we had to choose just one website to get the biggest audience for our users, Facebook would be it. Again, the difference between the public and academic user base was discussed. Though most public libraries are being encouraged to engage with social media sites, only 15% of their users regularly use sites like Facebook or Twitter. With stretched resources, limited funds and staff time, some felt the effort being ask of them was disproportionate to the means available. With that said, most of the libraries represented in the session had a Facebook or Twitter account. The value attached to the accounts varied greatly - some believed it actually the first point of contact with certain user groups whilst others suggested that only library staff engaged with them on a regular basis. A significant proportion lamented the bureaucracy associated with posting to the account with every word and potential meaning scrutinised to such a degree that potential effectiveness was rendered impotent. 

The final part of the session was devoted to the use of library data which has traditionally never been cultivated - circulation data. Every year, libraries across the UK submit it  to various official bodies so that the royalties afforded to authors can be calculated. Whilst this data is lifeblood to firms like Amazon, most libraries are yet to take advantage of it.

Part of the issue may be confusion of ownership - the data often sits in a proprietary database after all and nobody likes playing with their proprietary LMS in case of system failure, table corruption or a hefty service charge. It is therefore up to librarians to demand access to this data in its entirety, not just its raw, possibly undecipherable format but via a consistent standard which will allow use to analyse correlations, check for patterns and construct "Users who loaned this, also loaned..." type services. The emergence of a(n) (inter-)national standard would greatly assist such a project - Amazon may be unwilling to share their schemas or algorithms but it wouldn't hurt to ask!

Conclusion  

Thought some of the "otherness" of a Library Camp has now worn off on me, I still managed to get a lot of Library Camp 2012. It is a great opportunity to socialise with a fantastic bunch of people who share a similar occupation but come from all walks of life. The relaxed nature of the event and the personal contact it affords makes learning about and contributing to developments in the sector so much easier.

As a result of Library Camp, I have two new blog posts to write - one on the technical aspects of our deployment of widgets and another on why I think libraries quest for identity is growing stale. I don't profess to have any particularly elucidating remarks on the latter topic and I'm not going to attempt a well-researched scholarly sermon-on-the-mount type discourse - it will be purely my own observations from my limited sphere of experience.

Inspired by @benelwell (and a session by the University of Huddersfield at Gregynog) I also have a renewed enthusiasm for looking into the use of circulation data analytics. I will augment our resource discovery platforms with useful data!

All-Bar-One-One
Post Library Camp

The post library camp celebrations continued until 3.45am - Thankfully, I haven't found any photographic evidence of them after 10.30pm.










[0] http://librarycamp2012.wikispaces.com/Cakecamp
[1] Based upon the work of @daveyP and @mreidsma

Friday, 14 October 2011

Library Camp 2011 - Having your cake and eating it

http://www.librarycamp.co.uk/librarycamp
#libcampuk11


For further details and blog posts, see http://libcampuk11.wikispaces.com/Session+notes


On Saturday 8 October I was lucky enough to attend Library Camp in Birmingham, the first "unconference" I had ever attended. An "unconference", takes advantage of the phenomenon that often it’s in the informal sessions and chance conversations at traditional conferences that the best dialogue happens and the right people come together, in the right place at the right time. As such, people just turned up to Library Camp, the brave pitched their ideas at the beginning and a number of sessions were arranged during the day.


Before going into details, I have to say that Library Camp is the best conference I have ever attended. Looking back this was for two reasons. Firstly, the informal atmosphere encouraged everyone to socialise and this made everyone more likely to express their views in the various sessions and workshops. Secondly, as the itinerary was decided on the day taking ideas from the floor, "campers" (delegates is far too formal a word to describe attendees) were able to both hold and attend sessions on topics of most interest to them.


Cake
The social aspect of Library Camp was truly fantastic. For many, it was the first opportunity they had to meet some of the familiar (or not so familiar!) faces they had met through Twitter. "Twitter Bingo" was played by most campers as they attempted to match avatars with their real life counterparts. Most of the campers wore badges with their Twitter usernames to be extra helpful. The convivial atmosphere had been set in motion the night before as Librarians and Shambarians from across the country were invited to tour the currently under construction Birmingham Library, enjoy a few pints at the Old Joint Stock Exchange and finish the night with a Curry at Milan's. Campers from Wales would also have been buoyed by our epic victory against Ireland in the Rugby. A constant companion to the friendly atmosphere was cake and hot drinks on demand. Librarians and Shambrians may differ on the relative merits of Gin and Beer but on cake, they stand united and the Library Campers didn't disappoint. The bounty of cake and sweet produce on display was approaching levels of decadency and I wasn't the only camper who woke up the next day with a sugar hangover!


The actual sessions arranged at the beginning of the event were as diverse as the campers - academic and subject librarians, public librarians, special collection managers, museum librarians, archivists and shambrarians all pitched their ideas with complete equality. There was a rather disappointing turn out from heads of service and management level but those that did attend made a fantastic contribution to the various discussions and debates. 


I personally attended sessions on "The Library as Social Space", "Using Library Data", "Open Source in Libraries" and "Gaming in Libraries".


The Library as Social Space


This session explored the interesting dichotomy between the concept of the social network and libraries as a social space. As aspects of socialising increasing become virtual, how do libraries respond to changing trends particularly as visitor numbers are decreasing.


This session perhaps highlighted the greatest differences between academic and public institutions. Though both can be considered to be concerned with improving access to knowledge and learning, public libraries have to be increasingly concerned with "footfall" in order to "justify" their existence. An obsession with numbers and statistics can potentially lead to the ludicrous scenario where libraries are forced tailor their services in an attempt to match their "expected" statistics. I believe that public librarians have a much more difficult task in this respect as their "customers" are far more diverse than their academic counterparts who at least have one thing (i.e. association with the University) in common. 


What we need to stop doing and
 what we need to start doing
The less diverse profile of academic library users also makes it easier to design the space in the library according to their needs. It was agreed that diverse study "environments" were essential in University life - long gone are the days of homogeneous desks and ubiquitous silence in favour of individual cubicles, quiet study areas, study pods for small groups, free-for-all study halls and library cafes. Public libraries may be able to provide similar environments in their main libraries (in addition to child friendly areas) but it is rare that a local library can offer such luxuries. The onus therefore falls on the local librarian to be accommodating and welcoming to all sections of the community that they serve and represent.


At the close of the session, we finally concurred that the social network and the library as a social space need not be mutually exclusive - most library services have a Facebook page and many are beginning to use Twitter. Engaging with users in the virtual world is likely increase the likelihood they will engage with us in the physical world.   


Using Library Data


Owen Stephens (@ostephens) used this workshop to highlight how poor libraries are at using data which belongs to them and which they often have to collate and publish anyway. 


More Cake
Owen began his pitch by outlining how he had built an application which told him how much money his family had saved by getting books out of his local library rather than buying them from Amazon. If it were universally available, using data like this would be an incredibly powerful tool for libraries and librarians. Amazon performs witchcraft with its purchasing data as it suggests things you might also like or e-mails you regarding special offers of interest. Imagine how efficient purchasing departments could become if were able to make use of circulation statistics or how intuitive reading lists could be if loan data was collated?


The final part of the session was dedicated to exploring some of the obstacles to such data utopia. The opening up of connectors and APIs is hot potato at the moment as are issues surrounding data protection. Owen expressed his exasperation with the fact that though many LMS companies suggest they operate "Open Interfaces", they're only open if you subscribe to or buy their products. This makes development of a pan-LMS solution almost impossible and his job as an independent consultant far more difficult. The emergence of standard for sharing circulation data is therefore desirable - perhaps this is an area where the Open Source LMS community could make a telling contribution.


I would love to be involved further in this discussion - whether or not I'll have the time is another matter altogether!


Open Source in Libraries


I went to this session to support Mark Hughes (@Mark_H_Swansea) and Meg Jones (@barbaragorden) who used the opportunity to field questions on the benefits and pitfalls of Open Source technology.


Whenever I have been part of this type of discussion, I always like to point out that using Open Source is never about saving money - it's about re-assigning resources - financial and personal. I've yet to come across an Open Source Library project which was primarily established to save money - their raison d'etre lies more often that not with the dissatisfaction they encounter with the proprietary products and services that they were originally forced to use. In this sense, they act as a real stimulus and competitor to the design processes of their proprietary counterparts.


Open All Hours
With Open Source, you invest locally (or perhaps with a supportive third party), develop your own team of professionals and set your own expectations. With a proprietary vendor, you invest in a company and expect them to deliver a service which matches your expectations. To my mind, investing locally is more desirable as you develop a physical infrastructure and staffing resource which you can continue to take advantage of in more diverse scenarios. Unfortunately, not all institutions have the financial resources to make this a reality. Sometimes you also have to admit that nothing in the Open Source world comes close to some proprietary products and services.






Gaming in Libraries


The final session of the day I attended was on the contested topic of "Gaming in Libraries". I have to admit, though I thoroughly enjoy gaming, I was a little sceptical of turning libraries into gaming hubs. With that said, thanks to Dave Patterson (@daveyp) and the enthusiasm of Richard Veevers (@richardveevers) and John Kirriemuir (@WordShore) I am now a convert.


First to be dispelled was the myth that gaming is "childish" - John has done a lot of research on the topic and the average age of a gamer in the USA is 34! We then discussed issues surrounding gaming violence and certification where one astute individual observed that by the time libraries had debating similar issues, the rest of society had moved on and accepted them.  


Richard's enthusiasm  for gaming was palpable and he was quick to demonstrate that libraries not only have an impressive suite of massively under used PCs (with regards to processing power), they also have ideal networking infrastructure. I suspect that public librarians may have one eye on their "footfall" figures when they consider gaming in their libraries too.


The final part of the session was reserved for exploring the value of gaming. As a popular recreation activity, many were prepared to accept gaming for its intrinsic value. For those who required greater justification for their inclusion into libraries, many were able to highlight the potential gaming held for education and service development. For example, Huddersfield University are about to launch Lemon Tree which turns a user's use of the library catalogue into a game which is hoped will encourage them to engage with their resources more fully. There was also talk of how games have been used to solve complex mathematical problems, help children with dyspraxia and dyslexia, rehabilitate patients recovering from serious accidents and augment creativity and the traditional curriculum.


Final Thoughts


Last Meal (No Cake)
Library Camp had enough intrinsic value for it to be considered a great success without looking into its potential fruits. The importance of the social aspect and the opportunity for like minded people to share their ideas, hope and fears cannot be overstated, particular in the current environment. With that said, there is a danger that Library Camp might not produce a legacy when it is essential that it does. It would be bordering on the criminal for so many talented people to gather and not begin to practice what they preached. I sincerely hope therefore that the enthusiasm is maintained and concrete progress is made in the form of new services, software and practices.


I came away from library camp full of ideas, new acquaintances and cake. I am already looking forward to next year but hope it's not so long before I meet some of the fantastic people I had the pleasure to encounter there.


PS - To my disappointment, there was no actual camping at library camp. Hopefully this can be rectified for next year!





Tuesday, 11 October 2011

Shambrarian Knights?

After several false starts I've finally decided to create a blog which I intend "regularly" update. In the past, I've set up but never used separate ones for work, life and play but though it is possible to separate work from play in the context of switching off from one or the other, I don't think arranging thoughts around those distinctions comes natural to me.

I will probably use this blog as an opportunity to vent, inform and comment on issues which particularly interest me and as an Aide-memoire. It will therefore contain posts on history, libraries and geek culture (with particular reference to Star Wars no doubt).

Why Shambrarian Knights? As Shambrarian International suggests, a Shambrarian is someone who works in the library or information management sector and couldn't be bothered to get a qualification. I intended the Knights part as a reference to my love of history and the Papal Knights. If you read it again, you may also spot a witty use of the word "Knights" in place of the word "Nights". See what I did there?