Monday, May 13, 2013

How to change the account which SSRS Report Manager Web application runs under

After changing the selected account in both application pool and the rsreportserver.config file, you must force IIS to use NTLM as your authentication mechanism if you want to use Integrated Windows authentication only. To do this, follow these steps on the server that is running IIS:
  1. Start a command prompt. 
  2. Locate and then change to the directory that contains the Adsutil.vbs file. By default, this directory is C:\Inetpub\Adminscripts.
  3. Type the following command, and then press ENTER:
  4. cscript adsutil.vbs set w3svc/NTAuthenticationProviders "NTLM"
  5. To verify that the NtAuthenticationProviders metabase property is set to NTLM, type the following command, and then press ENTER:
  6. cscript adsutil.vbs get w3svc/NTAuthenticationProvider
The following text should be returned:
NTAuthenticationProviders       : (STRING) "NTLM"

DevExpress WPF Grid - NewRowItem is Evil!

If you need any kind of custom validation or special cross-column logic when you enter a new data (new row) in DevExpress.
I recommend to not use the out of the box DevExpress GridControl NewItemRow feature. It is evil!

  


My recommendation is to implement your own new row detail in a separate section.

Reason ? 

The row uses multiple mocked bound object through it's life time. Managing state changes is almost impossible.

If your data source is simple then it might work out. But once you need state inside your row, this feature fails.

For example, try adding custom columns with drop down boxes. Now add some custom logic to filter those drop down based on the object's state.
This is where the NewRowItem gets confused. Everytime you click on it, it will create a mock object at first, to bind the drop down boxes to it. Then when you select the first value -from any drop down- it'll recreate the object, and this time trigger the ColumnView.InitNewRow event.

Monday, May 6, 2013

How to diagnose a freezing Visual Studio plug-in

 What the hell are you doing Visual Studioooooooo!!!!!

Is a phrase I hear many times a week if not daily. If you are a .Net developer I am sure that you've been there.
As a developer, who write multithreaded apps, and made a blood pact to not create one that freezes, there is nothing worse than a continuous freezing -Visual Studio- development environment. 

Well, I have good news and some more good news. Whether you are using Visual Studio 2010 (VS2010) or Visual Studio 2012 (VS2012), there is a way to hunt the cause and disable it. You will need: 
  • NuGet: I am sure you already have it, if you don't. There is work around.
  • Component Diagnostics - another plug-in available through NuGet or at Visual Studio Gallery This plugin was developed by Paul Harrington. A great innovation, yet under exposed.

Diagnosing the problem 

If you just started facing the problem out of the blue, and you have a decent computer specs. It's possible that some plug-in updated itself, and like every software. It's possible to have bugs, especially with today's rapid agile releases. Performance testing is rarely ever implemented, again especially with free plugins. 

First, verify that its a plug-in. Use the DevEnv.exe /SafeMode argument

If your experience suddenly becomes better and no more freezing, then it's definitely a plug-in

Second, find the trouble making plug-in 

So what is making your VS environment freeze? using the above mentioned plug-in

go to the new Component Diagnostics tool window ==> Package Manager Tab
scrolling down the list, I search for the plug in that took the most time to load. One stands out VSCommandPackage with it's 10K microseconds AutoLoad time. 
10 seconds might not sound like a long time, but add to it to all the other packages Avg 0.5~2 second and it you start to feel it, everytime you open a solution. Possibly every time you open a file or even build.

How to fix it ?

Going back to NuGet, simply disable it and try the impact. Reopen VS. Open solutions, Menues and files, build. 




Saturday, November 7, 2009

How buggy software could bring great hardware to it's knees

Being a developer feels sometimes like a curse. Even though it can resolve complex software issues, 3rd party installs, etc... It is also painful to see 2-7 hours of you personal life time burn away because of another outrageous development mistake. Superior hardware components brought down on it's knees because of one line of code, or lack of it.

My latest painful experience was with the "HP Wireless Office Jet 8500 All in one Printer, Fax and Scanner" installer. Tsk tsk HP!
 At some point during installation, the software tries to install Flash9f.ocx V9. My computer; however, had Flash V10 installed. This caused an error. The TITLE of that error window had the following error code:

"hpzsetup.exe" "-f" ".\autorun_network.inf" "-networkonly" "-wStub" "263454"

Might as well say GUESS!

This simple Flash version check (which is less than 2 hours worth of development time) could have saved me "a single customer" 14+ hours of my time. I am sure that many other novice customers, would have returned this after a couple of hours of frustration and fiddling with the uninstall/install options. If not, they would have settled for 1/8 of the installed features during that buggy and faulty installation.
I wonder how much did this mistake cost HP; returns, phone support, reputation which equals future recurring purchases. That was my experience with Cannon scanners, and that's why I decided to try HP this time "Drivers". It seems that HP has fallen behind in this particular instance. The reviews on Amazon at the time of writing this blog were 26 (one stare) / 39 (5 star)
I guess they will keep falling, unless someone at HP wakes up and fix the installer before flash 12 :)

Below is another error code generated and logged after a recovery attempt.

---------------------------
Error Situation Code: 24749208
---------------------------
The following lines were retrieved from the installation error logs.



