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: , 4 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: , , , , 13 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 1 Comment »

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: , , 7 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.

Apr 24

Posh Mama? The QVC of the Web is here

Tech with tags: , , 3 Comments »

Posh Mama

I was hanging with Tobias Pegg, who not only has the coolest British name, but works for Me.dium, the company that is trying to bring social browsing to us all. He was about to login to an online tour with Posh Mama, and I had to ask who they were and what was he talking about.

It turns out that a tour guide, and even the community itself gets together on online shopping sprees. The group gathers at Posh Mama and then floats around seeing what is out there. Since you have everyone browsing together, you can get effects that you get in the real world such as:

Hey, Susan don’t buy that on Amazon, you can get it on Foo.com for 10% less. Let’s head there quick.

I have to admit to being a touch surprised, as it made me realize that a bunch of 40 year old mums were installing the Me.dium plugin and doing this stuff. I know that it isn’t that hard to install a plugin, but I also know that my mother doesn’t do it often!

A social QVC

When you think about QVC and the other home shopping networks, you think of a bloke and a bird up on a stage saying “it slices. it dices. yay!” and the odd phone in. With the Web, it can be a social experience where everyone interested in the item can talk about it, learn from each other and you could imagine this group getting quite tight nit. Very different than one person watching the boob tube.

Of course, another side of things is $$$. The tour guide, or the entire community, can setup affiliate networks and get paid commission for taking people on their consumer binges. If you get a big following, I could imagine that you could get some serious money here.

We are watching the same phenomenon as we saw with media. Moving from traditional media such as tv networks and book publishers, and over to bloggers and YouTube uploaders. Now you could be the next online professional shopper!

Apr 23

Why hasn’t Sun created Sun Mesh?

Tech with tags: , 7 Comments »

Sun Mesh

I was chatting with some nice folk at Web 2.0 Expo, and the topic of Live Mesh and Sun came up.

Imagine another dimension where this press released happened at JavaOne:

“Sun has taken their leadership role in the server hardware, operating system, Java platform, and now database world to create Sun Mesh, a top notch computing platform for the future”

If you think about it, Sun has the hardware and software to have made this happen. Instead we will get JavaFXOne with over 30 talks on it with the press release:

Learn a new language to get a Flash/Silverlight thing, oh and have you seen how many phones are out there!

I mean really, why are they focusing on the wrong thing here? They could build mesh ready hardware, Solaris, JVM, distributed MySQL and add APIs to help with sync issues and other productivity things.

Hell, others like Coherence, Terracotta, GigaSpaces, and many others are taking Java and making this grids. Sun should have been doing that. Maybe they should buy one of them (Coherence is taken thanks to Oracle).

Am I wrong?

Apr 22

The future of HTML, XML, and Java look similar

Comic, Tech 3 Comments »

The future of HTML, XML, and Java look similar

I had a really nice chat with David Orchard, Kevin Marks, Brad Neuberg, Chris Schalk, and Dick Wall (all but David are fellow Googlers) and it was funny to see how the world of HTML / XML and Java planning sounded familiar.

On the XML and HTML side you have the tag soup HTML folk who want to be practical and just SVG and MathML going, so put the darn stuff in there. On the other side you have the XML camp thinking about how to be smart and auto include namespaces, and relax requirements such as “When you see the first error, DIE DIE DIE” which makes XML impossible on the Web.

Then you look at Java, and see the growing pains there, and the desires for Java 7. The Java language folks are keen to keep incrementing the language with all of the cool stuff people are enjoying else where (Closures and the like). Then there are the Java platform folk who think that we should keep Java simple, and that adding all of the cruft does the opposite. Their solution is to use Java as a platform and use JRuby, Groovy, Scala, and any other language to develop functionality.

What camps are you in? I am in the HTML 5 and Java platform camp, as you could probably guess.

Apr 20

The new attack on the RDBMS

Tech with tags: , , , 34 Comments »

Data in the cloud

Remember when the Object database was going to kill the Relational database?

OOP was the sexy programming model, and relational set theory seemed so quaint. Once you are using Objects, why wouldn’t you just want to persist them instead of having to drop down to this crazy SQL? Inner joins instead of just person.name.first? Fools.

