Tag Archives: #io12


This is my last post of notes from Google I/O 2012, so I won’t get to mention that Google Docs has offline editing, Google Drive not only can ocr your pdfs to make them searchable but can also recognise what’s in the images, Google Compute Engine or various Chrome improvements. Instead I’m going to focus on the sessions around Google Apps Script (which I occasionally write about anyway ;s).

One of the main questions I get from people interested in using Apps Script is how stable/sustainable the platform is. Given there were three separate sessions on Apps Script at #io12 announcing a number of new features including the launch of script.google.com I'd say for now things are looking very healthy.

There were (by my count) four new features of Apps Script announced outlined below, I’m throwing in one more old announcement, which I’ll share my notes on in this post:

  • Recent announcement Managed Libraries and Versioning – this lets you control a master script which you can maintain and bug fixes, new features can be used by anyone using the library (before if you created a script in a spreadsheet and someone made a copy the script became orphaned so the only way you could receive updates was making a fresh copy or manually replacing the existing code).
  • ContentService – lets you publish content generated by App Script which will be interpreted by other web services/tools as atom, rss, json, text or xml
  • HTMLService – lets you publish content generated by Apps Script which will be interpreted by other web services/tools as html which can include custom CSS and client-side JavaScript (including importing existing libraries/code like jQuery)
  • ScriptDb – a NoSQL style database that lets you store and query data that doesn’t have a fixed schema (doesn’t have a fixed number of values or may have nested data)
  • Publish to Chrome Web Store – you can publish Apps Script based applications directly to the Chrome Web Store so that other people may easily install and use.

Managed Libraries/Versioning

Existing services and ability to write your own custom functions has made it easy to extend the functionality of Google Apps. Using things like UrlFetch you could make calls to 3rd party APIs or maybe there was something you wanted to do with your Gmail account to make it better.

Previously there were a couple of ways you could share your custom scripts. Most often than not I embed them into my Google Spreadsheet templates, or you could add them to a Script Gallery or maybe drop some code you’ve found from elsewhere like GitHub.

The problem with all these methods is once the script is installed it becomes orphaned from the original, the only way to update is for the user to take a fresh copy or overwrite the code. Managed Libraries let you write a script which other people can then import into there project to immediate extend the methods they can use.

There’s no official searchable store of released scripts but here are some Notable Script Libraries to give you an idea of what’s possible. Here is more information on Managing Libraries.

One of my first concerns was because of Versioning if you want to share a scripted template which used a Managed Library the user would be stuck on the release version (this makes sense if you are a coder and want to use the stable version). So if you had an update users could go into their version and select the next stable release. It also looks like to can distribute a template spreadsheet with the library in Developer Mode, which means it’ll always use the latest version of the code.


Getting formatted XML from Google SpreadsheetThere have been several times when I’ve wanted to digest/process some data in a Google Spreadsheet and then republish in a different format. A typical example would be import some timestamped data and generate a custom RSS feed. I trick I picked up from the Google Earth Outreach Spreadsheet Mapper is to format the data in a sheet within Google Spreadsheets and publish as text. So here is a spreadsheet of data and here is the data reformatted as kml.

This solution works well but can be fiddly and the output might be interpreted as text and not XML (because of the MIME type). The other issue is you are stuck with one view, so if I wanted to create a different RSS feed using the same data but a different view it needs to be published as a separate sheet. By creating a ContentService means data views can be published that are generated according to values pasted in the querystring (GET) or payload (POST).

Turn Google Sites pages into RSS codeHere’s some example code I’ve written that allows you to generate an RSS feed from Google Sites pages. When this script it published as a service the doGet catches a user defined Google Site url and page stub (checks if it already cached the result), then creates a page with the RSS.

sites2RSS url

