<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-8725958</id><updated>2009-10-27T12:32:59.874-04:00</updated><title type='text'>Scriptio Continua</title><subtitle type='html'>Thoughts on software development, Digital Humanities, the ancient world, and whatever else crosses my radar.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default?start-index=26&amp;max-results=25'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8725958.post-5140087941750117358</id><published>2009-10-27T10:19:00.006-04:00</published><updated>2009-10-27T12:32:59.883-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DH'/><title type='text'>Object Artefact Script</title><content type='html'>A couple of weeks ago, I attended a workshop at the Edinburgh eScience Institute on the relation of text in ancient (and other) documents to its context and on the problems of reading difficult texts on difficult objects and ways in which technology can aid the process of interpretation and dissemination without getting in the way of it.  The meeting was well summarized by Alejandro Giacometti in his &lt;a href="http://giacometti.tumblr.com/post/213059488/object-artefact-script"&gt;blog&lt;/a&gt;, and the presentations are posted on the &lt;a href="http://www.nesc.ac.uk/action/esi/contribution.cfm?Title=1014"&gt;eSI wiki&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;Kathryn Piquette discussed what would be required to digitally represent Egyptian hieroglyphic texts without divorcing them from their contexts as an integral part of monumental architecture. For example, the interpretation of the meaning of texts should be able to take into account the times of day (and/or year) when they would have been able to be read, their relationship to their surroundings, and so on.  The established epigraphical practice of divorcing the transcribed text from its context, while often necessary, does some violence to its meaning, and this must be recognized and accounted for.  At the same time, digital 3D reconstructions are themselves an interpretation, and it is important to disclose the evidence on which that interpretation is based. &lt;br /&gt;&lt;br /&gt;Ségolène Tarte talked about the process of scholarly interpretation in reading the &lt;a href="http://vindolanda.csad.ox.ac.uk/"&gt;Vindolanda tablets&lt;/a&gt; and similar texts.  As part of analysing the scholarly reading process, the &lt;a href="http://esad.classics.ox.ac.uk/"&gt;eSAD project&lt;/a&gt; observed two experts reading a previously-published tablet.  During the course of their work, they came up with a new reading that completely changed their understanding of the text.  The previous reading hinged on the identification of a single word, which led to the (mistaken) recognition of the document as recording the sale of an ox.  The new reading hinged on the recognition of a particular letterform as an 'a'.  The ways in which readings of difficult texts are produced—involving skipping around looking for recognizable pieces of text upon which (multiple) partial mental models of the texts are constructed, which must then be resolved somehow into a reading—means that an Interpretation Support System (such as the one eSAD proposes to develop) must be sensitive to the different ways of reading scholars use and must be careful not to impose "spurious exactitude" on them.&lt;br /&gt;&lt;br /&gt;Dot Porter gave an overview of a variety of projects that focus on representing text, transcription, and annotation alongside one another as a way into discussing the relationship between digital text and physical text.  She cautioned against attempts to digitally replicate the experience of the codex, since there is a great deal of (necessary) data interpolation that goes on in any detailed digital reconstruction, and this elides the physical reality of the text.  Digital representations may improve (or even make possible) the reading of difficult texts, such as the Vindolanda tablets or the &lt;a href="http://www.archimedespalimpsest.org/"&gt;Archimedes Palimpsest&lt;/a&gt;, so for purposes of interpretation, they may be superior to the physical reality.  They can combine data, metadata, and other contextual information in ways that help a reader to work with documents. But they cannot satisfactorily replicate the physicality of the document, and it may be a bit dishonest to try.&lt;br /&gt;&lt;br /&gt;I talked about the &lt;a href="http://github.com/hcayless/img2xml"&gt;img2xml&lt;/a&gt; project I'm working on with colleagues from UNC Chapel Hill.  I've got a post or two about that in the pipeline, so I won't say much here.  It involves the generation of SVG tracings of text in manuscript documents as a foundation for linking and annotation.  Since the technique involves linking to an XML-based representation of the text, it may prove superior to methods that rely simply on pointing at pixel coordinates in images of text.&lt;br /&gt;&lt;br /&gt;Ryan Bauman talked about the use of digital images as scholarly evidence.  He gave a fascinating overview of sophisticated techniques for imaging very difficult documents (e.g. carbonized, rolled up scrolls from Herculaneum) and talked about the need for documentation of the techniques used in generating the images.  This is especially important because the images produced will not resemble the way the document looks in visible light.  Ryan also talked about the difficulties involved in linking views of the document that may have been produced at different times, when the document was in different states, or may have used different techniques.  The Archimedes Palimpsest project is a good example of what's involved in referencing all of the images so that they can be linked to the transcription.&lt;br /&gt;&lt;br /&gt;Finally, Leif Isaksen talked about how some of the techniques discussed in the earlier presentations might be used in crowdsourcing the gathering of data about inscriptions.  Inscriptions (both published and unpublished) are frequently encountered (both in museums and out in the open) by tourists who may be curious about their meaning, but lack the ability to interpret them.  They may well, however, have sophisticated tools available for image capture, geo-referencing, and internet access (via digital cameras, smartphones, etc.).  Can they be employed, in exchange for information about the texts they encounter, as data gatherers?  &lt;br /&gt;&lt;br /&gt;Some themes that emerged from the discussion included: &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;the importance of communicating the processes involved in generating digital representations of texts and their contexts (i.e. showing your work)&lt;/li&gt; &lt;br /&gt;&lt;li&gt;the need for standard ways of linking together image and textual data&lt;/li&gt;&lt;br /&gt;&lt;li&gt;the importance of disseminating data and code, not just results&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;This was a terrific workshop, and I hope to see followup on it.  ESAD is holding a workshop next month on "Understanding image-based evidence," that I'm sorry I can't attend and from which look forward to seeing the output.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-5140087941750117358?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/5140087941750117358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=5140087941750117358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/5140087941750117358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/5140087941750117358'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2009/10/object-artefact-script.html' title='Object Artefact Script'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-1382727886631772746</id><published>2009-10-16T15:31:00.002-04:00</published><updated>2009-10-16T16:01:39.954-04:00</updated><title type='text'>Stomping on Innovation Killers</title><content type='html'>&lt;a href="http://twitter.com/foundhistory"&gt;@foundhistory&lt;/a&gt; has a nice &lt;a href="http://www.foundhistory.org/2009/10/16/3-innovation-killers-in-digital-humanities/"&gt;post&lt;/a&gt; on objections one might hear on a grant review panel that would unjustly torpedo an innovative proposal.  I thought it might be a good idea to take a sideways look at these as advice to grant writers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:36pt"&gt;“&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Haven’t X, Y, and Z already done this? We shouldn’t be supporting duplication of effort.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Are all of the stakeholders on board? (Hat tip to @patrickgmj for this gem.)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;What about sustainability?&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:36pt"&gt;”&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So, some ideas for countering these when you're working on your proposal: &lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Have you looked at work that's been done in this area (this might entail some real digging)?  If there are projects and/or literature that deal with the same areas as your proposal, then you should take them into account.  You need to be able to show you've done your homework and that your project is different from what's come before.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Who is your audience?  Have you talked to them?  If you can get letters of support from one or more of them, that will help silence the stakeholders objection.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You ought to have some sort of story about sustainability and/or the future beyond the project, to show that you've thought about what comes next.  Even if your project is an experiment, you should talk about how you're going to disseminate the results so that those who come after will be able to build on your work.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;I agree with Tom that these criticisms can be deployed to stifle creative work.  In technology, sometimes wheels need to be reinvented, sometimes the conventional wisdom is flat wrong, and sometimes worrying overmuch about the future paralyses you.  But if you're writing a proposal, assume these objections will be thrown at it, and do some prior thinking so you can spike them before they kill your innovative idea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-1382727886631772746?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/1382727886631772746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=1382727886631772746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/1382727886631772746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/1382727886631772746'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2009/10/stomping-on-innovation-killers.html' title='Stomping on Innovation Killers'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-6244740632285775431</id><published>2009-08-10T08:17:00.006-04:00</published><updated>2009-08-10T12:05:28.150-04:00</updated><title type='text'>Upgrade Notes</title><content type='html'>During my recent work on moving the &lt;a href="http://papyri.info/"&gt;Papyrological Navigator&lt;/a&gt; from Columbia to NYU, I ran into some issues that bear noting.  It's a bit hard to know whether these are generalizable, but they seem to me to be good examples of the kinds of things that can happen when you're upgrading a complex system, and I don't want to forget about them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="http://idp.atlantides.org/trac/idp/ticket/188"&gt;Issue #1&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;Search results in the PN are supposed to return with KWIC snippets, highlighting the search terms.  As part of the move, I upgraded Lucene to the latest release (2.4.1).  The Lucene in the PN was 2.3.x, but the developer at Columbia had worked hard to eke as much indexing speed out of it as possible, and had imported code from the 2.4 branch, with some modifications.  Since this code was really close to 2.4, I'd had reason to hope the upgrade would be smooth, and it mostly was.  Highlighting wasn't working for Greek though, even though the search itself was...&lt;br /&gt;&lt;br /&gt;Debugging this was really hard, because as it turned out, there was no failure in any of the running code.  It just wasn't running the right code.  A couple of the slightly modified Lucene classes in the PN codebase were being stepped on by the new Lucene because instead of a jar named "ddbdp.jar", the new PN jars were named after the project in which they resided (so, "pn-ddbdp-indexers.jar".  And they were getting loaded &lt;span style="font-style:italic;"&gt;after&lt;/span&gt; Lucene instead of before.  Not the first time I'd seen this kind of problem, but always a bit baffling.  In the end I moved the PN Lucene classes out of the way by changing their names and how they were called.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="http://idp.atlantides.org/trac/idp/ticket/191"&gt;Issue #2&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This one was utterly baffling as well.  Lemmatized search (that is, searching for dictionary headwords and getting hits on all the forms of the word—very useful for inflected languages, like Greek) was working at Columbia, and not at NYU.  Bizarre.  I hadn't done &lt;span style="font-style:italic;"&gt;anything&lt;/span&gt; to the code.  Of course, it was my fault.  It almost always is the programmer's fault.  A few months before, in response to a bug report (and before I started working for NYU), I had updated the &lt;a href="http://epidoc.svn.sourceforge.net/viewvc/epidoc/trunk/transcoder/"&gt;transcoder&lt;/a&gt; software (which converts between various encodings for Ancient Greek) to conform to the recommended practice for choosing which precomposed (letter + accent) character to use when the same one (e.g. alpha + acute accent) occurs in both the Greek (Modern) and Greek Extended (Ancient) blocks in Unicode.  &lt;a href="http://socrates.berkeley.edu/~pinax/greekkeys/technicalDetails.html"&gt;Best practice&lt;/a&gt; is to choose the character from the Greek block, so \u03AC instead of \u1F71 for ά.  Transcoder &lt;span style="font-style:italic;"&gt;used&lt;/span&gt; to use the Greek Extended character, but since late 2008 it has followed the new recommendation and used characters from the Greek block, where available.  Unfortunately this change happened after transcoder had been used to build the lemma database that the PN uses to expand lemmatized queries.  So it had the wrong characters in it, and a search for any lemma containing an acute accent would fail.  Again, all the code was executing perfectly; some of the data was bad.  It didn't help that when I pasted lemmas into Oxygen, it normalized the encoding, or I might have realized sooner that there were differences.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="http://idp.atlantides.org/trac/idp/ticket/230"&gt;Issue #3&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Last, but not least, was a bug which manifested as a failure in certain types of search.  "A followed by B within n places" searches worked, but "A and B (not in order) within n places" and "A but not B within n places" both failed.  Again, no apparent errors in the PN code.  The NullPointerException that was being thrown came from within the Lucene code!  After a lot of messing about, I was able to determine that the failure was due to a Lucene change that the PN code wasn't implementing against.  Once I'd found that, all it took to fix it was to override a method from the Lucene code.  This was actually a Lucene bug (https://issues.apache.org/jira/browse/LUCENE-1748) which I reported.  In trying to maintain backward compatibility, they had kept compile-time compatibility with pre-2.4 code, but broken it in execution.  I have to say, I was &lt;span style="font-weight:bold;"&gt;really&lt;/span&gt; impressed with how fast the Lucene team, particularly Mark Miller, responded.  The bug is already fixed.   &lt;br /&gt;&lt;br /&gt;So, lessons learned:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Tests are good.  I didn't have any available for the project that contained all of the bugs listed here.  They exist (though coverage is spotty), but there are dependencies that are tricky to resolve, and I had decided to defer getting the tests to work in favor of getting the PN online.  Not having tests ate into the time I'd saved by deferring them.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In both cases #1 and #3, I had to find the problem by reading the code and stepping through it in my head.  Practice this basic skill.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Look for ways your architecture may have changed during the upgrade.  Anything may be significant, including filenames.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Greek character encoding is the Devil (but I already knew that).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It's probably your fault, but it &lt;span style="font-style:italic;"&gt;might&lt;/span&gt; not be.  Look closely at API changes in libraries you upgrade.  Go look at the source if anything looks fishy.  I didn't expect to find anything wrong with something as robust as Lucene, but I did.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-6244740632285775431?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/6244740632285775431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=6244740632285775431' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/6244740632285775431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/6244740632285775431'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2009/08/upgrade-notes.html' title='Upgrade Notes'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-5387335852914977283</id><published>2009-01-23T15:38:00.002-05:00</published><updated>2009-01-23T15:48:01.911-05:00</updated><title type='text'>Endings and Beginnings</title><content type='html'>It's been that sort of a week.  Great beginning with the inauguration on Tuesday and the start of a new Obama presidency.  My wife was in tears.  Growing up in a small southern town, she never imagined she'd see a black president, and now our youngest daughter will never know a world in which there hasn't been one.  Sometimes things do change for the better.&lt;br /&gt;&lt;br /&gt;On a personal note, I gave my notice to UNC on Tuesday.  My position was partially funded with soft money, and one-time money is one of the primary ways they're trying to address the budget crisis, in order not to lay off permanent employees (as is right and proper).  I'm rather sad about leaving, but I will be starting a job with the NYU digital library team in February, working on &lt;a href="http://papyri.info"&gt;digital papyrology&lt;/a&gt;.  This has the look of a job where I can unite both the Classics geek and the tech geek sides of my personality.  I may become unbearable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-5387335852914977283?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/5387335852914977283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=5387335852914977283' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/5387335852914977283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/5387335852914977283'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2009/01/endings-and-beginnings.html' title='Endings and Beginnings'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-6528718985469993581</id><published>2008-12-31T14:55:00.004-05:00</published><updated>2009-01-05T14:38:32.962-05:00</updated><title type='text'>OpenLayers and Djatoka</title><content type='html'>For the last few weeks, I've been playing around with the new JPEG2000 image server released by the Los Alamos National Labs (&lt;a href="http://african.lanl.gov/aDORe/projects/djatoka/"&gt;http://african.lanl.gov/aDORe/projects/djatoka/&lt;/a&gt;).    I never could get the image viewer released along with it to work, and I immediately thought of OpenLayers (&lt;a href="http://openlayers.org"&gt;http://openlayers.org/&lt;/a&gt;), a javascript API for embedding maps.  OpenLayers is like Google Maps in many ways, but Free.  Besides maps, it works very well for any image, and provides a lot of tools developed for mapping, but also useful for displaying and working with any large image.  I wanted to use OpenLayers support for tiled images in conjunction with Djatoka's ability to render arbitrary sections of an image at a number of zoom levels (the number of levels available depends on how the image was compressed).&lt;br /&gt;&lt;br /&gt;After a lot of messing around and some false starts, I've developed a Javascript class that supports Djatoka's OpenURL API.  I've been testing it on JPEG2000 images created with ContentDM in the UNC Library's digital collections, with a good deal of success.  The results are not yet available online, because I don't have a public-facing server I can host it on, but the source code is up on github &lt;a href="http://github.com/hcayless/djatoka-openlayers-image-viewer/tree/master"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Instructions&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;Install Djatoka.  Incidentally, in order to get this in the queue for installation on our systems, I had to make Djatoka work on Tomcat 6.  The binary doesn't work out of the box, but when I rebuilt it on my system (RHEL 5), it worked fine.&lt;br /&gt;&lt;br /&gt;Copy the adore-djatoka WAR into your Tomcat webapps directory.  Follow the instructions on the Djatoka site to start the webapp.&lt;br /&gt;&lt;br /&gt;Grab a copy of OpenLayers.  Put the OpenURL.js file in lib/OpenLayers/Layer/ and run the build.py script.&lt;br /&gt;&lt;br /&gt;To just run the demo, copy the djatoka.html, the OpenLayers.js you just built, and the .css files from OpenLayers/theme/ and from the examples/ directory, as well as the OpenLayers control images from OpenLayers/img into the adore-djatoka directory in webapps.  You should then be able to access the djatoka.html file and see the demo.&lt;br /&gt;&lt;br /&gt;This all comes with no guarantees, of course.  It seems to work quite well with the JPEG2000 images I've tested, and the tiling means that each request of Djatoka consumes an equal amount of resources.  I've run into OutOfMemoryErrors when requesting full-size images, but this method loads them without any problem.&lt;br /&gt;&lt;br /&gt;Update (2009-01-05 14:37): I've posted a fix to the OpenURL.js script for a bug pointed out to me by John Fereira on the djatoka-devel list.  If you grabbed a copy before now, you should update.&lt;br /&gt;&lt;br /&gt;Update: screenshots --&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm2.static.flickr.com/1121/3165198310_d1f21b120c_o_d.jpg" /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;img src="http://farm2.static.flickr.com/1323/3164366943_c09a4952a4_o_d.jpg" /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;img src="http://farm4.static.flickr.com/3086/3165198612_eb04d43a58_o_d.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-6528718985469993581?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/6528718985469993581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=6528718985469993581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/6528718985469993581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/6528718985469993581'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2008/12/openlayers-and-djatoka.html' title='OpenLayers and Djatoka'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-7547822467622848003</id><published>2008-10-29T09:12:00.001-04:00</published><updated>2008-10-29T09:14:44.120-04:00</updated><title type='text'>Thoughts on crosswalking</title><content type='html'>For the second Integrating Digital Papyrology project, we need to develop a method for crosswalking between EpiDoc (which is a dialect of TEI) and various database formats.  We've thought about this quite a bit in the past and we think that we don't just want to write a one-off conversion because (a) there will be more than one such conversion and (b) we want to be able to document the mappings between data sources in a stable format that isn't just code (script, XSLT, etc.)&lt;br /&gt;&lt;br /&gt;Some of the requirements for this notional tool are:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;should document mappings between data formats in a declarative fashion&lt;/li&gt;&lt;br /&gt;&lt;li&gt;certain fields will require complex transformations.  For example, the document text will likely be encoded in some variant of Leiden in the database, and will need to be converted to EpiDoc XML.  This is currently accomplished by a fairly complex Python script, so it should be possible to define categories of transformation which would signal a call to an external process.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;some mappings will involve the combination of database fields into a single EpiDoc element, and others, the division of a single field into multiple EpiDoc elements&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Context-specific information (not included in the database) will need to be inserted into the EpiDoc document, so some sort of templating mechanism should be supported.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The mapping should be bidirectional.  We aren't just talking about exporting from a database to EpiDoc, but also about importing from EpiDoc, which is envisioned as an interchange format as well as a publication format.  This is why a single mapping document, rather than a set of instructions on how to get from one to the other would be nice.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;So far, my questions to various lists have turned up favorable responses (i.e. "yes, that would be a good thing") but no existing standards....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-7547822467622848003?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/7547822467622848003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=7547822467622848003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/7547822467622848003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/7547822467622848003'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2008/10/thoughts-on-crosswalking.html' title='Thoughts on crosswalking'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-8888572769585816357</id><published>2008-10-20T12:34:00.002-04:00</published><updated>2008-10-20T22:50:43.591-04:00</updated><title type='text'>On Bamboo the 2nd</title><content type='html'>I spent Thursday - Saturday last week at the second Bamboo workshop in San Francisco.  So some reactions:&lt;br /&gt;&lt;br /&gt;1) The organizers are well-intentioned and are sincerely trying to wrestle with the problem of cyberinfrastructure for Digital Humanities.&lt;br /&gt;&lt;br /&gt;2) That said, it isn't clear that the Bamboo approach is workable.  The team is very IT focused, and while they seem to have a solid grasp of large-scale software architecture, the ways in which that might be applied to the Humanities with any success aren't obvious.  There was a lot of misdirected effort between B1 and B2 by some very smart people, who I must say had the good grace to admit it was a nonstarter.  Their attempt to factor the practices of scholars into implementable activities resulted in something that lacked enough context and specificity to be useful.  A refocusing on context and on the processes that contain and help define the activities happened at the workshop and seems likely to go forward.&lt;br /&gt;&lt;br /&gt;3) The workshops themselves seem to have been quite useful.  I wasn't at any or the round one workshops, and I doubt I'll be at any of the others (I represented the UNC Library because the usual candidates weren't available), but everyone I talked to was very engaged (if often skeptical).  The connections and discussion that seem to have emerged so far probably make the investment worthwhile, even if "Bamboo" as conceived doesn't work.&lt;br /&gt;&lt;br /&gt;4) The best idea I heard came (not surprisingly) from Martin Mueller, who suggested Bamboo become a way to focus Mellon funding on projects that conform to certain criteria (such as reusable components and standards) for a defined period (say five years).  The actual outcome of the current Bamboo would be the criteria for the RFP.  Simple, encourages institutions to think along the right lines, might actually do some good, and might allow participation by smaller groups as well.  &lt;br /&gt;&lt;br /&gt;5) There was a lot of talk about the people who are both researchers and technologists (guilty).  These were variously defined as "hybrids," "translators," and, most offensively, "the white stuff inside the Oreo."  None of this was meant to be offensive, but in the end, it is.  People who can operate comfortably in both the worlds of scholarship and IT can certainly be useful go-betweens for those who can't, but that is not our sole raison d'être.  Until recently there haven't been many jobs for us, but that seems to be changing, and I hope it continues to.  See Lisa Spiro's excellent recent post on &lt;a href="http://digitalscholarship.wordpress.com/2008/10/18/digital-humanities-jobs/"&gt;Digital Humanities Jobs&lt;/a&gt; and Sean Gillies, who without having been there, manages to capture some of the reservations I feel about the current enterprise and pick up on the &lt;a href="http://sgillies.net/blog/819/second-guessing-project-bamboo/"&gt;educational aspect&lt;/a&gt;.  One possible useful future for Bamboo would be simply to foster the development of more "hybrids."&lt;br /&gt;&lt;br /&gt;6) The Bamboo folks have set themselves a truly difficult task.  They are making a real effort to tackle it in an open way, and should be commended for it.  But it is a very hard problem, and one for which there is still not a clear definition.  The software engineer part of my hybrid brain wants problems defined before it will even consider solutions.  The classicist part believes some things are just hard, and you can't expect technology to make them easy for you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-8888572769585816357?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/8888572769585816357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=8888572769585816357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/8888572769585816357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/8888572769585816357'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2008/10/on-bamboo-2nd.html' title='On Bamboo the 2nd'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-4604817491854047332</id><published>2008-09-28T20:50:00.004-04:00</published><updated>2008-09-29T07:59:02.918-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zotero'/><title type='text'>Go Zotero!</title><content type='html'>The Thomson Reuters lawsuit against the developers of &lt;a href="http://www.zotero.org"&gt;Zotero&lt;/a&gt; is getting a &lt;a href="http://yro.slashdot.org/article.pl?sid=08/09/27/2113248"&gt;lot&lt;/a&gt; &lt;a href="http://laboratorium.net/archive/2008/09/28/thomson_reuters_the_gang_that_couldnt_sue_straight"&gt;of&lt;/a&gt; &lt;a href="http://dltj.org/article/zotero-lawsuit-extracts/"&gt;notice&lt;/a&gt;, which is good.&lt;br /&gt;&lt;br /&gt;I've noticed that in the library world, when people mention getting sued, it's with fear and the implication that this represents the end of the world.  It's an interesting contrast coming from working for a startup (albeit a pretty well-funded one) where lawsuits == a) publicity, and are not to be feared (perhaps even to be provoked) and/or b) are a signal that you've scared your competitors enough to make them go running to Daddy, thus unequivocally validating your business model.&lt;br /&gt;&lt;br /&gt;This is an act of sheer desperation on the part of Thomson Reuters.  They're hoping GMU will crumble and shut the project down.  I do hope Dan has contacted the &lt;a href="http://www.eff.org/"&gt;EFF&lt;/a&gt; (&lt;a href="http://www.eff.org/support"&gt;donate!&lt;/a&gt;) and that the GMU administration will take this for what it is: fantastic publicity for one of their most important &lt;a href="http://chnm.gmu.edu/index.php"&gt;departments&lt;/a&gt; and an indicator that they are doing something truly great.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-4604817491854047332?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/4604817491854047332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=4604817491854047332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/4604817491854047332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/4604817491854047332'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2008/09/go-zotero.html' title='Go Zotero!'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-1817159289213922272</id><published>2008-08-15T22:36:00.002-04:00</published><updated>2008-08-15T22:54:21.325-04:00</updated><title type='text'>Back from Balisage</title><content type='html'>I never made it to Extreme, Balisage's predecessor, despite wanting to very badly, so I'm very glad I did go to its new incarnation.  I'm still processing the week's very rich diet of information, but it was very, very cool.&lt;br /&gt;&lt;br /&gt;Simon St. Laurent, who wrote one of the first XML books I bought back in 1999, &lt;a href="http://www.amazon.com/Inside-XML-DTDs-Scientific-Technical/dp/007134621X/ref=sr_1_4?ie=UTF8&amp;s=books&amp;qid=1218854797&amp;sr=8-4"&gt;Inside XML DTDs&lt;/a&gt; has a photo of one of the slides from my presentation in &lt;a href="http://news.oreilly.com/2008/08/mighty-markup-megadose.html"&gt;his Balisage roundup&lt;/a&gt; post.  This is the kind of κλέος I can appreciate!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-1817159289213922272?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/1817159289213922272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=1817159289213922272' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/1817159289213922272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/1817159289213922272'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2008/08/back-from-balisage.html' title='Back from Balisage'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-2244137176674159850</id><published>2008-08-14T14:15:00.003-04:00</published><updated>2008-08-14T14:23:29.664-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='balisageConference08'/><title type='text'>Balisage Presentation online</title><content type='html'>I just rsynced up my presentation on linking manuscript images to transcriptions using SVG for &lt;a href="http://www.balisage.net"&gt;Balisage&lt;/a&gt;, that I gave this morning.  It's at &lt;a href="http://www.unc.edu/~hcayless/img2xml/presentation.html"&gt;http://www.unc.edu/~hcayless/img2xml/presentation.html&lt;/a&gt;.  The image viewer embedded into the presentation is at &lt;a href="http://www.unc.edu/~hcayless/img2xml/viewer.html"&gt;http://www.unc.edu/~hcayless/img2xml/viewer.html&lt;/a&gt;.  Text paths are still busted at the highest resolution, as you'll see if you zoom all the way in, but apart from that it seems to work.&lt;br /&gt;&lt;br /&gt;Balisage has been a really great conference so far.  I highly recommend it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-2244137176674159850?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/2244137176674159850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=2244137176674159850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/2244137176674159850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/2244137176674159850'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2008/08/balisage-presentation-online.html' title='Balisage Presentation online'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-9046650798420819239</id><published>2008-05-31T12:12:00.007-04:00</published><updated>2008-06-21T20:11:22.930-04:00</updated><title type='text'>New TransCoder release</title><content type='html'>This is something I've been meaning to wrap up and write up for a while now: thanks to the Duke &lt;span style="font-style: italic;"&gt;Integrating Digital Papyrology&lt;/span&gt; grant from the &lt;a href="http://www.mellon.org"&gt;Andrew W. Mellon Foundation&lt;/a&gt;, I've been able to make a bunch of updates to the Transcoder, a piece of software I originally wrote for the &lt;a href="http://epidoc.sf.net"&gt;EpiDoc&lt;/a&gt; project.  Transcoder is a Java program that handles switching the encodings of Greek text, for example from &lt;a href="http://en.wikipedia.org/wiki/Beta_code"&gt;Beta Code&lt;/a&gt; to &lt;a href="http://unicode.org"&gt;Unicode&lt;/a&gt; (or back again).  It's used in initiatives like &lt;a href="http://www.perseus.tufts.edu"&gt;Perseus&lt;/a&gt; and &lt;a href="http://www.stoa.org/projects/demos/home"&gt;Demos&lt;/a&gt;.  I've been modifying it to work with &lt;a href="http://scriptorium.lib.duke.edu/papyrus/texts/DDBDP.html"&gt;Duke Databank of Documentary Papyri&lt;/a&gt; XML files (which are &lt;a href="http://www.tei-c.org"&gt;TEI&lt;/a&gt; based).  Besides a variety of bug fixes, there is now also included in Transcoder a fully-functional SAX ContentHandler that allows the processing of XML files containing Greek text to be transcoded.&lt;br /&gt;&lt;br /&gt;There are a lot of complex edge cases in this sort of work.  For example, Beta Code (or at least the DDbDP's Beta) doesn't distinguish between medial (σ) and final (ς) sigmas.  That's an easy conversion in the abstract (just look for 's' at the end of a word, and it's final), but when your text is embedded in XML, and there may be an expansion (&amp;lt;expan&amp;gt;) tag in the middle of a word, for example, it becomes a lot harder.  You can't just convert the contents of a particular element--you have to be able to look ahead.  The problem with SAX, of course, is that it's stream-based, so no lookahead is possible unless you do some buffering.  In the end what I did was buffer SAX events when an element (say a paragraph) marked as Greek begins, and keep track of all the text therein.  That let me do the lookahead I needed to do, since I have a buffer containing the whole textual content of the &amp;lt;p&amp;gt; tag.  When the end of the element comes, I then flush the buffer, and all the queued-up SAX events fire, with the transcoded text in them.&lt;br /&gt;&lt;br /&gt;That's a lot of work for one letter, but I'm happy to say that it functions well now, and is being used to process the whole DDbDP.  Another edge case that I chose not to solve in the Transcoder program is the problem of apparatus and their contents in TEI.  An &amp;lt;app&amp;gt; element can contain a &amp;lt;lem&amp;gt; (lemma) and one or more &amp;lt;rdg&amp;gt; (readings).  The problem with it is that the lemma and readings are conceptually parallel in the text.  For example:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Monaco, Courier, mono"&gt;The quick brown &amp;lt;lem&amp;gt;fox&amp;lt;/lem&amp;gt; jumped over the lazy dog.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;rdg&amp;gt;cat&amp;lt;/rdg&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The TEI would be:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Monaco, Courier, mono"&gt;The quick brown &amp;lt;app&amp;gt;&amp;lt;lem&amp;gt;fox&amp;lt;/lem&amp;gt;&amp;lt;rdg&amp;gt;cat&amp;lt;/rdg&amp;gt;&amp;lt;/app&amp;gt; jumped over the lazy dog&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So "cat" follows immediately after "fox" in the text stream, but both words occupy the same space as far as the markup is concerned.  In other words, I couldn't rely only on my fancy new lookahead scheme, because it broke down in edge cases like this.  The solution I went with is dumb, but effective: format the apparatus so that there is a newline after the lemma (and the reading, if there are multiple readings).  That way my code will still be able to figure out what's going on.  The whitespace so introduced really needs to be flagged as significant, so that it doesn't get clobbered by other XML processes though.  That has already happened to us once.  It caused a bug for me too, because I wasn't buffering ignorable whitespace.&lt;br /&gt;&lt;br /&gt;All that trouble over one little letter.  Lunate sigmas would have made life so much easier...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-9046650798420819239?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/9046650798420819239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=9046650798420819239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/9046650798420819239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/9046650798420819239'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2008/05/new-transcoder-release.html' title='New TransCoder release'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-774703724042749192</id><published>2008-03-16T13:56:00.004-04:00</published><updated>2008-03-21T21:04:44.461-04:00</updated><title type='text'>D·M·S· Allen Ross Scaife 1960-2008</title><content type='html'>On Saturday afternoon, March 15th, I learned that my friend &lt;a href="http://www.uky.edu/%7Escaife/"&gt;Ross&lt;/a&gt; had died that morning after a long and hard-fought struggle with cancer. He was at his home in Lexington, Kentucky, surrounded by his family.&lt;br /&gt;&lt;br /&gt;Ross was one of the giants of the Digital Classics community. He was the guiding force behind the &lt;a href="http://www.stoa.org/"&gt;Stoa&lt;/a&gt;, and the founder of many of its projects. Ross was always generous with his time and resources and has been responsible for incubating many fledgling Digital Humanities initiatives.  His loss leaves a gap that will be impossible to fill.&lt;br /&gt;&lt;br /&gt;Ross was also a good friend, easy to talk to, and always ready to encourage me to experiment with new ideas.  I miss him very much.&lt;br /&gt;&lt;br /&gt;What he began will continue without him, and though we cannot ever replace Ross, we can honour his memory by carrying on his good work.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;update (March 21, 21:04)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.stoa.org/?p=786"&gt;Dot&lt;/a&gt; posted a lovely obituary of Ross at the Stoa.  &lt;a href="http://horothesia.blogspot.com/2008/03/connections-ross-scaife.html"&gt;Tom&lt;/a&gt; and &lt;a href="http://blogsearch.google.com/blogsearch?hl=en&amp;amp;q=Ross+Scaife&amp;amp;btnG=Search+Blogs"&gt;several others&lt;/a&gt; have posted nice memorials as well.&lt;br /&gt;&lt;br /&gt;On a happier note: my daughter, Caroline Emma Ross Cayless was born at 11:52 pm, March 19th. &lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-774703724042749192?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/774703724042749192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=774703724042749192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/774703724042749192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/774703724042749192'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2008/03/dms-allen-ross-scaife-1960-2008.html' title='D·M·S· Allen Ross Scaife 1960-2008'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-8000279108826887922</id><published>2008-01-23T15:04:00.000-05:00</published><updated>2008-01-23T15:11:31.001-05:00</updated><title type='text'>Catching up</title><content type='html'>My New Year's resolution was to write more, and specifically to blog more, but so far all of my writing has been internally focussed at my job.  So I shall have another go...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Speaking of New Year's, I spent a chunk of New Year's Eve getting &lt;a href="http://docsouth.unc.edu/csr"&gt;The Colonial and State Records of North Carolina&lt;/a&gt; off the ground.  It's driven by the &lt;a href="http://exist.sf.net"&gt;eXist&lt;/a&gt; XML database, of which I've grown rather fond.  &lt;a href="http://www.w3.org/TR/xquery/"&gt;XQuery&lt;/a&gt; has a lot of promise as a tool for digital humanists with large collections of XML.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-8000279108826887922?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/8000279108826887922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=8000279108826887922' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/8000279108826887922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/8000279108826887922'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2008/01/catching-up.html' title='Catching up'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-7205692024379222001</id><published>2007-10-22T10:20:00.000-04:00</published><updated>2007-10-22T13:11:09.738-04:00</updated><title type='text'></title><content type='html'>I've been at the &lt;a href="http://dhcs.northwestern.edu"&gt;Chicago Colloquium on Digital Humanities and Computer Science&lt;/a&gt; since yesterday, presenting on the Colonial and State Records project (available soon at http://docsouth.unc.edu).&lt;br /&gt;&lt;br /&gt;Interesting themes that have emerged:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The importance of Not Reading, i.e. how to use computational tools to investigate textual spaces when there is more text than you can digest by reading cover-to-cover.&lt;/li&gt;&lt;li&gt;Going beyond search: Discovery is an important task, but it's one we do quite well now, how do we go beyond just finding stuff and start to explore the data spaces that digital methods make available? Visualization tools are going to be an important component of this exploration.  Digitization and search hasn't changed the nature of research.  It has improved the speed with which research is done (nobody spends years producing concordances anymore), but it hasn't changed the questions we ask.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The dawn of Eurasian scholarship (this from Lewis Lancaster's talk): the divide between Occidental and Oriental scholarship no longer makes any sense (well, it never really did) and is probably over.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-7205692024379222001?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/7205692024379222001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=7205692024379222001' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/7205692024379222001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/7205692024379222001'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2007/10/ive-been-at-chicago-colloquium-on.html' title=''/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-3701749453517920548</id><published>2007-05-21T10:10:00.000-04:00</published><updated>2007-05-21T10:12:12.803-04:00</updated><title type='text'>Note to job seekers</title><content type='html'>When applying for a programming job, listing Dreamweaver as a skill is an automatic 50 demerits.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-3701749453517920548?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/3701749453517920548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=3701749453517920548' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/3701749453517920548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/3701749453517920548'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2007/05/note-to-job-seekers.html' title='Note to job seekers'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-8093749555000723996</id><published>2007-03-01T08:25:00.000-05:00</published><updated>2007-03-21T15:58:35.144-04:00</updated><title type='text'>I'm going to be a digital librarian!</title><content type='html'>As of March 15th, I will be working for the &lt;a href="http://www.lib.unc.edu/"&gt;UNC Library&lt;/a&gt; as a digital library programmer.  I'm going to miss &lt;a href="http://www.lulu.com/"&gt;Lulu&lt;/a&gt; a lot.  It's been a wonderful environment to work in, with people I'm going to find hard to leave.  But working with collections like &lt;a href="http://docsouth.unc.edu/"&gt;Documenting the American South&lt;/a&gt; is a text geek's Nirvana, so it was far too good an opportunity to pass up...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-8093749555000723996?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/8093749555000723996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=8093749555000723996' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/8093749555000723996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/8093749555000723996'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2007/03/im-going-to-be-diital-librarian.html' title='I&apos;m going to be a digital librarian!'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-5895305883569990269</id><published>2007-02-06T21:10:00.000-05:00</published><updated>2007-02-07T11:43:22.375-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby XSLT'/><title type='text'>How has Ruby blown your mind?</title><content type='html'>...&lt;a href="http://on-ruby.blogspot.com/2007/01/blogging-contest-february-challenge.html"&gt;asks Pat Eyler&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I had the opportunity to learn Ruby as part of a work project last year and was immediately impressed by its object-orientation, its use of blocks, the straightforward way it handles multiple inheritance with modules, and just the elegance and speed with which I could work in it.  The moment that really changed the way I saw the language came when I had to generate previews of Word and OpenDocument (ODT) documents uploaded to the site I was working on.  Converting Word to ODT seemed like the way to go, since ODT has a zipped XML format, and can therefore be transformed to XHTML.  I have a lot of experience using XSLT to transform XML from one vocabulary to another, so this seemed like well explored territory to me, even if it would take a fair amount of work to accomplish.  As usual, I did some web-trolling to see who had dealt with this issue before me, in case the problem was already solved.  Google pointed me at J. David Eisenberg's &lt;a href="http://books.evc-cit.info/odf_utils/ruby_to_xhtml.html"&gt;ruby_odt_to_xhtml&lt;/a&gt;, which looked like a good start.  It didn't do everything I wanted, in particular it didn't handle footnotes adequately, but I didnt expect it would be too hard to modify.  The surprises came when I looked at the code...&lt;br /&gt;&lt;br /&gt;The first surprise was the utter lack of XSLT.  Not a huge surprise, perhaps.  I'd already gathered that Rubyists viewed XML with a &lt;a href="http://redhanded.hobix.com/images/camping-xml-situps.png"&gt;somewhat jaundiced eye&lt;/a&gt;.  Tim Bray has &lt;a href="http://www.tbray.org/ongoing/When/200x/2006/11/09/Optimizing-Ruby"&gt;lamented&lt;/a&gt; the state of XML support in Ruby as well.  Tim is quite right about the relative weakness of XML support in Ruby, even though I absolutely agree with the practice of avoiding XML configuration files.  There is a perfectly good Ruby &lt;a href="http://greg.rubyfr.net/pub/packages/ruby-xslt/files/README.html"&gt;frontend&lt;/a&gt; to &lt;a href="http://xmlsoft.org/XSLT/"&gt;libxslt&lt;/a&gt;, however, so it's use is not out of the question.  But there it was: for whatever reason, the author had decided not to use the technology I was familiar with...why would he do that, and could I still use his tool?&lt;br /&gt;&lt;br /&gt;The mind expansion came about when I started figuring out how to extend odt_to_xhtml to handle notes, which it was basically ignoring.  I wanted to turn ODT footnotes into endnotes with named anchors at the bottom of the page, links in the text to the corresponding anchor, and backlinks from the note to its link in the text.  Before describing what I found, I should give a little background on XSLT:&lt;br /&gt;&lt;br /&gt;At its most basic, XSLT expects input in the form of an XML document, and produces either XML or text output.  In XSLT, the functions are called templates.  Templates respond either to calls (as do functions in most languages) or, more often, to matches on the input XML document.  So a template like&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;xsl:template match="text:p"&amp;gt;&lt;br /&gt;  &amp;lt;p&amp;gt;&amp;lt;xsl:apply-templates/&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;would be triggered every time a paragraph element in an OpenDocument content.xml is encountered and would output a &amp;lt;p&amp;gt; tag, yield to any other matching templates, and then close the &amp;lt;p&amp;gt; tag.&lt;br /&gt;&lt;br /&gt;As I looked at JDE's code, I saw lots of methods like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def process_text_list_item( element, output_node )&lt;br /&gt;style_name = register_style( element )&lt;br /&gt;item = emit_element( output_node, "li", {"class" =&gt; style_name} )&lt;br /&gt;process_children( element, item )&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;emit_element does what it sounds like it does, adds a child element to the element passed in to the method with a hash of attribute name/value pairs.  It's process_children that really interests me:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#  Process an element's children&lt;br /&gt;#  node: the context node&lt;br /&gt;#  output_node: the node to which to add the children&lt;br /&gt;#  xpath_expr: which children to process (default is all)&lt;br /&gt;#&lt;br /&gt;#  Algorithm:&lt;br /&gt;#  If the node is a text node, output to the destination.&lt;br /&gt;#  If it's an element, munge its name into&lt;br /&gt;#  &amp;lt;tt&amp;gt;process_prefix_elementname&amp;lt;/tt&amp;gt;. If that&lt;br /&gt;#  method exists, call it to handle the element. Otherwise,&lt;br /&gt;#  process this node's children recursively.&lt;br /&gt;#&lt;br /&gt;def process_children( node, output_node, xpath_expr="node()" )&lt;br /&gt;REXML::XPath.each( node, xpath_expr ) do |item|&lt;br /&gt;  if (item.kind_of?(REXML::Element)) then&lt;br /&gt;    str = "process_" + @namespace_urn[item.namespace] + "_" + item.name.tr_s(":-", "__")&lt;br /&gt;    if ODT_to_XHTML.method_defined?( str ) then&lt;br /&gt;      self.send( str, item, output_node )&lt;br /&gt;    else&lt;br /&gt;      process_children(item, output_node)&lt;br /&gt;    end&lt;br /&gt;  elsif (item.kind_of?(REXML::Text) &amp;&amp;amp; !item.value.match(/^\s*$/))&lt;br /&gt;    output_node.add_text(item.value)&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;#&lt;br /&gt;#  If it's empty, add a null string to force a begin and end&lt;br /&gt;#  tag to be generated&lt;br /&gt;if (!output_node.has_elements? &amp;&amp;amp; !output_node.has_text?) then&lt;br /&gt;  output_node.add_text("")&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Mind expansion ensued.  This Ruby class was doing exactly the same thing that I'd expect an XSLT stylesheet to do, with the help of a few lines of code to keep it going!  process_text_list_item is a template!  Coming from Java and then PHP, I'd have no hesitation switching to XSLT to accomplish a bit of XML processing like this, but in Ruby, there really wasn't any need.  I could write XSLT-like code perfectly naturally without ever leaving Ruby!&lt;br /&gt;&lt;br /&gt;Now, I still like XSLT, and I'd still use it in many cases like this, because it's portable across different lanaguages and platforms.  But here, where there are other considerations, it's wonderful that I'm not forced to step outside the language I'm working in to accomplish what I want.  In order to extend the code to handle notes, I just added some new template-like methods to match on notes and note-citations, e.g.:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def process_text_note( element, output_node )&lt;br /&gt;process_children(element, output_node, "#{text_ns}:note-citation")&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In OpenDocument, notes are inline structures.  The note is embedded within the text at the point where the citation occurs, so to create endnotes, you need to split the note into a citation link and a note that is placed at the end of the output document.  To add the endnotes, I borrowed a trick from XSLT: modes.  If an XSL template has a mode="something" attribute, then that template will not match on an input node unless it was dispatched with an &lt;apply-templates mode="something"&gt;&amp;lt;apply-templates mode="something"/&amp;gt;.  So I did the same thing, e.g.:&lt;br /&gt;&lt;br /&gt;&lt;/apply-templates&gt;&lt;pre&gt;&lt;br /&gt;def process_text_note_mode_endnote( element, output_node )&lt;br /&gt;p = emit_element(output_node, "p", {"class" =&gt; "footnote"})&lt;br /&gt;process_children(element, p, "#{@text_ns}:note-citation", "endnote")&lt;br /&gt;process_text_s(element, p)&lt;br /&gt;process_children(element, p, "#{@text_ns}:note-body/#{@text_ns}:p[1]/node()")&lt;br /&gt;process_children(element, p, "#{@text_ns}:note-body/#{@text_ns}:p[1]/following-sibling::*")&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The method that controls the processing flow in JDE's code is called analyze_content_xml.  I just added a call to my moded methods in analyze_content_xml and modified process_children to take a mode parameter.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def process_children( node, output_node, xpath_expr="node()", mode=nil )&lt;br /&gt;if xpath_expr.nil?&lt;br /&gt;  xpath_expr = "node()"&lt;br /&gt;end&lt;br /&gt;REXML::XPath.each( node, xpath_expr ) do |item|&lt;br /&gt;  if (item.kind_of?(REXML::Element)) then&lt;br /&gt;    str = "process_" + @namespace_urn[item.namespace] + "_" + item.name.tr_s(":-", "__")&lt;br /&gt;    if mode&lt;br /&gt;      str += "_mode_#{mode}"&lt;br /&gt;    end&lt;br /&gt;    if ODT_to_XHTML.method_defined?( str ) then&lt;br /&gt;      self.send( str, item, output_node )&lt;br /&gt;    else&lt;br /&gt;      process_children(item, output_node)&lt;br /&gt;    end&lt;br /&gt;  elsif (item.kind_of?(REXML::Text) &amp;&amp;amp; !item.value.match(/^\s*$/))&lt;br /&gt;    output_node.add_text(item.value)&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;#&lt;br /&gt;#  If it's empty, add a null string to force a begin and end&lt;br /&gt;#  tag to be generated&lt;br /&gt;if (!output_node.has_elements? &amp;&amp;amp; !output_node.has_text?) then&lt;br /&gt;  output_node.add_text("")&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Done.  Easy.  Blew my mind.&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-5895305883569990269?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/5895305883569990269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=5895305883569990269' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/5895305883569990269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/5895305883569990269'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2007/02/how-has-ruby-blown-your-mind.html' title='How has Ruby blown your mind?'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-296517108904392801</id><published>2007-01-20T23:05:00.000-05:00</published><updated>2007-01-20T23:27:14.693-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript prototype'/><title type='text'>Prototype grows up</title><content type='html'>&lt;a href="http://www.prototypejs.org/"&gt;http://prototypejs.org&lt;/a&gt; is the new site for Prototype 1.5.  As the Ajaxian blog noted: &lt;a href="http://ajaxian.com/archives/prototype-15-now-with-documentation"&gt;Now with Documentation&lt;/a&gt;!  Of course, Prototype always had &lt;span style="font-style: italic;"&gt;some&lt;/span&gt; documentation; quite good documentation at that, even though there were substantial pieces missing and you had to go digging sometimes.&lt;br /&gt;&lt;br /&gt;Prototype played a big part in reawakening my interest in Javascript as a programming language.  I was rather anti-Javascript for a while, having fought many bloody battles with cross-browser incompatibilities in the early 2000's (UNC Chapel Hill, my then employer, had standardized, somewhat foolishly, on Netscape 4.7, but of course we had to support IE too -- nightmare).  I got back into it seriously when I started to notice all of the AJAXy and Web 2.0-ish stuff going on.  I've learned a lot from digging around in the Prototype source code, so the spotty documentation actually did me some good.&lt;br /&gt;&lt;br /&gt;Kudos to the Prototype development team and the contributors to the documentation effort.  You've done us all a great service!  I look forward to using 1.5...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-296517108904392801?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/296517108904392801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=296517108904392801' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/296517108904392801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/296517108904392801'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2007/01/prototype-grows-up.html' title='Prototype grows up'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-115642574453411931</id><published>2006-08-24T09:22:00.000-04:00</published><updated>2006-08-24T09:22:24.543-04:00</updated><title type='text'>XSL-FO 2.0 Workshop 2006</title><content type='html'>&lt;h3&gt;International Workshop on the future of the Extensible Stylesheet Language (XSL-FO) Version 2.0&lt;/h3&gt;&lt;br /&gt;&lt;a href="http://www.w3.org/Style/XSL/2006-Workshop/#announcement"&gt;XSL-FO 2.0 Workshop 2006&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have two suggestions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;use CSS instead of weird attribute-based style declarations.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;for God's sake, have a reference implementation.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-115642574453411931?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/115642574453411931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=115642574453411931' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/115642574453411931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/115642574453411931'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2006/08/xsl-fo-20-workshop-2006.html' title='XSL-FO 2.0 Workshop 2006'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-115453058010070125</id><published>2006-08-02T10:40:00.000-04:00</published><updated>2006-08-02T10:56:21.436-04:00</updated><title type='text'>Boycott Blackboard!</title><content type='html'>I knew Blackboard had a patent application for their LMS, but apparently it has been &lt;a href="http://yro.slashdot.org/yro/06/08/02/1217219.shtml"&gt;granted&lt;/a&gt; and their first act was to file a lawsuit against one of their competitors.  This is terrible on many levels.  Not least that such a stupid patent should never have been granted,.  Of course, the USPTO would probably let me patent my nose hair. &lt;br /&gt;&lt;br /&gt;I certainly won't be using Blackboard for my XML class in the Fall, and I'd encourage other instructors to drop it too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-115453058010070125?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/115453058010070125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=115453058010070125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/115453058010070125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/115453058010070125'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2006/08/boycott-blackboard.html' title='Boycott Blackboard!'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-112990205399731288</id><published>2005-10-21T09:09:00.000-04:00</published><updated>2005-10-21T09:40:54.036-04:00</updated><title type='text'>Google Library</title><content type='html'>I just read John Battelle's &lt;a href="http://battellemedia.com/archives/001952.php"&gt;post&lt;/a&gt; on the AAP's lawsuit.  The comments are particularly interesting, with a couple of very strident ones criticising Google.  I have a theory about how Google plans to justify their actions:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Libraries are allowed, under copyright law, to make a single copy of any work in their possession.  This is called the Library Exemption.  There is a nice outline of the terms &lt;a href="http://www.unc.edu/%7Eunclng/SILS-display8.htm"&gt;here&lt;/a&gt;.  The libraries themselves can't get in trouble for contracting with Google to do this for them, because they are receiving no commercial advantage from it.  Google clearly is receiving a competitive advantage from it, BUT:&lt;br /&gt;  &lt;/li&gt;   &lt;li&gt;They may be able to make a good case for Fair Use, depending on the nature of what they keep from the book.  There are four aspects to be weighed in any Fair Use defense (see &lt;a href="http://en.wikipedia.org/wiki/Fair_use"&gt;Wikipedia&lt;/a&gt;):&lt;/li&gt;   &lt;ol&gt;     &lt;li&gt;the purpose and character of the use, including whether such use is of a commercial nature or is for nonprofit educational purposes;&lt;/li&gt;     &lt;li&gt;the nature of the copyrighted work;&lt;/li&gt;     &lt;li&gt;the amount and substantiality of the portion used in relation to the copyrighted work as a whole; and&lt;/li&gt;     &lt;li&gt;the effect of the use upon the potential market for or value of the copyrighted work.&lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt; Clearly Google hopes for commercial advantage from the use of the scanned books, so they might fail the first test.  The second doesn't really apply: these are clearly books subject fully to copyright law.  It's the third and fourth aspects that I think are the center of Google's defense.  A copy is a copy, but a searchable &lt;span style="font-style: italic;"&gt;index&lt;/span&gt; created from a scanned copy is arguably a transformative use of the book.  A human being can neither read the index, nor reconstruct the original from it, so Google may be able to successfully defend themselves on aspect #3.  Their main weakness is the existence of page images from the original scan.  These may or may not be stored and accessible in such a way that a whole copy of the original could be reconstructed and read.  Aspect #4 is another winner for Google.  The clear effect of this system will be to sell more copies of the publishers' books.  The only (theoretical) commercial harm caused to the publishers is that they are effectively prevented from rolling a Google Print of their own, which might bring them in more money than simply selling their books.  So Google wins on at least two of the four counts, and the act of copying itself is protected under the Library Exemption. &lt;br /&gt;&lt;br /&gt;I suspect the AAP would have an uphill battle in winning this one.  I wouldn't be surprised if they wanted Google to license their books for their index at some fairly exorbitant rate, and Google refused to pay because they're doing the publishers a favor.  That would make the lawsuit a negotiating tactic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-112990205399731288?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/112990205399731288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=112990205399731288' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/112990205399731288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/112990205399731288'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2005/10/google-library.html' title='Google Library'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-111473311667859063</id><published>2005-04-28T20:02:00.000-04:00</published><updated>2005-04-28T20:05:16.680-04:00</updated><title type='text'>When SEOs Attack</title><content type='html'>Search Engine Foo: &lt;a href="http://iuniverse.com/"&gt;iUniverse Book Publishing: Book Publisher for Self Publishing and Print on Demand&lt;/a&gt;.  Care to guess what terms they're optimizing for?  It does seem to work.  They show up #1 for a Google search on "&lt;a href="http://www.google.com/search?hl=en&amp;q=self+publishing"&gt;self publishing&lt;/a&gt;."  So clearly this sort of spamming works.  But it leads to pretty hilarious prose:&lt;br /&gt;&lt;br /&gt;&lt;quote&gt;&lt;/quote&gt;&lt;blockquote&gt;&lt;quote&gt;iUniverse, the leading online book &lt;span style="color: rgb(255, 0, 0);"&gt;publisher&lt;/span&gt;, offers the most comprehensive book   &lt;span style="color: rgb(255, 0, 0);"&gt;publishing&lt;/span&gt; services in the self-&lt;span style="color: rgb(255, 0, 0);"&gt;publishing&lt;/span&gt; industry—awarded the Editor's Choice award by PC Magazine and chosen by thousands of satisfied authors as the leading print-on-demand book &lt;span style="color: rgb(255, 0, 0);"&gt;publisher&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;We help authors to prepare a manuscript, design and self-&lt;span style="color: rgb(255, 0, 0);"&gt;publish&lt;/span&gt; a book of professional quality, publicize and market their book, and print copies of their book for sale online and in bookstores around the world.&lt;br /&gt;&lt;br /&gt;As an innovative book &lt;span style="color: rgb(255, 0, 0);"&gt;publisher&lt;/span&gt;, we also offer exclusive services such as our acclaimed Editorial Review and our revolutionary Star Program, designed to discover and nurture exceptional new talent within our growing author community.&lt;br /&gt;&lt;br /&gt;Don't wait any longer to get that manuscript off your desk and into the marketplace. With iUniverse as your book &lt;span style="color: rgb(255, 0, 0);"&gt;publisher&lt;/span&gt;, you can become a &lt;span style="color: rgb(255, 0, 0);"&gt;published&lt;/span&gt; author in a matter of weeks. Why not get started today?&lt;/quote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Yes, indeed. Publish your book with a publishing publisher and be published. Ouch. Not sure I'd pay them an exorbitant fee to edit my book.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-111473311667859063?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/111473311667859063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=111473311667859063' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/111473311667859063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/111473311667859063'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2005/04/when-seos-attack.html' title='When SEOs Attack'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-111115285418160272</id><published>2005-03-18T08:20:00.000-05:00</published><updated>2005-03-18T08:38:10.486-05:00</updated><title type='text'>Writing Code</title><content type='html'>I'm coming to the conclusion that writing code, as an activity, really is like writing prose. I find myself treating code projects just like writing projects:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;I spend the first part of the project thinking about it and being (apparently) very unproductive. (25-30%)&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;After I reach some sort of critical mass in my thinking, I very quickly pour out everything into code/onto the page. The project is 80% done as far as volume goes at this point. (10-20%)&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;I spend the rest of the time editing, bugfixing, refining, etc. (50-60%)&lt;/li&gt; &lt;/ol&gt; For larger projects, this cycle gets repeated for each component of the project. This is precisely the pattern I followed when writing my dissertation.  I don't know if this kind of working method is in any way typical, but it does seem to produce the desired results. It makes giving project completion estimates next to impossible though, because I really have no idea how long the project will take until I enter the hyper-productive phase, and when that's complete, I often still have a lot of work to do, even though the bulk of the code/writing is done.  &lt;br /&gt;&lt;br /&gt;This is why it's best for me if I've got some variety in a job. The hyper-productive phase really can't overlap with anything else: if I'm interrupted then, I'll get off track and it may blow the whole day, but in phase 1 or 3 I'm better off not spending all my time focusing on the project, because I'll just end up web surfing. Or blogging.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-111115285418160272?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/111115285418160272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=111115285418160272' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/111115285418160272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/111115285418160272'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2005/03/writing-code.html' title='Writing Code'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-110921056210113350</id><published>2005-02-23T20:59:00.000-05:00</published><updated>2005-03-23T08:52:54.813-05:00</updated><title type='text'>Tagging Notes</title><content type='html'>From a conversation this afternoon: the tags used in folksonomies are deliberately stupid. They are atomic units of information. So a tag can be any atomic unit--it doesn't have to be a word, it could be a URL, a zip code, or anything else you can think of that isn't reducible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-110921056210113350?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/110921056210113350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=110921056210113350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/110921056210113350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/110921056210113350'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2005/02/tagging-notes.html' title='Tagging Notes'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8725958.post-110920864761127833</id><published>2005-02-23T20:30:00.000-05:00</published><updated>2005-02-23T20:30:47.610-05:00</updated><title type='text'>adaptive path » ajax: a new approach to web applications</title><content type='html'>&lt;a href="http://www.adaptivepath.com/publications/essays/archives/000385.php"&gt;adaptive path » ajax: a new approach to web applications&lt;/a&gt;.  Web application development is starting to get really exciting again.  The funny thing is that a lot of this technology has been around for a while, and even though IE supported it, you didn't see tools like these.  I wonder whether the development of Firefox is really what's pushed it.  Certainly nearly all the developers I know shun IE.  So perhaps having a capable Free browser was what sparked all this innovation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8725958-110920864761127833?l=philomousos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://philomousos.blogspot.com/feeds/110920864761127833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8725958&amp;postID=110920864761127833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/110920864761127833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8725958/posts/default/110920864761127833'/><link rel='alternate' type='text/html' href='http://philomousos.blogspot.com/2005/02/adaptive-path-ajax-new-approach-to-web.html' title='adaptive path » ajax: a new approach to web applications'/><author><name>Hugh Cayless</name><uri>http://www.blogger.com/profile/05582281819129069158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14043979979230897906'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>