June 2004 Blog Posts

Spider-Man 2

Just got back from seeing Spider-Man 2.

Loved it.

Before I get too carried away, the one-sentence plot: Doctor Otto Octavius (Alfred Molina), a brilliant physicist, goes mad in an attempt to create a self-sustaining fusion reaction and Spider-Man has to stop him.

Okay, so that's really distilled down, but I don't want to give too much away. Just trust me - it was great.

Really, I couldn't have asked for much more. We get the same great rendering of the comic book on film that we saw in the first one, but so much more. We get [another] great villain. We get the love story between Peter (Tobey Maguire) and Mary Jane (Kirsten Dunst). We get all the action we paid our money to see, the [really cool] special effects we crave, and we still get the attention to the characters that makes us actually care what happens.

The movie involves you enough that we had people in the theater clapping and cheering for the heroic parts. At the end of the movie, you just want more.

And, of course, there will be more. They left it totally open for the sequel, which I now can't wait for. It reminds me of when I saw the first one and couldn't wait to see this. It's been worth the wait. I'm going to have to go home and watch the first one again now.

(Oh, and for the astute viewer, you'll notice all of the little Sam Raimi-isms you've come to know and love in Sam's films. You just can't beat that.)

posted @ Wednesday, June 30, 2004 2:57 PM | Feedback (1) | Filed Under [ Media ]

Painting The Roses Red

In an effort to liven the place up and get a little color in the house, Jenn and I decided to paint the downstairs half-bathroom red.

On Sunday we bought the primer, bought the paint, got rollers and stir sticks and all the stuff needed to get it underway. Last night we put down the drop cloth, got everything out, and Jenn poured the primer into the pan. It was time to begin.

Jenn worked on chipping in the details, getting close to (but not touching) the baseboards, behind the sink, etc. I got the roller and covered the big stuff. Halfway through, I'm noticing that the primer seemed a little thin and wasn't covering these stupid wall decal things that the previous homeowner had put up. I figured it was just going to take a little extra effort, but no biggie.

I got to the last wall and it was time to refill the roller pan for the second time. It looked pretty good, but was really uneven. That's why you buy primer, though, right? So you can smooth it all out and get a nice even topcoat. I told Jenn to pour some more into the roller pan and she told me to do it myself. Fair enough.

I got down from the ladder, grabbed the screwdriver and the pour spout, and then grabbed the primer.

It seemed a little heavy to me, but I sort of figured it wasn't covering very well, so maybe we were spreading it on a little thin. Popped the top, and...

"Hey, Jenn... I'm looking at this primer..."

"Yeah?"

"How come we haven't used any?"

"Sure we have."

"Um, no, the primer can is entirely full."

"What?"

"This can - see - says 'Interior Primer Sealer.' It's totally full. This other can... yeah, see, it says 'Interior Eggshell.' It's half gone. We're priming with our paint, honey."

"No, no," said Jenn. "That can says 'tinting base.' That's the primer."

"Jenn, they both say 'tinting base.' That means it's white and they can add tint to it. The key here is that this one says 'primer.'"

"Oh."

So there went like two hours' worth of work and half a gallon of Ralph Lauren red paint. We started over with the primer and, lo and behold, it created a much more uniform look and actually covered the stupid decals a little better. We'll still need a couple three coats on there, but it's much better looking now.

We didn't actually complete a full single coat on that bathroom. After all of that, I got all the roller work done, but Jenn didn't finish the cutting in on the detail. I'll have to finish that tonight while she's at a meeting.

I could've killed her... but I have to laugh. I mean, the two of us, jammed into a tiny half-bathroom with ladders and everything, totally in each other's way, and two of the three hours we spent in there were basically for nothing. We could never go on The Amazing Race, we'd kill each other the first day.

pInvoke.net

I'm sure I'm the last person even finding this bandwagon to jump on, but this has to be the coolest thing since cool things: pInvoke.net and its associated VS.NET plugin.

Because there's no reason to learn C++ if you don't have to.

Meeting Attention Span

I just got sucked in to a four-hour-long meeting tomorrow.

I'm not a big meeting person. I have about a 30 minute (tops) attention span at meetings, regardless of my level of involvement in them, so after about half an hour I'm ready to check out - I've lost all interest in whatever topic it is and I'll pretty much say or do whatever it takes to get out of the meeting.

On top of that, I'm a firm believer that good results are rarely achieved by meetings. Sure, there are a few good meetings that happen, but by-and-large, going to a meeting is like convening a congressional hearing - it takes forever to hear all the sides to every story, and then some arbitrary decision is made by committee that I really don't care about.

I just don't do well with meetings.

So I'm not too thrilled about being called into a four-hour-long meeting. I think that's probably why I'm not in management and my career could potentially be considered "limited" - I want to focus on doing, not planning to plan the plan.

It really doesn't help that the meeting is about the next phase of this project I just got off of that burned me out 110% on web development of any nature. I was starting to get my groove back, and I even put a couple of cool things (what I think are cool) out here for folks to download and use... I was starting to feel that desire to create cool stuff again.

There goes that. And I was just starting to enjoy myself.

I guess the best I can hope for now is to die in my sleep. Or at least not have unreasonable deadlines on the stuff I have to get done (which is, I think, the aim of the ridiculous four-hour meeting).

The Roof Is On Fire

Jenn and I had the housewarming on Saturday. Started that up about 4:00p (we figured a nice afternoon/evening barbecue, get together hang out, wrap it up around 8 or so...) and closed the place down at a little after midnight when the last guests of the evening - Jenn's parents[i] took off.

We had about 30 people show up, and after tallying up who invited who, it turned out there were slightly more of Jenn's friends than mine. Hmmm. Interesting, considering I put the invite out to a [i]lot
of my friends.

Of the folks invited, three who RSVP'd that they'd be there didn't show and one of the "maybe" responses showed (actually, two, but the second one didn't show up until the next day because he got the date wrong).

What I really found interesting was that only one of the guys from my work showed up. That was a little disappointing. Considering I spend the majority of my waking hours hanging out with these guys, I would have hoped more would show. That's okay; it sort of indicates why Jenn and I generally don't have parties.

The folks who did show, though, were awesome, and it was great to see each and every one of them. To the people who brought gifts, thank you very much. We already spent all but $0.68 of the Home Depot gift cards we got, and I'm drinking a very tasty cup of coffee this morning.

All in all, it was a blast. We barbecued (and still have more hamburgers and hot dogs than we know what to do with), we talked, we spilled drinks all over my hardwood floors (hehehe... at least it was the hardwoods and not the carpets, right?), we got a little loud and we generally had a great time.

