Thoughts about Failing with RUP#

I just finished reading the article I mentioned in my previous post on failing with RUP.  Here are some of the things I took out of it.

I think most of users of RUP missed the boat on this one.

          “The authors of the RUP intended and encourage it to be applied in a light, agile, adaptive process spirit.”

Most of the problem with people adopting RUP (or any iterative process) is they can not part with the WaterFall way of thinking.  I find this very true, people tend to like nailing down requirements instead of expecting and embracing change.

Now from this you may think I like RUP, well I don’t. 

  •  It is too complex.  A process should be simple and easy to follow.  I’m a big fan of XP and the discipline and flexibility it brings to developing software.
  • The people doing the development pick what is going to be done in the iteration instead of the customer picking what they want in the iteration.
  • Using the Elaboration phase to build the risky and main infrastructure of the application.  This should be be done throughout the iterations not all at once.  Doing small end to end pieces so there is something to deliver to the customer as early as possible and get feedback.

At its core RUP is an iterative process, a complex one that can have a lot of baggage but an iterative process none the less.  It lacks the discipline development practices of XP which tends to lead to a lot of out of date documentation for unmaintainable code.  People have problems moving away from the WaterFall way of thinking with RUP because it provides so many chances to make worthless documentation.

My vote, go Agile and save yourself money and headache.  Don’t even give yourself the opportunity to fail with RUP.

Thursday, October 27, 2005 7:30:28 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

How to fail with RUP#

I saw this article , How to Fail with the Rational Unified Process: Seven Steps to Pain and Suffering, go by on a DL at MS and I just started reading it last night.  It ain’t half bad so far.  Anyway, thought I would share with the rest of the world.

Thursday, October 27, 2005 2:05:50 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Getting ride of those large vhd files#

I have found the blog post by Guoqiang Wu and Pablo Alberto Galiano helpful for making sure you get your vhd files as small as they will go.

The gist of it is:

  • Delete nay unneeded files and empty recycle bin.
  • defrag virtual disk
  • run precompact.exe to zero out deleted data
  • compact vhd file.

See the mentioned posts for more info if you need it.

Wednesday, October 26, 2005 5:37:32 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Agile Toolkit Podcast#
I was just told about this.  There are some great podcasts here including one by Ward Cunningham and Rick Mugridge on FIT. 
Wednesday, October 26, 2005 2:52:58 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Emergent Design: Design Patterns and Test-Driven Development#

If you are in the Denver area there will be a presentation on November 16th about Design Patterns and Test-Driven Development at the Qwest Auditorium.

Wednesday, October 26, 2005 2:50:35 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Hundhausen has posted hist SQL presentation#
This is one of the best presentations I have been to on SQL.  It is just a text file download with a ton a SQL and comments, just what all of us really want.
Wednesday, October 26, 2005 2:26:39 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Planning and Estimating for Agile teams#

Last night the wife and I went to the Agile Denver meeting to listen to Mike Cohn talk about planning and estimating for agile teams.  This was a very fun talk to listen too.  We played planning poker with others in our row and I have to say estimated has never been so fun.

I highly recommend if you ever have the chance to listen to Mike speak, go.  Oh, yeah he has a new book out too; Planning and Estimating for Agile teams.

Wednesday, October 26, 2005 12:38:12 AM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Code Camp: Monad and DI#

Today was only a half day for me at code camp since I’m flying home.  Peter Provost gave a great talk about Monad and MSH.  Monad is the engine and language behind the MSH shell.  Some very cool things, like building commandlets and basically being able to write .NET code.  I hoping for a refresh of Monad to be release with the Nov. 7 release of .NET 2.0.

The next talk was with Brad Wilson and Peter Provost talking about dependency injection.  This is great stuff and is also what we used in CAB.  CAB was the main motivation behind building ObjectBuilder.  ObjectBuilder is not a Dependency container itself but with little effort a DI container can be built on top of it, which is what they did for the presentation.  This is really good news for everyone wanting to use DI because now the is another option beside Spring and Pico.  At the moment the only way to get ObjectBuilder is with the CTP2 drop of CAB.  It is worth mentioning that ObjectBuilder is also a CTP within this drop.

Monday, October 24, 2005 1:59:42 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Goodbye CAB, for now#

Today was my last day on the CAB project and I get to go back home.  During my time working with the team I have had the opportunity to work with some of the smartest people in the industry.

