Welcome to Greg McKinley.com Sign in | Join | Help
Vista disk space
Just this morning I was in file explorer and I realized I only had 13.5GB of disk space available. Oops, not the way to start your day with a three month old laptop. A quick Google search pointed me to vssadmin.  Then some general house cleaning including; clearing my event logs, temp files, etc and I freed up about 9 GB. Still not great but a heck of a lot better than before. Anybody else know of any Vista disk space hogs?

How To Reduce Disk Space Used By Windows Vista System Restore
Maintaining Development Momentum

New development is self fueling. Momentum is rarely a problem early off. The team is hungry to transform their ideas into code. Then as the refactoring and development proceeds design flaws begin to emerge and revisions being to happen. Depending on the severity of the problem it may be corrected in the current iteration or queued up for a future iteration. Working through these scenarios is what builds team cohesion. Overcoming design hurdles and major refactoring provides fulfillment and gratification for the team. The code base was solid before but now it is even better!

Iterations pass and depending on the size of the overall project the team may grow tired. During the early iterations when the energy levels are high you need to build up endurance and set the pace. I love to go full bore but that kind of pace cannot be sustained. This is why development teams needs to be thought of as a relay team running a relay race. Staggering iterations, or legs of a relay, among the team allows individuals "to pass the baton" and rotate off the critical path. This allows you to formulate strategies, based on your team’s strengths, for the upcoming iterations and keeping the team energized.

A few momentum killers
Disengaging the team or individual members for fire drill exercises are the single biggest momentum killer. Most iterations only last a couple of weeks. Management may try to pull people from an iteration to perform another task. From a managers viewpoint the individual completed their work for the iteration so pulling them to tend to another task makes sense. We all know this should not happen but it does and it will happen.

The nature of iterative development usually means subsequent iterations become more complicated and the pressure and stakes are higher. This occurs for an obvious reason: increased functionality of the code base. Do not allow yourself to under estimate iterations under pressure from above. This will happen and create additional stress for the team.

It's all about teamwork
Here are a few key guidelines I follow.

Have fun with your work. Smile and laughter keeps stress to a minimum and keeps you approachable to your team members.
Lead by example. This kind of behavior is contagious.
If you are a lead, stay involved as a code contributor.
Make time for creativity. Don't schedule individuals with mundane tasks back-to-back. Their enthusiasm will begin to drop. Keep it mixed up.
Make sure everyone has weekly goals/deliverables. Everyone should be working to contribute a piece of the puzzle on a weekly basis.
Work as a team. Keep everyone engaged and involved in the decision making process. Collective code ownership.
Pair program liberally. When working on complex algorithms or refactoring code work in pairs. The creativity can really flow.
Police each other. Multiple people should have an understanding and contribute to functionality across the code base. Two or three minds work better than one.
Track project metrics from the start. These metrics are vital to estimating future iterations. Use these metrics to back up your estimates and keep the team out of the pressure cooker.

Pair Programming: my definition

Without looking at how so many others have define pair programming.

Pair Programming w/Nikola
Pair programming with Nikola
Here is my authoritative definition, "Combined mind power seated in front of a computer to solve a difficult problem that should not be solved by only one.

Well, I can't resist one reference Ron Jeffries. On the off chance this is the first time you have ever heard the term pair programming :-)

Visual Studio 2008 Tips
I have been on a low blog diet but I think I may give Sara's Visual Studio 2008 Tip of the Day a try for the next few weeks.
Career goals for the next 6 months

It is interesting timing that Jason Haley tagged me about career goals. I just finished up a six month project that consumed all my time. The astute will notice my blog has been quite for a similar amount of time.goals Before I can define my future six month goals I need to digest what I learned/accomplished over the last six months:

1.  Worked with Commerce Server API. Specifically profile, catalog, and order management sub-systems.
2.  Full-blown development on virtual machines using VMware. Started out with Virtual PC but switched to VMware and have not looked back.
3.  Agile development. Coordinated parallel development streams. Introduced development team to unit testing and TDD. Pair programmed, learned when it is a value-add. (Also learned how sweet VMs and terminal services can make pair programming with laptops.)
4.  Performed countless branching and merges. A result of parallel development. Perforce, is a wonderful SCM tool.
5.  Service enabled Commerce Server API using WCF. That sentence does not do the effort justice.
6.  Learned VSTS and how to build load and web tests. For a first release VSTS is better than I expected. I need to a look at Visual Studio Team System 2008 - Team Suite Beta 2 to see where improvements have been made.
7.  Tested SO Commerce Server framework using VSTS in a testing lab. Learned how vital performance testing, in a lab environment, is to the development process. This is a must do if a development team wants to learn the behaviors of their software! There are many performance/load testing tools on the market but for a developer's usage I feel VSTS is superior. Its Visual Studio so the learning curve for a dev is relatively low. Not to mention load and web tests are pretty much built from unit tests.
8.  Analyzed and documented performance testing results. Actually spent a few days reviewing 4+GB of test result data and logs.
9.  Developed some WCF best-practices (project layouts, namespacing, versioning pactices, proxy generation scripts).
10. Worked with Vista. Famaliarized myself with Vista nuances.
11. Re-enforced major testing principal - the author of the code must write the unit tests! During the last project the idea was to have a couple new developers to the project write some unit tests for a sub-system, which had no coverage, as a way to learn the code base under development. Not a horrible concept but a very time consuming effort. At times it was confusing for the devs trying to understand the behavior of code they are writing the tests for. That hints at another problem which could have been taken care of should the author of the code practiced TDD.
12. Learned how difficult it is to develop a framework...

