Wednesday, December 23, 2009

Christmas?

Some people think that Christmas is overrated.  That's it's nothing but a meaningless commercialized, materialistic money grab that has lost all of it's real symbolic juice.  These people are incredibly adamant that those who do dive whole hog into Christmas are foolish, naive people who are tricking themselves.  I heard a kitchen conversation at work the other day and it made me wonder about how I really felt about Christmas.  It took a while, but I think I know:

'The Christmas Season' is commercialized and materialistic, but it doesn't spoil what Christmas is really all about.  The symbolism of Christmas is, to me, what is really important...the part of the year where you unselfishly give to people just to see the smile on their face, a time when you spend time with friends and family and reminisce on the year that was, and a time when you celebrate what's really important in life.  Sure you can get carried away buying crap that nobody needs because it's ON SALE!!!, but it doesn't just automatically signify a 'cheapening of the holiday', because the whole gift thing is just a small part of what makes it so great.

I love this season because my Dad loved this season.  A guy who otherwise was quiet and pretty reserved went absolutely all out when it came to Christmas.  A guy who really didn't like shopping could be found trolling the malls right up until the night before Christmas.  A guy who wasn't really into embellishment would go to great lengths to professionally wrap all his gifts to me and my Mom, no matter how gigantic or oddly shaped.  He also made sure to sign the 'from' section on each and every one of the gifts with something ridiculous like 'Santa', or 'Rudolph', or 'The Elves', and he filled the stockings up with more gifts than most people got presents.  It was about giving.

I love this season because it's about traditions.  It's about the times that define your family.  It's about times like going out with your father to buy a Christmas tree, and remembering the first year your dad let you 'help him' carry the tree in, and you were strong enough to carry it in by yourself.  It's about putting all the ornaments that you had accumulated through the years on the tree, stopping to remember how you got that one, or who made this one for you.  It's about sitting down and playing the same record you play every year, and having the same special breakfast, that you HAD to eat before you could open presents.  These are the kind of times that define families, and Christmas is about the biggest one for a lot of those families.

It was about one special time in the year when no matter what else was going on, everything was perfect, everyone was happy, and everyone knew how much everyone else in the room loved them.  It was special, it stuck with me, and I already do the same thing.  I love Christmas.  I love that people drive around in cheesy Santa hats.  I love giving the bell ringer $20.  I love thinking back on all the special Christmas seasons that I spent with my family, and that I can barely remember any of the gifts that I got, but I can certainly remember how I knew how much I was loved.

So yeah, Christmas isn't necessarily about buying stuff.  It's about choosing your own way to express your love for the people around you.  If that means you buy some stuff, then hey, why not.  It's your money.  It doesn't cheapen the season to me.  Just make sure everyone you love knows that you love them.  That's what it's all about to me.

2009 in Review

Well it's here again.  Another year of Christmas spirit.  Here in Denver we actually get a White Christmas - we are in the midst of a 6-incher, which is exciting, except we are trying to fly out to Boston tomorrow morning.  Hopefully DIA has their de-icers warmed up and ready to rock...

This has been one crazy year.  It's my first full year as a married man.  My first year living somewhere not called Virginia or DC.  My first year being involved in selling a house.  (It sucks by the way).  My first year moving somewhat blindly across the country to a completely new place, where the amount of people I know can be counted using one hand. Yep, crazy year.  It was a great year though.

This year I learned a fair amount about planning.  Planning everything so that you can coincide a move, a job, a home sale, finding a new place, and moving into it.  It's stressful.  This year was a crazy year.  Did I mention that?

The year started out pretty nicely - we went to Aruba with Jena's parents, her sister and bro-law, her Aunt Louise, and our awesome nephew.  It was an awesome trip, mostly spent floating around the lazy river...



Spring was pretty uneventful.  We were getting ready to sell our house, and starting to do the awesome dance where you leave every weekend and are forced to clean every morning before you leave the house.  I got pretty good at being a better cleaner though, so that's good.  Also we always came home to a clean house.  Those are roughly the only two things that I can think of that were good about selling the house.



Over Memorial Day, we got a visit from Jena's sister and fam.  We went to Annapolis where our nephew learned to drive boats and dressed like a pirate.  We had a great time out on the boat and walking around town.

.

Over the summer, the house sale process dragged on, but it didn't keep us from doing a fair amount of fun stuff.

          
        La Jolla Cliffs

We did some boating on the Chesapeake Bay, spent July 4th in Annapolis with family, and I made it out to San Diego for the first time.  What a beautiful place.



We also took in a Tigers game in Baltimore on a beautiful day for baseball.  And we got a win!  It was a fun time and erstwhile Tiger Edwin Jackson threw a gem!  



We finally sold the house this Summer.  Wow, what a pain in the ass, dealing with the most unreasonable buyers and agent, but it allowed us to finally realize our dream of moving to Colorado!  With the house sold, we moved in with my parents-in-law while everything fell into place for our journey.  Jena was allowed to keep her job at WeddingWire, and I lucked into a job at eCollege in Denver.  I traveled out for an interview in August and did some house hunting while I was here.  I found a great rental that had everything we wanted in a great neighborhood, and got the job offer, all in the same 48 hrs!  It was finally time to roll out!



We got everything packed up in a POD and shipped off to Denver while we waiting for our moving date to arrive.  It was a long and tiring process, but the POD worked out great, and everything made it cross-country in one piece.  An amazing feat, and it was a pretty good deal too.  We moved in with Jena's parents, which was not bad at all.  I am blessed with a great pair of parents-in-law, and I think they enjoyed having their daughter back home for a while.  We took some time out to attend a beautiful wedding in Vermont and watched Jena's cousin KC get hitched to his beautiful bride Annemarie.  Once we got back, it was pretty much go time.



We made it out here pretty quick.  We made a couple stops along the way - we saw my grandparents:



And then we stopped in Iowa to see our friend Tricia, who showed us around her wacky little town:



Then we hightailed it the rest of the way to Denver where we were met with an awesome housewarming surprise from Jena's friend Meredith's mom...what a great welcome!



So anyway, this is where we live now.  Denver.  It's weird, because I keep calling the DC area home, and it's not really home anymore.  It's a place I grew up, and it's where I am from, but it's not where I live, which is quite a change.  I have three months under my belt in Denver, and the other 380 were spent in DC.  The good news is that we love it here.  We love the friendly people, the great neighborhood we landed in, and the wacky weather is even growing on me a bit.  Our house is nice for a rental, but we look forward to buying something that we can call our own.  Work is going really well - I couldn't be more pleased with my manager, my team, and the work that I get to do.  It's been a really pleasant surprise, as I went in pretty much blind.  We have had a lot of good times since we got here.  We've done some sightseeing, beer tasting, skiing, and we've been pretty busy sampling all the great restaurants in our area.  It's been quite a year, but I can't wait for next year.  We are all settled in now, and we can put all our energy in enjoying everything that Colorado has to offer, including snowshoeing, hiking, more beer tasting, and skiing.  

