Categories
Geeky/Programming

VB6 to .NET Migration: Decision and Analysis

Recently completed a huge project migrated a fairly decent size code base from Visual Basic 6 (VB6) to C# .NET. Yes, I said “migrated”, not rewrite – let’s get that out of the way up front. The code was migrated.

How did we go about doing this? Well, I’d like to detail it out over a few posts here and in the near future.

First, you need to make the decision to migrate instead of rewrite. Not very often do dev shops get the chance to do a rewrite, and even when they do, most rewrites go over time and budget and end up losing business logic and functionality, that is why the decision to migrate instead of rewrite is a such a good one.

So, after making that decision, which hopefully you do early, or before you are in the middle of a rewrite (as we did), you can get started. There are a few options, and I won’t go into complete detail on them, but just go over them high level..

1. Use the Visual Studio Migration tool and convert the code yourself and go at it alone

2. Look at the various companies out there that do migrations and pick one, and create a project that way.

We went with #2. After some research it was pretty obvious who the main player was out there, ArtInSoft. After researching them and watching their webcasts and reading and doing as much looking into as we could, we contacted them.

Their model is pretty simple, they send someone out to you for a week (on your dime) and they analyze the VB6 project to see how much it would take to migrate.

What I learned shortly after talking with ArtInSoft and bringing one of their analysts here is that ArtInSoft actually created the VB6->.NET conversion wizard in Visual Studio. What it is, is a lightweight version of the VBUC (Visual Basic Upgrade Companion) that they licensed to Microsoft. The VBUC in Visual Studio is very limited though. It will only migrate to VB.NET and has many other limitations, but it does still work. If you had a very small project (lines of code, complexity) – you could easily use the VBUC in Visual Studio, but most projects aren’t simple and have many lines of code, that is where you would want to use ArtInSoft and their “enterprise” version of the VBUC, as well as assistance from ArtInSoft.

Back to analysis. What they do is actually migrate your project, find any ancillary projects you might have and make sure everything gets converted. Their VBUC puts in EWI’s, Errors, Warnings and Issues, within comments in the newly converted code.

They then go throw the code and do find’s on all the EWI’s, dump them and parse them out, put into excel and pivot them to analyze how many of each EWI you might have. That way they can estimate how much effort/time/money it might be to do your project. They have done this many times, so they have it pretty much down to a science.

An example would be, you have 2500 warnings for warning XYZ – we know it takes 2 minutes to fix one of those, and they are usually all unique, so then we know the total time it would take to resolve them all.

After doing their analysis, they give you a project estimation, and then it is up to you to decide if you want to move forward, and when you would want to move forward..

 

To Be Continued…

Categories
Geeky/Programming

Thoughts on the Future of Microsoft Development #pdc2010

The PDC was last week. I have never been (was scheduled once but didn’t end up going), but I try to keep up with everything that they have online, and now even more the blogs and tweets. Here are my thoughts after digesting everything I could.

Strategy

