Monday, April 28th, 2008
Category: JavaScript
, Ext
Jack Slocum and his team are listening, and appear to be working with the community to clear things up:
With our recent change to the GPL v3 some concerns have been brought up by the Ext Community. We are hoping to address some of those concerns via community discussion of two new FLOSS exceptions.
The first step for us is the Open Source License Exception for Extensions. It is currently in draft status and we are seeking input from the community before we have it finalized.
The intention of this exception is to allow for more liberal licensing of extensions, language packs, themes and open source developer toolkits and frameworks for Ext libraries under a variety of open source licenses. (Note: this exception is not for applications and does not grant any exception for the library itself. A FLOSS exception on the libraries for open source applications will be addressed in the exception discussed in “Next Up” below).
He is looking for input and feedback. You can see the latest draft, and if you have thoughts join the discussion.
This exception is the first step, with more to come:
After the Extension Exception is complete, the next step will be drafting a FLOSS exception similar to the one by MySQL AB for both Ext JS and Ext GWT.
This exception will for open source applications that use Ext JS. It will have a few distinct additional grants the Extension Exception doesn’t have (e.g. “bundling” will be ok) but won’t be applicable to extensions or toolkits, as that’s what the Extension Exception is for.
Quick work, and the fact that he is joining and leading the discussion is huge.
Sunday, April 27th, 2008
Category: JavaScript
, Editorial
, Ext
OpenEXT is here. It is a fork of Ext JS 2.0.2, which was under an LGPL license (kinda…. with some invalid, non-open source licensing).
The crux of the fork is:
Ext are claiming that a fork of the existing 2.0 version is not legal, due to the way they applied the LGPL. This is likely to be incorrect, and if correct then their use of the name LGPL was grossly misleading.
At this point, developers are getting increasingly passionate, and Jack needs to make a big effort and come clean to his community to save the reputation of the project. If not, it will probably always be in a cloud of darkness as people are both confused and wonder about motives. This is not about personal attacks, but due to not having clarity on the core issues.
You will notice that most of the detractors are members of the Ext community. They aren’t out to spoil some of the work that they themselves put into the project. You see the opposite in fact when you read posts such as this one from Jason Sankey:
The saddest part about this is that the Ext team really have built a fantastic library, and a vibrant community around it. The library had all the hallmarks of an open source success story. Now, however, Ext have committed the cardinal sin of an open source project: they have undermined the trust of their own community.
There are others too.
I actually believe that Jack has been given really poor legal advice, which hasn’t helped his thinking on the issue. It has thus spiraled out of control, and needs a big humble gesture to steer things in the other direction.
If I were Jack, I would call a meeting (phone, irc, whatever) and get all of the parties together. Hash it out with an open mind, and end up with the right answer. Again, this is for the sake of the Ext JS community, customers, as well as the entire open source JavaScript community. If this doesn’t happen, you are keeping the cloud around the project, and handing contributors to other projects. No-one wants to see this happen.
In my opinion the way to protect your business and the project, isn’t through a license to protect the forking. If you have a healthy strong community, any fork by someone wouldn’t put much of a dent in you… as who would go with BobsExt when they can get the real deal. Of course, the reverse is also true, and tearing the community apart will lead to a world where you will never find the true potential.
2.4 rating from 203 votes
Saturday, April 26th, 2008
Category: Editorial
, Ext
There has been a lot of noise revolving around Ext JS and the open source license decisions. Under the original license (LGPL-ish) many thought that it wasn’t actually an open source license at all. Jack changed to GPL last week when he announced version 2.1, but others have been upset with views on forking the old code-base.
I have publicly tried to stay out of the discussion, but today Jack published his thoughts and timeline, as well as frustrations with personal attacks.
This is all such a shame, as Ext JS is great stuff, and I wish that Jack could be spending him time on building more great functionality, and growing his business. I am sure these debates have taken way too much time and energy.
Here is the history from Jack’s point of view:
- For 7 months I wrote yui-ext full time from my home, gave it away under a BSD license and loved every minute of it. There weren’t many donations and no official support from Yahoo. With my third child due, and savings running low I had to find a way to continue building what was now changing to Ext JS and also find a way to earn a living from it.
At this time I contemplated switching to a strictly commercial framework. I openly discussed this decision with the community in the Ext forums. If you want to read the discussions, they are here:
“Official Commercial License Input Thread”
http://extjs.com/forum/showthread.php?t=2194
“Official Open Src License Thread (Commercial License Part 2)”
http://extjs.com/forum/showthread.php?t=2253
In the end, after much discussion with the community, I decided to go to the LGPL.
- Shortly before 1.0 is released, there numerous Ext “clones” started popping up that were hacking Ext themes, css and other resources from 1.0 - before we had even released 1.0. Here I had 4 new themes for Ext JS 1.0 that I had spent countless hours working on (I am not a great designer) and what could now be considered competitors were already using it before I even have a chance to release Ext 1.0.
That’s why the proprietary license on the “Assets” (CSS and images) was introduced in Ext 1.0.
- Ext JS 1.0 is released under the LGPL, minus the Assets license as mentioned above. Shortly thereafter 2 major publicly traded corporations (names withheld) embedded Ext JS into their development frameworks. With no mention of Ext JS except in credits files that no one ever saw. No support for all the work that had been put into the framework. Neither one of them even contacted us. How can that be possible? Can they do that? How can we compete with them taking such a large chunk of our potential customers? These are the questions I was faced with and so began my “Intro to Business 101″.
The next release of Ext JS was released under the Ext License, to serve as proxy to the LGPL and add the additional “no framework/toolkit” restriction that was present until 2.1.
Then things got public:
- This blog post comes out on CNET out of nowhere:
http://www.cnet.com/8301-13505_1-9878693-16.html
- Alex Russell publicly bashes the Ext License on Ajaxian (sorry no link, I could’t find it) and then continues his attack on the license with me personally over email. He then follows with this blog post:
http://alex.dojotoolkit.org/?p=654
- Matthew Garrett decides in his infinite wisdom to completely disregard our Ext License or Assets license:
http://mjg59.livejournal.com/84586.html
- Dion Almaer of Ajaxian privately informs us of concerns he has about the Ext License. His points are very clear and sincere and he is only interested in the open source community as a whole.
- Several private conversations were held with customers regarding the license, spurred by the links and discussions above.
Then Jack talks about some personal attacks, which I won’t go into here.
I really hope that this can be worked out, and we can move on. The last thing that Jack, the Ext community, and even the open source JavaScript community needs is for this to go forward. It needs a quick solution, and I think that a message about the past code base can take care of this.
This reminds me of my old days running TheServerSide. These kind of situations happened pretty regularly. Controversy was the norm, especially with characters like JBoss around… oh and CocoBase brought a lot of hilarity too with their fake legal stupidity.
Anyway, I have been very happy to see that Ajaxian hasn’t had the same level of controversy in the Ajax community as I saw in the Enterprise Java one. Controversy is great for page views, but life is too short. I hope that our community stays strong and united around the simple goal:
Let’s grow the Open Web. The bigger we grow it. The bigger the pie. And, then we all succeed.
Wednesday, April 23rd, 2008
Category: GWT
, Ext
One part of the Ext JS 2.1 release was the prominence of the sub project Ext GWT, a project that lets you code in Java with GWT while using the Ext components and framework.
But wait a minute, I thought that that project was GWT-Ext? Or wasn’t there something called MyGWT too? Confused?
Didier Girard has come to the rescue. He has discussed the different projects, how Ext GWT (the new one) is actually a repurposing of MyGWT. He also lists the differences, in his opinion, between the two projects (noting that the latest one is going to be rev’ing quickly):
Monday, April 21st, 2008
Category: Ext
Ext JS 2.1 has been released. In this point release the featured changes are:
- Full REST support
- Added Ext.StatusBar Component and Samples
- Added Ext.Slider Component and Samples
- Added Example to demonstrate Remote Loading of Component Configs
- Added Grid Filtering Sample
- Added Layout Browser Sample
- Added Spotlight Sample
Even more importantly, the license has changed to a simple GPLv3 version compared to the Ext version, which some complained about. Kudos to Jack and the team for listening to the community and making this change.
Thursday, April 3rd, 2008
Category: .NET
, Ext
Colin Ramsay thinks that JavaScript and C# can be scarily similar as he shows an ExtJS example:
JAVASCRIPT:
-
-
var win = new Ext.Window({
-
title: 'Order Viewer', layout: 'border',
-
width: 500, height: 500,
-
modal: true, resizable: false, closable: false, draggable: false,
-
items: [ frm, lst ]
-
});
-
-
win.on('render', function() {
-
load(5);
-
});
-
-
win.show();
-
C#:
-
-
var win =
new Ext.
Window{
-
Title = "OrderViewer", Layout = Layout.Border,
-
Width = 100, Height = 200,
-
Modal = true, Resizable = false, Closable = false, Draggable = false,
-
Items =
new [] { frm, lst
}
-
};
-
-
win.Render += delegate {
-
load(5);
-
};
-
-
win.show();
-
This works well for ExtJS since it is written in a style that leads itself to this similarity. Colin also points out ExtSharp, a project that lets you write your Ext application in C#:
I really love Ext but coding in javascript just gives me the chills. So I went out and found a way to use my favorite js library (Ext) and my favorite programming language (C#) at the same time. By using a project called Script# I am able to write C# code and have it converted into javascript, similar to GWT. Building on that, Script# also allows you to code against external APIs, but you need to create the types, methods, properties, etc. for everything in the javascript library. So what I did was write a little console app that parses all of the ExtJS source files extracting out the script comments and writing C# files for each class. The end result is a programmable C# API to access all of the Ext objects and I threw in a couple new things to make life a little easier.
Friday, March 28th, 2008
Category: Ajax
, Ext
With the YouTube API recently released, there's bound to be lots of cool controls coming out soon. Thorsten Suckow-Homberg spent a weekend hacking up a Ext-based user extension that leverages YouTube's chromeless API to build The Ext.ux.YoutubePlayer.
The Ext.ux.YoutubePlayer allows developers to embed youtube videos into Ext applications, using native Ext components for controlling the video playback. It’ll show the buffer status and let’s you jump to any part in the video using a slider component.
Cool features include:
- Showing the buffer status
- Playback slider that let's you jump to any position in the video playback
- Mute/unmute the video
- Overall volume control

I whipped up a demo for all to see.
Monday, March 24th, 2008
Category: Ext
The Ext JS user community has been extremely active producing some very cool user extensions to the framework. A new project that recently showed up is a Jabber client that includes:
- Full rostermanagment
- Instant notifications
- Desktop look and feel
- Tabbed chats
- Wysiwyg messages


You can test out the Jabber client here:
https://194.94.76.11/jame/
You can use your own jabber account or you can use the following login info:
username:tester
password:tester
server:jabber.har.fh-stralsund.de
port:5222
Thursday, March 6th, 2008
Category: JavaScript
, PHP
, Ext
I got emails on the same day from two developers letting me know about ExtJS wrappers for PHP.
PHP-Ext
First, Sergei Walter Guerra told me about PHP-Ext "an open source widget library written for PHP 4 and 5 to empower the UI Layer."
The API looks like this:
PHP:
-
-
-
Javascript::stm(ExtQuickTips::init()),
-
Javascript::assign("data",Javascript::valueToJavascript($myData)),
-
//Javascript::valueToJavascript($myData),
-
$store->getJavascript(false, "ds"),
-
$italicRenderer,
-
$changeRenderer,
-
$pctChangeRenderer,
-
$colModel->getJavascript(false, "colModel"),
-
$gridForm->getJavascript(false, "gridForm")
-
);
-
-
$gridForm = new ExtFormPanel("company-form");
-
$gridForm->Frame = true;
-
$gridForm->LabelAlign = EXT_FORM_LABEL_ALIGN_LEFT;
-
$gridForm->Title = "Company Data";
-
$gridForm->BodyStyle = "padding: 5px;";
-
$gridForm->Width = 750;
-
$gridForm->Layout = EXT_CONTAINER_LAYOUTS_COLUMN;
-
ExtPHP
Then Chris Ravenscroft came to me to announce ExtPHP:
"It is something that I had to think about in my day job, because my team is migrating to PHP for web development and I believe that we simply do not have enough time for them to learn JavaScript's intricacies, I needed to be the one person who would have to wrestle JavaScript when problems happened. I therefore needed a way to insulate them from the gory details, which is why I created ExtPHP."
The API looks like this:
PHP:
-
-
$cfg = new Ext_Viewport_Config();
-
$viewport = new Ext_Viewport(
-
$cfg->
-
layout('border')->
-
items(array($actionpanel,
$tabpanel->
name()))
-
);
-
$viewport->jsrender();
-
-
$tabpanel->add(
-
array('title'=>
'New Tab',
'iconCls'=>
'tabs',
'autoLoad'=>
-
array('url'=>
'extphptest.php?content1'),
-
'closable'=>true
-
)
-
);
-
-
new JsReady(JsWriter::get());
-
Maybe you guys can join forces? :)
Monday, February 25th, 2008
Category: Ajax
, Adobe
, Ext
To coincide with the release of Adobe's AIR v1.0, the Ext team released v2.0.2 of the Ext framework with enhanced support for the new AIR runtime. The Ext and Adobe teams collaborated during the AIR beta process to ensure that support for the updated AIR API and security sandbox would be available to Ext users from day one.
To demonstrate Ext's AIR capabilities, founder Jack Slocum went about updating the Simple Tasks application he initially created during the early AIR beta process.

