Paulo Morgado

.NET Development & Architecture

This Blog

Syndication

Search

Tags

News

Unit Test Today! Get Typemock Isolator!

Projects

Books

 

Visitors

Visitor Locations

Community

Email Notifications

Archives

Profile

Disclaimer

The opinions and viewpoints expressed in this site are mine and do not necessarily reflect those of Microsoft, my employer or any community that I belong to. Any code or opinions are offered as is. Products or services mentioned are purchased by me, made available to me by my employer or the manufacturer/vendor which doesn't influence my opinion in any way.

May 2008 - Posts

Sysinternals Live

A colleague of mine showed me this and looked around for some information about it. Here it is:

Sysinternals Live: We're excited to announce the beta of Sysinternals Live, a service that enables you to execute Sysinternals tools directly from the Web without hunting for and manually downloading them. Simply enter a tool's Sysinternals Live path into Windows Explorer or a command prompt as \\live.sysinternals.com\tools\<toolname> or view the entire Sysinternals Live tools directory in a browser at http://live.sysinternals.com.

Posted Sat, May 31 2008 23:27 by Paulo Morgado | with no comments

Pedro Félix Is Blogging

Pedro Félix is blogging about WCF.

Posted Fri, May 30 2008 1:47 by Paulo Morgado | with no comments

Getting .NET 1.1 CLR String Hash Codes In The .NET 2.0 CLR

Everyone knows (or, should know) that values values retrieved from the GetHashCode method should not be persisted for later use, specially with strings, because:

The behavior of GetHashCode is dependent on its implementation, which might change from one version of the common language runtime to another. A reason why this might happen is to improve the performance of GetHashCode. [^]

Nevertheless, code that persist values retrieved from the GetHashCode method for later use can fall on your lap. And if you need to upgrade your code to, for example, use WCF or WF, you have a problem.

The usual solution would be to use Reflector to see how it was done in the 1.1 CLR and implement the same algorithm in the 2.0 runtime.

Unfortunately, the 1.1 implantation isn't managed.

Today, thanks to Nicole, I found System.Collections.Specialized.BackCompatibleStringComparer on the 2.0 CLR. This class implements the 1.1 CLR String.GetHashCode algorithm and can be found in the System.dll and System.Windows.Forms.dll assemblies. You can't use it because it's internal but you can see its implementation using Reflector. You can also see it here.

Now I have a few questions:

Posted Fri, May 30 2008 0:50 by Paulo Morgado | with no comments

Filed under: , , ,

Typemock Developers Community Site Updated

Typemock has updated its Developers Community Site with new sections.

Besides the forums, there's a new add-ons page where anyone can share her/his tools or snippets (I guess I'll have to brush up my Typemock Snippets For Visual Studio to add there) and an experts page (guess who's there).

Typemock fan Meet the experts

Posted Thu, May 29 2008 0:54 by Paulo Morgado | with no comments

.NET Framework Client Profile - What Will Be On It?

Justin Van Patten has posted on BCL Team Blog about the .NET Framework Client Profile.

In this post he goes through the list of the assemblies that will and will not be part of this client profile.

If you know how classes are packaged in the .NET Framework, you know that sometimes they are packaged, often, not by concern but by ownership. That's why you find a provider model on System.Web.dll, as well as HttpUtility, or even the Cache (that can be very useful in non-web applications).

If you read through the comments you'll come to the conclusion that there is a need to several client profiles (or a bootstrapper that will be cooked up by the developer, which is worst). Some of these profiles could be (loose definition):

  • Application Foundation - mscorlib.dll, System.dll, System.Core.dll
  • Windows Forms - System.Windows.Forms.dll
  • Windows Communication Foundation (client) - System.ServiceModel.dll (broken in core and client only classes)
  • Windows Communication Foundation (server) - System.ServiceModel.dll (broken in core and server only classes)
  • Web - System.Web.dll (not the full fledged ASP.NET just because you need HttpUtility)
  • ...

This could be taken to a level that the Silverlight, XNA, Robotics, Compact Framework would become profiles of the framework. Something like the concept of server roles for server operating systems.

I think that more important than what each one of us would like to see in this Client Profile is that the team is analyzing it.

Posted Tue, May 27 2008 0:24 by Paulo Morgado | with no comments

Filed under: ,

Internet Explorer vs. FireFox

Until recent I had never used FireFox (FF) because Internet Explorer (IE) was good enough for me.

I don't do much web page development and because I own licenses for Visual Studio (VS), HTTPWatch and IEWatch (tried the Internet Explorer Developer Toolbar but it keeps bowing up and killing IE and I've seen Nikhil Kothari's Web Development Helper installed and doesn't work well when non US English characters are displayed) I never needed anything else.

