dashCommerce


I’ve never met Miguel de Icaza, but I found this interview and it is quite possibly the most intelligent interview I have listened to in the last few years. He’s an extremely “balanced” individual, fair and accurate. I like that. No, I don’t like it, let me re-phrase: It’s important to me. :) If you are looking into Mono and want to get a feel for the guy behind it, then this is the interview you should listen to.

Wow.

Note: Pay attention to the part about the Mono compiler being a service to allow dynamic C#. Now. Today.

DotNetKicks Image

In an nutshell the plan is to do 1 or 2 releases that tighten up the existing code base in 2009. We won’t do too many drastic things as there doesn’t appear to be a need based on the community feedback. There are some things here and there, but overall the feedback has been overwhelmingly positive.

What does it mean in the not-so-near term? Well, dashCommerce is going to move towards an enterprise solution. What does that mean? It means a lot of things, but mainly it means we are going big. Huge. Enormous. :) Why are we going to do that? Because my spidey sense is tingling. And I’ve been fortunate enough to see things recently that I have not seen before and the end result of that is a focus on going enterprise with dashCommerce. The enterprise edition will also have a more liberal licensing model – the kind that makes developers happy. :) More on that to come. :)

We are also going to focus on making Mono a first class, supported platform for dashCommerce. What does that mean? It means dashCommerce will be cross-platform: Windows, Linux, OS X, and BSD. Why? Well, we need a broader base and being able to run only on Windows is a limiting factor. It’s the same reason people program in Ruby, PHP, Perl, etc. – they can run anywhere. Will this piss off Microsoft? Dunno. I doubt it, since they made it possible. :) I think we will also see a huge upside from a community that is well experienced and entrenched in the open source world as we bring in developers from the Linux world. (fingers crossed)

I’d love to hear your thoughts on the direction we are taking and if you have any pointers, I’d love to hear those as well.

Oh, one last thing, I want to make the engineering of dashCommerce v.Next very transparent, so I want to do some screencasts as we move through the process. I’d like you to be a part of that. I’m looking for a broad range of talent, skill, etc. So if you think you have something to contribute, let me know and we can set something up. If you are interested in sponsoring the development of dashCommerce v.Next, please drop me a note here or send me an email or PM me in the dashCommerce forums (user id chris.cyvas).

Onward and Upward! :D

DotNetKicks Image

Here you go.

 

Considering they just released 2.2 not too long ago, and judging by the commit rate, they seem to be moving along quite well.

 

Now if only I can get into the mix a bit . . .

DotNetKicks Image

I’ve been digging into Mono a bit. The thing that is taking most of my time right now is looking at the libraries I would like to use for dashCommerce v.Next to see if they might work on Mono, using the Mono Migration Analyzer. So far, things are looking ok, but there are definitely some challenges. But, let me just say – this is a good thing:

 

fubuMVC_MoMA

This was an analysis of FubuMVC.

DotNetKicks Image

MEF is the Managed Extensibility Framework, which is a project out on CodePlex. The aim of the project is to allow greater reuse of applications and components. Microsoft has said that they will be using it in the next rev of Visual Studio – so there’s some buy-in there. :)

In dashCommerce we allow you to drop in your own providers for Tax, Shipping, and Payment. There are others coming, but one thing that seems to be tripping people up is how, exactly to pull that off. Now, I think it’s pretty darn easy, but I built it, so it makes perfect sense. ;) In addition, people are doing some pretty amazing things with dashCommerce and the application is growing – quickly. And there is a ton of room for additional functionality and flexibility.

With that in mind I started playing with MEF to see what the basic facilities were. And I had something in mind that I wanted to test right off the bat – dropping assemblies into the bin directory and see if they would auto-magically appear for use by the application. I built a windows service a few years back that allowed you to do just that – it was pretty slick, but I never went any further with it. Well, MEF allows us to make the shift from statically compiled applications to dynamically composed applications. There is a lot of power there. A lot.

So, with my minimal goals in mind, I set out to create a simple Cashier application that would try to charge something (actually, it doesn’t charge anything, but it says it does). On the first pass through, there are no classes that implement IPayment so it looks like this:

 mef-1.gif

If I then browse the solution and drop the Payment assembly into the Cashier\bin\Debug directory and press the space bar, I will see this:

mef-2.gif

You can see that without stopping and restarting the application, it has recognized that I have dropped in an assembly that has a particular type of export in it:

  [Export(typeof(IPayment))]

I can then browse to the Authorize assembly and drop it into the same location and press the space bar once again and I see this:

mef-3.gif

Now it recognizes that it has two classes that implement IPayment and it is exercising the Charge() method on each of them. Now, if we couple this with dropping the configuration controls into a specific location, we will get rid of the registration process that currently has to happen in dashCommerce and we will be on our merry way to composing dashCommerce in a highly flexible way! Very sweet!