I’m not sure this much of one.. but Microsoft is still trying to figure out and find their development strategy. From back in the 90’s when it was Win32 then MFC and ASP Classic with VBScript + Office/VBA, to then Managed code (.NET C#/VB.NET, and ASP.NET Stacks).. and then WPF/Silverlight, they still and always will keep changing so that developers have to keep learning new things and looking at the next shiny object. There hasn’t been much of a convergence or steady path though. It seems once a developer or team picks up a technology it is already outdated, and I am guessing this will never change.

Anyways, after watching the videos and seeing discussion, this is what I think..

1. HTML5

The web! Ahh, the web. The one place there are no restrictions. Apple is saying, develop under our restrictions, or go out to the web with HTML5, and Microsoft is going to follow suit. If it was ASP Classic, or ASP.NET WebForms, and then MVC, and now HTML5, the web will be around for a while and Microsoft doesn’t want to get left behind. For a while they were touting Silverlight as the “new web” or whatever, but that seems to have changed.

Web applications are good for some things – well, a ton, but not everything. You can’t do some of the richer things you can do on a client on the web, deeper integrations. You can’t really run a web app offline either, no matter what people say, it just won’t be the same as a fat client. Anything I hear from MSFT that says, it does “X” if you use IE9 and I just cringe. Forget IE, let’s make it work for all browsers.

2. Silverlight

If you are developing for the WP7 Phone (who has one? yeah – I thought so), you use Silverlight, other than that, not 100% sure where they are going with this. Use it for video streaming? Games? Flash killer? Basic RIA application that needs a little more integration with the desktop than a standard web app, but less than a fat client. The problem is, what you can and cannot do in Silverlight changes every release – In my opinion they should open it up more, let you do more things with the desktop. Let devs focus on just one set of rules. I have a feeling that Silverlight might just be used as a “glue” technology instead of a “main” technology. The glue between Web and Windows?

3. WPF

Unknown here. Not much at PDC, but some talks. Winforms (like Webforms) is a forgotten technology at MSFT, so to all the people who jumped on those trains, sorry, you need to hurry up and get on the new trains. I have read some places that WPF is the future for desktop/fat client apps at MSFT, and other places where there is no Product Manager, there is barely a team, no support, they are letting it die (ala Winforms), but who knows for sure. What should a developer do? Enterprise and Line of Business applications that need desktop integrations can’t be created in Web or Silverlight, and .NET developers really don’t want to fall back to C++ (although Evernote did – and saw a huge performance gain). Microsoft needs to instill some confidence in developers that a technology they would choose isn’t neglected – to me that is just piss poor business practices. On one hand let’s market the hell out of it (which with WPF really hasn’t been the case, but marketed way more than Win32 or Winforms) and get everyone on the bandwagon, and then let it die, and 2 years later say “X” is the brand new toy you need to focus on. They finally are doing some things at MSFT in WPF, but to what extent? Black magic embedding WPF controls in Winforms or Win32 apps? To me, seeing the pretty awesome data binding stuff with WPF makes it a no brainer. Why not extend the enhanced data binding to Winforms? Why make devs switch?

 

Like I said, more convergence of tools. Use expression blend for front ends? Yes! – but it should be for everything, Windows/Web/RIA, not just Windows/RIA. Language constructs getting to the same level no matter where you code? Yes – sounds like a good thing to me, so why is it so tough?

The new Async framework looks sweet, what else for Windows devs on the .NET side? Can we get some more detailed strategy from Microsoft on where things are going? What to focus on? Companies and developers are stuck making a leap of faith when choosing which technology to use – to make sure they aren’t left in the dust. On the Apple side, it is pretty clear – use Objective C and you can code for Mac, iPhone, iPad, etc. use HTML5 for the web. Should we all be using Java? or C++? Why have .NET devs struggle to figure out what technology to use? So bottom line..

 

1. Web – HTML5/ASP.NET MVC, WCF services, etc

2. Mobile – Silverlight (aside: what ever happened to the .NET CF?)

3. Windows – WPF, WPF, WPF (but don’t forget about console apps and windows services!)

It would be interesting to go to Microsoft dev shops around the globe and do surveys..

“Hey there – what are most of your websites and web services written in?”

    Answer: “Webforms and ASMX services -  we are looking at MVC”

“Hello, what are you doing for mobile development?”

    Answer: “Well, since WP7 phone just came out and who knows if it will take off, we do everything in Objective C for iOS devices or just have a mobile website in ASP.NET webforms, or we have some Java based Android app, and some crappy Blackberry apps or something..”

“Hola, what are you doing for your LOB desktop apps, etc?”

    Answer: “Well we have a few legacy VB6 apps, some Win32 apps, and we have poured tons of time into Winforms over the last 7-8 years, but we want to start looking at WPF”

I bet a majority of the answers would be similar to the ones above. Who the hell is doing anything in Silverlight? Niche apps/markets? What about WPF? A few, and some proof of concepts, but yeah, even the MVC stuff is probably on a slower adoption rate then MSFT would like. Not sure how they solve this problem. One way would be to STOP CHANGING THINGS EVERY TWO YEARS so that dev shops can focus and incrementally move to the new technologies, but I don’t see that happening.

Where do we go from here? Well, I am pretty excited to see what .NET 5 brings. 🙂

Categories
Geeky/Programming Product Reviews

Visual Studio 2010 Productivity Power Tools

One nice thing released for VS2010 recently is the “Productivity Power Tools”. If you are using VS2010 I would recommend installing it.

Once installed, you can see the options under Tools->Options->Productivity Power Tools

 

image

One feature I really like is the “Fix Mixed Tabs” feature.

image

When you open a code file it will analyze and tell you if need to “Tabify” – convert spaces to tabs, the old developers argument of tabs vs spaces solved. BTW, they should be tabs!

Check out the tools and learn the other features, there are some good things in there to help your code and get around in VS2010.

Categories
Geeky/Programming

Continuous Integration and TFS: Team Build Screen

 

If you are running TFS and you want to show the status of your builds on an LCD, check out this sweet app – Team Build Screen – on CodePlex (http://teambuildscreen.codeplex.com/)

 

screen_01b

We just recently set this up outside my office and it is a great addition in letting us know the status of our builds, as they happen, and if anything breaks the build, etc. Great way to get visibility to everyone on the team and everyone walking by.

Categories
Geeky/Programming Product Reviews

Using Beyond Compare for Compares in TFS and SVN

I love Beyond Compare. Why? First off, their parent company Scooter Software is based in Madison, WI – so that is cool. Second, it is the best damn compare tool I have ever used. I use it for comparing every type of file, folders, folders to FTP, whatever. I love it. Best 30 dollars spent on software. I wish it did more, I could make a wish list.. anyways, to use it to do your source control compares for TFS and SVN? pretty easy.

TFS 2010/Visual Studio 2010

Open VS2010, Tools->Options->Source Control->Visual Studio Team Foundation Server… Click the “Configure User Tools” button

SNAGHTML1e2b85f

Click Add, and the settings for Compare.. I do .*, and then choose your Beyond Compare locations, and then the args like below

%1 %2 /title1=%6 /title2=%7

SNAGHTML1e42506

TortoiseSVN:

Right click anywhere in Windows Explorer, TortoiseSVN->Settings->External Programs->Diff Viewer

Choose External and then

"C:Program Files (x86)Beyond Compare 3BComp.exe" %base %mine /title1=%bname /title2=%yname /leftreadonly

 

(remove the x86 if you are on 32 bit, add it for 64 bit)

 

And.. there you go!

Categories
Geeky/Programming

Visual Studio 2010: Console App, Where is my System.Web?

If you create a new Console App in Visual Studio 2010, and you want to reference System.Web, you might start scratching you head. Why?

Looks like Visual Studio 2010 creates new Console Apps targeting the .NET Framework 4 Client Profile instead of the .NET Framework 4. Why? No idea, but you can change it and then reference System.Web

You can change the setting by going to Properties on your project, then the Application tab, and changing the drop down of the Target Framework to .NET Framework 4

image

Categories
Geeky/Programming

Visual Studio 2010: Adding a Web Reference

In previous versions of Visual Studio, you could just right click on a project and choose “Add Web Reference” to add a reference to a asmx web service. In Visual Studio 2010, when you right click, you will see “Add Service Reference”… similar, but not the same. If you reference an asmx you will get some weird objects back in your proxy web service object, each method with Request/Response at the end. You may want this, you may not. If you want to get the legacy web reference back, here is what you need to do.

Right Click on a project, Add Service Reference, then click on Advanced, the Add Web Reference. Then you will be able to add your good old asmx reference like you used to in earlier versions of Visual Studio.

image

Categories
Work

Looking to Hire…

I have been managing two different groups @ Trek -  (Business Intelligence and .NET Software Development) for a while now, and we have some openings we are trying to file, so that is why I am putting this out here.

First role, looking to hire a Microsoft .NET Windows Forms developer, or someone with web experience looking to get into Windows Forms and eventually WPF/Silverlight, and also Windows Services. C# is the language.

Second role, looking for a Microsoft Business Intelligence Developer/DBA – SSAS/SSIS/SSRS, DBA experience preferred. Working on cubes, and ETL’s and reports and DBA stuff.

Shoot me an email at steve_novoselac@trekbikes.com with your resume and info.

Categories
Life Product Reviews

Vacationing with the iPhone and iPad

Was just on vacation since Sept 3rd through today.. Drove up to Nisswa to drop the little one off, then down to the Twin Cities for 4 nights, then back up to get the little one in Pierz, then back down to Eau Claire for 2 nights, then back home for 2 nights.. fun time. I didn’t really connect to work (only to extend my holiday by 2 days!) but I was still *connected* to everything I wanted to be.

First, I shut off email/exchange sync to my iPhone/iPad, easy enough in the settings. Turned off the calendars too so I didn’t get any new meeting alerts. Good to go.

How else did I use my devices?

Well beyond the basics (on the iPhone – Phone, SMS, Email (personal), Taking pictures and videos, weather, calculator, maps, maps, maps, maps..)

1. Gowalla/Foursquare – I recently just killed both my accounts and started fresh. I tried to see the usefulness and benefit of these. I like Gowalla better – just prettier. Foursquare tells me what is trending better. I use them both to find things around where I am, and check in to keep track of where I went 🙂

2. Twitter/Facebook – just killed my Facebook account again as well, I think I have 15 close friends on there now, so it is pretty quiet, but nice. Twitter I use to just keep up on the real time stuff going on, track favorites, as usual.

3. Soundhound/Shazam – used these to lookup songs I heard at bars or wherever, it is a given pretty much anywhere.

4. Flixster – used this to find movie theater near by and showtimes. Couldn’t buy tickets at the theater I went to, but I could have with fandango, just not worth the hassle I guess.

5. Yelp/OpenTable/Urban Spoon – more targeted in finding foodie places. OpenTable to reserve.

6. SportTacular – to keep up on the Twins and Vikes 🙂

7. WF (mobile site) – to view my accts and transfer and what not

8. Nice Ride and Train Brain – these are where it gets good. Downtown Minneapolis has these cool bike stations you can rent out a bike (for free for under 30 minutes!) or for a small fee (http://www.niceridemn.org/_ (FYI Trek has a similar offering, called B-cycle). Ride it all over and drop off at another station. We rented two and drove them from Uptown to Downtown. Was pretty awesome. The app shows you the stations and has a timer, it could do much more though 🙂 Train Brain shows you the light rail schedule in town, we took the train from Govt Plaza to Mall of America, and back. Was pretty cool.


9. Scanner – QR codes are all over in Uptown on shops, etc. I used this to scan their codes and open links.

10. Reeder – on the iPhone and iPad – used this to keep up on my Google Reader 🙂

11. iPad – in general used it for mostly news apps, and surfing the web, used it as a “computer” – did you know on maps.google.com on an iDevice, if you click on the icon of a “place” it does much more than the native Maps app on the device? I thought that was cool.

I also used CityPages app on the iPad to look up some things going on.

Saw a Twins game vs the Royals (they won!) and Wicked as well. Got a little sick Wednesday morning through Friday so that was a bummer but overall it was a good vacation


Categories
Agile

Agile: Epics

So most people are familiar with “projects”. Something you do, have an end goal, usually a budget, resources, plan, etc. Sometimes you have projects within projects. Like a good example may be thinking of the next version of Microsoft Windows as the main project and revamping solitaire for the next version as the “epic”. Your end goal is to keep your main project moving forward, and do stories that apply to that project, but you also might run into mini projects along the way that could cross over numerous sprints, and you want to “group” like/similar stories together to form an “epic”.

What is nice about epics is they still let you do your sprints, and stories as normal,but you have a more higher reaching goal to get a set of stories complete to complete your epic. It also lets you look back and then see how many stories and points you did toward that epic and understand the effort,etc that went to completing it.

Use epics to group stories together to form a common goal for a similar “thing”. It will let you say “let’s focus on the blah epic” and you can make sure you get that piece of functionality done and track it and see all those stories together in the end.

P.S. Blogged from my iPad