The following are two things you can try when Windows Update fails with a mysterious error such as 0x80240004

Fix #1 – Rename software distribution folder.

  1. Go to the MoGo or the Start Menu and find cmd -> right click on cmd -> Run as administrator and run the following command:
  2. net stop wuauserv

  3. Click Run, type: %windir% and press Enter.
  4. In the opened window, rename the folder SoftwareDistribution to SoftwareDistributionold.123 Close the window.
  5. Go back to the cmd window and run the following command:
  6. net start wuauserv

  7. Now perform the windows update and check the issue, if the issue persists please follow the below,

Fix #2 – Hack the registry

  1. Go to the MoGo or the Start Menu and find regedit.exe and run it
  2. Navigate to HKEY_LOCAL_MACHINE\Software\Polocies\Microsoft\Windows\WindowsUpdate\AU
  3. Change the value of UseWUServer from 1 to 0.
  4. Now perform the windows update and hopefully it will work.

Ahhhhh, I spent thrity minutes scratching my head over this before a a coworker pointed out an easy solution my problem. Since most of my time was spent searching the web for a possible solution without finding any, I decided to post this entry in hopes that a search engine or two might pick it up and help someone else who doesn’t have awesome coworkers walk past their office on a regular basis.

I just used Visual Studio 2010 to create an ATL project and added an object to it and added a method to the object. This is all the stuff you see on stage at every PDC. CodeProject has a tutorial very similar to what I did. Anyway I write a quick 2 line test.js file that uses ActiveXObject to create it and call the method and I get the following error (0x800A01AD).

test.js(1, 1) Microsoft JScript runtime error: Automation server can’t create object

So what did I do wrong. Turns out, nothing except trying to run the test.js file from a 64 bit command console. All I had to do to get it working the way I expected was launch the 32 bit command console (commonly found at C:\Windows\SysWOW64\cmd.exe) and run it from there.

I recently received and e-mail that was part of a phishing scam asking me to login to my Paypal account. Of course the link provided actually went to a webpage (probably stolen) of a DSL customer of SBCGlobal. So I forwarded the email to SBCGlobal so they could investigate and I received the email below back from them this morning. As I read through it, I was really impressed at how much useful information they had assembled and provided in one place. So I am posting here and publicly giving them one big thumbs up!

—–Original Message—–
From: AT&T Internet Customer Care Security Team []
Sent: Friday, June 29, 2007 5:31 AM
To: Sean Kelly
Subject: AT&T Internet Service Security Department


AT&T Internet Services wants you and your family to enjoy the time you spend online. Unfortunately, these scams occur every day and the forgers may choose a variety of different businesses to impersonate. Fake emails have been discovered from banks, mortgage companies and even Internet service providers. Ultimately, you are in the best position to safeguard your personal information from these types of attacks.

How to Protect Yourself

1. Never provide your personal information in response to an unsolicited request, whether it is over the phone or over the Internet. E-mails and Internet pages created by phishers may look exactly like the real thing. They may even have a fake padlock icon that ordinarily is used to denote a secure site. If you did not initiate the communication, you should not provide any information.

2. If you believe the contact may be legitimate, contact the financial institution yourself. You can find phone numbers and Web sites on the monthly statements you
receive from your financial institution, or you can look the company up in a phone book or on the Internet. The key is that you should be the one to initiate the contact, using contact information that you have verified yourself.

3. Never provide your password over the phone or in response to an unsolicited Internet request. A financial institution would never ask you to verify your account information online. Thieves armed with this information and your account number can help themselves to your savings.

4. Review account statements regularly to ensure all charges are correct. If your account statement is late in arriving, call your financial institution to find out why. If your financial institution offers electronic account access, periodically review activity online to catch suspicious activity.

You Can Fight Identity Theft:

Never provide personal financial information, including your Social Security number, account numbers or passwords, over the phone or the Internet if you did not initiate the contact.

