Thursday, February 11, 2010

Automatic Updates Strikes Again!

Visual Studio 2008, greeted me with this message:

Cannot find one or more components. Please reinstall application.


I awoke this morning to discover that Automatic Updates had happily updated and rebooted my laptop. Fine, whatever. I'd saved my important stuff before turning in last night, so no big deal, just annoying... except for the part where it seemingly destroyed my completely legal and presumably up-to-date install of VS 2008.

Fortunately after some digging I found a solution here, which basically involves recovering at least one DLL (in my case, ATL90.DLL) and copying it to a folder with a name similar to "C:\WINDOWS\WinSXS\x86_Microsoft.VC90.ATL_1......"

The actual destination folder appears to include a build number, so maybe whoever at Microsoft released this latest update to the masses simply forgot to include this essential little file in the update?

I found some of the other missing DLL names amusing. IESHIMS.DLL, for example, includes the word "shim", which in engineering parlance is "...a thin and often tapered or wedged piece of material, used to fill small gaps or spaces between objects," but in computing is "...a small library that transparently intercepts an API, changing the parameters passed, handling the operation itself, or redirecting the operation elsewhere." WER.DLL contains wer, which is in German a pronoun for "who".

Speculation abounds. Who will we pick from our resource pool to fix this, someone who knows their shit, or a convenient intern instead? I wonder if our team lead would like a shim shoved where the sun don't shine to facilitate following some semblance of best practices?

This cries out as a leftover hunk of code that maybe someone at Microsoft slapped together years ago and put it on their little Post-It™ of a todo list to tidy up, which happened to be close to the shredder, which also happened to be in an office with a ceiling fan set on ludicrous speed or a cat with an affinity for ink and paper.

Or, maybe the original developer given the task to do this was killed in a fatal car crash, never to replace the shim with something more... elegant.

Now I'm asking Microsoft the question, who shimmed on my work, and how may I smite them?


3/8/2010 - UPDATE

A user in the forum thread I mention above was able to reinstall the following Microsoft security update and successfully dig themselves out of the pit of despair this error caused:


Microsoft Visual C++ 2008 Service Pack 1 Redistributable Package ATL Security Update

GHFBHMX20410479



Friday, December 4, 2009

IE8 Blank Page, Can't Browse

After some recent Windows updates, I noticed that Internet Explorer 8 didn't seem to want to browse the web.

I'd open the browser, and it wouldn't even open my home page, it would just sit at a blank screen. I could tell it was doing something; if I clicked Help, the dropdown menu showed Customer Feedback Options as the only available item (ironically enough), everything else was grayed out.

Further, if I opened a new tab and chose Reopen Last Browsing Session, it would at least load my previous session just fine, but any attempts to browse beyond this failed, as if IE8 were just spinning its wheels.

