Tuesday, September 08, 2009

Blocking spam that appears to come from your own email address

At work, I get a lot of email where the sender has spoofed the email address so that it appears to come my work email address.  It’s annoying and our corporate email filter doesn’t catch it.  I did find a way to block it with a close to 100% success rate.  What I did was to create an email filter in the email application that traps those messages.  I’m using Outlook 2007, but the technique should would work for any email client that has decent filtering.  Here’s how I created the rule (using an obviously fake email address of a known spammer):

1.       From the Tools menu, select “Rules and Alerts…”

2.       From the “Rules and Alerts…” dialog, press the  “New Rule…” button.

3.       Under “Start from a blank rule” section, select “Check messages when they arrive” template.

4.       Under the dialog for “Which condition(s) do you want to check?”, select "with specific words in the message header"

5.       Click on “specific words” to open the dialog box that allows you to enter the search criteria.  I entered the following list, you would enter what matches your junk email and each line is entered in separately:
X-Barracuda-Envelope-From: sanford.wallace@spamking.com

From: <sanford.wallace@spamking.com>

6.       After closing this dialog, press “Next”

7.       On the “What do you want to do with the message?” dialog, select the following actions:
mark it as read

clear the Message Flag

move it the specified folder

8.       Click on "specified" and select the "Junk E-mail" folder.

9.       Click the “Next” button to the Finish rule setup dialog.

10.   Name the rule and set "Turn on this rule".  There is also a checkbox “Run this rule on messages already in “Inbox”.  You can set that checkbox to test the new rule.  If you have lots of messages in your inbox, create a new folder and copy some of the spam into that folder.  Then select that folder and edit the rule.  The “Run this rule…” checkbox will now list the name of the selected mail folder.  Your rule will run much faster on a mail folder with just a few times in it.

 

As you edit the settings, Outlook will display a text representation of the rule as you configure it.  It should look something like this:

Apply this rule after the message arrives
with ‘X-Barracuda-Envelope-From: sanford.wallace@spamking.com or From: <sanford.wallace@spamking.com>‘ in the message header
clear the message flag
  and move it to the Junk E-Mail folder
  and mark it as read

You may need to tweak the rule a bit to match the right messages, but it’s fairly robust.  If you want to allow email from your own address, add an exception to the rule and have the exception match some specific text in your message header or your email signature.

Friday, August 28, 2009

When Page Up and Page Down behave oddly in FireFox

I was viewing a web page with Firefox 3.5.2 the other day and I noticed the Page Up and Page Down keys were not behaving the right way.  Instead of scrolling, the page would flash a bit, but nothing really would happen.  I could still scroll with the mouse, but it bugged me.  Bugged me a lot.

I did a bit of searching and discovered an odd little feature.  Select “Options…” from the “Tools” menu.  On the “Advanced tab”, select “General”.  There is an option, “Always use the cursor keys to navigate within pages”.  If that option is set, the cursor keys can be used to select text on the page instead of navigating the page.

By default, that option is not set.  However, you can toggle it on and off by pressing the F7 key.  And I must have pressed that key at some point and toggled that feature on.  Once I cleared that setting, I could use the Page Up and Page Down keys to navigate the page again.

Thursday, August 27, 2009

Looking forward to Delphi 2010

I just got the email from Embarcadero with the access code to get my copy of RAD Studio 2010.  Almost all of our products that are Delphi based are compiled with Delphi 2007, I’m looking forward to working with 2010 flavor of Delphi.  We do a lot of .NET development, but there is still a need for WIn32 code and Delphi has been a really good development platform for us. 

I’ve had a software assurance contract since Delphi 7.  I don’t jump to next compiler just to get the next compiler, but I do want the new version to be able to evaluate the new version and see if the benefits out weigh the cost of porting to that version.  We chose not to use Delphi 2009.  We had just completed a painful upgrade to Delphi 2006 from Delphi 5 the year before.  The Delphi 7 port was easy because it supported Delphi 2006 components, but Delphi 2009 would have been major undertaking.  We still face the same porting challenges with Delphi 2010, but I still want to evaluate it and that port/no port decision.

Of course the fun part is waiting for the 3rd party vendors to release their updated controls.  We use a fair number of 3rd party packages.  The biggest ones are DevExpress, ReportBuilder, and JEDIDevExpress already put out a notice that they are a few days away from a release that will support RAD Studio 2010.  I’ll be able to do a lot more testing with.  There is no new information from Digital Metaphors about an update to ReportBuilder, but I would expect it fairly soon.  The roadmap page for the JEDI VCL shows that they intend on supporting Delphi 2010, but only sometime in 2009.  My guess would be that any component pack that supports Delphi 2009 should be fairly easy to port to Delphi 2010.

