Friday, October 31, 2008

Go Vote!

Go vote next Tuesday. Wait in line as long as you have to. If you don't vote, you can't complain about anything that happens, because you didn't speak up. It's the one really easy way that every year you can participate and make yourself heard. Go vote. It does matter. Spend some time this weekend reading about the candidates. Figure out who will do best for you, your friends, and your family. Then vote. Seriously. Apathy sucks.

Friday, October 24, 2008

Sports 'News'

Yesterday on the train, I hopped on the web thru my phone to check to see who won the World Series game. The front page of the sports section had a big picture about Brett Favre's alleged tipoff to the Lions about the Packers offense. No mention of the score of game one of the World Series! How is this news, I thought? Reasons this story is stupid:

1) I could give the Lion's a genie and unlimited wishes, and they would go 2-14
2) The Lions play Green Bay twice a year, have film of every game they have played, and scout them. How could they not ALREADY know their offense
3) It's the Lions - how can anything involving the Lions be front page news

The second biggest 'story' these days? Pac-Man Jones. Seriously? This guy gets paid millions a year to do what? Play football and not get arrested. He can't do one half of that. It's pathetic, but is it news? No. It's just not. As part of Obama's plan to increase scientific knowledge in our country, I propose the development of an 'irrelevance ray', that will immediately obsolete people like him who are just such gigantic idiots that they merit no coverage. They will simply disappear and nobody will wonder what happened.

Wednesday, October 22, 2008

I Suppose You Could Do It That Way

So if someone asked you to write a thing that showed three items in a list loaded from a database, on each page in the application, would you:

A) load the items from the database each time and display them using a simple php for loop?
B) do something a little more complex like loading the data once per session, or per key id, and storing it in the app scope
C) get really crazy and use memcached or something like that


D) create a nightly CRON job that loads all the possible permutations of data by key id, then write a monolithic XML file, then each time the page loads, read that XML file from disk, using XPath to track down the values to show in the page

Take a wild guess what I just refactored. Hint: it wasn't A, B, or C.

Monday, October 20, 2008


October is not really my favorite month. I used to love it - football in full swing, I was still playing fall baseball. The weather had cooled, and the leaves were changing. It's a pretty nice time of year around DC. Then, three years ago this month, my father passed away suddenly. My father was great - he was my best friend; he was just about the smartest, most curious person I have ever known. He was a jock, a nerd, a band-geek, a carpenter, a lawyer, and an Army veteran. He taught me how to think for myself, how to always want to become better, how to take care of people who you care about, and how to be stubborn in pursuit of things that are important to you.

He had a head full of useful and useless knowledge - I am pretty sure he knew the answer to the Jeopardy! questions before Alex Trebek read them, and I personally witnessed him going through at least ten shows where he knew EVERY ANSWER. Why he never went on the show is beyond me, but I would say (admitting my bias) that if he had, nobody would know about that guy from Utah who won all those days in a row.

He never stopped to impress me with all the obvious things, but the more I think about him and look back, the more I remember the little things.

I was driving down Rt. 7 at Bailey's Crossroads the other day and went by what is now a furniture store and DSW Shoe Warehouse. I am sure most Arlington natives will recall that before the days of Home Depot and Lowe's, on that site, we had Hechinger's. My dad spent most hours on the weekends either at Hechinger's buying stuff to build, or in the basement building it in his workroom. Obviously, this meant I spent about the same time in those two places as he did. I would wander around and watch him fill the cart with stuff that would eventually become part of our house, in awe that he even knew what most of the stuff was.

I remember every time we left Hechinger's, I would beg him to stop off in the Toys R Us across the street, and on the rare occasion when he agreed, I would find that AWESOME GI Joe or Transformer, and beg and beg for him to buy it for me, but he never would...but he always remembered what I had been raving about, and I don't think there was a Christmas morning when all those toys wouldn't end up under the tree, in packages signed by different Christmas figures like 'Santa Claus', 'Rudolph the Red-Nosed Reindeer', and numerous Elves, all in my father's distinct handwriting. It didn't matter that I knew they weren't from Santa. It was better that they were from my dad.

