Monday, December 08, 2008

Silverlight instead of JavaScript?

I would not recommend anyone to use Silverlight instead of JavaScript, because of low tolerance of the former to browser differences. Besides, why would you trade your almost strongly typed JavaScript to weakly typed Silverlight syntax like:

HtmlElement label1 = HtmlPage.Document.GetElementById("Label1");
label1.SetProperty("innerHTML", "Dino");
However there is one scenario that could provide a good case for using Silverlight in place of JavaScript, as described here: http://msdn.microsoft.com/en-us/magazine/dd148642.aspx . Look at this piece of code:

HtmlElement button1;
button1 = HtmlPage.Document.GetElementById("Button1");
button1.AttachEvent("click", new System.EventHandler(Button1_Click));
You can attach a managed event handler to an HTML button!

Tuesday, August 12, 2008

How to fail the build if unit tests fail.

I just realized that the way TFS is architected is that it will mark the tests "Partially Succeeded" if the unit tests fail. This does not agree with out development process. Our development process prescribes that the build should fail if any of the unit tests fail. One way to deal with this problem is to edit C:\Program Files\MSBuild\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets and set ContinueOnError to false.

Another way of dealing with this was suggested in the blog entry http://blogs.msdn.com/aaronhallberg/archive/2007/11/05/how-to-fail-a-build-when-tests-fail.aspx

I modified the code suggested there to make sure also that the files are not copied to the drop location if the unit tests fail.


<Target Name="AfterTest">


<!-- Refresh the build properties. -->


<GetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)"


BuildUri="$(BuildUri)"


Condition=" '$(IsDesktopBuild)' != 'true' ">


<Output TaskParameter="TestSuccess" PropertyName="TestSuccess" />


</GetBuildProperties>


<!-- Set CompilationStatus to Failed if TestSuccess is false. -->


<SetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)"


BuildUri="$(BuildUri)"


CompilationStatus="Failed"


Condition=" '$(IsDesktopBuild)' != 'true' and '$(TestSuccess)' != 'true' "/>


<SetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)"


BuildUri="$(BuildUri)"


SkipDropBuild="true"


Condition=" '$(IsDesktopBuild)' != 'true' and '$(TestSuccess)' != 'true' "/>


</Target>

Thursday, July 17, 2008

Mock object framework makes refactoring difficult

Probably unintended consequence of using a mock object framework is that it makes refactoring somewhat difficult if the method signature changes, or if methods are split/combined or rearranged to different interfaces. Sometimes I am having really hard time in getting the test back to the working condition, and often don't know why I need to do what I have to do to get it fixed.

Tuesday, July 15, 2008

FxCop rigidness

What drives me really crazy in FxCop is that I cannot easily change the MessageLevel of the built-in rules. The XML file describing rules is compiled into the rule assemblies as an embedded resource, so the only option for me is to create a new rule assembly, copy the XML file, exclude the old rule and include the new rule. I'd rather change the MessageLevel using FxCop project files.

Monday, July 14, 2008

Misfeature of FxCop 1.36

When upgraded to version 1.36 I started getting the messages "Strong name doesn't match the reference", or "Could not resolve member reference".

The solution can be found here. What worked for me is setting AssemblyReferenceResolveMode to None.

Friday, July 11, 2008

Problem with CollabNet SVN 1.5

When I upgraded I started getting messages like this:

Failed to load module for FS type 'bdb'

Apparently bdb module is not working (or maybe they forgot to include it?) in the CollabNet distribution. I had to use the old binaries to migrate the repositories from bdb to fsfs like this:

svnadmin create NEW_REPOSITORY
svnadmin dump OLD_REPOSITORY | svnadmin load NEW_REPOSITORY

where NEW_REPOSITORY is the file path to the new fsfs repository and OLD_REPOSITORY is the file path to the old bdb repository.

Sunday, July 06, 2008

BizTalk services let you expose stuff on internal network?

