<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>museum-digital:blog - Performance</title>
    <subtitle>A blog on museum-digital and the broader digitization of museum work.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://blog.museum-digital.org/tags/performance/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://blog.museum-digital.org"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-10-01T00:00:00+00:00</updated>
    <id>https://blog.museum-digital.org/tags/performance/atom.xml</id>
    <entry xml:lang="en">
        <title>Braving the Waves. Surviving in Times of AI.</title>
        <published>2026-10-01T00:00:00+00:00</published>
        <updated>2026-10-01T00:00:00+00:00</updated>


        
        <author>
          <name>Joshua Ramon Enslin</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.museum-digital.org/2026/10/01/braving-the-waves-surviving-in-times-of-ai/"/>
        <id>https://blog.museum-digital.org/2026/10/01/braving-the-waves-surviving-in-times-of-ai/</id>
        
        <summary type="html">Is FAIR publishing of cultural heritage data still possible in times of large-scale AI-scraping?</summary>
        
        <content type="html" xml:base="https://blog.museum-digital.org/2026/10/01/braving-the-waves-surviving-in-times-of-ai/">&lt;p&gt;Now that the &lt;a href=&quot;https://blog.museum-digital.org/2026/09/30/pre-release-of-musdbs-new-ui/&quot;&gt;preview release of musdb’s new UI has finally been released&lt;/a&gt;, there’s time to write about the other sides of museum-digital. More usual struggles. Which is to say: New, larger waves of AI scrapers and bots that once again started to impair our services starting July this year.&lt;/p&gt;