Making extensive use of the newly updated AIR API, the Ext team enhanced the Ext.air package to handle such functionality as:
- Managing native windows, event listeners and automatic state management for the windows.
- Use of the new synchronous database access introduced in AIR beta 3.
- Native drag and drop and clipboard access.
- Playing sounds.
- Minimizing AIR applications to the system tray.
Adding an icon to the system tray is now a trivial task as can be seen in this code sample:
JAVASCRIPT:
-
-
var win = new Ext.air.NativeWindow({
-
id: 'mainWindow',
-
instance: window.nativeWindow,
-
-
// System tray config
-
minimizeToTray: true,
-
trayIcon: 'ext-air/resources/icons/extlogo16.png',
-
trayTip: 'Simple Tasks',
-
trayMenu : [{
-
text: 'Open Simple Tasks',
-
handler: function(){
-
win.activate();
-
}
-
}, '-', {
-
text: 'Exit',
-
handler: function(){
-
air.NativeApplication.nativeApplication.exit();
-
}
-
}]
-
});
-
In addition to demonstrating AIR apis, Simple Tasks v2 also includes several advanced samples to demonstrate creating custom Ext components. These samples include:
ListTree - Allows for a hierarchical list of options, similar to a treeview, but within a drop-down listbox
Custom Grid Columns - Allows for grid columns to be represented as buttons or menus
Switch - Provides a collection of buttons, one of which can be “pressed” at a time. This is used as an alternative for radio buttons.
Ext v2.0.2 is immediately available for download as is Adobe AIR v1.0
Tuesday, February 19th, 2008
Category: Examples
, Ext