Never click on the link provided in an e-mail you believe is fraudulent. It may contain a virus that can contaminate your computer.

Do not be intimidated by an e-mail or caller who suggests dire consequences if you do not immediately provide or verify financial information.

If you believe the contact is legitimate, go to the companies Web site by typing in the site address directly or using a page you have previously book marked, instead of a link provided in the e-mail.

If you fall victim to an attack, act immediately to protect yourself. Alert your financial institution. Place fraud alerts on your credit files. Monitor your credit files and account statements closely.

Report suspicious e-mails or calls to the Federal Trade Commission through the Internet at, or by calling 1-877-IDTHEFT.

What to do if you fall victim:

1) Contact your financial institution immediately and alert it to the situation.
2) If you have disclosed sensitive information in a phishing attack, you should also contact one of the three major credit bureaus and discuss whether you need to place a fraud alert on your file, which will help prevent thieves from opening a new account in your name. Here is the contact information for each bureau’s fraud division:

P.O. Box 740250
Atlanta, GA 30374

P.O. Box 1017
Allen, TX 75013

P.O. Box 6790
Fullerton, CA 92634

3) Please contact your local police department.
How to report if you have been a victim of an online shopping fraud:

If you have problems during a transaction, try to work them out directly with the seller, buyer or site operator. If that doesn’t work, file a complaint with the Attorney General’s office in your state. You can find your state Attorney General’s contact information on the website of the National Association of Attorneys General.

Online Shopping Tips:

Know who you’re dealing with. Anyone can set up shop online under almost any name. Confirm the online sellers physical address and phone number in case you have questions or problems. If you get an email or pop-up message while you’re browsing that asks for financial information, don’t reply or click on the link in the message. Legitimate companies don’t ask for this information via email.
Do not send cash, checks or money orders under any circumstances:

Pay by credit or charge card. If you pay by credit or charge card online, your transaction will be protected by the Fair Credit Billing Act. Under this law, you have the right to dispute charges under certain circumstances and temporarily withhold payment while the creditor is investigating them. In the event of unauthorized use of your credit or charge card, you generally would be held liable only for the first $50 in charges. Some companies offer an online shopping guarantee that ensures you will not be held responsible for any unauthorized charges made online, and some cards may provide additional warranty, return, and/or purchase protection benefits.

How to report if you have been a victim of an online shopping fraud:
If you have problems during a transaction, try to work them out directly with the seller, buyer or site operator. If that doesn’t work, file a complaint with the

Attorney General’s office in your state. You can find your state Attorney General’s contact information on the website of the National Association of Attorneys

General. your county or state consumer protection agency.

Most answers to your questions can be found at

Security viewlets, Firewalls, Phishing Alerts and Spyware removal tools are some ways AT&T Internet Services is making your Internet safer.

Parenthacks had a post on Making up New Rules for Card and Board Games and it reminded me of a version of Uno we used to play with a group of teenagers back before my kids were born. Basically we added three simple rules, but the effect was to create a game that was fast a furious and very engaging.

Cummulative Draws

The first rule was that if someone played a Draw card on you, you could play another draw card of the same type and the efeect would accumulate to the next player. For example, if someone plays a Draw 2 on you, you could play another Draw 2 and the next player would either have to draw 4 cards or play a Draw 2 as well. Likewise with Draw 4. Some times shock and horror would ensue as all 4 "Draw 4" cards would come out and some unlucky whelp (usually me) would have to draw 16 cards.

Rapid Succession

The next rule was what really increased the pace of the game. If someone played a card and I had the exact same card, color and number, I could play it out of turn and play would continue as if it had been my turn. Say play is going clockwise and the person on my left plays a Blue 4, if I have a Blue 4 and can play it before the next player, play would continue as if it had been my turn and the same player would need to go again effectively skipping the rest of the players at the table.


