# Monday, 18 February 2008

Microsoft_Team_System_Logo I'm proud to announce a very exiting meeting for Februar: The guys at Systematic are going to tell us all about their experience with Team System. Topics for the meeting include:

  • General introduction
  • Configuration management
  • Continuous integration

Following that we'll some insight into the world of software engineering at Systematic working with CMMI level 5 and agile processes like SCRUM.

The meeting will take place February 27th 18:00 at:

Systematic Software Engineering A/S
Søren Frichs Vej 39
8000 Århus C.

Signup and more information

posted on Monday, 18 February 2008 11:15:49 (Romance Standard Time, UTC+01:00)  #    Comments [0] Trackback
# Wednesday, 06 February 2008

anug_logo_200x85 With the release of Visual Studio 2008, C# 3.0, and VB 9 in November last year we felt that it would be nice to get some information out there on what to expect of the new language features available in the new versions.

As always I started out the meeting by summing up what the core group has done since the last time around; we've been quite busy too. I'm very proud to announce that we've booked meetings at various companies around Aarhus until May. We do have a gap in April but I expect to put on a little song and dance about the MVC framework for ASP.NET.

IMG_1998 IMG_1999

IMG_2000 IMG_2001

IMG_2002 IMG_2003
IMG_2004

Future Meetings

So what have we got planned for you guys to enjoy? February will bring us a talk from the guys at Systematic where they'll tell us all about their experience with working with Team System with CMMI and SCRUM. Personally I'm looking forward to this one quite a bit as we're using Team System internally at Vertica as well; I know that many of you guys are too so I expect that a lot of very useful information will come from this one.

March brings us not one but two events: First there's our code camp for people who want to know more about ASP.NET where we'll continue building our blog application. I expect that we can accommodate approximately ten people and those attending will have to bring their own laptop. we'll do a full Saturday better our hands dirty in the code. More information on this will follow shortly so stay tuned.

Later in March we'll head back out to Scanvaegt where Henrik Kristensen will give a talk on his works with Workflow Foundation. He's been doing a number of POC applications and is very eager to share his experiences with the rest of us.

ASP.NET MVC Framework has garnered a lot of attention lately, but what is it and why should you care? I'll try and explain this with my talk on it in April. I'm doing an internal talk at Vertica this Friday and I figured that you guys would find it interesting as well. There are certainly some nifty techniques at play in the framework that I'm looking forward to sharing with you.

Finally Klaus Hebsgaard from Kristelig fagbevægelse will head up the April meeting with his talk about WCF. He's doing some very interesting work with WCF in conjunction with a large SOA project at KF and I know for certain that he'll have a lot to say about the topic.

Facebook

As an experiment we decided to do sign up for the meeting via Facebook. While it's been quite a success there are a couple of flies in the ointment: 1) Some people really dislike Facebook and outright refuses to use it. 2) Some companies actively block Facebook in their firewalls.

In the light of this information we'll not do exclusive sign ups on Facebook in future. Carrying forward we'll do Facebook sign ups primarily but also allow e-mail sign up as to allow everyone full access to the user group. Additionally we'll make sure that all relevant information will be available from the anug.dk web site.

Jobs

Interestingly we were contacted by a company owner who wanted to make our members aware of a job opening at his particular company. Our stance on this is that we won't advertise job openings in the interest of keeping our purpose clear and keeping a neutral position with respect to the companies kind enough to let us use their offices for the meetings.

Meetings Outside Aarhus

We've discussed the idea of holding meetings outside of Aarhus as a number of interesting companies exist in the vicinity. When asked though the members of the group indicated to me tat they weren't willing to travel too far outside of the city to attend our meetings. So we'll try and keep the meetings local as to not impose too much of a travel burden on the attendees.

Language Features in C# 3.0 and VB 9, Henrik Lykke Nielsen, Captator

The main attraction of the evening was of course .Henrik, Microsoft's RD for Denmark, and part owner of Captator.  I asked Henrik to give this particular talk because I know he's very fond of VB and I really wanted to see even attention given to both languages. It turned out though that when asked the attendees were interesting in C# 3.0 only so VB was mentioned in passing but the upshot of course was the fact that Henrik able to gauge the interest of the attendees and adapt his talk accordingly. Tip of the hat for that.

Henrik gave a very detailed talk on C# 3.0 and we even got into some IL discussions along the way which was a nice twist on the evening. I must say that I'm impressed with Henrik's deep knowledge on the subject having given a similar talk myself internally at Vertica I figured that I knew most of what he was going to say still I got a couple of nuggets of gold to take home from the meeting.

To understand many of the new features of C# 3.0 you need to understand what's already put in place in previous versions of the languages and again Henrik did an admirable job of getting everyone up to speed before moving on to the new features.

