Rants, rambles, news and notes from another geek

.NET Reflector 4.0.0 Is Out

Lutz Roeder just released version 4.0. Somehow (and I’d love to see thee code) he has one EXE working on all three .NET frameworks. Tres cool. Download it here.

From the readme file:

.NET Reflector 4.0 Release Notes

28 March 2004

Reflector is a class browser for .NET components. It allows browsing and searching the meta data, IL instructions, resources and XML documentation stored in a .NET assembly. Reflector was first released in October 2000 running on .NET Framework 1.0 Beta 2.

Code Model: While previous versions of Reflector partly used the CLR Reflection infrastructure, the new version 4.0 has changed to use a code model library for reading assembly files into memory. As a result Unload and Refresh operations really unload files from memory and Reflector is no longer locking files on disk.

Reflector and .NET Framework 2.0: Reflector.exe runs on all .NET Framework versions. The new code model library loads .NET Framework 2.0 assemblies with no .NET Framework 2.0 installed. However, a Reflector.exe.config file is still going to make Reflector run faster on .NET Framework 2.0.

Assembly Cache: When resolving an assembly reference, Reflector will first search the local path and then falls back to the cache directories defined in the Reflector.cfg file. Reflector doesn’t search the GAC unless you add “%SystemRoot%\Assembly” to the cache directories list.

Search and Callee Graph: There is now only one search window (F3). You can click on the icon on the top-right to switch to search members (this was previously called member search). The reference search windows are replaced with a callee graph window that shows any kind of dependencies of a type or member.

Command Line: The /configuration switch allows you to specify a config file different from Reflector.cfg. The /fontsize and /fontname switches can be used to increase the font size for overhead demos.

Assembly Versioning: By default, assembly version numbers are ignored when resolving type and member references. You can enable side-by-side versioning in the options dialog but it is suggested to avoid this if possible.

Add-Ins: Reflector add-ins and hosting projects can be found here. An introduction to the add-in model is available here.

WinFX Help: To view the Longhorn MSDN documentation instead of the .NET Framework MSDN documentation add a [WebSearch] section to your Reflector.cfg file with Msdn=”http://longhorn.msdn.microsoft.com”.

Another .TEXT Posting Plug-In

After that last post, I decided to dig a little bit to see if perhaps I wasn’t using the plug-in properly. Apparently I’m not, but I did discover another .TEXT plug-in written by James Geurts that supports them. I just installed it and hopefully this post will demonstrate that it works properly.

UPDATE: It works! Yippee!

Geek Notes 2004-05-01

So the .TEXT migration seems to have been successful. I’m hoping to post the code later tonight, but I need to write up some docs for how to use it all. There are a couple of interesting parts.

One thing I didn’t expect was to discover that the NewsGator Plug-In for .TEXT behaves very differently that the one for dasBlog. The dasBlog Plug-In let me type a category name in the Outlook Category field and it became the category for the new post on the weblog. The .TEXT one doesn’t seem to work that way. Very disappointing. I’m hoping I can find a work-around or I basically won’t be able to use NewGator to post anymore.

  • Using Google to Find Security Vulnerabilities - I would never suggest that you should hack anyone, but this is an interesting way to use Google to find sites that are vulnerable to attack. [via Bruce Schneier’s Crypto-Gram]
  • PicoContainer for .NET - This is a .NET port of a Java framework that implements a pattern called Inversion of Control or Dependency Injection. Also known as “The Hollywood Principle” or “Don’t call us we’ll call you”, this pattern is used to create VERY loosly coupled system. Essentially a component declares what other components it is dependent on and that component is supplied externally.
  • All That’s Wrong With UML - Ted Neward comments on this article that discusses why UML has created a culture that is less than desirable. Note that they problem is not actually with UML but with the processes and/or expectations that often accompany its use.
  • Efficience of Iteration Over Arrays - Eric Gunnerson talks about the most efficient way to iterate over an array of integers. Summary: use the clearer implementation (foreach) instead of the most efficient (for) to avoid premature optimization.
  • Visual C++ 2003 Toolkit Download - Just last week I was talking to a group of university students and I said, “You can develop in C# or VB for free with the .NET SDK, but not C++. That requires you to buy Visual Studio .NET to get the compiler.” Well, that isn’t true anymore. Now you can have the C++ compiler for free.
  • PInvoke.NET - Everyone else already blogged this, but I want to get it down for myself. This site is your one-stop-shop for P/Invoke signatures.

