being sued by gaiaware as

Being sued by Gaiaware and Bård Stranheim

Atom bomb in the Ajax Community

This is the “sequel” to this blog which tells the things that happened previously.

Today I had a very depressing talk with Bård Stranheim the CEO of Gaiaware AS on the phone and I told him about my idea of creating an LGPL licensed Ajax Library while writing a book about it and he basically said that due to a non-compete contract he would sue me if I did that.

Now the thing is that I love Ajax, I love the Open Web and I love to create tools for other developers. So to avoid being a “competitor” I told him I could even sign a contract with him stating that I would never commercialize any Ajax libraries in any ways and that I would license the whole thing purely as Open Source and LGPL which means it would be impossible to ever even in the future sell licenses or anything like that on top of my library. No effect…

He basically said that “as long as I was of any kind of threat to them he would take legal actions to make sure I would be stopped”. I just 5 minutes ago hung up the phone with him so this is fresh in memory.

Now about “competing”

I want to write a free (GNU Free Documentation Licensed) book about creating Ajax Libraries, in fact I have started too. You can read the first two chapters of it here and here and in that process also create great tools which I myself can use for my Wiki project and in addition I want to release those tools for others to use, study and learn from without charging money for it in any ways at all. How can that be “competing”? I have no business model what-so-ever on my Ajax efforts, no plans for ever creating one and no financial incentives in it what-so-ever. I even told him I could sign a contract stating that I would “never make money on Ajax libraries” or anything like that.

In fact if anything it should increase people’s awareness and confidence in that Ajax is the right tool for the job which again will create a bigger market for Gaiaware. Not to mention that most of my ideas about how an Ajax library SHOULD be would conclude with that Gaia Ajax Widgets is the “right way” to build an Ajax library. Most professional developers which can afford to buy an Ajax library will likely choose Gaia Ajax Widgets or another commercial Ajax Library due to that they then can get guarantees about support, maintenance, bug fixes and so on. Have a company backing the tools is very important for many ISVs. Just because there exists free tools for creating websites (DotNetNuke) doesn’t mean people don’t purchases stuff like SharePoint and EPIServer. In fact when I started Gaia Ajax Widgets I did a count of existing Ajax Libraries and I think there were almost 100 just targeting ASP.NET while another 900 or so in general. Not competing with Gaiaware, does that mean I cannot even create patches for existing free Ajax Libraries?

Also I love Ajax and I just want to create a hobby Ajax library project which I hopefully would get others to contribute towards and by that making it even better. How is that competing?

And let’s talk about “competing”. Gaiaware made most of its money last year on consultancy and training, in addition Gaiaware has an ORM library (which I developed), a Date manipluation library (which I created), a CMS system (which I created), a Scrum tool (which I created), a blogging system (which I created), and so on. Does competing mean that I cannot sell consulting hours, create ORM tools, CMS or publishing systems, Date libraries, sell training…?

Where does it end? Am I forced to starting my carreer all over again doing something else than System Development? Now to be just Bård said that I could do System Development if I wanted, just not Ajax libraries. And he was willing to sign a contract with me stating so (remember this still is fresh in my memory since I just talked with him on the phone) I could just not do Ajax stuff. Neither commercial nor as a hobbyist. And who is Bård Stranheim to decide “which parts” of their business I cannot compete on? In fact since we earned a LOT more money on Conulting and Training last year some would argue that is the “main area of business” for Gaiaware AS…

I still haven’t made up my mind what to do, Bård told me I could “think a little bit about it” before he would take legal actions again me (still fresh memory since I just spoke with him on the phone)

Help!!

If someone out there could in some way help me to be able to do what I feel myself I was born to do (Ajax Libraries – I have been developing almost exclusively GUI libraries for almost 10 years now) I would be very happy. My email is here. If you sympathize with me and have ideas for what I can do to “get out of this” I would appreciate it a lot. If you have some support in ANY ways including financial support for being able to meet him in court or ideas for how to get out of this in some way I would appreciate it a lot.

Now I am basically broke, I’m being threatened from Bård to have all my shares in Gaiaware AS *confiscated* and I am really desperate…

goodbye gaia ajax, hello ra-ajax

