<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">

<channel>
	<title>Quædam cuiusdam</title>
	<atom:link href="http://www.wallandbinkley.com/quaedam/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.wallandbinkley.com/quaedam</link>
	<description>What, you still read blogs?</description>
	<lastBuildDate>Fri, 12 Apr 2013 21:36:13 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by-nc/3.0/</creativeCommons:license>		<item>
		<title>Getting Serious with Amazon Glacier</title>
		<link>http://www.wallandbinkley.com/quaedam/2012/08_29_getting-serious-with-amazon-glacier.html</link>
		<comments>http://www.wallandbinkley.com/quaedam/2012/08_29_getting-serious-with-amazon-glacier.html#comments</comments>
		<pubDate>Thu, 30 Aug 2012 00:53:21 +0000</pubDate>
		<dc:creator>Peter Binkley</dc:creator>
				<category><![CDATA[Digital Preservation]]></category>

		<guid isPermaLink="false">http://www.wallandbinkley.com/quaedam/?p=650</guid>
		<description><![CDATA[After playing around last weekend, I&#8217;m ready to push real content up into Amazon Glacier for long-term preservation. I&#8217;ve worked up an Ant script to do the work, and I&#8217;ve posted it on GitHub as pbinkley/glacier-ant-bagit. Here&#8217;s what I&#8217;m doing: work at the directory level: each Glacier archive will be a tar file containing the [...]]]></description>
				<content:encoded><![CDATA[<abbr class="unapi-id" title="http://www.wallandbinkley.com/quaedam/?p=650"><!-- &nbsp; --></abbr>
<p>After <a href="/quaedam/2012/08_25_playing-with-amazon-glacier.html">playing around</a> last weekend, I&#8217;m ready to push real content up into Amazon Glacier for long-term preservation. I&#8217;ve worked up an Ant script to do the work, and I&#8217;ve posted it on GitHub as <a href="https://github.com/pbinkley/glacier-ant-bagit">pbinkley/glacier-ant-bagit</a>.</p>
<p>Here&#8217;s what I&#8217;m doing:</p>
<ul>
<li>work at the directory level: each Glacier archive will be a tar file containing the contents of a single directory.</li>
<li>package the content with <a href="https://wiki.ucop.edu/display/Curation/BagIt">Bagit</a> so that it will be self-verifying when (if ever) I download it again.</li>
<li>keep metadata locally: at the moment the script maintains a CSV file, and eventually I&#8217;ll load that into a database. It also saves the bag manifest to provide a full list of files.</li>
</ul>
<p>I&#8217;m using a new command-line interface to do the uploading: <a href="https://github.com/carlossg/glacier-cli">carlossg/glacier-cli</a>. I liked <a href="http://www.glacierfreezer.com/">glacierFreezer</a>&#8216;s use of SimpleDB to store file metadata in Amazon&#8217;s cloud, but this package at the moment only connects to the us-east-1 zone, and I wanted to use something a little closer to home. The code of glacierFreezer isn&#8217;t currently open, either.</p>
<p>It&#8217;s ready to go, so I&#8217;ll let some a large job run overnight and see how it works out.</p>
<hr />
<p><em>Update (next day)</em></p>
<p><div id="attachment_654" class="wp-caption alignright" style="width: 160px"><a href="http://www.wallandbinkley.com/quaedam/2012/08_29_getting-serious-with-amazon-glacier.html/05-05a-2" rel="attachment wp-att-654"><img src="http://www.wallandbinkley.com/quaedam/wp-content/2012/08/05-05A-2-150x104.png" alt="" title="05-05A-2" width="150" height="104" class="size-thumbnail wp-image-654" /></a><p class="wp-caption-text">Gary and Dave</p></div>The script is working on the Ubuntu family fileserver. Overnight it uploaded 70 directories with almost 3gb of stuff (the limiting factor being, obviously, our home internet connection). I fixed a couple of bugs; if you&#8217;ve taken a copy from Github, you should do a pull.</p>
<p>So: I&#8217;m on the hook for 3¢/month so far, in perpetuity, and 36¢ if I ever need to retrieve those directories (if I go over my 5%/month retrieval allowance). In exchange, the risk of loss of those old images has been reduced &#8230; by how much? How could you calculate that? I maintain four local copies already, three at home and one in my office, but a fire could easily bring me down to depending on a single spindle; and I&#8217;m getting older and will become increasingly likely to make mistakes with this stuff. Eventually these objects will become a digital inheritance. The more serious dangers they must survive to get through the next fifty years are probably those of human error, indifference, and absence of the right technical skills at the right moment. Multiplying copies onto different platforms, beyond the number required by a continuity-of-service calculation, makes sense: creating impediments to managing this stuff comprehensively reduces the potential consequences of massive failures of management. I hope.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wallandbinkley.com/quaedam/2012/08_29_getting-serious-with-amazon-glacier.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Playing with Amazon Glacier</title>
		<link>http://www.wallandbinkley.com/quaedam/2012/08_25_playing-with-amazon-glacier.html</link>
		<comments>http://www.wallandbinkley.com/quaedam/2012/08_25_playing-with-amazon-glacier.html#comments</comments>
		<pubDate>Sat, 25 Aug 2012 20:17:35 +0000</pubDate>
		<dc:creator>Peter Binkley</dc:creator>
				<category><![CDATA[Digital Preservation]]></category>

		<guid isPermaLink="false">http://www.wallandbinkley.com/quaedam/?p=626</guid>
		<description><![CDATA[This week Amazon released its new digital preservation platform Glacier. It is similar to the S3 storage service, but optimized for long-term, low-access storage. You pay a penny per GB per month, and you accept that access will be slow (four hours or more) and expensive (12 cents/GB, with free access to 5% of your [...]]]></description>
				<content:encoded><![CDATA[<abbr class="unapi-id" title="http://www.wallandbinkley.com/quaedam/?p=626"><!-- &nbsp; --></abbr>
<p>This week Amazon released its new digital preservation platform <a href="http://aws.amazon.com/glacier/">Glacier</a>. It is similar to the S3 storage service, but optimized for long-term, low-access storage. You pay a penny per GB per month, and you accept that access will be slow (four hours or more) and expensive (12 cents/GB, with free access to 5% of your content each month). I&#8217;ve been storing family digital assets on S3 as a remote backup, and Glacier will save me a few bucks each month. I&#8217;ll only need to access the content if my local backups fail, so I can accept the barriers to access. And, of course, at work we&#8217;re interested in low-cost off-site replication. So, let&#8217;s check it out.</p>
<p>The initial offering from Amazon has a web management console and Java and .NET SDKs and a REST API, but no user-friendly client. Third parties are starting to release clients, though, and there&#8217;s enough there to work with. Within a few days there will be more.</p>
<p>Getting started is easy: just activate Glacier in your AWS account. The data model is simple: &#8220;vaults&#8221; contain &#8220;archives&#8221;, which as far as I&#8217;m concerned are simply files. You can create vaults through the web console and tie them into Amazon&#8217;s SNS notification service, but that&#8217;s as far as you can get; to upload a file you need client. </p>
<p>I started with the <a href="http://www.glacierfreezer.com/">glacierFreezer</a> command-line client, which is based on the Java SDK. It makes use of an Amazon <a href="http://aws.amazon.com/simpledb/">SimpleDB</a> domain to store information about your archives, so you need to create one for it first. Then gather your access key and secret key (from the &#8220;Security Credentials&#8221; tab in the web console), and run it:</p>
<p><code>java -jar glacierFreezer.jar &lt;accessKey&gt; &lt;secretKey&gt; &lt;simpleDbDomainName&gt; &lt;vaultName&gt; &lt;fileName&gt;<!--formatted--></code></p>
<p>Up the file goes, and the results are stored by glacierFreezer in the SimpleDB domain:</p>
<p><code>&lt;Item&gt;<br />
   &lt;Name&gt;readme-pbinkley.txt&lt;/Name&gt;<br />
   &lt;Attribute&gt;<br />
      &lt;Name&gt;sizeBytes&lt;/Name&gt;<br />
      &lt;Value&gt;36&lt;/Value&gt;<br />
   &lt;/Attribute&gt;<br />
   &lt;Attribute&gt;<br />
      &lt;Name&gt;archiveId&lt;/Name&gt;<br />
      &lt;Value&gt;E4lnahK_rbGeenbN07Yc3Myl3FLuJ6IhlmnLSHeAlYmfilRiiJ-3aCCs8C2lPgocUvmBIYpY2lIR1tWmVfXeji73WJrHKqIw9snU8ADWBkPO92Dp688E-mMyLCTMT-s1A7_D2bxxOQ&lt;/Value&gt;<br />
   &lt;/Attribute&gt;<br />
   &lt;Attribute&gt;<br />
      &lt;Name&gt;fileName&lt;/Name&gt;<br />
      &lt;Value&gt;readme-pbinkley.txt&lt;/Value&gt;<br />
   &lt;/Attribute&gt;<br />
   &lt;Attribute&gt;<br />
      &lt;Name&gt;localDateTime&lt;/Name&gt;<br />
      &lt;Value&gt;Thu Aug 23 12:36:42 MDT 2012&lt;/Value&gt;<br />
   &lt;/Attribute&gt;<br />
&lt;/Item&gt;<!--formatted--></code></p>
<p>That&#8217;s a lot of information you&#8217;re going to need to keep track of, because Glacier won&#8217;t keep track of it for you. If you want to be able to restore an archive to a local file with the same name as it had before you uploaded it, you need to remember the mapping of the archiveID to the fileName.</p>
<p>At this point I was blocked again, since glacierFreezer doesn&#8217;t yet have the functionality to do anything with an archive in a vault (give it a few days). The day after the upload, when Glacier had done its daily job of generating inventories, I could at least see in the web console that the vault had been populated:</p>
<p><a href="http://www.wallandbinkley.com/quaedam/2012/08_25_playing-with-amazon-glacier.html/screen-shot-2012-08-25-at-aug-25-1-41pm-1-41-11-pm" rel="attachment wp-att-640"><img src="http://www.wallandbinkley.com/quaedam/wp-content/2012/08/Screen-Shot-2012-08-25-at-Aug-25-1.41PM-1.41.11-PM.png" alt="" title="Screen Shot 2012-08-25 at ~ Aug 25 ~ 1.41PM 1.41.11 PM" width="980" height="183" class="aligncenter size-full wp-image-640" /></a></p>
<p>We&#8217;ve got an archive! The file I uploaded was only a few bytes, so the 32kb size presumably represents the block size of Glacier&#8217;s file system. </p>
<p>This morning I looked again for Glacier clients, and found that the <a href="http://nodejs.org/">Node.js</a> project <a href="https://github.com/appsattic/node-awssum">node-awssum</a> had added Glacier to the list of supported Amazon APIs. I&#8217;ve been meaning to play with Node.js for a while so I jumped on it. I installed Node.js and its package manager npm according to <a href="http://shapeshed.com/setting-up-nodejs-and-npm-on-mac-osx/">these instructions</a>, then installed node-awssum (and the required package fmt) with a lovely simple</p>
<p><code>npm install fmt<br />
npm -d install awssum</code></p>
<p>The Glacier examples that come with node-awssum cover fetching vault descriptions and such, but not the job-oriented tasks that I need at this point. To fetch an inventory of a vault, or an archive from that vault, you need to initiate a job and wait for Glacier to let you know it&#8217;s done (which they say takes four hours). Not to worry, though, node-awssum is easy to work with. I copied one of the examples and created a script &#8220;inventory-retrieval.js&#8221; like this:</p>
<p><code>var fmt = require(&#039;fmt&#039;);<br />
var awssum = require(&#039;awssum&#039;);<br />
var amazon = awssum.load(&#039;amazon/amazon&#039;);<br />
var Glacier = awssum.load(&#039;amazon/glacier&#039;).Glacier;</p>
<p>var accessKeyId     = &#039;xxxxxxxxxxxxxxxx&#039;;<br />
var secretAccessKey = &#039;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&#039;;<br />
var awsAccountId    = &#039;xxxxxxxxxxxxx&#039;; // note: omit hyphens</p>
<p>var glacier = new Glacier({<br />
    &#039;accessKeyId&#039;     : accessKeyId,<br />
    &#039;secretAccessKey&#039; : secretAccessKey,<br />
    &#039;awsAccountId&#039;    : awsAccountId, // required<br />
    &#039;region&#039;          : amazon.US_EAST_1<br />
});</p>
<p>fmt.field(&#039;Region&#039;,          glacier.region()                              );<br />
fmt.field(&#039;EndPoint&#039;,        glacier.host()                                );<br />
fmt.field(&#039;AccessKeyId&#039;,     glacier.accessKeyId().substr(0,3) + &#039;...&#039;     );<br />
fmt.field(&#039;SecretAccessKey&#039;, glacier.secretAccessKey().substr(0,3) + &#039;...&#039; );<br />
fmt.field(&#039;AwsAccountId&#039;,    glacier.awsAccountId()                        );</p>
<p>glacier.InitiateJob({ VaultName : &#039;test&#039;, Type: &#039;inventory-retrieval&#039; }, function(err, data) {<br />
    fmt.msg(&quot;describing vault - expecting success&quot;);<br />
    fmt.dump(err, &#039;Error&#039;);<br />
    fmt.dump(data, &#039;Data&#039;);<br />
});<!--formatted--></code></p>
<p>I run that and get the following output:</p>
<p><code>$ node inventory-retrieval.js<br />
Region               : us-east-1<br />
EndPoint             : glacier.us-east-1.amazonaws.com<br />
AccessKeyId          : AKI...<br />
SecretAccessKey      : 3HO...<br />
AwsAccountId         : xxxxxxxxxxxxxxx<br />
describing vault - expecting success<br />
Error : null<br />
Data : { StatusCode: 202,<br />
  Headers:<br />
   { &amp;#039;x-amzn-requestid&amp;#039;: &amp;#039;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;#039;,<br />
     location: &amp;#039;/xxxxxxxxxxxxxxx/vaults/test/jobs/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;#039;,<br />
     &amp;#039;x-amz-job-id&amp;#039;: &amp;#039;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;#039;,<br />
     &amp;#039;content-type&amp;#039;: &amp;#039;application/json&amp;#039;,<br />
     &amp;#039;content-length&amp;#039;: &amp;#039;2&amp;#039;,<br />
     date: &amp;#039;Sat, 25 Aug 2012 18:36:32 GMT&amp;#039; },<br />
  Body: &amp;#039;&amp;#039; }</code></p>
<p>So, I&#8217;ve successfully created the job. And now I wait, savoring the full experience of Glacier&#8217;s slow retrieval which is going to save me so much money compared to S3. I&#8217;ll update this post when I get Glacier&#8217;s notification that it&#8217;s complete. Meanwhile, I&#8217;ll contemplate <a href="http://blog.dshr.org/2012/08/amazons-announcement-of-glacier.html">David Rosenthal&#8217;s analysis of Glacier&#8217;s costs</a>.</p>
<hr />
<p><em>Update 1</em></p>
<p>The job took just over four hours; I didn&#8217;t get a notification (have to look into that, probably my misconfiguration) but the job description shows the time. The next step is retrieve the job output, and it turns out that node-awssum hasn&#8217;t finished this function: it generates the uri for a job description rather than the job output. The code was easy to patch so I was able to retrieve the inventory:</p>
<p><code><br />
  Body:<br />
   { VaultARN: &#039;arn:aws:glacier:us-east-1:xxxxxxxxxx:vaults/test&#039;,<br />
     InventoryDate: &#039;2012-08-24T13:54:52Z&#039;,<br />
     ArchiveList:<br />
      [ { ArchiveId: &#039;E4lnahK_rbGeenbN07Yc3Myl3FLuJ6IhlmnLSHeAlYmfilRiiJ-3aCCs8C2lPgocUvmBIYpY2lIR1tWmVfXeji73WJrHKqIw9snU8ADWBkPO92Dp688E-mMyLCTMT-s1A7_D2bxxOQ&#039;,<br />
          ArchiveDescription: &#039;Archived file readme-pbinkley.txt Thu Aug 23 12:36:41 MDT 2012&#039;,<br />
          CreationDate: &#039;2012-08-23T18:36:42Z&#039;,<br />
          Size: 36,<br />
          SHA256TreeHash: &#039;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&#039; } ] } }</code></p>
<p>So it does have my original file name, but only in a text description. This response gives me the archive ID of my file (which I had anyway because glacierFreezer saved it for me &#8211; nice to see that they agree). Just to close the loop I&#8217;ve initiated the archive-retrieval job.</p>
<hr />
<p><em>Update 2</em></p>
<p>I posted an issue about the problem with get-job-output in node-awssum. Heard a couple of hours later that it&#8217;s been fixed in master; tried it, it works. God I love open-source.</p>
<hr />
<p><em>Update 3 (next day)</em></p>
<p>The archive retrieval job finished after 4 1/2 hours, and I can retrieve my file. I get a sha256 hash in the header to let me verify the content. For some reason Amazon doesn&#8217;t pay attention to my byte range request if I try to retrieve less than the whole file; perhaps it&#8217;s because the file is so short, just 36 bytes. I&#8217;ll try that again when I&#8217;ve uploaded something bigger. And it turns out the notifications were coming through to my email after all: dunno how I overlooked them. So all is good.</p>
<p>It&#8217;s easy to imagine a full-scale retrieval process that would manage the initiation of retrieval jobs, monitor the notification stream (which uses Amazon&#8217;s <a href="http://aws.amazon.com/sns/">Simple Notification Service</a> and can therefore push notifications using a variety of protocols), and fetch the output when it receives notification that a job is ready. Amazon says that output is available for at least 24 hours after the job completes, so you would want to manage the chunking of jobs in such a way as to avoid retrieving more content than you can download in a day, taking into account the somewhat <a href="http://www.wired.com/wiredenterprise/2012/08/glacier/">convoluted calculations</a> required to avoid overrunning your 5% monthly free download allowance. </p>
<p>I&#8217;m currently using S3 for offsite backup of my personal digital archive, and moving it to Glacier is a no-brainer. I don&#8217;t expect ever to retrieve this stuff, since I keep multiple local copies: it&#8217;s fire insurance. After a disaster, I&#8217;d be willing to pay the download costs to retrieve the family photos. In my professional role (where this is all speculative), I&#8217;d take David Rosenthal&#8217;s concerns seriously and avoid lock-in: as long as we&#8217;ve got local copies, we could move our content to a competitor of Amazon&#8217;s without incurring the retrieval costs. </p>
<p>Finally, my first experience with node.js has been great, and I&#8217;ll definitely be putting some time into learning more.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wallandbinkley.com/quaedam/2012/08_25_playing-with-amazon-glacier.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Contributing a Book to Internet Archive</title>
		<link>http://www.wallandbinkley.com/quaedam/2012/03_04_contributing-a-book-to-internet-archive.html</link>
		<comments>http://www.wallandbinkley.com/quaedam/2012/03_04_contributing-a-book-to-internet-archive.html#comments</comments>
		<pubDate>Sun, 04 Mar 2012 23:27:23 +0000</pubDate>
		<dc:creator>Peter Binkley</dc:creator>
				<category><![CDATA[Digitization]]></category>

		<guid isPermaLink="false">http://www.wallandbinkley.com/quaedam/?p=592</guid>
		<description><![CDATA[Yesterday I ran across an interesting booklet in my grandparents&#8217; papers; and noting that it was published before 1977 without a copyright notice and was therefore in the public domain in the US, and having an interest in user-contributed items for digitization projects at the moment, I thought I would scan it and contribute it [...]]]></description>
				<content:encoded><![CDATA[<abbr class="unapi-id" title="http://www.wallandbinkley.com/quaedam/?p=592"><!-- &nbsp; --></abbr>
<p><div id="attachment_608" class="wp-caption alignright" style="width: 205px"><a href="http://www.wallandbinkley.com/quaedam/2012/03_04_contributing-a-book-to-internet-archive.html/rabinovitch_0009" rel="attachment wp-att-608"><img src="http://www.wallandbinkley.com/quaedam/wp-content/2012/03/rabinovitch_0009-195x300.jpg" alt="" title="Page 8" width="195" height="300" class="size-medium wp-image-608" /></a><p class="wp-caption-text">Page 8, with photograph by Frances Binkley</p></div>Yesterday I ran across an interesting booklet in my grandparents&#8217; papers; and noting that it was published before 1977 without a copyright notice and was therefore in the public domain in the US, and having an interest in user-contributed items for digitization projects at the moment, I thought I would scan it and contribute it to the Internet Archive. After a hasty reading of the FAQ I proceeded to mess up the process, so I thought I&#8217;d document it here.</p>
<p>The booklet is a prospectus for an art photography course offered by the New York photographer <a href="http://broadway.cas.sc.edu/index.php?action=showPhotographer&#038;id=43">Rabinovitch</a> (who went by his surname alone). My grandmother was a student of his in 1938, and a photograph of hers is on p.8, one of the ones I posted on <a href="http://www.wallandbinkley.com/rcb/2012/02_04_frances-binkleys-photography.html">my other blog</a>. The booklet is in <a href="http://www.worldcat.org/oclc/80500948">WorldCat</a> (from the Getty) and <a href="http://books.google.ca/books/about/Rabinovitch_School_and_Workshop_of_Art_P.html?id=YoSfGwAACAAJ&#038;redir_esc=y">Google Books</a>, but hasn&#8217;t yet been digitized, as far as I found.</p>
<p>My item was a 32-page booklet with covers, so 36 page images in all. To upload a scanned book, you need each page in a separate image. I scanned two-page openings at 300dpi, 24 bit colour, saved as tiffs. I cropped each one to the two-page spread, then used ImageMagick to split each one into left and right pages:</p>
<p><code>convert -crop 50%x100% +repage Rabinovitch-00.tif output/Rabinovitch-00-%d.tif</code></p>
<p>(That prodused output/Rabinovitch-00-1.tif and output/Rabinovitch-00-2.tif). Having tested it, I ran a quick awk job to generate a script to split all the images:</p>
<p><code>ls -1 *.tif | awk -F. &#039;{ print &quot;convert -crop 50%x100% +repage &quot; $1 &quot;.tif output/&quot; $1 &quot;-%d.tif&quot; ;}&#039; &gt; split.sh<!--formatted--></code></p>
<p>I had scanned the cover as a two-page spread, so I had to rename the image of the back cover to put it at the end of the sequence: filename sort-order seems to determine the order of the images in the final product. Finally (and this is the bit I missed the first time), I combined all the tiffs into a pdf:</p>
<p><code>convert Rabinovitch-*.tif rabinovitch.pdf</code></p>
<p>Now I had a 730mb pdf. Off to the Internet Archive <a href="http://www.archive.org/contribute.php">Contribution</a> page, where I logged in with the account I created a while ago when I uploaded a video. Click the &#8220;Upload&#8221; button at the upper right to get to the main uploading page, then click &#8220;Share&#8221; at the upper right, and select your pdf. A flash app uploads it; it took a couple of hours on my home connection. Meanwhile you have a form to fill in. It&#8217;s more oriented to a/v uploads than to books, and you don&#8217;t actually get to tell it what you&#8217;re uploading, but the process will figure it out in the end. You can fill in a title (which gets converted into an Internet Archive ID) and a description and an author, and that&#8217;s it for metadata. You can also apply a license. If you choose to dedicate your item to the public domain, you&#8217;ll be given the option in the next step to mark it as already in the public domain, which was appropriate for my item. </p>
<p>When the upload completed I submitted the form, and after a minute or so it told me my item was available and gave me a url. And it was available, but it hadn&#8217;t finished processing yet: all I could get was the original pdf that I had uploaded. There is a link on the upload page to a <a href="http://www.archive.org/catalog.php?justme=1">list of your unfinished tasks</a>: go there, and you&#8217;ll see the processing task still running. Click to see a log of the ongoing processing (<a href='http://www.wallandbinkley.com/quaedam/2012/03_04_contributing-a-book-to-internet-archive.html/rabinovitchlog' rel='attachment wp-att-593'>here&#8217;s mine</a>, after completion). You can see which node in Internet Archive&#8217;s storage array received and processed the item, the job priority (-1: hey, I don&#8217;t mind), the generating of the xml (including the assignment of an <a href="https://wiki.ucop.edu/display/Curation/ARK">ARK</a>, replication of the files to another node with rsync, and finally the generation of the various derivatives: OCR, images, pdfs, etc., with the results being rsynced to the mirror node. The whole process took a little more than ten minutes. </p>
<p>The outcome is <a href="http://www.archive.org/details/RabinovitchProspectus1938">http://www.archive.org/details/RabinovitchProspectus1938</a>. It&#8217;s in the <a href="http://www.archive.org/details/opensource">Community Texts</a> collection (formerly known as the Open Source Collection), and it has the full Internet Archive treatment. The photographs in the offset-print original have been nicely descreened, and look quite good in the book-viewer presentation. All it lacked was an Open Library page, so I activated my mad cataloguing skillz and <a href="http://openlibrary.org/works/OL16533556W/Rabinovitch_School_and_Workshop_of_Art_Photography">created one</a>. </p>
<p>I also have the option to edit this item; this brings up another form with more fields, including date, notes, and rights &#8212; things I couldn&#8217;t fill in from the upload screen. I can also modify the files if I like.</p>
<p>And here&#8217;s the result, all ready to help some future historian of the Depression-era New York photography scene decide whether they need a trip to the Getty:</p>
<p><iframe src='http://www.archive.org/stream/RabinovitchProspectus1938/rabinovitch?ui=embed#mode/2up' width='600px' height='430px' frameborder='0' ></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wallandbinkley.com/quaedam/2012/03_04_contributing-a-book-to-internet-archive.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A Walk with Love and Data</title>
		<link>http://www.wallandbinkley.com/quaedam/2011/10_26_a-walk-with-love-and-data.html</link>
		<comments>http://www.wallandbinkley.com/quaedam/2011/10_26_a-walk-with-love-and-data.html#comments</comments>
		<pubDate>Thu, 27 Oct 2011 03:22:42 +0000</pubDate>
		<dc:creator>Peter Binkley</dc:creator>
				<category><![CDATA[Libraries]]></category>

		<guid isPermaLink="false">http://www.wallandbinkley.com/quaedam/?p=433</guid>
		<description><![CDATA[Last week I attended the annual Access conference, this time in Vancouver with the theme &#8220;The Library is Open&#8221;. It’s always an overstimulating conference, but this year I was made drunk with the confluence of fresh thoughts about things I care about more and more, the intersections of the presentations with things I’ve been thinking [...]]]></description>
				<content:encoded><![CDATA[<abbr class="unapi-id" title="http://www.wallandbinkley.com/quaedam/?p=433"><!-- &nbsp; --></abbr>
<p>Last week I attended the annual <a href="http://access2011.library.ubc.ca/" title="Access 2011">Access conference</a>, this time in Vancouver with the theme &#8220;The Library is Open&#8221;. It’s always an overstimulating conference, but this year I was made drunk with the confluence of fresh thoughts about things I care about more and more, the intersections of the presentations with things I’ve been thinking about in other contexts, and the engaging personalities. And there was beer. For a politically naive introvert, it was too much too quick. This posting is a preliminary and personal attempt sort it all out.</p>
<p><a href="http://www.wallandbinkley.com/quaedam/2011/10_26_a-walk-with-love-and-data.html/hackfest" rel="attachment wp-att-439"><img src="http://www.wallandbinkley.com/quaedam/wp-content/2011/10/hackfest-300x52.png" alt="Tweet: @calvinmah On my way to #access2011 hotel to escort people to #hackfest" title="Tweet: @calvinmah On my way to #access2011 hotel to escort people to #hackfest" width="300" height="52" class="alignright size-medium wp-image-439" /></a></p>
<p class="dropcap">It started with <a href="http://access2011.library.ubc.ca/hackfest/">Hackfest</a>, where the geeks get together to spend a day coding up some interesting project from the list of submitted ideas, or from their own fertile and over-caffeinated brains. I had put in an idea for a personal digital archive, called “Spalatum” after the Roman fortress/palace that formed the matrix for the medieval city of <a href="http://en.wikipedia.org/wiki/Split,_Croatia#Antiquity">Split</a> in Croatia. When the Roman architects moved out and stopped maintaining the place, the locals moved in and kept the town going in their own way, subdividing the Roman buildings or putting up small houses against the old walls. Diocletian&#8217;s mausoleum became the cathedral. In the same way, I want a digital archive that can continue to be used and preserved by non-techie heirs after the geek who built it is gone. My idea wasn’t taken up by any of the groups (but I mean to get back to it). I worked on a <a href="http://linkeddata.org/">Linked Open Data</a> project, playing with the <a href="http://www.assembla.com/spaces/silk/wiki/Silk_Workbench">Silk Workbench</a> application to enhance RDF data by matching fields with an external <a href="http://www.w3.org/TR/rdf-sparql-query/">SPARQL</a>-enabled source like <a href="http://dbpedia.org/About">dbpedia</a>. It was fun and we learned a lot about Silk but didn’t get very far with our data.</p>
<p>That evening a bunch of the hackers went out to dinner at a Japanese/Korean place, then headed off to find some good beer. On the way we picked up Bess Sadler, who had (typically) found a medieval reenactment operation nearby and spent the last hour playing with swords.
<div class="photo"><a href="http://www.flickr.com/photos/bigdpix/6265660435/" title="IMG_2710 by BigD, on Flickr"><img src="http://farm7.static.flickr.com/6038/6265660435_9e405d2c0b_m.jpg" width="240" height="160" alt="IMG_2710"/></a><br />Bess (photo: BigD)</div>
<p> Bess is a talented developer, and surrenders to laughter more completely than anyone I know: always a welcome addition. We ended up at the Steamworks Brewery and I talked with Bess and the dangerous-looking Nick Ruest, black locks spreading in all directions, gorgeously tattooed up one arm. We talked about working conditions at our various institutions. The passion that keeps us interested in the stuff we do isn’t always nourished in the workplace, unfortunately.</p>
<p>Ended up in the hospitality suite to taste a selection of craft beers, as prescribed by the magisterial man-mountain of San Diego. </p>
<p><a href="http://www.wallandbinkley.com/quaedam/2011/10_26_a-walk-with-love-and-data.html/keynote" rel="attachment wp-att-440"><img src="http://www.wallandbinkley.com/quaedam/wp-content/2011/10/keynote-300x75.png" alt="@bohyunkim #access2011 keynote is excellent in describing where libraries are standing now - on the border b/w commons &amp; increasing privatization" title="@bohyunkim #access2011 keynote is excellent in describing where libraries are standing now - on the border b/w commons &amp; increasing privatization" width="300" height="75" class="alignright size-medium wp-image-440" /></a></p>
<p class="dropcap">The conference proper opened the next morning with the keynote by Jon Beasley-Murray of UBC. He started with Borges’ vision of the infinite library and the fertility and sufficiency of the library as a public good. He developed this into a call to the barricades to defend the commons against corporate encroachment, holding that the domination of formerly open online space by closed systems like Apple’s and Facebook’s is precisely parallel to the early modern enclosures like the <a href="http://en.wikipedia.org/wiki/Highland_Clearances">Highland clearances</a>. (The displaced Highlanders came to Canada: what new lands will the refugees from Facebook colonize? <a href="https://joindiaspora.com/">Diaspora</a> may be aptly named indeed.) He put it in Marxist terms: what the corporations are doing is <a href="http://en.wikipedia.org/wiki/Primitive_accumulation_of_capital">&#8220;primitive accumulation&#8221;</a>, which he preferred to call &#8220;accumulation through dispossession&#8221; (to avoid the implication that it only happened in the distant past). Their wealth derives directly from the resources which they have seize from the public domain for their own use. A roomful of librarians was on his side the whole way: information wants to be free, after all. He encouraged us to engage in “massive projects of common productivity” such as Wikipedia. I wondered wimpishly whether the leftist framing of the question would attach it to polarizing issues in right-leaning Alberta (where talk about protecting the commons from corporate exploitation is likely to be seen by the establishment as a coded attack on the oil industry), and asked a question about whether the idea could be framed in a non-partisan way. Beasley-Murray helpfully put it in terms of the university’s role in fostering social critique, regardless of party. “There are no saints here”: everyone is subject to critical investigation.</p>
<p>I was therefore thinking about democracy when the next presentation started. This was Jer Thorp’s dazzling tour through the data visualizations he does for the New York Times and some outside projects such as the 9/11 memorial. This talk was emotionally fraught for me, since it was the David Binkley Lecture, in honour of <a href="http://www.wallandbinkley.com/quaedam/2005/03_06_dave-binkley.html">my brother Dave</a>, who died in 2005. The idea was Gary Gibson’s, and each year the lecture is generously supported by <a href="http://www.gibsonlibraryconnections.ca/">Gibson Library Connections</a>; my only contribution was to suggest that it be used to bring in a speaker from outside the library world. Dave was a regular at Access in the early days, and after I came into the library biz he and I overlapped at a few Accesses. (I treasure the time he came to a symposium in Edmonton on the future of the ILS, and <em>he</em> was being introduced as <em>my</em> brother for a change.)</p>
<p><a href="http://www.wallandbinkley.com/quaedam/2011/10_26_a-walk-with-love-and-data.html/cascadeview" rel="attachment wp-att-441"><img src="http://www.wallandbinkley.com/quaedam/wp-content/2011/10/cascadeview-300x72.png" alt="Tweet: Tweet: @cIRcle_UBC Cascade view of &quot;But Will It Make You Happy?&quot; - seeing the story (conversation) actually unfolding from different views #Access2011" title="Tweet: @cIRcle_UBC Cascade view of &quot;But Will It Make You Happy?&quot; - seeing the story (conversation) actually unfolding from different views #Access2011" width="300" height="72" class="alignright size-medium wp-image-441" /></a></p>
<p>The visualizations were dazzling and joyful. One was an aggregation of tweets that include the phrase <a href="http://blog.blprnt.com/blog/blprnt/goodmorning">“good morning”</a>, represented as bouncing blocks on a rotating globe. You see the wave of pogoing cubes advance around the planet, following the sun, as people wake up and tweet. Another, more elaborate one was <a href="http://nytlabs.com/protect/projects/cascade.html">Cascade</a>: a real-time tracker of social-media responses to NYT articles — not just tweets but also url-compressions and decompressions — represented in three dimensions. The most moving visualizations, though, were the ones that brought things down to the personal level. The first was a visualization of your movements based on the GPS data that iPhones were found to have been storing; the other was a <a href="http://www.newsmemorymaps.com/">timeline of NYT articles</a> against which you could map the phases of your life (childhood, college, marriage, etc.), creating links to stories that were important to you. Thorp described the transition from irritation at another big-brother intrusion into his privacy with the iPhone scandal, to fascination with reliving a year of his life via the GPS traces. He called it “embodied history”. He and others set up a site where you can upload your trace (<a href="https://openpaths.cc/">openpaths.cc</a>) and make it available as a dataset to researchers if you choose. From the default position of “that’s too private to share” he moved to “under some circumstances, I’ll share that, even though it&#8217;s private”. </p>
<p class="dropcap">From Thorp’s talk and others over the next two days I learned of lots of exciting new tools that I want to master, or master more fully:</p>
<ul>
<li><a href="http://processing.org/">Processing</a> and <a href="http://processingjs.org">processing.js</a></li>
<li><a href="http://code.google.com/p/google-refine/">Google Refine</a></li>
<li><a href="http://www.google.com/fusiontables/Home/">Google Fusion Tables</a></li>
<li><a href="http://www.assembla.com/spaces/silk/wiki/Silk_Workbench">Silk</a></li>
<li><a href="http://mint.image.ece.ntua.gr/redmine/projects/mint/wiki">MINT</a></li>
<li><a href="http://mbostock.github.com/d3/">D3</a></li>
</ul>
<p>They all have to do with data normalization and visualization. They make me long to become a data wizard, able to make datasets dance the way Thorp does. The point, though, is to make data tell true stories. It took me back to palaeography classes with Father <a href="http://en.wikipedia.org/wiki/Leonard_Boyle">Leonard Boyle</a> (later Prefect of the Vatican Library). The duty of the philologist, Father Boyle said, was to make an ancient document speak as fully and as truthfully as possible about the context in which it was created. There was an ethic involved: the relationship between me and a medieval scribe whose every pen-stroke I could trace but about whom I knew nothing else was real, and I owed the same respect for his or her personhood that I owed anyone I met on the street. The new technologies are just as capable of telling compelling lies as compelling truths, and they are therefore covered by the same scholarly and personal (and librarianly) ethic. </p>
<div class="photo"><a href="http://invisibleaustralians.org/faces/" title="Real Face of White Australia"><img src="http://invisibleaustralians.org/static/faces/11019740-p7_crop_2.jpg" alt="Real Face of White Australia" /><br />Real Face of White Australia</a></div>
<p>I felt a similar sense of responsibility in the <a href="http://invisibleaustralians.org/faces/">“Real Face of White Australia”</a> project, which I read about a couple of weeks ago on <a href="http://discontents.com.au/shoebox/archives-shoebox/the-real-face-of-white-australia">Tim Sherratt’s blog</a> (note to future Access organizers: get this guy!) It starts from scans of immigration documents for mostly Chinese or Indian workers who came to Australia in the late 19th or early 20th century (the age of the <a href="http://en.wikipedia.org/wiki/White_Australia_policy" title="White Australia policy">“White Australia” policy</a>) and were subject to restrictions on their travel. The documents include photographs; Sherratt’s inspiration was to use <a href="http://creatingwithcode.com/howto/face-detection-in-static-images-with-python/">open-source facial recognition software</a> to crop the faces out of the scanned documents and present them as a waterfall, with more faces appearing no matter how far you scroll down, each linked to the source document so you can find out about the individual. It zooms you from the macro level of political criticism of the racist policy down to the micro level of individual stories, and back again through the sheer accumulation of cases. </p>
<p>How seductive the tools are! Thorp showed us visualizations that cost him half an hour, which I would be obnoxiously proud to present after a month’s solid work. Inspired by Thorp and by a Hackfest project, I managed to make a little progress using Google Refine and Google Fusion to come up with a GIS visualization based on the <a href="http://peel.library.ualberta.ca/bibliography/2962.20.html">1926 volume</a> of the <em>Henderson</em> city directory for Edmonton. Building on work Tricia Williams (now Jenkins) did for us some years ago, I had a dataset of names and street addresses roughly parsed from the raw OCR text of the directories. Out of 30,000 entries, 11,000 were parsable from the OCR. They were grouped by city block and projected onto the current Google map of Edmonton. At first a jumble of red dots show the blob of built-up areas; as you zoom in they resolve into individual dots, which in turn represent groups of identifiable individuals living on the same street: people with names and occupations, more or less truthfully represented in the Directory, and equally or less truthfully represented in my dataset, with all its OCR errors and parsing errors. The Murphy family, Arthur and <a href="http://en.wikipedia.org/wiki/Emily_Murphy">Emily</a>, are there, a year before the launching of the Famous Five <a href="http://en.wikipedia.org/wiki/Persons_Case">appeal</a> that established that women are “persons” under Canadian law.</p>
<p><iframe width="600px" height="600px" scrolling="no" src="http://www.google.com/fusiontables/embedviz?viz=MAP&#038;q=select+col2+from+1928356+&#038;h=false&#038;lat=53.54621778726317&#038;lng=-113.47709338330077&#038;z=12&#038;t=1&#038;l=col2"></iframe></p>
<p class="dropcap">That evening in my room I wanted to follow up on an email exchange with my younger brother with a link to one of our grandfather’s articles, from the book that was recently digitized by Internet Archive through the generosity of Rick Prelinger. I found that I couldn’t get access: the <a href="http://www.archive.org/details/selectedpapersed00bink"><em>Selected Papers</em></a> had been placed in the <a href="http://www.archive.org/details/lendinglibrary">Lending Library</a> collection and was flagged as unavailable for borrowing. Rick spotted my mournful tweet and worked his contacts at IA to have it fixed within a couple of hours.</p>
<p><a href="http://www.wallandbinkley.com/quaedam/2011/10_26_a-walk-with-love-and-data.html/drat" rel="attachment wp-att-443"><img src="http://www.wallandbinkley.com/quaedam/wp-content/2011/10/drat-300x97.png" alt="Tweet: @pabinkley Drat: Internet Archive has put RCB&#039;s Selected Papers in lending library collection. Glad I downloaded text and images. #alwaysbackupthecloud" title="Tweet: @pabinkley Drat: Internet Archive has put RCB&#039;s Selected Papers in lending library collection. Glad I downloaded text and images. #alwaysbackupthecloud" width="300" height="97" class="alignright size-medium wp-image-443" /></a></p>
<p>The piece I wanted was <a href="http://www.archive.org/stream/selectedpapersed00bink#page/198/mode/2up">“History for a Democracy”</a>, given as a closing keynote at the <a href="http://collections.mnhs.org/MNHistoryMagazine/articles/18/v18i01p061-068.pdf">Minnesota Historical Society’s conference in 1937</a>. Binkley criticizes the doctrinaire historical projects of the fascists and the communists:</p>
<blockquote><p>Now it is the weakness of this kind of history — whether it be written for the church, the nation, the communist society, the fascist state, or even the federal democracy itself — that it stands at the mercy of objective criticism. The faithful following of the technique of historical investigation may at any time overturn elements of the story that stand as essentials in the use that is being made of it. Objective investigation may prove that the world was not created in 4004 B.C.; that the most important developments on the European scene were not the special experience of any one nation, but were shared in common by many peoples; and that the continuity alleged to be found in the life of a nation from the remote past to the present day is illusory or incidental. The communist interpretation of social evolution and political events may not be sustainable in the light of an objective criticism of the evidence, and the fascist or nazi interpretations may also go to pieces under criticism. Nor is the historical interpretation which has nourished the spirit of democracy immune. The bold conceptions of Freeman and Stubbs on early German democracy have already been relegated to the junk heap of discarded historical syntheses. </p>
<p>If we undertake deliberately to nourish our own institutions on a history of this kind, made to order for this purpose, we may find ourselves confronted with the tragic dilemma that the mission of our history cannot be served without abandoning the scientific historical method itself. And this would be particularly fatal to democracy, because democracy more than any other kind of government needs to sustain free investigation and criticism of everything. A myth that will not stand criticism must ultimately be protected by force. And an interpretation of history that one is not permitted to doubt and criticize becomes <em>ipso facto</em> an interpretation that one cannot sustain and prove.</p></blockquote>
<p>In defending the role of history and free inquiry in a democracy, he zooms down to the personal level, both for the content and for the practice of history:</p>
<blockquote><p>It took us several generations to build up the corpus of published material, to make the critical studies, to collect the bibliographies, to organize the knowledge from which our present historical writing is documented. Our Ph.D.&#8217;s move sure-footed through this material. If I want to work on the Clayton-Bulwer treaty, I know where to look for the material, and I can begin where the last scholar left off. But if I want to write the history of my family, or of the school district in which my son is going to school, I find nothing prepared for me. It will take us several generations to adapt and complete the documentary equipment for the writing of family and local history. It took us several generations also to train the army of scholars in the tradition of the craft. It may well take us several generations to train every man to be his own historian.</p></blockquote>
<p>More and more, I think “democracy” is the word I’m looking for as the foundation of the values I want to buttress with my work.</p>
<p><a href="http://www.wallandbinkley.com/quaedam/2011/10_26_a-walk-with-love-and-data.html/threewomen" rel="attachment wp-att-438"><img src="http://www.wallandbinkley.com/quaedam/wp-content/2011/10/threewomen-300x72.png" alt="Tweet: @shlew tweeted, “I love that #access2011 ended with inspiring talks by amazing women: @researchremix, @andreareimer, #eosadler.” " title="Tweet: @shlew tweeted, “I love that #access2011 ended with inspiring talks by amazing women: @researchremix, @andreareimer, #eosadler.” " width="300" height="72" class="alignright size-medium wp-image-438" /></a></p>
<p class="dropcap">The final day of the most powerful. First was Heather Piwowar, who is working to establish the evidence base for the benefits of the open-data model in scholarly communication. She grounded the need for peer review of scientific papers on the same principles as collaboration in open-source software development: 50% of published papers contain errors in their use of data, and 5-10% of those errors affect the research outcomes. <a href="http://en.wikipedia.org/wiki/Linus%27_Law">Linus&#8217; law</a> applies: only if the data is available for review can those errors be corrected. The current model of on-request sharing doesn’t work: many researchers report that they’ve had requests denied, and the young and the productive are disproportionately represented in that group. On the other hand, the science done on the basis of reused datasets increases the return on the investment in the original research. Her current project is to track 1000 randomly-selected datasets (100 each from 10 repositories) through the published literature. The roles she proposes for libraries including hosting repositories and also advocating and educating among faculty, publishers and the public. It was great to see the solid evidence she’s gathering to back up our intuitions about the value of open access.</p>
<p>During the introduction of the next panel I was diverted by Brian Owen’s  trivia question about the “Dukes of URL”, Dave’s band which played at the 1996 Access conference.
<div class="photo"><a href="http://www.flickr.com/photos/bigdpix/6266150444/" title="IMG_2621 by BigD, on Flickr"><img src="http://farm7.static.flickr.com/6217/6266150444_00df429bf4_m.jpg" width="240" height="160" alt="IMG_2621"/></a><br />Nick (photo: BigD)</div>
<p> There was a correction from the floor: Owen had referred to 1996 as the first Access, but it was only the first in Vancouver, third of that ilk. I’ve wanted for a long time to assemble a history of the conference, and a couple of years ago I started gathering links and asking for materials; Art Rhyno sent me some early programs, which I still have. I let the project languish but now seemed like a good time to restart it. A wiki! No, a Google Doc! I <a href="http://groups.google.com/group/access-conference-history">started one</a> and shared it out to a new Google Group <a href="http://groups.google.com/group/access-conference-history">&#8220;Access Conference History&#8221;</a> (join us!), and lent only half an ear to the following session on Evergreen as I and Nick Ruest and others filled in the chronology of the conference since 1994, identified surviving conference websites and excavated others from the Wayback Machine, linked to Flickr sets and blog postings, and sketched in a few memories of specific conferences. Shared editing of a Google Doc is incredibly exciting for the immediate visibility of the collaboration: new text from other collaborators crawls across the screen in the paragraph above the one you’re writing, new coloured cursors appear as people join in. By the end of the session we had a solid framework.</p>
<p>The next session dealt with proprietary and open-source software. Bess Sadler described the <a href="http://projecthydra.org/">Hydra</a> community and what makes it work. The strength of the collaboration depends on building trust by, paradoxically, limiting the areas where trust is needed.  If we have software tests, we know without trusting whether a given commit broke a given feature (and Hydra’s rule is “no code without tests”). Uncertainty is reduced, and the team can get on with building without wasting time and emotional energy assigning blame. I live with too much uncertainty (of my own devising, given my lousy documentation habits); I need to make Bess&#8217;s approach work in our environment.</p>
<p><a href="http://www.wallandbinkley.com/quaedam/2011/10_26_a-walk-with-love-and-data.html/collectionanalysis" rel="attachment wp-att-442"><img src="http://www.wallandbinkley.com/quaedam/wp-content/2011/10/collectionanalysis-300x84.png" alt="Tweet: @eosadler Collection, analysis and policy response to data is gvmt&#039;s job, so recognize data as a vital public asset. #Access2011 #VancoverIsAmazing" title="Tweet: @eosadler Collection, analysis and policy response to data is gvmt&#039;s job, so recognize data as a vital public asset. #Access2011 #VancoverIsAmazing" width="300" height="84" class="alignright size-medium wp-image-442" /></a></p>
<p class="dropcap">The closing keynote was <a href="http://en.wikipedia.org/wiki/Andrea_Reimer">Andrea Reimer</a>, a city councilor in Vancouver and sponsor of the city’s open data initiative. She’s in the middle of an election campaign and was a little late because a debate ran overtime; fortunately the conference program was running a little late as well.</p>
<p>Reimer’s talk took us back to the theme of democracy. Her principles: all people are equal; all people have the ability to reason. She allowed a 3% rule: in every hundred people, three are assholes who need to be worked around, but the rest, however much you disagree with them, are at least open to reason. From this it follows that people can make good decisions, and therefore democracy can work; but the public good depends on giving people good information on which to base those decisions. (This took me back to a photo Eric Hellman took at the <a href="http://www.rallytorestoresanity.com/">Rally to Restore Sanity</a> in Washington last year: a smiling woman carrying a sign that read <a href="http://lockerz.com/s/53949904">“Librarians for Informed Opinions”</a>. It’s the best brief statement I’ve seen of the role of libraries in a democracy. If you know who she was, please let me know!) Reimer described the process she and a few others initiated to start Vancouver’s <a href="http://data.vancouver.ca/">open data initiative</a>. It was the flagship for this movement among Canadian cities. <a href="http://data.edmonton.ca/">Edmonton</a> is now right up there among the leaders, I’m proud to say. I recently attended an organizational meeting for the <a href="http://edmontonpipelines.org/">Edmonton Pipelines</a> project, which is bringing together GIS-based research in the Edmonton area, including the city&#8217;s open-data folks. They&#8217;re data pipelines: it&#8217;s about &#8220;maps and narratives for dense urban spaces&#8221;. The library is providing scans of historical maps, which we hope to have georeferenced and mounted in the <a href="http://hypercities.com/">Hypercities</a> platform. </p>
<p>I was stirred to get up and ask another political question (what’s got into me?), or rather the same question: how can we carry this commitment across partisan boundaries in these polarized times — when the preponderance of dangerously uninformed opinions are on the right, across the divide from us? Reimer’s response was wonderful: I’m not religious, but if I had a religion, it would be the Age of Reason. Except for that 3%, we’re all open to rational argument and we just have to keep making the case on the best foundations we can.</p>
<p><script src="http://occipital.com/360/embed.js?pano=uJwVxA&#038;width=640&#038;height=480"></script></p>
<p class="dropcap">We had heard that David Suzuki was to address the <a href="http://occupyvancouver.com/">Occupy Vancouver</a> camp a couple of blocks away at 1:00, so after the conference closed several of us hurried over to hear him. A general assembly was starting when we arrived, and it was necessary to pass a motion to let Suzuki speak. We were therefore introduced to the remarkable rules of order of the Occupy movement. When we arrived various people were introducing themselves from the stage, using the amplified public address system. They spoke in short spurts, and the crowd repeated their words. This turned out to be the “human microphone”, and it was used whenever anyone needed to be heard, either from the stage or from the crowd. People responded to the proceedings with a set of <a href="http://occupyvancouver.com/assets/uploads/306476_10150399490181563_707956562_9966897_1569655650_n_1415.jpg?ts=1318388061">gestures</a>, whether registering votes or just responding to what was being said. Jazz-hands means agreement, thumbs-down disagreement, hands above the head with fingertips touching a point of order, and arms folded means a block: the blocker is prepared to leave the movement if the motion is passed. This triggers further discussion and even dividing the meeting into break-out groups, until consensus (set at 90%) is reached.</p>
<p>We were enthralled; “This is great!” I said to Geoff Harder, “We should use it in Library Council meetings!” The motion to allow Suzuki to speak was blocked by someone off to the left. Through the human mic we learned the objection was that this was an egalitarian movement, and no one should be allowed priority of speech for mere celebrity. The motion was reworded: Suzuki wasn’t being allowed to speak first at the meeting, the meeting was being suspended to allow him to speak according to his invitation. Another vote, another block. “Yeah,” said Geoff, “this is just like Library Council.” “Are you prepared to leave the movement over this?”, asked the moderator, and after more discussion the block was withdrawn. The motion passed, and Suzuki was allowed to speak to us.</p>
<p>He gave a great twenty-minute speech. I recorded it on my phone (and as my version of the human mic I’ve <a href="https://www.facebook.com/photo.php?v=792823928535" title="David Suzuki speaks at Occupy Vancouver">posted it on Facebook</a>). Suzuki covered all the themes you’d expect on such an occasion: pro-environmental, anti-corporate, anti-globalization, anti-consumerist, pro-democracy, pro-biodiversity, taking the long-term view. And he touched on information as a social good:</p>
<blockquote><p>For five years the prime minister of Canada has never acknowledged the reality of human-induced climate change, or that Canada is the industrialized nation most vulnerable to its impact; and now he’s cutting back on scientists in Environment Canada and research on climate, so that we don’t have to listen to the facts. (6:15)</p></blockquote>
<p>A myth that will not stand criticism must ultimately be protected by force, but often subterfuge will do. There were jazz-hands all around, mine included. It was the social vision Reimer had given us, of involvement, discussion, consensus, rationality, but stripped of the technology: just people.</p>
<p class="dropcap">After the speech we grabbed some lunch, and I split off to go to MacLeod’s books, the insanely jumbled second-hand bookstore at W. Pender and Richards. Just the place to settle your nerves after an overstimulating day. I was there for a couple of hours.
<div class="photo"><a href="http://twitpic.com/74bwzo" title="Share photos on twitter with Twitpic" style="float:left; margin: 1em;"><img src="http://twitpic.com/show/thumb/74bwzo.jpg" width="150" height="150" alt="Share photos on twitter with Twitpic"/></a></div>
<p> Then, still with time to kill, I went to the <a href="http://www.vpl.ca/">Vancouver Public Library</a>, which looks like the Coliseum reoccupied by information freaks (I saw serried ranks of sticky notes stuck to a second-floor office window, planning — what? An event, a collection, a website?). I found a desk with an electrical outlet and tried to sort out the relics, digital and physical, of the week: tweets, photos by and of me and others, a few emails and Facebook updates, the video I took of Suzuki, a panorama I’d made with my phone and posted to Occipital (who owns them? How long will they take care of it?), the flyer from the Occupy meeting, the hotel bill, the books, the presents for my family in Edmonton.</p>
<p>All these zooms to visualize:</p>
<ul>
<li>From the personal level to the community level and back again: as RCB proposed anchoring the project of history in expanding concentric circles rippling out from the individual, I want to see my digital work rooted in personal archiving practices that mesh with institutional and social movements</li>
<li>From the past to the present to the future: recovering old stories, preserving present experience so the stories it can tell will still be heard in when I’m no longer there to hear them</li>
<li>From information into action and back: guiding public policy with good information, in this age when we see how far wrong public policy can go when information is ignored or lost or hidden</li>
</ul>
<p>I think those are the dimensions we work with.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wallandbinkley.com/quaedam/2011/10_26_a-walk-with-love-and-data.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Make BackupPC tweet its activities</title>
		<link>http://www.wallandbinkley.com/quaedam/2011/01_14_make-backuppc-tweet-its-activities.html</link>
		<comments>http://www.wallandbinkley.com/quaedam/2011/01_14_make-backuppc-tweet-its-activities.html#comments</comments>
		<pubDate>Sat, 15 Jan 2011 05:48:42 +0000</pubDate>
		<dc:creator>Peter Binkley</dc:creator>
				<category><![CDATA[General Technology]]></category>

		<guid isPermaLink="false">http://www.wallandbinkley.com/quaedam/?p=375</guid>
		<description><![CDATA[We&#8217;ve been using BackupPC as our home backup system for the last year or so, and it&#8217;s done a great job. It runs under Ubuntu on the home server (an Eee box) and backs up the various family laptops to a RAID array composed of two 1tb USB drives. For offsite backup, we now have [...]]]></description>
				<content:encoded><![CDATA[<abbr class="unapi-id" title="http://www.wallandbinkley.com/quaedam/?p=375"><!-- &nbsp; --></abbr>
<p>We&#8217;ve been using <a href="http://backuppc.sourceforge.net/">BackupPC</a> as our home backup system for the last year or so, and it&#8217;s done a great job. It runs under Ubuntu on the home server (an Eee box) and backs up the various family laptops to a RAID array composed of two 1tb USB drives. For offsite backup, we now have a couple more USB drives that receive weekly archives from BackupPC and are swapped to and from my office. For the first time, I feel like we&#8217;re doing a decent job taking care of the family digital jewels.</p>
<p>Recently I&#8217;ve been looking at the content we create and store on external services. We&#8217;re all on Facebook, my daughter and I have five active or at least non-defunct blogs between us, I tweet. Why not archive all that as well? The pleasure I&#8217;ve been getting from reading my grandparents&#8217; papers will, for our posterity, depend on this stuff. Not to be morbid, but read last week&#8217;s New York Times article &#8220;<a href="http://www.nytimes.com/2011/01/09/magazine/09Immortality-t.html?_r=4&#038;hpw&#038;pagewanted=all">Cyberspace When You&#8217;re Dead</a>&#8220;. Personal digital archiving is important, and we need to learn to do it properly. The Internet Archive is sponsoring its <a href="http://www.personalarchiving.com/">second conference</a> on the subject in a few weeks.</p>
<p>I&#8217;ve started with Twitter. This has forced me, finally, to write some Python, in order to use the OAuth libraries necessary to authenticate to the Twitter API since they turned off basic authentication last summer. Jeff Miller&#8217;s <a href="http://jeffmiller.github.com/2010/05/31/twitter-from-the-command-line-in-python-using-oauth">tutorial</a>, which uses the <a href="https://github.com/joshthecoder/tweepy">Tweepy</a> module, got me going. Once you&#8217;ve got the authentication working, the demo script allows you to publish tweets from the command line, which is cool, but&#8230; Trying to think of a use for it, my mind went back to BackupPC and the need to monitor its actions and notice when backups aren&#8217;t working. It sends email notifications, but why not get them in the Twitter flow as well? It&#8217;s the perfect place for short notices.</p>
<p>So, our server now has its own Twitter account. BackupPC provides <a href="http://backuppc.sourceforge.net/faq/BackupPC.html#_conf_dumppostusercmd_">hooks for scripts</a> to run at different stages of its various processes. To send a tweet after a backup job, add this to the configuration file for a host:</p>
<blockquote><p><code>$Conf{DumpPostUserCmd} = &quot;/home/backuppc/bin/post.py backuppc: $client $type: $xferOK&quot;<!--formatted--></code></p></blockquote>
<p>This will send a tweet in the form &#8220;backuppc: cheetah full: 1&#8243; (where cheetah is the host, the backup was full, and it completed successfully &#8211; 0 indicates a problem).</p>
<p>The script post.py is based on Jeff Miller&#8217;s example. I modified it to compose the tweet by concatenating all the command line arguments (to avoid the use of quotation marks, which I couldn&#8217;t get BackupPC to handle properly no matter how I escaped them).</p>
<blockquote><pre><code>#!/usr/bin/env python

import sys
import tweepy

CONSUMER_KEY = &#039;*********************&#039;
CONSUMER_SECRET = &#039;*********************&#039;
ACCESS_KEY = &#039;*********************&#039;
ACCESS_SECRET = &#039;*********************&#039;

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)

# drop first arg, which has name of script
args = sys.argv
args.pop(0)
tweet = &quot;&quot;
for arg in args:
        if tweet != &quot;&quot;:
                tweet += &quot; &quot;
        tweet += arg

api.update_status(tweet)<!--formatted--></code></pre>
</blockquote>
<p>All for the thrill of seeing tweets like this:</p>
<p><a href="http://www.wallandbinkley.com/quaedam/2011/01_14_make-backuppc-tweet-its-activities.html/screen-shot-2011-01-14-at-jan-14-10-45pm10-45-13-pm" rel="attachment wp-att-384"><img src="http://www.wallandbinkley.com/quaedam/wp-content/2011/01/Screen-shot-2011-01-14-at-Jan-14-10.45PM10.45.13-PM.png" alt="" title="BackupPC tweet" width="315" height="88" class="aligncenter size-full wp-image-384" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wallandbinkley.com/quaedam/2011/01_14_make-backuppc-tweet-its-activities.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Home Zotero repository</title>
		<link>http://www.wallandbinkley.com/quaedam/2010/12_19_home-zotero-repository.html</link>
		<comments>http://www.wallandbinkley.com/quaedam/2010/12_19_home-zotero-repository.html#comments</comments>
		<pubDate>Sun, 19 Dec 2010 18:07:00 +0000</pubDate>
		<dc:creator>Peter Binkley</dc:creator>
				<category><![CDATA[General Technology]]></category>

		<guid isPermaLink="false">http://www.wallandbinkley.com/quaedam/?p=358</guid>
		<description><![CDATA[The bibliographic manager Zotero lets you sync your collection to a remote server, which is handy when you work on more than one machine. They provide space for free which is plenty for my citations; but to sync the attachments (pdfs, web page snapshots, etc.), the 100mb of free file storage isn&#8217;t enough: I&#8217;ve got [...]]]></description>
				<content:encoded><![CDATA[<abbr class="unapi-id" title="http://www.wallandbinkley.com/quaedam/?p=358"><!-- &nbsp; --></abbr>
<p>The bibliographic manager <a href="http://www.zotero.org/">Zotero</a> lets you sync your collection to a remote server, which is handy when you work on more than one machine. They provide space for free which is plenty for my citations; but to sync the attachments (pdfs, web page snapshots, etc.), the <a href="http://www.zotero.org/support/file_sync">100mb of free file storage</a> isn&#8217;t enough: I&#8217;ve got 95mb of stuff already. You can, however, sync the attachments to any <a href="http://en.wikipedia.org/wiki/Webdav">WebDAV</a>-accessible storage. I have a home Ubuntu server with <a href="http://en.wikipedia.org/wiki/RAID">RAID storage</a> for the family digital treasures (we run a backup service for all the machines in the house using the excellent <a href="http://backuppc.sourceforge.net/">BackupPC</a> package), so it made sense to use that. Here&#8217;s a quick list of the steps involved.</p>
<ul>
<li>Set up a Linux server. I&#8217;ve been using <a href="http://www.ubuntu.com/netbook/get-ubuntu/download">Ubuntu Netbook Edition</a> on an <a href="http://event.asus.com/eeepc/microsites/eeebox/en/index.html">Eee box</a> for a couple of years with no complaints. Ours is pink; we call it &#8220;panther&#8221;. (You could probably do all this on a Mac or Windows machine that&#8217;s on all the time, if you prefer). </li>
<li>Buy a couple of large USB drives and set them up as RAID 1 (or buy more and get more redundancy). Software RAID is <a href="https://help.ubuntu.com/community/Installation/SoftwareRAID">easy to set up</a> in Ubuntu. Mount the RAID array at e.g. /raidarray and create the directory which the WebDAV service will use as its home, e.g. /raidarray/webdav.</li>
<li>Now that you&#8217;ve got some storage and a server, you need WebDAV. Install Apache, and <a href="http://samiux.wordpress.com/2009/06/27/howto-webdav-on-ubuntu-9-04-server/">add WebDAV capabilities</a> to it. Make sure the Apache user has read/write permissions on the webdav directory.</li>
<li>One of the points of using your own server is that you can encrypt your network traffic using a <a href="http://en.wikipedia.org/wiki/Self-signed_certificate">self-signed certificate</a>, avoiding the significant cost of a real one. Set up a <a href="https://help.ubuntu.com/10.04/serverguide/C/certificates-and-security.html">self-signed certificate</a> in Apache.</li>
<li>Now you need to make your server available on the Interwebs. If you use a cable or DSL service, you probably don&#8217;t have a fixed IP address, which makes you hard to find, since your provider may change your IP address frequently and unpredictably. The solution is <a href="http://en.wikipedia.org/wiki/Dynamic_DNS">dynamic DNS</a>, which allows your to notify the DNS when its IP address changes. Set up a free account at <a href="http://www.dyndns.com">DynDNS.com</a>. You will also have to install a little package on your server that will check your current IP address periodically and report changes to DynDNS.</li>
<li>Set up your router to direct incoming traffic on your chosen port to your server. The settings are probably under the games and applications tab of your router config interface. Choose a high port number (make the script kiddies work).</li>
<li>Finally, put it all together: set up the <a href="http://httpd.apache.org/docs/2.2/vhosts/">virtual host</a> in Apache that will serve your WebDAV repository. My virtual host configuration looks something like this, with service at https://mywebdav.dyndns.org:12345/webdav/ (not my real host), the RAID array mounted at /raidarray, and the certificate authority and other ancillary stuff in /var/www_dyndns:</li>
</ul>
<p><code><br />
&lt;virtualhost *:12345&gt;<br />
        ServerAdmin me@myemail.com<br />
        ServerName  mywebdav.dyndns.org</p>
<p>        # Indexes + Directory Root.<br />
        DirectoryIndex index.php index.html<br />
        DocumentRoot /raidarray/webdav/</p>
<p>        &lt;directory /raidarray/webdav/&gt;<br />
                Options Indexes FollowSymLinks MultiViews<br />
                AllowOverride All<br />
                Order allow,deny<br />
                allow from all<br />
       &lt;/directory&gt;</p>
<p>         # SSL<br />
        SSLEngine on<br />
        SSLOptions +StrictRequire<br />
        SSLCertificateFile /var/www_dyndns/myCA/server_crt.pem<br />
        SSLCertificateKeyFile /var/www_dyndns/myCA/server_key.pem</p>
<p>        # Logfiles<br />
        ErrorLog  /var/log/apache2/mywebdav.dyndns.org/error.log<br />
        CustomLog /var/log/apache2/mywebdav.dyndns.org/access.log combined</p>
<p>        # webdav service<br />
        &lt;Directory /raidarray/webdav/&gt;<br />
           Options Indexes FollowSymLinks MultiViews<br />
           AllowOverride None<br />
           Order allow,deny<br />
           allow from all<br />
        &lt;/Directory&gt;</p>
<p>        Alias /webdav/ /raidarray/webdav/</p>
<p>        &lt;Location /webdav&gt;<br />
           DAV On<br />
           AuthType Basic<br />
           AuthName &quot;webdav&quot;<br />
           AuthUserFile /var/www_dyndns/passwd.dav<br />
           Require valid-user<br />
           DavMinTimeout 600<br />
        &lt;/Location&gt;<br />
&lt;/virtualhost&gt;<br />
</code></p>
<p>Restart Apache and you should be good to go. With your browser you can visit https://mywebdav.dyndns.org:12345/webdav and see the contents of your directory, after you accept the certificate and log in. You should also be able to mount that directory as a network drive from any client. </p>
<p>To use it for Zotero, create a directory named &#8220;zotero&#8221; in the &#8220;webdav&#8221; directory, and then go to the &#8220;Sync&#8221; tab in the Zotero preferences, turn on file syncing using WebDAV, and give it your address. Do the same in other machines you want to sync. As Zotero syncs, you&#8217;ll see the /raidarray/webdav/zotero directory fill up with .prop and .zip files.</p>
<p>Caveats and lessons learned:</p>
<ul>
<li>I found that the process that determines the current IP address timed out a lot due to load on DynDNS&#8217;s servers. I got around this by installing a script on my own website (where this blog is hosted at Dreamhost) for it to visit instead. Instructions were easy to find.</li>
<li>Visiting your server using DynDNS from within your home network can be problematic. I couldn&#8217;t get it to work with my first router: requests would just hang. When that router died and I replaced it with a Cisco Valet, the problem went away.</li>
<li>Your server will be unreachable during the interval between a change of IP address by your provider and the next update to DynDNS. This hasn&#8217;t been a problem for me yet.</li>
<li>The self-signed certificate encrypts your traffic, but it creates a theoretical vulnerability to spoofing. Buy a real one if you&#8217;re worried. I wouldn&#8217;t use this to store sensitive personal information, though.</li>
<li>If you have problems, check the Apache logs. The first thing to check is permissions: can Apache read and write to the Zotero directory?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.wallandbinkley.com/quaedam/2010/12_19_home-zotero-repository.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>There is a giant floating Easter egg in the Quad</title>
		<link>http://www.wallandbinkley.com/quaedam/2010/07_26_there-is-a-giant-floating-easter-egg-in-the-quad.html</link>
		<comments>http://www.wallandbinkley.com/quaedam/2010/07_26_there-is-a-giant-floating-easter-egg-in-the-quad.html#comments</comments>
		<pubDate>Mon, 26 Jul 2010 23:54:21 +0000</pubDate>
		<dc:creator>Peter Binkley</dc:creator>
				<category><![CDATA[General Technology]]></category>

		<guid isPermaLink="false">http://www.wallandbinkley.com/quaedam/?p=329</guid>
		<description><![CDATA[Which makes sense, because I put it there. The giant floating gold-foil-wrapped Easter bunnies, on the other hand, make no sense at all. Augmented reality is very weird. I&#8217;ve been playing with Layar&#8216;s Hoppala Augmentation service (with a hat tip to Fiacre O&#8217;Duinn at Library Bazaar). Via the web interface I placed an object in [...]]]></description>
				<content:encoded><![CDATA[<abbr class="unapi-id" title="http://www.wallandbinkley.com/quaedam/?p=329"><!-- &nbsp; --></abbr>
<p>Which makes sense, because I put it there. The giant floating gold-foil-wrapped Easter bunnies, on the other hand, make no sense at all. </p>
<p>Augmented reality is very weird. </p>
<p>I&#8217;ve been playing with <a href="http://www.layar.com/">Layar</a>&#8216;s <a href="http://www.hoppala.eu/">Hoppala Augmentation</a> service (with a hat tip to <a href="http://www.librarybazaar.com/2010/07/16/hoppala-augmented-reality-for-everyone/">Fiacre O&#8217;Duinn at Library Bazaar</a>).   Via the web interface I placed an object in an augmented reality layer: an Easter egg in the demo <a href="http://www.hoppala.eu/layer/hoppala-goes-easter">&#8220;Hoppala goes Easter&#8221;</a> layer. Then I installed the <a href="http://itunes.apple.com/us/app/layar-reality-browser/id334404207">iPhone app</a>, found the right layer (search &#8220;Easter&#8221;), and strolled through the Quad on my way to the LRT. It looked like this:</p>

<a href='http://www.wallandbinkley.com/quaedam/2010/07_26_there-is-a-giant-floating-easter-egg-in-the-quad.html/img_0018' title='IMG_0018'><img width="200" height="300" src="http://www.wallandbinkley.com/quaedam/wp-content/2010/07/IMG_0018-200x300.png" class="attachment-medium" alt="IMG_0018" /></a>
<a href='http://www.wallandbinkley.com/quaedam/2010/07_26_there-is-a-giant-floating-easter-egg-in-the-quad.html/img_0019' title='IMG_0019'><img width="200" height="300" src="http://www.wallandbinkley.com/quaedam/wp-content/2010/07/IMG_0019-200x300.png" class="attachment-medium" alt="IMG_0019" /></a>
<a href='http://www.wallandbinkley.com/quaedam/2010/07_26_there-is-a-giant-floating-easter-egg-in-the-quad.html/img_0021' title='IMG_0021'><img width="300" height="200" src="http://www.wallandbinkley.com/quaedam/wp-content/2010/07/IMG_0021-e1280204213756-300x200.png" class="attachment-medium" alt="IMG_0021" /></a>
<a href='http://www.wallandbinkley.com/quaedam/2010/07_26_there-is-a-giant-floating-easter-egg-in-the-quad.html/img_0022' title='IMG_0022'><img width="300" height="200" src="http://www.wallandbinkley.com/quaedam/wp-content/2010/07/IMG_0022-e1280204190511-300x200.png" class="attachment-medium" alt="IMG_0022" /></a>

<p>It was distinctly bizarre to look through the little window into an alternate world where this huge red egg floated along the path beside me. Freaksville. And people give you odd looks when you walk around the Quad holding your phone out at eye level. When you explain, though, that you&#8217;re watching the giant floating Easter egg, and that the floating chocolate bunnies aren&#8217;t your fault, people leave you alone.</p>
<p>This was my first experience using an augmented reality app with live GPS positioning. I must say, it&#8217;s disappointing in an entirely predictable way. GPS on a phone is rough, and the accuracy of your position changes from moment to moment. That means the egg moves around a lot as you walk, and its position in the middle of the Quad is only approximate, because the app&#8217;s sense of <em>your</em> position is only approximate. When building an augmented reality application, you&#8217;ll have to take into account that your users may not see your stuff exactly where you want them to, and your stuff might shift unexpectedly instead of smoothly panning and zooming to match the viewer&#8217;s movements. I&#8217;ll have to give up my fantasy of neatly overlaying an historical image over the corresponding contemporary view, like this set from the <a href="http://www.facebook.com/album.php?aid=416585&#038;id=240989225037&#038;ref=mf">National Library of Ireland</a>, where the juxtaposition of past and present is so immediate it makes your heart ache. Or maybe there are ways for the app to work around the limitations of a phone&#8217;s GPS. </p>
<p>Anyway, if you&#8217;re around U of A and you have an iPhone or Android phone, go to the Quad and check out the egg. And the bunnies. Maybe they do something if you click them. Do you think I should click one? Maybe I should go back and click one. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.wallandbinkley.com/quaedam/2010/07_26_there-is-a-giant-floating-easter-egg-in-the-quad.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Gizmo</title>
		<link>http://www.wallandbinkley.com/quaedam/2010/07_23_new-gizmo.html</link>
		<comments>http://www.wallandbinkley.com/quaedam/2010/07_23_new-gizmo.html#comments</comments>
		<pubDate>Sat, 24 Jul 2010 02:14:30 +0000</pubDate>
		<dc:creator>Peter Binkley</dc:creator>
				<category><![CDATA[General Technology]]></category>

		<guid isPermaLink="false">http://www.wallandbinkley.com/quaedam/?p=322</guid>
		<description><![CDATA[Got me one of those Menotek floppy bluetooth keyboards, now that the iPhone supports it (in iOS4; kitteh not included). It takes some getting used to: I keep doubling letters. The iPhone&#8217;s autocorrection helps. We&#8217;ll see if this can be as useful as the old Palm folding keyboard, which was a wonderful keyboard; I could [...]]]></description>
				<content:encoded><![CDATA[<abbr class="unapi-id" title="http://www.wallandbinkley.com/quaedam/?p=322"><!-- &nbsp; --></abbr>
<p><a href="http://www.wallandbinkley.com/quaedam/wp-content/2010/07/p_1024_768_B9CCF3F9-6489-4B45-8BEF-7C226A9635A7-e1279943143905.jpeg"><img src="http://www.wallandbinkley.com/quaedam/wp-content/2010/07/p_1024_768_B9CCF3F9-6489-4B45-8BEF-7C226A9635A7-e1279943143905.jpeg" alt="Marshmallow models keyboard" title="p_1024_768_B9CCF3F9-6489-4B45-8BEF-7C226A9635A7.jpeg" width="160" height="213" class="alignleft size-full wp-image-321" /></a>Got me one of those Menotek floppy bluetooth keyboards, now that the iPhone supports it (in iOS4; kitteh not included). It takes some getting used to: I keep doubling letters. The iPhone&#8217;s autocorrection helps. We&#8217;ll see if this can be as useful as the old Palm folding keyboard, which was a wonderful keyboard; I could have transcribed War and Peace on it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wallandbinkley.com/quaedam/2010/07_23_new-gizmo.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QR Codes Wherever I Want</title>
		<link>http://www.wallandbinkley.com/quaedam/2010/04_30_qr-codes-wherever-i-want.html</link>
		<comments>http://www.wallandbinkley.com/quaedam/2010/04_30_qr-codes-wherever-i-want.html#comments</comments>
		<pubDate>Sat, 01 May 2010 01:49:07 +0000</pubDate>
		<dc:creator>Peter Binkley</dc:creator>
				<category><![CDATA[Linking Technologies]]></category>

		<guid isPermaLink="false">http://www.wallandbinkley.com/quaedam/?p=304</guid>
		<description><![CDATA[The University of Alberta added WorldCat Local to its web offerings a while ago, but for my own library use I&#8217;ve gone on using our old OPAC by default, for no other reasons than familiarity and inertia. Now, though, I&#8217;ve found a solid advantage that WorldCat Local offers to my personal workflow: fixed record-level URLs. [...]]]></description>
				<content:encoded><![CDATA[<abbr class="unapi-id" title="http://www.wallandbinkley.com/quaedam/?p=304"><!-- &nbsp; --></abbr>
<p>The <a href="http://www.library.ualberta.ca/">University of Alberta</a> added <a href="http://www.oclc.org/worldcatlocal/default.htm">WorldCat Local</a> to its web offerings a while ago, but for my own library use I&#8217;ve gone on using our old OPAC by default, for no other reasons than familiarity and inertia. Now, though, I&#8217;ve found a solid advantage that WorldCat Local offers to my personal workflow: fixed record-level URLs.</p>
<p>I was trying to solve the age-old problem of capturing a call number so that it will be easy to consult when I get to the stacks to pick up the book. The OPAC record is on the screen of my workstation, my iPhone is on my belt: how to bridge the gap? Emailing it to myself is tedious, copying and pasting into a note and then syncing even more so. Taking a picture with the iPhone&#8217;s camera may get the call number but it&#8217;s hard to include enough of the citation to show which item this is, if I&#8217;m fetching more than one.</p>
<p>The solution I want, which was inspired by a <a href="http://twitter.com/lorcanD/status/12968387266">tweet</a> by Lorcan Dempsey, is a <a href="http://en.wikipedia.org/wiki/QR_Code">QR code</a> that gives me the URL of the record. That way when I need it I&#8217;ll have the full citation, the call number, everything. QR codes don&#8217;t appear in WorldCat Local or in the OPAC (like <a href="http://webcat.hud.ac.uk/ipac20/ipac.jsp?full=3100001~!591874~!0&#038;profile=cls">Huddersfield</a>), but there&#8217;s <a href="http://www.greasespot.net/">Greasemonkey</a> for that, specifically the <a href="http://userscripts.org/scripts/show/44122">&#8220;QR Code for Everything!&#8221;</a> script (and probably others, I didn&#8217;t explore). I can pop up a QR code for any page I visit in Firefox on my workstation, grab it into the iPhone using the free <a href="http://itunes.apple.com/app/i-nigma-qr-datamatrix-barcode/id331895424?mt=8">i-nigma app</a> (or one of the other QR-reading apps) to snap a picture of the QR code, and then easily consult the full record in the stacks.</p>

<a href='http://www.wallandbinkley.com/quaedam/2010/04_30_qr-codes-wherever-i-want.html/img_0190' title='IMG_0190'><img width="200" height="300" src="http://www.wallandbinkley.com/quaedam/wp-content/2010/04/IMG_0190-200x300.png" class="attachment-medium" alt="Capturing a QR Code in i-nigma" /></a>
<a href='http://www.wallandbinkley.com/quaedam/2010/04_30_qr-codes-wherever-i-want.html/img_0191' title='IMG_0191'><img width="200" height="300" src="http://www.wallandbinkley.com/quaedam/wp-content/2010/04/IMG_0191-200x300.png" class="attachment-medium" alt="A URL captured in i-nigma" /></a>

<p>The only problem with my default behavior is that the OPAC uses a session URL, which is meaningless once the session expires or when accessed from another device, so capturing it does me no good. WorldCat Local gives me a URL that doesn&#8217;t depend on the current session. That&#8217;s what I need: a <a href="http://www.w3.org/Provider/Style/URI">cool URI</a> that doesn&#8217;t change, at least across two devices and within the time-frame of my interest in a given book. I suppose I could customize the Greasemonkey script to use the OPAC&#8217;s permalink service before it generates the QR code, or we could enhance our <a href="http://unapi.info/">unAPI</a> service to provide a QR code as one of the options, but hell, WorldCat Local just works for this.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wallandbinkley.com/quaedam/2010/04_30_qr-codes-wherever-i-want.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Embedding a SIMILE Timeline in WordPress</title>
		<link>http://www.wallandbinkley.com/quaedam/2010/03_28_embedding-a-simile-timeline-in-wordpress.html</link>
		<comments>http://www.wallandbinkley.com/quaedam/2010/03_28_embedding-a-simile-timeline-in-wordpress.html#comments</comments>
		<pubDate>Sun, 28 Mar 2010 18:26:41 +0000</pubDate>
		<dc:creator>Peter Binkley</dc:creator>
				<category><![CDATA[General Technology]]></category>

		<guid isPermaLink="false">http://www.wallandbinkley.com/quaedam/?p=282</guid>
		<description><![CDATA[I wanted to embed a SIMILE Timeline into a WordPress posting, and it took longer than I expected to find a convenient way to do this without editing templates and such. There&#8217;s a nice plugin that does timelines for postings (WP SIMILE Timeline), but it doesn&#8217;t work for arbitrary timelines unconnected with the content of [...]]]></description>
				<content:encoded><![CDATA[<abbr class="unapi-id" title="http://www.wallandbinkley.com/quaedam/?p=282"><!-- &nbsp; --></abbr>
<p>I wanted to embed a <a href="http://www.simile-widgets.org/timeline/">SIMILE Timeline</a> into a WordPress posting, and it took longer than I expected to find a convenient way to do this without editing templates and such. There&#8217;s a nice plugin that does timelines for postings (<a href="http://wordpress.org/extend/plugins/wp-simile-timeline/">WP SIMILE Timeline</a>), but it doesn&#8217;t work for arbitrary timelines unconnected with the content of the blog itself. So, here&#8217;s a summary of a quick solution.</p>
<p>The requirement is to add some extra Javascript to a single posting (not for every posting, since that&#8217;s a fair amount of script to download needlessly), and to add onLoad and onResize handlers to the body tag. The easy solution: install the <a href="http://farinspace.com/2010/03/wordpress-hifi-plugin/">HiFi</a> plugin, which does &#8220;Head &#038; Foot Injection&#8221;. It allows you to specify some links you want to in the HTML head section, or at the end of the body section. It gives you a menu like this:</p>
<p><a href="http://www.wallandbinkley.com/quaedam/wp-content/2010/03/hifi_screenshop.png"><img src="http://www.wallandbinkley.com/quaedam/wp-content/2010/03/hifi_screenshop.png" alt="HiFi Screenshot" title="hifi_screenshop" width="707" height="313" class="aligncenter size-full wp-image-298" /></a></p>
<p>Those links will end up in the head for this posting. </p>
<p>The links are to the Timeline library, a local js file containing the configuration for the timeline we&#8217;re posting, and maybe a link to the css for that timeline. The local Javascript contains a call to a local XML file containing the events we ant to plot: </p>
<blockquote><p><code>tl.loadXML(&quot;wp-content/2010/03/timeline-monet.xml&quot;, function(xml, url) {<br />
    eventSource.loadXML(xml, url);<br />
});</code></p></blockquote>
<p>For convenience, I uploaded the js and xml as media files in the WordPress dashboard; but it threw an error when it tried to save the xml, so I uploaded that manually. I use the year/month directory structure for my uploads (Settings / Miscellaneous / &#8220;Organize my uploads into month- and year-based folders&#8221;), so the uploaded timeline files end up in <code>wp-content/2010/03</code>. </p>
<p>The local Javascript contains functions <code>onLoad</code> and <code>onResize</code>, as in the Timeline examples. To get those to fire at the appropriate times, the Javascript ends by attaching them to the window&#8217;s onload and onresize events:</p>
<blockquote><p><code>window.onload = onLoad;<br />
window.onresize = onResize;</code></p></blockquote>
<p>Adding those two lines was the only change I had to make to the SIMILE sample code. </p>
<p>Finally, the posting itself needs a div with the appropriate id:</p>
<blockquote><p><code>&lt;div id=&quot;tl&quot; style=&quot;height: 300px;&quot;&gt;&lt;/div&gt;</code></p></blockquote>
<p>And that&#8217;s it. Here&#8217;s a demo, using the <a href="http://simile.mit.edu/timeline/examples/monet/monet.html">&#8220;Life of Monet&#8221; example</a> from the SIMILE Timeline site.</p>
<div id="tl" style="height: 300px;"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.wallandbinkley.com/quaedam/2010/03_28_embedding-a-simile-timeline-in-wordpress.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
