Antwerkz, Inc.
31May/10Off

Saying that Final Goodbye

Posted by admin

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.

Filed under: General Comments Off
14May/10Off

Scripts to Help with GlassFish Development

Posted by admin

GlassFish is a big enough source base that sometimes you just need a little help managing the development lifecycle. Over time I've developed a number of scripts that I use while working on either grizzly or glassfish to help manage the load. After a number of discussions, I've decided to share them in the hopes they will help others, too. Not of all these scripts are really glassfish or grizzly related so you might find them useful in your own projects as well. You can check out these scripts using git from this url: git://kenai.com/schema-doc~git-repo.

There are several scripts but I'll try highlight the more interesting ones. Just a note, though. These are bash scripts that have grown organically for a long time. So they're not necessarily going to be pretty. Some might even consider some of the hoops I've jumped through "stupid." That's fine. I'm not getting a Ph.D. with these. They work and that's enough for me. But anyway.

General Scripts

The first set of scripts that should apply to almost any project.

script description
changed.sh
unknown.sh
These scripts will show you any changed (or unknown) files for whichever VCS you're using. They currently support subversion, mercurial, and git. The git support is new-ish so let me know if something's off
findInJar.sh As the name implies, this script will find every jar in or under the current director and grep for, well, really whatever you tell it. I wrote it with looking for classes in mind but since it just greps the contents, it will find anything that matches. It seems like everyone eventually writes a similar script so maybe this will save some people a little time.
failedTests.sh This script requires that you use maven. It will run mvn surefire-report:report-only and scan for any failed tests. If it finds any, it will use the open command to open the report html in your default browser. It can, optionally, run your tests before looking for failures. If you'd like it to do this, simply pass --run to the script.

GlassFish/Grizzly Related Scripts

Obviously, these scripts will be of little interest to those not working with some aspect of glassfish development. But if you're not, you're probably reading the wrong blog entry anyway. All of these scripts rely on the presence of environment variables. The scripts are set up to check for the variables and prompt you to define them so I won't go into them here. Just be aware that at first you'll have to define a few variable before these scripts will work for you. And these scripts need a UNIXy environment so if you're on Windows, you'll need something like cygwin to make these work. But even then, I've not tried these with cygwin so you might have issues even still. I'll refer to some of these variables by name below, but the script will walk you through what to set to what.

script description
distro.sh This script will build the glassfish distribution bundles. Most of the heavy lifting is really done by maven but this script goes a step further and extracts the "glassfish" distribution of into ${GF_INSTALL}. Executed without parameters, it will build the distro, remove the current install, and unzip the new one. There are 3 options you can pass to this one:

  1. --nobuild: only extract the bundle zip.
  2. --buildonly: just build the bundles. don't extract them.
  3. --clean: have maven clean out the compiled artifacts before building the distributions
devtests.sh This one is really specific. This will run the webtier devtests after reconfiguring the glassfish install in ${GF_INSTALL}. It can be run from anywhere so you don't need to worry about where to launch this one. Once the devtests finish, it will open the test_results.html displaying the results of the tests. This one takes a while to run. There are a lot of tests...
single.sh Similar to devtests.sh, this test will run a single test in the webtier devtests. Just pass it the name of the directory while in v2/appserv-tests/devtests/web and it'll do the rest.
quicklook.sh This script runs the quicklook tests to test your v3 tree. This script takes --debug and will run the quicklook tests using the mvnDebug script.
updateBundle.sh This script compiles the current maven module and copies the resultant jar into your glassfish install. This should work for any glassfish-related project. I use it with grizzly, too, for example.
rebundle.sh This script will scan svn looking for changed files and try to determine the module owning each file. It will then call updateBundle for each of those modules and update your glassfish install. Passing --start will then launch glassfish with your updated code.
startgf.sh
stopgf.sh
These scripts will start/stop glassfish from wherever you may be in the filesystem. Passing --debug will launch glassfish in a debug VM. It will also update your domain.xml such that the launch will pause until you connect to it with a debugger so be aware that things will appear to hang until you do.
tailgf.sh This will tail your glassfish's server.log from wherever you are in the filesystem. If glassfish is not yet running, it will also truncate the logs first.

That about does it. I use these scripts daily and I find them quite useful. Hopefully, you do as well.

Technorati Tags: , ,