Slash Boxes
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

mdxi (4658)

  (email not shown publicly)

Journal of mdxi (4658)

Monday September 12, 2005
10:31 PM

Update During Downtime

* Have new job

* Have new place of residence

* Carrying one's entire set of belongings up 2 flights of stairs induces copious amounts of pain

* Bellsouth screwed up phone provisioning, taking my servers down 2 weeks early

* ...but I have DSL at home again as of this afternoon

* ...and I have an arrangement worked out with a local colo facility

* Getting 2 new (used) servers from a coworker tomorrow (supposedly)

* Bought a new tv tonight (42" plasma)

* IKEA doesn't actually stock everything in their own catalog. Try to buy one of the less-cheap sofas and you'll probably fail

* More later

Saturday August 06, 2005
02:50 PM

LCCO and Black

Lorcan Dempsey recently wrote about a DDS browser which OCLC has implemented, and it reminded me that I tried to do basically the same thing a couple of years ago with the Library of Congress Classification Outline. His very literally drills down, starting with the top 100-level DDS categories and placing the next level under that as the user selects which segment to expand. My design, which never got past the static mockup stage, started with the user picking a top-level LCCO category, which it then exploded in vertical stacks progressing to the right.

This worked pretty nicely with A (General Works), but as soon as I started trying to mock up B (Philosophy, Psychology, Religion), the complexity spiralled and my abortive effort ended up looking like a microphotograph of a CPU, there were so many shadings and colors arrayed around each other.

Which brings me back to an old bitch: there are no good classification systems. The LCCO seems nice at first, but the intricacies of generating call letters for it are nigh-impenetrable (I know the Letter Digits Dot Digits Cutter OptionalYear part, but what's the other thing that looks like a secondary Cutter, which sometimes follows the year? And how to I generate Cutters anyway? And are they guaranteed unique or are collisions allowed? Why isn't this information public knowledge?). On top of this, the LCCO was last overhauled beginning around 1900 and finishing around 1960, resulting in huge swathes of modern works and fields of endeavor being shoved into sub-decimal categorization spaces, while American History gets two whole top-level letters. I'm sure this was fabulous for the actual Library of Congress, at the turn of the last century, but it's not so good for dealing with the modern world where we expect things to be designed for maximal flexibility and expansibility.

On the other hand we have the DDC (and UDC, which is DDC but not). The DDC, as most people are completely unaware, is owned by a corporation who charges license fees to use it and has a history of suing people who aren't aware of this. It should therefore be viewed as unsuitable for use in public/volunteer projects (like the one I'll get to in a second).

I have recently become aware of some fringe categorization schemes, such as Bliss, but I don't see them as any more of a win than anything else.

At this point you may think I'm a big fan of "folksonomies" and "tags" and that sort of thing, but I'm not. Very few people have the mindset which allows for things like data integrity, logical categorization, and stripping of spurious/redundant data. Flexibility and expansibility are always good but mob rule is never the answer, and that's all the folksonomy movement is. I'm down on pure democracy for the same reason the founders of the US government were: most people are so lazy can't even be trusted to make informed decisions which affect themselves.

I don't have an answer, only complaints. Moving on...

Much has been made (and made and made and made) of the recent interactions between Google and libraries. I'm very much of the opinion that libraries need to hurry the fuck up and actually get their collections online, as opposed to just data about their collections (yes, yes, whatever you're thinking, I know, but seriously people, wasn't the Internet supposed to be something a little better than porn and livejournal?), but I don't think Google is the right way to go about it.

For years I've been very slowly working on planning (and planning and planning) a framework for publishing text collections, but let's not talk about that now; let's talk about the idea which followed that one, which I call Black (all my project names are colors). In a nutshell: it's a combination of RSS and distributed source control.

Imagine that sites have created electronic collections -- not as web pages, but as collection data and content data (preferably with the text bits in small-ish chunks and transformable, diplay device neutral markup) in databases. Now imagine that you can flip a permissions bit on any document in the collection and your front-end collection server will inform an upstream meta-collection (Black) server of this. Now imagine networks of these servers, throwing collections data back and forth between each other. Now imagine that this network of "metaservers" is searchable, and that feeds of newly available documents are being served to other sites with their own collections engines in place.

