Jun19

Damn! It's Hot. What's That Noise?

Yesterday, it was unbearably hot and humid well into the evening. It was one of those stifling Maryland summer evenings that you can actually call sultry with a straight face.
 
My only salvation was that I spent most of the evening in our marginally cooler basement installing an electrical sub panel [with the help of a licensed electrician, of course]. I'll have pictures of that endeavor later today, but that isn't really the point of this post.
 
For some strange reason, I felt very unwell. Maybe it was the heat. Maybe it was poor ventilation combined with the fumes from the construction adhesive I used to help hold the framing against the stones on the basement wall. Maybe it was mold spores, now freed from their crypt and massing in force to retake the rest of the basement. Maybe it was what I had for lunch.
 
Around 10pm I sat down and had two beers and did my best to enjoy some TV. It's very difficult to enjoy a plasma TV in the 90+ degree heat of the oven living room. But, it is even more difficult if your children have bypassed all of the recent recording sessions on your DVR so they can continue to watch Foster's Home for Imaginary Friends, leaving you nothing to watch that is worth seeing.
 
The strangeness begins within only an hour or so. I watched some 60 Minutes and then started feeling so tired that I had to go upstairs and lay on my back. My breathing was very labored. I stayed awake talking to my 11 year old son for about another 45 minutes or so.
 
Then the fever kicked in. Alara couldn't find the thermometer and when she did it had no batteries, but it felt like about 100-101. My sinuses filled up with concrete and my throat began to swell so it was difficult to swallow. I avoided taking any Sudafed, since I'd been drinking. She gave me two ibuprophen and some water and I passed out into what was more like delirium laced coma than sleep.
 
At some point in the middle of the night, James comes home and Marches Eric up the stairs. It is close to 3am at this point I think; James usually gets home at 2:30. Eric was up in the middle of the night playing video games - again. We had already taken all of the Wii and XBox games away from him for the night, so he’d fallen back on the PS2. Too tired to yell at him, I told him he’d lost all his games for the rest of the week and then passed out again.
 
Then there was this horrible noise. What time was it - 4, maybe 5 o’clock? There was a screeching, howling, wailing without end or break coming from downstairs. It was too quiet to be a cat, and too loud to be a cat playing with a mouse. Could that be a rat? We had put glue traps in the basement a few weeks ago. But, good God, it was like a fire alarm, a klaxon call. I just couldn’t see how such a small animal could make that much noise.
 
I listened further, not wanting to put my clothes on and half afraid of what I might find in the kitchen if I went down there. I jostled Alara and asked her to investigate, but she refused too – said she was nursing the baby. To be honest, I don’t blame her.
 
This went on for a few minutes. There was what sounded like it could have been the basement door and then the outside door. The sound faded a little, but I could still hear its shrieking, then a low rumple of activity out in the yard, then - finally - silence.
 
In the morning, I came to find out that James had carried the rat, still fixed to the glue trap and hysterical, up the basement stairs into the kitchen. Then, I guess he went and got on his shoes, came back and took the rat outside. Had it been me, I would’ve dropped the whole thing into a plastic bag and let the damned animal suffocate quietly. James, however, decided it was best to beat the rat into unconsciousness with a 2 by 4.
 
You know, had I been right there next to that awful sound, I think I might’ve done exactly that, too. I shudder at the very thought, and I’m so glad that I was not there to watch this. Even James himself said he would rather have left the dirty deed to us if we’d been awake.
 
And so ends the tail of the rat. Wait - no. That’s an awful pun. Ugh.
 
Let’s just hope that is the only one who’s found his way into our home. I guess it’s time to put some poison bait and box traps out with the garbage cans.
 