We have a fair number of components that have been either abandoned by the developer or we chose to keep at a specific version.  Those components, I had ported to Delphi 2006/2007 back a few years ago.  Delphi 2009 was a big change and it will probably take more work, but it shouldn’t be that bad.  I may make the decision to drop some of the lesser used components and replace them with equivalent components from DevExpress or JEDI.  We use Abbrevia library that was open sourced by TurboPower when they exited the market.  It has a Delphi 2009 port, that should be an easy one to port to Delphi 2010.

Wednesday, August 26, 2009

I haven’t seen gas that cheap since the Carter administration

Our local supermarket chain, Price Chopper, has been running a promotion this summer in combination with Sunoco.  The more you spend, the greater the discount will be on your next gas fill up.

This is how it works: For every $50 you spend, you earn 10¢ off per gallon of gas on the next fill up.  The nice thing is that they track all that you are spending.  If you spend $75.00, you get a 10¢ discount on the first $50.00 that you spent, plus you have $25.00 towards the next discount level.  When you get the fill up, the discount maxes out at 20 gallons, so you can’t take your fleet of Brunomobiles and fill them up in one shot.  But it can add up.  If you are paying by credit card, you just have to swipe your AdvantEdge card before you start pumping gas.  If you pay by cash, you just let them swipe the card at the time of payment.

I had been racking up the discount points this summer without paying too much attention to it.  A couple of weeks ago, I stopped into Price Chopper and bought some ice for a party. My current discount was printed on the receipt and it was $2.20 per gallon.  Some of the discount was due to expire at the end of the month, so it was time to cash in.  The discounts expire two months after they are earned, so it was use it or lose it.

The Stewart’s near my house sells Sunoco gas and the receipt here shows how much I paid to fill up my tank.  I paid 59.9¢ a gallon.  I paid a little bit over $8 to fill up a car.  That was just stunning.  That price takes us back to the year 1977.  On a side note: if you factor in the inflation rate, that price in 1977 is not that far off from what we are paying today.

Now I’m back to 0 on the discount, but since we usually buy all of our groceries at Price Chopper, it shouldn’t take too long to get that discount back up.  I don’t know how long they will be running this promotion, but it’s a pretty good one.

Monday, August 24, 2009

Why it can be good to build a PC instead of buying a prebuilt one.

After installing Windows 7, I wanted to install Windows Virtual PC.  Windows Virtual PC requires that your machine support hardware virtualization.  My home development machine is about two years old and I wasn’t sure it it support hardware virtualization.  I have an AMD X2 64 4800 with an Asus MSI-SLI Deluxe motherboard.  With AMD, the virtualization technology is called “AMD-V’.

AMD provides a tool that will tell you if your machine supports AMD-V.  I downloaded and ran it.  It gave me a message that my motherboard needed a BIOS patch to enable AMD-V.  On surface simple enough, patch the motherboard and off you go. 

I was hesitant on flashing the motherboard with a patch.  My motherboard’s BIOS was working just fine and there is some risk involved with flashing the BIOS to a new version.  If something goes wrong during the flash process, you can brick the motherboard.  Or you could find out the new BIOS makes your system worse.  Plus, I had no idea if a new version actually would enabled AMD-V.

Fortunately, Asus has a decent support forum and I was able to post a message asking about hardware virtualization.  Within an hour, I received a detailed response that the new BIOS versions did enable hardware virtualization and a list of steps on how to flash the BIOS.  I’ve flashed motherboard BIOS or two before and I pretty much know that drill, but it’s nice to get that level of support.  He did recommend clearing out the existing BIOS settings, which is always a good thing to do whenever you update the firmware of an electronic device.

I grabbed the latest BIOS from the Asus site.  I also grabbed the current version, just in case something went wrong wrong and I needed to go back to the old BIOS.  My motherboard had a flash tool built it and it could access a USB thumb drive before the booting the OS.  I copied the BIOS files to the thumb drive and rebooted. 

As it booted up, I pressed the Delete key to jump into the BIOS setup screen.  I selected the flash utility and picked the current BIOS file.  After a few minutes, the new BIOS was installed.  I cleared out the CMOS settings for the BIOS and rebooted.  I went into the BISO setup again and a had a few new options.  One of which was AMD Virtualization, which was enabled by default.