Well, it didn’t quite work out that way of course. Instead we got half way measures such as object-relational systems, and the huge quagmire (as Ted Neward would put it) of the ORM years, which continue to do well.

Why did Object databases fail? If I remember correctly, it feels like there were a couple of problems:

  • They were slow at first
  • People had a crap load of tools around the relational world.

It was fine to do some simple work, but what about reporting? Where was the Business Objects for the Object database? I remember working with a huge bank that used Versant AND Oracle, and they had a nightmare involving syncing between the two.

Ok, so the Object database failed, so what is the new attack?

The Cloud-y Web

SQL is an enterprise victory that managed to make its way into the consumer Web and application space. A lot of people knew SQL, and it seemed obvious to have a LAMP stack or a Java / .NET stack backed by a RDBMS.

Is this really the right choice for Web applications? Why was Rails so successful? It was due to the productivity gain. How much of that is due to ActiveRecord vs. the other Action* pieces that make up Rails? I would argue a large percentage. Working with the database was actually a big pain in the tuches. ActiveRecord together with migrations helped a lot. It gave us a nice middle man between a full ORM and the SQL that we know and …. know.

What if the database piece didn’t need to be that painful? The source of the pain can be the paradigm shift between the various worlds, but also a huge part of it is scalability. When you have to scale your website, it can be fairly easy to make your application stateless, and then the bottleneck becomes the poor database. This is when you break out the master / slave relationships, think about partitioning of the application, and caching layers (Tangosol Coherence, memcached). Now you have to really think about an architecture ;)

Google had to do this thinking a long time ago, as they obviously have to scale their applications to a huge degree. Scaling the fairly read-only search operation is one thing, but as soon as you get to read-write operations you have a lot more of a head-ache. Scaling a MMORG astounds me. To be that real-time, and having the world constantly changing. Wow. At least there are the separations of locations (world X can be this cluster of machines).

Now we get to Bigtable, the engine that Google built to scale in the cloud. Amazon has their new SimpleDB, and there are others.

What these guys are all doing, is revisiting the database story. Maybe it is time to think about if a RDBMS is the no-brainer choice.

When Google App Engine launched, I thought there would be a lot of people saying “oh man, I just want MySQL instead of this new thing”. I barely heard that, and instead heard more thoughts along the lines of “It is great to be able to use the scalable database that Google uses internally.” In fact, when you start using it and see that it is schema-less, you get a bit of a relief. You can build your model, and even use an Expando to be highly dynamic on the data in the backend. You go along your way, iterating on your code and model and you don’t have to spend time working on up and down migration methods. Doesn’t that remind you a little of the OODBMS dreams? But this time it is fast and scalable!

Resting on the Couch

With the interest in Bigtable via App Engine pushing thought, we also have CouchDB pushing from the other end. The end that says, what would a RESTful approach to a database be?

Apache CouchDB is a distributed, fault-tolerant and schema-free document-oriented database accessible via a RESTful HTTP/JSON API.

JSON built in. JavaScript right there. A database built for the Web?

It is great to see new ideas and thought about the storage of data. The RDBMS isn’t going anywhere of course. There are still a ton of tools out there for it and legacy code, and we all know that:

Data stays where it lies.

It is much easier to implement a new application talking to the old datastore, than migrate the datastore itself. It is like taking out the foundation. Also, SQL is getting new life in places too.

SQLite

I recently saw an application that used GWT on the client, and JavaScript on the server, which reminded me of my comic above. I wonder if we may end up with another flip, having SQL being used in the client, and other systems like CouchDB, Bigtable, etc being used in the enterprise / on the server.

It is happening on the client. SQLite seems to be everywhere. Your operating system, phone, browser, applications, everywhere. I bet I have around 20 SQLite engines on my system right now, and growing. Why is this happening? Well, instead of coming up with your own data format, parser, and search engine, why not just use SQLite and be done. It is very faster, perfect for single user mode, so everyone is a winner.

So, SQL has a looooong future ahead of it, but it will be interesting to see how the RDBMS weathers the latest storm.

What do you think?