Slides are forthcoming as I'm still waiting to receive them from Henrik. While you're waiting for those why not head on over and take a look at his blog?

posted on Wednesday, 06 February 2008 21:32:18 (Romance Standard Time, UTC+01:00)  #    Comments [2] Trackback
# Tuesday, 05 February 2008

Commerce-Server-2007-Logo A while back a friend of mine posted a comment here asking me to describe what it's like developing with Commerce Server 2007. Initially I wanted to reply to him in comments but thinking more on it I really want to provide a different and real perspective on how Commerce Server is to work with as a product, a perspective in which I want to dig a deeper than the usual how-to and tutorials you see on the various Commerce Server blogs; mine included.

Check out part 1 Secure By Default where I discuss the security aspects of Commerce Server, part 2 Three-way Data Access in which I write about the various ways of getting data into your applications, part 3 Testability which not surprisingly is all about how CS lends itself to unit testing, part 4 Magic Strings Galore where I take on low level aspects of the APIs, part 5 Pipelines where COM makes a guest appearance in our mini series, part 6 which is all about getting your solution into production, and part 7 where I rip into the reference shop implementation: The Starter Site.

The Good Stuff

In this the final part of my mini series about developing Commerce Server I'm going to cover the stuff that I love about working with Commerce Server 2007. While I didn't start out with a particular roadmap for this series of articles I've noticed a trend when I look back over the posts: They aren't very positive about Commerce Server. Why is that? Does it mean that Commerce Server is a bad product? The answer to that eluded me for a while until our salesman pointed out a particular fact about engineers: Our job is to know the weak spots of the technology we're working with in order to produce the best possible solutions. While this is great trait for an engineer it certainly doesn't make for a great sales person :). I guess the reason for my negative slant stems from this fact: For me and my team to deliver the very best Commerce Server solutions we have to be constantly aware of any and all weaknesses of the product which is why I naturally gravitate towards that mode of describing the development experience.

So to answer the question posed above: Is Commerce Server a bad product? Certainly not, actually I enjoy working with a very mature platform which provides a lot of great features out of the box. Actually I've found myself in the fortunate situation of being able to tell a customer that, "yes we can do that out of the box", more often than not. I truly enjoy that part of my job because I find that customers are used to not getting anything out of the box if they're coming from the traditional business which started out on the web on a custom solution.

Actually I come across two types of distinct businesses when I go out and do Commerce Server work in the field: The business which primarily grew out of the web with the webshop at the core and the traditional business with the ERP at the center. As I mentioned above Commerce Server is a very compelling offer for the webshop-centered business because it provides a much more sound foundation than the custom built solution. The benefits for the traditional business are of course the same but interestingly I've found that Commerce Server is aligned very well with the way ERP guys typically think about a business. A good example of this is the rich way in which we can express business data in Commerce Server, in the areas of the ERP which concern a webshop we're able to not only match the capabilities of ERP systems but in some cases even surpass them, e.g. richness of the order schema and the way shipping is handled, the flexibility of the catalog, etc..

Were I to use a single word to describe Commerce Server it would be "flexible". Flexible in every sense of word as you can customize every aspect of the product to the suit the needs of the customer. Pretty the only limitation you'll come across is your own knowledge about the platform. With the right knowledge you can shape Commerce Server to suit the particular requirements of your customer which is why getting the right people working on your Commerce Server-project is essential for the success of it. You might argue that this is the case for all types of projects but I've seen how bad I project can go if the people working on a Commerce Server project lacks the proper skills to do so. The sound foundation I wrote about previously suddenly starts to look pretty wobbly and you end up in a situation where the platform is working actively against your business instead of with it.

So what happens if you get the right people working on your project creating the right architecture? Something akin to magic that's what. With the projects we've got going on right now I see one particular trend: The architecture that we're putting in place on top of Commerce Server leveraging the platform without working against it is actually opening up new avenues of possibilities for us as the projects move forward. Instead of feeling barred in by the choices we make I increasingly find that our solutions just support new requirements from the customer either "automagically", with reconfiguration of the existing system, or with very little modification to the system because the features were built on the sound foundation that is Commerce Server. That and of course the fact that I've got the privilege of working with the best damn e-commerce team out there :)

posted on Tuesday, 05 February 2008 21:21:13 (Romance Standard Time, UTC+01:00)  #    Comments [0] Trackback

Commerce-Server-2007-Logo In light of the success of the Aarhus .NET User Group on Facebook I went ahead and created a Facebook group for Microsoft Commerce Server for all of us working with the product. If you have an interest in getting in touch with people with deep Commerce Server knowledge please don't hesitate to join the group. Prominent people like Ryan Donovan and Max Akbar are already in there so why aren't you? ;)

Microsoft Commerce Server Facebook group

