Archives for The Bruised Edge

Boston’s “Free Your iPod” Party (Today)

Free Culture Boston and the Computing Culture group at the MIT Media Lab are hosting an iPod liberation party. They will be helping people install RockBox or iPodLinux on their iPods — freeing them from Apple’s file type, and DRM, limitations.

I don’t own an iPod (I bought an iRiver instead precisely because of the ogg support). Seeing this post though makes me want to go out and buy a stylish iPod just to put RockBox on it.

Thanks to the Lossless Audio Blog for bringing this event to my attention (even though I don’t live in the Boston area). I’m very curious about these alternatives to the standard Apple software and would love to hear from people who are using RockBox or iPodLinux.

And the, now, obligatory haiku:

Can you hear the sound –
The thrash of a song bird’s wings
in a small white cage

The New and Improved Google Reader

Ready for another haiku?

Google’s new Reader –
feeds, like email, are better
when sorted by source.

Who do I think I am… Matsuo Basho? Far from it! Still, this is fun.

So, I tried the Google Reader when it first came out and, well, was extremely underwhelmed. I’m a fan of Google’s search, Google Maps, GMail, Google Calendar, etc. but their Reader did not interest me at all. With the release of their new Reader, I’ve taken another look (and things are very different this time around).

The reader is so good, in fact, that I’m moving from Thunderbird (which I use for RSS) to Google Reader. This will probably have a ripple effect because I stopped using my old mail reader, Evolution, so that I could use Thunderbird‘s RSS reader (Evolution doesn’t, to my knowledge, have an RSS component).

I’m going to give it another week or so (just to make sure), but can imagine moving back to Evolution for my email in the very near future. I should say I have nothing against Thunderbird. This decision is also, in part, because my place of work is installing an Exchange server sometime soon.

One of the things that I’ve never liked about web-based news readers is that they give into the endless stream of feeds without trying to provide any organization (e.g., sources are just ‘tags’ on a post). The new Google Reader gets it right, in my opinion, by treating feeds more like email. The source is more important than anything else when I consider whether I want to read something; having my feeds categorized by source makes my life much easier.

Yes, currency is important but I’d rather read an older post of a blog I value highly than the most recent post from a blog in which I’m just mildly interested. Hooray Google for getting this right… it makes all the difference.

Other nice features include the ability to auto-mark something as read and to be able to star something as important. It is not clear to me how long starred posts remain available to me (it would be nice if they were available for as long as I want them to be — I’d give up a little of my Gmail disk space for that).

One thing the new Reader doesn’t have (which would be nice) is the ability to filter feeds. There are one or two feeds that I have a filter on so that I only see the relevant (to me) posts. I haven’t found this feature yet with Google Reader (Thunderbird does have this option). This aside, I’ve been wanting to move more towards a web-based RSS reader and I think, now, I’ve found one that works for me…

Mission Haiku

Following the lead of others (Rochelle Hartman, Dorothea Salo, and Bess Sadler), I’ll take a stab at my professional mission statement in haiku form:

Building libraries
one line of code at a time–
another service

Of those that I’ve seen so far, I think I like Bess Sadler’s second one the best. As is typical with me, I have a strong desire to explain mine in verbose prose, but that sort of defeats the purpose of the haiku, doesn’t it?

The Bottom Line

The August 2006 American Libraries has an interesting story about censorship thwarted. Apparently the Nampa Public Library in Idaho was willing to let a donor with $10,000 walk away rather than bend to his desire to have several books, legitimate sources of information about sex, be removed from the stacks. Yay, Nampa PL!

The would-be donor reportedly said of the library official’s decision, “from a business perspective that’s a bad policy.” Yes, from a business perspective, it is a bad policy, but (and here is the point) not everything is (nor should be) run like a business. Business’ bottom line is profit. Any thing that detracts from that profit is a bad thing. On the other hand, governments and institutions of cultural knowledge are not businesses and should not be run like them. The bottom line for these institutions is the people they serve (all the people, not just the majority of them).

Yes, governments and libraries (and museums, etc.) have budgets and must have sound fiscal policies but these are things that serve the people who use their services (not the other way around). This is one of the reasons I’m very happy about working in a library (and probably making less than I could make in the commercial sector). There is the feel good factor that we are doing something good, something that really matters. Hip, hip, hooray for institutions that make people the bottom line.

Abstraction Layers

Joel, from Joel On Software, has an interesting article about what he calls the Development Abstraction Layer. I’m not in the business world, but the whole description interested me. I posted a quote from it in #code4lib (not one that I particularly agreed with, but one that I found thought provoking) and Ross Singer commented that being abstracted away, to the degree that programmers are in Joel’s article, didn’t appeal to him at all.