Update: I talked to James yesterday about his late night adventure. He tells me that the rat actually came down through a small hole in the kitchen ceiling and landed directly on a glue trap that had been cleverly placed on the pantry shelf beneath it. It then apparently fell onto the kitchen floor, where it began wailing and trying to walk across the floor using its front teeth. James came upstairs and, being reluctant to try and lift a live rat, kicked the rat-trap combo across the floor onto the side porch and out the side door of the house. He then found a 2x4 in the pile of construction trash. (Since some people ahve asked, yes, it probably had some nails in it.) We asked him if he used the "pile driver" or the "baseball bat" method to do the dirty deed, and he informs us it was the latter - twice for good measure. The rat is now resting comfortably in the garbage that we forgot to take to the curb yesterday. James is looking for a therapist to help him deal with the experience, and has developed a newfound appreciation for what soldiers suffer during wartime.
Published: Jun-19-07 | 0  Comment | 0  Link to this post

Jun18

Breaking the Mold

We hadn't been in our basement for a while, even though my friend James lives down there - or maybe because of it. Recently, after finishing the basement door, we went down there to clean up a real mess in the front part where there's the huge pile of unexcavated dirt. The cats had been using it as a gigantic litter box for nearly a year. In the end, cleanup meant bagging and carrying out as many as ten bags of dirt. While we were down there, I was reminded of the little wooden closet (about 3' by 6') in the back of the basement beneath our side porch. It's a little wooden box of OSB with a cheap door that we had decided not to demolish when we demoed the "finished" basement two years ago.

 

In retrospect, not destroying the closet was a mistake. I think I have been heavily influenced by Mike Holmes from Holmes on Homes. In a recent episode, he was working with a family who had leaky windows and mold in their walls. Though we didn't know that there were moisture and mold problems in this closet at the time we did the rest of the basement, we missed an opportunity to uncover the problem.

 

The issue here was two-fold. Firstly, the closet was poorly constructed in the first place. It was made with 2x3s and OSB, with the bare wood placed directly against the flagstone foundation and floor. Since the floor of our basement is earth, there was a reasonable chance that the wood here was laid down directly on DIRT. As if this was not enough, it seems as though the pipe that runs to the garden hose hookup outside had begun to leak, and the previous owners solved this problem by turning it off at the valve inside the house. Being very forgetful people, we have a tendency to forget to do this. As a result, the ground near the porch tends to saturate with water, especially in the summer when the garden hose is most used.

 

It didn't take long for it to get bad, but because it had a door, we left the closet mostly unused and ignored for two summers. The funny thing is that we weren't really using it, which was our rationale for not demolishing it in the first place. All the while, the mold continued to grow.

 

Now, there was no way for us to know for sure that the mold in the basement was affecting our family. We didn't do any kind of air quality test or spore count. Such tests exist, but I don't personally believe they are worthwhile if you don't have the money for professional mold mitigation. Until recently, we have had bigger fish to fry: lead abatement, electrical problems, rooms without walls and ceilings, an aborted project to finish our attic space, etc, etc, etc.

 

But, slowly it has started to sink in to my little brain that we might be hurt from this problem in serious ways. Each spring since we bought the house in 2005, I have suffered from great difficulty breathing that feels like a kind of bronchitis. The first year, I had assumed that I was sick. The second spring, I believed it was the long term effect of plaster dust from demolition - a perfectly reasonable and possibly partially correct belief. This past spring, I was really starting to wonder, since I hadn't done any work in a while on account of being ill and tired much of the time.

 

Here is a list of some of the symptoms we experienced that correspond to the symptoms of mold contamination.

 

·                     Otherwise normally healthy inhabitants are ill unusually often or for long periods of time (months instead of weeks).

·                     People have difficulty breathing, severe allergy, asthma, or bronchitis like symptoms.

·                     Symptoms are worst on damp or rainy days.

 

Whatever the risk, it seemed reasonable to think that we were not dealing with any "toxic" mold or else things would have been much worse. Given that we were already suffering from whatever was growing there, I decided the best thing would be to get it out of our house as fast as possible.

 