posted on Tuesday, 05 February 2008 19:42:14 (Romance Standard Time, UTC+01:00)  #    Comments [0] Trackback
# Wednesday, 23 January 2008

Commerce-Server-2007-Logo A while back a friend of mine posted a comment here asking me to describe what it's like developing with Commerce Server 2007. Initially I wanted to reply to him in comments but thinking more on it I really want to provide a different and real perspective on how Commerce Server is to work with as a product, a perspective in which I want to dig a deeper than the usual how-to and tutorials you see on the various Commerce Server blogs; mine included.

Check out part 1 Secure By Default where I discuss the security aspects of Commerce Server, part 2 Three-way Data Access in which I write about the various ways of getting data into your applications, part 3 Testability which not surprisingly is all about how CS lends itself to unit testing, part 4 Magic Strings Galore where I take on low level aspects of the APIs, part 5 Pipelines where COM makes a guest appearance in our mini series, and part 6 which is all about getting your solution into production.

The Starter Site

Ah the fabled Starter Site... When I look at my search logs for this blog I see that people are very interested in the Starter Site and are doing lots of searches for it. Ever since Commerce Server 2000 Microsoft has provided a reference implementation of a commerce site for developers to learn from. Ever since Commerce Server 2000 it's been and all-around bad idea to actually use the Starter Site in production. As a Commerce Server developer you'll cross paths with these guys so it's important for you to know what they're al about.

So is it still a bad idea to put the reference implementation for Commerce Server 2007 in production?Yes and no, while the Starter Site is a step up from previous reference implementations it's still not what I'd call production ready. The Starter Site provides great insights into the workings of the Commerce Server APIs but it's not exactly a shining example of web application architecture.

The Starter Site is done as a web site project in Visual Studio which by itself is not an issue. The problem though is that there is no separation between UI and application logic. All business logic is placed in the App_Code folder of the web site which means that it lacks reusability completely.

Additionally the code which is there lacks support for testing as well, all components are implemented directly on top of the CS APIs which as I discussed in part 3 Testability means that we have no means of creating unit tests for our custom code. Not only that but the entry point to the subsystems used is the CommerceContext which is initialized by a number of HTTP handlers during execution of the ASP.NET pipeline, this means that we're effectively bound to an ASP.NET context which in turns blocks the ability to test anything.

Now the abstraction provided for the Profile System does show some good ideas. Profiles are abstracted in nice type safe objects which in turn are mapped to the underlying Profile System by use of attributes. Great idea but I'd like to have seen the idea carried a few steps further. For instance relationships are implemented by a pattern that the developer needs to redo for every single property which reference another profile or list of profiles.

Oh and some corners are cut here and there: We have a nice abstract BaseProfile class which serves as the base for all profile implementations, perfect but in an especially grievous example a method in the BaseProfile is implemented with knowledge about one of its inheritors, see that's bad OO design right there.

Finally the Profiles which is most Commerce Server projects serve as the data store for domain objects are bound to ASP.NET like the rest of the business logic of the Starter Site meaning you can't reuse them in other contexts like winform apps.

All that said the Starter Site is a very nice running reference from which you can learn a great deal. There's no code like running code, all else aside the Starter Site is probably the best reference and source of learning Commerce Server especially if you're already familiar with earlier versions of Commerce Server.

Provided with the code base is the control gallery which is a collection of ASP.NET controls that you can use in your own site. They're implemented as server controls which means that they're easily transferred to other sites. That's ten points right there :)

So while the Starter Site is an exercise in bad web application architecture there are very good reasons for downloading it and taking a look at it. Learning is the obvious route but if you find yourself tight for time or money on your particular e-commerce project you can get some good results with the Starter Site as a foundation provided you take care and identify the weaknesses of the code base and rearchitect accordingly.

posted on Wednesday, 23 January 2008 20:42:01 (Romance Standard Time, UTC+01:00)  #    Comments [0] Trackback
# Monday, 14 January 2008

My favorite news reader of all times, FeedDemon, is now free for anyone to download and use. What makes this guy stand out from the competition is not the simple and easy to use UI, it's not the fact that you get a nice Hot/Not list of feeds, not the fact that you can subscribe to any quirky feed on the planet.

No what really makes FeedDemon shine and what made me cough up $29,95 having tried the product only a couple of times is the synchronization features. Simply put FeedDemon has made me use RSS more than I did in the past because I don't have to worry about reading my feed in multiple locations. Now to be fair Google Reader does provide the same feature but I simply can't bring myself to read my feeds in a web interface. With lots of information rolling by I need a nice work flow to process everything; while Google has done everything possible to make this happen in their web interface it's simply no match for a well designed desktop application.