Goodbye 2009!  Bring it on 2010!

Thursday, December 3, 2009

On Intiators, Blockers, Supporters, and Observers

In reading Sway: The Irresistible Pull of Irrational Behavior, I found myself fascinated with the chapter on the four personality types -



Initiators, who have ideas and drive innovation, and are the general optimists.
Blockers, who are the doom-and-gloom, are you sure that's a good idea types.
Supporters, who pick the side of the initiators or blockers.
Observers, who simply provide comments.


I have done a lot of thinking about what the right balance of personalities is for a team.  In a perfect world you want a bunch of initiators, because they can just think up all kinds of good ideas and knock them out, moving the team and the organization forward.  This generally doesn't end up happening this way.  I can speak from experience when I say that having a manager who is an initiator and an employee who is an initiator is not necessarily a good mix.  This can lead to something of a whirlwind of work that might all be interesting, but isn't necessarily good for the organization.   


You also don't want a lot of blockers and nothing else, because you will sit around spending endless hours justifying why something has to get done, even when it seems relatively clear why it's a good idea.  This is the other end of the spectrum.  Instead of doing too much and having some of it not be the right stuff, you end up doing not enough of anything.  People get fired because of this.


A perfect balance in my opinion is to have a team made up of an initiator, a blocker, a supporter, and to have the manager be an observer.  The initiator gets people fired up, introduces ideas and enthusiasm, and generally dives in with gusto.  The blocker is there to make sure the initiator doesn't get carried away, questioning whether something is the right thing to do, or whether it's necessary.  The blocker makes the initiator better, because in order to do something new, the initiator knows they will have to pick their battles well, and to justify their enthusiasm with a business case that can sway the supporter and the observer.  In my opinion, a manager should be the observer, but can play a bit of a supporter role as well.  A manager who is a blocker won't get very far, and a manager who is an initiator can be seen as a little too gung-ho or overzealous by their employees.  As an observer, the manager can interject when they see fit, shaping the way that the work evolves without forcing their will on anyone.  This makes for happy employees.


It's just interesting because my office now sort of fits this dynamic, and the give and take is really great.  Coming from other places where the balance was definitely lacking, I think it's a great place to really grow.  Blockers can become more open to new ideas, and initiators can learn to harness their enthusiasm and be more thorough.

What's That You're Reading??

I realized it's been a while since I shared what I had been reading, what was good, and what wasn't so good.  I have been doing a fair amount of reading despite being pretty busy.


What I've read so far:


Predictably Irrational: The Hidden Forces That Shape Our Decisions - This was a fantastic read about why people do silly things.  It's a discussion, reinforced by a series of fascinating and simple experiments, about how the human mind is wired to do things that just plain don't make sense.  What makes this one really good is Dan Ariely's easygoing writing style and the fact that the experiments were so well explained.  It was a really quick read, spanning only about 5 train rides, but it's the kind of book you could easily go back to a few times and get something out of it again and again.


Sway: The Irresistible Pull of Irrational Behavior - I liked Predictably Irrational so much that I went ahead and bought this one.  This is along the same lines as Predictably Irrational, and in fact cites that book a few times.  It's even shorter and a quicker read than Predictably Irrational, but takes a bit different tack on irrational behavior, by describing a real-life situation, then illustrating the forces that drive the irrational behavior using experiment results.  I especially liked the section describing people who are 'initiators, blockers, and observers', which I'll talk about more in another forthcoming post.


Fooled by Randomness: The Hidden Role of Chance in Life and in the Markets - Don't read this book.  The ideas in it are fine.  Randomness is all around us, and anyone who thinks they can take on the gravity of randomness is a fool, and will be ruined.  Good premise I suppose.  Unfortunately the author spends roughly 200 pages of the book describing how smart he is compared to the rest of the world, and how everyone else is a buffoon who just doesn't get it.  Right or wrong, man is he ever pompous, and it poisons what could be a pretty insightful book.


The Day of Battle: The War in Sicily and Italy, 1943-1944 (Liberation Trilogy) - I finally finished this tome about the Allied campaign in Italy in WW2.  Good gracious, if you read this book, you will be taken aback by some of the horrors of low-tech warfare.  It's amazing that people had to go through some of the things that were forced upon these soldiers by ambitious officers and politicians, and it's AMAZING that the Allies won with all the blunders they committed during this war.  It is a true testament to the courage and grit of the Allies that they could overcome this.  This is a really well-written and well-researched book, with much of the narrative coming through letters and diary entries from enlisted men up to General Patton himself.  Fascinating book.  I recommend it highly to any of my fellow history buffs!


Long Tail, The, Revised and Updated Edition: Why the Future of Business is Selling Less of More - This is an interesting book by the editor of Wired about how the Internet and e-commerce have changed the way people buy and sell things.  I was expecting something earth shattering, but I think the ideas in the book have been out there for so long that I kind of felt like I had already read the book.  Good, quick read, nonetheless.


Sherlock Holmes : The Complete Novels and Stories (Bantam Classic) Volume I - Ah, I can reread these over and over again and never get tired of them.  Anyone who hasn't read these should, and probably won't help but enjoy them.


1434: The Year a Magnificent Chinese Fleet Sailed to Italy and Ignited the Renaissance (P.S.) - This is the 'sequel' to 1421, which I talked about a while back.  The premise here, building upon the idea that the Chinese fleet led by the great Admiral Zheng He sailed around the world, is that the Chinese made visits to Venice and Florence in 1434, passing on great quantities of information that helped to spur the Renaissance.  There are endless references to ideas that European thinkers of the time passed off as their own, but are obviously based on something from China that had been invented decades if not centuries before the Europeans did it.  This book is not written as well as 1421, but was full of thought-provoking stuff.  It came across as more of a transcription of a bunch of notes rather than a well-written book.


What I am reading right now:


The Map That Changed the World: William Smith and the Birth of Modern Geology (P.S.) - A book by the author of 'The Professor and the Madman', this is a book about the life and times of the man behind the modern science of geology. So far so good.


