Currently live blogging from the Google Developer Day, London 2008. Fittingly the live blog is a Google Doc.
Like a moron, I left my mobile phone at home, and then ended up separated from everyone I know; so have a look at what I'm liveblogging and find me, if you care.
Edit 2008-09-18: notes now below.
The End
Lightning talks 16.25-17.35, SF2
Google App Engine
<head> web conference - headconference.com
Old days;
An app would be built, load-tested get discovered, and die.
Now:
You test with ONE person, it gets discovered, and GREAT!
Construction phase
More complex
Tools more limited
Both of these have their reasons
1,000 files
Django source > 1000
Solution: Guido van Rossum: http://icanhaz.com/zipimport ; rietveld on Google OS
1MB limit on ALL data structures
You will run up against this EVERYWHERE
Can't combine files on server
Solution: Amazon S3 - infinitebits.info gives FTP access
No long--running processes
Solution: hack it with HTTP refresh!
Web-based cron! webbasedcron.com
Short-term quotas
24-hour quota
Uncatchable
Bad advert!
Backup and restore
GAE Backup And Restore (uh-huh)
Open-sourcing it
Django
Google are not into developing application frameworks
So basically use Django, dudes.
http://opencountrycodes.appspot.com/
http://isvat.appspot.com/
Android work, Kevin O' Sullivan, Sita
Airports still run on 60s technology!
Looking at mobile technologies
Predictive analytics from ACARS data - archived and ignored
Passenger mobility
Smartphones, context-awareness
Application
GPS
Mashup, overlay with airports
Click on airport and get Arr/Dep info, querying a backend system
RDF, Tom Morris
RDF as an open-knowledge enabler
URIs in the data
Links to other documents
URIs that define something e.g. wikipedia:Cities:London
Mashups
PITA - be a developer
Or have the data link itself together
"Let's all use the same names"
dbpedia, bbc.co.uk/programmes
libris.kb.se - Swedish Nat lib
every book has a URI
SPARQL
A bit like SQL
sindice.com - search existing linked data (DERI - digital something research inst)
Libraries + making easier for JS/AJax devs
Green Maps
Green maps - Anna approached for Glasgow Green Map
Open project for local community?
... Get them to do the work
Also existing reuse groups - the Electron Group
Put out leaflets everywhere around Glasgow
"Enthusiastic developers!" "Enthusiastic designers!"
... bugger all
But presented at arts school and got lots of volunteers
Dear Green Place
website deargreenplace.org
Visualize your data: Google Visualization API, Nimrod Talmon, ->16.10, Atari
Types
Generic
Specific
"Hard"
Examples - iGoogle gadgets
Wrapped in Javascript, exposed to the iGoogle framework via an API
Problem:
Potentially many data sources
Potentially many visualization sinks
Many APIs - hard to find "the right one"
Google Visualization
Seems to be a generalization of Google Charts
Google Finance - generic stock charts, embedded into GF
70 lines of JS code for a simple-ish 10-20 point graph with widgets
Why?
Google does the visualization, so fast & scalable
API built with devs in mind
Premise of visualizing
Abstract a visualization
Data
Appearance
Model objects from Google's API
google.visualization.TypeOfVisualization() ... chart.draw()
(Nothing should ever make it easier to build pie charts. Especially three-dimensional pie charts, the anti-visualization for people who won't get numbers anyway. Tufte FTW!)
(A bit hard work - data.setCell(x, y, 'Label') is a bit like <cfchartdata>. JSON methods?)
Q; data going to Google?
A: Javascript call to get API, but here generation is in client. Others in Flash wrapped in JS.
Q: other formats e.g. JPG?
A: ?
Events & actions
Own event model
Visualisations listening to events and communicating between each other via closures addListener(fred, 'select', function() { barney.method(); })
Data views
Dynamic re-slicing off the data you're using for one vis, potentially for reuse in another
Not a new data set - change the data, change the view
Like SQL views
Q: aggregate functions?
A: wait 10 mins
Why develop for Google Visualization?
Reach - de facto standard
Viable business model? Panorama, Eureka
(Note to self: ESC :w does not work in a Google doc)
Extend API with new visualizations
Declare draw() method on prototype
... slightly dry but interesting demos... they shouldn't have these things just after lunch....
SQL-like syntax querying Google Spreadsheets... Pretty cool, but count the number of browsers that will deal with this scalably: I make it two.
Ah, this might only be happening server-side. Phew. I wonder if I still have that Bobby Tables spreadsheet lying around anywhere.
Visualizations laid out on the webpage, about as well as MS Word does it in a document, only you can dive in and work out why everything keeps turning bold, dammit.
Q: Accessibility?
A: Don't have generic solution for this - write your own vis and you can do it
(Don't see how that's possible, as the data will still be in .setCell() calls... how about microformats on a plain-HTML table, with the table appearing for accessibility-impaired? A method to convert HTML or JSON to a data source would be tidier anyway.)
Lunch
A deeper look at Google App Engine, Mano Marks
Overview of App Engine
Quick walkthrough
Best practices
Standard problems of setting up a webapp
Startup, scalability, upgrades, maintenance etc.
GAE easy to start, easy to scale
5M pageviews / month for typical app
Payment for additional cap. BY END OF YEAR
Python only
More languages soon
Mano can't tell us which, but he won't tell us why he can't tell us - we don't need to know
Offline processing
No cron, but... soon.
SLA
None
Cloudstatus, partner org, monitoring tool
Lock-in
(You can't download your code, so get svn warmed up)
cite: Hackathon slides and other useful info - http://code.google.com/p/google-app-engine-codelab/downloads/list
Tutorial
app.yaml
WSGI application
methods as per HTTP verbs
Models on top of BigTable
schemaless - "what happens if you add a column to a table in a relational database? EVERY ROW in that table gets that new column"
Q: What about data security?
A: Google do not trawl through your data. It's your data. We don't touch it.
Q: There's an SLA?
Q: Do we put ads on your applications?
A: No. Your visitors will never know this is a GAE app
Entities
Most properties indexed and efficient to query (not including BLOBs and CLOBs/text)
Keys - limitations (only one ID per entity, cannot change ID or key_name later) but Get() by Key is VERY fast
No revision storage - you have to do this yourself
Transactions
ACID
No queries in transactions - Get() and Put()
So assemble your data first with .gql() to inform your transaction, then perform
Counters
BigTale doesn't count by design. So must Model.count() scan every entity row
class Counter(db.Model)
Sharded counter - in an entity GROUP (see docs)
Counters count a few entities on reads, and whenever necessary you could the counters
(I thought Mano was going to break into a rendition of "That's Amore" to the camera just then. I think you had to be there.)
Cache reads and counters
memcached
cacheing for n seconds, where n is OK for your purposes.
Q: 1MB limit - can we gzip and reassemble?
A: We don't give you access to files and Python - I think - needs that. But you have a 1MB cap on out-of-the door. And we don't give you the underlying C libraries
Q: So C won't be the next language on App Engine?
A: I didn't say that (laughs)
Q: SLA...
A: UNOFFICIALLY, I'd like people to say "I want to spend this amount of money". Currently you have a quota but it's divided up so you don't use it all up in one spike.
Q: URL fetch - buy more time? (limit 4s)
A: at this point no way round that. Can't comment on future.
Q: Django 0.96 - 1.0 roadmap?
A: We haven't released one. You can upload 1.0 yourself. But things like GeoJSON rely on C libraries, so there are issues there.
People are always going to ask "Are we going to support multiple versions?" (which wasn't really the question - 0.96 was pre-release, 1.0 wasn't. A good reason to just support one version, and that be 1.0. It's not as though there's an SLA in the way.)
Q: memcache - shouldn't GAE handle that/
A: we don't want to pre-empt the developer too much, taking control out of their hands. Maybe a 20% proj will handle that if it goes in as a feature request...!
State of AJAX, Dion Almaer
Dion runs Ajaxian
1. Desktop-y world
2. Cloud services
3. Browsers
4. libraries and frameworks
5. Gears and monkeys
Take a step back
What does AJAX mean now we're where we are
Took a designer to see the potential
"The latency will get you, the web's not good enough"
Needed proving through e.g. auto-suggest
Maps - eyecandy of draggable maps itself isn't really AJAX
just different ways of thinking about the static HTML page
Car ads
Show the dashboard (UI)
Not the engine schematics, although they're important to get right
Jared Leto as a UI overhaul
Vista as a UI and not much else
cite: Jef Raskin, The Humane Interface. I want Raskin's head-mounted Borg interface.
"... if the interaction between one human and one system is not polite and friendly it will poison the user experience..."
Visual design and interaction design
Two separate worlds
But they're both right
The whole web used to look like MySpace
Now, Apple Store - no Flash, but it zooms and swoops
Expectations change: Bridge On The River Kwai vs. Spiderman 3
Script.aculo.us, Dojo, jQuery follow expectations. You just have to use them nowadays or the absence is noticeable.
cite: Jakob Nielsen
1-second reaction time of your app is about the limit for keeping the user's flow
0.1-1, people notice, but they don't mind too much
The library dartboard!
Gradually collapsing down to jQ, Dojo, P+s.a.u, and... GWT
1. lightweight - Prototype
2. hate Javascript, love that hot lava Java? - GWT
3. functional, DOM-like - jQuery
4. rich soup-to-nuts - Dojo
I don't like the sound of soup to nuts. I've been in that sort of restaurant.
P, jQ and Dojo all have thin core + plugin community + visual effect plugins, so "pick one"
Examples of other libraries
Mobile Me (SproutCore)
280 Slides (Objective-j)
Dojo realtime charting - GFX package, Dojo grid, Processing.js (Canvas)
The 0.1second limit
Event queue, browser, processing - browser's switching system (JS? style?) a bottleneck
Firefox logo used for the browser, I see
No such thing as threads in JS.
cite:Brendan Eich, "Threads suck."
In comes Google Gears, neeow
WorkerPool process outside the browser
Jef Raskin again. "The typed 'Y' becomes a learned gesture" - warning dialogues just get clicked on, unheeded
So undo instead
But how do you do that on the web?
Form history
Slider bar changes between revisions - don't ever actually have to give someone the undo
cite: Jonathan Schwartz. Every RIA has a RIBackend
Talking to desktop
Notification APIs
1. Fluid - Mac only, but integrates tightly using Greasemonkey-like scripts
2. Gears - more about giving the browser access to existing APIs
3. Mozilla Prism - cross-platform
4. Adobe AIR - using Flash / CSS skills to build desktop apps
Back to the dartboard...
Wii remote, directing a dart, in an Ajax application.
You've won a rubber bully!
Wii -> bluetooth -> WinXX -> wiiuse -> wiiusej -> Java plugin WiiTracker -> browser
Java PLUGINS?
In Chrome,
Works out of process (doesn't kill browser, totally independent)
Deployment with JNLP - download components only once
Micro-kernel
Modern Web Development
cite: Alan Foreman, poisonedminds.com
Mozilla's monkeys
Getting other languages into the browser with VMs
Plugins only get you so far
HTML5
Gears is trying to follow this (and presumably to some extent lead it)
70% of sites have a div called "footer" - so why not <footer> ?
Questions
Q. Compatibility & SLAs - adopting other people's projects?
A. No plans - still very immature environment.
Keynote
Browser as client
Ubiquitous, zero-install, standards
but capabilities mediocre
Google want to improve browser capabilities
Cloud access
Massive capability beyond most devs' reach
Connectivity
Current web apps are pushing the browser's capability
Browsers haven't changed much, but the web has
Invisible iframe!
So Chrome
*** CHROME COMMERCIAL BREAK *** - good but covered by Scott McCloud already
APIs
Programmatic accessibility of authentication and content
*Significant* growth in traffic
Google App Engine
Other languages in pipeline
Solves non-dev problems for apps;
Deployment
Pre-launch investment
Hardware maintenance
Scalability
Apps
Wordle
Buddypoke (OpenSocial)
iPhone app - code.google.com/p/metasyntactic
Pixverse - Pix Wall and Pix Chat
Android
Open Handset Alliance (!)
OS mobile platform + WebKit
Mike Jennings
*** Android demo ***
Tape over branding
Slashdot is so 2002, unless you're me
Touch screen
The blue dot app - accelerometer
OpenGL, Java
Google Web Toolkit
Writing BIG AJAX apps
Live demo - a bit .NET
Hosting browser running Java bytecode, not Javascript representation.
So can be debugged as Java code