Goodbye Gaia Ajax Widgets, hello Ra Ajax

From Gaia Ajax Widgets to Ra Ajax

27th of December 2006 I started a folder in Subversion called “Gaia” which was later to become Gaia Ajax Widgets. Ever since I’ve been spending more than 100 hours every week working with Gaia Ajax Widgets in Gaiaware AS which me and Stian Solberg together started almost 4 years ago. When we started out we were alone and we had 50% each of the company. We continued working alone for almost 2 years before Jan Blomquist and Bård Stranheim was offered an equal share of the company. Stian doing mostly consultancy to pay for our salaries and me working alone on the product; Gaia Ajax Widgets. And we worked basically living on Mastercards believing in a prosperous future for ourselves. I who have three kids (also at that time) and just had finished a financially and emotionally draining divorce had an especially rough time and had to take up several extra mortgages to be able to have food for myself and my kids at the time.

A couple of weeks ago I quit Gaiaware due to disagreeing with the rest of the owners in the company about the future direction for Gaia. Me and Bård Stranheim had then at that time basically been constant in each others face and one of us had to go. The others ended up believing more in Bård than they did in me. Which is weird since he practically haven’t done anything for the company since starting except for giving us some financial freedom which we mostly spent in a period of the company’s history where we couldn’t get anything constructive done due to quarelling with Bård. At that time we were all quarelling with Bård, me, Jan and Stian too. It even went so far that me and Jan started creating plans for how to never have Bård on board of Gaiaware again. Though it calmed down a period due to Bård deciding himself that we needed a “timeout” to focus on product development so he left temporary leaving the company in my and Jan’s hands.

It is quite a weird experience thinking about that I created Gaia Ajax Widgets. I started it in fact without even telling Stian about it. Not before I had a finished spike I told Stian since I knew he was going to become freightened due to that it was a completely new domain for us and I knew he wouldn’t trust me to be able to create what Gaia later became. The 5th of February 2007, less than 40 days after I started the project we had the initial release of version 1.0 at MSDN Live in Oslo/Norway. At that time Jan Blomquist was not a part of the company but still did a small gig for us to present Gaia during this session due to his MVP award which had made him one of the speakers at that event.

Then Jan was offered a position in Gaiaware and all though me and Stian had worked hard for several years at that time we actually GAVE him one third of the entire company due to believing in his future commits to Gaiaware. We even had to do “financial acrobatics” in order to be able to legally give him the company since by law we couldn’t do this without actually personally lending him money to obtain 33% of the shares. So we created a loan which we have to reduce by 10,000NOK per year over a three year period since that is the maximum you can “give away” per year.

Later I headhunted Eirik Chambe-Eng even to become a member of our board. Eirik is one of the founder and previously CEOs in Trolltech now sold to Nokia for roughly a billion NOK.

Then at about autumn 2007 Bård Stranheim left his job in GAT-Soft and we (especially me) instantly started to headhunt him as our future CEO, paradoxically I was the one most eager to get Bård on board of Gaiaware in the beginning. First he came in as a passive investor and invested about 750,000 NOK in Gaiaware for 6% of the shares, but later we landed an agreement with him where he was going to become our CEO in addition and we gave him further 19% of the shares in the company for free so that now we were 4 equal owners of the company. At this time apart from a couple of “hand sales” done by Stian and Jan I still had done virtually *everything* in the company in regards to coding, getting press attention, building the web and doing SEO to attract visitors. Stian when I left had done about 20% of the website development and Jan had done some evangelizing and some coding for the latest release (our 5th release), but not more than a handful of sessions and not anything in the nearby of what we where hoping for when we “hired” him earlier.

Jan’s greatest achievement was in fact to put also Kariem Ali on the team which did a marvelous job helping me test the library (he built the entire Unit Testing suite we based our development upon in fact) and answer support requests in our forums and fixed bugs and such. But apart from that I had basically carried the others working more than 100 hours every week for more than 3 years without one full week of vacation during that whole period.

