Friday, 30 May 2008

Live (Brief) Blog: GWT Extreme!

Ray Cromwell (Timepedia.org)

GwtQuery (aka GQuery) is jQuery ported to GWT. Sweet! It has some extra features though - compile time selector parsing, and optimisation by transforming into document.querySelectorAll() on Safari 3.1, on Firefox, Opera & older safari it uses the xpath document.evaluate(). On IE <8 it uses DOM & regexps - urgh, but necessary.

Generators - feature of deferred binding. It replaces requested type with generated calss definition, like in Ruby. Nice!

GwtQuery uses annotations and compilation to get a 5:1 code size decrease when compared to jQuery. The code is lean and readable, increadibly impressive. It's being released as an alpha today - definitely having a look at this asap!

Also demoed are a high performance graphics API for GWT, and a chart API - Chronoscope. Seeing 1 million rectangles animated in a browser, and 1 million points animated on a graph using javascript is impressive, I have to say.

Syndroid is interesting. It allows you to write gadgets in a restricted API and compile to Dalvik, JS or (in the future) AS3.

An interesting GWT to SWF technique was shown, and although a hack was pretty awesome. I wonder if there's a future in this?

Thursday, 29 May 2008

GWT and Appengine

So, Google seems to be missing a trick at IO. Surely with all the GWT stuff and Appengine stuff we've seen, you would imagine that there would be some sense of integration? How about using GWT with Appengine with a python backend? Seems sensible, right? So I'm not the only person who thought this: enter python-gwt-rpc.

The server side infrastructure for implementing gwt services in python without json. GWT for Google App Engine.

This is simple small library, for use both GWT (Google Web Toolkit) and GAE (Google App Engine) technologies together. This is a tool for simple and quick integration between google-app-engine and google web toolkit, without using json as a communication protocol. if you use this library you can write GWT services implementation in Python, with full support of transfer primitive types, custom object types and exceptions objects, with full type translation. This is first code written by me in python :), I'm java developer so maybe I do some wrong. Please report me any problems and suggestions.

So I asked at the GWT API talk about this, and nothing is timetabled yet, although he said it was a logical step.

The good news is that GWT has some integration with other AJAX Apis, gwt-google-apis.

The Official Google API Library for Google Web Toolkit

This package is a collection of libraries that provide access to Google APIs and products to developers building applications with the Google Web Toolkit (GWT).

Initially, we are providing support for Google Gears, the recently-launched developer product that extends the browser to allow developers to make web-based applications function even while offline.

We are planning to add support for other Google APIs, but there are many APIs to support, so this will not happen overnight. If you'd like to get involved building support for your favorite Google API, please read the Making GWT Better guide, and then drop a note on the GWT Contributor Forum..

We saw some gadget, gears and maps examples. Looks cool!

Live Blog: Inside the Android Application Framework

Dan Morrill (Google)

Android is not just a framework - it's a complete OS.

An android APK is an android package, which is a collection of components. Components share a set of resources. An "Activity" is a discrete chunk of functionality. A task is a collection of activities. Activities are an encapsulation of a particular operation, and are implemented as a concrete class in the API. They run in the process of the APK which installed them. A task is a runtime record of a sequence of activities, which has a UI history stack - they are what users on other platforms know as "applications".

Android processes are linux processes. 1 Process per APK, 1 thread per process - by default. All (most) components interleave events into the main thread. A process is strated for a given user ID when needed - binding to a service, starting an activity, binding to a contentprovider, etc. Process keep running until killed by the system, possibly to free up memory.

Activities has several states, and lifecycle methods are called upon transitions. There are three general phases:

  • Starting up
    • onCreate() : first method called during lifetime
    • onStart()/onResume() : signals that execution is beginning
    • onResume() : signal that a pause has been undone - you are the top level app
  • Normal execution
    • onFreeze() : save UI state
    • onPause() : loss of focus and possible impending shutdown
  • Shutting down
    • onStop()/onDestroy() : final shutdown and process termination
    • Not guaranteed to be called

Each thread has a looper to handle a message queue. Events from all components are interleaved into Looper. Loopers cannot accommodate multi-threaded access. They are designed to play nicely with MessageHandlers.

Views use Loopers messages to fire events. Since Loopers are 1:1 with threads the view tree is too.

There are two ways to start a service - explicitly, until explicitly shut down, or implicitly, until the last client unbinds.

Processes are spawned by the special "Zygote" process. Process + pre-warmed Dalvik VM == responsiveness. Process runs under userID unique to system - process + userID == security.

Each application has a unique userID, and each has direct access only to its own data. Other apps resources are available only via defiend APIs that are explicitly exposed.

All this can be confusing, but it's for the noble goal of speed. Serialization is slow, as are memory transfers - so CPU is not the bottleneck.

Process management is transparent to code, almost always. Lifecycle is seamless, but data sometimes isn't.

