<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Social Dynamics in the Ancient Mediterranean</title>
    <description>Research group in the social complexity and dynamics of the Ancient Mediterranean, based at Aarhus University
</description>
    <link>http://sdam-au.github.io/sdam-au/</link>
    <atom:link href="http://sdam-au.github.io/sdam-au/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Wed, 14 Apr 2021 11:49:26 +0000</pubDate>
    <lastBuildDate>Wed, 14 Apr 2021 11:49:26 +0000</lastBuildDate>
    <generator>Jekyll v3.9.0</generator>
    
      <item>
        <title>sddk python package</title>
        <description>&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;Soon after we started our SDAM project, we began to discuss what platform to choose as a  data storage for our collaborative research projects. To begin with, we considered whether our needs could be fully met by a combination of Google Drive and GitHub. But it revealed that not, at least since Github is not suitable for working with large files and Google Drive is not always easily accessible programmatically and everything there tends to be too much fluid to consider it an appropriate data storage for research purposes.&lt;/p&gt;

&lt;p&gt;Therefore, as researchers based at a Danish research institution, we were really excited by discovering &lt;a href=&quot;https://www.deic.dk/en/data_deic_dk&quot;&gt;sciencedata.dk&lt;/a&gt;, a service for storing, sharing, synchronizing and searching research data managed by &lt;a href=&quot;https://www.deic.dk/en&quot;&gt;DeiC&lt;/a&gt;.  Reading the documentation, we realized that  sciencedata relies on WebDAV API&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;, what means that it might be also  accessed programmatically via any service supporting &lt;a href=&quot;https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_message&quot;&gt;HTTP protocol&lt;/a&gt;. Within our project, we work with our data mainly within R and Python,  both of which support the HTTP protocol, so it was a way to go.&lt;/p&gt;

&lt;p&gt;Realizing this, I was interested in finding the smoothiest way for exporting any data from my python environment directly to &lt;a href=&quot;https://www.deic.dk/en/data_deic_dk&quot;&gt;sciencedata.dk&lt;/a&gt; to be instantly accessible for reuse by me or anybody else within our project. With this task at hands, I started to develop the &lt;a href=&quot;https://github.com/sdam-au/sddk_py&quot;&gt;sddk&lt;/a&gt; python package. To explain my motivation, let me to give you a couple of examples of how I work.&lt;/p&gt;

&lt;h2 id=&quot;workflow&quot;&gt;Workflow&lt;/h2&gt;

&lt;p&gt;For instance, in one of our empirical research projects, we have developed a series of Jupyter Notebooks,  which we used to extract, transform and clean a dataset of +80,000 Roman inscriptions. I usually run these notebooks on &lt;a href=&quot;https://colab.research.google.com/github/tensorflow/examples/blob/master/courses/udacity_intro_to_tensorflow_for_deep_learning/l01c01_introduction_to_colab_and_python.ipynb&quot;&gt;Google Colab&lt;/a&gt; online platform and its cloud servers, what means that I can easily access them regardless where I physically sit and what machine I actually use (we also share these notebooks openly on Github in &lt;a href=&quot;https://github.com/sdam-au/edh_workflow&quot;&gt;this repo&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Within Python, I usually work with my data in a form of pandas DataFrame object, which is officially defined as a “two-dimensional size-mutable, potentially heterogeneous tabular data structure with labeled axes (rows and columns). “ (see the docs &lt;a href=&quot;https://pandas.pydata.org/pandas-docs/version/0.23.1/generated/pandas.DataFrame.html&quot;&gt;here&lt;/a&gt;). Using this format, we have a table with more than 80,000 rows and 40 columns which might be easily used for any filtering, grouping or stasticial analysis.&lt;/p&gt;

&lt;p&gt;To use this dataset in more than one Jupyter notebook and by other users as well, it has to be exported into a file.  I usually export such data into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.json&lt;/code&gt; files, since they are easily readible by other programming languages, like R.&lt;/p&gt;

&lt;p&gt;In the example case of Roman inscriptions such a data file has ca 150 MB, but in other projects we do (like &lt;a href=&quot;https://github.com/sdam-au/AGT_ETL&quot;&gt;AGT&lt;/a&gt;) it might have even more than 1 GB.  Since I work on cloud, it does not make too much sense for me to download these files into my machine, have them saved somewhere locally and then to think how to share such files with my collegues. Instead of that, I send them instatly into a team shared folder on sciencedata.dk, where anyone from our team can find it and reuse it following her or his needs. Thus, the data just go from one server (Google servers running Colab) to another (sciencedata.dk), without even touching my personal computer.&lt;/p&gt;

&lt;p&gt;Generally speaking, sddk package is nothing more than a series of functions helping us to make this process as much easy as possible, using just one easily memorable piece of code to send the data there (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sddk.write_file()&lt;/code&gt; function) and an analogical code to read them back (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sddk.read_file()&lt;/code&gt; function). It deserves to be describe in more detail.&lt;/p&gt;

&lt;h2 id=&quot;sddk-package-usage-demonstration&quot;&gt;Sddk package usage demonstration&lt;/h2&gt;

&lt;p&gt;To make these functions working, you first need to install &amp;amp; import the package and to specify your sciencedata.dk credentials and the desired target folder for your subsequent requests using  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sddk.configure()&lt;/code&gt; function. This folder might be either your personal, or a shared one owned by some of your colleagues, as in the example below. For a shared folder called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;team_folder&quot;&lt;/code&gt;, owned by user with username &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;team_folder_owner@username.inst&quot;&lt;/code&gt;, you would run this:&lt;/p&gt;

&lt;div class=&quot;language-python 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;err&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pip&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sddk&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# install the package
&lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;sddk&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# import the packg
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;conf&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sddk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;configure&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;team_folder&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;team_folder_owner@username.inst&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sddk.configure()&lt;/code&gt; is designed in a way that any project member can use exactly the same piece of code accessing the shared folder, regardless whether she or he is owner or ordinary user of the folder. Notice  that goes against the internal structure of  sciencedata.dk, which uses a different syntax for folders you are sharing with others (“sharingout” keyword in the HTTP request path) and folders which are shared with you by others (“sharingin” keyword in the HTTP request path).  These things are treated internally in the package, since we consider more  practical to have the exactly same command for both cases (the credentials are entered interatively, so the code for both cases can remain the the same) .&lt;/p&gt;

&lt;p&gt;After successful configuration, you can write or read any number of files like in the above.&lt;/p&gt;

&lt;div class=&quot;language-python 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;# define the object:
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dataframe_object&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DataFrame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;a1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;b1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;c1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;a2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;b2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;c2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)],&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;columns&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;c&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; 
&lt;span class=&quot;c1&quot;&gt;# send the object to file:
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sddk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;write_file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;df_file.json&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dataframe_object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;conf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Later on, any other user with an access to the same folder can read the file back to python with:&lt;/p&gt;

&lt;div class=&quot;language-python 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;dataframe_object&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sddk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;read_file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;df_file.json&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;df&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;conf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The package enables you export some other types of Python objects into a couple of different formats. For instance, you can use jsons for lists or dictionaries. You can also export dataframes into csv files or feather files. You can also export strings into txt files or images into ong files. The syntax for all these cases is exactly the same as in the command above, with two minor differences:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sddk.write_file()&lt;/code&gt; you have to take care for the filename extension,&lt;/li&gt;
  &lt;li&gt;in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sddk.read_file()&lt;/code&gt; you have to always specify the python internal object you want to produce (“df”, “str”, “list”, and “dict” are currently supported python objects).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more examples, see the &lt;a href=&quot;https://github.com/sdam-au/sddk_py&quot;&gt;documentation&lt;/a&gt; or watch a &lt;a href=&quot;https://www.youtube.com/watch?v=Bfsj4uN5DMM&amp;amp;t=31s&quot;&gt;video demonstration&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;sciencedatadk-and-r&quot;&gt;Sciencedata.dk and R&lt;/h2&gt;