I found a fix here which worked for me. The original forum post includes a modified version of the IEREREG batch file by Kai Schaetzl that works with 64-bit Windows, but the one I'm quoting below works specifically with 32-bit Windows. It has comments describing various symptoms each step intends to address, it's almost like electroshock therapy for Internet Explorer, it re-registers many of the system components it needs in place to function normally.
@echo off
echo.
echo IEREREG Version 1.07 for IE8 27.03.2009
echo by Kai Schaetzl http://iefaq.info
echo installs and registers (if suitable) all DLLs known to be used by IE8.
echo should only take a few seconds, but please be patient
echo.
REM ******************************
echo registering IE files
REM IE files (= part of setup)
regsvr32 /s /i browseui.dll
REM regsvr32 /s /i browseui.dll,NI (unnecessary)
regsvr32 /s corpol.dll
regsvr32 /s dxtmsft.dll
regsvr32 /s dxtrans.dll
REM simple HTML Mail API
regsvr32 /s "%ProgramFiles%\internet explorer\hmmapi.dll"
REM group policy snap-in
regsvr32 /s ieaksie.dll
REM smart screen
regsvr32 /s ieapfltr.dll
REM ieak branding
regsvr32 /s iedkcs32.dll
REM dev tools
regsvr32 /s "%ProgramFiles%\internet explorer\iedvtool.dll"
regsvr32 /s iepeers.dll
REM Symptom: IE8 closes immediately on launch, missing from IE7
regsvr32 /s "%ProgramFiles%\internet explorer\ieproxy.dll"
REM no install point anymore
REM regsvr32 /s /i iesetup.dll
REM no reg point anymore
REM regsvr32 /s imgutil.dll
regsvr32 /s /i /n inetcpl.cpl
REM no install point anymore
REM regsvr32 /s /i inseng.dll
regsvr32 /s jscript.dll
REM license manager
regsvr32 /s licmgr10.dll
REM regsvr32 /s msapsspc.dll
REM regsvr32 /s mshta.exe
REM VS debugger
regsvr32 /s msdbg2.dll
REM no install point anymore
REM regsvr32 /s /i mshtml.dll
regsvr32 /s mshtmled.dll
regsvr32 /s msident.dll
REM no reg point anymore
REM regsvr32 /s msrating.dll
REM multimedia timer
regsvr32 /s mstime.dll
REM no install point anymore
REM regsvr32 /s /i occache.dll
REM process debug manager
regsvr32 /s "%ProgramFiles%\internet explorer\pdm.dll"
REM no reg point anymore
REM regsvr32 /s pngfilt.dll
REM regsvr32 /s /i setupwbv.dll (not there anymore!)
regsvr32 /s tdc.ocx
regsvr32 /s /i urlmon.dll
REM regsvr32 /s /i urlmon.dll,NI,HKLM
regsvr32 /s vbscript.dll
REM VML renderer
regsvr32 /s "%CommonProgramFiles%\microsoft shared\vgx\vgx.dll"
REM no install point anymore
REM regsvr32 /s /i webcheck.dll
regsvr32 /s /i /n wininet.dll
REM ******************************
echo registering system files
REM additional system dlls known to be used by IE
REM added 11.05.2006 Symptom: Add-Ons-Manager menu entry is present but nothing happens
regsvr32 /s extmgr.dll
REM added 12.05.2006 Symptom: Javascript links don't work (Robin Walker) .NET hub file
regsvr32 /s mscoree.dll
REM added 23.03.2009 Symptom: Find on this page is blank
regsvr32 /s oleacc.dll
REM added 24.03.2009 Symptom: Printing problems, open in new window
regsvr32 /s ole32.dll
REM mscorier.dll
REM mscories.dll
REM Symptom: open in new tab/window not working
regsvr32 /s actxprxy.dll
regsvr32 /s asctrls.ocx
regsvr32 /s cdfview.dll
regsvr32 /s comcat.dll
regsvr32 /s /i /n comctl32.dll
regsvr32 /s cryptdlg.dll
regsvr32 /s /i /n digest.dll
regsvr32 /s dispex.dll
regsvr32 /s hlink.dll
regsvr32 /s mlang.dll
regsvr32 /s mobsync.dll
regsvr32 /s /i msieftp.dll
REM regsvr32 /s msnsspc.dll #no entry point
regsvr32 /s msr2c.dll
regsvr32 /s msxml.dll
regsvr32 /s oleaut32.dll
REM regsvr32 /s plugin.ocx #no entry point
regsvr32 /s proctexe.ocx
REM plus DllRegisterServerEx ExA ExW ... ?
regsvr32 /s /i scrobj.dll
REM shdocvw.dll hasn't been updated for IE7 and IE8, it still registers itself for the Windows Internet Controls
regsvr32 /s /i shdocvw.dll
regsvr32 /s sendmail.dll
REM ******************************
REM PKI/crypto functionality
REM initpki can take very long to run and is rarely a problem
REM if there are problems with crypto, SSL, certificates
REM remove the three following REMs from the lines
REM echo We are almost done except one crypto file
REM echo but this will take very long, be patient!
REM regsvr32 /s /i:A initpki.dll
REM ******************************
REM tabbed browser, do at the end, why originally with /n ?
regsvr32 /s /i ieframe.dll
REM ******************************
echo correcting bugs in the registry
REM do some corrective work
REM Symptom: new tabs page cannot display content because it cannot access the controls (added 27. 3.2009)
REM This is a result of a bug in shdocvw.dll (see above), probably only on Windows XP
reg add "HKCR\TypeLib\{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}\1.1\0\win32" /ve /t REG_SZ /d %systemroot%\system32\ieframe.dll /f
REM ******************************
echo all tasks have been finished
echo.
pause