Goals
1.Continue my quest for efficiency by practicing the Pareto Principal (80/20 principal). 80% of the outputs result from 20% of the inputs. Focus my efforts on the 20% and eliminate the rest. Also, read Getting Things Done.
2.Define and hone my current skillset. My current interests and focus are WCF, developing frameworks, TDD, and agile development. Over the next six months I will focus on these areas. Specifically I hope to capture and build upon the agile development principles that have worked for me. WCF related I want to dig into the internals. For many years I have tried to consume all the latest information only to do little with it. The shotgun appoarch to staying up on technology just isn't fun anymore.
3.Write blog entries. At a bare minimum one entry per month. Wow, what high expectations! Writing blog entries has been hard for me in the past as I feel I have to be a SME (subject matter expert) to be worthy of discussing a topic. As many bloggers can attest this not the case. Stay tuned for more. There is lots floating around in my head and its time to get them out in words.
4.Look into developing a product. Over the next six months I would like to create a few POCs to prove out some ideas. If they pan out maybe I will take the next steps.
5. Do a presentation for a user group or Code Camp. I am long overdue to take the plunge into these waters. Enough said, action required.
6.Catch up with individuals within my network. Find out what people are currently working on and their future plans. I have not taken the time to do this in a while.
7.Learn more functionality provided by CodeRush and Refactor! Pro. These tools are key productivity enhancers. RefactorPro will be of special interest as I am currently only using a fraction of the refactorings available.

I just noticed that the above goals are all just detailed versions of my anual goals. I did not even try to do that. Guess that is proof that writing down your anual goals does commit them to your subconscious.

WCF Bloggers and Forums

Lately I have been spending my spare time working with WCF. There are still only pockets of knowledge about WCF (although it is growing every day). Here are the blogs I look to for info. Let me know if you know of a WCF blog I should check out.

Nicholas Allen - everything WCF. You must go back and read all his previous WCF entries.
Steve Maine - service hosting, rest, pox, and more.
Kenny Wolf - lots of WCF content. Another must read his previous entries.
Justin Smith - WCF book in progress.
Aaron Skonnard - contracts, serialization, xsd, etc.
Jesus Rodriguez - lots of entries about making WCF work with BizTalk and Oracle.
Marc Mercuri - coauthor WCF Hands-On, lots of sample updates.
Kirill Gavrylyuk - WCF Interop.
Christian Weyer - WSSF, contract first, etc.
Michele Leroux Bustamante - WCF contracts and demos.

Also, here are the two WCF forums I use.

Microsoft WCF Forum
WCF Google Group

posted 03-02-2007 03:14 by gmckinley | 0 Comments   
Filed Under:
January Coffee Table Reading

cup of coffee This is my monthly place holder of the useful articles and links I found/used for the month of January. I spent a majority of my time with WCF, master pages, and a little bit on TDD as my below article reading shows.

Security in Windows Communication Foundation - Keith Brown discusses
Scott Allen - ASP.Net 2.0 - Master Pages: Tips, Tricks, and Traps
Web Services Metadata Exchange (WS-MetadataExchange) - mex spec.
Simple 2 column CSS layout - Figured it was time to play around with tableless html layouts.
Setting DefaultButton and DefaultFocus with Master Pages - A nice to know instead of carrying forward these functions from your 1.1 base page.

Resources:
Simian (Similarity Analyzer) - Not a free tool but very nice for analyzing duplicate code. Thanks Nikola ;-)  (Fellow Monster blogger)
FitNesse - Thanks to Steve for telling about this very cool tool.
PocketMod - For the list obsessed.
hex2dec - Convert hex numbers to decimal and vice versa.

Windows commands via the Slickrun Prompt

Here is a list of windows commands I run from the SlickRun prompt without setting a magic word. Many of these work right from the run dialog box as well.

logfiles opens IIS log file dir.
services.msc opens services mmc span-in.
eventvwr opens event viewer.
resetiis resets IIS.
appwiz.cpl opens Add/Remove Programs.
mstsc.exe opens Remote Desktop Connection.
perfmon opens performance logs and alerts.
secpol.msc opens local security policy editor.
compmgmt.msc opens computer management console.
cmd opens command shell.

October/November Coffee Table Reading

cup of coffee This is my monthly place holder of the useful articles and links I found/used for the months of October and November.  Most of the articles are SO or WCF oriented.