Binder is a general process IPC mechanism. It's implemented as a kernel module and a system lib. There are generally two entry points: Bundles and Parcelables. A parcelable is a class which can marshal its state to something Binder can handle. Standard Java serialization has semantics parcelables wouldn't use.

Bundles are type safe maps - containers of primitives. Simple data passing APIs use Bundles. Used for onFreeze().

AJAX Apis

Just a tiny post to draw attention to all the different AJAX APIs that google now offers. I'm particularly fond of the new libraries api, which allows you to get libraries from Google's servers, like jQuery - with smart versioning, caching, etc.

Flash/Flex tools from Google

One thing that is worth bringing your attention to from IO is that the big G and Adobe have made public a set of libraries for ActionScript 3, i.e. Flash CS3 or Flex 3, called corelib.

The corelib project is an ActionScript 3 Library that contains a number of classes and utilities for working with ActionScript 3. These include classes for MD5 and SHA 1 hashing, Image encoders, and JSON serialization as well as general String, Number and Date APIs.

You can also see the docs online, and there are some examples on code.google too.

Live blog: Keynote: Imagination, Immediacy and Innovation... plus a little glimpse under the hood at Google

Marissa Mayer, Vice President of Search and User Experience

First off we get a montage of artist themes for iGoogle. Why is it interesting for developers? Because it was built on top of the iGoogle API.

Google have been focussing on "the ordinary and the everyday", e.g. iGoogle. Gadgets are a new form of distribution and a new way to reach people. What are the most used app on the web? Social networking, blogs, news, search, homepages and mail.

Occram's Razor for design: the simplest design is probably right. Why is the Gogole homepage so simple? "We didn't have a webmaster and I don't do HTML" - Sergey. When they tested the design, the users didn't do anything for minutes. They asked why - "I'm waiting for the rest of it". In 99 this style of website was unheard of.

When you do a query today, you hit around 700 servers. Andrew has videoed the details about what happens here with the Google infrastructure, so I refer you to that! Suffice to say that the point is that the users don't need to know the complexity of doing a search query, just the be presented with the easiest interface, validating Occram's Razor for logic.

Google run bucket tests on tiny differences, and through metrics and stats they can say which one is a better user experience. The example is the whitespace under the logo on the search results page. Metrics are interesting, using "user happiness" through repeat searches, etc. Turning design into a science.

"If I had asked people for what they had wanted, they would have said faster horses." - Henry Ford

One experiment saw a 20% fall in searches when the latency doubled. Similarly, in Google maps, when they decreased the page size from 110K to around 60K, they had a 30% increase. YouTube shows users uploaded videos straight away, whereas Google Video makes people wait 24-48 hours, which is one reason that YouTube is more successful, with a steeper learning curve.

With search the feedback loop is quick, so people learn quickly, going from novice to expert in only a month or so. It's important to understand the learning curve and to make the experience great for new users and experts, not catering to either to the detriment of the other.

Its incredible to think about the sped of advancement. Mobile phones, for example, in the last 10 years.

Cross language information retrieval is a big thing for google. The end game is to make searching independent of language, and they're starting to get there with Google Language search.

"A healthy disrespect for the impossible." - Larry Page. Search is an impossible problem to solve perfectly, but you can keep improving. Disambiguation is a great example - does dr mean doctor, drive or Dominican Republic? Google Health is another example of an impossible problem, but even by approximately solving it you can make a huge difference in people's lives. Google Book Search too. It's important not to get caught up in the difficulty - divide and conquer.

"Be scrappy, revel in constraints."

An interesting constraint is translation of Google. They tried to use a professional services firm, but this failed. They ended up using user volunteers to help translate Google, through a link on the preferences page... They now have 250K translators! There is an easter egg on the translate - the language "Bork bork bork!", as spoken by the Muppets' Swedish chef. They have over a million page views in this language every day!

Google brainstorm ridiculous problems to help the creative juices keep flowing. For example, "Should web build a suspension bridge between two buildings?" Such brainstorms brought around Street View, and Book Search. The imagination is a muscle, and this, and the 20% time exercises it, and keeps Google healthy.

"Do not let the urgent drown out the important."

Google does read your emails about features and problems! They listen to this feedback, as well as the automated feedback.

Wednesday, 28 May 2008

Using GWT to Build a High Performance Collaborative Diagramming Tool

Alex Moffat and Damon Lundin (Lombardi)

JavaSript is the scripting language that sits in your web browser and enables many of the interactive web applications that we all know and love.

Google, however, don't write very much JavaScript. They have written a tool instead called Google Web Toolkit (GWT) that writes JavaScript out of a Java application. This means that Google developers can write their web applications in Java rather than JavaScript, which is a good thing. Java and JavaScript are very different.

I'm not the best person to explain the differences between JavaScript and Java but I'll give it a go: Java is a robust, strongly typed, compiled, language that can be written and debugged in a mature Integrated Development Environment (IDE) like Eclipse or Netbeans. JavaScript is...err...none of those things. More importantly, when writing JavaScript your JavaScript code may run differently depending upon the browser that your user is running - writing JavaScript that is compatible across all the different flavours of browser can be painful, to say the least.