And last came the rule and leveled the playing feild and could change the tide of the game in one fell swoop. If you have a 1, no matter the color, and can legally play it, when you do you have the option of trading hands with any other player. Usually this took the form of one player calling "UNO" and another player playing a 1 and trading their pile of cards with the other person’s single card. Other times one players excitement of drawing some cool cards would turn into disappointment as another player traded hands with them. Sneaky players could sometimes bluff others into trading hands with them only to be disappointed with what they got.

Using just these three additional rules Uno became a wild game that would keep teenagers occupied late into the evening at the same time giving adults no chance to coast along. I personally wouldn’t recommend trying these rules with small children as they tend to get confused and frustrated. But my older kids (9 and 11) really enjoy the challenge.

I’ve been promising to write a post about scripting in Xbox Media Center and so here it is. In case you haven’t heard, Xbox Media Center is the single biggest reason to go out and buy an old Xbox (not 360). It can access media from just about any source, be it local, FTP, SMB or UPnP so you can play movies, or play mp3s while viewing a slideshow of your photos or just watching the awesome Milkdrop visualizations. It will also launch your Xbox games and even display the weather for up to 3 customizable locations. Both my brother and I are heavy XBMC fans. He uses a Plextor PVR to record TV shows and then saves them to his 2TB server, then he accesses them from one of his three Xboxs (he has one for each TV in the house). I obtain my content from a variety of sources (Windows Media Center, TiVo, Podcasts and Videocasts, etc) and store them on my Buffalo NAS and then access them from my Xbox in my living room or the PC in the kitchen upstairs.

One of the coolest geek features of XBMC is its integrated support for python scripts. Most copies of XBMC come with a few scripts already installed. One of the quick favorites is called XBMCScripts. This script will help you download and install other scripts. Like most open source projects, the documentation and support are kind of lite, but if you are not afraid to dig in and try to figure things out, there is enough there to get you started. What follows is a narrative of my adventure discovering how to write my first script for XBMC.

The Goal

Being really into podcasts and videocasts, I wanted to write a script that would list the podcasts or videocasts in a RRS feed and let you download and play them directly on XBMC. I realized that the MultiRSS Reader would be a great place to start as that was almost exactly what I wanted to do. So I connect to my Xbox using Filezilla and downloaded the file from the XBMC/scripts directory. Next I opened it up and gazed at the code. Now, I’ve written programs in BASIC, 6502, Pascal, Fortran, iSETL, Redcode, C, 68000, C++, Visual Basic, VBScript, JScript, Perl, C#, PHP and a few more I don’t remember so alot of it looked familiar, but after trying to make a few obvious modifications, it became clear I would need to read some documentation. Thus began my first hunt.

Information Gathering

I started by combing over the XBOXMediaCenter site until I found the wiki page titled Building Scripts this gave some great background information as well as a link to XBMCScripts. From here I was able to download lots of script to use as samples. I also found the most useful link of all to Alexpoet’s XBMC Scripts.Alex shares a few scripts, a XBMCEmulator script and a great tutorial! I also found links to what looked like automatic generated documentation to the xbmc and xbmcgui imports.

After reading the tutorial I wanted to try to install the emulator so I read through Alex’s installation instructions and got a desktop installation of Python up and working. The online documentation that I could find for Python stinks compared to say PHP, but if you take the time to download and unzip the complete documentation it is very good and very thorough.


At this point I realized that python was more bolted onto XBMC than integrated into it. This is good and bad. Good, because python has a rich set of support libraries that makes it very easy to do very powerful things and also good because that meant I could do most of my development on the desktop which greatly sped things up. However it was bad because it meant that accessing the features unique to XBMC could be spotty (which they were). As I was working with I quickly realized that it was designed to handle RSS feeds that were signifcantly smaller than the ones I wanted to handle. So I would need to use a different parsing method. I also want to handle OPML directories of RSS feeds and some of these could be huge ( > 2MB ). I eventually discovered and settled on using the xml.parsers.expat library as it lightweight enough to handle monsterous files and could easily be made very robust and recoverable (something I came to appreciate in python scripts). 