The Whiskey Rebels: A Novel (Random House Reader's Circle) - I have already read David Liss' other three historical fiction works, and loved each of them. This one moved away from his previous books, which centered around European Jews, and is set against the backdrop of early America the Whiskey Rebellion. It's excellent so far, and I enjoy the way it's written, trading chapters between the two main characters in the book, whose circumstances bring them closer to an intersection.


Eating in the Dark: America's Experiment with Genetically Engineered Food - This is a so-far reasonably interesting book about the way that genetically engineered food made a sly entrance into our lives and onto the shelves of our grocery stores. There is no denying the bias of the author, but she manages to include some arguments from both sides in this slightly frightening book.


What's in the queue:


All the Pretty Horses (The Border Trilogy, Book 1) - If I like this one as much as 'The Road', then I'll be a happy camper.

An Army at Dawn: The War in North Africa, 1942-1943, Volume One of the Liberation Trilogy - I liked the book about Italy so much I bought the prequel to it.

Wednesday, November 25, 2009

Sarah Palin vs the Spring Framework

Read this brilliant post by my friend Ramsey. His blog is full of such outstanding writing.  Just hilarious reading for any software developer and politics follower.  Well done, Ramsey!

Tuesday, November 24, 2009

Lou Dobbs for President?

Really?  Lou Dobbs?  Gah!!!!

I advise that everyone who likes their life and doesn't want it to get way worse needs to figure out how they can help to keep this from happening.  On the bright side, this guy would actually be accountable for once.  Instead of just spouting off about how everyone else is an idiot, he might have to propose a better idea, and I am NOT talking about building 50 foot high walls on our borders, Mr Dobbs...

Clown.

Thursday, November 19, 2009

When News Really Isn't News

Just some quick snark:

I logged onto CNN today to check and make sure I wasn't missing any catastrophic after three hours of meetings in the morning.  Here is what I was met with:

Nicole Richie has pneumonia
Rift over Wal-Mart checkout scuffle

I can't really say I know much about the business of internet news, but really?  A fight at a Wal-Mart and a b-to-c-list celebrity who has a cold?  What's next?  Reporting the biggest loser competitors have athlete's foot? Not that great.  I think my Facebook feed has more insightful topics than this.  That is all.
 
 

Friday, November 13, 2009

On Public Transit

Today the train was one minute late. I actually felt like maybe I did something wrong because the train wasn't on time. Did I not check the schedule closely enough? Was my watch wrong? Then the train came at 7:20 instead of 7:19. I still got off at 7:46 like always. At some point between Pepsi Center and Belleview, the cosmos righted itself.

To compare, this is what I escaped. To quote, the Metro is:
just one big, damn, anonymous hurry
This article highlights much of what is wrong with the metro, but didn't even get into the DC subway system's frustrating inability to move people from one stop to another reliably. Just another reason I am happy we escaped.

Wednesday, October 14, 2009

Notes on Denver

Here are some initial impressions on my new home city:

1) When you are used to driving in Washington, DC, driving in Denver seems so orderly. There are precious few diagonal streets, no circles to speak of, and no squares. I don't miss Pierre L'Enfant's creation one bit!
2) Traffic here is relative. I was moving at 25-30mph the other day and heard the folks on the radio cite bad traffic where I was. Back in DC, bad traffic meant turn around and go back where you came from. This is not bad.
3) It was 17 degrees here on Saturday. In October. Also, it snowed twice last week. I am not sure it snowed twice last year in DC. All year.
4) There are many delicious Colorado beers. I could spend a great deal of time making my way through all the beers made by Avery, New Belgium, Odell's, Boulder Beer, Breckenridge, etc, and I plan to do so.
5) You have to water your plants approximately 4 times a week here. It's challenging to keep up with this.
6) People here are oddly friendly. We actually went to a Home Depot twice and left both times feeling like we were emerging from an alternate universe where the employees are friendly and helpful, the parking lot tranquil, and the store both organized and not overfull.
7) They close the highways here when it snows. I don't remember too many road closings back in DC when it actually snowed. That almost kept us from getting to the airport this weekend.
8) Sunflower Farmers Market is the greatest grocery store in the history of grocery stores. No matter what you buy, the final bill is no more than $40. So awesome.
9) I suppose that eventually I might take it for granted, but man is it incredible to look out the window while driving and see the Rockies.
10) The light rail here is pleasant to ride. They have a schedule, and the trains come on schedule. It's as different as can be from the Metro in DC - the main similarity is that they are both trains. Past that, you wouldn't really find too many parallels.

More to come.

When Stupid Attacks (.bat file edition)

I'd just like to point out that today I spent about 3 hours trying to write a Windows batch file to do some string replacement. This script is only for developers and development machines. The same script took me seriously less than 5 minutes for Linux. Why so hard on Windows? Because their scripting environment sucks.

But, I stuck it out. I wrote a long and scary script that tried to take into account empty lines, commented lines, and lines that actually stores the properties that I wanted to write. I got something that worked 'mostly', and thought about spending even more time on it when I finally stopped being stupid and decided that I should be using the Windows port of sed. It was one of those times that I just wasn't thinking clearly in my haste to write some code. Just a friendly reminder - if it's hard and feels like a hack, it's probably the wrong thing to do, and there's probably something smarter to do - sometimes you just have to take a step back to do it.

Tuesday, October 6, 2009

Denver!

Well, here I am writing to you from Denver, Colorado. At the start of September, I was unemployed, living with my in-laws in Maryland, doing a lot of odds and ends, but generally spinning my wheels. Fast forward to October. After three days on the road, through rain, wind, and farms, we arrived here in the Rockies.


This is our new house. So far we love it. It's in a great neighborhood close to restaurants and shopping, a couple miles from the light rail, and near a bunch of grocery stores etc. It's kind of empty right now, as we endeavor to spend all of our money filling it with furniture, but so far it's awesome. There are some things that will take getting used to, like having a yard for the first time since high school, which is great, but which requires foreign activities like lawn mowing and hedge trimming. Also, in Denver you have to drink 700 glasses of water every day or else you dry up and turn into dust, which is a decent trade-off compared to humidity. It's also supposed to snow this weekend (IT'S OCTOBER!!!), but in DC it never snows, if you don't count 1.5 inches of ice every other year.

All in all, we are pretty damned excited to get our life here underway. We miss all of our friends and family back east, but we encourage them to visit early and often, but not too early, as we have no guest mattress yet =)

Friday, September 4, 2009

Sad

Ernie Harwell has incurable cancer.

This is awful news. For anyone who counts themselves a rabid baseball fan, Ernie Harwell is a household name. He is a Hall of Fame broadcaster who endeared himself to Tigers fans throughout the years with his 42 years of wonderful play-by-play, captivating stories, and that voice that was made for radio.

I spent many a night listening on the little beat-up Zenith my dad bought when stationed in Korea, as Ernie guided us through the game, never talking too much, never too little, always letting the game and park speak through the radio. My father and I listened most every night to those games. I was allowed to stay up way past my bedtime those nights. Ernie Harwell was a huge part of many of my fondest memories growing up. It's not often that 'celebrity news' really upsets me, but this article definitely caught me.

Every year at the beginning of spring training, Ernie Harwell would open the broadcast with this quote, from Song of Solomon:
For lo, the winter is past, the rain is over and gone; the flowers appear on the earth; the time of the singing of birds is come, and the voice of the turtle is heard in our land.
Thank you for everything, Mr. Harwell. I hope your remaining time here is wonderful as can be, and that you will enjoy all that you deserve after you leave us.

Wednesday, August 26, 2009