Because of GWT, Google developers don't have this problem. They just have to write their Java application and GWT handles the rest. Rather than just being smug and keeping this to themselves, they have made GWT available to the community under an open source license (the Apache license) and are actively promoting and evangelising about it.

This may seem somewhat obscure but it is going to result in a massive efficiency saving in the development of web applications. Which is good news for us all.

One topic not addressed in anything that I saw today is how GWT is going to fit into the AppEngine strategy.

Lombardi have created a SaaS diagramming tool (a sort of Visio for the web) called Blueprint using Google Web Toolkit (GWT). The application is written entirely in JavaScript generated by GWT.

Rapid Development with Python, Django and Google App Engine

Guido van Rossum (Google)

Best practices for using AppEngine with Django. Appengine does one thing well: runs webapps. It only handles HTTP requests: think of it as an RPC server. Resources are scaled automatically - requests may go to the same process, serially, or different processes, in parallel or serially. There is a highly scable datastore based on BigTable - not SQL, there are no joins.

An application is a directory and everything underneath it (symlinks are followed!). Application metadata is in a app.yaml file, which maps URL patterns to request handlers, and seperates static files from program files. The SDK emulates the deployment environment.

Request handlers are invoked like CGI scripts. Environment variables give request parameters, and response is written to stdout. CGI is not slow (in this case)! Modules remain loaded, and main() is called for each request. Can use module globals for caching. CGI doesn't mean clumsy! WSGI support is layered on top of CGI.

Some talk now about app engine project setup, although I prefer the google-app-engine-django project boilerplate. One interesting point is that Django 0.96.1 is preloaded, which is pretty old, and that there are some slight differences between local and deployment.

One interesting point about main.py is that here you can arrange to have your version of Django loaded, to replace the old 0.96.1 version bundled in. Also, in settings.py you can set DEBUG to true when os.environ['SERVER_SOFTWARE'].startsWith('Dev').

Aha! He recommends google-app-engine-django too! :o)

Unit tests: you have two options. DocTests or unittests. DocTests are string literals which define a sequence of console command - result conditions. Unittests are modelled on JUnit. You can created fixtures to be loaded into the datastore also.

Building an Android Application 101

Speaker: Jason Chen


Poor Jason Chen, he wasn't having any luck with his presentation. About 15 minutes in, Eclipse hung on him and caused his Mac to 'grey-screen'. He had to reboot and then Eclipse literally took about five, maybe ten minutes to restart.

Anyway, he got going again in the end. He did a walk through of how to build an Android application using the Android plugin for Eclipse and the Android emulator. (See my earlier post for the keynote demo of Android.

)
  • XML is used to control the layout of the application.
  • Android applications have the concept of activities and intents. An application can perform a number of activities and can express a number of intents. When an application expresses an intent, for example - "view a photo", the Android system handles the matching of the application expressing an intent to an application that can perform a relevant activity. There is a loose coupling between intents and activities.
  • The matching of applications expressing intent with applications able to satisfy those intents with relevant activities is all transparent to the end user.
  • Storage and persistence options
    • Preferences
    • Flat files - file system access
    • SQLite - full SQL database for your application if you are using relational data.
    • Also possible to implement your own content provider

Extend the reach of your Google Apps environment with Google APIs

Speakers:Jackie Bodine, Ryan Boyd (Google) and Ron Hess (Salesforce.com)


I've just witnessed Ron Hess do a demo of the what looks like the latest incarnation of the Salesforce paid-time-off application - that old favourite. It now has Salesforce-server to Google-server calendar integration demonstrating how you can use the Google APIs to access Google services from your own web application. Steve Fisher, Senior Vice President at Salesforce, originally wrote the code that runs this application.

Update: I just learnt from Ron that, while related, this was not in fact the Paid Time Off application.


Live blog: Extend the Reach of your Google Apps Environment with Google APIs

Jackie Bodine, Ryan Boyd (Google) and Ron Hess (Salesforce.com)

"Radish" device is shown off first, a Google 20% project. An entirely wireless solar-powered schedule display, that retrieves the calendar events for the room from the Calendar API. Nice project!

What APis are available? Calendar, Contacts, Documents List, Spreadsheets, provisioning, migration, reporting and single sign on. AtomPub is used, with GET, POST, PUT and DELETE, although Google extends this with a data model and batch mode. A standard atom feed is shown, with some extra fields, with the gd prefix.

Google Calendar Sync (for Outlook) is an example of an app built on top of the APIs. You can Create Edit, Delete Calendars and Events, as well as change your ACLs.

Two types of auth, ClientLogin (user/pass) and AuthSub (web token).

There is a very simple Api, three lines of code are all that are required in dotNet to upload a document. There are client libraries for dotNet, Java, Python and objectiveC. There are more details on code.google.com.