&lt;p&gt;We maintain that hypocrisy is not for us. I personally have been involved in discussions about the &lt;em&gt;FAIR&lt;/em&gt; principles from 2015 onwards. And in 2015 they were already running under that label for a while. As a formalized document, they’ve been around since 2016, but disregarding the label, the principles and surrounding discussions go back, I guess, at least to the 1990s.&lt;/p&gt;
&lt;p&gt;In the cultural sector, with many institutions being primarily tax-payer funded, we want to provide our data and services in a &lt;em&gt;F&lt;/em&gt;indable, &lt;em&gt;A&lt;/em&gt;ccessible, &lt;em&gt;I&lt;/em&gt;nteroperable, and &lt;em&gt;R&lt;/em&gt;eusable manner. Relevant here are primarily &lt;em&gt;accessible&lt;/em&gt;, &lt;em&gt;interoperable&lt;/em&gt;, and &lt;em&gt;reusable&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Realistically, accessibility refers to two things: Immediate, universal barriers like a requirement for authentication should be avoided where possible. On the other hand, user-specific barriers should be reduced as much as possible as well: Human-readable pages should e.g. be designed with sufficient contrast.&lt;/p&gt;
&lt;p&gt;If one sees other services and machines as users, which may be reductionist but is logically much more coherent than doing otherwise, then &lt;em&gt;interoperable&lt;/em&gt; refers simply to a special form of accessibility: As data should be provided in a way that as many human users can use as possible, it should also be served in formats that machines can read. Ideally in ways that machines can read without further adjustments - following open standards.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Reusable&lt;/em&gt; then builds upon these. As the data is now freely accessible by others, setting appropriate licenses allows for the creative reuse of the data.&lt;/p&gt;
&lt;p&gt;Ten years after the FAIR principles were formalized, we finally have someone who reuses our data on a massive scale. We should rejoice. Unfortunately all our previous conceptions of how that reuse might take place turned out to be wrong.&lt;/p&gt;
&lt;h2 id=&quot;celebrating-ai-scrapers&quot;&gt;Celebrating AI Scrapers?&lt;/h2&gt;
&lt;p&gt;AI scrapers flooding web services, and especially larger, well-established infrastructures with requests has been an ongoing story for some two years now. Last year museum-digital was met with a first large wave of AI scrapers. See the previous blog posts (&lt;a href=&quot;https://blog.museum-digital.org/2025/12/09/updates-ai-scrapers-and-resilience/&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://blog.museum-digital.org/2025/12/22/cleaning-out-our-closet/&quot;&gt;2&lt;/a&gt;, &lt;a href=&quot;https://blog.museum-digital.org/2025/12/29/trimming/&quot;&gt;3&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;On the one hand, using our data for training AI models is undoubtedly reuse. It is even productive reuse: It’s a small contribution to the training of technology that, at its current quality, sounded like science fiction 10 years ago.&lt;/p&gt;
&lt;p&gt;On the other hand, this type of reuse takes place without attribution. AI scrapers work based on scale; Machine-readable APIs are uninteresting to scrapers. They suck up as much data as possible, as quickly as possible. Any page-specific adjustments, such as finding and using the API, would reduce the speed of scraping. The requests are so numerous, that they routinely crash servers. Last but not least, those prominently benefitting from the AI hype are far from sympathetic people.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But principles are principles.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It, again, cannot be denied that what AI scraping is eventually aimed at is reuse. Even though they use HTML rather than the APIs we lovingly carved for them, they interoperate with our services in the way most accessible to them.&lt;/p&gt;
&lt;p&gt;The problem is, that they are not playing fair. And if the previously unlikely number of requests leads to servers crashing and shutting down, then all principles were for naught. A service that is providing no data at all cannot provide them &lt;em&gt;FAIR&lt;/em&gt;ly either.&lt;/p&gt;
&lt;p&gt;At museum-digital we have seen the new requests as an opportunity to improve our software. If it can withstand the onslaught of thousands of bots a second, it is confirmedly battle-tested and stable. Improving our publishing software on the other hand also meant cutting out overly resource-hungry functionalities. Last year we dropped most publicly available, server-side PDF generation capabilities, we moved the IIIF APIs to an separate configuration that is specced to be able to fall over without impairing the rest of our services. We improved the parsing of search terms and introduced rate-limiting (how many requests a single IP can perform for a given time).&lt;/p&gt;
&lt;p&gt;The new wave of AI scrapers since July is even bigger than last year’s. Those improvements were not sufficient to keep our primary server, which hosts the production databases, stable.&lt;/p&gt;
&lt;h2 id=&quot;from-each-according-to-their-ability-load-shedding&quot;&gt;From Each According to Their Ability: Load Shedding&lt;/h2&gt;
&lt;p&gt;We continued on last year’s course however, analyzing the scrapers’ requests, their influence on server stability (which is to say, which requests were especially resource-intensive) and adjusted our setup accordingly. Note, that we did &lt;strong&gt;not&lt;/strong&gt; scale up: museum-digital runs on exactly the same bare-metal servers today as it did two years ago.&lt;/p&gt;
&lt;p&gt;In analysis, we identified two types of especially resource-intensive browsing behaviors that are almost entirely limited to scrapers (as well as some very engaged researches, to whom we express our regret for now regularly banning them):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scrapers follow links on search pages, especially the facet search, and end up combining more and more search parameters. It is unlikely that a human would perform a search for objects that “Are related to Berlin, and related to Germany, and related to Institution X, but not related to Institution Y, and also related to a time between 1990 and 2000.” For an automated scraper it is normal behavior.&lt;/li&gt;
&lt;li&gt;If a published object page has been updated, a snapshot of its current state is automatically saved to provide an archived version of the page at a given time. This is thought mainly for researches to be able to cite a given state of the page. In everyday operation, archive pages should be barely used. They are also de-listed from search machines. But saving snapshots again and again leads to the existence of a large number of links and separate pages scrapers can scrape to no benefit to anybody.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both functionalities are legitimately useful but scale badly.&lt;/p&gt;
&lt;p&gt;We hence introduced load shedding: Whenever a search is performed or an archive page is accessed, the current server load is evaluated. If it is above a certain threshold, the server does not perform complicated search queries (depending on how high load is, it is restricted to a minimum of three search parameters) or does not load the archive page. Instead a warning is presented, that the given action is currently unavailable and a custom HTTP error code is sent. If the same IP causes that error code to be sent twice, the IP is blocked for a while.&lt;/p&gt;
&lt;p&gt;As of the time of writing writing, we have thus blocked a total of 131,014,530 IPs in two month, with 5,802,771 being currently blocked.&lt;/p&gt;
&lt;p&gt;This approach follows our principles: We try to be fair with everybody. But if users are not fair and do not follow advise, we don’t feel obliged to continue playing fair either.&lt;br /&gt;
Unfortunately this approach works on the level of blocking whole IPs. As “residential proxies” - back in the days we called them botnets infecting home routers - have become an ever larger problem, it is not unlikely that actually interested, normal users also unknowingly host an AI scraper at home. I fear I’ve already encountered one such case, were a colleague could not access museum-digital for seemingly no good reason from her home network. Otherwise, it is surprisingly effective - the number of requests has barely been reduced, but our services are essentially stable.&lt;/p&gt;
&lt;p&gt;The only crash since happened the day before yesterday and was caused by the combination of bots and an error in our controlled vocabularies - the latter of which is entirely our fault.&lt;/p&gt;
&lt;h2 id=&quot;numbers-games-logging-strategy&quot;&gt;Numbers Games: Logging Strategy&lt;/h2&gt;
&lt;p&gt;After the above-mentioned actions had effectively returned stability to our publicly accessible portals, one issue remained for internal services: File uploads were incredibly slow. It turned out that the large number of requests being permanently logged overburdened the SSD. We have hence disabled the general access logging, restricting ourselves to logging requests that either cause errors or trigger slow responses. This reduces the ability to react well-informed to new waves of requests and actual attacks. Thankfully those also commonly trigger actual errors we can still identify.&lt;/p&gt;
&lt;h2 id=&quot;fairness-fairness&quot;&gt;Fairness, FAIRness&lt;/h2&gt;
&lt;p&gt;With these actions we have again averted the need to use more drastic strategies that would limit accessibility to users - human and machine alike - like blanket bans on whole regions of the world or the installation of software such as &lt;a rel=&quot;external&quot; href=&quot;https://github.com/TecharoHQ/anubis/&quot;&gt;Anubis&lt;/a&gt;. And, again, we have not yet needed to improve our hardware (and pay the price for that), even though that might be in order eventually. It might be wise for other reasons as well.&lt;/p&gt;
&lt;p&gt;A holistic picture of one’s setup - software, hardware, systems administration - and the capability to think and act upon these together helps a lot.&lt;br /&gt;
But, if anything, hosting in a &lt;em&gt;FAIR&lt;/em&gt;, principled way still works in these trying times.&lt;/p&gt;
&lt;div
  class=&quot;my-4 flex flex-col rounded-lg bg-(--admonition-bg)&quot;
  style=&quot;--admonition-bg: var(--admonition-info);&quot;
&gt;
  &lt;div class=&quot;flex items-center rounded-t-lg bg-(--admonition-bg) p-1&quot;&gt;
    &lt;div
      class=&quot;mx-2 h-4 w-4 text-[0px] [background:var(--url)_center_center_no-repeat] dark:invert&quot;
      style=&quot;--url: url(icons/info.svg);&quot;
    &gt;
      info
    &lt;/div&gt;
    &lt;span&gt;&lt;strong&gt;AI Use&lt;/strong&gt;&lt;/span&gt;
  &lt;/div&gt;
  &lt;div class=&quot;pl-4&quot;&gt;&lt;p&gt;Post image generated using Anima Base v1.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div
  class=&quot;my-4 flex flex-col rounded-lg bg-(--admonition-bg)&quot;
  style=&quot;--admonition-bg: var(--admonition-info);&quot;
&gt;
  &lt;div class=&quot;flex items-center rounded-t-lg bg-(--admonition-bg) p-1&quot;&gt;
    &lt;div
      class=&quot;mx-2 h-4 w-4 text-[0px] [background:var(--url)_center_center_no-repeat] dark:invert&quot;
      style=&quot;--url: url(icons/info.svg);&quot;
    &gt;
      info
    &lt;/div&gt;
    &lt;span&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/span&gt;
  &lt;/div&gt;
  &lt;div class=&quot;pl-4&quot;&gt;&lt;p&gt;This content is licensed under a &lt;a rel=&quot;external&quot; href=&quot;https://creativecommons.org/licenses/by/4.0/&quot;&gt;Creative Commons Attribution 4.0 International license&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>

        
        
        <post-thumbnail><url>https://blog.museum-digital.org/2026/10/01/braving-the-waves-surviving-in-times-of-ai/1422001-masterpiece-best-quality-score_7-dis-Animaanima_baseV10-2.png.webp</url></post-thumbnail>
        
        
    </entry>
    <entry xml:lang="en">
        <title>Summary of the monthly user meetup (April 2023) / New features and improvements</title>
        <published>2023-05-07T00:00:00+00:00</published>
        <updated>2023-05-07T00:00:00+00:00</updated>


        
        <author>
          <name>Joshua Ramon Enslin</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.museum-digital.org/2023/05/07/summary-of-the-monthly-user-meetup-april-2023-new-features-and-improvements/"/>
        <id>https://blog.museum-digital.org/2023/05/07/summary-of-the-monthly-user-meetup-april-2023-new-features-and-improvements/</id>
        
        <content type="html" xml:base="https://blog.museum-digital.org/2023/05/07/summary-of-the-monthly-user-meetup-april-2023-new-features-and-improvements/">&lt;p&gt;We continued the series of monthly user meetups and again discussed the new features and improvements. A summary can be found below.&lt;/p&gt;
&lt;h2 id=&quot;new-developments&quot;&gt;New Developments&lt;/h2&gt;
&lt;p&gt;The last month has been an exceptionally slow month in terms of technical development around museum-digital. There are however some newsworthy tidbits.&lt;/p&gt;
&lt;h3 id=&quot;musdb&quot;&gt;musdb&lt;/h3&gt;
&lt;h4 id=&quot;recording-external-ids-for-museums&quot;&gt;Recording external IDs for museums&lt;/h4&gt;
&lt;p&gt;Museums, like all of us, are present in more and more databases. For linking different databases, it is useful - sometimes necessary - to know the ID of the same entity in both databases. Hungarian law thus mandates collection management systems, which are to be accredited for fully paperless use in museums, to allow storing a museum’s ID with the Hungarian Statistical Office. musdb can now do exactly that: Store external IDs of museums in a given list of external source repositories / databases.&lt;/p&gt;
&lt;p&gt;The list of available external databases and the regular expressions to validate IDs in them are available &lt;a rel=&quot;external&quot; href=&quot;http://The%20list%20of%20available%20external%20databases%20and%20the%20regular%20expressions%20to%20validate%20IDs%20in%20them%20are%20available%20here.%20For%20now,%20the%20list%20only%20contains%20the%20Hungarian%20Statistical%20Office,%20but%20the%20more%20options%20there%20will%20be%20in%20the%20future,%20the%20better.&quot;&gt;here&lt;/a&gt;. For now, the list only contains the Hungarian Statistical Office, but the more options there will be in the future, the better.&lt;/p&gt;
&lt;h4 id=&quot;more-fields-covered-by-list-results-and-excel-export&quot;&gt;More fields covered by “list results” and Excel export&lt;/h4&gt;
&lt;p&gt;The “list results” page (a.k.a. table view) for object search results offers the option to view the selected objects’ data in a customizable tabular format. Mainly because of that exact tabular format, it is not possible to display everything a full database view of the object offers using the “list results” page. Over the last month, we have nevertheless extended the list of displayable fields in the “list results” table.&lt;/p&gt;
&lt;p&gt;Thus, it is now possible to display all translations for the object type, object name, descriptions, etc. of an object. Similarly, it is now possible to list all Weblinks linked to the object as a compiled (comma-separated) field. As the automated report generation and the Excel export tools build upon the same basic code as the “list results” page, these new fields are now also available in those cases.&lt;/p&gt;
&lt;h4 id=&quot;new-field-for-objects-last-change-of-permanent-location&quot;&gt;New field for objects: “Last change of permanent location”&lt;/h4&gt;
&lt;p&gt;It is now possible to manually record the last date, the permanent location of a given object has been updated. This obviously makes sense for tracking relocations and re-organizations within the museum. Importantly, the field needs to be manually filled out, as the date of the last change of the permanent location may be far in the past or frankly unrelated to the database, even if there is one (say, the museum moves the depot to a different place, but the date is only later updated in the database via a batch editing process).&lt;/p&gt;
&lt;h4 id=&quot;user-interface&quot;&gt;User interface&lt;/h4&gt;
&lt;p&gt;After there were some reports of people not seeing the difference between a valid form in musdb and an invalid / incomplete one, we updated the design of submit buttons. Submit buttons in incomplete forms are now blurred out, to add another hint at the incompleteness of the form.&lt;/p&gt;
&lt;h3 id=&quot;frontend&quot;&gt;Frontend&lt;/h3&gt;
&lt;h4 id=&quot;improved-performance-and-decreased-bandwidth-usage-serving-images-in-webp&quot;&gt;Improved performance and decreased bandwidth usage: serving images in webp&lt;/h4&gt;
&lt;p&gt;Over the last years, there have been a number of new image formats seeking to combine all the features of older and well-established formats like JPG and PNG with an improved compression. The most established format of that newer generation of image formats is &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/WebP&quot;&gt;webp&lt;/a&gt;, which is by now well-supported by all modern browsers and most local image viewers.&lt;/p&gt;
&lt;p&gt;To save bandwidth and improve loading speed, we now store and serve full-sized webp versions of newly uploaded object images along with the regular jpg versions. If possible, the webp version is served on object pages. An additional benefit is the aforementioned support for features jpg files do not support, such as transparent image backgrounds.&lt;/p&gt;
&lt;h4 id=&quot;iframe-embedding-now-only-possible-from-whitelisted-sources&quot;&gt;iFrame embedding now only possible from whitelisted sources&lt;/h4&gt;
&lt;p&gt;If a museum wants to embed their data from museum-digital into their own website, there are traditionally two ways to do so. The better, but much more complicated option is to use the API to fetch the relevant data and present them in any way one wants. Much easier (and cheaper obviously) is embedding the museum’s data using iframes.&lt;/p&gt;
&lt;p&gt;Unfortunately, iframes can also be used for attacks on users’ login data. We have thus now restricted this option to only allow embedding from whitelisted sources. If a museum wants to embed their data this way, this means that they now need to notify their regional administrators beforehand.&lt;/p&gt;
&lt;h3 id=&quot;importer&quot;&gt;Importer&lt;/h3&gt;
&lt;p&gt;The importer now supports imports for exports from Startext’s &lt;a rel=&quot;external&quot; href=&quot;https://www.startext.de/produkte/hida&quot;&gt;HiDa&lt;/a&gt; in the configuration of the Saxon State Agency for Museums.&lt;/p&gt;
&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;
&lt;p&gt;In other news, the &lt;a rel=&quot;external&quot; href=&quot;https://www.youtube.com/@museum-digital/&quot;&gt;Youtube&lt;/a&gt; channel has picked up steam, with some new tutorials both in German and Ukrainian.&lt;/p&gt;
&lt;div
  class=&quot;my-4 flex flex-col rounded-lg bg-(--admonition-bg)&quot;
  style=&quot;--admonition-bg: var(--admonition-info);&quot;
&gt;
  &lt;div class=&quot;flex items-center rounded-t-lg bg-(--admonition-bg) p-1&quot;&gt;
    &lt;div
      class=&quot;mx-2 h-4 w-4 text-[0px] [background:var(--url)_center_center_no-repeat] dark:invert&quot;
      style=&quot;--url: url(icons/info.svg);&quot;
    &gt;
      info
    &lt;/div&gt;
    &lt;span&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/span&gt;
  &lt;/div&gt;
  &lt;div class=&quot;pl-4&quot;&gt;&lt;p&gt;This content is licensed under a &lt;a rel=&quot;external&quot; href=&quot;https://creativecommons.org/licenses/by/4.0/&quot;&gt;Creative Commons Attribution 4.0 International license&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>

        
    </entry>
    <entry xml:lang="en">
        <title>Summary of the monthly user meetup (March 2023)</title>
        <published>2023-04-05T00:00:00+00:00</published>
        <updated>2023-04-05T00:00:00+00:00</updated>


        
        <author>
          <name>Joshua Ramon Enslin</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.museum-digital.org/2023/04/05/summary-of-the-monthly-user-meetup-march-2023/"/>
        <id>https://blog.museum-digital.org/2023/04/05/summary-of-the-monthly-user-meetup-march-2023/</id>
        
        <content type="html" xml:base="https://blog.museum-digital.org/2023/04/05/summary-of-the-monthly-user-meetup-march-2023/">&lt;p&gt;Yesterday, we held our regular user meetup as scheduled. As promised, below you can find an overview of the new features and updates below some more general points.&lt;/p&gt;
&lt;h2 id=&quot;general&quot;&gt;General&lt;/h2&gt;
&lt;h3 id=&quot;youtube-channel&quot;&gt;YouTube channel&lt;/h3&gt;
&lt;p&gt;There now is a &lt;a rel=&quot;external&quot; href=&quot;http://youtube.com/@museum-digital/&quot;&gt;museum-digital YouTube channel&lt;/a&gt;. For now, one can find some German-language screencasts on different features in musdb and nodac there.&lt;/p&gt;
&lt;h3 id=&quot;new-sections-on-project-page-www-museum-digital-org&quot;&gt;New sections on project page (www.museum-digital.org)&lt;/h3&gt;
&lt;p&gt;As already described in the previous post, the project page &lt;a rel=&quot;external&quot; href=&quot;https://www.museum-digital.org/&quot;&gt;www.museum-digital.org&lt;/a&gt; now features a &lt;a href=&quot;https://blog.museum-digital.org/2023/03/14/a-calendar-is-a-commitment/&quot;&gt;calendar&lt;/a&gt;. Since then, we have also added a &lt;a rel=&quot;external&quot; href=&quot;https://en.about.museum-digital.org/about/people/&quot;&gt;small page listing&lt;/a&gt; people working on museum-digital - e.g. some of the coordinators and developers - as well as power users. The list will obviously always be more than incomplete, but if you want to be listed, just send a mail.&lt;/p&gt;
&lt;h2 id=&quot;development&quot;&gt;Development&lt;/h2&gt;
&lt;h3 id=&quot;musdb&quot;&gt;musdb&lt;/h3&gt;
&lt;h4 id=&quot;allow-batch-editing-of-photographers-on-image-list&quot;&gt;Allow batch editing of photographers on image list&lt;/h4&gt;
&lt;p&gt;Running batch updates on the ownership, license status and photographer of a set of objects can be done either via the institution-wide settings page or via a selection on the image list page. The batch updating functionality of the institution-wide settings page works by replacing the given entries in one of the fields for all objects of the museum - it is thus not suitable if one is to only update the photographer field for a list of objects from a single collection (rather than the whole museum).&lt;/p&gt;
&lt;p&gt;Batch updating images’ legal information from the image list (click on an image in the list and drag it to activate selection mode, then update by selection) was only possible in the case of image licenses and rights holders. With a small update, it is now possible to also batch-update the images’ photographers field that way.&lt;/p&gt;
&lt;h4 id=&quot;the-api-can-now-update-object-event&quot;&gt;The API can now update object event&lt;/h4&gt;
&lt;p&gt;Thus far, the API could only be used for adding wholly new object events (who did what, when, and where, with the object) or deleting them. With the updates of this month, now possible to directly update events.&lt;/p&gt;
&lt;p&gt;This is already actively used in customizing musdb using a &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Tampermonkey&quot;&gt;Tampermonkey&lt;/a&gt; script by some of the norm data editors. They can thus add a custom button to transfer incomplete actor or place information to the object’s description. This button, on the other hand, would not be useful for regular users at all.&lt;/p&gt;
&lt;h4 id=&quot;ui-improvements-for-the-object-search-interface-and-new-sort-option&quot;&gt;UI improvements for the object search interface and new sort option&lt;/h4&gt;
&lt;p&gt;After a very fruitful discussion and feedback from Hungarian colleagues, we got around to some user interface improvements in the object overview and search interface. A lengthy discussion can be found in a dedicated &lt;a href=&quot;https://blog.museum-digital.org/de/2023/03/21/detailverbesserungen-bei-der-objektsuche-in-musdb/&quot;&gt;blog post in German&lt;/a&gt;. To sum up: there are now headlines for each subsection of the sidebar and tooltips explain the different buttons and search and sort options upon hovering one’s mouse over them. Additionally, a new sort option was added to sort objects by the number characters within the inventory numbers of the searched objects.&lt;/p&gt;
&lt;h4 id=&quot;two-bugfixes-navigating-to-the-previous-or-next-object-in-a-selection&quot;&gt;Two bugfixes: Navigating to the previous or next object in a selection&lt;/h4&gt;
&lt;p&gt;It is a very simple but similarly useful feature: One runs an object search and thus creates a result list of objects. After viewing or editing one of the objects, one can then proceed to the next one in the results list by clicking at the arrows at the top of the sidebar.&lt;/p&gt;
&lt;p&gt;Unfortunately, musdb had two bugs preventing this navigation for some of the available sort options. On the one hand, newer sort options required manually adding the search fields to a list specific to the previous/next navigation thus far - and had not been covered yet. Navigating to the next object after sorting by e.g. the length of the searched objects was thus impossible so far. The specific list of sort fields has now been removed in the previous/next navigation. Instead, the main list of sort options from the main object search class is directly used - in effect preventing such issues of “forgotten” values from ever appearing again.&lt;/p&gt;
&lt;p&gt;A second issue concerned string-based sort options. For an improved performance, the previous / next navigation works by querying the underlying search index for the next object where e.g. the object ID is lower than the current one (`WHERE id &amp;gt; 20000`). The same search logic is straight-out not possible with string-based sort options, as search queries for values greater than or smaller than a given one cannot be executed with string-based fields.&lt;/p&gt;
&lt;p&gt;Fortunately, the issue came up just after we had implemented an option to search and &lt;a href=&quot;https://blog.museum-digital.org/de/2023/03/21/detailverbesserungen-bei-der-objektsuche-in-musdb/&quot;&gt;sort objects by the numeric components of their inventory numbers&lt;/a&gt;. Thus, the previous / next navigation can fall back to that sort option if a user wants to navigate to the next object after sorting by inventory number. As stated back when we introduced the new search and sort option: It should work for most museums. Unfortunately, there is no such option to mitigate the issues of string-based sorting when sorting objects by their names. The best we could do in this case is displaying a clear error message, stating that the previous / next navigation is &lt;em&gt;not&lt;/em&gt; available when sorting by the object’s names.&lt;/p&gt;
&lt;h4 id=&quot;home-location-can-now-be-selected-as-a-required-field-when-adding-new-objects&quot;&gt;“Home location” can now be selected as a required field when adding new objects&lt;/h4&gt;
&lt;p&gt;On the institution-wide settings page, museum directors (or those holding the same user role within musdb) can determine which fields are required when adding new objects. The list of selectable fields automatically covers all free text fields linked to the object. Repeat fields and references to other sections of musdb need to be manually implemented however. As the home or permanent location of an object is a most logical and common field to be required for all object, it was only consequential to prioritize making it available as a required field. We have done so now.&lt;/p&gt;
&lt;h4 id=&quot;major-performance-improvements-in-list-results-page&quot;&gt;Major performance improvements in “list results” page&lt;/h4&gt;
&lt;p&gt;The “list results” page provides for a table view of object search results, allows the export of search results to Excel, and is - under the hood - also used for generating custom reports. We managed to achieve a considerable improvement in the page’s performance by bulk loading data and simplifying the code of the HTML page. Both adjustments should not really be noticable when one tries to list or export only some objects. Exporting some thousand objects should work considerably faster now however.&lt;/p&gt;
&lt;h3 id=&quot;frontend&quot;&gt;frontend&lt;/h3&gt;
&lt;h4 id=&quot;pdf-metadata-for-main-object-pdf-export&quot;&gt;PDF metadata for main object PDF export&lt;/h4&gt;
&lt;p&gt;XMP metadata are now written into exported PDF files. Thus, users can more easily identify authorship, titles etc., especially when using specialized software like e-book readers.&lt;/p&gt;
&lt;h4 id=&quot;linking-from-collection-descriptions&quot;&gt;Linking from collection descriptions&lt;/h4&gt;
&lt;p&gt;Collection descriptions are now being parsed for the existence of URLs. If one, starting with https:// (http:// is ignored) exists, the URL is automatically transformed into a clickable link.&lt;/p&gt;
&lt;h3 id=&quot;nodac&quot;&gt;nodac&lt;/h3&gt;
&lt;p&gt;We added some translation variables on the start page.&lt;/p&gt;
&lt;h3 id=&quot;themator&quot;&gt;themator&lt;/h3&gt;
&lt;p&gt;The “themator” has received a small user interface improvement for mobile devices. The topic-specific navigation or table of contents is now moved below rather than above the main content of a page in the regular “topic” viewing mode on mobile devices.&lt;/p&gt;
&lt;h3 id=&quot;importer&quot;&gt;Importer&lt;/h3&gt;
&lt;h4 id=&quot;importing-gifs&quot;&gt;Importing GIFs&lt;/h4&gt;
&lt;p&gt;To simplify the handling of images, museum-digital internally only uses JPG image files (webp versions are generated for a faster loading, but are optional). While they lack some support for features like transparency, JPGs provide for a much better compression with images of three-dimensional things and subjects not featuring solid colors. Newer formats like AVIF and Webp unfortunately still lack the support among locally installed image viewers for us to fully switch over to them.&lt;/p&gt;
&lt;p&gt;The importer handles input PNGs by converting them to JPG files. Starting this month, the same can be done with input GIF files.&lt;/p&gt;
&lt;h4 id=&quot;improved-handling-of-blacklisted-actors-places-and-times&quot;&gt;Improved handling of blacklisted actors, places and times&lt;/h4&gt;
&lt;p&gt;One of the key issues with imports is what happens after imports. Specifically, museum-digital uses controlled vocabularies for actors, places, times and tags that can be linked to an object directly or via events. When people enter new such entries using musdb, there are a number of safeguards and nudges to ensure productive inputs. Adding a new actor, for example, requires one to enter at least 10 characters of a description for the actor. Input fields for the date of birth and death are also provided. If possible, one can enter a Wikipedia or Wikidata URL (or ID) and directly fetch the relevant information from there.&lt;/p&gt;
&lt;p&gt;During imports, there is no space for asking questions to the importing institution. Incomplete or false actor, place, time and tag names (for example, if two actors are linked as one; “John Doe and Jane Doe” is not one single actor!) are given, these are necessarily imported into our controlled vocabularies by default. Depending on the import, this puts a significant burden on our volunteer group of vocabulary editors.&lt;/p&gt;
&lt;p&gt;To eventually get to a solution, we have added options for automatically rewriting terms (e.g. “Berlin, Germany” will be autocorrected to “Berlin”) and blacklisting them completely (“Good morning …” is no actor“). Thus far, blacklisted terms were simply ignored by the importer.&lt;/p&gt;
&lt;p&gt;“Unknown painter” is not an actor, but the information that it is a painter may still be useful. To allow us to blacklist more and keep the controlled vocabularies “clean” without losing such data, the importer now imports blacklisted terms in event components (“who painted it?”) into the event annotation. If the only known information on the whole event is blacklisted, the event cannot be created - an event always requires at least one linked actor, place or time. The event annotation of “empty events” is hence moved to the object description automatically.&lt;/p&gt;
&lt;div
  class=&quot;my-4 flex flex-col rounded-lg bg-(--admonition-bg)&quot;
  style=&quot;--admonition-bg: var(--admonition-info);&quot;
&gt;
  &lt;div class=&quot;flex items-center rounded-t-lg bg-(--admonition-bg) p-1&quot;&gt;
    &lt;div
      class=&quot;mx-2 h-4 w-4 text-[0px] [background:var(--url)_center_center_no-repeat] dark:invert&quot;
      style=&quot;--url: url(icons/info.svg);&quot;
    &gt;
      info
    &lt;/div&gt;
    &lt;span&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/span&gt;
  &lt;/div&gt;
  &lt;div class=&quot;pl-4&quot;&gt;&lt;p&gt;This content is licensed under a &lt;a rel=&quot;external&quot; href=&quot;https://creativecommons.org/licenses/by/4.0/&quot;&gt;Creative Commons Attribution 4.0 International license&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>

        
        
        <post-thumbnail><url>https://blog.museum-digital.org/2023/04/05/summary-of-the-monthly-user-meetup-march-2023/md-YT-Banner.jpg.webp</url></post-thumbnail>
        
        
    </entry>
</feed>