I can remember going to the congressional offices on Capitol Hill on Saturday mornings so my dad could talk to some congressman or staffer about some such thing he was working on at the time. I would run up and down the halls of the Longworth Building, doubtless not that amusing to all the folks trying to work, and just when I would get so bored that I couldn't stand it anymore, my dad would appear to take me downstairs to the Longworth cafeteria, where I swear they had THE BEST PANCAKES IN THE WHOLE WORLD. My dad would pick me up so I could see over the counter to order, and I would get a heaping plate of hot delicious food that I never finished, no matter how hard I tried. I am pretty sure it tasted so good because I was eating it with my dad. He would take me on the underground train that went from office to office, which NEVER got old. Then I would sometimes convince him that we should go see the Smithsonian museums AGAIN, and he humored me, looking at the same dinosaur bones and moon landers that we had looked at so many times.

I remember being allowed to stay up late, tuning into WJR760 to listen to Ernie Harwell regale us with the story of the magical 1984 Detroit Tigers. I remember asking my dad why they booed every time Sweet Lou Whitaker came to the plate, only to be reminded that they were saying "Looooooooooouuuuuuuu", just before he rapped a single to start another rally. I can remember living and dying with every Jack Morris strikeout, every double play turned by Lou and Alan Trammell, and every home run off the bat of Kirk Gibson. My dad tought me to love sports, to cherish competition, and how there were so many ways that sport was like life - practice makes perfect no matter what you are doing, sometimes equating math to batting practice. That October was a good one, with the Tigers mopping the floor with the Padres 4-1 in the World Series. We still listened on the radio even though the games were on television.

I remember being in college, moving into a new apartment, and talking to my dad, complaining that it was pretty hot because there was no air conditioning. I came home that weekend, and there was a window air conditioner that he had picked up at a garage sale for me that morning. I just sort of took it for granted at the time, but I realize now that the reason for that is because he had been doing that kind of stuff all along.

It's amazing all the stuff you take for granted. I talked to my dad sometimes 3-4 times a day. He was my best friend, like I said. When Michigan was actually playing well in the first half against Penn State this weekend, I picked up the phone and started dialing my father to express my surprise, like I had done so many times before. I stopped myself after dialing 703, like I have done so many times over the past three years. In the second half, when the tides turned, and Penn State was running away with the game, I started dialing again...

Saturday, October 18, 2008

When Failure Attacks! Startup Edition.

Those who know me would know that I was working on a startup with a few friends/ex-colleagues that I thought had some real promise. We had a couple developers and a couple product managers, and an interesting idea. Recently, the wheels have fallen off. It's been a couple years now, we have a fair amount of code written, we have incorporated, have a bank account, operating agreement, tax documents, computer equipment, a humble web presence, and a bunch of plans. I just wanted to talk about what went wrong and what I would have done differently, and what I WILL do differently when I try again, because I am definitely hooked.

What Went Wrong

1) No Idea Validation - An idea is great in the minds of those who had it. I will admit readily that this idea was not mine, but I still think it's a great idea. The problem is that nobody who was in a position to a) buy the software, b) invest in the company, or c) partner with the company was ever spoken to to find out if this was really a good idea. How far in to the game do you talk to people? Do you worry that those people are going to say "hmm, good idea" and then do it themselves or find a different partner? Do you have faith, draft your NDA and go forth into the fray? Do you trust that it's a good idea and wait until you have something demoable, then go full bore?

2) No Time - We had a large discrepancy between what needed to get done, and how much attention it required, and how much time people were willing to spend to accomplish it. This was a strictly after-hours proposition, and we all worked at challenging jobs, but we all knew that was the deal, and we just didn't make this business a high enough priority. Deadlines weren't met, and worse, they often weren't set. This is an "all-in" game that we were playing, and we weren't giving it "110 percent".

3) No Networking - There are tons of ways to meet people who know people who have ways of helping, investing, or at least validating your idea - there are huge, active communities full of people who live for this stuff, and we didn't harness that at all. Bad, bad, bad. This was totally correctable, and will be one of the first things I do when I come out of mourning.

