Thursday, September 20, 2007

Javascript API for Google Calendar

Google has just released a Javascript API for Google Calendars.

The client side library supports full authenticated read/write access the the user's calendars, letting you create calendar mashups that insert and change a user's calendar entries.

It was the Maps Javascript library that drove the explosion of Maps Mashups, so it'll be interesting to see what the development community comes up with.

Interestingly, yesterday on Joel on Software, Joel Spolsky predicted the next paradigm for development will be an online SDK that lets developers create powerful Ajax applications that can interact with each other and have consistent interface elements. A 'NewSDK',
"...which combines a great portable programming language that compiles to JavaScript, and even better, a huge Ajaxy library that includes all kinds of clever interop features. Not just cut ‘n’ paste: cool mashup features like synchronization and single-point identity management..." - Joel Spolsky
With the Google Mashup Editor and a library of full access Javascript APIs, Google may be well on the way to creating 'NewSDK'. The Google Maps API has helped make it a ubiquitous online map. Will the same thing now happen with Calendar? Then Spreadsheets, Docs, Picasaweb, GMail, ...?

Windows made it easy for developers to create applications that looked and behaved consistently and provided a level of application interop. With Javascript APIs and tools like the Google Mashup Editor and GWT may be trying to do the same thing with web development.

Saturday, September 15, 2007

Easy Come, Easy Go(ogle)

There's never a shortage of speculation surrounding future Google releases. With rumours flying around at breakneck pace it's easy to loose track.

With Google presenting at TechCrunch40 later today, let's take a moment to review some of the biggest, longest running, and most eagerly anticipated Google product rumours: Google Television, GDrive, the GPhone, GoogleTalk-to-Phone, Google's Social application, and Google Office.


The Google Phone
Alias: GPhone

Speculation on the GPhone started as early as 2005, and it's been regular blog fodder since then, with the rumour mill hitting overdrive in August thanks to reliable reports of an impending post-Labour Day release.

Early speculation suggested a hardware device similar to the iPhone, but recent comments from Google's head of research, Peter Norvig, suggest it won't be a Google created handset. The smart money now is on a Java-based Google powered phone OS along with a suite of mobile Google applications available on 3rd party hardware, with Business Week claiming just last week that a gPhone mobile phone platform is nearing release.

Original Speculation: December 2005.
Last Heard From: September 2007.
Suggested Release Schedule: Post Labour Day, 2007.
Trending: Peaking.
Likelihood of imminent release: High.


GDrive
Alias: Platypus, Google Drive, WWW10

Rumours of a Google powered online storage solution started in 2005, but it was the inadvertent release of suggestive power point slides in early 2006 that really got people's attention.

After a massive bout of online speculation things died down until July 2007, when CorsinCamichel discovered an internal Google GDrive client codenamed Platypus. More recently Tony Ruscoe found that 'GDrive' was available to some users as a service within Google Apps, fueling speculation of a possible public release.

Original Speculation: March 2005.
Last Heard From: September 2007.
Suggested Release Schedule: Unknown. Likely to be part of Google Apps.
Trending: Stagnant.
Likelihood of imminent release: High.


Google's Social Application
Alias: Makamaka, Ninianne Wang's Social Project, Google World

Google's decidedly underwhelming Orkut service has led to speculation that Google intends to release an alternative social application that takes a radically different approach. Revelation's in May 2006 that star Googler Niniane Wang was heading up a new project in the social space led to speculation that the project might be a killer combination of Facebook and Second Life leveraging Google Earth.

More recently Google Operating System highlighted Google's investment in SocialStream (a social networking aggregation project), and the accidental leak of a Google training video described the 'big social effort' at Google (Makamaka), as the framework for Google's social efforts.

Original Speculation: April 2005.
Last Heard From: September 2007.
Suggested Release Schedule: Unknown.
Trending: Upwards.
Likelihood of imminent release: Low.


GoogleTV
Alias: Google Television

Google TV has been rumour fodder since before the launch of Google Video in January of 2005.

In March of 2006 job openings for an Interactive TV Product Manager and Software Engineers with experience in 'emerging TV standards' and 'deploying robust, high-volume applications for consumer devices' fueled speculation that a GoogleTV set-top-box might be on its way.