When the student is ready the teacher will emerge….

It was here that I had a most happy accident. I had been playing around with MC360, a very cool skin that almost exactly mimics an Xbox 360 (I know because I have an Xbox360, though it is hardly ever turned on), and noticed some .py files in the extras directory. Here I realized that some of the functionality of this skin was coded in python. I opened up one of these .py files and saw code like the following:

self.addControl(xbmcgui.ControlImage(0,0, 720,576, 'background-green.png'))
self.addControl(xbmcgui.ControlImage(70,0, 16,64, 'bkgd-whitewash-glass-top-left.png'))
self.addControl(xbmcgui.ControlImage(86,0, 667,64, 'bkgd-whitewash-glass-top-middle.png'))
self.addControl(xbmcgui.ControlImage(753,0, 16,64, 'bkgd-whitewash-glass-top-right.png'))
self.addControl(xbmcgui.ControlImage(86,427, 667,64, 'bkgd-whitewash-glass-bottom-middle.png'))
self.addControl(xbmcgui.ControlImage(70,427, 16,64, 'bkgd-whitewash-glass-bottom-left.png'))
self.addControl(xbmcgui.ControlImage(753,427, 667,64, 'bkgd-whitewash-glass-bottom-right.png'))
self.addControl(xbmcgui.ControlImage(60,0, 32,576, 'background-overlay-whitewash-left.png'))
self.addControl(xbmcgui.ControlImage(92,0, 628,576, 'background-overlay-whitewash-centertile.png'))

A quick grep in the skin directory revealed that these files were actually contained in the monsterous Textures.xpr file. So I opened Textures.xpr in my favorite hex editor (Notepad) and lo and behold there at the beginning of the file was a list of all the resource files contained therein. I quickly copied and pasted and cleaned this up into a nice list of resources for the MC360 skin and then I opened the main Textures.xpr and created another nice list of resources for the Mayhem skin. Next I wrote a quick script called ResourceBrowser that merely displayed each Mayhem resource (full-screen) one at a time. With this new found list of resources it was a simple task to create a harness that used xbmc.getSkinDir to determine which resources to try and load.

Hack and Slash

At this point I had a desktop python script that would read RSS and OPML files and parse out the enclosures and an XBMC python script that would display the right kind of UI. All I had to do was merge the two together. Here is where I ran into my first limitation. Since I was working on this at work (long story, don’t ask) I discovered that I couldn’t access the internet, because I was behind a corporate firewall. I had configured XBMC to access the internet through our proxy server, but those settings are not accessible from script, so scripts have no way of knowing what proxy settings you have configured in XBMC.

Before I just added proxy server info to my own settings, I decided to do some poking around. Being fairly confident that I had found all the documentation there was to find on the internet for XBMC, it was time to look at the code. I found the link on XBOXMediaCenter to the SourceForge project and quickly discovered that I could browse the CVS directly from the web. I eventually determined that the code behind the xbmc and xbmcgui imports was in /XBMC/xbmc/lib/libPython/xbmcmodule/ I also discovered browsing the code in xbmcmodule.cpp that a list of all functions that could be called from xbmc.executebuiltin were listed here and all the functions that could be called from xbmc.executehttpapi were listed here. It was here I noticed the FileDownloadFromInternet function. So I ripped out urllib and urllib2 and all the code that went with it and replaced them with a single call that merely downloads the feed to temporary file on the Z drive. I also noticed that built-in PlayMedia command works a lot more consistently than downloading to a temporary file and calling the xbmx.Player().play() function. Why, I am not sure.


So without further ado, here is my first XBMC python script. (I’ve also tried to post this on xbmcscripts but just in case it gets rejected for some reason I’ll leave it up here as well.)

Media Feed Browser – Allows the user to browse a configurable set of RSS and OPML feeds and play any content contained therein.

  • images
  • September 23, 2006