4) Plans Too Grand - We didn't have good checkpoints. We didn't have a great way to get demoable software out piece by piece. We had a big huge roadmap that included the kitchen sink. It was too much. We were too late in trying to identify the critical path (also see failure #1). We were going to build it all, an entire enterprise software product, in our spare time? Two of us? Yeah right! Who were we kidding? We needed to prove the concept with a small subset of the eventual product so that we could get funded or find a partner. Hindsight...

5) Bad Technology Choices - I take the full blame here. I am a Java developer. It's what I have been doing since I started in this industry. It's what I am good at, what I know, and where I feel most comfortable. So we chose Struts/Hibernate/Tomcat. It's documented, it's established, it's a known quantity. It's also not the fastest way to get something done. If I started again, in 2006, I would have used Ruby on Rails or maybe even PHP. When I start again now, I will use Groovy and Grails. The productivity gains you get from these frameworks are simply too valuable to ignore, especially when you are strapped for time.

So, for these and other reasons, we failed. It sucks, but I will do better next time. Please feel free to comment with any sort of tips or experiences that you've had along the way in your entrepreneurial career.

Happy Saturday!

Well, since I got married (and for a while before, even), I have been the subject of numerous jests from friends about how domesticated I have become. I had to giggle at myself today when I had an entire day free to myself, and did the following:

1) Woke up, got dressed, practiced guitar for about an hour
2) Addressed about 40 thank-you cards
3) Installed two new light fixtures in our walk-in closets
4) Did four loads of laundry
5) Bought a new phone
6) Practiced programming
7) Caught up on my blog reading

Not that many years ago my Saturday would have gone like this:

1) Wake up (late)
2) Locate friends and beer
3) Drink beer with friends

I think that this is a good thing, but I can't say I don't miss the utter lack of responsibility that came with my youth...

The phone I got is the LG eNV. I am not sure if it would pass the 'cool gadget test', but I think it's a lot spiffier than my last phone (LG VX-something-something flip phone). It has a QWERTY keyboard, which is really handy when I am writing my 10-12 weekly text messages. The camera is pretty good, I must say. Most importantly, the speakerphone is excellent - the last phone was completely useless in that respect. I went to the Verizon Wireless store with every intention of buying a so-called 'smartphone', but when I thought about being tethered to the internet, it just seemed like a bad, bad idea. If someone wants me to have a Blackberry, then they are going to have to pay for it themselves.

(Rant alert)
All I could think of as I evaluated the smartphones is all the people that I see/know who sit at the lunch/dinner table half-listening to the people they are sitting with, scrolling through their email, glancing every three seconds to see if another message has arrived, looking down into their lap, as if looking at the phone below the table makes it any less rude. When we were kids, we weren't allowed to talk on the phone at the dinner table, under any circumstances, and it is now one of my most gigantic pet peeves. I don't want to be that guy. Ever. If someone really needs my opinion on something while I am eating lunch or while I am out for a walk, they can call me, and leave a message. Or call twice so I know it's actually important. The fact is, 95% of these people and the messages they are ingesting like crack are not that important. The things can wait - they could wait before RIM incorporated, and they can wait now. Anyone who thinks that that email is that urgent is a bit full of themselves, unless they are working in a position where an immediate response is necessary (ie you run a production server that crashed, or you are a policeman, or something to that effect). I am okay with being unimportant enough not to need my phone attached to a POP3 server, for now anyway.

Sorry that was quite a rant, but today's phone store visit brought it to the surface. More later on failure, and picking yourself back up again.

Wednesday, October 15, 2008

What's Awesome? Fuser.

So I was poking around in the blogosphere and I saw something about Fuser and its latest release. It's a browser app that aggregates all your mail and your myspace and/or facebook account into one webpage, with tabbed view like Yahoo mail.

I need something like this, because I use 5 different computers when you count the dual-boot laptop. All my stuff is scattered in different sent mail folders in Live Mail on Vista, Evolution on Ubuntu, and Thunderbird on my Mac at work. I would rather it be in one place, and with Fuser I get that. It's got a pretty good UI, and seems to work relatively quickly. Setting up your accounts (I have hotmail, yahoo mail, gmail, and an IMAP mail account) is quick and painless, and the initial sync really isn't too painful.