Firstly, I will say that I would never try this in the wintertime. We have decent ventilation and a couple of HEPA vacuums, but there is a significant risk that if you carry moldy stuff through your living area, you'll just make the problem worse - at least in the short run. Our strategy for dealing with this was not great - put everything we could into contractor bags before carrying it up, carry everything else out quickly and carefully, and ventilate and vacuum diligently. If I had been more concerned with what I saw, I might've put up a vapor barrier between the passageway out of our house and the living room, but as it happens it didn't seem to be too necessary. In the final analysis we were probably just taking unnecessary chances and got lucky.

 

So, Saturday was entirely consumed by demolition. I can only be thankful that the closet was so shoddily built; it made for a far easier destruction. To keep the risk to the family low, I was the only one working in the enclosed space. We couldn't find the respirator, so I had to make due with a dust mask - not good.

 

So what did my destruction reveal? Well, firstly, the flagstone foundation walls to our house are maybe 3 feet thick or more. This was our first peek at the full width of the foundation and eases my mind about the crumbling mortar I have seen between the stones; they aren't going anywhere in a hurry. Second, the back of the closet is dug all the way out to the foundation of our porch, which appears to be a cinder block wall built on a small and sloppy looking concrete footer. It's not far below the soil line and maybe it's not even below the frost line, which would be bad. Below the foundation, the closet was dug out into the clay soil. You can see the roots from the bushes protruding from it in search for water. On either side of the closet the flag stones seem to get wider as you go up, where you'd expect them to be getting narrower. Perhaps this was an outside exit at some point in the past? The floor of the closet had a poured concrete slab going all the way to the back, which surprised me. The earth in the back had begun to erode and appears to have undercut the porch foundation and stones by about 3-6 inches, so clearly we don't want to leave it this way indefinitely. We could do a lot to stop this erosion by ensuring that we aren't adding any additional water to the soil via our garden hose. It's now very clear where the water that rotted the wood must've come from.

 

[Insert Picture Here]

 

I was breaking the OSB into chunks that would fit in a 6 mil contractor bags. We couldn't really do much about the larger pieces and the longest of the 2x3s. Alara carried the larger wood and most of the bags upstairs and out of the house while I continued to work. After several hours of bashing away with a pry bar, I was covered with sweat. In fact, my clothes were damp and quickly became so chilly that I got the shakes and had to change them.

 

I would set aside the entire day if you intend to do this kind of work on your own - either with or without the mold. You'd be surprised how much framing there is in a small closet, and at the end of the day you will probably not want to work anymore anyway. I spent the "extra" time going over the bathroom ceiling with some bleach to get rid of pesky mold spots that were growing there, and helping with the vac & vent operations to do our best to clean the house of any spores and exchange the air - as much for the bleach smell as anything the mold might've done to impact the air quality.

 

One suggestion I can make is that you should keep a reciprocating saw (jigsaw, saws-all, or both) handy. In my case, there were lots of places where these tools wouldn't work well because of closeness to the stone, unknowns behind the wood, or a desire to reduce the amount of dust. However, there were really tough points where not having them would have brought work to a standstill or frustrated me to the point of total collapse. (It is deeply satisfying to take a saw to a particularly stubborn stud and watch it fold like a paper napkin.)

 

Maybe it's all in my head, but I actually felt like I was breathing a little easier yesterday.

Published: Jun-18-07 | 0  Comment | 0  Link to this post

Jun14

Developers Need to STOP Using Code Anti-patterns

Shortly after finishing a list of a dozen things I hate, I settled into work to find a bug that has brought an application to its knees. At first, we believed that maybe the underlying data had changed, and that as a result queries that used to match on an exact date & time at midnight no longer did.

However, further investigation revealed something much more stupid and avoidable than this.

Let's start at the beginning. Take a look at this little gem:

try {
        DataTable dt = someFooClass.GetSomeData(dateParam);
        ds.Tables.Add(dt);
} catch (Exception ex) {
        string bitBucket = ex.Message + " " + ex.StackTrace;
}
return dt;