= Application did not return ERROR_SUCCESS. Returned 0x2

Exit code=1602

= Application did not return ERROR_SUCCESS. Returned 0x2

LaunchApp(X:\hpqtra08.exe -shutDown,1,00000000,00000000) failed with 2

Error opening key HKLM\SOFTWARE\Hewlett-Packard\Install\{624E7452-BA43-4f55-B9D5-FC75EEA0808B}. error=2

Error message received: Module X:\Flash9f.ocx failed to register. HRESULT -2147220473. Contact your support personnel.

Timed out waiting for product finish event

RUN: Driver UI Plug-In exits returning 50

= Application did not return ERROR_SUCCESS. Returned 0x2

RUN: Driver UI Plug-In exits returning 50

= Application did not return ERROR_SUCCESS. Returned 0x2

LaunchApp(X:\hpqtra08.exe -shutDown,1,00000000,00000000) failed with 2

Error opening key HKLM\SOFTWARE\Hewlett-Packard\Install\{624E7452-BA43-4f55-B9D5-FC75EEA0808B}. error=2

Error message received: Module X:\Flash9f.ocx failed to register. HRESULT -2147220473. Contact your support personnel.

X:\GPBaseService2.msi failed with return code 1602

MSIInstall() failed with 1602 for MSI GPBaseService2

Exit code=1602

Exit code=21

= Application did not return ERROR_SUCCESS. Returned 0x2

LaunchApp(X:\hpqtra08.exe -shutDown,1,00000000,00000000) failed with 2

Error opening key HKLM\SOFTWARE\Hewlett-Packard\Install\{624E7452-BA43-4f55-B9D5-FC75EEA0808B}. error=2

Timed out waiting for product finish event

GetDatFileName() returned FALSE. We need a dat file to run.

= Application did not return ERROR_SUCCESS. Returned 0x2

LaunchApp(X:\hpqtra08.exe -shutDown,1,00000000,00000000) failed with 2

Error opening key HKLM\SOFTWARE\Hewlett-Packard\Install\{624E7452-BA43-4f55-B9D5-FC75EEA0808B}. error=2

Error message received: Module X:\Flash9f.ocx failed to register. HRESULT -2147220473. Contact your support personnel.

Timed out waiting for product finish event


---------------------------
OK
---------------------------

Thursday, August 6, 2009

Problem upgrading Teradata ODBC drivers from v6 --> v12

Problem upgrading Teradata ODBC drivers from v6 -->; v12

I used to get this error while installing the Teradata ICU libraries v12
---------------------------
Shared ICU Libraries for Teradata
---------------------------
Error applying transforms. Verify that the specified transform paths are valid.

C:\WINDOWS\Installer\{8AFBC2EB-BB17-43C8-8AE0-5B7961A4A217}\1033.mst
---------------------------
OK
---------------------------

So I found a similar issue here http://support.microsoft.com/kb/299699 and I decided to remove the Teradata ICU reference using Windows Installer Cleaner http://support.microsoft.com/kb/290301

That seems to have resolved my problem, and this is why I shared it :)



Tuesday, January 27, 2009

SharePoint Unit Tests on a Vista Ultimate 64bit

An issue/problem I’ve experienced recently with VS Unit Testing & SharePoint OM Mode. It is impossible to run VS Unit Tests that connect to the OM on a 64bit machine. Reason is that Visual Studio is a native 32bit app and since it runs in splwow64 mode, it cannot connect to a WSS 64bit process. 32bit & 64bit COM dlls can't mix.

Just Something to observe if you get an error similar to 

Test method AiE.UnitTests.WorkshopBusinessRulesTest.UpdateWorkshopInstanceTest threw exception:  System.ApplicationException: Problem Accessing SharePoint site --->  System.IO.FileNotFoundException: The Web application at http://localhost:3333/workshops could not be found. Verify that you have typed the URL correctly. If the URL should be serving existing content, the system administrator may need to add a new request URL mapping to the intended application..

Friday, October 3, 2008

C# .NET Extension Methods with a Generic List

I was asked by a client today on how to write an extension methods and whether I use them or not. So while searching for examples in my own code I decided to share this snippet since you will at some project need to create a comma separated list of strings, integers or objects

This example uses generic extension method to convert a list of any type to a string comma separated list

    ///
    /// Contains List Extension Methods
    ///
    public static class ListExtensions
    {
        ///
        /// Converts the current list items to a comma separated string
        /// 
        public static string ToCommaSaperated(this List myList)
        {
            string ret = string.Empty;
            for (int i = 0; i > myList.Count; i++)
            {
                if (myList[i] != null && !string.IsNullOrEmpty(myList[i].ToString()))
                {
                    if (i == 0)
                        ret = myList[i].ToString();
                    else
                        ret += "," + myList[i].ToString();
                }
            }
            return ret;
        }
    }

to use this function we would:

List lstUsers= getAllUsers();
lstUser.ToCommaSeparated();

and with a proper override of the ToString() virtual method you should get a proper list of comma separated user names for example


public class CustomUserObject
{
    public override string ToString()
    {
       return firstName+" "+lastName;
    }
}