The next step was a reboot.  Windows came up and all was good.  I ran the AMD tool and it said that AMD Virtualization was good.  That was pretty painless.  When I got this machine 2 years ago, I had it built from a hand picked list of components.  I’ve had good luck with Asus motherboards and I wanted one where it would be easy to update and upgrade.  Plus I wanted a decent power supply.  When you buy an off the shelf PC, you don’t get to pick the components, other than the capacity and number of items. 

I used to do the actual assembly, but I’ve found it easier to have it assembled by the place where I buy it from.  That way they can make sure that all of the parts fit together and nothing is missing.  If something is DOA, they’ll find it when they assemble and test the system.

Sunday, August 23, 2009

Using uberOptions to extend the functionality of Logitech devices

A few weeks ago, I picked up some Logitech mice that were on sale as “dented box” items on the Logitech site.  They were new mice, but their boxes had some minor damage and they were half off.  I grabbed a VX Revolution and a MX Revolution.  The VX was for the family computer that the kids use, and the MX was for my home development machine.  The VX is a notebook model and it’s smaller size fits the kids hands quite nicely.

The MX Revolution was to replace my MX 700 mouse that I’ve had a few years. The 700 was one of the best mice I have ever used, but I had some issues with it.  First off, Logitech did not provide Vista drivers for it. While it worked just fine with Vista, it was only as a standard mouse and the extra buttons could not be used.  The other problem was that the rechargeable batteries had worn out to the point there they would only last for a few minutes.  I could easily find replacement batteries, but I missed the extra functionality of the 700.  Plus I wanted a mouse where the mouse wheel with the “tilt” support for left/right scrolling.

From time to time, Logitech runs “dented box” sales on various products.  If you have right coupon code, you can get a new product with a full warranty.  If you use the site techbargains.com, type “dented logitech” into the search box on the main page, you’ll get a list of the current dented box specials on the Logitech site, plus coupon codes for additional savings.

Both the VX and MX Revolution mice have a little button located just south of the scroll wheel.  By default, it’s mapped to a search function.  Select a word, press the button, and a new browser instance is launched with the selected word passed the search engine.  For some people that may be a cool feature, but I found it just maddening.  With the Logitech SetPoint software that comes with each mouse, you can reassign the mouse button functionality to other behavior.  On the VX, I was able to set the search button to be a middle click button.  I like being able to middle click a link on a web site and get that link opened in a new tab, leaving the existing web page right it I was reading it.

You would think that you could do the same thing with the MX Revolution as you could with the VX Revolution. Oddly enough, while you could assign the middle click function to many of the buttons on the MX, it was not an option for the search button.  I don’t know if that was by design or by error, but it was irritating.  Since the SetPoint configuration software is bundled with all of the current Logitech input devices, the button definitions are not hard coded into the application, but must be read from some set of configuration files.  If I could find where they are located, I should be able to copy the missing MX definitions from the VX settings.

I went on to Logitech’s support forums in search of tips for locating and editing the SetPoint files.  After doing some searching, I found references to something called uberOptions. Rich Owens put together a package called uberOptions, a new set of SetPoint configuration files that greatly expand the options that you can assign to the buttons.  He has modified the files for a large list of keyboards, mice, and trackballs.  The current list of devices plus the installer for uberOptions can be found at http://uberoptions.net/.  It installed and worked just fine with WIndows 7 64 bit.  After I installed it, his default setting for mouse had mapped the search button to the middle click function.  Well played Rich, well played indeed.

[Edited on 8/31/2009]
If Rich Owens’ main site is down, he has a mirror site.

[Edited on 9/8/2009]
Richard Owens sent in an updated link to his site, http://uberoptions.net/, this replaces http://www.mstarmetro.net/users/rlowens/.

Saturday, August 22, 2009

Offload TCP processing to the network controllers under Vista, Server 2008, and Windows 7

After upgrading my home PC to Windows 7, I was decided to see if my motherboard/CPU combination support hardware virtualization.  You need hardware virtualization support if you want to run Windows XP Mode or Windows Virtual PC.  I have an XMD Athlon X2 with an Asus M2N-SLI Deluxe and I’m not sure if that combination supports hardware virtualization.  I’m pretty sure the CPU does, but I don’t yet yet know about the motherboard.

