Wednesday, September 11, 2013

New in EpiDig: EAGLE Europeana Portal

I have just added bibliographic information for the new EAGLE Europeana Project portal (Greek and Latin inscriptions) to the open-access EpiDig Zotero Library (digital resources for the discovery, publication, study, and teaching of epigraphy).

New in Electra and Maia: EAGLE News

I have just added the news feed (RSS) for the new EAGLE Europeana Project portal (Greek and Latin inscriptions) to the Electra and Maia feed aggregators.

Tuesday, August 27, 2013

Job: Senior Digital Humanities Web Developer/Architect

Reblogged from
In order to shape and secure the future of innovative teaching and research at ISAW and beyond, we work with others to nurture new and important open information resources for the ancient world, especially those that connect and contextualize information across institutional, methodological, and technological divides. Accordingly, our Senior Digital Humanities Web Developer/Architects envision, create, and curate web applications that bridge gaps in content and function while handling the diversity of languages, scripts, geography, chronology, and methodology inherent in the study of the past-oriented humanities. You carry out this mission in constant, productive collaboration with scholars, students, and enthusiasts from both inside and outside the Institute, empowering them as co-creators, curators, and users.

Position description and application instructions may be found online at:

Wednesday, August 21, 2013

Get a List of Machine Tags from the Flickr API

I want to know what Pleiades machine tags are in use on photos throughout Flickr (more background here). I thought I'd learn how to ask for that information from the Flickr API via a script. I requested and got an API key (see I set up a Python virtual environment and git repository for the project. I went looking for Python code that already implemented interaction with the API and settled (somewhat arbitrarily) on Beej's Python Flickr API kit (now maintained by Sybren Stüvel). Then used pip install flickrapi to get the package.

Here's a command-line session running the script and showing its output:

(pleiades-flickr)darkstar:pleiades-flickr paregorios$ python src/ 
pleiades:atteststo is used on 15 photos in Flickr
pleiades:denotes is used on 1 photos in Flickr
pleiades:depcits is used on 2 photos in Flickr
pleiades:depicts is used on 7229 photos in Flickr
pleiades:findspot is used on 2197 photos in Flickr
pleiades:finspot is used on 2 photos in Flickr
pleiades:foundat is used on 1 photos in Flickr
pleiades:observedat is used on 3 photos in Flickr
pleiades:origin is used on 225 photos in Flickr
pleiades:place is used on 970 photos in Flickr
pleiades:places is used on 19 photos in Flickr
pleiades:where is used on 119 photos in Flickr
(pleiades-flickr)darkstar:pleiades-flickr paregorios$ 

Here's the code (version at github):

#!/usr/bin/env python
A Flickr tag bot

import argparse
import flickrapi
import json
import logging as l
import os
import sys
import traceback

from myflickr import API_KEY, NAMESPACE_DEFAULT

SCRIPT_DESC = "poll machine tags from flickr"

def main ():
    """ Unleash the bot! """

    global args
    global l

    flickr = flickrapi.FlickrAPI(API_KEY)
    resp = flickr.machinetags_getPairs(namespace=args.namespace, format="json")
    if resp[:14] == "jsonFlickrApi(":
        jstr = resp[14:-1]
        j = json.loads(jstr)
        ptags = [(p['_content'], p['usage']) for p in j['pairs']['pair']]
        for ptag in ptags:
            print "%s is used on %s photos in Flickr" % ptag

if __name__ == "__main__":
        parser = argparse.ArgumentParser(description=SCRIPT_DESC, formatter_class=argparse.ArgumentDefaultsHelpFormatter)
        parser.add_argument ("-n", "--namespace", default=NAMESPACE_DEFAULT, help="namespace to use in requesting machine tags")
        parser.add_argument ("-v", "--verbose", action="store_true", default=False, help="verbose output")
        args = parser.parse_args()
        if args.verbose:
    except KeyboardInterrupt, e: # Ctrl-C
        raise e
    except SystemExit, e: # sys.exit()
        raise e
    except Exception, e:
        print str(e)

Comments, questions, and constructive criticism welcomed!

Friday, June 21, 2013

Thursday, June 20, 2013

It is happening

A couple of hours ago, I was sitting out on the back deck with my wife and pets, enjoying perfect temperatures, morning birdsong, lavender-scented country air, and a cup of freshly brewed Costa Rican coffee (roasted by the good folks at the Kaffeeklatsch in Huntsville). Idyllic.