How to Spot a Bad Job

As someone who is very recently familiar with working at a terrible place for a terrible person, I have been much more diligent about trying to spot 'TERRIBLE JOBS' by closely reading job descriptions. I recently saw this posting in one of the groups I am a member of on LinkedIn:

SIGNON BONUSES OFFERED!!! $7,000EMPLOYEEREFERRALBONUS!!! FREE 42 INCH HDTV FOR THE FIRST FIVE QUALIFIEDHIRES!!!
Now, the first clue is the endless litany of capital letters. Another hint would be the lack of spaces. We could perhaps attempt to attribute that to the formatting of LinkedIn postings, but it certainly speaks to a lack of detail orientation. Finally, we look past appearances to the meat of the content.

1) Signon bonuses offered
2) $7,000 employee referral bonus
3) Free TV for the first five hires???

This screams a few things to me. One, someone promised the government that some work could get done before having any sort of cohesive plan to staff this project. Two, in this economy if you have to pay a signing bonus and you aren't Google or Apple or Amazon, then your job must really be unattractive. Three, wow, a new TV? Really? Does this company just have some TVs laying around that they want to give away? If so why? Does this not reek of used car salesmanship?

Anyone who responded to this job ad must really not care where they work. If this project is so haphazardly put together that they are throwing money and TVs at the first five people to show up to work, how crazy do you think it will be when you get there! Too crazy, I should think, to have much time left in the evenings to watch your fave program on that big screen tv. Good luck filling those positions.

Tuesday, August 11, 2009

Here We Go

Well, in continuing with my bad blogging, I haven't written much lately. I'm back. Our stuff is in the POD, and it's sitting somewhere in a (hopefully) safe place, waiting to make its journey to Denver. Now we are living with Jena's parents, waiting to make our journey! Coming from someone who could possibly be Arlington, VA's biggest proponent, I can't believe I am leaving the area. I loved growing up here. I loved the diversity, the green spaces, the seasons, and the people that I grew up with. This is the only place I have ever been - the only place I have ever called home.

That's all changing. We are going to Denver, CO, to get away from the East Coast hustle and bustle, to avoid weekend traffic jams, to hike around in the mountains, to be tourists every weekend, and to get a fresh start. It's sad to leave all my friends who remain here in DC, but I trust that they will be visiting our new digs.

Moving is stressful. There are a lot of moving parts to orchestrate, not least of which is actually selling your house. Especially in this market, you have to try to deal with timing a sale of your house with the ability to find a job and a new place to stay at your destination. Once you have actually sold the house, you get new responsibilities, like inventorying your stuff, sorting, packing, closing out accounts, updating addresses, dealing with home inspections, performing repairs, signing papers, etc. Then you have to take all your stuff and fit it in a truck. It's a lot of work. There is a reason that moving falls under 'most stressful life events'. I am a pretty laid back dude, and must admit that I have actually lost sleep over this stuff.

Anyway, a trip last week to Colorado fixed all that. I got a new job out in Denver and found a great new house to rent. Things are looking up. I start working from here next week, the lease is signed, and things are definitely coming together. 30 days from today, Jena and I are going to get in the car and start a crazy journey. I can't wait. Well, I can't wait to do all the stuff that happens after we unpack =).


Thursday, July 2, 2009

Facebook Connect Users Beware!!!

We just ran across a bug that must have been introduced very recently, where all users with new Facebook accounts were unable to access our application when 'connect'-ing their user name to Facebook. It was a weird issue, because I was able to connect my account with no issue. I finally noticed that the Facebook profile ID we were storing was the same across all users who were running up against this issue.

Truncation issue!

We had defined it as a 12-length INT, which really doesn't matter - the biggest value an INT can store in MySQL is 2147483647. Anyhow, updating the table to store the value as a BIGINT fixed the problem, but I can't image we're the only ones to run across this mess, and the FB Connect documentation is weak enough that I have never seen anything about suggested storage. This must have happened in just the last few days, so hopefully others will come across this and make the change proactively if needed.

Wednesday, July 1, 2009

What's That You're Reading?

I've done a fair bit of reading - I finished The Lost City, which was great until the end, which included a hallucination sequence that left me as confused as the afflicted character. Really a poor end to a well-told tale.

I also knocked through The Conscience of a Liberal, by Paul Krugman. I can say that I didn't expect to like or agree with this book, and for the most part I don't. Krugman is obviously a smart guy, and a pretty good writer, but there are certain statements in the book that are just so obviously laced with blind left slant that they seem to erode the general credibility of the message. One such passage describes the potential for vote-rigging and how this means the Republicans could steal elections. Is this not true for Democrats as well?! Anyone been to Chicago lately?? This is a shame, because much of the book is solid and somewhat eye-opening. I must admit to having my view on public health care softened somewhat by his well-written chapter on national health insurance. Overall it was worth my time to read this one.

After that, I read George Pelecanos' 'The Turnaround'. This was another in a long line of dark tales set in the DC area. This one wasn't AS dark as usual, and actually had a pretty happy ending, which was kind of refreshing. This is a good tale about family, responsibility, and moving forward in life by facing the past. I love pretty much all his books, but I particularly enjoyed this one.
I then read James Patterson's '1st to Die', which was a good book. Sometimes I have to read a fluffy mystery thriller here and there, and this fit the bill. I finished it in a couple days. Not great not bad.

On the plane rides to and from SD, I was able to push through another David Baldacci book, Last Man Standing, which was a standard fluffy mystery book. Always enjoyable and fun stories in my opinion.

Finally, on the way back, I read Clay Shirky's 'Here Comes Everybody'. This was a good follow-up to Don Tapscott's 'Wikinomics'. It's about the power of decentralized knowledge, and how the new technological advances have made barriers to entry for previously hard-to-breach industries so much lower. It was a good read, with a little more hard-core sociology to it rather than anecdotal tales that were the basis of Wikinomics. I'll probably check out the Long Tail pretty soon as the final word on this sort of 'new economy' reading.

Who's Got Two Thumbs and Sucks at Blogging Lately

This guy.

Seriously, I have been a terrible blogger. After really hitting my stride earlier in the year, I find myself with less and less to write lately. Part of it is being just plain busy. Part of it is that it's summer and there is more other stuff going on. Part of it is me just being lazy.

Here's something to write about. Going from someone who is strictly a server-side Java developer who is far more comfortable with tools and databases to someone who writes PHP and uses CSS and HTML to create new pages has been interesting, maddening, and definitely a big change. I finally felt like an expert at something (Java Web Development), and wham - back to the beginnings. Obviously the core concepts of software development carry over, but everything else is different. The good news has been that the codebase I am working with is pretty solid and easy to learn. The bad news is that it's still WAY different from what I am used to. It's hard for me to write a blog post about PHP with a straight face - who the hell I am to try to talk about something I am just learning? It has been a humbling experience, but one that I recommend - in order to really understand this web app stuff, you almost have to use different languages and platforms just to stay on top of your game.

