<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://joeroe.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://joeroe.io/" rel="alternate" type="text/html" /><updated>2026-08-19T13:21:06+00:00</updated><id>https://joeroe.io/feed.xml</id><title type="html">Joe Roe</title><subtitle>Joe Roe is a computational archaeologist specialising in the ecology and economy of the world&apos;s farmers in prehistoric Southwest Asia.</subtitle><author><name>Joe Roe</name></author><entry><title type="html">Archaeological Information Systems: A Comparison of Field Recording Software (updated 2026)</title><link href="https://joeroe.io/2026/08/03/archaeological-information-systems.html" rel="alternate" type="text/html" title="Archaeological Information Systems: A Comparison of Field Recording Software (updated 2026)" /><published>2026-08-03T00:00:00+00:00</published><updated>2026-08-03T00:00:00+00:00</updated><id>https://joeroe.io/2026/08/03/archaeological-information-systems</id><content type="html" xml:base="https://joeroe.io/2026/08/03/archaeological-information-systems.html">&lt;p&gt;This page provides an up-to-date comparison of available &lt;strong&gt;archaeological information systems&lt;/strong&gt;,
including ARCHES, ARK, Field, FAIMS, Ishtar, Kiosk, OpenAtlas, ArcheoBase, Diggit, Intrasis, and MuseumsGIS.&lt;/p&gt;

&lt;p&gt;See &lt;a href=&quot;#updates&quot;&gt;updates&lt;/a&gt; below for information on changes since the page was first published.&lt;/p&gt;

&lt;h2 id=&quot;what-is-an-archaeological-information-system&quot;&gt;What is an ‘archaeological information system’?&lt;/h2&gt;

&lt;p&gt;I define an ‘archaeological information system’ (AIS) as software specifically developed for the recording, management and publication of field archaeological data, including both excavations and surveys.
It is not a widely used term (though I am not the first to use it), but I think usefully captures a particular type of system which is to archaeology what a geographical information system (GIS) is to geospatial applications.&lt;/p&gt;