For everyone who has ever done this practice of tossing your errors into a black hole, including me, go back to programming school, YOU SUCK!

If you are doing something like this anywhere in your code, STOP! Remove them. And, no I dont care if it breaks your application. You will be better off after you either tighten the exception catching to grab only the error you want (and/or rethrow everything else), or better yet fix the problem that is causing the exception in the first place.

But why? Seems harless enough, right? After all we're only calling one function and [probably] that function is very simple and has no special logic or its own calls are proven to be stable. So why the fuss?

Well. Let's look at what boiled up from inside the GetSomeData function after I deleted the exception flypaper:

//double result = numberValue1 + numberValue2;
double result = Convert.ToDouble(IsNull(numberValue1.ToString() + numberValue2.ToString()));

Here are my observations about this little peice of code genius.

  1. If numberValue1 and numberValue2 were numbers to begin with, then why do we convert them into strings and then back into a number again? This seems hopelessly convoluted and prone to potential errors. For those of you who have not been coding for very long, this is called "walking three sides around the barn". Programmers hate unecessary work, and chances are good (though there are exceptions) that the framework developers have provided you some better way of getting what you want with less effort.
  2. It seems pretty obvious that the programmer here did not mean to concatinate two number-like strings together and then parse them back into a number later. Ironically, this will work (producing meaningless garbage data), if at least one of the two inputs has no decimal places and numberValue two is positive.
  3. If testing for null is required, it should've been done on both the inputs and not on their sum.
  4. It also seems pretty obvious that someone cane along and patched this code to handle null or System.DBNull that was coming in from the database or elsewhere in an unanticipated way. As a result, what used to be simple arithmatic is now calling a custom function.
  5. IsNull has a misleading name. In this case IsNull returns a double, not a boolean and does some parsing to the values to return zero if they are null. Further, IsNull is a name pattern you will find in code a lot, and people generally assume they know what it means. So, if your code does not follow the same kind of logic as pther code with that name, use a different name. I would suggest NullsAsZero or ZeroNulls as alternative names.
  6. This patch was buried under exception catching and as such it was never really adequately tested. Since it was developed in a hurry, I doubt anyone knew that it was broken and it may have returned seemingly valid results that confused the crap out of everyone in UAT later on.
  7. The end result here is that what probably took five minutes to write (badly) took a week to find and fix. That is not a good trade.

Microsoft has good resources to help you understand when you should and should not mask exceptions and how they can be handled at different layers of your applications. (Links will follow when I feel like going to look them up.) In the mean time, just keep this one simple rule in mind:

If you don't understand best practices for exception handling, or you are not putting any meaningful handling logic inside your "catch" block, then DON'T catch the exception in the first place.

Update: Thanks to source control, we found the author of this nice little peice of "new math". (As my colleague said "1 + 1 = 11?"... heh) It's so refreshing to work in a place where public humiliation is used as a method to improve coding standards. :->

Published: Jun-14-07 | 0  Comment | 0  Link to this post

Jun14

Things that Suck!

Here is the list of things that are pissing me off this week:
  1. People who won't hang with you becuase you are married, or because you have kids, or because you're too old, or whatever superficial shorthand passes for an excuse for their own shallowness.
  2. People who measure the "progress" we are making in Iraq by counting the number of buildings that are being blown up.
  3. People who come to me with problems that they could've fixed on their own if only they had tried. (You know who you are, and yes I do it too.)
  4. Coming into work and finding that I am wholly unable to focus on what I need to do today.
  5. Coming into work and finding that I am wholly unwilloing to focus on what I need to do today.
  6. The third beer.
  7. That twisted burning feeling I get in my gut when I am no longer asleep, but when I am not yet conscious enough to force myself out of bed and face the day.
  8. A character drawing when I forget to do the anatomical proportions before I start to sketch in the details, so the character ends up with unusually long arms or a disproportionately short torso.
  9. Web browsers that crash while you are typing a lengthy rant into a form, so you lose everything.
  10. People who tell you that #9 would not happen if you just typed everything into Word first.
  11. Going to see someone in person for something that could easily be said (and ignored?) in email.
  12. The first three notes of the first System of a Down song I put on my headphones; the rest are awesome!