Another example is the Google Email Uploader, built on top of the email migration Api.

Some talk now about code.google.com and the resources that are available.

Spreadsheet API capabilities are both by cell and by row.

JSON-in-script output format is used by the APIs - a callback is made when the data is available in JSON format. If the data is only available to people from your domain, you can write a proxy that will authenticate with a non-user account.

Some talk now about appengine, and using the python library. Authentication ties in nicely with apps.

Ron Hess is up now to talk about connecting platforms in the cloud. Some hype for force.com first :o) Ron talks about the collaboration between Google and Salesforce, bringing Google Apps into Salesforce. Salesforce use Google Apps internally, and also use an HR app internally. They want to track vacation requests in force.com and the calendar event in Google. Ron shows how when you change time off in the force.com platform, the change ripples through to the Google calendar. He then shows the Apex code used to create the integration.

Last of all is the Google Solutions marketplace, which allows you to advertise tools you have built that use Google apis.

Google IO Keynote

So Matt and I are both at Google IO (Google's developer conference) today and tomorrow and are both going to be live blogging the event. Matt is quicker at getting his content up but I've got a video camera...

On a related note, I used Apple iMovie for the first time today. It has got automatic upload to YouTube, a very useful feature. I expect that it is using the YouTube API, one of the Google APIs that is being discussed today.

The keynote is being chaired by Vic Gundotra, Google's Vice President of Engineering. Arrington had a preview of the main announcements last night.

Gundotra began with the words "What does Google have to do with developers?" The answer is that Google wants to make the internet better for developers. The internet is Google's ecosystem (I thought he said 'geekosystem' but I must have misheard him) and making the internet better is good for Google. Making the internet better will allow developers to write better web applications. Better web applications attracts more users onto the internet. More users on the internet means more Google searches, which in turn means more advertising revenue for Google. Simple. Next question.

The most exciting part of the key note for me was the demonstration of Android. I apologise for the camera shake but the demo is well worth seeing. Look out for the integration of Google Street View with the on-phone compass (towards the end of the video).

Other announcements were the release of the latest version of the Google Web Toolkit (see post) and the general availability of the AppEngine. Pricing for the AppEngine was also announced. It will remain free to use for the first 500MB of storage and the first 5 million pages views.

Live blog: Google IO 2008 Keynote

Vic Gundotra, Vice President, Engineering

In a room packed of Google advocates, with terrible wifi access. Apologies first from Vic for the terrible queuing situation and the lack of seats in the auditorium. People sitting on the floor will be a frequent sight I feel.

What has Google got to do with developers? Moving the web, and web development, forward is critical to the entire ecosystem, and Google is committed to it. Vic is going to talk about how Google is going to facilitate this.

Back to the era of the mainframe. Powerful computing for its day, but not accessible. General public didn't have access to the mainframe, and even people who had access had a slim slice. Deployment of software was easy - dumb terminals.

The PC era came about. The power of the mainframe was given up, but the computing power was accessible. Deployment, however, was a nightmare. Dumb terminals, to powerful client.

The emergence of the Netscape browser gave us the web. Deployment became easy again. But we went back to a dumb terminal, and the power of the PC was lost. Clouds are required to run the apps like Amazon. This is out of the reach of most developers, so the massive compute power becomes inaccessible again.

How can we get round this? Well, make the cloud more accessible, and the client more powerful. (Can anyone say Appengine & Gears?) Connectivity has to be kept persuasive. There is an explosion of conenctivity at the moment - just look at mobile broadband.

But what are Google's motives? There are two reasons. Google was born in the era of the web, it was the only platform it has ever known. A standard by concensus. From standards like HTML and CSS grew apps upon apps. There is a debt due to Open Source software. Google was only able to get where it is because it stood on the shoulders of OSS giants, and it owes OSS. Secondly, it benefits Google economically. The richer the web, the more users, the better the experience, the more Google benefits. A healthy ecosystem is good.

Making the client more powerful.

Why did it take so long for XmlHttpRequest to become ubiquitous? Why so long for HTML5? We need to speed up the evolution! So here we have it: Gears. Think of Gears as a bleeding edge HTML5 implementation. Google is deeply committed to HTML5, and hints that Gears will become redundant when HTML5 is adopted widely.

SVP of Engineering from MySpace is introduced to demo. So it's a demo showing how they can take the mail facility of MySpace offline, and add some searching functionality and some added sorting. Simple to develop, and simple to use, but big benefit. It's available now.

Keep it persuasive.

The marketplace for mobile apps is very fragmented right now - at least 14 different platforms to build for. Google believe the browser will be the entry point for many applications in the future - but not now due to hardware limitations. So Google developed Android, an open source stack for mobile devices. Steve Horowitz, the engineering director for Android is up now to talk about the platform. Android is a complete stack to build a mobile phone, that they will give away to the mobile market. A WebKit browser is built into Android, as well as key apps (think address book, etc.). They have a concept called "views" which are built upon browser app (e.g. Maps) which you can extend to make your own apps. Now a demo of the phone. Wow! Looking good. Icons are nice, usability seems excellent. They have a "spaces" like concept with the background, with drag n drop gadgets. You can created new gadgets that are shortcuts. They have very similar gestures to the iPhone. A maps demo, very similar to iPhone again, and a pacman game. Street view is demoed next which is nice. But wait! A compass mode, where it will change the direction of the view based on your direction. Nice!

Making the cloud more accessible.

Round of applause for Amazon for opening up their infrastructure first - taking the lead. And Google followed, opening the infrastructure in the form of Appengine. Appengine takes away the pain of sysadmin stuff - setting up Apache, MySQL, Linux, etc. etc - and also sorting out the hosting. The design goals were to make it easy to create the app, scale the app, and free to get started.

So a little demo of Appengine. You develop locally with the SDK, then deploy, and then launch. If you've designed it with scale in mind, you can scale with no further work to millions of users. Some examples of apps built on appengine so far. TweetWheel, and laterloop are the examples used, along with an app devloped oin a weekend to help in the aftermath of the China quake.

Areas of work coming up: offline processing, rich media support, additional infrastructure services.

Two new APIS for AppEngine announced! A memcache API and a image manipulation API. Also the first guess at billing costs. Always going to be free to start with, but beyond that 12c/core-hour, 18c/GB-month, 13c/GB-transferred out, 18c/GB-transferred in.

AppEngine is now open to everyone! Brilliant news for everyone :o)

