Week Beginning 16th June 2025

I attended the UK-Ireland Digital Humanities Association’s conference, which was held at the University of Glasgow this week.  See the programme here: https://digitalhumanities-uk-ie.org/2025-annual-event/2025-annual-event-programme/.  It was a great opportunity to hear about new and ongoing Digital Humanities related research.  As expected, there was a lot of discussion of AI, with a wide range of viewpoints represented, from enthusiastic adopters to a speaker giving an impassioned account of the dangers of big tech and the risks of reliance on AI.  I learnt a new term – ‘retrieval-augmented generation’, a concept that allows large language models to consult and incorporate a specified set of documents in addition to training data before generating answers, which helps reduce AI hallucinations and allows users to access cited sources.  Another speaker discussed ‘digital necromancy’ and ‘AI afterlives’ – how AI is used to create representations of dead people based on the data they have left behind.  Another speaker discussed how we are now in the ‘post-API era’ when companies that used to make their APIs publicly available for researchers to access have now closed these off to prevent access to them by web scrapers for AI systems.

Another speaker used the term ‘digital dinosaurs’ and although this wasn’t greatly expanded upon in the talk it got me thinking that maybe I am such a digital dinosaur – one of the first generation of born digital people who still very much lives a digital life but has been somewhat left behind by the pace of change – who doesn’t engage with social media and doesn’t use AI and instead uses ‘traditional’ digital systems such as web sites and emails.