It is now time for me to take the knowledge that I have learned from all of them and spread the word to others on a new exciting project.  Many thanks to everyone on the team for a great experience and building an awesome piece of guidance.

Be sure to keep looking for the final release of CAB and keep the questions coming about it.

Saturday, October 22, 2005 3:36:21 AM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Getting rid of VMWare Player#
So after my failed installs now I need to get everything off of my machine.  The first step is to extract everything from the VMWarePalyer.exe using the /a option.  This will extract the msi to a folder among other things.  Second is to use msizap.exe which is contained in the sdk I previously mentioned in the bin directory. 
Friday, October 21, 2005 5:28:08 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

VMWarePlayer released or not!#

As much as I want to be impressed by VMWare I have had less than stellar experiences.  I”m just getting over my second failed install of the new VMWare Player.  The install just freezes my machine (and fills the registry with stuff).  After I rebuild my machine next week perhaps I will try again.

I did try the beta of VMWare 5.5 but had problems because I was running it on my laptop and the whole mobile processor issue of the cpu changing speeds when it is unplugged.  This caused my VM’s to blue screen when restoring them  There are fixes for this, but I was just too lazy at the time to go through them.  Since this was a beta it was also spitting out debug info which slowed it down.

I was hoping VMPlayer would be the answer since I can convert vhd’s (it may be able to play vhd’s straight up but since I didn’t even get it installed…).  Maybe there will be better experiences to come but for now I’m not spending the money on VMWare and sticking with VirtualPC.

And now it seems the vmware site is down!

Friday, October 21, 2005 4:38:19 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Defining Project Roles#

After being on the CAB project I have seen that a structure where the Architect, Dev Lead and the Test Lead are all lateral positions.  This is quite the contrast to most companies where this represents the chain of command.

Personally I think having these three positions be lateral is very valuable and creates a  powerful team.  A developer and an architect are just different tracks in software development but one is not necessarily more senior than another.  This is often not the perspective in the industry from what I have seen.

Friday, October 21, 2005 3:06:19 AM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Performance Tools in VSTS#

Our performance tester for CAB has pointed out this blog post highlighting some of the perf tools in VSTS.

Thursday, October 20, 2005 6:06:42 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Usefull Tools: Msi Installer Tools Here#
This is so I don’t keep forgetting where to find this SDK.  There is useful installer tools contained in this.
Thursday, October 20, 2005 3:57:23 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Code first or process first?#

I’m a big believer in process first on a project though it seems that some think differently.  Since this is the second time I have heard the same statement I’m seeing this is a regular thing.  The jist of the statement is get your foot door and sell process later.  I know it is easy to just say yes to everything when a client talks but one thing I do know is the client is not always right!

A consulting company that comes in and says yes to everything the client wants is selling contractors,

A consulting company that comes in and tells the client the best way to do it is selling consultants.

 

Wednesday, October 19, 2005 3:00:21 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

When is it team building?#

As the year comes to a close it makes me think back to some of the really bad leadership decisions that I have seen.  The biggest one that just burns me even today is when a PM on a project demanded everyone go to a “team building” activity during a hard push in implementation.  Since I was the UI guy I was waiting on the server side to finish up some things.  When they did it was time for me to get to work, well that was when the team building activity was to take place.  So it worked for everyone else but screwed me.  I was told by the PM that I had to go.  Now that I look back on it I should of told that person to piss off because that is a bunch of bs.  No one should ever be told to go to a team building event.  In my case it resulting in me having to work the weekend.

Bottom line:  It is not team building if you have to force people to go.  Just like the war room philosophy, If people don’t want to be there don’t force them.  There is a time and a place for team building and it is not in the middle of an implementation push.

This also points out another thing that is just wrong.  PM’s are usually looked at as leaders on projects which they are not, they are managers.  These are two very different things and most of the PM’s I have met thus far are not very good leaders.

That is enough of my bitching and complaining for now.

Wednesday, October 19, 2005 2:58:17 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Seattle/Tacoma Code Camp is Coming!#
The code camp is this coming weekend.  If you are in this neck of the woods get your butt there.
Tuesday, October 18, 2005 3:20:33 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

CAB: Working with Workspaces and UIElements#

The following content applies to CAB CTP2.  You can find more posts by:

Brad Wilson:

Ed Jezierski:

Peter Provost:

  • Converting Monitors to Builders – Coming soon!