TechEd 2004 - I'll Be There

So, I will be attending TechEd 2004 in San Diego later this month.

Not only will I be attending, but I will be working. First of all, as you probably know already, I have submitted a Birds of Feather session:

Continuous Integration in .NET

Setting up a continuous integration system for .NET development is a challenging but essential process. In this session, we will discuss the tools that are currently available, see demos of one or two and talk about the state of CI in .NET.

That should be a blast. When last I checked, it was second in the rankings, so please go vote for it to make sure it happens.

In addition to the BoF, I will be working at Harry Pierson’s (aka DevHawk) Architecture Cabana. The community cabanas are basically “ask the expert” sessions that run concurrently with the conference sessions. At PDC last year, this wasn’t so formalized and so it was hard to find the right people to talk to. This will be an attempt to rectify that situation. For more information, see the Community page at the TechEd 2004 site.

I’m really looking forward to that. It should be a blast. Please come by and see us.

Another thing that I know I haven’t seen blogged much is the Architect Road Rally on May 23rd. Basically it is a party at the San Diego Automotive Museum with remote control car races. Oh yeah. You don’t want to miss that. Busses will be going to and from the San Diego Convention&nbsp_place_holder; Center. Visit the site to sign up

Whew! Looks like it will be at least as busy as the PDC was.

Test Post From NewsGator to .TEXT

One step that I almost forgot was to replace my NewsGator posting plug in with one for .TEXT. Luckily there is a good one available from the NewsGator Plugins site, so all is well.

Assuming this post makes it, that is…

DasBlog to .TEXT Conversion Complete!

Whew. Swimming lessons tomorrow morning with my 2 year old are going to be tough (it is 2am now), but I got it done. It all appears to be working. So if you were aggregating my old RSS feed, your reader should have been given a permanent redirect to the new one. Any links to the old dasBlog permalinks should redirect to the new .TEXT permalinks. And I think I got all the content, comments and yes.. even my blog roll.

I have a few things that I would like to share with anyone who is going to attempt this, and a few bugs and annoyances that I discovered along the way.

  • I really suggest you use a VPC to mock up the whole thing. Create a hosts file on the VPC that maps your URL to and you can test it all from the local box and not have to commit to your real server. This is a good technique any time you are migrating a web app and is yet another reason that I recommend using VPCs for development.
  • I found a strange config entry for .TEXT that you have to use if you are doing a single blog config, at the site root, with a site that has a www at the beginning. It is called and without it, it won't work. Why? _place_holder; I don't know.
  • I finally found the logout bug in Dottext.Web.Admin.WebUI.Page.Logout(). It turns out that somewhere in there it calls HttpContext.Current.Session.Abandon() and since sessions are disabled in the web.config, that line causes a NullReferenceException.
  • Although my imported worked like a charm, I had to move a lot of content around (and probably will continue to do more over the coming days). Boy it sure would be nice if the .TEXT Admin pages let you convert a blog entry into an Article. They are essentially the same in the DB so why not?
  • I wrote a little command line tool (not nearly as user friendly as the blog importer) that imports OPML (aka blogroll) into a links category. Nothing fancy but it works.

Whew. That’ll do for now. Like I said, I’ll post the code tomorrow.

Please add a comment to this entry if you find any bugs, errors or anything you think I should know about.

Time for sleep.

Denver SharePoint Users Group

I just wanted to post this for anyone in the Denver/Rocky Mountain region who is working with SharePoint Portal Server or Windows SharePoint Services. Fellow Interlinker Kris Syverstad has started a SharePoint User Group that will be having its first meeting at Interlink’s Inverness office on Tuesday May 18th.

For more information about this group, contact Kris.

Continuous Integration in .NET BoF at TechEd

Just a reminder to go vote for your favorite Birds of Feather session if you are attending TechEd in San Diego. Kris Syverstad and I will be leading the group if it gets approved and it should be a fun talk. Hopefully we’ll have demos of a running CruiseControl.NET system and maybe even a Draco.NET system. We’ll see.