In January 2007 an brilliantly spoofed 'how-to guide' to register for the GoogleTV Beta program was released on YouTube sparking a surge of interest as hope overcame common sense before the hoax was revealed.

In March Google announced a television AdSense trial, and in August Vint Cerf (VP at Goolge) suggested that television is approaching it's 'iPod moment', when most users will be downloading their television.

Original Speculation: 2004.
Last Heard From: August 2007.
Suggested Release Schedule: Unknown.
Trending: Stagnant.
Likelihood of imminent release: Low.


GoogleTalk Phone-Out
Alias: Google Voice, Google SIP

When Google launched GoogleTalk in August 2005 with audio conferencing using the open source libjingle library,there was wide-spread expectation that a Skype style PC-to-phone service would follow.

In July of 2006 GoogleTalk was updated to provide 'voice mail' for missed audio calls and in May this year the accidental release of a Google slideshow including a screen-capture of an updated GoogleTalk client including a 'dialpad' renewed speculation that GoogleTalk would soon be upgraded to include a PC to phone service. A month later Google acquired GrandCentral, a 'one number for life' phone management startup.

Original Speculation: August 2005.
Last Heard From: June 2007.
Suggested Release Schedule: Unknown.
Trending: Stagnant.
Likelihood of imminent release: Moderate.


Google Office
Alias: Presently, Google Wiki, JotSpot

The Google Office suite (or MS Office killer) has been a target of speculation GMail's release in 2004, but only really grabbed hold in March of 2006 when Google purchased collaborative online document editor Writely. Since then Google has added a Calendar and Spreadsheets to there Office suite, and has packaged all three tools as 'Google Docs' and embedded them with the Google Apps service.

