I would like to welcome Boze Systems to the dashCommerce community! They are now offering their First Data Global Gateway Payment Provider for sale on dashCommerce.com. Check it out!
July 10, 2009
Boze Systems First Data Global Gateway Payment Provider
Posted by chriscyvas under Open Source, dashCommerceLeave a Comment
July 9, 2009
dashCommerce 3.2 Final Released!
Posted by chriscyvas under Open Source, dashCommerceLeave a Comment
I went ahead and pushed the dashCommerce 3.2 Final Release a few moments ago. You can find both the Web Ready version and the Source version in our downloads section at dashCommerce.org.
Enjoy!
-Chris
June 3, 2009
dashCommerce: State of the Union Address 2009
Posted by chriscyvas under Open Source, dashCommerceLeave a Comment
It’s been almost a year since the last dashCommerce State of the Union address, so I guess it is time to evaluate where we are, what’s happened over the last year, and get a feel for what could happen in the future.
We just pushed the dashCommerce 3.2 RC this past weekend, which has a lot of enhancements, bug fixes, features, etc. I debated on whether or not it should be a 3.5 release, but I figured 3.2 was just fine. The point, is, don’t think this is an itty bitty release – there is quite a lot in there! So, go check it out and log any issues, bugs at CodePlex.
So where is dashCommerce? What’s new and interesting? For those of you that are catching up to where dashCommerce has been, then you should probably check out a few posts, where I cover such things as increasing sales trends, Xerox’s use of dashCommerce, and increasing membership. The good news is that things are even better than they were last year! The numbers that we are able to get from PayPal show a continued trend upward (~$3MM / Qtr.), our membership continues to grow (33,000+), our site traffic is almost double what is was when I took over the project, we are still one of the most popular open source applications in the .NET space, and . . . wait for it, wait for it . . . the U.S Government recently contacted me to purchase a “special” version of dashCommerce. Yeah, you read that right, dashCommerce is being used by the U.S. Government!!! The contracts have been signed, the code delivered, and all is good in the world.
Anyone that is an active member of the community should take great pride in knowing this. I know I do.
One of the first projects to be delivered is going to be for the U.S. Army. This is nice for me because I am also a veteran of the U.S. Navy, so I take a lot of pride in knowing that something I had a large part in building is being used in this way. There is a lot of satisfaction there.
So, that is pretty much where we are. All things are in pretty good shape.
March 17, 2009
The Beauty of Fluent NHibernate Automapping
Posted by chriscyvas under Coding, Open Source, dashCommerce[10] Comments
For the next rev of dashCommerce, we are going to be using NHibernate and so I have been exploring ways to both: 1.) get up to speed with NHibernate and 2.) the fastest way to get started working with NHibernate. I had seen all of the articles on Fluent NHibernate, but to me it just looked like a C# version of Xml. That’s not a ding against, it, but when you have system with about 50 tables in it, well . . . typing is typing.
But, one thing that caught my eye when I started looking around the Fluent NHibernate project was the AutoMapping feature. This feature will allow you to set up some conventions for use against your database and it will attempt to generate the mapping files for you. That’s pretty slick.
But would it work well enough to actually use since Fluent NHibernate is still pretty young?
Well, it worked well enough for me.
So, here is what I had to do to pull it off against the dashCommerce database.
When I started trying to get the mappings to work against a bunch of dashCommerce tables, I was getting some errors about not being able to map certain entities. So, as soon as I saw that, and recognized that the exception wasn’t going to help me identify what, exactly, the problem was I dug into the code and ended up changing this very simple line in the ClassMap file (public void ApplyMappings(IMappingVisitor visitor)) around line 195: Debug.WriteLine(writer.ToString()); to Console.WriteLine(writer.ToString()); I was using a small console client with some sample queries in it, so this was best for me at the time. But, once I did that, I was able to quickly look at that output and determine the cause of my pains.
To be exact, they were all related to a few key things:
- The AutoMap functionality relies on conventions to determine the structure of your database tables.
- I had to update the AutoMap conventions with the conventions used by the dashCommerce database.
- The dashCommerce database was not entirely consistent in its naming conventions. (gufaw!)
This last one is the one that really appealed to me as I know I put a lot of work into being consistent in the way the dashCommerce database is constructed, but it just showed me where I had missed things. This is great, and showed me the beauty of the AutoMap functionality. And it will be helpful in generating an upgrade script for dashCommerce going forward to ensure the database conventions are consistently applied.
So, how much code did it take to get the AutoMapping functionality working with dashCommerce? Not much. It’s not at 100% coverage yet, but we are in pretty good shape.
One other interesting thing about the AutoMapping in combination with dashCommerce is that in the dC database, we kind of namespace things out so there is a correlation between the assemblies and the database. For instance, we have the following naming conventions: dashCommerce _Core_tableName, dashCommerce_Store_tableName, and dashCommerce_Content_tableName. I’m still hmm’ing and haw’ing over whether or not I really like that anymore, but it does make things very clear for the developer that is customizing dashCommerce. That means it made the conventions less flexible, so I had to accommodate that in the code by creating separate files for each mapping. So, for instance, in getting the Core up and running, the code for Fluent NHibernate AutoMap was as simple* as this:
var configuration = MsSqlConfiguration.MsSql2005 .ConnectionString(connectionString => connectionString .Server("MYSERVER") .Database("DASHCOMMERCE") .Username("USER") .Password("PASSWORD")) .UseReflectionOptimizer() .ConfigureProperties(new Configuration()); var autoPersistenceModel = AutoPersistenceModel .MapEntitiesFromAssemblyOf<Log>() .Where(type => type.IsClass && !type.IsAbstract && type.Namespace == "Core.Entities") .WithConvention(convention => { convention.FindIdentity = p => p.Name == p.DeclaringType.Name + "Id"; convention.GetTableName = type => "dashCommerce_Core_" + type.Name; convention.GetPrimaryKeyNameFromType = type => type.Name + "Id"; convention.GetForeignKeyNameOfParent = prop => prop.Name + "Id"; }) ; autoPersistenceModel.Configure(configuration);
*simple took me a couple of hours, but that was digging into Fluent NHibernate for the first time and trying to grok and learn all at once.
There is still some work to do on Many to Many relationships, but this was darned impressive and a huge boost in productivity for dashCommerce and NHibernate. Thank you to the folks that have created Fluent NHibernate, this makes working with NHibernate easier than any other ORM / code generation tool out there.
One other side note worth mentioning is that once you have the AutoMap set up correctly, you can have Fluent NHibernate spit out the mapping files so that you can use those directly (which is what we are doing for dashCommerce).
March 12, 2009
Getting Mono and Visual Studio to play nice together :: Part 2
Posted by chriscyvas under Coding, Mono, Open Source, dashCommerce[6] Comments
In my last post, I profiled what you would need to do to get Visual Studio to use the Mono compiler for compiling your Mono projects. I also created 3 basic Mono project templates that are available for download.
Apparently, they have some appeal as they have been downloaded a couple of hundred times, so that’s good.
Also, it looks as though Mono is getting some additional traction and good looks from others in the Microsoft community. That is good, it should.
I have also made it a priority for dashCommerce to run on Mono in future revs as I think this is a huge win for software products in general, but especially so for open source projects.
But, one thing that I left out of the previous post was some Mono item templates. Specifically, some standard stock templates because if you add a stock item (like a Web Form) to your project that references .NET assemblies, you will get this lovely little creature when you compile:
Which is basically telling you that Mono has no idea what the heck the referenced assembly is! So, how to fix it? Well, you need some item templates that reference the Mono assemblies and not the .NET assemblies.
I have gone ahead and created the following templates for use in your Mono projects:
- Class
- Interface
- Master Page
- Web Content Form
- Web Form
- Web Service
- Web User Control
You can download these item templates from here (as well as the Project Templates). Once you download them, you can put them in My Documents\Visual Studio 2008\Templates\ItemTemplates\Visual C#\Mono and you should be good to go.
That being said, there was a recent Beta release of MonoDevelop 2.0 and I am hearing good things about it, so all this may be for naught if it is a solid IDE, but I am easing into this and frankly, I think MS and Visual Studio should support development on the Mono platform. But maybe that’s just me.
February 16, 2009
Getting Mono and Visual Studio to play nice together
Posted by chriscyvas under Coding, Mono, Open Source, dashCommerce[14] Comments
As it stands, Visual Studio does not allow you to explicitly target a framework other than the .NET framework. I cover that in this post, so if you are curious about that, then you may want to go read that first to understand where this post is coming from. But thankfully, Jason left me a comment that pointed me to this post by Jonathan Pobst. It was a big help in researching this post and basically set me on the right path to getting things to where I wanted them.
The goal was to get some Mono project templates working with Mono assemblies and the Mono compiler in Visual Studio. The trick was to do it in a way that would be able to survive upgrades of Mono installations. I think I pulled it off.
The end result is a series of project templates that you can put in your \My Documents\Visual Studio 2008\Templates\ProjectTemplates\Visual C#\Mono directory that will give you the following New Project options:
Notice the Mono option on the left hand side of the dialog and the Mono project types in the right hand side. Yep, that’s the little Mono monkey there too.
In order to use these, you are going to have to do a few things:
1.) Download and install Mono. I installed the current release (2.2) to C:\Mono\2.2
2.) Add a MonoPath environment variable and have it point to C:\Mono\2.2\bin
3.) Add a MonoLibPath environment variable and have it point to C:\Mono\2.2\lib\mono\2.0
4.) Reboot so the environment variables will be recognized
5.) Grab the download at the end of this post and unzip it. In it, you will find 3 project templates and 1 file called Mono.CSharp.targets.
6.) Place the 3 project template files (.zip) in the \My Documents\Visual Studio 2008\Templates\ProjectTemplates\Visual C#\Mono directory. You’ll have to create the Mono directory.
7.) Now, grab the Mono.CSharp.targets file and place it in the C:\Mono\build directory. Again, you will have to create the build directory.
8.) Now, fire up Visual Studio and bring up the New Project dialog. You should see something similar to the New Project Dialog above. (Note: If you don’t see the Mono option in the left side of the dialog then you may need to add the Mono directory to the \My Documents\Visual Studio 2008\Templates\ItemTemplates\VisualC#\ directory as well – see here – otherwise, you may only see them at the top level C#.)
9.) Now, go ahead and select one. You will get prompted with the following prompt from Visual Studio. Make sure you select the Load Project Normally option.
That should about do it. You will now be creating Visual Studio projects that reference the MonoPath and the MonoLibPath, so as you upgrade and wish to move from version to version, all you should have to do it change your environment variables and you will be compiling against the latest version of Mono and using the Mono compiler. (Presumably something like C:\Mono\2.4)
Now, some may point out that Mono is binary compatible with .NET so what’s all the fuss? The answer is that they are in different stages of development, so if you target the .NET framework and then try to run on Mono, you may end up with some gotchya’s. For example, a class or method call that is not yet implemented in Mono. Whereas if you target Mono, then you can be pretty assured, when referencing a System.*.dll it will be implemented in .NET. Also, if you use any of the Mono.*.dll assemblies in your projects, you’ll can just drag them around like any other referenced assembly. There are about 20 Mono.*.dll assemblies, so there is bound to be some goodies in there.
If you already have Mono installed somewhere, then you should be able to point your environment variables to the relative locations of your installation and you should still be good to go.
While writing this, I was listening to "Jane Says" by Jane’s Addiction
February 10, 2009
A Failure in Microsoft’s Open Source Strategy
Posted by chriscyvas under Coding, Open Source, dashCommerce[12] Comments
Open source in the Microsoft ecosystem is a new thing, and to be frank, it’s only gaining ground in some areas of Microsoft. We’ve all heard the news reports of Steve Ballmer saying Open Source is Microsoft’s primary threat, among other things. I’m not here to re-hash all that. You either side with Microsoft, Open Source, or you are somewhere in between.
But, I am here to take Microsoft to task on one specific area where it’s open source strategy is sorely lacking, and that is in the funding or sponsorship of open source products built for the .NET platform. To the best of my knowledge, Microsoft does not sponsor any open source projects, yet they fully reap the benefit of open source developers that build on the .NET platform. We help propagate and evangelize the platform. If you take a look at Sun, they are well entrenched in sponsoring and organizing the sponsorship of third-party open source initiatives. That is a huge win for Sun and the Java community.
Microsoft’s behavior on this front has been pretty sophomoric to this point. A good example of this was Oxite. I’m not up for re-hashing all of that, but suffice to say it flops, and instead of sponsoring the project via some third party (to begin with), they build it internally, and then ask the community to fix their mess. The result of that was a pretty quick backlash from the community that said, “Hey, we’ve got jobs, and bills to pay, we aren’t here to clean up your code.” I honestly believe that was a bit of a reality check for Microsoft and the few open source proponents inside of Microsoft. My guess is that they let their ego’s get ahead of them on that one and were taken off guard by the community’s response, which IMHO, was spot on.
The .NET open source community is maturing and they are beginning to see the gaps between Microsoft’s behavior and the behavior of other open source proponents, such as Sun, and they are recognizing that much of what they are seeing is business as usual at Microsoft. Their attention to open source, to this point, has been in an effort to either 1.) Evangelize their platform or 2.) Harness the power of the open source community in an effort to make their products better. Any open source .NET application is firmly in #1, and things like the Enterprise Library fall into #2.
Microsoft has hired a few open source developers from the .NET ecosystem, but I’ve got some pretty un-easy feelings on that. Most of them are heavy bloggers and over the last several months, those developers’ blogs / podcasts have now become an evangelism platform for Microsoft’s latest initiative. The MVC framework is a perfect example of Microsoft failing to sponsor the Castle framework. They make the argument that “our customers want products by us, and only us”, but what their clients really want is stable products by stable companies. A company that Microsoft could be helping to create by sponsoring them like Sun does.
Is it Microsoft’s job to sponsor open source initiatives? No, not really, but there is a huge upside that they are ignoring when deciding against sponsorship, and that is this: they are foregoing the opportunity to have significant growth engines “close to the vest”, ready to be cherry picked, or perhaps just as well is the community good will that would result from such sponsorships. Microsoft really shouldn’t ignore this, as it is their main Achilles heel – lack of goodwill from segments of the community. If they want their development tools to be the tools to develop with and they want Windows to be the platform to deploy solutions on (open source and otherwise), then they need to consider, very carefully, how they expect to achieve that. You’ve got to do more than release open source software, or engage the community in building some open source frameworks; you have to get out in the community and help build the ecosystem that is going to support you over the long term.
February 9, 2009
The Development Stack for Mono
Posted by chriscyvas under Coding, Mono, Open Source, dashCommerce[3] Comments
In my planning to get ready for Mono development, I’ve been looking at different ways to get up and running. I’ll be putting together a screen cast of this work, all distilled down so hopefully you will be able to avoid some of the pain, musings, and cursing that occur during this process. Although, I can say, from my experience, that this is a characteristic that has served me well professionally: I don’t mind muddling through the uncharted stuff. BUT, it is an enormous PITA, and I can sympathize greatly with those that are not too eager to do it. I also understand it really is a matter of how interested you are in figuring it out; it being the task at hand.
The first thing we have to look at is getting an infrastructure in place that supports our development. In the Windows / Visual Studio world, a lot of that is pretty simple to get running, especially now that VS ships with a built in web server. I have always used IIS as much as possible, but the built in web server works ok for local development.
I’ve got Mono
But in Mono world, we have some different opportunities to extend our development experience. For instance, you can run Mono and Linux in a virtual machine. Here you have several options; you can pull down a Linux distribution, install it to the VM and then install Mono via the Linux Repositories. For those of you just getting into the Linux world, the Repositories are central locations from which you can choose to install other open source software packages. When I read about the Linux Repositories that immediately gave me pause, because that’s a pretty huge win for Linux. Unfortunately, I don’t think Windows could ever execute on anything like that because of the nature of the Windows ecosystem.
Another option is to install the VM from Mono that is a full openSUSE Linux distribution with Mono and MonoDevelop already installed. For those looking for speed in getting up and running, this is probably the best way to get up and running.
In my first attempts, I went with the first route because I was curious to learn some more about Linux and I wanted to see how far the distributions had come since the last time I worked with them – back in 2000.
Well, let me tell you, they have come a long way, baby.
![]()
If you’ve got the time or inclination, I highly recommend picking a virtualization software package and running some Linux distro installs and playing with them. So far I have openSUSE, Ubuntu, Ubuntu Server, and I think I have CentOS queued.
But, I do like Visual Studio and I am comfortable with it. I’ve looked at other IDE’s and for whatever reason; I don’t find them as good as Visual Studio. I recognize that may not be the case, it may be my hang up. So, I’ll be actively bouncing around IDE’s to challenge myself a bit on the IDE front. So, I’ve got a bit of a conundrum. I like Visual Studio, and I’d like to continue to develop in it, but I need a setup in my Windows environment that can support my preferred development experience. So, I started digging into how to get Mono running on my host Windows OS and what other tools I will need to support that development process.
My initial take was to look at using the XSP2 web server that is included with the Mono install. This is probably something akin to the web server that is installed as part of Visual Studio. I got things setup and working ok, but it’s a very small application and is not very robust (their words, not mine). For e-commerce I wanted to make sure I had something that was of the same caliber as IIS or better. This brings me to Apache. I’ve installed the Apache HTTP server and the install was painless and all good. I did have to turn off my IIS service because they both wanted to hog port 80. You can probably configure this to be different, and I may yet do that, but I want to “disable” my old habits as much as possible. Sometimes you have to force yourself to learn.
It looks like I’ll be able to target the Apache HTTP Server for use by Visual Studio as well, since this is in the Project Properties dialog:
Finally, I want Visual Studio to use the C# compiler for Mono, not .NET, so I figured I could do that by changing the target framework. My hope was that Visual Studio would allow me to target Mono as the development framework, and use the Mono compiler as part of that targeting process. Alas, that does not appear to be possible at this point:
So, I think I have to dig in a little deeper to find out how to control what C# compiler Visual Studio uses to see if I can change that. Presuming I can, I then need to setup the virtual directories and such in Apache so that my development experience is as seamless as possible. I don’t want to “feel” these changes, but I know there is some work to do to get the development experience to be something close to what I am used to. Note to the VS.NEXT Team – I know you’re using MEF and MSBuild under the covers, so you should be able to allow this pretty easily.
So far, all of this has been pretty painless and has been more of an exercise in “figuring things out” than anything else. The installs have been painless and have caused me no grief. Things appear to be pretty stable so far.
If anyone is going to “walk the walk” with me, I’ll be putting up some screen casts that go into more detail on all of this stuff, so you may find more info there. I’m waiting on a few key pieces for my screen cast setup that I want before I start pushing things out, but they’ll be coming pretty soon – within the next few weeks.
February 4, 2009
An Impressive Interview
Posted by chriscyvas under Coding, Open Source, dashCommerceLeave a Comment
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.
February 4, 2009
The Plan for 2009 – Onward and Upward!
Posted by chriscyvas under Coding, Open Source, dashCommerceLeave a Comment
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!