Site B's admins or users see something interesting on the new docs feed (or turn it up in a search) and send a subscription request to their upstream Black server. A subscription to that document is set up, and a BitTorrent style copy operation begins, fetching the doc from Site A as well as any other sites which also have copies.

Three weeks later Site A makes changes to the doc. When it is republished on their internal system, messages are passed to the Black servers about the new version, and as messages filter through the network subscriber sites begin picking up the deltas (the changed and/or new and/or deleted bits).

Hey look, it's a worldwide, self-replicating, self-updating, fault-tolerant, on-demand library!

Things like allowing subscriber sites to keep full version histories or only newest versions, yadda yadda yadda are all fairly simple and eminently do-able. The only real problems are:

  1. Writing the Black server software
  2. Codifying the messaging format (protocols)
  3. Ensuring that database schema are compatible with each other (or that compatibility layers are available)

(Note that here I am actually thinking of volunteers putting their own collections online, either completely on their own or in small collectives which would probably be focused around certain topics. The whole reason I started thinking about this stuff is because I want to share my old textbook, cookbook, and asian history collections.)

Some people probably think that things like "intellectual property rights" are another issue, but I honestly don't care. My concern is maintaining and communicating human knowledge and our shared body of cultural works, not making sure a multinational corporation is properly compensated for the work of a long-dead author. I am concerned with saving (and making avilable) the information in all the mouldering, brittle, and disintegrating books around the world, not in making it easier to pirate Harry Potter book 7. A trust metric of some sort might be a good tool to assist human Black server admins, but I really believe that policing the collections is a policy issue and not a technological one.

To all the real librarians who just sat through this, I'd like to apologize if my ignorance and hubris has insulted you.

Sunday July 31, 2005
12:50 PM

New Job

Thursday I started work at my new job. N was kind enough to drive me (we're planning to swap off the driving as much as possible while I'm crashing with her and J) and upon arrival I was dog-n-ponied around for introductions, then I started a clean install on my workstation. All the production stuff is Debian machines. Two of the guys I work directly with bring in their Powerbooks and work using them; the third prefers to have Windows on his workstation. I put Debian on mine, as I'm trying to maintain a measure of separation between me and work.

