May 08

Job Swapping Priorities and a Macbook Pro

Comic, Tech 1 Comment »

Job Swapping Priorities

I had a conversation at JavaOne yesterday with a couple of chaps who had some interesting thought processes on taking a new job.

One of them had an offer from a company that he liked, that would have him changing location (which he wanted) but he was wondering if he should wait for WWDC and see if a new Macbook Pro comes out, and thus join afterwards getting the laptop. The thought of joining now, getting a current version, and then seeing a new one came out would be torture.

I sat and listened for quite some time before suggesting that if this was SO important to their package, that maybe they just tell the prospective employer and if they want them, they will probably buy the bugger a new laptop when it comes out.

Always funny to hear the priorities of the developer. Laptops, free t-shirts, and free food.

May 07

JavaOne 2008, or was it 2007?

Java, Tech with tags: 1 Comment »

JavaFXOne kicked off yesterday, and I captured pieces of the keynote which are seen below as separate videos in the custom player. Someone nailed the keynote pretty well when they said “Shouldn’t this have been last years keynote?” Nothing was actually announced here. The only “you can get this today” code drop was for Update 10 which has been out for months!

Update 10 has some cool features though, and the updates to the Java Plugin are key. If Sun spent a tenth of their time on that versus JavaFX they could do great things. Use it as an extension point instead of a paint mechanism!

Well, now off to polish the presentation that Ben and I give at 4pm today. A sneak peak: If you fancy watching a demo that involves the Wii, show up for a bit of fun!

May 05

Being Open is hard, as we have seen this week

Open Source, Tech 5 Comments »

Open

The last week or so has been a stark reminder of how hard it is to do “Open”, and how the term itself doesn’t mean anything. There are many shades of grey when it comes to open. Let’s take a peak at what happened, and then try to come up with some tools to help us communicate what we truly mean.

Ext JS

This one has been talked to death. At its heart, the project originally had a license that was hard for people to understand. The “LGPL unless” clauses were unclear, and many thought untenable. At best, it was very cloudy.

After some people discussed the issues, mainly in private, with Jack we saw a new Ext 2.1 release until the GPL license (no more special clause). Some were unhappy about this, mainly because it was also unclear that the team actually said “we were wrong” and that these folks had a right to fork the project due to LGPL. Jack quickly came out with an exceptions clause and people are trying to iron this out.

SpringSource Application Server

SpringSource announced a new product for JavaOne, an application server. The Spring Framework itself is licensed under the Apache license, yet the new application server is GPLv3.

This caused a bit of a stur, as people were unclear of the difference, and I read a few posts saying that everything had been changed (which is totally untrue).

Marc Fleury came out of the biotech wilderness to comment on this all, claiming that this is just a packaging of the old stuff with a new license to kick into gear a new business model:

So voila, we now have a box drawn around an OSGi kernel, the Spring framework and Hibernate/Tomcat, and it has a name: it’s an application server. It is the same thing you had yesterday for free, except it is now under the GPL and a proprietary subscription license.

Rod and the team consistently argued that there is actually a lot of engineering here. One little embarrassing moment was in one of the TSS replies. Both Rod and Adrian replied to a message with the same boilerplate response:

Creating an application platform that makes the benefits of OSGi available to end users was a huge investment for us. There’s a *lot* of technical innovation under the hood which won’t be immediately apparent but which enables us to make a generational leap. If we’re giving that technology away in open source, we wanted others who build on it to also give away the results in open source.

When the community saw that, they thought that this was very much canned.

Adobe SWF / FLV Binary Specs

Adobe made a big PR announcement around the opening of Flash and more.

When you come out and say “now we are Open” it gets everyone excited. Their stock bumped up, which may or may not have been related to this (a lot of stocks went up at the same time).

I was ecstatic to see the news on the wire, because I think this will be great for the Web. If we could get Flash to be part of the Open Web, I would love to see it as a win-win.

Unfortunately, when I looked into the details, there wasn’t much to see. The claim was that the FLV/SWF/F4V binary formats will be Open, and there will no longer be the restriction that said you can’t RUN the code.