I was flipping through the latest news stories, blog posts, and such, brought into my phone by my feed reader (currently Feedly). I was trying to ignore the omnipresent bad news of the world, when this popped up:

screen capture of a feed summary in Feedly on my Android phone
Forma[m] Lollianus fecit?!? I'm predisposed by my dissertation experience to trigger on certain Latin and Greek words because of their sometime significance for the study of Roman geography. Forma is of course one of those words, and it does (probably more often than justified) get translated as "map" or "plan." Could this be — admittedly against the odds —an inscription on a map or plan drafted or surveyed by some guy named Lollianus?

If you're me, the possibility warrants a click-through to a corresponding record in the Heidelberg Epigraphic Databank (EDH).

My mappish hopes were quickly dashed, but just as quickly were replaced by interest in a group of inscribed objects I hadn't run across before: mirrors from Roman Dacia bearing makers' inscriptions. "Forma" can mean "mirror"? A quick check of Lewis & Short at Perseus doesn't support that idea, but builds confidence in a better interpretation: "mold, stamp, form". Was this mirror, or some part of it, somehow cast or stamped out? The EDH entry tells me there are 9 identical mirrors extant and that the inscription goes around the "Fassung" (frame?). Yup.

Cool. I learned something today before breakfast. And it's knowledge I can use when I come back to doing more with the geographical/mapping/surveying vocabulary.

And then it hits me: that's not information I went looking for, not a search I initiated. New information of interest was pushed to me because I had previously used a software tool to express interest in a number of information sources including, but not limited to, ancient inscriptions. The software kept an eye on new output from those sources and made it available to me for review and engagement in a mode and at a time and place of my choosing. And because the source data was online, open, and linked in a standard format, I was able to drink coffee and pet my dog on the back deck in Moontown, Alabama while making use of the scholarly work done yesterday(!) by Brigitte Gräf in Heidelberg, Germany.

Isn't this one of the things we've been working toward?

How did that happen?

Sometime earlier this year, Frank Grieshaber in Heidelberg rolled out web page listings and corresponding Atom feeds of recently changed content in the EDH (e.g., latest updates to the inscriptions database). I added them, along with similar data-oriented feeds, to a feed aggregator I dubbed Planet Potamos (with "Potamos" trying lamely to evoke a rushing river of data; the "Planet" acknowledges the feed aggregation software I use). I put the same feed subscriptions into my personal feed reader (I could also have put the Potamos aggregator's feed, but it only updates periodically and I'm an immediacy junkie). I installed and configured my feed reader on every device I use.

The rest is magic. Magic made the old-fashioned way by lots of people in many different places and times developing standards, building software, creating data, doing research, and sharing.

What next?

Well, I hope that Frank and his colleagues in Heidelberg will eventually add thumbnail images (where they have them) to the EDH feeds. I hope that the other epigraphic databases (and indeed all kinds of ancient studies web applications) will set up similar feeds. I hope that we can all start using more linked-data approaches in and alongside such feeds in order to communicate seminal interpretive/discovery facets (like geography, personography, temporality and genre) in machine-actionable ways. I hope the spirit and practice of openness that lubricates and accelerates this sort of synergy continues to grow and flower.

As for me, I'm thinking about how I might set up some kind of filtering mechanism that would highlight or prioritize content in my feed reader that's potentially relevant to my (e.g.) geo/map/survey vocabulary interests. Hmmmmm....

Tuesday, June 11, 2013

New Feature on "About Roman Emperors"

As readers of this blog will know, the About Roman Emperors dataset is built upon the backbone of Wikipedia. More specifically, HTTP URIs like are programmatically created by the dbpedia project on the basis of Wikipedia content, and I used them to identify uniquely each emperor. Web pages and other resources about those emperors are then linked -- using FOAF and other vocabularies -- with those identifiers. These little packages of data about the emperors and their web pages are serialized in both HTML and RDF form on my website.

Today I've added some JavaScript to the HTML views of each emperor's page (e.g., "About the Roman Emperor Hadrian"). When the page loads, the JavaScript fires off a query at the dbpedia SPARQL endpoint, asking for title, abstract, image, and label information associated with the corresponding emperor's URI. Whatever it gets back is presented in the gray-backgrounded column to the right.

See what you think.

Planet Atlantides Changes

The following changes have been made to Planet Atlantides feed aggregators:

Monday, June 3, 2013

Updates to the "About Roman Emperors" Linked Dataset

