<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>ebyblog</title>
 <link href="http://feeds.feedburner.com/ryaneby/ebyblog" rel="self"/>
 <link href="http://blog.ryaneby.com"/>
 <updated>2011-08-10T19:33:52+00:00</updated>
 <id>http://blog.ryaneby.com/</id>
 <author>
   <name>Ryan Eby</name>
 </author>

 
 <entry>
   <title>Summer Game Prize Fulfillment Workflow</title>
   <link href="http://blog.ryaneby.com/code4lib/2011/08/10/shopfulfillment.html"/>
   <updated>2011-08-10T19:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/code4lib/2011/08/10/shopfulfillment.html</id>
   <content type="html">&lt;p&gt;Cross-posted from the &lt;a href=&quot;http://www.aadl.org/node/41426&quot;&gt;AADL Devblog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;http://play.aadl.org&quot;&gt;AADL Summer Game&lt;/a&gt; has an online shop where earned points can be spent on awesome schwag. To try to make it easy for the volunteers and staff to fulfill the orders we took advantage of some of the infrastructure we already had in place for other parts of the site.&lt;/p&gt;

&lt;p&gt;As some know our hold notices currently go through a script that sends an email along with printing a custom label to a label printer, that is used for identification on our hold shelves. We reused this process to print a custom pickup/order label everytime an order comes through the &lt;a href=&quot;http://www.ubercart.org/&quot;&gt;ubercart&lt;/a&gt; game shop by hooking into the payment process. This leaves a spool of order labels that those doing fulfillment can pick up throughout the week and start filling. A spool that has been increasing dramatically in length recently.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://twitpic.com/5lqj65&quot; title=&quot;The Summer Game Shop is live and we have our first order labe... on Twitpic&quot;&gt;&lt;img src=&quot;http://twitpic.com/show/thumb/5lqj65.jpg&quot; width=&quot;150&quot; height=&quot;150&quot; alt=&quot;The Summer Game Shop is live and we have our first order labe... on Twitpic&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As orders are filled the barcode on the custom label is scanned, which sets the order as fulfilled and adds a notification job to a &lt;a href=&quot;http://redis.io&quot;&gt;redis&lt;/a&gt; queue. Players have the option of getting SMS notifications (sent through &lt;a href=&quot;http://twilio.com&quot;&gt;Twilio&lt;/a&gt;) or email. Shop keepers can also cancel orders if need be which refunds the points to the player account.&lt;/p&gt;

&lt;p&gt;After the items are delivered to the branch destinations on Friday morning, a script goes through the jobs on the redis queue and sends the notifications letting players know their items are ready for pickup.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://twitpic.com/5mozzd&quot; title=&quot;Our first batch of Summer Game stuff  (380,000 points worth),... on Twitpic&quot;&gt;&lt;img src=&quot;http://twitpic.com/show/thumb/5mozzd.jpg&quot; width=&quot;150&quot; height=&quot;150&quot; alt=&quot;Our first batch of Summer Game stuff  (380,000 points worth),... on Twitpic&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More background info on our &lt;a href=&quot;http://play.aadl.org&quot;&gt;Summer Game&lt;/a&gt; is in the works and keep that order spool growing!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Under the Hood of the AADL Summer Game</title>
   <link href="http://blog.ryaneby.com/code4lib/2011/08/10/summergame.html"/>
   <updated>2011-08-10T18:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/code4lib/2011/08/10/summergame.html</id>
   <content type="html">&lt;p&gt;Cross-posted from the &lt;a href=&quot;http://www.aadl.org/node/41356&quot;&gt;AADL Devblog&lt;/a&gt; and written by our lead developer &lt;a href=&quot;http://twitter.com/ejk&quot;&gt;ejk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The 2011 Summer Game has brought big changes to the way we play here at the library. In addition to the &quot;classic&quot; summer reading game, players can earn points for writing reviews, adding comments and finding game codes at events and locations. Players also earn badges for special accomplishments. We just passed player ID #4000 and we still have weeks to go for even more players to join and earn points and prizes. The pieces that make up the Summer Game are diverse but by adding custom code to the solid foundations provided by these open tools we've been able to concentrate our efforts on adding new content and functionality rather than chasing bugs and putting out fires. Here's some of the tools and technologies that make up the Summer Game:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://drupal.org/&quot;&gt;Drupal&lt;/a&gt;: The aadl.org websites run on the Drupal Content Management System. In addition to giving us a framework for writing blogs, creating user accounts and writing comments, it has a extensive API which allows us to leverage those pieces to add our own functionality. A drupal module for Summer Game was created that keeps track of player data, lets players add points through multiple activities, and displays a leaderboard. Players are attached to user accounts, and a simple function which could be placed in any code that runs the site allows us to award points for any website action. The summer game module is available through github: &lt;a href=&quot;https://github.com/aadl/Summer-Game&quot;&gt;Summer Game module&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.ubercart.org/&quot;&gt;Ubercart&lt;/a&gt;: The Summer Game shop runs on this Drupal module that provides a simple shop interface for your Drupal site. Again, it has a extensive API which allowed us to use Summer Game points as a custom payment type. We also added a hook into the order process to send data to our custom label printing function, printing labels for the items at the time of order, and creating custom order emails. By leveraging the ubercart module, we were able to create a complete online shop and order fulfillment process in about 3 weeks, start to finish.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.fpdf.org/&quot;&gt;FPDF&lt;/a&gt;/&lt;a href=&quot;http://www.setasign.de/products/pdf-php-solutions/fpdi/&quot;&gt;FPDI&lt;/a&gt;: The core of the Summer Game is still the &quot;classic&quot; summer reading game, where you read books, fill out a score card, bring it to a library location and get a prize. This year we decided to track all our score cards with unique identifier numbers to see where and when people picked them up. We also wanted to allow players to print their score cards on demand as PDF files. The FPDF library allows us to dynamically create each score card PDF with a unique number. We also use the FPDF library to create easily-printable Game Code signs so staff can post a points-accruing Game Code at their events. The FPDI plugin for FPDF allows you to import an existing PDF as a template for your FPDF document.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://redis.io/&quot;&gt;Redis&lt;/a&gt;: Redis provides a persistent data store, similar to a database, but as key-value pairs rather than tables. We used Redis to store the score card identification numbers because it allowed us to do an atomic increment operation. We don't want two people printing score cards at the same time with the same ID number. In a single call we can get the next number in the sequence without worrying about holding other people up or both grabbing the same number. We also use Redis to store our shop email notification data in a processing queue which allows us to delay sending them out. We currently use the &lt;a href=&quot;https://github.com/jdp/redisent&quot;&gt;Redisent PHP library&lt;/a&gt; to talk to our Redis install.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.twilio.com/&quot;&gt;Twilio&lt;/a&gt;: Twilio provides an easy API to interact with users via cell phone text messages. By creating a simple drupal module that utilizes the Twilio API we allowed players at an event to easily sign up for the game and start earning points using their cell phones. We also use twilio to send prize pickup reminder text messages when we fill orders from the Summer Game shop.&lt;/p&gt;