Interesting social note: It was a little like a high school dance - all of my friends on one side of the house and all of Jenn's friends on the other. I think the next party - if there is one - will probably be just one of those two groups. It's hard to go back and forth between the two, since I feel a little like a poor host when I do: not quite paying attention to anyone there because I'm too busy floating around.

Good times.

.NET Command Prompt Here... and Everywhere Else!

NOTE: Something you may be interested in is the Command Prompt Here Generator.

I got a comment on my Solvent entry about how a VS.NET command prompt would be a handy thing to have on the right-click menu.

I guess I assumed everyone developing had already fixed their default command prompt so it's ALWAYS a VS.NET command prompt. I find I have little use for a command prompt that doensn't have all of the VS.NET environment stuff set up on it.

For those who haven't, and figured it'd be nice, here's the registry hack that will automatically run the vsvars32.bat file when you get a command prompt. Note that there is a similar article out there advocating the use of the "/k" option to run the file. I don't use that; instead, I use the "AutoRun" registry key so regardless of how you access the command prompt - even if you do a Start -> Run and type "cmd" and click OK - you'll always get a VS.NET command prompt. (It'll even fix it so if you have the Command Prompt Here power toy installed, that command prompt is a VS.NET command prompt, too.)

It looks like this:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"AutoRun"="\"%VS71COMNTOOLS%vsvars32.bat\""


Or you can download a text file with that already set. Rename it to have a ".reg" extension, then merge it with your registry.

Download vsnetcmd.reg (right-click, "Save As...")

Separation of Church and State

The more I work in tech, and the more I write in this blog, I'm finding that I write more about work/tech stuff and less about what I've been up to. The thing is, what I'm usually up to is tech stuff.

I'm not sure how my readers feel about this (or even if I have any readers other than the Google search bots) because you gang out there don't comment. Not that I'm soliciting comments for comments' sake, mind you, I'm just sort of going by intuition here.

I'm pondering the idea of splitting out my tech-related stuff into a fully separate blog. That would allow the folks coming for the tech to see what they want and the folks trying to keep up with me personally to see what they want, ne'er the twain shall meet.

Again, though, the problem is that what I'm usually up to is tech, which means the people who want to know what I'm doing should probably just assume, should I split the two, that I'm simply busy with work things that you really wouldn't care about.

Any opinions on that?

I'm also thinking of creating a more static "downloads" section for the little programs I'm throwing up here. Not that I think I'm going to have some massive load of software to download, but I figure it might make it easier for the folks coming for the downloads to have a nice, central spot that has the latest info in a less bloggy format.

Questions? Comments?

Solvent - Power Toys for Visual Studio .NET

Solvent is a set of simple but effective tools for Visual Studio .NET 2003 packaged as an add-in. Why call it Solvent? All the tools work in the Solution Explorer.

