April 17, 2025
tools
How to Write Actionable Bug Reports

I often find myself maintaining open source projects. I’ve contributed to many over the years, even hosting multi-person “source available” projects on this very website in zip files before there were such things as GitHub or Pull Requests or Open Source Software. No matter what mechanism I’m using to manage the project, if it’s popular, I get issues filed against that project. Those issues break down into two categories:
February 29, 2012
tools win8 telerik
What’s New in the Beta Metro/JS Templates for VS11
The Consumer Preview of Windows 8 (aka the Win8 beta) is now available for download, along with the matching Visual Studio 11 beta. You can download them both from the Developer Center for Metro style Apps and at least when I did the downloading this morning, it was smooth and worked well. In case you’re interested, I downloaded the ISO, not the setup, and I am currently writing this blog entry in Windows Live Writer running inside a WMWare Workstation 8.0 virtual machine running on the Windows 7 host OS running inside Boot Camp on my MacBook Pro. As someone said to me this morning: “That’s a lot of VMs!” Maybe so, but the Win8 and VS11 betas are running surprisingly well inside of my Inception-box.
Metro/JS Templates for VS11 in BUILD
December 27, 2011
spout tools
GUI REPL for Roslyn
If you recall from REPL for the Rosyln CTP 10/2011, I’ve been playing around building a little C# REPL app using Roslyn. That version was built as a Console application, but I’ve refactored and rebuilt it as a WPF application:

December 14, 2011
spout tools data
Moving My Data To The Cloud: Stormy Weather

For years, I’ve maintained a single “main” computer. It was the computer that was the central authority of all of the personal data I’d accumulated over the years and from which it made me uncomfortable to be separated. Because I needed a single computer for everything, it had to work on my couch, on a plane, on a desk and everywhere else I ever needed to go. Also, it couldn’t have a giant monitor or multiple monitors, because it had to go everywhere. All of this was because I needed all of my data with me all of the time.
November 26, 2011
tools .net
REPL for the Rosyln CTP 10/2011

I don’t know what it is, but I’ve long been fascinated with using the C# syntax as a command line execution environment. It could be that PowerShell doesn’t do it for me (I’ve seriously tried half a dozen times or more). It could be that while LINQPad comes really close, I still don’t have enough control over the parsing to really make it work for my day-to-day command line activities. Or it may be that my friend Tim Ewald has always challenged csells to sell C shells by the sea shore.
December 11, 2010
tools
Using LINQPad to Run My Life: Budgeting
I use LINQPad all the time for a bunch of stuff, but most recently and most relevant, I’ve been using it for a personal chore that isn’t developer-related: I’ve been using it to do budgeting.
What is LINQPad?
October 27, 2010
tools
LINQ Has Changed Me
In the old days, the post-colonial, pre-LINQ days of yore, I’d have written a one-way MD5 encryption like so:
static string GetMD5String(string s) {
MD5 md5 = new MD5CryptoServiceProvider();
byte[] hash = md5.ComputeHash(Encoding.ASCII.GetBytes(s));
StringBuilder sb = new StringBuilder();
foreach( byte b in hash ) sb.AppendFormat("{0:x2}", b);
return sb.ToString();
}
September 27, 2010
tools
Time to check the donuts
One day when I was supposed to be writing, I needed something to do (as often happens). In this particular case, I built a little tray icon app using the new (at the time) tray icon support in Windows Forms (this was a while ago : ). The data I was checking was my gmail account and whenever there was new mail, I’d pop up a notification. All very simple, so to be funny, instead of saying
“You’ve got mail,“� my program said “I’s time to check the donuts.”
March 27, 2010
tools
Updated the CsvFileTester for Jet 4.0
I was playing around building a tool to let me edit a database table in Excel, so I updated my CvsFileTester project to work in a modern world, including the 32-bit only Jet 4.0 driver you’ve probably go lying around on your HD.
Enjoy.
December 15, 2009
tools
LINQPad updated to support Data Services!
Joe Albahari, the author of LINQPad, has added support for WCF Data Services to the 1.37.1 version beta of LINQPad. This means that you can point LINQPad at any Open Data (OData) endpoint and do queries interactively just like any other LINQ data source. He even supports HTTP security, in case the endpoint in question requires it. Further, if you have your own custom LINQ to Whatever and you’d like to plug a connection to it into LINQPad, Joe has already added the ability to create a custom data context provider. It is, as they say, a thing of beauty. Enjoy!
September 3, 2009
tools
Add “Search the Internet” Back to the Win7 Start Menu
Windows 7 took away a feature I use all the time, as shown on the right: Search the Internet.
March 8, 2008
tools
On Beyond Unit Testing
Quetzal Bradley is a software development engineer (SDE) on my team with *tons* of experience in all manner of infrastructure stuff including the requirements of real-world software testing from the trenches at Microsoft.
Q gave a talk about what comes after unit testing to my team and I was blown away, so I sent him to tell Scott about it so that you could hear it, too.
January 18, 2008
tools
Configuring VS08 to Debug .NET Framework Source
Shawn Burke has released the details to set up VS08 to debug into the .NET Framework source code, including the following assemblies:
- mscorlib.DLL
- System.DLL
- System.Data.DLL
- System.Drawing.DLL
- System.Web.DLL
- System.Web.Extensions.DLL
- System.Windows.Forms.DLL
- System.XML.DLL
- WPF (UIAutomation*.dll, System.Windows.DLL, System.Printing.DLL, System.Speech.DLL, WindowsBase.DLL, WindowsFormsIntegration.DLL, Presentation*.dll, some others)
- Microsoft.VisualBasic.DLL
August 24, 2007
tools
Shawn has prepared Genghis v0.8
Shawn Wildermuth has prepared a v0.8 release of Genghis that includes a bunch of stuff that the folks that put the v0.6 release together dropped. The v0.8 release has all the good stuff from the v0.5 release and all the new stuff from the v0.6 release in a .NET 2.0 package.
Shawn’s really done all the work for Genghis since I came to Microsoft. Thanks, Shawn.
April 11, 2007
tools
Show Me The Templates!
Show Me The Template is a tool for exploring the templates, be their data, control or items panel, that comes with the controls built into WPF for all 6 themes.
February 14, 2007
tools
Detailed Time Zone Data
A long time ago (2000), I was fascinated with turning a phone number into a time zone so I could tell what time it would be somewhere before I called and woke anyone up (this happened too often : ).
As part of that work, I quickly realized that info in Windows for time zones wasn’t detailed enough, so I began looking elsewhere. I found the Time Zone Map Group, which maintains time zone data for all over the world backward through time. This is an amazing accomplishment, since they have to account for every law change as each tin pot dictator comes to power, e.g. George W.
February 4, 2007
tools
.NET: Decompressing zip file entries into memory
I knew that the J# libraries in .NET had zip file support, but I couldn’t find any samples that showed how to decompress the files into memory. The hard part, of course, is that the J# stream objects aren’t the same as the .NET stream objects. If you’re a Java programmer looking for a familiar library, that’s great, but I’m not, so I had to do a little finagling.
The first thing you need to do is to add a reference to the vjslib assembly, which brings in .NET classes in Java namespaces, e.g. java.io. The one we care most about is java.uti.zip, which includes ZipFile and ZipEntry. We also need java.util for the Enumeration class and java.io for the InputStream class. With these in place, we can enumerate a zip file:
February 2, 2007
tools
Windows Servers for the rest of us
Charlie Kindel of COM fame (he’s wrote the foreword to Don’s seminal work “Essential COM”) is the Product Unit Manager (softie-speak for “butt on the line”) for the new Windows Home Server team. If you haven’t heard about it, Home Server is a Windows server box for the rest of us. I don’t know about you, but I’ve got file, print and media servers all over the house in a confusing mess and I look forward to being able to consolidate it. According to the enthusiastic beta tester I talked to, Windows Home Server is the way to do that.
Yesterday, Charlie announced the Windows Home Server Blog. Enjoy.
January 29, 2007
tools
Window Clippings 1.5
Capturing screenshots for a book used to be a piece of cake. Alt+PrintScreent and you were golden. However, sometimes I wanted to get the cursor, too, and neither Alt+PrintScreen nor PrintScreen does that, so I got myself a copy of SnagIt. Unfortunately, if I wanted to capture multiple screens, I was putting a maximized copy of Notepad in the backgrand, using PrintScreen and PBrush to do the cropping (although SnagIt has slightly more seamless multi-window selection).
Still, this all worked ’til Vista came along and Alt+PrintScreen left the shadows out! I was fine with that, but Ian correctly pointed out that the screenshots with the shadows looks *so* much better that I could hardly say “no.” And I discovered the Snipping Tool in Vista, which let me do a selection on any part of the screen I wanted to, except that now instead of just doing Alt+PrintScreen, even for a single window, now everything is a selection, which means that somebody (hopefully not me!) has to trim the extra whitespace to make sure the pictures layout OK in the book.
January 19, 2007
tools
CodeFetch: Search Book Source Code
CodeFetch allows you to search in the source code associated with books (like the code I publish for my books). Plus, it lets you choose the language to search on and shows the book the results come from so you can read your favorites. Very cool.
December 15, 2006
tools
Point: Local Live Maps
When it comes to Web 2.0 apps, online maps are easily the thing I use the most. I don’t go anywhere these days w/o first pulling up the map on MapQuest, Google maps or, for a coupla years now, local.live.com (starting back when it used to be called MapPoint). I generally use Google for my search engine, so don’t think it’s just the MS employee thing pushing me — I genuinely like local.live.com better.
Google and MS have been in an arms race for years on the maps stuff, doing fancy stuff like 3D globes and other goo that looks good in demos, but that I don’t need. However, in this war of the world (so to speak : ), today MS fired a decisive shot across the bow, I think — the “Send” menu. This is huge for me, because I can send the directions to my phone, either via SMS or via email, and I get a great display clearly optimized for my smartphone. Not only does it have a great mini-map, but the directions are easy to read (saving me from printing the directions for just a single trip) and it has a link to reverse the directions (the one thing I never remember to do).
December 15, 2006
tools
VS2005 SP1
“Through further advancement and feedback, Service Pack 1 … provides over 70 improvements for common development scenarios including:
- New processor support (e.g., Core Duo) for code generation and profiling
- Performance and scale improvements in Team Foundation Server
- Team Foundation Server integration with Excel 2007 and Project 2007
- Tool support for occasionally connected devices and SQL Server Compact Edition
- Additional support for project file based Web applications
- Windows Embedded 6.0 platform and tools support
August 30, 2006
tools
If it can be installed, Scott’s installed it
and if it’s any good, we hear about it. Really, I’m just posting this link to Scott Hanselman’s 2006 Ultimate Developer and Power Users Tool List for Windows here so I can find it later, but feel free to browse the list yourself, broken up into several interesting categories:
- Top 10 (+ 5) Life/Working-Changing Utilities
- A Developer’s Life
- COM is Dead [ed: if only]
- XML/HTML Stuff
- Regular Expressions
- Launchers
- Stuff Scott Digs
- Low-Level Utilities
- Websites/Bookmarklets
- Tools for Bloggers
- Smart People’s Utility Pages
- Alt.Lang
- Browser Add-Ins
- Things Windows Forgot
- Outlook Add-Ins and Life Organizers
- Ultimate Registry Tweaks
- Windows Explorer Integration (and other integratey things)
- Continuous Integration
- TablePC Indispensables
- ASP.NET Must Haves
- Visual Studio Add-Ins
July 30, 2006
tools
Number to String Converter
To capture the work that Doug and I did to make Indigo (WCF) and Avalon (WPF) work together, I tore up our PDC sample application into a set of simpler technology samples. To make it fun for myself, as part of these samples, I built a little library for converting numbers into strings of English words, e.g.