Eugenio Pace, David Hill, Daniel Cazzulino, Juan Elichirigoity

Workspaces

 

Between CTP1 and CTP2 of CAB the workspaces have not really changed.  The main changes are how to work with workspaces.  I will explain below.

 

There are three ways to work with workspaces.

  1. Use the WorkItemTypeCatalogService to register WorkItem types and then use CreateEachWorkItem method to create each WorkItem of a specific type or interface type.
  2. Find them by string using the Workspaces collection of the WorkItem.
  3. Pass in the workspace to the WorkItem using the constructor or a Show method

 

 

1.  WorkItemTypeCatalogService :  This service registers and creates WorkItems.  With this service you can register the WorkItem type.  Presumable the WorkItem implements an interface that defines its Show method and how many workspaces it takes.  The interfaces should live in a common assembly which other modules could take a dependency on.  This will limit the amount of inter module dependency.

 

e.g.

public class BankTellerWorkItem : WorkItem, IShowInShell

{

public void Show(IWorkspace sideBar, IWorkspace content)

                {

                }

}

 

public interface IShowInShell

{

                void Show(IWorkspace sideBar, IWorkspace content);

}

 

How is this helpful?  You can create these WorkItems based on the interface and “Show” them where and whenever you like.  Most importantly you can “Show” these WorkItems where you have an instance of the workspaces which mean no magic workspace strings.  The below code is inside a WorkItem and listens for an EventBroker event which is fired when a user is changed.

 

e.g.

private void UserChanged(object sender, EventArgs args)

{

                workItemTypeCatalog.CreateEachWorkItem<IShowInLayout>(this, delegate(IShowInLayout item)

                {

                                item.Show(this.sideBar, this.mainLayout.mainLayoutWorkspace);

                });

}

 

This is very similar to WorkItemExtensions but it happens when it is specifically told to happen instead of when a WorkItem of a specific type is created.  The WorkItemTypeCatalogService provides a lazy load type behavior for WorkItems.

 

2.  Even with the addition of the WorkItemTypeCatalogService there still is addressability of workspaces by name using the WorkItem.  The WorkItem has a Workspaces collection which climbs the hierarchy of WorkItems looking for the workspace.  So if a specific workspace was need you would just do something like:

 

IWorkspace workspace = workItem.Workspaces[“TestWorkspace”];

 

Retrieving workspaces like this should only be done for well known workspaces.  Well know workspaces may be published by the shell for WorkItems to use.

 

3.  And the easiest way to get a workspace to a WorkItem is to pass it in.  Workspaces can be passed in on a “Show” method or using the constructor.

 

e.g.

//Pass in workspace to the Show method

WorkItem childWorkItem = this.WorkItems.AddNew<WorkItem>();

childWorkItem.Show(topWorkspace);

 

//Pass in workspace into constructor.

ChildWorkItem childWorkItem = new ChildWorkItem(topWorkspace);

 

Each of these techniques has its uses. 

  • One is used for a late creation of WorkItems usually talking through interfaces.
  • Two is to find well known workspaces.  These well known workspaces are usually published by the shell.  This technique can also be used inside a module between WorkItems to locate workspaces.  If the workspaces are not considered well known refrain from accessing them this way across modules.

o       Three is used when inside a module and a WorkItem creates a child WorkItem and can pass the workspace directly.

 

Using the WorkItemTypeCatalogService provides a different statement from using workspace string addressability when talking about module initialization.

o       WorkItemTypeCatalogService:  ModuleInit says “Register these WorkItems so another can create and use them at a later time.”

 

e.g.

//In ModuleInit                            

public override void Load()

{

        // Register workitem so others can create it and use it.

        workitemCatalog.RegisterWorkItem<BankTellerWorkItem>();

}

 

o       String Addressability:   ModuleInit says “Give me these specific workspaces by name so I can Show these WorkItems now.”

e.g

//In ModuleInit

public override void Load()

{

        IWorkspace workspace = parentWorkItem.Workspace[“MainWorkspace”];

        ChildWorkItem childWorkItem = parentWorkItem.WorkItems.AddNew<ChildWorkItem>();

        childWorkItem.Show(workspace);

}


UIElements

 

UIElements have changed a fair amount since CTP1.  This is something we have put a lot of thought into and continue to put even more into.  UIElements now have four parts UIElementManagerFactoryCatalog, UIElementService, UIElementManagerFactory, and UIElementManager.

 