The problem was that there was no license to go along with this claim, which means that we can’t actually do much with it yet. Adobe isn’t more “Open” today than it was the day before the announcement. This will hopefully change very soon when we actually see the license, and hopefully see even more.

Time to learn

What did I learn through all of this? All of this licensing lark is about clarity and communication. I actually like all of the three parties here. I consider Jack, Rod and many Spring-ers, and lots of the Adobe folk as friends.

When it comes to licensing:

  1. You need one, please
  2. Please make it a standard one
  3. Be careful which one you choose first, as changing it later will cause a lot of issues.

All of the concerns have been due to communication through licenses and on top of them. The license is a great starting point, but it isn’t enough.

So, what does it actually take to be Open?

  • 0 points: Say you are open
  • 10 points: Choose an OSI license
  • 20 points: Define the governance of the code, or the protocols / specs. If the spec gets a license that is great, but how does it get changed? Does Adobe hold all of the cards still? Can others participate? For code, who participates? Can anyone patch? Can you, and if so how do you become a committer? At the core: HOW ARE DECISIONS MADE
  • 30 points: An reference implementation under an open source license
  • 40 points: Where does the IP stand? Did you donate it to Apache or some other foundation? For an example, you can see Exhibit B: Patent Non-Assertion Covenant for the OpenSocial Foundation Proposal

Now, this can be a gradual thing. It is common to start at one end and then slowly move down the stack. It took some time to get the OpenSocial Foundation in place for example, and everyone involved is still working out the governance model.

Also, no answer is “right”. You can put code out there as open source and hold all of the cards. That is your prerogative. It is so easy for us to sit back and say “Oh come on Jack, just put it all out there!” or “Spring? GPLv3? Come on!” or “Adobe, just open source the entire Flash VM!”. These decisions have huge business ramifications, which huge potential consequences. You can understand how it is hard.

All we can really ask is to have the clear communication. Just be honest with us. Be clear with your intentions. The ramifications really do effect us too. I may get more involved in a project that isn’t just run by one company, where they can change things on a whim. If the purpose for using open source is more than the insurance of “if they do something I can fork it” then this stuff matters hugely. Some are in the game for insurance, but in general I think that people like to also get behind causes. They want to put energy into something they believe in. As soon as this happens your project has a part of us in it, and you need to respect that.

I am really excited to see a day though where SWF/FLV does have a clear license, thoughts on governance and how the community can get involved there, and frankly, guidance from Adobe on why they are doing this. Based on that information, people will get more or less excited. Others have already reverse engineered the Flash formats, and a Flash player that lives in the wild under full control of just Adobe means a certain kind of “Open”… one that isn’t very. I have belief that over time, the need and desire will push Flash over the edge. You only have to look at where things have gone with Flex, Tamarin, and other open source projects at Adobe. Macromedia is winning, and over time Flash will surely be open source, especially as Silverlight gets better.

The Peeps Don’t Care

Finally, I know that 99% of the developers out there may not even care, let alone users. There are open source wonks who like to argue about licensing and methodologies. As I watched the John Adams HBO series, I felt a little like those fine chaps arguing over the finer details of things. Many of the people didn’t know what was going on there, or why a particular Article was written the way it was. But, they had drastic implications for the people. I think that the same can hold here for some of the projects.

We need to pat backs when they deserve it, and hold the feet to the fire a little when the details don’t match the rhetoric. I can’t wait to see a better software world continue to grow over time.

May 01

The Bay Stack: Ever notice how Silicon Valley stacks up just like technology?

Tech with tags: , No Comments »

The Bay Stack

I was sitting in a session at Web 2.0 Expo last week with Salil Deshpande, one of the original investors and advisors to Ajaxian and a former boss at CustomWare. (Salil is now a VC at Bay Partners, and you can follow his new blog here).

We started on the observation that the bay stacks up with technology somewhat similar to a stack of technology itself. We then took the analogy to the extreme as we plotted it out, as seen above.