July 30, 2006
tools
RegistrySettingsProvider2
I updated the SDK RegistrySettingsProvider to implement
IApplicationSettings and built a sample to demonstrate how to integrate it
(or any .NET 2.0 custom settings provider) with the settings
designer-generated code.
Enjoy.
Discuss
July 30, 2006
tools
Number To String Converter
To capture the work that Doug and I did to make Indigo (WCF)
and Avalon (WPF) work together, I tore up
our PDC sample application into a set of simpler technology samples. To
make it fun for myself, as part of these samples, I built a little library
for converting numbers into strings of English words, e.g. 4 is “four:”

July 29, 2006
tools
MS Live Labs PhotoSynth: building the photo web
Imagine your vacation photos displayed in 3D and linked together, both around a space and zooming in and out. Now imagine everyone’s photos linked together in this way. What you get is PhotoSynth:
July 11, 2006
tools
Functional Language Summary
I’ve been hearing a lot about functional programming lately (and the circle of life continues); I found Functional Programming For The Rest of Us to be a nice summary. Here’s what I got from it:
Atoms of FP:
July 5, 2006
tools
A Shared Source Site: CodePlex
″CodePlex functionality, built on Microsoft Visual Studio® 2005 Team Foundation Server, provides source control, issue tracking, discussion forums and RSS feeds in and out of each project so that members can stay up to date on the development issues most important to them. Microsoft Visual Studio Team Foundation Server enables developers to collaboratively develop, share, discuss and consume source code and build software.”
Enjoy.
June 9, 2006
tools
Annotate the MSDN Wiki
For a long time, my favorite place to put up code snippets that I could get back to later has been
pinvoke.net (like
GetTempFileName
June 9, 2006
tools
Advanced MSDN Search
MSDN has a new search
UI which includes And, Or, Exclude, Group, Exact Phrase and Preference in the query and then narrowing by source or category in the results, e.g.
June 5, 2006
tools
Web Application Project: “The type ‘foo’ exists in both ‘some dll’ and ‘another dll’”
In using the most excellent Web Application Project support for ASP.NET 2.0 in VS05 from Mr. Guthrie and co, I ran into what was first an intermittent and then a constant problem that actually made it’s way onto my live site (it worked on my machine!). The error looked like this against several classes in my app, i.e. when I’d comment out one, I’d get another class that showed the same problem:
Compilation Error
March 29, 2006
tools
Tell me about your troubles and woes configuring, deploying and maintaining distributed .NET apps
Believe it or not, Microsoft is always trying to improve its products and to do so, I find we do our best work when we actually ask our potential customers what they think.
In this case, I’d like to know what “pain points” you experience when configuring, deploying and maintaining distributed .NET applications. That can be any kind of app, whether it’s a client-side app that phones home for code or data updates or whether it’s a fully distributed grid or anything in between. Please be as specific as possible and, if you’d like one of our courteous technical people to follow-up, make sure to include contact info.
March 29, 2006
tools
Gengis for .NET 2.0
Genghis has been updated for .NET 2.0 and is available from the Genghis workspace. Enjoy.
Update: The following controls have been added to Genghis in the .NET 2.0 version:
March 26, 2006
tools
I’m with Scott — I Love Monad
I fell in love w/ the potential of monad a while ago w/ Jeffrey Snover’s original Channel9 video, but I was too lazy to download it onto all of my machines. However, after seeing Jeffrey’s talk at TechDays 2006 in Switzerland (and remembering that monad is installed by default w/ the WinFX SDK, so it was already on all my machines), I took the dive (starting with kiping Jeffrey’s personal copy of “Monad,” from ORA, Andy Oakley’s most excellent monad intro) and I’ve been doing it pretty much non-stop on the train and on the plane all the way home. Like Scott, I’m loving it.
I’ve built several scripts, including start-process (to act like cmd.exe’s “start” command — invoke-item doesn’t work on URLs), find-file, find-filebytext, find-dir and format-notepad. So far, no luck on format-clipboard, i.e. dropping the results of an operation into the clipboard, but I’m having a blast trying.
February 26, 2006
tools
Hello from ASP.NET 2.0
I ported sellsbrothers.com to ASP.NET 2.0 a while ago, but I wasn’t happy with the experience, so I didn’t pull the trigger on moving it to a production environment. I’m glad I waited. I ported the site again last night using the
VS05 Web Application Project preview and it worked a treat. Recommended.
February 8, 2006
tools
Network bandwidth usage monitor?
Sometimes, for no reason I can discern, the network bandwidth on various computers in my house goes south. What I’d love is a tool that shows me how much traffic is going across my network, where it’s going and where it’s from, i.e. from the internet, from a machine in my house, etc. Ideally, it’d also show me the ports and even the processes on each machine that are producing/consuming the data. Does such a tool exist?
January 26, 2006
tools
Calling a Remote Index Server from .NET
I was building some code to access Index Server’s results via .NET and I got this:
// Catalog specified in connection string
string query = “select Path from Scope() where FREETEXT(‘foo’)”;
using( OleDbConnection conn = new OleDbConnection(“Provider=MSIDXS.1;Data Source=MyCatalog”) ) {
conn.Open();
OleDbDataAdapter cmd = new OleDbDataAdapter(query, conn);
DataSet ds = new DataSet();
cmd.Fill(ds, “SearchResults”);
DataTable table = ds.Tables[0];
ds.Tables.Remove(table);
return table;
}
December 20, 2005
tools
New Workspace Link for RegexDesigner
Here.
The nice folks at GotDotNet have decided in their infinite wisdom to move all of the workspaces to a new hierarchy w/o forwarding the URLs and then leaving a message behind indicating that such a thing is temporary to keep users on their toes:
November 4, 2005
tools
Generics Q: Best way to convert a string to a T?
What’s the best way to implement the following semantic (feel free to change the signature)?
bool ConvertFromStringToT(string in, ref T out) {…}
October 27, 2005
tools
Scraping old versions of VS05 off your system
If you read the ReadMe.htm from the Visual Studio 2005 setup, you’ll see a detailed list of up to 23 things to uninstall in the right order (plus 2 notes if you have trouble).
To solve this problem, Dan Fernandez posts about a VS05 uninstall tool that worked wonderfully for me.
September 26, 2005
tools
MS Dogfooding Avalon
As MS releases new frameworks, folks always ask “Does MS use this?” Of course, MS has tons of existing apps that would be silly to rewrite, but when we build new stuff, we generally use the latest frameworks that make sense.
Towards that end, John Gosman continues his history of Expression Interactive Designer aka Sparkle, mentioning the percentage of managed code in (100%) and the number of P/Invoke calls (1 — HtmlHelp) to get what is probably the most amazing app I’ve seen in years, whether managed or not.
September 18, 2005
tools
Tracking exceptions thrown by your apps worldwide
This is an interesting, and free, service that you hook your app up to and when it throws an exception, it’ll log it w/ the service so that you can track it from afar.
These kinds of services are exactly what web services are wonderful for. Does anyone know of any other such services? I’m embarrassed to say that I don’t actually know, but does MS provide one in this space or other developer-oriented web services for other than development?
September 10, 2005
tools
Remove the slow “Compress Old Files” option!
I love CleanMgr.exe’s ability to clean out my temp folder, my internet cache and my recycle bin in one swell foop, but that damn
“
August 12, 2005
tools
Very Cool Nullable Fix
.NET 2.0 has the idea of a “nullable” type built right in, e.g.
Nullable x = null; // legal
August 11, 2005
tools
What should I do w/ the metadata?
Imagine I’ve got some “metadata” that describes some functionality of my system, e.g. the command line parameters to a tool:
July 12, 2005
tools
Eric Sink: The Game is Afoot
I don’t know if Eric understands the ISV industry or not, but certainly seems to. Luckily, I’m on a real product team now, so I get to try to channel Eric into my work.
Eric’s latest writing is The Game is Afoot, in which he describes various games and then draws lessons from them for ISVs. It’s fabulous. He concludes by apologizing for the length and then teasing us with the analogies he left off. It wasn’t too long, Eric! I wanted more! (I also want your blog to have comments, but that’s another thing entirely…)
July 12, 2005
tools
Looking forward to the Portland Code Camp, 7/23-24
The session list for the Portland Code Camp, July 23-24, has just been posted. I’m especially looking forward to the following:
- .NET Windows Forms Tips & Tricks
- Forensic Development
- Implementing Creature AI
- Introduction to Inform
- Introduction to Python
- Introduction to Ruby
- Ruby on Rails
- MonoRail - ASP.NET on Rails
- Web Unit Testing with Ruby and Watir
July 5, 2005
tools
Register for COM Interop and VS05b2
I was helping a colleague work through a .NET COM interop issue. He’d found my article on the topic (“Hosting Windows Forms Controls in COM Control Containers”), but couldn’t get it to work. He’d set the Register for COM Interop setting and adding the Guid attribute to his .NET type, but nothing was registered at build-time.
The problem was that, unlike VS03, the wizard-generated AssemblyInfo.cs has the assembly-wide ComVisible attribute set to “false” which causes regasm (the command-line version of what VS is doing to register your .NET assembly with COM at build-time) to skip the registration of all of the .NET types in your assembly, defeating the purpose of the Register for COM Interop option pretty thoroughly.
June 27, 2005
tools
New Monad Build Available
You have to stand on one foot, wait for 48 hours and wave a dead chicken over your monitor, but assuming you have the foot and the dead chicken, it don’t cost nothin’ to
download the latest beta of Monad. Enjoy.
June 9, 2005
tools
Col. Jessup on the .NET Performance Team
This is fabulous! Let me give you a taste:
“We use words like L2, swaps, and working set. We use these words as the backbone of a life spent defending something. You use them as a punchline.”
June 6, 2005
tools
@this freaked me out
I saw code that looked like this today:
class Class1 {
static void Foo(object @this) {
Console.WriteLine(@this);
}
static void Main(string[] args) {
Foo(“hi”);
}
}
May 25, 2005
tools
C++ is dead, long live C++!
Congrats to the VC++ 2005 team for a write-up like this!
“The truth is that this new development in C++ seriously undermines the justification for C# as a language. C++ programmers yet to learn C# simply don’t need to now. What’s the point? They will find the full productivity of Visual Studio 2005 right there at their fingertips supporting the language they know and love. Why should they move to something that is slower and less feature rich?”
May 13, 2005
tools
“dumpbin” is now “link -dump”
Apparently in Whidbey, “dumpbin” (and some other tools that were merely wrappers around link) has been dumped. To get to it now, do “link -dump -dumpbin_options” e.g. “link -dump -exports” does what “dumpbin -exports” used to do. In fact, if you just do “link -dump” the usage you get is labeled as the dumpbin usage. : )
BTW, it looks like “lib,” while still there, is also “link -lib” and “editbin” becomes “link -edit.”
May 13, 2005
tools
When did the cmd shell start doing this?!?
Imagine the following C program:
// cmdio.c
#include <stdio.h>
void main() {
char s[256] = "";
printf(">");
scanf("%s", s);
printf("%s\n", s);
}
April 26, 2005
tools
I Like VC# Express
I was paving a box this weekend with the March Avalon/Indigo CTP and I needed the matching Feb CTP of VS05, so I installed the Feb CTP of VC# Express. I have to say, I’m impressed. Avalon integrated w/ no trouble. I have all the Intellisense, key bindings, options, code formatting and generics support that I went looking for (although I did have to find the Show all settings option in the Options dialog).
Only two things bug me about Express. The first is minor: I’m used to starting VS with Start->Run: devenv [Enter] and now I have to start VC# Express with Start->Run: vcexpress [Enter]. Given that I can install a bunch of Express products, it makes sense to me to need to learn a new EXE name for each of them (especially if I slip Asynch COM out of long-term storage… [dumping]… there, plenty of room!).
April 4, 2005
tools
RegexDesigner Updated
RegexDesigner has been updated to v1.1 with support for replacement patterns, national and special symbol support, Ctrl+Tab hotkey support, updated highlighting support for color blind users, Ctrl+A support and the use of a bullet instead of @ for matched whitespace. Thanks to Victor Serbin for putting this update together from source contributed to the
GDN
March 22, 2005
tools
Duncan Shows How To Host MSDN Content On Your Site
Are you unhappy with how MSDN arranges content on our site? Would you like to host the content you’ve written on your own site in your own chrome? You can’t do it with everything, but for the content with which it works, Duncan Mackenzie has posted code that pulls content out of MSDN’s current content management system* and hosts in in your own chrome. For those of you that don’t like how MSDN arranges its content, you now have the technical means to arrange it to suit your own tastes.
* DISCLAIMER: Microsoft’s copyright still applies. The internal details of our content management system are going to change without notice. Use at your risk. No warranties extended. Void where prohibited. Some assembly required. blah, blah, blah…
March 13, 2005
tools
When the student is ready, the teacher will come
I’ve been digging into .NET application extensibility lately, discovering the various pieces discussed here. And then, just when I’d despaired of finding a resource that covered the issues in depth, a copy of “Customizing the Microsoft .NET Framework Common Language Runtime,” by Steven Pratscher, showed up at my door (that happens sometimes, but I’ve never quite figured out how…).
Steven’s a PM on the CLR team and his book has wonderful chapter titles like:
February 8, 2005
tools
XSLTO: Mapping XSLT to Objects
Here. When Tim Ewald was still a Microsoft employee, he and the next-gen
MSDN
January 30, 2005
tools
Awaiting and Dreading Subtext
If you follow the link to the subtext demo that Preston Bannister mentions, you’ll see my idea of hell, i.e. manipulating code primarily with a mouse. Have you ever seen those guys — you know who I mean — those guys that want to copy a chunk of code and reach for the mouse, almost select the text, almost select the text again, finally select the text they want, go to the Edit menu, choose Copy, click on the place near where they want the code to be, click again, finally click in the right place, go to the Edit menu and choose Paste and by that time, you’ve died of old age? It’s all I can do not to tackle these people so I can use the combinations of Ctrl, Shift, Alt and the arrows to select the text and move the cursor to the spot where it belongs, using Ctrl+C and Ctrl+V, never touching the mouse, like BillG intended.
So, watching the subtext demo, which was nearly all copy and paste using the mouse made me want to tackle the guy doing the demo, especially since I couldn’t run it at a higher speed (my very favorite WMP feature).
January 5, 2005
tools
Thinstall sounds cool
Jim Hubbard gives Thinstall a ringing endorsement:
“This solution will take your executable (.Net, VB or C++) and all of its dependencies and wrap them all into a single executable. The neat thing is that it even includes the portions of the .Net framework needed to run your executable inside the executable it creates. So, there’s no need to distribute the whole .Net framework.”
November 18, 2004
tools
Rich Salz on WSDL 2.0
According to Rich Salz’s reading of the WSDL 2.0 spec (Rich makes a living selling hardware to make XML smoke, so I think he knows), the following is legal WSDL 2.0:
#include "wsdl.h"
extern void hello_world(const char* text);
November 13, 2004
tools
Tons of Fun with Windows Media Encoder
I’ve been wanting an easy way to capture screen demos and audio for a while and after stumbling across Jon Udell’s post on Movies of Software, I thought I’d give Windows Media Encoder a try. Here’s what I learned:
- I really like giving short little vignettes imagining an audience; I didn’t think I would
- The preparation for recording a screen demo is the same as a real demo, i.e. I want to make sure I know what I’m going to demo before I do it
- The preparation does not include lighting or another person to run a camera or a microphone, which means that I can do it on a whim at 5am on a Saturday morning
- My built-in mic at normal speaking volume works great
- Capturing a particular screen doesn’t work very well because I’m likely to move between windows without knowing that I will ahead of time. Instead, I should capture a region of the screen, ideally something not too large so that it fits well in a video window
- Medium quality may not be good enough. I did 13 minutes at medium quality, which resulted in a 3MB file and good audio, but the screen itself was nearly unreadable. Maybe the screen itself was too big?
- Stop other apps before capturing a screen, otherwise you’re bound to get slowdowns in the capture, particularly in the audio
- Talking in my kitchen at normal volume for 13 minutes will waken my wife (sorry, sweetie)
November 1, 2004
tools
MaxiVista: Changing My Mind About Tablets
When I first read about MaxiVista, the thing that really got me interested was that it gave me two things that I really want from my Tablet PC. The 1st is to be able to use a slate-only Tablet as a 2nd monitor for my laptop so that I can continue my addiction to keeping my whole life on a laptop, but still be cool like the other kids (I’ve so far avoided multi-monitor setups because I love my laptop too much and I was afraid of the conflicting addictions).
The 2nd thing I get is a result of the first, i.e. if I’m going to use the Tablet as an adjunct to my laptop, then I shouldn’t worry about a generation sometime in the future where Tablet convertibles can replace my laptop, but just get the best slate I can find and enjoy it as a remote viewer/editor of info via file sharing and terminal services.
October 17, 2004
tools
I’m With Jim: X1 Rocks
Like everyone else in the blogespher, I installed Google Desktop Search last week. And, after using it a few times, I’ve uninstalled it.
Jim’s right;
X1 kicks its butt.
October 14, 2004
tools
re: Business Object Design tools question
Today Ralph Loizzo asked me what tool I use to outline my objects, to which I replied:
The tool I use most often to design my systems is a text editor. I write my client code first against the objects I wish I had to obtain the first order of functionality I’m after, then implement those classes and refactor ’til I’ve reached a state of happiness between the clients and the object model.
October 2, 2004
tools
Mixed Feelings
For the last few months, I’ve been doing some really cool work with a group of folks whose only task is to build apps that exercise the WinFX technologies so that we can make sure stuff works the way we want it to and give feedback to the product teams when it doesn’t. Because we’re still in preview technology land, various features that we want to test are in various builds of each part of WinFX, so we’re constantly fooling around with new combinations of the bits, which we bring together in VPC HD images and that I then have to download. Since I’m downloading the 7+ GB images from my house over VNC and since the internal VNC connection software isn’t quite as robust as the VNC software we ship to the rest of the world, that means that I’m constantly being kicked off of my connection and reconnecting, sometimes 2 or 3 dozen times over the 2 days it takes me to download the image. I just finished downloading another build today.
Unfortunately, when setting the Administrator password, I managed to enter the wrong thing twice, which meant that I had no way to log into my new VPC image after 2 days of hard labor getting it to my house. So, instead of re-downloading it again, I googled for a utility to reset the Administrator password. The first link was a knowledge base article from MS that didn’t help me because I hadn’t yet logged in to make myself a password reset diskette (which, frankly, I never do anyway). The second link was a list of completely unsupported, possibly illegal, tools to reset the Administrator password. The first one on that list worked like a charm in several orders of magnitude less time than downloading a new VPC image.
September 23, 2004
tools
Very Much Enjoying .NET Rocks Lately
DNR goes up and down like every other media outlet (it’s not unlike this very web site in that way), but I’ve really been enjoying it muchly lately. Not only did I get to hear someone besides my normal brethren talk about CAS in a way that didn’t make my flinch (Don Kiely on developing with least privilege), but I also got to listen to Mark Miller talk (at break-neck speeds) about my Dad freaking out when the jelly got into the peanut butter at the same time he was enthusing about CodeRush and telling Rory that he didn’t need counseling to deal with his relationship problems, he needed penicillin. Fabulous.
September 21, 2004
tools
Giving a Mapped Drive .NET FullTrust
Lately, I’ve been running Virtual PC a lot to test various versions of WinFX on various platforms. To save me for locking any valuable code into a VPC HD, I use VPC shares, mapping Z to the D HD on my VPC host PC. That’s all well and good ’til I try to load a project from Z which, according to the OS, is a mapped network drive (in spite of the fact that it’s just the other partition on the very same PC), and Visual Studio complains that since I don’t have FullTrust on that drive, things may not work out the way I’d hoped (and for whoever decided to write the code and put up that message box, thank you!):
The project location is not trusted.
Running the application may result in security exceptions when it
attempts to perform actions which require full trust.
August 16, 2004
tools
Dealing with Programmer’s Block
A friend of mine IM’d me just a few moments ago and asked, “When you’re sitting in front of a code editor and you have no motivation, what do you do?”
I hereby dub this “programmer’s block” and since I’ve never had it (which I’m just now realizing is pretty weird), I wondering if you can offer my friend some advice. Thanks!
August 16, 2004
tools
Good Idea: Builders in Visual Studio Code View
I really love Mitch’s idea for a “Builder” in the Visual Studio Code View:

July 23, 2004
tools
Tim and His Angle Brackets
Tim Ewald, one of my closest friends and the guy I think deserves to be much more famous (the first chapter of his criminally under-selling Transactional COM+ is worth the price of a Hawaiian honeymoon and is just as fulfilling) is blogging.
In fact, he’s been blogging for a few weeks now, but he’s teased me before, so I didn’t want to point people his way if he was just going to break my heart again. Still, he seems to be on a roll. My most favorite post is XmlSerializer sans XSD, but his recent post on why he cares about the angle brackets on the wire pushed me over the edge.
July 21, 2004
tools
Tim Sneath On The What’s New in WinForms 2.0
Tim Sneath has
a nice, concise list of what’s new in Windows Forms 2.0. By far and away, ClickOnce deployment as an order of magnitude improvement over No-Touch Deployment is my favorite advance, but the new controls are cool (you can drop the standard buttons on the menu and toolstrips from the context menu), the BackgroundWorker is very cool (and eliminates about 2/3rds of the code in my threading chapter) and the designer layout assistance for helping with the layout and spacing of controls sounds like it’ll reduce a bunch of monkey work in the designer.
July 11, 2004
tools
Looking for Genghis Co-Khan
Right now, I’m holding
the shared source Genghis library back. I’m acting as sole arbiter of what makes it into Genghis and how and I’m not able to keep up with the flow. I’m looking for someone who’s interested in sharing this duty with me. Only proven contributors to the Windows development community need apply.
June 29, 2004
tools
Lots of Fun Visual Studio 2005 Beta 1 Stuff
MSDN shipped their part of Visual Studio 2005 Beta 1 at about 12:30am on Tuesday morning. Sara has a nice summary of the new MSDN Product Feedback Center that I think folks will find particularly satisfying:
“At the MSDN Product Feedback Center, you can submit bugs and suggestions. You can search through other people’s submitted bugs and suggestions. You can vote for your favorites. You can share workarounds. And, you can see feedback and details directly from folks on our product teams. Oh, and you can get notified when the status of an issue you’re interested in changes.”
June 20, 2004
tools
More On The VC# 2005 Key Bindings
Joe Nalewabau has one very important addition point to make about the new key bindings in Visual C# 2005: while the
VC# team will be providing a bunch of key bindings based on how things are arranged, e.g. Ctrl+W, S to show the Solution Explorer from the Window menu,
90+% of the old key bindings will continue to work
June 18, 2004
tools
The VS Keybinding Randomizer Is An Actual Person
Joe Nalewabau, a Lead PM on the Visual C# team, admitted today that he was responsible for the VC# keyboard randomization process for Visual Studio 2005 and describes the thought process that he went through to get there. I admit that Joe makes a good case for changing the key bindings, but I hate the idea of learning a whole new set (especially since, because I’m a keyboard boy, I’ll be crippled until I learn the new bindings). If Joe would swear on a stack of user manuals that the key bindings would never, ever change again, I’d be happier about it. (Rocky: “Again? That trick never works!” Bullwinkle: “This time fur shure!“)
Of course, what I think doesn’t matter (it stopped mattering when I signed that damned employment contract : ). It’s what you think that matters and you should feel free to let him know what you think about the new VC# 2005 key bindings.
May 30, 2004
tools
Replicator v0.1
I’m not sure what I would make if I had
one of these, but that doesn’t stop me from wanting one.
May 28, 2004
tools
On Threat Modeling
Lately, when the subject about how to actually secure a .NET app or component comes up, a magic phrase is uttered: “threat modeling.” Apparently, this is the thing that tells you how folks could use your well-intentioned code to do bad things. And on a mailing list with a fairly select membership (although not too select — I’m on it : ), the Swiderski, Snyder book Threat Modeling was recommended. And the free threat modeling tool that goes along with the book is hosted right on microsoft.com, which I take as a sign of quality. Model those threats towards a happier, healthier you!
[via Pierre Nallet]
May 25, 2004
tools
.NET Framework 2.0: BindingList
After spending a bunch of time with various partial IBindingList implementations, I just stumbled onto a brand new one in the Visual Studio 2005 Community Technology Preview: BindingList. It’s not done yet, e.g. sorting doesn’t work, but the model is certainly what you’d want, e.g. you create a BindingList, bind it to something smart, like a DataGrid or a DataGridView, and you’re able to edit instances of your custom type or add or remove instances, as well as search or sort instances, just like you’d need a custom implementation of IBindingList for today. Very nice.
May 24, 2004
tools
A Gathering of VS05 Team System Info
I find that in the process of learning about something, I often dig through a lot of places before I come up with what I’m looking for.
In the case of Visual Studio 2005 Team System (aka “Burton”), I wanted to know a lot more about the features that MS was building into VS for teams, including much more flexible source code control integration, web site functionality and stress testing, static code analysis like FxCop and perf. analysis built right into the build system and stats recording as part of the normal workflow for project management reporting.
May 7, 2004
tools
More Free WIndows Forms Controls:vbAccelerator
After posting a few sets of free Windows Forms controls, now I’m a magnet for the “but you forgot my favorite free controls site” emails, which I feel compelled to share with you. This time, it’s the vbAccelerator site, which is a mix of VB6 and .NET controls, code and tools. The .NET stuff is here. Enjoy.
April 19, 2004
tools
PInvoke.NET: Interop the Wiki Way
Here. Whoever put this site together had the right idea. I was hoping to work my magic to get
MS
April 6, 2004
tools
Son of Strike Debugging Inside Visual Studio .NET
Here.
In his June ’03 Bugslayer column, John Robbins made a sideways comment when discussing Son of Strike (SOS), a debugging extension from Microsoft for doing all kinds of low-level, mixed native and managed code debugging.
April 5, 2004
tools
WiX: Open Source XML-Based MSI Creation
Rob Mensching, an MS SDE, has finally released his WiX tools for building MSI files from XML. I say “finally,” because I’ve been using his tools for months to build the MSI files that MSDN puts up on microsoft.com/download. All of our downloads have to be wrapped in an MSI so that you have to agree to the EULA before you get the files. Plus, we need to bundle some descriptive text and author name in there, along with the code that pops open the install folder after the files have been installed. Instead of using VS.NET to create the MSI files for each set of folks, I built a tool and the best programatic interface to creating MSI files that I could find was easily Rob’s. Check it out.
March 30, 2004
tools
Visual Studio 6 SP6
I used to live and die with Visual Studio Service Packs and the DevDiv Sustaining Engineering team has just released
another SP for you Visual C++ 6 and Visual Basic 6 programmers. Millions of folks still use these products and it warms my heart that we’re 2.5 generations past this, but still releasing SPs. I don’t anticipate any more of them, though, so I recommend using this
SP
March 24, 2004
tools
Very Cool Web Service Testing Tool from Mindreef
I knew Mindreef had cool testing tools, but I just found one today on their web site that I ended up using all afternoon. You feed it a WSDL URL and it generates a form, allowing you to see the SOAP request and response packet in several formats include raw XML, to pseudo-code, pretty-printed XML and tree. It’s much more flexible then the built in one that ASP.NET provides and the price is right.
March 9, 2004
tools
Genghis v0.5 Released
After much delay (man, this Microsoft gig keeps a person busy), I’m happy to announce Genghis v0.5:
New HtmlLinkLabel class from Jeff Key that knows how to launch IE and EXEs directly w/o requiring you to handle the event
March 5, 2004
tools
Reimplementing Mike’s cmdline Utility using WMI
Here.
In early 2000, Mike Woodring moved Heaven and Earth to write a tool that would inject a DLL into a process’s memory for purposes of finding the command line with which the process was launched. While hanging around Don and Tim this week, Don was all hot on WMI, so we fired it up in .NET and rebuilt Mike’s tool like so:
February 23, 2004
tools
Genghis v0.5 On the Way, But Baby First
Here.
For those folks asking, another drop of Genghis is on the way, which includes an HTML link class that handles links for you, a user-sizeable panel, a gradient progress bar, a completely revamped FileDocument and a host of fixes and enhancements, including stacking support and terminal server support for toast windows. However, before that can come, Mike Marshall, the Genghis build-master, stopped to email me about the impending arriving of his first child. Now *that’s* dedication! I doubt if I’d stop to email any of the folks in charge of the shared source projects I’m involved with on the way to the hospital… : )
February 17, 2004
tools
The Facts About The Windows Source Code Posting
MS’s official word on what happened with the illegal source code posting and what we’re doing about it.
January 9, 2004
tools
My First .NET Tool Gets An Update
Here.
Given Aaron’s wonderful set of .NET XML tools, I don’t know why Tony Malandain found my little xmlValid tool for checking XML well-formedness and schema validness, but he did and then added the ability to take XML input from stdin (he apparently uses it to check compressed SVG files).
January 2, 2004
tools
ImCli Classes Updated for MSNP8
Here.
Plenty of folks have asked for updates to my IM client classes to support the new MSNP8 protocol, but only Robert M. Wagner Jr. made the changes and sent them to me. Thanks, Robert!
November 26, 2003
tools
WksSync Updated
Here. Ethan Brown has done a massive update to the wkssync tool, the command line tool for accessing source from GotDotNet workspaces. Thanks, Ethan!
November 25, 2003
tools
ADO.NET CSV File Tester
Here. I wrote CsvFileTester to explore the ADO.NET/ODBC/JET support for
CSV
November 25, 2003
tools
ADO.NET
CsvFileTester
CsvFileTester is a tool inspired by
Shawn Wildermuth’s ExcelFileTester, which he wrote ’cuz I kept asking him
how to do queries on .xls files. However, because the Excel query language has
no where or order by clauses, I gave that up in favor of comma-separated text
files.
November 7, 2003
tools
The Visual C++ Team Wants You!
Here. The VC++ team has a bunch of cool work they need doing and they’re looking for candidates. Don’t be shy. Apply today!
And if http://microsoft.com/jobs is too slow for you, feel free to send your resume and a bottle of Scotch (
OK
November 3, 2003
tools
XmlSerializer Workshop
Here. Simon Steele has posted a most excellent tool for digging through an assembly of .
NET
October 25, 2003
tools
Another .NET Regular Expression Tool
Here. Regular Expressions seems a popular thing to build a tool around. The Regular looks cool. They all look cool. Why weren’t any of these tools around when I started building RegexD?!?
September 6, 2003
tools
Are You Missing Out on Code Generation?
Here. Oh, sure, I built an entire codegen product a number of years ago. Would it have hurt folks to get excited about it then?!? : )
August 6, 2003
tools
.NET FormatDesigner
FormatDesigner is an application to experiment with the format strings used to
format data in String.Format and various type’s ToString functions.