I would show you an example but I’d need to publish with anonymous access and then anyone could use my quota. But here is an example of a feed passed through Yahoo Pipes to obscure the service key, which is using ContentService to generate an RSS feed of this page on QMU’s Audio Feedback Site. Most of the time the generate feed seems be alright for Google Reader and ingested back into Spreadsheet using importFeed() but timeouts in services are a problem if you are pulling back a lot of pages.


HTMLService is similar to ContentService but has some extra neat little tricks. Rather than go into detail about what it can do I’ll direct you to the HTMLService documentation and the video of session given by Corey Goldfeder. To get a quick idea of what is possible keisuke oohashi has already ported the Twitter bootstrap template to HTMLService.

Some of my notes on HTMLSerivce:


Again the documentation for ScriptDb is very good so I’ll let you explore (worth noting the stub it’s in which covers various ways of Storing Data in Apps Script). The basics are:

  • NoSQL style database which lets you store, update and search data as JavaScript Objects (JSON)
  • Each Apps Script project gets it’s own local database. The only way I can find of accessing the data across projects is if the database is part of a Managed Library. Note of caution: My understanding is if you let other people use your managed library which has ScriptDb in it, everyone using the library has access to the data and if they can write to it, it’s using up your quota. More details on ScriptDb and Libraries).
  • The quota is a total of 50MB for regular Google accounts, 200MB for Google Apps for Education per-user (a concern I have is if you start a regular scrape collecting data in ScriptDb in one script and forget about it, it would be a nightmare to find where your quota had gone. Best practice might be to only use your ScriptDb’s through a personal script library. Because ScriptDbs are local instances using in a managed library will give you access to the data across scripts Bruce Mcpherson has already written a library you could use to silo your data.
  • Querying is by example’ – if you use type: ‘employee’ in your query it pulls all of the objects that include this somewhere in their record.

Here is the video from Google I/O session which covers  Storing Data in Google Apps Script.

Publish to Chrome Web Store

So your institution is running Google Apps for Education and you are doing interesting stuff within the Google Apps ecosystem. Maybe, like Loughborough College, you are experimenting with how Apps Script can be used for assessment and feedback. Perhaps you see a way of making your students lives a little easier like providing a filtered view of all the feedback docs they’ve received or a way for them to book a perch at a PC. Well now you could brand and publish the application to the Chrome Web Store.

I haven’t had a huge chance to play with this feature, but here is the Publish to Chrome Web Store documentation. One thing I do know is you need a web store developer account which has a one off fee ($5). Some examples already in the store:

  • Gmail Meter - runs on the first day of every month and sends you an email with all the desired statistics on your own email behavior.
  • Gmail Print All for Chrome - help you quickly export messages right to a Google Doc that you can print, save as a pdf, share with others, or store in a way that works for you
  • DriveEye - lets you keep an eye on your Google Drive. DriveEye will send you email alerts when a collaborator adds files to a shared folder.

[You can actually search for more because the from references where the script is published]

It seems fitting to finish on the I/O session recording Putting Together the Pieces: Building Apps with Google Apps Script (this actually ran first during the event, but pulls in all the parts I’ve mentioned above):

I think that’s enough Google for now. Next to write about new version of NodeXL, Voyant-tools or Datameer … or something completely different instead


As promised some notes on the next session I attended at Google I/O was The Next Generation of Social is in a Hangout. Hopefully you are already familiar with Hangouts in Google+ (a place to video chat with up to 10 other people and/or stream to the masses as a Hangout On Air). As part of Hangouts there are collaborative applications you can use. Initially these have been focused around shared activities like watch YouTube clips with other people, or working on a Google Doc. What you might not know is for the last couple of months developers have had access to the Hangouts API which allows anyone to make their own custom Hangout applications. For example, using this API Google have been able to develop the Art Project Hangout (video embedded below), which lets you collaboratively explore works of fine art with other people.

So with a couple of lines of code (included below) I can embed an Etherpad shared notepad in a Google Hangout (without publishing a live version you’ll have to trust me that this works by watching this demo ;).

Etherpad embedded into Google+ Hangout

The code

<?xml version="1.0" encoding="UTF-8" ?>
    <ModulePrefs title="Etherpad Extension Example">
      <Require feature="rpc" /> 
       <Content type="html"><![CDATA[
             <script src="https://hangoutsapi.talkgadget.google.com/hangouts/api/hangout.js?v=1.0" ></script>
             <p><iframe frameborder="no" scrolling="yes" src="http://beta.etherpad.org/p/mhawksey?showControls=true&showChat=true&showLineNumbers=true&useMonospaceFont=false" style="width:100%; height: 100%;"></iframe></p>

Notes on making this

Here are some things I noted when making this example.

  • A good starting point is Writing Gadget XML Apps. Including the hangout API script in your gadget is essential (and get the write one).

NOTE: For developer sandbox, use this instead of the above script:
<script src="//hangoutsapi.talkgadget.google.com/hangouts/_/api/hangout.js?v=1.1"></script>

It’s a gadget, but not a gadget

The example above is very rudimentary and doesn’t use any of the Hangout API for getting/setting data, detecting participants etc. and in this example all the collaborative gubbings is being handled by Etherpad. You might recognise the XML syntax being used in this example because it’s based on the Google Gadget framework with influences* from the OpenSocial specification.

*a Googler was asked in the session if existing OpenSocial gadgets could be used in Hangouts and the answer was no with the explanation along the lines of ‘Google iterate solutions so they took the best of OpenSocial and came up with something new, but they do hope to bridge the gap in the future’

Before you get carried away

It’s quite interesting that you can wrap almost any existing application (even existing widgets) and run them in a Hangout. For the education sector the huge limitation that I can see is that Hangouts are limited to 10 participants, which will work on small tutorial groups but nothing larger. Apparently, as picked up by Sharif Salah in the fireside chat after the session, this isn’t a technical constraint but Google don’t think you can socially manage a hangout with more than 10 people. So any aspirations of creating a Blackboard Collaborate/Adobe Connect/Big Blue Button style webinar system for larger classes will have to go on hold for now, maybe it’ll be something Google include when they get serious about Google+ for Enterprise.

There are a couple of alternatives if this sort of hackery interests you. For example as part of the JISC Distributed VLE (DVLE) Programme a number of projects looked at how widgets could be used to rapidly and efficiently incorporate more functionality into learning and information systems. You can read more about this in the Extending the learning environment briefing paper. It’s still work in progress but eventually you might be able to wonder over to EDUKAPP (a pilot web app store for the UK Higher Education sector – more background), grab some relevant widgets and make your own hangout. And if you want video you could use something like the Tokbox Open Tok API to get streaming video in a couple of minutes.

Scanning the horizon it is interesting to see the open source webinar platform Big Blue Button include an internal API on their roadmap which would make it easier to extend the functionality of the platform.

In summary, with a bit of XML you can easily make a Hangout app but be aware of the limitations with group size. Also there are other similar gadget/widget based solutions you might want to try. So can you see a place for custom Hangout apps in education?

Update: When I shared this post on Google+ it occurred to me that collaborative virtual microscopes like www.virtualmicroscope.co.uk/ might be useful as a hangout app. More interestingly it's been announced that there is now a Cameraman app which lets you hide certain participants from a hangout, but one presumes they can to interact with extensions/apps. To me this looks like the first step to having more than 10 people in one hangout, which might make it more appealing for educators


Following the opening keynote the next session I attended at Google I/O was Google+ Platform Basics. This session was a great opportunity to meet Ade Oshineye (Google+ Developer Advocate based in London). From Ade’s profile:

co-author of O'Reilly's "Apprenticeship Patterns: Guidance for the aspiring software craftsman" and you can find out more about that book here: http://www.oshineye.com/books.html

I'm also part of the small team behind http://developerexperience.org/ which is an attempt to see if we can successfully apply the techniques of user experience professionals to products and tools for developers. We call it Developer Experience or #devexp for short.

Having followed Joss Winn’s work highlighting developer craftsmanship it was great to have an opportunity to steal a couple of minutes with Ade, in particular, I was keen to make him aware of the work Mahendra Mahey (UKOLN) is doing around DevCSI and Dev8D (Ade appeared keen to come along to the next Dev8D).

Publisher buttons, schema.org and recommendations

Back to the session, Ade and his colleague Julie Farago went through the various publisher options for Google+. These included the share, +1 and badges people can add to their own site to make it easier to get your content into other people’s streams. This was something I’ve previously looked at before, but wasn’t particularly impressed partly because when doing a Google Search for these types on buttons I get directed to Google Webmasters: Add +1 to your pages to help your site stand out, which isn’t great. A better starting point is the Google+ Platform Plugins page, which uses Developer Experience principles for customisation and options [Something I’ve only recently got my head around is why Google have +1 and share buttons given that both also open the same comment box. The answer is share is “for content that users may want to share but not +1 (e.g. news or controversial content)”].

It was interesting to hear Ade mention that the people at Google had noticed a number of people were using a more traditional html/javascript popup instead of the entirely script powered version of the Google+ Share button, so they included the code for this version as well.

A recent development mentioned in the session was Google +1 Recommendations (emphasis mine):

Working on +1, we often hear people say they want to see more of what their friends recommend. Likewise, when we talk to site owners, they ask us to help them show more relevant content to their users. Today, we are rolling out a new feature of the +1 button in platform preview: when users hover over a +1 button, they will see recommendations for other great content on your site. … To keep these recommendations more relevant and on-topic, they will always refer to pages on the same domain or subdomain as the +1 button.

Google+ Recommendation

Because this new feature is limits recommendation to the same domain it’ll be interesting to see if this has any effect on internal site traffic and how relevant the suggestions are. Currently on the small sample I’ve tried it seems to be a mixture of the most popular (page with the most +1s) and the most popular within your circles … but I could be wrong.

The final thing from this session, which I wasn't expecting, was schema.org and rich snippets got a mention. Phil Barker (JISC CETIS) has written more on Will using schema.org metadata improve my Google rank?. My impression is schema/rich snippets won’t necessarily improve your search rank, but the added information in the search listing and Google+ stream might make it more attractive for someone to click on.

The next session I attended was The Next Generation of Social is in a Hangout which focused on the Hangout API. More details of this and hopefully a practical example to follow.


Google I/O BadgeGoogle recently invited me to their annual conference in San Francisco I/O 2012. Given my expertise in Google products, which I hope I’m sharing successfully with the sector and the opportunity to bug Google Engineers first-hand, JISC CETIS have kindly covered my travel and accommodation. It’s the first vendor conference I’ve been to and it’s been a heady mix of new product announcements, x-games type shenanigans and product giveaways (since joining JISC CETIS I’ve been using my own equipment so you could argue that as there is now no need to buy me a phone, tablet and desktop (Chromebox) attending this event has been cost neutral ;s). In this first of a series of posts I’ll try and summaries some of the highlights of the sessions I attend, and potential impact for the education sector.

Keynote Day 1

There wasn’t a lot here that is directly applicable to education but here’s my take on what was presented. The main focus was on Google’s mobile operating system (Android), their social networking offering (Google+) and two technological punts Google Glass and Nexus Q.


So Android is still on the march increasing in handset activations. The market Google has the advantage over Apple is in emerging powerhouses like Brazil and India where growth is the highest. Given that in these countries putting up phones masts is easier than laying cable this is the way the internet is being delivered to the masses which means Google is in an ideal place to capture vast amounts of usage data.

Under the hood Android is getting slicker with improved user interface processing. Accessibility appears to be getting more attention with more voice/gesture control. Android has had voice input for a while but this has always required a data connection. The latest version of Android now also enables this offline.

Google NowAnother announcement around Android was Google Now. These are user and situation specific information cards that appear in your notifications area of your mobile. Based on activity data like search terms, travel patterns Google can display relevant information. The example given was if Bob has an appointment across town, Google Now will notify you when best to leave based on your travel preferences. So if you usually take the bus it’ll work out how long it’ll take to walk to the bus stop, the time of the next bus and likely travel time based on current traffic conditions. It’s a little unnerving that Google potentially knows all of this information and I wonder if for the next generation there is going to be a new privacy norm where you expect to pay for service by paying in personal data.

Will Google Now help students get to class on time? … I don’t know, the scale on ‘intelligence’ did remind me of a scenario used in Terry Mayes Groundhog day paper (2007):

"It is early morning in late summer, nearing the end of the third teaching semester at the Murdoch Institute for Psychological Studies at the University of Western Scotland.  Jason, a student at the Institute, though at this moment still in bed in his girl friend's flat in Brighton, voice-activates his personal learning station and yawns as Hal, his intelligent Web agent, bids him good morning.  "How did you get on last night then, Jason?" "Never mind that, Hal, just tell me what I should be doing this morning".  "Well, you have a video-conference arranged with this week's HoD, then you will be interviewed about your dreams by the school recruiting team, then I've scheduled you for a virtual reality tutorial with your statistics tutor in Tokyo.  After that I think you should look at some data I've taken off the Web overnight for your virtual lab report this week." Jason, saying nothing, points at an icon projected on the bedroom wall.  A face appears.  "Hello, Jason".  "Hi Eliza, I was just wondering if you've located that intelligent tutoring software on interviewing skills yet..." "Yes, but Jason, I think I should tell you that your personal grade for peer tutoring has gone down again..."

Mayes goes on to argue why this particular model is not beneficial to the student as they are being micromanaged and not a self-regulated learner. Maybe the answer is the trust of Mayes’ paper, technology always promises, but never really delivers.

One last thing to say is as far as I know most of the features mentioned are only available in the latest version of Android 4.1. One of the issues Google has is in OS lag, manufactures developing devices for older versions of Android or not upgrading existing handsets to the new OS.

Google+ Events

The main announcement around Google+ was Events. Google+ Events, partially leaked before the conference, is a way to manage social events using Google+. The web interface lets you create and send invites to your friends (even those not on Google+). Not much new there, but what Google have also added is the ability for participants to contribute photos they take during the event by enabling ‘Party Mode’ in there mobile Google+ app. Photos taken when in this mode are then all collected in a single events page, comments and +1’s being used to pull out some highlights. One thought was this could be used as a method for students to capture photo evidence while on placement or a way to collate images from field trips.

Something not mentioned in the keynote but picked up by Sarah Horrigan on Learning Technologies Team blog at the University of Sheffield is the ability to schedule Hangouts. This could be potentially useful if you are planning on using Google Hangouts for small online tutorials (I also attended a session on Google+ as a platform – more educational ideas for Hangouts will be included in that post).

Google Glass and Nexus Q

The opening keynote also contained two hardware punts into the technological future. Google Glass is an augmented reality head-mounted display Google are developing and delegates were treated to a live demonstration which included some skydivers landing on the conference venue roof, all streamed through their Google Glasses in a Hangout. US citizen attending the conference were also given to pre-purchase their own Glass for an eye popping $1500, delivery early next year. Wearable tech has been around for a long time. I’m guessing just as Apple made smartphones and tablets the must have device, Google want to do something similar with Glass. The final announcement was the Nexus Q, a ball you plug your speakers and TV into and control with your other Android devices playing content from YouTube or purchased from the Google Play store.

It’s hard to see an educational slant on either of these, Glass comes close but as it isn’t available/very expensive I won’t dwell as I’ve many more posts to write (if you want to watch the keynote here’s a recording).

If you’d like me to expand on any of the points in this post leave a comment or get in touch.