I just spent some time learning that a nifty little feature in WordPress will make your blog show up as a blank page on some versions of Internet Explorer 6.0. I say some because I have 3 computers at home, 2 with IE 6.0 and one with IE 7.0 beta. I could only produce this on one of my machines with IE 6.0 and so I immediately suspected a virus of some sort. After running a virus scan with eTrust and then running Spybot Search and Destroy, everything came up clean. So next I logged into the control panel of my webhost and started editing files. First I changed index.php in my root to see if I was evening getting to my webpage. I thought the problem might be a redirector incompatibility with my host and so I wanted to rule that out. When I saw that my index.php was actually get executed, I started hacking WordPress.

The first file that WordPress loads is wp-blog-header.php which does a little sanity check at the top followed by the following bit of code:

require_once( dirname(__FILE__) . ‘/wp-config.php’);


require_once(ABSPATH . WPINC . ‘/template-loader.php’);


I made the following changes trying to narrow down the problem.

require_once( dirname(__FILE__) . ‘/wp-config.php’);

echo "Got Here";


#require_once(ABSPATH . WPINC . ‘/template-loader.php’);


When I saved and pressed refresh in the browse I saw "Got Here". Next I made the following changes.

require_once( dirname(__FILE__) . ‘/wp-config.php’);


echo "Got Here";


#require_once(ABSPATH . WPINC . ‘/template-loader.php’);


That worked to. So finally on a hunch I tried this.

require_once( dirname(__FILE__) . ‘/wp-config.php’);


require_once(ABSPATH . WPINC . ‘/template-loader.php’);


And it worked. Turns out I had enabled the "WordPress should compress articles (gzip) if browsers ask for them" option and apparently IE 6.0 asks for compressed articles and then fails reading them or something. When I unchecked this option I was able to uncomment out the line above and everything was good to go.


I came across two interesting sites today. The first sells a soap that teaches children how to wash their hands while they are washing their hands. Kind of a learn by doing approach. The trick is that the dispenser has an ink blotter on top that will dispense an ink mark on your childs hand when they dispense the soap. The ink is designed to come off after 15-20 seconds of scrubbing.

The second site I found from an article about using a timer to help your children learn to concentrate. Perhaps I should consider this technique as opposed to the lecture approach that tends to get abstracted and abstracted and overly generalized.

On installing IE 7.0 beta, I noticed that all my website’s RSS feeds were broken. Not being one to shy away from desperate measures, I’ve blew away my WordPress installation, killed my databases and started fresh. Unfortunately this didn’t fix the problem. Turns out the RSS feeds were failing because I had an extra carriage return in my wp-config.php file. Apparently this makes the RSS feed unparsable for Microsoft. I have fixed the problem and I am contacting them about it as well.

My webhosting company is very good, but for some reason they have this one nickel and dime feature. I can have as many domains as I want pointed to the root directory of my account. However, if I want to point a domain to a subdirectory of my account, they want to charge an additional $15/year. Since I have 4 different domains (soon to be five) pointed to my account and being OCAR (obsessive compulsive anal retentive) I was driven to find another way to do this and save myself the annual $60 tax for being lazy and stupid. So what did I do? I start hacking. Most of my techie friends and I use the term hacking to discribe the process of trying to jury-rig a solution together to work around the limits of a technology.

I had seperately decided to use WordPress on each of my sites to make updating quick and easy. During the installation I read in the online documentation (Real men may not read directions, but real geeks at least scan them) that you could share the same database with multiple installs by merely changing the table prefix in the wp-config.php file. So I was thinking if I could just hack the wp-config.php to change the table prefix based on which domain I came in on, I’d have me 5 websites all running on one hacked installation of WordPress. The first thing I needed to do was learn some PHP. It took me less than a second to google extensive documention on PHP including a few samples that I could cut and paste into an index.php and upload and run on my site. In under an hour I had pieced together the code and had everything up and running. The reason I call this hacking is because before this, I knew nothing about PHP and now I still know almost nothing, but it works. :)