See http://msdn.microsoft.com/en-us/magazine/cc546613.aspx. Using RelayedHttp you can expose the web service on your internal network to the internet. But I wonder how this thing work? Is the service polling the BizTalk services all the time to check if there is any request?

Monday, May 19, 2008

Process owner

Some people own the process they are using, the others are owned by the process. It is especially sad when the people who invented the process in the first place start being owned by it.

Monday, May 12, 2008

QTP license blues

After a few times when QTP refused to find a license server I finally found a solution: in Windows firewall you need to open UDP port 5093.

Tuesday, May 06, 2008

Evangelists

There are so many Microsoft evangelists now, so I started wondering if there is also a Microsoft seminary.

Monday, April 28, 2008

AquaLogic® BPM

AquaLogic® BPM seems to be way more advanced workflow engine than Microsoft WF. In particular it is designed to work for human workflow, which Microsoft WF is not.

Typemock

If you have $450 per developer to spare consider buying TypeMock Isolator. It is especially useful when writing unit tests for a legacy system that is not well-designed. It is interesting to see how you can make sense of the spaghetti code by mocking everything: public methods, private methods, etc. Of course before that you should get ReSharper for much cheaper...

Wednesday, April 16, 2008

How to avoid session expiration

http://www.codinghorror.com/blog/archives/001100.html

Create a background JavaScript process in the browser that sends regular heartbeats to the server. Regenerate a new cookie with timed expiration, say, every 5 or 10 minutes.

Monday, April 14, 2008

VS2008

How is Visual Studio 2008 improving developer's productivity if it is twice slower than Visual Studio 2005?

Monday, April 07, 2008

VS2008 web projects

I was so happy when in VS2005 the web projects did not require any virtual directory to be set up. This allowed me to be working on multiple branches of the same web applications. In VS2008 we are back to the old stuff of requiring that the physical directory should match the virtual directory specified in the project file. WHY? This thing does not make any sense to me!

Wednesday, April 02, 2008

Web Client Software Factory

http://www.codeplex.com/websf

I have an impression that this was called something like "Composite application block" or something, because I tried it a year ago. At that time it impressed me with complexity. Did not quite fit into what Microsoft is trying to sell as "Software Factories". We'll see if some of the shortcomings are addressed in this incarnation.

Thursday, March 27, 2008

CI Factory

Wow! Continuous integration out of the box. Everything integrated! Just install and configure it! CI Factory

Wednesday, March 05, 2008

Why can't I throws an exception in .Net?

I used to belong to the camp that says that throwsing exception in Java is useless and you would rather not catch any exception until in the outer program catching all exceptions. Now working on the code I see a lot of random "catch all" statements that were originally meant to catch only OracleException or ParseException, but eventually that knowledge was forgotten and we started also swallowing other exceptions that we did not intend to do in the beginning. Thus if there is a problem in the code I cannot diagnose it until I start debugging it.

Instead if, like in Java, the methods were throwsing the exceptions forcing the client methods to catch them or to throws them further the developer's task would be much easier figuring out what exceptions need to be caught or rethrown.

Thursday, February 21, 2008

Friday, January 18, 2008

TFS 2005 installation problems

While installing TFS 2005 you may get many error messages during the system health check. Some of the messages may be quite misleading. To find out more details you can open a file called hcpackage.xml (in the folders at, dt or atdt) and find the error message. The file also has WMI queries that are being executed to determine if an error condition exists. Sometimes there are multiple WMI queries that result in a single error message, so you have a much better chance to troubleshoot the problem and resolve the installation issue. You can also try to edit the file and remove the WMI if your environment cannot conform to the TFS 2005 requirements.

Thursday, January 10, 2008

Unit test generator

Just an idea: what if we had the software that would automatically generate unit tests for all success scenarios? It would work like this:
1. Attach to the running process as a debugger
2. The user would use the application to test all success scenarios
3. The generator program would record all the method invocations with all the parameters.
4. After the application that is being debugged exits the generator program would use the information about methods invocation and generate NUnit tests.