&lt;p&gt;AADL is happy to share source code. View the rest of our shared code on our &lt;a href=&quot;https://github.com/aadl&quot;&gt;github page&lt;/a&gt;. Code monkeys not included. Your mileage may vary.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Forcing Download with nginx</title>
   <link href="http://blog.ryaneby.com/code4lib/2011/04/06/forceddownloadnginx.html"/>
   <updated>2011-04-06T18:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/code4lib/2011/04/06/forceddownloadnginx.html</id>
   <content type="html">&lt;p&gt;Prompting a browser to download rather than open something is rather common. You can do so from your favorite web programming language by adding the Content-Disposition attachment header when sending the data back.&lt;/p&gt;

&lt;p&gt;This can come in handy if you want to use the same file for both web serving and download. Say a MP4 movie file. It makes it a little easier than the right-click save-as method.&lt;/p&gt;

&lt;p&gt;If you want to remove the overhead of serving a file through a script you can also accomplish this straight in &lt;a href=&quot;http://wiki.nginx.org/&quot;&gt;nginx&lt;/a&gt;. In the example below the file can be served both ways.&lt;/p&gt;

&lt;p&gt;Served normally: http://example.org/mymovie.mp4&lt;/p&gt;

&lt;p&gt;Served as attachment: http://example.org/mymovie.mp4?name=mymovie.mp4&lt;/p&gt;

&lt;p&gt;This would go inside the location declaration:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;nginx&quot;&gt;  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$args&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kn&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;X-Content-Type-Options&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;nosniff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kn&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Content-Type&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kn&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Content-Disposition&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;attachment&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;filename=&amp;quot;$arg_name&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;This also gives you the option of having the downloaded file be named differently. So if you have directory structure like /2011/mysong.mp3 you could have it save as 2011-mysong.mp3.&lt;/p&gt;

&lt;p&gt;This also lets you take advantage of other nginx features like &lt;a href=&quot;http://wiki.nginx.org/X-accel&quot;&gt;X-accel&lt;/a&gt; when serving or streaming the files.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Staff Requests in SOPAC</title>
   <link href="http://blog.ryaneby.com/code4lib/2011/04/05/patronrequests.html"/>
   <updated>2011-04-05T18:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/code4lib/2011/04/05/patronrequests.html</id>
   <content type="html">&lt;p&gt;Cross-posted from the &lt;a href=&quot;http://www.aadl.org/devblog&quot;&gt;AADL Devblog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Over the past few years we've taken advantage of having a catalog we can tweak and change. Recently as we've been able to store more data outside of the ILS we have gone the route of making our catalog one of main development platforms.&lt;/p&gt;

&lt;p&gt;However, staff still had to go back to the staff client for the ILS for some functions. While many of those functions don't really make sense as part of the catalog, requesting items for other patrons was one that did. Having full control over the search and what fields are indexed created a back and forth between the client and website for finding things.&lt;/p&gt;