So now we were four people, two dedicated resources on marketing. Still I in addition to most of the coding, product strategy, support etc also did most of the marketing in addition to that neither Jan nor Stian answered any support, did much coding (Stian did some at the website and tried to sell on phone though mostly failed), created press releases or anything. Though to be fair to Jan, me and him working together were able to create really great ideas and Jan is a very good “idea maker”. Also if you need a course for any parts of Microsoft.NET technology, Jan is probably among the best resource available in the world in teaching .Net technologies to others. Though unless I “did it”, hardly anything would get done.

Though we kind of agreed on the goals, or at least the others let me do my strategy mostly without arguing against it, and I didn’t really mind working so much since I felt I could really do what I wanted to do which was to create Open Web cutting-edge technology in an Open Source environment.

Due to this very ideology I even managed to get Sergey Hakobyan to move from Armenia to work with us here in Norway. Sergey I knew from before since he worked some with me on SmartWin++ and I knew he was a brilliant developer. This proved to be the one thing which later would make the others gutsy enough to move on without me since they trusted Sergey to be able to maintain and push forward the code in Gaia Ajax Widgets. None of the others in Gaiaware are able to create code that resembles mine.

Bård Stranheim – BIG trouble!

When Bård Stranheim started to work in Gaiaware everything changed.

First of all we then started spending a significant amount of time in meetings, and very often these meetings where ending up in wars debating different opinions. Me and Bård pretty soon found out that we were like oil and water or fire and dynamite. This whole thing culminated in that I claimed from the others that unless Bård left the company and I was being made the CEO then I would leave. At this time I understood that if I were to have anything left of my original vision I had to get rid of Bård and be the “agenda setter” officially through the title of CEO. Bård, Jan and Stian thinking that Bård was a better fit than me to run the company left me no other choice than either to “prostitute” myself into becoming a “code monkey” or leaving the company. Since I have developed ideas which are incompatible with “code monkeying” the choice was natural for me. Though I must say it was really sad and I feel that the amount of unjustice done to me was huge in the process.

Aftermath

It feels really weird when thinking about it in retrospective…
First of all I did more than 90% of the workload. It was my idea, I created the team, I created the strategies, I did all the marketing, and I did more than 95% of the development in addition to all the marketing etc. In fact I had to spend almost two months convincing Jan about that Gaia had a superior technology foundation and that it held a place even though Microsoft were creating ASP.NET AJAX and giving it away for free.

I do not think that the others threw me over board because they wanted to be “evil” or anything like that, but I basically feel like I created something which I gave away 75% of for free to three other people and then when they disagreed with me on the future direction which they actually had said yes to when I brought them into the idea they threw me over board and not respecting neither my right to be a part of my own “child” growing up, neither a part of my own creation. But of course, if I think of it like that I’ll grow insane so I think of it like a learning experience which brings me on to…

…lessons learned

I did only three mistakes at Gaiaware, first of all I was too afraid to start a company alone so I started a company together with Stian. BIG MISTAKE! Stian is a Jehova Witness and unfortunately very good at mixing religion into his work which can be really challenging sometimes. Also he didn’t really want to build the RIA framework of the future but had bigger dreams in regards to evangelizing “the message from God”.

The second mistake was to give away one third of the company to Jan. I thought Jan was going to be a positive contributor in both regards to marketing and the code. To some extend he accomplished the first, but I still in addition to contributing *EVERYTHING* (or close to 99%, Kariem and Sergey later did some) to the code also contributed far more in regards to marketing than what Jan did. I did all the SEO (which brings them about 1000 unique visitors from Google every day), I did all the press releases getting attention from digi.no, ajaxian.com and so on and I did most of the web-design except parts of it which was being done by another friend of mine Tobin Harris which Bård demanded had to leave when he took the “timeout” period.

The third mistake was to let Bård on board. Bård is also very much a believer in Christianity and also mixed in far too much religion into the company. I should have taken the hint when he said he wanted write a book about “Jesus based leadership” somewhere in the future, but unfortunately I believed he was the right man for the right job. In addition he didn’t have the experience/qualities he needed to create what Gaiaware were supposed to become, but even more important; He didn’t know he lacked these qualities! Also Bård had the success from GAT-Soft which made him further believe in his own qualities as a leader and strategist. There is nothing in life as hard to face as your own success since when you have had one success you tend to think the entire world will be comparable to your previous success.

