^(?:[^$]*)$ --Matches everything, captures nothing : NetConfigurationManager News Feed 

Because of the lack postings on this weblog, below is a little heads-up on whatever I have been doing recently.<o:p></o:p>

During the second half of 2006 I’ve been fairly busy implementing a “software factory” strategy (whatever that means J) for one of the bigger consultancy companies based in europe. This certainly was a very interesting (and otherwise valuable) experience. Even though I can’t share any internals on this work, I should be able to do a post or 2 on software factories in general (and whatever I think makes sense in this ballgame). Ever since “The software factories book” got published, this has been a very interesting subject for most companies doing software development.
The basic principle is to gain productivity manufacturing software, and from what I’ve seen around (some companies being more successful than others) this promise seems to hold. <o:p></o:p>

At this moment I am involved in the development of Enterprise Library version 3 – As most people in the Enterprise Library community know - Tom Hollander’s blog is probably the best source for news on whatever we are doing (or plan to do) in this release. Also; the Enterprise Library community has moved to its new home at CodePlex– where you can download our first CTP of version 3 and discuss the latest bits in one of the forums.<o:p></o:p>

.NET Configuration Manager development is currently on a hold – My plans to “Configure the world!” have not faded –but because of the dependency of this project on Enterprise Library 2 (of which currently a successor is being developed) and time constraints, I decided to put this project on hold. Apologies for being such a bad host to this community. Eventually I hope this is all for the better, since Enterprise Library 3 should contain new facilities for the community to do this type of development.<o:p></o:p>

Aspect Oriented Programming – As some might know, I am very passionate about Aspect Oriented Programming. Even though this programming technique is rapidly gaining acceptance in the Java communities, Microsoft developers have seldom heard about AOP –or even worse: think of it as being evil. Since I actually share many of the concerns surrounding AOP, I decided to embed my own Aspect Oriented Programming environment into the Visual Studio IDE. This environment aims at having all the bells and whistles Microsoft developers are used to work with and tries to mitigate most of the concerns surrounding AOP. I currently have a fairly stable beta of this environment, that builds on top of this previous proof of concept. More on this will definitely follow!<o:p></o:p>

The first of august has passed and the winner of the 'help me find issues'-contest  (and the US$ 100) is... Dfriedel.

Dfriedel has some good suggestions from a sys-admins viewpoint including:
    1) Automatically backing up the configuration file before saving it
    and 2) Having the tool remember which configuration files were opened last time.

Also thanks to all the others that contibuted issues to the CoMan project!

Dfriedel please contact me in order for me to get you your price.

As soon as time permits I'll schedule the next release of CoMan, so stay in tuned...

Bug bashing the .NET Configuration Manager for the past week or-so has lead to interesting insights:<o:p></o:p>

  • RouteCoder, who found a bug in the .net framework itself (the entry in LadyBug can be found here)<o:p></o:p>
  • dfriedel, who had some insightful feature requests that make a .net sysadmin's day-to-day life easier.<o:p></o:p>

In about two weeks I'll you know who earned him/herself the us$100, meanwhile I'll be spending my time in (what I hope to be) one of Europe’s most beautiful countries: Slovenia. Looking forward to hiking, kayaking and rafting through the Alps, as well as camping at one of the many uninhabited island's slightly to the south in Croatia (and laying in the 30C sun).

Afterwards I'll try to look into making a new release of CoMan, in which I’ll try to include the remainder of system.web's configuration schema and as much feedback as I can.

Later!

To gain better insight in issues people have when using the ".NET Configuration Manager" I decided to give away USD $ 100 to the person that reports the most/best issues in the Issue Tracker on the SystemWeb preview-release.

Don't worry, there's enough issues in there.... it is a preview release :).

...but why not send me the couple of issues you run into when evaluating the tool.

(This 'contest' ends by the 1st of Augustus.)

I've put out a preview release of my ".NET Configuration Manager" on its CodePlex site.

This gives you the possibility to manage system.web configuration in a similar way you already could with Enterpise Libraries "Configuration Console".

Cool screenshots can be found in my previous post, But why not visit the Installation page on CodePlex.