That'll do. :-) How cathartic!!

Published: Jun-14-07 | 0  Comment | 0  Link to this post

Jun13

Starting Comic Book Projects

Several weeks ago, I decided to actually circle back on my old goals that I had before the whole lead abatement home improvement nightmare derailed everything else I want to do with me life. Among these things, I have been kicking around the idea of doing a web comic.
 
As I thought about it, the idea of trying to do something funny four or five times a week seems a bit daunting to me at this point in my life, but I was more attracted to the idea of some serious storytelling through art. Somehow this moment in history seems appropriate to something a bit darker, and I wouldn't really want that to be refected too much in the story idea I had intended to be a comedy - well maybe just a little.
 
The more I think about this lately, the more good ideas I get. Now seems like a good time to enumerate them and describe a little bit about each one. This way, later, when I decide to post a sketch or idea, I can just refer back to the working title and hopefully people will have some idea of what I am talking about.
 
Project #1: Fandemonium
Originally Conceived: Spring/summer 1999
This is the story of Karl, Jim, Laura, and others who are analouges of myself, my wife, and my friends. Karl's world is forever changed when a Trekkie friend decides to repair his TV set using a DIY book meant for 24th century Star Trek technology. Ever since, Karl's house radiates a kind of energy that picks up on the fan-ish behavior and feelings of whoever is within or near and morphs reality in and around the house to reflect those feelings. So, anime fans cause anime style physics and sci-fi fans cause sci-fi like events. Hilarity ensues as the opportunity for parodies and perils is abundant.
 
The plot follows life as Karl and Laura become involed and even marry and have children. Sometimes the story can take on serious tones, such as when dealing with things like getting older, or the fact that the fan-wave field is spreading so that it consumes their entire city. Will it become a geeks paradise, or will it spread across the world until it is no longer a thing that is special and unique? Even I don't know the answer.
 
Project #2: 2112 - the Graphic Novel
Original concept: 2000 - 2005
This unlicensed derivative work is inspired by the story album from Rush by the same name. It takes many of the concepts from the songs, and attempts to expand on them in order to make the story more complex and a bit less cliche. I loved the ideas presented in Peart's lyrics, and have long envisioned this in an animated form, perhaps even a motion picture. The story will follow the (currently unnamed) protaganist who starts his journey as an IT worker in the church-state like Cyrinx Corporation that controls virtually every aspect of everyday life. The year is 2112 on a calendar that was reset to Year Zero at the time when C-Corp established control over society. It will follow the hero as he rediscovers original music and unintentionally starts an almost cult-like political movement that eventually threatens to topple the current regime. Will he meet the same end as depicted in those famous Rush lyrics? Who or what are the Elder Race of Man, and what does their long awaited return mean in terms of the story?
 
Project #3: Asymmetric
Original concept: spring 2007
It is an unspecified year some time after 2010. The President of the United States is an analogue of Rudy Gulliani. America continues to be the sole remaining superpower on Earth. In the wake of expansionist doctrine, the familliar 50 star pattern of Old Glory has been replaced by the imperial eagle clutching at arrows and olive branches. Among others, the story follows an earnest young man in the US armed forces. In his world, F-22s and tanks are as much partners or pets as vehicles; each has its own biological computerized brain that aids its pilot, complete with its own personality. Many dark secrets will be revealed as he observes the impact of war and searches his soul to do what it right.
Published: Jun-13-07 | 0  Comment | 0  Link to this post

Jun13

Is This Thing On?

Well, here it is - a blog. Yay! Best of all it runs on SharePoint. It's only missing one thing... content.
Published: Jun-13-07 | 0  Comment | 0  Link to this post

`