Over the years I've seen all the campaigning against IE and promoting FF as a better, more standards compliant, more secure and what else.

A few days back I had to do some work with ASP.NET validation summary and validators and needed to check if it worked on FF.

Talk about disappointment:

  • FireBug is by far no better than the tools I've been using.
  • FF needs its own proxy configurations - For me, any application running on Windows that needs its own proxy settings it's just a badly developed application.
  • (I'm sure I'd find much more if I used it.)

IE isn't a good developer tool yet (not even in IE8 at this time [^]) and it should have been for a long time. Or, at least, VS should have better support HTML and CSS debugging.

But, on the other hand, Windows Internet Explorer is just another application built on top of the Web Browser Control[^] (which is part of the IE installation, but can be used by itself). You can build any Windows application that uses a Web Browser Control (I've built more than one). Looks like the same is not as simple with FF [^].

I don't intend to start a web browser war. I just wanted to state my disappointment. I guess FF fans set my expectation too high.

Posted Sun, May 25 2008 23:32 by Paulo Morgado | 2 comment(s)

My Shared Podcasts

I used to share my podcast watching through a feed created using FeedDemon, NewsGator and FeedBurner.

It was very easy. All it took was to adding he post to a clipping folder created to that purpose. That folder was shared as an RSS feed and I ran it through FeedBurner to get some statistics and a more friendly URL. For downloading the webcast/pocast, I used FeedBurner's companion: FeedStation.

Because I listen to a fair amount of podcasts, I got myself an 8GB Zune. The Zune uses it's own software to load content and that software is capable handling podcast subscriptions, so I won't be needing FeedDemon and FeedStation for subscribing downloading podcasts.

Because I have a few subscribers to my feed, I wanted to keep it. Then I found PodShow [^][^] a created my onw profile and changed the source of the feed.

So, if you already are one of my followers you don't need to do anything. If you aren't and would like to be, go ahead and subscribe it.

subscribe to my shared podcast's feed My mevieo

Posted Sun, May 25 2008 20:34 by Paulo Morgado | with no comments

Filed under: ,

MSDN And TechNet Virtualized

Lately I've been analyzing various solutions for resource (applications, desktops and servers) virtualization, pooling and provisioning from the various players in this market (Microsoft, Citrix , VMware , Sun , HP).

There are many advantages to virtualization:

  • Hardware consolidation with out the need for server consolidation.
    • Energy cost reduction.
      • Servers and desktops can be instantiated on demand. No more need to have machines turned on waiting for users.
    • Hardware cost reduction.
      • One big machine can host many servers and desktops.
  • Ease of deployment and maintenance.
    • Deploying is just copying a file.
    • Patching can de done on a copy that is deployed after.
  • Ease of diagnostics.
    • If a problem occurs, it can be diagnosed on a copy that will be then patched and redeployed.
  • Ease of development.
    • When development teams need a new environment for a new application they just need to deploy and start up a copy of a pre-existing environment.
  • Business continuity
    • If a data center is taken offline for any reason, all it takes is new machines and the latest backup and you're up and running. (It's not that easy, but a lot easier than installing all the applications in the data center).
  • ... and much more.