Make it more accessible.

Mark Lucovksky, Technical Director of GData/AJAX APIs is up. Talking about accessing (read/write) the user created data from Google services using Atom through the GData API, and AJAX RESTful APIs. So a demo up using a blogger blog. First up: add a YouTube video. Javascript example, very nice result. The videos come up in a column, with a lightbox style when you click on one. You can dynamically search for videos in page too. An RSS feed is next, in two forms - slideshow and text. A news ticker example follows. All customisable using CSS that is publicly documented. Yet another example, using a celebrity map! Possibly the most interesting is the final demo, the translate API, allowing you to translate any part of your page dynamically.

Making development easier.

Talking about Google Web Toolkit here (GWT). GWT is a Java => HTML + JS compiler essentially, with a set of tools to enable this. Bruce Johnson, Engineering Manager for GWT is up. GWT gives you the leverage to make JS applications happen. One of the best features of GWT is that it compiles HTML/JS to be compatible with all major browsers. GWT has a hosted mode, where you can use the app in a development mode. Just to underline if you don't know, GWT is so cool. It makes Java relevant again for the web.

Blueprint is the example of GWT used here, which is a diagramming tool. Impressive tool, feels like a desktop app.

GWT 1.5 RC is available today! Java 5 language support is now available :o)

One important point is that the resultant javascript does not have to be maintable, as the Java is. This means that the compiler can go to extreme lengths to create fast code.

800 Open Source contributors helped make this possible. Thanks to them!

Making the web more social.

Google is responding to the consumer's desire to be more social online, as seen in the last 5 years. David Glazer from OpenSocial is up. Two things are coming together to make the social wave crest. First is consumer desire. Second is that the web is enabling. Taking the same idea the fuelled the web, connecting documents, to people. It will take three things: Identity/OpenID, Authorization/OAuth, Apps/OpenSocial. What is OpenSocial? A set of APIS, a reference implementation, and a community. Last night OpenSocial Spec 0.8 was pushed last night. Shindig is an Apache project, which is a reference implementation for OpenSocial which is currently being developed.

Nat Brown CTO of iLike is up to talk about OpenSocial. iLike is a music social discovery service. They realised that they wanted to focus on the music, not on the social network. Showing an example of an OpenSocial gadgets in hi5. Talking about how they have such gadgets on myspace, orkut also. Reaching many more users now, through this application syndication.

Back to David. Growth from 0 users last November, and there is now a reach of 275M users, with 20K developers and 50M installs. Good figures! So many containers who are implementing - too many to name... Yahoo, Salesforce, iGoogle, bebo,.....

New in OpenSocial 0.8 is a RESTful version, and coming up in the future is a template language based on XML.

Google Friend Connect is a way for developers to easily leverage OpenSocial.



Google is committed to Open standards and innovation... and that's it!

Road block at registration for Google IO

Long, long queues for registration at Google IO. The worst I have ever seen at a conference. You would think that Google would be used to handling such large numbers of users.

The pricing structure is more like that of other parts of their business too: low cost, high volume.

Friday, 16 May 2008

The Detroitisation of Silicon Valley

Interesting article here from Laurence Haug.

Saturday, 10 May 2008

The Launch

So Kusiri has officially opened for business!

We launched at Dreamforce Europe 2008, a small launch, no stand or fanfare but it was good to start talking about our products and ideas.