&lt;p&gt;We just rolled out the feature for staff so they can request for others via the public catalog (if they have the permission). Its a feature I'd recommend looking at implementing if you are working on an opac replacement or other catalog like feature.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/ebyryan/5593787436/&quot; title=&quot;request for patron by ebyryan, on Flickr&quot;&gt;&lt;img src=&quot;http://farm6.static.flickr.com/5146/5593787436_11f6fa7228.jpg&quot; width=&quot;258&quot; height=&quot;251&quot; alt=&quot;request for patron&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just one more step moving more non-inventory things to the drupal/sopac side of things rather than the ILS.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Availability in Globally Distributed Storage Systems</title>
   <link href="http://blog.ryaneby.com/code4lib/2011/02/26/google-availability.html"/>
   <updated>2011-02-26T13:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/code4lib/2011/02/26/google-availability.html</id>
   <content type="html">&lt;p&gt;Google just released a research paper entitled &lt;a href=&quot;http://research.google.com/pubs/pub36737.html&quot;&gt;Availability in Globally Distributed Storage Systems&lt;/a&gt;. It is available for download in PDF format (14 pages). From the abstract:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;We characterize the availability properties of cloud storage systems based on an extensive one year study of Google's main storage infrastructure and present statistical models that enable further insight into the impact of multiple design choices, such as data placement and replication strategies. With these models we compare data availability under a variety of system parameters given the real patterns of failures observed in our fleet.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;It is worth taking a quick browse of. The paper focuses on data availability (online versus data backup/integrity) and includes things like planned downtime. Metrics are given to assist in system design. Some highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GFS waits around 15 minutes before trying recovery process as that is more than the average time a node might return itself to normal operation (reboot, etc)&lt;/li&gt;
&lt;li&gt;Many events are rack and multi-rack level (network, rolling reboots, etc)&lt;/li&gt;
&lt;li&gt;Failures tend to happen in bursts&lt;/li&gt;
&lt;li&gt;Important to take the above two into account when planning replication schemes&lt;/li&gt;
&lt;li&gt;Reboot time is important&lt;/li&gt;
&lt;li&gt;Storing data across data centers reduces data unavailability by many orders of magnitude compared to having the same number of replicas in a single data center&lt;/li&gt;
&lt;/ul&gt;

</content>
 </entry>
 
 <entry>
   <title>Bagit Validation and CIJoe</title>
   <link href="http://blog.ryaneby.com/code4lib/2011/02/18/bagit-and-cijoe.html"/>
   <updated>2011-02-18T16:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/code4lib/2011/02/18/bagit-and-cijoe.html</id>
   <content type="html">&lt;p&gt;I've started playing around with &lt;a href=&quot;https://confluence.ucop.edu/display/Curation/BagIt&quot;&gt;bagit&lt;/a&gt; and some of the other &lt;a href=&quot;https://confluence.ucop.edu/display/Curation/Home&quot;&gt;curation microservices&lt;/a&gt;. One of the features involved is manifest files w/ checksums of all the data files in the bag. So far I'm still just getting the hang of it but decided to try &lt;a href=&quot;https://github.com/cbeer/bagit&quot;&gt;cbeer's bagit gem&lt;/a&gt; and try hooking the validate function to &lt;a href=&quot;https://github.com/defunkt/cijoe&quot;&gt;cijoe&lt;/a&gt; integration server. With the bag in git repository it was easy to have cijoe run a simple script that returned zero when validated, or one with output if there was a problem. cijoe can use git hooks to notify via various methods (example one for email is given in repo).&lt;/p&gt;

&lt;p&gt;While not robust it only took a minute to get the output displayed:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://farm6.static.flickr.com/5253/5455986619_3296f6881b.jpg&quot; alt=&quot;bagit and cijoe&quot; /&gt;
&lt;a href=&quot;http://www.flickr.com/photos/ebyryan/5455986619/sizes/l/&quot;&gt;larger version&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A few thoughts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;need to tweak cijoe to work on local repository instead of requiring an origin&lt;/li&gt;
&lt;li&gt;keeping the validation script in the repository helps. should probably validate/manifest it as well&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Overall a lot easier than I thought it would be and serves as a simple interface for seeing current status for those who like a webpage. cijoe also has jsonp and a simple http status api that allows other tools to easily look at build status so seems like it could be an easy tool to run all your tests in one place and let various things ping it.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>IE8 Upgrade and Enhanced Security Stuck For Some Profiles</title>
   <link href="http://blog.ryaneby.com/code4lib/2010/04/05/ie8-enhanced-security.html"/>
   <updated>2010-04-05T00:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/code4lib/2010/04/05/ie8-enhanced-security.html</id>
   <content type="html">&lt;p&gt;Had an issue with IE upgrades in the recent past where after the upgrade multiple pre-existing profiles would  state they were in &quot;Enhanced Security Mode&quot; despite that mode being disabled. New profiles would work fine and Administrator usually did as well.&lt;/p&gt;

