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 : )

.NET CollectionGen April 10, 2002 Tools

.NET CollectionGen

[Note: As of 5/5/03, the functionality of CollectionGen has been sucked into Eric Smith’s CodeSmith. I asked Eric to take on these features because CodeSmith does all of what CollectionGen does and more. All new feature requests/bug reports should go his way.]

CollectionGen is a Custom Tool Add-In to VS.NET 2002 & 2003 to generate type-safe collections. As it turns out, I did almost none of the work. Jon Flanders figured out how to add a custom tool. Shawn Van Ness implemented the template for type-safe collections. I just put it together.

CollectionGen is an add-on to generate code for type-safe collections until we have templates in C# (likely) and VB (unlikely). The benefit of a type-safe collection, of course, is that you can use it without having to cast items to and from objects. Also, Shawn has been very careful to implement a collection class that is very efficient for both reference types and value types.

Once you’ve setup it up and defined your collections in a collection definition file in your project, you’ll have type-safe collection classes generated as part of your design-process, as shown here:

Figure 1: collections.xml collection definition file

 

Figure 2: collections.xml and generated collection.cs implementation file

 

Figure 3: CollectionGen custom tool add-in associated with the collections.xml file

 

Figure 4: Generate type-safe collection code

Enjoy!

Also, Atif Aziz used some of my custom tool code and built a generic VS.NET code generator shim that allows you to build a code generator that plugs into VS.NET by implementing a single method.

RegexDesigner.NET 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).

Features:

  • Full source
  • Interactive matching of .NET regular expressions.
  • Syntax highlighted match results, including zero-length matches and hidden characters.
  • Tooltips to display matched groups.
  • Regular expression matching, replacing and splitting.
  • Regular expression projects to save expressions, text to match and all regex options.
  • Full code generation for C# and VB.NET for all regex operations.
  • Compiled assembly generation.
  • Full online help.

April 4, 2002 Interviewing

Feeding the Engine

Adam Barr, 4/4/2002

On October 26, 1999, it was announced that Microsoft would be one of the four new components in the 30 stocks that make up the Dow Jones Industrial Average. This as a long-overdue recognition of the role of technology in the U.S. economy, and in particular of Microsoft’s central place in the industry.

But Microsoft was different from the other three newcomers. It has no computer chip manufacturing plants like Intel, no chain of retail stores like Home Depot, no network phone lines like SBC Communications. Indeed, it’s not “industrial” at all. Its product is software; its assembly line the brainpower of its employees. And while companies across America would naturally say their employees are vital to their success, for Microsoft in a large sense the employees are the company.

And that makes Microsoft very particular about who it hires.

[read the rest online]

March 13, 2002 Spout

This is Not a Blog

Web Logging (blogging) is the wave of the future. Blogging is re-making the internet. Blogging is journalism where everyone is the journalist. Blogging is all that and a bag of donuts.

OK. I guess so. I like blogs. I read a bunch of blogs. But most bloggers feel like they have to update their site at least once/day and most do it far more than that. Because of this, their blog entries end up looking like this:

[burb] Excuse me.

[google this!] [comment on this! (0 comments so far)]

It’s not that I don’t love to read a daily blow-by-blow of these peoples’ lives… oh, wait, no, it is that. Maybe a little filtering would be handy?

And while we’re on to the filtering thing, maybe we could drop the meta-comments about blogging itself? How cool could blogging really be if every other entry is about the power of blogging itself or, even worse, a link to somebody who linked to your cool description of the power of blogging?!?

Anyway, the spout is not a blog. I only update it when I think I’ve got something interesting to say (even if it’s something that only I’m likely to think is interesting), I don’t use any content management software (unless you count ASP.NET and FrontPage : ) and, except for this entry, I don’t spend any time talking about the wonder of blogging itself.

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 27, 2002 Spout

Please Say “Why”

As .NET demands new books and articles and the economy has given a lot of smart folk free time, the world is becoming inundated in .NET books, articles, talks and courses, many of which I am tapped to review. Some are wonderful. Some are awful. Most, however are *almost* good, the path to goodness well within the author’s reach but for the answer to one question: “why?”

Most of my feedback is riddled with questions that start with why: “Why was it built this way?” “Why are there three choices and how do I choose?” “Why should I care?” Please, when you write, remember this question and answer it thoroughly and well. The why is *so* much more important than the how. The online documentation for .NET is fabulous for describing the how, once you understand the motivation for this class, that method or the other namespace.

Prose that provides the how is transient, but prose that provides the why becomes classic because the why itself is surprisingly applicable between technologies. At the very least, if you answer the why, it will save me work if I’m to review your prose.

February 27, 2002 Spout

How Did You Get Your Start?

