Loose Ends

I’m picking up some loose ends this week.  I’ve had a couple of projects “in process”, read totally ignored, for a few months.  This week I’m getting back in the groove and making progress on both of them.

First, thanks to some insistent encouragement, read nagging, from Craig Boyd, I have the VFP Build Target code up on CodePlex.  The initial commit should be seen as a design document.  I didn’t write the initial implementation, Paul Witt did.  Paul is our configuration manager at DPRA and as such, he’s responsible for the builds. 

After a conversation and an exchange of links to documentation, Paul built a working implementation of the VFP Build target to be called from Team Build.  Paul discovered that the build would hang if there was a problem with the build, because VFP was showing a modal dialog.  Paul set up a timer to call a separate program to kill the, now hung, VFP process.

I took Paul’s code and removed the parts specific to our build process, and attempted to simplify the structure.  I also converted the build task class to C#.  Now that it’s posted, I’ll create some unit tests and documentation, so others can begin playing with it. 

My other loose end is my foray into the wilds of VSX.  I began an earnest investigation into the new Visual Studio extensibility features, but I got sidetracked by two exciting opportunities.  Neither opportunity played out, but I learned some things from the process.

Late last week, CoDe Magazine published VSX CoDe Focus magazine.  You should check it out.  In two weeks I’ll be doing a talk on VSX at DevLink, so I will be spending my free time making sure I’m up to speed on all the latest updates.

If you are interested in influencing the future of Visual Studio Extensibility, be sure to take the survey.

++Alan

Fox Forward Shows Some Love

Kevin posted the news today that Dave Bernard won best presenter at Fox Forward 2007.  I didn’t make it in time for his opening session on Instrumenting Your VFP Application, unfortunately, but I did see the first and last halves (in reverse order) of his Does Your Application Understand You? session.  Dave is doing some very exciting things with technology, and he has an easy going style when presenting.  Well done!

My Red, Green, Refactor: Test-Driven Development with FoxUnit session won the best use of technology award.  I was shocked, given the innovative approaches I saw during the conference.  It is quite an honor to be recognized by my peers in this way.  Thank you to everyone who voted, and everyone who attended for making this year’s Fox Forward the best yet.

On the first evening of the conference Stephen Bodnar asked me what the difference was between my Red, Green, Refactor session at Fox Forward and my Test-Driven Development pre-conference session at SouthWest Fox next month.  My flip answer to his question is:  about two hours.  🙂  The longer answer is that I will be able to help attendees in Phoenix overcome some of the more challenging hurdles to starting TDD. 

At Fox Forward, I mentioned an approach to test driving the UI, but I didn’t have time to demonstrate it.  I talked about refactoring legacy code to support unit tests, but again, no time for a demo.  In Alpharetta, I didn’t even touch on the subject of mock objects.  In short, there’s lots more to unpack in TDD than I can address in a standard 75 minute session. 

In fact, my repeat presentation was the last session of the day on Saturday, and the entire room kept their seats for ten extra minutes while I gave an extended demo of TDD with FoxUnit.  Kevin came in to collect the projector and everyone was still listening to me talk!  If you are signed up for the pre-con in Phoenix, or if you are considering it, I promise to give you your money’s worth.

Cheers,

++Alan

My 2007 Speaking "Tour"

In 2005, I began giving talks at our local user group.  In 2006, I spoke at the Atlanta Code Camp, FoxForward and DevLink.  This year, I joined Toastmasters in anticipation of even more speaking opportunities.  I have not been disappointed.

In January, I delivered a talk on Creating Windows Services at the NashDotNet users group.  I am currently preparing six talks for three different conferences on a wide variety of topics.  Fortunately, I picked the topics. 😉  Each of these presentations is on a topic of great interest to me.

In September, I’ll be at FoxForward near Atlanta, discussing TDD and an approach to application architecture I call OGLE. In October, I’ll first head to Nashville for DevLink, where I’ll be talking about VSX, and the Entity Framework.  The following week I’ll be in Phoenix at Southwest Fox, where I’ll do a longer pre-conference session on TDD, and a regular session on extending Visual FoxPro applications with Windows Forms elements.

In addition to these great events, I’ve committed to speak at the Memphis Day of .NET in November.  Details are still being finalized for that event.  I’ll also be giving a talk introducing the Entity Framework at ETNUG, most likely at the August meeting.  I’m hoping to add a couple more engagements before the end of the year.  I’ll let you know if anything works out.

If you have ever considered giving a technical presentation at a user group, or regional event, I encourage you to act on that thought.  Sharing ideas and interacting with other members of the community at these events has been extremely rewarding for me.  If you attend any of these events, please introduce yourself.

Cheers,

++Alan

When the Pattern Is Its Own Anti-Pattern

I’m totally digging Alex Miller‘s “Patterns I Hate” series.  So far he’s taken down Singleton and Template Method.  I love to study patterns and “best practices” in general, but I realize they can do harm when slavishly copied in inappropriate contexts.

While on the topic of Patterns, I must give a shout out to my co-worker Geff Ivey.  I mentioned my liking of Design Patterns Explained as an alternative to the GoF, and Geff convinced me to finally take a look at Head First Design Patterns.  I’m sure this book isn’t for everyone, but it was useful to me.  They finally helped me to wrap my head around Model View Controller.  They did it better than the Pragmatic Programmers, or Martin Fowler, although Fowler has more context on the evolution of the design.