Last I looked it was third in the voting list, so hopefully it will make the cut.

You can vote here. Note: The site is a little flaky, so click “Event Select” at the top first, then choose “Proposed Topics” to find my session.


Geek Notes 2004-04-28

So I forgot to tell you all about my favorite new toys. After a recommendation on the Win Tech Off Topic mailing list, I decided to buy a hard drive enclosure and a drive instead of paying for a Maxtor. A buddy in MCS recommended this brand of enclosures (he had a couple) and boy are they cheap! I got a 3.5 inch USB 2.0 case for $29.99. Even better, I got a 2.5 inch (for laptop drives) USB 2.0 case for $17.99. The really cool thing about the little one is that it is cable-powered, so you can basically use it like a multi-gig thumb drive (and it is only as big as a deck of playing cards).

I was lucky because I had a spare 7GB 2.5 inch drive just gathering dust, so I popped that in the little case. But for the big one, I headed over to my local ComUSA and looked for rebate deals. I finally found a 160GB 7200 RPM 3.5 inch drive for $59 after rebates. When combined with the cost of the enclosure, that comes to about 56 cents per GB. The best price I could find on a Maxtor OneTouch was about 94 cents per GB, so I saved about $60. And I have the added win of being able to swap out the drive itself later if I can find a better (bigger) one for a good price. Sweet!

  • Pragmatic Unit Testing in C# - Andy Hunt and Dave Thomas have a new book in the Pragmatic Programmer series about unit testing in C#. You can get one chapter online here and a number of other excerpts here.
  • Ruby Auto-Mocks - Wow. This is one of those things that I think you can only do in a dynamically typed language: bind to a particular mock implementation on the fly. I think I agree with Michael Feathers that this├é could be seriously abused by people, but could be very useful in particular kinds of situations.├é
  • The Provider Pattern in Whidbey - Andy Smith argues that the Whidbey Provider Pattern is actually a combination of Abstract Factory, Singleton, Strategy and Component Configurator. I agree, but isn’t that what we call a pluggable architecture?
  • Static Classes in Whidbey - Somehow I missed this one in the literature… we will now be able to assign the static modifier to a class instead of just making the constructor private. Sounds good to me since it makes the code clearer and more self-documenting.
  • Naked Objects for .NET - I remember reading about these things when they hit the Java scene a few years ago. Now we have them in .NET so I suppose I better go figure out what all the hype was about. :)
  • Contiuous Integration with CruiseControl.NET and Draco.NET - There was a discussion on WTOT lately about why someone would use CC.NET instead of Draco. We use CC.NET but I know people who like Draco. Tomato… tomato. The general opinion is that CC.NET is the bigger, more configurable CI tool, but as always, you should use what works for you and your team.

Geek Notes 2004-04-26

Tonight I gave a guest lecture at UCCS (University of Colorado at Colorado Springs) with David Yack (of the Southern Colorado .NET User’s Group). It was a fun little chat about .NET and Java. They basically only teach Java at UCCS and one of the teachers was interested in exposing them to a) an alternative technology and b) some professional developers. All in all they were a bright if quiet bunch. Apparently all college students want to be game programmers, and we had to let them down nicely. :)

  • Cleaner, more elegant and wrong - Raymond Chen gives us a rant about exceptions and exceptional cases. The a number of people add their comments. All good stuff.
  • Visual Studio 2005 Developer Center - Yeah yeah, I know I’m late to this party, but I couldn’t ignore it.
  • Wacky Warning Labels - The Michigan Lawsuit Abuse Watch (huh?) has published their 7th annual Wacky Warning Label Contest winners. This years winner was the warning on a bottle of drain cleaner that says: “If you do not understand, or cannot read, all directions, cautions and warnings, do not use this product.” [via This is Broken]
  • The Open Source Vulnerability Database - Not open source software, but an open source database… like we needed another BugTraq. It does have an RSS feed though. And if you’re interested in digging through the database, it&nbsp_place_holder;has an XML-RPC API. Interesting. Maybe I’ll write a little app to keep track of Microsoft vs. Non-Microsoft items. [via TheServerSide.net]
  • Beware GoogleBot - Craig Andera tells an interesting story about what spiders and bots can do if you have a link that performs a destructive action. If you write web apps, you need to read this.