I decided to check the  Asus support forum to see that motherboard supports hardware virtualization and while reading through the forum, I found an a post about tweaking the network settings for a boost in performance.  The TCP/IP stack in Vista has the ability to offload some of the network processing to the network controller, if the network controller has that capability.  Out of the box, Vista disables that feature to prevent problems with controllers that don’t support that feature.

From what was posted in the Asus forum, this motherboard does support that feature.  This motherboard is based on the NVIDIA nForce 570 chipset, which included dual Gigabit LAN controllers.  If you are doing CPU intensive tasks, you can gain some performance benefit by offloading the TCP processing to the network controllers.

Vista refers to this setting as the “Chimney Offload State”.  It’s easy to check and set this value.  if you have a newish motherboard with a Gigabit speed network controller, this should work for you.

To change this setting, do the following:

  1. Open an elevated command prompt.  Either right-click cmd.exe and select “Run as Administrator” or press the Start button, type “cmd” and then hold the left shift and left control keys while pressing the enter key.
  2. Check the current status of the Chimney Offload state by running the following command:
    netsh int tcp show global
    The possible values for that state are: disabled, enabled, default
  3. Run the following command to enable Chimney Offload state
    netsh int tcp set global chimney=enable

Before making the changes, check your current broadband speed.  I like the one at speedtest.net, but the others are fine.  Then after making the change, check it again.  If the performance takes a hit, set the state back to it’s original value.  Not only did it work for me, I did get a slight, but measurable, download speed increase.

Before enabling Chimney Offload:

546138390[1]

After:

546142573[1]

These tests were run a few times before and after the modification.  I picked the average score each time.  That helps even out any existing network traffic that would affect the results.  Going from 17.42 MB/s to 18.70 wasn’t a huge increase, about 7%; but I’ll take it.  There are other settings that you can tweak.  Some are mentioned in the forum posting, and they are also documented in an article in speedguide.net as well.  You don’t often get a free lunch, this is a good one to take.  This setting works for Vista, Server 2008, and Windows 7.  I still don’t know if I can get hardware virtualization, but this was an interesting diversion.

[edited on 8/24/09]
As it turns out, my CPU and motherboard do support hardware virtualization, it just took a little work.

Wednesday, August 19, 2009

A work around for Delphi 2007/2009 with Windows 7 64 bit

I just installed Windows 7, 64 bit edition so that I could code and test against this new operating system.  Visual Studio 2008 installed and ran without any incident, but I hit a snag with Delphi 2007.  Delphi 2007 installed just fine, but it would die when you ended a debugging session.  An assert error would get thrown and after you cleared the dialog, Delphi would be terminated.
The error was thrown by bordbk105N.dll and had the following text:
Assertion failure: "(!"SetThreadContext failed")"
in ..\win32src\thread32.cpp at line 412
Continue execution?
That was followed by a “Yes/No” set of buttons.  It didn’t matter which choice you made, it was pretty much game over for Delphi at this point. After getting this happen 3 times in a row (even with Delphi launched with “Run As Administrator”), I decided to check the Internet and see if this was unique to me and if there was a fix.
I checked Google and found a few hits.  One of them led me to a blog written by Olaf Monien, a German developer with close ties to the Delphi R & D department.  His post, “Delphi 2009 / Windows 7 / 64 bit Debugger Crash Workaround”, described the issue in great detail.  Apparently an incorrect call is being made to the SetThreadContext API call.  The debugger dll has an assert call based on the return value SetThreadContext().  It’s odd that production code went out with asserts enable, that’s usually used during testing.  Some people traced through the debugger code and found that if a single byte is changed in the dll, you could get by this error.  This byte changes the logic so it ignores the return code from SetThreadContext() and never hits the assert code.  You can read about how they came up with that idea here.
An enterprising programmer named “LordByte” wrote a handy little utility that will patch the debugger dll for both Delphi 2007 and Delphi 2009.  Olaf is hosting the patch tool on his blog and This file found a permanent home at Embarcadero and you can download it from Delphi_2007_2009_WOW64_Debugger_Fix.zip.  This works but you now have the added risk of actual errors being returned from that call to SetThreadContext() being ignored.  Since the alternative is an unusable Delphi, it’s a risk I’m going to have to take.

[Edited April 22nd, 2013]
While I no longer use Delphi, I hate to see a broken link.  I updated the download link for the debugger patch to it's current home at Embarcadero.

Monday, July 27, 2009

When installing apps in a Terminal Server or Citrix environment