Jack had posted a couple of entries back to back in the world of Ext.
First, he has been playing with Air again, and quickly wrapped the Ext 2.0 docs in Air, which would have been helpful when I was hacking the Ext toy on the plane:

Second, he has been playing with Vista gadgets and Ext and created a forum watcher that has the following gadget special code:
JAVASCRIPT:
-
-
function changeDock(){
-
if(System.Gadget.docked){
-
System.Gadget.background = 'images/docked.png';
-
var bd = Ext.getBody();
-
bd.setSize(130, 250);
-
bd.addClass('docked');
-
cm.setHidden(1, true);
-
cm.setRenderer(0, renderTopicMini);
-
grid.setPosition(4, 4);
-
grid.setSize(121, 241);
-
toggleDetails(null, false);
-
}else{
-
System.Gadget.background = 'images/undocked2.png';
-
var bd = Ext.getBody();
-
bd.setSize(528, 383);
-
bd.removeClass('docked');
-
cm.setHidden(1, false);
-
cm.setRenderer(0, renderTopic);
-
grid.setPosition(14, 14);
-
grid.setSize(494, 349);
-
cm.setColumnWidth(0, 350);
-
toggleDetails(null, true);
-
}
-
}
-
-
System.Gadget.onUndock = changeDock;
-
System.Gadget.onDock = changeDock;
-
Monday, February 18th, 2008
Category: Ext
The Ext team has posted about a new community initiative that has been kicked off by Coolite, the same guys that brought you the cool ninja-inspired DateJS parsing library.
Coolite Studio, a suite of professional ASP.NET Web Controls built on the Ext JavaScript Framework, aims to make it easy for .Ne