More recently Google has acquired business focused wiki JotSpot, and online presentations software creator Tonic Systems. Neither acquisition has yet resulted in a Google offering, though Information Week suggests that the release of Presently (Google's PowerPoint offering) is a dead certainty for Tech40 today.

Speculation continues regarding an offline component to Google Docs, and the release of a JotSpot powered wiki component.

Original Speculation: 2004.
Last Heard From: September 2007.
Suggested Release Schedule: September 17, 2007.
Trending: Upwards.
Likelihood of imminent release: Near certainty.

Friday, September 14, 2007

Google Mashup Editor Goes Social

Isn't it great when you get exactly what you ask for?

The latest release of the Google Mashup Editor lets your mashups share data between users, letting you create real social apps within the GME. So My Travel Maps now includes 'Their Travel Maps', a tab where you can see your friends' Travel Maps.

Sign in and add your friends' GMail addresses to the 'Their Travel Maps' tab, then select a friend to see their trips (and their Picasaweb albums). Add me as a friend -- my GMail is Reto.Meier at gmail.com -- to see the result.

Along with social application support this release has a bunch of new features, including the ability to add labels and rating to external feeds, support for editing HTML and CSS project files within the editor, plus better styling and CSS support along with general performance improvements and bug fixes.

It's an impressive new release that's moving the GME further along the path to full-blown online GoogleOS development IDE.

Wednesday, September 12, 2007

Massive 7.9 Earthquake Hits Sumatra

A massive earthquake registering 7.9 on the Richter scale has been recorded just off the coast of Sumatra in Indonesia.

Earthquake! illustrates the size and scale of the quake, the light red 'felt' region extends over much of south east Asia as far away as Sri Lanka and Myanmar and the dark red damage zone covering a fair chunk of the Sumatran coast line.

There's currently a Tsunami alert in effect for the surrounding region.

Thursday, September 06, 2007

My Google Library

Wow. Google has just announced an incredible new service on the official Google Blog.

Book lovers rejoice, you can now create a virtual library of your book collection using Google's Book Search. You can maintain your entire collection by adding books using ISBNs, using Book Search, or copying from other people's libraries.


Once added, books can be rated, tagged, and reviewed, and you can browse in cover view, detail view, filter by tag, and search your library. Viewing a book's details gives you a varied wealth of information, including book publishing details, online reviews, online references, references from other books, regularly quoted passages, related books, and in some cases even a map of places mentioned within the books pages.

Your library is public (my library) so you can share your collection with your friends, or use your friend's collections as inspiration for your own reading.
There's even an RSS feed of new additions and an XML feed of your collection to download or mashup in your own applications. The XML feeds include ISBN, author, title, your tags, reviews, and rating -- the RSS feed also includes the cover art.

At the moment it's a little US-centric, with cover art and detailed book details missing for books published overseas -- which is a bit of a problem for those of us in the UK or Australia. That's not going to stop me from importing my 1000 book database into
My Library later tonight though!

I hope they extend the data feeds further.
I'd dearly love to be able to add books to my collection (and rate, review, and label them) using a GData feed like PicasaWeb; I'd also love to have access to some of the wealth of book information Google have aggregated for each book. In fact, while we're at it, I think they should extend 'My Library' to include music and movies I own as well as books.

I don't know many people that were big users of Google Books, but just about everyone I know with a collection of more than 100 books has some way of cataloging their books (Excel spreadsheets, custom software, etc). I think this is a wise move precisely because it gives people a new reason for regularly visiting the site.

Distances on Google Maps

As of today Google Maps will display the length of any line you draw on a map (you can add lines in the 'My Maps' tab). Just click on any completed line to get a total distance.

Finally I can see exactly how much longer the 'scenic route' to work is.




They didn't invent this, Yahoo! has done it for a while and I know of a couple of mashups that do the same thing, but still -- it's pretty handy!

At the moment all distances are shown in yards and miles -- maybe the next release can show us some metric love?

Wednesday, September 05, 2007

Google Reader UI Update

I noticed a general update of the Google Reader UI this morning.

There's now a gray arrow button between your list of subscriptions and the reading panel, just like the one in Google Maps between your map and the search results. Just like in Maps, clicking it will hide your subscriptions list, replacing it with a 'My Subscriptions:' dropdown.



It's a nice UI tweak that gains me an extra 30% - 50% of horizontal reading space when I'm going through my feeds in the morning.

They've also updated the blue 'loading' dialog, replacing the blue beaker with a smaller orange loading message that sits at the top of the page.

I've seen this update come-and-go all morning, so it looks like they're in the process of testing / rolling it out.

Update (6 Sep 2007): They've also added search functionality! You can now search through any of your folders to find specific feed items. Neat.

Wednesday, August 22, 2007

Guest Post on Google Mashup Editor

The good people behind the Google Mashup Editor recently invited me to share my thoughts on my experience with the GME.

Check out my ramblings on the Google Mashup Editor Blog.

I will be adding 'pioneer' to my resume later tonight...

Tuesday, August 21, 2007

Easily Embed Google Maps with HTML

Google Maps has released a new feature that lets you embed any Google Map into a web page using straight HTML -- no JavaScript or API key required. It works for address, or business search results:


View Larger Map

As well as fully interactive My Maps maps (this map shows the cricket stadiums used in World Cup 2007):


View Larger Map

This is really useful, there's plenty of times when a map would be the perfect thing to illustrate a point online, but setting up a 'real' mashup is just overkill.

Announcing 'My Travel Map'

I've always wanted a great big map of the world with pieces of red string tracing my trips from city to city. I always figured it would look cool to see the combination of 'hubs' with lots of lines coming out, then seeing the little snail trails as I trekked across western Europe.

But let's face it red string on a poster map is so 1986. Presenting My Travel Map.


Sign in and start adding your trips on the 'My Travel' tab and watch with barely restrained glee as your global jaunts are plotted automagically. And because a trip worth noting probably has photos, your public, geotagged Picasaweb albums will automagically be added as map markers as soon as you sign in.


While you're there you can record the date of each trip, rate it, add a description, and remember a related link.


As you might have come to expect by now, My Travel Map was written entirely using the Google Mashup Editor.

Sign in to My Travel Map and create your own travel map.

Thursday, August 09, 2007

Earthquake! With Damage and Rumble Radii

I visited the Natural History Museum in New York earlier this year and was seriously impressed by the real-time earthquake display. Despite my earnest pleas they cruelly refused to let me take it home with me; instead I stole copied created my own version of their concentric circle filled goodness.

Like the exhibit that inspired it, Worldwide Earthquakes shows not just the epicentres, but also an approximated 'damage zone' (inner circle, dark shading) and 'felt zone' (outer circle, thick border) to give an impression of the areas likely to be affected by each earthquake. Zoom in to see which cities and suburbs will feel the tremor, and which are at risk for property damage.



Red circles show quakes within the last 24 hours, yellow are within the last two days, and grey are everything that's left (up to the last 2 months).

As a bonus, unlike the IRIS/USGS display at the museum, I use multiple data sources to get better world-wide coverage. I include feeds from the Geoscience Australia, the US Geological Survey (USGS), and the European-Mediterranean Seismological Centre.

Big quakes (>5) should be picked up by all the agencies -- but in any case, I've mashed up all three feeds to produce the 'World' tab that shows only earthquakes that people can feel (>3).

Now, if you've got a 30" plasma, you can have you own 'at home' real-time earthquake display. How sweet is that?


Note. The Worldwide Earthquake mashup was constructed using Google's Mashup Editor, with additional data processing done using Yahoo Pipes. Read more information on using Pipes to help construct mashups with GME.


UPDATE (10/08/07): Fixed for IE, circles now draw properly in IE (yay!)

Wednesday, July 18, 2007

Fuel Price Mapplet: Developing Mapplets vs Mashups

About a week ago Google opened Mapplets to everyone, and now, the WA Petrol Map Mashup is available as a Google Maps Mapplet! Find the cheapest petrol stations while you're getting directions and searching for businesses. Bookmark your commute for easy reference and use waypoints to take a detour to the nearest, cheapest petrol.

Mapplets are found in the 'My Maps' tab on Google Maps when you're signed in to Google. You can overlay multiple Mapplets giving you the power to create a customized Google Maps interface with useful information overlaid over your normal map search results, directions, and business listings.

In Part 1 I'll show you how to use the Petrol Price Mapplet to find the best place to refuel on your commute, developers might want to skip straight to Part 2 where I continue from last week's post on creating a mashup with GME and Pipes, and describe the simple process of creating a mapplet using Yahoo Pipes as a geocoded KML data source.

Part 1: Still in Perth? Still Want Cheap Petrol?

What's better than a mashup with the best petrol prices in your usual suburbs? A mapplet! See where the best petrol prices are on your commute -- and get directions to include the cheapest station on the way.

Login to Google Maps, then add the mapplet using the gallery (or 'add by url' with this url). When it's on your list of mapplets check the checkbox to enable it. You should see something like the image below.

Click 'Change Settings' and chose three suburbs where you normally fill up. When you save your changes, you should see the markers move to show you the cheapest 15 locations from those three suburbs. Clicking a marker will show you the price at that station plus the cheapest overall price.

Now click 'Search Results' and choose the 'directions' tab (under the search box). Enter your home address in one box and your work address in the other and search. You should now see you morning commute with the cheapest petrol stations overlaid on top.




Your commute probably isn't quite right (mine isn't). I have to click 'avoid highways' as I never travel the freeway in rush-hour, then I left-click drag my route from Harbourne over to Pearson -- Google Maps recalculates my journey in real time. I want to check this whenever I need to refuel, so I click 'link to this page' and copy the result from the popup box and paste it back into the address bar; then I bookmark it 'My Daily Commute'. Now whenever I need petrol I just open that link, enable the 'WA Petrol Mapplet' and I can see where to fill up.

