Saying that Final Goodbye
I'd never been in the room when someone died. Yet for the last week, we'd all been waiting for, and dreading that fateful moment. With my father stretched out on the bed, tubes streaming from his withered form, we huddled together and waited for the end. An end all the more bitter for its prematurity. We'd all thought we'd have more time together.
My father was, by all accounts, in very good shape. At 60 years of age, he exercised more than most people I knew: running, sit-ups, push-ups, etc. He worked on his cars himself. Reroofed his house basically single-handedly. Built his own garage. He did it all himself with only slight grumbling about his knuckles hurting from when he'd tried to punch through a board in karate class some years prior. The man was busy. Then ... he had trouble swallowing one day.
"It's cancer," the doctor told my mom and dad. My dad's response, as I am told, was to turn Mom and, "I'm sorry." That's the kind of man he was: so worried about being a burden that he apologized to his wife. For having cancer. I'm sure there was more to it. He had to have known that this was essentially a death sentence. More and more people fight and beat cancer these days. But not as many as we would like. Not even close.
With little else to do but get on with it, Dad started rounds of chemo. Chemo, being chemo, was going "ok." Hair came out. Weight came off. Appetites disappeared. But he remained in good spirits. At least, as far as he showed us. Knowing the course this cancer would probably take, we decided at the last minute to fly back to Oklahoma to spend his birthday with him. We couldn't be back there for Christmas (we had family coming to see us for a change) and knew that by then he might be too sick and weak to really enjoy his grandchildren. So we went. It was, all things considered, a great visit. The kids enjoyed seeing Grandpa Lee and Grandma Lee. My parents had fun with the girls. We took lots of pictures. It was one of the last times I heard his voice. It was the last time I saw him on his feet.
We flew back to Brooklyn and continued on with our lives. I tried to check in weekly with Mom and see how things were. I talked to Dad occasionally but mostly talked to Mom. Some weeks he was doing pretty well; others, he couldn't eat too much. Some weeks he seemed to improve and others … not so much. Thanksgiving came and went. He couldn't eat too much. Wasn't terribly interested. On December 10, he went in to the hospital for the last time.
He'd had trouble swallowing and had Mom call the doctor. The doctors looked him over and found more cancer. It was here, It was there. They needed to operate. The doctors tried valiantly. I can find neither fault nor blame with their efforts. They were fighting a losing battle. But they tried their damnedest. All through this, I would check in with Mom. "Should I come?" "I'm not sure. Do what you think is best." She was so gracious with me in all this. I wanted to be with them but I had work and kids and such. What I ultimately wanted was to be with Dad at the end and be with Mom. But trying to time that long distance is as quixotic as trying to time the stock market. We would just have to wait and see how things went.
Christmas came. "Should I come now?" "You have your family and your kids. Stay with them. Enjoy your Christmas. We can see what happens in a few days." It was getting harder and harder to not be there. I could hear him in the background grumbling and complaining. He wasn't entirely coherent all the time. The pain medicine was taking most of that away. But he had his moments. He knew he had family around him. Christmas, it turns out, would've been a horrible time to travel there. My siblings, a mere 20 minutes away, couldn't even make it to the hospital. Snow and ice shut down much of the state. So I stayed in NY. I enjoyed Christmas with my wife and kids. With my wife's sister and her husband. I had fun. I kept thinking of Dad.
Every time my phone would ring, I would go in to near seizures trying to get to it. Was this it? Is this The Call? Then it came. "If you want to see him one last time, you probably should come now. He's … not doing so well." I booked a flight and that Tuesday I flew down. Without being too dramatic about it, it felt like a storyline out of a movie: Will I get there to find he passed away while I was in the air? Every little delay was agonizing but there was nothing to do about it but ride it out.
When I finally arrived, the worst had almost happened. After a reasonably routine procedure to remove a line, he (almost?) crashed. They'd had to put him on life support or he *would* have died while I was in the air. He was still with us. But he couldn't speak. He couldn't, for the most part, respond to any stimulus whatsoever. Apart from groans he would utter over the next week, I would never his voice again.
The waiting game began. He was getting food and oxygen from bags and tubes and machines. He would from time to time roll his head when we went in to see him. His eyes would roll around glassily only to snap into hard focus as if he had found some reserves deep inside for one brief moment.
For the next week, I lived in the hospital with my mom. We stayed in the ICU waiting room and we, well, waited. We talked about this and that: what's to come, the sadness we were feeling, whatever stupid show was on TV. We made friends with another family who was there with their loved one. We laughed together. We shared stories, jokes, and sorrow. At times we felt guilty having such a good time with my father dying just through those doors. But we never would've made it without that family. Life isn't all jokes and laughter but neither is death all sorrow and pain. We gave and received a measure comfort in our unexpectedly shared time of sorrow and worry. It was probably the sweetest, most heartbreaking week of my life. And it shared with strangers turned new friends.
We spent the nights at the hospital. Mom had been there for three weeks already. I'd missed enough already that I had no desire to leave. I could've slept on a real bed only 20 minutes away but I couldn't bear the thought of being away anymore. It was my turn. Mom wasn't leaving. Neither was I. Oh, I left once or twice for food. I walked down the hall to grab coffee sometimes with, sometime without, company. But we were there. We weren't going anywhere. Mostly we ate in the cafeteria there. Sometimes it was most or all of us siblings and Mom. Sometimes it was just me and Mom. We talked about more about the next steps. We knew it couldn't be too much longer.
Finally, we all came to the question we'd been putting off: What to do about life support? We all knew there's no way Dad would want to be kept alive by mechanical means. Truth be told, there wasn't really anything left for him to hold on for. He was on life support for various reasons unrelated to his cancer. But that cancer had done far more damage than we'd thought. He had weeks at most left. There was no hope of recovery. He would never leave that hospital again.
With the dawn of realization washing over of what we were talking about, we decided to remove his feeding tube and let nature take its course. We signed the papers. We talked to the doctors. We went in to say goodbye. We held his hands. Told him we loved him. Kissed his forehead. Then we all stepped back and let the tech do his job. In minutes it was done. The feeding tubes and the oxygen tubes were out. And despite all expectation, he held on. We moved him to a hospital room and began the wait once again.
He lasted only handful days more. He'd moan and grunt as who knows what was going on for him. He was all but unresponsive to us. But we were there. Holding his hand. He'd gasp for air as hard as he could and then suddenly he'd stop. Desperately watching his pulse throb in his throat, we'd hold our breaths. Seconds would pass and finally one of us would call out, "Dad?" A slight pause and suddenly he'd draw another ragged breath and settle back down.
Days like this passed. Until finally on January 4, he drew his last breath. I watched as his throat ceased to throb and no amount of calling his name would bring that next breath. Mercifully, painfully, his suffering was over. The nurses and and doctors came in to do their jobs as unobtrusively and respectfully as they could. But it was worrying and the wondering were over. It was time to grive. After some time, we all started making phone calls: me to my family still here in Brooklyn, others to various friends, loved ones, or church members.
We buried my dad a few days later on a frigid Oklahoma winter's day. The little country church my family has attended since I was a child was packed with more people than I can ever remember seeing in it. My father was a Marine Corps veteran of the Viet Nam War. He didn't talk much about it preferring to try to forget it as much as possible. He'd talk about it from time to time but there were too many painful memories for him. So much so that he'd leave a graveside service where Taps was played; the grief was just too much. So we didn't have Taps played at his funeral as much as I would have loved to have honored him that way. But the Marines did send out two soldiers whose sole duty that day was to deliver some of the saddest, most reverent words I know:
On behalf of the President of the United States, the Commandant of the Marine Corps, and a grateful nation, please accept this flag as a symbol of our appreciation for your loved one's service to Country and Corps.
Five months it's been now. I feel fine most days. But occasionally something will trigger an especially poignant remembrance of him. This weekend as the trailer for the new Tron movie started, I began to cry in the middle of the darkened movie theater. My dad would have loved that movie. There's so much he would've loved to have seen. But he's gone now and I can only remember the man as best I can. And what I remember is that he loved his family more than his own life. And I remember that I love him. And that loss hurts like hell.
The Kindle is Here!
I finally broke down and bought a Kindle. I've been eyeballing them since the first one came out and have been daydreaming about them since the Kindle 2 pics first leaked. After reading countless previews and reviews and raves and rants, I decided it was time. Sure, it's expensive. Yeah, it's "only a single function device." blahblahblah. The fact is I love to read, I live in a NYC apartment, and I already have an entire wall devoted to bookshelves crammed full of my books. There's just not that much space here to keep buying more and more books. Any my library hardly ever has what I want on the shelf. When they have it at all, there's a waiting list. So this makes a lot of sense for me in a number of ways. I've had it for about an hour now so I don't have any deep dive experience with it as such, but as far as first impressions go, it's a big win. And the first thing I did after browsing through the user's guide? I bought Brandon Sanderson's latest book "The Hero of the Ages." Now if only I didn't have to work.
Being a good citizen?
The choice of build tools is surprisingly contentious. I know I, personally, am not a huge maven fan. I've been given to explosive, vitriolic rants against it, actually. But now I'm forced to use it at work so I'm learning it more than I'd hoped to ever have to.
But whatever your choice of build tool is, there's one thing I think should happen that would help out so many people. If you write some form of library to be reused by the world at large, it should get published in the maven repos. Or maybe an ivy repo(s) if there are such centralized/public beasts. Making it easy to find these artifacts will only help to drive adoption of a project.
Whether you chose maven or ant at that point (or something else...), it becomes quite simple to find and fetch dependencies. I use the ant tasks from the maven project to pull down my deps and then ant to build. It works well enough for me until I run into a library that hasn't been published to a repository somewhere. Some projects are really good about publishing their artifacts. Other projects' devs respond with simple "not my problem" responses. If I can't find a dependency in maven, I'm much more likely to try to find another library to use. So uploading an artifact may not be your problem, but it's certainly not mine. It's a good way to drive people like me to other projects, though. But maybe you don't care about that, either.
Migrating from Subversion to Mercurial
I recently moved the bot we use in freenode ##java from svn to hg. Using hg's built in conversion utilities, this process isn't bad at all. There are a number of steps to set things up, however, some of which aren't entirely as clear as they probably could be. It would appear that hg's conversion routines don't like https-based svn repos so I wrote up a quick script to help my brother move a project of his to kenai and thought I'd share it here. The heavy lifting in this script comes almost verbatim from hg convert page but hopefully this is a bit more accessible.
then
echo "usage: $0
exit
fi
if [ -z "`grep hgext.convert ~/.hgrc`" ]
then
echo Enabling the conversion extension
echo "[extensions]" >> ~/.hgrc
echo "hgext.convert=" >> ~/.hgrc
fi
URL=$1
DEST=mirror-svn
HGDEST=mirror-hg
if [ -d "${DEST}" -o -d "${HGDEST}" ]
then
echo "${DEST} or ${HGDEST} already exist. Please try working in another directory"
exit
fi
svnadmin create ${DEST}
echo '#!/bin/sh' > ${DEST}/hooks/pre-revprop-change
chmod +x ${DEST}/hooks/pre-revprop-change
svnsync init file://`pwd`/${DEST} ${URL}
svnsync sync file://`pwd`/${DEST}
mkdir ${HGDEST}
hg init ${HGDEST}
hg convert file://`pwd`/${DEST} ${HGDEST}
As you can see, it's pretty straightforward. I ended up using svnsync to get aroung the hg/https/svn problem. It also makes the conversion much faster. Once the script is done you can cd into mirror-hg and hg push it wherever you'd like. There are some options you can do during the conversion like limiting which revisions get converted and mapping usernames and the like. I've done nothing of the sort here but those shouldn't be too hard to add. And if you're really that interested in those options then you should be fully capapable of doing that yourself.
Also note, that if you don't need to use svnsync you can skip directly to the hg convert line (well, and the init right before it...) and hg will pull directly from the repository to do its conversion.
There it is. It's not fancy or earth shattering but hopefully it'll help save you some heartburn. As always, feedback is welcome.
As if I need help…
As if I didn't neglect this blog enough as it is, I know have another outlet: my Sun blog. That's right. I'm now a Sun employee and member of the GlassFish webtier team. You can see a brief run down of what that'll look like at the new blog. I'll probably keep the non-Sun related things off that of that blog and post them here (because I have a great track record of blogging regularly after all). I also have a new twitter feed that will hopefully help fix some of my blogging exhaustion.
Maybe it's because I rant to my imaginary (what my wife calls my online) friends, but I can never sit down long enough to type up a blog post. Maybe I just over think my posts. I don't know. I find it hard to finish them these days. They never come out right. But with twitter, I can blast out the thought and move on. I've avoided twitter for a while now, but I guess it's better than nothing. So, anyway, there are now two new venues where you can hang on my every word. And I know you want to. There's no shame in that...
The JasperReports book lives!
Thanks to all those who replied. The survey convinced the publisher that there was indeed sufficient interest, so we'll keep plugging away on the book. We're having to do a little restructuring due to some logistic issues on the back end, but we hope to have the book finished by December, to print by January, and on shelves by JavaOne. Of course, those are "just deadlines" and things like this tend to slip, but we're going to give it our best shot. Thanks again to all who replied. Check back here and on Manning's site as the day approaches for updates.
Does JasperReports need a good book?
I'm in discussion with a publisher on a book about JasperReports and there's some question of whether there's still a market for the book. So my question to you is, would you buy a good book on JasperReports, or do you think the existing documentation is adequate? Do you think JasperReports needs a good book? Please vote in the poll below and leave any comments you may have explaining why or why not. Work on the book has been under way for some time now but there have been delays for various reasons and we feel we need to reevaluate its marketability. Your feedback would help very much.
The Tesla Testament
This summer I had the opportunity to read an advance copy of "The Tesla Testament". The book is an action/thriller built around the works of Tesla. I don't read much in this genre. I spend most of time in the fantasy and science fiction aisles, personally, so it took me a little while to get into the book. I had the poor planning of reading this book concurrently with Alastair Reynolds so switching between the writing styles was a little jarring. Once I got past that, however, I found the book enjoyable. The technical details (at least the stuff that I know personally) was correct enough to not get in the way. I hate it when authors mangle a topic just to make things fit in the story.
The action was good also. Eugene has some experience with many of the elements used in crafting the action scenes (especially the hand-to-hand combat) so the scenes felt more real than some I've read. The action picks up pretty quickly at the beginning of the book and doesn't really let up until the end. The feel of the book feels very much like "The Bourne Legacy" which I read immediately following "The Tesla Testament." Whether that's good or bad is probably a matter of taste but Eugene manages to match an experienced author with his first novel which is no small feat.
So if you like action books, I think you'll enjoy this one. The combination of technical, combat, and historical elements makes for an interesting read at the least. It's an interesting "what if" story that's nothing if not entertaining.
Denver JUG Recap
Well, after months of trying to schedule and the last few frantic days of finishing up the slides, the Wicket presention is finally done. Overall, I'm pleased with how it went. There were no technical glitches to contend with which is always a concern going in to things like that. Once I finished writing the slides and going through the presentation it hit me how much info I was packing into it. Given that I only had an hour, next time I would change a few things about it. I'd drop a few of the slides so I could get to more code. There are slides with code on them but I think it's easier to understand in context. So I went longer in the slides than I wanted and didn't get to the code I was hoping to show.
The presentation itself went swimmingly as far as that goes, but I really wanted to show some code. Maybe next time, though. I'm putting a PDF of the slides up for those interested in seeing them again. Check the main page or click here to download them.
The Echo2 presentation was fascinating. I'm going to have to play with that one but it looks pretty nice from where I'm sitting. I'm not sure it'll replace wicket (or struts or JSF) in my toolbox, but for certain types of applications it certainly looks appealing. We also had a special guest with us. There was a very nice lady visiting us from Microsoft who was, of course, pitching MS products over beer. So we call had a few chuckles over that and had some beers together. It was strange at first to hear that a MS was at a JUG but she's really friendly and bought the first round of beers so it's all good. Overall, it was a great night. If you missed this month's meeting, you really missed out.
New Website Design
It's been on my list for a while, but I finally updated the main site design. I've been looking around for ideas and finally found one I liked over at OSWD. I was looking at several possibilities with landscapes of some sort but I really liked the mountains in this one. Since I can see the Rockie Mountains from my window here, I thought the association was rather appropriate. I hope you like the new design as much as I do. Because, either way, I'm not going to touch it again for a while.