The highlights; for me it was the positive response we have got from Adobe and Salesforce.com to our K-Framework demo. The demo was designed to illustrate a new way to approach developing in Salesforce.com and really show that flex is a great tool, the reoccurring feedback was how great it was to have a totally custom and cool Salesforce.com interface while retaining all the flexibility of the original app, that combined with some of the whizz you can add with flex made an impression. Which was good!

So now that we have launched what are we doing next. First and most importantly we are working with some great clients, this is giving us an opportunity to build more to the K-Framework product as we encounter real world use cases. We are meeting with Adobe, Google and Salesforce.com over the next couple of weeks to talk about how we can best work together and as always we continue to develop really cool technology.

Thank you to everybody who has helped over the last coupe of months to get us to this point and watch this space your going to hear a lot more about us over the next couple of months!

Thursday, 8 May 2008

Iteration three live: www.kusiri.com

Just a quick blog post to say that the third iteration of www.kusiri.com is live, and has been for a day or so now! We're much happier with this iteration, which is awesome :o) We are firm believers in iterative design, and our own projects are no exception! The only thing now is it would be great if Google would index it. (There is an accessible text version that Google should be indexing FYI.... you'll see it if you turn off javascript!) As you may know, we have been looking into why this is the case, and hope to have this sorted soon.

Andrew will write more about the design after we've finished at Dreamforce and has a minute. In the mean time, why not drop us an email or leave a comment to let us know what you think!

Live Blog: Visualforce: User Interface as a Service: What User Experience Will You Build?

Andrew Fawcett, CODA Group International
Ron Hess, Salesforce
Andrew Waite, Salesforce

Ron Hess kicks off with the Safe Harbour statement as per usual. Visualforce is coming in '08 (GA). About 25% of the crowd have already tried out vVisualforce. Visualforce is all about creating any experience you want, on any device (as long as its html/pdf). You can take parts of salesforce UI, if you like.

Made up of three building blocks - pages, components, controllers. Clearly salesforce are following the standard MVC pattern. Pages are basically a XHTML template with bind fields linking into the controllers. A component is a reusable piece of UI, which is referenced using a namespaced tag in the template. Salesforce have 50 standard components you can use. Controllers are either standard (think CRUD of sobjects), or custom. Controllers are naturally written in APEX.

Template snippet:

<apex:page/>
...
<c:myComponent attribute="{!bindvar}"/>
...
</apex:page>

Three types of controllers : standard, custom, extensions.

<apex:page standardController="Contact"/>
<apex:page controller="MyController"/>
<apex:page standardController="MyController" extensions="MyClass"/>

Andrew Waite takes over. Requests a URL which doesn't exist - this prompts you to create the page. When you've asked for the page to be created, it opens the page and stubs the template for you. Having demonstrated the standard component reference, he starts editing it in the in page editing. Some nice code completion. And we have Hello World! So he's now added a standard controller on the apex:page tag in the template, standardController="Account", and a apex:detail tag, and adds an id into the query string. Ta da! It's worth noting that the detail component is aware of the custom object the page is referencing without configuration.

And quickly adding a custom component:

<c:caseBubbles account="{!account}"/>

So now he's demoing a custom Controller demo. Apex code, very javaesque. Some nice getter and setter generation at compile time (upcoming feature). Very standard controller, much like any controller you see in Java. Note that bind variables in the template translate to getters in the controller.

One final look at PDF generation, which is just setting an attribute on apex:page. Another thing to note is the use of dot notation in the templates, e.g. account.quote - you can traverse an unlimited amount with the dot notation. They work out when the template is compiled what data is required to streamline their data fetching for a template.

Back to Ron. Just a quick word on zip file resources, where you can upload an archive and reference files in it in templates.

Andrew Fawcett now takes the stage to talk about CODA. Coda is all about accounting. They started working on CODA2GO in November, so a quick release for their v1. A few points: they wanted to maximise use of standard components, standard CSS styling, AJAX etc. Essentially minimum custom code, aspecially when cross browser problems could come up.

Back to Ron to close. Page Level Security also available going to be in Summer 08.

Live Blog: Apex, Visualforce & Beyond

Steve Fisher, SVP Platform

Salesforce want to make every admin an app developer: point and click tools to build any application. This spans model, view and controller.


Salesforce want to provide seamless integration with any app, any device, connected or disconnected. Salesforce currently handle 62M API calls per day, and 1.6M outbound messages per day. They currently have an offline edition also, although only about 2% of the room had tried it. Coming up are async processing, RSS, and custom objects & tabs offline.


They have 1.4M lines of custom apex code, 7,900 triggers, 3,000 webservices, 12,000 classes and email-to-apex. Coming up are custom controllers, dynamic apex, async apex and batch apex.


A focus is trying to ensure every user had a productive and enjoyable experience. They have inline editing, search lookups with filters and a drag'n'drop calendar. Coming up in 2008 are new list views, auto-complete for lookups, public tags and a wysiwyg page editor.