At the bottom of the stack you have the hardware crud, such as chips (Intel), networking (Cisco), disk drives (Seagate) and hardware (Sun). The operating system should go next, but that was a tough one to squeeze in. Oracle and the database is up in Redwood shores. BEA is further down in real geography, but Oracle has now bought BEA, so it also lives in Redwood shores (phew, thanks for the purchase!).

Then you get up into the city itself, where the hipsters define Web 2.0 (Twitter) and design cool things (Adaptive Path).

And what is missing?

O’Reilly is further up in Sebastopol, above the city. Maybe that is symbolic of Big Tim watching over the entire stack and giving companies, and the public, advice? :)

And what about the big Web folks such as Google, Yahoo, and Facebook. They are in Mountain View, Sunnyvale, and Palo Alto… which is in the middle of the stack. Maybe that symbolizes how they are “everywhere”.

Anyway, thanks for staying with me on this pointless analogy. What did I miss? :)

Apr 30

Business Time at Google I/O - Flight of the Conchords

Google, Tech with tags: No Comments »

I was really excited when the Google I/O folks told me that Flight of the Conchords were going to be playing at the event.

I saw one of the chaps do standup in New York city, and he was hilarious.

I better get a back stage pass guys!

Oh, and I am speaking at the event with Ben, so give us a shout.

Apr 29

Apple release of Java 6 is good for some, worrying for others!

Apple, Java, Tech No Comments »

Blue Screen

I was excited to see that Apple have released a new version of Java that gives you Java 6 support. This is great timing, since JavaOne is next week.

You may be thinking “great timing”, but for poor fellows like myself, it is a double edged sword. If I install it, will it somehow mess up my demos and cause a good blue screen while on stage? What a tease.

In fact, for one of our demos, Ben and I need to use Windows (had fun with that today :/) because we are using some of the new Update 10 work. The demo next week should be a lot of fun if we can pull it off. It is a little out there!

I look forward to installing the new Apple update, right after our JavaOne talk ;)

Apr 29

Prototype Invest: It is time for more than money and connections

Tech with tags: , 3 Comments »

Josh Catone posted on Prototype Invest “a unique type of early stage investment firm. Rather than put money into startups, Prototype supplies technology in exchange for equity. This is an investment firm for anyone who has ever been told, ‘Ideas are a dime a dozen, kid. Come back when you have a working prototype.’”

The idea is that anyone with an idea can pitch to these guys, and get them to build something. You could argue that it is a bit gimmicky, or that outsourcing this may not make sense, but I think that one thing is true:

Money isn’t enough

There are lots of ways to get money, including bootstrapping yourself, which is increasingly viable as the costs of doing business online are just so small compared to other markets (couldn’t do it as easily if you need to manufacture something). If you can’t do that, then you have a lot of options still, from angel to banks to VC.

If you have a great idea, then getting the money may not be the problem. Traditionally, people have chosen a VC based on their connections and past history. I know startups who have taken the minimum amount of money that kept a VC interested, just to get access to the connections and network. There is some value there.

But, there is room for a lot more. I believe that VC’s would be wise to start offering more of the stack. Take a Facebook application for example. Imagine that you had an idea, and were choosing between two investors who were up for funding your flying monkey application:

  • Big Shots: “We will give you the money on these terms, and will connect you.”
  • Tech Shots: “We will give you the money on these terms, but we offer more. We have an in-house lab that specializes in Facebook development. We helped build Sailing Monkey before you, and know about both the technical aspects, as well as the business aspects (read: how to actually make money on this Facebook thing)

I know which one I would choose. Who knows if Prototype Invest will take off, but I love the idea, and hope that others bloom and grow so entrepreneurs have choice. With that choice they will be able to make a match with the right VC to give them what they are missing.

Apr 28

Twitter Translate: Automatically convert tweets to your language

JavaScript, Tech with tags: , , , , 3 Comments »

Twitter Translate

I am having a lot of fun with the AJAX Language API. Last week I talked about the translation bookmarklet that lets you translate anything that you select in the browser.