&lt;p&gt;From what I've been able to track down, MS hasn't figured out the exact circumstances that cause it. Fresh installs w/ upgrades before anyone logs in seem to work fine in my experience. Some profiles would also work fine despite being similar to ones that did.&lt;/p&gt;

&lt;p&gt;Searches brought up multiple hacks to fix it. One is to make a login script that modifies the registry like so for every user:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
&quot;IEHardenIENoWarn&quot;=dword:00000000

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap]
&quot;IEHarden&quot;=dword:00000000
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The best solution I found, though, was to use GPO and force a setting for the Internet Zone. Forcing it to Medium or whatever level appears to get pass the enhanced security issues and things work like normal.&lt;/p&gt;

&lt;p&gt;Under either User or Computer depending on how you have GPO setup you would want to enable and set a level for:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Administrative Templates&amp;gt;Windows Components&amp;gt;Internet Explorer&amp;gt;Internet Control Panel&amp;gt;Security Page&amp;gt;Internet Zone
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Not ideal but it is the best I've found&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>If I Had A Heart</title>
   <link href="http://blog.ryaneby.com/2009/12/05/if-i-had-a-heart.html"/>
   <updated>2009-12-05T00:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/2009/12/05/if-i-had-a-heart.html</id>
   <content type="html">&lt;object width=&quot;400&quot; height=&quot;225&quot;&gt;&lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://vimeo.com/moogaloop.swf?clip_id=2740700&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=ffffff&amp;amp;fullscreen=1&quot; /&gt;&lt;embed src=&quot;http://vimeo.com/moogaloop.swf?clip_id=2740700&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=ffffff&amp;amp;fullscreen=1&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot; width=&quot;400&quot; height=&quot;225&quot;&gt;&lt;/embed&gt;&lt;/object&gt;


&lt;p&gt;&lt;a href=&quot;http://vimeo.com/2740700&quot;&gt;If I Had A Heart&lt;/a&gt; from &lt;a href=&quot;http://vimeo.com/feverrayvimeo&quot;&gt;Fever Ray&lt;/a&gt; on &lt;a href=&quot;http://vimeo.com&quot;&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Unicode and Sphinx</title>
   <link href="http://blog.ryaneby.com/2009/11/21/unicode-and-sphinx.html"/>
   <updated>2009-11-21T00:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/2009/11/21/unicode-and-sphinx.html</id>
   <content type="html">&lt;p&gt;I'm not an expert with unicode and ran into various problems in getting Sphinx up and running with bib data for &lt;a href=&quot;http://thesocialopac.net/&quot;&gt;SOPAC2&lt;/a&gt;. Below is an overview of what I ended up doing to solve it. There are probably better ways of doing it and if so please share.&lt;/p&gt;

&lt;p&gt;The Sphinx I'm referring to is &lt;a href=&quot;http://www.sphinxsearch.com/&quot;&gt;the indexing/search program&lt;/a&gt; that works well with MySQL. The case below is using the stock searchd/indexer interface and not the mysql engine which is probably different.&lt;/p&gt;

&lt;h4&gt;Convert to UTF8 in MySQL&lt;/h4&gt;


