3-day sprint: Hack4DK

The focus of this 3-day sprint was the cultural heritage hackathon: Hack4DK 2015. First there is an overview of the sprint, followed by more details about the resulting projects below.


The overall goal is to create something interesting on top of the open data. I looked into two projects:

  1. An embeddable viewer for 360º rotational images from the collection of the National Museum, which makes it easier for people to share these rotational images.
  2. Semantic markup of data from Det Danske Filminstitut, which will make the data discoverable by search-engines, robots, etc.

Starting point:

  1. The embeddable 360º rotational viewer was written from scratch, as I wanted to make it using/improving my primary toolbelt/tech-stack. I already knew the basics of optimising etc. 360º-rotational images, as I had worked on a similar project before.
  2. I have worked with semantic markup, with the danish library data. so I knew how to approach it, though I did not use any framework for generating it.


  1. Got the simple 360º rotational viewer widget up an running, and ready for embedding/production. – only works with mouse though.
  2. Put up a page with semantic markup of some of the data from dfi. It will be interesting to see if the robots catches and begin to use it. Only had some hours to set it up, so lots of room for improvements.


  • When making embeddable widget, a good idea is also to make an embed-code generator, so it is even easier for non-technical bloggers etc. to use it.
  • Working with the XML-data from dfi, was super easy thanks to ClojureScript. This was a pleasant suprise, as I had not used ClojureScript for XML-processing before.
  • If I continue publishing semantic data, I should make some tools to make it even easier, as I was kind-of redoing the same things, that I was doing with the library data.

360 widget

Purpose: make the 360 rotational images from the Danish National Museum usable/sharable in wikis, blogs, etc.

Example (does only work with mouse interaction):

How to embed (like the one above):

<div class="solsort-widget"
<script src="//solsort.com/solsort.js"></script>

ES/106677 is the identifier of the rotation, and can be replaced with any id of a 360º-images from the Danish National Museum.

You can find the list of possible rotation images on: http://samlinger.natmus.dk/?q=rotationsbilleder

The identifier can be found from the web-address ie. http://samlinger.natmus.dk/ES/106677 has the identifier ES/106677.

More examples:

.w30 {width: 30%; display: inline-block}


  • Api-proxy, – hack for easier ajax access
  • Extract images from api
  • Make it possible to interact with images
  • Reverse rotate direction
  • Stop using api-proxy (will make it faster, but needs ajax-api-fix
    (:credentials false)
  • Find out if we can easily cache images during the session. + done
  • Use double-key for object reference

Possible improvements

  • Mobile support
  • Cancel click on image, as it yield image-dragging, instead of rotate
  • Autorotate on load
  • Make redistributable build. (//solsort.com/solsort.js is intended to be linked to, and currently not redistributed/hosted on other sites, as it include a lot of other stuff, that only belongs here. All source code is available, so you can make a build containg only the 360 widget).
  • zoom-support

Semantic filmografi markup

Purpose: make open data more machine readable, – make the semantic meaning of the content of dfi discoverable/importable by robots.



  • parsing and semantic markup of basic content

Possible future improvement

  • and more semantic formats
  • include more data
  • see if robots starts to use it, and then expand