All the basic features are there, except for one thing: Search. (Edit - Emily from Fuser has enlightened me - it's tucked away in the top right, and isn't that peppy, but certainly better than nothing!)

I did have a problem using this site on Firefox 3.0.3 on Mac Leopard, but it turns out it was just something weird with the latest Java update. I found a great post, describing my symptoms, and once I followed the instructions, the site seemed to work again there.

The only thing that would be really great would be to make this site work in Fluid for the Mac, but currently the browser certification doesn't allow to load this page in Fluid. I plan to try tonight in Prism to see if that works instead.

What's That, Amazon?

Now, before I start writing, I have to confess - I love Amazon's recommendation system. I frequently head there whenever I want to find a new book, a new album, or perhaps a new band to check out. 95% of the time when I go there, I think to myself - wow, that's pretty good - I really did enjoy that. They have done a good job harnessing the 'wisdom of crowds' in a way that produces strong output that keeps me coming back. That's why I found this one so funny:

Note the reasoning behind the recommendation of the Opera album:
Recommended because you rated Mother's Milk and more.
I clicked the "fix this button", and it showed me that I got there because I rated Mother's Milk by Red Hot Chili Peppers and Blue Train by John Coltrane. I can't fix that I liked those, so I have to sit idly by and hope that saying I am not interested will result in Amazon clearing it's head of the thought that I want to listen to the great tenors of our time sing opera to slap bass played by Flea and jazz sax by Coltrane. So strange!

Monday, October 13, 2008

Facebook FAIL

A few hours?

When Bad Things Happen To Good People

Man this football weekend was tough. Michigan lost to Toledo, mostly because of a 100-yard touchdown return that was a 14 point swing in the game. (This was the only touchdown Toledo scored). Sunday, the Redskins lost to the lowly Rams, on a long TD return on a fluky, fluky play. That touchdown was...wait for it...the only touchdown that St. Louis scored. What a bad football weekend.

One another and much more positive note, I may have invented a new incredible staple in my football watching menu:


The sturger is an incredible thing. It's the combination of a 3/5 lb hamburger topped with a thinly sliced, marinated steak, about the size of a hamburger bun. I must say that it was one of the most delicious things I have eaten in a long time, though I can't say that I really was left wanting a second one, which made my friend Richard's double play seem quite amazing.

I think I will be marketing this idea to Carl's Jr, leaving the software profession behind. The sturger is just too good to ignore, and I think I will be able to retire in a year, tops.

Friday, October 10, 2008

Software Estimation Is Hard

So as part of my new role at Sportsvite, I am taking over the leadership of development on partner projects. These are usually slightly smaller projects that are either directly on our site, or somehow interfacing with our site. While they are smaller, they are a lot MORE of them. Like, currently we have six projects ongoing, and I have to estimate all of them.

I don't know how other software developers feel about estimating projects, but for me, it's always the most difficult part of my job. If I developed software like I estimated it, I would be in serious trouble - it would go something like this:
"Here is my code. It may or not work, depending on A, B, and C, and it could be right, but probably not, and you could probably take the expected response time and multiply it by 1.5 to get a more accurate number."
That probably wouldn't fly, right? But for some reason, in software estimation seems to work like that. I think that's kind of crazy, but there hasn't been any better methodology put out there, really? Has there?

From wikipedia on sofware estimation:
The ability to accurately estimate the time and/or cost taken for a project to come in to its successful conclusion is a serious problem for software engineers. The use of a repeatable, clearly defined and well understood software development process has, in recent years, shown itself to be the most effective method of gaining useful historical data that can be used for statistical estimation. In particular, the act of sampling more frequently, coupled with the loosening of constraints between parts of a project, has allowed more accurate estimation and more rapid development times.
So I am not alone! This is a problem for other people, which makes me feel better. There are methodologies:

Function Point Analysis
Proxy-Based Estimating
Evidence-Based Scheduling

The problem is that, especially in a small shop, we