I have just published a set of updates to my self-published About Roman Emperors dataset (with contributions from Ryan Baumann, Daniel Pett, and Roko Rumora).

Significant changes:

  • TTL and CSV dumps have been suspended (i.e., withdrawn) until they can be brought up-to-date with the master RDF/XML version.
  • Missing article titles from De Imperatoribus Romanis have been added to RDF/XML and HTML versions
  • RDF/XML has been re-ordered and consolidated so it's easier to read and more sensible
  • Terms have been added from the vocabular
Prior posts, explaining the purpose of the dataset and its contents are best accessed via a search on the romemplod label.

Monday, May 13, 2013

New on Planet Atlantides

I have added the following blogs to the indicated aggregators in the Planet Atlantides constellation:

Thursday, April 18, 2013

Citing Sources in Digital Annotations

I'm collaborating with other folks both in and outside ISAW on a variety of digital scholarly projects in which Linked Open Data is playing a big role. We're using the Resource Description Framework (RDF) to provide descriptive information for, and make cross-project assertions about, a variety of entities of interest and the data associated with them (places, people, themes/subjects, creative works, bibliographic items, and manuscripts and other text-bearing objects). So, for example, I can produce the following assertions in RDF (using the Terse RDF Triple Language, or TuRTLe):

<> a <> ;
  rdfs:label "Serugh" ;
  rdfs:comment "An ancient city where Jacob of Serugh was bishop."@en ;
  foaf:primaryTopicOf <ç> ;
  owl:sameAs <> .

This means: 'There's a resource identified with the Uniform Resource Identifier (URI) "" about which the following is asserted:
(Folks familiar with what Sean Gillies has done for the Pleiades RDF will recognize my debt to him in the what proceeds.)

But there are plenty of cases in which just issuing a couple of triples to encode an assertion about something isn't sufficient; we need to be able to assign responsibility/origin for those assertions and to link them to supporting argument and evidence (i.e., standard scholarly citation practice). For this purpose, we're very pleased by the Open Annotation Collaboration, whose Open Annotation Data Model was recently updated and expanded in the form of a W3C Community Draft (8 February 2013) (the participants in Pelagios use basic OAC annotations to assert geographic relationships between their data and Pleiades places).

A basic OADM annotation uses a series of RDF triples to link together a "target" (the thing you want to make an assertion about) and a "body" (the content of your assertion). You can think of them as footnotes. The "target" is the range of text after which you put your footnote number (only in OADM you can add a footnote to any real, conceptual, or digital thing you can identify) and the "body" is the content of the footnote itself. The OADM draft formally explains this structure in section 2.1. This lets me add an annotation to the resource from our example above (the ancient city of Serugh) by using the URI "" as the target of an annotation) thus:
<> a oa:Annotation ;
  oa:hasBody <> ;
  oa:hasTarget <> ;
  oa:motivatedBy oa:describing ;
  oa:annotatedBy <> ;
  oa:annotatedAt "2013-04-03T00:00:01Z" ;
  oa:serializedBy <> ;
  oa:serializedAt "2013-04-17T13:35:05.771-05:00" .

<> a cnt:ContentAsText, dctypes:Text ;
  cnt:chars "an ancient town, formerly located near Sarug."@en ;
  dc:format "text/plain" ;

I hope you'll forgive me for not spelling that all out in plain text, as all the syntax and terms are explained in the OADM. What I'm concerned about in this blog post is really what the OADM doesn't explicitly tell me how to do, namely: show that the annotation body is actually a quotation from a published book. The verb oa:annotatedBy lets me indicate that the annotation itself was made (i.e., the footnote was written) by a resource identified by the URI "". If I'd given you a few more triples, you could have figured out that that resource is a real person named Thomas Carlson, who is one of the editors working on the Syriac Reference Portal project. But how do I indicate (as he very much wants to do because he's a responsible scholar and has no interest in plagiarizing anyone) that he's deliberately quoting a book called The Scattered Pearls: A History of Syriac Literature and Sciences? Here's what I came up with (using terms from Citation Typing Ontology and the DCMI Metadata Terms):
<> a cnt:ContentAsText, dctypes:Text ;
  cnt:chars "a small town in the Mudar territory, between Ḥarran and Jarabulus. [Modern name, Suruç (tr.)]"@en ;
  dc:format "text/plain" ;
  cito:citesAsSourceDocument <> ;
  dcterms:biblographicCitation  "The Scattered Pearls: A History of Syriac Literature and Sciences, p. 558"@en .

The addition of the triple containing cito:citesAsSourceDocument lets me make a machine-actionable link to the additional structured bibliographic data about the book that's available at Worldcat (but it doesn't say anything about page numbers!). The addition of the triple containing dcterms:bibliographicCitation lets me provide a human-readable citation.