July 7, 2003
tools
Regular Expression Workbench 2.0
Here. While I don’t think it’s as pretty, Eric Gunnerson’s RegexW has some cool features I wish RegexD [1] had, like regex->English translation and menus for regex parts. Anyone want to merge the best of both into some uber regex tool?
[1] http://sellsbrothers.com/tools/#regexd
July 7, 2003
tools
Genghis Moved to GotDotNet Workspaces 1.0
Here. Now that GotDotNet Workspaces 1.0 has shipped (congrats!) Mike has moved Genghis there. Feel free to apply for membership if you’ve already contributed source to Genghis or if there’s something you’d like to add.
July 1, 2003
tools
Spout: Learning to Learn
Here. The one where I talk about the most important thing I ever learned.
June 18, 2003
tools
XmlSerializerPreCompiler
Tired of the XmlSerializer’s generic “File or assembly name
ctewkx4b.dll, or one of its dependencies, was not found” exception?
The XmlSerializerPreCompiler tools
checks to see if a type can be serialized by the XmlSerializer class and if
it can’t, shows the compiler errors happening behind the scenes so that the
type can be modified. Enjoy.
This just in: Mathew Nolton has posted
a GUI front-end to my XmlSerializerPreCompiler that you might find
useful. Thanks, Matt!
June 3, 2003
tools
SQL Buddy
Here. I got turned onto this tool internally and I love it. It installs simply, works intuitively and allows for easy ad hoc queries and commands. Recommended.
May 7, 2003
tools
Genghis v0.4
Sorry for the long wait. There’s been two whole books written between the last release of Genghis and this one. Here’s the list of new features:
- Everything works under .NET 1.0 and 1.1 (except HandleCollector)
- MSN Messanger-style popup window
- UI Type Editor for use with ImageList index selection
- AppBar implementation
- Text file search
- Themed controls
- Single instance application support, including passing command line args from other instances
- Multiple top-level window support
- Many enhancements and fixes to the command line parser
- Splash screen class
- Improved WebCommandLineHelper class which now works with .NET 1.0 and 1.1, includes URL decoding and requires no additional permissions (although it does require a server-side HTTP handler, included as the ConfigFileHandler class that maps requests for foo.exe?bar=quux.config to the foo.exe.config file)
- WizardSheet updates
- Status Bar Extender for mapping status messages to Windows Forms controls
April 24, 2003
tools
NAnt 0.8.2 released
Here. From Matthew Mastracci: NAnt 0.8.2 was recently released. Note that this release has support for both the Microsoft.NET framework v1.1 and Mono.
See the download link above or the NAnt homepage:
http://nant.sourceforge.net/
April 17, 2003
tools
Hello IDispatch Lovers
I’m probably jumping into this topic a bit late but it doesn’t seem to end. I
admit I haven’t read all article in this thread but I think I have an
implementation solution for multiple dual interfaces on one class. And I would
like opinions on it from others as well, and as to whether or not it displays
proper COM implementation.
The implementation is very much like one that has been posted earlier, which
I’ve seen different variations of many times before. However, I feel the one I
am presenting allows all dual interfaces to be on one object and accessible via
scripting without explicitly asking for a piece. No new interface definitions
will be necessary with this technique. However, there may be one flaw. It will
work ideally when none of the dispid’s of any of the dual interfaces collide,
and when none of the named functions collide.
April 17, 2003
tools
Exposing Multiple Interfaces to Scripting Clients
This page represents an attempt to capture the collective consciousness of the
COM community. Of course, thoughtful feedback is welcome and encouraged (who
the hell am I to voice the collective opinions of the entire COM community?).
Once this is all sorted out, I anticipate never implementing IDispatch again
(“Get COM+ now, I’ll show you how!“).
This page attempts to answer the question:
January 22, 2003
tools
NUnitASP
Here. From Colin: NUnitAsp is a tool for automatically testing ASP.NET web pages. It’s an extension to NUnit, a tool for test-driven development in .
NET
January 10, 2003
tools
.NET ResourceExplorer
In writing the resources chapter of my WinForms book, I
found that there was no single utility for displaying the resource contents of
assemblies, .resx files and .resource files (even embedded .resources files)
in a way that made sense to me. So, I built
one and called it ResourceExplorer.