Once I created and ran the batch file I created above, IE8 can now happily continue to force web developers to make absurd accomodations for its nonconformist self. BING!



Friday, November 6, 2009

Getting Off God

Why would God frown upon humans using their bodies in every conceivable way, especially if God created these possibilities in the first place?

Assume for a moment God exists and did indeed create everything.

That means we were created according to Its grand design. This means that some women, for example, are double-jointed and incredibly flexible (Giggity!). It also means that anything conceivable we do to ourselves is enabled by God's design.

Since the cartilage of our ear lobes can be pierced, we can adorn them with earrings. Since our skin holds dye, we can give ourselves tattoos. This also means that since we can manually pleasure ourselves, we can masturbate.

If God indeed created these and so many other possibilities, painful as well as pleasurable, why presume these are wrong based upon the limited vision of those "inspired" by God to write Scripture, which has been interpreted to make many such activities sin?

Wednesday, November 4, 2009

RECAPTCHA the Imagination!

One of my favorite blogs, I AM NOT A ROBOT, specializing in user-contributed images highlighting sometimes wild and zany RECAPTCHA text.








In the immortal words of Forrest Gump, "You never know what you're gonna get." In this case, it can be a wonderfully goofy exercise in creativity.

Saturday, October 24, 2009

Wolfram Alpha - Divide By Too Many Zeros?

I seem to have inadvertently discovered a way to make Wolfram Alpha unavailable to me, at least for a little while.

At first I input a typical divide by zero, 1/0, it returned quickly enough with the expected response.


Then through the miracle of copy-and-paste I input the following into the search box:

1/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0


In response, I eventually got this back:

"This Wolfram|Alpha Server is temporarily unavailable."


I guess as far as Wolfram Alpha goes, if you can't dazzle it with brilliance...

Monday, October 19, 2009

Drive Technology, Make Cars Smarter

I just saw this tragic video detailing the 911 call's final moments of a family whose 2009 Lexus ES350 experienced uncontrolled acceleration, leading to a fatal crash.

According to the original LA Times article, the driver, Mark Saylor, was a veteran California Highway Patrol officer, and a related article states that Saylor and his family "
had taken their own Lexus to a dealer for servicing and been given a loaner Lexus in its place."

I've driven loaner or rental cars for various reasons, either while waiting for my regular ride to be repaired, or for fun, as was the case with a Ford Mustang convertible my wife and I took on a beach trip to St. Augustine. With a new vehicle comes new features. In my case, there was a learning curve in getting to know how to put the Mustang's top down, certainly not for safety's sake, but convenience, and of course fun. I didn't rent the convertible for the privilege of driving a Mustang, despite its heritage (Bullitt fans, represent!).

Should the Saylor family have reasonably been expected to know they'd need to compensate for sudden, uncontrolled acceleration? In my opinion, no; if you're driving a car, you expect it to be fully under your control, especially where speed and drivability are concerned.

If the car has pushbutton ignition as this one does, it seems to raise the bar a bit on what it expects the driver to be able to control. Removing the physical act of turning a key to start or stop the vehicle places the driver into a new paradigm as far as driving is concerned.

