Sunday, November 29, 2009

Touchpad issues with my Dell E6500

My new laptop is a Dell Latitude E6500. As I was installing some software, I noticed that the touchpad was very slow. Even after changing the mouse speed to the maximum, I still had to do multiple sweeps to get the cursor from one side of the screen to the other.  It was really annoying me, so I started to look for a solution.

On the Dell website under the Input Device Drivers section, I found a driver update for the Touchpad. This replaces the default mouse driver with a touchpad specific driver. It makes working with the touchpad a lot smoother and now it’s also possible to disable the touchpad when an external pointer device is attached.

Thank you, Dell!

Friday, November 27, 2009

Scrum but…

The last time one of my favorite phrases that I hear a lot is  “We are using scrum, but…” and then you hear a lot of reasons why they had to ‘modify’ scrum so it works for them. If you want to know more about this black art, have a look at this video.

And another (small) NHibernate update: NHibernate 2.1.2 is released

After a first small update some weeks ago, the NHibernate team released a second update for NHibernate 2.1 last weekend.

NHibernate 2.1.2 can be downloaded here. The list of changes is rather small:

  • Bug
        *  [NH-2011] - Many-to-many inside a component will not be saved when using SaveOrUpdateCopy or Merge
  • Improvement
        * [NH-2022] - Allow overriding in Query By Example
  • Patch
        * [NH-2007] - SesssionIdLoggingContext patch for big resultsets
        * [NH-2019] - Clarification about the use of <import> for polymorphic queries

Configuring an incremental build in TFS

By default, the TFS build server will execute a full build. This means that the existing workspace is cleaned up and all the source code is loaded from the TFS server. When your network connection is slow or when you have a lot of code on your build server, this can take a lot of time. To optimize this experience you can choose to execute an incremental build instead of a full build.

To specify an incremental build, you must set the SkipClean, SkipInitialiseWorkspace, and ForceGet properties in the TFSBuild.proj file.

Each of these properties configures a step to enable the incremental build experience:

  • When Team Foundation Build performs a full build, it cleans the files in the intermediate build folder and sources folder in Clean target. In an incremental build this target must be skipped because these files must be intact for the next build. To achieve this, set the property SkipClean to true.
  • As a part of a full build, Team Foundation Build deletes the old, and recreates a new workspace to clean and synchronize the sources files. In an incremental build, this target must be skipped also. To achieve this, set the property SkipInitializeWorkspace to true.

  • In the Get task, Team Foundation Build by default retrieves new source files and overwrites the existing files in the build workspace. To only retrieve the changed files, set the property ForceGet to false.

To set all of these properties, add the PropertyGroup definition to the end of the TFSBuild.proj file, before the closing </project> tag.

   1:  </ItemGroup>
   2:     <PropertyGroup>
   3:        <SkipClean>true</SkipClean>
   4:        <SkipInitializeWorkspace>true</SkipInitializeWorkspace>
   5:        <ForceGet>false</ForceGet>
   6:     </PropertyGroup>
   7:  </Project>

SOA: The good, the bad, the ugly

Jens Andexer Executive IT Architect @ IBM  and Willem Bekker, Head of Architecture Initiatives @ Standard Bank talk about Service Oriented Architectures and their characteristics.  They focus not only the good qualities of this style of architecture but also about the bad and even the ugly parts. If you want to look beyond the hype and make an informed decision then this article is a must read!

Microsoft Application Architecture Guide, Second Edition

A final version is now available of the Microsoft Patterns & Practices Application Architecture Guide(second edition). It contains the architectural recommendations of the P&P team for the Microsoft application platform.

Here are the relevant links:

Repartition your hard disk

Today I was configuring my new laptop. It was filled with a lot of software out of the box, but as almost every IT guy, I’m not that happy with the default configuration. So I’m installing a dual boot with Windows Server 2008 R2 and Hyper-V. Hosting my VPC’s using full PC power is a tempting idea.

