<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="/templates/default/atom.css" type="text/css" ?>

<feed version="0.3" 
   xmlns="http://purl.org/atom/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    <link href="http://coffeecode.net/rss.php?version=atom0.3" rel="service.feed" title="Coffee|Code : Dan Scott, Caffeinated Librarian Geek" type="application/x.atom+xml" />
    <link href="http://coffeecode.net/"                        rel="alternate"    title="Coffee|Code : Dan Scott, Caffeinated Librarian Geek" type="text/html" />
    <link href="http://coffeecode.net/rss.php?version=2.0"     rel="alternate"    title="Coffee|Code : Dan Scott, Caffeinated Librarian Geek" type="application/rss+xml" />
    <title mode="escaped" type="text/html">Coffee|Code : Dan Scott, Caffeinated Librarian Geek</title>
    <tagline mode="escaped" type="text/html">Many ideas crammed into bits...</tagline>
    <id>http://coffeecode.net/</id>
    <modified>2008-05-12T13:05:10Z</modified>
    <generator url="http://www.s9y.org/" version="1.3">Serendipity 1.3 - http://www.s9y.org/</generator>
    <dc:language>en</dc:language>
    <info mode="xml" type="text/html">
        <div xmlns="http://www.w3.org/1999/xhtml">You are viewing an ATOM formatted XML site feed. Usually this file is inteded to be viewed in an aggregator or syndication software. If you want to know more about ATOM, please visist <a href="http://atomenabled.org/">Atomenabled.org</a></div>
    </info>

    <entry>
        <link href="http://coffeecode.net/archives/158-Weeding-2.0.html" rel="alternate" title="Weeding 2.0" type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2008-05-11T04:07:18Z</issued>
        <created>2008-05-11T04:07:18Z</created>
        <modified>2008-05-12T13:05:10Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=158</wfw:comment>
        <slash:comments>4</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=158</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/158-guid.html</id>
        <title mode="escaped" type="text/html">Weeding 2.0</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Okay, this is definitely a lame thing to be thinking about at midnight on a Saturday, but I was just playing with the shelf browser in the <a href="http://open-ils.org" title="Evergreen project page">Evergreen</a> representation of our 780,000 bibliographic records (okay, that is definitely the wrong thing to be <em>doing</em> at midnight on a Saturday). For some reason, I was wandering through the subject collection pertinent to librarians (pray for my soul), noticed a book that probably should have been discarded years ago, and thought "Gee, i don't want to deal with this right now, but wouldn't it be nice if I could just mark this <strong>Weed me</strong> and forget about it until Monday?"</p>