UIElementManagerFactoryCatalog:  A catalog of factories that are registered to be used with a specific type of item.  ToolStrips, ToolStripItem, MenuStrip, ToolStripMenuItem, and ToolStripItemCollection are already registered in the WinFormsApplication so there is no need to add them again.  Registering a new factory if done like below.

 

e.g.

//Param one is the type this factory will be used for

//Param two is the factory

catalog.RegisterManagerFactory(typeof(ToolStrip), new UIToolStripManagerFactory());

 

UIElementFactory:  The factory’s primary responsibility is to create UIElementManager’s.  These managers are created with the correct constructor for the type.

 

e.g.

//Sample Factory class

public class UIToolStripManagerFactory : UIElementManagerFactory

{

                protected override IUIElementManager GetTypedManager(object managedExtension)

                {

                                IUIElementManager manager = null;

 

                                if (managedExtension is ToolStripItem)

                                {

                                                manager = new UIToolStripManager((ToolStripItem)managedExtension);

                                }

                                else if (managedExtension is ToolStrip)

                                {

                                                manager = new UIToolStripManager((ToolStrip)managedExtension);

                                }

                                else

                                {

                                                throw new ArgumentException(Properties.Resources.UIManagerFactory_NoConstructor);

                                }

 

                                return manager;

                }

}




 

UIElementService: Main interaction point for registering “ExtensionSites” and adding UIElements.  Using this service it is possible to register new sites with the managed extension (e.g. menuitem), register a new site with a new manager, add new UIElements to a site, or remove UIElements from a site.

 

e.g.

Add new extension site.

//Items will be added to the fileItem’s parent (i.e. the menustrip).

//Resolves behind the scenes the type of the managed extension

//to create the correct manager using the factories registered with

//the UIElementManagerFactoryCatalog.

uiSvc.RegisterUIExtensionSite(“File”, fileItem);

//Items will be added to the drop down items of the fileItem.

uiSvc.RegisterUIExtensionSite(“FileDropDown”, fileItem.DropDownItems);

 

Add new extension site with a new manager.

//This should be very rarely used because the factories will create managers on the fly resolving by type.

//But if for some case you need a specific custom manager for a site you can do it this way.

uiSvc.RegisterUIExtensionSite(“File”, new UIToolStripManager());

 

Add a UIElement to an existing extension site.

customerItem = new ToolStripMenuItem("Customer");

ToolStripMenuItem returnedCustomerItem = uielementService.Add<ToolStripMenuItem>(“File”, customerItem);

 

Removing a UIElement from an existing extension site.

uielementService.Remove(“File”, customerItem);

 

Removing all items from an extension site.

uielementService.RemoveAll(“File”);

 

UIElementManager:  The managers are responsible for adding and removing UIElements.  The most impacting change is the removal of the locator.  UIElements are no longer addressable by Uri.  The main motivation for this is we did not want to have sibling WorkItems easily messing around with UIElements that were added by another WorkItem.  Now when working with UIElements either keep a reference to it and/or use commands.  The UIElementManager defines an “ExtensionSite” that it manages.  In CAB there are already managers for ToolStrips and MenuStrips.  Just register the new ExtensionSite using a name and the item you would like to extend using the UIElementService which uses these managers behind the scenes.

 

We have tried to hit most of the use cases for UIElements in the WinForms project so hopefully there will be very few custom managers to achieve the desired result from UIElements.

 

Monday, October 10, 2005 7:51:01 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

CAB CTP2 is out there#

The long awaited CAB CTP2 is out and ready for download.

In this download you will notice many significant changes in this release based on the community’s feedback.

Of the most notable is the addition of ObjectBuilder which replaces the old ComponentModel/ContainerServices project.

UIElements and Commands have also changed a fair amount.  These new changes should make using them much easier than the previous release.

There has been more designer support added (though I think devs should learn to write code instead of drag and drop).

There are many API changes to help usability and the team hopes you will enjoy the changes we have made.

Saturday, October 08, 2005 2:47:22 AM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

All content © 2008, John Luif
On this page
This site
Calendar
<November 2008>
SunMonTueWedThuFriSat
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456
Archives
Sitemap
Blogroll OPML
Disclaimer

Powered by: newtelligence dasBlog 2.1.8102.813

The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

Send mail to the author(s) E-mail

Theme design by Jelle Druyts