Components vs. Services

The current issue of Communications of the ACM features an interesting article about the philosophies behind the two approaches covering components and services. Both topics have been major parts of my studies in computer science and it’s definitely worth thinking about since too often decisions about these kinds of architectures and which to choose are made on hypes rather than on facts.

Ontology

By the W3C the term ontology is defined as following:

Ontology is a term borrowed from philosophy that refers to the science of describing the kinds of entities in the world and how they are related.

If you start to dig a bit you’ll realize a couple disillusioning facts:

The Web Ontology Language is there for quite a while. But there is no significant impact on Web Engineering, yet. RDF and thus OWL is not designed to be read by humans. But OWL is not supported out of the box, e.g. in the .NET framework. To design ontologies you would need an editor, but all you can find is Protégé. Protégé is not bad at all, but the Protégé OWL documentation roughly four years old. The only elaborate documentation on OWL is the W3C recommendation.

Monday Morning Mug #6

Monday Morning MugLast week I took of a week to finish a couple of personal things, therefore nothing really interesting happened so far. There is a Windows Sidebar Refresh, which cold be worth a look. Reading Scott Hanselman’s Reading to Be a Better Developer I think about introducing a daily code-review hour. In fact I completely support that you become only a good coder if you read really a lot of code. Writing code is hard, reading it should hard, too. Really? Matthias had some thought on comments in source code which is directly linked to writing code. Something to pick up!

 

The Microsoft Robotics Studio Licensing Model

 

It looks like there is some confusion about the licensing model of the Microsoft Robotics Studio and the CCR. To make things a bit more visible you must be aware of the two different licenses available for the MSRS. on the one hand there is a Microsoft Robotics Studio Non-Commercial License providing you free usage of the runtime for non-commercial purposes as well as a Microsoft Robotics Studio Commercial License if you are going to make money out of it. If you going to ship your robots including the runtime, you must purchase the license to distribute the runtime with it. There is a fee of $2 for each unit you sell. So if you are going to buy three dev licenses they already include 600 units to be sold and distributed. Of course you can see this the other way around: For each 200 units you sell (and therefore purchase a commercial license) you’ll get one developer seat for free.

The first question is if it is possible to use the CCR for something else than robotics, and the answer is clearly given by the MSRS Architect George Chrysanthakopoulos in the MSRS Team blog. Furthermore, the CCR can be used independently of the MSRS as you can read in the forums.

But what is if the developer wants to make use of CCR within his/her product and the CCR runtime is NOT part of the distribution. Has the end-user to agree the non-commercial license of the MSRS. What’s about the developer then?

