ailon's DevBlog: Development related stuff in my life

Windows Phone App Promotion and Monetization Talk Video

12/29/2011 6:04:58 PM

Here’s a video of my talk on WP7 app promotion and monetization I did a couple of weeks ago at Lotus 8 conference in Riga. Hope you find it useful in marketing your apps.

The talk starts at about 1h 54 min. mark. Unfortunately I don’t know how to embed a video with starting position, so you may need to seek forward or just watch it directly on YouTube.


Porting Old Comments to Disqus

12/29/2011 10:45:36 AM

Yesterday I’ve finally managed to upgrade this blog to the latest version of Let me know if you notice any issues related to that.

The process was smooth and easy. Except that I wanted to move commenting to Disqus at the same time. Enabling Disqus comments was easy too, but moving old comments up there was not.

First I found this method and tool. It looked like it worked at first but comments didn’t show up in Disqus. Then I figured that uses Permalink for Disqus URLs and this tool was using “friendly” link. So I modified what it was exporting and then it just started crashing when trying to upload comments to Disqus.

Then I found this method and tool. It takes standard export from in BlogML format, extracts comments from it and saves them in WRX format that can be imported into Disqus. Unfortunately it uses the same “friendly” URLs and BE uses permalinks as identifiers for Disqus threads. Obviously its possible to modify BE code to use the same URLs but it’s not future-proof (among other issues).

So finally I decided to make a small utility that would take WRX generated by the above mentioned tool and original BlogML and replaces “friendly” URLs with permalinks in the WRX. It’s very primitive and not flexible so I’m posting source here instead of binary.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;

namespace BlogML2WRXFix
class Program
static void Main(string[] args)
var wrx = XDocument.Load(args[0]);
var blogML = XDocument.Load(args[1]);
XNamespace blogMLNS = "";
string hostPrefix = args[2];

var wrxItems = wrx.Descendants("item");

foreach (var wrxItem in wrxItems)
var linkNode = wrxItem.Descendants("link").First();
// URLs in my WRX included extra slash at the beginning
string linkUrl = linkNode.Value.Substring(1);
linkNode.Value = String.Format(hostPrefix + "post.aspx?id={0}", blogML.Descendants(blogMLNS + "post").First(f => f.Attribute("post-url").Value == linkUrl).Attribute("id").Value);



It takes path to the WRX file as the first parameter, path to BlogML file as the second and host prefix to use for the output URLs (like as the third.


GPL/Commercial Dual Licensing Is Evil For Libraries

12/27/2011 6:12:00 PM

I’ve listened to Hanselminutes on Kendo UI a couple of days ago. It was a great podcast as usual and, even though I haven’t personally used it yet, I’ve heard good things about the Kendo UI framework. What I haven’t noticed before and what I’ve heard on the show was that Kendo UI is released under a dual GPL/Commercial license.

I used to run a dual-licensed GPL/commercial product from 2003 and decided to never go that road again. The decision isn’t new, but I figured I’ve never put the reasoning in writing. So here it is. Here’s why I think GPL/commercial dual licensing is bad for your libraries (from the developers/publishers perspective).

Disclaimer: IANAL (I am not a lawyer). So all of this is just my point of view on the issue.

Why GPL/Commercial in the first place?

This was our rationale for SPAW Editor and, from what I’ve heard on the podcast, Telerik’s rationale was pretty much the same. We didn’t mind (and even wanted) open source projects using our library for free. That sounded great both from “good karma” perspective and free word of mouth promotion it was supposed to generate. On the other hand, we didn’t create the library out of pure love for coding and expected to support it by selling it to commercial customers. GPL looked like an easy solution for our needs. It allowed us to release the code to be used by open source projects and prohibited its use in the closed source projects. Or at least that’s what we thought at that time.

Unfortunately even though it is partially true, partially is a key word here and it has quite a few caveats.

Problems with GPL/Commercial licensing

  • GPLed version can only be used in GPL-compatible projects.
    GPL is contagious. Once you use a GPL library in your project, you can only distribute it under GPL. So we weren’t serving non-GPL OSS projects and there are lots of them.
  • Your product is not really Open Source.
    As long as you are the only contributing party you can re-license your code in any way you like. Once there are other contributors to your GPL project, their contributions are covered by GPL and you technically loose rights to dual-license it. Obviously you can work around this with some legal work, but that’s an extra barrier to entry by contributors. So I’m pretty sure that, even though Todd Anglin stated on the podcast that they are looking into enabling contributions, this will never materialize.
  • GPL is confusing. Especially in our (library/framework) cases.
    GPL FAQ is 35 printed pages long. When you are building your business on top of GPL you can manage to read and understand it. When you just want to use a library (which has competitors with simpler licenses) – you wouldn’t bother.
  • It creates a lot of “legal” support overhead.
    Following on the previous bullet point, the most frequent type of question we were getting was “I want to use your library in Scenario X. Can I use it for free?”. We used to have a question like that in our FAQ (it is not there now since we stopped offering commercial license), but it didn’t help. Every situation is slightly unique and your users don’t have enough time and/or willingness to figure it out on their own. So they delegate it to you.
  • You are not getting as much viral promotion as you would’ve with non-restrictive open source license like BSD, MIT or MsPL.
    Just because fewer OSS projects can use your product.
  • You are not monetizing who you wanted to monetize.
    GPL covers distribution. If there’s no distribution involved everyone can use your library for free “under GPL”. So if Microsoft or, say, Google build their own sites in-house they can use your product for free.

These are the issues I’ve experienced with the model that I can think of from the top of my head. I bet there are other things too.

Is there a better way?

Provided that our objective hasn’t changed and we want to support non-commercial and/or OSS initiatives with a free product and monetize commercial users, I’ve seen 2 approaches that work better, in my opinion, than GPL/commercial dual-licensing.

  1. Core product under (more) permissive license, commercial extras.
    This is the approach used by the most popular web WYSIWYG editor (and SPAW Editor’s competitor at the time) – TineMCE among other projects. I think it was one of the reasons (probably not THE reason, but still) why they “beat” us. The core library is released under LGPL or totally permissive licenses (BSD, etc.) and you make money on extras that are not required, but have a wide enough appeal to generate revenue.
  2. Linkware/Commercial dual-licensing.
    This is the approach we use with most of the amCharts products (and, no, I didn’t come up with the idea). This would probably only work for more elaborate UI libraries (like charts). The idea is that you give away your library for free to anyone with only caveat that it includes a link back to your site. Non-profit projects wouldn’t mind it in exchange for a great product, and commercial users probably would mind it and buy a license (or they wouldn’t mind and you still get advertising from them).

That is basically it. Let me know if I forgot something or if you think I’m totally wrong. You can do it either here in the comments or on twitter.

P.S.: feel free to follow me even if you don’t have anything to say on the subject ;)

Tags: ,

Copyright © 2003 - 2018 Alan Mendelevich
Powered by BlogEngine.NET