More Avalon/XAML Minesweeper samples
I have found two more Avalon Minesweeper implementations.
BTW I plan to post the sourcecode of my implementation soon. I have to clean it up first.
What is an architect?
I just saw the great Sparkle video on Channel9. On of the most funny part was the question 'What is an Architect?'. The anwer from John Gossman was 'It is a fancy title for a programmer' or in other words 'You are old'. I hope you enjoy the movie, I did. I can't wait to play with it.
Avalon and ClickOnce demo
I have build my first Windows Presentation Foundation (WPF) application. It is a remake of my WinForms Minesweeper game. Go to the ClickOnce publisher page and install Avalon Minesweeper.

Make sure you have the Microsoft Pre-Release Software WinFX Runtime Components - September Community Technology Preview (CTP) installed on your computer.
To run this sample you must add 'http://www.mydotnetplayground.nl/WpfMinesweeper' to your Trusted Sites in Internet Explorer.
UPDATE 1-1-2006: Moved to my own provider and updated to the December CTP.
SDE Slides
The slides from my presentation 'NDoc Integratie in Visual Studio 2003 & 2005' can now be downloaded.
C# 3.0 looks like Smalltak
Many years ago I programmed in Smalltalk (Enfin which later became ObjectStudio). I have always liked it although it was not very programmer friendly (no IntelliSense). I have just wachted this C# 3.0 Language Enhancements in action video. The shown Extension Methods feature realy looks like the Secondary Class files of Smalltalk. Nice to see them back, they where very handy.
In the following example I have added the 'IsPrime()' method to the 'Int32' type. The 'this' keyword in front of the 'number' parameter of the IsPrime() method did the real trick. This makes it an Extension Method.
 static void Main(string[] args) {
   Console.WriteLine(5.IsPrime()); // true
   Console.WriteLine(9.IsPrime()); // false
   Console.WriteLine(23.IsPrime()); // true
 }
}
static class Extensions {
 public static bool IsPrime(this int number) {
   if (number == 1 || number == 2 || number == 3) {
     return true;
   }
   if ((number % 2) == 0) {
     return false;
   }
   int sqrt = (int)Math.Sqrt(number);
   for (int t = 3; t <= sqrt; t = t + 2) {
     if (number % t == 0) {
       return false;
     }
   }
   return true;
 }
}
PDC05 Keynote
I have just watched the live PDC05 Keynote Webcast. I'm very impressed. Great demo's showing LINQ, Indigo, Atlas and Avalon. The problem for Microsoft will be to get us 'the developers' to use these new technologies as soon as possible. I'm afraid it is all to much for a 'normal' developer too cope with.
SDN Software Developer Event
I will be speaking at the SDN Software Developer Event on the September 16 2005, De Reehorst - Ede . I will talk about the integration of NDoc with Visual Basic 2003 and 2005. Hope to see you there.
My Favorite Visual Studio 2005 and .NET 2.0 features
- C# 2.0
- Class Designer
- Unit Testing
- Code Coverage
- FXCop Integration
- Debugging: DataTips, Visualizers and Viewers
- Refactoring
- Improved IntelliSense
- Code Snippets
- Profiles
- Strongly-typed resource class generator
- Improved (not perfect) Windows Forms controls
Binary Compatiblity
Microsoft has released a free LibCheck tool that allows you to compare two versions of an assembly, and determine the differences. The tool reports the differences as a combination of 'removed' and 'added' APIs. The tool is limited to looking only at APIs (i.e, it can't check for behavioral changes), and only compares public differences, or changes which are deemed to be 'breaking'. The tool can be used to quickly determine what has changed between one version of your assembly and another, and can help ensure that you won't introduce any breaking changes to clients of your assembly. Instructions and intended use of the tool are described in the 'libcheck tool specification' document with the zip file.
This was a feature I always was missing. VB6 had this, VS.NET didn't. Thanks MS.
AsyncHelper for VB.NET
I received a mail today from Rolf Gasber asking me whether I could help him with a VB.NET version of the AsyncHelper which I used in an earlier post. Here it is:
Public
Class AsyncHelperPrivate Delegate Sub DynamicInvokeShimProc(ByVal d As [Delegate], _
ByVal args() As Object)
Private Shared _dynamicInvokeShim As _
New DynamicInvokeShimProc(AddressOf DynamicInvokeShim)
Private Shared _dynamicInvokeDone As _
New AsyncCallback(AddressOf DynamicInvokeDone)
Public Shared Sub FireAndForget(ByVal d As [Delegate], _
ByVal ParamArray args() As Object)
_dynamicInvokeShim.BeginInvoke(d, args, AddressOf _
DynamicInvokeDone, Nothing)
End Sub
Private Shared Sub DynamicInvokeShim(ByVal d As [Delegate], _
ByVal args() As Object)
d.DynamicInvoke(args)
End Sub
Private Shared Sub DynamicInvokeDone(ByVal ar As IAsyncResult)
_dynamicInvokeShim.EndInvoke(ar)
End Sub
End
ClassAll postings/content on this blog are provided "AS IS" with no warranties, and confer no rights. All entries in this blog are my opinion and don't necessarily reflect the opinion of my employer or sponsors. The content on this site is licensed under a Creative Commons Attribution By license.