As this article regarding Toyota's safety advisory details, the driver must "
firmly and steadily push the button for at least three seconds to turn off the engine".

When I think to myself, could I push and hold my car's start button for three seconds to shut down the engine? Sure, why not? Could I do the same in a panic situation, in the middle of rush-hour traffic? California, specifically Los Angeles rush-hour traffic, trying at once to avoid a collission while at the same time trying to calm my passengers who are probably flipping out as much or more than I am?? Probably not! Therein lies the problem.

I think Toyota would do well to pioneer at least audio and possibly video warnings and introductions to their cars in the rental or loaner role.

If a car is a rental or loaner, perhaps when the driver sits down and buckles in they'd be presented with a little audio-visual presentation on the basic safety features of their vehicle. Only when the user acknowledges and signs off on basic awareness of these features, perhaps by hitting a big OK button on the car nav system's touchscreen or HUD, would they be allowed to actually get on the road.

Of course, given the level of computerization today, you might expect your car to go above and beyond the now trivial "your door is ajar", and do something like, well, prevent the car from entering the runaway acceleration state in the first place.

Why would a car be accelerating uncontrollably for any good reason, particularly in rush hour? If you're a police officer this would be perfectly reasonable to expect, you along with your sirens and flashing lights would weave in and out of traffic at high speed in pursuit of some suspects who have perhaps just robbed a bank or carjacked some poor motorist at a busy intersection. If you're an average joe taking the family out for a cruise, however, there's no reason to expect this, particularly in a rental or loaner.

What should Toyota do to prevent more tragic deaths due to uncontrolled acceleration?
  • TO SAVE LIVES, the car's onboard computer should maintain situational awareness and if necessary disable the engine or otherwise allow the driver to maintain complete control of the vehicle, before an uncontrollable state is reached.

  • TO PROTECT ITSELF, legally, it should enable a rental or loaner "mode" for its vehicles, allowing a dealership or rental company the option of having the car force its driver to OK and acknowledge safety features before allowing the car to be driven.

While I think it is certainly in the scope of driver responsibility to make onself fully aware of a vehicle's basic safety features before driving it, I think it is wholly within the manufacturer's responsibility to make their vehicles smarter.


Friday, October 16, 2009

How To Block New digg.com Ads

Recently, digg has embedded new advertising within its list of news stories, making them easier to click and detracting from what might otherwise be an interesting glance at potentially interesting copy.

You can click Bury to blot the ad out, leaving an "X" and the parting remark, "We'll try to give you fewer ads like that one." Well, gee, how about NO ads instead??

To hide this advertising, you can use Firefox in conjunction with the AdBlock Plus add-on and a companion extension, the Element Hiding Helper.

Here's a screenshot of the digg frontpage with just AdBlock Plus enabled. Note that the third entry from the top is a sponsored ad for weight loss supplements. How annoying!



The Element Hiding Helper lets you seamlessly hide text elements appearing as part of the useful content of the page you're viewing. In this case, the new ad element digg is using is encapsulated by a div tag which resembles this:
     <div rel="digg-ad:xyz" style="z-index: 5;" class="news-summary v img-summary sponsored"> 

I chose to filter the ad based on the rel attribute of the tag, specifically the "digg-ad" portion which is consistent from one of the new digg ads to the next (the xyz is a number which differs with each ad element).

I brought up the AdBlock Plus Preferences, and clicked Add Filter. Then, I input the element syntax like so:

digg.com##div[rel*="digg-ad"]

The digg.com ensures that I'm focusing on filtering these particular elements from digg.com only, while the remaining syntax filters out elements where the rel attribute begins with digg-ad.

Now, the result, no more sponsored ad element:



You'll also notice that in among the preferences list is a new subheading, "My Element Hiding Rules", which are rules specific to hiding elements within the web page itself.




You can find a good explanation here on how to pinpoint and filter elements that you find obscure your browsing experience.