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

<channel>
	<title>Terry's Worklog &#187; Programming</title>
	<atom:link href="http://people.oregonstate.edu/~reeset/blog/groups/programming/feed" rel="self" type="application/rss+xml" />
	<link>http://people.oregonstate.edu/~reeset/blog</link>
	<description>On my work (programming, digital libraries, cataloging) and other stuff that perks my interest (family, cycling, etc)</description>
	<lastBuildDate>Sat, 21 Nov 2009 10:07:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>WorldCat API gem moved to rubyforge</title>
		<link>http://people.oregonstate.edu/~reeset/blog/archives/628</link>
		<comments>http://people.oregonstate.edu/~reeset/blog/archives/628#comments</comments>
		<pubDate>Fri, 13 Mar 2009 16:19:47 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[OCLC]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[worldcat api]]></category>

		<guid isPermaLink="false">http://oregonstate.edu/~reeset/blog/archives/628</guid>
		<description><![CDATA[I had mentioned that I’d quickly developed a helper gem for simplifying using the WorldCat API in ruby (at least, it greatly simplifies using the API for my needs).&#160; This was created in part for C4L and partly because I’m moving access from Z39.50 to the API when working with LF and I basically wanted [...]]]></description>
			<content:encoded><![CDATA[<p>I had mentioned that I’d quickly developed a helper gem for simplifying using the WorldCat API in ruby (at least, it greatly simplifies using the API for my needs).&#160; This was created in part for C4L and partly because I’m moving access from Z39.50 to the API when working with LF and I basically wanted a be able to do the search and interact with the results as a set of objects (rather and XML).&#160; </p>
<p>Anyway, the first version of the gem (which is slightly different from the code first posted prior to C4L) can be found at the project page, here: <a title="http://rubyforge.org/projects/wcapi/" href="http://rubyforge.org/projects/wcapi/">http://rubyforge.org/projects/wcapi/</a></p>
<p>&#8211;TR</p>
]]></content:encoded>
			<wfw:commentRss>http://people.oregonstate.edu/~reeset/blog/archives/628/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WorldCat API: draft ruby gem</title>
		<link>http://people.oregonstate.edu/~reeset/blog/archives/618</link>
		<comments>http://people.oregonstate.edu/~reeset/blog/archives/618#comments</comments>
		<pubDate>Mon, 23 Feb 2009 06:13:43 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[OCLC]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[worldcat api]]></category>

		<guid isPermaLink="false">http://oregonstate.edu/~reeset/blog/archives/618</guid>
		<description><![CDATA[Since the WorldCat Grid API became available, I’ve spent odd periods of time playing with the services to see what kinds of things I could do and not do with the information being made available.&#160; This was partly due to a desire to create an open source version of WorldCat Local.&#160; It wouldn’t have been [...]]]></description>
			<content:encoded><![CDATA[<p>Since the WorldCat Grid API became available, I’ve spent odd periods of time playing with the services to see what kinds of things I could do and not do with the information being made available.&#160; This was partly due to a desire to create an open source version of WorldCat Local.&#160; It wouldn’t have been functionally complete (lacking facets, some data, etc), but it would be good enough, most likely, for folks wanting to switch to a catalog interface that utilized WorldCat as their source database, rather than their local ILS dbs.&#160; And while the project was pretty much completed, the present service terms the are attached to the API make this type of work out of bounds at present (though, I knew that when I started – it was more experimental with the hope that by the time I was finished, the API would be more open).&#160; </p>
<p>Anyway…as part of the process, I started working on some rudimentary components for ruby to make processing the OCLC provided data easier.&#160; Essentially, creating a handful of convenience functions that would make it much easier to call and utilize that data the grid services provided – my initial component was called wcapi.&#160; </p>
<p>Tomorrow (or this morning if you are in Providence), a few folks from OCLC will be putting on a preconference related to the OCLC API at Code4Lib.&#160; There, folks from OCLC will be giving some background and insight into the development of API, as well as looking at how the API works and some sample code snippets.&#160; I’d hoped to be there (I’m signed up), but an airline snafu has me stranded in transit until tomorrow – so by the time I get to Providence, all of, or most of the pre-conference will be over.&#160; Too bad, I know.&#160; Fortunately, there will be someone else from Oregon State in the audience, so I should be able to get some notes.</p>
<p>However, there’s no reason why I can’t participate, even while I”m jetting towards Providence – and so I submit my wcapi gem/code to the preconference folks to use however they see fit.&#160; It doesn’t have a rakefile or docs, but once you install the gem, there is a test.rb file in the wcapi folder that demonstrates how to use all the functions.&#160; The wrapper functions accept the same values as the API – and like the API, you need to have your OCLC developer’s key to make it work.&#160; The wcapi gem will utilize libxml for most xml processing (if it’s on your machine, otherwise it will downgrade to rexml), save for a handful of functions that done use named namespaces within the resultset (this confuses libxml for some reason – though their is a way around it, I just didn’t have the time to add it).&#160; </p>
<p>So, the gem/code can be found at: <a href="http://oregonstate.edu/~reeset/ruby_gems/wcapi.tar.gz">wcapi.tar.gz</a>.&#160; Since I’ll likely make use of this in the future, I’ll likely move this to source forge in the near future.</p>
<p>*******Example OpenSearch Call*******</p>
<p>require &#8216;rubygems&#8217;   <br />require &#8216;wcapi&#8217; </p>
<p>client = WCAPI::Client.new :wskey =&gt; &#8216;[insert_your_own_key_here' </p>
<p>response = client.OpenSearch(:q=&gt;'civil war', :format=&gt;'atom', :start =&gt; '1', :count =&gt; '25', :cformat =&gt; 'mla') </p>
<p>puts &quot;Total Results: &quot; + response.header[&quot;totalResults&quot;]   <br />response.records.each {|rec|    <br />&#160; puts &quot;Title: &quot; + rec[:title] + &quot;\n&quot;    <br />&#160; puts &quot;URL: &quot; + rec[:link] + &quot;\n&quot;    <br />&#160; puts &quot;OCLC #: &quot; + rec[:id] + &quot;\n&quot;    <br />&#160; puts &quot;Description: &quot; + rec[:summary] + &quot;\n&quot;    <br />&#160; puts &quot;citation: &quot; + rec[:citation] + &quot;\n&quot; </p>
<p>} </p>
<p>********End Sample Call****************</p>
<p>And that’s it.&#160; Pretty straightforward.&#160; So, I hope that everyone has a great pre-conference.&#160; I wish that I was there (and with some luck, I may catch the 2nd half) – but if not, I’ll see everyone in Providence Monday evening.</p>
<p>&#8211;TR</p>
]]></content:encoded>
			<wfw:commentRss>http://people.oregonstate.edu/~reeset/blog/archives/618/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>LibraryFind 0.8.5.8 next week</title>
		<link>http://people.oregonstate.edu/~reeset/blog/archives/589</link>
		<comments>http://people.oregonstate.edu/~reeset/blog/archives/589#comments</comments>
		<pubDate>Mon, 08 Dec 2008 16:11:04 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[LibraryFind]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://oregonstate.edu/~reeset/blog/archives/589</guid>
		<description><![CDATA[As I&#8217;ve been working on 0.9, I&#8217;ve been trying to migrate few odds and ends into the current 0.8 branch so that I can move them into production faster on our end.&#160; To that end, I&#8217;ll be posting an updated to LF by the beginning of next week.&#160; These updates will include:

Update to the Harvester [...]]]></description>
			<content:encoded><![CDATA[<p>As I&#8217;ve been working on 0.9, I&#8217;ve been trying to migrate few odds and ends into the current 0.8 branch so that I can move them into production faster on our end.&nbsp; To that end, I&#8217;ll be posting an updated to LF by the beginning of next week.&nbsp; These updates will include:</p>
<ol>
<li>Update to the Harvester (this will make it a bit more fault tolerant) as well as allowing harvesting of sets (currently) and root level oai providers (not provided currently).&nbsp; This change required significant changes to the search component as well that deals with the harvested materials.</li>
<li>Auto-detection of namespaces (for oai and sru &#8212; needed for libxml)</li>
<li>Removed rexml dependencies for opensearch component</li>
<li>Frozen gems for oai, sru and opensearch into vendor directories (and have added that to the environment.rb file)</li>
<li>Prep code for solr/ferret decision.&nbsp; I&#8217;ll be adding support to use either ferret or solr as your backend indexer for harvesting for 0.9, but some changes are being made to make this easier.&nbsp; Ferret provides an integrated rails solutions, while solr would provide a hosted index option.</li>
<li>In addition to this, some changes to the libxml module have deprecated a call being used in the oai gem (maybe the sru gem).&nbsp; I&#8217;ll take a look at both this week and update appropriately [as well as keep backworks compatibility if possible]</li>
</ol>
<p>Something else, we are starting to work with mod_rails.&nbsp; This allows apache to manage the rails environment &#8212; eliminating the need to run rails through packs of mongrels (or other specialized serving mechanism).&nbsp; I&#8217;ll write up something on our experiences for others that might be interested in this approach.</p>
<p>&#8211;TR</p>
]]></content:encoded>
			<wfw:commentRss>http://people.oregonstate.edu/~reeset/blog/archives/589/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What would it look like if OCLC was broken up?</title>
		<link>http://people.oregonstate.edu/~reeset/blog/archives/579</link>
		<comments>http://people.oregonstate.edu/~reeset/blog/archives/579#comments</comments>
		<pubDate>Tue, 04 Nov 2008 05:49:04 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Digital Libraries]]></category>
		<category><![CDATA[OCLC]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://oregonstate.edu/~reeset/blog/archives/579</guid>
		<description><![CDATA[The other day, I posted what I seen as some very big concerns with OCLC&#8217;s revised policy (currently being reconsidered) on the transfer of records (two of which, I would consider deal breakers).&#160; In this post, I made the argument that maybe it was time to consider breaking OCLC up to reflect what it has [...]]]></description>
			<content:encoded><![CDATA[<p>The other day, I <a title="http://oregonstate.edu/~reeset/blog/archives/574" href="http://oregonstate.edu/~reeset/blog/archives/574" target="_blank">posted</a> what I seen as some very big concerns with OCLC&#8217;s revised policy (currently being reconsidered) on the transfer of records (two of which, I would consider deal breakers).&nbsp; In this post, I made the argument that maybe it was time to consider breaking OCLC up to reflect what it has become &#8212; an organization with two distinct facets: a membership component and a vendor component.&nbsp; This comment led to a conversation from someone at OCLC who questioned whether I honestly believed that the library community would be better off if OCLC was broken up and it was obvious from our conversation that on this point, we would simply need to agree to disagree.&nbsp; As a side note, I think that these types of disagreements and conversations are actually really important to have.&nbsp; I&#8217;m always nervous of communities or groups in which everyone agrees since it usually means that people either are not thinking critically or no really cares.&nbsp; Secondly, I think that we all (OCLC and myself for that matter) want what&#8217;s best for the library community &#8212; we just have different visions of what that might be.&nbsp; </p>
<p>Anyway, back to my topic.&nbsp; Now, I&#8217;m going to preface this discussion by saying that this is obviously my own opinion and one that may not be shared by many people within the library community (I really have no idea).&nbsp; Even within the library open source community, where I&#8217;m sure this opinion would be more prevalent (or at least entertained), I&#8217;m pretty sure I&#8217;m still in the minority.&nbsp; But as I say, I think that these conversations are important to consider &#8212; specifically as we move down a path where OCLC is very quickly positioning themselves to become the library community&#8217;s default service provider for all things library (in terms of ILL, ILS interface, cataloging, etc.).</p>
<p>So when I talk about breaking up OCLC, exactly what am I&#8217;m talking about?&nbsp; Well, in order to follow me down the path that I am going to take you, we have to talk about OCLC as I currently see them.&nbsp; Watching OCLC during the 10 years (I can&#8217;t believe it&#8217;s actually been 10 years) that I have been in libraries, I have seen a quickening evolution of OCLC from strictly a member driven organization to more of a hybrid organization.&nbsp; On the one hand, there is what many would consider the membership side of OCLC, that being WorldCat, ILL and their research and development office.&nbsp; On the other hand, there is OCLC&#8217;s vendor arm&#8230;a good example of this would be WorldCat Local and WorldCat Navigator.&nbsp; So how do I make these distinctions &#8212; membership services are those that I would consider core services.&nbsp; These are services that OCLC has developed to add value to what OCLC likes to refer to as the Library Commons (WorldCat).&nbsp; OCLC&#8217;s vendor services are those tools or programs that OCLC sells on top of the Library Commons, of which, I think WorldCat Local/Navigator is a good example.&nbsp; Now I think that at this point, I know that folks at OCLC (and likely in the membership) would argue that both WorldCat Local/Navigator do provide services that the OCLC membership is currently requesting.&nbsp; I won&#8217;t deny that &#8212; however, I would answer that the fact that OCLC treats the Library Commons (WorldCat) as it&#8217;s own closed personal community has the unintended affect of limiting the library community&#8217;s (and I include both commercial and non-commercial entities in my definition of community) ability to develop new service models.&nbsp; In effect, we become much more dependent on how OCLC envisions the future of libraries.&nbsp; Let me try and tease this out a little bit more&#8230;</p>
<p>Philosophically, the biggest problem that I have with the current situation is the commingling of OCLC&#8217;s treatment of the Commons (WorldCat) and their current strategy of being the sole commercial entity with the ability to interact with the Commons.&nbsp; I&#8217;m a firm believer that the more diverse the landscape or ecology, the more likely that innovation will take place.&nbsp; We&#8217;ve seen this time and time again both inside (Evergreen and Koha certainly have shaken up the traditional ILS market) and outside (web browsers are a good example of how competition breeds innovation) the library community.&nbsp; However, by isolating the Commons, OCLC is threatening this diversity of thought.&nbsp; Now, I have a whole set of different issues with the current library ILS community, but in this case, I think that OCLC&#8217;s treatment of the Commons, and their ability to leverage that service unfairly skews the ability for both commercial and non-commercial entities to provide innovative services on top of those Commons (and before anyone jumps on me for non-commercial use, let me finish my thoughts here).&nbsp; Commercially, I&#8217;m fairly certain that the current crop of ILS vendors would very much like to provide their own WorldCat Local/Navigator interfaces to their customers, and I&#8217;m sure, would be able to tie these interfaces closely with services already provided by the users ILS.&nbsp; I could envision things like ERM (electronic resource management), simplified requesting, etc. all being possible if the likes of ExLibris or Innovative Interfaces were allowed to build tools upon the Library Commons (WorldCat).&nbsp; Maybe I would like to develop my own version of WorldCat Local/Navigator that interacts with the Commons and sell it as a product (kind of the same way ezproxy was sold prior to being acquired by OCLC) or a group of researchers would like to do the same.&nbsp; As a commercial entity, I&#8217;m fairly certain that this type of development model wouldn&#8217;t be kosher with OCLC unless I licensed access to WorldCat (and I&#8217;m not certain that they would given that this would compete against one of their services).&nbsp; Likewise, open source folks like LibLime or Equinox may like to create an open source version of the WorldCat Local interface.&nbsp; Under the current guidelines, I understand that an open source implementation of WorldCat Local can exist &#8212; but as I understand that agreement, I&#8217;m not certain that groups like LibLime or Equinox (or another entity) could not take that project and then sell support-based services around it (I&#8217;m unclear on that one though).&nbsp; However, it&#8217;s very unlikely that the library world will see any of these types of developments (well, maybe the open source WorldCat Local since I have a group that could use this and a number of people interested in developing it) because OCLC has come to treat what it calls the Commons (WorldCat), as it&#8217;s own personal data store.&nbsp; There&#8217;s that commingling again.&nbsp; </p>
<p>So if it was up to me, how would I resolve this situation?&nbsp; Well, I see two possible scenarios.&nbsp; </p>
<ol>
<li>Open up WorldCat.&nbsp; OCLC likes to refer to WorldCat as the Library Commons &#8212; well, let&#8217;s treat it as such.&nbsp; Remove the barriers for access and allow anyone and everyone the ability to essentially have their own copy of the Library Commons and it&#8217;s data.&nbsp; Now, rather than specifying terms of transfer and telling libraries under what conditions they can and cannot make their metadata available to other groups, the membership could consider what type of Open Data license that the Commons could be made available under.&nbsp; Something like the creative commons share alike license which allows for both commercial and non-commercial usage, but requires all parties to contribute all changes to the data back to the community (in essence, this is kind of what Open Library is doing with their metadata) may be appropriate.&nbsp; OCLC would be free to develop their own products, but the rest of the library community (both library and vendor community) would have equal opportunity to develop new services and ways of visualizing the data found in the Commons.&nbsp; Does this devalue the Commons (WorldCat)?&nbsp; I don&#8217;t think so &#8212; look at Wikipedia.&nbsp; It uses this model of distribution, yet I&#8217;ve never heard anyone say that this devalues it&#8217;s content.&nbsp; Would there be challenges?&nbsp; For sure.&nbsp; Probably one of the biggest would be the way that it would change what it means to be a member of OCLC.&nbsp; If each person could download their own personal copy of the Commons, would libraries stay members.&nbsp; I&#8217;m certain that they would &#8212; but I&#8217;m sure that what it means to be a member would certainly change.</li>
<li>Split OCLC&#8217;s membership services from OCLC&#8217;s vendor services.&nbsp; Under this example, WorldCat Local/Navigator development would be spun away from OCLC as a separate business (this happens in academia all the time).&nbsp; Were this to happen, OCLC would be able to develop terms for license that could then be leverage by all members of the commercial library community removing the artificial advantage OCLC is currently able to leverage (both in terms of data and deciding who is allowed to work with the Commons).&nbsp; In all likelihood, I think that this model likely represents the smallest change for the membership and would continue to allow OCLC to make the Commons more available to non-commercial development without artificially limiting other groups interested in building new services.&nbsp; </li>
</ol>
<p>One last thought.&nbsp; In talking to people today, I heard a number of times that OCLC restricting access to the Commons was in fact good thing, in part, because it finally allowed the library community the ability to leverage resources not available to the vendor communities.&nbsp; In some way, we could finally stick it to them.&nbsp; That&#8217;s fine, I&#8217;m all for developing tools and services, but this particular type of thinking I find worrisome.&nbsp; If we, as a community, feel that we are unable to develop compelling tools and services that are able to compete with other vendor offerings without an artificial advantage &#8212; well that&#8217;s just sad and says a little something about how we see ourselves as a community.&nbsp; And this too is something that I&#8217;d like to see change because if you look around, you will see that there are a myriad of projects (Koha, Evergreen, VuFind, Fedora, DSpace, LibraryFind, XC Catalog, Zotero, etc.) where developers (some library developers, some not) are re-envisioning how they see many of the services within the library and putting their time and effort into realizing those visions.&nbsp; </p>
<p>&nbsp;</p>
<p>&#8211;TR</p>
]]></content:encoded>
			<wfw:commentRss>http://people.oregonstate.edu/~reeset/blog/archives/579/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Must the library live in perpetual beta to achieve agility</title>
		<link>http://people.oregonstate.edu/~reeset/blog/archives/566</link>
		<comments>http://people.oregonstate.edu/~reeset/blog/archives/566#comments</comments>
		<pubDate>Wed, 08 Oct 2008 16:53:13 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[MarcEdit]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Readex]]></category>

		<guid isPermaLink="false">http://oregonstate.edu/~reeset/blog/archives/566</guid>
		<description><![CDATA[An interesting question brought up by David Seaman here at the Readex Digital Institute.&#160; David provided the opening keynote for the conference and in it, discussed a process that Dartmouth College went through this year to consider how the library can become more nimble within our networked world.&#160; How the library can be given a [...]]]></description>
			<content:encoded><![CDATA[<p>An interesting question brought up by David Seaman here at the <em>Readex Digital Institute</em>.&nbsp; David provided the opening keynote for the conference and in it, discussed a process that Dartmouth College went through this year to consider how the library can become more nimble within our networked world.&nbsp; How the library can be given a license, if you will, to allow the library to release services that aren&#8217;t perfect and are iterative in their development cycle.&nbsp; And while I can certainly get where David is coming from, I don&#8217;t think that the logical outcome is a service model that lives within perpetual beta.</p>
<p>I think that part my objection to this phrase comes from my development background.&nbsp; As a developer, I&#8217;m a firm believer in a very iterative approach to development.&nbsp; Those that use MarcEdit can probably attest (sometimes to their dismay) that updates can come with varying frequency as the program adapts to changes within the metadata community.&nbsp; Since MarcEdit doesn&#8217;t follow a point release cycle in the traditional sense, could it be a beta application?&nbsp; I guess that might depend on your definition of beta &#8212; as it certainly would seem to meet the criteria that Google applies to many of it&#8217;s services.&nbsp; However, there is a difference I think.&nbsp; While I take an iterative approach to development, I also want to convey to users that I will support this resource into the future and as beta, that&#8217;s not the case.&nbsp; My personal opinion is that services that languish in beta are doing two things: </p>
<ol>
<li>telling users that these services are potentially not long-term, so they could be gone tomorrow</li>
<li>giving users a weak apology for the problems that might exist in the software (and deflecting blame for those issues, because hey, it&#8217;s beta).</li>
</ol>
<p>So, I don&#8217;t see this as the road to nimble development.&nbsp; Instead, when I heard David&#8217;s talk, I heard something else.&nbsp; I believe libraries fail to innovate because as a group we are insecure that our users will leave us if we fail.&nbsp; And when I hear talks like David&#8217;s, that&#8217;s what I&#8217;m hearing his organization say.&nbsp; They are asking the library administrators for permission to fail, because what is technological research but a string of failures in search for a solution.&nbsp; We learn through our failures, but I think that as a community, our fear of failing before our users can paralysis us.&nbsp; The fear of failing before an administration that does not support this type of research and discover can paralysis innovation by smart, energetic people within an organization.&nbsp; A lot of people, I think, look at Google, their labs, their beta services and say, yes, that is a model that we should emulate.&nbsp; But they don&#8217;t fully understand I think that within this model, Google builds failure as an acceptable outcome into their development plan.&nbsp; If libraries want to emulate anything from the Googles or the Microsofts of the world, they should emulate that and engender that type of discovery and research within their libraries.&nbsp; </p>
<p>I am actually very fortunate at Oregon State University in that I have a director and an administration that understands that for our library to meet the needs of our users now and in the future, we cannot be standing still.&nbsp; And while the path we might take might not always be the correct one, the point is that we are always moving and always learning and refining our understanding of what our users want today and tomorrow.&nbsp; What I&#8217;d like to see for David&#8217;s library is that kind of environment &#8212; and I wish him luck in it.</p>
<p>&#8211;TR</p>
]]></content:encoded>
			<wfw:commentRss>http://people.oregonstate.edu/~reeset/blog/archives/566/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>oai and sru gems updated</title>
		<link>http://people.oregonstate.edu/~reeset/blog/archives/561</link>
		<comments>http://people.oregonstate.edu/~reeset/blog/archives/561#comments</comments>
		<pubDate>Fri, 19 Sep 2008 23:48:11 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://oregonstate.edu/~reeset/blog/archives/561</guid>
		<description><![CDATA[In wrapping up the Libraryfind 0.8.5.1 update, I&#8217;ve had to make some modifications to a few gem packages.&#160; These are the ones updated:

oai: http://rubyforge.org/projects/oai/Changes:Prior versions of the oai component only supported the ruby libxml gem 0.3.8-.&#160; In order to support the newer versions of the ruby-libxml (which does better memory management), I&#8217;ve updated the oai [...]]]></description>
			<content:encoded><![CDATA[<p>In wrapping up the Libraryfind 0.8.5.1 update, I&#8217;ve had to make some modifications to a few gem packages.&nbsp; These are the ones updated:</p>
<ol>
<li>oai: <a title="http://rubyforge.org/projects/oai/" href="http://rubyforge.org/projects/oai/">http://rubyforge.org/projects/oai/</a><br /><u>Changes:<br /></u>Prior versions of the oai component only supported the ruby libxml gem 0.3.8-.&nbsp; In order to support the newer versions of the ruby-libxml (which does better memory management), I&#8217;ve updated the oai gem that will support both the older and new ruby-libxml apis.&nbsp; The primary changes are related to how it handles properties/attributes and the way that the oai provider class handles dates (to support OAI 2.0 validation).</li>
<li>sru-ruby: <a title="http://rubyforge.org/projects/sru/" href="http://rubyforge.org/projects/sru/">http://rubyforge.org/projects/sru/</a><br /><u>Changes:</u><br />Added libxml support.&nbsp; For queries that return one or two records, the different between using REXML or Libxml as your parser will be hardly noticable.&nbsp; However, when queries result in larger datasets, the difference will be measured in terms of seconds.&nbsp; For example, in some tests, recordsets returning 50 records in MARCXML format could run close to 10 seconds using REXML.&nbsp; On the other hand, the same search using libxml processes in 0.8 seconds.&nbsp; For tools, like LibraryFind, which deal with larger datasets, this is a welcome change.</li>
</ol>
<p>&nbsp;</p>
<p>&#8211;TR</p>
]]></content:encoded>
			<wfw:commentRss>http://people.oregonstate.edu/~reeset/blog/archives/561/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails SVN question</title>
		<link>http://people.oregonstate.edu/~reeset/blog/archives/505</link>
		<comments>http://people.oregonstate.edu/~reeset/blog/archives/505#comments</comments>
		<pubDate>Sun, 24 Feb 2008 07:56:36 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://oregonstate.edu/~reeset/blog/archives/505</guid>
		<description><![CDATA[For a rails project, when I want to update the vendor/rails it appears that the easiest way to update this in svn is to delete the directory, refresh the gems and then re-add the directory to the svn.&#160; Does this sound right?&#160; Seems like it should be easier.&#160; This has been the process that we [...]]]></description>
			<content:encoded><![CDATA[<p>For a rails project, when I want to update the vendor/rails it appears that the easiest way to update this in svn is to delete the directory, refresh the gems and then re-add the directory to the svn.&nbsp; Does this sound right?&nbsp; Seems like it should be easier.&nbsp; This has been the process that we have used for about a year and after going through it again (to update to the 2.0.2 framework), I&#8217;m just thinking that its got to be easier. </p>
<p>&nbsp;</p>
<p>&#8211;TR</p>
]]></content:encoded>
			<wfw:commentRss>http://people.oregonstate.edu/~reeset/blog/archives/505/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using MarcEdit to reuse (and maybe import) items in Dspace</title>
		<link>http://people.oregonstate.edu/~reeset/blog/archives/485</link>
		<comments>http://people.oregonstate.edu/~reeset/blog/archives/485#comments</comments>
		<pubDate>Thu, 03 Jan 2008 04:38:10 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Dspace]]></category>
		<category><![CDATA[MarcEdit]]></category>

		<guid isPermaLink="false">http://oregonstate.edu/~reeset/blog/archives/485</guid>
		<description><![CDATA[I&#8217;ve been thinking a little bit about some of the things that I use MarcEdit for and have been pushing some of this work off my desk to some of the staff in our technical services department.&#160; We actually use MarcEdit quite a bit when it comes to sharing metadata from our Dspace instance with [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been thinking a little bit about some of the things that I use MarcEdit for and have been pushing some of this work off my desk to some of the staff in our technical services department.&nbsp; We actually use MarcEdit quite a bit when it comes to sharing metadata from our Dspace instance with other systems, like OCLC&#8217;s WorldCat and our online Catalog.&nbsp; For example, we use MarcEdit to automatically generate MARC21 records for our theses submitted through Dspace.&nbsp; The process seems to work fairly well, and has been very easy for our staff to learn.&nbsp; Should write an article documenting this process and how its working at OSU at some point.&nbsp; </p>
<p>To that end, I&#8217;m writing a plug-in for MarcEdit that may enable me to mainstream the processing of web page archiving in Dspace.&nbsp; At this point, the process is a bit too manual for my tastes.&nbsp; Along with spidering a site (using whatever the chosen depth may be), there is this pesky manual step of flattening the site and making the urls relative.&nbsp; Not a big deal (unless there are file name collisions [which there always are] when reading depths), but it takes time.&nbsp; So, I spent some time this afternoon and wrote a threaded web crawler.&nbsp; Seems to work well.&nbsp; At this point, I just need to add the logic to flatten all paths, and come up with a naming schema to re-write all urls to provide unique file names.&nbsp; Once I get that down, building the batch import package for Dspace should be fairly trivial.&nbsp; Not sure how much time I&#8217;ll have to work on this over the week/weekend, but would be a pretty cool project to finish I think.&nbsp; It would certainly allow the library to provide site archiving as a dspace option (at this point, its only done under very special circumstances) and should simplify the process enough to the point that it could probably become a mainstream process.&nbsp; </p>
<p>Anyway, if I do get a chance to get this finished, I&#8217;ll certainly make it available as a plug-in (with source).&nbsp; Of course, if someone has already developed a simplified process that requires no manual processing after harvest, I would love to hear it.</p>
<p>&#8211;TR</p>
<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f149c8e9-a3fd-41d9-b075-a3ebf0e7dd6a" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tags: <a href="http://technorati.com/tags/dspace" rel="tag">dspace</a>,<a href="http://technorati.com/tags/marcedit" rel="tag">marcedit</a>,<a href="http://technorati.com/tags/plug-ins" rel="tag">plug-ins</a></div>
]]></content:encoded>
			<wfw:commentRss>http://people.oregonstate.edu/~reeset/blog/archives/485/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MarcEdit 5.x and OCLC Plug-in Update</title>
		<link>http://people.oregonstate.edu/~reeset/blog/archives/482</link>
		<comments>http://people.oregonstate.edu/~reeset/blog/archives/482#comments</comments>
		<pubDate>Wed, 26 Dec 2007 07:41:48 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[MarcEdit]]></category>

		<guid isPermaLink="false">http://oregonstate.edu/~reeset/blog/archives/482</guid>
		<description><![CDATA[I took a couple of minutes and made a few changes to MarcEdit and the OCLC plug-in to provide some additional functionality to the plug-in framework and fix an error in the OCLC plug-in.&#160; 
Changes:
MarcEdit:

One real change.&#160; In the MacroInterfaces.dll (the library that allows the Scripting interface and the Plug-in interface access to the MarcEditor [...]]]></description>
			<content:encoded><![CDATA[<p>I took a couple of minutes and made a few changes to MarcEdit and the OCLC plug-in to provide some additional functionality to the plug-in framework and fix an error in the OCLC plug-in.&nbsp; </p>
<p><strong>Changes:</strong></p>
<p><em>MarcEdit:</em></p>
<ul>
<li>One real change.&nbsp; In the MacroInterfaces.dll (the library that allows the Scripting interface and the Plug-in interface access to the MarcEditor and its functions) I&#8217;ve added two new functions: AddButton and RemoveButton.&nbsp; These two functions allow users to have plug-ins place buttons on the toolbar of the application (at least, on specific windows).&nbsp; </li>
</ul>
<p><em>OCLC Plug-in:</em></p>
<ul>
<li>I&#8217;ve added the code to initiate a button and interact when it is clicked to the MarcEditor toolbar.</li>
<li>I&#8217;ve corrected the 007 error.&nbsp; See: <a title="http://oregonstate.edu/~reeset/blog/archives/480" href="http://oregonstate.edu/~reeset/blog/archives/480">http://oregonstate.edu/~reeset/blog/archives/480</a></li>
</ul>
<p>So what will you see with the changes.&nbsp; Well, the big change you will see is when you initialize the plug-in in the MarcEditor.&nbsp; Once you have downloaded the update to both MarcEdit and the Plug-in (you need both), you will see the following when the plug-in is executed:</p>
<p><a href="http://oregonstate.edu/~reeset/blog/wp-content/mslive_images/MarcEdit5.xandOCLCPluginUpdate_1458A/image.png" target="_blank"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="413" alt="image" src="http://oregonstate.edu/~reeset/blog/wp-content/mslive_images/MarcEdit5.xandOCLCPluginUpdate_1458A/image_thumb.png" width="644" border="0"></a> </p>
<p>The new button added has been highlighted.&nbsp; This button now acts as the new <strong>Save</strong> button when you have made your changes to the OCLC data records.&nbsp; This will move the data back into the OCLC Save File.&nbsp; Remember &#8212; at this point, you will want to make a backup of your Save Files before you make your changes &#8212; just in case there are other fields in OCLC&#8217;s XML format that are different than I would have expected.&nbsp; </p>
<p>If you have downloaded the OCLC Plug-in and would like to update it.&nbsp; At this point, the process isn&#8217;t as streamlined as I&#8217;d like (I&#8217;ll fix that this week while I&#8217;m taking some time off to recharge).&nbsp; Essentially, you need to Uninstall the plug-in (using the plug-in manager or, delete the oclc_helper.dll from the marcedit plug-ins directory (generally, c:\program files\marcedit 5.0\plugins\).&nbsp; If you uninstall with the plug-in manager, you will need to close and restart MarcEdit.&nbsp; Then open the plug-in manager and download the new plug-in.&nbsp; If you delete the library directly from the plug-ins directory &#8212; just open MarcEdit, select the plug-in manager and download the plug-in.</p>
<p>I&#8217;ve updated a new version of MarcEdit: <a href="http://oregonstate.edu/~reeset/marcedit/software/development/MarcEdit51_Setup.exe" target="_blank">MarcEdit51_Setup.exe</a>.&nbsp; I&#8217;ve also uploaded a new version of the plug-in (download this through plug-in manager [see above]).&nbsp; Source can be downloaded from: <a href="http://oregonstate.edu/~reeset/marcedit/software/development/plugins/source/oclc_helper.zip" target="_blank">oclc_helper.zip</a>.</p>
<p>If you have a strong desire to see how this type of interaction is accomplished in C#, please see the following post and sample project file: <a title="http://oregonstate.edu/~reeset/blog/archives/481" href="http://oregonstate.edu/~reeset/blog/archives/481">http://oregonstate.edu/~reeset/blog/archives/481</a>.</p>
<p>&nbsp;</p>
<p>&#8211;TR</p>
]]></content:encoded>
			<wfw:commentRss>http://people.oregonstate.edu/~reeset/blog/archives/482/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# plug-ins continued &#8212; Interacting with one&#8217;s hosted application</title>
		<link>http://people.oregonstate.edu/~reeset/blog/archives/481</link>
		<comments>http://people.oregonstate.edu/~reeset/blog/archives/481#comments</comments>
		<pubDate>Tue, 25 Dec 2007 03:57:01 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[General Computing]]></category>

		<guid isPermaLink="false">http://oregonstate.edu/~reeset/blog/archives/481</guid>
		<description><![CDATA[Example Project Source: PluginProject.zip
Because I&#8217;ve been doing a lot of work with MarcEdit and plug-ins, I thought I&#8217;d post some sample code for anyone interested in how this might work.  Essentially, the sample project includes 3 parts &#8212; a host application, a set of Interfaces and a Shared library.  Making this work requires a couple [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Example Project Source: </strong><a target="_blank" href="http://oregonstate.edu/~reeset/marcedit/examples/PluginProject.zip">PluginProject.zip</a></p>
<p>Because I&#8217;ve been doing a lot of work with MarcEdit and plug-ins, I thought I&#8217;d post some sample code for anyone interested in how this might work.  Essentially, the sample project includes 3 parts &#8212; a host application, a set of Interfaces and a Shared library.  Making this work requires a couple of important parts. </p>
<p>First, the host application (either the form or class), need to implement the set of interfaces.  So for example, if interaction with a form in the hosted application was need, you would configure the form to implement a set of interfaces.  This would look like:<br />
<code>using System;<br />
using System.Collections.Generic;<br />
using System.ComponentModel;<br />
using System.Data;<br />
using System.Drawing;<br />
using System.Text;<br />
using System.Windows.Forms;</p>
<p>namespace HostApp<br />
{<br />
    public partial class Form1 : Form, HostInterfaces.IHost<br />
    {<br />
        //...<br />
    }</code></p>
<p>This implements the IHost class (link to msdn) &#8212; a generic class that allows you to</p>
<p>pass objects between dynamically loaded libraries.  .NET includes a IScript interface that allows for scripting functionality as well. </p>
<p>Anyway, the interfaces are simply like delegates &#8212; they define the visible functions/methods that will be accessible to a foreign assembly.  This is the simpliest file to create.  It looks something like this:</p>
<p><code>using System;<br />
using System.Collections.Generic;<br />
using System.Text;</p>
<p>namespace HostInterfaces<br />
{<br />
    public interface IHost<br />
    {<br />
        System.Windows.Forms.Label label { get;}<br />
        System.Windows.Forms.ToolStripButton AddButton(string caption);<br />
        void RemoveButton(System.Windows.Forms.ToolStripButton t);</p>
<p>    }<br />
}</code><br />
Finally, the Dynamic assembly has the ability to work with any function/object within the host application that has been made public through the interface.  For this sample project, I&#8217;ve shown how to modify a label (on the host application), add a button to a toolbar and respond to click events from that button. </p>
<p>The project is a simple one &#8212; but should go a long way towards showing how this works.</p>
<p>Cheers,</p>
<p>&#8211;TR</p>
<p style="display: inline; margin: 0px; padding: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:aa03ed7a-9808-413c-9d38-5947ae2db419" class="wlWriterSmartContent">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/C#">C#</a>,<a rel="tag" href="http://technorati.com/tags/plug-ins">plug-ins</a>,<a rel="tag" href="http://technorati.com/tags/interfaces">interfaces</a></p>
]]></content:encoded>
			<wfw:commentRss>http://people.oregonstate.edu/~reeset/blog/archives/481/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