They have 8,300 developer preview pages in visualforce now. Coming up it will go GA with the PDF, custom controller, custom pages, custom components, and multi-language features.


Free developer sandboxes are currently available, as well as a metadata api and an eclipse plugin. Coming up will be more metadata goodness, pushbutton promotion from sandbox, sandbox partial data copy, and a sandbox for every developer.


Currently there are 40k apps installed from appexchange, 400 ISVs, 70k leads delivered to partners. In 2008 we will have partner licence management, online sales channels for salesforce products & ISVs, and more personalisation and community.

Wednesday, 7 May 2008

Live blog: De-mystifying integration: making the complex simple

Darren Smith from Salesforce kicks off. Integration is hard, but a reality. A lot of people have to integrate, and presenting data to different systems you are running is hugely important.

Salesforce provides five major areas for integration: connectors, developer toolkits, mashups (s-controls), integration with productivity tools (Google Apps).

Web services api is one of the reasons for integration being successful in salesforce. This is key. Use and adoption of the api is huge, and increasing. 55% of traffic is API use.

The connectors, e.g. for SAP allow you to map between salesforce and SAP. The data loader uses the web services API also. The concept of the external ID (a candidate key in db lingo) allows you to map easily. ETL tooling from partners allows you to integrate more easily with native connectivity.

If you an EE or above user you can expose your apex code as a web service.

Coming soon is async apex code for messaging - low on details, but sounds like a messaging service?

Trying to move beyond Google Maps mashups!

Ami Gal takes the stage. Magic is a multi-national company. They have to connect with many different CRM, and integration was difficult. They wanted an online picture of their company, and not having to beg people for reports and paperwork. Reporting is very important to them as they are NASDAQ listed. They realised they had to integrate salesforce with core aplications - SAP for accounting, web shop, customer support, licensing.

How did they do it? They tried the exercise 3 years ago with a different CRM spending $600k, and failed. So they decided to build their own technology - iBOLT.

What did they achieve? $160k a year savings. Enhanced customer service. Before they waited for 3 or 4 departments to process them. Business agility, easier to respond to market needs on a market by market basis. Cross-sell and up-sell. Eliminate errors - data quality. Real time monitoring.

To deliver one person worked for four days. It took five days to agree the process between the departments.

Response time after purchase dropped down from 24 hours to 5 minutes.

iBOLT allows you to build a graphical workflow of integration between multiple sources, e.g. Exchange, Lotus Notes, Google Apps, salesforce, ... Seems very slick, athough only saw a screenshot.

Data synchronisation is only the first step. You want to be able to free people's time up and streamline as much as possible. Now commissions for salespeople are on time, customers renew their own licenses, sales cost less and less. Forecasts are better, and you have a better understanding of customer buying habits.

Integration is not a pain, but an opportunity. Don't try to reinvent the wheel and write custom code. It takes too long and is too risky. SoA ensures agility.

Now onto Vik Gupta from Google Enterprise. Bit of talk about how easy it was for Google and Salesforce to integrate.

For Google it's all about getting apps into the cloud and making it easy for people to do so. How? The key is APIs. They started off with the LDAP sync tools, and then moved onto SAML for SSO. Then it was a matter of taking on a whole migration suite. At the moment there is an IMAP migration tool. IMAP has many quirks though, too difficult for them to support. GData API now allows you to create integration or migration tools.

Small bit of chat about gadgets, and their portability. GWT (Google Web Toolkit) is touched on briefly, as well as Google Gears.

Appirio get a mention here, and the Campaign Timelines product in particular.

Google Solutions Marketplace gets a plug too - Google's Appexchange basically.

Live blog: Force.com Application Framework Overview

Force.com Application Framework Overview
Eric Bezar / VP Product Management
Lucy Mills / Business Excellence Manager, Nimbus Partners


Eric kicks off with the safe habour statement as usual :o)

To begin with we find out that we have a mix of administrators, IT professionals and executives in the room.

Salesforce mission is bigger than CRM. The platform is embedded in every single instance already - although you might not know it!

"App Developement for a Spectrum of Audiences." From point and click through to the Eclipse based IDE, from declarative to functional, Salesforce are trying to reach out to all types of developers and admins to build and customise.

"Why would you build apps on Force.com? Focus on Innovation, not Infrastructure."

What types of apps are a good fit? Web apps with relational data basically! Sweet spot: manual or email-based business processes involving data collection, processing and reporting.

Lifecycle of app development...

Identify business requirements => browse app exchange for components to reuse => create or modify data model => create or modify user interface => add business logic

Then can move onto sharing rules, audit history, workflow notifications, approval processes, reports & dashboards.

Example: Expense tracking app

Found an example app on appexchange, and he's not going to install it live - he's got one he made earlier!

He's using a pre release instance of SF (Summer 08). Now you can move columns on drag and drop, in place editing, and more enhanced list views. Autocomplete for reference fields and filters for lookups are also new.

We now move onto adding a roll up field to the data model to demonstrate how easy it is to add.

