The blog of Kevin Grossnicklaus...

My thoughts on stuff....probably related to .NET

  Home  |   Contact  |   Syndication    |   Login
  6 Posts | 0 Stories | 16 Comments | 0 Trackbacks

News

Archives

All my buddy's Blogs

Development

Personal

Work Related Links

Friday, August 10, 2007 #

One focus of my job here in St. Louis is large-scale “Smart Client” development.  One of our “niche” areas of expertise at SSE is architecting and designing Windows-based apps. Over the years we’ve built a huge framework that we call the SSE Smart Client Container™. The container itself is a really cool and extensible host for Windows functionality that supports a flexible add-in infrastructure we use to build new apps. It’s all written in C# 2.0 and comes in at around 150k lines of code (not that line count is a valid measure of much anymore). The UI itself is 100% built using the Infragistics NetAdvantage 2007v2 Windows-forms components and was built to provide a very “Windows-standard” type experience for end users. It provides a tabbed MDI interface with all the toolbars, dock-windows, Outlook-style navigation that we are becoming used to in many applications. Thanks to the Infragistics components, the entire container we’ve built supports a concept called “AppStyling” that allows us to “skin” every element of the UI through an external tool. We also incorporated the ability to tightly integrate help (and even provide “dynamic help” ala Visual Studio.NET). All of this is built on top of an extensible “add-in” infrastructure that loads all the new functionality via external DLL’s and XML manifest files. It’s a very flexible yet robust system that we’ve used on a wide array of client products and applications.
While the above description might not do it justice, it’s a very cool framework that I’m excited about because we are just starting to market it as a standalone offering and have our first few customers onboard. In June, one of the teams I am involved with just finished rolling out a huge product based on this framework that was built by a team of 25 people from around the world over the course of 12 months. They had teams in Thailand, England, Denver, and St. Louis and the entire UI was based on this framework. When the product launched we supported the ability for users to switch languages on the fly and translated EVERY UI element into one of 8 provided languages. Thanks to the “add-in” infrastructure, they are currently working on the next features of their product that will be available as up-sells and plug right into the same container.
So why all the talk about this framework?
Next Tuesday (August 14th) at 11:00am (Central time) I will be giving a Webinar on the framework and “Smart Clients” in general. The webinar will be a high-level discussion of what these types of applications are, how they can benefit a business, and how our framework can speed their implementation. Like I said, my company (SSE) is starting to license this framework to other organizations to which it may be of a benefit. So if you think there might be a fit, feel free to sign up for the webinar. Even if you aren’t really into licensing frameworks or don’t have an immediate need, then the webinar might still be a way to see something cool and get some development ideas.
So, if any of you are interested feel free to sign-up here https://www.gotomeeting.com/register/471405797.  If you’re not able to attend the webinar but would like more information, drop me an email at kvgros@sseinc.com and I’ll gladly send you over some materials.
 

Thursday, July 19, 2007 #

I'm back from one vacation and preparing to head south to Mexico for another but, with a little downtime available, I thought it was as good a time as any to upgrade to Vista and Office System 2007.  So, I write this while waiting of various software packages to install (with UAC OFF :)

First, I work primarily from a laptop which goes with me wherever I go.  To help me in moving around I do have a couple docking stations at various offices I'm at frequently (one at SSE and the other at Reuters).  At home I don't use a docking station but just boot up the laptop wherever I happen to be.  My current laptop is a Dell XPS M170 with the nice 17" widescreen, a 100g HD, a 256meg gForce 7800 video card, built in wireless, and a DVD burner.  I've had it for a few years now and LOVE the laptop and my only real complaint is it's sheer size and weight.   With the laptop, my optical mouse, the power adapter and my 100g USB HD I pack around, the weight of my laptop bag comes in at around 15lbs.  Late last year I found myself lugging this thing around Bangkok for a week and silently wishing I had something a little more travel ready.

Anyway, on to Vista....