When you install an application on a Windows Server running Terminal Services or a Citrix server, the user should go into Add/Remove programs and run the installer through “Add New Programs”.  It sounds clunky, but there is a reason for this.  Microsoft virtualizes the location of the Windows directory under terminal services.  Each user has a private copy of the Windows folder.  This allows applications that assume they are the only user to see only their own copy of the folder.

If an application calls GetWindowsDirectory(), you usually C:\WINDOWS or C:\WINNT.  Under Terminal Services, a call the GetWindowsDirectory will return something like C:\Documents and Settings\currentusername\Windows.  If you need to install a shared component in a folder off of the Windows folder, then you will not want the virtualized folder.  You want to use the actual C:\WINDOWS folder.

Installer authoring tools like InstallAware use GetWindowsDirectory().  This is by design, in a multi-user environment, you want to make sure that the users don’t installed components that could adversely affect other users.  If you want to get the actual Windows directory, you can call GetSystemWindowsDirectory(), it will return the actual Windows directory.  When you run the installer through “Add New Programs”, Terminal Services is place into install mode and GetWindowsDirectory will return the actual directory instead of the virtualized directory.

If your installer requires that you have the correct folder for the GetWindowsDirectory, I would suggest comparing the results of GetWindowsDirectory and GetSystemWindowsDirectory.  if they do not evaluate to the same folder, then you know that you are running under Terminal Services and that Terminal Services is not in install mode.  At the point, you can display a dialog and suggest to the user to run the installer under “Add New Programs” and then exit gracefully.

Wednesday, June 17, 2009

Facebook does not need a “dislike” button

With just about everything you get to see view in Facebook, there’s usually a button or a link displayed as “like” associated with the topic.  If you click that button, the person who posted that link gets a little note on his Facebook page that you liked what ever it was that they had put up.

When I first saw the ‘like” button, the first thing I thought of was my TiVo remote with it’s “Thumbs Up” and “Thumbs Down” buttons.  You can thumb up or down a program while you are watching it.  This information gets stored on the TiVo and it uses that information to pick shows it think you might like to watch.  A completely optional feature, but very cool none the less.

With the TiVo ‘Thumbs Down” feature in mind, I wondered why there wasn’t a “dislike” button.  If you believe in Sturgeon’s Law (ninety percent of everything is crap), then there is going to be stuff on Facebook that you won’t like.  Since they let you express your approval with the “like' button, why not be able to express your disapproval?

I’m not the only one who has wondered about that.  There’s at least one poll on Facebook that asks “Should Facebook get a dislike button?”  if you have a Facebook account, you can hit that poll from this link.  I saw it because a friend of mine had already voted “Yes”.

Voting “Yes” was my initial inclination, but I decided to think about it for minute.  The more I thought about it, the more convinced I became that it would be a bad idea to have a “dislike” button.  It would be a tool for expressing a negative opinion and that’s not what Facebook is about.

A large part of the early appeal of Facebook was that it was closed community.  If you want to see someone’s Facebook page, you had to be a member of Facebook and probably need to be a “friend” as Facebook defines it) of that person before being able to view that page. 

Since you have to have a Facebook account to access Facebook user pages, there are no anonymous users on Facebook.  If the Facebook administrators catch you using a fake name (like the way a certain B-List actress did last winter), they will disable the account.  What ever you do on Facebook, it will always be associated with your account.

If you could click a “dislike” button for something that a friend had posted, your friend is going to know you didn’t like what they had posted.  No one is going to want to see a little thumbs down image next to the picture of their new kitten/cat/tattoo/etc.  There will be a percentage of users who will be offended when their post is disliked.  That can lead to bad feelings between the two people and add a negative tone to the Facebook experience.

If you feel strongly against something, you can still leave a comment and express your opinion.  That can actually be helpful.  If you wanted to press the “dislike” button on something because you found it inaccurate or offensive, you can actually write why you feel that way.  Constructive criticism means a lot more than a little image of thumb pointing down.  Some people will still be offended by critical posts, but now you will have a starting point to discuss it.  So I’m not taking that poll and I’m hoping that Facebook doesn’t implement a “dislike” feature.

Monday, June 15, 2009

Checking to see Microsoft Report Viewer 2008 SP1 has been installed

We are updating the installer for one of our applications and that app now requires the Microsoft Report Viewer 2008 Service Pack 1 to be installed first.  The fun part is determining if it’s installed or not.  Usually, I check the registry keys to see if an application is installed.  If the user has installed the Report Viewer as a separate application, you’ll find it under the key

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Report Viewer Redistributable 2008 SP1

