Wednesday, November 12, 2008

Project Valour-IT

Guys (and Gals)
What I think is one of the BEST charities out there is a group called "Project Valour-IT". They supply voice activated laptops to wounded service members (any service) - They are related to Soldiers Angels. Please give - and in the spirt of froendly competition, you can give with credit going to "your team"

Wednesday, October 01, 2008


Last week, the developer of APRS-SCS, John - KB2SCS announced that he was dropping all support for APRS-SCS, as it is written in VB6, which is no longer supported by "the boys from Redmond", aka Microsoft. At that time, John put the source code up on his Web Site.

I started to talk with John (he lives close by, and I really have to get together with him), and I think I'm going to take a crack at porting the program over to VB.NET.

This is NOT going to be a trivial port, and in fact, I've had a bear just getting the development environment up to the point I can compile the existing source (I'm there now - if you need hints, email me)

Anyway, John as agreed that I can "open source" the program.

I'm thinking that I'll put this up on Sourceforge (gasp - a windows app on Sourceforge!), and anyone who wants to contribute can.

The first issues that MUST be taken care of

1)The application uses what are called "old controls". These are .OCXs that Microsoft shipped with VB4 and 5, that were basically replaced by native controls in VB6, but were still available for download, but non supported. There is an "interesting" problem with the "Old controls" - they will not work in the VB6 development environment under Vista. (an aside, the VB6 IDE does not work in Vista64, but IS supported under Vista32)

2)The application uses a 3rd party OCX called "Socketwrench". There was a free version of this control, but there no longer is. Under .NET, we don't need it, the stream reader/writer classes can handle this for us

3)The VB6 and .NET graphics systems are totally different, and this will probably be the biggest part of the port

Anyway, I'd like to hear what you think, and many hands make light work. I'll need testers, reviewers, and even a few developers to help.

Anyone game?

Wednesday, June 25, 2008

Sorry Bloggings been light

Sorry blogging has been light. My Dad passed away just over a week ago, and was in bad shape before that. Obviously Dad took precidence over the blog, and just about anything else.

RIP Dad - Bah, another old WWII vet gone

Friday, May 23, 2008

Memorial Day

This Monday is Memorial Day.

It is the day we are supposed to honor those who gave all in the service of our country.

Fly your flag (half mast till noon, then full staff)
Thank a Vet
Remember those who gave their all.

Taps is played at 2 times during the day in the military. At night, signaling the end of the day, and during the day - signaling the end of someone's days here on earth.


Day is done, gone the sun,
From the hills, from the lake,
From the sky.
All is well, safely rest,
God is nigh.

Friday, May 09, 2008

Not The Post but... Visual Studio on a Mac?

I still have not gotten my deep thought post written, the brain just has not been into it (hey, the leg has been bothering me, so..)

Anyway, I've been thinking about getting a new Laptop (the current 'personal' laptop is a PIII based unit...)

I've heard some good things about Macbook pros laptops runing Vista under either Parallels or VMWare. Have any of you had any experience running Vista/Visual Studio 2008 (and in particular VB.NET) on a Macbook pro?


Monday, May 05, 2008

Bloggings Been Light