a) don't have comparable projects that can be used to provide historical data, especially for partner projects that are often more one-off than core product development. I can say with some confidence how long it takes to add a new Struts 2 action and mapping - that part is easy, but what about the elements on the page? What about the logic?
b) don't have the infrastructure in place to really record time spent on any one task, and often find that if we did, it would be inaccurate because we wear so many hats, each hat being taken on and off randomly throughout the day/week.
c) can't afford just yet to spend a lot of time making exhaustive estimates, because that's time that won't be spent in construction and testing.

I wish there was a silver bullet that you could shoot at this problem, but it seems like there isn't. Like anything else, there has to be a point where you make something a priority to really solve it, but it's become such a joke in the industry it seems, that people aren't trying too-too hard to really get good estimates.

Ah well, if anyone has an idea, or a good experience as a successfull estimator at a small software outfit, please feel free to leave a comment describing how you did it well.

Wednesday, October 8, 2008

Obscure Things Every Java Developer Should Know Depending On Who You Talk To

In my career, I have found that the best way to learn something is to give a presentation on it. In lieu of that, perhaps writing about it would be a good way to make it sink in, and hopefully someone else can stumble across it and benefit from it as well. Here are some of those things:

hashCode() v. equals()

The following comes from this awesome site

All objects have both identity (the object's location in memory) and state (the object's data). The == operator always compares identity. The default implementation of equals compares identity as well. Fun facts:
  • if a class overrides equals, it must override hashCode
  • when they are both overridden, equals and hashCode must use the same set of fields
  • if two objects are equal, then their hashCode values must be equal as well
From an interesting blog post on hashmaps and hashcode():
When an object is inserted into a HashMap, the position at which the Value object is inserted in its internal Entry-array depends on the hashCode of the Key object passed in. The hashCode generated by the Key object is not used directly, but is processed by the hash(k) method.
Immutable Objects

What is an immutable object?

Immutable objects are simply objects whose state (the object's data) cannot change after construction.

Why are they so good? They:
  • are simple to construct, test, and use
  • are automatically thread-safe and have no synchronization issues
  • do not need a copy constructor
  • do not need an implementation of clone
  • allow hashCode to use lazy initialization, and to cache its return value
  • do not need to be copied defensively when used as a field
  • make good Map keys and Set elements (these objects must not change state while in the collection)
Wanna learn this stuff visually, without paying tuition??

CHECK THIS OUT - Cal Berkely Data Structures Lectures (kinda awesome)

This is one of those "man the internets are sweet" type things. I will use this to learn all the nasty bits that I don't really want to but might have to.


Every so often you get to thinking you are pretty smart, and fortunately, someone or something is waiting around the corner to snap you back to reality. I think the only way to get better is to realize that you aren't very good at something. I think that this is good for the soul. The problem is, what if what you need to get better at is something you don't want to get better at?

As a programmer the next step is to be a better programmer, right? But a lot of these high-paying programming jobs that are out there have these barriers in front of them. They are made of giant heaps of time complexities, big o notations, stacks, queues, data structures, algorithms, and all sorts of other terribleness. I don't know any of this stuff, and the only thing that makes me want to learn it is so that I can tell other people that I know it when they ask me. I should want to know it to know it.

In my last job I did a ton of interviewing people, and I didn't really bother to ask these types of questions - why not? Obviously a) because I don't even know the freakin answer, but also b) because I can't really fathom how it was honestly relevant to the position.

So the question is - should I bother to learn this stuff just so I can get a job and not use it, or should I not bother, and then only get jobs in the future that don't require the brainteaser quiz answers? I think I know the answer, but I really dread it. Sigh.

Monday, October 6, 2008


Man it's fun to watch Philly lose.

Friday, October 3, 2008

Nerdy Things I've Learned Today

1) LAMP should be easier. Today, on a new server that had mysql, apache, and php already installed, I had to just through flaming hoops of package dependency hell to recompile php from source using the correct modules to allow for use of mysqli. Seems kind of wacky to me. Rebuild? To use a library? Boooooo. Anyway, thank goodness for google. Anyone who wants an incredibly concise guide to building a LAMP environment on Linux, check this one out - it helped me a lot.