If you want to read a value from that key, look for VersionMajor.  It should be a DWORD value of 1.

Of course that’s not the only way to get Report Viewer SP1 installed.  If you have Visual Studio 2008 and you have applied SP1, then you’ll have Report Viewer SP1 as part of the Service Pack.  Under that scenario, you wont have the “Microsoft Report Viewer Redistributable 2008 SP1” key. 

What you need to do is to check to see if VS 2008 SP1 is installed.  That key is located at

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\InstalledProducts\KB945140

If you want to read a value for that key, look for string value for “PID”.

[Update on 6/16]

From the home office in Latham, NY, a reader sent in the suggested to also check the registry for 64 bit based machines.  On 64-bit editions of Windows, the Report Viewer Redistributable runs in 32-bit more.  It sees a virtualized version of the registry.  The actual registry location is

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Report Viewer Redistributable 2008 SP1

Note the “Wow6432Node”, that tells that it’s a 32 bit application installed on a 64 bit OS.

Tuesday, May 26, 2009

If this isn’t the first sign of the apocalypse, nothing is. (Jon & Kate & American Chopper)

A few months back, I posted this as a joke.  Now I’m seeing pictures like this floating across the Internet:

The Gosselins riding with the Tuetuls

It looks like Kate is riding off with Paul Senior and she’s the only one that looks happy.  I think it was for some TLC promotion, not an actual episode of either one of their shows.

Monday, May 11, 2009

Tag your junk mail before it gets sent to you.

Even though we live in the world of tomorrow, we still get junk mail.  The old fashioned kind made of out paper and stuff like that.  Junk email annoys me, but physical junk mail is just a waste of physical resources.   I try to prevent junk mail from being sent at all, but sometimes it still comes in.  What seems to invariably happen is that I’ll get junk mail from some company that I have not had a prior relationship with.  They probably bought my contact information from some other company.

I came up with a little trick to make that mail easy identifiable so that it can be recycled without ever having to open up.  Whenever I register for something online and it asks for my title, I put in “Disposable”.  When that mail comes in and my title is printed on it, when I see the work “Disposable” on it, I know I don’t have to spend any time on it.  At our office, the receptionist delivers all the mail.  I’ve told her that if something comes in for me and it has “Disposable” printed below my name, she doesn’t have to bring it to me.

Thursday, April 30, 2009

A followup to my post about SC Johnson not manning a customer hotline.

A few days ago, I posted about my experience trying to get a hold of customer support after my dog ate some ant bait.  SC Johnson has a contract with a health and safety clearinghouse that is manned 24/7.  I have spoken to those people and they are very professional.  Their phone number is not listed on the ant traps.  The number that is listed, goes directly to SC Johnson.  When I called that number, I got a recorded messaged that they were closed and to call back Monday through Friday, between the hours of 8am and 6pm (CST).  That’s all I remembered hearing when I called that number.  When I called SC Johnson on Tuesday, they insisted that the emergency contact number was on the message.  I don’t remember hearing that at all.

I received a call today from a physician from the Health and Safety hotline.  He had been contacted by SC Johnson after someone had read my blog posting.  They asked him to clarify with me that the SC Johnson hotline did list the emergency number.  I thought that was pretty odd as the clearing house was not responsible for the SC Johnson hotline.

I am willing to concede that an emergency number may have been at the end of the message.  If it was on the message, it did not play soon enough and I thought the call was over.  I still maintain that the number for the Health and Safety hotline should have been printed on the ant bait station and on SC Johnson’s product web page for the ant bait.  For this particular bait station, the dosage of the poison was below the level to cause any ill effects with my dog.  If I had a smaller dog (or puppy) and that dog had eaten all of the bait traps, there could have been a problem.

Tuesday, April 28, 2009

If you sell poison, I think your customer hotline should be manned 24/7

A couple of weeks ago, we had some unwanted visitors coming in from under the front door.  Pavement ants.  You know, Tetramorium caespitum.  They are tiny and they come from under the door frame.  It usually happens every year at about this time.  I usually spray around the outside of the house with a pesticide and the problem goes away.

This year, that didn’t work.  I did some research online and found that spraying outside was needed, but only part of the treatment.  Another part was to put down ant bait traps indoors, near where they come in.  They provide a poison that the ants take back to nest, eliminating the source of the problem.  That was a bit overkill, but the since ants were not taking the hint it was time to take it up a notch.