This time, I whipped up Twitter Translate, which watches the tweets in the page, and if the content isn’t your native tongue automatically converts it and replaces it inline. It then adds a mini logo with “translated from …” which you can click on to see the original text:

Twitter Translate Example

It is probably easiest to quickly see it in action:

I think that I am so excited about this API as it is a vertical service that you can just use for free. Think back on how you would be able to integrate language into your applications in the past. You would either:

  • Have to work on the discipline yourself, which is crazy if it isn’t your core business
  • Find a vendor that has some product that you can use, all of which are very expensive.

Now, we can use this service for free, and the best part? It will keep getting better behind the scenes without us having to do a thing!

Apr 27

Ext JS: A reminder that you are not alone

JavaScript, Open Source, Tech No Comments »

Alone

Every now and then, normally when talking to a libertarian, I think about how we are actually all connected to each other. It is impossible to sandbox yourself from society which leads me to conclude that I need to embrace it and do what I can to work out what kind of society we want to be.

With the current Ext JS debacle, you get reminded of how connected your project and business are to other people. Just because you own a company, doesn’t mean that you control it. When I think about my own company, Google, I realize that the most important currency is user trust. It doesn’t matter how many PhDs and great technology releases we have, if we ever lost some of the trust. I think that Google has earned its reputation, but all it would take is something that goes against what we have stood for so far, and we could lose it just as fast. I actually like this fact, as it keeps us honest.

It is a little like your tennis ranking. A rolling year of past performance is what really matters here. It doesn’t matter if you won that grand slam one year and one month ago. This is why every tournament matters. A bad showing loses points.

Of course, with user trust it is a lot more nuanced, and the graph is more exponential (the longer you go back in time, the less it matters).

Anyway, enough side tracking. When you have a software project that is a library for developers, your end users are those developers. If the project is open source, then there is a clear communication of the rules through your license. This is why open source licensing is so important. It allows you to have a simple contract saying “this is what you can and can’t do”. As a developer I can see GPL, BSD, Apache, and I know right away what kind of community this is, and how I can play a role. It isn’t about one license being better or worse than another. It is about communicating rights.

If you are fortunate enough to gain a real community, where other developers are participating, then the game starts to change. Now you have people who are invested in your project, maybe building on it for you, or evangelizing it, writing documentation, or creating their own business. At this point you really start to see what kind of project it is going to be, above and beyond the source code licensing. This is the Open Community side of a project. It can range from: only people who work for company X contribute in anyway, to: active commiters from all over the Web. This paints a picture of the project as a whole, and will have large effects on project, including who uses it. This is all about governance.

This also comes into play in other ways. When you think of Apache, or the Dojo foundation, you know about the legal protection that comes through the process. You know that everyone has signed a CLA, and that the history of the code is clean and well known. This has a huge effect on getting large companies into the game (This is why companies like IBM and Sun are so involved in Dojo IMO).

Now that you have users of various stripes, and a community with varied roles, you also have connections through out. If you then change the open source license for your project, the contract in the community has changed. When you make a change you not only need a good reason, but it has to be transparent, and you obviously have to get all of your ducks in a row to even be able to pull it off (e.g. depending on the change you may need every author of a line of code to get involved).

With Ext JS, there was a strange situation. The original license of LGPL-ish was very confusing, which lead to a confused community. Some kind o change was required, and clarity needed to be brought in. Unfortunately, it seems that the move to GPL has caused more chaos and confusion. Developers who poured a lot of time into the community (e.g. by creating GWT-Ext) are upset. The chaos can rip the community apart and you end up with a true lose-lose. Jack has spent far too much time and grey hairs on this one, instead of writing great code and growing his business.

So, it acts as a reminder, that the community is all connected. Everyone may not be equal, but make sure that communication is incredibly clear at all times to make sure that something like this doesn’t happen.

Apr 25

Translate: Select any text in the browser and have it convert to English (or your language)

Ajax, Google, JavaScript, Tech with tags: , , 5 Comments »

Translate Bookmarklet