It started me thinking that librarians really are generalists. This is, I think, a Good Thing™. It is better, at least (and in my opinion), than being a programmer who emerges from Microsoft (or something like it) completely unaware of anything but programming.

Code4libmobile

There have been chats of late in the code4lib IRC channel about what code4lib is. I think the people involved have always described it as an informal collection of librarians and library programmers (the topics range from musical tastes, locker room humor (hopefully not too much and hopefully the bad stuff doesn’t go unanswered), kids and families to things like actual code, ILSes, neat library hacks, different programming languages, etc. — there is a fair amount of the latter stuff during work hours (and even into the night… the people there code for fun too)). Around the recent Code4Lib conference, though, there was more and more talk about the possibility of extending the group into a conference, a non-profit organization, a journal, and a few other things as well.

I’ve been talking with a friend recently, who is a relative newcomer to the code4lib channel, about the “insular” nature of the group (I agree with his assessment, but I also think code4libbers try to be friendly and reach out when new folks enter — some of the problem is just related to group dynamics and especially to groups that have a high context barrier (see below)). Also recently, number 4 in Caveat Lector’s list of Fifty ways to lose your techies generated some interesting discussion in the channel. I’m not aware of anyone who has actually been “sent into” the code4lib channel, but I think the uncomfortableness mentioned in that post is something many people (male or female) might feel when first encountering the group.

So, to start, I don’t think the informal aspect of code4lib can be emphasized enough. Anyone entering the channel looking only for intellectual conversations on the directions of libraries, how to hack their ILS, or which programming language would be the best to learn to start simplifying their daily tasks is going to be disappointed and, in a way, that is disappointing. Wouldn’t it be nice if there was a library coder support group that could help people with just a little experience improve their skillsets or start thinking about library issues in different ways? There are a lot of really knowledgeable and smart people in the channel and I think there is a real need for this outreach in libraryland… what my friend jokingly called Code4libmobile (a name he downplayed but I actually like).

This is not to say this doesn’t happen. People do pop into the channel and ask about a software package for libraries. Often one of the authors, or at least another user, will be in the channel and be able to help out with the problem. Also, regulars in the channel often ask questions and learn a lot from the experiences of others in the channel. There is a great sharing of knowledge that goes on, but it is not the only thing that goes on. There are a lot of “in” jokes and things that may not make sense to someone not “indoctrinated” into the code4lib way. Recently, there has been an effort to counter this problem by creating a #code4lib FAQ. It tries to explain some of the “in” jokes (often revolving around the chat room bot, panizzi) to break down some of the barriers between the old timers and newcomers (does even using those labels create a barrier, recognize one, or neither?)

I’ve always like the Marx quip that “I wouldn’t want to join any group that would have me as a member.” I’m a polite person (I think) and try to be friendly to everyone I meet, but there is also a side of me that really dislikes group dynamics. We can psycho-analyze this away to me being an introvert by nature, the fact that I have red hair and was picked on as a child by the cool kids, or whatever. What I’m getting at, though, is that any group that I join I also try to continue to look at from a third party perspective (in as much as this is possible). To be honest, group dynamics, when the people in the group start exhibiting the same behaviors, saying the same things, etc., also scare me a bit — though I think it is natural for people in a group to behave this way (I do it myself).

Part of this goes back (okay this post is really turning into a long rambling post about me now) to my father. He is an intercultural communications specialist/consultant and grew up in Japan (as a child of a missionary family). I think it is fair to say that he taught me that culture is relative. That we need to step outside of our own culture to understand others’ (and, at the same time, that we really can’t step outside of our own cultures because they are who we are — there is no objective viewpoint). He also introduced me to Edward Hall, a cultural anthropologist, who suggested that cultures fall on a continuum of “high” to “low” context.

According to Hall, Japanese culture is high(er) context; there is much that is conveyed through non-verbal means. This means that a person who grows up Japanese learns many things about how to act, speak, etc. that aren’t necessarily conveyed as verbal /explicit lessons in their society. The United States, in contrast, is a low context culture. Things, more often than not, are explicitly stated/learned. As an aside (hey, this is already a rambling post anyway), I’ve always been interested in the idea that the culture of the southern U.S. has a much higher context than that of the North’s. It is interesting to look at expectations of interactions from this perspective (but that is another post (probably for another blog)).