As the install was wrapping up (slooooow network at work), I was surprised by being taken out to lunch. We went to Malaya, a small restaurant with a menu which is half Malaysian and half Americanized Chinese (knowing nothing about Malaysian cuisine, I can't say how Americanized it is, but everything looked pretty homestyle).

I had a savory chicken soup whose name I can't remember -- it was basically shreds of chicken and lots of onion in a tangy-sweet broth which was based on soy sauce. My entree was described on the menu simply as "pot roast on rice noodles", and that's basically what it was. The beef was roughly cubed, with a good amount of fat still attached to some pieces (that's a good thing; think pho) and had been simmered in some sauce which had a really awesome procession of flavors: salty/spicy followed by tangy followed by sweet. They served it on your choice of egg noodles or rice noodles, but rice noodles are clearly the proper choice. On the side was a small mound of what looked like lightly stir-fried spinach, but the leaves were a bit larger than the fresh spinach I'm used to seeing. And then two little breaded and fried things, which I determined from the appetizers menu to be fried chicken dumplings. Take minced boiled chicken, blend with just enough binder (mostly flour, I assume) to let you roll it into thumb-sized cylinders, bread in a spicy coating, and deep fry. Awesome stuff all around.

On the way back from lunch I was given a tour of our server farm, which is hosted at Internap. Pretty standard stuff, but impressive for the amount of redundancy and backup capacity built into the design.

Once back at work proper I was handed my first actual assignment: add a slideshow viewer to the content management system. This is a really really simple thing, but it was (I think) chosen as a crash-course in seeing how things hook up to each other as well as the people side of the process. I got a list of requirements from the person who acts as the liason between us and the customers, then spent the rest of the afternoon asking my team what I should do. The problem wasn't that I couldn't figure out how to do it, but rather that I could see many ways to do it, and was trying to figure out the best, most House Style way to get it done.

This bit ended up being particularly interesting, as I've never really worked with a group of competent people before. Every job I've had in the past has basically had my acting alone, though I was nominally part of a group of people assigned to a task. I would be given something to do, and I would go and do it, then report back when done. Here, the dynamic seems much more open and everything seems to be discussed back and forth.

The afternoon was wrapped up with a group review of a new perl module that the lead developer was interested in for purposes of the upcoming overhaul of one of out projects. Everyone adjourned to the conference room and he toured through the POD and gave examples of how he envisioned it being used in-house, then asked for comments and questions.

Basically, it's the same give and take and flow and cross-pollination of ideas that I've become accustomed to via distributed development online, but happening in the real world. It's the damnedest thing.


Friday morning I drove myself, since I'd be heading back to Eatonton after work. I got to work fairly early and spent a while perusing our wiki, reading news, and doing some tweaks on my workstation. Then I sketched out my initial plan, UI thoughts, and db schema for the slideshow tool (focusing mostly on the editing portion; there's precious little to say about the actual output aside from "and then it dumps a stack of web pages").

I sat in with Vince and Linda's lunch, which was half work and half hanging-out. Then, at L's suggestion, I put my design work on the slideshow on the wiki so that everyone could look it over.

After doing that, I headed up to what the elevator provocatively describes as the "Roof Garden". It's not very garden-y, but it is pretty cool. The building I work in is one of a group of disused industrial buildings, across from the south side of Georgia Tech campus, which have been converted into ubertrendy office space. Whoever designed the conversion did a neat job of it though, leaving the massively thick exterior brick walls and huge (like 12×18 inch huge) timbers exposed throughout, then putting in modern hardwood or carpeted floors and lighting. The overall effect is really neat, and is probably making them huge sums of money. Anyhow, the specific building I work in was a candy factory, built at the turn of the (20th) century. Our suite occupies roughly a third of the top (4th) floor. The elevator runs to the roof, however, where a large deck has been constructed. The views aren't pure art or anything, but it's a surprisingly quiet and breezy place. There's a 5-track railroad only meters from the south end of the building, and more low-rise aging industrial waste beyond that. North is gatech. East is the high-rise city center of Atlanta proper, about a mile away. I'll take pictures this week.

Later on, I had a discussion with Vince about the merits of various software engineering support tools (CVS, svn, svk, wikis, Trac, RT, and so on). He's just starting the task of pulling the development process out of the manually-versioned morass it's currently in, and into something more sane and modern, but he's been strapped with just keeping things running during their period of chronic understaffing, so he was receptive to the information I could provide.

Then Linda wanted to talk to me about Corporate stuff. Basically gave me the hello-orientation-welcome speech that she was too busy to do on Thursday. It was refreshingly bullshit-free, and it was neat to learn that it's actual written company policy to hire exceptional people and pay them what they're worth instead of hiring flocks of marginal hacks and paying them as little as possible.

I am cautiously optimistic.

Sunday July 24, 2005
03:45 PM

Olive b8, Shopping

Gave up finishing the manual, made some last tweaks, and kicked b8 out the door. It was a good solid update as-is, anyway. This at least lets me forget about it for a little while, freeing cycles for other things.

Like moving and working. And buying new things. I cannot stop shopping (not buying, just shopping). Don't even know exactly what the house'll be needing yet, but I can't stop looking for it. Couches, floor coverings, electronics.

Especially electronics. We don't wanna take the WEGA with us. It's too gigantic and heavy, and we both really want a 16:9 model anyway. We definitely want another WEGA, but Sony now makes so many different sorts that I've no clear idea what to get. My heart wants the 42" plasma, but they have a new 55" DLP model that uses 3 LCD chips instead of one and a colorwheel and costs 2/3 what the 42" plasma does. I guess the only solution is to go look at them in person and see which one is the most awesome.

Tuesday July 19, 2005
09:40 PM

My Life Just Got Interesting

Well, it took nearly two months, but barring paperwork-related catastrophe, the job I first fired off an inquiry about on May 27 is mine. Got the offer this morning at about 1030 and was pretty happy about it. Called K and told her; I think "ecstatic" is too mild a word for her reaction.

Then, when she comes home for lunch she discovers that one of the major roadblocks to her getting financial aid for school has been taken care of. This makes her even happier, as she's been getting a major runaround for weeks.

A couple of Sundays ago K went to Athens to study and found a house for rent right next to where we used to live in family housing. This caused us both to start hoping really hard that I'd get the job so we could score that house while the summer housing glut was on. This evening we were back in the AHN to deposit her paycheck and scope out the house situation, now that fat sacks of cash (moneyhats!) were on the horizon. The house she'd notices was off the market, and she wa visibly depressed about it, but lo! only two blocks over was a MUCH BETTER house with a For Rent sign in front of it.

We stopped in the street and called the number on the sign. A nice lady answered and was surprised by my inquiry about the house; the sign had gone up only a couple of hours earlier. It's frighteningly perfect: 3br, 2ba, LR, usable but unfinished basement, attic storage. It's literally a thousand feet from campus in one direction and a thousand feet from Five Points in the other (that's the Athens Five Points, not either of the Atlanta Five Pointses). The neighborhood is beautiful, and the price is probably a little high but it's lower than what we were expecting and WAY lower than what Philly would have been (especially as a percentage of salary). I'm going to see it at 9AM tomorrow.

The only question is: is this all karmic refunds on the past 2-3 years of horror, or is it a layaway against somethiing horrible in the future?

Fuck it. Rock and roll, baby \m..m/

Monday July 18, 2005
02:00 PM

Cranberry, Weekend

Friday night I finally overcame a week's inertia and started hacking on cranberry, my console mode mp3 player. I got a harness around Audio::Play::MPG123 (which works just fine with mpg321 (there is a Audio::Play::MPG321, but it has problems, somewhere -- its poll() method takes a significant fraction of a second to execute, which is wholly unacceptible for something in a core event loop)) and then hooked it up to my Acme::Curses::Marquee, and then added a tiny bit of control logic, et viola a simple randomizing mp3 player. This is just the barest beginning of what I'd eventually like it to be however. I'll write more about that when I have a more concrete idea on how things should work.

Did absolutely nothing else over the weekend except watch a couple more bad movies. We (and by "we" I mean "K") tried watching the recent King Arthur movie, but it was so bad that we actually gave up after about 10 minutes (which is so say, after the third line of dialogue).

We followed up with 1984's Silent Night, Deadly Night, which was a far superior movie. Full of nonsensical nudity, nonsensical baroque violence (kudos on the deer head idea), it is a shining example of the mid-1980s slashflick form. Two things really elevate it above the norm, though. First, the Mother Superior nun, who has the least sympathy of any human being ever: the lead character is traumatized by seeing his parents murdered by a petty thief in a Santa suit, so the nun beats him into sitting on another Santa's lap every year, causing him to become more and more violent; later, the children in her care witness a policeman shoot a blind priest dressed as Santa at close range (he nearly falls on top of them), and she simply hustles them back inside and makes them sing "Deck the Halls". Second, everytime the lead character is about to off someone he yells either "PUNISHMENT!", or my personal favorite, "NAUGHTY!". This is sheer genius.

Sunday July 10, 2005
02:56 PM

Trac, Satisfaction, Bislama

Started using Edgewall's Trac yesterday. It's a really nice tool. The only complaint I have about it is that it's designed to handle single projects, and I really want to be able to manage all my projects at once, and see TODOs and milestones and tickets from all of them. Still, until I get around to writing that, it works very nicely. It's also about 4 times faster than Kwiki, with both of them running in pure, unaccelerated CGI mode.

What happened to kwiki between 0.18 and 0.3? My uneducated guess is that there exists a point of diminishing returns for "pure" software engineering and OO subclassing, and Kwiki crossed way over it during its redesign.

We watched a movie Friday night that made last weekend's batch seem like masterworks: Satisfaction. If you're unlucky, you may actually remember this 1988 stinkbomb which was meant to rocket Justine Bateman to superstardom, but didn't quite manage to do so. This Aaron Spelling-produced crapburger is mostly notable for being the first credited appearance of Julia Roberts (as "the trampy one"), and being the only movie that Britta Phillips (better known as the voice of Jem (as in Jem! and the Holograms), now in an actual band called LUNA) has ever appeared in.

Satisfaction doesn't have a plot. It has a taped together string of set pieces lifted from after-school specials, with no real segues between. Now they're facing the prospect of being away from home for the first time. Now they're having creative differences. Now Julia Roberts is being a slut. Now they're experiencing the harsh realities of not fitting in with the posh kids. Now Jem is overdosing. Now Justine Bateman's teenage heart is being broken as she tries to cope with adult relationships. Oh yeah, adult relationships. This movie also features Liam Neeson in a performance I'm sure he's not happy about, as a club owner/beach bum/former musician who falls in "love" with Justine Bateman and is "inspired" by her to start "writing" "music" again until his ex, Debbie Harry, shows up and ruins the thoroughly creepy and unappealing summer "fantasy".

The douche commercial lookalike montage of Neeson and Bateman riding horses and bicycles on the beach is not to be missed.

Finally, last night, one of the #perl guys announced that he'd spent the day localizing Firefox into Bislama, which is a creole/pidgin/trade language from Vanatu and surrounding islands. Or, in Bislama:

Pidgin toktok blong Saot Pacific

Several humorous real and faked examples of Bislama were given, with most people focusing on "blong" (a corruption of "belong" and the all-purpose possessive modifier/"containing" preposition/"type of" adjective pointer) and "wittem" (a dialectish corruption of "with"). I tried my hand at a blinkenlights grade pastiche of the language, but ended up closer to home than I intended:

<me> me blong schlong fapfap wittem piccies blong headred plumpytitties <bislama_guy> FYI, breasts actually are called 'titi' in Bislama. A bra is 'basket blong titi'...

Bislama: 1, Me: 0

Wednesday July 06, 2005
10:57 PM

Bard's Tale

The PS2 version, and not the C=64 or Apple ][ version, just for clarity.

Waltzed through it in about 12 hours thanks to turning on the invincibility cheat and the 100X damage cheat (not a typo) and just blasting my way through with the balletics of dual-wield (broadsword in one hand, dirk in the other).

It's an enjoyable game, is quite funny (K laughed out loud quite a bit), and the treble endings are a neat bit, though they're all WAY too short. How can you not like a game with dance-battling zombies and undead livestock? The humor is split between beating-you-in-the-head unsubtlety and never-explained-wry-touches (I didn't see the logic of undead sheep casting sleep spells until near the end of the game). Also, having a semitransparent undead puppy is the best thing ever.

The biggest problem is that despite being a light, Diablo-style, comedy-oriented, action RPG, Bard's Tale suffers badly from FF6 syndrome (AKA FF Plot Death). For the uninitated, this is where a game has a very enjoyable and engrossing storyline until halfway through the game, where Some Bad Event transpires and suddenly it's just one dungeon crawl after another, with tiny bits of plot thrown in to keep you from breaking things. It specifically suffers from FF6 syndrome in that there actually is a WOR type scenario, which closes off lots of things you may have been saving up for or wanting to come back to, with no warning.

There are some unlockable extras, but they're rather poorly implemented (the art galleries, for instance, in addition to not being zoom/pannable, are uncontrollable slideshows).

Final nitpick: it claims to be a naughty, bawdy game, and has the M rating to match, but there's nothing in here you wouldn't see or hear with far more frequency in a PG-13 movie. Since they rated themselves M, they should have gone all out and just streamlined actual cussing and nudity into the game as God of War did (have I mentioned how much fun God of War was?)

It's definitely fun and satisfying as a rental. I don't think I'd want to buy it though.

Sunday July 03, 2005
04:45 PM


I've been very busy while accomplishing very little. The job thinger is still in limbo, first and foremost. Hmmmm. Moving on.

A week ago, on a whim, I thought I'd see if I could manage to make a ASCII-art scrolling track/artist/album type display for the mp3 player I plan to write. It started well and went very quickly, but then I got bogged down in the fiddly bits of making the display animate properly, and ended up staring at it for 4 days without doing anything worthwhile. But during that time I did realize some problems with my initial approach, which made things go rather swimmingly when I sat down on Friday to make it go. Go it did, so yesterday I cleaned it up and isolated the logic into a module, which was released on the CPAN as Acme::Curses::Marquee. With that out of the way, and use of mpg321's remote mode, implementation of a non-sucky console mode mp3 player should be nearly trivial once I figure out how it should behave.

Olive's manual is nearly complete. Once it is, I want to try to hunt down the first-list-entry-link bug and fix it, then release b8.

Moving on...Literally years ago I wrote a little story in the mode of a childrens' picturebook, but the project fell by the wayside because I can't draw at all and I didn't know any people who could (much less would) do the illustrations for me. A few months ago a friend volunteered to help out, but her life has rather taken off on its own, so she hasn't had time, and I never bothered her about it. This week, taking a gamble on a somewhat renewed acquaintance, I asked someone else if they'd be willing to give it a shot. She was agreeable, but had some other things to finish up before she could get started. I was overjoyed; after about 5 years of languishing, what's another few months?

When I told another friend about this, she got all excited and asked if she could be in on the project as well. It turns out that she's been hiding her art-light under a bushel for quite a while and wanted a chance to get back into things. Long story short, now I have two illustrators and may actually do the original long version of the project, instead of just the one story. So awesome.

Next up: movies. In a nutshell, don't watch any of these unless you wish to induce vomiting -- Prom Night II, Hot Water (AKA Junior), or Rape Squad. At least Hot Water features the sizable naked breasts of Suzanne DeLaurentiis, who would go on to produce Rocky V and Mannequin 2.

U-541 is predictable. So predictable that it's nearly a pastiche of submarine movies, but it's really quite good if you watch it right after Rape Squad.

Tougher Than Leather is laughably bad; if only the whole movie had been Jam-master Jay foolin' with the Beastie Boys and Run pretending not to like the receptionist chick. Rick Rubin should be killed for his role in the film as well as his roles in producing the film. Dave Mustaine sucks.

No Retreat, No Surrender is the best movie I've ever seen where Jean-Claude Van Damme plays a Russian karate champ who is part of a faceless corporation's evil ploy to win amateur karate titles on the west coast of the US, but is foiled by a teenager in too-tight jeans who is trained by the ghost of Bruce Lee.

That is all for today.

Monday June 20, 2005
01:29 AM


Olive now has the capability to import lists of feeds in OPML format. Here's the first run:

mdxi@fornax:~/code/olive/trunk$ ./olive ~/MySubscriptions.opml
Olive starting up.
Loading modules.
Initializing system.
Final stage setup.
Beginning OPML import.
71 of 72 feeds imported
See ~/.olive/errors.log for more information
mdxi@fornax:~/code/olive/trunk$ cat ~/.olive/errors.log
-- Starting up at 2005-05-20T02:06:06 --
You're already subscribed to as 'Diary'

It's quite simple: start Olive with an argument, and that argument is taken to be the name of an OPML file to be imported. A couple of basic sanity checks are done for each feed found (nested outline files are understood, but the 'container' outlines are discarded) and if everything looks good, the feed is added to the feeds hash. When its done, Olive terminates.

The result of the above import (me folding rjbs's NNW subscriptions into my testing subscriptions, yielded the following status line:

[S: 571/981] [U/N: 888/888]

So now we know that Olive handles larger amounts of data okay, and with the expected minimal increase in memory footprint (18M for ~80 feeds and 981 stories versus 17.5M for ~10 feeds and ~100 stories).

It still needs some cleaning up -- it should definitely ask the user for a new nickname when there is a collision instead of just throwing the feed out and writing to the error log as it does now -- but for right now I can consider this done and move on to the last few things I want to add before moving into a pure cleanup and documentation phase for a stable release.