2) The scp command will attempt to eat all your upload bandwidth. It is a greedy command. You can 'throttle' the bandwidth consumption using the -l flag (the number is kb/s):

scp -l 50 large-local-file root@awesome-remote-server:/great-directory

This is the best way I have found to teach scp to share.

3) You need good internet connection to work as a developer if you are serious about it. Ugh.

Honeymoon + Free Time = Reading!

Well my three week trip, while action-packed (pictures coming! soon! today even!), had some nice downtime, times when I could read books! With the wedding preparations and errand running, I was not really reading a lot at the end of the summer there, but things have picked up again...

I left with only a couple of books, thinking that surely I wouldn't have that much time to read, since I would be slurping up Italian culture and history, but it turned out that we ran out of gas a couple days, so we were able to do some serious decompression, which was nice.

I brought Nothing Like It In The World, by Stephen Ambrose, which is a book about the building of the transcontinental railroad. It was a pretty fascinating read. You think now about what a pain in the ass it is for someone to just widen 66 for a ten mile stretch. Now consider that these folks had to build a railroad from the Mississippi River to the Pacific Ocean. Now consider that they did it without dynamite, without any of the modern 'power-tools' that the upcoming industrial revolution would provide, without electricity. Now consider that they did it in a part of the country that was still subject to attacks from Native American tribes that were none too pleased about the road going up, hastening the theft of their ancestral lands, and keeping their buffalo herds from roaming free. And they did it. On schedule. Pretty amazing stuff. What took months, and usually a dangerous and very expensive boat/wagon ride to get to California from New York took one week. Incredible - I think from my memory of the history classes I took, this achievement really didn't get as much emphasis as it deserves. The book was a quick and good read, and I recommend it to anyone who wants to learn more about the building of railroads in the 19th century. If you didn't recognize Ambrose's name, he's the one who wrote Band of Brothers. His books are usually good reads, with enough facts and information but not so much that you can't finish them - I call his work 'gateway books', where you can decide whether or not you want to get into more detailed books about the topics.

The second book I read was a collection of short stories that I have had forever, and never read until now. It was entertaining - my main problem with short stories is that sometimes they go on forever and then just end, other times you want them to go on forever, but they have already ended - it's a very difficult thing to make a short story the right length!

Third up was Busting Vegas by Ben Mezrich. Everyone knows about 21/Bringing Down the House by now. This was a similar tale, but actually more interesting, though the writing may have been a little better in Bringing Down the House. The stuff these folks were doing is pretty incredible, and rather than making me want to go Bust Vegas, I kind of just don't want to play regular old blackjack anymore. Read this one in a day - nice quick read, but pretty good.

Fortunately, once I got to the villa in Tuscany, they had some books people had left behind. I started on Snow Falling on Cedars - I may be about the last person in the world to read this book, and I never saw the movie either. This was a really good book - interesting tale about an area and an era. I loved this one - I feel like I could picture the island where it took place, and the characters were all developed enough that I really cared what happened. I love books where the good and bad guys aren't all good and all bad, and this was one of them. Great read.

Next up was a dumb spy novel that was sitting around the villa - Len Deighton's Yesterday's Spy. This book kind of sucked, which was a disappointment because I have read others by Deighton that I enjoyed. Moving on, to Engleby, by Sebastian Faulks, another villa special. This was a fascinating book written from the perspective of a sort of antisocial castoff with a memory problem - I really enjoyed this book - it was another one of the books where there were characters you didn't know whether you liked or hated, and that made it great. Definitely a quick read, but very well written and well thought out.

Finally, I read a 'further adventure of Sherlock Holmes' called The Italian Secretary. Let's just say that Doyle's legacy is safe. The book was okay, but no earth-shattering piece of literary greatness. It made the flight go by faster at least.

I went to Barnes and Noble yesterday with a couple of gift cards that wanted to be used and bought:

April 1865, The Month That Saved America
The Professor and the Madman
and some book about partisan politics whose name already escapes me

Reviews forthcoming shortly...