&lt;p&gt;As I have already mentioned, next to Python, our project is also using R. While we so far do not have a full-fledged R package, we already have a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;request()&lt;/code&gt; function for reading files from sciencedata and writing them back there. (see its documentation &lt;a href=&quot;https://mplex.github.io/cedhar/Sciencedata_dk.html#method-put&quot;&gt;here&lt;/a&gt;). In combination with some other commands, the request function might be used to read a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.json&lt;/code&gt; (exported from pandas dataframe) into R tidiverse &lt;strong&gt;tibble&lt;/strong&gt; object and to export such an object back to sciencedata as a json file interpretable by Python as pandas dataframe (see the &lt;a href=&quot;https://github.com/sdam-au/R_code/blob/master/EDH_to_tibble.R&quot;&gt;R example code&lt;/a&gt;). The circle is complete.&lt;/p&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;“WebDAV (&lt;a href=&quot;https://tools.ietf.org/html/rfc4918&quot;&gt;RFC 4918&lt;/a&gt;) is an extension to &lt;a href=&quot;https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol&quot;&gt;HTTP&lt;/a&gt;, the protocol that web-browsers and webservers use to communicate with each other. The WebDAV protocol enables a webserver to behave like a fileserver too, supporting collaborative authoring of web content. WebDAV extends the set of standard HTTP methods and headers to provide the ability to create a file or folder, edit a file in place, copy or move or delete a file, etc. As an extension to HTTP, WebDAV normally uses port 80 for unencrypted access and port 443 (HTTPS) for secure access.” &lt;a href=&quot;https://www.comparitech.com/net-admin/webdav/&quot;&gt;WebDAV: What it is, where it turns up, and its alternatives&lt;/a&gt;. &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;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 15 May 2020 15:00:00 +0000</pubDate>
        <link>http://sdam-au.github.io/sdam-au/digital-pondering/2020/05/15/sddk_package.html</link>
        <guid isPermaLink="true">http://sdam-au.github.io/sdam-au/digital-pondering/2020/05/15/sddk_package.html</guid>
        
        
        <category>Digital-pondering</category>
        
      </item>
    
      <item>
        <title>Testing our shared infrastructure</title>
        <description>&lt;h3 id=&quot;post-lockdown-lessons-about-shared-collaboration-infrastructure&quot;&gt;Post-lockdown Lessons About Shared Collaboration Infrastructure&lt;/h3&gt;

&lt;p&gt;The lockdown has put tremendous pressure on most collaborative projects by pushing them to go remote. In our case too, it tested our ability to use shared collaboration infrastructures, communication channels and management skills under conditions for which these were in fact intended: to facilitate uninterrupted remote and asynchronous work.
Some projects struggled more because the infrastructure they were locked into was not designed for collaboration - as Mine Cetinkaya-Rundel says on 25 March 2020 on twitter: “If this pandemic doesn’t make people completely give up on Microsoft’s collaboration tools, I don’t know what will.”&lt;/p&gt;

&lt;p&gt;We selected our infrastructure with eye to collaboration in the first place! But just like you don’t know whether you have a good backup until you’ve had to restore from it, nothing tests your infrastructure for asynchronous remote work better than a lockdown.&lt;/p&gt;

&lt;p&gt;During covid19 lockdown in Denmark (15 March - 15 April), the lack of childcare for half the team meant inability to focus on extended computational or other work tasks and rendered face to face time difficult to arrange before 9pm. While other team members were theoretically available to work from home, lack of home office made extended work in uncomfortable positions hazardous to future health.  Voila, ideal testing conditions were born.&lt;/p&gt;

&lt;p&gt;Before we even knew of covid, we set up the following infrastructure to facilitate our collaboration on flexible schedules and while travelling. We had months to get used to it before lockdown imposed it mercilessly and split us by distance (V. locked in Czech republic), time (A and A working under limited conditions due childcare) and other issues (P. had a festering leg injury which prevented her movement).&lt;/p&gt;

&lt;p&gt;The project infrastructure included :&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Business G Suite for collaborative project administration, communication, cowriting of research documentation etc. (1 month) after previously using Vojtech’s G Suite for previous 6 months.&lt;/li&gt;
  &lt;li&gt;sdam-au github organisation containing repos with code related to projects;&lt;/li&gt;
  &lt;li&gt;SDAM shared group on sciencedata.dk for collaborative online storage that is shareable with non-AU stakeholders yet complies with GDPR and safe data storage and is computationally accessible&lt;/li&gt;
  &lt;li&gt;sdam.au.dk website  (since project start/ 7 months)&lt;/li&gt;
  &lt;li&gt;JIRA for task management (launched shortly after project start/ 6 months, but not used seriously until in February.)&lt;/li&gt;
  &lt;li&gt;Slack channel for quick and ephemeral communication (since project start/ 7 months)&lt;/li&gt;
  &lt;li&gt;Outlook email account for official business with faculty etc. (since project start/ 7 months),&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Team members expressed familiarity with most of these tools or the ability to acquire it independently. Some specific tools, such as GoogleForms or JIRA or interactions with sciencedata.dk, were less well-known and different teammembers developed tools and documentation or organized instructional sessions whenever the team needed to upskill.&lt;/p&gt;

&lt;p&gt;In addition to the infrastructure, we had also discussed the priorities for offline/remote or asynchronous work being:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Monitoring of project channels to stay in loop and be aware of fires&lt;/li&gt;
  &lt;li&gt;Prioritizing to help others&lt;/li&gt;
  &lt;li&gt;Staying on track with tasks in Jira (mapped against project targets)&lt;/li&gt;
  &lt;li&gt;Documenting own work in shared project spaces online so as to keep it as FAIR as possible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While infrastructure kept functioning, covid revealed other deficiencies in our project coordination, which I now want to write down antidotes to:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Maintain presence in your project communication channels: while working at computer was not feasible (e.g. A and A), Adela installed Slack on her phone, allowing her to respond to queries while in the playground, while Antonio could not. Phone apps can be useful! &lt;strong&gt;if you know how to switch the notifications off.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Manage expectations: if you cannot be in on those channels, it is better and perfectly legitimate during times of duress (such as covid) to be straightforward and say, ‘I am completely off communication channels’ or ‘I won’t be online for the next two weeks’ rather than maintain a vague semblance of work and then have the team be wondering where you’ve disappeared to.&lt;/li&gt;
  &lt;li&gt;Manage your tasks: given new circumstances, check about work priorities every time you (virtually) meet, and before you plunge into something new.&lt;/li&gt;
  &lt;li&gt;Use of project infrastructure properly and document your work to be reusable by others when you are unavailable: granted, this takes some thinking and testing ahead of time but hey, our project happens to be precisely about that ;).&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Mon, 20 Apr 2020 12:00:00 +0000</pubDate>
        <link>http://sdam-au.github.io/sdam-au/digital-pondering/2020/04/20/Testing_Infrastructure.html</link>
        <guid isPermaLink="true">http://sdam-au.github.io/sdam-au/digital-pondering/2020/04/20/Testing_Infrastructure.html</guid>
        
        
        <category>Digital-pondering</category>
        
      </item>
    
      <item>
        <title>First peak at multigraph</title>
        <description>&lt;h3 id=&quot;climbing-the-mountain&quot;&gt;Climbing the Mountain&lt;/h3&gt;