Bad science puns aside, here's a list of what Solvent provides:
  • Recursive Expand/Contract: Ever notice when you click the +/- icon next to a folder (or double click on a Solution/Project file), it collapses that particular node in the Solution Explorer... but not any of the sub-nodes? If you have a really large project with a deep hierarchy, wouldn't it be nice to be able to recursively close all of the items beneath a current node so when you expand it again it doesn't re-expand everything below it? Now you can.
  • Open All SubItems: Easily open all of the subitems within a containing object (folder or project).
  • Open Containing Folder In Windows Explorer: Open the folder containing a document or project in Windows Explorer (if you select a folder, it opens that folder, not it's containing folder).
  • Command Prompt Here: Open a command prompt at an object's containing folder (if you select a folder, it opens the command prompt to that folder).


Solvent adds itself to the Tools menu and to the context menu for items in the Solution Explorer.

Tools Menu:
Solvent Tools Menu

Context Menu (On a Project):
Solvent [Project] Context Menu

It's free, so come and get it!

Download Solvent 1.1.1 (Setup - MSI)
Download Solvent 1.1.1 (Source - ZIP)

Installation Note: Be sure to shut down Visual Studio BEFORE you install! If you don't, you may see the UI elements of the add-in disappear. If you install the add-in and find that the UI has disappeared (and this goes for ANY add-in), go to Start -> Run and enter:
devenv /setup
That will reset your menus and force add-ins to rebuild. You may lose any customizations you make to the standard menu bars, though (like adding/removing buttons on bars). I'll add a check for VS.NET on install for the next release.

NOTE: Gaston Milano has a similar product for VS 2005 called CoolCommands. As Solvent does not support VS 2005, you may be interested in checking that out.

Version History:
1.0.0: First public release.
1.1.1: Updated "Command Prompt Here" to use "cd /d [path]" rather than just "cd [path]" to allow for opening command prompt to drives other than the one VS.NET is installed on. Also released source for download.

SPS 2003 Search Test 1.1.0 Released

I just completed a new version of the SPS Search Test and put it out there for download. It now supports syntax highlighting for your SQL queries. Go get it!

Job Skills Everyone Should Have

I was talking to Greg yesterday about a discussion he was having with Chris about job skills every employee should have.

Okay, so I don't remember exactly which ones they came up with, but I know what my thoughts are, so here's a list of skills I think everyone should have when it comes to the workplace:

Disagree and Commit (or, "You don't have to like it, you just have to do it"): You will very rarely be on a project involving more than one person and come to consensus on how the project will go. There will be times when the project leaders ask for your opinion, you provide it, and you're overruled. Once the decision is made on a direction to go, once all parties have been heard and it's been decided, you don't have to like the decision, you just have to follow it. Fighting it every step of the way and continuing to bring decisions back to the table when they've already been made is entirely counterproductive. (My personal corollary to this one is that I retain the right to complain about it all I want, but I'll still go with the flow. Maybe that's still a tiny bit counterproductive, but it's the only way I'll be okay with doing something I disagree with.)

Commitment Follow-through: If you say you're going to do something, do it. Don't tell people in the meeting that you're on top of something when you're not. If you aren't going to be able to meet the commitment you made, at least notify people early on so a contingency plan can be arrived at. If people are counting on you to get stuff done and you've committed to it, do your best to get it done.

Ownership and Personal Pride: When you're working on a project, give it your all. Take ownership of the thing (yeah, "ownership" is one of those buzzwords) and have a little pride about it. The way your end of the project turns out reflects on how people see your quality of work. Have a little pride and do a good job. "Good enough" is not always good enough.

Writing 101: Everyone should know how to write with, at a minimum, reasonable grammar and correct punctuation. I'll give a little on the spelling, but you should know at least how to spell simple words. Learn the difference between "its" and "it's." Know when to use "their," "there," and "they're." Figure out how to use apostrophes and commas. Knowing how to write (say, at an eighth grade level?) will help you to better convey your ideas and to be better understood.

Phone Etiquette: Not the "greetings and salutations" portion of phone etiquette, but other stuff, like "when it's okay to use the speakerphone" or "how to leave a voicemail message." For example, just because you have a speakerphone doesn't mean you should call everyone on it. It's still okay to use the handset (or headset). (Oh, and it is never okay to get your voicemail over the speakerphone, particularly if you're in a cubicle environment.)

Under-promise and Over-deliver: You'll come to find that when you're working on a project, if you say it'll take 5 days and it takes 10, that's not so good. That's what makes a project go over schedule and over budget. Plan for contingencies and worst-case scenarios. Provide time and budget estimates for both, but expect to take the longer amount of time. If you come in ahead of schedule and under budget, that's a pleasant surprise; if you come in late and over budget, you'll be disappointing folks at the least. I'm not recommending you sandbag and double every time estimate, but the concept of under-promise and over-deliver is a good one to maintain.

The Master of Disguise

Last night, due to the graces of On Demand video, Jenn and I watched The Master of Disguise.

Hoooo boy.

How do movies like this get made? I mean, who reads a script like that and says, "Hey, this will be great on film! Let's do it!" I understand that there's a market for children's films, but even kids are going to wonder what the makers of this pile of shit were smoking.

I think I laughed like four times. Mostly it was at the quips the grandfather character used to tell Dana Carvey to shut up. Stuff like "curb your yammering skullcave," which I will now attempt to work into daily conversation somehow. It cracked me up because it was so out of nowhere... but those were about the only things that were any good. (Do you remember when Dana Carvey was actually funny? I do. I miss those days.)

That's an hour and a half of my life I will never reclaim. (And I'm not the only one who thinks so.) I am actually dumber for having watched that. I award myself no points, and may God have mercy on my soul.

posted @ Tuesday, June 22, 2004 2:11 PM | Feedback (0) | Filed Under [ Media ]

Financial Services Sites Too Complicated

I'm what you could consider an "entry level" user when it comes to financial services. I don't know all the terminology. I don't know what everything means. I'm not intuitive when it comes to figuring financial things out. What I know is simple stuff - what accounts I have, what I want to do, what I want to see. Very simple.

I used to have an account with a stock brokerage in Portland called "Bidwell & Co." I liked them. The customer service representatives were friendly, my monthly statement from them was easy to understand (big print, small words, lots of pictures), and when I wanted to do something on their web site, it was easy to figure out. If I wanted to see my portfolio, I clicked the "Portfolio" button. If I wanted to sell stock, I clicked the "Sell" button. Even more key, when I got to my destination ("Portfolio" or "Sell" or what have you), the interface was very simple - I wasn't overwhelmed with buttons and text boxes and options and words I didn't understand. For things I didn't get, there was help all over the page that I could click on and read about the tough stuff.

Bidwell was bought out by Ameritrade recently. My account was transferred over, and now I have to manage my stock via the Ameritrade site.

Oh

My

God.

I don't get it. Seriously, I don't. There are far too many options to know which one I need to click to get to where I want to go. Want to see your portfolio? Click a link (hidden in a list of like 50 other links) along the side of the page marked "Positions." Positions? What the hell is that supposed to mean? Click on that, though, and you see an abbreviated version of your portfolio. Want to see a more detailed view? I did. I wanted to see my portfolio broken out by individual lots of stock. That's under "Gain/Loss Tracker" - a whole new link along the left of the screen - then you have to select the "Detail" view from a dropdown box, then click the "Update" button. Isn't that a portfolio thing? Maybe not. It is from the uninitiated perspective. (I actually had to call them to figure this out.)

Got a Capital One credit card? Their site rocks. There are four tabs at the top of the page you can choose from. One gets you a view of your current activity, one gets you your statement, one lets you pay your bill online, and one gets you a list of everything else you can do. Click on one and you know what? You get exactly what you're expecting. Very simple.

Got a BankOne credit card? Ever try their site? The print is tiny tiny tiny, and they try to cram way too many options onto the page. Do I really need to be able to get from any page to any other page in one click? No. I need the interface to make sense. More mouse clicks is not the problem; being able to find what I want to do and understand what I'm looking at is the problem.

I think financial institutions might want to think about that. My grandparents, for example, who do own stocks and bonds and all that, will never ever be able to manage any of that online because there's too much going on. Stop listening to these so-called interface rating services. I've seen the sites they rate highly; it's scary what they think is easy to use. Stop ranking things on how many mouse clicks it takes to get somewhere. Instead, think about how things are logically. Sure, you may have the technical ability to enable the most flexible web site ever - offer 2000 ways to transfer money from one account to the next or whatever - but in all honesty, how many do customers really want?

Here's an idea: Take a page from the search engines and offer two versions of the user interface. One version is the "basic" version - for the 95% of people who want to just get the job done. The other version is the "advanced" version - for the 5% of people who need that ultra flexibility.

Or, better, here's another idea: Get a beginning banking user (not unlike myself) to help design the interface. Listen to him (or her) when he tells you that the interface is too complicated. Consider the fact that what you're hearing is probably more important than what you heard from the interface rating institution because if you can't get a beginning banking user to understand how your product works, they aren't going to use it. Get grandparents in there to try it out. Get eighth graders in there, fresh out of personal finance class, to try it out. If they can all figure it out, that's where you need to be.

[Important Note: This is all definitely my personal opinion and absolutely not [necessarily] my employer's. (Seeing as how I work for a company that makes financial web sites and all...)]

Shell Programming In C# Is Not My Cup Of Tea

When it comes to programming, I will admit I am a spoiled, whiny baby. I hate low-level crap. I am not a C++ programmer. Sure, it may be powerful and flexible and yadda yadda yadda, but having to deal with all of the little things in there is such a pain. I like higher level languages that abstract that away. I'm a big fan of C#, Perl, Smalltalk, and whatnot. (You may or may not like any or all of those. Too bad. They're my personal preferences... even if I haven't written in Smalltalk for years.)

I'm working on this project where I want to put the Windows "Send To" menu inside the Solution Explorer of Visual Studio .NET. I'm finding that in order to do that, you have to do some pretty low-level shit. As such, I started browsing around in the Shell Programming section of MSDN.

Combining the knowledge I was gleaning from that and some code snippets and things I found online, I started compiling a library of imported shell programming related objects into a big library - shell programming gone C#, right?

The problem I'm having is that I can't get it to quite work right. The marshaling of parameters is befuddling me because there doesn't seem to be a consistent translation from C# managed types to C++ unmanaged types (of course, this is probably my lack of education speaking). Where I can get some methods to work correctly, others don't seem to want to cooperate.

I decided to set about converting the various sample code snippets found on the MSDN shell programming site to my C# library, figuring that'd be a good way to test - code that supposedly works, just translated to the new language. No problem, right?

Huge problem.

I've been fighting this thing for quite some time now and I just can't seem to get it to work. Now, here's where you're going to smack me: It's making me think I should just learn the C++ way and do it in C++.

And you say, "You don't already know how to do it in C++?" To which I respond, "Well... no." Okay, I admit, that's probably pretty fundamental, but if I can read how it's done in C++, and I can see how that works in the documentation, I don't see how copying and pasting example code into a sample project is going to make it any easier to convert the stuff.

Which leaves me thinking I should just leave the conversion of shell stuff to the folks who do shell programming. I'll DllImport my way to freedom and leisure where necessary, and/or maybe just write the thing in managed C++ that I'll call from my VS add-in. I've seen the managed Send To example out there; maybe I'll start with that. Regardless, I can only beat my head against something for so long before I decide it's not worth the effort and leave it to the professionals. My bag is web apps, not COM interop and low-level shell programming.

Father's Day Weekend

This weekend was Father's Day, which meant carting around town visiting family.

Saturday night we hung out at my parents' condo and visited with them, my sisters, mom's sisters, and mom's dad. Not sure where my dad's parents were.

Granddad got going on telling a story and had us rolling. Apparently his dog likes to sleep under the footrest of his recliner while Granddad watches TV. One time there was a power failure and Granddad got up to get a lantern so he could see, but when he came back, he couldn't find his dog. He looked all over the house and came to the conclusion that, in his words, "The devil done shut off my lights and stole my dog!" (How hilarious is that? The best writers in Hollywood would never come up with "the devil done shut off my lights and stole my dog." Too funny.) Turns out when he stood up, he pushed the dog under the recliner with the footrest and trapped the dog under the chair. Heh.

Sunday afternoon we had lunch with Jenn's family at Marie Callender's. Pretty tasty, and we all ended up with leftovers.

All in all, a good weekend hanging out with the family. Not particularly restful, but a good weekend nonetheless.

Went to Home Depot to check out paint colors for the bathrooms. Our entire house is the same color of white inside - trim, doors, walls, etc. - so we need a little color. Found some great stuff and will have to get on that as soon as we get money.

Spent a little at Bed, Bath, and Beyond, too, picking up some new bathroom rugs to replace the ones the cats have torn up and have seen better days. Plus, we had to get something that goes with the shower curtain we bought last weekend.

In other news, I think I have a little athlete's foot - minor, but annoying - on my right foot. Not sure how I got it since I don't go tromping around in public showers or really ever go around barefoot, but it's there and it's created a weird sort of dry spot that occasionally itches. At least, I think it's athlete's foot. I dunno. The point is, it's resistant to the over-the-counter Lotrimin I've been using, so I figured I should go see a dermatologist to make sure I'm even dealing with it correctly. Made the appointment this morning for three weeks from now. That's the soonest they could get me in! Seems dermatology's in high demand around here. I'd say I should have been a dermatologist, but I'm sure you see some pretty disgusting shit in that line of work. I have issues picking up cat puke; no way am I dealing with skin diseases.

How To Figure Out SharePoint Portal Server 2003 Full-text Query Syntax

It has come to my attention that at this time there are no real documents out there (at all - even internal to Microsoft) that discuss the ins and outs of querying SPS 2003 via the search web service and fulltext search queries. Nobody seems to have the magic answer as to how to formulate the query - what you can SELECT, what goes in the WHERE clause, etc.

I don't have the answer, but I know how you can get a jumpstart on figuring out how it works.

On the SharePoint Portal Server 2003 "advanced search" page (the one that allows you to search over document metadata), do a search. Once you get the results you want, do a "View Source." Scroll down near the bottom (or search for "SELECT" - match the upper case letters, too) and check this out: They embed the entire SQL full-text query right in the page.

Apparently that's how the MS guys figure out how the thing works; if it works for them, it should work for you, too. Good luck!

SharePoint Portal Server 2003 Search Web Service Tester

If you work with SharePoint Portal Server 2003, you've probably messed around a bit with creating web parts or maybe automating some of the routine administration tasks, but have you tried accessing the search web service?

There are articles out there telling how to integrate the search web service with the Office 2003 Research Pane, there's documentation on the schemas for querying the search service, but if you look at the SDK documentation, there's really no example for what the query itself should look like. I mean, I can figure out how SQL Server full-text queries work, but what's the source I'm querying? When you put everything together, what are you really sending to the web service, and, more importantly, what's coming back?

To answer this, you could use something like SOAPscope and start watching packets that way, but you're still going to be putting things together in a sort of trial-and-error fashion, hoping your packet is formed right, etc.

Instead, I created a little app specifically for this: Give it the URL of your server's search web service, enter your search terms (the keywords for a "keyword" search; the SQL full-text query SELECT statement for a "SQL Fulltext" search) and click "Execute Query" - the program goes out to your search service, registers to search, gets the list of available catalogs and search scopes, and executes your query. You can see the form the query packet takes and the results you received from that query. You also have the option of changing search settings to different limits - start at a particular record number in the results, retrieve a certain number of results, only retrieve certain types of results, etc.

SPS Search Test - Displaying the query packet

Note: While this is a very helpful tool to test out queries and see if they work, I still don't have any real documentation about the form of full-text queries for SPS. I'm working on getting some information from Microsoft on this, to find out which fields I can query for/against and how to determine that for different servers, as well as figuring out what different errors mean. When I have more, I'll update this entry. (The only queries I've gotten to work are variations on SELECT "DAV:href" FROM Non_Portal_Content..SCOPE() WHERE size > 0 so... I'll keep you posted. It doesn't seem to work like the SPS 2001 queries did, though.)

UPDATE: 6/18/04 11:00 AM - It turns out they embed the entire SQL query that gets run on the Advanced Search page right in the source.

Also, I'll be updating the app as I learn more about the search functionality so I can offer more flexibility in the querying.

Download SPSSearchTest 1.1.0 (MSI)
Download SPSSearchTest Source 1.1.0 (ZIP)

Version History
1.1.0:
- Added syntax highlighting for SQL queries using the ICSharpCode.TextEditor control.
- Moved view and query options into menus.
- Now showing the Registration Request packet.
1.0.1 - First public release.
1.0.0 - Internal/unreleased version (still needed more functionality for prime time).

Punch-Drunk Love

Jenn and I watched Punch-Drunk Love via On-Demand last night.

Boy, am I glad I didn't pay for that one.

Adam Sandler plays this guy Barry who is sort of antisocial... but sort of not. Really, I couldn't tell what was wrong with him. He had these random fits of rage, sometimes he was well adjusted and sometimes not... I dunno. Anyway, Barry calls this phone sex line and winds up being the victim of this ridiculous extortion scam. While he's dealing with that, he meets this girl named Lena (played by Emily Watson) with whom he falls in love.

Sounds okay, right? Except for the fact that there are these weird non-sequiturs throughout the whole thing. For example, at the beginning Barry's standing outside his business, drinking coffee, watching traffic. Out of nowhere, this SUV flips over onto its roof and slides down the street at the same time this taxi cab/van drives up and drops off a harmonium on the sidewalk.

Normally I'd be cool with this - an obvious, but potentially flawed metaphor for love: bang! something hits you and you end up with a little harmony. The thing is, this is actually happening in the movie; it's not something in Barry's mind. And he ignores it! All of these things happen, and we're supposed to accept there's basically no big deal.

Not only that, but there are these weird interstitials strewn throughout the movie with odd colors and lights on the screen and music playing... I have no idea what that was all about.

"No, it's surrealism!" I hear you screaming. Maybe it's me. It wasn't consistently surreal, so I can't give 'em credit for the one-off attempt. I have to chalk it up as straight weirdness.

Maybe I just didn't get it. Maybe I'm too "thick" for this kind of movie. I'd like to think it's more because the movie missed its mark, but this is the avant-garde crap that critics seem to faun over. I can't tell you how many reviews I've seen where the end is something like "this is the film to see!" or "a fresh breath from the norm!" Ugh. I'm all about art in films, but when the one overshadows the other, you lose me.

Pass on this one. Or see it when you're smoking crack, because then the flashing lights and colors with the music might seem cool. It wasn't for me, though.

posted @ Friday, June 18, 2004 8:57 AM | Feedback (3) | Filed Under [ Media ]

Convert Your iTunes Library XML into HTML

I've seen a few ways to do this out there, usually involving a Perl script of some nature, but why go to the hassle? When iTunes exports the XML, just transform it using an XSL style sheet to convert to HTML. This might not be as easy for the lay user, but it is certainly better than manually scripting it.

First, download itunes2html.xsl and put it in the same folder as the exported library XML file.

Now, at the top of your exported library XML file, right below the <?xml version="1.0"?> line, put this line:
<?xml-stylesheet type="text/xsl" href="itunes2html.xsl"?>

That's it. If you open the document in a browser that knows XML (like IE6), the XML will automatically be displayed after being transformed to HTML. Copy and paste the results into Excel, if you want. Works pretty well. Note that to actually get HTML source out of the thing, you'll have to use a command line transform utility like MSXSL.

I Am Not A Teacher

I know enough about myself to admit my weaknesses and know the boundaries on my abilities. For example, I have very little patience with people. I already know I have this flaw, and I do my best to accommodate for it by avoiding situations where it may require I have a lot of patience in regards to socializing with others. I try to spare myself - and everyone else - the pain of having to deal with me once my patience wears out.

See, for me, patience is sort of like a bank account: You have a certain amount of patience, you spend it on different situations, and when you're out, you're out - time to back off and build up some more patience in the old account.

Teaching people is like going on a patience spending spree. I get spending long before I even get to the teaching part. I start thinking about all the different stupid shit the person I will eventually be teaching will want to know, then I get thinking about how I'm going to answer the questions - particularly technical questions from a non-technical person - and pretty soon I'm already stressed out and pissed off.

Putting this into perspective, I just got off a very, very long project at work that pretty much kept my patience bank at a low level. I got by, but barely, and I look back on it now as a trial that I successfully overcame; I'm happy with the end product, I'm happy with the team I worked with, and I'm happy that we were able to succeed. That said, I need a little time before jumping right back into the fire so I can build my patience account back up. I'm fresh out. Plus, now that I'm working on a different project, I'd like to actually make some headway on the new project, not continually context-switch back to the old project.

I got word today that we've got a non-technical guy who needs to be educated on how to do some reasonably technical stuff to customize the output of my last project. To that end, I've been tasked to train this guy on how to do the changes, then potentially have a meeting where I train a room full of these people.

Asking for this is akin to saying "We have a whole bunch of people who don't know how the web works; in two hours or less, you need to teach them how to make web pages using cascading style sheets." At the very best, my patience bank just got robbed for whatever was left; more likely, I'm going to end up shooting all these people and then shooting myself.

You might ask yourself what the big deal is. The problem is in the way I work. My mind moves very quickly and not necessarily in a straight line from point A to point B. In fact, there are usually about 20 different points in between that I stop at on the way. This doesn't translate well in a training environment for things where there's not actually a process to follow. In many cases, I don't even know how I got from point A to point B - there was a path, there was some method to the madness, but articulating that is beyond my abilities. This trait became problematic in college math classes where I'd write out the problem then the solution right after; you're supposed to show your work but I don't know how I got the answer, I just knew what the answer was.

It's the articulation of the path that blasts away my patience. If I slow down enough to explain the exact thought process going on, I lose track of where I am and don't actually accomplish anything. Ever start to say something and then forget what you were going to say right as you were going to say it? It's like that. I'm like, "Okay, first you do this, then... uh... what were we working on?"

Note that this is different if I have a curriculum to teach and there's a process to be followed. When it's not "train this entirely non-technical person on a totally unstructured technical topic," I do reasonably well. I can answer questions, follow a curriculum, and all is well. It's when I have to get into defining a process for how to do something at the same time I'm trying to teach the person how to do it that really gets me... the impromptu requests for training on topics that have no curriculum, process, or structure. That's where we have issues.

Anyway, I'm doing my best to make my displeasure at this training idea known without overtly pissing too many people off. I'm quickly coming upon the time where I won't care about who I piss off, though, and that could be career limiting. Here's hoping I don't end up getting fired, eh?

pMachine Update: How To Add Automatic Links To Comments

I had a problem where I wanted to add a pMCode tag in pMachine to allow me to automatically link to other pages on my site. For example, normally you can use [url=http://somesite.com]linktext[/url] to create links to other sites... but what if you want to link to pages in your own site? Adding hard references like that makes the site sort of inflexible if you change your URL or move to a different server (which is the problem I had). Wouldn't it be nice if you could link to, say, your comments page by doing something like this: [commentlink=123]linktext[/commentlink]

So that's what I drummed up. It seems to work for my site, which only hosts one blog, but it should work for multi-blog sites, too.
To enable this change, you'll need to edit your /pm/lib/pmcode.fns.php file.

At the top of the pmcode_decode function, add the following:
global $weblog;


Now add the following lines as shown, around line 305 in the file, with the rest of the substitutions:

// [commentlink=123]sometext[/commentlink]
$str = preg_replace("/\[commentlink=(.*?)\](.*?)\[\/commentlink\]/i", "<a href=\"" . get_comments_link('\\1', $weblog) . "\">\\2</a>", $str);


Then copy and paste the following function in that same file, somewhere toward the bottom:

function get_comments_link($postid, $weblog = ""){
	global $db_multiweblogs, $db_categories, $db_weblog;
	global $db_members, $db_upload_prefs, $db_nonmembers, $pingserver_path;
	global $db_comments, $profileviewpage, $auto_xhtml, $url_rewriting, $sfx;

	if ($weblog == "") $weblog = "weblog";

	$db = new DB();
	$blogid_array = array();
	$sql = "select id,weblog from $db_multiweblogs order by id";
	$query = new DB_query($db, $sql);

	while ($query->db_fetch_object())
	{
		$blogid_array[$query->obj->weblog] = $query->obj->id;
	}

	unset($query);
	unset($sql);

	$catpage = (isset($blogid_array[$blog]))  ? $blogid_array[$blog] : "1";
	$pagespath = get_pref("pages_path_abs_$weblog","1");
	$comments_page = get_pref("comments_page_$weblog");

	$delim = '?id=';

	if ($url_rewriting == 1)
	{
		$delim = '/';
		$comments_page = str_replace($sfx, '', $comments_page);
	}

	$catrow     = 0;

	$comments_url = "$pagespath{$comments_page}$delim$prefix{$postid}_0_{$catpage}_{$catrow}_C";

	if ($url_rewriting == 1) $comments_url .= '/';

	return $comments_url;
}


That should do it. Now you can use the new "commentlink" pMCode tag. Just pass in the ID to the entry you want to link to, like this: [commentlink=123]linktext[/commentlink]

Good luck!

Lack of Customer Service

I like a good customer service experience. I don't normally ask for assistance from customer service at a company - I'm a big fan of self-service - but when I do need help, it's not like I'm making up some imaginary need.

I'm trying to troubleshoot an issue where a user on our intranet gets prompted to log in when they visit the intranet home page. Internet Explorer should automatically log them in, but it's not doing it. I found that they have some Segue Software products installed, so thought I'd search the knowledge base over there to see if there are any known issues.

First, they make you register to read the knowledge base. Normally I don't have a problem with this, but they do it in a sneaky way: They show you a form where you enter your email address, desired username, and desired password, then you click a register button... just so you can fill out a second, longer form with more personal information. Fill that out, click the register button again, and you get told that they have to "confirm" your account, so you can't access the site until you get an email from them with a confirmation link.

That wouldn't be too bad if the email showed up quickly, but it takes half an hour to get to you. Once you click the registration link, it validates your account, but you still have to log in.

So you log in, go to the knowledge base, and enter your search terms. Clicking search gets you nowhere, though, because you have to select a product name to search articles about that product. Here's what you see for the list of products:
Where's the beef?

At this point, I'm pretty irate. I decide to contact the support people directly to tell them there's a problem with their knowledge base and it needs to be rectified:
Hello!

I'm trying to search your knowledge base but it tells me to "select a product from the dropdown box." Problem is, it doesn't POPULATE the dropdown box with any product names, so I CAN'T.

Please either fix the selection box or remove the requirement that I select a product.

Thanks,
-T


Pretty reasonable request, right? Here's what I get back:
Hi Travis,

Thank you for contacting us with your request. Please provide your customer ID so that we may open a technical support call for this issue.

Please also include your customer ID in any future correspondence with the support department as it allows us to track your issues more efficiently.


What? You want my customer ID and all that because your site is broken? I don't want you to open a call, I just want your fucking site to work so I can do my job. I've been fighting this thing for a while now, and I'm fresh out of patience.
God forbid you just fix your site and make it usable without opening a tech support call and asking for all the serial numbers. I'm not the end user of the product; the guys in the QA department are. I want to find out if you have any KB articles on effects that your products might have on [insert long technical problem description here]. I don't have the actual customer ID number or product serial info, I'm just an IT guy trying to troubleshoot a potentially related item.

Thanks for the lack of help, I'll see if I can get the QA guys to log me in on the site with their accounts or something.


I figured it was over at that point. One of the QA guys logged me in and, wonder of wonders, the product selection box populates, things seem to magically work. But their tech folks aren't letting up.
When you contact technical support you will always be asked for your customer id number so that we can confirm your entitlement to support whether that be information or more in depth technical help.

With regards to access to information on the support website you should note the following.

In order to log into our site you must first create your own user profile. During the registration process we must validate your entitlement to create that profile. One of the ways we do so is by confirming your customer id number, and that, that number is tied to a customer with valid maintenance.

Further if you are not listed on our customer database as a bona fide contact for that customer id, then you will not be able access any of the secure areas of the support website. (from your correspondence it appears that this is the problem you experienced).


Since when has the knowledge base been a "secure area?" An even better question: How come I can get to the "secure area" but have some broken form so it looks like a technical malfunction in the site as opposed to a conscious decision to deny access? God damn, these people stepped on my last nerve.
I find it fascinating that accessing a knowledge base, granting access to which costs you nothing and would actually probably SAVE you in support costs, is considered support that I might have to qualify to be "entitled" to. You might take a page from Microsoft or IBM, reasonably successful companies, and provide online, self-help style support without qualification. I can see denying access to forums or other interactive support, charging for personal attention from a technician, but the knowledge base? What if I download an evaluation product and want to search the KB? Looks to me like I'd STILL be denied, and I wouldn't have a customer number to provide you.

Assuming that you don't provide support without qualification, you might want to either actively disable the knowledge base search form or put something on the site somewhere so it doesn't just look like you guys messed up when a non-qualified user logs in and tries to search. If I'm not allowed to search the KB, I shouldn't even be given the option. Instead, I get taunted with a form and end up in a ridiculous email chain like this.

Consider me unimpressed. I have since gotten a QA guy to "loan" me an account so I can actually search the knowledge base, so I suppose the point is moot. I know what recommendation I'll be making if and when they ask me about what software company to go with, though.


And that's where it stands. Here's a message to all those companies out there who require people jump through ridiculous hoops to get self-service support from your web site: You're turning away potential and, in many cases, existing customers.

Microsoft Certified Database Administrator

The end of a long, long journey has finally arrived.

I took my last test today, MS070-228: Installing, Configuring, and Administering Microsoft SQL Server 2000 Enterprise Edition, and passed. I got a score of 854 (passing was 700) and from the look of the results sheet, I think I only missed one question (they don't actually tell you how many you got right or wrong, but you can sort of tell by looking at these little graphs they give you that show your strengths and weaknesses based on the questions you got right).

That makes me a Microsoft Certified Database Administrator, which, alongside my existing Microsoft Certified Solutions Developer for .NET certification, is pretty cool. It's been over a year in the making, and it's finally come to fruition.

Yay, me!

Becoming Unburned

I finished this gigantic project at work, or at least the first release of it, and by the end of the whole thing I was well beyond burned out on programming. Staring at code all day was killing me, especially that particular set of code. And, trust me, if one more person stopped by to "see if I needed anything" (which, for those in the cheap seats, translates to, "hey, let me interrupt what little concentration you have left for no reason"), I was going to kill them.

I was becoming a little antisocial.

Since then I've had a few days of lighter work to recouperate a little and during that time I started a little programming project of my own to do some add-in functionality to Visual Studio .NET 2003. (If you don't do Microsoft programming, that won't help you... but for those who spend their whole day in Visual Studio, the stuff I'm working on could speed things up quite a bit. At least, it will for me.) I'm doing some cool automation stuff to speed up some routine tasks.

The thing about this project is that I want to work on it. I want to make it happen. I like the idea and it drives me. And why does that matter? Because it's been so long since I've had any actual desire to work on a program that I've forgotten what that's like.

I'm curious why that is. Not that I would classify myself as one of those die-hard programmers or anything - programming is a job, not a lifestyle, and that is an active choice on my part - but I can get excited about some programming projects and be burned out before I even start on others. Could be a couple of things.

I think that deadlines stress me out. I mean, deadlines are important on a project because if you didn't have a target date, you'd never finish anything. But the way deadlines are set in most projects is sort of like instilling the Fear of God in you - you must finish or fire and brimstone will rain down upon you, the sea will turn to blood and frogs will fall from the sky. I'm a motivated individual. I work as hard as I can on a project - sometimes ending up with overwork and health issues from it, which I would like to think is only partially my own fault - and I don't need additional stress from the project owners on the deadline. You don't have to tell me how far behind we are because I already know. Most likely, I'm the bottleneck (because most likely I'm also the only developer on the team, too). Just get out of my face already, I'm doing the best I can. If you want the project done super fast (which usually implies a lack of quality; something has to suffer to achieve the superhuman speed required), call someone else. If you want it done right, come talk to me.

I think I have communication problems. I work very well on an event-based communication system: if something changes, I'll let you know; if I need something, I'll let you know. Just be available to receive that communication and respond when it comes in if it warrants response. Project sponsors, managers, and leaders don't like that. They want a constant status update. "What's your status? I need your status! What are you working on? How far along are you? When's it going to be finished?" Look, man, fuck off. I appreciate that you have a desire to have some sort of magic progress bar on my forehead that you can glance at and update your metrics, but I don't work like that. If I spend all day updating you on my status, there ain't no work gonna get done. The event-based model works well because it doesn't take development time for meetings, it doesn't break your concentration with micro-pings all day long, and it doesn't serve as a constant reminder that you're under an unreasonable deadline. You might not get the granular status you want ("Okay, so an hour ago you were 16% done and now you're 17% done? Excellent!"), but when actual milestones occur, you'll know ("Halfway done? Cool." "Done? Great! On to the next task!"). I should probably learn to work under the constant micro-ping (micro-managing?) model, but I think that would definitely detract from my efficiency.

I have some sort of attention deficit. I can't work on the same project 40+ hours a week for months on end because I stop caring about the outcome. It becomes less of a project and more of a death march. I need to be able to change things up, do something new and different, or it just gets plain boring. And once the boredom sets in, all is lost.

I like to feel like the product I'm working on is interesting. Working on a document replication service to copy selected files from one place to another might be great for the company and super for the person who's time I'm saving, but aside from that, it's a tedious exercise of writing a program that doesn't really do anything interesting. The project I just finished started out interesting, but I think the deadline and status/communication issues started stomping on the interesting portion of things and it just became a grind. With this Visual Studio automation project, it's interesting. I'm doing stuff I haven't done before; I'm learning things about how not only Visual Studio works but how Windows works, too; and I'm seeing that I can actually benefit personally by the outcome (not monetarily, but productivity-wise). It's cool, and I feel good about it. (Doesn't hurt that there's no deadline and no project management on it, either.)

I can hear my boss now: "You can't always do what you want; sometimes you have to do the stuff you don't like in the job." Yeah, yeah, yeah. If that's you, too, then you've missed the point entirely. The point is that there are reasons the crappy stuff in your job is crappy, and if one or two of the issues could be alleviated, then maybe the crappy stuff could be less crappy, and maybe the person doing the job would be a happier camper. (Which is not to say I'm unhappy; I'm speaking in a more general sense.) Plus, this is venting. When someone vents, they don't want to hear devil's-fucking-advocate, they just want to vent.

Long story short: I'm unburning from the last project... let's see how long that can last before they say, "Hey, what are you doing out here? Back into the fire, asshole!"

Harry Potter and the Prisoner of Azkaban

Saw the latest Harry Potter on Sunday. Figured I'd fill you guys in.

Harry Potter and the Prisoner of Azkaban, based on the book of the same name by JK Rowling, is about... hang on. You know what? Go read the book. Seriously. I'll wait.

Okay, now while those folks are off reading the book, the rest of us will continue.

Minor refresher: A believed dangerous individual named Sirius Black (played by Gary Oldman) escapes from the wizard prison of Azkaban and comes after Harry (Daniel Radcliffe). Harry ends up finding Black and uncovers some interesting information about his (Harry's) past, particularly in regards to his parents.

Now that we're all up to speed, here's the deal: There's a new director, there's a new Dumbledore, and there's a new way of looking at the Harry Potter series.

From a direction standpoint, I think Alfonso CuarĂ³n did a decent job. I'm not sure what I would have done differently, and most of the beefs I had with the movie could just as easily have been blamed on the screenplay. I'll give the guy credit where credit is due.

The new Dumbledore (Michael Gambon) did an outstanding job, enough that it was an entirely seamless transition to him. Can't ask for much more than that.

As for the new way of looking at these movies... In the previous two books, there was some certain amount of introspection but not so much that it affected the plot; which is to say, the movies were able to come out and, even leaving out certain elements from the book, the story was sufficiently conveyed. In this one, the book contained a lot more in the way of subtle plot points and things that took place as internal realizations or dialogue, which would have either been impossible to show on screen or would have made it drag so slowly as to be unwatchable. That's a hard thing to put on film, I'll admit, but there were a few things they left out that I really think they should have left in.

The Patronus: When Harry manifests his patronus (expecto patronum!), it manifests as a stag because his father was an animagus who could turn into a stag. Not only did the film not mention any of this, but the patronus didn't really manifest as an animal except for one quick shot about a second long. Every other time, it only ever seemed like a white "shield" of some nature. They never did address the fact that it looked like an animal. I think that's an important point.

The Knight Bus: Didn't the Knight Bus show up more than once in the book? Yeah, I thought so, too. Too bad it was only a very tiny part of the movie.

Moony, Wormtail, Padfoot and Prongs: Harry gets the Marauder's Map and uses it for about five seconds in the movie; it was much more important in the book. Anyway, when Professor Lupin gets the map in the movie and talks about it like he knows exactly what it is... they never really explain why he knows what it is, nor do they explain the significance of the names "Moony, Wormtail, Padfoot and Prongs" that show up on the map. Those names, which represent Professor Lupin, Peter Pettigrew, Sirius Black, and Harry's father, respectively, illustrates the relationship between them and sort of provides some insight into their background. We didn't get any of that. For a story about getting to Harry's background, they sure left a lot of that out.

We'll let all of that go, though. It was still a good story and a lot of fun. I'll get it when it's out on DVD... I just have to keep in mind it's a movie and not a book on film.

posted @ Tuesday, June 08, 2004 6:56 PM | Feedback (0) | Filed Under [ Media ]

Command Line Options

Greg was having some problems with SP2 for Windows XP yesterday (he's beta testing) and had to reinstall. He decided to do the installation in an unattended fashion and used the command line option "/passive" to accomplish that. I started thinking about that particular command line option and how it's almost like a clinical diagnosis of the behavior of the installer rather than a technical option and then decided that in future programs I need to follow that same standard. As such, here are some command line options I'm contemplating for programs I write in the future:


/passiveagressive: Install unattended and force overwrite of any old file versions without asking.

/obsessivecompulsive: Verify all data written... twice.

/histrionic: Confirms every disk I/O operation.

/masochistic: Deletes any trace of itself on uninstall.

/sadistic: Deletes all user data. Display delete notification message after operation completes.

/dependent: Only installs if you're installing other, related products at the same time.

/paranoid: Require authentication prior to performing any action.

/avoidant: Run in "standalone" mode; ensure no communication between itself and other programs.

/antisocial: Allow incoming communication with other programs but never send outgoing/response messages.

/schizoid: Display terse messages.

/schizotypal: Display all messages like standard Windows messages, particularly with regard to errors. Refer user to incomplete or nonexistant documentation if they want more information.

/narcissistic: Set process priority to highest possible setting.

/cyclothymic: Simulate unreproducible, periodic errors to test system fault tolerance.

Marched To Death

Release 1 of the death-march project I was working on was completed yesterday, so now I'm taking a little time to recoup and finally put things away in my cubicle since the move (right in the middle of that project, everyone in my department shifted cubicles around and I basically chucked all of my stuff in boxes and kept working... up until yesterday it was all a huge chaotic mess).

This coming Monday is the project post-mortem, so we'll go over the things that worked, the things that didn't work, and decide where we want to go from here. There's still a lot to do on that project, so I don't anticipate I've seen the end of it. That said, I feel a sick sort of ownership for it now that I've spent all this hard time with it. It'd be a little difficult to just give it away cold turkey; I'd like to see it grow. (I just don't want to spend what's left of my sanity and patience on it, is all. If we can come up with a reasonable schedule and some reasonable expectations, I'm all over it. That'll never happen, though, so I'm in a quandary.)

I'm studying for my last Micrososft certification exam now, which will make me a Microsoft Certified Database Administrator. Then I'll have both my "Solutions Developer" and "Database Admin" certifications, and I think I'll call it good. It's been a long road to get here and I'm glad to be close to the end of it. You're supposed to "renew" your certifications whenever new versions of the products come out... I don't know. I mean, I like to keep current and all, but it's a lot of work to get a piece of paper, and studying for tests is nothing like actually doing the work on a day to day basis. Nothing substitutes for experience.

Seems that lots of folks are excited for the next installation of Harry Potter, including Jenn, who says we're definitely seeing it this weekend. I dunno. I've loved the last two, but I need to maintain a clean slate when it comes to being excited and/or having expectations for movies. All too often I go in expecting a great show and it turns out to be just "pretty good." We shall see.

Toilet Fixed

With the help of Toiletology 101, I fixed my toilet on Friday - no more leak! Turns out the flapper wasn't making a good connection with the flush valve. All better now.

Feisty Music

I'm feeling a little feisty today. A cross between restless and irritated with a hint of hyperactivity. One of those moods where you need to fidget and can't focus. Big surprise there.

The weekend: I fixed my toilet Friday... rented a couple of movies Saturday (nothing to write home about)... played some Prince of Persia on Sunday... hung out with my parents on Monday... that's about it.

Listening to the iPod this morning on the way to the eye doctor I started thinking about all the different songs that have meaning in my life. Listening to the different stuff on the iPod I can tell you where I was in my life when a given song came out or a particular event that happened when that song was playing. It's almost better than a journal; it's like reliving the past in the present.

I happened to hear a cut by Pop Will Eat Itself and it reminded me of high school. Mom got on sort of a "wholesome" kick and decided that PWEI was "devil music" (yes, the words "devil music" were actually used to describe it) so she confiscated all of my PWEI tapes and CDs. At the time, it seemed that use of the word "fuck" in music pretty much qualified it immediately as "devil music."

We had a discussion - nay, a heated argument - about what constitutes "devil music" that went something like this:

Mom: The music you're listening to is devil music!
Trav: What makes it devil music?
Mom: Every generation has its own new music, designed to push boundaries. This is no different. It's made to corrupt your mind. It's trash!
Trav: So every generation has devil music.
Mom: Yeah.
Trav: And the new music in each generation is usually it.
Mom: Yeah.
Trav: And the new music in your generation was The Beatles.
Mom: So?
Trav: So by your logic, The Beatles is also devil music.
Mom: Go to your room!

Yeah, I thought it was crap, too. I mean, if you don't like the language, I guess that's one thing, but don't accuse me of listening to devil music unless you have a strong case. Anyway, my PWEI CDs got confiscated, which was an extraordinary inconvenience because at the time they had gone out of print. In particular, the Cure For Sanity disc was hard to find, and that was problematic because that was my favorite CD of the time. (For the record, she was also pissed off about my Nine Inch Nails CD, but I don't recall her taking that one.)

Anyway, it took me a couple of weeks to scour the downtown Portland area and find a small dance record store who happened to have the last copy of Cure For Sanity. I still have that CD to this day and it's still one of my favorites. (Mom's probably going to be pissed when she reads this one, but this was like 13 years ago, and I'm a little older now, so I'm sure she'll cope. I'm also still a NIN fan, but I think Pretty Hate Machine was the best album Reznor's put out to date.)

Ah, memories. I'm sure you all have those music memories. Maybe one of these days I'll put out a few more of them on the site, so they might not be forever lost.