<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>τεχνοσοφια &#187; Development</title>
	<atom:link href="http://lackoftalent.org/michael/blog/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://lackoftalent.org/michael/blog</link>
	<description>The occasional rambling of a digital library artisan</description>
	<pubDate>Mon, 08 Sep 2008 12:15:34 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<item>
		<title>Unescaping HTML in Python</title>
		<link>http://lackoftalent.org/michael/blog/2008/08/01/unescaping-html-in-python/</link>
		<comments>http://lackoftalent.org/michael/blog/2008/08/01/unescaping-html-in-python/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 18:56:42 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
		
		<category><![CDATA[Python]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/?p=140</guid>
		<description><![CDATA[
Dear Future Me,
You&#8217;ve forgotten how to decode (or unescape) HTML or XML in Python again, haven&#8217;t you?  My, my, that old age does catch up with you.
Well, it turns out that ﻿xml.sax.saxutils.unescape() works like a charm.  I&#8217;m certain that edge cases lurk here and there, so caveat, um, coder.
]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:140"><!-- &nbsp; --></abbr>
<p>Dear Future Me,</p>
<p>You&#8217;ve forgotten how to decode (or unescape) HTML or XML in Python again, haven&#8217;t you?  My, my, that old age does catch up with you.</p>
<p>Well, it turns out that ﻿<code>xml.sax.saxutils.unescape()</code> works like a charm.  I&#8217;m certain that edge cases lurk here and there, so caveat, um, coder.</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2008/08/01/unescaping-html-in-python/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ORE plugin updated</title>
		<link>http://lackoftalent.org/michael/blog/2008/07/25/ore-plugin-updated/</link>
		<comments>http://lackoftalent.org/michael/blog/2008/07/25/ore-plugin-updated/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 17:19:29 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
		
		<category><![CDATA[APIs]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[OAI-ORE]]></category>

		<category><![CDATA[Repositories]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/?p=135</guid>
		<description><![CDATA[
I&#8217;ve been using my time at RepoCamp today to get the OAI-ORE plugin for WordPress validating again.  I&#8217;m having some trouble using the validator so I say that with some diffidence.  But the latest code which is now checked in to the WordPress plugins svn repo ought to be close, if not fully conformant, to [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:135"><!-- &nbsp; --></abbr>
<p>I&#8217;ve been using my time at <a href="http://barcamp.org/RepoCamp" target="_blank">RepoCamp</a> today to get the OAI-ORE <a href="http://lackoftalent.org/michael/blog/ore-wordpress-plug-in/" target="_blank">plugin</a> for WordPress <a href="http://african.lanl.gov/ovalnet/validate.jsp" target="_blank">validating</a> again.  I&#8217;m having some trouble using the validator so I say that with some diffidence.  But the latest code which is now checked in to the WordPress plugins svn repo ought to be close, if not fully conformant, to the 0.9 version of the ORE spec.</p>
<p>I&#8217;m not sure the plugin is really useful; it&#8217;s just an Atom feed of all posts and pages in a WP instance.  I can think of some ways to make this more useful, by allowing blog authors to create their own aggregations, pulling in content outside of the particular instance.  I am certain that others can come up with even better uses.  I&#8217;m open to suggestions.</p>
<p>Thanks to Jay Datema for <a href="http://www.bookism.org/open/2008/07/17/repurposing-metadata/" target="_blank">prodding</a> me a bit, if indirectly.</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2008/07/25/ore-plugin-updated/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Jython scp</title>
		<link>http://lackoftalent.org/michael/blog/2008/04/17/jython-scp/</link>
		<comments>http://lackoftalent.org/michael/blog/2008/04/17/jython-scp/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 20:08:42 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/?p=124</guid>
		<description><![CDATA[
In spite of some open questions, I&#8217;ve been making some progress on my Jython-based transport tool.  Right now it&#8217;s pretty dumb and simple: it copies files to and fro via scp.
Being a newb at both Java and Jython made finding the right libraries a bit of a challenge, and so I&#8217;m posting some code [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:124"><!-- &nbsp; --></abbr>
<p>In spite of some <a href="http://lackoftalent.org/michael/blog/2008/04/11/jythons-and-javas-and-bears-oh-my/" target="_blank">open questions</a>, I&#8217;ve been making some progress on my Jython-based transport tool.  Right now it&#8217;s pretty dumb and simple: it copies files to and fro via scp.</p>
<p>Being a newb at both Java and Jython made finding the right libraries a bit of a challenge, and so I&#8217;m posting some code here for folks in the same boat.  It&#8217;s not particularly pretty due to 1) wanting to get something working very quickly, and 2) weird errors when I try to make things prettier (such as getting rid of the hard-coded bits), but I&#8217;ll resolve these soon.<br />
<span id="more-124"></span><br />
The jython code:</p>
<pre name="code" class="python">
# Biter.py
import java
from org.apache.tools.ant import Project
from org.apache.tools.ant.taskdefs.optional import ssh

class Biter(java.lang.Object):
    def __init__(self):
        self.keyfile = '/home/user/.ssh/id_rsa'

    def transport(self, from_uri, to_uri):
        "@sig public void transport(String from_uri, String to_uri)"
        scp = ssh.Scp()
        scp.setKeyfile(self.keyfile)
        scp.setPassphrase('')
        scp.setTrust(True)
        scp.setProject(Project())
        scp.setFile(from_uri)
        scp.setTodir(to_uri)
        scp.execute()
        print "%s -&gt; %s" % (from_uri, to_uri)
</pre>
<p>I set my CLASSPATH to include /usr/share/jython2.2.1/jython.jar, /usr/share/java/jsch-0.1.28.jar, /usr/share/ant/lib/ant-jsch.jar, /usr/share/ant/lib/ant.jar, and &#8216;.&#8217;, and then compile to bytecode via <code>jythonc -idp gov.loc.repository.transport Biter.py</code>.  Once it&#8217;s compiled, I can use the Biter class in Java code thusly:</p>
<pre name="code" class="java">
# BiterClient.java
import gov.loc.repository.transport.Biter;

public class BiterClient {
    public static void main(String[] args) {
        Biter biter = new Biter();
        biter.transport("/home/user/tmp/test1", "user@example.org:tmp/test2");
        biter.transport("user@example.org:tmp/test2", "/home/user/tmp/test3");
    }
}
</pre>
<p>I should note that the passphrase and keyfile are not necessary if you&#8217;re passing valid username and password credentials in the remote to_ or from_uri (and the server in question supports password auth).  But pubkey auth is useful for our purposes and that&#8217;s why it&#8217;s in there.</p>
<p>Hopefully someone somewhere finds this helpful. :)</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2008/04/17/jython-scp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Jythons and Javas and bears, oh my!</title>
		<link>http://lackoftalent.org/michael/blog/2008/04/11/jythons-and-javas-and-bears-oh-my/</link>
		<comments>http://lackoftalent.org/michael/blog/2008/04/11/jythons-and-javas-and-bears-oh-my/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 01:41:52 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Digital Libraries and Archives]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Preservation]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Repositories]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/?p=122</guid>
		<description><![CDATA[
It&#8217;s hard to believe but I&#8217;ve been at the new job for six months already, a full half-year come the 29th.  Some days it seems like I&#8217;ve been here forever; others like I&#8217;m still a rank newb.   I haven&#8217;t written terribly much about what I&#8217;ve been up to (but I assure you [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:122"><!-- &nbsp; --></abbr>
<p>It&#8217;s hard to believe but I&#8217;ve been at the <a href="http://lackoftalent.org/michael/blog/2007/09/27/october/" target="_blank">new job</a> for six months already, a full half-year come the 29th.  Some days it seems like I&#8217;ve been here forever; others like I&#8217;m still a rank newb.   I haven&#8217;t written terribly much about what I&#8217;ve been up to (but I assure you I&#8217;ve been busy).  Let me rectify that.</p>
<h2><strong>The Transfer Problem</strong></h2>
<p>Two of the projects I&#8217;ve been working on relate to a fairly general problem that we like to call &#8220;transfer,&#8221; which revolves around, well, transferring files to and fro.  Sounds simple.  <em>Is</em> simple.  That is, until you start thinking about preservation and accounting for a highly heterogeneous network with idiosyncratic nodes, esoteric storage software, and differential firewall rules.  And that&#8217;s where it gets interesting (and problematic). <span id="more-122"></span>The transferring itself, or copying of files from one location to another which we call &#8220;transport,&#8221; is the easiest part.  We like to use common tools in our environment.  It makes life easy.  And so good ol&#8217; <a href="http://en.wikipedia.org/wiki/Secure_copy" target="_blank">scp</a> seems like an obvious choice to handle the job.</p>
<p>Since preservation is a core aspect of our &#8220;repository,&#8221; a term which I use loosely, we must build certain other functionalities into the transfer process: validation, verification, inventory, backup, ingest, and so forth.  Every time a file is copied to a non-transient location, we verify the file against a (<a href="http://www.faqs.org/rfcs/rfc3174.html" target="_blank">SHA1</a>) checksum and record an event for auditing purposes.</p>
<h2><strong>Repository Workflows</strong></h2>
<p>Some steps in the transfer process are routine and best handled by machines. Thus we automate them with scripts and code.  Others require human intervention.  This introduces another key aspect of our repository needs: workflows.  No two projects will have the same workflow and yet all will have some steps in common.  We&#8217;re using JBoss&#8217;s <a href="http://www.jboss.org/jbossjbpm/" target="_blank">jBPM</a> library for workflow management and it is more than capable of handling our workflow needs.  It allows us to model complex and varied flows in a robust and not <em>ad hoc</em> way; it does seem preferable to me to model our workflows via jBPM&#8217;s graphical editor (serialized to <a href="http://docs.jboss.com/jbpm/v3/userguide/jpdl.html" target="_blank">JPDL</a> XML) rather than copying around blocks of code and otherwise modeling the workflow procedurally in business logic.</p>
<p>One of my coworkers (<a href="http://www.dlib.org/dlib/july07/littman/07littman.html" target="_blank">the author of this</a>) designed a complete workflow system in jBPM last summer and I&#8217;ve taken on implementing, tweaking, and testing this system, which has required bootstrapping my sorry-arse Java skills and learning jBPM.  Though I find it difficult to think in Java patterns and generally find it a burdensome environment, I&#8217;m quite impressed by jBPM.  I&#8217;ve been working on various updates of and unit test coverage for the workflow system, which has been a crash course in a number of Java technologies and a perfect first task at LC, as it gets me into the guts of things.  The Java stack we use for our workflow is highly abstracted and componentized, which is conveniently modular&#8230; but it&#8217;s also Java: fairly heavy and arguably not as agile as dynamic languages such as Python.</p>
<h2><strong>Two Great Tastes?</strong></h2>
<p>So recently we&#8217;ve begun to think about implementing some transfer and workflow components in <a href="http://www.jython.org/" target="_blank">Jython</a> (Python written in Java).  Why?  The value of Jython is as follows:</p>
<ol>
<li><strong>Ease of deployment</strong> - Deploying jar files to existing JVMs in production environments (which we do not control) is a simple task, or at least simpler than some other options.</li>
<li><strong>Interoperability</strong> - Our stack is primarily Java-based and so interoperating with existing Java components means not having to rewrite functionality in other languages.  Jython allows Python to talk to Java and vice versa.</li>
<li><strong>Familiarity</strong> - It&#8217;s Python, and we like Python.  It&#8217;s the closest my team has to a <em>lingua franca</em> and so it increases the chances of sharing code, maintaining code, and so forth.</li>
</ol>
<p>It does not come without its drawbacks:</p>
<ol>
<li><strong>Currency</strong> - The Jython project went moribund for a few years or so and the latest stable version is now 2.2.1.  Compare that to the latest version of Python: <a href="http://www.python.org/download/releases/2.5.2/" target="_blank">2.5.2</a>.  I don&#8217;t begrudge the Jython developers, though.  I&#8217;m glad some folks picked the project up, dusted it off, and breathed new life into it.   I am also glad that they&#8217;re skipping 2.3 and 2.4 releases and plowing right into a 2.5 release.  Because of this currency issue, some Python libraries won&#8217;t work with the latest Jython and that means you&#8217;re stuck looking for outdated, potentially vulnerable Python libraries, or hooking into Java libraries for the same functionality (which inevitably means more lines of code).  I&#8217;m no lines of code fetishist but it does militate against the goal of agility somewhat.One does have the option of living on the edge and trying out the 2.5 branch, but that seems out of step with an infrastructure that is supposed to preserve terabytes upon terabytes of our nation&#8217;s, and the world&#8217;s, intellectual property.  It&#8217;s a responsibility I do not take lightly, as much as I&#8217;d like to be on the bleeding edge.</li>
<li><strong>Interoperability difficulties - </strong>Talking to Java from Jython is a snap: just <code>import java</code> at the top of your script, and, assuming your classpath is copacetic, <em>voila:</em> you have access to Java libraries in your Python code!  Talking to your Jython modules from Java code is, well, a little more complicated. Read on.</li>
</ol>
<p>Despite the caveats it does seem a sane, reasonable, and potentially productive path to go down. Right?  I am specifically looking to implement two workflow components in Jython: one for transport (wrapping Ant&#8217;s<a href="http://www.jcraft.com/jsch/" target="_blank"> JSch</a> library, which provides a slick scp API) and the other for automation of <a href="http://www.opensolaris.org/os/community/zfs/" target="_blank">ZFS</a> filesystem/volume creation on the staging server.  Nothing arcane, nothing tricky, nothing fancy.  So it must be easy!  Right? &#8230;</p>
<h2><strong>Lessons Learned?</strong></h2>
<p>I&#8217;m beginning to wonder about the feasibility of using Jython to make bits of our Java stack more agile. Specifically, there are three ways to get at Jython code from Java:</p>
<ol>
<li>Compile to bytecode/jar via the Jython compiler (jythonc) and reference your Jython objects and methods as though they were <a href="http://en.wikipedia.org/wiki/POJO" target="_blank">POJOs</a></li>
<li>Embed a Jython interpreter</li>
<li>Instantiate a (<a href="http://jcp.org/en/jsr/detail?id=223" target="_blank">JSR-223</a>) script engine</li>
</ol>
<p>Option 1 is nice because you get object- and method-level interop.  However, <a href="http://www.jython.org/Project/jythonc.html" target="_blank">jythonc</a> is unsupported and will disappear.  This does not seem sustainable though I might be able to limp along a while.  And there are <a href="http://sourceforge.net/mailarchive/message.php?msg_name=96c4692d0802280853r70e6b74fg71aed3cdd7701cbf%40mail.gmail.com" target="_blank">signs of hope</a>:</p>
<blockquote><p>Though jythonc is going away, all of the capabilities it provides will be present in 2.5 in other forms.  We&#8217;re adding functionality to expose Python classes as Java classes using decorators to replace the docstring class creation that jythonc provided, and we&#8217;re adding static compilation of proxy classes so regular jython can run in applets and other environments with restrictive classloaders.  We&#8217;re definitely doing something about jythonc.</p></blockquote>
<p>That doesn&#8217;t help much <em>now</em>, of course, but just because jythonc goes away does not mean my jars will stop working.</p>
<p>The suggested methods for option 2 [<a href="http://wiki.python.org/jython/JythonMonthly/Articles/October2006/3" target="_blank">1</a>, <a href="http://wiki.python.org/jython/JythonMonthly/Articles/September2006/1" target="_blank">2</a>] seem to be more trouble than they&#8217;re worth.  If the goal is more agile development for certain components, the reliance upon multiple, separate Java classes &#8212; an interface class and an object factory, in the examples listed &#8212; to get a ten-line Jython script working, this seems suboptimal, both inefficient and not straightforwardly maintainable; it seems, to me and my Java-dumb ways, rather baroque.</p>
<p>Option 3 [<a href="http://wiki.python.org/jython/JythonMonthly/Articles/October2006/1" target="_blank">1</a>, <a href="http://www.jython.org/Project/userguide.html#using-jsr-223" target="_blank">2</a>] is more appealing than option 2 as it does not rely upon these other classes specifically for Jython code.  But the number of lines of Java code that must be wrapped around the Jython to get it working looks like overkill for the drop-dead simple scripts I&#8217;m writing &#8212; it might be easier, for instance, to just write the darn things in Java and be done with it.  (Did I just say that?)</p>
<h2><strong>Conclusions</strong></h2>
<p>Options 2 and 3 are similar as both involve embedding Jython code, or referencing files with Jython code, and interpreting the code within Java.  Generally, I worry that either option would obviate the benefit of agile Jython scripting because you wind up wrapping the code in so much Java.  I offer two disclaimers to counter my objections:</p>
<ol>
<li>Cleverer Java coders than myself could, I am almost certain, find ways to build abstractions (or abstractions of abstractions) to eliminate the &#8220;lines of code&#8221; and &#8220;many separate classes per Jython script&#8221; issues</li>
<li>The value of Jython in our Java environment increases proportionately with the complexity of the component &#8212; given the overhead, a short Java class seems easier and more straightforward to implement than a short embedded Jython script.  On the other hand, there&#8217;s value in embedding a Jython script that&#8217;d be an order of magnitude simpler than its Java analog.</li>
</ol>
<p>At least, that&#8217;s the state of my head right now re: getting Jython and Java to play nice.  If I make any breakthroughs or give up entirely, I&#8217;ll post follow-ups.</p>
<p>I am but a Java philistine and a Jython neophyte, so I remain humbly open-minded.  I would greatly appreciate comments, questions, corrections, smackdowns, sagacious advice, and so on.</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2008/04/11/jythons-and-javas-and-bears-oh-my/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rails Deployment</title>
		<link>http://lackoftalent.org/michael/blog/2008/03/26/rails-deployment/</link>
		<comments>http://lackoftalent.org/michael/blog/2008/03/26/rails-deployment/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 00:10:53 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
		
		<category><![CDATA[Rails]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/2008/03/26/rails-deployment/</guid>
		<description><![CDATA[
Deploying Rails (to Apache servers) is about to get much easier.  Hopefully.
 http://www.modrails.com/ 
Deployment has long been the bugaboo with Rails, so this should bode well for the framework.
]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:121"><!-- &nbsp; --></abbr>
<p>Deploying Rails (to Apache servers) is about to get much easier.  Hopefully.</p>
<p><a href="http://www.modrails.com/" target="_blank"> http://www.modrails.com/ </a></p>
<p>Deployment has long been the bugaboo with Rails, so this should bode well for the framework.</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2008/03/26/rails-deployment/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OAI-ORE ResourceMap for WordPress</title>
		<link>http://lackoftalent.org/michael/blog/2007/12/14/oai-ore-resourcemap-for-wordpress/</link>
		<comments>http://lackoftalent.org/michael/blog/2007/12/14/oai-ore-resourcemap-for-wordpress/#comments</comments>
		<pubDate>Fri, 14 Dec 2007 21:14:38 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
		
		<category><![CDATA[APIs]]></category>

		<category><![CDATA[Digital Libraries and Archives]]></category>

		<category><![CDATA[OAI-ORE]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/2007/12/14/oai-ore-resourcemap-for-wordpress/</guid>
		<description><![CDATA[
This is very rough, but here&#8217;s a WordPress plugin that provides a resource map for the aggregation of all posts within an installation of WordPress.  I&#8217;ll be working on this some more, but for now, it does appear to work and validate (as Atom).  Useful?  If so, I&#8217;ll zip it up and [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:111"><!-- &nbsp; --></abbr>
<p>This is very rough, but here&#8217;s a WordPress plugin that provides a <a href="http://lackoftalent.org/michael/blog/wp-content/plugins/oai-ore/rem.php" target="_blank">resource map</a> for the aggregation of all posts within an installation of WordPress.  I&#8217;ll be working on this some more, but for now, it does appear to work and validate (as Atom).  Useful?  If so, I&#8217;ll zip it up and commit it to the wp-plugins svn.</p>
<p>Note:<a href="http://inkdroid.org/journal/" target="_blank">Ed</a> reminds me that xsltproc can be used to transform the Atom-based resource map into RDF via GRDDL:</p>
<p><code>xsltproc http://www.openarchives.org/ore/atom-grddl.xsl http://lackoftalent.org/michael/blog/wp-content/plugins/oai-ore/rem.php</code></p>
<p><strong>Update:</strong> The plugin has its own <a href="http://lackoftalent.org/michael/blog/ore-wordpress-plug-in/" target="_blank">page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2007/12/14/oai-ore-resourcemap-for-wordpress/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OAI-PMH in XQuery</title>
		<link>http://lackoftalent.org/michael/blog/2007/09/25/oai-pmh-in-xquery/</link>
		<comments>http://lackoftalent.org/michael/blog/2007/09/25/oai-pmh-in-xquery/#comments</comments>
		<pubDate>Tue, 25 Sep 2007 17:48:44 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Digital Libraries and Archives]]></category>

		<category><![CDATA[OAI-PMH]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[XQuery]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/2007/09/25/oai-pmh-in-xquery/</guid>
		<description><![CDATA[
I seem to be having issues successfully submitting comments to certain WordPress blogs lately &#8212; or perhaps Akismet has finally decided to (rightly) classify my comments are spam?  Anyone know of any Firefox / WordPress comment bugs?  My comments seem to be submitted &#8212; there are no errors &#8212; and Firefox winds up [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:104"><!-- &nbsp; --></abbr>
<p><small>I seem to be having issues successfully submitting comments to certain WordPress blogs lately &#8212; or perhaps Akismet has finally decided to (rightly) classify my comments are spam?  Anyone know of any Firefox / WordPress comment bugs?  My comments seem to be submitted &#8212; there are no errors &#8212; and Firefox winds up on a link like &#8220;http://example.org/blog/foo-bar-whatever/#comment-12309&#8243;.  Any ideas?  At any rate, I&#8217;m left to comment via trackback for now.</small></p>
<p>Thanks for the nod, <a href="http://thedil.wordpress.com/2007/09/25/xquery-and-oai/" target="_blank">Winona</a>.  Hopefully you folks will get some good use out of the <a href="http://diglib2.princeton.edu/oss/wiki/xqOAI" target="_blank">XQuery-based OAI-PMH data provider</a> I&#8217;ve been working on.</p>
<p>I just want to clarify that only one small bit of the code is specific to X-Hive, and that&#8217;s a call to an extension that gets last-modified dates from the X-Hive service.  We do not reliably store this information in the metadata itself, and so I needed to go this route.  Some folks do store this in MODS or elsewhere in descriptive or administrative metadata.  It should be a two-line change to short-circuit this behavior (xhive-exts:last-update() is only invoked in two places, I believe).</p>
<p>I&#8217;m currently working on adding EAD support, modularizing things a bit more, and streamlining configuration.  resumptionTokens will come after that, I hope.</p>
<p>I&#8217;ll be interested to hear more of UVM&#8217;s implementation and how I can make this thing more useful to others.</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2007/09/25/oai-pmh-in-xquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Library Camp NYC 2007</title>
		<link>http://lackoftalent.org/michael/blog/2007/08/18/library-camp-nyc-2007/</link>
		<comments>http://lackoftalent.org/michael/blog/2007/08/18/library-camp-nyc-2007/#comments</comments>
		<pubDate>Sun, 19 Aug 2007 03:16:16 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
		
		<category><![CDATA[Conferences]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[Libraries]]></category>

		<category><![CDATA[LibraryCampNYC2007]]></category>

		<category><![CDATA[Semantic Web]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/2007/08/18/library-camp-nyc-2007/</guid>
		<description><![CDATA[
I proposed an NJ Library BarCamp some months ago, not realizing that efforts were already under way to do the same in NYC.  In retrospect, I&#8217;m glad I didn&#8217;t do anything to get things moving; I wouldn&#8217;t have pulled things together nearly as well as the NYC folks did.  The event was excellent. [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:101"><!-- &nbsp; --></abbr>
<p>I proposed an <a href="http://www.lackoftalent.org/michael/blog/2007/01/06/barcamp-for-nj-library-geeks/" target="_blank">NJ Library BarCamp</a> some months ago, not realizing that efforts were already under way to do the same in <a href="http://librarycampnyc.wikispaces.com/" target="_blank">NYC</a>.  In retrospect, I&#8217;m glad I didn&#8217;t do anything to get things moving; I wouldn&#8217;t have pulled things together nearly as well as the NYC folks did.  The event was excellent.  It was my first camp, and I&#8217;d definitely try another.  A big thanks to <a href="http://www.teachinglibrarian.org/weblog/blogger.html" target="_blank">Stephen Francoeur</a> <em>et al.</em></p>
<p>Here are the three sessions I attended, with links to the &#8220;official&#8221; wiki pages for summaries:</p>
<ul>
<li><a href="http://librarycampnyc.wikispaces.com/Solr+and+Lucene" target="_blank">Solr and Lucene</a> (session moderated by AIP&#8217;s Mark Matienzo and NYU&#8217;s Jason Casden) seem to be gaining momentum in the library world.  Having gone to the last Code4Lib conference, my head was already chock full of relevant tidbits, but the moderators did a great job of showing examples, evangelizing, and keeping the discussion going.</li>
<li><a href="http://librarycampnyc.wikispaces.com/Grid+Services" target="_blank">Grid Services</a> (session moderated by OCLC Openly Informatics&#8217; Eric Hellman) might have been very interesting if I hadn&#8217;t kept receiving phone calls from an insurance company.  I had to take the calls, and so this session was difficult to follow.  The basic idea was to think of networked library services like the power grid.  What would libraries want from the grid?  What would they be willing to contribute back?</li>
<li><a href="http://librarycampnyc.wikispaces.com/Semantic+Web" target="_blank">Semantic Web</a> (session moderated by NYU&#8217;s Corey Harper and CUNY&#8217;s Sunny Yoon) was the most widely attended session I went to: standing room only!  When I first added the topic to the wiki, I had no idea it would draw this many people.  Odd that I would suggest this topic since I had little to offer on the topic, so I gleaned an awful lot.  The discussion was spirited and, as you might expect, the RDF vs. microformats arguments flew fast and furious across the room.  I&#8217;m left wondering if the RDFa/GRRDL approach might not be a good middle-road between the &#8220;everything must be represented as RDF in a triplestore&#8221; camp and the &#8220;just embed microformats in xhtml&#8221; people.</li>
</ul>
<p>And now, the requisite name-dropping.  I got to reconnect with a bunch of people I hadn&#8217;t seen in a while, like Terry Catapano, <a href="http://bookism.org/open/" target="_blank">Jay Datema</a>, <a href="http://web2learning.net/" target="_blank">Nicole Engard</a>, <a href="http://theinfobabe.blogspot.com/" target="_blank">Valerie Forrestal</a>, Kevin Reiss, and Sunny Yoon.  And I got to meet LibLime&#8217;s Chris Cormack, NYPL&#8217;s <a href="http://www.epistemographer.com/" target="_blank">Josh Greenberg</a>, Corey Harper, <a href="http://thesecretmirror.com/" target="_blank">Mark Matienzo</a>, Jenkins Law&#8217;s RayAna Min Park, and Steven&#8217;s Tech&#8217;s Linda Scanlon, among other people.</p>
<p>It was about as good as any camp without kayaks and archery can be.  Check out some <a href="http://technorati.com/tag/librarycampnyc2007" target="_blank">more summaries</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2007/08/18/library-camp-nyc-2007/feed/</wfw:commentRss>
		</item>
		<item>
		<title>[1 of 10] Why Ruby on Rails?</title>
		<link>http://lackoftalent.org/michael/blog/2007/08/16/1-of-10-why-ruby-on-rails/</link>
		<comments>http://lackoftalent.org/michael/blog/2007/08/16/1-of-10-why-ruby-on-rails/#comments</comments>
		<pubDate>Fri, 17 Aug 2007 00:05:42 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[OOP]]></category>

		<category><![CDATA[Rails]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[code4lib]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/2007/08/16/1-of-10-why-ruby-on-rails/</guid>
		<description><![CDATA[
1. Ruby
I gave a little talk on Ruby at today&#8217;s VALE-NJ Technology Awareness Group meeting, and so I&#8217;m using my slides to finally kick off this vaporseries.
[Slides are embedded as Flash here if you're reading in an aggregator.]
It seemed to be taken pretty well, though it could easily have been dismissed as the fanboyish ravings [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:87"><!-- &nbsp; --></abbr>
<h2>1. Ruby</h2>
<p>I gave a little talk on Ruby at today&#8217;s <a href="http://meta.montclair.edu/tag.html" target="_blank">VALE-NJ Technology Awareness Group</a> meeting, and so I&#8217;m using my <a href="/michael/presentations/ruby-zen/" target="_blank">slides</a> to finally kick off this vaporseries.</p>
<p><object type="application/x-shockwave-flash" data="/michael/presentations/ruby-zen/Ruby-Zen.swf" width="600" height="400"><!--[if IE]><param name="movie" value="/michael/presentations/ruby-zen/Ruby-Zen.swf" />< ![endif]--></object><small>[Slides are embedded as Flash here if you're reading in an aggregator.]</small></p>
<p>It seemed to be taken pretty well, though it could easily have been dismissed as the fanboyish ravings of a neophyte Rubyist.  The folks from Rutgers were interested in having me come talk to their software architecture group, so it couldn&#8217;t have gone too badly, I suppose.</p>
<p>I need to stop cramming so much into presentations.  Rambling about reflection and OO at a speed the Micro-Machines Guy would envy isn&#8217;t the best way to share enthusiasm about Ruby.</p>
<p>The rest of the meeting was interesting: Ron Jantz, the Digital Library Architect at Rutgers, posed a number of challenging questions about trust, authenticity, and reliability in the digital realm; Terry Catapano, Special Collections Analyst at Columbia, exposed the lack of data model inherent in many current metadata schemas and suggested ontologies as a potential direction; and Jeffery Triggs, Applications Programmer at Rutgers, demonstrated the Java DjVu Viewer Applet for displaying DjVu-based images outside the DjVu browser plug-in.  Many good questions were asked, and new faces were in the crowd, so the future of TAG seems to be bright.</p>
<p>I&#8217;m hoping to follow up my Ruby talk with another on Rails.  That was my initial goal for today, but there was far too much to cover, knowing the audience was relatively new to both technologies.</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2007/08/16/1-of-10-why-ruby-on-rails/feed/</wfw:commentRss>
		</item>
		<item>
		<title>RESTful Fedora?</title>
		<link>http://lackoftalent.org/michael/blog/2007/06/19/restful-fedora/</link>
		<comments>http://lackoftalent.org/michael/blog/2007/06/19/restful-fedora/#comments</comments>
		<pubDate>Tue, 19 Jun 2007 23:40:26 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
		
		<category><![CDATA[APIs]]></category>

		<category><![CDATA[Fedora]]></category>

		<category><![CDATA[REST]]></category>

		<category><![CDATA[Repositories]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/2007/06/19/restful-fedora/</guid>
		<description><![CDATA[
Matt Zumwalt of MediaShelf, LLC has been hard at work thinking about how to make Fedora RESTful.  There is now a proposal on the Fedora wiki based on a PDF he sent to the fedora-commons-developers list.
It&#8217;s an interesting proposal.  I&#8217;ve read over the PDF version quickly but it does bear a closer read. [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:97"><!-- &nbsp; --></abbr>
<p>Matt Zumwalt of <a href="http://yourmediashelf.com/" target="_blank">MediaShelf, LLC</a> has been hard at work thinking about how to make <a href="http://fedora.info/" target="_blank">Fedora</a> <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" target="_blank">RESTful</a>.  There is now a <a href="http://www.fedora.info/wiki/index.php/RESTful_Fedora_Proposal" target="_blank">proposal on the Fedora wiki</a> based on a PDF he sent to the <a href="http://sourceforge.net/mailarchive/forum.php?forum_name=fedora-commons-developers" target="_blank">fedora-commons-developers list</a>.</p>
<p>It&#8217;s an interesting proposal.  I&#8217;ve read over the PDF version quickly but it does bear a closer read.  </p>
<p>Whether SOAP or REST is more appropriate for a Fedora API is something I&#8217;m not sure about, though I don&#8217;t mean to imply it&#8217;s an either/or situation.</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2007/06/19/restful-fedora/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