Lately there has been some discussions on database virtualization. Database systems are very resource intensive (both memory and I/O), but the advantages for business continuity purposes are starting to weigh in some IT departments' decisions.

When a co-worker and good friend of mine told me that Microsoft had virtualized MSDN and TechNet, I couldn't believe it. You can get the detailed report from here.

Posted Sat, May 24 2008 23:07 by Paulo Morgado | with no comments

Xobni: Email organization, search, and navigation for your Outlook inbox

Like many people, I exchange a lot of e-mail.

Since I first read about Xobni, I've been thinking about installing it. When I read that Eric Legault (an Outlook MVP) uses it, I decided to install it. Looks like a good improvement to Outlook.

Posted Sat, May 24 2008 13:27 by Paulo Morgado | with no comments

Filed under: , ,

Picture Attachments Wizard 2.0 Released

Eric Legault (an Outlook MVP) has released version 2.0 of his Picture Attachments Wizard. I was a big fan of this Outlook add-in when I was using Outlook 2003 and, even though Outlook 2007 comes with a preview feature, Eric managed to improve the Outlook 2007 experience with this new version.

Posted Sat, May 24 2008 13:01 by Paulo Morgado | with no comments

Filed under: , ,

.NET Reflector 5.1.2.0 Released

Get it from here.

Posted Mon, May 19 2008 0:38 by Paulo Morgado | 2 comment(s)

Filed under: , , ,

Typemock Isolator v4.2.4 Released

Typemock released version 4.2.4 of its Isolator mock framework.

You can check out the release notes in The Typemock Insider blog and download it from the Typemock Isolator Download page.

Posted Mon, May 19 2008 0:37 by Paulo Morgado | with no comments

Using Windows Server 2008 As A Desktop Operating System

When I installed my new machine I considered installing Windows Server 2008 with Hyper-V. But this my desktop not my server and I like desktopy things on my desktop and I don't need virtual machines running all the time, I thought Windows Vista plus Virtual PC 2007 (although x64 support on virtual machines would be nice) would be the right choice.

Yesterday I was trying the Developer Interface from InnerWorkings and I couldn't get it to work because Internet Explorer kept popping up Internet Explorer Enhanced Security Configuration errors from the InnerWorkings' Visual Studio add-in which blocked Visual Studio.

I know Rui uses Windows Server 2008 as his laptop operating system (as well as António) and I asked Rui how I could get rid of Internet Explorer Enhanced Security Configuration. Rui pointed me to this blog posts:

Looking through Systweak's series of posts about the Windows Server 2008 Desktop (see below) almost made me regret having installed Windows Vista instead of Windows Server 2008. But my next laptop will definitely be running on Windows Server 2008.

Windows Server 2008 Desktop

Posted Wed, May 14 2008 2:15 by Paulo Morgado | 4 comment(s)

Rendering ASP.NET Validators And Validation Summary Property As HTML Attributes

Yesterday I blogged about the cause of ASP.NET validators and validation summary slowness.

At that point I wasn't aware of the existence of the XHTML conformance configuration (thanks Nuno).

With the XHTML conformance configuration set to Legacy, the rendering of controls works like it worked in ASP.NET 1.1.

Posted Tue, May 13 2008 1:34 by Paulo Morgado | with no comments

The Cause Of ASP.NET Validators And Validation Summary Slowness

When building ASP.NET pages, if you use too many validators and validation summaries your pages can become very slow. Have you ever wondered why?

Lets build a simple page web page with a few validators. Something like this:

Web page with validation

The page is composed of:

ASP.NET renders the ValidationSummary as a DIV and each validator as a SPAN and uses expando attributes to add properties to those elements.

According to the documentation, expando attributes are set dynamically from JavaScript to preserve XHTML compatibility for the rendered control's markup.

The problem is that all that JavaScript makes the HTML document larger and slower to execute than if the properties were rendered in HTML as attributes of the elements.