I'm not new to Vista (or Office 2K7) and have a desktop at work with Vista Business on it.  I only use this desktop for email and web browsing though (and the occasional game of chess).  I've reloaded it a few times as Vista progressed through Beta's and into production so I never put too much software on it.  Upgrading my laptop would be my first real "I NEED IT TO WORK RIGHT" experience with Vista.

My laptop came with XP Pro and in the few years I've had it I've taken full advantage of it's speed and power.  My installed programs list filled my 17" screen.  I'm also a pretty hardcore developer so I had TON's of add-ins, components, productivity tools, etc, etc loaded.  Some of them I could live without and some of them I couldn't.  So in an effort to do a little housecleaning, I decided that my move to Vista would start with a reformat of my HD and a clean start putting on only what I needed.  Thus my first step was to use Norton's Ghost 12 to get a clean image of my old HD onto an external drive.  Next:  "Format C:".  (Actually I just formatted during the install process but I just wanted to type "Format C:" :)  Ghost 12 worked great and has some very nice features, I highly recommend!

Next, I installed Vista Ultimate (which I chose for the Media Center capabilities in addition to everything else).  The overall install went very smoothly.  Next, I installed Office System 2007 and patched everything up with Windows Update.  I fortunately had no real driver compatibility issues and everything ran great.  I restored all my documents from my Ghost image into my documents folder, joined my work domain, and got ready for the hard part....loading all my necessary software.

I'm pretty good at keeping around all the installation packages and serial number information for all my tools and other software packages.  In working with large teams of developers it's a science keeping everyone up-to-date and on the right versions so I make it a point to be somewhat careful about having everything handy.

I started with the big stuff (VS.NET, MSDN, SQL 2K5 Developer) and worked my way down to the smaller stuff (widgets, addins, small utilities, etc).   I finally even put the only game I'm currently playing on there (Neverwinter Nights 2).

I tried to get as far as I could leaving UAC on but, ultimately, I just turned it off and everything seemed to move quicker.  Vista was very cool about notifying me of potential software incompatibilities and was usually right.  A few tools didn't load at all and after checking with the vender, it was due to known issues they had with their packages.  Unfortunately I ran out of HD space sooner than I should have and had to do some digging through files to clear out unnecessary usage of space.  Vista puts a bunch of sample files and other bloat here and there that I purged.  A few packages even forced me to contact their vendor for new license files which are tied to my OS.

As I near completion I'm very happy with how smooth it has gone (for the most part).  I've almost got a very complex development environment rebuilt in a bit under 3 working days of time.  I can't say it would have been any quicker if I would have had to rebuild my box with XP in that time-frame.  Once I'm pseudo complete I'll get another Ghost image of the new OS and then start coding.  Then we'll really see how compatible Vista is with what I do from day-to-day :)

For now...I think I need another vacation :)


Wednesday, June 27, 2007 #