Hi Gang (I know I've got at least 3-4 readers out there, hey, that puts me well above average)

Blogging has been light, because I've been seriously thinking about a post. Last week, a bunch of different blogs posted about working alone and Agile/XP/TDD. I found it interesting, because this is for all intents the situation I'm in (department has 15 programmers, but mostly, we work alone - dumb, but)

Tuesday, April 22, 2008

AAArrrggghhh Legacy Code

Recently, I've been working on what is probably the "Ultimate" legacy/Brownfield application. It's a VERY important application for our business, or WAS, but the users are starting to find other ways to do their job. The problem is that the application in question is VERY hard to maintain, and management does not want to risk making any "non critical" changes. It's the classic "Big Ball of Mud" design.

Now no matter HOW many time's I've read Michael Feather's Working Effectively with Legacy Code, I can can never quite figure out how to make it work in this case. There are almost no seams to exploit. We have numerious routines that have a Maintenance Complexity in the 2000 to 3000 range. Of course these routines have no REASON to be that complex, it's just that previous programmers had a tendency to lump all sorts of things together that had nothing in common except that they needed to execute at the same time.

DRY? They never heard of it
The classes are just mirrors of database tables, and if a calculation needs to be done on a class or collection, the routine is usually inline in a form event, with "other" code mixed in.

I do find RefactorPro! to be a very useful tool, but even with automated tools, I have to take huge risks, just to get the code to the point I can start putting test harnesses on it.

Anyone else have to maintain a probram like this? The goal here is to get the application maintainable enough that I can start to add features to retain/regain our internal user base

Friday, April 18, 2008


About 15 years ago, Mary and I went on vacation to New Mexico, and stayed at a place called Starhill Inn. It was the BEST vacation we ever went on. We always said that when the kids got old enough, we would go back. Last week, we decided "This summer is the time"

I just called them. They are closing June 30th. No more Starhill Inn. I'm seriously bummed. I was REALLY looking forward to it.

Oh well. Now comes the question. Do we want it to be a "Northeastern New Mexico" Vacation, or an "Astronomy" vacation? Any readers have any good ideas?

Wednesday, April 16, 2008

Vista SP1 out..

I see that Vista SP1 is offically out. I guess all those folks who said "I'll wait until SP1 to try it" can now go out and well, Try it.

Want MY Honest opinion of Vista? By now, you've probably seen my posts. I LIKE Vista, BUT you have to do things "The Vista Way". If you try and do things the "XP Way" you will often end up in a "Boy is Vista Annoying" mode.

BTW It turns out Vista was designed to be annoying to try and force small software vendors to change their software to work with Vista. That backfired on Microsoft, and folks complain about Vista instead of the small programs. I think this is because > 50% of the small vendor programs become 'naggy', and people blame Vista instead of the program running under Vista - fair enough. I won't go into the reason WHY Microsoft wants these changes (see previous posts), but...

Tuesday, April 15, 2008

A Basic Class Design Lesson

Hi Gang,
I'm going through some OLD code today, probably written before classes, but looking at it, I realized it might be a good class design lesson for those not used to writing classes.

The code was in a form, and was actually used multiple times - which by itself says the code should be in a function - code has been changed slightly to obscure the exact nature for my blog, and is in Visual Basic 6.0, but the lesson works for any Object based language

If Left(instanceOfClass.pollclose, 2) > 12 Then
objGrid.Text = (CInt(Left(instanceOfClass.closingTime, 2)) - 12) & ":" & Right(instanceOfClass.closingTime, 2)
objGrid.Text = Left(instanceOfClass.closingTime, 2) & ":" & Right(instanceOfClass.closingTime, 2)
End If

OK (again, VB6 syntax) you could say:

Private Function formatClosingTime(byval theTime as string) as string
If Left(theTime, 2) > 12 Then
formatClosingTime = (CInt(Left(theTime, 2)) - 12) & ":" & Right(theTime, 2)
formatClosingTime = Left(theTime, 2) & ":" & Right(theTime, 2)
End If
end Function

and put that in the form

Which would make the call in the form

objGrid.Text = formatClosingTime(instanceOfClass.closingTime)

- it's ok, and a heck of a LOT better than it was (remember, it's used multiple places - the Don't Repeat Yourself (DRY) concept comes in here)

BUT - that's NOT where the function should really be. What we do is add a Property to the class

Public Function formattedClosingTime() as string
If Left(me.closingTime, 2) > 12 Then
formattedClosingTime = (CInt(Left(me.closingTime, 2)) - 12) & ":" & Right(me.closingTime, 2)
formattedClosingTime = Left(me.closingTime, 2) & ":" & Right(me.closingTime, 2)
End If
End Function

Now, this reduces the code in the form to:

objGrid.Text = instanceOfClass.formattedClosingTime

Isn't that better? The class is taking care of itself. Ahhhh

Thursday, April 10, 2008

Agile/XP programming and the OODA loop

Today, over at Inc.Com, Joel Spolsky of Pragmatic Programmer had an article called Fire and Motion, where he talks about getting your competition responding to YOU. It's a really good post that I think you should read.

When I was reading it, I was reminded of

John Boyd's OODA Loop, and all of a sudden, I realized WHY Agile/XP works. It's NOT the Agile Manifesto. It's NOT Pair Programming, or any of the OTHER tools. Agile/XP is a Tool to speed up your development teams OODA loop massively. One of the tenants of the OODA loop is that a GOOD decision, quickly implemented, beats a PERFECT solution delivered later.

Let's think of what XP/Agile has you do - Short iterations. Observe at what the client needs, and quickly fill that need. Not necessarily with a perfect answer, but something. Then ask the client "OK, Now decide how it needs to change", and then add that. Quick loops

Why I never thought of Agile/XP in terms of OODA before, I don't know, but it was a light bulb going off

Tuesday, April 08, 2008

How to Compress Virtual PC Hard Disks

As more and more of us use Virtual Hard Drives to test/develop different software, here is a great HowTo: Compress Virtual PC Virtual Hard Disks over at Kurt Shintaku's Blog - HT to Kirk Allen Evans - via Jason Haley

Tuesday, April 01, 2008

ALT.NET Leadership to suppliment the traditional .NET leadership

Jeremy Miller has (as usual) and interesting post on The need ALT.NET to supplement the traditional >NET leadership

I can't agree more. Right now, I think some of the best REAL WORLD developemnt stuff is coming out of ALT.NET. It seems Microsoft IS listening to a point (Unit tests in VS2008 etc) but...

Monday, March 17, 2008

Links - March 17th, 2008

First - Happy St Patty's day!
What is Alt.NET

This may be subscriber only - but Taming Software Dependencies

Friday, March 07, 2008

Developer Tools

I don't think I've ever made a list of MY favorite developer tools.

First some background. I've been at least a part time developer since 1982. Since the late 80s, I have been pretty much a full time developer. Yes, during part of that time I did operational stuff with the software I wrote, but I probably spent 75% of the time coding/designing, and 25% as my own end user. Anyway, here is a list of tools I use all the time:

Microsoft MSDN Team developer ($5469) or Visual Studio Professional with MSDN Premium ($2,499)

Textpad I see lots of other editors mentioned - but I like Textpad

Cygwin Being able to use most UNIX command line tools in windows is great. I regularly have to parse 30+ meg files here at the office, and the tools in Cygwin do it faster than any windows based product I've found

RefactorPro! A totally amazing tool for refatoring your code. I'd say most C# programmers feel the same way about ReSharper. At one time, ReSharper didn't do VB.NET, so...

Microsoft Virtual PC The ability to have clean build boxes, and test boxes, plus being able to test my software under various OSes. Great

Paint.NET Free Photo Editor

Thursday, March 06, 2008

Feeling Frustrated

Today, I'm working on a VB 6.0 application. After a couple of years of working almost exclusively in .NET, boy is it driving me nuts

The WORST part? I'm adding a form and some classes to an application that is about 90% done being ported to .NET

Vista, and what went wrong...

First, let me say I use and LIKE Vista. I designed the PC It's on to well exceed what turns out were political and not technical minimums. I also chose (wisely IMHO) to run the 32 bit version of Vista. Part of my reasoning for all of this is that by trade, I'm a software developer for the Microsoft platform. I figured I'd BETTER be able to make my software work correctly under XP and Vista. The changes you need to make, IF you have been following the Microsoft coding guidelines are NOT that hard. The biggest tips are probably in their book Writing Secure Code.

And that's both the GOOD and the BAD thing.

There is a LOT of software out there, mostly from smaller niche market vendors that "Doesn't Work" or "Doesn't Work Right" under Vista. Now, I won't address the problems of Drivers under Vista 64. Let's face it, you don't have a driver, you have problems, but let's look at some of the OTHER issues that I hear about.

Help Files: One of the big complaints that hit the day Vista shipped was "I'm getting a message my help file won't work". Back around 1995 (yes, 12-13 years ago) Microsoft said "Stop using the *.hlp file format, in the future we will drop support for it". At that same time, they came out with html based help files, and compiled html help files. Over a decade later, Microsoft actually dropped support, and people yelled. Now the question is, why didn't the developers update to the new format? I'll give you part of the answer. The old stuff continued to work, PLUS most of the best tools for making help files, well, still made *.HLP files...

The Annoying Security Popups:
Believe it or not, this problem has been around since XP Service Pack 2, but only in the Corporate Environment, and if it was turned on.
Microsoft told developers "DON'T write to 'random' spots on the hard drive, you should make the API call to find out were the Users/All Users (I'll just use the term Users for short from now on) directory is, and install the program under that, and use a DIFFERENT API call to find out were the users data and settings should be stored" Anyway, to make a long story short - if an application tries to write outside the returned data directory, you are going to get prompted. In addition, if you "assumed" it was going to be "C:\program files\etc etc etc" or "C:\documents and Settings\ etc etc etc", the app WILL continue to work, but it's actually going to stuff the data in a virtual directory that is almost hidden, it's buried so deep

So, it sounds like I'm blaming the developers, right? WRONG

Tyner Blaine had an interesting Post about Microsoft ignoring the customer the other day. I posted a long comment, but it basically was "Microsoft is not only ignoring the customer, they are ignoring the small developer"

Back, oh, say 15 years ago (maybe even a bit more), Microsoft was in a pitched battle with IBM on "Windows VS OS/2". One of the reasons Windows (which was a technically inferior product) won that battle was that there was a LOT of small developer shops, developing small applications in a tool called Visual Basic. There was no small cheap simple tool for OS/2. I'd bet that 90% of the applications that people used were programs that Microsoft never heard of, BUT they were the small things that the user wanted

As windows took off, Microsoft really shifted their developer support from support the 1-4 man shop to "let's take care of the Fortune 500 developers". Lets face it, in many ways, this makes a lot of sense. Examples of this are thing like - .NET produces a P-code that can be decompiled. Who cares, if you are a developer for Megagcorp. The thing is, if you're a 1 man shop selling your product, giving your competitors a way to look at your code is not such a good thing. Look at what the cost of a full up copy of Visual Studio now costs. Yeah, you can get a 'lite' version for free, but to go and get one with source control, and all the stuff you really need? Figure on a $3000+ MSDN subscription (oh, and this way you get the news of 'don't write to the application directory'). Microsoft has also said "The web is the future, and our development efforts will be on developing web application". They really are NOT working on the "I install the application, and I don't need to write the data back to Corp HQ". Again, why? Because 90% of their users are big companies, where they can give you a slick UI, and you are talking to say, Amazon's order entry system, of the CBS Olympic site. Of course, this doesn't do much good say, for a Ham Radio Logging Program, but then again, we no longer are even a blip on the radar.

The thing is: OK, you install Vista, You install Office, You install Money. They all work Great. You install Quicken - and it almost works great (don't try to run the updater unless you tell it to run with Admin Privs)

But then you go to install DxBase, or N1MM, or CWGet, or some other niche program. And you have problems. The developers come up with a way to get it to work, and there becomes a FAQ on how to make the program work under Vista. And you know what? People say "Vista sucks, because look what I have to do to make XXX program work" (or even worse, I can't get XXX to work, because they haven't looked around for how to make it work)

Microsoft blew it - BIG time, and left a BAD taste in a lot of peoples mouth. How? By not helping the small one man shop, that MIGHT sell $10-20K a year in software (and maybe less) get their products ready for Vista - at a reasonable cost