Unfortunately, some parts of web.config cannot be managed in the tool quite yet... :(.
These (and other issues) can be found in the Issue Tracker.


Before starting the development of a general purpose configuration management environment, I wanted to take my experiment with WCF a little further…<o:p></o:p>

<o:p> </o:p>

I not only wanted to proof myself able to manage big configuration schemas in EnLib’s configuration console, I wanted to have similar configuration support I had developed in my EnterpriseLibraryExtensions.<o:p></o:p>

<o:p> </o:p>

This time around the configuration-schema of choise was: system.web<o:p></o:p>

<o:p> </o:p>

I do not not have a release ready quite yet, but here’s to wet your appetite:

<o:p></o:p>

<o:p></o:p>


(Validating System.Web configuration)


(encrypting parts of a web.config file)



(managing configuration-differences in deployment scenarios)

In order to realize my ambitions and create a configuration management environment for .NET 2.0 it would be crucial to:

1)      Be able to manage big configuration schema’s
2)      Have a generic mechanism to add configuration support for configuration settings, with minimal effort.

To meet the first requirement I needed a big schema to get my hands dirty on: Windows Communication Foundation.

The second requirement was a matter of implementation…

Using EntLib’s Configuration Console as a host for the configuration editor gave me a true kick start, but also bound me to an API in which every ‘configuration node’ was defined in more than 100 lines of code, just for the graphical representation.

In EntLib’s Configuration Console a ‘configuration node’ is shown in a treeview and represents a part of the configuration schema you are editing. The ConfigurationNode defines “Configuration properties”, “Validation rules” and allows for registered commands to perform tasks on it.

With around 50 configuration nodes within Wcf configuration schema parts I wanted to support, typing 5000 lines of code just to draw a graphical representation wasn't going to cut it in the 5 days I was able to spend on this demo.

Please keep in mind that this never was a requirements for developing Enterprise Library, I am basically ‘misusing’ a tool that was developed to manage Enterprise Library’s configuration schema.

Writing a generic baseclass for all configuration nodes took about a day’s work. And was defined as follows (slightly simplified)

[TypeDescriptionProvider(typeof(DelegatedTypeDescriptorProvider))]
public abstract class GenericConfigurationNode<TData> : ConfigurationNodeWithAutoName, IDelegatedTypeDesciptorAccessable,
ISitedConfigurationNodeSink
{
TData _data;

public GenericConfigurationNode(TData data, string
nameProperty)
{
    _data = data;
    //...
}

public TData TheData
{
    get { return
_data; }
}

public Dictionary<string, List<Attribute>> AttributesByPropertyName
{
    get{return
GetAttributesByPropertyName();}
}

protected abstract Dictionary<string, List<Attribute>> GetAttributesByPropertyName();

}

Please note:
1) The type argument allows for a type to be passed that defines the properties that should be edited in the configuration tool (typically a derivement of ConfigurationElement or ConfigurationSection).

2) The virtual method GetAttributesByPropertyName allows a derivement of the generic node to add information to the properties shown in the grid.

3) Deriving from the baseclass was all i needed to create a graphical representation for a configurationnode and now took ~5 lines of code (instead of ~100)

Writing configuration support for Windows Communication Foundation took me an additonal 4 days of work (including some wizards, validation, pretty icons and other nice-to-demo-ables).



<<binaries attached>>

After having my share of success with developing the “Enterprise Library Extensions”, I started thinking about how to take this further.... and conquer the complete .net configuration schema!
<o:p> </o:p>

In the past months I silently developed 2 ‘proof of concepts’ applications to prove this point:

 

From feedback on my blog (and from working on the above), I learned a great deal about what is valuable in terms of configuration management and how to build a tool that allows developers to have a similar experience managing configuration across the complete .Net framework 2.0.

<o:p>This should well be possible given that the new System.Configuration namespace in .NET 2.0 makes ConfigurationSections self-describing in terms of schema and validation. 

</o:p>.NET Configuration Manager<o:p></o:p>

My current ambition level is developing a tool that allows a developer to manage configuration stored in an arbitrary ConfigurationSection build in .NET 2.0 (yup, that includes a ConfigurationSection developed by yourself).


To reflect this new ambition, I am rebranding this pet-project “.NET Configuration Manager”(or “CoMan” for intimae).

<o:p> </o:p>

Kudos to the CodePlex team for setting me up with a workspace at which I will continue development and will be the place for collaboration, new releases, documentation and feedback. The workspace also contains a newsfeed aggregated from this weblog.


Feel free to take a first look at: codeplex.com/Wiki/View.aspx?ProjectName=CoMan

Stay tuned for more!

 ^(?:[^$]*)$ --Matches everything, captures nothing : NetConfigurationManager News Feed 

Last edited Dec 7, 2006 at 11:16 PM by codeplexadmin, version 1

Comments

No comments yet.