Wednesday, October 1, 2008

Sarah Palin, or please please win Barack

I don't know how I feel about McCain - I think that like a lot of other reasonable people, I liked McCain a lot more before he sold his soul to get the neo-con nod as presidential candidate. I think we can blame Huckabee a lot for the abrupt retreat McCain has made from the reasonable politician he was a year or two ago, but that's neither here nor there. Let's talk about where we are now...

I am a very middle-of-the-road guy when it comes to politics. I would probably vote for Obama this year either way, but with definite reservations, especially related to labor, trade, and health care policies, but it would have been closer. The thing that had to have sealed the deal was this Sarah Palin nonsense. I listen to her speak, and would be afraid not just to have this woman as president, but to be a third-grade teacher to one of my friends' children. She is the worst kind of bad. Ignorant, impetuous, and insulting. Her sole purpose seems to be making wisecracks. I was shocked to see that after looking such the buffoon in multiple interviews over the past couple weeks ("He did awesome"???), she had the nerve to make fun of Biden for being old. Seriously? She is taking on the special interests! Yeah! Did you know her daughter was pregnant and that she has a kid who has Down's Syndrome? Oh, did you know her son is going to Iraq? That's good right?? Right???


None of these things qualify you for ANYTHING. I don't know much about Biden, but he probably has done a bit more than Palin, despite the fact that for the last 18 mos she has been protecting us from Russian invasion that is no doubt coming via the Bering Strait any day now. What a mess. If any of you think it's been bad watching Bush stumble through countless press conferences, just imagine what it will be like if McCain wins and then something happens to him. Get out. Register to vote. You don't have to vote FOR Obama, just vote AGAINST this idiot. Please. Do it for all of us.


Well I must admit that I didn't miss here very much while on my honeymoon. Of course it was nice to get back and sleep in our nice comfy bed as opposed to the hard beds of the old world. I missed my friends, and my family, obviously.

One other thing that I really missed was SPORTS. I guess I never realized how used to watching sports I was. At least the Tigers stunk so I wasn't missing the tail end of the pennant race. When I left, Michigan was looking terrible and the Redskins were looking worse. I was able to follow Michigan's awesome comeback against Wisconsin from the O'Hare wireless connection, which was awesome. Good start. Then Sunday I got to sit on my ass and watch the NFL all day. Jena was very nice to indulge me. The Redskins looked like a good football team, playing hard and well for 4 quarters, which I hadn't seen since 1999 or so. So it was a very pleasant sports re-entry. I hope it keeps up.

I wonder if there are books out there about why people care so much about sports. When you think about it, it's really an absurd concept, but when I watch sports, I get so excited, all the ups and downs, highs and lows. I used to be much worse - if Michigan lost, I would be a bad person to be around for the remainder of Saturday, and the same on Sunday with the 'Skins.

One day I thought to myself in a moment of clarity "The Redskins don't care when I have a bad day - why should I care when they do?". I have been a lot less ridiculous since then, but I still admit that it drives me nuts from time to time, and I crave sports information only slightly less than when I was 18 or so, despite all the added responsibilities that take up so much more time now. What a racket, this sports! That said, I am waiting eagerly for the 1pm kickoff against the Eagles Sunday. Damnit.

Tomcat: Manager Loading Issues

Here's another 'good samaritan', 'hopefully this'll help someone down the road' post. I recently put a clean Tomcat 6.0.18 instance on my machine, and deployed my app. Everything worked fine with the app, but when I tried to access the manager application, I wasn't prompted for the login credentials like expected. I figured it might have been an issue with my (customized) tomcat-users.xml file, but it wasn't - when I checked out the manager log file, I saw a bunch of references to this error:

javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found
I was just getting a 401 page with the message "authorization is required" or something to that effect. I did some digging, and found a bunch of halfway answers that included reinstalling Tomcat - this isn't really acceptable, so I figured I'd look in tomcat/lib, and sure enough there was no xml jar there, so I copied in xerces-impl-xxxx.jar in there, restarted, and could access manager no problem - not sure why this happened, but if you ever see that, make sure you have a xerces parser in your classpath...