&lt;p&gt;Some while ago, I saw &lt;a href=&quot;https://devhumor.com/media/trying-to-learn-any-programming-language-100&quot;&gt;this comic&lt;/a&gt; about the never-ending story of learning programming. The never-ending story applies to any collaborative discovery endeavour. At SDAM, we have been agonizing over what can we actually do with all the large data, once we aggregated it. It’s a question that’s been giving us anxiety, because until you harvest, streamline and wrangle your data, you cannot even start answering it. Just like a potter who collects clay from an unknown source without knowing whether it will be good for anything. You knead and levigate the cold, hard mass and only as it warms up and softens with your effort, you may gauge its qualities.  Is it plastic and malleable enough to make a small sculpture with fine detail or coarse and bulky to make a big chunky dinosaur?  Playing with large datasets is similar. You spend hours poking and probing its features in order to learn what it can be used for and how much effort it’ll likely take.  &lt;br /&gt;
So far we have been following Vojtech’s python scripts in slicing and subsetting the EDH dataset and discovering what problems we need to overcome. The choice is wide; there are the incomparable diversity of chronological intervals ascribed to individual inscriptions, that we will need to refine. While working on these preliminaries, we have all been anxious about what will we do next, once we figure out a way to make chronology more tractable?
Who will think of the right question and who will make it answerable with our toolkit of python and R?
We saw a little bit of the possible world today after running through as of yet imperfect dataset with the &lt;em&gt;multigraph&lt;/em&gt; package in R. We used a similarity function to assess the correspondence among inscription attributes and create a network of these similarities. The revelation to me, a newbie to networks, was that with multigraph we can choose which columns we wish to pass to R for assessment, and then display the result either as a collated network with links relating to different attributes, or filter out individual network components (for each attribute we are evaluating) and assess them in their own right.  Once we implement a good (transparent and quantifiable) measure of temporal intervals and a bit of control over coordinates, we are a few steps away from analysing the diffusion of epigraphic habits over time.
Maybe this sounds simple, but I learnt something today.&lt;/p&gt;
</description>
        <pubDate>Tue, 10 Mar 2020 12:00:00 +0000</pubDate>
        <link>http://sdam-au.github.io/sdam-au/digital-pondering/2020/03/10/Climbing-the-Mountain.html</link>
        <guid isPermaLink="true">http://sdam-au.github.io/sdam-au/digital-pondering/2020/03/10/Climbing-the-Mountain.html</guid>
        
        
        <category>Digital-pondering</category>
        
      </item>
    
      <item>
        <title>Lemmatization and POStagging of Ancient Greek Texts</title>
        <description>&lt;h3 id=&quot;introduction&quot;&gt;Introduction&lt;/h3&gt;