Last Sunday I went to the local lawn and garden shop and bought some Raid® Double Control Ant Baits.  The bait stations were very effective.  After placing the four bait stations near my door, the was a surge in ant activity (“treats for us?”) around the bait stations.  After a couple of days, the ant activity dropped down to nearly zero.

We left the bait stations at the door all week.  On Wednesday, one of the bait stations disappeared.  For some reason, that didn’t trip the alarm circuit in the back of my head.  Ant traps typically don’t move by them selves.  I figured that the housekeeper had vacuumed one of them up.  That was my mistake, I should have paid more attention to this.

Cut to Saturday.  I was mowing the lawn when Anne ran out to get my attention.  I shut off the mower and she said that the dog had just tried to eat one of the ant traps.  She had grabbed it from her before the dog could ingest the contents of the trap, but we now knew where the other trap had gone.

Now we had to figure out what to do with the dog.  She’s a 60lb Lab, so she’s a good size.  Still, poison is not a recommended part of her diet.  I grabbed one of the remaining bait stations and flipped it over.  It had a 800 number to call as the customer hotline.  So I called the number and received a recorded message that they were closed and to call back on Monday during business hours.

This is poison, you can’t have a consumer hotline that is only available during regular business hours.  What if It had been a toddler that ingested the poison bait?  I knew that I could call an emergency animal hospital over in Latham, but I decided to do some basic research on the Internet first.

The active ingredient of the bait station was something called “Avermectin B1”.  I searched “avermectin” and discovered that dogs find it tasty and this problem occurs more often than you would expect.  I found numerous pages like the following:

Thanks for the advice! I called the e-vet and they gave me poison control numbers. I called them and because the active ingredient in the spikes are 0.05% avermectin, which according to them is only poisonous if he were to consume 30 of the spikes. The biggest concern they said was the plastic. Thankfully, Wally didn't eat the plastic part.

That was from a Labrador chat board called “Labrador Retriever Dogs Chat Forum Board”.   You figure that the ant spike would be the same amount of poison, if not not more than the bait station.  Apparently Avermectin is commonly used to treat fleas and worms on dogs and small doses will not harm the dog.  In fact, that’s one of ingredients for heartworm pills.

We were a lot calmer after reading a few pages with the same stuff.  After three days since the last “tasty treat”, the dog is showing no signs of illness.   We just know now that we can’t put out bait stations anymore.

I’m not terribly thrilled with the SC Johnson company.  If you sell a chemical that is designed to kill other creatures, you should have a 24/7/365 support line.  It doesn’t have to be monitored by humans all the time.  A properly designed phone tree (“Press 1 if a pet ingested a Raid® Double Control Ant Bait”) would have helped.  At the very least, we would have know than the dog was not in serious danger and we would not have to induce vomiting. 

If you call during business hours, you do get a phone tree before you get a human.  I called this morning to find out why this product doesn’t have a hotline on the week end.  I was told that there is a 24/7 Health and Safety hot line and that number is (866) 231-5406.  It’s not run by SC Johnson, it’s a clearing house for emergency information. 

Because of the toxicity of the bait station, SC Johnson is not required by law to have that number anywhere on the packaging.  That’s just wrong.  When your pet (or a child for that matter) eats some poison, you need to find out how toxic it is immediately.   You would think that number would be on the home page for the bait stations, but it’s not.  I was able to use Google to search the SC Johnson site afterwards and I found it on their Material Safety Data Sheets (MSDS) home page.

At any rate, the ants are gone and the dog is still here.  I’m not sure what I’m going to do if this happens next year.  It would be really nice if they came out with ant bait that dogs would not eat.  I doubt that would happen as there are very few things that a dog wont eat.

Tuesday, April 21, 2009

Remembering Alivia Lovell

Last October, our company constructed 8 playhouses that were donated to some patients at the Center for Childhood Cancer and Blood Disorders at Albany Medical Center.  We do something like that every year.  It’s partly a team building exercise and partly a way a way to give back something to the community.  We put them together at the New Scotland Armory, across from the AMC.  Later on they were delivered to the homes, courtesy of Bennett Contracting.

While we were assembling the playhouses, the children were brought in to see the playhouses.  It was a pretty emotional scene for all of us.  I remember one little girl, cute as button. She was very shy and but she was excited about getting a new playhouse.  We just found out that Alivia Lowell passed away from leukemia last week at the age of 4.

Alivia's Clubhouse.