The first thing I had to do was repartition my hard disk. Used to work with Windows XP, I followed this Repartition your hard disk on-the-fly with Windows Vista article to guide me through the different steps.

Wednesday, November 25, 2009

Make managing config files easier with configSource

If your config files start growing too big, you can split them up into smaller pieces by using the configSource attribute.

For example, if you want to extract your WCF services configuration to a dedicated configuration file, place the following in your web.config:

   1:   <configuration>
   2:      ...
   3:      <system.serviceModel configSource="services.config" />
   4:      ...
   5:    </configuration>

 

Create then a separate services.config file with the following structure:

   1:  <system.serviceModel>
   2:   
   3:  <!-- Place your service settings here -->
   4:   
   5:  </system.serviceModel>

 

Make sure you use .config as the extension of your files so they cannot be served to the browser. Avoid .xml for example or your files can be available to prying eyes.

Using Visual Studio 2008 with Team Foundation Server 2010

Allthough you can connect to a TFS 2010 server with your existing Visual Studio 2008 (SP1) environment, most features are not available to you. To improve your experience you can install the Visual Studio Team System 2008 Service Pack 1 Forward Compatibility Update for Team Foundation Server 2010. This is an update for the 2008 SP1 version of Visual Studio Team System Team Explorer and allows the 2008 SP1 version to work with the Team Foundation Server 2010. This update will allow teams to move forward and use the Team Foundation Server 2010 server even if part of the team continues to use the Team Explorer 2008 SP1 client.

Tracing performance issues with Performance Monitor

Before you start installing big (and expensive) tools to trace performance issues, it's a good idea to first have a look at Performance Monitor a/k/a PerfMon. It's an amazing tool that goes far too often unused available freely on every windows machine. Through a lot of different performance counters you can monitor different aspects of your system. To open PerfMon, just go to the Start Menu, choose Run and type perfmon.

If you want to find out how the system is performing, then the following counter give you a good overview of general activity of the system.

  • Processor utilization
    • Processor\% Processor Time\_Total - how 'loaded' is the CPU at any given time. Don't confuse 100% processor utilization with a slow system though - processor queue length, mentioned above, is much better at determining this.
  • Memory utilization
    • Process\Working Set\_Total (or per specific process) - this basically shows how much memory is in the working set, or currently allocated RAM.
    • Memory\Available MBytes - amount of free RAM available to be used by new processes.
  • Disk Utilization
    • PhysicalDisk\Bytes/sec\_Total (or per process) - shows the number of bytes per second being written to or read from the disk.
  • Network Utilization
    • Network Interface\Bytes Total/Sec\nic name - Measures the number of bytes sent or received.

You can find  more info about the usage of the performance monitor and some other useful performance counters in this Windows perfmon- top 10 counters post.

Monday, November 23, 2009

Is software development too complex?

Today traffic was killing me. So I tried to get the best out of it and started to listen to some podcasts. One very interesting one was a panel discussion on DotNetRocks about “Is software development too complex?”

I was thinking if the question is not the other way around. Aren’t we making software development too complex?

I cannot count the times I have seen a complex SOA architecture where a simple 2 tier application would suffice. Aren’t we all developers who like to try out the latest fun stuff even if it is not appropriate or a real business requirement for the current project? As most IT people have a technical background, we seem to focus mostly on technical details, sometimes forgetting what the customer actually needs.

As I have fallen in this trap before, I’m always careful and thinking twice before I introduce a new tool/technology on my projects. (Speaking about new tools, I’m loving the Spark view engine ;-))

10 Must-Know Topics For Software Architects In 2009

If you want to know the latest buzzwords in town as an architect, check out the following article: 10 Must-Know Topics For Software Architects In 2009

Report website is empty on TFS 2010

After the installation of TFS 2010, I was looking through all the parts to check if the installation was successful.

When I browsed to the report manager website, I saw something strange: only the header was visible. As I had this problem before I knew it had something to do with the security settings. So I opened up SQL Server Management Studio, connected to the reporting services server and checked the security settings. But everything seemed OK.

