August 2008


I’ve been studying alternative data access methodologies for dashCommerce as I’m not pleased with SubSonic. I’ve been looking at some alternatives and in my searching I came across LightSpeed. LightSpeed has some really nice features such as the LightSpeedContext and the UnitOfWork which encapsulate some very nice features. The model designer of LightSpeed is very nice as well – especially the round-tripping. With a new design I can see how the designer would be a very nice tool. It’s a very nice and well thought out framework. But what really struck me wasn’t necessarily the code or the model (which are really good – did I say that yet? :) ) – what struck me was the speed with which Mindscape incorporates feedback from the community. As I was evaluating the technology, I asked a few questions in the forums and submitted a few suggestions about their command line generator (lsgen). They asked a few clarifying questions in return and BOOM – “We’ve added support for FEATURE X . . . it will be in the nightly builds  . . . located here .  . .” That took < 8 hours.

Now, LightSpeed is a commercial product – it’s not open source. But what Mindscape has done is really quite impressive. To evaluate, accept, and incorporate feedback that quickly into the product and to have the installer ready that afternoon is impressive – for anyone. And to me, it immediately struck me that this type of setup does a pretty good job at neutralizing the open source model. Now, I’m sure that’s not their intent – they just want to put out a great product and make some money doing it. But when I saw how quickly they turned it around – well, it got me thinking.

I’m still evaluating some different technologies, but my experience with Mindscape got me thinking about how to do software right – because those people are doing things as right as I’ve seen.

DotNetKicks Image

My wife and I are expecting our 3rd child (gulp!) any day now so I am going to be going dark for a few weeks. I’ll be around, and tending to administrative things, but I won’t be on the forums too much. Hopefully, when I get back, I’ll have some cool things to show for my absence.

As always, if you find a bug, please log it at CodePlex and if you have any feature requests, log them at CodePlex as well. And, if you have any patches, upload them to CodePlex. For more information on this just check out the FAQ under Learn More.

Naz and Yitzchok, I expect, will be around, but should they not be, just help each other out as best as you can.

DotNetKicks Image

This has been in the works for a while now, but we finally got everything squared away so I wanted to take the opportunity to introduce Microlaser Communications as the exclusive  dashCommerce Value Added Reseller for the territories of Netherlands, Belgium, Luxemburg, and Germany. Over the last 3+ years, I have had the pleasure of working with some truly good people and the folks at Microlaser Communications have been great to deal with time and again. Kevin is the guy I deal with mostly and to be sure, I think he has done more with dashCommerce than anyone I have seen. This included turning dashCommerce into a point-of-sale system with bar code scanning and all sorts of good stuff.

Kevin approached me with the idea, and so over the last several months we’ve been working out the details – these things always move slower than you would expect – and now Microslaser Communications is the exclusive dashCommerce Value Added Reseller for the territories of Netherlands, Belgium, Luxemburg, and Germany. So, if you are in these countries and you are looking for a company that know dashCommerce well and will give you a great experience, look up Microlaser Communications!

Welcome aboard Kevin and the rest of the team at Microlaser. It is my pleasure to have you associated so closely with the project!

DotNetKicks Image

I had an idea tonight as I was chatting with Yitzchok and louisd – why not have a dashCommerce Conference Call? We can use Skype and I can include 24 others. Although, I’m not sure how that will work out . . .

Does anyone have any experience pulling something like this off? Is it a train wreck? Are there any guidelines on behaviour / etiquette, etc? – just to make sure it runs smoothly.

Opinions?

A couple of weeks ago I went around and contributed to just about every open source framework / assembly / tool that dashCommerce uses except for 2. One because they never got back to me on how to contribute and another because the project leader is a bit of a dweeeeeeeb. So, who got the cash? They  are:

That’s a grand total of: $241.28 USD in contributions.

I think this is important to do. Regardless of your motivations for doing open source, it’s a lot easier to do when you feel your work is appreciated and provides value to others. To all of these projects – keep up the great work and THANK YOU for helping us make dashCommerce one of the best open source projects in the .NET space!

kick it on DotNetKicks.com

We’ve already started doing some refactoring of dashCommerce for V.Next. Right now, I have been doing the work on my code base for dashCommerce.com because I usually guinea pig that first to see how stuff is going to work. With the next rev, we are going to be introducing some Dependency Injection and IoC in order to loosen the application up. I mentioned this in dashCommerce and a crowbar.

In the Web project I have a ServiceRegistry class that simply loads the “Store” container and then the services are available off the ServiceRegistry. So, there are calls right now, like this:

lblRetailPriceAmount.Text = ServiceRegistry.CurrencyService.GetConvertedAmount(_product.RetailPrice, convertCode);

- and -

 

productCollection = ServiceRegistry.CatalogService.FetchProductsByCategoryId(categoryId) as ProductCollection;   

