{"id":1405,"date":"2023-09-08T16:41:28","date_gmt":"2023-09-08T15:41:28","guid":{"rendered":"https:\/\/exponentialdecay.co.uk\/blog\/?p=1405"},"modified":"2023-09-08T16:49:22","modified_gmt":"2023-09-08T15:49:22","slug":"moonshine-a-small-part-of-the-file-format-analysts-toolkit","status":"publish","type":"post","link":"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/","title":{"rendered":"Moonshine: a small part of the file format analyst&#8217;s toolkit"},"content":{"rendered":"<p>Today I released <a href=\"https:\/\/github.com\/exponential-decay\/moonshine\/releases\/tag\/v2.0.0\" target=\"_blank\" rel=\"noopener\">Moonshine 2.0.0<\/a>.<\/p>\n<p>Moonshine is a a file format discovery tool I developed a few years ago. A small &#8220;hack&#8221; (hence in part, moonshine) on top of the UK Web Archive&#8217;s <em>Shine<\/em> Interface.<\/p>\n<p><a href=\"https:\/\/www.webarchive.org.uk\/shine\" target=\"_blank\" rel=\"noopener\">The UK Web Archive<\/a> (UKWA) have indexed the first four bytes (ffb) of every file that it has archived. These four bytes can be searched across the entire UK Web collection and returned to the caller.<\/p>\n<p>For example, to search for GIFs in the UKWA you can use the following URL:<\/p>\n<p><a href=\"https:\/\/www.webarchive.org.uk\/shine\/search?page=1&amp;query=content_ffb:47494638&amp;sort=crawl_date&amp;order=asc\" target=\"_blank\" rel=\"noopener\">https:\/\/www.webarchive.org.uk\/shine\/search?page=1&amp;query=content_ffb:47494638&amp;sort=crawl_date&amp;order=asc<\/a><\/p>\n<p>Today you&#8217;ll be presented with 133,576,903 results. That&#8217;s a lot to choose from!<\/p>\n<p>Providing they have been captured by the UKWA it is possible to get sample files for all files that you know the first four bytes for. Famously many old Microsoft Office files used: <code>D0CF11E0.<\/code><\/p>\n<p>If you take the UK Web Archive&#8217;s interface and think of it like an API (it is!) you can scale this approach to create a tool that can grab samples of different file formats that a digital preservationist may be researching.<\/p>\n<p>Moonshine does just this, simplifying the UKWA interface to perform <a href=\"https:\/\/en.wikipedia.org\/wiki\/Unix_philosophy\" target=\"_blank\" rel=\"noopener\">one thing &#8220;well&#8221;<\/a> (I hope).<\/p>\n<p>That GIF search again looks as follows:<\/p>\n<p><code>moonshine --ffb 47494638<\/code><code><\/code><code><\/code><\/p>\n<p><code>2023\/09\/08 15:38:55 searching Shine@UKWA<\/code><br \/>\n<code>2023\/09\/08 15:38:55 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=1&amp;query=content_ffb:47494638&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 15:38:55 pinging URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=1&amp;query=content_ffb:47494638&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 15:38:56 files discovered: '133576903'<\/code><br \/>\n<code>2023\/09\/08 15:38:56 pages available: '13357691'<\/code><br \/>\n<code>2023\/09\/08 15:38:56 setting pageCount ('13357691') max to: 1000 (solrMaxPages)<\/code><br \/>\n<code>2023\/09\/08 15:38:56 argument `-page 1` has no effect when random (default) is selected<\/code><br \/>\n<code>2023\/09\/08 15:38:56 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=474&amp;query=content_ffb:47494638&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 15:39:00 returning file: 8 from page: 474<\/code><br \/>\n<code>http:\/\/web.archive.org\/web\/19961019001918\/http:\/\/www.ch.ic.ac.uk:80\/ectoc\/echet96\/papers\/026\/rai9.gif<\/code><\/p>\n<p>This just returns a random file from one of the many results available.<\/p>\n<p>To download this at the same time as the request to the UK Web Archive is made (on Linux) one can do the following:<code>moonshine --ffb 47494638 | xargs wget<\/code><\/p>\n<p>There are many other options described in the <a href=\"https:\/\/github.com\/exponential-decay\/moonshine\/blob\/main\/README.md\" target=\"_blank\" rel=\"noopener\">README.md<\/a>, including how to get the first five pages of results, using <code>xargs wget <\/code>to download those all in one go.<\/p>\n<h2>Sampling mode!<\/h2>\n<p>Moonshine 2.0.0 introduces a sampling mode that looks at the total number of resources available and then returns 20 files from across the distribution of pages to give file format researcher a random sample of the objects with a matching ffb.<\/p>\n<p>This time, let&#8217;s try an example with PNG files:<\/p>\n<p><code>moonshine --ffb 89504E47 --sample | xargs wget<\/code><\/p>\n<p><code>2023\/09\/08 16:43:59 searching Shine@UKWA<\/code><br \/>\n<code>2023\/09\/08 16:43:59 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=1&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:43:59 pinging URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=1&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:00 files discovered: '19853902'<\/code><br \/>\n<code>2023\/09\/08 16:44:00 pages available: '1985391'<\/code><br \/>\n<code>2023\/09\/08 16:44:00 setting pageCount ('1985391') max to: 1000 (solrMaxPages)<\/code><br \/>\n<code>2023\/09\/08 16:44:00 returning a sampled list...<\/code><br \/>\n<code>2023\/09\/08 16:44:00 distribution (pages): \u2016\u2016\u2016\u2016\u2016|\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016|\u2016|\u2016\u2016\u2016\u2016||\u2016|\u2016\u2016\u2016|\u2016\u2016||\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016|\u2016|\u2016\u2016\u2016\u2016|\u2016\u2016\u2016\u2016\u2016|\u2016\u2016|\u2016\u2016\u2016|\u2016\u2016\u2016\u2016|\u2016\u2016\u2016|\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016|\u2016\u2016\u2016\u2016|\u2016\u2016\u2016|\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016\u2016<\/code><br \/>\n<code>2023\/09\/08 16:44:00 get page 48<\/code><br \/>\n<code>2023\/09\/08 16:44:00 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=48&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:02 get page 160<\/code><br \/>\n<code>2023\/09\/08 16:44:02 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=160&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:03 get page 164<\/code><br \/>\n<code>2023\/09\/08 16:44:03 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=164&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:05 get page 203<\/code><br \/>\n<code>2023\/09\/08 16:44:05 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=203&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:07 get page 206<\/code><br \/>\n<code>2023\/09\/08 16:44:07 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=206&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:09 get page 218<\/code><br \/>\n<code>2023\/09\/08 16:44:09 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=218&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:10 get page 245<\/code><br \/>\n<code>2023\/09\/08 16:44:10 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=245&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:12 get page 264<\/code><br \/>\n<code>2023\/09\/08 16:44:12 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=264&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:14 get page 265<\/code><br \/>\n<code>2023\/09\/08 16:44:14 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=265&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:15 get page 355<\/code><br \/>\n<code>2023\/09\/08 16:44:15 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=355&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:17 get page 370<\/code><br \/>\n<code>2023\/09\/08 16:44:17 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=370&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:19 get page 407<\/code><br \/>\n<code>2023\/09\/08 16:44:19 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=407&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:21 get page 456<\/code><br \/>\n<code>2023\/09\/08 16:44:21 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=456&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:23 get page 474<\/code><br \/>\n<code>2023\/09\/08 16:44:23 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=474&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:24 get page 501<\/code><br \/>\n<code>2023\/09\/08 16:44:24 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=501&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:26 get page 541<\/code><br \/>\n<code>2023\/09\/08 16:44:26 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=541&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:28 get page 579<\/code><br \/>\n<code>2023\/09\/08 16:44:28 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=579&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:30 get page 722<\/code><br \/>\n<code>2023\/09\/08 16:44:30 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=722&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:32 get page 764<\/code><br \/>\n<code>2023\/09\/08 16:44:32 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=764&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><br \/>\n<code>2023\/09\/08 16:44:34 get page 798<\/code><br \/>\n<code>2023\/09\/08 16:44:34 created URL: https:\/\/www.webarchive.org.uk\/shine\/search?page=798&amp;query=content_ffb:89504e47&amp;sort=crawl_date&amp;order=asc<\/code><\/p>\n<p>We can make a tiny gallery of the results!<\/p>\n<p><code>montage *.png -mode Concatenate -tile 6x5 montage.png<\/code><\/p>\n<p><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2023\/09\/montage.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1408\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2023\/09\/montage.png\" alt=\"\" width=\"1987\" height=\"1720\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2023\/09\/montage.png 1987w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2023\/09\/montage-300x260.png 300w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2023\/09\/montage-1024x886.png 1024w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2023\/09\/montage-768x665.png 768w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2023\/09\/montage-1536x1330.png 1536w\" sizes=\"auto, (max-width: 1987px) 100vw, 1987px\" \/><\/a><\/p>\n<p>Or you can continue on your file format research journey!<\/p>\n<h2>PRONOM signature development<\/h2>\n<p>If one is researching new file formats then they may tend to come from a uniform provenance. When researching new file format signatures for yourself with the potential to submit them to PRONOM, moonshine helps provide better variability when testing your own signatures. If you download 20 files with matching ffb from the UK Web Archive and you try your PRONOM quality signature against them, if you can identify some that do not match then you can improve the effectiveness of your signature to match a wider range of samples. Additionally, you can share the UK Web Archive links with the PRONOM team so that they can look at a common sample file. This is especially useful if your files come from a closed collection. <em>For bonus points<\/em> you can share some of the links you find on the <a href=\"http:\/\/fileformats.archiveteam.org\/wiki\/Main_Page\" target=\"_blank\" rel=\"noopener\">Just Solve It File Formats Wiki<\/a> and users looking at that site can then download the same samples there as well.<\/p>\n<h2>Further notes on Moonshine 2.0.0<\/h2>\n<p>1.0.0 and 2.0.0 have been released in quick succession. The releases stabilize the code somewhat and increase the number of results that developers have access to. Previously there were various restrictions via the UK Web Archive&#8217;s SOLR index that I hadn&#8217;t got on top of. Hopefully I have done that here and the tool can flourish a little more.<\/p>\n<p>Let me know how it goes if you develop using Moonshine, and perhaps share your workflow sometime in your own writing.<\/p>\n<p>Check out Moonshine on GitHub and look at the releases for a release that matches your operating system: <a href=\"https:\/\/github.com\/exponential-decay\/moonshine\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/exponential-decay\/moonshine<\/a><\/p>\n<p>Moonshine can also be found on the COPTR Wiki here: <a href=\"https:\/\/coptr.digipres.org\/index.php\/Moonshine\" target=\"_blank\" rel=\"noopener\">https:\/\/coptr.digipres.org\/index.php\/Moonshine<\/a><\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_1405\" class=\"pvc_stats total_only  \" data-element-id=\"1405\" style=\"\"><i class=\"pvc-stats-icon small\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"excerpt":{"rendered":"<div class=\"entry-summary\">\nToday I released Moonshine 2.0.0. Moonshine is a a file format discovery tool I developed a few years ago. A&hellip;\n<\/div>\n<div class=\"link-more\"><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &ldquo;Moonshine: a small part of the file format analyst&#8217;s toolkit&rdquo;<\/span>&hellip;<\/a><\/div>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_1405\" class=\"pvc_stats total_only  \" data-element-id=\"1405\" style=\"\"><i class=\"pvc-stats-icon small\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":1,"featured_media":1406,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[3,75],"tags":[96,147,71,15,29,17,76,189,16],"class_list":["post-1405","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-digital-preservation","category-golang","tag-coding","tag-digipres","tag-digital-preservation","tag-droid","tag-file-format","tag-file-formats","tag-golang","tag-moonshine","tag-pronom","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Moonshine: a small part of the file format analyst&#039;s toolkit - ross spencer :: exponentialdecay.digipres :: blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Moonshine: a small part of the file format analyst&#039;s toolkit - ross spencer :: exponentialdecay.digipres :: blog\" \/>\n<meta property=\"og:description\" content=\"Today I released Moonshine 2.0.0. Moonshine is a a file format discovery tool I developed a few years ago. A&hellip; Continue reading &ldquo;Moonshine: a small part of the file format analyst&#8217;s toolkit&rdquo;&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/\" \/>\n<meta property=\"og:site_name\" content=\"ross spencer :: exponentialdecay.digipres :: blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-09-08T15:41:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-08T15:49:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2023\/09\/stock-photo-witches-sky-200837389.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1876\" \/>\n\t<meta property=\"og:image:height\" content=\"1876\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ross Spencer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@beet_keeper\" \/>\n<meta name=\"twitter:site\" content=\"@beet_keeper\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ross Spencer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\\\/\"},\"author\":{\"name\":\"Ross Spencer\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\"},\"headline\":\"Moonshine: a small part of the file format analyst&#8217;s toolkit\",\"datePublished\":\"2023-09-08T15:41:28+00:00\",\"dateModified\":\"2023-09-08T15:49:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\\\/\"},\"wordCount\":648,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\"},\"image\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/stock-photo-witches-sky-200837389.jpeg\",\"keywords\":[\"Coding\",\"digipres\",\"Digital Preservation\",\"DROID\",\"File Format\",\"File Formats\",\"Golang\",\"moonshine\",\"PRONOM\"],\"articleSection\":[\"Digital Preservation\",\"Golang\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\\\/\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\\\/\",\"name\":\"Moonshine: a small part of the file format analyst's toolkit - ross spencer :: exponentialdecay.digipres :: blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/stock-photo-witches-sky-200837389.jpeg\",\"datePublished\":\"2023-09-08T15:41:28+00:00\",\"dateModified\":\"2023-09-08T15:49:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\\\/#primaryimage\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/stock-photo-witches-sky-200837389.jpeg\",\"contentUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/stock-photo-witches-sky-200837389.jpeg\",\"width\":1876,\"height\":1876},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Moonshine: a small part of the file format analyst&#8217;s toolkit\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/\",\"name\":\"ross spencer :: exponentialdecay.digipres :: blog\",\"description\":\"Digital preservation analyst, researcher, and software developer\",\"publisher\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\",\"name\":\"Ross Spencer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\",\"contentUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\",\"width\":2560,\"height\":2560,\"caption\":\"Ross Spencer\"},\"logo\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\"},\"description\":\"Digital preservation domain expert and full-stack software developer.\",\"sameAs\":[\"http:\\\/\\\/www.exponentialdecay.co.uk\\\/blog\",\"https:\\\/\\\/www.instagram.com\\\/b33tk33p3r\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/ross-spencer-b6b9b758\\\/\",\"https:\\\/\\\/x.com\\\/beet_keeper\"],\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/author\\\/exponentialdecay\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Moonshine: a small part of the file format analyst's toolkit - ross spencer :: exponentialdecay.digipres :: blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/","og_locale":"en_US","og_type":"article","og_title":"Moonshine: a small part of the file format analyst's toolkit - ross spencer :: exponentialdecay.digipres :: blog","og_description":"Today I released Moonshine 2.0.0. Moonshine is a a file format discovery tool I developed a few years ago. A&hellip; Continue reading &ldquo;Moonshine: a small part of the file format analyst&#8217;s toolkit&rdquo;&hellip;","og_url":"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/","og_site_name":"ross spencer :: exponentialdecay.digipres :: blog","article_published_time":"2023-09-08T15:41:28+00:00","article_modified_time":"2023-09-08T15:49:22+00:00","og_image":[{"width":1876,"height":1876,"url":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2023\/09\/stock-photo-witches-sky-200837389.jpeg","type":"image\/jpeg"}],"author":"Ross Spencer","twitter_card":"summary_large_image","twitter_creator":"@beet_keeper","twitter_site":"@beet_keeper","twitter_misc":{"Written by":"Ross Spencer","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/#article","isPartOf":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/"},"author":{"name":"Ross Spencer","@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716"},"headline":"Moonshine: a small part of the file format analyst&#8217;s toolkit","datePublished":"2023-09-08T15:41:28+00:00","dateModified":"2023-09-08T15:49:22+00:00","mainEntityOfPage":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/"},"wordCount":648,"commentCount":0,"publisher":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716"},"image":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/#primaryimage"},"thumbnailUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2023\/09\/stock-photo-witches-sky-200837389.jpeg","keywords":["Coding","digipres","Digital Preservation","DROID","File Format","File Formats","Golang","moonshine","PRONOM"],"articleSection":["Digital Preservation","Golang"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/","url":"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/","name":"Moonshine: a small part of the file format analyst's toolkit - ross spencer :: exponentialdecay.digipres :: blog","isPartOf":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/#primaryimage"},"image":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/#primaryimage"},"thumbnailUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2023\/09\/stock-photo-witches-sky-200837389.jpeg","datePublished":"2023-09-08T15:41:28+00:00","dateModified":"2023-09-08T15:49:22+00:00","breadcrumb":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/#primaryimage","url":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2023\/09\/stock-photo-witches-sky-200837389.jpeg","contentUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2023\/09\/stock-photo-witches-sky-200837389.jpeg","width":1876,"height":1876},{"@type":"BreadcrumbList","@id":"https:\/\/exponentialdecay.co.uk\/blog\/moonshine-a-small-part-of-the-file-format-analysts-toolkit\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/exponentialdecay.co.uk\/blog\/"},{"@type":"ListItem","position":2,"name":"Moonshine: a small part of the file format analyst&#8217;s toolkit"}]},{"@type":"WebSite","@id":"https:\/\/exponentialdecay.co.uk\/blog\/#website","url":"https:\/\/exponentialdecay.co.uk\/blog\/","name":"ross spencer :: exponentialdecay.digipres :: blog","description":"Digital preservation analyst, researcher, and software developer","publisher":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/exponentialdecay.co.uk\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716","name":"Ross Spencer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png","url":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png","contentUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png","width":2560,"height":2560,"caption":"Ross Spencer"},"logo":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png"},"description":"Digital preservation domain expert and full-stack software developer.","sameAs":["http:\/\/www.exponentialdecay.co.uk\/blog","https:\/\/www.instagram.com\/b33tk33p3r\/","https:\/\/www.linkedin.com\/in\/ross-spencer-b6b9b758\/","https:\/\/x.com\/beet_keeper"],"url":"https:\/\/exponentialdecay.co.uk\/blog\/author\/exponentialdecay\/"}]}},"views":1110,"_links":{"self":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/1405","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=1405"}],"version-history":[{"count":13,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/1405\/revisions"}],"predecessor-version":[{"id":1420,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/1405\/revisions\/1420"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/media\/1406"}],"wp:attachment":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=1405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=1405"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=1405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}