After some research I found out that even if you are logged on with administrative credentials, you might have trouble accessing Report Manager or the http://localhost/Reports site on a computer that is running Windows Server 2008 or Windows Vista. You might need to add those sites as Trusted Sites in Internet Explorer or start Internet Explorer as an administrator. To start Internet Explorer as an administrator, click Start, click All Programs, right-click Internet Explorer, and then click Run as administrator.

More info here.

Change HostName for a WCF service in IIS 7

If you have create a simple WCF service “HelloWorld.svc”  and you load it up inside your Visual Studio,  you get a result like this if metadata publishing is enabled.

21180971nu8

The host name “mycomputer.private.mydomain.com” is automatically picked up by WCF.   Of course if this service is hosted on a public server, you don’t want to expose the server name to the consumers of your service. In the real production environment, you would want to use a public host name or even an IP address in the address.

Therefore open up the IIS manager, select the website of your choice and click on the Bindings link in the Actions part.

iis7-install-4

In the window that shows up add the hostname you want to use(for example www.microsoft.com). The first time I did this I got following exception:

This collection already contains an address with scheme http.  There can be at most one address per scheme in this collection.
Parameter name: item

This error was caused by the fact that I now had 2 addresses pointing to the same scheme. Therefore instead of adding a second hostname, change the hostname on the existing http scheme.  This should do the trick…

Sunday, November 22, 2009

MSBuild Extension Pack to the rescue

Spending a lot of time inside MSBuild scripts, optimizing our continuous integration processes, custom build tasks are very handy to simplify common actions.

Creating your own build task is easy, if you’re interested take a look at How To: Write a Task. Of course, you’re probably not the first one who creates a specific task. Before you start creating your own, check out the MSBuild Extension Pack and the MSBuild Community Tasks.

I’m a certified Scrum Master

After completing the Certified Scrum Master training by Mitch Lacey at Ordina, I received an email last week by the Scrum Alliance confirming my certification.  I strongly believe that Scrum principles like openness, respect, commitment can benefit any (software) project. Now convince the rest of the world…

ScrumMaster

Thursday, November 19, 2009

PDC 2009: Silverlight 4 announced

I hate it that I cannot be at the PDC conference this year as I hear all the great things that Microsoft is announcing there. At the Microsoft Professional Developer (PDC) conference, Scott Guthrie announced the availability of Silverlight 4 Beta. Everything I could dream of will be included in the box. Printing? Yep. Access to Local File System? Yep. Want to share your assemblies between SL and native .NET assemblies? No Problem. Want access to the clipboard? COM Interop? Web Cam & Micrphone? Done and Done.


More info about all the new features here.

Tuesday, November 17, 2009

Web Setup fails on IIS7

As we were deploying a  WCF service via web setup projects on Windows Server 2008 with IIS 7.0, the setup failed with the installer saying

"The installer was interrupted before [my app] could be installed. You need to restart the installer to try again."

Of course after restarting the installer, the exact same error occurred again. :-)