Recently I loaded up the 3.0 version of ReSharper and am very impressed.  It made me realize how much I miss using that tool (since it's been years since I actually had a copy).  They've came a long way since then and built a very nice suite of development productivity tools.  So I had to give them some props on the blog (even though I represent no tool vendors at all I like sharing info on what I like as much as dissing the tools I don't)

While teaching my .NET classes I mention tools like this every now and then and realize most .NET developers (especially newer ones) are not aware that tools like this exist.  They are familiar with the idea that they could go purchase new grid controls or toolbars to use WITHIN their application but haven't spent too much time (if any) with tools that integrate with Visual Studio and are nothing more than coding productivity tools (or code analysis tools or other debugging/diagnostic type tools).  Most people don't see the tangible value of something like this (assuming their is one) and/or cannot justify any potential cost for purchasing something like this.  In some scenarios that may be justified but, even though I have no hard numbers to back it up, I would bet that a number of the tools listed below actually pay for themselves very quickly in terms of man hours spent on remedial coding tasks.

So What Do I Use?

Don't get me wrong, I'm not an expert in ALL tools of this type and I'm sure there are many great ones even I am not familiar with, BUT I have used a few that have served me and my teams very well.  Some integrate w/ VS.NET and are plug-ins others are just tools we use outside of VS.NET.  I'm not associated with any of these venders and am just posting this here as my own humble opinions from my own humble experience.  So, if you want to know what I use here goes:

GhostDoc (http://www.roland-weigelt.de/ghostdoc/)

This is a FREE tool (my favorite price) that simplifies adding comments to your methods, properties, classes, etc.  It generates default XML based comments (including text that it infers from the method names, parameters, etc).  It's a very nice tool and focuses on C#.  They are just now releasing their first VB.NET support but I've thus far only played with the C# version.  It's trivial to use:  You load it, run visual studio, open your project, right click on your method and select the newly added "Document This" menu item which now appears.  Done.  Everyone on my team uses this tool and, on our teams, committing code to our source code repository without ALL public members or classes having XML comments is a build breaking no-no.

ReSharper (http://www.jetbrains.com/resharper/)

This is NOT a free tool :)  But it's well worth the $200 individual license cost.  I could go on forever about all the individual features this thing adds into VIsual Studio.NET once loaded but it would take the next few weeks of blog postings.  From refactoring tools, to code analaysis, to stupid simple (but handy) things like automatically reformatting your code and removing unnecessary "using" declarations or "this." prefixes (in C#).  Check out the link above for the full list of features. I highly encourage you to check out their site, download a 30-day demo of ReSharper, and code for an hour on something you've been working on.  You'll notice this tool....I promise!

Reflector and/or Resourcer (http://www.aisto.com/roeder/dotnet/)

If you are not familiar with Lutz Roeder's tools, please check them out.  Reflector is one of the most famous .NET dis-assemblers (or more accurately an assembly analyzer) and Resourcer is a handy little binary .Resource file editor.   We use both frequently.  My teams focus on big .NET smart client applications with a lot of localization requirements.  We also still use binary resource files and the Resourcer tool has been very handy.  It has it's quirks and I'm still on the fence about writing my own, but, until I find the time to do that, we all use Resourcer.   Reflector is something I encourage all the students in my .NET Assemblies class to download on the first day of class and I use it to teach them about how .NET and the assembly infrastructure works.  It's well worth playing with.

Compuware's DevPartner (http://www.compuware.com/products/devpartner/studio.htm)

This is the most complex tool I own and the one I am the most proud of.  It's also the most expensive (and we tend to be the most proud of the things we spent the most on right?)  The DevPartner suite has been around for many years and their .NET tools are fantastic.  It's essentially a suite of tools integrated tightly into VS.NET for code coverage, profiling, memory analysis, code analysis, etc, etc.  I can run any .NET application using their memory analysis tools and get a HUGE amount of information displayed regarding the .NET memory usage, garbage collection, memory leaks, etc.  Check out this screenshot for an example of what a memory analysis looks like when running their tool in VS.NET.  Here is another screenshot of what a performance analysis looks like.  It times your code down to the individual line and let's you navigate through the results very quickly to identify bottlenecks and areas for improvement.  This, like ReSharper, is a VERY nice tool but also VERY ADVANCED!  This tool can get a bit overwhelming but I HIGHLY recommend it, especially for those of you working as leads or architects and troubleshooting complex code.  Personally I think everyone on a team would benefit from it but it's cost is a bit prohibitive.  ComponentSource.com currently has a single user license running at $2,200 which makes it something you need to budget for and justify.  I've became very adept at using it (after many years) and have always justified having a copy by taking advantage of it everywhere.  Could I do that for everyone on my team?  Probably not.  I wish it was cheaper and more readily available but they don't let me price these things.  I will say this tool has taught me quite a bit about how .NET works simply by letting me look under the hood (moreso than a $2,200 class would have :)

Conclusion

Well, only 3 or 4 tools but I still get some use out of them.  If I run across anything else in the future I'll be sure to throw up some info if I think it might be of help.  If any of you have used tools like this that I should check out drop me a line or comment on this post for all to see.  I'm up for looking at anything.

Also, as of tomorrow I'm hitting the road for a few weeks to leave .NET behind and get some fresh air.  I'm taking the family up to Montana for some long needed R&R.  So, if you write me and wonder why you get no response, don't worry...I'll be standing with a stick in a river (the famouse Henyr's Fork) outside of Last Chance, Idaho throwing fake flies at huge trout...and .NET productivity tools will be far from my mind :)  When I get back I'll slowly get caught up and probably share some stories of remote mountain streams and/or bears.

Until then, have fun!

-Kevin

ps.  Has anyone here dug Wall Drug?

 

 

 


Friday, June 22, 2007 #

The project I'm currently wrapping up is a large .NET Windows "Smart Client" application (which I'm sure you'll hear more about in upcoming posts).  It actually has the capability of working in "offline" mode and we have a pretty extensive infrastructure to cache data locally and store it for offline use in a SQL Server 2K5 CE database (which we auto-deploy with the rest of the app via ClickOnce).

Unfortunately, we've recently hit somewhat of a snag when our offline cache grows significantly.  We have a test case where (after loading a large amount of data into the application via a saved document) we end up with 90,000+ lines of data in a cache table that we want to write out to the SQL CE database when the application closes.  Basically, it requires 90K of simple insert statements in a loop.  This is where it's readily apparent that SQL CE is not a full SQL 2K5.  These 90,000 inserts take over 10 minutes to complete. 

We're currently evaluating any ways to increase the speed of this process (or provide the users the option to bypass).  We can show a progress bar but who likes to watch a progress bar for 10 minutes when all you want is to exit an application? :)

Other than performance in situations like this (and lacking the ability to use stored procs) we have been pleasantly suprised with the SQL CE option for offline data.  We've gotten pretty good at using it as well.

If you need this type of functionality (or want to know what else it is capable of) check it out here:

http://www.microsoft.com/sql/editions/compact/default.mspx

-Kev


Tuesday, June 19, 2007 #

Lately I’ve spent a lot of time playing with VS.NET “Orcas” Beta 1 and focusing on the language enhancements to C# in the new compilers.  As an instructor who teaches the languages and as a developer of large frameworks for clients, the first thing I’m interested is the language enhancements.  Then I dive into the addition “add-on” type features (read: WPF/XAML, WCF, Workflow, etc…)
 
So far I’ve found some really intriguing features (like LINQ) that I like and think have some value but which won’t dramatically change my designs or architectures. Other things (like extenders) I appreciate but I’m a little concerned about how I’ll see developers put to use.   I see a lot of questions from students and team members regarding when this is appropriate and when that is appropriate now that we have such capabilities.
 
If you’d like a quick overview of all the new C# 3.5 features I ran across this blog post after a Google search.  It has a pretty concise overview which I got some value from:
 
http://www.hookedonlinq.com/CSharpLanguageEnhancements.ashx
 
Also, if you’d like to see some examples of how LINQ can be used in action check out the following MSDN page and click through some samples.
 
http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx
 
Anyway, more info on C# 3.5 and I continue to play….

My name is Kevin Grossnicklaus and I’m a 32-year old .NET architect and developer here in St. Louis, Missouri.  
 
I lead a software development practice for a consulting firm here in St. Louis called SSE (www.SSEinc.com) where my team's focus primarily on “Smart Client” applications written in .NET (so expect a lot of Smart Client related postings here).  I’m also a part time instructor for a technical training program at Washington University in St. Louis called the Center for the Application of Information Technology (CAIT or http://www.cait.wustl.edu/)   I teach 2-3 classes a month on topics such as VB.NET and C# (Beginning, Intermediate, and Advanced), web services, deployment and assemblies, ASP.NET, XML, ADO.NET, Threading, Enterprise Architecture, etc, etc….   
 
So between building large .NET applications during the day and all my teaching, I’m pretty fortunate to talk to a lot of developers and get my hands on a lot of technology. Thus, in an effort to figure out how to share some of this info and communicate better with my friends and co-workers I decided it was time to cave in and start a blog :)
 
With the above in mind, welcome and I hope my .NET ramblings provide some value.  Thanks for stopping by and read on.