For such a small page, the difference in size approaches 2k bytes. If you add a few dozen validators to he page, the slowness is noticeable.

I'm all in favor of strict standards and standards compliance, but in this case, I wish XHTML would allow arbitrary attributes.

Posted Mon, May 12 2008 0:17 by Paulo Morgado | 3 comment(s)

Build Your Own LINQ Provider

Mehfuz has been building a toolkit for creating LINQ providers and it's available at CodePlex: LINQExtender

He has even built a LINQ provider for flickr with it: LINQ.Flickr

Posted Wed, May 7 2008 23:16 by Paulo Morgado | with no comments

File And Folder Comparison Tools

Software development is still a very human oriented task. High level programing languages are some form of human readable language.

At some point you'll need to compare one or more files and see what changed.

This is a list of file and folder comparison tools that I came across at some point in time.

WinDiff

WindDiff is a free tool that comes with Microsoft support tools or software development kits.

It's old and doesn't have many features, but it's still able to compare files and folders.

WinMerge

Also a free tool, WinMerge has a few more features than WinDiff.

KDIff3

KDiff3 is also a free tool and can handle two or three files or folders.

Unlike the others, KDiff3 is a multi platform tool.

Compare It!

Compare It!, from Grig Software, it's not free (unless you own a licence for ApexSQL Diff), although not very expensive. This tool can recognize a few file formats like MS Word, Excel, PDF and RTF and has syntax highlighting for C++, Java, C#, Delphi and HTML.

Araxis Merge

Merge, from Araxis, is, in my opinion, the best file and folder comparison tool in the market. Imagine that it can even compare images. It also has a Virtual File System (VFS) API and comes with plugins for Perforce and Visual SourceSafe (a TFS plugin is overdue).

It's not free, but the feature set is rich.

Posted Mon, May 5 2008 1:04 by Paulo Morgado | 3 comment(s)

Filed under:

The Architecture Tool Space Keeps Growing

The tool space for software architecture has been growing. There are new tools and continuous improvement in the existing ones.

Framework Design Studio

Last month Krzysztof Cwalina from Microsoft released the Framework Design Studio at MSDN Code Gallery.

The tool allows comparing two versions of an assembly to identify API differences: API additions and removals. Comparing versions of APIs comes very handy during API design process. Often you want to ensure that things did not get removed accidentally (which can cause incompatibilities), and as APIs grow, you want to review the addition without having to re-review APIs that were already reviewed. The tool, called Framework Design Studio (FDS) supports these scenarios. - from Krzysztof's blog post

Lattix

Lattix keeps improving its Architecture Management System composed of two tools:

The Lattix tools can be used in the following environments:

The site has lots of resources on its getting started section that can be used to evaluate the tools:

  • Download a trial version of Lattix LDM
  • Take the tour
  • See a live Demonstration
  • Assess your software
  • Try a JumpStart project

The latest release (Lattix 4.1) was released on April 21, 2008.

NDepend

NDepend, from fellow C# MVP Patrick Smacchia, targets only the .NET Framework (stay tuned for more) is also in continuous development. Its UI is more familiar for Microsoft Visual Studio and Microsoft Office users than Lattix's UI and a really cool feature:

The site has lots of videos (both on the Home page and Getting Started page) and documentation on all the concepts used by the tool.

The latest release (NDepend 2.8.1) was released on April 26, 2008.

ApexSQL Enforce

ApexSQL Enforce, from ApexSQL, targets SQL Server databases allows to:

  • Ensure adherence to design standards in "real time"
  • Facilitate upgrades to new versions of SQL Server by identifying potential conversion problems before the database is ported
  • Automatically reverse or fix detected violations using generated "FixSQL" scripts
  • Enforce Naming conventions and ensure that SQL reserved words and special characters are not used

The site has lots of product information:

The latest release (2008.02) was released on Marsh 26, 2008.

Posted Mon, May 5 2008 0:33 by Paulo Morgado | 3 comment(s)