Today I see that the station on my way is 14c/l more expensive than the cheapest. Knowing the cheapest isn't far out of my way, I right click the map next to the Karrinyup Caltex and choose 'Add to journey' and move it up the list on the left. Google revises the journey (it's less than 10mins out of my way) and I save 14c/l on filling up.


Part 2: How to Make a Mapplet in Under 2 Hours -- and Why?

Mapplets can be even simpler than mashups, but let's start with why you should bother with a mapplet at all, Mapplets:
  • give people access to all the Google Maps functionality (traffic view, street view, directions, drag-and-drop re-routing, etc.) out of the box.
  • work as part of Google Maps, so people don't have to login to different websites.
  • can be 'layered' so your mapplet can be used in conjunction with other people's (traffic congestion + petrol prices + ?)
That's not to say you should abandon your stand-alone mashup. Leverage the mapplet to drive traffic to it:
  • The Mapplet interface is limited. The best use case is to 'enable' the mapplet, then switch back to the search results view. Side-effect: Any and all useful information you have, has to be shown in the marker info-windows (or with the marker itself, try and use customised markers if possible). Use the window to say there's more to see at your full site (and provide a handy link!)
  • Your ability to save user data in Mapplets is limited. Stand-alone mashups are much better if you're storing more than simple user preferences.
  • Keep it simple. Mapplets work best as useful markers that sit on top of a normal map, like a layer in Google Earth. Keep complex interactions and data presentation to standalone mashups. Remember: A mapplet is a side-order to the map, a mashup is a main course.