[UPDATE:]

I did try to upload the sample solution, but WordPress doesn’t allow the uploading of .zip files. So, I had to do a little thing to get it to work. You can get it here.

DotNetKicks Image

My friend Corey Haines recently embarked on an interesting experience. He has spent the last three weeks traveling around the central midwest pair programming with people that would put him up for a few days. I’ve been watching the videos and the twitter traffic on the experience with real admiration. This apparently has caught the eye of quite a few folks as there is a write up on InfoQ about Corey and his experiences.

This really captures the essence of the best part of programming – programming with others. And, I think it highlights some of the disappointment I’ve had recently with my own programming experiences.

When I started programming, I had just come from about 6 years of traveling around. The bulk of 2 years I spent traveling around, doing road trips and working in Yellowstone National Park. That was followed by 4 years in the U.S. Navy on the USS Normandy – a guided missile cruiser. At the time, the Normandy was considered one the best CG’s on the east coast, which means we got to spend a lot of time at sea and traveling. After the navy, I was finishing my degree at a small university here in Cleveland – John Carroll University. I was pursuing a business degree with a concentration in business technology. That resulted in me literally falling into programming. I was taking a course in database design which dovetailed into some web work that I wanted to do. My interest in the topic was noticed by one of my professors and when he took on some side work, he asked me if I would like to do the project with him. Looking back on the following six months, I realize now that we spent a good portion of those six months pair programming. It started with me watching over his shoulder and trying to keep up with what he was doing. Over time, I started to get it and at the end of the six months, we were swapping turns at the keyboard, while the other focused on the task at hand.

I had no idea that what we were doing was so “cutting edge”. :) It was a practical example of him trying to teach me so that I could take on the load and earn my portion of the contract.

I’ve also been trying to think about how I want to go about creating the next version of dashCommerce, and I think I would like to take some inspiration from Corey and pair program as much as I reasonably can. I’d also like to capture as much of that as possible in some screencasts and put them up for review by others.

So, who will I pair program with? Well, hopefully, I’ll be able to convince some of the core members of dashCommerce to do this with me, but I also want to do it with members of the community that have an interest in trying out pair programming that may not have an opportunity to do it in their everyday life. So, if this sounds like something you would be interested in, please drop a comment here and I’ll set something up with you. I figure we can do it over Skype and with Microsoft SharedView. I’ve got Camtasia installed to capture the screen cast stuff and I figure we can do 1 or 2 hour sessions and then distill out of that some smaller screen casts that capture the best moments of the experience.

My plan is to start the next version of dashCommerce the 2nd or 3rd week of January, so if you are interested, please drop me a note.

I wanted to mention that there are some new tools and utilities over at dashCommerce.com. There is the new YocuTeem Per Order Shipping Charge provider written by forum member YocuTeem. I know he’s got a bunch of other stuff cooking, so keep your eye on YocuTeem.

YocuTeem Per Order Shipping Charge Provider

This shipping provider, brought to you by dashCommerce forum member YocuTeem, extends the shipping provider model of dashCommerce by allowing your dashCommerce website to charge a flat rate per order for shipping.  This shipping provider allows you to setup many different shipping options and charge one flat rate for shipping for your orders.  The end user selects the shipping option during checkout.  For example, the following two shipping options are setup by default when you install this shipping provider:  USPS Domestic ($5.00) and USPS International ($5.00).  
The shipping provider is easily configured via the Shipping Providers section of the dashCommerce admin website.

Also, there is a new category of products called Utilities. It is here that you will find the Jumpin Pages Export Tool.

Jumpin Pages Export Tools

This utility brought to you by Jumpin Pages LLC, allows you to export your inventory into Microsoft Excel exports for eBay File Exchange, Google Base (gBase), Shopping.com and Yahoo Shopping formats. 
You will be able to take the Google Base and Shopping.com files and immediately turn around and upload them into their systems.  The eBay and Yahoo files will need minor additional information, but will quickly get you listed.  There are links to the above respective provider’s signup pages for quick reference.
Also included are the reference files for each of the above exports so that you can add other columns that may not be as common.
This export utility can be installed in about 15 minutes by following the detailed installation instructions that are included in the package.

This is probably the most exciting part of running dashCommerce for me. I get to watch people take dashCommerce and build on top of it, beside it, and in the process, make the product better by offering very reasonably priced functionality. Good stuff!

music note While writing this, I was listening to "Lullaby" by The Cure

DotNetKicks Image

I’ve been thinking about the dashCommerce security model – or lack thereof. :) Sure there is standard security, but what I want to be able to do is identify certain course grained operations and apply an authorization rule to it. That rule can then be configured and assigned to a role during application configuration and then modified at runtime as well.