These services then use the respective cache to pull the objects / values. So, the call stack looks like this:

CatalogService : ICatalogService

   calls to — > CategoryCache and ProductCache

      calls to –> CategoryController and ProductController

 

CurrencyService : ICurrencyService

   calls to –> CurrencyRateCache

      calls to –> CurrencyService

 

Do you see anything wrong with this? 

I’ve also started moving all of the interfaces to a separate assembly in order to decrease the dependencies. Logically, the only reference Web should have is to the assembly that contains the interfaces while the dependency injection / IoC will take care of building up the services. Also, Store would also have a ServiceRegistry class that builds up any of the Core stuff that is required.

What do you think? Suggestions, comments, etc????

kick it on DotNetKicks.com

I’ve been thinking a little lately about .NET, programming in general and all the stuff going on in the .NET space over the last few years. The conclusion that I’ve reached is that there are no new ideas in the .NET space that I can put my finger on.  Let me refine that a bit – there are no new ideas in the .NET space in so far as web development is concerned.

So much of what we are seeing as “new” is a regurgitation of stuff that happened years ago. Here is a sampling of some so-called new ideas and what I see as their origination points. Feel free to correct me if I don’t have the origination right, I’m just tossing out what I know . . .

“I feel like the fellow in jail who is watching his scaffold being built.”

- Dwight D. Eisenhower

Scaffolding – a lot of folks that talk about scaffolding refer to Ruby on Rails as the origin of that. Not true at all really. The first time I saw and used scaffolding was back in 2000. I had picked up a book called Designing Active Server Pages by Scott Mitchell (yeah – the 4guysfromrolla.comguy). It was a great book, and I have always like Scott’s approach. He is very thorough and creative. So no, all you RoR fans – you weren’t the first.

 

AJAX- A lot of folks have mentioned this one, back when they were mucking around with the XmlHttpRequest object, but before that there was something put out by Microsoft called RemoteScripting. It wasn’t the inline frame thing some of you may be thinking of. It was a Java component of some sort. It was a POS to be sure, but it was the only game in town prior to IE 5.0. I still have the code around where I was using it. As a matter of fact, I just cracked open the RSPROXY.JAVA class that was in there, and here is a nice little snippet for all of you Microsoft vs. Sun (actually, Microsoft vs. ANYTHING) fans – I bet you never thought you’d see this:

// ************************************************************************
// Microsoft Script Library
// Visual InterDev 6.0 Remote Scripting proxy
// Copyright 1998 Microsoft Corporation. All Rights Reserved.
// ************************************************************************
import java.applet.*;
import java.awt.*;

import java.net.URL;
import java.io.InputStream;
import java.io.IOException;

I was using this back in 1999 to build a CMS. My boss at the time was showing the application to some other business associates and he was asking if they had ever seen the use of modal windows to do this kind of stuff in a web environment and the answer, at the time, was no. So, to anyone else that used the RSPROXY stuff to create AJAX applications back in 1998-1999. WE WERE THE FIRST! :)

 

Dependency Injection / Inversion of Control- This is an idea that came out of the Java space. Martin Fowler was the idea man behind this one. Actually, if you use .NET or Java, I’d be willing to bet you owe a lot to Mr. Fowler. He’s kinda got one of those “scary” brains. He has also been known to hang out with the RoR guys, which makes me think that you will always find him hanging where the action is.

 

MVC – This “technology” is 30 years old. It ain’t new, any way you slice it.  ’nough said.

 

There’s probably plenty more, but those are the ones striking me right now. What concerns me about this is that there doesn’t seem to be much in the way of true invention going on in the .NET web space. If you look at .NET in general there is a flurry of activity and most of it involves regurgitating Java frameworks. The ALT.NET folks were trying to come up with a tag line and one of them put this out there:

“ALT.NET, porting Java Frameworks one project at a time.”

Or something like that. It’s spot on really. The path being traveled is so similar to the Java space that it scares me. Why does it scare me? Because of all the things you can find wrong with Java, the primary barrier to entry for anyone getting into Java programming is the high fragmentation of libraries, frameworks, etc. It’s a bitch to figure out where to start. And the .NET space is blindingly following suit. Has anyone checked out how many Dependency Injection frameworks there are in .NET? I can count 7 in my head and it’s only going to get worse.

One good thing about the “old” Microsoft (i.e. Pre .NET) was that there were fewer decisions to make and less work in evaluating technologies. Now, throw the open source movement on top of all this and well, holy crap – all the work is in just figuring out your development stack.

But beyond that is the lack of invention in the .NET web space. If anyone see’s something I’m not, please let me know because when I look for “cool, new technologies” I look less and less at .NET and look more closely at fringe projects like Rebol. The point is, I’m looking outside Microsoft.

kick it on DotNetKicks.com