Jamie Cansdale's Radio Weblog

Home

Subscribe to "Jamie Cansdale's Radio Weblog" in Radio UserLand.

Click to see the XML version of this web page.

Click here to send an email to the editor of this weblog.


26 February 2003
 

Number 1 in Technorati's New Interesting Blogs.

I am not really sure what this means, but it is cool none the less.

My blog (http://aspnetweblog.com) is listed #1 in Technorati's New Interesting Blogs

http://www.technorati.com/cosmos/interestingblogs.html

UPDATE:

Oh well, now that I look at it a little more, it appears almost all of the links are coming from .NET Weblogs , which isn't bad, but does detract from the coolness :(

The other bright spot is it looks like almost all of the blogs from .NET Weblogs are listed, so hopefully, Technorati will keep indexing us.

[ScottW's ASP.NET WebLog]
3:08:56 AM    

22 February 2003
 

The Last Configuration Section Handler I'll Ever Need.

I'm sure someone, somewhere has already written this, but I figured it out on my own today, and it's just too cool not to share. Basically, it's a bit of code that lets me store objects in my application of web configuration file, and all I have to do is write the type that holds the values.

[CraigBlog]
6:31:52 PM    

18 February 2003
 

QQQ is sending out an SOS.

Thomas Marquardt, one of our developers on ASP.NET, recently published an article on MSDN about ASP.NET performance monitoring.  Along with the article are a number of great utilities (all complete with C# source code). 

We developed them internally to help automate diagnosing customer issues with production apps, and they are also used as part of our ASP.NET stress testing program (I'll provide more details about our stress lab in a future blog entry).  These source utilities include:

Snap.exe -- a command-line tool for logging performance data for processes.

HttpClient.exe -- a simple client that records time to last byte (TTLB) for HTTP requests.

ErrorHandler.dll. This is an IHttpModule that you can add to the HTTP pipeline to log unhandled exceptions to the event log. It is better to log errors to a SQL Server database (that is what we do in our stress lab -- since it makes reporting across hundreds of servers easier), but the example uses the event log for simplicity.

QQQ.exe -- a command-line tool for stress testing an ASP.NET application. When used in combination with a stress client, such as Homer or ACT, this tool will attach debuggers to the worker process and monitor certain performance counters.  It can be tuned to automatically break into the debuggers when performance degrades.

QQQ is probably my favorite utility -- especially given that its name is complete nonsense.  "QQQ" stemmed from the fact that Dmitry (ASP.NET dev manager) likes to name all of his test ASP.NET pages with those initials, usually under various temporary directories scattered accross his harddrive.

QQQ is usually used in combination with the windbg and cdb debuggers (which you can download from: http://www.microsoft.com/ddk/debugging/installx86.asp).  These debuggers are more appropriate for system level dubugging (versus the VS debugger) in that they have less effect on the process they are attached to (unlike the VS debugger which tends to impact timings within the target process -- making stress investigations harder).

QQQ is also typically used in conjunction with a .NET Framework debugger extension we call "sos.dll".  Strike.dll was the parent debugger extension we used in V1 of the .NET Framework -- "sos.dll" affectionately stands for "son of strike".  You can download son of strike at: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/DBGch03.asp.

If you are doing hard-core production ASP.NET development, and want to build up an infrastructure for testing and monitoring your web applications, then I'd definitely recommend spending an hour browsing through the above code.  There are a lot of cool tips/tricks you can pick up and re-use.

 

[ScottGu's Blog]
11:35:56 AM    

ASP.NET Performance Monitoring, and When to Alert Administrators.

Discusses which performance counters are most helpful in diagnosing stress and performance issues in Microsoft ASP.NET applications, what thresholds should be set in order to alert administrators to problems, and other resources that can be used to monitor the health of an ASP.NET application.

[Sam Gentile's Blog]
11:31:38 AM    

My Collection of .NET Regular Expression Tools.

I'm starting to use .NET's RegEx class all over...in ways I never expected.  Here's the tools and sites I'm using lately:

And Library Resources:

[Scott Hanselman's Weblog]
11:24:28 AM    

14 February 2003
 

NUnitAddin support for JUnit!

If anyone is actually reading this weblog, please check out my new home here. There will be some - shock - horror - original content there! I know I've been very lame in the past and just used this place as a scrap book.  I'm turning over a new leaf, please give me another chance... ;o)


11:22:40 AM    

It Finally Happened....

hell-sign.jpg

You might be tempted to think this is a Photoshop fake. I have the benefit of having grown up in the state, knowing that Hell, Michigan is a real place. :) They've even got a web site...

Link   Discuss

[The .NET Guy]
11:04:32 AM    

13 February 2003
 

eXtensible C# Provides Compile-Time Attributes.

eXtensible C# provides a set of compile-time attributes to do things like inject code (like to check for a null value), analyze code at compile-time and even obfuscate. Very cool.

[Chris Sells]

Way cool indeed!

[.NET Weblogs]
12:11:03 PM    

12 February 2003
 

Unit Testing Tools For .NET

http://dotnetweblogs.com/cmedina/archive/02092003.aspx


11:07:06 AM    

11 February 2003
 

One file that you should always keep in mind is:

C:Program Files

Microsoft Visual Studio .NET

FrameworkSDKincludeCorError.h

In your case, the error is:

#define META_E_BADMETADATA EMAKEHR(0x118A)

// Merge: Inconsistency in meta data import scope


9:28:19 PM    

08 February 2003
 

Peter Drayton managed to post the following at 5:21 AM: Google2RSS is a command-line tool that runs a query using the Google Web API and spits out an RSS 0.91 feed containing the top 10 hits.


[Sam Gentile's Weblog]
7:15:53 PM    

PermissionGrabber. Yesterday I vowed to turn on SecurityManager all the time, and figure out the necessary policy files for Java applications that I use. Ross mused that it would be cool if the Java runtime provided a flag to generate this information automatically. What a great idea! And, who needs help from the runtime? PermissionGrabber is a simple Java app that will execute some other Java app, figure out what permissions it needs to run, and generate an appropriate policy file. All you have to do is java PermissionGrabber SomeApp I just threw this together and can think of a few dozen little enhancements already. Let me know if this is cool and what you would like to see added. [Ockham's Flashlight]
10:29:10 AM    

Dogfood.

In my neverending quest to amuse myself by confusing myself, I've reimplemented my Xml2CodeDom tool in XML so that it can now generate itself.

It took over 1600 lines of XML to generate only 130 lines of C# code so I don't expect that developers will be flocking over to this new format anytime soon. It was a fun experiment while it lasted.

This could, however, have some interesting applications for language agnostic code generation. Maybe tools like CollectionGen could use something like this in order to support all features for more than just one language without having to actually duplicate the logic for each language.

[authorities here are alert.]
12:14:32 AM    

ConsoleHost.

This is my version of Scott Guthrie's example demonstrating how to process ASP.NET requests outside of IIS. Mine automatically copies itself to the current directory's bin subdirectory (else it won't work) and also allows you to pass in parameters from the command line.

I had trouble getting Radio to "upstream" this file until I changed the extension. Anybody know what's up with that?

[authorities here are alert.]
12:11:50 AM    

07 February 2003
 

For those who are interested, I've updated the Visual Studio macro for generating NUnit test shells to support NUnit 2.0. The macro is licensed under the same license as NUnit 2.0. It's probably pretty straightforward to convert this into a Visual Studio addin as well. [Gordon Weakliem's Radio Weblog]
10:51:06 PM    

Interception for ServicedComponents.

Clemens is starting to publicly talk about the features of his interception toolkit for EnterpriseServices. I think that this very thing is just sooo cool.

   [Transaction]
   public class Component : newtelligence.EnterpriseServices.AspectServicedComponent
   {
      private string val = "";

      public Component()
      {
      }

      [Match("[A-Z]*")]
      public string SetMeGetMe
      {
         get { return val; }
         set { val = value; }
      }

       [GreaterEqualTo(0)]
      public int TestField;

       [return: MinLength(1)]
      public string Hello( [MinLength(1),MaxLength(20)] string Name,
                          [Between(1,100)] int Age,
                          [MinLength(1)] out string retString,
                          [LaterThanToday] DateTime when)
      {
           return "Test";
      }
   }

This rocks, right? Not just the fact that one can use custom attributes - that's already well known - but even more that his toolkit will allow you to use interception with ServicedComponents to automatically check these properties whenever you call the method. The keywords here are automatically and ServicedComponent. My only question is: Why is there a stateful variable ("private string val") in your ServicedComponent ;-)? Just kidding ... it's an educational sample.

[Ingo Rammer's DotNetCentric]
7:28:16 PM    

Jenifer Tidwell: UI Patterns and Techniques. "Each of these patterns (which are more general) and techniques (more specific) are intended to help you solve design problems. They're common problems, and there's no point in reinventing the wheel every time you need, say, a sortable table -- plenty of folks have already done it, and learned how to do it well. Some of that knowledge is written up here, in an easily-digestible format." [almostperfect]

Wow, wasn't this a cool find? I worked with Jenifer years ago at Gensym and lost contact with her work. She has been working in this area of UI Patterns for quite some time and this is most definetly worth a look.


[Sam Gentile's Weblog]
11:51:36 AM    

05 February 2003
 

Patterns of Enterprise Application Architecture...good stuff spreads.

Enterprise Architecture Crib Sheet. Martin Fowler's book Patterns of Enterprise Application Architecture has gotten a lot of good press lately (and with good reason; it's an excellent book). Now the author has made available a sort of crib sheet to the patterns online. The information here won't replace the book (about half a page for each pattern, as opposed to dozens of pages), but it does serve as a nice memory jogger or expanded table of contents. ... [Larkware News]

This is great stuff...I think I mentioned before, but our engineers are running a weekly study group going through the book in detail.

[Scott Hanselman's Weblog]
11:14:15 AM    

01 February 2003
 

Enterprise Utilities. Huh! Someone really likes my utility set for Enterprise Services and correctly points out that they are in "preview" state, but very useful. The good news is: there's no timebomb. And, yes, there's going to be an update once Windows Server 2003 is "official". And, yes, there's going to be an option to get at the source code for all of it. These classes and a lot more code that only few folks have seen yet will be at the center of my developer-topics talks this year. [Clemens Vasters: Enterprise Development & Alien Abductions]
11:09:18 AM    

31 January 2003
 

Running as Local Admin on a DEV box - Just say NO!.

Anil writes,

"It IS lazy coding.  This need for elevate privileges occurs when a developer runs as Local Administrator on their own dev box and cranks out software that in turn has no concept of rights and limits.  I have made a conscious attempt to run as a regular User on my DEV box. "

Great point. I saw Keith last year and it really made me think. Probably not enough since I still make this mistake a lot of times :D

Anil: "One of the things that I will try to document in my explorations are programs that violate this rule.. Especially ones that a developer needs to use on an ongoing basis. "

Great. Can't wait to see it.

"One of the people whose views I am following through his writings is Keith Brown of Developmentor.  He has been advocating this for a long time... Here are some links to what he has to say about running as a non-Administrator on your dev box. "

Good links.

[@CyberForge]

[ScottW's ASP.NET WebLog]
12:41:16 PM    

30 January 2003
 

SQL Server 2000 SQL Scan Tool. SQL Scan identifies instances of SQL Server that may be vulnerable to the Slammer virus. [Microsoft Download Center]
10:29:37 AM    

29 January 2003
 

Despite keeping a low profile, it looks like I've been discovered by a blog spider...

Blogging Ecosystem stats for Jamie Cansdale's Radio Weblog


7:25:48 PM    

27 January 2003
 

Let's be careful out there ....

I'm in the process of setting up a new desktop dev machine, and spent the better part of this evening installing tons of software. One of the patches that I hadn't installed yet was SQL Server 2000 Service Pack 3. The reason why I hadn't really thought about it was because none of my SQL Server boxes are exposed to the public Internet. My ISA server is configured to block UDP port 1434 traffic by default.

But there is one SQL Server box that I almost forgot about: my laptop. I tend to connect to all sorts of foreign networks with my laptop. Had I done so with an unpatched SQL Server running on my laptop, I would have brought the Slammer worm back home behind my ISA server firewall. Then all hell would have broken loose.

So the lesson here is: beware of laptops. They can easily subvert the security provided by your network's perimeter defenses. And make sure you patch ALL SQL servers regardless of whether they are behind your firewall or not!

[IUnknown.com: John Lam's Weblog on Software Development]
1:13:12 PM    

26 January 2003
 

I just put up a document outlining my tips for a Successful Technical Presentation (with many Microsoft specific tips).  I'm pretty happy with it and I think it provides a lot of good information.  Please take a look! [Scott Hanselman's Weblog]

Many good tips from Scott. Some I already live by, others I will use next time!

[Andreas Eide's Weblog]
3:27:43 PM    

25 January 2003
 

LinuxWorld In Words - Mono Notes.

I stuck around LinuxWorld until Miguel de Icaza issued his State of the Mono Address.  I've been following the Mono project for some time via the website, but this was much better.

C# is done, VB is 70% done, and JavaScript is 50% done.  This is good.  Miguel demonstrated an almost unmodified version of iBuySpy that was only really slow because it was connecting to an MSSQL server in Spain over 802.11b.

In theory, you could write an ASP.NET web application today and deploy it on a Linux server using Mono.  You can reuse the docs that are available for C# and .NET (from Microsoft), and you can also reuse the docs and resources available from MS and third parties.

Miguel stressed that we should reuse the Microsoft booth (next to the Mono booth) to learn about all of the cool ASP stuff that you can do.

The Mono team is also working on a new version fo their JIT compiler which will speed up apps significantly.  He also demoed a sweet debugger written in GTK# (GTK bindings for C#) and a digital camera organization app that he wrote for himself (not for you).  It was running slow over a wireless connection, so he brought out the laptop to reassure us that the app was fast and non-blocking.

It is obvious that WinForms is one of the least mature parts of Mono.  More people are interested in using Mono for hosting ASP apps, so that stuff is getting done quicker.  He stressed several times that if we wrote some regression tests, patched some code, did some documentation, that Mono would be complete in a matter of weeks.

There is database support for pretty much every popular database that runs under Linux.  You can take an exe produced from Visual Studio or the mono compiler and run it using mono.

Overall I was impressed by the state of Mono and the demos.  It's awsome to be able to take a Microsoft demo app out of the box and run it using Mono.  There were only a few configuration changes that had to be made to take case specific files into consideration.  Other than that, it just worked: mono server.exe 8080.

[Matt Croydon: .NET]
12:51:47 PM    

The Internet Health Report


11:50:18 AM    

23 January 2003
 

Open-source defect could wreak havoc. A critical vulnerability has been found in the Concurrent Versions System, which is used in the majority of open-source projects to update and maintain source code. [CNET News.com]
6:09:27 PM    

The Exception Management Application Block provides a simple yet extensible framework for handling exceptions. With a single line of application code you can easily log exception information to the Event Log or extend it by creating your own components that log exception details to other data sources or notify operators, without affecting your application code. The Exception Management Application Block can easily be used as a building block in your own .NET application.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/emab-rm.asp


1:40:20 AM    

22 January 2003
 

MDAC 2.7 RTM Refresh [MSDN Recently Posted]
7:59:43 PM    

There can be only one....

This is an old trick, but updated for the .NET world.

Question, how do you keep more than one instance of an app from running (this can be especially useful for Terminal Server scenarios).

Mutex m;
public Form1()
{
    InitializeComponent();
    bool gotIt = false;
    m = new Mutex(true, "SomethingReallyUnique", out gotIt);
    if (!gotIt)
    {
        MessageBox.Show("This application is already running.");
        Application.Exit();
    }
}
 
 
[Sean 'Early' Campbell & Scott 'Adopter' Swigart's Radio Weblog]
11:58:10 AM    

21 January 2003
 

Recent Command List Popup.

Recent command list. Here's something nifty that I recently (and accidently) found out. If you're in a console window hitting the F7 key... [kilic.net]

Holy Crap! Feels like 4DOS!

[Scott Hanselman's Weblog]
11:56:59 AM    

16 January 2003
 

The Hacker FAQ
4.1: I can't get an estimate out of my hacker.
Your hacker hasn't figured out how hard the problem is yet. Unlike most workers, hackers will try very hard to refuse to give an estimate until they know for sure that they understand the problem. This may include solving it.

The Manager FAQ

3.6: I'm stuck, and my manager won't stop pressuring me to get unstuck.
The best solution I've ever heard is to ask your manager what happens if he loses his keys. How long will it take to find them? Once he's done looking everywhere he can think of, why doesn't he keep looking in all those places over and over and over? This is the best analogy to difficult creative work that most people will have had experience with.
5.4: My manager counts from one.
Ordinals (counting numbers) have always started from one; counting from zero, while obvious and natural to many programmers, is probably wrong from a linguistic standpoint. Try to be flexible.

7:19:17 PM    

15 January 2003
 

TcpTrace 0.7.3. "I just posted v0.7.3 of TcpTrace." [Simon Fell] Sweet!... [Commonality]
4:17:54 PM    

13 January 2003
 

TeeGofer. "TeeGofer is a tool designed specifically for the .NET Component writer. Written in 100% native C# code, it works by reflection to read in metadata from .NET Assemblies (.DLLs or .EXEs) to create first class quality online help documentation. The Tool is extremely easy to work with, presenting a tree navigator of the entire structure of any Assemblies selected for the Help Project."

Really Cool! [sellsbrothers.com: Windows Developer News]
7:34:35 PM    

11 January 2003
 

Microsoft ObjectSpaces (OS) Gopalan Suresh Raj http://my.execpc.com/~gopalan/dotnet/object_spaces/object_spaces.html
11:41:24 AM    

10 January 2003
 

Put The Demoscene In Your DVD Player [Slashdot]
9:34:50 AM    

07 January 2003
 

Remote Desktop Client for the Mac
10:44:40 AM    

06 January 2003
 

Evolutionary Database Design [Slashdot]
10:43:40 AM    

03 January 2003
 

  • Increase the Recording Capacity of your TiVo
  • Get your TiVo on the Network
  • Add a Web Interface to your TiVo
  • Make Life easier when Hacking your TiVo
  • Make Hacking Safer on your TiVo
  • Get TiVo to display messages on Screen
  • Get TiVo to display Caller ID data on your TV
  • Get TiVo to check your Internet email and display it on your TV

  • 2:14:45 PM    

    02 January 2003
     

    Reinventing the cryptographic wheel

    I've seen a lot of articles that contain some home-brewed algorithm for converting a string password into a cryptographic key for use with symmetric encryption (DES, Triple-DES, Rijndael, etc.) 

    You don't need an algorithm for this; it's already in the box.

    byte[] salt = new byte[2] {200, 100}; // can also use null salt
    PasswordDeriveBytes p = new PasswordDeriveBytes("MyPassword",salt);
    int bytesInKey = 32;
    byte[] key = p.GetBytes(bytesInKey);
    foreach (byte b in key)
    {
    Console.Write(b.ToString("X"));
    }
    Console.WriteLine();

    Returns:

    8134CDE1B8E01F9A1B261CAC17D8BBF7E0A9CD839526638F4DC2355473C98

     

    [Sean 'Early' Campbell & Scott 'Adopter' Swigart's Radio Weblog]
    10:34:00 PM    

    31 December 2002
     

    Favorite Visual Studio .NET 2002/2003 (Everett) shortcuts

    Ctrl + R, Ctrl + R - Turn on/off Word-Wrap.
    Ctrl+K, Ctrl+K - Add a Bookmark/Remove a Bookmark.
    SHIFT+ALT+ENTER - Full screen mode for code editing.
    CTRL+K, CTRL+C - Comment and uncomment the selected region of code.
    CTRL + SHIFT + S - Save all
    CTRL + J - List members
    CTRL + SHIFT + B - Build solution
    CTRL + TAB - Next Window
    CTRL + SHIFT + TAB - Previous window
    CTRL + F4 - Close current window
    CTRL + F8 - Build and browse
    CTRL + M, CTRL + M - Toggle region

    You can also view a list of all the shortcuts,

    Have your own favorite?  Post a comment.
     

    [Sean 'Early' Campbell & Scott 'Adopter' Swigart's Radio Weblog]
    8:48:19 PM    

    13 December 2002
     

    Illustrated GOF Design Patterns in C#  -  : PermLink
    Ian Marino has written up a set of articles on The Code Project documenting how to implement the various GOF design patterns in C#. Lots of sample code is included.

    1:35:19 AM    

    09 December 2002
     

    What's really in that assembly?

    System.Reflection is great, but sometimes you wanna know more.  Ever notice that you can't see (say) the IL of a method given a MethodInfo?  Jim Miller [who was one of the main forces behind ECMA-335 (soon be an ISO standard as well!)] just posted two PERreaderWriter packages up on gotdotnet for working with PE files in the raw from managed space. Looks way more convenient than the unmanaged API's (ICorMetaData and friends). Jim showed his own language agnosticism by posting two versions - one written in C# and one written VB.NET.

    These libraries are probably most interesting to people writing compilers and related tools  (I may use them myself for this soon) but there's good stuff here even for general development, including this snazzy class:

    [Serializable]
    public class MMFStream : Stream, IDisposable
    {
        private
    OSMappedViewOfFile mappedViewOfFile;
        private
    Int64 position = 0;
        private
    Int64 fileLength;
    ...
    }

    Yes! Everybody needs one of those in their toolbox! 

    [Managed Space]
    2:15:31 AM    

    02 December 2002
     

    Q:
    [6.4] How can I automatically register my assembly when I build it from Visual Studio.NET? 5top
    A:
    It is possible to execute pre and post build steps for C# and VB.NET projects by utilizing a special project type from C++ called a utility project.  Prior to testing a server application you must install it into the GAC and register it using regsvcs running on an account with administrative privileges.  You can create scripts that will automate this process by doing the following:
    1. Add a new project to your solution
    2. Select the project type Visual C++ projects
    3. Select the template Makefile Project
    4. Enter the name Pre-Build
    5. Click OK - this will display the makefile project wizard
    6. Click finish on the makefile project wizard
    7. Right click on the Pre-Build project and select properties
    8. In the General page of the configuration properties, change the configuration type to Utility
    9. Click the apply button - new options will appear when you do this
    10. Select the build events folder and Pre-Build Event
    11. In the Command Line enter Pre-Build.bat along with any parameters you require for your build script.
    12. Repeat steps 1-11 for Post-Build events (substitute Post-Build wherever it says Pre-Build)
    13. Select Project / Project Dependencies... from the menu
    14. All projects should depend on Pre-Build, this will cause it to build first
    15. Post-Build should depend on all the other projects, this will cause it to build last.

    Now you can create the two build scripts Pre-Build.bat and Post-Build.bat with the commands that you want to run when these events occur.

    Pre-Build
    In the pre-build event, you should return the machine to a known state so you will want to remove the assembly from the GAC and uninstall the Enterprise Services application if the assembly exists.  Be aware that regsvcs.exe returns an error if the assembly does not exist which Visual Studio will interpret as a build error.

    Post-Build
    In the post build event, you will want to take the steps necessary to deploy and register the server app in preparation for debugging.  For most Enterprise Services assemblies this includes adding it to the GAC and calling regsvcs.exe to register the assembly.


    7:41:20 PM    

    Enterprise Services FAQ
    http://www.gotdotnet.com/team/xmlentsvcs/esfaq.aspx


    7:14:54 PM    

    This is cool! Rotor Source Code indexed by namespace, class, enumerator, delegate and interface. [Sam Gentile's Radio Weblog]
    5:29:34 PM    

    01 December 2002
     

    http://www.codeguru.com/net_general/PocketUML.html
    10:50:26 PM    

    30 November 2002
     

    Could you Pass the Salt? Improving the Security in Encrypting Passwords using MD5 11/20/02
    A couple weeks ago Scott Mitchell wrote an article titled Using MD5 to Encrypt Passwords in a Database. In his article, Scott examined how to use the built-in ASP.NET MD5CryptoServiceProvider class to use MD5 hashing. To recap, MD5 is known as a one-way encryption algorithm. It is presented a plain-text string and then computes an encrypted version of that string. Given the encrypted version, it is computationally infeasible to determine the plain-text version. Unfortunately, Scott's article contains a rather serious security hole, namely that the a single value is used to compute the hash. This article, Thomas Tomiczek, examines how to improve the security provided by hashing passwords by salting the hash. Read on to learn more!
    [Read More] | [Visit ASPNET.4GuysFromRolla.com]

     


    1:57:27 PM    

    29 November 2002
     

    Why you want to use Enterprise Services for your .NET application

    Clemens "Mr. Enterprise Services" Vaster has started a series of pieces about using COM+/.NET Integration (following up on his "power = work/time" piece)  He writes:

    COM+ provides the implementation of a lot of common architectural patterns and solutions to very typical functional challenges. If I either don't understand these patterns or, more often, don't see an obvious mapping of such a functional challenge that I find in my project to a feature provided by COM+, I simply won't use it. The dilemma: If you don't really know what's in COM+ feature bag, you won't be able to find out why you'd ever want to consider using it. If you have no interest in COM+, you will not buy a book on it. For most developers, all feature areas of COM+ beyond "Transaction.Required" therefore remain in the dark. [Clemens Vasters]

    Looks like it will be a nice series of articles.  Also check out what Tomas Restrepo and Ingo Rammer have to say.

    [Managed Space]
    6:39:22 PM    

    24 November 2002
     

    This is a set of NAnt Tasks that you can use for your own buildscripts. This is a very early version (0.1.2.0), so there's not much yet. Here's what you'll find here:

    • Checksum: This is a basic port of Ant's original Checksum task. For now, it only allows you to calculate a checksum value for a set of files.
    • Concat: This one allows you to concatenate a set of input files. Again, it's a basic port of Ant's Concat task.
    • MailEx: This one is a modified version of NAnt's original Mail task, which uses filesets instead of attributes to especify attachments.
    • MgmtClassGen: This one allows you to execute mgmtclassgen.exe from your NAnt scripts to generate typed WMI classes.
    • NUnitReport: This is a NAnt/NUnit version of Ant's JUnitReport task. It allows you to generate an HTML report of your NUnit test results. You can see an example of such a report here.
    • Record: This is a preliminary version of Ant's Record task, which allows you to record parts of your build's output (log) to a file. It's very useful when combined with NUnitReport to generate full-blown reports of your daily builds that you can send via e-mail.

    7:26:13 PM    

    22 November 2002
     

    Jason Bock's site


    10:05:51 PM    

    .NET Refactoring Tool Enters Beta. "C# Refactory is a revolutionary new tool which enhances Microsoft's Visual Studio.NET IDE. It performs a number of complex refactorings automatically, allowing you to shape and re-shape your code as needs arise. It also helps you identify code which needs attention by calculating metrics, from 'lines of code' all the way up to 'cyclomatic complexity'. It is fully integrated with the IDE - no external tools means that refactorings are always ready at your fingertips."

    As I'm writing a bunch of book code just now, I'm not a good beta tester for this tool, but the descriptions of what it does look yummy. I would especially love Extract Method and Rename Type. [sellsbrothers.com: Windows Developer News]
    9:55:27 PM    

    15 November 2002
     

    Increasing Permissions for WinForms Smart Clients. "Chris Sells discusses permissions in .NET and how you can adapt the object model to protect smart clients while allowing well-known assemblies or sites to have additional permissions to provide users with additional services." [sellsbrothers.com: Windows Developer News]
    10:34:58 AM    

    Little known COM feature: CoGetInterceptor. This function provides you with a universal interception mechanism that lets you dynamically inspect all aspects of a call and that feels a lot like .NET Remoting Context interception sinks (which unfortunately went from documented to "internal only" in .NET FW RTM)

    I don't have the cycles right now to provide an isolated sample or an in-depth explanation, but it works something  like that:

    IUnknown * pItfToBeIntercepted;
    ICallInterceptor * pInterceptor;

    // ... get pItfToBeIntercepted from somewhere

    MyEventHandler * myEventHandler = new MyEventHandler( pItfToBeIntercepted ); // implements ICallFrameEvents
    CoGetInterceptor(iidToBeIntercepted, NULL, IID_IContextInterceptor, (void**)&pInterceptor); // get interceptor
    pInterceptor->RegisterSink( myEventHandler ); // register

    with myEventHandler being an instance of a class that implements ICallFrameEvents. That interface has a method OnCall that gives you the ICallFrame info. You forward the call to the actual target object using ICallFrame::Invoke or you can just consume the call right there and not forward.

    To get between the caller and the object, you call QueryInterface for iidToBeIntercepted on pInterceptor and hand this reference to the client instead of the actual interface.The actual "inner" interface is wrapped by the class that handles ICallFrameEvents and which forwads the call to it inside OnCall using ICallFrame::Invoke. (as shown in the pseudo-code constructor above).

    If the target object is aggregatable, you can do all of this in an outer QueryInterface, proxying each interface being asked for and therefore construct a fully transparent interception layer.

    [Clemens Vasters: Enterprise Development & Alien Abductions]
    10:12:31 AM    

    12 November 2002
     

    Beta 2 SDK Now Available
    http://www.microsoft.com/speech/


    2:42:26 AM    

    For a description of how to build your own custom templates, I recommend reading "Adding Custom Project Item Templates to VS.NET for C# Programmers" or "Adding Custom Project Item Templates to VS.NET for VB.NET Programmers."


    2:17:38 AM    

    11 November 2002
     

    FTP Client Software.

    If you are looking for a good FTP Client, check out SmartFTP. It has a nice polished interface that looks good on W2K and XP. And it is free for personal use. I'm going to buy a copy anyway (29 bucks) because I really like it. Much better than CuteFTP or WS-FTP.

    [News from the Forest]
    5:55:22 PM    

    07 November 2002
     

    Name Size Creator Created  Edit   Delete   Cut 
    application/vnd.ms-excel FaceID.xls
    spreadsheet that shows button face ids for AddNamedCommand
    81 KB jeschkede 10/26/2001      
    directory VS .NET Beta 2 Samples
    This folder contains samples designed for Beta 2 of Visual Studio.NET from the Microsoft Web Site
      slaberee 08/22/2001      
    application/zip automationexplorer.zip
    Add-in that explores VS.NET automation model using reflection. Source included.
    48 KB jeschkede 07/19/2001      
    application/zip codemodelexplorer.zip
    Add-in that explores VS.NET code models
    42 KB jeschkede 08/21/2001      
    image/ custom bitmap template.bmp
    Craigs icon bitmap template. See msg 522.

    8:13:31 PM    

    02 November 2002
     

    ReST.NET.

    Yesterday (and this afternoon), I banged out some code that makes implementing RESTful web services a bit simpler (not too much right now). Basically using a pattern, it will dispatch a specific URI to a specific method. This pattern is of course a regular expression. Each verb may have 1 or more patterns. If you don't want to handle a specific verb, don't put it in the verbs section of the config file. When faced with this situation the handler will return Method Not Allowed to the client. [News from the Forest]

    Muy interesante...

    [Scott Hanselman's Weblog]
    2:04:50 AM    

    01 November 2002
     

    A Simple NUnit Set in Visual Studio.NET [StronglyTyped - Richard Caetano's weblog on software development] [Sam Gentile's Weblog]
    4:48:38 PM    

    Unit tests. There's nothing like doing drastic refactoring to the implementation of a class when you trust the unit tests to be solid. It's so much easier. [Jon Shute's WeblogYes!! That's the key. [Sam Gentile's Weblog]
    4:38:13 PM    

    25 October 2002
     

    Peter has posted the slides for his excellent RESTful Soap talk at the recent WS DevCon. This talk was one of my favorites at the conference. I really felt that I didn't understand REST at all before. Now, I feel that I at least understand the major points. After seeing all of the "controversy" on the blogs and elsewhere, I really felt that Peter did a fine job of presenting both sides of the argument fairly. Peter's assertion that the intersection of the two circles between REST and SOAP is one that I believe now: there are valuable things to be gained from it.

    [Sam Gentile's Weblog]
    1:37:34 AM    

    HTTP Extensions for Distributed Authoring -- WEBDAV
    http://asg.web.cmu.edu/rfc/rfc2518.html
    1:06:38 AM    

    22 October 2002
     

    Load discipline.

    One thing that Steve Loughran talked about at the March 2002 Web Services DevCon was about scheduling loads.  His philosophy is this: it takes 10 minutes to load a server, but only 1 minute to find a bug.  Therefore, you should load at most once a day, to avoid running in circles.

    How true this is.  I've had a lesson in load discipline over the past few weeks.  In the system I'm working on, it takes about an hour from the time a build is kicked off until the time the code is delivered from the staging area.   To load on our "copy" system, where customers develop code against, it takes about 5 minutes each to load 2 app servers and another 15 minutes each to load 2 web servers.  And that's the problem: it takes about 90 minutes and at least 3 people (me, the sysadmin who actually executes the install, and the change management coordinator)to build and install the system, and a minute to find the bug.  Case in point: this morning, we loaded the system with the output of Friday's daily build.  But somebody had checked in a stylesheet and apparently hadn't done much testing, and this completely broke one of the web services,which we found out not 5 minutes after the load was complete.  If we'd let the build settle on a testing system, we'd have shaken that problem out there rather than on a (semi-) production system.  So the first point is that you have to get a day of testing on some server that doesn't fall under change control.

    The second problem is that when you do find a bug, the worst thing to do is to patch the bug and slam an update onto the server you've just loaded.  This just puts you further behind the 8-ball; now everybody's life is on hold until the server's up.  The better solution is to do some triage:can the server live until tomorrow in its current state?  If so, then work towards shaking out the problem on development servers; if not, then roll back the install and fix the problem on development servers.  Either way, if a load fails, it's not getting fixed until tomorrow.  I don't care who's screaming for a fix; unless somebody's life is at risk, it's not happening until tomorrow.

    What's so wrong with doing more than 1 load a day?  Number one,it wastes time.  Even in a heavily automated environment, a load takesa lot of time, much longer than finding bugs.  Number two, with all the wasted time, the amount and quality of testing goes down, and you end up testing on production servers, where it's most expensive to fix.  And finally, it puts too much pressure on everyone involved.  Developers start to try to squeeze changes in before the build without adequate testing. The build monkey screws up an install script.  Sysadmins start making typos.  People under the gun make mistakes.  This isn't trench warfare, it's software development,so don't go acting like you'll get a medal for heroics.  It's far better to get into a rhythm and let the process work itself out.

    [Gordon Weakliem's Radio Weblog]
    1:37:37 AM    

    10 October 2002
     

    i learned with Orca and izfree to start with..izfree is good for
    making a basic MSI "template" of sorts..but you can do everything with
    orca..it just takes some work reading the SDK documentation to learn
    how it works.  Two other tools you might want to use, both are
    included in the sdk i believe.

    makecab: this is a command-line utility that will combine/compress
    files into a .cab file.
    msidb: command-line utility used to package actual cabs internally
    into an msi. Also can be used to extract a cab, or remove a cab
    entirely(kill a stream).

    2:28:31 AM    

    msi2xml
    https://sourceforge.net/projects/msi2xml/


    1:24:37 AM    

    Windows Installer Tools

    http://www.xmission.com/~legalize/installer/


    1:21:17 AM    

    08 October 2002
     

    I do a lot of work with small offices on the side, and consequently I have to write a lot of VBA code.  I tried writing some of that in C# and ended up wrapping the Office Automation interfaces automatically with Visual Studio.NET. Fortunately, Microsoft has released the blessed Microsoft Office Primary Interop Assemblies.  There's also a tutorial which touches on the importances of PIAs in bridging the .NET to COM gap.

    [Scott Hanselman's Weblog]
    5:36:22 PM    

    Sample #1: Using the Word Spell Check Engine

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnofftalk/html/office10032002.asp

     


    5:34:30 PM    

    06 October 2002
     

    Screen Scraped Goodness. RSS 1.0 feeds for CNN, the BBC, Red Hat, and more. Interestingly, CNN is hosting its own feed. Unfortunately, it's... [injektilo]
    3:00:45 AM    

    04 October 2002
     

    NUnit 2.0 Released. NUnit 2.0 Released. From the readme:

    "This is the second major release of the xUnit based unit testing tool for Microsoft .NET. It is written
    entirely in C# and has been completely redesigned to take advantage of many .NET language features,
    for example custom attributes and other reflection related capabilities."

    "In the next few weeks we will be
    formulating the next release trying to incorporate as many requests as possible." [sellsbrothers.com: Windows Developer News] [Sam Gentile's Radio Weblog]
    5:20:55 PM    

    02 October 2002
     

    .NET Localization, Part 1: Resource Managers. Localization in ASP.NET happens with the resource manager. This article looks at some issues between resource manager and Visual Studio. [O'Reilly Network Articles]
    3:11:51 PM    

     


    2:43:48 PM    

    25 September 2002
     

    Visual SourceSafe Tips.

    Visual SourceSafe tips:

    [Adrian Bateman - VisionTech] [Sam Gentile's Radio Weblog]
    3:05:20 AM    

    24 September 2002
     

    VSNET Resource Editor Addin

    http://www.aconnell.com/development/content.aspx?e=vsResEd.myref


    7:27:47 PM    

    23 September 2002
     

    Native XML Script.

    Now this is cool.

    This technology would have saved many of the hairs I ripped out of my head from mixing XSLT and procedural code (Java, C#, etc.). What would be even cooler is if there was an XSLT engine that natively supported XML Script.

    [News from the Forest]
    11:39:04 AM    

    Hyperlinked Rotor Docs
    http://dotnet.di.unipi.it/Content/sscli/docs/doxygen/fx/bcl/index.html
    12:34:08 AM    

    22 September 2002
     

    Microsoft .NET CodeDom Technology - Part 1. Microsoft .NET CodeDom Technology - Part 1
    In the first part of this three-part article on .NET CodeDom technology, Brian J. Korzeniowski introduces .NET CodeDom by examining the inputs and outputs of a working source code generator.

    [Sam Gentile's Radio Weblog]
    12:58:52 PM    

    Don't know if you've seen this yet, but it's pretty damn amazing.

    Tried some obscure old hi-nrg stuff it and got it all correct!

    http://www.shazam.com/shazam/do/home


    12:39:53 PM    

    Debugging Tools for Windows
    http://www.microsoft.com/ddk/debugging/default.asp

    http://www.iunknown.com/Files/Annotated_x86_Disassembly.pdf


    2:52:27 AM    

    Usenet Visualisation!
    http://netscan.research.microsoft.com/default.asp
    2:44:50 AM    

    21 September 2002
     

    Visual XSLT !

    http://www.activestate.com/Products/Visual_XSLT/


    9:25:20 PM    

    MetaData API and Info

    http://www.iunknown.com/Files/metadata_internals.pdf
    http://msdn.microsoft.com/msdnmag/issues/1000/metadata/metadata.asp


    7:19:15 PM    

    20 September 2002
     

    I'm just about to convert over to Easynet for my ADSL local loop.  Here is what I'm getting before the changeover...

    2002-09-20 08:04:47 EST: 1457 / 222
    Your download speed : 1457868 bps, or 1457 kbps.
    A 177.9 KB/sec transfer rate.
    Your upload speed : 222617 bps, or 222 kbps.
    Seems like broadband .. above the 1mbit barrier!


    1:07:07 PM    

    18 September 2002
     

    An In-Depth Look into the Win32 Portable Executable File Format
    http://www.msdn.microsoft.com/msdnmag/issues/02/02/PE/PE.asp
    http://www.msdn.microsoft.com/msdnmag/issues/02/03/PE2/PE2.asp
    5:22:50 PM    

    17 September 2002
     

    DotNetHook
    http://dotnethook.sourceforge.net/


    6:47:21 PM    

    16 September 2002
     

    Assembly Binding Log Viewer
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpgrffusionlogviewerfuslogvwexe.asp


    4:23:33 PM    


    Click here to visit the Radio UserLand website. © Copyright 2003 Jamie Cansdale.
    Last update: 26/02/2003; 03:09:01.
    February 2003
    Sun Mon Tue Wed Thu Fri Sat
                1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28  
    Jan   Mar