Bård does not have the capacity to think strategically in a “world box”. Bård has never and will never obtain the qualities needed to create the RIA Framework Vendor of the 3rd Millennium…

Conclusion

First of all I will never again partner-up with people, my ideas are probably too weird or different for me being able to find anyone who will ever agree with my ideas and vision, even though due to my extreme coding abilities and innovative concepts most people will say that they “believe in me” in the beginning to get on board. I have actually heard argument such as; “sorry, but your vision is for me blasphemy since in my belief system it requires Jesus to be reborn before that will happen”. Working together with Bård and Stian made me have to argue about really obscure and weird things like not being able to have the title; “Titans” on busines cards since it was considered non-Christian behavior and even the name Gaia I had to spend a significant amount of time convincing Stian about how beautiful it was since that too was an “ancient God” and the bible explicitly forbids having “other Gods than me”. Christianity in the forms of Stian and Bård proved to be far thougher to fight than I could possibly imagine at the start…

Second of all I will never “give away” such greatness that Gaiaware and Gaia Ajax Widgets was, at least not so that I myself end up being marginalized and left with less than 50.1% of the shares. I did what I did because I trusted people, that turned out to be a BIG mistake! If you’re having plans about starting a company and you believe that you have Grand Ideas then DO IT ALONE! Do NOT partner with other people who have “lesser ideas” than you. They WILL eventually destroy you! Even though you don’t think that now.

Future for Gaia

I think that Gaiaware have about 50% chance of “succeeding” into becoming a Telerik II or Infragistics II. A platform vendor for the 3rd Millennium however which was my plans is though completely out of the window, not to mention an OPEN Platform Vendor built on Open Source and Open Standards. Even Bård admitted this in our last talk together when trying to convince me into “code monkeying”. With some luck and very hard work though I think Bård might have the capacity to bring them into 50 employees working as MSFT wannabees for about 5-15 years ahead. Mono story is probably out the window though, at least with time. They will probably integrate closer and closer with Visual Studio and other Microsoft specific technologies and Mono will slowly suffer and eventually become history. Not before it is too late they will discover the importance of supporting BOTH platforms. Open Source and Open Standards will suffer. I will not be surprised if they start creating closed source Silverlight components in fact. I do not believe in Gaiaware without Thomas Hansen. (me)

Future for me

So I move on, but as I said previously I don’t think the others did what they did out of evil. I just don’t think they have 20/20 vision, in fact more like 1/1 vision. I think they did what they feel is the best for the company, though obviously I completely and insanely disagree with their conclusion.

I am NOT finished with Ajax libraries for ASP.NET though. You can already find some code at the Google Code project site. The library will be licensed under a Dual License LGPL3 license. [ps, skien tingrett and agder lagmannsrett ordered me to cease distributing this library the way i did, hence i lost the entire library]

I set myself back three/four years by choosing the wrong people to work with, I will not repeat that mistake again. To quote a great guy (Steve Jobs); “What can I say, I hired the wrong guy”.

So I will create an Ajax Library for ASP.NET and Mono, documenting 100% of the road and LGPL licensing the whole thing. And the most important thing is that it will be 100% based on Open Innovation. I will be the CEO of the company and it will be 100% my vision! I am a serious believer in the Open Web!

This is the last time I’ll talk publicly about the internals behind my leaving of Gaia Ajax Widgets since I am focusing on the FUTURE instead of the past now. But I feel it is important to let others know why and how I left Gaiaware. First of all as “self medication” and second of all because I am a believer in “Open Information” too and that “the truth shall set you free” and third of all because I think there are lessons to be learned for others here.

So all that’s left to say now is;
“Goodbye Gaia Ajax Widgets and Hello Ra Ajax:)

Aftermath I!

If you disagree with my conclusion in regards to the future of Gaiaware I still own 25% of the company and I am more than willing to sell my shares if the price is right.

Aftermath II!

Since I initially wrote this blog Kariem has decided to leave Gaiaware and follow me in Ra-Software which I am extremely happy about! Welcome Kariem my friend :)

Aftermath III!

