Blog

  • Tagged in

    I’ve never been one for chain letters. I don’t generally like to impose myself on others (I don’t even like to call people on the phone on account of this… let’s call it a ‘phobia’), so the thought of dragging others into the chain to find more people to drag into the chain seems like an imposition far greater than I deserve to expect of others.

    Still, sometimes the moment must rule. Sometimes the tagger is someone that I respect so much, that I cannot be the churl to break the momentum of the chain.

    Plus, Peter already answered the call.

    So, despite my fears of broadcasting what a knuckledragging neanderthal I actually am, here are my “4 things” (although I’m not sure what rules there are on this):

    4 jobs I’ve had:

    • Newspaper bundler
    • Frozen yogurt slinger
    • Pizza Guy
    • Parcel Delivery Service Truck Loader

    4 instruments I’ve played

    • Viola
    • Clarinet
    • Oboe
    • Bass guitar

    4 books I regret not having read (but still might)

    • Of Mice and Men
    • King Lear
    • The Adventures of Huckleberry Finn
    • The Fellowship of the Ring

    4 random numbers

    • 1
    • 6,024
    • -93
    • 873.975

    4 places I’ve lived

    4 movies I catch watch over and over

    • Raising Arizona
    • This is Spinal Tap!
    • Ran
    • The Conversation

    4 plays I have acted in

    • The Elephant Man
    • Translations
    • Just So Stories
    • A Christmas Carol

    4 favorite songs

    • “I want you” – Elvis Costello
    • “Ruby’s Arms” – Tom Waits
    • “Neighborhood #1 (Tunnels)” – the Arcade Fire
    • “Upward Over the Mountain” – Iron & Wine

    4 favorite covers

    • “Sunday Morning Sidewalk” – Kris Kristofferson – Crooked Fingers
    • “Hallelujah” – Leonard Cohen – Jeff Buckley
    • “Satisfaction” – Rolling Stones – Cat Power
    • “The Unwelcome Guest” – Woody Guthrie – Billy Bragg & Wilco

    4 vehicles I have owned (in order)

    • ’85 Dodge Colt (red)
    • ’73 VW Camper (red)
    • ’91 Nissan 4×4 Pickup (red)
    • ’80 Mercedes TD Wagon (avocado)

    4 taggees

    As I said, I’m no chain letterer.  I felt an obligation to respond due to the source.  Here are some pings, mainly because everything new I learn about them fascinates me, so if they take the ball and run with it — the blogosphere is more enriched by it.

    Inkdroid, LibraryCog, One Big Library, Kevin Clarke

    There.  I feel free from obligation.

  • The One for the Thumb

    I have been a Pittsburgh Steelers fan for a long time. I don’t claim to have been cognizant of all of their Superbowl victories (although I was actually alive for all of them), I have always been a Pittsbugh Steelers fan (which, for a kid growing up in suburban Philadelphia was as popular as Benedict Arnold) and this was the sweetest of all.

    I got my Steelers helmet for Christmas in 1994 from Pete Carty, a good friend (and former roommate)… After Superbowl XXX, I feared that the helmet was cursed (do you realize how hard it is to stick the neck of a beer bottle through the face mask?!)… It worked this year.

    When Franco Harris (!!) ran out before the game waved the Terrible Towel, I had a good feeling… It quickly dissapated when the game started… I’ll be honest, Matt Hasselbeck was the MVP…

    What does it matter, the Steelers won! For the thumb! Yay!

  • The Librarian/Staff Divide

    Every library I have worked at has had an uneasy caste system between the faculty and staff. While I understand this to extent, this delineation is used without rhyme or reason much of the time. The implication is that this means the librarians are treated as “career professionals” and the staff is merely “the help” (more on this in a minute).

    I was pleasantly surprised to see the University of Iowa waive the MLS requirement for their current “Director of Information Technology” job posting (MS Word Document).

    The University of Iowa Libraries seeks a creative, experienced professional to lead our information technology (IT) operations. Building on the Libraries’ current capabilities, the Director will provide innovative leadership in the use of technology to deliver information resources and services to the Libraries’ user communities. The Director for Library Information Technology reports directly to the University Librarian and is a member of the Libraries’ Executive Council contributing to overall strategic planning, program development and evaluation, and the allocation of resources in support of the Libraries’ mission.

    This is a senior administrative position responsible for IT planning, the development of system-wide policies and procedures, and the coordination of information technology activities throughout the library system. The Director will supervise a department of 11 staff responsible for desktop support and technical training, systems administration and security/rights management, and applications development. Collaborative and advocacy activities with other library administrators and staff as well as members of the IT community on campus, the state, nationally and internationally are key responsibilities of this position. This Director serves as the Libraries’ liaison to CNI, EDUCAUSE, and similar organizations.

    Qualifications

    Required:

    • Bachelor’s degree

    • Minimum of 9 years of library information technology experience in a university environment

    • Demonstrated knowledge of current trends and best practices in the application of information technology in research libraries and higher education

    • Demonstrated experience promoting and working effectively in a diverse environment

    • Evidence of highly effective interpersonal and communication skills.

    • Evidence of analytical and creative problem-solving skills

    • Library-wide perspective and ability to contribute to planning and system-wide administration of the Libraries

    • Record of active participation in national pertinent professional associations

    While I meet the “minimum requirements” for this position, I am not fully qualified… somewhere in this job’s requirements (maybe not actually written in it) is a healthy desire to live in or near Iowa City (which I do not possess). Still, this is very, very progressive for school of UIowa’s size. They are indicating that if you have spent 9 years of your life working in libraries and have shown the initiative to participate professionally and whatnot, you’re the sort of person who they want on their team. The idea being that the MLS is not a terribly good indicator of skills and (for this sort of position, anyway) may actually limit the pool of good potential candidates they may get.
    When I was hired as “Web and Application Development Coordinator” at Emory, they stripped any “faculty-ness” from the position which, in turn, devalued the authority the position had — at least this seemed true in practice. The position could have been pretty similar to that of Iowa’s (I still would have been miserable at it), but the faculty wasn’t quite able to make the leap to label me a “peer”.

    Just like my Emory position, though, Iowa is requiring that the position be a “manager” position to get invited to the “career professional” table. There are a lot of librarians at that table who are not managers.

    This gap was made evident eariler this week here at Tech. I frequently hear about things going on in the library secondhand due to the fact that I am not faculty. Lord knows how much I never hear. We have a mailing list (lib-fac) where “career professional” sorts of announcements are made and, on Tuesday, a meeting was held for the faculty only to hear people report back what they had learned at ALA Midwinter.

    My beef here is, why the faculty only distinction? If they were talking about tenure review or the sorts of things that couldn’t affect me by nature of my employment status that would be one thing. They are talking about things that I would like to know about, however, and could possibly contribute a voice in the discussion. I am not entirely sure why I should be left out.

    It’s possible that I could be included just by asking to be. But why am I (or any other staff that has an interest in the profession, for that matter) being excluded in the first place?

    I guess what I’m trying to say is that it’s a little discouraging to work to be treated as a peer and a colleague in a national/international community and not in my own organization.

    My intention here is not to single out Georgia Tech; this is prevalent throughout libraries everywhere (at least, from what I’ve seen it has). I’m just calling for the possibility of a third caste: those that are making a career in libraries, but have no desire for faculty status (or management).

  • Ruh-ropenurl Raggy

    Ed Summers has been helping me write an OpenURL library for Ruby.

    Preliminary work available on Ed’s “business in front” site via svn.

    Note, I am very new to Ruby, so these are probably not terribly well written.

  • That Article I Had No Business Writing…

    Is finally out.
    So, uh, if you’re in the market to buy a Link Resolver or just are seeking general information on one… er, check it out.

  • On unAPI

    After arguing with Dan for hours on how to implement unAPI, I decided to take him up on his request and implement an unAPI service for our OPAC.  This way I would have some real world experience to back up my bitching.

    So, here you go.  This script takes our SRU to OpenSearch services for the OPAC and the Universal Catalog.  I’ve modified the OpenSearch CGI to include the unAPI identifier.

    The unAPI service is written in PHP and calls the SRU service and presents the results accordingly.

    So, my reactions:

    1. The JSON requirement doesn’t really bother me.  Whatever is chosen is rather arbitrary, so I’m ok with JSON.  I’d be just as ok with XML or text delimited.  I see no real difference.
    2. I am not entirely convinced that just exposing the metadata (with no wrapper) is scaleable.  I’m not saying I can’t be convinced, I’m just saying I’m not currently.
    3. I see no point in sending the status along with the response.
    4. This is, indeed, much simpler than making an OAI-PMH server in PHP over Voyager.
    5. I would really prefer parameters to paths.  I think there are too many assumptions about the implementor (and the future) to use paths.

    What I am still not entirely sure about fundamentally, however, is why we need another sharing protocol.  Dan claims it’s because OAI-PMH and ATOM are still too complicated for stupid people and the less technically inclined to pick up and he wants something simpler.

    What I don’t understand is why we don’t just make a “simpler” API to one of those protocols.  Choose a particular syndication protocol (after all, that’s really what OAI-PMH is) and then just make an API to “Gather/Create/Share” with it.

    Personally, I am much more interested in making our OAI-PMH archives and our SRW/U servers available via ATOM, much like we made SRU available to OpenSearch.  That way we pick up on the wide variety of tools already out there.

    This interests me on other levels, since I’m really starting to picture the Communicat as a sort of ATOM store.

    I see a lot of potential with unAPI (a whole hell of a lot of potential), but I would rather utilize an existing protocol (especially one that promises to have a lot of users, read: ATOM) than build another library system that is largely ignored outside our community.

    On a related note, I want to point out what I see as two wastes of library developers’ time:

    • Walt is right:  DON’T MAKE LIBRARY TOOLBARS (it’s in there, trust me).  It’s asking too much to expect people to install and use something that has such a limited scope.
    • The OPAC jabberbot follows the same line of thinking.  In #code4lib, our resident bot (Panizzi) employs an OpenSearch client.  Honestly, this makes tons more sense since it’s easy (honest!) to make your OPAC speak OpenSearch and there are going to be a lot more useful things available via OpenSearch than a handful of library catalogs.

    No, I think we’re better served making our data work contextually in a user’s information sphere.  Push our data out to common aggregators rather than replicate the services to handle our arcane practices.

  • Suck on this, Diebold

    All in all, I’ve been pretty unhelpful in the coordination of Code4Lib 2006. Those that know me know I’m not terribly organized and horribly forgetful, so I knew it wasn’t in anybody’s best interest for me to commit to much. With that, I felt it best if I was involved with the proposal submission/vetting process.

    Early in the organizing process, the “organizing group” (committee is far too strong a term) set up a Backpack page to keep up with all of our tasks and documents. It worked pretty well. I liked the idea of a centrally located “document” that was editable by several users (the “proposal submission group” was made up of myself, Jeremy Frumkin and Dan Chudnov (on a non-committal basis)), so I used another Backpack page to compile the submissions. I am glad that I did this; I would never have been able to keep up with them, otherwise.

    As we got closer to the submission deadline, it dawned on me that I needed to set up the voting mechanism quickly (we had decided to allow any potential attendees vote on the program they wanted to see). Roy Tennant had toyed with the voting module in drupal (since that’s what code4lib.org runs), but it wasn’t quite what I had pictured.

    What I wanted was:

    • A page where the user could see all the proposals at once
    • A simple up or down vote
    • A way to tally how many “yea” votes the user has cast (since we were allowing them to cast 11 votes)
    • A way for the user to revise their votes
    • An auditing system
    • Something to tally the votes for me

    So I made my own. One nice side effect to having compiled all of the submissions in Backpack was that it was very easy to screenscrape. All of the “notes” are contained in divs that have the class “note”. The id attribute contains a unique id for that note and the titles are contained in an H3 within that div. Perfect for scraping.

    The first thing I did was set up a simple MySQL database that contained three tables: voters, proposals and votes. Voters probably wasn’t necessary, but I had this original plan to “register to vote” within code4lib.org and then the voting mechanism would “review your registration”. It wound up being much less sophisticated. So, basically “voters” was two fields, drupal user name and id.

    “Proposals” was also just two fields: id and title, and the intention was that this would get scraped from the Backpack page (the id being the unique “note” id). “Votes” was just a joining table between voters and proposals.

    Next, I made a bookmarklet that rewrote the Backpack page to have a bunch of forms with submit buttons on them within the “note” divs. There’s a lot of wasted space in Backpack, so I inserted an Iframe under the Backpack logo in the right column to tally the user’s votes. The bookmarklet was pretty simple and can be found here.

    Next, I wrote a PHP script that set in the Iframe and tallied the votes. When the user posted a vote, it would check to see if the proposal had already been added to the proposals table (if not, it would add it) and add the user’s vote to the “votes” table. It would output all that they had already voted for and let them know how many votes they had left. It would also create links next to each submitted vote for the user to remove a cast vote.

    The last step was making a node in Drupal that create made a bookmarklet link that included the user’s username (the user needed to be logged in to vote). This step, sadly, took me the longest because I had no idea how to get the username in Drupal.  It turns out you can “global” the $user variable and have access to all its attributes.
    Pretty simple.

    Lastly, I created a handful of webservices to keep a running tally of which proposals had enough votes to “win”, a list of registered voters and how many votes they had cast, and (when more reshuffling the schedule allowed 3 more presentations to be accepted) a list of all proposals and their vote counts.

    For throwing something together at the last minute, it worked ok. There is one user that doesn’t have a username (no clue who that is or why it happened) and Ed Corrado doesn’t appear in the registered voters output because his “voting cookie” was set before I cleared out all of the “test votes” (I think).

    All in all, a fun little hack.

  • Time to start polishing off my helmet for the playoff run

    No, that’s not a euphemism for anything.

    Pittsburgh’s dominance in the first quarter was so complete that it produced some almost unbelievable stats. In the opening period, the Steelers outgained the Browns 196-1; had 162 passing yards to minus-2 for Cleveland; and led in first downs 9-0.

    (from espn.com)

    Bring it on, y’all.

  • To Free or not to Free?

    Last week I was reading Dorothea Salo’s posting about OCLC’s report on library branding, and it got me to thinking about this a bit.

    In particular, I thought about her comment:

    I would want to trial-balloon a “Deep Web” play in my next survey, if I were OCLC. I would want to know how many people have heard of the Deep Web, what they think is in it, whether they think information useful to them is in it, whether they would access it through their libraries if they could. This moves away from free-vs.-paid and toward exclusive-vs.-nonexclusive. People like the idea of being privileged. If the library is a place that privileges them, I think they’ll go for it. Special-collections and archives get a boost in this campaign, too; access to rare or unique information is the ultimate in privilege.

    I see a tension here. While many push for an “information wants to be free” model, this would, inherently, devalue the role of the organization that makes it free. In fact, to take her quote even farther, this is especially true of special collections and archives.

    Allow me to explain.

    Users aren’t particularly discriminatory as to where they get their information. Our students or faculty don’t really care if the article or research they are looking at comes to them courtesy of Georgia Tech or if it was found in Citeseer. They are more likely to say they found something in “Google Scholar” vs. the actual institutional repository for the school they are actually getting it from. The more open the information is, the less exclusive our collection becomes and the less leverage and value we hold (at least conforming to our traditional model).

    With special collections, this is especially true. Special collections are “special” because they are “unique”. Libraries spend a lot of money curating these collections. Historically, this has enjoyed a fairly good ROI because it distinguishes the library (and therefore, larger institution) as something “special” itself. These materials are exclusive to that particular institution and give value to the collection.

    However, there is pressure to digitize and publish these collections. If all of these collections are digitized and published, we have a bunch of silos strewn about the internet requiring the user know about find them to use them. Since it is a lot of work to digitize and mark up these collections, there’s not a terribly good return for the effort.

    In an effort to improve findability, the collections need to be aggregated with other similar collections to increase their exposure. However, the result of this is improved awareness and accessibility, but at the same time it dilutes exclusiveness and branding. Whoever provides the aggregation/discovery service gets the benefit of the content, so some of the content providers (inherently) must lose.

    So, what does this mean? It should not prevent us from making our collections more open and accessible. That runs counter to our mission. However, we need to start thinking of ways to generate value when our information is free. There are plenty of ways of doing that, such as tailoring services that aggregates the “free” information for our communities, or building systems that can use the information in unique and specialized ways.

    There is a large cultural shift that needs to take place to realize this future, however. We still place a lot of emphasis (way too much, really) on the size and uniqueness of our collections. With a world of information available (or a lot of it, at any rate), it’s not so much an issue of how many books you have in your building, but how you are able harness all the good data and present it in useful and meaningful ways. There aren’t easy metrics to this. ARL just can’t count book spines and annual budget. Serious consideration needs to be paid to what and how a library is utilizing the collection outside their walls.

  • Rails Resolver Router: on Rails!

    Since my foray into python a couple of months ago, I’ve been enjoying branching out into new languages.

    I had pitched the concept of a link resolver router for the state universal catalog to a committee I sit on (this group talks about SFX links in the 856 tag and whatnot). The problem with making links for a publicly available resource point to your institutional resolver is just that. It’s pointing your your institutional resolver, despite the fact that your audience could be coming from anywhere. This plays out even greater in a venue such as a universal catalog, since there’s not really a “home institution” to point a resolver link, anyway. OCLC and UKOLN both have resolver routers, and OCLC’s certainly is an option, but I don’t feel comfortable with the possibility that all of our member institutions might have to pay for the service (in the future). My other problem with OCLC’s service is that you can only belong to one institution and I have never liked that (especially as more and more institutions have link resolvers).

    So, in this committee I mentioned that it would be pretty simple to make a router, and since I was having trouble getting people to understand what exactly I was talking about, I decided to make a proof-of-concept. And, since I was making a proof-of-concept, I thought it’d be fun to try it in Ruby on Rails.

    Now, a resolver router is about the simplest concept possible. It doesn’t really do anything but take requests and pass them off to the appropriate resolver. It’s a resolver abstraction layer, if you will. I thought this was a nice, small project to try to cut my Ruby teeth on. There’s a little bit a database, a little bit of AJAX. It’s also useful, unlike making a cookbook from a tutorial or something.

    It took about three days to make this. After you pick your resolver (Choose a couple! Add your own!), you’ll be taken to a page to choose between your various communities for appropriate copy.

    I chose this particular citation because it shows the very huge limitation of link resolvers (if you choose Georgia Tech’s resolver and Emory’s resolver, for instance); despite the fact that this is freely available, it does not appear in my resolver. That’s not really the use case I envision, though. I am thinking more of a case like my co-worker, Heather, who should have access to Georgia Tech’s collection, Florida State’s resources (she’s in grad school there), Richland County Public Library (she lives in Columbia, SC), and the University of South Carolina (where her husband is a librarian). The resolver router alleviates the need to search for a given citation in the various communities (indeed to even have to think of or know where to look within those communities).

    Sometime later this winter, I’ll have an even better use case. I’ll keep that under wraps for now.

    Now, my impression of Ruby on Rails… For a project like this, it is absolutely amazing. I cannot believe I was able to learn the language from scratch and implement something that works (with this amount of functionality) in such a short amount of time. By bypassing the need to create the “framework” for the application, you can just dive into implementation.

    In fact, I think my time to implementation would have been even faster if the number of resources/tutorials out there didn’t suck out loud. Most references point to these tutorials to get you started, but they really aren’t terribly helpful. They explain nothing about why they are doing what they are doing in them. I found this blog posting to be infinitely more useful. Her blog in general is going in my aggregator, I think.

    When it comes to learning Ruby, this is a masterful work of art… but… not terribly useful if you just want to look things up. I recommend this for that.

    Anyway, I am so impressed with Ruby on Rails that I am planning on using it (currently) for “alternative opac project“, which is now being code named “Communicat”. More on this shortly (although I did actually develop the database schema today).