I really have been busy - I wasn't lying about that. We have been doing a lot of family stuff (Jena's cousin's daughter's first birthday party, sailing with Jena and her parents), bought fresh herbs, hung out with some friends at a DC United game, and we just got back from a quick trip to San Diego for Jena's friend's baby shower. Check out the pictures. It was my first time in Southern California - it's a beautiful place, with very striking geography and lovely weather. We spent some time exploring the city of San Diego, walking around in La Jolla, and hiking around Torrey Pines. I can say that the view from the dorms at UC-San Diego is probably a little better than the view from Eagle Hall in Harrisonburg, VA - who the hell has a dorm room with a view of the Pacific Ocean!?!? Wow. The shower was great. The parents-to-be and family are extremely excited, and everyone had a wonderful time stuffing their face and watching gifts get opened.

I really hope to get back to technical blog posts - what's heartening is that this sorry little blog still gets dozens of hits each day - it's nice to know that hopefully people are finding this blog and getting an answer to some obscure question they had about something technical.

Thursday, June 18, 2009

MyIEFlashSpace

So, as if it weren't ridiculous enough that I am stuck trying to get Flash widgets to link out of Myspace in IE (seemingly impossible), now this:


This profile is undergoing routine maintenance. We apologize for the inconvenience!

Apparently all the things I did wrong in my past are coming back to haunt me for this one horrible assignment.

Monday, June 1, 2009

The What!

I have been lucky enough to have a couple of great weekends in a row. Last week we spent time with Jena's family, and our crazy nephew William.


We did a harbor cruise in Annapolis (William even got to drive the boat!), had a delicious dinner, woke up, went down to Annapolis for brunch, then spent the rest of the day golfing and chasing after William. While I didn't play too well, the weather was great, and it's always good to hit the links with my awesome in-laws, and Jena's parents' neighbor Bill.


Monday we went and watched Angels and Demons, which I thought was pretty good, and certainly better than the adaptation of the Da Vinci Code, which was a good book and terrible movie in my opinion. We then went over to Archie's house to see everyone, and Jena got to hang out with young Alexander again for the first time in a while.


Then we had a short week of work, and this weekend, watched the Tigers Friday, then woke up early and got a bunch of stuff done around the house before heading out for a great bike ride. Saturday was a beautiful day, and we found a sweet trail from my mom's house down to the trail along the GW Parkway. After we got done riding, we then did a bit of shopping before heading home and making a delicious dinner, including oven-baked onion rings, which were delicious! Then we watched the Tigers bounce back from tough losses Thursday and Friday, as Clete Thomas went yard twice. Yes!

Sunday, we hit the Tigers game at Camden Yards. It was another great day, 80 and sunny. We got some great seats, then took a little stroll around the Inner Harbor. It was nice and breezy, but really didn't smell all that hot. In fact, there were a ton of dead fish floating on the surface and that might have been the stinky source. Makes me fear for the Bay.


We went back to the field and watched Edwin Jackson throw a gem, as the Tigers evened the series with a 3-0 win. It's a great park, and it's always great to check out a Tigers game. They used to come twice a year, and now it's down to once, what with the ridiculous unbalanced scheduling that they do now. Grrrr. Did I mention the fact that Edwin Jackson is awesome? Well he is.

Good times. Great weekend.

Friday, May 8, 2009

Happiness is a Big Cup of Coffee and a Good Book

I always drink lots of coffee. Fortunately for me, I have been reading a fair amount of good books lately, too:

Web 2.0: A Strategy Guide - This one is sort of a handbook for how to do the things that the big web 2.0 sites (Facebook, Flickr, Linkedin) have done, which by itself is not that helpful. It would be like telling a football team to score more than the other team so they can win every game. This book digs a bit deeper and breaks down the recipe for success so you can use the constructs and concepts even if you aren't really competing in a similar space. I think it will be the kind of book I will re-read a few times just to spark my brain every so often. The 'further reading' section is really great. Tons of great follow-on reading for any of the topics make this book worthwhile by themselves.

A Thousand Splendid Suns - Everyone knows about this one. It's the 'highly anticipated follow-up' to the fabulous book The Kite Runner. I found the Kite Runner to be an incredibly well-written story, and I love when books can be good stories while serving as a window into cultures I am unfamiliar with. This book is no different, and if anything, the connection to the characters grows even stronger when reading this book. It's a wonderful story, and a wonderful social history of the female experience in modern-day Afghanistan. Reading this book will make you think a little deeper when you see stories of war being waged against the Taliban on the nightly news. Wonderful book.

The Lost City (Vintage Contemporaries) - This one was sort of a random recommendation by Amazon, and it has turned out to be pretty interesting - the story of a British ex-army drifter trying to find himself in a quest to find a lost city in the Andes. I am a bit more than half way through this one, and it is starting to get interesting. Full ratings to come.

I just started reading Fooled by Randomness: The Hidden Role of Chance in Life and in the Markets by Nassim Nicholas Taleb. The book the Black Swan came highly recommended by my friend Ramsey, but I figured I'd read this one first, just to be wild and crazy. The introduction has already intrigued me. I am excited to really get into this one.

I am still working on The Wealth and Poverty of Nations. I hope that my new longer metro ride will make my transit reading more fruitful. I am also still creaking through my book on the Allied Campaign in Italy, but I am afraid that my progress through that book is as slow as the campaign itself!

I have been on a bit of a book-buying spree lately, spurred by Amazon Gift Cards. Here's what is in the queue:

The Ruin of J. Robert Oppenheimer: And the Birth of the Modern Arms Race - I thought this would be a good follow-up to the biography of him that I read. He's such a brilliant and polarizing character. Jena wonders if I am crazy buying this book since it took me about 9 months to read the giant biography of him. She's probably right, but hey this one is way shorter!

Here Comes Everybody: The Power of Organizing Without Organizations - I have had numerous people suggest this book to me, so I caved. These books are short and hopefully quick reads so even if they aren't profound works of genius, you can usually get a point or two out of them without putting too much effort in.

The Conscience of a Liberal - As a centrist, I thought I would read this one, then read a far-right manifesto. I think this one should be especially interesting considering how fervently I have disagreed with Krugman's take on the banking system plans.

Predictably Irrational: The Hidden Forces That Shape Our Decisions - I thought this would be an interesting follow-up to 'Fooled By Randomness', and Amazon has been especially insistent in continuing to push this towards the top of my book recommendations, so I finally relented.

Thursday, May 7, 2009

Every Now and Then I Get Lightbulbs

I have a good idea (I think). I have run an idea I had this morning by two people whose opinion I trust, and both of them seem to indicate that my idea is good, or at least good in principle, which is good enough for me. I am pretty jazzed about it - I think it will be a good learning opportunity, a fantastic social sciences experiment, and potentially something that could do some good, so I am hoping I can get it right, and that it drives some interest!