December 15, 2002
tools
New Genghis Release Coming
Here. There has been all kinds of activity on Genghis since the v0.3 release. I’ve been gathering these bits together to make a coherent v0.4 release in the new year (right after I finish my darn book!).
Those of you with final bits and pieces that need to get in before that release, please get them to me
ASAP
November 7, 2002
tools
Regular Expressions in .NET
Here. Michael Weinhardt and Chris Sells plumb the depths of .
NET
October 3, 2002
tools
NUnit 2.0 Released
Here. From Bernard Vander Beken: From the readme:
“This is the second major release of the xUnit based unit testing tool for Microsoft .
NET
September 20, 2002
tools
NUnit 2.0 RC3 available
Here. From Bernard Vander Beken: From the release notes of this unit testing framework:
“This barring any unforeseen new critical bugs will be the last V2.0 release candidate. We will not
be adding any additional features until V2.0 is released which we expect now to be sometime around 26 September, 2002.”
September 10, 2002
tools
TAPI Explorer
I built the TAPI Explorer (tExplorer) to allow me to
understand the various capabilities of the telephony devices installed on my
system when I was developing TAPI applications and writing my TAPI book. It
grew into a utility for showing all line, address and phone capabilities as
well as other TAPI settings, e.g. country codes, telephony locations,
service providers, etc. If you’re running into TAPI errors that you don’t
understand, TAPI Explorer will help you work through them.
August 29, 2002
tools
VC++ Jacket for the Best Managed C++ Entry
Here. Things are still heating up in the prize category. Not only has O’Reilly just donated a year subscription of Safari, along with a bunch of .
NET
August 18, 2002
tools
Genghis v0.3 Release
What’s new in Genghis v0.3:
- Screen shots for everything.
- Source available via CVS repository.
- MRU support, including both in-menu and sub-menu support.
- A much more robust set of validation components modeled along the lines of the ASP.NET validation components, including required, regex, range and comparison validators.
- FileDocument component for document/dirty bit handling.
- Wizard support, including changing page groups on the fly!
- Custom state treeview so that you can set and show all three checkbox states.
- A class to expose the WinForms HandleCollector so that you can put your own custom resources into it.
- A Screen Saver class.
- A bunch of file utility classes, including retrieving mapped drives, retrieving shares and path resolution.
- A cursor changer class that works with the using block.
- A WebCommandLineHelper class to parse command line arguments from the URL used to launch href-exes.
- Update to the FileNameDialog to include newish flags.
August 16, 2002
tools
NUnit 2.0 RC1 available
Here. From Bernard Vander Beken: Highlights of the updated unit testing framework for .NET:
- Attribute based mechanism for identifying test fixtures and test methods.
- Automatic creation of test suites.
- Improved
GUI
August 9, 2002
tools
VBTV
Here. From Jesse Ezell: If the .
NET
June 10, 2002
tools
Genghis — 0.2 Release
Thanks to all of the *very* active contributors, Genghis has doubled in size! This update includes:
- an automated nant build
- a framework for nunit tests
- an almost complete .NET implementation of SimplePad
- an imagelist combo box
- a preferences and window position serializer
- an MRU sample
- a custom state treeview class for doing tri-state checkboxes
- an update to ListViewSorter to make it declarative
- an expanded trace class for common tracing operations
- various other bug fixes
June 9, 2002
tools
ADOGuy’s Typed DataSet Generator
“The Typed DataSet that Microsoft generates from Visual Studio.NET (or from the XSD.exe tool), does not support derivation directly. In order to allow us to derive from Typed DataSets, Chris Sells and I created this tool that fixes the couple of issues with inheriting from Typed DataSets.”
June 8, 2002
tools
Brent Rector: The Truth about Code Obfuscators
“An obfuscator only delays the inevitable. With unlimited resources (time and money) and physical access to code, all code can be reverse engineered. This was true for native x86 binaries and it’s true for .NET Framework applications. What an obfuscator does is increase the cost of the effort required to reverse engineer obfuscated code. Hopefully, it increases the cost enough to make reverse engineering your code unpractical.”
June 6, 2002
tools
Visual Build Pro
“It’s easy to put Visual Build Pro to work doing all that manual labor for you so you can focus on more important things. Visual Build Pro is a powerful but affordable build management solution that will automate the build process without a huge commitment of time, and it works with the tools you’re using today.”
June 4, 2002
tools
Updated XsdClassesGen
Eric Eric Friedman has submitted code to support namespaces and uninstall. The former fills the biggest hole in XsdClassesGen (thanks Eric), but why would anyone need the latter?!? : )
May 13, 2002
tools
Modern C++ Design
From Razvan Caciula: I like Chris Sells’s books, but also i like romanians too :> I’m preparing for a technical interview and i founded
this book very useful.
May 10, 2002
tools
Announcing Genghis
Genghis is a set of extensions built on top of .
NET
May 10, 2002
tools
SafeFormatter for .NET
Are you building and deploying .NET applications in a secure
environment, e.g. over the intranet or the internet? If so, they you’ve
probably mourned the loss of the binary and SOAP formatters that can
automatically serialize a graph of objects that are marked as [Serializable]
and that may also implement ISerializable and IDeserializationCallback. Both
of these formatters are dependent on reflection, which will not be available
in a more restrictive security environment. Likewise, even
ISerialization.GetObjectData is verboten if you wanted to do this kind of
thing yourself. As far as that goes, [Serializable] and ISerialization
should be forbidden in a secure environment, as it allows a client to
get and set the private variables of an object, potentially causing harm.
Still, security is the enemy of usability, to paraphrase
Keith Brown. So, in the spirit of a balancing the design need for objects
that can serialize themselves with the goal of complete disclosure in a
secure world, I’ve built my own “safe” formatter. It only uses facilities of
the runtime that work in the most secure environment of the default settings
for the internet zone. So that objects can guard themselves against
malicious data, I define a new interface called ISafelySerializeable that
they need to implement to support this serialization facility. The protocol
is exactly the same as ISerializable, so if that interface is already being
implemented, the implementation of GetObjectData can be shared between both
interfaces.
April 12, 2002
tools
Giving VS.NET That XP Look
USE THIS FILE WITH CARE. It causes problems with image
lists for .NET EXEs that don’t also use the same manifest file.
Just drop this
devenv.exe.manifest file next to devenv.exe in your VS.NET install
directory and the next time you start VS.NET under XP, it’ll look mostly the
same! (well, maybe a little different : )
April 6, 2002
tools
RegexDesigner.NET
RegexDesigner.NET is a powerful visual tool for
helping you construct and test .NET Regular Expressions. When you are
happy with your regular expression, RegexDesigner.NET lets you integrate it
into your application through native C# or VB.NET code generation and
compiled assemblies (usable from any .NET language).