Standing in the rain, with his head hung low, couldn’t get a ticket, it was a sold out show, heard the roar of the crowd, he could picture the scene, put his ear to the wall and like a distant scream, he heard one guitar, just blew him away, saw stars in his eyes and the very next day, bought a beat-up six string in a second hand store, didn’t know how to play it, but he knew for sure that one guitar felt good in his hands, didn’t take long to understand, just one guitar, slunk way down low, was a one-way ticket, only one way to go, so he started rocking, ain’t never gonna stop, gotta keep on rockin’, someday gonna make it to the top and be a Jukebox Hero….

Jukebox Hero, Foreigner

It’s my understanding that once a musician reaches a certain level of notoriety, they are often asked how they got their start, so that the fan can obtain the level of success that the musician has obtained. Over the years, I’ve received quite a few of these kinds of emails, all of which flatter and surprise me, since I don’t feel like I’ve obtained the level of success that I’d like to. Still, I’m happy to offer, if not advice, than a list of what I did to obtain a level of recognition in our little circle.

It all started in early 1994, when I went to work for DevelopMentor. Don’s strategy, which remains in place to this day, was to give every instructor the opportunity for “stardom.” He had just started to obtain his own notoriety in the industry with his flamboyant personality, teaching and answering every other question on the DCOM mailing list. From there, he used his political acumen to make friends with conference organizers and book publishers, working to add the same level of rigor to Windows development as he was accustomed to applying in the pursuit of his PhD.

Since Don is a fellow that gains happiness in togetherness (or, put another way, “misery loves company”), he dragged the rest of us into his world of course authorship, 24x7 mailing lists, speaker anxiety, article deadlines and demanding book editors. To find my place in this world, I did the following, leveraging the success I had in the early work to make the later work happen:

  • Answered every other question on the DCOM and ATL mailing lists and continue to be very active on the .NET mailing list.
  • Wrote and gave numerous courses and conference talks.
  • Wrote a number of books and articles.
  • Put up a web site dedicated, initially, to the various bits and pieces of code I’d built and then expanded it as I had more to say (which turned out to be quite a lot, apparently : ).
  • Took as much consulting as I could to gain real-world experience, which I put into my other work.
  • Asked fans and happy clients to post their comments on Amazon or allow me to post to my own web site.
  • Crazy things just for fun, e.g. pose naked or misinterpret an email on purpose in order to post a humorous response.
  • Made friends with the owners and producers of the technology in which I was interested.
  • Threw a couple of conferences.
  • Started (and stopped) a department to build software developer tools.
  • Launched my own (budding) software development tools.
  • Launched a couple of source available projects with folks from the community.
  • Launched my own mailing list.

It seems like a lot, but practically everything I’ve done since 1994 has been published with my name on it, making me as much an agent for myself as an actual “musician” (I believe the phrase is “shameless self-promotion” : ). Based on this experience, here are the guiding principles that I try to follow:

  • Do the right thing. My father always used to say that anything worth doing was worth doing right and that the right thing was easy to spot — its was the hardest.
  • You can’t win if you don’t bet.
  • Be very thorough so that I can be sure of myself, leading to…
  • Take a stand. Have an opinion. Defend my opinion until I have been convinced of my mistake, then admit my mistake and take up the opposite stand with equal vigor.
  • Try a lot of things and don’t be afraid to make mistakes.
  • Be quick to give credit and admit mistakes, both in public and in private.
  • Recognize opportunity and follow up.
  • Get down to the real “why” of something, whether it’s computer technology or another kind of technical discipline.
  • Recognize the people, on the other hand, don’t always have a “why,” and learn to deal with it (I still work on that!).
  • Always strive for quality over the quick and dirty.
  • Concentrate on the things that I really want to do. I like to say “Only do those things that you can’t *not* do,” but in a down economy, I’ve learned to temper that with fiscal reality.
  • Finish what I start.
  • Make sure people are happy with my work and don’t stop ’til they are.
  • Have balance in my life. I have a wife and children that I love and spend as much time with as possible.
  • Horse trade. I am always willing to offer what I have, e.g. experience, time, contacts, etc, for what I want, e.g. work, money, content, etc.
  • Help other people find their own places. I’m constantly concerned with my friends and their happiness and will do whatever I can to help them get to do whatever it is that they “can’t not do.” This is a lesson I learned from Don. He helped me to become all that I could be and, in turn, I do my best to help others.

Actually, most of this I learned from Don, either directly or indirectly. I guess my only real piece of advise is to try to find someone you admire and to do what they do. Don was my main mentor, but I’ve had many over the years and they’re invaluable, even if all I had was a beat-up six string…


← Newer Entries Older Entries →