The Guatemalans believe in some really cool stuff.
Not sure I’m bold enough to bring one of his icons into our house, though. I mean, what if we run out of Coca-Cola and smokes?
The Guatemalans believe in some really cool stuff.
Not sure I’m bold enough to bring one of his icons into our house, though. I mean, what if we run out of Coca-Cola and smokes?
Well, my inaugural fantasy football season is over. Somehow, despite not having a freaking clue of what I was doing (and it being a year I actually have watched the least football in… ages), my team somehow limped into the championship game against Jeremy.
I knew I was screwed. I barely got past Carol in the playoff round; we were tied going into the Monday night game. It boiled down to Peyton Manning (my team) having a great game and T.J. Houshmanzadeh (Carol’s team) merely showing up.
And then I immediately overanalyzed my team and choked. Fearing that the Bears were going to sit all their starters (since their playoff position is decided), I benched Desmond Clark for Alge Crumpler (no net difference in points this weekend) and I benched Bernard Berrian (eight points) and played Lee Evans instead. This would, on the surface, seem ok, but to get Lee Evans, I dropped Travis Henry (another career day and how about them Titans, y’all?) leaving God knows how many points sitting in free agency.
I then focused all of my attention on matchups and injuries. I benched Fast Willie since he was facing the Ravens (good choice) and substituted him with Deuce McAllister (who probably had one of his best games of the season) — so that was a total net gain. Since I had cut Travis Henry (ugh, why?) and Joseph Addai (meh) for the Dolphins defense (more on that in a bit), I started Marion Barber III alongside McAllister. This dude… When he’s on my bench he scores, like, 5 TDs/game. When I play him he runs 6 times for 3 yards.
My wide receivers were a mess. Marty Booker was hurt, so I traded him for Braylon Edwards who subsequently sucked. I didn’t play Laveranues Coles, since he was “questionable” and this worked out fine since he got hurt (I mean for me, not him).
So, I didn’t play the Dolphins’ defense in the end. In my angst, I read several articles by fantasy football pundits (what kind of a job is that?) talking about how overmatched the Bears defense was for the Lions.
Man, they sucked. For two weeks in a row.
So I lost. And I’m not even sure I “beat myself” (to use football losing team jargon). I’m not even sure that my poor choices could overcome that day Steven Jackson had.
Anyway, fantasy football was fun. I came, I saw, I lost to Jeremy.
Better luck next year.
I have been working on Fancy-Pants quite a bit in the last couple of weeks. This is an AJAX layer over Voyager’s WebVoyage — an attempt to de-suck-ify its interface a bit. Why is it called Fancy-Pants? Well, Voyager still has the same underwear, it’s just got a new set of britches.
There are two main problems that it’s trying to solve:
Now, we’re already doing the second one, but it’s not implemented particularly well. While we were solving those problems, we wanted to see what we could do about that god-awful table based display.
I took NCSU’s Endeca layout as the baseline template for what I wanted the results to look like. Right now, Fancy-Pants can only be accessed via this Greasemonkey script [get Greasemonkey here]. Greasemonkey, of course, wouldn’t be a requirement, but we’re using it to inject the initial javascript call since we’re having to work on a live system.
For the title list screen, the javascript is looping through the bib ids on the page (it grabs them from the ‘save record’ checkboxes) and sends them to a Ruby on Rails app that queries Voyager’s Oracle database and builds a new result set. The javascript hides the original page results (display: none) and inserts a div with the new results. If there are multiple 856es or locations, the result has expanding/collapsing divs to show/hide them.
I send the query terms to Yahoo’s spell check API and will return a link to any suggestions it gives. No, this isn’t the ideal, but I’m still in proof-of-concept stage.
Things I still want to do with title list screen are:
I’m currently not doing much with the record view page, but I am adding a direct link to the record. I plan on integrating Umlaut responses here, as well as other context sensitive items – especially those that don’t conform well to OpenURL requests.
If you were able to install the Greasemonkey script and want to try it out, go to GIL’s keyword search and try:
Also try a journal search for “Nature”. Then try whatever floats your boat and let me know how it worked. If you notice that it’s really slow, this is actually because of Voyager. The “Available online” and relevance icons are all rendered dynamically and they just grind the output to a halt. When we go live with this, we’d disable those features in WebVoyage to speed things up.
Fancy-pants is by no means a final product. I view this as a bridge between what we have and an upcoming Solr based catalog interface. The Solr catalog will still need to interface with Voyager, so Fancy-pants would transition to that. Ultimately, I would like this whole process to eventually lead to the Communicat.
I have a very conflicted relationship with our archives department. While their projects still need to get done, their services get very little use (especially when compared to other pending projects) and every time I get near any of their projects, it starts to become “Ross Singer and the Tar Baby”. Everything, EVERY SINGLE THING, archives/special collections has ever created is arcane, dense, and enormously time consuming. It always seems simple and then it somehow always turns into EAD.
About a year ago, I was tasked with developing something to help enable archives publish their recently converted EAD 2002 finding aids to HTML. I knew that XSLT stylesheets existed to do the heavy lifting in this so I thought it wouldn’t be too hard to get this up and running.
But it never works out that way with archives. The stylesheets that did what they liked worked only in Saxon and Saxon only works with Java (well, now with .Net, too — but that still didn’t help at the time). I wasn’t going to take on a language that I only poke at with a long stick on the most ambitious of days for some archives project (no offense, archives, but come on…). My whining caught Jeremy Frumkin‘s attention who pointed me at a project that Terry Reese had done. It was a PHP/MySQL project that took the EAD, called Saxon from the commandline and printed the resulting HTML. It also indexed all these parts of the finding aid and put them in a MySQL database to enable search. I could never get the search part to work very well with our data, so I gave up that part, focusing instead on the Saxon->XSLT->cache to HTML part.
I set up a module in our intranet that let the archivists upload xml files, preview the result with the stylesheet, rollback to an earlier version, etc. No matter what, though, this was a hack. And, most importantly, I never got search working. Also, the detailed description (the dsc) was incredibly difficult to get to display how archives wanted it.
Another thing that nagged at me was, for all this work I (and they) had invested in this, how was this really any better than the HTML finding aids they were migrating from? They put all this work into encoding the EAD and all that we were really doing was displaying a web page that was less flexible in its output than the previous HTML.
This summer, I met with archives to discuss how we were going to enable searching. Their vision seemed pretty simple to implement.
Why do I keep falling for that? How many hours had I already invested in something I thought would be trivial?
The new system was (of course) built in Rails. The plan was to circumvent XSLT altogether so:
The fulltext indexing would be provided by Ferret. I thought I could hammer this out in a couple of weeks. I think dumb things like this a lot.
The infrastructure went up pretty quickly. Uploading, indexing, and displaying the browse lists (up until now, they had to get the web designer to add their newly encoded finding aid to the various pages to link to it) all took a little over a week, maybe. Search took maybe another week. For launch purposes, I wasn’t worried about pagination of search results. There were only around 210 finding aids in the system, so a search for “georgia” (which cast the widest net) didn’t really make a terribly unmanageable results page. That’s the nice thing about working with such a small dataset that’s not heavily used. Inefficiencies don’t matter that much. I’ve since added pagination (took a day or two).
No, like last time, the real burden was displaying the finding aid. My initial plan, parsing the XML and divvying it up into a bunch of Ruby objects, was taking a lot of time. EAD is inordinately difficult to put into logical containers that have easily usable attributes. That’s just not how EAD rolls. I found I was severely delaying launch trying to shoehorn my vision on the finding aid, which archives didn’t really care about, of course. They just wanted searching. So, while I was working out my EAD/Ruby object modeler, I deferred to XSLT to get the system out the door.
Rather than using Saxon this time, I opted for Ruby/XSLT (based on libxml/libxslt) for main part of the document and ruby scripting/templates for the detailed collection list. The former worked pretty well (and fast!) but the latter was turning into a nightmare of endless recursion. When I tried looping through all of the levels (EAD can have 9 levels of recursion, c01-c09, starting at any number — I think — and going to any depth), my vain attempts either showed the horrid performance of REXML (a native Ruby XML parser) or attempts at navigating the recursion that would leave you clutching at the fibers of sanity that remain when you get this far in an EAD document.
Finally I found what I thought was my answer: a nifty little Ruby library called CobraVsMongoose that would transform a REXML document to a Ruby hash (or vice-versa). It was unbelievably fast and made working with this nested structure a WHOLE lot easier. There was some strangeness to overcome (naturally). For instance, if an element’s child nodes include an element that appears more than once, it will nestle the the children in an array. If there are no repeating elements, it will put then child nodes in a Hash, (or the other way around, I can’t remember) so you have to check what the object is and process it differently accordingly. Still, it was fast, easy to manipulate and allowed me to launch the finding aids system.
Everybody was happy.
And then archives actually looked at the detailed description. Anything in italics or bold or in those weird ’emph’ tags wasn’t being displayed. Ok, no problem, I just need to mess with the CobraVsMongoose function… oh wait. Yeah, what I hadn’t really thought about was that Ruby hashes don’t preserve sort order, so there was no way to get the italicized or bolded or whatevered text to display where it was supposed to in the output.
Damn you, tarbaby!
Back to the drawing board. I decided to return to REXML, emboldened now by (what I thought) was a better handle on the dsc structure and some better approaches to the recursion. Every c0n element would get mapped to a Ruby object (Collection, Series, Subseries, Folder, Item, etc.) and nest as children to each other and have partial views that would display them properly.
On my first pass, it was taking 28 seconds for our largest finding aid to display. TWENTY EIGHT SECONDS?! I would like to note, as finding aids go, ours aren’t very large. So, after tweaking a bit more (eliminating checking for children in Item elements, for example), I got it down to 24 seconds. Still not exactly the breathtaking performance I had hoped for.
What was bugging me was how quick CobraVsMongoose was. Somehow, despite also using REXML, it was fast. Really fast. And here my implementation seemed more like TurtleVsSnail. I was all set to turn to Libxml-Ruby (which would require a bunch of refactoring to migrate from REXML) when I found my problem and its solution. This was last night at 11PM.
While poring over the REXML API docs, I noticed that the REXML::Element.each_element method’s argument was called ‘xpath’. Terry had written about how dreadfully slow XPath queries were with REXML and, as a result, I thought I was avoiding them. When I removed the path arg from the each_element call in one of my methods and just iterated through each child element to see if its name matched, it cut the processing time in half! So, while 12 seconds was certainly no thoroughbred, it was definitely the right track. When I eliminated every xpath in the recursion process, I got it down to about 5 seconds. Add a touch of fragment caching and the natural performance boost of a production vs. development site in rails, and I think we’ve got a “good enough for now” solution.
There’s a little more to do with this project. I plan on adding an OpenSearch interface (I have all the plumbing from adding it to the Umlaut), an OAI provider and an SRU interface (when I finally get around to porting that CQL parser). And, yeah, finishing the EAD Object Model.
But right now, archives and I need to spend a little time away from each other.
In the meantime, here’s the development site.
I have been trying out some new technologies, both at work and at home. Now, this is unusual for me. I don’t generally like environmental change in my workspace– I get hung up on it and have a difficult time focusing.
This all started with getting set up with Synergy 2. For a while, my desk has had three computers on it: my main desktop running Ubuntu 64, a headless XP machine that I would remote desktop into, and an older iMac sitting on the corner of my desk. By adding a surplused 17″ lcd monitor to the XP machine and sliding my iMac over, I now have a three window/3 OS monster with a shared keyboard and mouse. Synergy is pretty freaking awesome in that it allows you to move from one screen to the next and cut and paste between machines pretty fluidly. So now my desktop looks like:
iMac (OSX.4) Ubuntu 64 XP
17″ widescreen 21″ LCD 17″ LCD
LCD
keyboard mouse
It hasn’t taken me long to get used to this. I’m doing tasks on each machine that best suit it although I’m having some problems remembering that I can’t drag my applications across windows (something I got pretty used to at Emory).
My next update wasn’t so successful. I tried to (and right now I’m not sure why) update the window manager on my Ubuntu box to use Compiz or Beryl (first one unsuccessfully, then the other). This was just a huge mistake. In the effort to gain a little whiz-bang eye candy (I guess I got drunk with my successes with Synergy), I’ve managed to screw up my window manager so that it doesn’t refresh properly anymore (panes will frequently look blank until I mouse over them).
I also figured I needed to get the IE7 update on my XP box. I have to say, it’s pretty nice, but I have two complaints about it:
I really like the OpenSearch integration, though, and besides having to update our security certs (ugh!), it seems like all of our services work fine with it.
While I was at it, I also upgraded Firefox to 2.0 on my XP machine. Also really slick! The only downside I see to it is that OpenSearch requires the ‘searching’ site to have an extension. I also grabbed Zotero and updated the Umlaut to make it ‘Zotero compliant’.
So now I’m mainly using my XP “window” for web browsing and Last.fm (there is basically no plugin support for Firefox on 64 bit Linux and Last.fm is kind of slick on Windows — plus sound is better). I’ve also moved to XP for Skype when I do Library Geeks because:
I still use Firefox 1.5.x on Ubuntu because I’ve gotta have my Web Developer Extension somewhere.
At home we have a not terribly new desktop (AMD 2400 or something) and two 1.0Ghz iBook G4s. On the desktop, we have our own web browser setups by using different browsers: Selena uses Mozilla and I use Firefox. I’ve updated Firefox to 2.0 but I felt bad that Selena is using Mozilla (of course, she doesn’t really care). I’m trying her out on Flock, since she’s getting all into our blog for Che and Flickr and whatnot. We’ll see how that works. I’ve also got my eye on switching the desktop to Ubuntu. Selena’s not sold on that.
The iBooks are trickier. First of all, they’re pretty slow. I had to give up on Firefox and start using Safari because I couldn’t deal with the performance. The problem is that we run OS 10.3.9, so it’s an older, completely unhip, Safari. This makes me constantly on the lookout for something better. I’ve tried Camino (no), Opera (probably not), Firefox 2.0 (seems better) and now I’m trying Flock (in fact, I’m writing this post in Flock). Flock is extremely sexy-cool (I’ve got Art Rhyno’s Flickr stream across the top and my bookmarks are from del.icio.us), but if I thought Firefox was slow, this will probably kill me.
I’ve also been kicking around the idea of Ubuntu on my iBook 🙂
Blogged with Flock
Growing up, watching “Superfriends”, it was easy to ignore Aquaman. After all, I was probably more into Marvel Comics and wasn’t really into swimming all that much. He seemed a little pathetic in my 7 year old mind; basically everything had to be contrived to accomodate his powers.
Apparently, I wasn’t alone. He appeared an episode of “Robot Chicken” about a group of super heroes (Hulk, Wonder Woman, Batman, Superman, etc.) sharing an apartment, a la “The Real World”. Aquaman was portrayed as an effeminate wimp, pushed around by Superman and the Hulk and ridiculed for his “super” powers.
This morning I was reading an article in the New Yorker about Thomas Paine, and Aquaman made a rather unexpected appearance there:
Thomas Paine is, at best, a lesser Founder. In the comic-book version of history that serves a our national heritage, where the Founding Fathers are like the Hanna-Barbera Super Friends, Paine is Aquaman to Washington’s Superman and Jefferson’s Batman; we never find out how he got his superpowers, and he only shows up when they need someone who can swim.
Somewhat related to that, during a layover in Cincinnati on my way back from Ottawa, I learned that Union Terminal looks suspiciously like the Hall of Justice.
The more I think about it, the more I think RSS feeds from the OPAC are a waste of time and energy.
What is the appeal of this? I mean, really?
I went to RATATAT last night at the EARL. Anyone who has talked to me about music in last several months would know how completely obsessed I have been with them. I’ve turned (or tried to turn) almost everybody near me on to them. I had been anticipating this show since I saw it listed, despite being a Monday night, despite knowing that the EARL meant they weren’t going on until until midnight.
And yet, despite all this fanboy-ness, I can’t believe how much I had wrong about them. First off, I wasn’t pronouncing their name correctly (it’s ‘radda-dat’, not ‘rat-tat-tat’); Evan Mast is, in fact, the less-strung-out-looking one; and that people will crowd a club to see a band that has no lyrics (although they have been getting a bit of airplay here lately).
The thing that took me most by surprise, though, was how wrong I got their music. I have been listening to the first album near constantly for months and ‘Classics’ has joined it since its release — it’s not as if I’m only passingly familiar with their sound. When I first heard them, I thought they sounded like the music from a splashscreen from a Commodore-64 game (then I found the Advantage and realized what game music really sounds like). Later I just thought they sounded like incredibly good hipster soundtrack music — perfect for when Selena and I are sitting on the porch, watching the crackheads walk by, maybe^Wprobably drinking a cocktail (like every we do every evening) — seamlessly shuffling with the likes of Lali Puna and Madlib to set a good sonic backdrop to observe the universe through ironic and cynical lenses.
Yeah, well, that’s not the kind of band they are. RATATAT, friends, is a balls-to-the-wall heavy metal band. This amp goes to eleven. Oh sure, you knew the influence was there: Germany-to-Germany, Lex, Seventeen Years… yes, sure, you could hear the guitars and the inspiration. The photos and logo lent tongue-in-cheek references to the cock-rock culture. Well, live and in person, the ‘references’ and ‘influence’ give way to ‘reality’. Think ‘Helloween‘ without the vocals. Also think of them being awesome. And sort of art-y. Maybe even more rocking.
Yes, this was a metal show – replete with headbanging, faux pyrotechnics (nice touch, I might add) and mod/ironic imagery projected on a screen (well, sheet, really) behind them. Everything was much faster and the guitars much louder and more distorted. “Nostrand”, which exemplified my ‘chilling with a cocktail’ view of them became a driving anthem. “Gettysburg”‘s guitars were cranked up furiously changing the tone to near-thrash. “Lex” was bedlam; I had no idea how much this song just blazes– projected on the screen was a person smashing the windshield of a car (the camera was in the passenger seat) which looped continously on the measure.
And yet it was still most definitely RATATAT. “Wildcat” was still the crowd pleaser (as was “Seventeen Years”) with the projection of the cat head icon whenever the ‘mrowr’ sound went. “Cherry” was still just smooth, wide, crescendo. They played almost the entirety of both albums.
Yeah, they are must-see. And if you don’t have either of their albums, yet, have I told you how much I’m into them?
Skip the opener, the Envelopes, though, man, they suck.
I’ll be leading ‘Ad-hockfest’ at Access 2006. This was organized for the nearly 30 people on the waiting list for Hackfest and we’ll choose from the same list of projects as the regular Hackfest groups. We might even work on the same projects as the ‘real’ Hackfest. I’m not sure how we’ll present the outcome, since I have to fly back to Atlanta Friday night, but I’m sure I can convince Dan to work it into his schtick.
This is pretty cool, and shows the ‘spontaneity’ (you know, a month off — these are libraries — baby steps, baby steps) of Access and Hackfest.
Library Geeks #4 is out. I’m back (instead of being the ‘Poltergeek’ of episode 3), and Dan set this one up in kind of a neat way. He certainly leads and guides the dialogue, but it’s much more of a roundtable and informal discussion. No doubt this is largely due to the fact we’re all pretty good friends. Still, I learned a lot about Ed that I didn’t know — pretty amazing since we hang out every day and work on so much together.
Bobby McFerrin, eat your heart out.