Live blogging from Google Developer Day

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