It seems that the MSI package is using the Metabase feature of IIS6. As this is not installed by default on an IIS7 machine, you get an error. Installing the IIS 6 Metabase Compatibility Component solves the issue. (it's situated under Role Services in the Server Manager)

Configuring WCF on IIS7

Today I was configuring a clean Windows Server 2008 system. When I deployed a a WCF Service on IIS 7, I got the following message:

Server Error in Application “Default Web Site/...”
HTTP Error 404.3 - Not Found

The page you are requesting cannot be served because of the extension of the configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map.

The exception explains itself. IIS couldn’t find a correct handler for the *.svc extension for our WCF service.

Execute the following steps to make it work:

  1. Start the command window (cmd) as an Administrator.
  2. Navigate to:
    C:\windows\Microsoft.Net\Framework\v3.0\Windows Communication Foundation\
  3. Run the following command: ServiceModelReg –i

You must use the Role Management Tool to install or configure Microsoft .NET Framework 3.5

Today, I was installing SQL Server 2008 on a Windows Server 2008 R2 server. The setup detected that .NET 3.5 was missing and asked me to install this prerequisite. But after clicking OK, the setup prompted an error message of "You must use the Role Management Tool to install or configure Microsoft .NET Framework 3.5".

It seems like Windows 2008 R2 already ships with the .NET 3.5.1 framework so you just need to enable the feature from Server Manager. Afterwards it worked like a charm.

Installing TFS 2010 Build Server

Some things I noticed when installing the TFS 2010 Build environment for my company

First of all your existing TFS 2008 build agents will not work with a TFS 2010 server. You’ll need to install the TFS 2010 build service. It’s included in the same setup as the TFS application tier and you should set it up on a dedicated build machine. But you don’t need an extra build server, you can install the TFS 2010 Build Service on your existing TFS 2008 build machine. Even though they both default to the same port (9191), they can share that port without any problems.

If you install the TFS 2010 build service on a clean machine, it will install the .NET 4.0 Framework which includes MSBuild. It will also install the components necessary to support the following:

Althought the build definitions in TFS 2010 only use MSBuild for source code compilation and use Windows Workflow to orchestrate everything else that happens during the build process, you don’t have to recreate all of your existing build definitions.  TFS 2010 includes a special Upgrade build process template that mimics the behavior of TFS 2008 builds by invoking MSBuild on your existing TFSBuild.proj file.

So I have to admit, Microsoft did a great job supporting my existing build scripts.

Monday, November 16, 2009

After the flu, it's time for the Gu!

After the Mexican flu, another international phenomenon is coming to Belgium. Visug achieved in getting Scott Guthrie, Microsoft Corporate Vice President and .NET guru, live in Belgium! Scott will be speaking about Visual Studio 2010, .NET 4 as well as about the latest on web development with ASP.NET 4.0 and Silverlight.

Got burning questions for Scott? This is your chance! After the talks he will be taking the time to answer questions from the audience. E-mail your questions upfront to scottinbelgium@visug.be or ask them directly during the Q&A time.

Location:

Kinepolis Brussels

Date:

December 4th – 13:30 to 17:00

Topics covered

· Visual Studio 2010

· .NET 4 and Web development

· ASP.NET 4

· Silverlight

TechEd 2009 Berlin: Microsoft has Acquired the Teamprise Client Suite

One of the great stuff that Microsoft announced during the TechEd 2009 conference at Berlin was the acquisition of the Teamprise Client Suite from Teamprise. With this step heterogeneous development on the Team Foundation platform became once again easier. Free upgrades will be provided for all customers who are using Teamprise today.

Teamprise Client Suite consists of 3 components:

  • Eclipse plugin - Allows developers to perform all of their source control, bug tracking, build, and reporting operations from within Eclipse and Eclipse-based IDEs, such as Rational Application Developer, JBoss, BEA Workshop, and Adobe Flex Builder. It integrates into the menu system of Eclipse as a standard Team Provider plug-in, but also provides developers with specific views and forms for interacting with the Team Foundation Server. Developers using the Teamprise Plug-in for Eclipse have the ability to take part in the entire software development process in use by their organization without leaving the comforts of their development environment.
  • Stand-alone Explorer - Combines all of the functionality available to Eclipse developers using the Teamprise Plug-in into a stand-alone, cross-platform GUI application for team members working outside of a development IDE. Perform source control operations, browse the Team Foundation Server repository, edit bug reports, run work item queries, monitor builds, and view project reports all from within an application that has a native look and feel on the operating system you are using.
  • Command line client - Provides a cross-platform, non-graphical interface to Microsoft's Team Foundation Server, for scripting and build scenarios or for developers who prefer a command-line interface. The command line interface is compatible with the current Microsoft supplied command line interface so scripts are interchangeable.

All of these components work on Windows, Mac, Linux and several flavors of Unix. In addition work is being done to explore providing these capabilities in mainframe environments to enable access to the Visual Studio ALM platform from there as well.

Sunday, November 15, 2009

Incentives versus passion

As I was riding home last Friday from TechEd Berlin with my colleague Gill, we were wondering why some of our developers pursue excellence relentlessly while another hits the door at 5:01 and doesn’t think about software development until tomorrow morning.

I hoped for years that there must be some motivator, some technique, or some dynamic that will affect people positively to simply care. But even after providing incentives like salary, wonderful co-workers, free pizza and so on doesn’t seem to motivate everyone to care about excellence. In contrast to this I see people who don’t get these incentives but work very hard. So there must be something else that causes these people  to ponder, read, and learn.

And this ‘something else’ is Passion. Loving software development, seeing software development as a craft, continuously looking for ways to grow as a developer are indicators that this passion lives inside you.

This leads me to one conclusion: incentives will get you behavior and results, but can’t create passion. That is something that is simply innately there or not there.

Tips for ORM Data Access

Data Access should be one of those problems that must be solved in software development a long time ago. Getting and putting data from a database was done 10 years ago and is still done today. But we keep struggling writing code to talk to our databases. Object relational mappers (ORM) are one step closer to writing more business oriented code and less infrastructure.  As an ORM is only a tool and not the solution, Jarod Ferguson posted following tips to help you implementing ORM right:

  • Retrieve data by aggregate roots, have a repository for each root. The root queries should return the entire aggregate. If you are going to defer loading to a part of the root graph, be explicit. Instead of lazy loading Foo.Bars, I like to say Foo.LoadBars() <- yes seriously

  • Learn how to identify the right aggregate

  • Respect your aggregate root boundaries. Aggregates cannot call into other aggregates children! You shouldn’t be adding a product from the order, really, this is bad: LineItem.Product.Calatalog.Add(new Product). The order AR just crossed into the Catalog AR. Its not the job of the Order to add products to the catalog

  • Do not try an overuse an aggregate, its ok to create a new one. Less is more does not apply. Fulfilling an order is different than placing one, and your data access may need to reflect that

  • Use a ‘Read Model’. The most common approach here is using DTO or ViewModel, and projecting straight into it from the object model query or database

  • For complex queries that perform aggregations and calculations, consider using a store procedure. They really have their place, even with the best ORM’s (then project into Read Model)

  • Avoid putting query logic in mappings (Assembler’s, Translators, AutoMapper)

  • Use a tracing tool. I like the SQL trace profiler, but if you are not as comfortable with sql, there is a some good profilers around, like NHProf for nHiberante & soon EFProf for the Entity Framework

  • Know the SQL that is going to your database. Have your tests emit the generated sql out to the console. Live it, learn it, love it. You should know your ORM tendencies, especially if you are using a linq provider

  • Batch requests to your services and database, especially if you are in a web or distributed environment


  • Jarod continued his Data Access Tips post with a more detailed explanation about DTO's, DDD and the Anemic Domain Model.

    Balancing your mockups

    One of the dangers of mockups, is that they can become too realistic. Customers tend to believe that the application is “almost done” when you’re showing a realistic image of your application. Same problem for developers who think that requirements are set in stone when you give them this kind of image. Therefore don’t make your mockups too realistic. It must be clear that it’s only a temporarily design and not a final version.

    Two tools that can help you creating such an “unrealistic” look:

     

    Saturday, November 14, 2009

    The right tool for the right job: Specification gathering

    As an architect and developer, I'm always looking for better ways to communicate with the business. Discussing specifications can be a challenging duty, especially if you end up with hundreds of pages with use cases, user stories and so on. It made me wonder if text is always the best medium to capture spec's.

    How do I think about it today? As a rules of thumb I think that things that don't get communicated well in text shouldn't be forced into a text medium. Therefore I'm advocating alternatives like whiteboard designs, mockups,... Why writing a 10 page summary describing all the fields on a screen if one image can get you to the same conclusions? After all, it's all about using the right medium in the right context.

    TechEd 2009 Berlin: Fishbowl Fun part 2

    In a previous post, I mentioned that I did a TechTalk with a colleague while we were at the TechEd conference in Berlin. The video is available here.
    TechTalkBerlin

    Didn't you notice the NHibernate 2.1.1 release?

    The NHibernate team released 2 weeks ago NHibernate 2.1.1, an update on NHibernate 2.1. As there wasn't much noise about it, I saw it only last week.

    One very interesting features has been added. DetachedCriteria are finally supported on the IStatelessSession. Simple CRUD was never so easy...

    If you're interested in the list with all changes, check out the release notes.

    NHibernate 3.0 goodness

    As the release of Entity Framework 4.0 is getting closer, it's time to have a look at the competition. After the release of NHibernate 2.1(.1), the NHibernate team is working on the next big release based on the .NET 3.5 framework.

    A selection of some of the upcoming features in NHibernate 3.0:

    • QueryOver: Allows the usage of ICriteria in a type safe way.
       1:  IList<Student> students =  session.QueryOver<Student>()  
       2:  .Where(s => s.Name == "Fabio")
       3:  .And(s => s.StudentNumber > 100) 
       4:  .List();


    • New Linq provider: A new linq provider is coming up fully based on AST. This will replace the current NHibernate.Linq 1.0 project.
    • Strongly typed configuration for multiple parts of NHibernate(caching, sessionfactory,...)
    • Better WCF integration for session management
    • ...


    I think we'll have a very interesting future in ORM land...

    Monday, November 9, 2009

    TechEd 2009 Berlin: Entity Framework 4.0

    I started our first day at TechEd Berlin with a level 300 session about Entity Framework. A lot of great features were shown:

    • N-Tier support(Self-tracking entities)
    • Persistance Ignorance
    • Code only
    • Better design experience
    • Model first
    • T4 Template generation
    • Lazy loading
    • Better support for stored procedures
    • Better support for SQL functions
    • ...

    Although I'm still a bit sceptical, I guess that this time it will be "usable" ;-)

    TechEd 2009 Berlin: Fishbowl fun

    As TechEd is not only a range of (hopefully) great sessions, it's also a place to meet some people and do some networking. So tomorrow I'll be doing a TechEd TechTalk together with my colleague Gill Cleeren. I will ask him very though and tricky questions about building business applications in Silverlight.

    I'll have some difficult questions for him. And as everything is recorded, the video will become available at the TechEd website. I'll post the link when it becomes available.

    Thursday, November 5, 2009

    Creating a chm file from word documents

    If you need to generate CHM documentation based on some word files, the Patterns & Practices Documentation Tools could be of value for you.

    MSBuild error MSB3491: Could not write lines to file “D:\Builds\*\*.sln.Release.vsprops”.

    Today I got the following error message from MSBuild. I've seen it before but I could not remember the problem.

    Build FAILED.

    “D:\Builds\*\BuildType\TFSBuild.proj” (CompileSolution target) (1:5) ->
    (CoreCompileSolution target) ->
    C:\Program Files\MSBuild\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets(978,5): error MSB3491: Could not write lines to file “D:\Builds\*\*.sln.Release.vsprops”. Could not find a part of the path ‘D:\Builds\*\*.sln.Release.vsprops’.

    0 Warning(s)
    1 Error(s)

    Turns out that some solutions where moved in the source control repository. After correcting the file location, everything was up and running again.

    A more descriptive error message could have been usefull.

    TDD: Test Driven Development or Test Driven Disaster?

    Inside our organization we have a discussion evening tonight about TDD with the promising title 'TDD: Test Driven Development or Test Driven Disaster?'. I hope it will be an interesting discussion. Searching for some extra arguments for the 'Pro' camp, I stumbled on this blog post: TDD is not about testing, it's about how we develop software.

    I cannot agree more with the statements mentioned in this post.