Pop up Windows Not Displaying in Internet Explorer 9 on Windows 7
Came across a strange problem at work today. A Windows 7 32bit workstation that was recently upgraded to to IE 9 started exhibiting some strange behavior. All of the pop up window links (on any website) no longer worked. Clicking on a link that should open a popup window did nothing and displayed no error message. Other browsers were unaffected and correctly displayed pop up windows. Everything was functioning correctly for about two weeks after the upgrade so it didn't appear to be a failed upgrade. Unfortunately by the time the problem was discovered it wasn't possible to roll back to a system state before IE 9.
By enabling the Internet Explorer Developer Tools option (F12) I was able to see a No Such Interface Supported (NSIS) JavaScript error when I clicked on a pop up link. Googling around revealed similar problems with prior versions of IE but nothing specific to IE 9. Several suggestions to run the command "regsvr32 actxprxy.dll" didn't work.
The problem was finally resolved by running the IE repair tool from Internet Explorer FAQ. The tool is a command script to re-register a long list of common controls that Internet Explorer depends on. After downloading and running the correct script (Right click, run as administrator) the problem was immediately resolved.
Hope this helps someone looking for an explanation why pop up windows in Internet Explorer 9 on Windows 7 may have stopped working.
Tech Community Experiences: YouTube and Fair Use
The Coding Horror blog has an interesting and informative entry about his experiences posting video to YouTube for his blog. From a legal standpoint it's thought provoking and from a technical standpoint the technology employed by Google (erm I mean YouTube) is impressive. If you've posted content created by someone else, thought about posting, or every wondered how YouTube handles copyright complaints it's an interesting read.
9/17/2010 - YouTube vs. Fair Use
Thoughts of a Gmail Convert
Recently I converted my mail client from Lotus Notes to Gmail. Sure, I had a Gmail address but only so I could enjoy the benefits of Google Wave and Google Voice.
Lotus Notes has always had a soft spot in my geek heart because it pioneered mail file replication and provided advanced search queries. Unfortunately it lacked in a streamlined client and to run a Domino server for myself just wasn't feasible.
Google Apps promised a solution to cover my email, scheduling, and more for only $50/yr. Considering an Exchange account from 1and1 is almost $84/yr the trade up to Google Apps seemed attractive considering all of the features available.
My initial evaluation of the Gmail interface have been surprising, negatively surprising. This isn't a gripe session and overall I'm impressed with Gmail and Google Apps but I'm shocked at the lack of certain features.
Notably, how to keep labeled items out of the inbox. Thanks to David Tan for demonstrating the magical setup of filters to arrange the inbox.
Gmail supports Active Sync for connecting my outlook data to Windows Mobile phones but the connector won't sync my phone tasks with the Gmail tasks.
Oh, and no HTML embedded signatures? Gesh.
One of the advantages to Gmail is the numerous and widely used methods of checking email, POP, IMAP, Webmail, Exchange, Active Sync, etc so in the long run the lack of features in the Gmail interface shouldn't be a stumbling block.
More to follow as I probe the depths of the Google Apps world.
Loading Specific Versions of .NET Assemblies From the GAC Based on the Assembly Information in a .NET DLL – Visual Basic Example Code
By default the latest version of an assembly is loaded from the GAC (Global Assembly Cache) when the assembly is instantiated. While working on a side project the need arose to load older versions of the assembly without hard coding the assembly versions. The answer, load the existing assembly library from the assembly DLL and interrogate it to find the assembly information. Then ask the GAC to provide a handle to the specific object. The result allows multiple versions of the same assembly to be loaded loaded at the same time.
The Visual Basic .NET example code below loads SampleAppV1\DotNetLibrary.DLL and AnotherSampleAppV2\DotNetLibrary.DLL which are different versions of the same assembly.
'Load assembly using reflection from the file specified so we can get information about it Dim DLLAssemblyInfo As System.Reflection.Assembly DLLAssemblyInfo = System.Reflection.Assembly.LoadFrom("\\\\appserver.company.int\\SampleAppV1\\DotNetLibrary.DLL") 'Now load the assembly from the GAC using the information in the file. Dim GACDLL As System.Reflection.Assembly GACDLL = System.Reflection.Assembly.Load(AssemblyInfo.FullName, DLLAssemblyInfo.Evidence)
'Load the second version of the same assembly from the newer application
Dim DLLAssemblyInfoV2 As System.Reflection.Assembly
DLLAssemblyInfoV2 = System.Reflection.Assembly.LoadFrom("\\\\appserver.company.int\\AnotherSampleAppV2\\DotNetLibrary.DLL")
'Again, use the DLL information from the assembly file to load the assembly from the GAC Dim GACDLLv2 As System.Reflection.Assembly GACDLLv2 = System.Reflection.Assembly.Load(AssemblyInfoV2.FullName, DLLAssemblyInfoV2.Evidence)
'At this point in the code we have references to both assemblies loaded from the GAC. The next step is to instantiate an object from each of the references.
'Get an MyAssembly.Library from the old version and run the version method Dim GACDLLType As Type = GACDLL.GetType("MyAssembly.Library") Dim MyLibV1 As Object = Activator.CreateInstance(GACDLLType) Dim v1 As String v1 = MyLibV1.Version
'Finally, do the same and get the new MyAssembly.Library Dim GACDLLTypeV2 As Type = GACDLLV2.GetType("MyAssembly.Library") Dim MyLibV2 As Object = Activator.CreateInstance(GACDLLTypeV2) Dim v2 As String v2 = MyLibV2.Version
The variables v1 and v2 were both retrieved from the MyAssembly.Library.Version() method but the variables will not contain the same value because different versions of the assembly were loaded from the GAC during the System.Reflection.Assembly.Load() call.
Why not just load the assembly from each of the DLL files instead of the GAC? Security restrictions prevented untrusted assemblies from being loaded over the network. A possible work around would be to trust the network location or sign the assemblies and trust the signer but that remains for another posting.
Excel 2007 Insert Column Slowed by Google Desktop
On a spring afternoon a call came in from a very exasperated client. "Why is my excel coming to a crashing halt? Is 120,000+ rows too many in a spreadsheet? How come it keeps locking up!" He spoke with the unmistakable tone that indicated his computer was about to take flight from his second story window.
The sheet was only 17MB in size with about 120,000 rows, a few pivot tables, and no complex formulas. Every time he would insert a new empty column on the main sheet Excel would come to a screeching halt. After about 10 minutes the operation would complete. Turning off automatic calculations and starting excel with the /safe switch resulted in no change of behavior.
After some creative Google searches I came across a post about Google Desktop slowing down excel. With nothing to to lose Google Desktop was un-installed and miraculously the insert column took 1 second instead of 1o minutes!
Further examination revealed another blog posting that further explained the underlying problem.
Ironic, isn't it? Searching Google revealed Google Desktop to be the culprit of the slow down.