<?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/"
	>

<channel>
	<title>&#964;&#949;&#967;&#957;&#959;&#963;&#959;&#966;&#953;&#945; &#187; Systems</title>
	<atom:link href="http://lackoftalent.org/michael/blog/category/systems/feed/" rel="self" type="application/rss+xml" />
	<link>http://lackoftalent.org/michael/blog</link>
	<description>The occasional rambling of a digital library artisan</description>
	<lastBuildDate>Sun, 13 May 2012 19:17:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Command-line shuffle</title>
		<link>http://lackoftalent.org/michael/blog/2009/09/26/command-line-shuffle/</link>
		<comments>http://lackoftalent.org/michael/blog/2009/09/26/command-line-shuffle/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 20:50:05 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/?p=500</guid>
		<description><![CDATA[Being a nerd, I tend to like the command-line. When I&#039;m working on my laptop at home, I tend to like listening to music. Before I discovered that mplayer had a really convenient shuffle idiom, I would invoke it thusly (to listen to all my Pavement tracks in shuffle mode): export IFS=$'\n' for track in [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:500"><!-- &nbsp; --></abbr>
<p>Being a nerd, I tend to like the command-line.  When I&#039;m working on my laptop at home, I tend to like listening to music.  Before I discovered that <a href="http://en.wikipedia.org/wiki/MPlayer">mplayer</a> had a really convenient shuffle idiom, I would invoke it thusly (to listen to all my Pavement tracks in shuffle mode):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">IFS</span>=$<span style="color: #ff0000;">'\n'</span>
<span style="color: #000000; font-weight: bold;">for</span> track <span style="color: #000000; font-weight: bold;">in</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">find</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>upnp<span style="color: #000000; font-weight: bold;">/</span>MediaTomb<span style="color: #000000; font-weight: bold;">/</span>Audio<span style="color: #000000; font-weight: bold;">/</span>Artists<span style="color: #000000; font-weight: bold;">/</span>Pavement <span style="color: #660033;">-name</span> \<span style="color: #000000; font-weight: bold;">*</span>.mp3 <span style="color: #000000; font-weight: bold;">|</span> ~<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>shuffle.py<span style="color: #7a0874; font-weight: bold;">&#41;</span>; <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #c20cb9; font-weight: bold;">mplayer</span> <span style="color: #007800;">$track</span>; <span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>And the wee shuffle script I whipped together looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #808080; font-style: italic;"># shuffle.py</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">random</span>
&nbsp;
args = <span style="color: #008000;">list</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">stdin</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">random</span>.<span style="color: black;">shuffle</span><span style="color: black;">&#40;</span>args<span style="color: black;">&#41;</span>
<span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">writelines</span><span style="color: black;">&#40;</span>args<span style="color: black;">&#41;</span></pre></div></div>

<p>And here&#039;s the convenient shuffle idiom that renders my arg-shuffling script somewhat useless:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">find</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>upnp<span style="color: #000000; font-weight: bold;">/</span>MediaTomb<span style="color: #000000; font-weight: bold;">/</span>Audio<span style="color: #000000; font-weight: bold;">/</span>Artists<span style="color: #000000; font-weight: bold;">/</span>Pavement <span style="color: #660033;">-name</span> \<span style="color: #000000; font-weight: bold;">*</span>.mp3 <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">mplayer</span> <span style="color: #660033;">-playlist</span> - <span style="color: #660033;">-shuffle</span> <span style="color: #660033;">-loop</span> <span style="color: #000000;">0</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2009/09/26/command-line-shuffle/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lynx and HTTPS/SSL on Ubuntu (8.10)</title>
		<link>http://lackoftalent.org/michael/blog/2009/01/12/lynx-and-httpsssl-on-ubuntu-810/</link>
		<comments>http://lackoftalent.org/michael/blog/2009/01/12/lynx-and-httpsssl-on-ubuntu-810/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 17:46:15 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/?p=269</guid>
		<description><![CDATA[Dear Future Me, It has been a while, hasn&#039;t it? Yes, it has[1]. Did you try to view an HTTPS/SSL URL in Lynx[2] again, only to be met, most cruelly, with the following error message? $ lynx https://example.org/resource/[3] Alert!: This client does not contain support for HTTPS URLs. Well, have no fear! The lynx package, [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:269"><!-- &nbsp; --></abbr>
<p>Dear Future Me,</p>
<p>It has been a while, hasn&#039;t it?  Yes, it has[<a href="http://lackoftalent.org/michael/blog/2009/01/12/lynx-and-httpsssl-on-ubuntu-810/#footnote_0_269" id="identifier_0_269" class="footnote-link footnote-identifier-link" title="In the future you will have evolved beyond answering your own questions, no doubt, but here in the past, in this quaint and backwards era, it is quite common to hold conversations with yourself.  Or myself.  But I (i.e., you) digress!  (We digress in the past as well!  Quite the confusing state of affairs, conversationally speaking!) ">1</a>].</p>
<p>Did you try to view an HTTPS/SSL URL in Lynx[<a href="http://lackoftalent.org/michael/blog/2009/01/12/lynx-and-httpsssl-on-ubuntu-810/#footnote_1_269" id="identifier_1_269" class="footnote-link footnote-identifier-link" title="Do they even have Lynx in that brave new world of the future?  Does the lynx species still exist?  Did the polar ice caps melt and wipe out all non-domesticated felines?  Inquiring, unevolved minds of the past want to know! ">2</a>] again, only to be met, most cruelly, with the following error message?<br />
<blockquote>
$ lynx https://example.org/resource/[<a href="http://lackoftalent.org/michael/blog/2009/01/12/lynx-and-httpsssl-on-ubuntu-810/#footnote_2_269" id="identifier_2_269" class="footnote-link footnote-identifier-link" title="I am assuming that in the future example.org remains a reserved dummy domain.">3</a>]<br />
<br/><br />
Alert!: This client does not contain support for HTTPS URLs.
</p></blockquote>
<p>Well, have no fear!  The lynx package, at least within the aptitude repositories for Ubuntu 8.10 (Intrepid Ibex), has no SSL support as you have just witnessed.  The lynx-cur package, on the other hand[<a href="http://lackoftalent.org/michael/blog/2009/01/12/lynx-and-httpsssl-on-ubuntu-810/#footnote_3_269" id="identifier_3_269" class="footnote-link footnote-identifier-link" title="I hear that in the future hands will be replaced by hooks and detachable chainsaws and the like?">4</a>], does!  Support SSL, that is.  Fix yourself thusly:<br />
<blockquote>
$ sudo apt-get install lynx-cur
</p></blockquote>
<p><em>N.B.</em> the new lynx looks for its configuration in a different place than the old lynx, so you may need to fiddle with things if you&#039;ve tricked out lynx with bells and whistles and racing stripes and nitrous boosts.  Otherwise, huzzah!</p>
<h5>Notes</h5><ol class="footnotes"><li id="footnote_0_269" class="footnote">In the future you will have evolved beyond answering your own questions, no doubt, but here in the past, in this quaint and backwards era, it is quite common to hold conversations with yourself.  Or myself.  But I (i.e., you) digress!  (We digress in the past as well!  Quite the confusing state of affairs, conversationally speaking!) </li><li id="footnote_1_269" class="footnote">Do they even have Lynx in that brave new world of the future?  Does the lynx <a href="http://en.wikipedia.org/wiki/Lynx" target="_blank">species</a> still exist?  Did the polar ice caps melt and wipe out all non-domesticated felines?  Inquiring, unevolved minds of the past want to know! </li><li id="footnote_2_269" class="footnote">I am assuming that in the future <a href="http://en.wikipedia.org/wiki/Example.com" target="_blank">example.org</a> remains a reserved dummy domain.</li><li id="footnote_3_269" class="footnote">I hear that in the future hands will be replaced by hooks and detachable chainsaws and the like?</li></ol><br/>
<hr/>]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2009/01/12/lynx-and-httpsssl-on-ubuntu-810/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HOWTO: Get Twhirl 0.8.7 working on Ubuntu</title>
		<link>http://lackoftalent.org/michael/blog/2008/12/16/howto-get-twhirl-087-working-on-ubuntu/</link>
		<comments>http://lackoftalent.org/michael/blog/2008/12/16/howto-get-twhirl-087-working-on-ubuntu/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 19:22:49 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Systems]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/?p=222</guid>
		<description><![CDATA[I use the Adobe AIR-based Twhirl as a Twitter and identi.ca client on my Ubuntu box. Twitter recently made some changes to their authentication API, apparently, which prevented Twhirl from connecting as of version 0.8.6. The fine folks over at Twhirl pushed out 0.8.7 in a jiffy but it included some AIR 1.5 dependencies. The [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:222"><!-- &nbsp; --></abbr>
<p>I use the Adobe AIR-based <a href="http://twhirl.org/">Twhirl</a> as a <a href="http://twitter.com/">Twitter</a> and <a href="http://identi.ca/">identi.ca</a> client on my Ubuntu box.  Twitter recently made some changes to their authentication API, apparently, which prevented Twhirl from connecting as of version 0.8.6.  The fine folks over at Twhirl pushed out 0.8.7 in a jiffy but it included some AIR 1.5 dependencies.  The problem was that Adobe AIR for Linux only comes in 1.0 and 1.1 versions.</p>
<p>I was a tad frustrated that such a seemingly minor Twitter API upgrade resulted in a fundamentally different (and broken) version of Twhirl, but I couldn&#039;t fault them for trying to respond quickly.  I followed the <a href="http://twitter.com/twhirl">twhirl</a> user on Twitter when this went down, and I was pleased to find out that they&#039;ve whipped up a special AIR 1.1 Twhirl client for us Linux users.</p>
<p>I ran into some problems trying to install the client.  The first problem I ran into was due to a corrupt download.  If the file is less than 997K or so, you should try to download it again.  If Firefox fails you, there&#039;s always wget.  Want to make sure you&#039;ve got a good file?  Run unzip against it (an .air file is a .zip file underneath its raincoat).  If it succeeds, you&#039;re golden.</p>
<p>The other problem was an old version of Adobe AIR.  You want adobeair_linux_b1_091508.bin installed, not adobeair_linux_a1_033108.bin.  Here&#039;s how you &#034;upgrade&#034; AIR from the alpha to the beta (1.1) and get Twhirl 0.8.7-air11 installed:</p>
<ol>
<li><code>sudo adobeair_linux_a1_033108.bin -uninstall</code></li>
<li><code>sudo apt-get remove adobeair-enu</code> (This step was not necessary on another box I tested.  It could be that the original box I tried these steps on was munted up.)</li>
<li><em>This may be optional</em>!  Clean out /opt/Adobe Air/, ~/.adobe/AIR/, and /root/.adobe/AIR/.  Note that this step will wipe your settings for all your AIR applications.
<li>Download the <a href="http://labs.adobe.com/downloads/air_linux.html">AIR 1.1 beta for Linux</a></li>
<li><code>adobeair_linux_b1_091508.bin</code>  (Some report that Firefox and other browsers must be closed during this step, but I couldn&#039;t reproduce that.)</li>
<li>Download the latest <a href="http://www.twhirl.org/files/twhirl-0.8.7-air11.air">AIR 1.1 Twhirl for Linux</a></li>
<li>Then navigate to the twhirl-0.8.7-air11.air via Nautilus and double-click it.</li>
</ol>
<p>Worked for me, at least.</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2008/12/16/howto-get-twhirl-087-working-on-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Convert Windows shortcuts into Ubuntu shortcuts</title>
		<link>http://lackoftalent.org/michael/blog/2008/10/29/convert-windows-shortcuts-into-ubuntu-shortcuts/</link>
		<comments>http://lackoftalent.org/michael/blog/2008/10/29/convert-windows-shortcuts-into-ubuntu-shortcuts/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 23:40:43 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/?p=173</guid>
		<description><![CDATA[[Update: Feel free to grab the code via bzr with bzr branch http://lackoftalent.org/bzr/shortcut_converter.] Here&#039;s another entry in the &#034;dumb little scripts that work for me and may or may not be helpful to other folks&#034; department&#8230; I use both Windows and Ubuntu at home, gradually transitioning from the former to the latter. I&#039;ve accumulated a [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:173"><!-- &nbsp; --></abbr>
<p>[<strong>Update</strong>: Feel free to grab the code via bzr with <code>bzr branch http://lackoftalent.org/bzr/shortcut_converter</code>.]</p>
<p>Here&#039;s another entry in the &#034;dumb little scripts that work for me and may or may not be helpful to other folks&#034; department&#8230;</p>
<p>I use both Windows and Ubuntu at home, gradually transitioning from the former to the latter.  I&#039;ve accumulated a bunch of Windows URL shortcuts, mostly things I wanted to read once so instead of bookmarking them, I dragged their links to my desktop.  This creates .URL files which are simple little plain-text two-liners.  It turns out that on Ubuntu, and probably similar *nix systems, web shortcuts are also simple little plain-text files.  These files have the .desktop extension (though you won&#039;t see the extension by looking at the desktop).  </p>
<p>I wanted a way to convert my .URL files to .desktop files so that I can just toss them on my Ubuntu desktop and double-click them the same way I would if I were on Windows.  This cruddy little Python script does the trick.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #808080; font-style: italic;"># shortcut_converter.py</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">__future__</span> <span style="color: #ff7700;font-weight:bold;">import</span> with_statement 
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
&nbsp;
TEMPLATE = <span style="color: #483d8b;">&quot;&quot;&quot;[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=%(basename)s
Type=Link
URL=%(url)s
Icon=gnome-fs-bookmark
&quot;&quot;&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> convert<span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot; Takes a full filepath to a .URL file, converts it to a .desktop file 
        in the same directory &quot;&quot;&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Converting %s&quot;</span> <span style="color: #66cc66;">%</span> f
    <span style="color: black;">&#40;</span>filepath, filename<span style="color: black;">&#41;</span> = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span>
    <span style="color: black;">&#40;</span>basename, extension<span style="color: black;">&#41;</span> = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">splitext</span><span style="color: black;">&#40;</span>filename<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">with</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">as</span> urlfile:
        lines = <span style="color: black;">&#91;</span>line.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> urlfile.<span style="color: black;">readlines</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
    url = lines<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'URL='</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
    dtfname = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>filepath, <span style="color: #483d8b;">'%s.desktop'</span> <span style="color: #66cc66;">%</span> basename<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">with</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>dtfname, <span style="color: #483d8b;">'w'</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">as</span> dtfile:
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Writing %s&quot;</span> <span style="color: #66cc66;">%</span> dtfile.<span style="color: black;">name</span>
        dtfile.<span style="color: black;">write</span><span style="color: black;">&#40;</span>TEMPLATE <span style="color: #66cc66;">%</span> <span style="color: #008000;">locals</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
    <span style="color: #ff7700;font-weight:bold;">for</span> arg <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span>:<span style="color: black;">&#93;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">isfile</span><span style="color: black;">&#40;</span>arg<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">and</span> arg<span style="color: black;">&#91;</span>-<span style="color: #ff4500;">3</span>:<span style="color: black;">&#93;</span>.<span style="color: black;">lower</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> == <span style="color: #483d8b;">'url'</span>:
            convert<span style="color: black;">&#40;</span>arg<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;*** %s is not a URL file&quot;</span> <span style="color: #66cc66;">%</span> arg</pre></td></tr></table></div>

<p>I used scp to pull over all my .URL files and then invoked the script thusly:</p>
<p><code>python shortcut_converter.py *.URL</code></p>
<p>worksforme!</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2008/10/29/convert-windows-shortcuts-into-ubuntu-shortcuts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bash, For loop, Files with spaces</title>
		<link>http://lackoftalent.org/michael/blog/2008/09/27/bash-for-loop-files-with-spaces/</link>
		<comments>http://lackoftalent.org/michael/blog/2008/09/27/bash-for-loop-files-with-spaces/#comments</comments>
		<pubDate>Sat, 27 Sep 2008 19:08:53 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Systems]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/?p=154</guid>
		<description><![CDATA[Dear Future Me, Are you trying to iterate over filenames with spaces in them using a bash &#039;for&#039; loop?Â  And instead of iterating over the filenames, you wind up seeing a list of filename parts split by said spaces?Â  Use case: you want to print out a list of unique extensions for all files in [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:154"><!-- &nbsp; --></abbr>
<p>Dear Future Me,</p>
<p>Are you trying to iterate over filenames with spaces in them using a bash &#039;for&#039; loop?Â  And instead of iterating over the filenames, you wind up seeing a list of filename parts split by said spaces?Â  Use case: you want to print out a list of unique extensions for all files in the current directory and below:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<code>for file in `find . -type f`; do echo ${file##*.}; done | sort | uniq</code></p>
<p>If any filenames have spaces in them, you may see odd results.Â   The answer?Â  Set the input field separator (IFS) environment variable to the newline character (rather than the default space character):</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<code>export IFS=$'\n'</code></p>
<p>And <em>voila</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2008/09/27/bash-for-loop-files-with-spaces/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Stupid terminal tricks</title>
		<link>http://lackoftalent.org/michael/blog/2008/06/08/stupid-terminal-tricks/</link>
		<comments>http://lackoftalent.org/michael/blog/2008/06/08/stupid-terminal-tricks/#comments</comments>
		<pubDate>Sun, 08 Jun 2008 05:19:05 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Systems]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/?p=128</guid>
		<description><![CDATA[Sometimes I find it useful to keep long-running processes in a session of screen.Â  And sometimes I launch one of said processes outside of screen, and then I yell something like &#034;doh!&#034; or an expletive, because, as I said, I do find screen useful.Â  Depending on how far the process has gotten, whether it was [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:128"><!-- &nbsp; --></abbr>
<p>Sometimes I find it useful to keep long-running processes in a session of <a href="http://en.wikipedia.org/wiki/GNU_Screen" target="_blank">screen</a>.Â  And sometimes I launch one of said processes outside of screen, and then I yell something like &#034;doh!&#034; or an expletive, because, as I said, I do find screen useful.Â  Depending on how far the process has gotten, whether it was the sort of operation that would not run happily again, or how much cleanup a second run would require, I either kill the process and restart it or I suspend it with Ctrl+z and send it to the background with <code>bg %</code> so that it doesn&#039;t die when I log off.Â  The latter is a decent option.Â  But, darn it, I like screen.</p>
<p>Well, perhaps I&#039;m the last to know, but there&#039;s this neat little tool called <a href="http://pasky.or.cz/~pasky/dev/retty/" target="_blank">retty</a> that allows you to attach running processes to your terminal.Â  I installed it in Ubuntu Hardy the typical way (<code>sudo apt-get install retty</code>).Â  So, the next time I screw up, I&#039;ll Ctrl+z, bg it, and then <code>screen retty {PID}</code>.Â  <i>Voila</i>!</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2008/06/08/stupid-terminal-tricks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hiccup-y Hardy Heron</title>
		<link>http://lackoftalent.org/michael/blog/2008/04/29/hiccup-y-hardy-heron/</link>
		<comments>http://lackoftalent.org/michael/blog/2008/04/29/hiccup-y-hardy-heron/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 18:40:20 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Systems]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/?p=126</guid>
		<description><![CDATA[In spite of how irksome I find &#034;oh hai i upgrayded!&#034; posts, I&#039;m about to be guilty of same. I upgraded my Optiplex GX620 from Gutsy to Hardy yesterday afternoon and it seemed to go as smoothly as it did on my HP box at home.Â  All looked a-okay this morning until, upon returning from [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:126"><!-- &nbsp; --></abbr>
<p>In spite of how irksome I find &#034;oh hai i upgrayded!&#034; posts, I&#039;m about to be guilty of same.</p>
<p>I upgraded my Optiplex GX620 from Gutsy to <a target="_blank" href="https://wiki.ubuntu.com/HardyHeron">Hardy</a> yesterday afternoon and it seemed to go as smoothly as it did on my HP box at home.Â  All looked a-okay this morning until, upon returning from a meeting, my display was all funky and jerky and laggy.Â  The right edges of my windows were uniformly screwy &#8212; I would have to click about an inch to the left of whatever I wanted to click on &#8212; and the right and left edges of the screen caused visual trails when I dragged windows around.Â  (And this has nothing to do with my usual breakfast of bacon and psychedelics.)Â  This wasn&#039;t the first time I&#039;ve run into problems with compiz/beryl and Ubuntu and so I was hopeful that things could be easily remedied.</p>
<p>I was still able to get around a bit and I found a <a href="http://wiki.cchtml.com/index.php/Ubuntu_Hardy_Installation_Guide#Removing_Mesa_drivers" target="_blank">Hardy installation guide</a> that fixed me all up (I hope).</p>
<p>I should probably note that the Optiplex in question has an ATI Radeon X600 series video card.</p>
<p>Pining for the visual trails,</p>
<p>Mike from Arlington</p>
<p>P.S. Ubuntu, I still &hearts; you.</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2008/04/29/hiccup-y-hardy-heron/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Linux to fix Windows</title>
		<link>http://lackoftalent.org/michael/blog/2007/10/13/using-linux-to-fix-windows/</link>
		<comments>http://lackoftalent.org/michael/blog/2007/10/13/using-linux-to-fix-windows/#comments</comments>
		<pubDate>Sat, 13 Oct 2007 20:30:00 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Systems]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/2007/10/13/using-linux-to-fix-windows/</guid>
		<description><![CDATA[The hard drive on my laptop is slowly failing and a combination of being busy, lazy, and cheap is preventing me from replacing it. About once every two weeks over the past couple months, one of the Windows registry files becomes corrupted and the XP disk is unable to repair it. And the HD fails [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:109"><!-- &nbsp; --></abbr>
<p>The hard drive on my laptop is slowly failing and a combination of being busy, lazy, and cheap is preventing me from replacing it.  About once every two weeks over the past couple months, one of the Windows registry files becomes corrupted and the XP disk is unable to repair it.  And the HD fails basic manufacturer-provided diagnostics.  But I&#039;m stubborn.  So I&#039;ve been routinely resuscitating this box and I decided to post the process I use.</p>
<p>If you boot and see a message like</p>
<blockquote><p>Windows could not start because the following file is missing or corrupt<br />
C:\windows\system32\config\system</p></blockquote>
<p>then you may be interested in this.<br />
<span id="more-109"></span><br />
I should note that there are <a href="http://xphelpandsupport.mvps.org/how_do_i_repair_a_missing_or_cor1.htm" target="_blank">more</a> <a href="http://www.help2go.com/Tutorials/Windows/C:%5Cwindows%5Csystem32%5Cconfig%5Csystem_missing_or_corrupt.html" target="_blank">Windows-y</a> ways to fix this.  But I have an Ubuntu Edgy disc on hand, and so these instructions are for using Ubuntu Edgy as <del datetime="2007-10-13T19:50:57+00:00">a band-aid</del> <ins datetime="2007-10-13T19:50:57+00:00">an adhesive bandage</ins> for a dying hard drive or a screwy Windows installation.  The ntfs-3g and ntfs-config packages are necessary to mount your local hard drive in read-write mode, otherwise these instructions would be much shorter.</p>
<p>I&#039;m assuming you have a good backup from which to restore the missing or corrupt files that are preventing you from booting Windows off your hard drive.  My backups are available via a networked Samba mount.  If yours are on a secondary internal hard drive, an external hard drive, a CD or floppy or thumb drive, some of these steps won&#039;t apply to you.</p>
<ol>
<li>Get a copy of <a href="http://www.ubuntu.com/getubuntu/download" target="_blank">Ubuntu</a> and burn it to a bootable medium.  I&#039;m using a Ubuntu 6.10 (Edgy) on a CD-R.</li>
<li>Insert your bootable medium into the crappy computer.  Boot said crappy computer from the medium.  You may need to fiddle with your BIOS to get it to boot from removable media, but hopefully not.</li>
<li>At the Ubuntu boot menu, chose &#034;Start or Install Ubuntu.&#034;  Don&#039;t worry: it won&#039;t write over your hard drive or touch any of your data.</li>
<li>When the operating system is done loading, click on the Applications menu, and choose Accessories, then Terminal.</li>
<li>Since my backups are available on a Samba mount, and the Edgy CD does not have Samba installed, I first must install the Samba FS and its dependencies: <code><br />
sudo apt-get install smbfs</code></li>
<li>Create a directory for mounting the Samba share:<br />
<code>sudo mkdir /mnt/remote</code></li>
<li>Mount the share, substituting appropriate values for the IP address and the share name:<br />
<code>sudo smbmount //192.168.1.5/backups /mnt/remote</code></li>
<li>If not running Edgy, see this <a href="https://help.ubuntu.com/community/MountingWindowsPartitions/ThirdPartyNTFS3G" target="_blank">guide</a> to mounting local Windows drives in read-write mode.  Otherwise, first open the aptitude sources list:<br />
<code>sudo nano -wc /etc/apt/sources.list</code><br />
and add the following three lines at the bottom of the file:</p>
<blockquote><p>deb http://flomertens.free.fr/ubuntu/ edgy main main-all<br />
deb http://ntfs-3g.sitesweetsite.info/ubuntu/ edgy main main-all<br />
deb http://flomertens.keo.in/ubuntu/ edgy main main-all</p></blockquote>
<p>Save and close the file.</li>
<li>Let aptitude update its list of sources:<br />
<code>sudo apt-get update</code></li>
<li>Install necessary packages:<br />
<code>sudo apt-get install ntfs-3g ntfs-config libfuse2</code></li>
<li>Launch the ntfs-config utility:<br />
<code>sudo ntfs-config</code><br />
Call the mount point &#034;windows&#034;, which will live at /media/windows.  Click the Add checkbox next to the device corresponding to your local drive (/dev/hda1 for me).  Click Apply.  Make sure the checkbox next to &#034;Enable write support for internal drive&#034; is clicked on the next dialog, and click Ok.</li>
<li>Copy over backed up versions of missing or corrupt files: <code><br />
sudo cp /mnt/remote/repair/system* /media/windows/WINDOWS/system32/config/</code><br />
is an example I&#039;ve used a couple times.</li>
<li>Shutdown, remove the Ubuntu CD when prompted, and boot off your hard drive.  Cross fingers.  And you should be back in action.</li>
</ol>
<p><em>Voila?</em></p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2007/10/13/using-linux-to-fix-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NJLA 2007 Talk</title>
		<link>http://lackoftalent.org/michael/blog/2007/06/05/njla-2007-talk/</link>
		<comments>http://lackoftalent.org/michael/blog/2007/06/05/njla-2007-talk/#comments</comments>
		<pubDate>Tue, 05 Jun 2007 22:04:02 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Digital Libraries and Archives]]></category>
		<category><![CDATA[Feeds]]></category>
		<category><![CDATA[Libraries]]></category>
		<category><![CDATA[NJLA2007]]></category>
		<category><![CDATA[OpenSearch]]></category>
		<category><![CDATA[Systems]]></category>
		<category><![CDATA[unAPI]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/2007/06/05/njla-2007-talk/</guid>
		<description><![CDATA[This is a slightly modified (read: rough) transcription of the talk I gave at this year&#039;s NJLA conference, called &#034;Library Revolution.&#034; The abstract described an idealistic scenario: Imagine, if you will, a world where library services are automatically discovered; Library users retrieve information objects and metadata with a single click, never having to navigate the [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:93"><!-- &nbsp; --></abbr>
<p>This is a slightly modified (read: rough) transcription of the talk I gave at this year&#039;s <a href="http://www.njla.org/conference/2007/">NJLA conference</a>, called &#034;Library Revolution.&#034;  <span id="more-93"></span></p>
<p>The abstract described an idealistic scenario:</p>
<blockquote><p>Imagine, if you will, a world where library services are automatically discovered; Library users retrieve information objects and metadata with a single click, never having to navigate the dark alleys of dead-ends that are full-text resolvers; Information sources and services are connected and remixed according to user preferences and needs, where and when they wish. What if we could leverage existing library and industry standards, applications, and protocols to make this a reality? And soon?</p></blockquote>
<p>In this scenario, a potential library revolution could be fomented &#8212; in which the goal would be to return the means of production to users, to hand over the reins, to re-envision ourselves as tool- and service-building artisans, as <a href="http://freerangelibrarian.com/">Karen G. Schneider</a> described in her <a href="http://www.code4lib.org/2007/schneider">keynote</a> at the <a href="http://www.code4lib.org/2007">Code4Lib 2007 conference</a>, rather than gatekeepers and information proxies &#8212; and I&#039;m going to suggest some ways this might be achieved.  For now I&#039;ll assume it&#039;s self-evident <em>why</em> it is desirable to, generally speaking, get &#034;our stuff&#034; &#034;out there&#034; and meet users at <em>their</em> points of need.</p>
<p>Rather than get into nitty-gritty details, I&#039;d like to describe a higher-level vision which has been put forward by a host of library technologists that have come before me (especially <a href="http://onebiglibrary.net/">Daniel Chudnov</a>).  Some aspects of my vision may indeed be pie-in-the-sky, but consider this:</p>
<ol>
<li>Isn&#039;t pie delicious?</li>
<li>Shouldn&#039;t we reach for it?</li>
</ol>
<p>So, what&#039;s the problem?  Why a revolution?  Here are some (arguably trite) observations:</p>
<ol>
<li>Full-text resolvers do not work well.  You should not have to click through two, three, or four windows to get at full-text &#8212; assuming it&#039;s actually there and not a complete dead end!  Don&#039;t get me wrong &#8212; it&#039;s better to have access to full-text through a resolver than not to.  I&#039;d like to see more resolver systems that implement look-ahead resolution like Oregon State University&#039;s new, and freely available, metasearch tool, <a href="http://libraryfind.org/">LibraryFind</a>.  LF uses what <a href="http://digitallibrarian.org/">Jeremy Frumkin</a>, the Chair of Innovative Library Services at OSU, likes to call &#034;two-click workflow&#034;: one click to find, one click to get.</li>
<li>Information splatter.  We&#039;ve accumulated too many silos and need to figure out better ways to access all of that information via a single interface, whether the method is federation, aggregation, or something else.  Users should not have to go to multiple sites to search our collections for resources of interest.</li>
<li>Sandboxing.  Our content and services are, generally speaking, tightly coupled to our websites, so we are generally unable to meet users at their points of need.</li>
<li>Service usage &#8212; reference desk visits, OPAC searches &#8212; appears to be dwindling.</li>
<li>Growing popularity of Google, Amazon, and &#034;web 2.0&#034; or social networking sites &#8212; del.icio.us, flickr, twitter, myspace, facebook, ning, librarything.  These sites are great &#8212; especially MySpace, where I get all sorts of offers for new prescription drugs and live adult webcams.  But these sites really -are- great.  They empower users to connect with one another, to describe their own resources, to share with others, to remix information.  And most of all?  They&#039;re incredibly easy to use.  Are our tools as easy to use?  Are we similarly empowering users?</li>
</ol>
<p>An aside on &#034;2.0&#034;: Although I cringe at the viral &#034;2.0&#034; meme &#8212; web 2.0, library 2.0, business 2.0, identity 2.0, enterprise 2.0, learning 2.0, travel 2.0&#8230; &#8212; it is interesting to note that there is something to &#034;2.0&#034;.  Something revolutionary.  And it&#039;s not folksonomies, it&#039;s not tagging, it&#039;s not tag clouds, it&#039;s not sharing, it&#039;s not any particular site or idea.  It is the very fabric of &#034;2.0&#034;, and that is a re-envisioning of the web from connecting people with data to connecting people with people.  The web has evolved from a network of interlinked documents to an extension of the social fabric connecting us all.</p>
<p>As you can see, a revolution of sorts has already begun.  Time magazine selected &#034;You&#034; as their 2006 <a href="http://www.time.com/time/magazine/article/0,9171,1569514,00.html">person of the year</a>.  When MSNBC covered the <a href="http://www.msnbc.msn.com/id/16242528/">story</a>, the headline read &#034;From blogs to YouTube, user-generated content transforms the Internet&#034;.  I&#039;m personally not that interested in the social networking aspect, and it already receives a lot of coverage from the library 2.0 gang.  Library 2.0 is a popular topic now, and much has been said of wikis, blogs, and RSS.  These are important topics but others are already covering them quite well.  The point to take away from 2.0, in my view, is that it&#039;s empowering and inspiring users to do things with information they previously were not able or willing to do.  Ask tens of millions of people to help us catalog MARC records?  Right.  But ask them to tag videos on YouTube, bands on Last.FM, images on Flickr, links on del.icio.us, and so forth?  There you go.  My areas of interest with regard to library revolution are unifying our content and services, getting them outside the library sandbox, and returning the means of production in this very &#034;2.0&#034; way.</p>
<p>Let&#039;s step through some technologies and technological concepts that may play a role in reaching this outcome.</p>
<ul>
<li>Systems integration: We have accumulated a wealth of resources over the years and have purchased, or built, or licensed, numerous systems to access these resources that have traditionally been disparate.  This is a great accomplishment; the more information we can get into the hands of our users, the better.  The process doesn&#039;t scale, though, and has resulted in a proliferation of information silos.  Because of thorny issues of interoperability, not to mention licensing issues, technological incompatibilities, and lack of resources, we have thus far struggled to bridge the gaps between these silos.  The result?  A number of different search interfaces, with different result sets, in different formats, supporting different depths of coverage.<br />&nbsp;<br />&nbsp;How can we reconcile in our users&#039; minds this information environment with the &#034;simple, single search box&#034; mentality of the Google age?   What if we built bridges between our systems?  Pull together metasearch with the link resolver, the link resolver with the catalog, the catalog with institutional repositories.  Easy, right?  Well, no.  But at the very least, if you can get <a href="http://www.w3.org/XML/">XML</a> out of these systems &#8212; whether through <a href="http://www.openarchives.org/OAI/openarchivesprotocol.html">OAI-PMH</a>, or <a href="http://www.loc.gov/standards/sru/">SRU</a>, or a database export &#8212; you can bring it together.  Index it with a tool like <a href="http://lucene.apache.org/solr/">Solr</a>, and you&#039;ve got your Google-ish library search tool.</li>
<li>Auto-discovery: Auto-discovery is used by a number of technologies, though perhaps its usage to announce syndication (RSS) feeds is the most well-known.  The mechanism for syndication auto-discovery is actually quite simple.  Got a feed for your site?  Add a single line of HTML code to any page you&#039;d like to announce it on, and modern web browsers will pick it up and clue you in.<br />&nbsp;<br />&nbsp;In HTML, there is a <a href="http://www.w3.org/TR/html401/struct/links.html#h-12.3">LINK</a> tag, not to be confused with the A tag (which stands for anchor) commonly used for hyperlinks.  The anchor and link tags differ in the following ways:
<ul>
<li>Anchor tags may have text content and show up as labels for links.  For instance, you might link to FoxNews.com and label it &#034;Fair and balanced?  Yeah right.&#034;  LINK tags do not have text content.</li>
<li>Actionability: Anchor tags are clickable.  They take you someplace.  LINK tags are not clickable.</li>
<li>Context: Anchor tags appear in the body of a document.  LINK tags appear in the HEAD.</li>
<li>Semantics: Anchor tags may represent any number of things.  It might be a link to content further down in the current page, it might link to another page entirely, or it might even be used to activate some javascript or launch a popup window.  LINK tags are used solely to describe document relationships, more semantic information.  For instance, a LINK tag might describe a link to the next and previous chapters in an e-book, a LINK tag might be used to link to alternative representations of a document, such as versions in other languages, or versions formatted in RSS or the Atom syndication format.  The LINK tag is a great way to leverage the existing web architecture to handle the problem of &#034;one resource, many representations&#034;, and I wouldn&#039;t be surprised if the <a href="http://www.openarchives.org/ore/">OAI-Object Reuse and Exchange</a> initiative took a hard look at it.</li>
</ul>
<p>The LINK tag sort of auto-discovery, such as for syndication feeds, is common, but is not the only implementation of auto-discovery.  There are more sophisticated ways, such as Zero Configuration Networking.</li>
<li>Syndication: You&#039;ve probably heard a lot about <a href="http://en.wikipedia.org/wiki/RSS_(file_format)">RSS</a>, or Really Simple Syndication, and I wouldn&#039;t be surprised if most of you are already using it.  It&#039;s a great technology, simple to use and implement, and I know it saves me a great deal of time on a daily basis.  Instead of having to click through and browse the 50 or so websites I track regularly, I read updated content from each site in my feed aggregator in a unified interface. A lot of attention is already paid to RSS, especially in library 2.0 circles, so I won&#039;t say much more about it.  Syndication allows content to be syndicated into feeds that folks can subscribe to and unsubscribe from willy-nilly.<br />&nbsp;<br />&nbsp;But I thought it was important to include an explicit mention of syndication since a couple of the other topics relate to it, and since it is a great example of getting stuff out there.  Rather than requiring your audience to come to your website, syndication enables them to read your content in an environment of their choosing.  It&#039;s worth noting that my wife is not a fan of syndication.  She likes the experience of going to different websites, enjoying their different takes on web design, and compartmentalizing her web surfing.  And that&#039;s great; no one, to the best of my knowledge, has advocated an &#034;RSS-only&#034; interface.  Content available in the RSS format is also available otherwise, so it is a convenient option for people like myself.<br />&nbsp;<br />&nbsp;One more point about RSS, despite saying I wouldn&#039;t talk much about it.  It&#039;s kind of an academic point, but I feel it warrants some clarification.  The term RSS has quickly become the Band-Aid, or the Kleenex, of syndication feeds.  RSS is one of a number of formats used for marking up syndication feeds.  Another is the <a href="http://www.atomenabled.org/developers/syndication/atom-format-spec.php">Atom Syndication Format</a>.  Most browser and feed aggregators are fully aware of both feed types &#8212; for instance, Bloglines has supported both formats since June of 2006 &#8212; and they generally should render the same, and that&#039;s why you don&#039;t hear about Atom much; it&#039;s a detail that is, for the most part, behind the scenes.</li>
<li>OpenSearch: Does anyone here have a website or a catalog?  Do they have search interfaces?  Perfect, you&#039;re about a third of the way there.  <a href="http://www.opensearch.org/Home">OpenSearch</a> is a specification for some simple formats that allow you to share search results.  Just as syndication allows you to decouple your content from your website, OpenSearch allows you to decouple your search engines from your websites.  Here&#039;s how it works:
<ol>
<li>Go to your search page and look at the URL after you run a search</li>
<li>Write an OpenSearch description document</li>
<li>Embed a LINK tag linking to the OpenSearch description document, for auto-discovery</li>
<li>Return search results in RSS or Atom</li>
</ol>
<p>You might ask &#034;why bother?&#034;  Firstly, the newest browsers &#8212; FF2 and IE7, among others &#8212; support auto-discovery of OpenSearch targets.  So folks can search Google, Wikipedia, Amazon, eBay &#8230; and your websites or catalogs directly from their browser.  Secondly, it allows for fairly simple federation of searches across OpenSearch targets.  Since each target contains a description document that is machine-readable, I can point my OpenSearch client at a number of targets, find their descriptions, and learn how to search them.  Results are, by convention, returned in RSS or Atom, which are easily crosswalkable, so aggregating result sets is fairly trivial (though how to sort or rank them is tricky).  Thirdly, since results are returned as RSS or Atom, one can in effect subscribe to search results.  For example, you could subscribe to a search on Wikipedia for &#034;Anarcho-Syndicalism&#034;, and your feed aggregator will be alerted whenever that search returns new results.  Or, a Linguistics professor could subscribe to your catalog&#039;s OpenSearch target, hoping to be alerted when new materials about Germanic syntax are cataloged &#8212; and it&#039;s worth noting, this is as easy as just two or three clicks in a web browser.</li>
<li>unAPI: Numerous tools and protocols exist for integrating library resources into other information systems, library or otherwise.  OAI-PMH and OpenURL are two great examples of successful and widely deployed technologies.  Unfortunately, few developers outside the relatively small world of library technology know anything about library standards, and this is seen as a significant integration barrier.  Dan Chudnov, a librarian programmer at LC, <a href="http://onebiglibrary.net/story/rethinking-openurl">reflected</a> on this: &#039;we librarians and those of us librarians who write standards tend, in writing our standards, to &#034;make complex things possible, and make simple things complex.&#034;&#039;<br />&nbsp;<br />&nbsp;To address this issue, a number of librarians and technologists came together to develop a new standard called <a href="http://unapi.info/">unAPI</a>.  unAPI is a tiny web-based specification designed to solve the problem of identifying, copying, and pasting discrete content objects to and from web applications (including catalogs, bibliographic databases, repositories, link resolvers, and so forth), making it simpler for developers outside the library world to get at our vast intellectual resources.  The objective of unAPI, then, is to enable web sites with HTML interfaces to information-rich objects to simultaneously publish richly structured metadata for those objects, or those objects themselves, in a predictable and consistent way for machine processing.<br />&nbsp;<br />&nbsp;unAPI consists of three parts: A <a href="http://en.wikipedia.org/wiki/Microformats">microformat</a> for embedding object identifiers in HTML, an HTML LINK tag for unAPI service auto-discovery (as used for RSS, Atom, and OpenSearch), and a web service consisting of three functions&#8211;get formats , get formats for x identifier , get format y of identifier x &#8212; two of which have a standardized response format, returning XML.</li>
<li>ZeroConf: I want to acknowledge Dan Chudnov again, for suggesting that Zero Configuration Networking might have a place in library services.  The general question here is &#034;why can&#039;t library tools be as cool as iTunes is?&#034;  Just waltz into Starbucks, connect to the wi-fi, and you can see everyone else&#039;s playlist.  You can listen to their music, even.  What sort of magic made this sort of auto-discovery &#034;just work?&#034;<br />&nbsp;<br />&nbsp;The technology is called <a href="http://www.zeroconf.org/">Zero Configuration Networking</a>, or ZeroConf, though you may see older mentions under the names Rendezvous and Bonjour.  Without getting into the hairy details, ZeroConf is a small stack of fairly low-level technologies that piggy-back on the ubiquitous domain name system (or DNS), which enables us to type identifiers like &#034;google.com&#034; and &#034;nytimes.com&#034; into a web browser and rest assured that our computers will take care of the rest for us &#8212; looking up the domain name, finding the network address of the server, connecting to the server on an appropriate port, and so forth.  ZeroConf allows machines to connect to networks without any knowledge of what&#039;s already on the network, without regard for the type of network topology or infrastructure, and both register the services it provides and query the services already provided by other nodes on the network.  It sounds complicated, but everytime you walk into Starbucks and start up iTunes, it seems pretty trivial.  It &#034;just works.&#034;<br />&nbsp;<br />&nbsp;Wouldn&#039;t it be great if users could discover our services and resources that easily?  What if we went through with systems integration and announced that unified service via ZeroConf?  A visiting scholar could enter our library, connect her machine to the network &#8212; and let&#039;s forget about authentication and authorization for now &#8212; and immediately find our new service, from which she could run a simple search against all of our bibliographic databases, all of our catalog records, all of our full-text holdings, and all of our repository objects.  What if library services &#034;just worked&#034;?Significant work needs to be done in this area before it becomes viable as I&#039;ve just described, but I find it to be a compelling vision.</li>
</ul>
<p>The technology as is widely acknowledged is the easy part.  So how do we get there?  How do we re-envision ourselves as library artisans?  How do we craft services that &#034;just work?&#034;  How can we investigate all these technologies that let us unleash our considerable assets?</p>
<ol>
<li>Commitment to innovation.  If you can afford to have skunkworks in your organization, even if it&#039;s only one employee, or allowing a couple of creative individuals to devote 10% of their time to innovative pursuits, it&#039;s worth it.</li>
<li>Bold direction.</li>
<li>Think outside the orgchart &#8212; leverage collaborative development, forge communities, make the most of your consortial ties.</li>
<li>&#8230; You tell me.</li>
</ol>
<p>We can yield revolutionary results via small steps and a bold, forward-thinking direction.  Pie in the sky?  Maybe, but isn&#039;t pie delicious?  (Yes, that was a glib and abrupt ending, but I&#039;m tired of editing.)</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2007/06/05/njla-2007-talk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Fedora?  More answers to the Fedora users survey</title>
		<link>http://lackoftalent.org/michael/blog/2006/09/25/why-fedora-more-answers-to-the-fedora-users-survey/</link>
		<comments>http://lackoftalent.org/michael/blog/2006/09/25/why-fedora-more-answers-to-the-fedora-users-survey/#comments</comments>
		<pubDate>Mon, 25 Sep 2006 23:58:30 +0000</pubDate>
		<dc:creator>Michael Giarlo</dc:creator>
				<category><![CDATA[code4lib]]></category>
		<category><![CDATA[Digital Libraries and Archives]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[Preservation]]></category>
		<category><![CDATA[Repositories]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Systems]]></category>

		<guid isPermaLink="false">http://lackoftalent.org/michael/blog/2006/09/25/why-fedora-more-answers-to-the-fedora-users-survey/</guid>
		<description><![CDATA[I noticed this response to the Fedora users survey on Peter Murray&#039;s blog, and figured I&#039;d post a response. Since my previous employer did not use Fedora, and I haven&#039;t begun my new job yet, I&#039;ll be posting about our use of Fedora at Rutgers, The State University of New Jersey. How did you hear [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="oai:lackoftalent.org:technosophia:57"><!-- &nbsp; --></abbr>
<p>I noticed this <a target="_blank" href="http://dltj.org/2006/09/fedora-users-interview-survey/">response to the Fedora users survey </a>on Peter Murray&#039;s blog, and figured I&#039;d post a response. Since my previous employer did not use Fedora, and I haven&#039;t begun my new job yet, I&#039;ll be posting about our use of Fedora at Rutgers, The State University of New Jersey.</p>
<p><span id="more-57"></span><br />
<strong>How did you hear about Fedora?</strong><br />
I heard about Fedora through Ron Jantz, Rutgers&#039; Digital Library Architect, in the summer of 2002. I was working at Rutgers then, actively seeking and tinkering with digital repository software. I installed the 0.9 version of Fedora in December of 2002, if memory serves.</p>
<p><strong>Why did you choose Fedora?</strong><br />
I&#039;d already installed DSpace, Greenstone, and DLXS, and none of them seemed to suit our needs very well. Fedora was an easy choice to make for us since it seemed to be the only repository system that supported <em>any</em> metadata schemas we threw at it, which was a hard requirement, and also its ability to support behavior preservation via disseminators set it apart from the others. Additional advantages were that it exposed its methods through well-documented APIs, which other <a target="_blank" href="http://dspace.org/">major repository systems</a> still do not seem to do. In short, it was a clear decision.</p>
<p>The only drawback was the lack of an out-of-the-box interface, but we saw that as more of an opportunity to keep our back-end system separated from its interfaces, and our development team was eager for the chance to develop a customized set of interfaces.</p>
<p>Also, it&#039;s free.</p>
<p><strong>Were there economic advantages to your project/org. in selecting Fedora?</strong><br />
I mentioned that Fedora is free, right? I know of no other economic advantages though perhaps one could argue that its inclusion in certain grants was beneficial.</p>
<p><strong>What is Fedora&#039;s unique role in your production system?</strong><br />
Fedora serves as the back-end of <a target="_blank" href="http://rucore.libraries.rutgers.edu/">RUcore</a>: the digital institutional repository of Rutgers University, statewide digital initiatives such as the <a target="_blank" href="http://www.njdigitalhighway.org/">New Jersey Digital Highway</a>, and electronic journals such as <a target="_blank" href="http://pcsp.libraries.rutgers.edu/">Pragmatic Case Studies in Psychotherapy. </a>It is being used to preserve and provide access to metadata and data objects.</p>
<p><strong>Is there one specific Fedora attribute that enables your project/organization to accomplish your overall goals.</strong><br />
Flexibility with regard to metadata; extensibility of Fedora via its service framework; support for custom disseminators and behavior preservation; usage of the filesystem rather than complete dependence upon RDBMS; separation of repository methods and interfaces; and exposure of methods via web services APIs.</p>
<p><strong>Do you see yourself as an active member of the Fedora community? And why?</strong><br />
I see myself as an active consumer in the Fedora community. I haven&#039;t worked with Fedora in over a year due to a job change, so I haven&#039;t contributed anything in a while. I hope to remedy this in my new position, though I&#039;m not yet convinced that Fedora is the right solution for them.</p>
<p><strong>What would inspire you to become more involved?</strong><br />
An employer that has committed to Fedora.</p>
<p><strong>What should be the mission of an ongoing Fedora organization? </strong><br />
Continuing support and upgrades, outreach to Fedora users, and advocacy to ensure that folks know what the benefits of Fedora are.</p>
]]></content:encoded>
			<wfw:commentRss>http://lackoftalent.org/michael/blog/2006/09/25/why-fedora-more-answers-to-the-fedora-users-survey/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

