Declarative programming for Digital Preservationists @ NTTW8
Just released on the No Time to Wait (NTTW) YouTube channel is my presentation from NTTW8 in Karlsruhe, Germany. (Slides also available here).
The presentation follows up on my proposal for iPRES 2024 and allowed me to present parts of what was, in the end, a pretty significant paper (in terms of word count).
Some of my reflections on the presentation are below.
Sticking the landing
A little nervous, and surprisingly quite introverted out from the first one and a half days I didn’t quite stick the landing in Karlsruhe. That being said, I got some good feedback, especially from @p3ter who took the message away to think about it some more and wrote back to me later with positive thoughts about the declarative style.
My main message about declarative is that it is a paradigm to be mindful about. Before we go headlong into writing solutions in imperative languages such as Rust, Python, or Golang, are there other paradigms such as Declarative or Functional programming that we might consider? That might solve a problem more effectively? On declarative programming specifically, can designing a declarative interface help our future work efforts?
Declarative programming interfaces provide an high-level abstraction for what can otherwise be complicated code to write which can promote economies of scale for projects that you want other people to participate in. To take a bit of a shortcut, imagine what accessing databases would be like if we didn’t have SQL fairly standardized across many different implementations of relational database? For those using Twine in the Bits and Bots study group, you may already be appreciative of the benefits of a declarative interface for interactive story-telling.
@kieranjol asked an especially good question that I fumbled. Kieran asked if I had used any of the techniques I promoted in my own work? Well, aside from using other’s declarative work, and too focused on the ways we might use declarative in the future, I neglected to mention my key-value language and implementation that I wrote in the early 2010s. As a declarative language it made writing BoltDB code easier in Golang (although I am only one of two I know using it!). KVAL took a huge amount of boiler plate away on the imperative side of the language. Technically it can also be a language for accessing other key-value systems or databases, just like how SQL is used for relational ones.
Since the NTTW presentation I have also written JSONID which uses a declarative approach to defining patterns that we can use to identify JSON structures. Think of it like a language for a retrospective JSON schema where one didn’t exist up front. A declarative approach to writing JSON patterns has allowed me to write over 60 identifying patterns for JSON objects in very short-order; although many still need to be proven in the wild, they provide a good baseline.I have written more about JSONID for the OPF.
Overall, I was grateful that NTTW could provide an outlet for this effort. For me, laying the foundation for further conversations around this kind of work was important. If the original paper lacked focus in any way, having the information out there, and something to reference allows me, and maybe others, to create more focused writing and presentations in the future. Hopefully it will be of inspiration to someone out there writing new solutions.
Any feedback at all on the video above would be appreciated, either here, or in response to the Mastodon post on this blog, or YouTube via the NTTW channel.
Also, please do check out NTTW’s videos on YouTube and consider speaking later this year in Dublin. NTTW is a great alternative to the more mainstream conferences. NTTW potentially has a much more diverse audience (from the perspective of discipline) which is important, and has a great community spirit. I really enjoyed my first last year, and I will see if I can make it in some capacity this year as well.
Additional information
- NTTW Conference.
- NTTW YouTube.
- NTTW: Slide-deck.
- KVAL Blog.
- KVAL GitHub Organisation.
- JSONID@OPF.
- JSONID repository.
![]()