March 8, 2002
tools
.NET IM Client Classes
Inspired by my need to know who was calling without hauling
my butt off the couch to look at the caller ID on the phone across the room
(my father always said that “laziness is the mother of invention”),
I built a couple of C# classes for managing an IM
connection and an IM session. The test client is a console application
that just sends messages and
dumps whatever it gets from the IM server to the console, but I think it
would serve as the code is the beginnings of a real IM client.
It does the MD5 stuff properly and handles being redirected to another IM
server, so the hard part of the protocol is already implemented. The sample
itself is a handy little program that logs in as an IM user, sends a message
to another IM user and logs back off again. Perfect for annoying your office
mates. Enjoy.
BTW, Harry Pierson
has made a number of updates to this core code to support his
full-blown
.NET IM client application. Check it out!
February 16, 2002
tools
Welcome to Genghis!
Welcome
to Genghis
Genghis is a set of extensions built on top of .NET and integrated with WinForms
to provide application-level services in the same flavor as the Microsoft
Foundation Classes. Genghis gets its name as the functional heir to
Attila, a similar set of functionality built on top of ATL.
January 6, 2002
tools
VS.NET Fun Facts
If you haven’t seen it yet, check out the
VS.NET Fun Facts piece that started
as praise and bitching about VS.NET, but turned into something pretty useful
if you’d like to get the most out of VS.NET.
September 13, 2001
tools
CorPub
Oct 10, 2001
I’ve updated CorPub to show *all* managed AppDomains by initializing the COR
debugging sub-system prior to enumerating them. Thanks to
Atif Aziz for the tip.
August 8, 2001
tools
.NET XML Checker and Validator
Aug 8, 2001
xmlValid is simple command line utility that will
check an xml file for well-formedness and, optionally, will validate it against
a supplied XML schema file (xsd). I built it to check that my site’s HTML files
were well-formed (and therefore XHTML-compliance), but it’s got all kinds of
other uses, including checking .NET .config files. Source is included. Enjoy.
August 7, 2001
tools
Setting the Completion Character
Aug 7, 2001
Whenever I set up a new machine (which happens a lot as WinXP and .NET go
through their beta & RC cycles), I always need to manually set up the
completion character (to TAB, of course) in the Registry.
Shawn VanNess
posted a .rgs file that would set this up without the lengthy search
through the Registry. Inspired by Shawn, here’s my own
completionChar.reg that doesn’t require a program to parse .rgs files
(which doesn’t come with Windows).
August 6, 2001
tools
NullScript Used to Reverse Engineer Gen
Wow. I’m impressed as all get out. Hugh Brown
has reverse-engineered Gen as one of the tests of his
NullScript implementation. I wish I would have had this when I started
Gen a couple of years ago. It would’ve saved me figuring out how ASP
did it.
My thinking along these lines years ago led me to go the opposite way, i.e. I
built a front-end ASP parser that generated script for VBS. I called it
TextBox (which, as a Win32 programmer, I should’ve realized was a
terrible name…).
August 3, 2001
tools
Command Line Parsing
Aug 3, 2001
I got tired of not having getopt under Win32 and the best version to port
doesn’t handle slashes (as per the Windows standard) or @files for arguments
and it requires you to give away the source for every app that uses it, so,
inspired by my friend Josh Gray, I built my
own. It supports typed flags and params, @file support and building
full usages on the fly.
August 2, 2001
tools
Expando Objects
Aug 2, 2001
I’ve seen lots of interest lately in expando objects, e.g. objects that can add
methods and properties on the fly. Joe Graf wrote
a piece on IDispatchEx in MIND that was pretty interesting.
My own implementation of IDispatchEx is available here. It supports
expando objects that have no static properties or methods as well as those that
do. Check out the DispExTest.js for a demonstration, dispeximpl.h,
dynamemlist.h and dynamemlist.cpp for the implementation and MyExpando.h for
the usage.
July 31, 2001
tools
VARIANT_BOOL Wrapper
July 31, 2001
CComBool is a class to prevent the misuse of the VARIANT_BOOL type.
VARIANT_BOOL is a problem because its legal values are -1 and 0 instead of 1
and 0, making converting back and forth between bool, BOOL and VARIANT_BOOL
problematic. CComBool supports the constructors and operators needed to convert
between the three C++ Windows Boolean types. It also supports operator& and
CopyTo for common COM client and server usage. CComBool is
available here.
July 30, 2001
tools
ATL CRT Numbers
July 30, 2001
The following table lists the various prices you pay for using the CRT and the
default Win98 support in VC6. The builds were done with VC6, SP3, ATL COM
in-proc server, no classes, no MFC, no merged p/s:
July 28, 2001
tools
Attila
Attila stands for “ATL for Applications.” Attila is a set of extensions built
on top of ATL to provide application-level services in the same flavor as MFC.
Towards that end, Attila uses a lot of the same notions as ATL, e.g. heavy use
of templates, static binding and reliance on the compiler and the linker doing
their job. Also, in the flavor of ATL, Attila is under-documented and
requires a lot of user investment to make use of it. However, once you do, we
think you’ll find the flexibility and efficiency worth it. If you don’t, you
haven’t lost much, ’cuz Attila is free. Enjoy.
July 27, 2001
tools
Simple Object II ATL ObjectWizard Extension
July 27, 2001
The Simple Object II ATL ObjectWizard Extension (whew — I’ve got to come up
with a shorter name…) provides the following features:
July 26, 2001
tools
CComVector: A SAFEARRAY Wrapper
July 26, 2001
I got tired of not having a smart type for SAFEARRAYs, so I built one. It’s
limited to one dimension (does anyone use multi-dimentional SAFEARRAYs?) and
provides one class for the SAFEARRAY and another for the data itself (the lock
is a resource, too), but the usage is pretty nifty. See comvector.h
for the what and the how.
July 23, 2001
tools
MDI Applications in ATL
July 23, 2001
At atlmdi.zip, please find Charles Petzold’s famous
raw Win32 MDI application, MDIDemo, ported to ATL. See atlmdi.h for a set of
base classes for building MDI applications in ATL and mdidemo.cpp for an
example of their use.
July 22, 2001
tools
Fixing the External Dispatch in ATL + IE5
July 22, 2001
Are you getting this: “Error: object doesn’t support this property or method”
when you try to call a method on your ATL HTML Control exposed external
dispatch (accessed via window.external in the HTML of the control)? Did it used
to work with IE4 and now it doesn’t with IE5? That’s because the ATL boys
played fast and loose with the identity laws of COM and, while it took the COM
police a while to catch up with them, catch up with them they did.
July 20, 2001
tools
CAspPtr
If you’ve ever had to write the code to pull the ASP intrinsic objects from the
MTS context, you might appreciate CAspPtr, which allows the following:
STDMETHODIMP CJon::DoIt() {
CAspPtr<IResponse> spResponse;
if( spResponse ) {
spResponse->Write(CComVariant(OLESTR("Baby got <b><i>Response</i></b>.")));
}
return S_OK;
}
July 19, 2001
tools
Smart IEnumVARIANT
Visual Basic and its variants (sic) use IEnumVARIANT to implement the For-Each
statement. Unfortunately, they only ask for 1 element at a time, leading to
terrible performance across apartments. I propose two solutions. One allows you
to wrap any collection in a CollectionBuffer object and set the buffering
yourself, e.g.
Dim collBuffer As Object
Set collBuffer = CreateObject("SmartEnumSvr.CollectionBuffer")
collBuffer.Collection = coll ' coll is an interface on any collection
collBuffer.BufferSize = 1024 ' How many items would you like buffered?
c = 0
For Each v In collBuffer ' Uses SmartEnumVARIANT to buffer items
c = c + 1
Next v
MsgBox "Counted " & c
July 19, 2001
tools
SmartEnumVARIANT
The Problem
VB/VBScript provides the implementation of For-Each using an implementation of
IEnumVARIANT exposed from a collection via the _NewEnum method. Unfortunately,
VB uses 1 for the argument to Next, making round-trip time terrible.
July 18, 2001
tools
Implementing Marshal-by-Value using ATL
July 18, 2001
Not too long ago, Jonathan Borden, jborden@MEDIAONE.NET,
posted a nifty class called IMarshalByValueImpl that
implemented IMarshal for objects interested in being marshaled by value . It
was built in the ATL style, i.e. it used fun template tricks, and depended on
the COM class also implementing either IPersistStream or IPersistStreamImpl.
And, in fact, ATL provides an implementation of IPersistStreamInit called
IPersistStreamInitImpl. However, IPersistStreamInitImpl has one fatal flaw: it
implements GetSizeMax by returning E_NOTIMPL. This breaks Jonathan’s
IMarshalByValueImpl, which depends on a sane implementation of GetSizeMax from
the class.
July 17, 2001
tools
Implementing dispatch-based interfaces in ATL
July 17, 2001
There are three kinds of ways to declare a dispatch-based interface in IDL, but
ATL (as of version 3.0), only supports the implementation of 1.5 of them (duals
and a raw dispinterfaces for handling events). The
ATL Dispatch Sampledemonstrations the use of three ATL-based classes,
one for implementing each type of dispatch-based interface. The header file
that defines these classes, dispimpl2.h, is provided
for use in your own projects.
July 16, 2001
tools
MeowMoniker
If you’re into COM Monikers, here’s one that I like.
July 15, 2001
tools
Basic Monikers
Wish there was a moniker that did CoCreateInstance just like the Class Moniker
calls CoGetClassObject? Wish you were able to compose the Class Moniker with a
host name? Then you’ll want the BasicMonikers
project, which bundles together the New moniker and the Host moniker.
Sample syntax follows:
dm.newmk.1:Excel.Application
dm.newmk.1:00024500-0000-0000-C000-000000000046:
dm.hostmk.1:frodo:!dm.newmk.1:00024500-0000-0000-C000-000000000046:
dm.hostmk.1:frodo:!clsid:00024500-0000-0000-C000-000000000046:
July 14, 2001
tools
regsvr.reg
July 14, 2001
regsvr.reg is a regedit script file that adds Register
COM Server and Unregister COM Server to the context menu for DLLs, OCXs and
EXEs under Win95+ and NT4+. In addition, it’s also been updated to add Register
TypeLib and Unregister TypeLib commands to .tlb, .odl, .dll, .ocx and .exe
files, using VC6′s new regtlib tool.
July 13, 2001
tools
ATL Composition
July 13, 2001
I’ve developed a set of macros to support implementing interfaces using nested
composition in ATL (the one common way of implementing interfaces they
neglected). The benefit of composition is that it is easy to implement multiple
interfaces with methods with the same name but that require different behavior,
e.g.
July 12, 2001
tools
Client-Side Enumeration Iterator
July 12, 2001
Have you ever been jealous of the VB programmer who could write this:
July 12, 2001
tools
STL Enumerator Iterator
Have you ever been jealous of the VB programmer who could write this:
sub EnumVariants(col as Collection)
dim v as variant for each v in col
' Do something with v
next v
end sub
July 11, 2001
tools
GitHelp
July 11, 2001
githelp.hdefines a set of wrappers for implementing
inter-thread marshaling using the GIT instead of streams. githelp.cpp
provides the non-inline implementation. For another spin on GIT usage, check
out Don Box’s GitLip.
June 30, 2001
tools
Codename TextBox
The Need for Code Generation
Have you ever wanted to generate code like the wizards do, i.e. start with a
template, mix in some symbols and boom, out comes the code? If you’re building
a custom AppWizard, you define code like so:
February 22, 2001
tools
TZ Data to XML Project
These are the outputs of my attempts to translate the
native tz data into XML for easier parsing for applications other than
implementations of the standard C routines related to time.
This is the first step in a project to merge time zone and map data by the Time
Zone Map Group, lead by Chuck Ellis.
June 26, 2000
tools
UrlRun
Mon, 26 Jun 2000
To deal w/ the number of wrapped URLs I get in my email box, I built
UrlRun. It checks the clipboard for an URL, no matter how broken,
strips spaces, newlines and greater thans out of it and runs IE. To handle an
URL as show above, select it, copy it to the clipboard and launch UrlRun.exe. I
keep it on my QuickStart toolbar.
November 1, 1999
tools
Welcome to Attila!
Attila GDI sample
(Jim Murphy likes Attila and GDI a little too much…)
June 27, 1997
tools
Welcome to MeowMoniker!
Overview
MeowMoniker and Feline are COM objects designed and built by Chris Sells, with
a great deal of input from Don Box and Tim Ewald. The MeowMoniker is a custom
moniker derived from the CComMoniker class implemented by Don Box, Tim Ewald
and Chris Sells.