Other speakers discussed specific tools and approaches they use.  A library discussed their use of the Omeka platform, a PhD student discussed using OpenRefine (https://openrefine.org/) for analysing data and Flourish (https://flourish.studio/) for generating visualisations.

There was an interesting presentation by a team who are using Transkribus to transcribe the Darmstädter Tagblatt newspaper, which has multiple layouts over its more than 200 years in print.  They discussed how they trained Transkribus to identify the regions and stated that their training is available for other projects, so I’ll have to see whether I could maybe reuse this for the Edinburgh Gazetteer.  They also discussed their workflow system, which they developed using the Prefect Python library (https://www.prefect.io/).  They also used a local installation of Transkribus, which was interesting to hear as I didn’t realise this was a possibility.

Another project discussed qualitative spatio-temporal reasoning, which uses LLMs to extract things relating to space and time from texts, looking for terms such as ‘next to’ or ‘alongside’ in order to extract events and relationships.  The project generated a nice visualisation of spatial clusters by paragraph over the course of a text, showing the number of times certain places were mentioned throughout a text.

Another speaker discussed the detailed digitisation of settlements and used the ESRI Experience Builder (https://www.esri.com/en-us/arcgis/products/arcgis-experience-builder/overview) to integrate and visualise the data.  Another presentation discussed using gaming systems to encourage reading in younger people.  They discussed the British Library’s ‘off the map’ game design competition, and ‘Litcraft’ (https://www.lancaster.ac.uk/litcraft/) which generates places from works of literature (e.g. Treasure Island) in Minecraft.  It was really interesting to hear all of the talks and I’m glad I had the opportunity to attend the event.

At the event I bumped into Moira Rankin of the University’s Archives and Special Collections, who I used to work with before starting my current job in 2012.  We discussed a couple of the old resources I’d been involved with developing that are no longer publicly available, and whether I might be available to help get them back online again.  We’re going to meet at a later date to discuss this further.

Also this week I added a further updated video to the Seeing Speech IPA charts for Eleanor Lawson and I spent a bit of time working on the Anglo-Norman Dictionary.  For this I created a list of all parts of speech referenced in every entry in the dictionary’s management system.  There are more than 100 different parts of speech listed across the entries and these need to be rationalised before I can develop a part of speech limit option for the advanced search.  This list allows the editors to see how many entries feature each part of speech and can then edit the entries as required.  I will also create a script to batch edit entries once the editors have worked through the list.

A couple of weeks ago the Iona people noticed that Google wasn’t doing a very good job of indexing the Iona place-names site and I spent a bit of time investigating what was going wrong towards the end of the week.  The site is hosted on a server within the university network and a while back we encountered an issue whereby web crawlers were swamping the server with requests, making all sites run slowly and in some cases crashing the server completely.  My colleague Luca therefore blocked web crawlers from accessing the sites on the server and the speed increase was remarkable.  However, it turns out that blocking all web crawlers also blocked Google from indexing the sites, an unintended and pretty serious consequence.

Luca and I worked together this week to test out some updates to the server software and these should hopefully block many web crawlers but will still enable legitimate indexing bots (not just Google’s) to access the sites.  Using Google’s search console (a tool available to verified owners of websites) I checked that their systems can now access the Iona site (and all others on the server).  It will probably take a few days (possibly longer) for Google’s indexes to be updated, but eventually we should begin to see the Iona pages appearing as they should in the Google search results again.

I also helped Rob Maslen with an issue he was experiencing with his City of Lost Books blog (https://thecityoflostbooks.glasgow.ac.uk/).  WordPress had automatically classified this as a commercial website and was blocking access to the stats unless Rob paid for a commercial license.  It would appear that a link to another person’s Patreon site from the blog had led WordPress to assume that the site was asking for donations.  Rob has since removed the link and has requested that WordPress reassess the site, and hopefully this will fix the issue.

Week Beginning 9th June 2025

I spent pretty much all of this week working on the new versioning system for the Books and Borrowing project, which I have now managed to complete.  Last week I made some good progress on the redevelopment of the API to enable data queries to be limited by version, and this week I was able to complete the work.  With a fully working new API running on my laptop, I considered updating the live system as the next task, but decided against this.  Updating the live system would have meant regenerating all of the data, and I realised that this would mean the new ‘version 1.1’ data that is already being worked on in the CMS would therefore be fully integrated into the front-end.  This is something we don’t want to happen yet as Matt and Katie are still working with the data and need it to reflect the state it was in at the official end of the project.

Instead, I began the process of creating a new version of the front-end that would connect to the new API and would be able to target and display specific versions of the data.  I decided to track the selected version throughout the front-end by means of both session variables and URLs.  Session variables on their own could be used to track the chosen version, but we also needed to include the version number in the URL in order to enable users to cite / share / bookmark specific versions.  This meant that every single URL that is generated throughout the site needed to incorporate the version number, including WordPress navigation menu items and other WordPress pages.

Adding in session tracking throughout WordPress brought some difficulties.  My session data was somehow getting overwritten as I moved between pages, with WordPress session data getting added in and replacing some of the variables I had set.  This took some time to get to the bottom of, and it turned out that WordPress’s emoji system was causing the problems.  I found a guide to disabling this system here: https://smartwp.com/disable-emojis-wordpress/ and once I’d followed these steps my session variables worked as I’d intended.

For most users the front-end will not appear to be any different.  It is now set up to default to the most recently published version of the data (including all earlier versions too) and none of the page URLs have changed.  The only thing that is different is the ‘cite’ popup, which now references the current version.  It also includes a link to this version in the URLs that appear, as the following screenshot demonstrates:

This is to ensure that the citation will always reference the version of the data the person cited.  If we didn’t include the current live version in the citation URL then the link may lead to different results if/when we publish a new version of the data.

I also updated the footer of every page to include the current live version of the data, as you can see in the following screenshot:

I also included a link in the footer to the new ‘Versions and changes page, which you can see below:

This still has some placeholder text and then lists all of the live versions of the data, including the version number, a description and the date of publication.  One version will always be selected (in blue and with a tick).  If you press on ‘Version 1.0’ this then sets the entire site to use this version of the data – everything including lists of libraries, facts and figures, registers, pages, borrowing records, search results and on this day items will be limited to data created as part of this version (or earlier, if applicable).

When an earlier version is selected, every page of the site has the version number in the URL, for example ‘/libraries/version-1.0’ and the selected version is tracked throughout the site.  To make it obvious to users that they are not looking at the most recent version of the database a warning is displayed on the screen, as shown below:

As with the ‘top’ link this box stays fixed in the bottom corner of the screen.  Pressing the ‘return to the most recent version’ button takes you to the homepage with the most recent version reinstated.

Independently of all of this, I’ve also updated the search results to add in a version filter, as shown in the following screenshot:

So for example, if you’re viewing the current version of the data (1.1) you can see how many borrowing records were created as part of this version as opposed to the earlier version, and filter the results if you wish.  Note that if you’ve set the site to use version 1.0 of the data then the 1.1 search results wouldn’t display and the 1.1 filter option won’t show up.

It’s taken a huge amount of effort to get all of this in place, updating pretty much every part of the Books and Borrowing system, but it’s now thankfully all in place.  The only thing left to do is to actually add all of this to the live site, which I was intending to do next week.  However, Matt and Katie are still doing research using the live site at the moment and I therefore need to hold off until they have completed this work.  This is because whilst I work on the updates the live site will temporarily include data from all versions, which will obviously affect the data they extract.  I’m probably going to have to hold off going live with the updates until August, as I’ll be on holiday and then at a conference between now and then.

Also this week I attended the launch of the Iona place-names resource on Monday evening, and it was great to see the resource (see https://iona-placenames.glasgow.ac.uk/map) go live after working on it over the past few years.  The Berwickshire place-names team also launched their published volume at the event, which was also great to be a part of.

Also this week we finalised the archiving of the old Cognitive Toponymy website, and the archived site is now available here: https://conifer.rhizome.org/UoGLibrary/cogtop/20250430094955/https://digital-humanities.glasgow.ac.uk/cogtop/

 

Week Beginning 2nd June 2025

I made the Iona place-names map resource live this week, in preparation for the official launch on Monday next week.  After working on the project on and off for several years it’s great to get the resource out there.  It can be accessed here: https://iona-placenames.glasgow.ac.uk/map/.

I spent a lot of my time this week continuing with the development of the versioning system for the Books and Borrowing project.  Due to other commitments I didn’t manage to work on this task last week, having completed the updates to the scripts for generating the cached data the week before, so it was good to be able to return to this task and make a bit of progress.  This week I focussed on updates to the API, which is a pretty major task as every single database call in more than 5000 lines of code needs to be updated.  Before I did so I also had to consider how the user’s selected data version would be passed to the API.  Appending it to the end of the existing set of parameters would be messy, as each endpoint would then potentially have the version passed through a different parameter.  Instead I decided to that the version should appear at the very start of each endpoint call, before the file type selection.  So for example, ‘/api/v2/1/json/libraries’ will retrieve all ‘version 1’ data for the ‘libraries’ endpoint as a JSON file while ‘/api/v2/2/json/libraries’ will retrieve all ‘version 2’ (and version 1) data.  In order to ensure older calls that don’t feature the version number continue to work, I set the API to use the ID of the most recent live version of the data if the version number is omitted.  Also, the API checks to ensure that any version number passed does actually correspond to a version of the data that is actually live in the system, so the API will never publish data that is still in development.

With this update to the API in place I then needed to work through every database query in every endpoint in order to add in the version limit.  In some endpoints this was pretty straightforward to do, but other ones did get rather complicated, involving cached data in new database tables or specific versions of cached JSON files.  I didn’t manage to complete the update to the API by the end of the week, but I’m hopeful I’ll be able to do so next week, at which point I aim to add a new version of the API to the live site, in preparation for redeveloping the front-end to work with the versioning system.

On Thursday this week we had the interviews for Ophira Gamliel’s project, and this took up more than half of the day.  The interviews all went smoothly and we had a good discussion about potential candidates afterwards.

Also this week I had a chat with Geert, the editor of the Anglo-Norman Dictionary, about further updates to the site.  We’re intending to add in a part of speech option to the advanced search and we spent some time discussing how this might function.  I also gave him so advice on long-term digital preservation, helped him set up a new ‘phase’ and fixed an issue when adding lead editor initials to entries through the dictionary management system.

I also gave some advice to Tony Harris, who is developing a thesaurus system based on my code for the Bilingual Thesaurus, and fixed a couple of issues that Marc had spotted with the unified API version of the Historical Thesaurus that I worked on in April.  Marc had spotted that some information was missing from the ‘recommended’ category section in the search results.  The blank recommended category information was caused by the API correctly returning an empty subcat array for categories that don’t have subcats.  Unfortunately the front-end code was checking for the presence of this array when deciding whether the recommended category was a sub or main category, and as the array was present (but empty) for maincats it was treating them as subcats and not displaying the correct details.  It took a while to identify the cause of the problem but once I’d done so it was very easy to fix.  The second issue that Marc spotted was a URL encoding issue, with both slashes and spaces causing problems.  This was something I managed to sort relatively quickly.

 

 

Week Beginning 26th May 2025

Monday this week was a public holiday, and I divided my four working days across several projects.  The Iona place-names project is having its official launch on the 9th of June and a fairly last minute request for the map interface was to incorporate ‘thematic maps’ – maps that show a set of markers that share a common theme, such as bird names.  Last Friday Sofia sent me the data for two example thematic maps (which I think we’re going to be calling ‘Virtual Trails’ in the public interface) and this week I set about creating the new feature.

When creating a new feature I’d usually create the sections of the CMS for managing the data before updating the front-end but as time is rather tight I thought it best to create the necessary structures in the database, the required updates to the API and work directly on the front-end with the sample data.  If there’s time before the launch I’ll create the CMS pages, but if not and we want to add more maps I’ll just have to get the team to send me spreadsheets and I’ll add the data directly to the database.  Below is a screenshot showing the new map:

I’m still working on this and there is still quite a bit to do, as adding in the new section and new map type has meant a lot of reworking of existing structures.  But as the above screenshot demonstrates, the interface now features a new ‘Virtual Trails’ menu section that when expanded has a placeholder description and a ‘Choose a virtual trail’ button.   Pressing on this opens a popup that lists the thematic maps, showing the titles and descriptions.  Pressing on a title closes the popup, adds the selected map’s title and description to the left-hand menu and loads the relevant map markers into the map.  You can then change the display options (e.g. turning labels to always on, changing the classification or base map) and open the records as you would with any other map.

So that’s the basics in place, but there are still many updates I’ll need to make to the front-end to fully integrate the new feature, including ensuring that the ‘Reset map’ resets the virtual trail menu contents, ensuring citations and bookmarks / sharing URLs work when a trail is selected, ensuring the table view works properly and cancelling out any already active search or browse options when a trail is selected.

Also this week I applied the new updates I’d made last week to the element glossary to the other place-name maps, such as Berwickshire.  I also added ‘deselect’ to the legend, as apparently users were unaware that the ‘select all’ option could be used to ‘deselect all’ when unchecked., and I spotted that the Iona full map ‘cite’ option was referencing the Ayr site and fixed that too.

For Speak For Yersel, I spent some time this week creating the slides for my presentation at the Lisbon DH conference, and I have now completed a first version of the slides and script.  I’m probably going to have to trim it down a little, though, as when running through it I was taking longer than my allotted ten minutes.  I’ll probably have to take out the parts about how the maps were generated, which is a shame as it’s the most DH section, but it’s also not something we discussed in the abstract so if anything needs cut it’s the obvious choice.

On Thursday this week I met with Ophira Gamliel to discuss the interviews for her project, which are taking place next week, and in the afternoon I attended  a Modernities Research Cluster event which featured two fascinating speakers.  I also fixed an issue with the Thesaurus of Old English for Jane Roberts and fixed a problem with the batch update of citations in the Anglo-Norman Dictionary.  This feature of the content management system allows citations across all entries (or selected entries) to be updated simply by editing the citation once.  However, there was a problem when adding dates to citations that did not already have them.  The script was running into problems when adding a date for an attestation that didn’t already have a <dateInfo> element.  I’d included a check for this, but the check was causing a fatal error rather than executing the code that I’d written to deal with such attestations.  Thankfully once identified it was relatively easy to fix the problem, and now the batch update system is working perfectly.