Today I had a visit from Bård Stranheim where he basically said that he would confiscate my 25% shares in Gaiaware in addition to that he threatened me with lawsuits if I created a “competing product”. This made me ask myself what was more important, get the Open Web to prevail and have great tools myself, Kariem and our upcoming Ajax based Wiki and share those tools for free to those that wants them or to earn money on selling licenses for Ajax libraries. And the conclusion was that I must create Ra-Ajax 100% as a hobby project to play it safe so that none can say I am a “competitor” of Gaiaware. So therefor I am licensing Ra-Ajax under a pure LGPL3 license which gives others the right to fork it, consume it for free and all that stuff. I will also not charge for support or do anything else that will even remotely resemble anything even close to a “business model” from Ra-Ajax. Ra-Ajax will be my own (and Kariem’s) toolbox, and if you’d like to also use that toolbox for free you are welcome :)

Until next time, have a nice day :)

Thomas Hansen

code that grows itself as it executes

this is in the same line of my previous write up, but it goes further you might say.  first run this stuff through your active event executor

event:magix.execute
set=>[set:2].Value
  value=>\[_data].Value
set=>[set:2][value].Value
  value=>success

the above code will create an additional set statement, since it is de-referencing by number, a set statement which does not exist.  the end result will look like this

set=>[set:2].Value
  value=>\[_data].Value
set=>[set:2][value].Value
  value=>success
set=>[_data].Value
  value=>success
_data=>success

so basically, in the code at the top, we are creating code, which later executes as an integral part of the original code, and creates a node called [_data]

notice how the ‘\’ escapes the expression, and informs the first [set] operation, that this is not an expression itself, but are to be treated as text, and copied flat into the value of [set:2].Value.  without that ‘\’, the set operation would try to resolve the [_data] node’s value, instead of treating it as text

some funny things you could do with this is for instance

set=>[_code][magix.viewport.show-message:7].Value
  value
for-each=>[_code]
  set=>[.][message].Value
    value=>hello world
execute=>[_code]

if you are too lazy to run it yourself, you can at least study the results

set=>[_code][magix.viewport.show-message:7].Value
  value
for-each=>[_code]
  set=>[.][message].Value
    value=>hello world
  _state
execute=>[_code]
_code
  magix.viewport.show-message
    message=>hello world
  magix.viewport.show-message
    message=>hello world
  magix.viewport.show-message
    message=>hello world
  magix.viewport.show-message
    message=>hello world
  magix.viewport.show-message
    message=>hello world
  magix.viewport.show-message
    message=>hello world
  magix.viewport.show-message
    message=>hello world
  magix.viewport.show-message
    message=>hello world

code that creates itself

in magix, you can create code that creates itself, as it is executing itself.  see video below

try to run this code through your active event executor yourself

event:magix.execute
_data
  string=>hello world
set=>[magix.viewport.show-message][message].Value
  value=>[_data][string].Value

and see how the code changes into this after execution

_data
  string=>hello world
set=>[magix.viewport.show-message][message].Value
  value=>[_data][string].Value
magix.viewport.show-message
  message=>hello world

you start out with 4 lines of code, and you end up with 6 lines of code, when the code is done executing.  the above set statement will create a node called [magix.viewport.show-message] as it is executing, because the node does not exist.  if it had existed, the set statement would have de-referenced the existing one.  but, since it does not exist, a new node is created.  in addition, set is de-referencing [message] underneath [magix.viewport.show-message], which also obviously does not exist, and is also created as the code executes

hence the above [set] statement, will create two new nodes for you, which will be laid in front of the instruction/execution pointer, such that once the [set] operation is over, there will exist a new node for execution, which is the reference to the [magix.viewport.show-message] active event, with a child node called [message]

this is possible, because in magix you have direct access to the code-tree that you are currently executing, directly from your executing code-tree.  hence the code can modify itself, as it is executing

for fun, you might want to run this one through your active event executor

event:magix.execute
set=>[_data][tmp][editor][magazine][results][dog][cat].Value
  value=>thomas

beats eval i’d say … ;)

magix implements evolution

this might sound weird, but actually, magix illuminate, implements evolution as known from biology.  to understand why, we must look at evolution from a conceptual point of view

evolution is the ability to apply small changes to a closed system, for then to have the system compete, with other similar closed systems, to see which of the two are the best fit, and hence becomes fit for the next generation of that system.  in biology, this occurs as a result of dna combining from two different donors, producing a result, being the combination of some of the traits from father, while others from mother

