GeoWeb 2010: Building Blocks of Real-Time Distribution
Hi. If you're reading this, there's a good chance that you saw my talk from
GeoWeb 2010 about the "Building Blocks of Real-Time Distribution." I made
reference to a number of pieces of technology where it may not have been
obvious where to look for more information. This should help that.
The presentation itself is here: Building
Blocks of Real-Time Distribution (PDF)
Buzzwords
- SimpleGeo
- My current employer. Our goal is to provide simple tools for those not
versed in traditional GIS to help manage data with associated location
information.
- Flickr
- The venerable photo sharing site where I used to work.
- Fire Eagle
- Yahoo!'s platform for managing and brokering user location. I
introduced Location
Streams (XMPP PubSub) and helped specify OAuth-over-XMPP while serving
as the development lead.
- NextBus
- Provider of real-time transit information in partnership with local
transit agencies.
- Foursquare
- Location-based mobile social networking game that allows people to
"check in" to venues (bars, restaurants, parks, etc.), share information
about them, and compete for status.
- Gowalla
- Similar to Foursquare.
- XMPP
- An instant messaging protocol designed for machines. Also known as
Jabber; this is what Google Talk uses. Well-specified for many uses, but
overwhelming. Its ability to track presence is one of its strongest
features.
- Atom
- IETF-defined XML syndication format with support for namespaces, etc.
Successor to RSS.
- JSON
- JavaScript-inspired, ultra-simplistic data format with parsers and
serializers in most languages. Frequently used in web applications due to
its tight relationship with JavaScript.
- GML
- The Geography Markup Language. XML-based and exceedingly thorough; many
uses of GML refer only to a constrained subset.
- KML
- Created for Google Earth, standardized for the rest of us. Both
represents data and defines rendering rules for it. XML-based.
- GeoRSS
- Intentionally stripped-down XML format for representing OGC Simple
Features, originally intended for use with RSS, but will work with any
XML-based format.
- GeoJSON
- JSON equivalent of GeoRSS; even more simplistic (due to lack of support
for namespaces), yet still sufficient for representation of Simple
Features.
- Atom Streaming
- Publish Atom content over HTTP; connections remain open as long as
possible. Twitter and LiveJournal do this.
- XMPP PubSub
- Publish Atom (or other) content over XMPP using a publish-subscribe
model. “Nodes” can be published and subscribed to at will. Fire Eagle does
this (by the name of “Location Streams.”) SuperFeedr supports both
publishing and distribution.
- Web Hooks
- HTTP callbacks; when new data is available, it is POSTed to a
pre-configured URL. SimpleGeo supports this for re-publishing changes to
layers.
- PubSubHubbub
- Further clarification and definition of Web Hooks, including support
for deletion. Most Google services support this in some fashion. SuperFeedr acts as a hub and will
transform between different formats and protocols (XMPP).
- Flash Sockets
- Socket connections made available to a Flash application within a web
browser. Can be used to implement clients for multiple client-initiated
protocols.
- Web Sockets
- Native socket connections for web browsers. Defined as part of HTML5
and only available in modern browsers (Firefox, Chrome, Safari).
- Nginx
- If you need a web server that will handle highly concurrent
long-lasting connections, Apache and IIS won’t cut it, as they have lower
limits on the number of clients connections they can hold open at one time.
Nginx tends to be faster in these circumstances.
- Node.js
- An up-and-coming event-based runtime for JavaScript that I’m pretty
excited about, based on Google’s V8 virtual machine (which powers Chrome).
Writing asynchronous network services is more straightforward than in other
environments.
- Jetty
- A lightweight HTTP server for Java, suitable for long-lasting
connections.
- Twisted
- An event-driven network framework for Python. It’s almost a world unto
itself, which ups the learning curve, although performance is quite
good.
- ejabberd
- Effectively the reference implementation for XMPP. Custom modules can
be built to support additional functionality, but they must be written in
Erlang.
- Prosody
- For our purposes, Prosody’s main differentiator is that it’s written in
Lua, a lightweight scripting language
often used in video games. This means that it can be extended fairly easily
to implement application-specific functionality.
- XMPP Component Protocol
- An alternative to connecting to an XMPP server as a client; allows
custom code to respond to XMPP events according to custom business
logic.
- OAuth-over-XMPP (XEP-0235)
- OAuth defined for XMPP PubSub subscription management. Used as an
alternative to trusting JIDs and associating them directly with
accounts.
- Twisted Words
- An XMPP layer for Twisted. Can be run as a stand-alone server or as a
component with an external XMPP server.
- Wokkel / Idavoll
- A pair of enhancements to Twisted Words that make it easier to
implement PubSub services.
- Netty
- An NIO (event-driven) network framework for Java.
- EventMachine
- Event-driven networking framework for Ruby. Conceptually equivalent to
Node.js, Netty, and Twisted.
- libevent
- C library for event-driven networking. Most of the frameworks for
higher-level languages use this.
- HTTP Authentication
- Traditional username / password style authentication for HTTP.
- OAuth
- Standardized token-based delegated authentication. Users can authorize
third parties to act on their behalf, allowing granular revocation if and
when necessary. Often used for securing web APIs these days.