Anyway, Alex appears to be a fan of dependency injection, which will soon be promoted by agile practitioners, as a cure for cancer, or at least cancerous code.  Alex has some excellent, thoughtful comments.  You should read them, highly recommended.

Enjoy,

++Alan

VSX – Slow Progress

I’m still working on the tutorials, but the holiday has offered a nice break from technology.  It’s good to be reminded that I have other roles in life, like “Dad” and “friend”.  Here’s the latest I have to report.

After ranting about the annoying CTC files, I learned about the new VSCT file format.  There is also a prerelease compiler for the new file format.  This looks like a major improvement to VSX, but it isn’t part of the tutorials, so I’ll plow ahead.

I looked over the VSSDK Assist site, and decided this was a tool I wanted to use.  Unfortunately, it failed to install for me.  I’ve reported the bug.  I’ll try it on an XP box and see if I have more luck.

++Alan

Fun With New Macbook video drivers on Vista

I run Vista on my Macbook.  It’s a great machine, but some of the drivers are flaky, because they were intended for XP.  Until Apple updates Boot Camp for Vista, you must use the XP drivers.

Today, I noticed a Windows Update for the chipset drivers.  I was feeling bold, so I let it install.  I hadn’t noticed a difference until a few moments ago while surfing a web page.  I wanted to return to the top of the page, so I pressed “fn+ctrl+left arrow” (which is the equivalent of ctrl+home), or so I thought. 

Actually, I pressed “ctrl+alt+left arrow” and my display rotated 90 degrees to the right!  I realized what I had done, and tried “ctrl+alt+right arrow” to remedy the situation.  That put the display 90 degrees rotated to the right.  Finally, I tried “ctrl+alt+up arrow” and the screen returned to normal.  Can you guess what I tried next? 🙂

++Alan

Congratulations to John Kellar

I just read on Rob Foster’s blog that my buddy John Kellar in Nashville was recently named a Microsoft MVP.  I can’t think of anyone more deserving.  John is the inspiration (and much of the blood, sweat and tears) behind DevLink.

Speaking of DevLink, I need to get my session descriptions to John before he takes me off the speaker list. 🙂  In honor of John’s incredible efforts for the .NET community in Tennessee, I would like to dub him “The Hardest Workin’ Man in Software.”  We’ll see if it sticks.

Cheers,

++Alan

VSX – First Impressions

You only get one chance to make a first impression.  I want to record mine regarding VSX before I get too familiar with it.

First, the documentation and comments in the project template are very thorough and helpful.  If the legacy systems I’ve supported in my career were half as well documented, I’d probably be less obsessed with TDD these days.

Speaking of TDD, there is a great set of sample projects in the SDK.  These are found in %VSSDK_InstallDir%\%Version_Number%\VisualStudioIntegration\Samples\IDE\CSharp\.  In that folder, there are some reference projects, each of which include a TDD\ folder with unit tests.  Sweet!

So, kudos to the VSX team for the good documentation and the unit tests, on to what was less than stellar.  There must be a way to abstract the CTC file.  It isn’t poorly formatted for a config file, but It could be so much better.  XML anyone?  I know XML takes it’s lumps when it is used for scripting, or as a data serialization format, but it is ideal for a config file.

At the very least, there needs to be a CTC Editor GUI tool to prevent me from fat fingering some comma separated value.  Here is an excerpt from the tutorial:

This line contains comma-delimited fields. The first field is the command that will receive the key binding. This field is in the form GUID:ID, where the first part is the GUID for the package, which is defined in Guids.h (also in the CtcComponents folder). The second half is the command identifier you typed in when you ran the wizard; this identifier is defined in CommandIds.h (which is also in the CtcComponents folder).

The second field is a GUID representing where this keyboard shortcut will be available. Different parts of Visual Studio can have different keyboard handlers. For example, when you are inside a text editor, the keyboard shortcut CTRL+I runs the Incremental Search command. But when the Solution Explorer is active, CTRL+I has no key binding. Thus, CTRL+I is only available to the text editor.

We want our keyboard shortcut to be available everywhere in Visual Studio; thus, it will be global. For global keyboard shortcuts, we use the GUID defined by guidVSStd97.

The third field is not presently used; for now, you use the same identifier from the second field, guidVSStd97.

The fourth and final field is the keyboard shortcut. This takes the format ‘character’:otherkeys, where the character for the shortcut goes in single-quotes. The otherkeys portion represents SHIFT, CTRL, and ALT with the letters S, C, and A, respectively. In this sample we’re using CS, which means CTRL and SHIFT. The letter used in this example is M; thus, this keyboard shortcut is CTRL+SHIFT+M.

Couldn’t I have an editor that allows me to select values from lists, rather than manually locating them in guids.h?  This is “hold your mouth right” programming.  How am I supposed to remember that the third field isn’t used, and why do we put in a value if it isn’t used?  How about creating an enum that I can access in code, rather than making me remember the constant guidVSStd97?  How long can I continue with these rhetorical questions?  Seriously, this aspect of VSX screams for better tooling.  Perhaps this is what VSSDK Assist does.

Finally, I have a real issue with the PLK.  It is a bottleneck to community development to request a new key for every dll.  Perhaps we could have one key for all community created packages, while commercial vendors are required to have unique keys.

If I sound negative, it’s only because I know I will become accustomed to these annoyances in my quest to master VSX, and I want to record them to remind myself what it was like to be a noob. 🙂

Cheers,

++Alan

Page 7 of 18« First...56789...Last »