I'd love to have feedback on this approach from folks in the OAC, CITO, DCTERMS, and general linked data communities. Could I do better? Should I do something differently?

The SRP team is currently evaluating a sample batch of such annotations, which you're also welcome to view. The RDF can be found here. These files are generated from the TEI XML here using the XSLT here.

Monday, April 15, 2013

New in Maia

The following blogs have been added to the Maia Atlantis feed aggregator:
My thanks to David Meadows at Rogueclassicism, through whom I learned of most of these blogs.

Sunday, April 7, 2013

New in Maia

I've just added the following blogs to the Maia Atlantis feed aggregator:

Friday, April 5, 2013

No IRC for DCA Conference

As a public service announcement: it turns out that UBuffalo guest wifi blocks IRC ports, so I think we have to dump the idea of an IRC back channel for the DCA2013 conference. Twitter (hashtag #dca2013) and blogs will have to be the primary venue for chatter and commentary.

Digital Classics Association Conference Today in Buffalo

A diverse and interesting crowd of folks is pounding down coffee and putting on blue-collared shirts this morning to prepare to participate in the first conference organized by the Digital Classics Association. It's called "Word, Space, Time: Digital Perscpectives on the Classical World" and runs today and tomorrow (5-6 April 2013) in the Center for the Arts Screening Room at the University of Buffalo. On-site registration is available, so come on out!

Here's the conference program.

There's already broad consensus that we'll use the #dca2013 hashtag for tweets about the event. If you're blogging or otherwise serializing or critiquing the conference online and your platform is feed-equipped, please let me know and I'll make sure it's in the subscription list for the Maia Atlantis feed aggregator so it gets wider exposure.

I've also initiated an IRC channel on the freenode network to support backchannel communications: #dca2013.

Here's hoping for robust wifi at the venue...

See you at the conference or online!

Monday, April 1, 2013

New in Maia

I've just added the following resources to the Maia Atlantis feed aggregator:

  • News from the Association Internationale d’Épigraphie Grecque et Latine (AIEGL) [site | feed]
  • Mary Harrsch's Roman Times [blog | feed]

Thursday, March 21, 2013

Removed from Maia

The following feeds have been removed from the Maia Atlantis feed aggregator for the reasons indicated.

Sites return 404, contain no content, or redirect to a domain name seller:

  • History in the Dirt
  • Mark Morgan's Egyptology Blog
  • V(otum) S(olvit) L(ibens) M(erito)
Feeds are no longer enabled on the site:

New in Maia

I have just added the following feeds to the Maia Atlantis feed aggregator, both from the Archaeology and Arts site:

Thursday, March 14, 2013

New in Potamos

I have added the following data feeds to the Potamos Atlantis feed aggregator:

New feed aggregator for ancient data

I've added a new feed aggregator to the Planet Atlantides constellation. It's called Potamos, and it's dedicated to aggregating feeds of data from web sites about the ancient world (photos, archaeological records, bibliographic records, spatial data, and the like, rather than blog posts, news items, or event announcements).

I've listed the modest number of feeds it's presently pulling together below; if you know of a web resource whose feed (Atom or RSS) you think should be added, please send me a link and I'll have a look.

  • Ancient World Image Bank Pool (Flickr) [page | feed]
  • Ancient World Open Bibliographies (Zotero) [page | feed]
  • Chiron, CC images of the Classical World Pool (Flickr) [pagefeed]
  • Chronique des fouilles en ligne / Archaeology in Greece Online [pagefeed]
  • Epigraphische Datenbank Heidelberg: Inschriften: Letzte Änderungen [page | feed]
  • Epigraphische Datenbank Heidelberg: Fotos: Letzte Änderungen [page | feed]
  • Epigraphische Datenbank Heidelberg: Publikationen: Letzte Änderungen [page | feed]
  • Recent Commits to (Github) [page | feed]
  • Pleiades Places Pool (Flickr) [page | feed]
  • Pleiades: Recently Modified [page | feed]
  • Portable Antiquities Scheme Database: Latest Finds [pagefeed]
  • Visibile Parlare - Greek inscriptions Pool (Flickr) [page | feed]
  • Visible words - Visibile parlare Pool (Flickr) [page | feed]