Ways to manipulate UI - page layout editor (drag'n'drop), s-controls, and Visualforce (soon to be GA!).

Modifying your data model example. Creates a new across-object formula - new feature coming in Summer 08 release, where you can access referenced objects in formula, using a iTunes style helper. Very cool.

Brief look at standard Workflow and approval functions, but no demo here as not enough time.

Lucy now takes over. Little background about her employer, Nimbus. Going to talk about the purchase order system she built in January. Never been on a salesforce course, and not of an IT background.

PO system was paper based. Nightmare! Salesforce was first choice.

Little background around the business process behind internal development: Understand and agree, Map process, Build, Communicate, Help, Forget.

Demo of the PO application, creating a PO and the approval process. Some other points, such as example validation rules.

Overall results - pipeline of spending, massive labour cost reduction, all users have sf access - users are #1 adopters & evangalists - only 2 spreadsheets are now used to manage data. Removed complex automation system costing £12k at a reduced rate - required developer, too difficult!

Other applications built - 51 objects, over 100 workflows, 6 approvals, 21 custom tabs, 16 s-controls.

Q&A

If you build an application using SFA objects can a platform user access them? No!

How do you see yourself positioning differently form other vendors in this space? By providing a more broad spectrum of tools that can be used to create a wider range of corporate apps.

Are the filters definable for relationship lookup? Yep, admins can define them.

Lucy: When mixing between applications is it SSO? Yes, it is single sign on.
Eric: Can you mix salesforce with sharepoint? Yes, we have partners for doing that. SAML is coming in summer also to enable single sign on.

Solving the Integration Dilemma: How and Where You Should Look to Integrate

Speakers:
  • Juergen Brixel, Salesforce
  • Raj Mistry, Salesforce Profesional Services
  • Gunther Frenzel, Tecan Trading AG
  • Sandra Kolb, Tecan Trading AG
  • Bernd Jung, On Demand Business Group
  • Simon Peel, Cast Iron Systems

A 09:00 session on integrating on-premise systems into Salesforce - excellent! Some of the key messages below.

Integration-as-a-service is a key part of the Salesforce technology stack. Integration is a common part of any Salesforce project and integration into ERP systems is the most common type of integration.

Salesforce have native connectors for - amongst others - Oracle and SAP. There are also the third party vendors who provide application services such as TibCo and Cast Iron Systems.

  • Talk processes not systems. The user understands processes, not systems.
  • Clean your data before you do the migration.
  • Use standard technologies - don't reinvent the wheel.

When integrating on-premise solutions to Salesforce you are going to have to do something company-side of the firewall.

Live blogging from Dreamforce Europe and two taxis

Matthew, David and I will be blogging - live - from the Dreamforce Europe event.

And finally: I saw two Salesforce taxis at the same time. :-)

Tuesday, 6 May 2008

K-Framework 1: Zero configuration Flex applications

To coincide with our launch tomorrow at Dreamforce Europe I am pleased to announce the Kusiri K-Framework.

The K-Framework is a framework for Adobe Flex applications in Salesforce. Amongst other things, it means that custom Flex applications - developed on the framework - can be controlled via the Salesforce Setup page.

In this video I show how easy it is to do this.

K-Framework 2: Flex report dashboard

This video is a sequel to the K-Framework 1 video where I announced the Kusiri K-Framework. In this video I focus on one of the application features that we built out in our prototype Flex application. It is a feature that you will be familiar with: dashboards.

Something that I don't mention in the video is that Flex applications built on the K-Framework automatically have access to all of the reports in your Salesforce instance. This means that all of the advanced graphing functions that come as standard in Adobe Flex, are instantly available to represent your Salesforce data your way.

K-Framework 3: Visualising the social graph

This was the final video of the day and I think it shows! Or rather, I think it sounds - can you hear it in my voice? :-)

Anyway, in this video I show how it really is possible to do anything with your Salesforce data using Adobe Flex and the K-Framework. At the bottom of every contact record in our prototype Flex application there is an interactive network diagram that shows who that contact knows. The network diagram can be modified to change the number of known-people that are displayed and the visible number of social-degrees-of-separation can be controlled. The social network can also be navigated with the diagram and the social path from the contact that you know to the contact that you would like to know can be traced.

We are not doing it here but this could be displayed inline, in a standard Salesforce record page.

There is one mistake that I made that is worth correcting here: I said that a social network is implicit in every instance of a Salesforce customer database, what I should have said is that a social network is latent in every instance of a Salesforce customer database. You have to be capturing the relationship data (in a custom object perhaps) in Salesforce before you can visualise it.

Thursday, 1 May 2008

I don't understand what it is that you do

My mum lets me know that she 'gets it'.

Hi Andrew

I hope you're well.

I have just read this article about cloud computing. After hearing an article on the radio I can finally understand what you do and give it a name, which is interesting for me.

http://tinyurl.com/22y4gf

Love
Mum
X