With keeping it simple in mind, my mapplet source code is about as basic as you could hope for. Mapplets are 90% Javascript (10% XML). There's no editor or built-in hosting (unlike GME -- maybe coming soon?), but there is a 'scratchpad' that you can should use to develop and test your code. When you're done, you can host it in a variety of Google Places -- Groups, Pages, or the GME itself.

Writing the Mapplet

There's three things I want to achieve in my mapplet, I want

  • users to be able to enter a few suburbs to look at on the map (arbitrary number -- 3).
  • to display the cheapest (arbitrary number -- 15) petrol stations as markers on the map.
  • to indicate the overall cheapest petrol available in those selected suburbs.

User Prefs

Mapplets handle user preferences well. Add require feature="setprefs" within the moduleprefs, then add UserPref definitions, one for each preference:

userpref name="SuburbOne" display_name="Suburb 1" default_value="West Perth" datatype="string"

Then you can access these values like this:
var prefs = new _IG_Prefs(__MODULE_ID__);
var s1 = prefs.getString("SuburbOne");


Show the Petrol Stations

I hate doing XML manipulation in JavaScript. Luckily I don't have to. Mapplets let you pass in a GeoRSS or KML file in and it will automatically plot the placemarks on your map. Use the GeoRSS function like this:

var geoXml = new GGeoXml(kmlFileURLString);

map.addOverlay(geoXml);