Anyway, back to the topic at hand. I think, based on my experiences, that #code4lib is a pretty high context culture. That sounds impossible because after all it is one that is based in large part on text (IRC messages). People in there know each other from the various library conferences, and some of them are even friends outside the channel, but much of the interaction takes place on a virtual level. I guess what I’m suggesting is that groups are often higher context than individuals (Japan is more group oriented and the U.S. is more individualistic — sorry (to all those cultural anthropologists who actually know what they are talking about) for the generalizations). Since #code4lib has been around about two years the group has formed a tightness that may be off putting to new people who enter (though I should also note that the group has grown greatly in recent months).

I guess my ideal for any group would be one that allows expression of ideas (even ones that are offending). I expect groups to have a conscience, too, though. I would hope that offending ideas are addressed (not in that a person is stopped from saying them, but in that a plurality of voices is always allowed and encouraged — and if someone disagrees with something that is said s/he would feel comfortable voicing dissent). I certainly know that some in code4lib have rubbed me the wrong way before (even people I like and respect on most other topics). I hope, though, that by continuing to contribute I shape the group. I think that with #code4lib’s growth the group can only benefit (as long as the lines of communication are kept open between people). The more diverse opinions the better, in my opinion.

So, back to the “what code4lib should be”… given all this, I’m not sure the group is the best place for outreach. This is not to say that the members of the group shouldn’t do these sorts of things. Just that if we do our efforts shouldn’t be “branded” with the code4lib name. I understand the advantage of capitalizing on a name that is becoming more well known (though hardly anywhere near being really well known in the community as a whole). I just think, though, that this is trying to make code4lib into something it is not. I think these other endevours (non-profit, journal, outreach, etc.) really need to be more formal. Anyway, this is all just my personal opinion (I do not speak for the group as a whole — noone does in my opinion). It is just something that has been on my mind lately (as I watch #code4lib continue to grow) so I thought I’d throw it out there. Comments, criticisms, throwing things at me are welcome…

The Bus (of 4) Came By and I Got On

In response to Ross Singer’s 4things tagging…

Four jobs I’ve had:
1) veterinary assistant
2) library circ desk student worker
3) cataloging technical assistant
4) library computer programmer

Four places I’ve lived:
1) Greensboro, NC
2) Chapel Hill, NC
3) Mountain View, CA
4) Pennington, NJ

Four countries I’ve visited:
1) Japan
2) China (one day trip in from Hong Kong)
3) Germany
4) The Netherlands

Four countries I’d like to visit:
1) Ireland
2) China (for more than a day)
3) Thailand
4) Iceland

Four (of many) favorite movies:
1) Rosencrantz and Guidenstern Are Dead (#1)
2) Love and Death
3) Eternal Sunshine of the Spotless Mind
4) American Beauty

Four favorite (currently active) TV shows:
5) Battlestar Galactica
6) My Name is Earl
7) The Office (NBC) 8) The Colbert Report

Four recommended books:
1) Zen and the Art of Motorcycle Maintenance
2) This Side Of Nirvana: Memoirs of a Spiritually Challenged Buddhist
3) Sorrow Floats
4) Still Life With Woodpecker

Four (of many) favorite songs:
1) St. Stephen
2) Kilkelly
3) Three Little Birds
4) And The Band Played ‘Waltzing Matilda’

Four favorite types of food:
1) Thai
2) Indian
3) Vegetarian/Vegan
4) Thick crust pizza with soy cheese, artichoke hearts, spinach, olives (not a type, but deserves its own category)

Four vehicles I have owned (in order, though this is not a complete list):
1) VW pop-top camper ‘71
2) Honda CRV
3) VW Vanagon
4) Honda Civic hatchback

Four websites I visit daily:
Unalog
Google
Gmail
My iCal

XQ and Default External Variables

One thing that I really think XQuery needs is the ability to specify a default value for an external variable. I wrote a workaround for our XQuery servlet awhile back but, since I needed to update our XQs with the newest release of our native XML database (it supports a newer version of the spec), I’m looking at the problem again.

Currently, defining a variable that will be passed into the XQuery from an external source is pretty easy:

declare variable $xsl as external;

The problem is… what if you don’t want to pass in default values for every variable (wouldn’t it be nice if you could define them in the XQ itself)? On my first time through this problem I received a sensible (though verbose) suggestion to define another variable:

declare variable $xsl as external;
declare variable $_xsl := if ($xsl) then $xsl else 'default.xsl';

That looks good, looks like it should work, but with my particular native XML database (and perhaps others?) you still need to pass in an empty value for the variable itself. If you don’t have xquery.xq?xsl= then it will fail with an ‘unknown external variable xsl’ exception. The person who made this suggestion, told me empty values could be passed in the code that calls the XQ.