For instance, maybe I have a “Create Product” authorization rule. That rule may only be configured for the Administrator role by default. But suppose there is a situation where I would like my vendors to be able to add product’s as well. I can see all sorts of situations where I would like to add additional rules to the application and assign these authorizations to them at runtime.

Also, considering the application is highly extensible, there are situations where I may drop in a new assembly and I would want any of the course grained authorization operations to automagically appear in my admin UI as authorizations to assign.

Sounds like something someone out there should have solved by now, but the only thing I see that is close to it is the Security Application Block in the Enterprise Library and that requires a code check. I’d rather see something like an attribute or something similar since dropping in an assembly, we’ll have to interrogate it dynamically for it’s operations and their respective authorization demands.

Is there anything out there that does this? Any guidance from anybody on do’s, don’ts and avoids?

music note While writing this, I was listening to "Panther" by Ultramarine

DotNetKicks Image

I am struggling with some things for the next rev of dC. Part of me wants to really geek out with it and do some neat stuff (I’m a little bored). But it is stuff that I consider neat – I am not sure the community will. I think with dashCommerce 3.0 we hit a bit of a sweet spot (as I documented here, here, and here) with how the application was implemented. It’s not perfect, by any means, but it was a good starting point and it resolved a ton of old issues that we had in it’s previous incarnation.

We need a better separation of concerns, a better / cleaner API, and some other stuff. That’s what we need, regardless of what we decide to do. But what I would like to do is move to a stronger SOA approach, which means using something like nServiceBus. And I’ve been looking at MEF for the extensibility of the application. I’d also like to create the public and admin portions of the site as two separate web application projects.

Why do I want to do these things? Because I would like to get dashCommerce to a place where it could scale to work in a web farm environment and I think these things will go a long way to helping it. nServiceBus is reported to handle 600 million messages in an hour based on their particular scenario – which is highly dependent on how they did things, but it gives you an idea of what I would like to be able to target.

Think HUGE.

One other thing I would like to do with the next rev is change the licensing somewhat. Basically what this will amount to is that all of the “framework” assemblies (including Store and Content) would be licensed under the MIT license, while the web application projects would still be licensed as they are now. I’d like to get some more community involvement in the framework side things and I think our current licensing makes people a little skeptical / suspicious of us. :) I think if we open up the framework side of things, then we can build out a stronger framework for any e-commerce application, regardless of how the UI is implemented.

Now, that is what I would like to do. The alternative is to keep working on dC as it is, making some nice changes on separation of concerns, better API, loose coupling, etc. But keep it focused on small / medium sized sites and let it progress in a more traditional manner.

What do you think?

music note While writing this, I was listening to "Beautiful" by Damian Marley & Bobby Brown

DotNetKicks Image

I’ve been fairly quiet over the last few months. Most of that is due to the new addition to my family (my new son, Harrison), but some of it is because I am in mad scientist mode. That entails a ton of reading and prototyping. I’ve been taking a close look at the available ORM’s in the market – and trying to understand a lot of the arguments / concerns around the ADO.NET Entity Framework – namely persistence ignorance and the like.

I’ve also started taking a good, close look at NHibernate again (thanks Yitzchok, for prodding me). Back in 2005 / 2006 time frame I had looked at NHibernate and I wasn’t diggin’ it. We were looking to use it as the base data access framework in our product and I was pretty well against it at the time. Things change. It has matured (as have I ;) ) and it looks to have a lot of upside. So I am strongly considering it for the direction we want to go in with dashCommerce. I am watching what the Entity Framework guys are doing, but their solutions to POCO usage and object state maintenance puts the burden back on the developer and I’m not digging that. We’ll see how it shakes out, but right now, I’d say NHibernate is the front runner. Thoughts?

I’ve also been looking at the Managed Extensibility Framework. dashCommerce is going to get bigger and bigger and I’m looking for ways to manage that growth and to allow developers to extend the base product fairly easily. The MEF is still pretty young, and I haven’t gotten into the weeds with it yet, but it does look promising so I’ll keep you posted on what I find. If anyone out there has some in the weeds experience with the MEF, I’d love to hear it.

One thing I would like to do is capture some of the refactoring work in some screencasts. It seems to me this might be pretty neat and valuable to people. Greenfield development is always pretty easy, but how do you take a system like dashCommerce and refine it to have a better separation of concerns, a better SOA architecture, etc.? Does that sound like something you might want to see? No promises, as those things take some time to prepare, but I’d like to hear if you think there would be value there?

Happy Holiday Season to Everyone!

music note While writing this, I was listening to "Northern Downpour" by Panic At the Disco

DotNetKicks Image

« Previous PageNext Page »