Yesterday our cat Jack passed. He was only about a year and a half old.

Jack naps on the back of the
couch.

We got Jack back in February of last year after Jenn’s cat, Semper, died just before Christmas 2006. He was a Siamese-Tabby mix with beautiful blue eyes that always said “I’m innocent!” even after he got into trouble.

He was a wild man and a lot of fun. While most cats will have their “wild half-hour” in the evening, Jack had more of a “sleeping half-hour” and was a maniac the rest of the time. We named him Jack after the character Jack Bauer on 24, because Jack Bauer’s always “gone rogue” on the show, and this little guy was rogue all the time. He never got tired of playing - to the point where he’d get so tired he’d pant like a dog with his tongue out (which isn’t normal for a cat) but still wouldn’t stop running around. The above picture was one of his few calm moments from around a year ago.

He loved rubbing his little rubbery cat lips against your nose. He also liked to lick your nose, which got to be sort of a game where you’d pick him up and tell him to “pay the toll” and he’d reluctantly lick your nose after some cajoling. He loved being chased around the house. He loved running through this “cat racket tunnel” we have in the living room (and, boy, would he make a racket!). He loved tormenting the other cat we have, Xev. He loved hiding under your legs if you were sitting on the floor (sort of a “cat fort”). So playful and loving.

He was sort of a destructive little beast, too. He’d chew anything he wasn’t supposed to - shoelaces, cords, you name it. There’s a spot on the couch where he would “clean the couch” by licking it and the couch is just destroyed right there. He’d chew (or eat) anything he wasn’t supposed to… but really had no interest in your food, just your hair/shoelaces/clothing.

In the last few months of his life, he started puking on a weekly basis (we called him “Rain Man” because he’d only puke on Sundays and only on the carpet) and it looked like he might have a food allergy or inflammatory bowel disease (both of which are common). He also started peeing in places he shouldn’t, but after taking him to the vet we found the two behaviors were unrelated - he might have something causing him to puke, but he was peeing (not marking, just peeing) just to be a jerk and assert himself.

We took him in to a high-end referral center yesterday to get him endoscoped and find out for sure what was causing him to puke so we could treat the right thing - whether he had eaten something he shouldn’t have (not surprising) or whether it was IBD.

At the center they checked him in and gave him a mild pre-op sedative in preparation for the full anaesthetic. They also put in his IV and a technician put him into his cage. Jack started “burrowing” under a towel in his cage, so the tech - still standing right there - sent another tech to get a nice fleece blanket for him. Before the other tech could return with the blanket, the first tech noticed Jack had collapsed and was lying in an odd position. They immediately got the doctor and saw that Jack’s heart was down to 20bpm. They started some emergency procedures and gave him some drugs to get his heart rate back up but he never really recovered - he started bleeding from the mouth and his heart stopped shortly after that. They tried CPR on him for 10 minutes but were unable to revive him.

The doctor, who is very highly rated, was absolutely stumped. There was no reason for him to collapse, no reason for this to happen. They were so stumped, they offered to do an autopsy for free to find out what happened and make sure this doesn’t happen to other pets. We took them up on it and preliminary results literally didn’t find anything. He looked like he had IBD (as we suspected), but no one knows where the blood came from that was draining from his mouth. Some tissue samples have been sent off to the lab for analysis, but this really was a freak occurrence. (Update: It looks like Jack died of epinephrine reversal.)

It was totally unexpected and we don’t blame the doctor or the facility. Of all the patients they had in that day, Jack was the one they were least worried about because he totally checked out as healthy. It’s just an unfortunate circumstance that’s thrown our little world into disarray.

Jack was a very sweet boy. If you met him, you loved him instantly, even if you weren’t a cat person. We had a lot of fun together and we were looking forward to many more years of fun with that wild little boy that now will never be seen.

I’m sorry we didn’t get to spend that time together, Jackal-boy. We’ll miss you and we love you.

GeekSpeak, net comments edit