To put it short, download FeedDemon, synchronize and be happy. Even if you don't read feeds in multiple locations you'll still have off site backup for your feeds ;)

posted on Monday, 14 January 2008 21:52:25 (Romance Standard Time, UTC+01:00)  #    Comments [0] Trackback
# Sunday, 13 January 2008

I'm starting to look into the ASP.NET MVC Framework and needed to download the CTP just now which is not all that interesting. What is interesting though is the fact that I was greeting with a dialog asking me whether I wanted to try the new Silverlight version of the MS Download site. Naturally I couldn't resist :)

Check out the MS Download Center beta done in Silverlight.

posted on Sunday, 13 January 2008 14:42:45 (Romance Standard Time, UTC+01:00)  #    Comments [0] Trackback
# Monday, 17 December 2007

Ever since beginning my work with Commerce Server it was apparent that we needed some way to link the disparate subsystem with each other in a uniform way. Sure there are lots of links between catalog, order, and even profiles out of the box but the problem with them is that they're all done in different ways.

My colleague Brian found an excellent solution to this problem by introducing a concept he calls Extension Profiles which is basically a profile you tag on to other data objects in Commerce Server. With this in place you can use the extension profile in a number of ways like mapping objects or extending non-extendable CS objects like ShippingMethods and Payments.

I've been bugging Brian to write about them for a while and during the weekend it seems that he finally got around to it.

Check out How to extend Commerce Server Payment Methods and Shipment Methods

posted on Monday, 17 December 2007 08:29:05 (Romance Standard Time, UTC+01:00)  #    Comments [0] Trackback
# Friday, 14 December 2007

Commerce-Server-2007-Logo A while back a friend of mine posted a comment here asking me to describe what it's like developing with Commerce Server 2007. Initially I wanted to reply to him in comments but thinking more on it I really want to provide a different and real perspective on how Commerce Server is to work with as a product, a perspective in which I want to dig a deeper than the usual how-to and tutorials you see on the various Commerce Server blogs; mine included.

Check out part 1 Secure By Default where I discuss the security aspects of Commerce Server, part 2 Three-way Data Access in which I write about the various ways of getting data into your applications, part 3 Testability which not surprisingly is all about how CS lends itself to unit testing, part 4 Magic Strings Galore where I take on low level aspects of the APIs, and part 5 Pipelines where COM makes a guest appearance in our mini series.

Deployment

When time comes to deploy your application we've got a number of options when it comes to custom apps crated purely on top of the .NET framework: Installers, xcopy deployment, automatic build processes, etc.. When it comes to Commerce Server the deployment procedure is a bit more involved but aspects of the deployment are supported by some interesting tools as we'll see in a minute.

Commerce Server comes with a handy tool for publishing your application in a single file called a PUP file. This works great the first time around and greatly simplifies first-time deployment unfortunately it only works for the initial deployment subsequent deployments are more involved because manual deployment is required unless you're fortunate enough to be working with the enterprise version.

Let's first deal with the manual deployment because that's frankly the most fun to write about :) Commerce Server is split across a number of different subsystems each running on top of a separate database. Each subsystem has different deployment requirements and steps that you'll need to follow. I won't bore you with the actual steps here just know that deploying a Commerce Server application requires a lot of steps and I do mean a lot involving a number of disparate tools.

Security requirements of authorization manager further complicates deployment because the business data is protected by an additional layer of security different from what's found at the system level. All this has to be created either manually or via a command line tool provided with the product.

One alleviating factor to the long list of manual deployment steps is the fact that Commerce Server is split across a number of different databases, one for each subsystem. You can isolate changes to each subsystem thus easing deployment by the fact that you can deal a subset of your Commerce Server application at a time.

It becomes really interesting when we start talking about the enterprise version which brings another tool to the table which will automate deployment of most of your application: Commerce Server Staging (CSS). The staging tool allows you to move business data and files from one server to the next. this means that you can enforce pretty much and hands off policy on your production server and only have your business users work in a staging environment for creating and testing purposes.

The only caveat to staging is that it doesn't support profiles, you can however use a more crude approach to deploying your profiles automatically. Notice that I wrote business data and files. You can basically have CSS move binary files to production and have it execute a command pre and post transfer which could be a bat file, a custom executable which essentially makes CSS a very unique and useful tool not just in conjunction with Commerce Server.

Just think about what can be done with a tool like CSS with a regular old ASP.NET app. You could basically have CSS move your compiled ASP.NET app and SQL script to production, have it move the assemblies in place, and finally execute your SQL scripts. Voila automatic deployment, only downside is that you need an enterprise version of Commerce Server around :) I really think that Cactus should look into making this a standalone tool.

posted on Friday, 14 December 2007 07:00:06 (Romance Standard Time, UTC+01:00)  #    Comments [0] Trackback