But, I don’t think I should have to tell the XQ what its variables are. In my case, where I have a single XQuery servlet that evaluates all *.xq, this means I need to keep track of all the relevant variables for any given XQ (which is what I currently do by parsing the XQ to see what external variables it defines (this could also be done easier with an XQuery Java API)). It seems like a lot of work though (even if it is cached) compared with what would be a nice, simple solution:

declare variable $xsl external 'default';

Or, something like that… this way, when an external variable isn’t passed in there would be some way to specify what the default value that be should be used is. I don’t know if something like this is in the works for XQuery but it seems like it would make sense to me. Or, perhaps, there is another way around this problem that I’m missing(?)

Concept Maps

I’ve been throwing around (with another library programmer) the idea of expressing XOBIS as a Topic Map. He is knowledgeable about Topic Maps (TMs). I, while interested in them, wouldn’t say I’ve drunk the kool-aid quite yet.

My interest in doing this mapping of (X)OBIS into TM (Topic Map) form is to better understand how to improve XOBIS’ representation in XML (and to improve my understanding of Topic Maps in general).

I also think it is good, once you have “finished” with something (ha-ha, we are not finished yet), to reapproach it from a different angle. So, I’m looking at what TM-XOBIS (for lack of a better label) would look like.

The first thing, for me, is to reapproach TMs.

I read a little about them way back when we were doing XOBIS. To be fair, I think I was a little unjustly put off by TMs back then by a simple, and perhaps irrelevant, part of the model. By this, I mean the word “topic.”

When I looked at TMs originally, I said, “Okay, everything is a topic, but that’s not what I’m interested in… I want to talk about authorities.” I got a little too hung up on this distinction (and will set it aside for this new exploration but before I do I want to dissect it a little).

So, what is a topic? Before looking at how the TM community is using the term, let’s just look it up in a dictionary. Dictionary.COM says:

  1. The subject of a speech, essay, thesis, or discourse.
  2. A subject of discussion or conversation.
  3. A subdivision of a theme, thesis, or outline. See Synonyms at subject.
  4. Linguistics. A word or phrase in a sentence, usually providing information from previous discourse or shared knowledge, that the rest of the sentence elaborates or comments on. Also called theme.

That’s interesting and a bit provocative. I like the idea that the pursuit (and acquisition) of knowledge is just one large conversation. One might suggest that there are not objective truths (or at not ones that we can know) but, rather, just a multitude of perspectives. If a ‘topic’ is the base ‘thing’ in Topic Maps, are the TM people saying that metadata is just one large ongoing conversation… that all we have as a ‘base’ are the topics of our discourses?

From The TAO of Topic Maps: “…the topic map standard defines subject, the term used for the real world ‘thing’ that the topic itself stands in for. We might think of a ’subject’ as corresponding to what Plato called an idea. A topic, on the other hand, is like the shadow that the idea casts on the wall of Plato’s cave: It is an object within a topic map that represents a subject.”

So there is a Platonic ideal and then something that we have as a handle for the ideal. To me, it makes more sense to say that these shadows are conceptions of the ideals. Conception, from the 1913 Websters, is “The formation in the mind of an image, idea, or notion, apprehension.” A conception (e.g., concept)… doesn’t that sound more like Plato’s shadow on the wall (given that I am not a philosopher so may be missing some subtle points)?

XOBIS, like Topic Maps, has a base element. It is the Concept element. There are ten principal elements; the other nine are instantiations of particular types of Concept(s). So why did we choose those ten? Those are the ones that stood out to us as being useful in the context in which we work (metadata for institutions of cultural knowledge).

The nine instantiated XOBIS elements are divided into two classes: substantive and notional (obviously, the substantive elements are ‘handles’ for things that can be held by a library or museum and the notional elements are the shadows on the wall that have a reason for being distinguished from the other more generic shadows). Making this distinction between topic and concept, though, allows us to make another additional distinction.

These shadows, that are our handles, can be used by us in particular ways. For instance, a concept may be used as the subject (or topic) of a particular work (this is a relationship between a work and concept). If everything is a topic from the start, how does one make the distinction that the topic is being used in a topical way? A ‘topical way,’ that is, in a different sense than the idea that everything is a topic in one large ongoing conversation. Is this ‘topic’ different from a ‘topic’ being used in a categorical way? XOBIS says there is a difference.

Yes, this is quibbling and it shouldn’t have stopped me from looking at TMs. Yes, I still think Concept makes a better base object than Topic, but where do I go from there? To get around this, I’m thinking I should be thinking about all TM topics as concepts. I’ve been told it doesn’t really matter what this base element is in TMs. The important part is that there is a base element. So, in my mind, I’m going to start working with “Concept Maps” and see where it goes.