Typemock
ExpertI am fortunate enough to have been named a Typemock Expert.

What does that mean? In their words…

Typemock Experts are independent developers, architects, trainers, and other professionals who provide a vital link between Typemock and the developers’ community. They write books, articles or blogs on a wide range of topics, from pragmatic unit testing to development methodologies.

Thanks, Typemock! (And if you’re not in the Typemock community yet, what are you waiting for?)

It was a three-day weekend for Jenn and I this past Memorial Day weekend, so let’s see how we fared…

Saturday we ran around and did errands. The big Saturday errand was that I moved off the corporate cell phone plan and onto a family plan with Jenn on Verizon Wireless. I was tired of carrying a phone and a PDA (and an iPod, and all the other junk in my pockets) so I got a BlackBerry Curve to at least consolidate the phone and PDA into one device. So far I like it quite a bit, but it’s definitely taking some getting used to, and setting it up for personal use is not nearly documented so well as setting it up for enterprise use. When I get all of the kinks worked out, I’ll blog my recommendations.

Sunday I met up with a friend of mine who I hadn’t seen in probably five years. He was down from Seattle with his family and it was great to catch up. There was a bit of a scheduling problem getting on the same page as to when we were meeting up, resulting in Jenn and I stuck in a holding pattern at home, trying to connect but not really able to start anything or go anywhere lest we miss the connection. Hopefully we’ll be able to iron that out a little better for next time. He did come bearing gifts, though: autographed Bruce Campbell books. Can’t beat that!

Monday morning we did all the stuff around the house that we didn’t fit in on Sunday and then joined up with some of our friends for dinner, gaming, and a movie at their place. We played some ping pong (which included in-play hazards in the form of their cat attacking the ball) and Ticket to Ride Europe, then watched National Treasure 2. Not really sure if NT2 was good or not because there was a lot going on… and for the first third or so of the movie the aspect ratio on the TV was messed up and gave me a headache so I couldn’t really watch. Regardless, good times.

This morning I am ridiculously exhausted. I slept like crap and I’m way behind on my current project due to some unforeseen meetings and things. Muscling through, but I gotta say I could really use a nap.

net comments edit

In this Two Minute WF, we’ll talk about Core Services.

When the WorkflowRuntime is hosting your WorkflowInstance, there are certain things going on to help manage the environment the WorkflowInstance is running in. These runtime-level, globally accessible services are the Core Services. There are four Core Services:

  • Scheduler: This is responsible for managing the threads used to run workflow instances. The default scheduler service implementation used if you don’t specify otherwise is the DefaultWorkflowSchedulerService. If you’re hosting your workflows in an environment with specific threading requirements (like within an ASP.NET application), you’ll need to change the scheduler.
  • Persistence: This is responsible for saving and restoring workflow instance state. For example, you may have a long-running workflow (maybe minutes, maybe days) and you don’t want it in memory that whole time - this service saves the state when the workflow instance becomes idle and re-hydrates the instance when it’s time to resume. There is no default implementation of persistence, but a SqlWorkflowPersistenceService is available out-of-the-box.
  • Tracking: This service helps in monitoring workflow instance progress. Very helpful in troubleshooting and tracing workflow instances for auditing and management. There is no default implementation of tracking, but a SqlTrackingService is available.
  • Commit Work Batch: This service manages the transactions around batched work. For example, if you have several activities in a workflow that need to succeed or fail as an atom, they’ll participate in a work batch. If you don’t specify otherwise, the DefaultWorkflowCommitWorkBatchService will be used.

You can only have one of each of these services (except tracking - you can have multiple tracking services) per runtime.

The beauty of the way WF was written is that you can create your own custom implementations of any of these services and instruct the WorkflowRuntime to use them. For example, if you wanted to create a persistence service that stores all of your workflow states in XML files in the filesystem, you could do that. Or if you had a special way you wanted to track workflow instance events, like in a proprietary logging system, you could implement your own tracking service.