(click on the picture for more information about Alivia)

My heart goes out to the Lovell family.

Thursday, March 19, 2009

Natasha Richardson

I was shocked when I first heard about the tragic accident that took the life of Natasha Richardson.  I am finding it hard to accept that a small fall could cause a fatal brain injury.  While the privacy of her family out weighs everything else, I do hope that they announce the results of her autopsy. 

There haven’t been any details about the accident itself.  I wonder how much force was involved.  I can remember two other high profile skiing accidents that involved fatal brain injuries.  There was Michael Kennedy’s fatal collision with a tree on the slopes of Aspen, back in December of 1997.  That was followed by Sonny Bono’s tragic death a week later under similar circumstances.  Speed does kill, a helmet could saved their lives.

I’m wondering if Richardson had a pre-existing condition.  She could have had a brain aneurysm.  That could have triggered the fall, or more likely, the fall made the aneurysm worse.  My father had a brain aneurysm once and he had many of the same symptoms that Richardson had reported.  He was lucky, surgeons were able to clamp the aneurysm before it caused any permanent damage to his brain.  With Natasha Richardson, a blood vessel that was already leaking started opening up after the fall and by the time they got her to the hospital it was already too late.  My heart goes out to her sons and her husband, this is a a tragic loss.

Wednesday, March 18, 2009

What to do before your camera is stolen

I just read about a guy in Poland who bought a camera on an on-line auction and it came with a memory card with someone’s travel pictures. He figured that the camera had been or lost or stolen. Based on a picture, he guessed the owner was from Australia.  So he registered as a new member on a Australian photography web forum and solicited the members for help. 

With a little bit of sleuthing, they tracked down the owners and sent them their pictures.  The last few postings on the forum indicated that he was trying to get his money back from the auction site so that he could send the camera to it’s rightful owners.  You can read the full message thread here.  It’s a great story about how good people can be.

If I ever lose a camera, I hope that happens to me.  I would pay a reward to one back.  If not the camera, at least the memory card.  You can always get another camera, but you will never get back the memories that were recorded by that camera.   One that you can do is place a file on your memory card that would provide your contact information in case someone comes across your card.

Just create a text file with a file name of something like “If found.txt” and with add something like the following text:

This memory card was from a camera that was lost or stolen.  I will pay a reward and cover the costs of shipping to get this memory card back, with no questions asked.  Please mail the card to this address:

John Smith
123 Main St
Springfield, NY 12345
USA

If you include a return address, I will send a money order to cover the cost of shipping and for your time. If you would prefer alternative arrangements you can email me at someaddress@something.com

thank you



It’s simple enough to do and it could get you pictures back if you lose camera on vacation.

Thursday, March 12, 2009

Getting back the Ctrl-N shortcut with SQL Server 2008’s SSMS

After I installed SQL Server 2008, I noticed that the Ctrl-N keyboard shortcut in the SQL Server Management Studio (SSMS) no longer worked.  What it’s supposed to do is to open up a new query tab.  In my install of SSMS 2008, the Ctrl-N key did nothing.  Pressing Ctrl-N was burned into my brain. It was a serious context switch for me to have to select a menu item or press a button to get a new query tab. 

A friend of mine gave me a simple tip that fixed it.  Change the keyboard layout to “SQL Server 2000” and then back to “Standard” and that will restore the default keyboard mappings.  That fixed it and I belatedly found it documented here, here and here.  I don’t know why I didn’t check the series of tubes for the answer, it was pretty obvious how to fix it.

To change the keyboard mappings, select Tools->Options from the SSMS menu and then go to Environment->Keyboard.  From that spot, you can change the keyboard layout.  Change the layout and press the “Ok” button to save the changes.  Then, repeat the steps and select the standard layout and press “Ok” again.  That will set the default keyboard mappings, which will include the Ctrl-N mapping.

Sunday, March 01, 2009

And the Chess King is gone

2009 Me: And by 1995, the last Chess King had closed it’s doors for good.

1979 Me: And you thought that was a bad thing?

2009 Me: Well, it was a store that was around back in 1979.  It was once of those places we would have to walk by on the way out of the mall.

1979 Me: I didn’t shop there.  Please, please don’t tell me that I shopped there in the future

2009 Me: No, we never did.  Well, we walked in, and we walked right back out without buying anything.

1979 Me: Thank you.  Or thank me, or us.

2009 Me: But we did go through a phase in the early ‘80s where we wore skinny ties….