<p>Then I realized that that wouldn't be a stretch at all. In Evergreen, users have "bookbags" to which they can add items. These bookbags can be shared as RSS feeds and otherwise easily exported into other formats. If we were running Evergreen for real, I could create a "Weed me!" bookbag, add in the suspect along with a bunch of other festering tomes, and send the RSS feed to a student to perform the manual labour. Or perhaps the RSS feed gets aggregated with other weeders' feeds and a weeding list gets generated on a monthly basis for efficient labour practices. You get the idea.</p>
<p>Of course, you would really want to have more information than just the stock shelf browsing interface at hand when making weeding decisions. For example, you would need a tally of recorded uses displayed beside the item, with the ability to drill down for totals by year. If you participate in a consortial "last copy standing" program, you would want a quick check to see if any other institutions still hold a copy of the resource. So, an enhanced interface would be needed to provide an experience that combines the traditional weeding approach of roaming the stacks and generating reports of items matching some minimum age and minimum usage criteria.</p>
<p>Think about it a little further though (I'm sure you're thinking a lot faster than me at this point; you're probably having the luxury of reading this at the beginning of the day, coffee in hand, invigorated after an early morning run in the lingering late spring chill... or not), and there are points in our institutional workflows where we could naturally introduce weeding activities. How do we get to the point of having three editions of a given text on the shelf? If I have the 1995, 2003, and 2007 editions of a text, I can assure you that when I ordered the 2007 edition I had already checked our ILS to see if we had a copy of that edition already, and would have noticed the previous editions. At that point, I should have the ability to say "Oh - get rid of the 1995 edition <strong>now</strong> and once the 2007 edition is processed and on the shelf, cull the 2003 edition to boot." If I was designing an acquisitions module today, that's certainly something I would consider as a nice-to-have. Ahem.</p>
<p>Weeding 2.0 may not be a sexy subject. <a href="http://www.google.ca/search?q=%22weeding+2.0%22">Google</a> and <a href='http://search.yahoo.com/search?p="weeding+2.0"'>Yahoo</a> each turn up exactly four hits, none of them related to libraries, which is remarkable in this overly-hyped everything 2.0 world. But it's something we should consider in the design and tailoring of our library systems; and while it's not going to rank in my top level of priorities for Evergreen, it will work its way in there somewhere, sometime. Hopefully before the stacks in my subject areas buckle under the weight of unused, out-of-date books.</p> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://coffeecode.net/archives/157-Two!-2!-Too!-Tu!-Tout!.html" rel="alternate" title="Two! 2! Too! Tu! Tout!" type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2008-05-10T13:32:00Z</issued>
        <created>2008-05-10T13:32:00Z</created>
        <modified>2008-05-12T16:24:31Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=157</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=157</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/157-guid.html</id>
        <title mode="escaped" type="text/html">Two! 2! Too! Tu! Tout!</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <div class="serendipity_imageComment_left" style="width: 110px"><div class="serendipity_imageComment_img"><a class='serendipity_image_link' href='http://coffeecode.net/uploads/pics/amber/amber_bday_2008_1.jpg' onclick="F1 = window.open('/uploads/pics/amber/amber_bday_2008_1.jpg','Zoom','height=501,width=663,top=141,left=188,toolbar=no,menubar=no,location=no,resize=1,resizable=1,scrollbars=yes'); return false;"><!-- s9ymdb:263 --><img class="serendipity_image_left" width="110" height="83"  src="http://coffeecode.net/uploads/pics/amber/amber_bday_2008_1.serendipityThumb.jpg" alt="" /></a></div><div class="serendipity_imageComment_txt">Ramping up</div></div>
<p>This year, we hosted a small party focusing on the little ones in Amber's life: a few of her friends from day care, and a friend from up the street.</p><br clear="all"/>

<div class="serendipity_imageComment_left" style="width: 110px"><div class="serendipity_imageComment_img"><a class='serendipity_image_link' href='http://coffeecode.net/uploads/pics/amber/amber_bday_2008_2.jpg' onclick="F1 = window.open('/uploads/pics/amber/amber_bday_2008_2.jpg','Zoom','height=501,width=663,top=141,left=188,toolbar=no,menubar=no,location=no,resize=1,resizable=1,scrollbars=yes'); return false;"><!-- s9ymdb:264 --><img class="serendipity_image_left" width="110" height="83"  src="http://coffeecode.net/uploads/pics/amber/amber_bday_2008_2.serendipityThumb.jpg" alt="" /></a></div><div class="serendipity_imageComment_txt">The amazing cat cake</div></div>
<p>Lynn used the same carrot cake recipe as last year (nice and tasty!), but this year it came in the appearance of Amber's favourite animal.</p><br clear="all"/>

<div class="serendipity_imageComment_left" style="width: 110px"><div class="serendipity_imageComment_img"><a class='serendipity_image_link' href='http://coffeecode.net/uploads/pics/amber/amber_bday_2008_3.jpg' onclick="F1 = window.open('/uploads/pics/amber/amber_bday_2008_3.jpg','Zoom','height=501,width=663,top=141,left=188,toolbar=no,menubar=no,location=no,resize=1,resizable=1,scrollbars=yes'); return false;"><!-- s9ymdb:265 --><img class="serendipity_image_left" width="110" height="83"  src="http://coffeecode.net/uploads/pics/amber/amber_bday_2008_3.serendipityThumb.jpg" alt="" /></a></div><div class="serendipity_imageComment_txt">She blew out the candle herself. Self! SELF!</div></div>
<p>Blowing out the candle was a huge success.</p><br clear="all"/>

<div class="serendipity_imageComment_left" style="width: 110px"><div class="serendipity_imageComment_img"><a class='serendipity_image_link' href='http://coffeecode.net/uploads/pics/amber/amber_bday_2008_4.jpg' onclick="F1 = window.open('/uploads/pics/amber/amber_bday_2008_4.jpg','Zoom','height=501,width=663,top=141,left=188,toolbar=no,menubar=no,location=no,resize=1,resizable=1,scrollbars=yes'); return false;"><!-- s9ymdb:266 --><img class="serendipity_image_left" width="110" height="83"  src="http://coffeecode.net/uploads/pics/amber/amber_bday_2008_4.serendipityThumb.jpg" alt="" /></a></div><div class="serendipity_imageComment_txt">Cake distribution went smoothly</div></div>
<p>Very little cake was wasted in the making of this birthday. Most of the cake was consumed rather than applied to faces or clothes.</p><br clear="all"/>

<div class="serendipity_imageComment_left" style="width: 110px"><div class="serendipity_imageComment_img"><a class='serendipity_image_link' href='http://coffeecode.net/uploads/pics/amber/amber_bday_2008_5.jpg' onclick="F1 = window.open('/uploads/pics/amber/amber_bday_2008_5.jpg','Zoom','height=501,width=663,top=141,left=188,toolbar=no,menubar=no,location=no,resize=1,resizable=1,scrollbars=yes'); return false;"><!-- s9ymdb:267 --><img class="serendipity_image_left" width="110" height="83"  src="http://coffeecode.net/uploads/pics/amber/amber_bday_2008_5.serendipityThumb.jpg" alt="" /></a></div><div class="serendipity_imageComment_txt">Daddy and Amber wound down with a book in the window on a rainy day</div></div>
<p>Thanks to everyone for their cards and calls and emails celebrating Amber's birthday!</p> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://coffeecode.net/archives/156-Tuning-PostgreSQL-for-Evergreen-on-a-test-server.html" rel="alternate" title="Tuning PostgreSQL for Evergreen on a test server" type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2008-04-14T18:48:19Z</issued>
        <created>2008-04-14T18:48:19Z</created>
        <modified>2008-05-02T01:39:17Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=156</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=156</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/156-guid.html</id>
        <title mode="escaped" type="text/html">Tuning PostgreSQL for Evergreen on a test server</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p><strong>Update 2008-05-01</strong>: Fixed a typo for sysctl: -a parameter simply shows all settings; -w parameter is needed to write the setting. Duh.</p>
<p>
Once you have decided on and acquired your <a href="http://www.coffeecode.net/archives/155-Test-server-strategies.html">test hardware for Evergreen</a>, you need to think about tuning your PostgreSQL database server. Once you start loading bibliographic records, you might notice that after 100,000 records or so that your search response times aren't too snappy. Don't snarl at Evergreen. By default, PostgreSQL ships with very conservative settings (something like machines with 256 MB of RAM!) so if you don't tune those settings you're getting a false representation of your system's capabilities.
</p>
<p>
The "right" settings for PostgreSQL depend significantly on your hardware and deployment context, but in almost any circumstance you will want to bump up the settings from the delivered defaults. To give you an idea of what you need to consider, I thought I would share the settings that we're currently using on our Evergreen test server at Laurentian University. You might be able to use these as a starting point and adjust them accordingly once you've run some representative load tests against your configuration. And it's useful documentation for me to fall back on in a few months, when all of this has escaped my grasp <img src="http://coffeecode.net/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" />
</p>
<h4>The defaults (as shipped in Debian Etch)</h4>
<p>The defaults in Debian Etch are quite conservative. Consider that our test server has 12GB of RAM. The default only allocates 1MB of RAM to work memory (which is critical for sorting performance) and only 8MB of RAM to shared buffers. Following are the defaults set in /etc/postgresql/8.1/main/postgresql.conf:</p>
<pre>
# - Memory -

#shared_buffers = 1000                  # min 16 or max_connections*2, 8KB each
#temp_buffers = 1000                    # min 100, 8KB each
#max_prepared_transactions = 5          # can be 0 or more
# note: increasing max_prepared_transactions costs ~600 bytes of shared memory
# per transaction slot, plus lock space (see max_locks_per_transaction).
#work_mem = 1024                        # min 64, size in KB
#maintenance_work_mem = 16384           # min 1024, size in KB
#max_stack_depth = 2048                 # min 100, size in KB

# - Free Space Map -

#max_fsm_pages = 20000                  # min max_fsm_relations*16, 6 bytes each
#max_fsm_relations = 1000               # min 100, ~70 bytes each
</pre>
<h4>Our test server settings</h4>
<p>Our test server has 12 GB of RAM. Assuming that the PostgreSQL defaults were set for a system with 1 GB of RAM, we should be able to multiply the memory-based settings by at least a factor of 12. We're a little bit more aggressive than that in our settings. Note, however, that this is a single-server install of Evergreen, so we're also running memcached, ejabberd, Apache, and all of the Evergreen services as well as the database - oh, and a test instance of an institutional repository, among other apps - so we're not nearly as aggressive as we would be in a dedicated PostgreSQL server configuration. Please note that I'm making no claims that this is the optimal set of configuration values for PostgreSQL even on our own hardware!</p>
<pre>
# shared_buffers: much of our performance depends on sorting, so we'll set it 100X the default
# some tuning guides suggest cranking this up to as much 30% of your available RAM
shared_buffers = 100000 # 8K * 100000 = ~ 0.8 GB

# work_mem: how much RAM each concurrent process is allowed to claim before swapping to disk
# your workload will probably have a large number of concurrent processes
work_mem=524288 # 512 MB

# max_fsm_pages: increased because PostgreSQL demanded it
max_fsm_pages = 200000
</pre>
<p>After you change these settings, you will need to restart PostgreSQL to make the settings take effect.</p>
<h4>Kernel tuning</h4>
<p>In addition to PostgreSQL complaining about max_fsm_pages not being high enough, your operating system kernel defaults for SysV shared memory might not be high enough to support the amount of RAM PostgreSQL demands as a result of your modifications. In one of our test configurations, we had cranked up work_mem to 8GB; Debian complained about an insufficient SHMMAX setting, so we were able to adjust that by running the following command as root to set the kernel SHMMAX to 8GB (8*1024^2):</p>
<pre>
sysctl -w kernel.shmmax=8589934592
</pre>
<p>To make this setting sticky through reboots, you can simply modify /etc/sysctl.conf to include the following line:</p>
<pre>
# Set SHMMAX to 8GB for PostgreSQL
#kernel.shmmax=8589934592
</pre>
<h4>Other measures</h4>
<p>
Debian Etch comes with PostgreSQL 8.1. The first version of PostgreSQL 8.1 was released in November 2005. That's a long time in computer years. Version 8.2, which was released less than a year later, "adds many functionality and performance improvements" (according to the <a href="http://www.postgresql.org/docs/8.2/static/release-8-2.html">release notes</a>). If you're not getting the performance you expect from your hardware with Debian Etch, perhaps a <a href=" http://packages.debian.org/etch-backports/postgresql-8.2">backport of PostgreSQL 8.2</a> would help out.
</p>
<h4>Further resources</h4>
<p>This is just a shallow dip into PostgreSQL tuning for Evergreen - hopefully enough to alert you to some of the factors you need to consider if you're putting Evergreen into a serious testing environment or production environment. Here are a few places to dig deeper into the art of PostgreSQL tuning:</p>
<ul>
<li>PostgreSQL manual, resource consumption section of server configuration: <a href="http://www.postgresql.org/docs/8.1/static/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY">version 8.1</a> and <a href="http://www.postgresql.org/docs/8.2/static/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY">version 8.2</a></li>
<li>An annotated version of the 8.0 parameters with more explicit advice is available at <a href="http://www.powerpostgresql.com/Downloads/annotated_conf_80.html"></a></li>
<li>Some good advice is buried about halfway down <a href="http://cbbrowne.com/info/postgresql.html">Christopher Browne's page</a> under the heading "Tuning PostgreSQL", along with links to further resources</li>
<li>The "Performance Whack-A-Mole" presentation at  <a href="http://www.powerpostgresql.com/Docs">PowerPostgreSQL</a> is a great tutorial for holistic system tuning</li>
</ul> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://coffeecode.net/archives/155-Test-server-strategies.html" rel="alternate" title="Test server strategies" type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2008-04-10T00:39:18Z</issued>
        <created>2008-04-10T00:39:18Z</created>
        <modified>2008-04-12T16:04:53Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=155</wfw:comment>
        <slash:comments>11</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=155</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/155-guid.html</id>
        <title mode="escaped" type="text/html">Test server strategies</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>
Occasionally on the <a href="http://open-ils.org/irc.php">#OpenILS-Evergreen IRC channel</a>, a question comes up what kind of hardware a site should buy if they're getting serious about trying out Evergreen. I had exactly the same chat with Mike Rylander back in December, so I thought it might be useful to share the strategy we developed in case other organizations are interested in piggy-backing on our research. We came up with three different scenarios, depending on the funding available to the organization and how serious the organization is about testing, developing, and deploying Evergreen.
</p>
<p>
You can also look at the scenarios as stages, as the scenarios enable
progressively more realistic testing. An organization can always
start with a single server and add more servers over time; if you can
swing a significant discount for buying in bulk, however, it might
make sense to bite the bullet early.
</p>
<p>
Some pertinent facts about our requirements: we will eventually be loading around 5 million bibliographic records onto the system. We're an academic organization, so concurrent searching and circulation loads will be low relative to public libraries.
</p>
<h4>Scenario 1: A single bargain-basement testing server</h4>
<p>
In this scenario, the organization purchases a single server for the short
term, and configures it to run the entire Evergreen + OpenSRF stack:
</p>
<ul>
<li>database</li>
<li>Web server</li>
<li>Jabber messaging</li>
<li>memcached</li>
<li>OpenSRF applications</li>
</ul>
</p>
<p>
This server needs to have powerful CPUs, large amounts of RAM, and many fast (10K RPM or higher) hard drives in a
striped RAID configuration (the latter because database performance
typically gets knee-capped by disk access). A "higher education" quote online from a reputable big-name vendor for a rack-mounted 2U database server with 2x4-core
CPU, 16GB RAM, 6x73GB RAID 5 drives comes in at approximately $7000.
</p>
<p>
This scenario is fine for development and testing with a limited
number of users, but if you intend to do any sort of stress testing
with this server or throw it open to the public, performance will
likely grind to a halt. <strong>Note:</strong> This is close to the system that we're currently running at <a href="http://biblio-dev.laurentian.ca">http://biblio-dev.laurentian.ca</a> - 12 GB of RAM, 2 dual-core CPUs - with 800K bibliographic records and pretty snappy search performance. It's certainly nothing to sneeze at.
</p>
<h4>Scenario 2: one database server, one network server</h4>
<p>
In this scenario, you purchase a database server and a network server.
We'll use the same specs from scenario 1 for the database server, and
a CPU + RAM-oriented server for the network server (disk access isn't
a factor for the network apps, so you just buy two small mirrored
drives). The stock higher education quote for a rack-mounted 1U
network server with 2x4-core CPU, 16GB RAM, 2x73GB RAID 1 drives is
approximately $5250.
</p>
<p>
This scenario will support development and testing, as well as enable
you perform relatively representative stress testing runs with a
significant number of simultaneous users.
</p>
<h4>Scenario 3: two database servers, two or three network servers</h4>
<p>
In this scenario, you purchase two database servers so that you can test
database replication, split database loads between search and reporting, and two or three network servers to test
different distributions of the caching and network apps across the servers to
determine the configuration that best meets your expected demands. The cost of the five servers adds up to less than $30,000 - less than a single traditional proprietary UNIX server - and would be less if you can negotiate a bulk discount.
</p>
<p>
The third scenario supports development and testing, and will give you
practical experience with a configuration that would approximate your
production deployment of servers. When you go live, you could move one of the database servers
and all but one of the network servers over to the production cluster, and revert back to scenario one for your ongoing test and development environment.
</p>
<h4>The Conifer approach</h4>
<p>
We opted to go with the third scenario to build a serious test cluster for our consortium. However, the "scenarios as stages" approach ended up being our strategy as our original choice of Dell servers came with RAID controllers that do not work well under Debian. After returning the servers to Dell, we were forced to press one of our backup servers into service as a scenario-one style server while waiting for our new order from HP to arrive.
</p> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://coffeecode.net/archives/154-Inspiring-confidence-that-my-problem-will-be-solved.html" rel="alternate" title="Inspiring confidence that my problem will be solved" type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2008-03-28T01:39:27Z</issued>
        <created>2008-03-28T01:39:27Z</created>
        <modified>2008-03-28T01:39:27Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=154</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=154</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/154-guid.html</id>
        <title mode="escaped" type="text/html">Inspiring confidence that my problem will be solved</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Hmm. I think I'm in trouble if the support site itself is incapable of displaying accented characters properly.</p>
<div class="serendipity_imageComment_center"><div class="serendipity_imageComment_img"><!-- s9ymdb:259 --><img class="serendipity_image_center" src="http://coffeecode.net/uploads/pics/inspiring_confidence.png" alt="Corrupted characters in a problem report about corrupted characters. Oh dear." /></div><div class="serendipity_imageComment_txt">Corrupted characters in a problem report about corrupted characters. Oh dear.</div></div>
<p>
My analysis of the problem is that the content in the middle is contained within a frame, and is actually encoded in ISO-8859-1 - but doesn't have an encoding declaration. And the containing HTML page, of course, declares that it is UTF-8. So poor Mozilla gets very confused. And our poor users continue to get corrupted characters in their reminder and overdues notices.
</p>
<p><em>Note</em>: Some information removed from the screencap to protect the innocent - the client care people are actually excellent folk, and I'm sure they're just as frustrated by the problem reporting system as we are.</p> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://coffeecode.net/archives/153-Progress-with-Project-Conifer.html" rel="alternate" title="Progress with Project Conifer" type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2008-03-27T02:15:25Z</issued>
        <created>2008-03-27T02:15:25Z</created>
        <modified>2008-03-27T02:15:25Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=153</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=153</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/153-guid.html</id>
        <title mode="escaped" type="text/html">Progress with Project Conifer</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Project Conifer is the effort by McMaster University, University of Windsor, and Laurentian University to put together a consortial instance of Evergreen. <a href="http://conifer.mcmaster.ca/node/15">A few weeks back</a>, we agreed that May 2009 would be our go-live date. So the clock is ticking quite loudly in my ears.
</p>
<p>Today I got an <a href="http://biblio-dev.laurentian.ca">Evergreen test server</a> up and running, loaded with the records from the consortium of Laurentian partners. I hit a few bumps on the road, but eventually successfully loaded about 800,000 bibliographic records and about 500,000 items. I also turned on the Syndetics enrichment data, so some items offer cover images, tables of contents, reviews, and author information. The response time is pretty snappy (it's running on a 4-core server with 12GB of RAM).</p>
<p>Things that made my task harder than it probably should have been:</p>
<ul>
<li>yaz-marcdump generated invalid XML when I converted our MARC records from MARC21 to MARC21XML format. Maybe this problem is fixed in later versions of yaz-marcdump (I was using the stable Debian Etch version, 2.1.56, which is <em>crazy</em> old), or I could have tried <a href="http://marc4j.tigris.org/">marc4j</a> or <a href="http://oregonstate.edu/~reeset/marcedit/html/index.html">MarcEdit</a> instead to try for better results, but I didn't, and it cascaded into problems with...</li>
<li>Dumping all of the holdings as part of the bibliographic records threw things off when some of the records had so many holdings attached (think a weekly periodical that a library circulates and therefore each issue has its own barcode) that they spilled over MARC's record length limit, resulting in multiple MARC records just to hold the holdings - which causes some problems for the basic import process. I eventually punted on trying to parse the MARC21XML for holdings and just dumped the data I needed directly from Unicorn in pipe-delimited format.</li>
<li>Not tuning PostgreSQL <em>before</em> starting to load data into the database was just plain stupid. The defaults for PostgreSQL are incredibly conservative, and must be modified to handle large transactions and to perform. Here are the tweaks I made for our 12GB machine, starting with the Linux kernel memory settings:<pre>
# -- in /etc/sysctl.conf --
# Set SHMMAX to 8GB for PostgreSQL
kernel.shmmax=8589934592
</pre>
<pre>
# -- in /etc/postgresql/8.1/main/postgresql.conf --
# Crank up shared_buffers and work_mem
shared_buffers = 10000
work_mem=8388608 # 8 GB, equal to our kernel.shmmax
max_fsm_pages = 200000
</pre></li>
<li>
Evergreen depends on accurate fixed fields to determine the format of an item. Unfortunately, many of our electronic resources appear not to have been coded as such... so we have some data clean-up to do.
</li>
</ul>
<p>
Ah well: as Jerry Pournelle used to say in his Chaos Manor column, "I do these things so that you don't have to." Hopefully it makes a smoother path for others to get to Evergreen.
</p> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://coffeecode.net/archives/152-Evergreen-Acquisitions-at-VALEs-Next-Generation-Academic-Library-System-Symposium.html" rel="alternate" title="Evergreen Acquisitions at VALE's Next Generation Academic Library System Symposium" type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2008-03-15T16:34:14Z</issued>
        <created>2008-03-15T16:34:14Z</created>
        <modified>2008-03-15T17:56:34Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=152</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=152</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/152-guid.html</id>
        <title mode="escaped" type="text/html">Evergreen Acquisitions at VALE's Next Generation Academic Library System Symposium</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>
On Wednesday, I was fortunate enough to join a distinguished panel
of speakers and a crowded music hall at <a href="http://www.valenj.org/newvale/ols/symposium2008/">VALE's Next Generation Academic Library System Symposium</a> at <a href="http://www.tcnj.edu">The College of New Jersey</a>. I had been invited to
present an update on the state of acquisitions support in Evergreen, as well
as to provide a brief overview of Project Conifer (the collaboration
between Laurentian University, McMaster University, and the University of
Windsor to create a consortial implementation of Evergreen).
</p>
<p>
To summarize what I intended to be the main points of my
presentation (which may or may not have come through in real life):
</p>
<ul>
<li>Project Conifer is an existing effort to create a shared consortial implementation of Evergreen for academic institutions; we would be delighted to have others join forces with us</li>
<li>If acquisitions isn't as far along as we would have hoped by now, it's because
<ul>
<li>We (the Project Conifer institutions) haven't contributed enough
development resource to the effort thus far - although we are planning to
correct this problem in the near term by hiring one or more developers to
work on the requirements that we, as academic institutions, need for a
successful Evergreen experience. If you're interested in a position as an
Evergreen developer for Project Conifer,
<a href="mailto:dan@coffeecode.net">let's talk</a>.</li>
<li>Creating an enterprise-grade acquisitions system demands much more
effort and attention to detail than creating a simplistic acquisitions
system that would be acceptable for a small library. If it took two years
to build Evergreen's circulation, cataloging, reporting, and OPAC functionality
from scratch, it's not unreasonable that it should take a year or more to
build an acquisitions system to the same standards as the rest of Evergreen</li>
</ul>
</li>
<li>Evergreen acquisitions has made significant progress since December 2007,
and at this pace we expect a complete set of basic functionality to be in
place by the end of April. By "basic functionality" I mean that the manual
acquisitions mode should be supported with a minimalist user interface. MARC
order record batch loading, EDI send/receive support, and a more polished
user interface will take some more time - probably September-ish 2008. You can see the in-development, regularly updated bare-bones interface at <a href="http://acq.open-ils.org/oils/acq/base/index">http://acq.open-ils.org/oils/acq/base/index</a>.</li>
</ul>
<p>
I have to say that Equinox is making incredible progress considering that
they're still doing the bulk of the work with the same amount of development
resource that they had before Georgia PINES went live on Evergreen, and
they started their own company, and they started bringing BC PINES on line,
and they began receiving an onslaught of requests for visits and presentations
and conference calls...  imagine what we could do with Evergreen, together,
if a few more sites or consortiums were able to devote human or
financial resources to enhancing Evergreen.
</p>
<p>
Here are my slides in <a href="http://coffeecode.net/uploads/talks/2008/Evergreen_acquisitions_VALE.odp" title="Evergreen_acquisitions_VALE.odp" target="_blank">OpenOffice</a> and <a href="http://coffeecode.net/uploads/talks/2008/Evergreen_acquisitions_VALE.ppt" title="Evergreen_acquisitions_VALE.ppt" target="_blank">PowerPoint</a> format. If you're going to
look at my slides, I highly recommend reading the presenter notes that I wrote;
I've recently realized that presenter notes are as much for the benefit of a
disconnected audience as they are useful preparation material for the presenter. In the absence of a full paper on the subject matter at hand, presenter notes should help flesh out the brevity forced by slideware.
</p>
<p>
A huge thanks to Ed Corrado, Anne Hoang, and Kurt Wagner for making the overall experience
so enjoyable. I was honoured to be part of such a high-quality panel of
speakers.
</p>
<p>
Oh, and as an aside - the entire symposium was videotaped, and the
presentations and question and answer sessions will be made available
from the VALE Web site. I will update this post when those become available. I
wonder if Ed got this idea from code4lib... in any case, I certainly applaud
the initiative.
</p>
<p><strong>Update:</strong> Umm, more polished acquisitions will likely be available in Sept. 2008, not 2007... thanks to Brad Lajeunesse for pointing out that time travel would be required to make that happen</p> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://coffeecode.net/archives/151-CouchDB-delicious-sacrilege.html" rel="alternate" title="CouchDB: delicious sacrilege" type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2008-02-28T22:23:09Z</issued>
        <created>2008-02-28T22:23:09Z</created>
        <modified>2008-03-06T20:54:49Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=151</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=151</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/151-guid.html</id>
        <title mode="escaped" type="text/html">CouchDB: delicious sacrilege</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>
Well, the talk about CouchDB (an open-source document database similar in concept to Lotus Notes, but with a RESTful API and JSON as an interchange format) wasn't as much of a train wreck as it could have been. I learned a lot putting it together, and had some fun with the content - and even though it was a marked departure from the style of many of the other presentations, I think it was generally positively received (at least, from what I could glean from the backscroll in #code4lib and from comments).
</p>
<p>
I veer towards the "here's how you do stuff" technical angle because that tends to be what I'm interested in hearing from other people. And even though a 20 minute slot is probably the wrong venue for technical information, CouchDB is so simple in some respects that it's actually enough to get the core message across.
</p>
<p>
Here are the slides for your amusement and enlightenment. At some point I'm going to write down the  OpenOffice.org secret that lets you change the colour of hypertext links - I've learned and forgotten that a number of times already.
<p>
<ul>
<li><a href="http://coffeecode.net/uploads/talks/2008/couchdb.odp">CouchDB: Delicious Sacrilege (OpenOffice Impress)</li>
<li><a href="http://coffeecode.net/uploads/talks/2008/couchdb.pdf">CouchDB: Delicious Sacrilege (PDF)</li>
</ul> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://coffeecode.net/archives/150-Evergreen-workshop-at-code4lib-2008.html" rel="alternate" title="Evergreen workshop at code4lib 2008" type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2008-02-26T13:44:43Z</issued>
        <created>2008-02-26T13:44:43Z</created>
        <modified>2008-02-26T13:44:43Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=150</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=150</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/150-guid.html</id>
        <title mode="escaped" type="text/html">Evergreen workshop at code4lib 2008</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>
Yesterday morning we (Bill Erickson, Sally Murphy <em>aka</em> "Murph", and I ran an <a href="http://open-ils.org/dokuwiki/doku.php?id=advocacy:evergreen_workshop">Evergreen workshop</a> (rough agenda, presentation, and links to associated resources from that page) for the code4lib 2008 preconference session. My personal goals were:
</p>
<ol>
<li>Walk people through a simple Evergreen install</li>
<li>Get a small set of bib records and holdings imported</li>
<li>Attract some more developers to the project by demonstrating how seductively simple it is to add a new service to Evergreen at the OpenSRF layer and then expose it in the catalogue or staff client</li>
<li>Show off some of the great features of Evergreen that haven't had nearly enough exposure (reports, "fresh meat" feeds, exporter interface)</li>
</ol>
<h4>Problems</h4>
<p>
<a name="problem1">Problem #1</a>: I started organizing the pre-conference too late. To save time on the install section, I asked attendees to prepare by setting up a VMWare image or bootable Debian or Ubuntu partition and get a bunch of the prerequisite packages installed ahead of time. But by the time I sent my request out, the attendees only had a few days to prepare - and many of them probably hadn't worked with VMWare before, so they suddenly had another learning barrier to overcome. I wasn't too surprised when only about 25% of the room had been able to "do their homework".
</p>
<p>
Problem #2: I lost at least six hours of preparation time when, due to my own stupidity, I left my passport in a hotel in Atlanta and ended up having to drive across the border from Vancouver to Portland, Oregon. Six hours, man... that's almost a full day thrown away, which is critical when you've left things too late (see <a href="#problem1">#1</a>). Continuing on the negative side, all I could listen to during the drive was completely formulaic rock stations and political rhetoric worthy of 10-year-olds as I drove through Washington. If radio is a dying medium, I have a very good idea why...
</p>
<p>
Problem #3: We ran into bizarre projector problems that, for some reason, prevented us from being able to see our laptop screens at the same time as the projected screen. This laptop worked fine with the projector at the OLA Superconference just a few weeks ago, and Bill was afflicted by the same problem - so it really put a crimp in my ability to switch from the presentation to the live install image. My neck was wrecked from constantly twisting around to peer up at the screen while trying to do some minor mousing around.
</p>
<p>
<a name="problem4">Problem #4</a>: I severely underestimated how long the install process would take when trying to support a whole group of people at once; you're guaranteed to have a question on almost every step. When we were preparing for the workshop, we had this idea that we would take a hard line and spend no more than one or two minutes on each step - which certainly would have saved a lot of time. But when you've made a connection with the audience, and people have made it through the first dozen steps, it suddenly becomes a lot, lot harder to simply abandon them with the promise that you'll help them later. So we ended up spending something like 2 hours on the install (including a break) rather than the 45 minutes we had been aiming for.
</p>
<p>
Problem #5: We were overly optimistic about how much we could get done in 2.5 hours. Even without the severe compounding of our time crunch by <a href="problem4">#4</a>, in retrospect its clear we would still have been rushing through all of the other pieces. I think we knew that anyways, but we were just so excited about showing off Evergreen that we wanted to show off as much as possible.
</p>
<p>
It's not really all that bleak though. There were successes, too.
</p>
<h4>Successes</h4>
<p>
Success #1: We have at least one person who successfully made it through the install phase and who successfully imported the bib records and holdings, and several others who feel they are <em>very</em> close to finishing. I'm hoping that we can spend a few minutes over the course of the conference to help them reach that finish line.
</p>
<p>
Success #2: We have a real example of <a href="http://open-ils.org/dokuwiki/doku.php?id=importing:holdings:import_via_staging_table">how to import holdings</a> into Evergreen now. This is something that people have been asking for on the list, and I'm really happy to have been able to package up what Mike Rylander provided with a set of sample records and a sample "parse holdings" script that hopefully others will be able to adopt to their own needs.
</p>
<p>
Success #3: I had feedback from a number of people who, even though they weren't trying to go through the install, still felt it was worthwhile getting an explanation of all the pieces that OpenSRF and Evergreen depend on and how they fit together. I think it was clear that the complexity involved in installing Evergreen isn't so much OpenSRF or Evergreen themselves as it is a few finicky details involving networking - largely ejabberd and Net::Domain's insistence on specific and sometimes conflicting definitions of hostnames.
</p>
<p>
Success #4: Bill did get to quickly demonstrate <a href="http://open-ils.org/dokuwiki/doku.php?id=advocacy:evergreen_workshop#customizing_evergreennew_service">how to add a new OpenSRF service</a> ("reset my password and email it to me") and how to integrate that into the catalogue. It was rough and dirty code, but at approximately one page of Perl code and about 10 lines of JavaScript I think it was a convincing demonstration of how easy it is to extend Evergreen.
</p>
<p>
Success #5: We have laid the groundwork for an Evergreen workshop now, and having gone through the experience once we'll be able to refine the concept for future events. One idea that we've already kicked around is to split it into several tracks so that attendees can self-select what they're interested in and so that we can give enough time to each section. Say, two (or three) hours for an installfest; two hours for "exploring the dark corners of Evergreen"; and two hours on developing and extending Evergreen (OpenSRF, catalogue, staff client). Or we could have spent the entire pre-conference day on Evergreen.
</p>
<h4>Reflection</h4>
<p>
I think it might have been really cool if we had worked with LibraryFind and Zotero to set up an ongoing theme throughout the three pre-conference sessions. We could have collaborated on pre-requisites, so that the LibraryFind install could go on top of the same image as the Evergreen install, and then the newly installed Evergreen image could have been added as a LibraryFind source during the LibraryFind administration section. Then, during the Zotero session, Evergreen and LibraryFind could have been added as new sources for capturing citation information (by making Evergreen and LibraryFind generate COInS objects that Zotero understands or giving Zotero the ability to understand the various formats that Evergreen offers via unAPI).
</p>
<p>
Of course, it also would have required a heck of a lot of pre-conference planning. A suggestion I would make for next year's pre-conference organizers would be to communicate as much as possible ahead of time to set expectations and help your attendees determine what your agenda should be. We could have just thrown out the entire Evergreen install section, had people get comfortable with a pre-installed VMWare ahead of time, and focused most of the session on developing and exposing OpenSRF services, for example, if that's what our attendees wanted.
</p> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://coffeecode.net/archives/149-The-State-of-Evergreen-OLA-Presentation.html" rel="alternate" title="The State of Evergreen: OLA Presentation" type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2008-02-02T03:56:17Z</issued>
        <created>2008-02-02T03:56:17Z</created>
        <modified>2008-02-08T02:17:40Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=149</wfw:comment>
        <slash:comments>4</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=149</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/149-guid.html</id>
        <title mode="escaped" type="text/html">The State of Evergreen: OLA Presentation</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Well, despite getting less than four hours of broken sleep before my 9:00 am presentation, I think I successfully delivered an update on <strong>Evergreen:State of the Open ILS</strong> to approximately 45 people at the <a href="http://www.accessola.com/superconference2008" title="OLA Super Conference 2008">OLA Super Conference</a> today. There were some great questions from the audience that kept me on my toes. Thank heavens David Fiander was there to provide colour commentary and solid advice. Overall, the talk seemed to be well received.</p>
<p>Perhaps the most pleasant surprise of the session was when I discovered that one of the libraries close to my old home town has been working for the last six months on migrating to Evergreen. Marvelous!</p>
<p>If you want the slides from my presentation, I've licensed them under a Creative Commons 2.5 By Attribution license. Presentations available below in two different formats:</p>
<ul>
<li><a href="http://coffeecode.net/uploads/talks/2008/TheStateofEvergreen.odp" title="TheStateofEvergreen.odp" target="_blank">Evergreen:State of the Open ILS (OpenOffice Impress)</a></li>
<li><a href="http://coffeecode.net/uploads/talks/2008/TheStateofEvergreen.ppt" title="TheStateofEvergreen.ppt" target="_blank">Evergreen:State of the Open ILS (Microsoft PowerPoint)</a></li>
</ul> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://coffeecode.net/archives/148-Oooh...-looks-like-Ive-got-even-more-work-cut-out-for-me.html" rel="alternate" title="Oooh... looks like I've got (even more) work cut out for me" type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2008-01-17T03:30:14Z</issued>
        <created>2008-01-17T03:30:14Z</created>
        <modified>2008-01-17T04:01:24Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=148</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=148</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/148-guid.html</id>
        <title mode="escaped" type="text/html">Oooh... looks like I've got (even more) work cut out for me</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>
PHP is getting a <a href="http://www.colder.ch/news/01-16-2008/30/new-datastructures-in-spl.html">native doubly-linked list structure</a>. This is fabulous news; when I wrote the <a href="http://pear.php.net/File_MARC">File_MARC</a> PEAR package, I ended up having to implement a <a href="http://pear.php.net/Structures_LinkedList">linked list class</a> in PEAR to support it. File_MARC does its job today (even though I haven't taken it out of alpha yet), but due to its reliance on userspace data structures it's an order of magnitude slower than packages like <a href="http://marc4j.tigris.org">marc4j</a> so it's not the best choice for processing hundreds of thousands of MARC records... today. It hurts a little that the <a href="http://vufind.org">VuFind</a> project has to use a non-PHP solution for populating its Solr indices - although I'm delighted that they have started using File_MARC for some on-demand processing.
</p>
<p>
Now, when I get a chance (insert raucous mocking laughter here), I hope to be able to make File_MARC use splDoublyLinkedList  and see how it fares with 500K records. Should be good fun! After that, it just needs to be taught how to convert MARC8 to UTF-8, and we'll have ourselves a fully featured standard MARC package for PHP.
</p> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://coffeecode.net/archives/147-Like-taking-cotton-balls-out-of-my-ears.html" rel="alternate" title="Like taking cotton balls out of my ears" type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2008-01-09T03:15:05Z</issued>
        <created>2008-01-09T03:15:05Z</created>
        <modified>2008-01-10T04:17:43Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=147</wfw:comment>
        <slash:comments>3</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=147</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/147-guid.html</id>
        <title mode="escaped" type="text/html">Like taking cotton balls out of my ears</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>We don't watch a lot of TV; maybe four hours a week. But we noticed in the past year or two that a few of the shows we enjoy have muddy soundtracks due to speech being mixed over top of background music and various sound effects that makes the words almost indistinguishable. My hunch was that it was due to the increasing popularity of surround sound mixing, so much so that the producers had chosen to disrupt the viewing experience of plain jane viewers relying only on their television's built-in speakers. But for various reasons (largely - having better things to do), I never bothered to confirm this hunch.</p>
<p>I took advantage of a Boxing Day sale to pick up a set of surround sound speakers and a Dolby-enabled amplifier; nothing fancy. After many hours of threading wires behind drywall and through the basement (reminding me that I really do have better things to do), we sat down to watch an episode of one of the offending shows (<em>Torchwood</em>). And the difference in clarity (largely due to the separation of the sound into front left, center, and front right channels; the back left and right channels have much less impact) was immediately evident; Lynn mentioned it within five seconds of the beginning of the show.</p>
<p>Our household has entered a new age of audio-visual enjoyment. I know I've been manipulated into buying more electronics, but at the same time - wow, what a difference. It makes me want to watch all of season one of <em>Battlestar Galactica</em> again.</p> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://coffeecode.net/archives/146-As-if-you-didnt-see-it-coming....html" rel="alternate" title="As if you didn't see it coming..." type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2008-01-08T18:58:57Z</issued>
        <created>2008-01-08T18:58:57Z</created>
        <modified>2008-01-10T02:02:29Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=146</wfw:comment>
        <slash:comments>2</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=146</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/146-guid.html</id>
        <title mode="escaped" type="text/html">As if you didn't see it coming...</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>My employer, Laurentian University, <a href="http://laurentian.ca/Laurentian/Home/News/Evergreen+library+system+08jan08.htm">issued a press release</a> today announcing that we have selected <a href="http://open-ils.org">Evergreen</a> as our future library system. I wrote more about this on the <a href="http://open-ils.org/blog/?p=111">Evergreen blog</a>, but what I didn't say was ... yay!</p>
<p>We still have a long road ahead of us, but knowing that we'll be migrating to a system that I can poke with a sharp stick and make it do my bidding goes a long way towards making me feel warm and fuzzy inside.</p>
<p>I predict that we'll see a few more announcements from universities and colleges in North America joining the Evergreen development effort / adoption process in 2008. Outside of Ontario, I know about the <a href="http://blog.benostrowsky.com/2007/10/04/my-new-job-horizon-vs-evergreen-cage-match/">University of Utah</a>' s interest and interest from a <a href="http://valenews.wordpress.com/2007/12/03/conference-agenda/">New Jersey consortium of academic institutions</a> (see session h. "Open Library Systems and NJ: From Vision to Transformation")... are there other academics who have made public statements of interest in Evergreen that I'm missing out on?</p> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://coffeecode.net/archives/145-Geek-triumph.html" rel="alternate" title="Geek triumph" type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2007-11-21T13:54:21Z</issued>
        <created>2007-11-21T13:54:21Z</created>
        <modified>2007-11-21T14:38:33Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=145</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=145</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/145-guid.html</id>
        <title mode="escaped" type="text/html">Geek triumph</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>What a night. I upgraded <a href="http://www.s9y.org">Serendipity</a>, <a href="http://www.splitbrain.org/projects/dokuwiki">DokuWiki</a>, <a href="http://drupal.org">Drupal</a>, involving four different servers and three different Linux distros, and shifted one application from one server to another (with seamless redirects from the old server to the new) with close to no downtime. I think this is the first time I've completed a single upgrade without having to manually patch at least one file.</p>
<p>Either I'm getting smarter, or the software is getting more robust.</p> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://coffeecode.net/archives/144-Aint-no-way-to-treat-your-CODI.html" rel="alternate" title="Ain't no way to treat your CODI" type="text/html" />
        <author>
            <name>Dan Scott</name>
            <email>dan@coffeecode.net</email>        </author>
    
        <issued>2007-11-16T01:01:59Z</issued>
        <created>2007-11-16T01:01:59Z</created>
        <modified>2008-05-10T13:51:18Z</modified>
        <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=144</wfw:comment>
        <slash:comments>2</slash:comments>
        <wfw:commentRss>http://coffeecode.net/rss.php?version=atom0.3&amp;type=comments&amp;cid=144</wfw:commentRss>
    
        <id>http://coffeecode.net/archives/144-guid.html</id>
        <title mode="escaped" type="text/html">Ain't no way to treat your CODI</title>
        <content type="application/xhtml+xml" xml:base="http://coffeecode.net/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>
Wow. Eileen R. Kontrovitz, a board member of CODI (Customers of Dynix, Inc.) wrote, as part of <a href="http://letterman.oplib.org/blog/?p=26">her summary of the recent CODI conference</a>:
</p>
<blockquote>Many very nice things happened at the conference but the buzz, the thing everyone who was not there wants to hear about is the unannounced, invitation only meeting with Martin Taylor from Vista Equity Partners about open source. Mr. Taylor began the meeting in a very cordial way and with a charm about him that belied the basic message he proceeded to give. That message was, we know more than you do and if you don't like it you can go to some other "happy place". He actually said that on more than one occasion.</blockquote>
<p>
I guess Vista feels quite threatened by open source library systems, even though they currently account for <a href="http://lisnews.org/node/22251">only 1% of the US public library market</a> today, if they're willing to have their top brass lay on the fear, uncertainty, and doubt campaign to their top customers behind closed doors. It also seems that Mr. Taylor's tactics have backfired, at least in this case; after praising the common SirsiDynix employees, Eileen goes on to say that Vista's attitude has almost ensured that her library (Ouachita Parish Public Library) will not move to Symphony. This, even though Eileen says:
</p>
<blockquote>...I happen to agree with his assessment of open source for a library ILS at this point in time and the many problems with the very nature of the beast without some kind of regulating body...</blockquote>
<p>
Perhaps this should be the subject of another blog post, but I believe there are actually a number ways Evergreen is regulated. First is that an open source project is not an "anything goes" project: the committers for the project act as a level of quality control for Evergreen. If code doesn't further <a href="http://open-ils.org/mission.php">the Evergreen mission</a> by contributing towards stability, robustness, flexibility, security, or user-friendliness, then it's simply not going to go into the project proper. Second is that at least one company (<a href="http://esilibrary.com">Equinox</a>) is staking its success on Evergreen, and others are starting to build up business around Evergreen. They're not going to sit back and rest easy; they know that they have to enhance Evergreen beyond its current core strengths if they want to build inroads into markets like academic libraries. Third is that Evergreen's open source license also acts as a regulator - the code that comprises Evergreen can never be pulled from the market, so the future of Evergreen is always in the hands of the community.
</p> 
            </div>
        </content>

        
    </entry>
</feed>