I really liked getting the Ajax Language API out into developers hands as god knows we shouldn’t have to worry about translations. Now we can use the API and have the Google back-end do all of the work.

I have recently had a couple of scenarios where I really wanted a quick translation. I had a few twitter messages pass through my stream in French and Spanish. I had the answer to some technical issues show up on foreign forums.

So, I decided to create a Translate bookmarklet that allows me to select any foreign text, click on the bookmark, and a little window pops up with the English translation if it can work it out. Automatic translation is far from perfect yet, but for many scenarios you can easily get the gist (e.g. you wouldn’t want to automatically convert a book).

This is how I created the bookmarklet:

The source

First, I have the raw JavaScript source that will become the bookmarklet. There are a few sections of the code. First, we setup a method that will go off and call the Ajax Language API, passing in the translation and language that we want. This is where you would change the language code for non-English.

if (!window['apiLoaded']) {
  window.apiLoaded = function() {
    var language = "en";
    var text = window.getSelection().toString();
    if (text) {
      google.load("language", "1", { "callback" : function() {
        google.language.detect(text, function(dresult) {
          if (!dresult.error && dresult.language) {
            google.language.translate(text, dresult.language, language, function(tresult) {
              if (tresult.translation) {
                translationWindow(tresult, dresult);
              } else {
                alert('No translation found for "' + text + '" guessing the language: ' + dresult.language);
              }
            });
          }
        });
      }});
    }
  };
}

Then we setup a method that is able to display a window showing the result. I used the Prototype UI Window object if available, and good old alert() if not:

if (!window['translationWindow']) {
  window.translationWindow = function(tresult, dresult) {
    if (window['UI']) {
      new UI.Window({theme:  "black_hud",
                   shadow: true, 
                   width:  350,
                   height: 100}).setContent("<div style='padding:6px'>" + tresult.translation + "</div>")
                   .setHeader("English Translation")
                   .setFooter("Language detected: " + dresult.language)
                   .center({top: 20}).show();
    } else {
      alert(tresult.translation + " [lang = " + dresult.language + "]");
    }
  }
}

Next, we load the Prototype UI window code, and accompanying CSS resources by dynamically adding the resources to the DOM:

if (!window['UI']) {
  var pw = document.createElement('script');
  pw.src = 'http://almaer.com/downloads/protowindow/protowin.js';
  pw.type = "text/javascript";
  document.getElementsByTagName('body')[0].appendChild(pw);
 
  var pwdefault = document.createElement('link');
  pwdefault.setAttribute('rel', 'stylesheet');
  pwdefault.setAttribute('type', 'text/css');
  pwdefault.setAttribute('href', 'http://almaer.com/downloads/protowindow/themes/window.css');
  document.getElementsByTagName('body')[0].appendChild(pwdefault);
 
  var pwblack = document.createElement('link');
  pwblack.setAttribute('rel', 'stylesheet');
  pwblack.setAttribute('type', 'text/css');
  pwblack.setAttribute('href', 'http://almaer.com/downloads/protowindow/themes/black_hud.css');
  document.getElementsByTagName('body')[0].appendChild(pwblack);
}

Finally, we load the Google API loader, and use the dynamic loading option with the ?callback=apiLoaded. This kicks off the main driver that we saw first, and if it is already loaded we call it directly (for multiple translations on the same page).

if (!window['google']) {
  var s = document.createElement('script');
  s.src = 'http://www.google.com/jsapi?callback=apiLoaded';
  s.type = "text/javascript";
  document.getElementsByTagName('body')[0].appendChild(s);
} else {
  apiLoaded();
};

“Compilation”

This is the raw form, and we need to get the bookmarklet form, which you can just use right away if you are wanting English. For this, I use John Grubber’s makebookmarklet Perl script to do the conversion.

The Server

The Prototype UI code lives on the server, so I put a striped down version over there which just contains a combined Prototype + Window JavaScript file, and just the one theme CSS set.

In Action

Unsure what I am talking about? Just watch it in action:

UPDATE: I also implemented Twitter Translate to automatically convert tweets to your language.