in magix, evolution occurs, with us, humanity, and the rest of the earth, being the system’s environment – which the system needs to fit together with, to be considered a win.  this occurs due to several factors.  first of all, to spread algorithms, is easy in magix, you can effectively copy and paste code from one server to another server.  secondly, the run time code magix is executing, and the code you are writing, is not different – the dna is transferred together with every single working copy of the algorithm you spread, you might say, as long as you stay to hyper lisp.  in addition, to apply small changes to an existing algorithm, to attempt to improve it, is very easy in magix, to such an extent, possibly all humans could theoretically do it

as people share code, to friends, their friends might improve it and create a mutation of the original code.  if this new version is better fit, it will probably replace the original algorithm, if its creator is willing to share it, and return back to sender as an improved version of the original code

however, more importantly, magix will create self-emerging complexity, inevitably as a result of hyper lisp and active events.  with magix, coding is so easy, and contains so many layers of meta information, that to create systems that create and optimize code themselves, is not only easy, but almost implicitly given in magix.  with magix, you can easily create code that creates code, meaning the system will start taking control over its own evolutionary iterations, and improve itself, after some threshold of complexity is reached

these effects, combined, makes for as magix goes viral, and starts taking completely off, it will inevitably at some point, take ‘control over its own destiny’, and next evolutionary cycles.  we will no longer be the ghost in the machine, the machine will have its own ghost

welcome to the singularity

magix markup language, the language that does not exist

magix markup language, consists of html, combined with web controls.  mml is one of the ways you can create ui in magix.  mml is highly useful, since it allows you to mix-in web controls, with html markup, directly inline embedded.  however, at a fundamental level – margix markup language does not exist

to understand why, you must realize that when you write [link-button] in your markup, then this transforms into the active event called “magix.forms.controls.link-button”.  this event again, returns a linkbutton web control, decorated with whatever you passed into the initialization active event for your link-button

a language, to be existing, needs to have a syntax.  since there is no syntax in mml, but only a 3 dimensional list of controls, and properties, where of some happens to take hyper lisp, and the rest is just plain html – magix markup language, at a fundamental level does not exist.  even though it is highly useful, you can use it today, code in it, and create the exact ui you wish.  pretty impressive for something that does not exist … ;)

btw, below is an example of how magix markup language looks like, with some hyper lisp scattered around

<h1 class="span9 offset1">email harvester</h1>

<p class="span12 text-left">should work on ipad, iphone, droids and everything.  
you can have a web-designer put in any amounts of marketing crap here, to have it resemble 
whatever 'story' your company is trying to sell</p>
< class="span12 text-left">remember the bullshit disclaimer, that legally saves your ass, against spamming laws</p>
<p class="span12 text-left">anyone who can html, can edit this page, and make it look like you wish btw</p>
<p class="span12 text-left">also, remember to edit the smtp settings in web.config</p>
<p class="span12 text-left">this hyper lisp script, and mml page, will send you an email, with 
sender being your new subscriber, and content of email being his name, such that 
you can easily add them to your email news letter</p>
<p class="span12 text-left">see ExecutionScripts/Applications/email-harvester.hl for how to 
turn your web application into running this file during page-load, meaning this will 
be your landing page</p>
{{
text-box=>name
  place-holder=>name ...
  css=>span-2
panel=>wrp
  css=>input-append
  default=>save
  controls
    text-box=>email
      place-holder=>email ...
      css=>span-2
    button=>save
      text=>save
      css=>btn btn-primary
      onclick
        magix.forms.get-value
          id=>email
          form-id=>harvester
        set=>[/][panel][controls][button][onclick][magix.email.send-email][from].Value
          value=>[/][panel][controls][button][onclick][magix.forms.get-value][value].Value
        magix.forms.get-value
          id=>name
          form-id=>harvester
        set=>[/][panel][controls][button][onclick][magix.email.send-email][body].Value
          value=>[/][panel][controls][button][onclick][2][value].Value
        magix.email.send-email
          to=>MareMara13@gmail.com
          from
          subject=>harvested at magix illuminate website, please add me to mailing list
          body=>will contain name
}}