More about said idea when my thoughts crystallize a little more, and hopefully some samples as we go...also, things have settled down a bit, so hopefully a lot more blogging in general over the next few weeks.

There Are Really Stupid People...

And they work in the media.

Check that link, watch and listen to the legion of idiots, and then tell me what in the hell is wrong with these people?

Visiting the Grandparents

Well I am back from my trip to Indiana. I went with my mom to go and see her parents, who are a couple of pretty amazing folks. My grandfather just turned 93, and my grandmother is about to turn 91 in a couple of weeks. Let me tell you - they are still going strong! They have been married now for 71 years. That's longer than most people live. I know I have mentioned this before, but I still can't get over it. Every time we go they complain about how they can't do the things that they used to, but they live by themselves still, and with the help of a few pretty great neighbors, get along quite well! I regretfully didn't get any pictures on my trip, but here's a shot of them with my cousin Scott from our trip there for Christmas.

Every night, before they go to bed, they kiss each other five times. It's 'their tradition'. Then grandma tells me that when I am married to Jena for 71 years, we have to have our little traditions too. I think "Gee grandma, if I make 71 years of marriage, I'll be 101 - I don't think that's realistic", but watching them, you can see that if you live well, and love each other, then I suppose anything is possible.

Wednesday, April 22, 2009

New Photos are Up

I finally got the photos from our awesome trip to Italy up on our website. Anyone who wants to look can check em out here. I would post some favorites, but they are kind of my favorite, since it was such an awesome time. Ok, one favorite:

Sunday, April 19, 2009

Like OMG! Google App Engine Supports Java! SHUT UP!!

Ever since last week's announcement that Google App Engine would officially support Java, there have been no less than 2,002,555,1111 blog posts and articles written on the subject. Let this one be the one that says

WHO CARES

Seriously. Who cares? Has ever an announcement caused so much excitement? This is hardly the most exciting thing to happen in the world of software. It's someone announcing that their platform that isn't THAT exciting to begin with supports a hacked version of your language...color me less than exciting. It's neat. It's neat like the Macbook Air is neat. Nobody needs it, and certainly I'd think that nobody needs to drop everything to create a tutorial for how every single framework in the whole world interacts with Google App Engine.

It just seems like there are way better things to talk about. I guess it's shiny thing syndrome, but I just don't see the big deal. Google would probably counter by saying 'hey look at all the people excited about it - there must be something there!'. I say, once the shine comes off of it, a new toy will likely replace the excitement around this.

Wednesday, April 15, 2009

Tip: MySQL and Timestamps as Integers

So, say you managed a legacy project, and on that project, they chose to store timestamps for creation dates in the database. This is quite normal. Now pretend that the timestamp was stored as a TIMESTAMP. Still quite simple. You want to get something after a certain date, just add WHERE CREATED_ON >= '2009-02-01' to get everything February and after. Now imagine that somebody who wrote this application chose instead to store this data as an INTEGER.

This becomes a little more annoying, but not undoable - I had to do a bit of digging in the mysql manual, but here's the query:
select id, first_name, last_name, created_on, as create_date from members where FROM_UNIXTIME( created_on ) >= '2009-02-01';
Hope this helps others out there who suffer from badly designed database maintenance syndrome.

Friday, April 3, 2009

New Homepage is Up

Check out the new and improved kirkandjena.com.


It's no longer one sentence and a link on a white background! I promise that the site will grow and improve as time passes. I have the basic template done, but there is definitely more to add, like bios, resumes, a feed of pictures from our gallery site, etc. I also want to add an 'apps' area that I can use to show off any sort of nerdiness I do in the evenings. This is a start, and not a bad one - it only took me a couple hours last night to do it. Yay for websites!

Thursday, April 2, 2009

Now This is Good News

Dan Steinberg has clued us in to an exciting development at Nationals Park this year. No, the Nats will not be good at baseball, but we will be able to drink delicious beer while we watch mediocre baseball:

Bottles: Budweiser, Bud Light, Miller Genuine Draft, Miller Lite, Coors Light, Bell's Oberon American Wheat Ale, Harpoon Summer Ale.

Draft: Peroni, Dogfish Head 90 Minute IPA, Bell's Kalamazoo Stout, Stone Arrogant Bastard Ale, Southampton Triple Abby Style Ale, Harpoon UFO Hefeweizen, Williamsburg Tavern Brown Ale, Flying Dog Old Scratch Amber Lager.

Thank you Stan Kasten for putting a quality product in my plastic cup, if not on the diamond!

Wednesday, April 1, 2009

What's That You're Listening To?

Before I get to the original point of my post, let me just say that I can't stand April Fools' Day. It's a stupid day. I spend my entire day wondering if things people say to me, or things I read are legitimate. How much time is wasted having to interpret every statement? A lot I think. Multiply that by 300 million people in the U.S., and you have a lot of wasted hours, say nothing of those wacky Canadians! We can't afford this sort of inefficiency with the world economy in such a state.

Here are some things I am not joking about:

I have been wishing and waiting for Postal Service to make another record, since Give Up is one of my favorite albums of all time. I don't know if they are listening, but fortunately we have some other artists out there to fill the void. Thanks to Pandora, I was able to find Owl City and The Blow. Both seem to be awesome upbeat synth-filled goodness that makes me feel like I am listening to really good 80s music without the absurd lyrics.

Other music I am very into right now:

MGMT - Oracular Spectacular
Anything by M83
Kings of Leon - damn they rock it out for shizzle
Sigur Ros - so weird, yet so money

I have also pulled the Pulp Fiction Soundtrack out of the dustbin. Not only does it contain many incredible songs - it also reminds me very vividly about some ridiculously fun times that I had my senior year in high school centered around that movie and the soundtrack.

I wish there was more time in the day, so that I could actually listen to all the music in my collection. In my limited library on my Macbook, I would have to listen for 28 days to get through it all! This is less than half of what I have! Makes me want to take a sabbatical, go sit on a beach with a giant pair of headphones and just close my eyes and listen...for 9 or 10 weeks.

Tuesday, March 31, 2009

Romans, Calendars, Java, and Bad Bugs

Well, I learned today that Java is not smart enough to figure out that if there aren't 31 days in a month, just to go to the last day. Now I may be the last self-respecting Java developer on the planet to figure this out, but if not, here's a tip:

1) use the roll() method to push an element of the date forward, without affecting the other days.
2) Don't instantiate your GregorianCalendar and then just add a month, because if you move to April 31, it automatically becomes May 1. Instead, you can also just create a new Calendar with the day set to 1, and then new month set correctly.

Java, you vex me so. What a terrible bug by me. And without the benefits of unit tests, not something I ever would have found out until we hit a 31st day of a month, or until we reached January and went into February with it's 28 days. Sigh.

Been A While

Well, it's been a few days since I've written, so here goes:

It's SPRING! One of the best things about working in this old dump of a subleased office is the fact that back in the 40s and 50s, the people who built these things used windows that open. So today, as I sit here, my yearly allergies kicking in, I eagerly await Opening Day, the removal of all warm-weather clothing from my closet, and the ability to go for nice runs in the mornings, and long walks in the evenings with Jena. Other things of note that are good about Spring: grilling, drinking beer outside, longer days, and wearing flip-flops.

Not much to note. I had a pretty great weekend, including walks through Georgetown and Eastern Market/Capitol Hill. I got some nerding in, furthering my beliefs that Grails is just too easy. I feel like I am stealing something when it takes me 45 minutes to write a slick messaging tool using a nice jQuery thickbox and a slick ajax post. It's good. In a couple weeks we are heading to our nephew's birthday party. That will be very exciting for us, as we wish we could see them a lot more often.

I finished the second Baldacci book that I was reading, Divine Justice, which was good as usual, and have moved on to Next, by Michael Crichton. I always enjoy his stuff - even if it is a little odd and overblown sometimes, the pages really turn.

In a great piece of news, bad baseball player and all around jerk Gary Sheffield was waived by the Detroit Tigers today. He can take his lack of production, bad baserunning, terrible attitude, and gimpy shoulders elsewhere. Ahh, hopefully now that the Tigers aren't saddled with expectations, they can pull some 2006 magic out of their hats and give me something good to watch.

Friday, March 20, 2009

Struts 2 Error Reporting Tips

As I wrote before, Struts 2 isn't the best framework for error handling or notification. I think for the most part the entire framework is an incredible improvement over Struts 1, which had so many silly moving parts that just made it a genuine pain in the ass to work with. Struts 2 is simple, and I take well to the Action-As-Bean pattern used here. Moreover, it's what we use, so I had to learn to deal with the oddness of it. Since I wrote that post, I have come up with/implemented a couple handy tricks:

1) Display the Error Details on the Error Page

Obviously I didn't invent this, but we weren't doing it yet, so here's what I did:

You will likely create a global error mapping. In the action that you map to, add this code that will trap the error details:

Throwable error = (Throwable) request.getAttribute("javax.servlet.error.exception");

request.setAttribute( "errorCause", error.getCause().toString() );
request.setAttribute( "errorMessage", error.getMessage() );
request.setAttribute( "errorStackTrace", error.getStackTrace() );
Now you can insert a little line into your error page that shows the error, instead of having struts swallow it up forever.

<%= if ( request.getAttribute( "errorMessage" ) != null { %>

-- print out the data --

<% } %>

2) Debug Better

If you get the source code for Struts 2, you can add it to your Eclipse project, and insert a breakpoint in the following piece of code in com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept():

public String intercept(ActionInvocation invocation) throws Exception {
String result;

try {
result = invocation.invoke();
} catch (Exception e) {

/* BREAKPOINT HERE */

if (logEnabled) {
handleLogging(e);
}
List exceptionMappings = invocation.getProxy().getConfig().getExceptionMappings();
String mappedResult = this.findResultFromExceptions(exceptionMappings, e);
if (mappedResult != null) {
result = mappedResult;
publishException(invocation, new ExceptionHolder(e));
} else {
throw e;
}
}

return result;
}
This way you can see if something weird happened inside struts that didn't get reported in the logs. Boom, you can see if there is some mysterious internal error getting thrown, rather than trying to divine it using rain dances and crossed fingers. These two things have really improved my experience with Struts. If I were a better person, I would upgrade to see if it's fixed, and if not, I'd probably add some decent logging.

Bonus Tip

If your application starts up, but you are getting invalid results from your struts action, like the "no result defined for action" message, make sure your source control tool didn't merge incorrectly and add a double mapping for the action. We ran across this recently, where an old mapping was included, and was picked up first. Perhaps there should be a way to tell Struts2 to error out and fail if it finds the same mapping twice in a file? Just something to watch for.

Happy Strutting!

Thursday, March 19, 2009

What's Up!

Some ramblings from my personal life and current affairs:

1) Books

Been reading a lot again lately. I went through a bit of a lull there after our trip to Aruba where I wasn't reading much at all, but now I am back on it. This week I finished a David Baldacci book, Stone Cold. Those are always entertaining, if a bit light on substance. I dove right into the next one in the series, Divine Justice, which is as good as all the others so far, though it's mostly set outside of DC, which is a big part of the reason that I enjoy some of his other books.

I also finished Alive, the story of the survivors of the Andes plane crash in the early 70s, where the survivors were able to last 10 weeks in the mountains by eating the dead passengers. Wow. If you ever think your life is tough, just think to yourself "Well this current work assignment sucks, and I hate traffic, but at least I didn't eat my cousin to stay alive today". Just an amazing story of persistence and togetherness, but at the same time a fair account of personal weakness, and how people can behave (or not) in the face of hopelessness. This book was written quite a while ago, and was made into a movie starring Ethan Hawke, but like most other adaptations, the movie doesn't capture the real spirit of the struggle like the book.

My new metro book is The Wealth and Poverty of Nations, by David Landes. I've had this book on my bookshelf for ten years, but just never got around to reading it. It has been staring at me in its familiar position next to its unread compatriot, Guns, Germs, and Steel, calling out to be read, and I am finally obliging. It is an interesting tale of geography, history, and anthropology, and how they combine to make some societies rich, and some poor. I hope it's as good as it has started out.

2) AIG Bonuses

Lots of talk about AIG bonuses. I would say that any sort of 90% tax is silly. The government has bought up most of the company. Now they are doing all they can to ensure that no competent people will go work there. This means the taxpayers will never recoup their bonuses. If some of the employees there will accept revised bonuses, then good, if not, let them go on their way, but let's not make working for AIG such a poisonous experience that the story will end badly. It doesn't have to - there are still important and viable portions of the company. Everyone just needs to chill out and let this play out without trying to tar and feather a bunch of people who in most cases had nothing to do with the irresponsible financial practices that have killed the company.

3) Where is Spring?

Where is it? It's 50 and cloudy every day. I am ready to go for a run outside and a bike ride, and for leaves on trees. Come on Spring, get your ass in gear!

4) World Baseball Classic

Why is this played? Does it matter? Does anyone really care? I guess it's marginally better than watching your players play in Spring Training, but isn't it basically like watching 23 AAA all star games? I just don't feel it. Side note: my new HD TV makes baseball look sweet, so WBC has that going for it, at least. I just think that all this is doing is penalizing the teams that have lots of good players who play in the classic (see the Tigers, whose 4-5-6 is playing for Venezuela). Bah. Bring on opening day.

5) Travel

We haven't done any. Boo. We are off to Massachusetts next month for our nephew's 2nd birthday, which we are definitely looking forward to! We love our nephew (and Mindy and Jayson too)!

6) Rush Limbaugh