In the following let’s have a look at several scenarios which should clarify the new licensing model. These examples are a result of a discussion with George Chrysanthakopoulos, architect of the Microsoft Robotics Studio, Henrik Frystyk Nielsen as well as Tandy Trower who is leading the Microsoft Robotics Initiative. However, this is no legal text, not approved by anybody and might be simply wrong. This should only give you an overview of the licensing model and represents my very personal current view of the licensing model. Read the licenses carefully, in any case of doubt contact Microsoft directly. Anyway let’s have a look at several scenarios about using the Microsoft Robotics Studio licensing model. There is going to be a official FAQ soon covering the scenarios below.

  1. Company ‘A’ is building an application based on the MSRS/CCR/DSS. The company is going to sell is product but he does not include the MSRS/CCR/DSS runtimes in the package: They need one commercial license per developing seat. In the case of 3 developers in the team they need 3 licenses. This includes 600 runtime licenses they could use in their own company.
  2. Company ‘B’ is building an application based on the MSRS/CCR/DSS, They are going to sell and distribute this product including the MSRS/CCR/DSS runtimes. They need to purchase a commercial license per developing seat respectively one for each 200 units he is shipping. The commercial license covers 200 units of runtime distribution. The number of licenses depends on the number of developer seats or runtime units (which ever is greater). In other words, if they have 3 developer seats, they must purchase 3 commercial licenses regardless of how many runtimes they distribute. But if they do, they have 600 units of runtime to distribute (3 x 200). Similarly if they have one developer, but needs 500 units of runtime, he would have to purchase 3 licenses.
  3. Customer ‘C’ is using the product of company ‘A’ for some non-commercial purposes. He downloads the MSRS and agrees the non-commercial license. This customer is also limited on deployment of the runtime on up to 10 personal devices (PCs, robots, etc.) and is not permitted to use the software in a “live” operating environment.
  4. Customer ‘D’ is using the product of ‘B’ for non-commercial use. He is not downloading the MSRS since the MSRS/CCR/DSS runtime is shipped with the product. He agrees to the TOC/EULA of company ‘B’. Nothing else is necessary.
  5. Customer ‘E’ is using product of ‘A’ in his company on 5 computers for operative business. He does not make direct money out of it since the customers don’t have access to these computers, but the software is used within his business (e.g. back office). He purchased the product from ‘A’. He downloaded the MSRS. It does not matter that he does not sell. He is using it for commercial purpose and thus, since he downloaded MSRS and the runtime, he must pay for at least 1 commercial license (to cover the 5 runtimes). The distinction between #3 and #5 is that ‘E’ is using MSRS for commercial purposes. If he did not get the runtime from the vendor ‘A’ (as ‘D’ did) he will need it, so he must purchase a commercial license.
  6. Customer ‘F’ is using product of ‘A’ in his company by providing MSRS services to his customers. He purchased the product from ‘A’. He downloaded the MSRS. He has to purchase additional commercial MSRS licenses. If ‘F’ is developing MSRS services for his customers, regardless of whether he charges for them or not, he needs a license (see #2). However, if he is simply a distributor of ‘A’ (and adds no additional services), then he does not need a commercial license, provided that ‘A’ did have a commercial license. Downloading MSRS is not the key here. It is whether he creates his own services around MSRS that does. For example, if you are a consultant, and you simply reference sell ‘A’s’ products, but add no services or otherwise use MSRS , you would not need a commercial license.
  7. Customer ‘G’ is using product of ‘B’. He is using the product in his company, not making direct money out of it. But the product is used as business-relevant component in his back-office on 5 servers. That cost was paid already by Company ‘B’ and thus he has not to purchase any additional commercial licenses. Customer ‘G’ does not need to pay anything extra. However, ‘B’ better make certain he considers the 5 servers that ‘G’ runs as 5 copies of our runtime as far as his license goes. ‘B’ can’t license only 200 copies, but give his customers unlimited rights to copy. Every copy ‘B’ licenses to his customers are part of his copies. So if he give G rights to put it on 5 servers, ‘B’ has used up 5 of his copies.
  8. Customer ‘H’ is using product of ‘B’. He is using this product to sell consulting services to his customers. The CCR runtime was included in the package he got from ‘B’. As long as he does not distribute any more of Company’s ‘B’ products and he is not developing own MSRS/CCR/DSS products he does not have to purchase any additional licenses.

There are simple rules to follow: Whenever you are going to make money out of the MSRS you have to purchase a commercial license. It does not matter whether you are selling MSRS services our just developing or running them. Luckily the commercial license includes both: the right to distribute and run as well as to develop MSRS services.

Also, the above described scenarios cover all the runtime files mentioned in the runtime.txt in the MSRS folder, which are in detail:

  • ccr.core.dll
  • ccr.adapters.winforms.dll
  • dssbase.dll
  • dsscmdargs.dll
  • dssruntime.transform.dll
  • dssruntime.proxy.dll
  • dssruntime.dll
  • dsshost.exe
  • dsshost.exe.config
  • microsoft.cci.dll

Last.fm ASP.NET Widget

The widgets offered by Last.fm are not really customizable. The latest Flash-based quilts are literally flashy and the image-based charts are quite unconvincingly to design. So I sat down wrote a small ASP.NET control to be used as Last.fm Widget with the goal to use it within my dasBlog installation. For that reason I made usage of the data feeds provided by Last.fm.

Last.fm ASP.NET Widget

Prerequisites

  1. You need a Last.fm account which you can create here.

  2. You might want to download any media player plug-ins from here to scrobble your music.

How to install on a ASP.NET Web Application

  1. Download the .zip file and unpack it’s content into your web application’s directory.

  2. Add the following line below your page tag to register the control with your ASP.NET web page:
    <%@ Register Src="LastFmControl.ascx" TagName="lastfm" TagPrefix="uc" %>
  3. At the place where you want to add the control similar to
    <uc:lastfm 
      id="Lastfm1"
      runat="server"
      Url="http://ws.audioscrobbler.com/1.0/user/aheil/recenttracks.xml" 
      User="http://www.last.fm/user/aheil/">
    </uc:lastfm>
  4. Change the username from aheil to your username unless you want to display my recently played music on your site.

How to install on a dasBlog installation

  1. Download the .zip file an unpack it’s content into your dasBlog installation directory.

  2. Open the hometemplate.blogtemplate file of your dasBlog theme and use the ASPNETControl makro to add the control on the page.
    <%newtelligence.ASPNETControl("LastFmControl.ascx")%>
  3. Open the LastFmcontrol.ascx.cs file and change the username at
     private string _url = "http://ws.audioscrobbler.com/1.0/user/aheil/recenttracks.xml";
      and
private string _user  = "http://www.last.fm/user/aheil/";

unless you want to display my recently played music on your blog.

How to Customize

The control makes heavy usage of several CSS div classes to be maximum customizable. The classes used are

.lastFmMain {}
.lastFmHeader{}
.lastFmItem {}
.lastFmItemTitle {}
.lastFmItemArtist {}
.lastFmFooter {}

Simply modify and add these div classes in your CSS file to make the control look seamless integrating into your web page.

The classes are used as following where the lastFmItem is repeating.

Last.fm Control CSS Usage

Download

Some Comments

I did not spent that much effort into this control. Writing this entry took longer that writing the control, not only since the pre-release Windows Live Writer version I am using crashed twice. There are several improvements, which could be done to this control, including reducing the parameters to only the user name, adding the Last.fm icon etc. If you are looking for a more sophisticated dasBlog makro, you might have a look at Alexander Groß’ Last.fm makro.

Social Bookmarking Tool for WLW

Today, I installed the Social Bookmarking Tool for WLW by Rahul Soni. So I am just starting to add social bookmark links on my future blog entries.

After installing the tool you have to restart Windows Live Writer. Then you’ll see a additional option in the insert pane on the right side of WLW.

WLW with Social Bookmarkin Tool

After publishing your entry, you have to copy the link as well as the title of your blog entry and insert it into the Social Bookmarking Tool dialog. That’s all, just publish the tool again.

Social Bookmarking Tool for WLW