WCF Services and ASP.NET - breaks down the IIS hosting options for an ASP.NET application (how to run service within application App Domain, etc).
Enable the Service-Oriented Enterprise - really talks to the ecosystems required by services within an enterprise.
Web services and WS-BPEL - article example uses BPEL process deployed on Oracle BPEL Process Manager calling a WCF service.
WCF Oracle Application Server WS-Security interoperability Part1: from WCF to Oracle
WCF Essentials - Juval Lowy gives a WCF primer.
ORM How to Select Guide

Resources:
xmlformater v1.04 - A nice Perl xml formatter. Not something I need all the time but when I do it is a savior.
IDesign serviceware download - Collection of WCF and .NET demos.
A better way to encapsulate caching in .NET 2.0 - a nice CacheHelper.

IIS 7.0 Primer Links

Here are a few resources I found useful to get a quick introduction to IIS 7.0

A First Look at IIS 7.0
Taking Advantage of the IIS7 Integrated Pipeline
IIS7 Module Overview - page 4 contains a list of the modules that make up the IIS 7 pipeline.
IIS 7 Talks on Channel 9

ASP.NET Dynamic Control Postback Events

This sounds simplier in words than I have seen practiced in code.

Working with dynamically created controls that postback events can be tricky. For a lot of applications it is all about timing. On postback the dynamic control must be re-created during Page_Load so the control event can be wired up before the RaisePostDataChangeEvent/RaisePostBackEvent is called. Even if the control was orignally created in say OnPreRender. If the dynamic control is not re-created the control event will not be raised because the control does not exist yet. This kind of problem usually occurs as new controls are added to an existing page that previously did not dynamically create controls.

The example below checks the EVENT_TARGET to determine if it is a dynamic control that the page or control cares about. If so it will re-create the dynamic control and place it in a PlaceHolder that is not visible. Now the postback event will be wired up to the dynamic control. This scenario is also useful if you have a collection of dynamic controls and you only want to create the one that caused the postback.

   Protected Overrides Sub OnInit(ByVal e As System.EventArgs)

        phPostbackControlHolder = New PlaceHolder

        phPostbackControlHolder.Visible = False

        Me.Controls.Add(phPostbackControlHolder)

        MyBase.OnInit(e)

   End Sub

 

   Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)

        If (IsPostBack) Then

            Dim index As Integer

            Dim sEventTarget As String

            sEventTarget = Request(EVENT_TARGET)

 

            If (sEventTarget.IndexOf(CNTL_PREFIX, 0, sEventTarget.Length) <> -1) Then

               ctlDynamicControl = RebuildSelectedControl(sEventTarget)

 

               If (Not ctlDynamicControl Is Nothing) Then

                    phPostbackControlHolder.Controls.Add(ctlDynamicControl)

               End If

            End If

        End If

        MyBase.OnLoad(e)

   End Sub

Nullable Value Types and the C# Null-Coalescing Operator (??)

Just a couple of links to some useful 2.0 functionality

Eric Gunnerson - Nullable Types in C#
Fritz Onion - Using the ?? operator for ViewState properties

Hosts File

Last week I ran into a problem with a staging server that appeared to be super slow to the user. It was throwing this error:
System.Net.WebException: The underlying connection was closed: Unable to connect to the remote server.

Since this server is in a cluster it went unnoticed for awhile. It turned out to be an IP address typo in the hosts file on that server.

The hosts file can be found at:
%SystemRoot%\system32\drivers\etc\hosts

Something to remember if you are using a hosts file.

July Coffee Table Reading

This is my monthly place holder of the useful articles and links I found for the month of July.

Write Maintainable Unit Tests That Will Save You Time And Tears
Composite Unit Testing
Inversion of Control Containers and the Dependency Injection pattern - Martin Fowler
NWorkspace - Jimmy Nilsson's persistence abstraction layer. I really like this concept! Maybe I will post the example I am working on.
Table Variables In T-SQL - Scott Allen's nice write-up. I completely forgot about these little babies until some recently asked me about them. Table varibales can replace most of your temp table needs.

Resources:
Library of Free Data Models - useful starting point for your database model. (via Jason Bock)
Alexa Web Search - very interesting traffic rankings information
Make IE and FireFox go faster than ever - via Roy Osherove
.NET Test Driven Development - List of unit testing resources by Darrell Norton (****)

June Coffee Table Reading

This is my monthly place holder of the useful articles I found for the month of June.

Protect Your Web Services Through The Extensible Policy Framework In WSE 3.0
What's New in Web Services Enhancements 3.0
Microsoft WS-I Basic Security Profile 1.0 Reference Implementation: Preview Release for the .NET Framework version 2.0
X.509 Technical Supplement
Software Team Turnover: Why Developers Leave (And What You Can Do About It) - (***) This should be required reading for all dev managers.
Feature Changes in ASP.NET 2.0
Allen Holub's UML Quick Reference

More Posts Next page »