Keep in mind that I am not a 'registered' anything. I vote on the issues, and that generally leaves me squarely in the middle. That said, Rush Limbaugh is just terrible. Is there anything he does that is constructive? It really doesn't seem like it. Seems like he's just a terrible windbag who wants to tear down, tear down, tear down everything that he doesn't think is okay. Easy to snipe when you aren't actually responsible for anything. He should really reconsider wanting to be the leader of the RNC, because then he will be accountable, and that will be new for him.

7) NCAA Championships

God I love college basketball. I love this tournament. I love that Michigan finally made it back in the dance, and I love that Syracuse made a great run in the tournament (6 OTs! WTF!?!) to nab a three seed in a relatively easy region. All I was thinking was "well Syracuse hasn't been announced yet, and we know they are in - what if this ends up as Syracuse-Michigan in a 5-12 matchup?" Could be tough on my marriage! Fortunately nothing came of it. Phew!

Tuesday, March 10, 2009

Consuming RSS Feeds with Groovy/Grails

Building off of my recent post about RSS Feed parsing using the ROME Library, I had an idea for a fun application to build using Grails. The first part of this application, which I'll share when I am done, is the part where we read the feed. Now, the last time I did this in Java, it was pretty easy to do, but man, this is just a little bit better:
    def readFeed( url )
{
def xmlFeed = new XmlParser().parse(url);

def feedList = []

(0..< xmlFeed.channel.item.size()).each {

def item = xmlFeed.channel.item.get(it);
RSSFeed feed = new RSSFeed( item.title.text(), item.link.text(),
item.description.text(), item.pubDate.text() )
feedList << feed
}

feedList
}
Yep, that's it. One line to pull back the feeds. The iterator, and one line to create my RSSFeed object. Then add the feed to a list, and return the list to your controller. In 25 minutes, I have a feed reader application that's basically functional, taking a feed as an input, and returning a page that displays the post title linked to the post, and the posts contents and date. All of life should be this easy.

Monday, March 9, 2009

Read These Now!

My friend Ramsey is a true renaissance man. He is an extremely talented and creative software designer and developer at Blackboard. In addition to having the best sense of humor I have ever seen out of a software engineer, he is also a fine writer - a legitimate writer who gets things published - not to be confused with this blog writer, who just spits out a bunch of junk on a blog periodically and hopes something sticks.

Check out his stories here:

Jimmy's Roadside Cafe
Creature

They are both extremely entertaining and well-written. If you enjoy those, check out Ramsey's blog, Glass Maze. It's full of interesting posts and hilarious takes on everyday stuff.

Congrats Ramsey! Don't forget me when you are famous.

Saturday, March 7, 2009

Garbage Collection, Tomcat, Hibernate, and You

java.lang.OutOfMemoryError: PermGen space

If you are using Sun's Hotspot JVM, maybe you've seen this in your log file, and you don't know what to do. Maybe this will help.

Ever since we upgraded at work from Hibernate 2.1 to 3.2, we have been fighting memory management issues. Some of those can probably be traced back to increased traffic, some probably to odd legacy code that can be refactored pretty easily, and much of it relates to Hibernate and cgLib. There are endless blog posts about this, so if you want to read about the way cgLib, Hibernate, and the Perm region of the JVM heap interact, google away.

To break it down, here's how to know you may run across a problem:
/bin/jps
This will give you a listing of running JVM instances on your machine. Tomcat presents as:
xxxx Bootstrap
this is the JVM pid that you can use to check out memory utilization. Now run the garbage collection util to see what's going on in your heap:
jstat -gcutil
You will be presented with the following:












S0S1EOPYGCYGCTFGCFGCT GCT
0.0031.5860.1357.7699.6626475.19262.1147.306

The measures above give you space utilization in percentage of the regions of the JVM memory space. For a detailed explanation of this, check out the official Sun paper on the topic. For our purposes, we will do a quick overview:

S0 and S1 are both survivor spaces.
E is Eden space.
O is Old space.
P is Perm space.

When an object is created, it lives in Eden space. If it makes it past a garbage collection while still containing an active reference to it, it will move on to Survivor space. From there, if it's still actively referenced, it moves on to Old space. Garbage Collections of Eden and Survivor spaces are not the big garbage collections - the are the Young Garbage Collections (YGC). Once something gets into the Old space, it can only be removed by a Full Garbage Collection (FGC). You can see from the above table that a YGC is not expensive - 2647 of them were performed in a total of 5.192 seconds, while just six full collections take 2.114 seconds. Finally, there is the Perm space. This is where the JVM structures and class objects are put. The classloader sticks stuff here to help you so it doesn't have to constantly load and reload these structures. The problem is that if you have a lot of these things, it's going to just keep sticking things in there until it's full.

There are a couple of ways to combat this issue:
  1. Maybe you haven't increased the default size of the Perm space. You can do that by adding this JVM flag to your startup script: -XX:MaxPermSize=m. To give some perspective, the default is 32m.
  2. Look at your classpath. Are you loading a LOT of libraries in? Do you need them all? Perhaps you can remove some of those libraries.
If you still have problems with Perm space after making the above changes, try these JVM arguments and see if you have any more issues.

-XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
Whereas we were constantly hovering around 99.88% perm space utilization prior to these changes, now we are usually back down around 60%, so an extraordinary event in the system won't trigger an outofmemory situation. Hope this helps.

Why Grails is Sweet

Grails is sweet because you do things that are relatively complex, like upload a photo, resize it, save it, and persist the metadata using this code in a controller class, and nothing more:
        def photo = new Photo(params)
Member m = authenticatedMember()
def myFile = request.getFile( "file" )
def imageTool = new ImageTool()
photo.path = "";
photo.member = m

if(myFile && photo.save())
{
String imagepath = grailsApplication.config.imagePath +
File.separatorChar + "${photo.id}.jpg"
myFile.transferTo(new File(imagepath))

imageTool.load(imagepath)
imageTool.thumbnail(640)

String fixedImagePath = grailsApplication.config.imagePath + File.separatorChar + "${photo.id}-fixed.jpg"
imageTool.writeResult(fixedImagePath, "JPEG")
imageTool.square()
imageTool.swapSource()
photo.path = fixedImagePath
}
Oh by the way, when you define a domain class with a byte array to store a file, then generate the edit/create view, it automatically does all the multipart form submission stuff in the .gsp file. It NEVER gets this easy with Java/JSP. Hmm. Awesome. This is made possible by the innate goodness of grails and a plugin called ImageTools. It makes me dread going back to work and using Java sometimes. Sigh. It's amazing how much you can get done in a short time with this framework, and the more I have a-ha moments with it, the more I think I won't be going back to just Java when I make the switch full time, especially in the knowledge that whether it's Groovy/Grails or JRuby/Rails, I can still fall back on familiar Java libraries. Yessir, this is a good time to be a nerd...