&lt;p&gt;It is worth noting that the most commonly used archaeological information system &lt;em&gt;is&lt;/em&gt; a geographic information system (see &lt;a href=&quot;#honourable-mentions&quot;&gt;honourable mentions&lt;/a&gt; below).
The development of specific software to extend or replace GIS for in archaeological fieldwork is a relatively new phenomenon.
In some contexts (e.g. rescue archaeology in particular countries), one or another AISes have become the norm;
but in globally the field still seems to prefer GIS- and/or paper-based recording systems.
This makes AIS a rather interesting, experimental niche within archaeological research software engineering.&lt;/p&gt;

&lt;h2 id=&quot;summary-of-available-archaeological-information-systems&quot;&gt;Summary of available archaeological information systems&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Software&lt;/th&gt;
      &lt;th&gt;Developer&lt;/th&gt;
      &lt;th&gt;Open source&lt;/th&gt;
      &lt;th&gt;Self-hostable&lt;/th&gt;
      &lt;th&gt;Price^^*^^&lt;/th&gt;
      &lt;th&gt;Notable users&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://www.archesproject.org/&quot;&gt;ARCHES&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;🇺🇸 Getty Conservation Institute&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;Free&lt;/td&gt;
      &lt;td&gt;UK Historic Environment Registers&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://archeobase.org/&quot;&gt;ArcheoBase&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;🇨🇭 AnalyticBase Sàrl&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;23 CHF per user per month&lt;/td&gt;
      &lt;td&gt;Swiss cantonal archaeological services&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://ark.lparchaeology.com/&quot;&gt;ARK&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;🇬🇧 L-P Archaeology&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;Free&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://www.diggitarchaeology.com/&quot;&gt;Diggit&lt;/a&gt;&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
      &lt;td&gt;🇬🇧 Diggit Archaeology&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;1 GBP per context&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/dainst/idai-field&quot;&gt;Field&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;🇩🇪 DAI&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;Free&lt;/td&gt;
      &lt;td&gt;German Archaeological Institute branches&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://faims.edu.au/&quot;&gt;FAIMS&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;🇦🇺 Macquarie University / CSIRO&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;Free&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://www.intrasis.com/&quot;&gt;Intrasis&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;🇸🇪 Arkeologerna&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;21,000 SEK&lt;/td&gt;
      &lt;td&gt;Swedish &amp;amp; Danish museums&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://ishtar-archeo.net/en/&quot;&gt;Ishtar&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;🇫🇷 Iggdrasil&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;Free&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://sites.brown.edu/kiosk/&quot;&gt;Kiosk&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;🇺🇸 Brown University&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;Free&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://www.museumsgis.dk/&quot;&gt;MuseumsGIS&lt;/a&gt;&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
      &lt;td&gt;🇩🇰 Arkæologisk IT&lt;/td&gt;
      &lt;td&gt;?&lt;/td&gt;
      &lt;td&gt;?&lt;/td&gt;
      &lt;td&gt;c. 37,000 DKK per year&lt;/td&gt;
      &lt;td&gt;Danish museums&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://openatlas.eu/&quot;&gt;OpenAtlas&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;🇦🇹 Austrian Academy of Sciences&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;Free&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;^^*^^ The prices given are those of the software’s ‘standard’ plan. For details of other plans, offers, or add-ons, see the individual sections below.&lt;/p&gt;

&lt;h2 id=&quot;how-to-choose-an-archaeological-information-system&quot;&gt;How to choose an archaeological information system?&lt;/h2&gt;

&lt;p&gt;In the tables here I have compiled basic metadata and feature information on archaeological information systems that are actively maintained.
Metadata includes the licensing and price model, developer, and notable users.
The feature comparison includes major points of differentiation between the different software; 
features that all systems offer, like data input or file export, are not included.&lt;/p&gt;

&lt;p&gt;I have paid particular attention to whether the system is free and open source or commercial, and in which case how much.
This is because I usually advocate for the use of free and open source software in academic contexts.
Since archaeological information systems are used primarily for data management, rather than an analysis, I would not say that a free and open source software is &lt;em&gt;essential&lt;/em&gt; in this case.
However, is still offers distinct advantages in terms of interoperability and maintainability (allowing a wider community to share the development burden) and, in an educational context, avoiding locking students into proprietary walled gardens early in their career.
That said, the current reality is that some of the best systems are commercial.&lt;/p&gt;

&lt;p&gt;My assessments below are written from the perspective of a research archaeologist based at a university, on the basis of the information I could find and demo versions available.
I have tried to keep up to date with this field over the years out of a theoretical interest.
If I were to use any of the systems myself, it would be in a seasonal research-led field projects and in an educational context, where I want to expose (Danish) students in the modern recording systems they are likely to encounter in their future careers.
I am not in a position to evaluate their usefulness to larger institutions or in commercial archaeology contexts, nor to trial each system in the field.
Some systems I have not been able to try at all; where this is the case, it is noted below.&lt;/p&gt;

&lt;h2 id=&quot;feature-comparison&quot;&gt;Feature comparison&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Feature&lt;/th&gt;
      &lt;th&gt;ARCHES&lt;/th&gt;
      &lt;th&gt;ArcheoBase&lt;/th&gt;
      &lt;th&gt;ARK&lt;/th&gt;
      &lt;th&gt;Diggit&lt;/th&gt;
      &lt;th&gt;Field&lt;/th&gt;
      &lt;th&gt;FAIMS&lt;/th&gt;
      &lt;th&gt;Intrasis&lt;/th&gt;
      &lt;th&gt;Ishtar&lt;/th&gt;
      &lt;th&gt;Kiosk&lt;/th&gt;
      &lt;th&gt;MuseumsGIS&lt;/th&gt;
      &lt;th&gt;OpenAtlas&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Mobile app&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Offline recording&lt;/td&gt;
      &lt;td&gt;❓&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❓&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❓&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Harris matrix&lt;/td&gt;
      &lt;td&gt;❓&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❓&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;❓&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❓&lt;/td&gt;
      &lt;td&gt;❓&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Mapping&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❓&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;GIS integration&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❓&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Public portal&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❓&lt;/td&gt;
      &lt;td&gt;❓&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;❓&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❓&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;dl&gt;
  &lt;dt&gt;Mobile app&lt;/dt&gt;
  &lt;dd&gt;Dedicated application for iOS or Android devices&lt;/dd&gt;
  &lt;dt&gt;Offline recording&lt;/dt&gt;
  &lt;dd&gt;Ability to record data without internet connectivity&lt;/dd&gt;
  &lt;dt&gt;Harris matrix&lt;/dt&gt;
  &lt;dd&gt;Built-in tool for generating stratigraphic relationship diagrams&lt;/dd&gt;
  &lt;dt&gt;Mapping&lt;/dt&gt;
  &lt;dd&gt;In-app capability to input spatial data (points, lines, polygons)&lt;/dd&gt;
  &lt;dt&gt;GIS integration&lt;/dt&gt;
  &lt;dd&gt;Ability to export to or integrate with external GIS software (QGIS, ArcGIS, etc.)&lt;/dd&gt;
  &lt;dt&gt;Public portal&lt;/dt&gt;
  &lt;dd&gt;Web interface for public access to project data&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2 id=&quot;honourable-mentions&quot;&gt;Honourable mentions&lt;/h2&gt;

&lt;p&gt;Apart from dedicated software, archaeologists routinely make their own digital recording systems with off-the-shelf database (e.g. FileMaker, Microsoft Access) or geographic information system (GIS; e.g. QGIS, ArcGIS) software.
In recent years, the availability of mobile GIS apps such as QField and ArcGIS Field Maps have made the latter particularly popular solutions.&lt;/p&gt;

&lt;p&gt;These DIY approaches are popular for good reasons.
They offer flexibility to adapt to specific project needs, lower cost (especially with open source tools), and no vendor lock-in.
They also allow archaeologists to leverage existing skills and workflows rather than learning new systems.
For small projects or research-led fieldwork, a custom solution can be more practical than adopting a full archaeological information system.
For example, I’ve been using a &lt;a href=&quot;/posters/2019/caa2019_qcontinuum.html&quot;&gt;QGIS-based DIY field recording stack&lt;/a&gt; for research-led field surveys for nearly a decade and it works well.
It’s customised to my specific needs, is free and open source, and integrates seamlessly with my analysis workflows.&lt;/p&gt;

&lt;p&gt;However, there are trade-offs.
DIY systems require technical expertise to set up and maintain, and there’s no dedicated support when things go wrong.
Each project essentially reinvents the wheel, making it harder to share data and workflows between projects or institutions.
Still, I’d guess that the combined use of these DIY systems is significantly greater than any software developed specifically for archaeology.
But as my focus here is on explicit archaeological information systems, I won’t consider them further.&lt;/p&gt;

&lt;h2 id=&quot;free-and-open-source-archaeological-information-systems&quot;&gt;Free and open source archaeological information systems&lt;/h2&gt;

&lt;h3 id=&quot;arches&quot;&gt;ARCHES&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.archesproject.org/&quot;&gt;ARCHES&lt;/a&gt; is a web-based, self-hosted heritage data management platform developed by the &lt;a href=&quot;https://www.getty.edu/conservation&quot;&gt;Getty Conservation Institute&lt;/a&gt; and &lt;a href=&quot;https://www.wmf.org&quot;&gt;World Monuments Fund&lt;/a&gt;.
It was originally designed for inventories of immovable cultural heritage and has been widely adopted by Historic Environment Records in the United Kingdom, which are served by a dedicated version called &lt;a href=&quot;https://www.archesproject.org/arches-for-hers/&quot;&gt;Arches for HERs&lt;/a&gt;.
It has also been adopted by projects including Endangered Archaeology in the Middle East and North Africa (EAMENA) at Oxford&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; and the Greater London Historic Environment Record.&lt;sup id=&quot;fnref:4&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;
The system includes GIS functionality.
It requires technical expertise to deploy and maintain.&lt;/p&gt;

&lt;p&gt;ARCHES is a sophisticated and mature system with significant institutional backing from major organisations.
However, it is primarily tailored for heritage management and inventory purposes, and its utility for active field recording remains unclear.
The system is also notably complex to deploy and maintain, requiring substantial technical expertise that may be prohibitive even for experienced system administrators without dedicated IT support.&lt;/p&gt;

&lt;h3 id=&quot;ark&quot;&gt;ARK&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://ark.lparchaeology.com/&quot;&gt;ARK&lt;/a&gt; (Archaeological Recording Kit) is a web-based, self-hosted system developed by &lt;a href=&quot;https://www.lparchaeology.com/&quot;&gt;L-P Archaeology&lt;/a&gt;.
It provides an interface for data entry, editing, mapping, and sharing of archaeological project data, and supports web services and data export.
It has been used on excavations including the Villa Magna project in Italy&lt;sup id=&quot;fnref:5&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; and Portus.&lt;sup id=&quot;fnref:6&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:6&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;ARK was an early pioneer of web-based archaeological recording and represented an important step forward in the digitisation of field documentation.
However, the system has not been actively maintained or updated since 2014, and its underlying technology stack has become dated.
The web-based architecture limits its practical utility in remote field locations where reliable internet connectivity cannot be assumed, and the older codebase presents significant barriers to long-term maintainability and future development.&lt;/p&gt;

&lt;h3 id=&quot;field&quot;&gt;Field&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/dainst/idai-field&quot;&gt;Field&lt;/a&gt; (formerly iDAI.field) is a desktop application (with optional sync server) developed by the &lt;a href=&quot;https://www.dainst.org&quot;&gt;German Archaeological Institute&lt;/a&gt; (DAI) and the &lt;a href=&quot;https://en.gbv.de/&quot;&gt;GBV Common Library Network&lt;/a&gt;.
It allows archaeologists to record, share, and store excavation data and images, customise data models, map records, manage types and inventories, and synchronise data.
The system comprises a desktop application (Angular/Electron), a mobile app (React Native, in early development), and an optional sync server.&lt;/p&gt;

&lt;p&gt;Field represents a very promising and full-featured approach to archaeological data management, backed by a sizeable research software engineering team and the international presence of the German Archaeological Institute.
The involvement of DAI branches across multiple countries provides both development capacity and a built-in user base that lends the project considerable institutional weight and long-term viability.
It does not yet have a mobile application, which is increasingly seen as essential for modern in-field recording workflows.
However, a mobile app is actively under development in React Native.&lt;/p&gt;

&lt;h3 id=&quot;faims&quot;&gt;FAIMS&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://faims.edu.au/&quot;&gt;FAIMS&lt;/a&gt; (Field Acquired Information Management Systems) is an open source platform for offline field data collection, originally developed for archaeology but now used across multiple disciplines including geoscience and humanities.
The project has an 11-year development history since 2012, with a major rebuild as FAIMS 3.0 released in 2022.
It is cross-platform (Android, iOS, and desktop) and offers a self-service notebook designer for customization without coding.
Features include offline data capture, mobile GIS, annotations, certainty sliders, multimedia support, and version control.
In 2023, the software was rebranded as Fieldmark™ with a commercial hosting option, though the open source version remains freely available.&lt;/p&gt;

&lt;p&gt;FAIMS has been used in over 40 projects and demonstrates a long-term commitment to offline-first field recording.
However, based on experience with earlier versions, the system can be difficult to set up and the data model prioritises flexibility over out-of-the-box utility for archaeological workflows.
The cross-disciplinary nature of the platform is both a strength (allowing adaptation to diverse research needs) and a weakness (requiring more customization than archaeology-specific systems).
The institutional backing from Macquarie University, CSIRO, and the Australian Research Data Commons provides stability, and the complete rebuild in FAIMS 3.0 may address earlier usability concerns.&lt;/p&gt;

&lt;h3 id=&quot;ishtar&quot;&gt;Ishtar&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://ishtar-archeo.net/en/&quot;&gt;Ishtar&lt;/a&gt; is a web-based, self-hosted system developed by the French company &lt;a href=&quot;https://www.iggdrasil.net/&quot;&gt;Iggdrasil&lt;/a&gt;.
It manages data from excavation through to museum storage, including context records, finds, administrative files, warehouses, and conservatory treatments.
The system has a modular architecture (cartography, underwater archaeology, public portal, etc.) with customisable forms, automatic inventory generation, and multiple user permission levels.
First released in 2017, version 4 was released in 2024.&lt;/p&gt;

&lt;p&gt;I have not yet had the opportunity to trial this system in practice. Further assessment will be provided once hands-on evaluation has been conducted.&lt;/p&gt;

&lt;h3 id=&quot;kiosk&quot;&gt;Kiosk&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://sites.brown.edu/kiosk/&quot;&gt;Kiosk&lt;/a&gt; is an iPad-based, self-hosted digital field recording platform developed and maintained at Brown University.
It is designed to work offline in remote locations, with data synchronisation possible without internet access.
It supports excavation and pedestrian survey recording, Harris matrices, ceramic analysis, custom numbering systems, and legacy data integration.
It is used by institutions including NYU, University of Chicago, and Leiden University.&lt;/p&gt;

&lt;p&gt;Kiosk’s restriction to the iOS ecosystem represents a significant limitation, particularly for a free and open source application.
This platform dependency precludes trialling the system on non-Apple devices and may exclude many potential users whose institutions have standardised on Android or mixed-device environments.
For a FOSS project, such vendor lock-in is especially unfortunate and runs counter to the principles of accessibility and platform independence that typically characterise open source software.&lt;/p&gt;

&lt;h3 id=&quot;openatlas&quot;&gt;OpenAtlas&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://openatlas.eu/&quot;&gt;OpenAtlas&lt;/a&gt; is a web-based, self-hosted database application developed by the &lt;a href=&quot;https://www.oeaw.ac.at/acdh&quot;&gt;Austrian Centre for Digital Humanities&lt;/a&gt; (ACDH), an institute of the &lt;a href=&quot;https://www.oeaw.ac.at/&quot;&gt;Austrian Academy of Sciences&lt;/a&gt;, for managing research data across the humanities.
It provides customisable forms for recording complex relationships.
Features include an interactive Leaflet-based map with PostGIS spatial data, Linked Open Data reference systems, and data integrity checks.
It is used by the Österreichisches Archäologisches Institut and other partner projects.&lt;sup id=&quot;fnref:7&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:7&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;OpenAtlas is a mature and well-established system with strong institutional backing from the Austrian Archaeological Institute.
Like ARCHES, however, it appears to be oriented more towards heritage management, inventory control, and long-term data curation than towards the practical demands of active field recording.
Its sophisticated data model and emphasis on complex relational structures may be better suited to post-excavation analysis and museum collections management than to the rapid, context-by-context documentation required during excavation.&lt;/p&gt;

&lt;h2 id=&quot;commercial-archaeological-information-systems&quot;&gt;Commercial archaeological information systems&lt;/h2&gt;

&lt;h3 id=&quot;archeobase&quot;&gt;ArcheoBase&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://archeobase.org/&quot;&gt;ArcheoBase&lt;/a&gt; is a cloud-based SaaS platform developed by the Swiss company &lt;a href=&quot;https://archeobase.org/&quot;&gt;AnalyticBase Sàrl&lt;/a&gt;.
It covers the full chain of archaeological information processing through modular sub-applications and a mobile app for field recording.
Available in multiple European languages, it is priced at 23 CHF per user per month with discounts for larger institutions.
For universities, AnalyticBase offer an academic plan where students can receive free access so long as faculty have a license.&lt;/p&gt;

&lt;p&gt;ArcheoBase is the most full-featured and polished archaeological information system currently available, with an impressive range of features and a modern and professional user interface.
It is also one of the few available multilingual systems.
However its cloud-based architecture does not appear to permit offline recording, which is a significant limitation for archaeologists working in remote locations.
The annual pricing model does not work well in a research context, where fieldwork is seasonal and typically involves large numbers of temporary staff, and will likely be too expensive for many higher education institutions (though the academic plan alleviates this concern in an educational setting).
It also raises the concern of vendor lock-in for institutions with long-term projects and/or a commitment to open source.&lt;/p&gt;

&lt;h3 id=&quot;diggit&quot;&gt;Diggit&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.diggitarchaeology.com/&quot;&gt;Diggit&lt;/a&gt; is a cloud-based SaaS recording system developed by &lt;a href=&quot;https://www.diggitarchaeology.com/&quot;&gt;Diggit Archaeology&lt;/a&gt; (UK).
It consists of a mobile app (diggitmobile) for on-site recording and a web interface (diggitweb) for exploration, analysis, and export.
The interface includes over 240 archaeology-specific icons and charges per context recorded (1 GBP).
It is currently available only in the UK, Ireland, and Hong Kong.&lt;/p&gt;

&lt;p&gt;Diggit employs an interesting and unconventional pricing model based on the number of contexts recorded rather than the number of users.
While this could be advantageous for small projects with limited recording needs, it makes costs difficult to predict and budget for larger excavations where the volume of contexts is uncertain.
The system is currently available only in the United Kingdom, Ireland, and Hong Kong, making it inaccessible for evaluation in other regional contexts.
As it is not available in Denmark, I was unable to conduct a trial assessment of its capabilities and workflow.&lt;/p&gt;

&lt;h3 id=&quot;intrasis&quot;&gt;Intrasis&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.intrasis.com/&quot;&gt;Intrasis&lt;/a&gt; is a desktop application (with optional cloud sync) originally designed by &lt;a href=&quot;https://arkeologerna.com/en/&quot;&gt;Arkeologerna&lt;/a&gt; (The Archaeologists) at the Swedish National Historical Museums agency.
It combines a database with geographical information for documenting, visualising, and analysing excavation data.
While proprietary, it is self-hostable and offers both desktop and mobile apps.
According to their website, “it additionally requires an ArcGIS license with minimum licensing to ArcGIS engine runtime (included in ArcGIS desktop).”&lt;sup id=&quot;fnref:8&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:8&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;
It is used by Swedish and Danish museums.
The latest version (4.2) runs on PostgreSQL and includes 3D visualisation capabilities.&lt;/p&gt;

&lt;p&gt;Intrasis has a rather complex pricing model with various licence types and add-ons.
A single-use licence costs 21,000 SEK as a one-time fee, while educational packages are available at 10,000 SEK per year.
For full details on licensing options, see the &lt;a href=&quot;https://www.intrasis.com/faq/lisencing-and-prices/&quot;&gt;Intrasis pricing page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Intrasis is one of the longest-established archaeological information systems and has achieved significant adoption in commercial archaeology in Sweden and, to a lesser extent, within the Danish museum system.
However, the system’s hard dependency on proprietary ESRI ArcGIS software represents a fundamental barrier to adoption for many users.
At a time when open source GIS solutions such as QGIS have become mature, widely-used, and well-supported within the archaeological community, requiring users to maintain expensive proprietary GIS licenses alongside Intrasis is increasingly difficult to justify.&lt;/p&gt;

&lt;h3 id=&quot;museumsgis&quot;&gt;MuseumsGIS&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.museumsgis.dk/&quot;&gt;MuseumsGIS&lt;/a&gt; is a web-based system with mobile app developed by &lt;a href=&quot;https://moesgaardmuseum.dk/om-moesgaard/forskning-og-viden/arkaeologisk-it&quot;&gt;Arkæologisk IT&lt;/a&gt; at Moesgaard Museum, Denmark.
It is currently only available to Danish museums.
It is built on free and open source software but requires a licence to use, costing approximately 37,000 DKK per year.
It comprises a project presentation website (dynamically pulling excavation data including 3D models, historical maps, and geophysics), a mobile field registration app, and QGIS plugins including the FeltTegn tool for converting GPS data to archaeological features.
Data is stored on a central database server with full version history at the object level, and is immediately available to both mobile devices and QGIS.&lt;/p&gt;

&lt;p&gt;MuseumsGIS is relatively new with an impressive feature set that addresses many of the practical requirements of modern archaeological recording.
It is currently tightly tailored to the Danish museum sector in its design and pricing;
but the fact that it is built on an open source technology stack means that, in principle, the system could be forked and adapted by other institutions or communities.&lt;/p&gt;

&lt;h2 id=&quot;updates&quot;&gt;Updates&lt;/h2&gt;

&lt;p&gt;I will keep this page updated as often as possible.
Please feel free to contact me with updates, corrections, or suggested additions.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;2026-08-19: added information on ArcheoBase’s academic pricing plan&lt;/li&gt;
  &lt;li&gt;2026-08-03: first version&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Diggit is only available in the United Kingdom, Ireland, and Hong Kong. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;MuseumsGIS is only available in Denmark. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://eamena.org/database&quot;&gt;EAMENA database&lt;/a&gt; &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://glher.historicengland.org.uk/&quot;&gt;GLHER&lt;/a&gt; &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://ark.lparchaeology.com/portfolio/villa-magna/&quot;&gt;Villa Magna&lt;/a&gt; &lt;a href=&quot;#fnref:5&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://ark.lparchaeology.com/portfolio/portus/&quot;&gt;Portus&lt;/a&gt; &lt;a href=&quot;#fnref:6&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:7&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://thanados.net&quot;&gt;THANADOS&lt;/a&gt; &lt;a href=&quot;#fnref:7&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:8&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://www.intrasis.com/what-is-intrasis/&quot;&gt;Intrasis - What is Intrasis?&lt;/a&gt; &lt;a href=&quot;#fnref:8&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;</content><author><name>Joe Roe</name></author><summary type="html">This page provides an up-to-date comparison of available archaeological information systems, including ARCHES, ARK, Field, FAIMS, Ishtar, Kiosk, OpenAtlas, ArcheoBase, Diggit, Intrasis, and MuseumsGIS. See updates below for information on changes since the page was first published. What is an ‘archaeological information system’? I define an ‘archaeological information system’ (AIS) as software specifically developed for the recording, management and publication of field archaeological data, including both excavations and surveys. It is not a widely used term (though I am not the first to use it), but I think usefully captures a particular type of system which is to archaeology what a geographical information system (GIS) is to geospatial applications. It is worth noting that the most commonly used archaeological information system is a geographic information system (see honourable mentions below). The development of specific software to extend or replace GIS for in archaeological fieldwork is a relatively new phenomenon. In some contexts (e.g. rescue archaeology in particular countries), one or another AISes have become the norm; but in globally the field still seems to prefer GIS- and/or paper-based recording systems. This makes AIS a rather interesting, experimental niche within archaeological research software engineering. Summary of available archaeological information systems Software Developer Open source Self-hostable Price^^*^^ Notable users ARCHES 🇺🇸 Getty Conservation Institute ✅ ✅ Free UK Historic Environment Registers ArcheoBase 🇨🇭 AnalyticBase Sàrl ❌ ❌ 23 CHF per user per month Swiss cantonal archaeological services ARK 🇬🇧 L-P Archaeology ✅ ✅ Free   Diggit1 🇬🇧 Diggit Archaeology ❌ ❌ 1 GBP per context   Field 🇩🇪 DAI ✅ ✅ Free German Archaeological Institute branches FAIMS 🇦🇺 Macquarie University / CSIRO ✅ ✅ Free   Intrasis 🇸🇪 Arkeologerna ❌ ✅ 21,000 SEK Swedish &amp;amp; Danish museums Ishtar 🇫🇷 Iggdrasil ✅ ✅ Free   Kiosk 🇺🇸 Brown University ✅ ✅ Free   MuseumsGIS2 🇩🇰 Arkæologisk IT ? ? c. 37,000 DKK per year Danish museums OpenAtlas 🇦🇹 Austrian Academy of Sciences ✅ ✅ Free   ^^*^^ The prices given are those of the software’s ‘standard’ plan. For details of other plans, offers, or add-ons, see the individual sections below. How to choose an archaeological information system? In the tables here I have compiled basic metadata and feature information on archaeological information systems that are actively maintained. Metadata includes the licensing and price model, developer, and notable users. The feature comparison includes major points of differentiation between the different software; features that all systems offer, like data input or file export, are not included. I have paid particular attention to whether the system is free and open source or commercial, and in which case how much. This is because I usually advocate for the use of free and open source software in academic contexts. Since archaeological information systems are used primarily for data management, rather than an analysis, I would not say that a free and open source software is essential in this case. However, is still offers distinct advantages in terms of interoperability and maintainability (allowing a wider community to share the development burden) and, in an educational context, avoiding locking students into proprietary walled gardens early in their career. That said, the current reality is that some of the best systems are commercial. My assessments below are written from the perspective of a research archaeologist based at a university, on the basis of the information I could find and demo versions available. I have tried to keep up to date with this field over the years out of a theoretical interest. If I were to use any of the systems myself, it would be in a seasonal research-led field projects and in an educational context, where I want to expose (Danish) students in the modern recording systems they are likely to encounter in their future careers. I am not in a position to evaluate their usefulness to larger institutions or in commercial archaeology contexts, nor to trial each system in the field. Some systems I have not been able to try at all; where this is the case, it is noted below. Feature comparison Feature ARCHES ArcheoBase ARK Diggit Field FAIMS Intrasis Ishtar Kiosk MuseumsGIS OpenAtlas Mobile app ❌ ✅ ❌ ✅ ❌ ✅ ✅ ❌ ✅ ✅ ❌ Offline recording ❓ ❌ ❌ ✅ ✅ ✅ ❓ ❌ ✅ ❓ ❌ Harris matrix ❓ ✅ ✅ ❓ ✅ ❌ ❓ ✅ ✅ ❓ ❓ Mapping ✅ ✅ ✅ ❌ ✅ ✅ ✅ ✅ ❓ ✅ ✅ GIS integration ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ❓ ✅ ✅ Public portal ✅ ✅ ✅ ❓ ❓ ❌ ❓ ✅ ❓ ✅ ✅ Mobile app Dedicated application for iOS or Android devices Offline recording Ability to record data without internet connectivity Harris matrix Built-in tool for generating stratigraphic relationship diagrams Mapping In-app capability to input spatial data (points, lines, polygons) GIS integration Ability to export to or integrate with external GIS software (QGIS, ArcGIS, etc.) Public portal Web interface for public access to project data Honourable mentions Apart from dedicated software, archaeologists routinely make their own digital recording systems with off-the-shelf database (e.g. FileMaker, Microsoft Access) or geographic information system (GIS; e.g. QGIS, ArcGIS) software. In recent years, the availability of mobile GIS apps such as QField and ArcGIS Field Maps have made the latter particularly popular solutions. These DIY approaches are popular for good reasons. They offer flexibility to adapt to specific project needs, lower cost (especially with open source tools), and no vendor lock-in. They also allow archaeologists to leverage existing skills and workflows rather than learning new systems. For small projects or research-led fieldwork, a custom solution can be more practical than adopting a full archaeological information system. For example, I’ve been using a QGIS-based DIY field recording stack for research-led field surveys for nearly a decade and it works well. It’s customised to my specific needs, is free and open source, and integrates seamlessly with my analysis workflows. However, there are trade-offs. DIY systems require technical expertise to set up and maintain, and there’s no dedicated support when things go wrong. Each project essentially reinvents the wheel, making it harder to share data and workflows between projects or institutions. Still, I’d guess that the combined use of these DIY systems is significantly greater than any software developed specifically for archaeology. But as my focus here is on explicit archaeological information systems, I won’t consider them further. Free and open source archaeological information systems ARCHES ARCHES is a web-based, self-hosted heritage data management platform developed by the Getty Conservation Institute and World Monuments Fund. It was originally designed for inventories of immovable cultural heritage and has been widely adopted by Historic Environment Records in the United Kingdom, which are served by a dedicated version called Arches for HERs. It has also been adopted by projects including Endangered Archaeology in the Middle East and North Africa (EAMENA) at Oxford3 and the Greater London Historic Environment Record.4 The system includes GIS functionality. It requires technical expertise to deploy and maintain. ARCHES is a sophisticated and mature system with significant institutional backing from major organisations. However, it is primarily tailored for heritage management and inventory purposes, and its utility for active field recording remains unclear. The system is also notably complex to deploy and maintain, requiring substantial technical expertise that may be prohibitive even for experienced system administrators without dedicated IT support. ARK ARK (Archaeological Recording Kit) is a web-based, self-hosted system developed by L-P Archaeology. It provides an interface for data entry, editing, mapping, and sharing of archaeological project data, and supports web services and data export. It has been used on excavations including the Villa Magna project in Italy5 and Portus.6 ARK was an early pioneer of web-based archaeological recording and represented an important step forward in the digitisation of field documentation. However, the system has not been actively maintained or updated since 2014, and its underlying technology stack has become dated. The web-based architecture limits its practical utility in remote field locations where reliable internet connectivity cannot be assumed, and the older codebase presents significant barriers to long-term maintainability and future development. Field Field (formerly iDAI.field) is a desktop application (with optional sync server) developed by the German Archaeological Institute (DAI) and the GBV Common Library Network. It allows archaeologists to record, share, and store excavation data and images, customise data models, map records, manage types and inventories, and synchronise data. The system comprises a desktop application (Angular/Electron), a mobile app (React Native, in early development), and an optional sync server. Field represents a very promising and full-featured approach to archaeological data management, backed by a sizeable research software engineering team and the international presence of the German Archaeological Institute. The involvement of DAI branches across multiple countries provides both development capacity and a built-in user base that lends the project considerable institutional weight and long-term viability. It does not yet have a mobile application, which is increasingly seen as essential for modern in-field recording workflows. However, a mobile app is actively under development in React Native. FAIMS FAIMS (Field Acquired Information Management Systems) is an open source platform for offline field data collection, originally developed for archaeology but now used across multiple disciplines including geoscience and humanities. The project has an 11-year development history since 2012, with a major rebuild as FAIMS 3.0 released in 2022. It is cross-platform (Android, iOS, and desktop) and offers a self-service notebook designer for customization without coding. Features include offline data capture, mobile GIS, annotations, certainty sliders, multimedia support, and version control. In 2023, the software was rebranded as Fieldmark™ with a commercial hosting option, though the open source version remains freely available. FAIMS has been used in over 40 projects and demonstrates a long-term commitment to offline-first field recording. However, based on experience with earlier versions, the system can be difficult to set up and the data model prioritises flexibility over out-of-the-box utility for archaeological workflows. The cross-disciplinary nature of the platform is both a strength (allowing adaptation to diverse research needs) and a weakness (requiring more customization than archaeology-specific systems). The institutional backing from Macquarie University, CSIRO, and the Australian Research Data Commons provides stability, and the complete rebuild in FAIMS 3.0 may address earlier usability concerns. Ishtar Ishtar is a web-based, self-hosted system developed by the French company Iggdrasil. It manages data from excavation through to museum storage, including context records, finds, administrative files, warehouses, and conservatory treatments. The system has a modular architecture (cartography, underwater archaeology, public portal, etc.) with customisable forms, automatic inventory generation, and multiple user permission levels. First released in 2017, version 4 was released in 2024. I have not yet had the opportunity to trial this system in practice. Further assessment will be provided once hands-on evaluation has been conducted. Kiosk Kiosk is an iPad-based, self-hosted digital field recording platform developed and maintained at Brown University. It is designed to work offline in remote locations, with data synchronisation possible without internet access. It supports excavation and pedestrian survey recording, Harris matrices, ceramic analysis, custom numbering systems, and legacy data integration. It is used by institutions including NYU, University of Chicago, and Leiden University. Kiosk’s restriction to the iOS ecosystem represents a significant limitation, particularly for a free and open source application. This platform dependency precludes trialling the system on non-Apple devices and may exclude many potential users whose institutions have standardised on Android or mixed-device environments. For a FOSS project, such vendor lock-in is especially unfortunate and runs counter to the principles of accessibility and platform independence that typically characterise open source software. OpenAtlas OpenAtlas is a web-based, self-hosted database application developed by the Austrian Centre for Digital Humanities (ACDH), an institute of the Austrian Academy of Sciences, for managing research data across the humanities. It provides customisable forms for recording complex relationships. Features include an interactive Leaflet-based map with PostGIS spatial data, Linked Open Data reference systems, and data integrity checks. It is used by the Österreichisches Archäologisches Institut and other partner projects.7 OpenAtlas is a mature and well-established system with strong institutional backing from the Austrian Archaeological Institute. Like ARCHES, however, it appears to be oriented more towards heritage management, inventory control, and long-term data curation than towards the practical demands of active field recording. Its sophisticated data model and emphasis on complex relational structures may be better suited to post-excavation analysis and museum collections management than to the rapid, context-by-context documentation required during excavation. Commercial archaeological information systems ArcheoBase ArcheoBase is a cloud-based SaaS platform developed by the Swiss company AnalyticBase Sàrl. It covers the full chain of archaeological information processing through modular sub-applications and a mobile app for field recording. Available in multiple European languages, it is priced at 23 CHF per user per month with discounts for larger institutions. For universities, AnalyticBase offer an academic plan where students can receive free access so long as faculty have a license. ArcheoBase is the most full-featured and polished archaeological information system currently available, with an impressive range of features and a modern and professional user interface. It is also one of the few available multilingual systems. However its cloud-based architecture does not appear to permit offline recording, which is a significant limitation for archaeologists working in remote locations. The annual pricing model does not work well in a research context, where fieldwork is seasonal and typically involves large numbers of temporary staff, and will likely be too expensive for many higher education institutions (though the academic plan alleviates this concern in an educational setting). It also raises the concern of vendor lock-in for institutions with long-term projects and/or a commitment to open source. Diggit Diggit is a cloud-based SaaS recording system developed by Diggit Archaeology (UK). It consists of a mobile app (diggitmobile) for on-site recording and a web interface (diggitweb) for exploration, analysis, and export. The interface includes over 240 archaeology-specific icons and charges per context recorded (1 GBP). It is currently available only in the UK, Ireland, and Hong Kong. Diggit employs an interesting and unconventional pricing model based on the number of contexts recorded rather than the number of users. While this could be advantageous for small projects with limited recording needs, it makes costs difficult to predict and budget for larger excavations where the volume of contexts is uncertain. The system is currently available only in the United Kingdom, Ireland, and Hong Kong, making it inaccessible for evaluation in other regional contexts. As it is not available in Denmark, I was unable to conduct a trial assessment of its capabilities and workflow. Intrasis Intrasis is a desktop application (with optional cloud sync) originally designed by Arkeologerna (The Archaeologists) at the Swedish National Historical Museums agency. It combines a database with geographical information for documenting, visualising, and analysing excavation data. While proprietary, it is self-hostable and offers both desktop and mobile apps. According to their website, “it additionally requires an ArcGIS license with minimum licensing to ArcGIS engine runtime (included in ArcGIS desktop).”8 It is used by Swedish and Danish museums. The latest version (4.2) runs on PostgreSQL and includes 3D visualisation capabilities. Intrasis has a rather complex pricing model with various licence types and add-ons. A single-use licence costs 21,000 SEK as a one-time fee, while educational packages are available at 10,000 SEK per year. For full details on licensing options, see the Intrasis pricing page. Intrasis is one of the longest-established archaeological information systems and has achieved significant adoption in commercial archaeology in Sweden and, to a lesser extent, within the Danish museum system. However, the system’s hard dependency on proprietary ESRI ArcGIS software represents a fundamental barrier to adoption for many users. At a time when open source GIS solutions such as QGIS have become mature, widely-used, and well-supported within the archaeological community, requiring users to maintain expensive proprietary GIS licenses alongside Intrasis is increasingly difficult to justify. MuseumsGIS MuseumsGIS is a web-based system with mobile app developed by Arkæologisk IT at Moesgaard Museum, Denmark. It is currently only available to Danish museums. It is built on free and open source software but requires a licence to use, costing approximately 37,000 DKK per year. It comprises a project presentation website (dynamically pulling excavation data including 3D models, historical maps, and geophysics), a mobile field registration app, and QGIS plugins including the FeltTegn tool for converting GPS data to archaeological features. Data is stored on a central database server with full version history at the object level, and is immediately available to both mobile devices and QGIS. MuseumsGIS is relatively new with an impressive feature set that addresses many of the practical requirements of modern archaeological recording. It is currently tightly tailored to the Danish museum sector in its design and pricing; but the fact that it is built on an open source technology stack means that, in principle, the system could be forked and adapted by other institutions or communities. Updates I will keep this page updated as often as possible. Please feel free to contact me with updates, corrections, or suggested additions. 2026-08-19: added information on ArcheoBase’s academic pricing plan 2026-08-03: first version References Diggit is only available in the United Kingdom, Ireland, and Hong Kong. &amp;#8617; MuseumsGIS is only available in Denmark. &amp;#8617; EAMENA database &amp;#8617; GLHER &amp;#8617; Villa Magna &amp;#8617; Portus &amp;#8617; THANADOS &amp;#8617; Intrasis - What is Intrasis? &amp;#8617;</summary></entry><entry><title type="html">era 0.6.0: chronological comparison and difference</title><link href="https://joeroe.io/2026/07/30/era-0.6.0.html" rel="alternate" type="text/html" title="era 0.6.0: chronological comparison and difference" /><published>2026-07-30T00:00:00+00:00</published><updated>2026-07-30T00:00:00+00:00</updated><id>https://joeroe.io/2026/07/30/era-0.6.0</id><content type="html" xml:base="https://joeroe.io/2026/07/30/era-0.6.0.html">&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://era.joeroe.io&quot;&gt;era&lt;/a&gt;&lt;/strong&gt; v0.6.0 is now available &lt;a href=&quot;https://CRAN.R-project.org/package=era&quot;&gt;on CRAN&lt;/a&gt;:&lt;/p&gt;

&lt;!--more--&gt;

&lt;div class=&quot;language-r highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;install.packages&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;era&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;library&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;era&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This minor release adds functions for &lt;a href=&quot;https://era.joeroe.io/reference/yr_earlier_than.html&quot;&gt;chronological comparison&lt;/a&gt; of year vectors:&lt;/p&gt;

&lt;div class=&quot;language-r highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;BCE&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr_earlier_than&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;150&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;BCE&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # BCE years &amp;lt;yr_lgl[3]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] FALSE FALSE  TRUE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Before Common Era (BCE): Gregorian years (365.2425 days), counted backwards from 1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr_later_than&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;150&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;BCE&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # BCE years &amp;lt;yr_lgl[3]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1]  TRUE FALSE FALSE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Before Common Era (BCE): Gregorian years (365.2425 days), counted backwards from 1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And for &lt;a href=&quot;https://era.joeroe.io/reference/yr_difference.html&quot;&gt;calculating chronological differences&lt;/a&gt; between year vectors:&lt;/p&gt;

&lt;div class=&quot;language-r highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;yr_difference&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;BCE&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;BCE&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # years &amp;lt;yr[1]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] 200&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Gregorian years (365.2425 days)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;These functions are aware of era directionality: “BCE” years count backwards, so 300 BCE is earlier than 100 BCE. They support work on &lt;a href=&quot;https://tempo.joeroe.io&quot;&gt;tempo&lt;/a&gt;, a new package I am working on that represents chronological intervals and the temporal relations between them.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://CRAN.R-project.org/package=era&quot;&gt;era on CRAN&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://era.joeroe.io/&quot;&gt;era package documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://era.joeroe.io/articles/era.html&quot;&gt;Introductory vignette&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/joeroe/era&quot;&gt;Source code&lt;/a&gt; (GitHub)&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Joe Roe</name></author><category term="R" /><summary type="html">era v0.6.0 is now available on CRAN: install.packages(&quot;era&quot;) library(era) This minor release adds functions for chronological comparison of year vectors: x &amp;lt;- yr(c(200, 100, 300), &quot;BCE&quot;) yr_earlier_than(x, yr(150, &quot;BCE&quot;)) #&amp;gt; # BCE years &amp;lt;yr_lgl[3]&amp;gt;: #&amp;gt; [1] FALSE FALSE TRUE #&amp;gt; # Era: Before Common Era (BCE): Gregorian years (365.2425 days), counted backwards from 1 yr_later_than(x, yr(150, &quot;BCE&quot;)) #&amp;gt; # BCE years &amp;lt;yr_lgl[3]&amp;gt;: #&amp;gt; [1] TRUE FALSE FALSE #&amp;gt; # Era: Before Common Era (BCE): Gregorian years (365.2425 days), counted backwards from 1 And for calculating chronological differences between year vectors: yr_difference(yr(300, &quot;BCE&quot;), yr(100, &quot;BCE&quot;)) #&amp;gt; # years &amp;lt;yr[1]&amp;gt;: #&amp;gt; [1] 200 #&amp;gt; # Era: Gregorian years (365.2425 days) These functions are aware of era directionality: “BCE” years count backwards, so 300 BCE is earlier than 100 BCE. They support work on tempo, a new package I am working on that represents chronological intervals and the temporal relations between them. Links era on CRAN era package documentation Introductory vignette Source code (GitHub)</summary></entry><entry><title type="html">controller: tidy messy terminology in R with controlled vocabularies</title><link href="https://joeroe.io/2026/07/23/controller-0.1.0.html" rel="alternate" type="text/html" title="controller: tidy messy terminology in R with controlled vocabularies" /><published>2026-07-23T00:00:00+00:00</published><updated>2026-07-23T00:00:00+00:00</updated><id>https://joeroe.io/2026/07/23/controller-0.1.0</id><content type="html" xml:base="https://joeroe.io/2026/07/23/controller-0.1.0.html">&lt;p&gt;&lt;a href=&quot;https://controller.joeroe.io&quot;&gt;controller&lt;/a&gt; is an R package for working with controlled vocabularies. 
It’s first release (v0.1.0) is now available now &lt;a href=&quot;https://cran.r-project.org/package=controller&quot;&gt;on CRAN&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The package addresses something I find myself doing very often in analysis code: tidying messy and inconsistent terminologies.
For smaller datasets, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dplyr::recode()&lt;/code&gt; is okay for this, but writing the mapping out as an R function call gets tedious fast when dealing with a long list of terms.
It becomes &lt;em&gt;very&lt;/em&gt; tedious when you have variants distinguished only by things like capitalisation (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OxA-&lt;/code&gt; vs. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oxa-&lt;/code&gt;), word boundaries (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Çatalhöyük&lt;/code&gt; vs. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Çatal Höyük&lt;/code&gt;) or character encoding (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ʿAin Ghazal&lt;/code&gt; vs. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ʽAyn Ghazal&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;controller instead defines preferred terms and their variants in a data frame.
Its &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;control()&lt;/code&gt; verb is the equivalent of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dplyr::recode()&lt;/code&gt; but using this thesaurus and with a few extra bells and whistles for fuzzy matching and reporting what was (and wasn’t) changed:&lt;/p&gt;

&lt;div class=&quot;language-r highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;library&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;controller&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;colour_thesaurus&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shades&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;daffodil&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;purple&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;magenta&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;azure&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;navy&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;violet&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;control&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shades&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;colour_thesaurus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; Replaced values:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; ℹ daffodil → yellow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; ℹ azure → blue&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; ℹ navy → blue&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; ℹ violet → purple&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; Warning: Some values of `x` were not matched in `thesaurus`:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; ✖ magenta&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Fuzzy matching means we don’t need to exhaustively list those variants from things like differences in case, word boundaries, or character encoding:&lt;/p&gt;

&lt;div class=&quot;language-r highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;control_ci&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;toupper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shades&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;colour_thesaurus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; Replaced values:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; ℹ DAFFODIL → yellow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; ℹ PURPLE → purple&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; ℹ AZURE → blue&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; ℹ NAVY → blue&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; ℹ VIOLET → purple&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] &quot;yellow&quot;  &quot;purple&quot;  &quot;MAGENTA&quot; &quot;blue&quot;    &quot;blue&quot;    &quot;purple&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; Warning message:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; Some values of `x` were not matched in `thesaurus`:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; ✖ MAGENTA&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;This package has been hanging around for a while!
It started off as a helper function I used for cleaning up site names from prehistoric sites in Southwest Asia.
The basic idea was inspired by similar functions that used to exist in &lt;a href=&quot;https://github.com/ISAAKiel/c14bazAAR&quot;&gt;c14bazAAR&lt;/a&gt; for cleaning sample metadata for radiocarbon date, that I thought were quite neat.
So when the maintainers of that package decided to deprecate those, I took over the thesauri as part of &lt;a href=&quot;https://c14.joeroe.io&quot;&gt;c14&lt;/a&gt; and spun the supporting functions off into controller as a standalone package.
Then over the years it acquired some more functionality for working with controlled vocabularies (a surprising gap in the R ecosystem), like reading heritage vocabularies in &lt;a href=&quot;https://heritage-standards.org.uk/fish-vocabularies/&quot;&gt;Historic England’s FISH format&lt;/a&gt;.
Five years later, I am finally getting around to releasing it on CRAN because I need to release c14 on CRAN, because &lt;em&gt;that’s&lt;/em&gt; used in analyses I’m now publishing.
It’s the research software engineering of &lt;a href=&quot;https://www.youtube.com/watch?v=5W4NFcamRhM&quot;&gt;changing a lightbulb&lt;/a&gt;, basically.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;The first release of controller includes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;control()&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;control_ci()&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;control_fuzzy()&lt;/code&gt; for recoding values&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;control_names()&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;control_names_ci()&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;control_names_fuzzy()&lt;/code&gt; for recoding names&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;control_matches()&lt;/code&gt; for inspecting how matches were made&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;read_fish()&lt;/code&gt; for reading vocabularies in &lt;a href=&quot;https://heritage-standards.org.uk/fish-vocabularies/&quot;&gt;Historic England’s FISH format&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;colour_thesaurus&lt;/code&gt;, an example dataset&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can install it from CRAN:&lt;/p&gt;

&lt;div class=&quot;language-r highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;install.packages&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;controller&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Or the development version from GitHub:&lt;/p&gt;

&lt;div class=&quot;language-r highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;remotes&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;install_github&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;joeroe/controller&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can find the full documentation at &lt;a href=&quot;https://controller.joeroe.io&quot;&gt;https://controller.joeroe.io&lt;/a&gt;.&lt;/p&gt;</content><author><name>Joe Roe</name></author><category term="R" /><summary type="html">controller is an R package for working with controlled vocabularies. It’s first release (v0.1.0) is now available now on CRAN. The package addresses something I find myself doing very often in analysis code: tidying messy and inconsistent terminologies. For smaller datasets, dplyr::recode() is okay for this, but writing the mapping out as an R function call gets tedious fast when dealing with a long list of terms. It becomes very tedious when you have variants distinguished only by things like capitalisation (OxA- vs. oxa-), word boundaries (Çatalhöyük vs. Çatal Höyük) or character encoding (ʿAin Ghazal vs. ʽAyn Ghazal). controller instead defines preferred terms and their variants in a data frame. Its control() verb is the equivalent of dplyr::recode() but using this thesaurus and with a few extra bells and whistles for fuzzy matching and reporting what was (and wasn’t) changed: library(controller) data(&quot;colour_thesaurus&quot;) shades &amp;lt;- c(&quot;daffodil&quot;, &quot;purple&quot;, &quot;magenta&quot;, &quot;azure&quot;, &quot;navy&quot;, &quot;violet&quot;) control(shades, colour_thesaurus) #&amp;gt; Replaced values: #&amp;gt; ℹ daffodil → yellow #&amp;gt; ℹ azure → blue #&amp;gt; ℹ navy → blue #&amp;gt; ℹ violet → purple #&amp;gt; Warning: Some values of `x` were not matched in `thesaurus`: #&amp;gt; ✖ magenta Fuzzy matching means we don’t need to exhaustively list those variants from things like differences in case, word boundaries, or character encoding: control_ci(toupper(shades), colour_thesaurus) #&amp;gt; Replaced values: #&amp;gt; ℹ DAFFODIL → yellow #&amp;gt; ℹ PURPLE → purple #&amp;gt; ℹ AZURE → blue #&amp;gt; ℹ NAVY → blue #&amp;gt; ℹ VIOLET → purple #&amp;gt; [1] &quot;yellow&quot; &quot;purple&quot; &quot;MAGENTA&quot; &quot;blue&quot; &quot;blue&quot; &quot;purple&quot; #&amp;gt; Warning message: #&amp;gt; Some values of `x` were not matched in `thesaurus`: #&amp;gt; ✖ MAGENTA This package has been hanging around for a while! It started off as a helper function I used for cleaning up site names from prehistoric sites in Southwest Asia. The basic idea was inspired by similar functions that used to exist in c14bazAAR for cleaning sample metadata for radiocarbon date, that I thought were quite neat. So when the maintainers of that package decided to deprecate those, I took over the thesauri as part of c14 and spun the supporting functions off into controller as a standalone package. Then over the years it acquired some more functionality for working with controlled vocabularies (a surprising gap in the R ecosystem), like reading heritage vocabularies in Historic England’s FISH format. Five years later, I am finally getting around to releasing it on CRAN because I need to release c14 on CRAN, because that’s used in analyses I’m now publishing. It’s the research software engineering of changing a lightbulb, basically. The first release of controller includes: control(), control_ci(), and control_fuzzy() for recoding values control_names(), control_names_ci(), and control_names_fuzzy() for recoding names control_matches() for inspecting how matches were made read_fish() for reading vocabularies in Historic England’s FISH format colour_thesaurus, an example dataset You can install it from CRAN: install.packages(&quot;controller&quot;) Or the development version from GitHub: remotes::install_github(&quot;joeroe/controller&quot;) You can find the full documentation at https://controller.joeroe.io.</summary></entry><entry><title type="html">When was the plough invented?</title><link href="https://joeroe.io/2025/08/24/ploughing.html" rel="alternate" type="text/html" title="When was the plough invented?" /><published>2025-08-24T00:00:00+00:00</published><updated>2025-08-24T00:00:00+00:00</updated><id>https://joeroe.io/2025/08/24/ploughing</id><content type="html" xml:base="https://joeroe.io/2025/08/24/ploughing.html">&lt;figure&gt;
    &lt;img src=&quot;/images/ploughing/potts_in_jursa_2021.png&quot; alt=&quot;Ancient Mesopotamian depiction of an ox-drawn plough&quot; class=&quot;align-center&quot; style=&quot;width: auto;&quot; /&gt;
    &lt;figcaption class=&quot;align-center&quot;&gt;
        Ancient Mesopotamian depiction of an ox-drawn plough (after &lt;a href=&quot;https://doi.org/10.1002/9781118970959.ch8&quot;&gt;Potts in Jursa, 2021&lt;/a&gt;, all rights reserved)
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The invention of the ox-drawn plough was a turning point in the prehistory of agriculture because it was the first time &lt;a href=&quot;https://doi.org/10.15184/aqy.2019.105&quot;&gt;food production was decoupled from human labour&lt;/a&gt;. 
This is why, from Medieval Europe to the &lt;a href=&quot;https://doi.org/10.1002/9781118970959.ch8&quot;&gt;ancient Near East&lt;/a&gt; farms were measured by the number of oxen (later horses etc.) working it, not people.&lt;/p&gt;

&lt;p&gt;Yet it’s surprisingly difficult to pinpoint when this actually happened.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/images/ploughing/van_willigen_et_al_2024_fig1.png&quot; alt=&quot;Map of Europe showing the location of archaeological sites with ancient ploughmarks. Points are concentrated in Denmark and Switzerland, with a smaller number in Great Britain, the Netherlands, Italy, and Poland.&quot; class=&quot;align-center&quot; style=&quot;width: auto;&quot; /&gt;
    &lt;figcaption class=&quot;align-center&quot;&gt;
        Archaeological sites with evidence for early ploughing in Europe (&lt;a href=&quot;https://doi.org/10.1057/s41599-024-02837-5&quot;&gt;van Willigen et al. 2024, fig. 1&lt;/a&gt;, CC BY)
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The earliest direct evidence we have for ploughing are marks made in ancient sediment, though these are very rarely preserved. In Europe the oldest known are from &lt;a href=&quot;https://doi.org/10.1057/s41599-024-02837-5&quot;&gt;Switzerland (5000 BCE)&lt;/a&gt;, &lt;a href=&quot;https://doi.org/10.1016/j.jas.2012.08.042&quot;&gt;Denmark (4000 BCE)&lt;/a&gt; and Italy (4300 BCE, at Saint-Martin-de-Corléans).
In each case the date coincidences with, or is shortly after, the arrival of agriculture in that region.
This implies that ploughing was part of European farming from the beginning. In other words, like agriculture itself, it must have been brought there from the Middle East.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/images/ploughing/van_willigen_et_al_2024_fig3b.png&quot; alt=&quot;Photo showing an archaeologist working in a trench with faint parallel lines visible on the exposed surface&quot; class=&quot;align-center&quot; style=&quot;width: auto;&quot; /&gt;
    &lt;figcaption class=&quot;align-center&quot;&gt;
        Ploughmarks from Anciens Arsenaux in Switzerland – the earliest known direct evidence for ploughing (&lt;a href=&quot;https://doi.org/10.1057/s41599-024-02837-5&quot;&gt;van Willigen et al. 2024, fig. 3&lt;/a&gt;, CC BY)
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Unfortunately we haven’t (yet) found the right conditions for preserved ploughmarks in the Middle East.
Instead, archaeologists have relied on &lt;a href=&quot;https://www.jstor.org/stable/44870382&quot;&gt;indirect evidence of ploughing&lt;/a&gt;. 
The main source of evidence is cattle bones, which can display work-related injuries or signs of castration (oxen are usually castrated to make them easier to work with).
If we accept this evidence, ploughing could have been invented as early as 8500 BCE – right after cattle were domesticated.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/images/ploughing/helmer_et_al_2018_fig1.png&quot; alt=&quot;Photographs of three cattle phalanx bones, one visibly much older than the others.&quot; class=&quot;align-center&quot; style=&quot;width: auto;&quot; /&gt;
    &lt;figcaption class=&quot;align-center&quot;&gt;
        Ancient and modern cattle phalanx bones with pathologies thought to be caused by work (&lt;a href=&quot;https://www.jstor.org/stable/44870382&quot;&gt;Helmer et al. 2018, fig. 1&lt;/a&gt;, all rights reserved)
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;There are some problems, though.&lt;/p&gt;

&lt;p&gt;The pathologies used to identify working animals are rare in the archaeological record and can also be caused by illness. 
Castrates are distinguished by comparing measurements of their bones to modern animals, but we can’t be sure this is a valid comparison. 
At this early stage cattle were still being domesticated and probably were in contact with wild auroch populations, so they likely displayed more morphological variation than modern domestic animals.
Some experts even &lt;a href=&quot;https://doi.org/10.1093/af/vfab015&quot;&gt;dispute the fact that cattle were domesticated by 8500 BCE&lt;/a&gt;. instead putting it up to a thousand years later.
As with working, we largely rely on indirect evidence for cattle domestication, so it is hard to pinpoint with confidence.&lt;/p&gt;

&lt;p&gt;So where does this leave us? Based on the evidence from Europe, ploughing was invented before 5000 BCE, but could go as far back 7500–8500 BCE in the Middle East.
In other words, we don’t know if the plough was a late addition to prehistoric agriculture—adopted somewhere on the way from the Middle East to Europe—or if it was an integral part of it from the start.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/images/ploughing/gronenborn_et_al_2023_1.png&quot; alt=&quot;Map showing the spread of farming in Western Eurasia. Begins in the &apos;Fertile Crescent&apos; of the Middle East around 9000 BCE; spreads to southeast Europe, the Caucasus and Persia by 6000 BCE; to Italy and southern Europe via a &apos;sea route&apos; by 5500 BCE; to Central Europe via a &apos;land route&apos; by 5000 BCE; and to the British Isles, Low Countries, and southern Scandinavia by 4000 BCE.&quot; class=&quot;align-center&quot; style=&quot;width: auto;&quot; /&gt;
    &lt;figcaption class=&quot;align-center&quot;&gt;
        Spread of farming in Western Eurasia (&lt;a href=&quot;https://doi.org/10.5281/zenodo.10047818&quot;&gt;Gronenborn et al. 2023&lt;/a&gt;, CC BY)
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;This is a big problem for our understanding of human social and economic prehistory. We think the earliest farmers practised a sort of ‘garden agriculture’ based on limited tilling with hand tools. 
Ploughing up whole fields to (presumably) sow them with monocultures is a another beast entirely, ecologically speaking.
Animal labour is also what made it possible for one person to reap the harvest of more land than they themselves could physically work – or compel other people to do it for them!&lt;/p&gt;

&lt;p&gt;Was the potential for proto-serfdom and cattle-powered ecocide inherent in agriculture from the beginning?
Or did our farming ancestors spend as much as &lt;em&gt;three thousand years&lt;/em&gt; as essentially egalitarian gardeners before things took a turn for the worse?
That’s the difference dating the plough makes!&lt;/p&gt;

&lt;p&gt;&lt;small&gt;Adapted from a &lt;a href=&quot;https://archaeo.social/@joeroe/114986894481472137&quot;&gt;Mastodon thread&lt;/a&gt; posted to &lt;a href=&quot;https://archaeo.social&quot;&gt;archaeo.social&lt;/a&gt; on 7 August 2025.&lt;/small&gt;&lt;/p&gt;</content><author><name>Joe Roe</name></author><summary type="html">Ancient Mesopotamian depiction of an ox-drawn plough (after Potts in Jursa, 2021, all rights reserved) The invention of the ox-drawn plough was a turning point in the prehistory of agriculture because it was the first time food production was decoupled from human labour. This is why, from Medieval Europe to the ancient Near East farms were measured by the number of oxen (later horses etc.) working it, not people. Yet it’s surprisingly difficult to pinpoint when this actually happened. Archaeological sites with evidence for early ploughing in Europe (van Willigen et al. 2024, fig. 1, CC BY) The earliest direct evidence we have for ploughing are marks made in ancient sediment, though these are very rarely preserved. In Europe the oldest known are from Switzerland (5000 BCE), Denmark (4000 BCE) and Italy (4300 BCE, at Saint-Martin-de-Corléans). In each case the date coincidences with, or is shortly after, the arrival of agriculture in that region. This implies that ploughing was part of European farming from the beginning. In other words, like agriculture itself, it must have been brought there from the Middle East. Ploughmarks from Anciens Arsenaux in Switzerland – the earliest known direct evidence for ploughing (van Willigen et al. 2024, fig. 3, CC BY) Unfortunately we haven’t (yet) found the right conditions for preserved ploughmarks in the Middle East. Instead, archaeologists have relied on indirect evidence of ploughing. The main source of evidence is cattle bones, which can display work-related injuries or signs of castration (oxen are usually castrated to make them easier to work with). If we accept this evidence, ploughing could have been invented as early as 8500 BCE – right after cattle were domesticated. Ancient and modern cattle phalanx bones with pathologies thought to be caused by work (Helmer et al. 2018, fig. 1, all rights reserved) There are some problems, though. The pathologies used to identify working animals are rare in the archaeological record and can also be caused by illness. Castrates are distinguished by comparing measurements of their bones to modern animals, but we can’t be sure this is a valid comparison. At this early stage cattle were still being domesticated and probably were in contact with wild auroch populations, so they likely displayed more morphological variation than modern domestic animals. Some experts even dispute the fact that cattle were domesticated by 8500 BCE. instead putting it up to a thousand years later. As with working, we largely rely on indirect evidence for cattle domestication, so it is hard to pinpoint with confidence. So where does this leave us? Based on the evidence from Europe, ploughing was invented before 5000 BCE, but could go as far back 7500–8500 BCE in the Middle East. In other words, we don’t know if the plough was a late addition to prehistoric agriculture—adopted somewhere on the way from the Middle East to Europe—or if it was an integral part of it from the start. Spread of farming in Western Eurasia (Gronenborn et al. 2023, CC BY) This is a big problem for our understanding of human social and economic prehistory. We think the earliest farmers practised a sort of ‘garden agriculture’ based on limited tilling with hand tools. Ploughing up whole fields to (presumably) sow them with monocultures is a another beast entirely, ecologically speaking. Animal labour is also what made it possible for one person to reap the harvest of more land than they themselves could physically work – or compel other people to do it for them! Was the potential for proto-serfdom and cattle-powered ecocide inherent in agriculture from the beginning? Or did our farming ancestors spend as much as three thousand years as essentially egalitarian gardeners before things took a turn for the worse? That’s the difference dating the plough makes! Adapted from a Mastodon thread posted to archaeo.social on 7 August 2025.</summary></entry><entry><title type="html">era 0.5.0: chronological ordering and extremes</title><link href="https://joeroe.io/2024/11/20/era-0.5.0.html" rel="alternate" type="text/html" title="era 0.5.0: chronological ordering and extremes" /><published>2024-11-20T00:00:00+00:00</published><updated>2024-11-20T00:00:00+00:00</updated><id>https://joeroe.io/2024/11/20/era-0.5.0</id><content type="html" xml:base="https://joeroe.io/2024/11/20/era-0.5.0.html">&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://era.joeroe.io&quot;&gt;era&lt;/a&gt;&lt;/strong&gt; v0.5.0 is now available &lt;a href=&quot;https://CRAN.R-project.org/package=era&quot;&gt;on CRAN&lt;/a&gt;:&lt;/p&gt;

&lt;div class=&quot;language-r highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;install.packages&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;era&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This minor release adds functions for &lt;a href=&quot;https://era.joeroe.io/reference/yr_sort.html&quot;&gt;chronological ordering&lt;/a&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yr_sort()&lt;/code&gt;) of year vectors:&lt;/p&gt;

&lt;div class=&quot;language-r highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# Forward-counting era:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;CE&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr_earliest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # CE years &amp;lt;yr[1]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] 100&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr_latest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # CE years &amp;lt;yr[1]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] 300&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr_range&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # CE years &amp;lt;yr[2]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] 100 300&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# Backward-counting era:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;BCE&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr_earliest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # BCE years &amp;lt;yr[1]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] 300&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Before Common Era (BCE): Gregorian years (365.2425 days), counted backwards from 1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr_latest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # BCE years &amp;lt;yr[1]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] 100&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Before Common Era (BCE): Gregorian years (365.2425 days), counted backwards from 1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr_range&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # CE years &amp;lt;yr[2]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] 100 300&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And for &lt;a href=&quot;https://era.joeroe.io/reference/yr_extremes.html&quot;&gt;calculating their extreme values&lt;/a&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yr_earliest()&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yr_latest()&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yr_range()&lt;/code&gt;)&lt;/p&gt;

&lt;div class=&quot;language-r highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# Forward-counting era:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;CE&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr_earliest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # CE years &amp;lt;yr[1]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] 100&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr_latest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # CE years &amp;lt;yr[1]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] 300&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr_range&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # CE years &amp;lt;yr[2]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] 100 300&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# Backward-counting era:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;BCE&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr_earliest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # BCE years &amp;lt;yr[1]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] 300&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Before Common Era (BCE): Gregorian years (365.2425 days), counted backwards from 1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr_latest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # BCE years &amp;lt;yr[1]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] 100&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Before Common Era (BCE): Gregorian years (365.2425 days), counted backwards from 1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yr_range&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # CE years &amp;lt;yr[2]&amp;gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; [1] 100 300&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;#&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Essentially these are all wrappers for base functions (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sort()&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;min()&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;max()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;range()&lt;/code&gt;) that are aware of the directionality of the era system attached to the vector: “CE” years are counted forwards, “BCE” years are counted backwards, etc.
I decided to implement them as prefixed functions instead of S3 methods for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yr&lt;/code&gt; vectors because I didn’t want to suprise people when they used e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;max()&lt;/code&gt; expecting the numerical maximum and got the chronologically latest value instead.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://CRAN.R-project.org/package=era&quot;&gt;era on CRAN&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://era.joeroe.io/&quot;&gt;era package documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://era.joeroe.io/articles/era.html&quot;&gt;Introductory vignette&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/joeroe/era&quot;&gt;Source code&lt;/a&gt; (GitHub)&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Joe Roe</name></author><category term="R" /><summary type="html">era v0.5.0 is now available on CRAN: install.packages(&quot;era&quot;) This minor release adds functions for chronological ordering (yr_sort()) of year vectors: # Forward-counting era: x &amp;lt;- yr(c(200, 100, 300), &quot;CE&quot;) yr_earliest(x) #&amp;gt; # CE years &amp;lt;yr[1]&amp;gt;: #&amp;gt; [1] 100 #&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0 yr_latest(x) #&amp;gt; # CE years &amp;lt;yr[1]&amp;gt;: #&amp;gt; [1] 300 #&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0 yr_range(x) #&amp;gt; # CE years &amp;lt;yr[2]&amp;gt;: #&amp;gt; [1] 100 300 #&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0 # Backward-counting era: y &amp;lt;- yr(c(200, 100, 300), &quot;BCE&quot;) yr_earliest(y) #&amp;gt; # BCE years &amp;lt;yr[1]&amp;gt;: #&amp;gt; [1] 300 #&amp;gt; # Era: Before Common Era (BCE): Gregorian years (365.2425 days), counted backwards from 1 yr_latest(y) #&amp;gt; # BCE years &amp;lt;yr[1]&amp;gt;: #&amp;gt; [1] 100 #&amp;gt; # Era: Before Common Era (BCE): Gregorian years (365.2425 days), counted backwards from 1 yr_range(x) #&amp;gt; # CE years &amp;lt;yr[2]&amp;gt;: #&amp;gt; [1] 100 300 #&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0 And for calculating their extreme values (yr_earliest(), yr_latest(), and yr_range()) # Forward-counting era: x &amp;lt;- yr(c(200, 100, 300), &quot;CE&quot;) yr_earliest(x) #&amp;gt; # CE years &amp;lt;yr[1]&amp;gt;: #&amp;gt; [1] 100 #&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0 yr_latest(x) #&amp;gt; # CE years &amp;lt;yr[1]&amp;gt;: #&amp;gt; [1] 300 #&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0 yr_range(x) #&amp;gt; # CE years &amp;lt;yr[2]&amp;gt;: #&amp;gt; [1] 100 300 #&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0 # Backward-counting era: y &amp;lt;- yr(c(200, 100, 300), &quot;BCE&quot;) yr_earliest(y) #&amp;gt; # BCE years &amp;lt;yr[1]&amp;gt;: #&amp;gt; [1] 300 #&amp;gt; # Era: Before Common Era (BCE): Gregorian years (365.2425 days), counted backwards from 1 yr_latest(y) #&amp;gt; # BCE years &amp;lt;yr[1]&amp;gt;: #&amp;gt; [1] 100 #&amp;gt; # Era: Before Common Era (BCE): Gregorian years (365.2425 days), counted backwards from 1 yr_range(x) #&amp;gt; # CE years &amp;lt;yr[2]&amp;gt;: #&amp;gt; [1] 100 300 #&amp;gt; # Era: Common Era (CE): Gregorian years (365.2425 days), counted forwards from 0 Essentially these are all wrappers for base functions (sort(), min(), max() and range()) that are aware of the directionality of the era system attached to the vector: “CE” years are counted forwards, “BCE” years are counted backwards, etc. I decided to implement them as prefixed functions instead of S3 methods for yr vectors because I didn’t want to suprise people when they used e.g. max() expecting the numerical maximum and got the chronologically latest value instead. Links era on CRAN era package documentation Introductory vignette Source code (GitHub)</summary></entry><entry><title type="html">Deploy a Fly app with Woodpecker CI</title><link href="https://joeroe.io/2024/01/09/deploy-fly-woodpecker-ci.html" rel="alternate" type="text/html" title="Deploy a Fly app with Woodpecker CI" /><published>2024-01-09T00:00:00+00:00</published><updated>2024-01-09T00:00:00+00:00</updated><id>https://joeroe.io/2024/01/09/deploy-fly-woodpecker-ci</id><content type="html" xml:base="https://joeroe.io/2024/01/09/deploy-fly-woodpecker-ci.html">&lt;p&gt;This post describes how to set up continuous deployment to &lt;a href=&quot;https://fly.io&quot;&gt;fly.io&lt;/a&gt; using &lt;a href=&quot;https://woodpecker-ci.org/&quot;&gt;Woodpecker&lt;/a&gt;, an open source continuous integration engine.
The Fly documentation includes instructions on how to set up continuous deployment &lt;a href=&quot;https://fly.io/docs/app-guides/continuous-deployment-with-github-actions/&quot;&gt;with GitHub Actions&lt;/a&gt; and &lt;a href=&quot;https://fly.io/blog/continuous-deployment-with-gitlab/&quot;&gt;with GitLab CI/CD&lt;/a&gt;, but I couldn’t find anything for Woodpecker.
Fortunately, the process is almost identical to setting it up with GitLab CI/CD, so I could figure it out by following along that tutorial and making minor changes.&lt;/p&gt;

&lt;p&gt;My use case was to deploy from a &lt;a href=&quot;https://codeberg.org&quot;&gt;Codeberg&lt;/a&gt; repository, but the instructions below should also work for any &lt;a href=&quot;https://woodpecker-ci.org/docs/administration/forges/overview&quot;&gt;forge supported by Woodpecker&lt;/a&gt; (currently GitHub, Gitea, Forgejo, GitLab, and Bitbucket).&lt;/p&gt;

&lt;h2 id=&quot;connect-your-repository-to-woodpecker&quot;&gt;Connect your repository to Woodpecker&lt;/h2&gt;

&lt;p&gt;First things first, you’ll need access to a Woodpecker instance.
Codeberg users can &lt;a href=&quot;https://codeberg.org/Codeberg-e.V./requests&quot;&gt;request access&lt;/a&gt; to a hosted version, as long as you intend to use it for public, freely-licensed code.
Otherwise you can &lt;a href=&quot;https://woodpecker-ci.org/docs/administration/deployment/overview&quot;&gt;self-host it&lt;/a&gt;.
Woodpecker come with both a web interface and a &lt;a href=&quot;https://woodpecker-ci.org/docs/cli&quot;&gt;command line interface&lt;/a&gt;.
You can connect the CLI to your Woodpecker instance using the personal access token displayed under &lt;em&gt;User Settings → API&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Once you have Woodpecker up and running, &lt;a href=&quot;https://woodpecker-ci.org/docs/usage/intro&quot;&gt;activate it for the repository&lt;/a&gt; that you want to deploy, i.e. the one that contains your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fly.toml&lt;/code&gt; configuration file.
Be sure to &lt;strong&gt;disable ‘Allow Pull Requests’&lt;/strong&gt; in the project settings, otherwise anybody who can make a pull request will have access to your Fly machines!&lt;/p&gt;

&lt;h2 id=&quot;create-a-workflow-file&quot;&gt;Create a workflow file&lt;/h2&gt;

&lt;p&gt;Create &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.woodpecker/deploy.yml&lt;/code&gt; in your repository with the following contents:&lt;/p&gt;

&lt;div class=&quot;language-yml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;steps&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;deploy&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;golang&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;commands&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;apt-get update -qq &amp;amp;&amp;amp; apt-get install -y curl&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;curl -L https://fly.io/install.sh | sh&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/root/.fly/bin/flyctl deploy&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;secrets&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;fly_access_token&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This sets up a ‘deploy’ workflow which downloads a shell script to install fly, then runs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flyctl deploy&lt;/code&gt;.
The choice of base image is arbitrary since all we really need installed is curl and bash.&lt;/p&gt;

&lt;h2 id=&quot;set-up-a-fly-access-token&quot;&gt;Set up a Fly access token&lt;/h2&gt;

&lt;p&gt;In order to deploy securely from the container created by Woodpecker, we need to authenticate with Fly in such a way that the credentials do not leak into the (public) CI logs.
To do this, we will generate a unique access token and pass it into the container as an environment variable using Woodpecker’s &lt;a href=&quot;https://woodpecker-ci.org/docs/usage/secrets&quot;&gt;secrets store&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;First, generate a new deploy token using the Fly web interface or command line:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;flyctl tokens create deploy &lt;span class=&quot;nt&quot;&gt;-n&lt;/span&gt; woodpecker
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It’s a good idea to use a dedicated token for woodpecker deployments, so if you need to you can revoke it without affecting any other integrations you might have.
You might also want to set a shorter expiry time with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-x&lt;/code&gt; option (the default is twenty years).
Copy or save your newly generated secret somewhere now, because it’s only shown once.&lt;/p&gt;

&lt;p&gt;Next, create a secret named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fly_access_token&lt;/code&gt; that contains your access token.
You can do this using the Woodpecker web interface or the command line:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;woodpecker secret add &lt;span class=&quot;nt&quot;&gt;-name&lt;/span&gt; fly_access_token &lt;span class=&quot;nt&quot;&gt;-event&lt;/span&gt; push &lt;span class=&quot;nt&quot;&gt;-event&lt;/span&gt; manual &lt;span class=&quot;nt&quot;&gt;-repository&lt;/span&gt; &amp;lt;your_repository&amp;gt; &lt;span class=&quot;nt&quot;&gt;-value&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&amp;lt;your_access_token&amp;gt;&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note that we only make the secret available when the workflow is triggered by a push from an authorised contributor to the repository or run manually by somebody with access to Woodpecker CI.
Your usage might vary, but you probably should not make it available on pull requests, otherwise a careless or malicious pull request could leak your access token.&lt;/p&gt;

&lt;h2 id=&quot;deploy&quot;&gt;Deploy&lt;/h2&gt;

&lt;p&gt;That’s it!
When you push these changes to your remote repository, Woodpecker should immediately deploy to Fly.
You can monitor the status of the deployment in the Woodpecker CI web interface.
In the Woodpecker repository settings, under &lt;em&gt;Badge&lt;/em&gt;, you’ll also find a badge that you can add to your README to show the status of the last deployment.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/pipeline_success.svg&quot; alt=&quot;&apos;Success&apos; status badge from Woodpecker CI&quot; /&gt;&lt;/p&gt;</content><author><name>Joe Roe</name></author><summary type="html">This post describes how to set up continuous deployment to fly.io using Woodpecker, an open source continuous integration engine. The Fly documentation includes instructions on how to set up continuous deployment with GitHub Actions and with GitLab CI/CD, but I couldn’t find anything for Woodpecker. Fortunately, the process is almost identical to setting it up with GitLab CI/CD, so I could figure it out by following along that tutorial and making minor changes. My use case was to deploy from a Codeberg repository, but the instructions below should also work for any forge supported by Woodpecker (currently GitHub, Gitea, Forgejo, GitLab, and Bitbucket). Connect your repository to Woodpecker First things first, you’ll need access to a Woodpecker instance. Codeberg users can request access to a hosted version, as long as you intend to use it for public, freely-licensed code. Otherwise you can self-host it. Woodpecker come with both a web interface and a command line interface. You can connect the CLI to your Woodpecker instance using the personal access token displayed under User Settings → API. Once you have Woodpecker up and running, activate it for the repository that you want to deploy, i.e. the one that contains your fly.toml configuration file. Be sure to disable ‘Allow Pull Requests’ in the project settings, otherwise anybody who can make a pull request will have access to your Fly machines! Create a workflow file Create .woodpecker/deploy.yml in your repository with the following contents: steps: deploy: image: golang commands: - apt-get update -qq &amp;amp;&amp;amp; apt-get install -y curl - curl -L https://fly.io/install.sh | sh - /root/.fly/bin/flyctl deploy secrets: [ fly_access_token ] This sets up a ‘deploy’ workflow which downloads a shell script to install fly, then runs flyctl deploy. The choice of base image is arbitrary since all we really need installed is curl and bash. Set up a Fly access token In order to deploy securely from the container created by Woodpecker, we need to authenticate with Fly in such a way that the credentials do not leak into the (public) CI logs. To do this, we will generate a unique access token and pass it into the container as an environment variable using Woodpecker’s secrets store. First, generate a new deploy token using the Fly web interface or command line: flyctl tokens create deploy -n woodpecker It’s a good idea to use a dedicated token for woodpecker deployments, so if you need to you can revoke it without affecting any other integrations you might have. You might also want to set a shorter expiry time with the -x option (the default is twenty years). Copy or save your newly generated secret somewhere now, because it’s only shown once. Next, create a secret named fly_access_token that contains your access token. You can do this using the Woodpecker web interface or the command line: woodpecker secret add -name fly_access_token -event push -event manual -repository &amp;lt;your_repository&amp;gt; -value &apos;&amp;lt;your_access_token&amp;gt;&apos; Note that we only make the secret available when the workflow is triggered by a push from an authorised contributor to the repository or run manually by somebody with access to Woodpecker CI. Your usage might vary, but you probably should not make it available on pull requests, otherwise a careless or malicious pull request could leak your access token. Deploy That’s it! When you push these changes to your remote repository, Woodpecker should immediately deploy to Fly. You can monitor the status of the deployment in the Woodpecker CI web interface. In the Woodpecker repository settings, under Badge, you’ll also find a badge that you can add to your README to show the status of the last deployment.</summary></entry><entry><title type="html">rpaleoclim v1.0.0: paleoclimate data in R</title><link href="https://joeroe.io/2023/05/02/rpaleoclim-1.0.0.html" rel="alternate" type="text/html" title="rpaleoclim v1.0.0: paleoclimate data in R" /><published>2023-05-02T00:00:00+00:00</published><updated>2023-05-02T00:00:00+00:00</updated><id>https://joeroe.io/2023/05/02/rpaleoclim-1.0.0</id><content type="html" xml:base="https://joeroe.io/2023/05/02/rpaleoclim-1.0.0.html">&lt;p&gt;&lt;a href=&quot;https://www.paleoclim.org&quot;&gt;PaleoClim&lt;/a&gt; (&lt;a href=&quot;https://doi.org/10.1038/sdata.2018.254&quot;&gt;Brown et
al. 2018&lt;/a&gt;, &lt;em&gt;Scientific Data&lt;/em&gt;) is
a set of high-resolution paleoclimate surfaces covering the whole world.
The data is derived from &lt;a href=&quot;https://en.wikipedia.org/wiki/HadCM3&quot;&gt;HadCM3&lt;/a&gt;,
one of the major ‘general circulation models’ that is used to forecast
climate change, turned backwards to ‘predict’ conditions for key climate
periods in the past. This is then ‘downscaled’ to a high spatial
resolution (up to 2.5 minutes) using modern climate data. A continuous
set of reconstructions from the near-present to the Last Glacial Maximum
(c. 0.3–21 ka, divided into 7 periods) are available, plus snapshots for
the Last Interglacial (c. 130 ka), MIS19 (c. 787 ka), mid-Pliocene
(c. 3.205 Ma and 3.3 Ma). For convenience, modern data from
&lt;a href=&quot;https://doi.org/10.1038/sdata.2017.122&quot;&gt;CHELSA&lt;/a&gt; (used for downscaling)
is also bundled in the same format.&lt;/p&gt;

&lt;p&gt;PaleoClim is my go-to paleoclimate dataset for modelling prehistoric
environments because as far as I know it has the best spatial resolution
available for my main period of interest, the Late Pleistocene and Early
Holocene.&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; It’s also generally more accessible and easier to use than
‘raw’ GCM predictions and the choice of time slices is a good fit for
prehistoric archaeology.&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; Its API is very simple: from the PaleoClim
website you can download archives for each period at a number of
resolutions, with each archive including a set of GeoTIFFs representing
the &lt;a href=&quot;http://www.paleoclim.org/methods/#BIOCLIMS&quot;&gt;19 bioclimatic
variables&lt;/a&gt; widely used in
ecological modelling.&lt;/p&gt;

&lt;p&gt;Alternatively, &lt;strong&gt;&lt;a href=&quot;https://rpaleoclim.joeroe.io&quot;&gt;rpaleoclim&lt;/a&gt;&lt;/strong&gt; is a
simple R package that automates the process of downloading, reading and
cropping PaleoClim data. It’s been availble on GitHub for a few years,
but the latest release v1.0.0 adds support for
&lt;a href=&quot;https://cran.r-project.org/web/packages/terra/index.html&quot;&gt;terra&lt;/a&gt;-format
rasters and also brings the package &lt;a href=&quot;https://CRAN.R-project.org/package=rpaleoclim&quot;&gt;to
CRAN&lt;/a&gt;. This means you can
now install it easily with:&lt;/p&gt;

&lt;div class=&quot;language-r highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;install.packages&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;rpaleoclim&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The way &lt;a href=&quot;/2020/11/05/30daymapchallenge-blue.html&quot;&gt;I usually use
rpaleoclim&lt;/a&gt; is to get the
reconstructions for a particular region for a set of periods. For
example, Europe in the Late Holocene:&lt;/p&gt;

&lt;div class=&quot;language-r highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;library&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;rpaleoclim&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;library&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;terra&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;europe&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;-15&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;90&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;europe_lh&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;paleoclim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;lh&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;10m&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;region&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;europe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plot&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;europe_lh&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;bio_12&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;total annual precipitation&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/images/rpaleoclim-1.0.0/rpaleoclim-example-1.png&quot; alt=&quot;&quot; /&gt;&lt;!-- --&gt;&lt;/p&gt;

&lt;p&gt;Further functionality is explained in the &lt;a href=&quot;https://rpaleoclim.joeroe.io/articles/rpaleoclim.html&quot;&gt;introduction to
rpaleoclim&lt;/a&gt;
vignette. One thing I’d highlight is the caching facility, which my
default uses a temporary directory to store downloaded PaleoClim for the
length of the R session. To keep things reproducible, I recommend using
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cache_path&lt;/code&gt; argument to use a location within your project
directory instead.&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; That way, if the online versions of the PastClim
data ever disappears or moves, the dataset you rely on will still be
there – something I’ve been caught out by many, many times!&lt;/p&gt;

&lt;p&gt;Please note that rpaleoclim simply provides a convenient way to use the
PaleoClim dataset in R; I don’t claim any credit for the actual data. If
you use it in a publication, the PaleoClim authors request that you cite
both their derived dataset (i.e. PaleoClim, &lt;a href=&quot;https://doi.org/10.1038/sdata.2018.254&quot;&gt;Brown et
al. 2018&lt;/a&gt;) and the original
climatologies used. These references are included in the package:&lt;/p&gt;

&lt;div class=&quot;language-r highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;citation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;rpaleoclim&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;## Please cite both PaleoClim and original datasets used.
## 
## PaleoClim and dataset &apos;mis19&apos;:
## 
##   Brown Jason L, et al. &quot;PaleoClim, high spatial resolution
##   paleoclimate surfaces for global land areas&quot;. Scientific Data 5.
##   (2018): 180254.
## 
## Datasets &apos;lh&apos;, &apos;mh&apos;, &apos;eh&apos;, &apos;yds&apos;, &apos;ba&apos; and &apos;hs1&apos;:
## 
##   Fordham Damien A, et al. &quot;PaleoView: a tool for generating continuous
##   climate projections spanning the last 21 000 years at regional and
##   global scales&quot;. Ecography 40. (2017): 1348-1358.
## 
## Dataset &apos;lig&apos;:
## 
##   Otto-Bliesner Bette L., et al. &quot;Simulating Arctic Climate Warmth and
##   Icefield Retreat in the Last Interglaciation&quot;. Science 311. (2006):
##   1751-1753.
## 
## Dataset &apos;mpwp&apos;:
## 
##   Hill Daniel J. &quot;The non-analogue nature of Pliocene temperature
##   gradients &quot;. Earth and Planetary Science Letters 425. (2015):
##   232-241.
## 
## Dataset &apos;m2&apos;:
## 
##   Dolan Aisling M, et al. &quot;Modelling the enigmatic Late Pliocene
##   Glacial Event — Marine Isotope Stage M2&quot;. Global and Planetary Change
##   128. (2015): 47-60.
## 
## Dataset &apos;cur&apos; and &apos;lgm&apos; (CHELSA):
## 
##   Karger Dirk Nikolaus, et al. &quot;Climatologies at high resolution for
##   the earth’s land surface areas&quot;. Scientific Data 4. (2017): 170122.
## 
## To see these entries in BibTeX format, use &apos;print(&amp;lt;citation&amp;gt;,
## bibtex=TRUE)&apos;, &apos;toBibtex(.)&apos;, or set
## &apos;options(citation.bibtex.max=999)&apos;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Last year another package,
&lt;a href=&quot;https://evolecolgroup.github.io/pastclim/&quot;&gt;pastclim&lt;/a&gt; was released
offering similar functionality to rpaleoclim. It includes two
datasets—&lt;a href=&quot;https://doi.org/10.1038/s41597-020-0552-1&quot;&gt;Beyer et al. 2020&lt;/a&gt;
and &lt;a href=&quot;https://doi.org/10.1038/s41597-021-01009-3&quot;&gt;Krapp et al. 2021&lt;/a&gt;—that
considerably extends the range of reconstructions, as well as providing
functions for processing new datasets in netCDF format. Unfortunately
the spatial resolution of these datasets is quite coarse compared to
PaleoClim (0.5°), so they’re not so useful for my purposes. So I’ll be
keeping an eye on pastclim, but for the time being at least I intend to
continue developing rpaleoclim. I would like to add support for
complementary datasets like
&lt;a href=&quot;https://doi.org/10.1038/s41597-020-00663-3&quot;&gt;StableClim&lt;/a&gt;. I’m also
unsure about whether to stick with terra for raster data or move to
&lt;a href=&quot;https://r-spatial.github.io/stars/&quot;&gt;stars&lt;/a&gt; – any input on this is very
welcome!&lt;/p&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I could well be wrong. It’s been a few years since I actually
looked into it. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Even better would be
&lt;a href=&quot;https://doi.org/10.1111/ecog.03031&quot;&gt;PaleoView&lt;/a&gt;, which offers
&lt;em&gt;decadal&lt;/em&gt; temporal resolution over the last 21,000 years.
Unfortunately, I could never get its Python-based frontend to run on
Linux. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Following the &lt;a href=&quot;https://github.com/benmarwick/rrtools&quot;&gt;rrtools&lt;/a&gt;
conventions, I use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;analyis/data/derived_data&lt;/code&gt;. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;</content><author><name>Joe Roe</name></author><category term="R" /><summary type="html">PaleoClim (Brown et al. 2018, Scientific Data) is a set of high-resolution paleoclimate surfaces covering the whole world. The data is derived from HadCM3, one of the major ‘general circulation models’ that is used to forecast climate change, turned backwards to ‘predict’ conditions for key climate periods in the past. This is then ‘downscaled’ to a high spatial resolution (up to 2.5 minutes) using modern climate data. A continuous set of reconstructions from the near-present to the Last Glacial Maximum (c. 0.3–21 ka, divided into 7 periods) are available, plus snapshots for the Last Interglacial (c. 130 ka), MIS19 (c. 787 ka), mid-Pliocene (c. 3.205 Ma and 3.3 Ma). For convenience, modern data from CHELSA (used for downscaling) is also bundled in the same format. PaleoClim is my go-to paleoclimate dataset for modelling prehistoric environments because as far as I know it has the best spatial resolution available for my main period of interest, the Late Pleistocene and Early Holocene.1 It’s also generally more accessible and easier to use than ‘raw’ GCM predictions and the choice of time slices is a good fit for prehistoric archaeology.2 Its API is very simple: from the PaleoClim website you can download archives for each period at a number of resolutions, with each archive including a set of GeoTIFFs representing the 19 bioclimatic variables widely used in ecological modelling. Alternatively, rpaleoclim is a simple R package that automates the process of downloading, reading and cropping PaleoClim data. It’s been availble on GitHub for a few years, but the latest release v1.0.0 adds support for terra-format rasters and also brings the package to CRAN. This means you can now install it easily with: install.packages(&quot;rpaleoclim&quot;) The way I usually use rpaleoclim is to get the reconstructions for a particular region for a set of periods. For example, Europe in the Late Holocene: library(&quot;rpaleoclim&quot;) library(&quot;terra&quot;) europe &amp;lt;- c(-15, 45, 30, 90) europe_lh &amp;lt;- paleoclim(&quot;lh&quot;, &quot;10m&quot;, region = europe) plot(europe_lh[[&quot;bio_12&quot;]], main = &quot;total annual precipitation&quot;) Further functionality is explained in the introduction to rpaleoclim vignette. One thing I’d highlight is the caching facility, which my default uses a temporary directory to store downloaded PaleoClim for the length of the R session. To keep things reproducible, I recommend using the cache_path argument to use a location within your project directory instead.3 That way, if the online versions of the PastClim data ever disappears or moves, the dataset you rely on will still be there – something I’ve been caught out by many, many times! Please note that rpaleoclim simply provides a convenient way to use the PaleoClim dataset in R; I don’t claim any credit for the actual data. If you use it in a publication, the PaleoClim authors request that you cite both their derived dataset (i.e. PaleoClim, Brown et al. 2018) and the original climatologies used. These references are included in the package: citation(&quot;rpaleoclim&quot;) ## Please cite both PaleoClim and original datasets used. ## ## PaleoClim and dataset &apos;mis19&apos;: ## ## Brown Jason L, et al. &quot;PaleoClim, high spatial resolution ## paleoclimate surfaces for global land areas&quot;. Scientific Data 5. ## (2018): 180254. ## ## Datasets &apos;lh&apos;, &apos;mh&apos;, &apos;eh&apos;, &apos;yds&apos;, &apos;ba&apos; and &apos;hs1&apos;: ## ## Fordham Damien A, et al. &quot;PaleoView: a tool for generating continuous ## climate projections spanning the last 21 000 years at regional and ## global scales&quot;. Ecography 40. (2017): 1348-1358. ## ## Dataset &apos;lig&apos;: ## ## Otto-Bliesner Bette L., et al. &quot;Simulating Arctic Climate Warmth and ## Icefield Retreat in the Last Interglaciation&quot;. Science 311. (2006): ## 1751-1753. ## ## Dataset &apos;mpwp&apos;: ## ## Hill Daniel J. &quot;The non-analogue nature of Pliocene temperature ## gradients &quot;. Earth and Planetary Science Letters 425. (2015): ## 232-241. ## ## Dataset &apos;m2&apos;: ## ## Dolan Aisling M, et al. &quot;Modelling the enigmatic Late Pliocene ## Glacial Event — Marine Isotope Stage M2&quot;. Global and Planetary Change ## 128. (2015): 47-60. ## ## Dataset &apos;cur&apos; and &apos;lgm&apos; (CHELSA): ## ## Karger Dirk Nikolaus, et al. &quot;Climatologies at high resolution for ## the earth’s land surface areas&quot;. Scientific Data 4. (2017): 170122. ## ## To see these entries in BibTeX format, use &apos;print(&amp;lt;citation&amp;gt;, ## bibtex=TRUE)&apos;, &apos;toBibtex(.)&apos;, or set ## &apos;options(citation.bibtex.max=999)&apos;. Last year another package, pastclim was released offering similar functionality to rpaleoclim. It includes two datasets—Beyer et al. 2020 and Krapp et al. 2021—that considerably extends the range of reconstructions, as well as providing functions for processing new datasets in netCDF format. Unfortunately the spatial resolution of these datasets is quite coarse compared to PaleoClim (0.5°), so they’re not so useful for my purposes. So I’ll be keeping an eye on pastclim, but for the time being at least I intend to continue developing rpaleoclim. I would like to add support for complementary datasets like StableClim. I’m also unsure about whether to stick with terra for raster data or move to stars – any input on this is very welcome! Notes I could well be wrong. It’s been a few years since I actually looked into it. &amp;#8617; Even better would be PaleoView, which offers decadal temporal resolution over the last 21,000 years. Unfortunately, I could never get its Python-based frontend to run on Linux. &amp;#8617; Following the rrtools conventions, I use analyis/data/derived_data. &amp;#8617;</summary></entry><entry><title type="html">What did the first farmers actually farm?</title><link href="https://joeroe.io/2023/04/12/founder-crops.html" rel="alternate" type="text/html" title="What did the first farmers actually farm?" /><published>2023-04-12T00:00:00+00:00</published><updated>2023-04-12T00:00:00+00:00</updated><id>https://joeroe.io/2023/04/12/founder-crops</id><content type="html" xml:base="https://joeroe.io/2023/04/12/founder-crops.html">&lt;p&gt;Eight so-called &lt;a href=&quot;https://en.wikipedia.org/wiki/Founder_crops&quot;&gt;founder crops&lt;/a&gt;—emmer wheat, einkorn wheat, barley, lentil, pea, chickpea, bitter vetch, and flax—have long been thought to have been the bedrock of Neolithic economies. 
But early prehistoric sites in Southwest Asia keep turning up more ‘exotic’ (to us) species, like the sedge tubers mixed into the &lt;a href=&quot;https://doi.org/10.1073/pnas.1801071115&quot;&gt;earliest known breads&lt;/a&gt; or the &lt;a href=&quot;https://doi.org/10.1016/j.jas.2020.105258&quot;&gt;new glume wheat&lt;/a&gt;, an important ancient crop that’s now extinct.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/images/founder_crops_wikipedia.png&quot; alt=&quot;Illustrations of the eight founder crops: emmer wheat (Triticum turgidum subsp. dicoccum), einkorn wheat (Triticum monococcum), barley (Hordeum vulgare), lentil (Lens culinaris), pea (Pisum sativum), chickpea (Cicer arietinum), bitter vetch (Vicia ervilia), and flax (Linum usitatissimum)&quot; class=&quot;align-center&quot; style=&quot;width: auto;&quot; /&gt;
    &lt;figcaption class=&quot;align-center&quot;&gt;Illustrations of the eight founder crops. Source: &lt;a href=&quot;https://en.wikipedia.org/wiki/Founder_crops&quot;&gt;Wikipedia&lt;/a&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Is it a coincidence that the founder crops are all species that remains staples today? 
In &lt;a href=&quot;/papers/2023/founder_crops&quot;&gt;our new paper&lt;/a&gt;, Amaia Arranz-Otaegui and I examine what plants actually turn up the most in the remains of the earliest agricultural societies. 
We gathered data on 144 million botanical remains from 135 prehistoric sites across Southwest Asia. 
Our analysis included the Neolithic (c. 9700 to 4500 BCE) and the periods immediately before and after –  10,000 years of plant exploitation.
 We found that Neolithic economies were much more diverse than previously thought, incorporating dozens of species of cereals, legumes, small-seeded grasses, brassicas, pseudocereals, sedges, flowering plants, trees, and shrubs. 
Free-threshing wheat, grass pea, faba bean, and ‘new’ glume wheat were especially widely cultivated.&lt;/p&gt;

&lt;figure class=&quot;half&quot;&gt;
    &lt;img src=&quot;/images/founder_crops_fig3.webp&quot; alt=&quot;Graphs showing the abundance of the eight most common grasses, pulses, wild plants, and fruits/nuts from 11.7 to 6.5 ka, showing several other species as prominently as the founder crops&quot; /&gt;
    &lt;img src=&quot;/images/founder_crops_fig4.webp&quot; alt=&quot;Graphs showing the ubiquity and abundance of the eight founder crops from 11.7 to 6.5 ka, showing that less than 50% of assemblages contained 4 or more founder crops throughout the period, and that apart from wheat the cross-assemblage abundance of founder crops remained relatively stable at around 30%&quot; /&gt;
    &lt;figcaption&gt;Cross-assemblage abundance of the most common plant taxa (left) and ubiquity and abundance of the founder crops (right) through the Neolithic. Source: &lt;a href=&quot;https://doi.org/10.5281/zenodo.5911218&quot;&gt;Arranz-Otaegui &amp;amp; Roe 2023&lt;/a&gt;, figs. 3 and 4.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;It turns out that the ‘founder crops’ weren’t particularly special at all: rarely cultivated for the first thousand years of the Neolithic, they were never ubiquitous, weren’t the first species to be domesticated, or the first or only to be spread outside of Southwest Asia. 
They did become more common over the course of the Neolithic but, remarkably, this can be explained almost entirely by a steadily increasing reliance on wheat as a staple crop. There’s a story waiting to be told there, I’m sure! 
For us, it no longer makes sense to talk about crop packages. 
Neolithic farmers cultivated, managed and otherwise experimented with a huge diversity of plants. 
Tracing the  &lt;em&gt;individual&lt;/em&gt; trajectories of these crops in the accumulated archaeobotanical remains reveals many fascinating new stories.&lt;/p&gt;

&lt;p&gt;For more details, see our &lt;a href=&quot;https://doi.org/10.1007/s00334-023-00917-1&quot;&gt;new open access paper&lt;/a&gt; in &lt;em&gt;Vegetation History &amp;amp; Archaeobotany&lt;/em&gt;. 
The data and R code supporting the analysis is available on &lt;a href=&quot;https://github.com/joeroe/SWAsiaNeolithicFounderCrops&quot;&gt;GitHub&lt;/a&gt; and &lt;a href=&quot;https://doi.org/10.5281/zenodo.5911218&quot;&gt;Zenodo&lt;/a&gt;.&lt;/p&gt;</content><author><name>Joe Roe</name></author><summary type="html">Eight so-called founder crops—emmer wheat, einkorn wheat, barley, lentil, pea, chickpea, bitter vetch, and flax—have long been thought to have been the bedrock of Neolithic economies. But early prehistoric sites in Southwest Asia keep turning up more ‘exotic’ (to us) species, like the sedge tubers mixed into the earliest known breads or the new glume wheat, an important ancient crop that’s now extinct. Illustrations of the eight founder crops. Source: Wikipedia. Is it a coincidence that the founder crops are all species that remains staples today? In our new paper, Amaia Arranz-Otaegui and I examine what plants actually turn up the most in the remains of the earliest agricultural societies. We gathered data on 144 million botanical remains from 135 prehistoric sites across Southwest Asia. Our analysis included the Neolithic (c. 9700 to 4500 BCE) and the periods immediately before and after – 10,000 years of plant exploitation. We found that Neolithic economies were much more diverse than previously thought, incorporating dozens of species of cereals, legumes, small-seeded grasses, brassicas, pseudocereals, sedges, flowering plants, trees, and shrubs. Free-threshing wheat, grass pea, faba bean, and ‘new’ glume wheat were especially widely cultivated. Cross-assemblage abundance of the most common plant taxa (left) and ubiquity and abundance of the founder crops (right) through the Neolithic. Source: Arranz-Otaegui &amp;amp; Roe 2023, figs. 3 and 4. It turns out that the ‘founder crops’ weren’t particularly special at all: rarely cultivated for the first thousand years of the Neolithic, they were never ubiquitous, weren’t the first species to be domesticated, or the first or only to be spread outside of Southwest Asia. They did become more common over the course of the Neolithic but, remarkably, this can be explained almost entirely by a steadily increasing reliance on wheat as a staple crop. There’s a story waiting to be told there, I’m sure! For us, it no longer makes sense to talk about crop packages. Neolithic farmers cultivated, managed and otherwise experimented with a huge diversity of plants. Tracing the individual trajectories of these crops in the accumulated archaeobotanical remains reveals many fascinating new stories. For more details, see our new open access paper in Vegetation History &amp;amp; Archaeobotany. The data and R code supporting the analysis is available on GitHub and Zenodo.</summary></entry><entry><title type="html">Graham Hancock is right about pseudoarchaeology on Wikipedia</title><link href="https://joeroe.io/2022/11/14/hancock-wikipedia.html" rel="alternate" type="text/html" title="Graham Hancock is right about pseudoarchaeology on Wikipedia" /><published>2022-11-14T00:00:00+00:00</published><updated>2022-11-14T00:00:00+00:00</updated><id>https://joeroe.io/2022/11/14/hancock-wikipedia</id><content type="html" xml:base="https://joeroe.io/2022/11/14/hancock-wikipedia.html">&lt;p&gt;In a recent interview on a popular podcast, pseudoarchaeologist &lt;a href=&quot;https://en.wikipedia.org/wiki/Graham_Hancock&quot;&gt;Graham Hancock&lt;/a&gt; had this to say about Wikipedia:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;[T]he point about Wikipedia is, that’s the first place, when somebody hears my name or hears about my ideas, first place they gonna go have a look is Wikipedia. And immediately they’re gonna get turned off.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And he’s absolutely right, of course. 
If you’re itching to debunk the racist garbage he spreads in Netflix’s new series &lt;em&gt;Ancient Apocalypse&lt;/em&gt;, consider editing Wikipedia. It really makes a difference.&lt;/p&gt;

&lt;p&gt;Hancock goes on to say that “you can’t edit my Wikipedia page, they’ve locked it, and it’s controlled by a group of academics”, whichis not true.
Anybody with an account older than four days can edit the article about him. And anyone can edit the articles about the archaeological sites he misrepresents, with or without an account.
Hancock fans regularly do try to distort and whitewash these pages, and the small group of volunteer who edit archaeology-related topics are struggling to stay on top of it. Help from academics and other people with subject-matter expertise is really, really appreciated.&lt;/p&gt;

&lt;p&gt;The article on &lt;a href=&quot;https://en.wikipedia.org/wiki/Gunung_Padang&quot;&gt;Gunung Padang&lt;/a&gt;, an Indonesian archaeological site featured in the first episode of the series, has almost no reliably-sourced information on the real archaeology there!
Two other sites Hancock tells tales about are &lt;a href=&quot;https://en.wikipedia.org/wiki/G%C4%A7ar_Dalam&quot;&gt;Għar Dalam&lt;/a&gt; in Malta and &lt;a href=&quot;https://en.wikipedia.org/wiki/Derinkuyu&quot;&gt;Derinkuyu&lt;/a&gt; in Turkey.
These articles are in an okay state, but so short that a viewer might think he’s right when he says archaeologists are ignoring them.
Or there’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Göbekli_TG%C3%B6bekli_Tepe&quot;&gt;Göbekli Tepe&lt;/a&gt;, a favourite of many pseudoarchaeologists (it “changes everything!”). 
There are featured articles on the site in the German and French Wikipedias, but the English one is underdeveloped. So translators could really help here.&lt;/p&gt;

&lt;p&gt;I think editing Wikipedia is the &lt;a href=&quot;/2022/01/12/wikipedia-pseudoarchaeology.html&quot;&gt;most impactful thing&lt;/a&gt; we can do for the public understanding of archaeology. But unfortunately, it is sometimes easier said than done. If prefer not to edit directly, writing responses and rebuttals that Wikipedians can cite is also a huge help!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Addendum (2022-11-17)&lt;/em&gt;: 
The chart below shows the daily pageviews of #Wikipedia’s article on Göbekli Tepe over the last year – spot the &lt;em&gt;Ancient Apocalypse&lt;/em&gt; effect! 
It’s even more stark for Gunung Padang, a site that was apparently all but unknown to a general audience before Graham Hancock featured it in the first episode of his pseudoarchaeology documentary.&lt;/p&gt;

&lt;figure class=&quot;half &quot;&gt;
  
    
      &lt;img src=&quot;/images/hancock_wikipedia_gt_views.png&quot; alt=&quot;Graph showing the daily page views of the Wikipedia article on Göbekli Tepe over the last year. There is a large spike in November, from less than 5,000 views per day to nearly 20,000 views per day.&quot; /&gt;
    
  
    
      &lt;img src=&quot;/images/hancock_wikipedia_gp_views.png&quot; alt=&quot;Graph showing the daily page views of the Wikipedia article on Gunang Padang over the last year. There is a huge spike in November, from less than 1,000 views per day to nearly 30,000 views per day.&quot; /&gt;
    
  
  
    &lt;figcaption&gt;Daily page views for the English Wikipedia articles on Göbekli Tepe (left) and Gunang Padang (right).
&lt;/figcaption&gt;
  
&lt;/figure&gt;

&lt;p&gt;&lt;small&gt;Adapted from the &lt;a href=&quot;https://twitter.com/joeroe90/status/1592092070554238977&quot;&gt;original Twitter thread&lt;/a&gt; on 2023-04-13.&lt;/small&gt;&lt;/p&gt;</content><author><name>Joe Roe</name></author><category term="Wikipedia" /><summary type="html">In a recent interview on a popular podcast, pseudoarchaeologist Graham Hancock had this to say about Wikipedia: [T]he point about Wikipedia is, that’s the first place, when somebody hears my name or hears about my ideas, first place they gonna go have a look is Wikipedia. And immediately they’re gonna get turned off. And he’s absolutely right, of course. If you’re itching to debunk the racist garbage he spreads in Netflix’s new series Ancient Apocalypse, consider editing Wikipedia. It really makes a difference. Hancock goes on to say that “you can’t edit my Wikipedia page, they’ve locked it, and it’s controlled by a group of academics”, whichis not true. Anybody with an account older than four days can edit the article about him. And anyone can edit the articles about the archaeological sites he misrepresents, with or without an account. Hancock fans regularly do try to distort and whitewash these pages, and the small group of volunteer who edit archaeology-related topics are struggling to stay on top of it. Help from academics and other people with subject-matter expertise is really, really appreciated. The article on Gunung Padang, an Indonesian archaeological site featured in the first episode of the series, has almost no reliably-sourced information on the real archaeology there! Two other sites Hancock tells tales about are Għar Dalam in Malta and Derinkuyu in Turkey. These articles are in an okay state, but so short that a viewer might think he’s right when he says archaeologists are ignoring them. Or there’s Göbekli Tepe, a favourite of many pseudoarchaeologists (it “changes everything!”). There are featured articles on the site in the German and French Wikipedias, but the English one is underdeveloped. So translators could really help here. I think editing Wikipedia is the most impactful thing we can do for the public understanding of archaeology. But unfortunately, it is sometimes easier said than done. If prefer not to edit directly, writing responses and rebuttals that Wikipedians can cite is also a huge help! Addendum (2022-11-17): The chart below shows the daily pageviews of #Wikipedia’s article on Göbekli Tepe over the last year – spot the Ancient Apocalypse effect! It’s even more stark for Gunung Padang, a site that was apparently all but unknown to a general audience before Graham Hancock featured it in the first episode of his pseudoarchaeology documentary. Daily page views for the English Wikipedia articles on Göbekli Tepe (left) and Gunang Padang (right). Adapted from the original Twitter thread on 2023-04-13.</summary></entry><entry><title type="html">Wikipedia is the best way to counter pseudoarchaeology</title><link href="https://joeroe.io/2022/01/12/wikipedia-pseudoarchaeology.html" rel="alternate" type="text/html" title="Wikipedia is the best way to counter pseudoarchaeology" /><published>2022-01-12T00:00:00+00:00</published><updated>2022-01-12T00:00:00+00:00</updated><id>https://joeroe.io/2022/01/12/wikipedia-pseudoarchaeology</id><content type="html" xml:base="https://joeroe.io/2022/01/12/wikipedia-pseudoarchaeology.html">&lt;p&gt;I was glad to see a brief nod to @Wikipedia in a recent &lt;em&gt;Input&lt;/em&gt; article on &lt;a href=&quot;https://www.inverse.com/input/culture/alternative-historians-youtube-who-built-pyramids-not-aliens&quot;&gt;pseudoarchaeology in social media&lt;/a&gt;.
Its importance in countering pseudoarchaeology and disinformation about the past is often neglected.&lt;/p&gt;

&lt;p&gt;Ask yourself: what do you do when you encounter a new idea and want to check it or read about it further? 
For most people, the answer is “look it up on Wikipedia”. 
Editing it is one of the most effective public engagement tools out there, and has almost no barrier to entry.
Pseudoarchaeologists know this very well. They relentlessly try to add their newest theories to articles, rewrite biographies of advocates to remove criticism and make them sound more legitimate, and ‘edit war’ with regular editors to keep their changes.&lt;/p&gt;

&lt;p&gt;On the other side you have a small group of volunteer editors, almost all &lt;em&gt;not&lt;/em&gt; professional archaeologists, fighting to keep articles in line with mainstream science. It can seem like a thankless task, but it works.
To take a petty-but-satisfying example from the &lt;em&gt;Input&lt;/em&gt; article: “When Graham Hancock’s Wikipedia page was edited in 2019 to include references to him engaging in pseudoarchaeology, it set off a stream of furious commentary […] calling it ‘attempted character assassination.’”&lt;/p&gt;

&lt;p&gt;But Wikipedia editors rely on academics to give them the ammunition for this battle: “editors look to the consensus of professional archaeologists in deciding whether to label something ‘pseudoarchaeology’ or list it as a credible theory”.
verything on Wikipedia must be cited to ‘reliable sources’ (e.g. journal articles). If there are no critical reliable sources, then its editors cannot fight pseudoarchaeology effectively. And they cannot create those sources themselves: that’s the job of archaeologists.
This is why the widespread belief that “giving alternative theories professional attention only serves to legitimize them” is so frustrating. As an archaeologist, &lt;em&gt;you&lt;/em&gt; might know that the latest ‘alternative theory’ is rubbish. But others probably can’t spot that without help.
Writing rebuttals and critiques to pseudoarchaeology might seem like a waste of time, but if archaeologists don’t use make their knowledge available to Wikipedians, there is no way that Wikipedians can make it available to the public.&lt;/p&gt;

&lt;p&gt;As an archaeologist, you don’t need a big social media following to effectively combat pseudoarchaeology. Just use the tools that are available to you—your privilaged ability to produce ‘reliable sources’ in your area of expertise—and Wikipedia editors will do the rest.&lt;/p&gt;

&lt;p&gt;&lt;small&gt;Adapted from the &lt;a href=&quot;https://twitter.com/joeroe90/status/1481313710564122631&quot;&gt;original Twitter thread&lt;/a&gt; on 2023-04-13.&lt;/small&gt;&lt;/p&gt;</content><author><name>Joe Roe</name></author><category term="Wikipedia" /><summary type="html">I was glad to see a brief nod to @Wikipedia in a recent Input article on pseudoarchaeology in social media. Its importance in countering pseudoarchaeology and disinformation about the past is often neglected. Ask yourself: what do you do when you encounter a new idea and want to check it or read about it further? For most people, the answer is “look it up on Wikipedia”. Editing it is one of the most effective public engagement tools out there, and has almost no barrier to entry. Pseudoarchaeologists know this very well. They relentlessly try to add their newest theories to articles, rewrite biographies of advocates to remove criticism and make them sound more legitimate, and ‘edit war’ with regular editors to keep their changes. On the other side you have a small group of volunteer editors, almost all not professional archaeologists, fighting to keep articles in line with mainstream science. It can seem like a thankless task, but it works. To take a petty-but-satisfying example from the Input article: “When Graham Hancock’s Wikipedia page was edited in 2019 to include references to him engaging in pseudoarchaeology, it set off a stream of furious commentary […] calling it ‘attempted character assassination.’” But Wikipedia editors rely on academics to give them the ammunition for this battle: “editors look to the consensus of professional archaeologists in deciding whether to label something ‘pseudoarchaeology’ or list it as a credible theory”. verything on Wikipedia must be cited to ‘reliable sources’ (e.g. journal articles). If there are no critical reliable sources, then its editors cannot fight pseudoarchaeology effectively. And they cannot create those sources themselves: that’s the job of archaeologists. This is why the widespread belief that “giving alternative theories professional attention only serves to legitimize them” is so frustrating. As an archaeologist, you might know that the latest ‘alternative theory’ is rubbish. But others probably can’t spot that without help. Writing rebuttals and critiques to pseudoarchaeology might seem like a waste of time, but if archaeologists don’t use make their knowledge available to Wikipedians, there is no way that Wikipedians can make it available to the public. As an archaeologist, you don’t need a big social media following to effectively combat pseudoarchaeology. Just use the tools that are available to you—your privilaged ability to produce ‘reliable sources’ in your area of expertise—and Wikipedia editors will do the rest. Adapted from the original Twitter thread on 2023-04-13.</summary></entry></feed>