&lt;p&gt;You can convert tables and all the fields within the table with the command (from &lt;a href=&quot;http://wolfram.kriesing.de/blog/index.php/2007/convert-mysql-db-to-utf8&quot;&gt;pythoneer&lt;/a&gt;):&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;mysql&quot;&gt;&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tbl_name&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;CONVERT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;CHARACTER&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;SET&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;utf8&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;COLLATE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;utf8_unicode_ci&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;You could also do utf8_general_ci. From what I've picked up online is that the unicode_ci supports expansions/ligatures while the general doesn't which can affect sorting. However, the docs say the &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html&quot;&gt;the tradeoff is speed&lt;/a&gt; in some operations. Both lack some character support versus the actual Unicode Collation Algorithm.&lt;/p&gt;

&lt;h4&gt;Configure Sphinx for Unicode&lt;/h4&gt;


&lt;p&gt;You will want to set your index definition to have:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;mysql&quot;&gt;&lt;span class=&quot;n&quot;&gt;charset_type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;utf&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;While the docs mostly just mention that I highly recommend adding the following to your source definition:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;mysql&quot;&gt;&lt;span class=&quot;n&quot;&gt;sql_query_pre&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;SET&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CHARACTER_SET_RESULTS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;utf8&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;sql_query_pre&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;SET&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NAMES&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;utf8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;While you might think that having your tables in utf8 collation, mysql set to default to it and php encoding in utf8 would be enough, if the client doesn't specify that it is doing utf8 mysql will store it in whatever encoding it thinks it is getting. I battled with php configs to try to ensure all machines modifying the tables were talking the same but you'll save yourself the trouble by defining this here and also in your scripts that write to the tables.&lt;/p&gt;

&lt;h4&gt;Modify your insertions to SET NAMES&lt;/h4&gt;


&lt;p&gt;As stated above I'd recommend doing a SET NAMES utf8 in front of your queries inserting data into mysql. This again may be poor setup on my part but it helps rule out different client configurations and probably makes it more portable. I found Gentoo by default seems to do fine, Debian hit or miss. Adding the SET made it work where ever I tried.&lt;/p&gt;

&lt;p&gt;Some documentation stated I should wipe database if it previously had other encodings. I found this unnecessary and just inserted the data with UPDATE or REPLACE INTO and had no issues.&lt;/p&gt;

&lt;h4&gt;Set up character folding&lt;/h4&gt;


&lt;p&gt;While stop words and similar allow you to use external files for the list, it appears character folding needs the list to be in the config itself. At least I haven't been able to get an include file to work. I'd be interested in knowing otherwise. Depending on the languages you have you may want to generate a list of the codes present in your dataset. Otherwise you can find some tables to try out here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://yob.id.au/2008/05/08/thinking-sphinx-and-unicode.html&quot;&gt;Thinking Sphinx And Unicode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://speeple.com/unicode-maps.txt&quot;&gt;Unicode Map at Speeple.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Some reported that Sphinx can have issues with long lines in the config so you may need to break up the lines with \ characters. Your list should also include &quot;0..9, a..z, A..Z-&gt;a..z&quot; in it as you are overriding the default list.&lt;/p&gt;

&lt;h4&gt;Reindex&lt;/h4&gt;


&lt;p&gt;Another thing to note with Sphinx is that many changes to the sphinx.conf requires a restart of searchd. With the modification of the folding table you'll probably want to do this. Restart searchd and then do your indexer run for your indexes.&lt;/p&gt;

&lt;p&gt; Try out some searches with keywords/characters and watch the query log. If the character folding is working then you should see the encoded characters in the query log. If they are missing or replaced by spaces then the characters aren't matching up with your folding table. Try to find the character, add it to your list, restart searchd and reindex. Sphinx defaults to not accepting characters that are not in the charset_table list. The query log is the easiest point to diagnose this at.&lt;/p&gt;

&lt;h4&gt;Web Display&lt;/h4&gt;


&lt;p&gt;The last step is of course to make sure your web pages are served in a proper encoding so browsers render it properly.&lt;/p&gt;

&lt;p&gt;Again this isn't in depth but hopefully will help those messing with Sphinx.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Describing Everything - Open Web standards and classiﬁcation</title>
   <link href="http://blog.ryaneby.com/2009/11/21/describing-everything-open-web-standards-and-classi%25ef%25ac%2581cation.html"/>
   <updated>2009-11-21T00:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/2009/11/21/describing-everything-open-web-standards-and-classi%25ef%25ac%2581cation.html</id>
   <content type="html">&lt;p&gt;via &lt;a href=&quot;http://twitter.com/edsu/status/5910935144&quot;&gt;@edsu&lt;/a&gt;&lt;/p&gt;

&lt;div style=&quot;width:425px;text-align:left&quot; id=&quot;__ss_2397710&quot;&gt;&lt;a style=&quot;font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/danbri/open-web-standards-and-classication-foundations-for-a-hybrid-approach&quot; title=&quot;Describing Everything - Open Web standards and classiﬁcation&quot;&gt;Describing Everything - Open Web standards and Classification&lt;/a&gt;&lt;object style=&quot;margin:0px&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=udc-slides-091101144048-phpapp01&amp;rel=0&amp;stripped_title=open-web-standards-and-classication-foundations-for-a-hybrid-approach&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=udc-slides-091101144048-phpapp01&amp;rel=0&amp;stripped_title=open-web-standards-and-classication-foundations-for-a-hybrid-approach&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&quot;font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;&quot;&gt;View more &lt;a style=&quot;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/&quot;&gt;presentations&lt;/a&gt; from &lt;a style=&quot;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/danbri&quot;&gt;danbri&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;

</content>
 </entry>
 
 <entry>
   <title>Public Computing with Windows Servers and Linux Thin Clients - Hardware</title>
   <link href="http://blog.ryaneby.com/2009/06/16/pubcomp-hardware.html"/>
   <updated>2009-06-16T00:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/2009/06/16/pubcomp-hardware.html</id>
   <content type="html">&lt;p&gt;(also posted on the &lt;a href=&quot;http://www.aadl.org/devblog&quot;&gt;AADL devblog&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/ejk/2636115429/&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3279/2636115429_d15372d71a.jpg&quot; alt=&quot;Computers at Traverwood Branch&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We recently overhauled the public computing setup at &lt;a href=&quot;http://www.aadl.org&quot;&gt;AADL&lt;/a&gt;, though it hasn't been rolled out at all the branches yet. It consists of a mix of linux hosted web management software, linux thin clients and windows terminal servers. It is a bit of a unique setup so figure I should share. Once we get it farther towards complete we'll probably release the code.&lt;/p&gt;

&lt;h4&gt;Some History&lt;/h4&gt;


&lt;p&gt;For some background the previous setup consisted of windows thinclients and windows servers running Citrix. The thin clients had published application sets that connected to a fairly basic server farm. The farm wasn't really setup well resulting in high loads and slow logins. A custom set of flash applications and php gateways administered it all.&lt;/p&gt;

&lt;p&gt;As I researched options I decided I wanted to drop Citrix as I didn't really see it as needed and the licensing costs aren't exactly small. I also decided I would prefer as much be opensource as possible though we decided on keeping Windows for the public facing part for now.&lt;/p&gt;

&lt;p&gt;I tested out quite a few public computing management software, lockdown software, cyber cafe software but didn't really find anything that did everything I wanted, kept it fairly simple, was flexible, etc. For reference here are a few things about our setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Patrons can use the computer as long as they want without interruption unless there are other patrons waiting for a computer. They have a minimum 30 minutes if there is a line, after which they are given 5, 2, 1 minute warnings.&lt;/li&gt;
&lt;li&gt;They can be idle for a total of 10 minutes before being ended (given a warning after 5)&lt;/li&gt;
&lt;li&gt;They swipe their card at an assigner first that gives them a station. These are spaced out then random&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;The New Thin Clients&lt;/h4&gt;


&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/ejk/2616603311/&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3199/2616603311_018ba08858.jpg&quot; alt=&quot;Debian Thin Clients&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The thin clients we settled on are &lt;a href=&quot;http://h10010.www1.hp.com/wwpc/us/en/sm/WF05a/12454-12454-321959-338927-89307-3634729.html&quot;&gt;HP Compaq t5735 Thin Clients&lt;/a&gt;. In bulk they ran under $250 each. The specs worked out for what we needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VESA mountable on both sides. Made it easy to securely mount to tables and even to the back of monitors&lt;/li&gt;
&lt;li&gt;1 GB Flash, 256M RAM&lt;/li&gt;
&lt;li&gt;VGA and DVI&lt;/li&gt;
&lt;li&gt;Lots of USB ports including back, front and secure (within case)&lt;/li&gt;
&lt;li&gt;Debian Linux preinstalled (stock plus some custom HP packages)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The thing I like most about the thin clients is the imaging process. The clients come with a HP programs called HPThinState which can write a bootable imager to a USB drive. Once the USB is imaged you can boot other machines from the USB and walk through a simple imaging process. The process is simple enough that front line staff now image machines themselves when needed (usually ext3 partition corruption after power failure). This has significantly cut time of IT staff and reduced how long a client is out of order for simple problems.&lt;/p&gt;

&lt;p&gt;Another nice thing is that all changes are put on flash immediately, no special write/flashing software needed. You can apt-get upgrade and have the changes there on reboot with no further interaction.&lt;/p&gt;

&lt;h4&gt;Break Out Boxes&lt;/h4&gt;


&lt;p&gt;One of the biggest problems we had previously was USB ports being damaged on clients. We tried multiple things like hubs, etc but nothing really lasted. Our latest attempt is using a modular box that is meant to be inserted in a 5.25 cd bay on a tower. We put 2 usb extenders and a headphone jack extender in it and mount it to the table. This leaves an easily replaceable port and also lets us move the thin client out of harms way. So far this has worked great and we haven't had to replace a port yet. At about $10-12 it can't be beat.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/ejk/3463165138/&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3633/3463165138_cf779e2cb5.jpg&quot; alt=&quot;Modular USB Boxes&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Other Hardware&lt;/h4&gt;


&lt;p&gt;We have USB floppy drives available for use and may expand to other formats. The monitors are stock though we add on privacy screens. Each station is also equipped with a USB based barcode reader that is used for signin purposes.&lt;/p&gt;

&lt;p&gt;We also have one of the thin clients VESA mounted to a monitor and barcode reader that acts as the assigner.&lt;/p&gt;

&lt;p&gt;More information on the actual software / workflow behind it coming up in a second post. Overall though we've been really happy with the hardware described above. Really stable and much better priced.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Image versus XML Scanned Texts</title>
   <link href="http://blog.ryaneby.com/2009/06/16/image-versus-xml-scanned-texts.html"/>
   <updated>2009-06-16T00:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/2009/06/16/image-versus-xml-scanned-texts.html</id>
   <content type="html">&lt;p&gt;Another old post that is worth reading &lt;a href=&quot;http://blog.threepress.org/2009/02/21/a-case-study-in-converting-image-based-ebooks-into-xml/&quot;&gt;over at threepress about a case study in ebook presentation&lt;/a&gt; that has obvious application to scanning projects.&lt;/p&gt;

&lt;p&gt;Most of the findings line up with experience but nice to see them quantified. Many preferred html versions for printability, layout, etc. Also covers workflow, costs.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.humanitiesebook.org/HEBWhitePaper2.pdf&quot;&gt;ACLS Humanities E-Book XML Conversion Experiment: Report on Workflow, Costs, and User Preferences&lt;/a&gt; (pdf)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Gutter Garden</title>
   <link href="http://blog.ryaneby.com/2009/06/16/gutter-garden.html"/>
   <updated>2009-06-16T00:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/2009/06/16/gutter-garden.html</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/fat_tony/3489314076/&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3298/3489314076_e926d8519d_o.jpg&quot; alt=&quot;gutter garden&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An &lt;a href=&quot;http://www.juneauempire.com/stories/072508/nei_309624417.shtml&quot;&gt;old article but still applicable for those with small spaces&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;But our deck is on the wrong side of the house. Then an idea came to me that was a little unusual and might involve a little risk. The idea is essential this: Why not put rain gutters in rows along the wood siding on the sunny side of the house. It might look weird, but that was where all the heat, sun and protection from damage is best.&lt;/blockquote&gt;

</content>
 </entry>
 
 <entry>
   <title>Amazon Treasures</title>
   <link href="http://blog.ryaneby.com/2009/06/11/amazon-treasures.html"/>
   <updated>2009-06-11T00:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/2009/06/11/amazon-treasures.html</id>
   <content type="html">&lt;div style=&quot;width:425px;text-align:left&quot; id=&quot;__ss_1437360&quot;&gt;&lt;a style=&quot;font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/jmspool/revealing-design-treasures-from-the-amazon?type=powerpoint&quot; title=&quot;Revealing Design Treasures From The Amazon&quot;&gt;Revealing Design Treasures From The Amazon&lt;/a&gt;&lt;object style=&quot;margin:0px&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=revealingdesigntreasuresfromtheamazon-slideshare-090514181627-phpapp01&amp;rel=0&amp;stripped_title=revealing-design-treasures-from-the-amazon&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=revealingdesigntreasuresfromtheamazon-slideshare-090514181627-phpapp01&amp;rel=0&amp;stripped_title=revealing-design-treasures-from-the-amazon&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;

</content>
 </entry>
 
 <entry>
   <title>Star Ratings</title>
   <link href="http://blog.ryaneby.com/2009/02/14/star-ratings.html"/>
   <updated>2009-02-14T00:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/2009/02/14/star-ratings.html</id>
   <content type="html">&lt;p&gt;From &lt;a href=&quot;http://stevenf.tumblr.com/post/78115371/stars&quot;&gt;stevenf&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;As soon as an app has been rated more than once, it becomes mathematically very unlikely that it will ever see a 1 or 5 star overall rating again. So, it's nearly pointless to have scales of 5 stars, 10 stars, or 100 stars, when all you really need is: &quot;Liked it, Didn't Like It, and Neutral&quot;.&lt;/blockquote&gt;

</content>
 </entry>
 
 <entry>
   <title>nude</title>
   <link href="http://blog.ryaneby.com/2008/06/11/nude.html"/>
   <updated>2008-06-11T00:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/2008/06/11/nude.html</id>
   <content type="html">&lt;object width=&quot;400&quot; height=&quot;225&quot;&gt;&lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot; /&gt;  &lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.vimeo.com/moogaloop.swf?clip_id=1109226&amp;amp;server=www.vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1&quot; /&gt;&lt;embed src=&quot;http://www.vimeo.com/moogaloop.swf?clip_id=1109226&amp;amp;server=www.vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot; width=&quot;400&quot; height=&quot;225&quot;&gt;&lt;/embed&gt;&lt;/object&gt;


&lt;br /&gt;&lt;a href=&quot;http://www.vimeo.com/1109226?pg=embed&amp;sec=1109226&quot;&gt;Big Ideas (don't get any)&lt;/a&gt; from &lt;a href=&quot;http://www.vimeo.com/user354216?pg=embed&amp;sec=1109226&quot;&gt;James Houston&lt;/a&gt; on &lt;a href=&quot;http://vimeo.com?pg=embed&amp;sec=1109226&quot;&gt;Vimeo&lt;/a&gt;.

</content>
 </entry>
 
 <entry>
   <title>AADL Library Camp 2008</title>
   <link href="http://blog.ryaneby.com/2008/03/19/aadl-library-camp-2008.html"/>
   <updated>2008-03-19T00:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/2008/03/19/aadl-library-camp-2008.html</id>
   <content type="html">&lt;p&gt;Just a reminder that the library camp is tomorrow, Thursday March 20th. More information is &lt;a href=&quot;http://libsuccess.org/index.php?title=Library_Camp&quot;&gt;on libsuccess.org&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;The next Library Camp will be held Thursday, March 20th, 2008, at the Downtown Branch of the Ann Arbor District Library, from 9:30 AM - 4:00 PM.

The goal is to get a bunch of people together, and let them talk about whatever they'd like to talk about, within the rough purview of libraries and library technology. We'll start with all getting together with a blank schedule to talk about what we'd like to talk about and fill in a few slots on the agenda. We've got time for four sessions and room for at least 3 concurrent sessions, so there could easily be 10-12 different things to talk about during the day.

We're working on providing breakfast; lunch is on your own, but there will surely be groups heading out to nearby places in downtown Ann Arbor. There is also a mid-range hotel near by (The Campus Inn, $200/night, orbitz has for $99/night), and a very cheap place a little further out that's not half bad (Lamp Post Inn, $45/night). &lt;/blockquote&gt;

</content>
 </entry>
 
 <entry>
   <title>Txt Book Info</title>
   <link href="http://blog.ryaneby.com/2008/03/13/txt-book-info.html"/>
   <updated>2008-03-13T00:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/2008/03/13/txt-book-info.html</id>
   <content type="html">&lt;p&gt;I'm still digesting all the discussions and information from code4lib but I remembered a conversation I eavesdropped on. Casey &lt;a href=&quot;http://twitter.com/misterbisson/statuses/771091553&quot;&gt;reminded me it was between him and Adam Brin of Tri-College&lt;/a&gt;. The gist was that they had put a &quot;txt this record to me&quot; feature onto the catalog, without any real demand, which then took off to everyone's surprise. It was one of those &quot;that would be cool&quot; that then turned into a &quot;how did we do without it&quot; for some students. I believe they rapidly went up to 60 messages a day. You can see an example on &lt;a href=&quot;http://tripod.brynmawr.edu/record=b2922704&quot;&gt;The Selfish Gene&lt;/a&gt;. The feature itself sends the title and location info to your cellphone via SMS. They are using the free SMS email gateways I believe while Casey &lt;a href=&quot;http://maisonbisson.com/blog/post/12094/scriblio-feature-text-this-to-me&quot;&gt;went with a pay service&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Most of my SMS plans allowed free incoming so I would have probably used this during my long college years. With the potential younger audience at public libraries I've heard discussion on whether kids racking up SMS charges using the catalog would be a good thing. Ed would also &lt;a href=&quot;http://vielmetti.typepad.com/superpatron/2008/03/text-me-the-loc.html&quot;&gt;like free alternatives&lt;/a&gt; which probably wouldn't be hard for email if your already using the email gateways. I've already thought about all his options including adding it to our twitter script. When I revisit catwrap I'm going to look more into custom catalog experiences based on profile information such as twitter, email, phone, etc. With a little information in the profile it would be possible to slim down the display with just the applicable features (send to twitter, send to del.icio.us, etc).&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Google Books Availability</title>
   <link href="http://blog.ryaneby.com/2008/03/13/google-books-availability.html"/>
   <updated>2008-03-13T00:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/2008/03/13/google-books-availability.html</id>
   <content type="html">&lt;p&gt;As you've probably read elsewhere Google finally released &lt;a href=&quot;http://booksearch.blogspot.com/2008/03/preview-books-anywhere-with-new-google.html&quot;&gt;a way to get book availability on Google Books&lt;/a&gt;. It's a fairly simple web service where you hand it an identifier and it gives back whether the book is on Google Books and how much so (no view, partial view, full view) along with cover images. AADL previously scraped for the information which I've now disabled and used the new API instead. It was fairly easy with a little jquery and small changes to catwrap. I'm not yet using ThingISBN/xISBN so the results aren't that great. LCCN/OCLC identifiers would probably also help.&lt;/p&gt;

&lt;p&gt;And as &lt;a href=&quot;http://www.librarything.com/blog/2008/03/google-books-in-librarything.php&quot;&gt;Tim at LibraryThing&lt;/a&gt; and &lt;a href=&quot;http://bibwild.wordpress.com/2008/03/13/google-book-search-api/&quot;&gt;jrochkind found&lt;/a&gt; they seem to be going for basic and client side which limits what you can do with it. I haven't had time to look into what's allowed in terms of caching or how many requests per client before being shut down. It would probably help to do the calls server side and cache for all the lccn/oclc/isbn possibilities in the long run.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Vanishing Librarians</title>
   <link href="http://blog.ryaneby.com/2008/02/21/vanishing-librarians.html"/>
   <updated>2008-02-21T00:00:00+00:00</updated>
   <id>http://blog.ryaneby.com/2008/02/21/vanishing-librarians.html</id>
   <content type="html">&lt;p&gt;From Library Journal: &lt;a href=&quot;http://www.libraryjournal.com/article/CA6529375.html&quot;&gt;Blatant Berry: The Vanishing Librarians&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;Our catalogers began to disappear with the takeover of that function by OCLC, the nonprofit that aspires to be a corporation in this brave new retail library world. The standardized result of the effort is bypassed by patron and librarian alike, as they turn to the more friendly Amazons, Googles, et al., for the less precise, more watered-down &quot;metadata&quot; that has replaced what used to be cataloging. Apparently, users don't miss the old catalog, except as a familiar artifact, which is testimony to how low this dumbing down has taken us.&lt;/blockquote&gt;


&lt;p&gt;...&lt;/p&gt;

&lt;blockquote&gt;The resulting &quot;destination&quot; libraries resemble the cookie-cutter design of the grocery store, aimed at making sure everyone who comes in goes out with &quot;product&quot; (books, CDs, DVDs, or downloads). What the patron takes is of as little concern to the storekeeper librarian as it is to the supermarket manager. The success of the enterprise is measured in the number of products collected by patrons, now called &quot;customers.&quot; It is no longer measured in the usefulness or impact of the service on the quality of life in the community served.&lt;/blockquote&gt;

</content>
 </entry>
 
 
</feed>