&lt;p&gt;In the second half of January, while I was working with Vojtěch Linka on a quantitative text analysis of the concept of pain in &lt;em&gt;Corpus Aristotelicum&lt;/em&gt; and &lt;em&gt;Corpus Hippocraticum&lt;/em&gt;, we realized that the data which I regularly use  for this type of tasks  (i.e. &lt;a href=&quot;https://github.com/gcelano/LemmatizedAncientGreekXML&quot;&gt;Lemmatized Ancient Greek&lt;/a&gt; dataset, LAG) are substantially incomplete. We noticed this fact once we were working with Aristotelian texts (tlg0086), as we realized that the dataset completely misses such works as &lt;em&gt;Ethica Nicomachea&lt;/em&gt; and &lt;em&gt;Ethica Eudemia&lt;/em&gt; - works really crucial for our task at hands!&lt;/p&gt;

&lt;p&gt;This was quite surprising finding, since from the LAG documentation I had an impression that it combines  &lt;strong&gt;&lt;em&gt;all&lt;/em&gt;&lt;/strong&gt;  Greek texts currently  available in the Perseus Digital Library with all texts from the First1KGreek project. However, this is not the case. First1KGreek explicitly focuses  upon “texts that do not already exist in the Perseus Digital Library” (see &lt;a href=&quot;[https://opengreekandlatin.github.io/First1KGreek/](https://opengreekandlatin.github.io/First1KGreek/)&quot;&gt;here&lt;/a&gt;). But it appears that in the case of Aristotle it includes only works from the First1KGreek corpus, while there are some other Aristotle’s works in the PerseusDL not included in First1KGreek .&lt;/p&gt;

&lt;h3 id=&quot;compiling-a-new-dataset-of-all-publicly-available-ancient-greek-texts&quot;&gt;Compiling a new dataset of all publicly available ancient Greek texts&lt;/h3&gt;

&lt;p&gt;This led me to an urgent need to develop our own comprehensive dataset of ancient Greek text combining PerseusDL and First1KGreek. Just to combine these two dataset was quite straightforward. I developed my own code being able to parse xml files for these (or any similar) datasets directly from GitHub (i.e. without locally cleaning/downloaded the repo).&lt;/p&gt;

&lt;p&gt;My code works like this: For a chosen GitHub repository, it firstly recursively extracts paths for all files it contains (by browsing a repo folder by folder, using a loop over a PyGitHub package object). Subsequently, it uses the returned list of paths to parse all xml files.&lt;/p&gt;

&lt;p&gt;### Lemmatization and POStagging using CLTK&lt;/p&gt;

&lt;p&gt;But what I really need is not only a dataset of all machine-readible texts, but a lemmatized and POStagged dataset, organized in a similar way as LAG (i.e. for each wordform containing its lemmatization and part of speech parsing).&lt;/p&gt;

&lt;p&gt;To proceed with this task, I firstly turned to &lt;a href=&quot;http://cltk.org&quot;&gt;CLTK&lt;/a&gt; and its Greek module, since I knew that it includes a number of useful functions for both lemmatization and POStagging. However, after some testing, I realized that the results are unsufficient.&lt;/p&gt;

&lt;p&gt;For instance, once we apply the cltk function &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lemmatizer.lemmatize()&lt;/code&gt; upon all words in Aristotle’s works and calculate word frequencies, we can identify there is more than 5,000 instances of the term ζεύς.  This is in striking contrast with TLG, which reports only 48 instances of the same lemma for Aristle. This discrepancy is  caused   by misidentification of the term διά , which in most instances  means simply “through”. In this particular case, the problem might be solved by making a stopwords filtering before the lemmatization, but this is not an universal solution.&lt;/p&gt;

&lt;p&gt;Using cltk for POStagging revealed even more complicated. After doing some preliminary cleaning of all Aristotle work, the cltk greek tagger was still able to parse only 56% of words. Perhaps I could obtain a bit better results by some parametrization of these functions, but I guess the improvement would not be substantial. But first of all, it would require to make a much more detailed inspection of the  code behind these cltk functions, which is much more granular and complex than I am used to work with.&lt;/p&gt;

&lt;h3 id=&quot;lemmatization-and-postagging-with-morpheus&quot;&gt;Lemmatization and POStagging with Morpheus&lt;/h3&gt;

&lt;p&gt;With these unsufficient results, I decided to develop my own functions for lemmatization, postagging and automatic translation. The main tool for this was the Morpheus Dictionary, available as a xml file for instance from &lt;a href=&quot;https://github.com/gcelano/LemmatizedAncientGreekXML/blob/master/Morpheus/MorpheusUnicode.xml.zip&quot;&gt;here&lt;/a&gt;. This file contains 958,476 unique tokens. An entry for each token has the following structure:&lt;/p&gt;

&lt;div class=&quot;language-xml 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;nt&quot;&gt;&amp;lt;t&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;i&amp;gt;&lt;/span&gt;1631&lt;span class=&quot;nt&quot;&gt;&amp;lt;/i&amp;gt;&lt;/span&gt; 			# word-form-id
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;f&amp;gt;&lt;/span&gt;ἀγακλέᾰς&lt;span class=&quot;nt&quot;&gt;&amp;lt;/f&amp;gt;&lt;/span&gt;		# word-form
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;b&amp;gt;&lt;/span&gt;αγακλεᾰς&lt;span class=&quot;nt&quot;&gt;&amp;lt;/b&amp;gt;&lt;/span&gt;		# word-form-without-diacritics
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;l&amp;gt;&lt;/span&gt;ἀγακλεής&lt;span class=&quot;nt&quot;&gt;&amp;lt;/l&amp;gt;&lt;/span&gt;		# lemma
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;e&amp;gt;&lt;/span&gt;αγακλεης&lt;span class=&quot;nt&quot;&gt;&amp;lt;/e&amp;gt;&lt;/span&gt;		# lemma-without-diacritics
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;a-p---ma-&lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;	# morphological-analysis
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;d&amp;gt;&lt;/span&gt;76&lt;span class=&quot;nt&quot;&gt;&amp;lt;/d&amp;gt;&lt;/span&gt;					# lemma-id
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;s&amp;gt;&lt;/span&gt;very glorious, famous&lt;span class=&quot;nt&quot;&gt;&amp;lt;/s&amp;gt;&lt;/span&gt; 	# translation
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;a&amp;gt;&lt;/span&gt;doric aeolic&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; 					# dialect 
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/t&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I parsed this structure into two python dictionaries:&lt;/p&gt;

&lt;p&gt;The first dictionary (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;morpheus_dict&lt;/code&gt;) has as its keys all unique word forms, both with and without diacritics. It has 706,506 key-value pairs. For each key, a value is a list of all possible tokens. In most cases, there is just one element in the list. Thus:&lt;/p&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;morpheus_dict[&quot;λόγος&quot;]
&amp;gt;&amp;gt;&amp;gt; [{'a': None,
  'b': 'λογος',
  'd': '19869',
  'e': 'λογος',
  'f': 'λόγος',
  'i': '542404',
  'l': 'λόγος',
  'p': 'n-s---mn-',
  's': 'the word'}]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This simple navigation is then used in a series of functions drawing upon it.&lt;/p&gt;

&lt;p&gt;The second dictionary (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;morpheus_by_lemma&lt;/code&gt;) is much more simple, since it contains only information associated with each individual lemma (and not every wordform). It is especially useful for getting a simple translation of a lemmatized word:&lt;/p&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;morpheus_by_lemma[&quot;λόγος&quot;]
&amp;gt;&amp;gt;&amp;gt; [{'a': None, 'd': 19869, 'l': 'λόγος', 's': 'the word'}]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;functions-for-lemmatization-postagging-and-translation-of-ancient-greek&quot;&gt;Functions for lemmatization, POStagging and translation of ancient Greek&lt;/h3&gt;

&lt;p&gt;On the top is the function &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get_lemmatized_sentences(string, all_lemmata=False, filter_by_postag=None, involve_unknown=False)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;As an input, it receives a raw Greek text of any kind and extent.  Such input is  processed by a series of subsequent functions embedded within each other:&lt;/p&gt;

&lt;p&gt;(1) &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get_sentences()&lt;/code&gt; splits the string into sentences by common sentence separators.&lt;/p&gt;

&lt;p&gt;(2) &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lemmatize_string(sentence)&lt;/code&gt;  first calls &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tokenize_string()&lt;/code&gt;, which makes a basic cleaning and stopwords filtering for the sentence, and returns a list of words. Subsequently, each word from the tokenized sentence is sent either to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;return_first_lemma()&lt;/code&gt; or to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;return_all_unique_lemmata()&lt;/code&gt;, on the basis of the value of the parameter &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;all_lemmata=&lt;/code&gt; (set to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;False&lt;/code&gt; by default).&lt;/p&gt;

&lt;p&gt;(4) &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;return_all_unique_lemmata()&lt;/code&gt;goes to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;morpheus_dict&lt;/code&gt; values and returns all unique lemmata.&lt;/p&gt;

&lt;p&gt;(5) Parameter &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;filter_by_postag=&lt;/code&gt; (default &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;None&lt;/code&gt;) enables to sub-select  chosen word types from the tokens, on the basis of first character in the tag “p” . Thus, to choose only  nouns, adjectives, and verbs, you can set  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;filter_by_postag=[&quot;n&quot;, &quot;a&quot;, &quot;v&quot;].&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next to the lemmatization, there is also a series of functions for translations, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;return_all_unique_translations(word, filter_by_postag=None, involve_unknown=False)&lt;/code&gt;, useful for any wordform, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lemma_translator(word)&lt;/code&gt;, where we already have a lemma.&lt;/p&gt;

&lt;p&gt;As a next step, I will put these functions into a package. Perhaps some of my functions could also be implemented into the cltk package. Hopefully I will soon update this post with a link to a repo containing its code and refs.&lt;/p&gt;

</description>
        <pubDate>Fri, 31 Jan 2020 12:00:00 +0000</pubDate>
        <link>http://sdam-au.github.io/sdam-au/digital-pondering/2020/01/31/greek-texts.html</link>
        <guid isPermaLink="true">http://sdam-au.github.io/sdam-au/digital-pondering/2020/01/31/greek-texts.html</guid>
        
        
        <category>Digital-pondering</category>
        
      </item>
    
      <item>
        <title>Epigraphic Database Heidelberg using R</title>
        <description>&lt;!--- # Short report: Epigraphic Database Heidelberg using R

&lt;span class=&quot;smallcaps&quot;&gt;Antonio Rivero Ostoic  
18-10-2019&lt;/span&gt;
Short report:  [R]{.sans-serif}  ---&gt;

&lt;p&gt;This post is about accessing the “Epigraphic Database Heidelberg” (EDH),
which is one of the longest running database projects in digital Latin
epigraphy. The [EDH] database started as early as year 1986, and in 1997 the Epigraphic
Database Heidelberg website was launched at
&lt;a href=&quot;https:/edh-www.adw.uni-heidelberg.de&quot;&gt;https:/edh-www.adw.uni-heidelberg.de&lt;/a&gt; where inscriptions, images,
bibliographic and geographic records can be searched and browsed online.&lt;/p&gt;

&lt;p&gt;Despite the possibility of accessing the [EDH] database through a Web browser, it is
many times convenient to get the Open Data Repository by the
[EDH] through its
public Application Programming Interface (API).&lt;/p&gt;

&lt;p&gt;For inscriptions, the generic search pattern Uniform Resource Identifier
(URI) is:&lt;/p&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;https://edh-www.adw.uni-heidelberg.de/data/api/inscriptions/search?par_1=value&amp;amp;par_2=value&amp;amp;par_n=value
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;with parameters &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;par&lt;/code&gt; &lt;em&gt;1, 2, … n&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The response from a query is in a Java Script Object Notation (JSON)
format such as:&lt;/p&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;{
   &quot;total&quot; : 61,
   &quot;limit&quot; : &quot;20&quot;,
   &quot;items&quot; : [ ... ]
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;accessing-the-edh-database-using-r&quot;&gt;Accessing the EDH database using R&lt;/h2&gt;

&lt;p&gt;Accessing the [EDH] database [API] using [R] is possible with a convenient function that produces
the generic search pattern [URI]. Hence, the function &lt;a href=&quot;https://github.com/mplex/cedhar/blob/master/code/get.edh.r&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get.edh()&lt;/code&gt;&lt;/a&gt; allows
having access to the data with the available parameters that are
recorded as arguments. Then the returned [JSON] file is converted into a list data object
with function &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fromJSON()&lt;/code&gt; from the [rjson] package.&lt;/p&gt;

&lt;p&gt;Basically, the function &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get.edh()&lt;/code&gt; allows getting data with the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;search&lt;/code&gt; parameter either from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;inscriptions&quot;&lt;/code&gt; (the default option) or
else from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;geography&quot;&lt;/code&gt;. The other two options from the [EDH] database
[API], which are &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;photos&quot;&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;bibliography&quot;&lt;/code&gt; may be implemented in the future.&lt;/p&gt;

&lt;p&gt;The following parameter description is from
&lt;a href=&quot;https://edh-www.adw.uni-heidelberg.de/data/api&quot;&gt;https://edh-www.adw.uni-heidelberg.de/data/api&lt;/a&gt;:&lt;/p&gt;

&lt;h3 id=&quot;search-parameters-for-inscriptions-and-geography&quot;&gt;Search parameters for inscriptions and geography&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;province:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;get list of valid values at
    &lt;a href=&quot;https://edh-www.adw.uni-heidelberg.de/data/api/terms/province&quot;&gt;https://edh-www.adw.uni-heidelberg.de/data/api/terms/province&lt;/a&gt;,
    case insensitive&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;country:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;get list of valid values at
    &lt;a href=&quot;https://edh-www.adw.uni-heidelberg.de/data/api/terms/country&quot;&gt;https://edh-www.adw.uni-heidelberg.de/data/api/terms/country&lt;/a&gt;, case
    insensitive&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;findspot_modern:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;add leading and/or trailing truncation by asterisk *, e.g.
    findspot_modern=köln*, case insensitive&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;findspot_ancient:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;add leading and/or trailing truncation by asterisk *, e.g.
    findspot_ancient=aquae*, case insensitive&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bbox:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;bounding box in the format bbox=minLong, minLat, maxLong, maxLat,
    example:
    &lt;a href=&quot;https://edh-www.adw.uni-heidelberg.de/data/api/inscriptions/search?bbox=11,47,12,48&quot;&gt;https://edh-www.adw.uni-heidelberg.de/data/api/inscriptions/search?bbox=11,47,12,48&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just make sure to quote the arguments in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get.edh()&lt;/code&gt; for the different
parameters that are not integers. This means for example that the query
for the last parameter with the two search options is written as&lt;/p&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;R&amp;gt; get.edh(search=&quot;inscriptions&quot;, bbox=&quot;11,47,12,48&quot;)
R&amp;gt; get.edh(search=&quot;geography&quot;, bbox=&quot;11,47,12,48&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;search-parameters-for-inscriptions&quot;&gt;Search parameters for inscriptions&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hd_nr:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;HD-No of inscription&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;year_not_before:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;integer, BC years are negative integers&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;year_not_after:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;integer, BC years are negative integers&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tm_nr:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;integer value&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;transcription:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;automatic leading and trailing truncation, brackets are ignored&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;type:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;of inscription, get list of values at
    &lt;a href=&quot;https://edh-www.adw.uni-heidelberg.de/data/api/terms/type&quot;&gt;https://edh-www.adw.uni-heidelberg.de/data/api/terms/type&lt;/a&gt;, case
    insensitive&lt;/p&gt;

&lt;h3 id=&quot;search-parameters-for-geography&quot;&gt;Search parameters for geography&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;findspot:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;level of village, street etc.; add leading and/or trailing
    truncation by asterisk *, e.g. findspot_modern=köln*, case
    insensitive&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pleiades_id:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Pleiades identifier of a place; integer value&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;geonames_id:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Geonames identifier of a place; integer value&lt;/p&gt;

&lt;p&gt;Since with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;inscriptions&quot;&lt;/code&gt; option the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;id&lt;/code&gt; “component” of the
output list is not with a numeric format, then function &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get.edh()&lt;/code&gt; adds
an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ID&lt;/code&gt; at the beginning of the list with the identifier with a
numerical format.&lt;/p&gt;

&lt;p&gt;Hence, the query&lt;/p&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;R&amp;gt; get.edh(findspot_modern=&quot;madrid&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;returns this truncated output:&lt;/p&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;$ID
[1] &quot;041220&quot;

$commentary
[1] &quot; Verschollen. Mögliche Datierung: 99-100.&quot;

$country
[1] &quot;Spain&quot;

$diplomatic_text
[1] &quot;[ ] / [ ] / [ ] / GER PO[ ]TIF / [ ] / [ ] / [ ] / [&quot;

...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Having a numerical identifier is useful for plotting the results for
example. However, it is possible to prevent this addition by disabling
argument &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;addID&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FALSE&lt;/code&gt;.&lt;/p&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;R&amp;gt; get.edh(findspot_modern=&quot;madrid&quot;, addID=FALSE)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Finally, it is worth to mention that further extensions that the
[EDH] database [API] may add in the future can be handled with similar 
arguments in function &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get.edh()&lt;/code&gt;.&lt;/p&gt;
</description>
        <pubDate>Tue, 26 Nov 2019 12:00:00 +0000</pubDate>
        <link>http://sdam-au.github.io/sdam-au/short-reports/epigraphy/2019/11/26/Epigraphic_Database_Heidelberg_using_R.html</link>
        <guid isPermaLink="true">http://sdam-au.github.io/sdam-au/short-reports/epigraphy/2019/11/26/Epigraphic_Database_Heidelberg_using_R.html</guid>
        
        <category>database</category>
        
        <category>epigraphy</category>
        
        <category>R</category>
        
        <category>API</category>
        
        
        <category>short-reports</category>
        
        <category>epigraphy</category>
        
      </item>
    
      <item>
        <title>In search of good practices in digital research</title>
        <description>&lt;p&gt;In the world of digital scholarship, I count myself among rather late adopters. It was during my doctoral studies when I first tried to learn some programming stuff. It took me another three years until I was able to write and run my own first programming scripts in Python. However, since I reached that stage a couple of years ago, I quickly became a programming-enthusiast, fully immersed in the exciting world of web scraping, exploring countless datasets available via GitHub, and always experimenting with new Python packages and libraries.&lt;/p&gt;

&lt;p&gt;Here I differentiate between two idealized types of behavior: &lt;strong&gt;computational skills&lt;/strong&gt; and &lt;strong&gt;computational practices&lt;/strong&gt;. A computational skill is, for instance, an ability to write a script implementing particular algorithm to solve a given problem; on the other hand, a computational practice is, for instance, usage of version control for managing scripts. While someone’s computational skills might be operationalized as a variable with values represented as positive numbers (e.g. “0” = “no skills”, “1” = “at least some skill”), computational practices rather differ in being &lt;em&gt;worse&lt;/em&gt; or &lt;em&gt;better&lt;/em&gt;, and therefore might be better operationalized by a set of real numbers (e.g. “-1” = “somehow bad practice”, “1” = “somehow good practice”). (Of course these two types of behavior often overlap, but I do not think this anyhow threatens the core of my argument.)&lt;/p&gt;

&lt;p&gt;For now, my observation is following: while my computational skills were gradually growing over the last couple of years as I learnt new tricks almost on a daily basis, my computational practices have not been under such a vivid development and still tend to include many bad habits.&lt;/p&gt;

&lt;p&gt;I think I have an explanation for that: I hypothesize that it is because &lt;em&gt;skills and practices are learnt differently&lt;/em&gt;. In my case, a new good practice has been often simply transmitted by collaboration on a joint project and by imitating what other people do. This way I learnt to use GitHub, just by following up what one my colleague did once we were writing a joint article. On the other hand, new skills are typically not transmitted this way. I suggest that it is because they often require a long-term focused incremental learning. This way I learned Python, following a number of online tutorials, guiding me step-by-step from one level to another.&lt;/p&gt;

&lt;p&gt;I now feel really lucky to be a part of our research project here in Aarhus with other like-minded scholars. I see it not only as a great opportunity to employ the computational skills I possess, but - perhaps even more importantly - as an opportunity to make collectively a substantial progress in our search for good practices in digital research. In fact, it was one of the main motivations for me for deciding to move here. It was important for me to realize that I am not the only one who struggles on this front and to discover that there already exists a whole bunch of literature on good practices in scientific computing (like &lt;a href=&quot;https://journals.plos.org/plosbiology/article?id=10.1371/journal.pbio.1001745&quot;&gt;this article&lt;/a&gt;, &lt;a href=&quot;https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510&quot;&gt;this article&lt;/a&gt;, or &lt;a href=&quot;https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1000424&quot;&gt;this article&lt;/a&gt;)&lt;/p&gt;
</description>
        <pubDate>Mon, 04 Nov 2019 12:00:00 +0000</pubDate>
        <link>http://sdam-au.github.io/sdam-au/digital-pondering/2019/11/04/In-search-of-good-practices.html</link>
        <guid isPermaLink="true">http://sdam-au.github.io/sdam-au/digital-pondering/2019/11/04/In-search-of-good-practices.html</guid>
        
        
        <category>Digital-pondering</category>
        
      </item>
    
      <item>
        <title>Short report: User Acceptance Testing</title>
        <description>&lt;!--- # Short report: User Acceptance Testing

&lt;span class=&quot;smallcaps&quot;&gt;Antonio Rivero Ostoic  
18-10-2019&lt;/span&gt;  ---&gt;

&lt;p&gt;User Acceptance Test or
&lt;span data-acronym-label=&quot;UAT&quot; data-acronym-form=&quot;singular+short&quot;&gt;UAT&lt;/span&gt;
is a type of testing performed by the Client to certify the system with
respect to the requirements that was agreed upon. This report is to
illustrate the application of
&lt;span data-acronym-label=&quot;UAT&quot; data-acronym-form=&quot;singular+short&quot;&gt;UAT&lt;/span&gt;
in developing, testing, and releasing a new or updated
&lt;span class=&quot;sans-serif&quot;&gt;R&lt;/span&gt; package.&lt;/p&gt;

&lt;h2 id=&quot;user-acceptance-test-for-r-package-release&quot;&gt;User Acceptance Test for R package release&lt;/h2&gt;

&lt;p&gt;In the DTAP process (development → test → acceptance → production),
which is part of a software development process, the release of a new
version of an &lt;span class=&quot;sans-serif&quot;&gt;R&lt;/span&gt; package is at the final
step where the deployment needs to meet certain requirements. The
“acceptance” portion in this process comes from both &lt;em&gt;humans&lt;/em&gt;
(developer and clients) and &lt;em&gt;machines&lt;/em&gt; (a list of rules that the
software must conform). Of course, human testing involves machines as
well, and this distinction is made for referring to a systematic way of
testing.&lt;/p&gt;

&lt;h4 id=&quot;human-testing&quot;&gt;Human testing&lt;/h4&gt;

&lt;p&gt;The development of a software component on a local machine has folders
containing a set of functions in a structure like this&lt;/p&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;FOLDER-BUILD
FOLDER-PUB
Batch file to build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;where the testing of the software occurs in the three parts.&lt;/p&gt;

&lt;p&gt;A set of &lt;span class=&quot;sans-serif&quot;&gt;R&lt;/span&gt; functions are written in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FOLDER-BUILD&lt;/code&gt; with a version control, and then the functions are tested
manually in the &lt;span class=&quot;sans-serif&quot;&gt;R&lt;/span&gt; console or other
environment. It is important at this stage that the test involves random
data, different data sets, and the extreme cases that the input data may
have. Once there is an acceptance from the developer, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FOLDER-PUB&lt;/code&gt; hosts
a copy of the functions to publish and then the building with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;batch
file&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The batch file has the instructions in a sequential list to build the
package that typically are &lt;span class=&quot;sans-serif&quot;&gt;R&lt;/span&gt; core
functions to load files, write or recreate an object to a file, and the
creation of a skeleton for a new source package.&lt;/p&gt;

&lt;h4 id=&quot;machine-testing&quot;&gt;Machine testing&lt;/h4&gt;

&lt;p&gt;Once the package is built then comes the documentation of the functions
with files in a Latex format that conform the manual. The machine
testing, which comes afterwards, will check among other things whether
there is a correspondence or not between the script codes and the
documentation.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;sans-serif&quot;&gt;Rtools&lt;/span&gt; allows performing a machine
testing of &lt;span class=&quot;sans-serif&quot;&gt;R&lt;/span&gt; packages within the MS
Windows operating system. First the package is constructed as a tarball
file with the command line and by typing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;R CMD build&lt;/code&gt;. Then the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;R CMD
check&lt;/code&gt; performs different types of tests on this file based on pass/fail
results where “fail” involves errors, warnings, and notes. The option
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--as-cran&lt;/code&gt; applies the most strict rules on the package and allows a
successful submission for a publication on the CRAN repository whenever
there is any fail.&lt;/p&gt;

&lt;p&gt;An example of a successful testing is in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.log&lt;/code&gt; file given as
appendix where the checking starts in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DESCRIPTION&lt;/code&gt; file with the
basic information about the package. Then there is also a testing of
things like whether the package can be loaded and unloaded, and
consistencies both in the code and the documentation including meta
data.&lt;/p&gt;

&lt;h3 id=&quot;uat-for-users-in-github&quot;&gt;UAT for users in GitHub&lt;/h3&gt;

&lt;p&gt;As with machine testing, the acceptance tests among users of the
&lt;span class=&quot;sans-serif&quot;&gt;R&lt;/span&gt; package should reveal as well a
straightforward yes/no or pass/fail results. This means that the user
should be able to download, install, uninstal, and run the software
without any errors.&lt;/p&gt;

&lt;p&gt;Another important component of the user acceptance is counting with a
shared infrastructure that team members administer, use on a day-to-day
basis and can reflect on and implement for others. GitHub is not only a
git repository, but it is also a tool suitable for educational tasks
such as periodical reflection and implementation for others.&lt;/p&gt;

&lt;p&gt;GitHub storages the information and it can be used as well as backup for
disaster recovery. In many cases GitHub is the place where the users
report bugs, and where ideally users should become developers of the
package as well.&lt;/p&gt;

&lt;h4 id=&quot;uat-exercise&quot;&gt;UAT exercise&lt;/h4&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;install the beta version of the package from GitHub plus
dependencies into the R environment&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;load the package and run the scripts of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;README.md&lt;/code&gt; file&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;run the program with different datasets&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;if an error occurs then consult the manual to fix the input data&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;if the data introduced conforms the requirements from the manual
and the error remains then report the bug&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A successful user acceptance test has no errors, and the user is willing
to use the package in his/her own work.&lt;/p&gt;
</description>
        <pubDate>Fri, 18 Oct 2019 12:00:00 +0000</pubDate>
        <link>http://sdam-au.github.io/sdam-au/short-reports/software/2019/10/18/User_Acceptance_Testing.html</link>
        <guid isPermaLink="true">http://sdam-au.github.io/sdam-au/short-reports/software/2019/10/18/User_Acceptance_Testing.html</guid>
        
        
        <category>short-reports</category>
        
        <category>software</category>
        
      </item>
    
      <item>
        <title>Upcoming workshop on Digital Approaches</title>
        <description>&lt;p&gt;Hello, dear digital enthousiast!&lt;/p&gt;

&lt;p&gt;We are organising a one day workshop on &lt;strong&gt;Digital Approaches to research in Humanities and Social Sciences&lt;/strong&gt; which you should not miss out!
You will hear about the need of building the technical infrastructure, the frustrations of venturing the digital research in the more traditional and conservative fields such as history or epigraphy. We will discuss the joys of collaboration, data standards and dataset sharing. On the top of that, you will learn more about the exciting ongoing digital projects all around the globe!&lt;/p&gt;

&lt;p&gt;The full program with interactive links to our speakers and their projects can be accessed via &lt;a href=&quot;http://bit.ly/2OJTQoV&quot;&gt;this link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Please, contact me if you need more details (&lt;strong&gt;petra.hermankova@cas.au.dk&lt;/strong&gt; or &lt;a href=&quot;https://twitter.com/pettulda&quot;&gt;@pettulda&lt;/a&gt; on Twitter!) or if you would like to join us for pre-workshop dinner on the 29th Oct.&lt;/p&gt;

&lt;p&gt;&lt;a align=&quot;center&quot; class=&quot;image-link&quot; href=&quot;/sdam-au/assets/workshop_program.png&quot; data-lightbox=&quot;Gallery-1&quot; data-title=&quot;30 Oct 2019 Workshop program&quot;&gt;&lt;img class=&quot;image&quot; src=&quot;/sdam-au/assets/workshop_program.png&quot; /&gt;30 Oct 2019 Workshop program&lt;/a&gt;&lt;/p&gt;

</description>
        <pubDate>Tue, 15 Oct 2019 12:00:00 +0000</pubDate>
        <link>http://sdam-au.github.io/sdam-au/events/2019/10/15/Digital_Workshop.html</link>
        <guid isPermaLink="true">http://sdam-au.github.io/sdam-au/events/2019/10/15/Digital_Workshop.html</guid>
        
        
        <category>Events</category>
        
      </item>
    
      <item>
        <title>Learning to collaborate</title>
        <description>&lt;h3 id=&quot;collaboration---digital-infrastructure&quot;&gt;Collaboration - digital infrastructure&lt;/h3&gt;

&lt;p&gt;We are one month and three meetings into the project.&lt;/p&gt;

&lt;p&gt;Having had several discussions on the subject of digital infrastructure (understand as the research data storage, system for communicating across different google and outlook identities and the need to keep each other efficiently in the loop but also keep our workplace informed) at SDAM, our team often struggles with different opinions and different priorities when it comes to discussing and deciding on digital infrastructure. 
Decision making is difficult because we are facing multiple unknowns at once. We do not know local (Danish) resources well, we don’t know each other well, and in the realm we each are not certain of each others expertise in this murky digital area. We are basically still stocktaking in many aspects of our eresearch. My push towards decision making is perhaps counterproductive as we are still in the information gathering and trialling stage of the innovation adoption process. It may be too early to commit as we don’t understand all the costs and benefits of the different available infrastructures.  We are circling around the basic principles (be exemplary, promote open source, collaboration-friendly online data storage systems that are modular and let us connect data and analytical scripts) but have not committed fully to the principles of openness (ie. github seems too open for the scripts/datasets) nor have we found cloud data storage in DK that would tick both the boxes of functionality (plugin tools), responsiveness (answering email queries) or sufficient data storage shareable with international collaborators. 
Perhaps, data storage is tricky and needs a bit more reflection and testing.
Other matters, such as team management and coordination are split into several different tools, such as trello and slack. While I can live with Slack I am less enthused about Trello, mostly because it is yet another system to keep an eye on. As project director, I am happy to go along with any new app that someone installs on my computer and sets to notifications and provides instructions and support when asked. As project director, I am most anxious about getting a group email address set up so I type one address and everyone gets the memo. The same applies to calendars, I would like to know when is who available and to make my calendar visible to team members see where I am and what I am doing without me sending lots and lots of invites constantly. This makes sense as at the moment I sit on a lot of logistical and event information while feeling time-strapped. 
Basic project management and day to day operation sits on Google at the moment. While I had suggested we purchase membership for business apps, and have own institutional space, this suggestion was voted down at the initial meeting in favor of a better Danish cloud platform (e.g. data DeiC or sciencedata.dk). I suspect if I had purchased the business apps before asking everyone, we would be using that space now instead of private personal space.  I see no problem with using a business Google apps as a temporary placeholder before we move to something else; as currently we are using all kinds of different storage (my fedarch Gdrive, MQ Gdrive, Cloudstor, Vojtech’s Gdrive, Github, et al) and it’s going to be a hell to streamline this down the line. 
I suppose the source of tension for me here is that we as a project should not be using personal digital resources but institutional ones (to be exemplary). Another source of tension is my preference to commit to an imperfect tool with the understanding that we switch as soon as we identify a better tool for the job. I think it poor practice to resort to a non-committal limbo stage where we sort of play with datasets from different parts without having or at least trying to build any containing structures. Maybe I exaggerate, but it sure feels more straightforward to manage the provenance and move resources from one space to another as long as they are organized to begin with. 
All in all, I perceive distinct lack of engagement on the digital infrastructure part of our work compared to research  proper. If I put my foot down regarding GDrive three weeks ago, we’d probably be using it now despite concerns over new unnecessary emails, etc.  Despite reservations, the team mostly happily delegates decision making and implementation to whoever volunteers for the task. It’s low hanging fruit for whoever is just a bit more comfortable with the tools, or knowledgable, or feels more strongly about the subject, or simply has a more discrete idea of desired outcome. I wonder whether this is because of the differences in technical expertise or because for researchers digital infrastructure is, after all, secondary. 
There is a reason for this situation. Most postdocs today have been trained as individual researchers who by dissertation stage have developed effective survival working habits and strategies and are justified in believing that the infrastructure they have operated within is sufficient. For individual tasks, it most probably is. 
For collaborative group work, however, is most probably isn’t.&lt;/p&gt;

&lt;p&gt;Collaborative projects are more complex than individual projects as the needs and ideas of the different participants are more differentiated. Successful operation of a collaborative project requires frequent expression and juxtaposition of everyone’s needs, constant testing of these needs (to combat ‘language games’) and their prioritisation. Decision-making process is thus not a linear, informed judgement that follows directly from the information gathering and trialing stage, but a trade of resulting from the juxtaposition of individual opinions and balancing of governing principles of the project. Following the motto of The Bazaar and the Cathedral, this more complex process has the advantage of producing higher quality, better informed and less &lt;em&gt;buggy&lt;/em&gt; solutions. The disadvantage is that it is slowed down by the complexity of decision-making amidst language games. 
For me, the complexity of communicating and operating in a collaborative project is precisely the reason why we need to emphasise and prioritize development of proper digital infrastructure. In contrast to individual projects, the potential for technical debt increases dramatically in collaborations. &lt;a href=&quot;https://www.computer.org/csdl/magazine/so/2012/06/mso2012060018/13rRUyoyhMp&quot;&gt;Technical debt&lt;/a&gt;, as defined by wikipedia, is the “implied cost of additional rework caused by choosing an easy (limited) solution now instead of using a better approach that would take longer”.  This concept, first coined by &lt;a href=&quot;http://wiki.c2.com/?ComplexityAsDebt&quot;&gt;Ward Cunningham&lt;/a&gt;, applies both to software development and collaboration management (e.g. Stewart-Lowndes). Tolerating poor data storage now commits the team to time-consuming data transfer and documentation later. Poor/weak team coordination may cause a bit of frustration here and there today, but leads to missed opportunities in a week or month exacerbated by new pressures or additional stress. Tackling technical debt requires the refactoring of systems for more clarity and streamlined performance as these systems (be they programs or infrastructures) grow more complex.
Inevitably, we are humans and therefore imperfect and so are our decisions. This is doubly true with digital infrastructure which is a constantly moving landscape, or better a constantly changing tip of an iceberg. Mindful of the imperfection, we can nonetheless mitigate it and ward off technical debt whenever possible. One such strategy is to invest considerable effort into scoping, selecting and implementing infrastructure solutions that will make the future work of the entire team easier. 
Settling down for a limited temporary solution or regressing into individual solutions is tantamount to shooting ourselves in the foot.&lt;/p&gt;

&lt;h2 id=&quot;decision-making---am-i-turning-into-a-dane&quot;&gt;Decision making - Am I turning into a Dane?&lt;/h2&gt;

&lt;p&gt;I suspect my team think we discuss digital infrastructure too much. Wouldn’t it be better to play with data first? It might be more fun. It would certainly relieve some of the stress from deliverables. Yet we need to build the project slowly. 
Perhaps I should have instituted the infrastructure by fiat and started playing. However I wish the decisions to be the consensual product of joint deliberations over individual and project needs and usecases. Likewise I hope the implementation will consist of divisible parts and present a shareable load for us all.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“I wish to play with the data first”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The wish to jump into research is justified by the need to know what it is we need stored and contained. It is perhaps also good to relieve some of the pressure and novelty of the project by resorting into individual zones of comfort, with familiar data analysis, visualisation or similar. It lets each of us bring something to the table, establish value and carry on developing as a project and a team. Imagining what we as a project need now and might need in the future is a trying exercise, and it is good to have some safety valves and comfort generating activities.&lt;/p&gt;

&lt;h2 id=&quot;digital-research-and-the-solitary-historian&quot;&gt;Digital research and the solitary historian&lt;/h2&gt;
&lt;p&gt;This is what I actually sat down to write about today inspired by a discussion with a colleague. The topic needed such a long introduction about the pains of collaboration that I may need to finish this topic in another reflection. In respect to the language games and complex workings of team needs and priorities, it seems that digital projects should be much more straightforward if one is an individual researcher. 
In a team we struggle with how to work together and how to share authority/decide what technical solution to commit to /adopt. In a team, however, we have four pairs of eyes for information gathering and testing available technical solutions. This is a tremendous advantage.
Unless the single researcher has gotten a degree in history after a long career in IT, then the time saved by not figuring out a team is lost in searching for the right digital tool. If we as a team of intelligent IT savvy people struggle to decide on shared digital infrastructure, how is a single researcher supposed to navigate this terrain?&lt;/p&gt;
</description>
        <pubDate>Tue, 08 Oct 2019 12:00:00 +0000</pubDate>
        <link>http://sdam-au.github.io/sdam-au/digital-pondering/2019/10/08/Infrastructure-Collaboration.html</link>
        <guid isPermaLink="true">http://sdam-au.github.io/sdam-au/digital-pondering/2019/10/08/Infrastructure-Collaboration.html</guid>
        
        
        <category>Digital-pondering</category>
        
      </item>
    
      <item>
        <title>Building the infrastructure</title>
        <description>&lt;p&gt;Hello, dear reader!&lt;/p&gt;

&lt;p&gt;The project has officially started in the beginning of September 2019 and we are already fully immersed in building the digital infrastructure of the new project!&lt;/p&gt;

&lt;p&gt;After a careful consideration we have mutually agreed on our official name &lt;em&gt;“The Social Dynamics in the Ancient Mediterranean”&lt;/em&gt; research group. We will get back to the name in some of the future posts but it appears you can’t really start doing anything, unless you have a name!&lt;/p&gt;

&lt;p&gt;Even Rome wasn’t built in a day… and so wasn’t the digital infrastructure of a research project. It does not only include to &lt;em&gt;research&lt;/em&gt; the available &lt;em&gt;research tools&lt;/em&gt; and the existing infrastructure (pun intended), but you also have to bring to the table solutions that would a) work for the entire team and that would b) survive in a long run. Suddenly you have to think about internal communication, external presentation, storage, code and data sharing, version control, publication, shared bibliography, project management and planning, shared calendar… And all that while you are keen on doing the &lt;em&gt;actual research&lt;/em&gt;. But again, some of the decisions you make now can impact your future research in a good and in a bad way. The lesson I have learnt in life many times is: &lt;strong&gt;the time you invest in making the decision upfront, however tedious it may seem, will save you a great trouble in the future&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The issue with most digital tools and software is their short lifespan. It unfortunately aplies to commercial apps as well as to open-source software. And there is not an easy escape route. Maybe tune your mindset to be ready to migrate to a completely new tool every once in a while but the change is inevitable. Therefore, even before you create something, start thinking about the other end of its lifecycle - what will happen after the current structure collapses.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“It happened to all of us. You can run out of funding, change institutions or take a career break. You abandon your project and when you want to return, it is irreversibly and truly gone.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But honestly, how many people, unless they were burnt really badly in their past experience, think about the entire lifecycle of a digital project? Reflect on your decisions and try to answer the following questions honestly:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Do you think about the format of the data that you are going to leave behind?&lt;/li&gt;
  &lt;li&gt;Are you planning to share or reuse the data in five years?&lt;/li&gt;
  &lt;li&gt;What is your exit strategy?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Do you have one?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Although it may seem pesimistic, there is no universal solution that would fit all projects. But maybe a mere thought of the inescapable end of your project is the key itself. Building the infrastructure responsibly with the end date in mind may open the door to future projects that won’t have to reinvent the wheel and will build upon your work.&lt;/p&gt;

&lt;p&gt;What is your experience with building the infrastructure for a research project? 
Please, reach out to me (&lt;strong&gt;petra.hermankova@cas.au.dk&lt;/strong&gt; or &lt;a href=&quot;https://twitter.com/pettulda&quot;&gt;@pettulda&lt;/a&gt; on Twitter!) if you would like to ponder about the research lifecycle and our mutual building efforts.&lt;/p&gt;

&lt;p&gt;Or simply &lt;strong&gt;stay tuned for more&lt;/strong&gt;!&lt;/p&gt;
</description>
        <pubDate>Thu, 26 Sep 2019 12:00:00 +0000</pubDate>
        <link>http://sdam-au.github.io/sdam-au/digital-pondering/2019/09/26/Building_infrastructure.html</link>
        <guid isPermaLink="true">http://sdam-au.github.io/sdam-au/digital-pondering/2019/09/26/Building_infrastructure.html</guid>
        
        
        <category>Digital-pondering</category>
        
      </item>
    
  </channel>
</rss>
