Open Source


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

Yep, that’s all it took. Installed as a VM. openSUSE is very nice so far.

DotNetKicks Image

I’ve been in mad scientist mode for a few months now and especially over the last few weeks, feeding off of every interesting thing I could find / read.

It’s the binge. You know it.

You know how it usually ends up – a million ideas, too much to do, and not enough time in the day to accomplish any of it.

It’s the binge. You know it.

One of the ideas got me out of bed and doing internet research in the wee hours of the night. It’s a good idea and it has legs.

It’s the binge. You know it.

I’ve also been looking at all sorts of things that I haven’t looked at in years – Linux distro’s (my 2000 experience was shoddy at best, so I put it on the back burner ;) ) – I am currently looking at CentOS and Ubuntu server. Thanks to some of the folks I follow on twitter (faithfulgeek, coreyhaines), I was able to get some guidance.

Why was I looking at Linux distro’s? Because I was looking at Mono.

I also spent some time reading on Google Chrome – it’s a great idea and one that is lost in all the stock browser quips you’ll find. Essentially, my point is that making a comparison of Chrome to IE is not really an apples to apples comparison and any comparison like that just dulls the effectiveness of something like Chrome. Check out the cartoon story on Chrome.

I’ve also been looking at different frameworks for development. I’ve been checking out different parts of the Castle stack as well as CSLA. Then using MoMa to see how Mono compliant they are. :)

And i installed Ruby and Rails because I was intimidated into doing it . :)

Oh, and I’ve been re-vamping my blogroll. I’ve had some unsavory experiences that have forced me to put an increased focus on quality (note to self: stay away from bloggers that use phrases such as meh, teh, and yo). I try to filter bloggers in and out pretty regularly, but recently I’ve gone on a huge purge and clean and focusing on finding high quality bloggers that talk about the things I want to read about. The good news is that I now have a more focused blogroll. The downside is I found all sorts of stuff. Turns out the internet is BIG. Who knew!!?? ;)

I’ve been reading lots of books / articles as well. Books / articles on Ubuntu, Ruby, Getting Real, Expert C# 2008 Business Object, Pro LINQ, WPF Unleashed, and a bunch more. I haven’t made much head way on any of them because, as it turns out, my kids like having me around a lot and vacation time is “Play Time with Daddy!!” time. 12 days off is nice, but not nearly enough to do all the things I was hoping to do.

It’s the binge. You know it.

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.

There are some things that I WANT desperately to get right before we start on dC v.Next and one of those is documentation. I am talking about conceptual, code examples and and API documentation. The API documentation is pretty well taken care of with some xml comments and some discipline, but the code examples and conceptual stuff is not so easy to get in there as part of the development process.

Ideally, the build process will spit out the documentation – all of it into one help package. The guys as Mindscape have briefly documented their documentation process, which I may use, but I was hoping to avoid the Ruby stuff.

I found the DocProject project, but it’s still a very manual process.

Does anyone out there have any good processes in place to take care of this? Are there any OSS or commercial applications that make this easy?

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 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

« Previous PageNext Page »