Now all you need is a pre-manipulated KML link (here's one I prepared earlier). Once again our friend and saviour -- Yahoo Pipes (how is this not a Google product?!), where I do all my XML manipulation.

I create a new pipe, 'combined petrol prices', that takes three user inputs as input to our existing 'Petrol Price by Suburb' pipe, and uses a 'union module' to combine them. The I sort the result by fuel price and truncate it to 15 items. Then I add a 'Location Extractor'* module (which allows you to export your pipe as a KML file) and I'm done. Three inputs (my user prefs), sorted and truncated to 15 cheapest stations, outputted as KML.

Back in the mapplet I write a bit of JavaScript to construct the URL with the user prefs as parameters for the pipe url. Then I pass this URL into the constructor for a GeoRSS overlay and add the overlay to the map. Unfortunately Pipes doesn't give you the ability to hand tinker with the KML output, which means you can't specify a custom marker / placemark icon in the feed. Rather than forgo the simple / handy GeoRSS functionality I'm going to live with the plain blue markers -- mainly because I'm lazy.

*A note on the Location Extractor Pipe module. It's a little… finicky. The best way I've found to have it reliably parse geolocations is to ensure your feed has 'geo:lat' and 'geo:long' fields. You'll know it works when the output from the Location module includes a populated 'y:location' field.
You can test that the Pipes KML feed is working by running it within Pipes itself, you should see your stations on a Yahoo Map. To double check, just paste the Pipe's KML output address into your Google Maps search box and it will magically render it on the map for you.

Always Show the Cheapest Petrol

I still want to append the cheapest available petrol to each station marker's description.

I create another new Pipe and drop the 'combined' Pipe from above into it (hooking up appropriate user inputs so it takes the same parameters). Then I add a 'foreach annotate' module, and use a new instance of the combined pipe as the source. On the dropdown choose 'first only' -- this will add a new node to each item that contains the first item in the source feed (Ie. The cheapest station). Bring out the regex hammer to nail that info onto the bottom of the description field and
I'm done. I Don't even have to touch the mapplet code.

That's It?

Upload your Mapplet XML somewhere, then click 'Add Content' and choose 'add by URL' (next to the search button). Paste in your address and you're done. Once you're happy that everything works, you can
submit your Mapplet to the gallery for the world to enjoy.

Here's a few tips:
  • Track your mapplet use with Google Analytics (here's how).
  • Show your user prefs in you mapplet output panel. If you state what the current settings are, there's a better chance that people will change them to something more suitable.
  • Like a mashup, make sure the 'default' result on installation shows something useful / interesting. Most people will add --> judge --> remove, well before they start playing with user preferences.
  • Keep the overhead low. Don't add 10,000 markers at a time -- people will turn it off very quickly indeed. If you have a lot of data use the Marker Manager, the Panaramio mapplet is a good example of how and when to do this.
  • Host it for free. If you don't have a server handy, you can host your mapplet on a number of Google properties.
  • All the data fetching (XML/GeoRSS/HTML) routines within mapplets are cached every 30mins. If you need data fresher than that you'll need to increase that refresh rate. Don't if you don't have to, caching is a Good Thing.

Criticisms, Suggestions, and Conclusions

My Maps / Mapplets in Google Maps is seems based on the idea of layers and 'custom placemarks' in
Google Earth, and in a lot of cases it makes a lot more sense to show this layered information in the context of your usual Google Maps use, rather than a collection of standalone mashups.

Things like weather, petrol, road congestion, speed camera locations, and panaramio pictures are excellent examples of data I'd like to see on my Google Map all the time, and together -- once we get full Google Maps as an in-car GPS, the world will truly be a brighter place.

That said, here's some things missing from Mapplets that would be nice to see in future releases:

  • No hosting or built in web editor. Let us use the Google Mashup Editor to write, host, and test our mapplets.
  • You can't assign custom markers to a KML / GeoRSS feed. Makes sense, as you should be able to put the marker definitions into the feed itself -- but what if you can't? Let us specify a default marker setting.
  • Selected Mapplets don't persist. Each time I load Google Maps I need to activate the mapplet / my maps I want to overlay. Lets us persist them between sessions (or at least create a link with them included. I *always* want to have certain mapplets turned on, making people turn them on each time makes them less likely to be used.
  • Adsense revenue. Please.
  • User settings saving is patchy. Using the 'back' button on your browser almost guarantees the user settings are lost.
  • …and one for Yahoo Pipes: Let us tinker with the KML output please!

Thursday, July 12, 2007

Do Google's Sponsored Links Constitute "Misleading and Deceptive Conduct"?

Australia's competition regulator, the Australian Competition and Consumer Commission (ACCC), is taking legal action against Google alleging that they do not adequately distinguish between sponsored and organic search results.

Their case is based on the practise of companies purchasing AdWords for their competitors, in this case '
The Trading Post' purchased sponsored results for two car dealerships in Sydney. The ACCC is also taking action against the Trading Post.

It's an interesting situation, and one that has has
come up in the past, with the legalities and merits questioned and discussed at length in the SEO world. While Google has faced legal action in relation to trademark infringement in AdWords advertising in the past, the ACCC claims this is the first ever action looking at the practice from a trade practices perspective. I believe this may also be the first time that 'sponsored links' (as opposed to sidebar ads) have been the specific cause for complaint.

The way sponsored search results are shown was changed recently, Philipp from Google Blogscoped has previously written about the changes.


UPDATE (16/07/2007)
Google responds to the ACCC claims via the Official Google Australia Blog.

"...the ACCC's claims are without merit. Accordingly, we will be vigorously defending against these claims in court."

Monday, July 09, 2007

A Fuel Price Mashup: Web Development Goes Entirely Online

I put this mashup together to play with two new online tools -- the Google Mashup Editor (GME) and Yahoo Pipes. If you're interested in the process (and the effort involved), read-on in part 2 below. If you live in Perth, use the mashup!


Part 1: For Those in WA Who Want Cheap Petrol…

I'm not one for driving 50km out of my way to save 5c/L on petrol, but with unleaded approaching $1.50/L it's probably worth scouting out who's offering it cheapest around where you usually fill up anyway.

Fuel Watch has published fuel prices for years, you've probably seen the updates after the news alerting you to the cheapest petrol 'North of the river' (as though Subiaco was next to Mindarie).



Sign in and create a list of suburbs where you usually 'fillerup', then check which of the stations in your local areas have the best prices on the handy Google Map.

Part 2: ...Piping Chocolate into Your Mashup Peanut Butter

Lunchtime last Monday I got my invite to the Google Mashups Editor (GME) beta (Check out Philipp's introduction), that evening I decided to try it out.

In 48 hours this technology test project completely changed my view of web development. I've written mashups before (Live Cricket, Cricket Venues) but they're pretty basic -- static and read-only, with no personalisation. Worse, each took over a week to finish. This time, before I went to bed on Monday I was done. A couple more hours on Tuesday for the 20% stuff and I'm finished. In less than a day. Done.

The Technology
Overview

Development, debugging, hosting and deployment are done entirely online -- no local environment, editors, or builds. I moved between three different computers during the development and needed only to login to Google and Yahoo to have my development environment ready to go. For me this is a revelation. Gone, the time-wasting installation and configuration of a development environment, no finding, changing, and configuring paths and dependencies.

If you're a coder, chances are you remember the first moment that a change in a line of text affected what happened on the computer in front of you. That shift from passive viewer to active participant is what's driven a lot of us into the world of software development. These tools have given me that same feeling of empowerment over technology for the first time in years.

The Peanut Butter: Google Mashups Editor (GME)

The GME is an online development environment that lets you build Web 2.0 style apps based on RSS feeds. Crucially, it hosts your app and lets you define data structures and hosts read / write data sources on an application wide and a per user basis.

In real-life I'm a C# desktop developer, though I've tinkered in web development and I've used the Google Web Toolkit. The WA Petrol Price Map had a development time, from scratch to working prototype, of about 5 hours, probably a couple more hours for the polish.

A Step-By-Step to Creating a Mashup in GME

(Here’s the source code so you can follow along at home)
Google provide excellent sample projects that you can use as templates. Each editor page is essentially HTML, you use 'tags' to add all the goodies. So I start by laying out my page -- a header and footer, and a table to hold the map and lists.

You use gm:template tags to define data structures and how to display them. You also set the editability (if and how to display the add/edit/delete buttons). So next I create a template for the data to store - a list of suburbs w/ descriptions.

With the data structure defined, I add an instance of this to my UI with a gm:list tag, specifying the template and the data source. In this case I want it stored per user, so I use the ${user} reference. Then I add the petrol price list by adding another gm:list, but this time I don't specify a template, and I point the data source to the address of my RSS feed.

Then I add a gm:map tag for my Google map, and tie its data source directly to the petrol price list data -- ${petrolPriceList}. The map has built in support for goecoded fields, so I just need to specify the feed tags for lat / long.

Now I've got a list of user editable suburbs, a list of the cheapest petrol stations for the suburb selected, and a map of all the stations. The only thing missing is interactivity. GME uses gm:handleEvent tags for this. I tie the map and petrol station lists together by adding a 'select' event handler to both (they share the same data source, a select on one now selects the same item on the other.)

Finally, I make selecting a suburb update the RSS query I use to access the petrol prices. This needs JavaScript, so I add a select handleEvent tag to the suburb list and instruct it to execute a JavaScript function that updates the data source based on my suburb selection.

AND THAT'S IT. Done and dusted. I've seen the future of web development, and this is the way forward.

Some Quick GME Tips & Tricks:
  • Use Pipes for RSS feed manipulation, especially anything involving regex. Pipe’s visual interface is a thousand times better than writing JavaScript functions.
  • Get usage stats with Google Analytics.
  • Make sure users can make some use your mashup without signing in. People are reluctant to sign in without knowing what they're getting first.
  • Use a sensible title when you create your new project as that's what will appear in the Google powered login page.
  • You can copy a project in its entirety. Useful for using a sample project as a template, or renaming an existing project.
  • Host your data in Google Spreadsheets and use the Spreadsheets API for a feed to use in your mashups.
  • GME caches requests so you don't hammer your feed providers. This can result in stale data. Add a &frequency= parameter to your feed requests to ensure you get timely data. Concatenate part of the date/time for the update rate you need (Monthly? Daily? Hourly?)
  • You can store data either per user (using the ${user} data store) or per application (using ${app}). You can set access levels to application wide stored data to public, read-only, or members’ access only. Create a private mashup for family vacations by adding them all as members and cutting off public access.
  • The GME creates a Google Code project for each GME project, including a version controlled SVN repository.
  • Use JavaScript for access to the Map functions not exposed in the gm:map tag. (like turning on Traffic View, etc).
…and some existing problems:
  • The GME really didn't like either IE6 or IE7. I haven't experimented in FF yet.
  • Code formatting was wonky at best, and it was very easy to 'accidentally' delete text by using seemingly innocuous key sequences (shift-home deletes a line!).
  • This is definitely still in Beta. The generated code works flawlessly, but the editor itself is buggy as hell (which may be why they recently allowed you to edit offline). Luckily, the team is very receptive to comments and bug reports via the support forums.
  • Functionality is lacking, but more (by way of new tags) is on the way. With luck they’ll expand it to provide all the GWT functionality, and eventually make this the backend for Google Page Maker.
The Chocolate: Yahoo Pipes

Yahoo Pipes was a revelation. Manipulating feed items to modify and annotate fields, looking up and incorporating information based on feed item fields is the 'hard work' behind much of mashup development -- really any data driven development. Pipes makes this the easy part.

Pipes lets you make any RSS feed your bitch. Join feeds together, kick their contents with a regex boot, annotate them with lookups from other web services (like Google's geocoder), sort, filter, take user inputs -- whatever. This is real power, and it's implemented simply, visually and hosted entirely by Yahoo. No more spending hours writing and hosting a web service that does the same thing, say goodbye caching and bandwidth issues.

Here's how it worked for me.

The FuelWatch feed takes a suburb name as a parameter and returns an RSS feed in the form, [price]: [Station Name] - [Station Address].

Bring on the Pipes. I specify an input parameter (suburb) and join that with the FuelWatch feed address to generate my input feed.

Everything from here-on acts on every item of the feed, so I start by copying the title field into a new address field. Whack it with a regex stick to trim the address from the title field and clean up the address field. The foreach transaction lets me pass this address to the Google Geocoder, adding the result as a 'geocode' section on each feed item. A little more copying and a little more regex -- voila -- I've got glat and glong fields at the root level of my feed, perfect for a mashup.

Check out the completed pipe. Total creation time including registering with Yahoo and figuring out how to use pipes (and re-learning regex)? 2 hours.

Pipe Tips and Tricks
  • Use the 'copy' filter to duplicate fields, then you can perform different actions on each copy.
  • Use regex to modify each field until it contains exactly what you want.
  • The regex control works sequentially, so you can perform multiple changes on the same field one after the other.
  • Use the 'foreach' transform to add the results of a web-based lookup based on a field into each feed item (Eg. Add geocoordinates by passing an address to the Google Geocoder. Add photos by passing tags to Flickr).
  • Pipes lets you take CSV, RSS, and ATOM data as feed sources, then outputs it as either RSS or JSON.

The Future of Development?

This time last week I'd started a draft on how the move towards Internet applications was raising barriers for entry into the world of software development. On Monday afternoon my perspective changed.

I develop desktop apps in Windows; have done for the last decade. I can see the world moving to web based applications, but before Monday I was staying in the shallows, debating the value of investing the time and infrastructure necessary to develop a real Web 2.0 app.

See, if you want to write a desktop app all you need is a computer and a compiler. Distribution requires little more than an email account. To write a web app (and widgets != applications), you also need a server, database, and bandwidth. Without any server infrastructure, doing things like saving user data is non-trivial. Even if you host it yourself, you need an Internet connection with suitable bandwidth and a 24/7 server. That's a lot of overhead for a curious 12 year old, an experimenting student living on campus, or a consultant developer working on a laptop.

No longer. Google's Mashup Editor provides a framework for developers to define and save 'per user' and 'per application' data structures and hosts whatever application you produce. It is a Good Thing. Used with a data manipulation framework as powerful as Pipes and you don’t need anything but a computer connected to the Internet to develop and deploy a fully interactive web app without even owning a computer, let alone installing a compiler.

Now your development environment moves with you. If you're computer access consists of a computer you share with your family and the workstation at the school library, you can still write fully featured web apps just by logging in.

I'm still only dipping my foot in the deep end of web development, but if Google and Yahoo continue to develop tools like these, it won't be long before anyone with the desire can dive into full scale web development without a second thought.

Update (18/07/07) Read this new article on how to use Pipes to turn this mashup into an even more useful Mapplet.