Thursday, March 12, 2015
Au to do a sample application using Google Apps APIs in the cloud
One of the big focuses of this blog (and the team behind it) has been providing compelling examples of how integration with Google Apps APIs can make a product richer and more engaging. As a part of this effort, earlier today we announced Au-to-do, a sample application built using Google APIs.

Au-to-do is a sample implementation of a ticket tracker, built using a combination of Google App Engine, Google Cloud Storage, and Google Prediction APIs.
In addition to providing a demonstration of the power of building on Google App Engine, Au-to-do also provides an example of improving the user experience by integrating with Google Apps. Users of Au-to-do can automatically have tasks created using the Google Tasks API whenever they are assigned a ticket. These tasks have a deep link back to the ticket in Au-to-do. This helps users maintain a single todo list, using a tool that’s already part of the Google Apps workflow.

We’re going to continue work on Au-to-do, and provide additional integrations with Google Apps (and other Google APIs) in the following months.
To learn more, read the full announcement or jump right to the getting started guide.
| Dan Holevoet profile Dan joined the Google Developer Relations team in 2007. When not playing Starcraft, he works on Google Apps, with a focus on the Calendar and Contacts APIs. Hes previously worked on iGoogle, OpenSocial, Gmail contextual gadgets, and the Google Apps Marketplace. |
Wednesday, March 11, 2015
Contact Sharing using Google Apps Script
You just created your own contact group in Google Apps Contact Manager and now you want to share this contact group with a few other coworkers (not the entire company). Over the last couple of years, our team at Dito often got this request from our customers. We decided to leverage Google Spreadsheets & Google Apps Script to allow sharing of user’s “personal contact group” with only a select group of coworkers.
How does it work?
The Apps Script implements a three step wizard. Upon completion of the wizard, the script sends the sharing recipients a link to open the spreadsheet to import the user’s recently shared contact group. The three steps in the wizard are.- Step 1 lists all the current contact groups in user’s account. The user can select the group he/she wants to share.
- Step 2 allows user to select the colleagues with whom the user wants to share his/her personal contact group with.
- Step 3 lets the user submit the sharing request.
Designing using Apps Script Services
Apps Script has various services which can be used to build the user interface, access the user’s contact list and send emails without the need to compile and deploy any code.1. Security (guide)
Before a script can modify a user’s contacts, it needs to be authorized by that user. The authorization process takes place when a user executes the script for the first time. When a user makes a request to share his/her contacts, our script sends a link to the intended recipients by email. Upon clicking this link and the “Run Shared Contact Groups” button in the spreadsheet, the recipient will first need to grant authorization to execute the script. By clicking the “Run Shared Contacts Groups” button again, the script will proceed with creating the shared contact group.2. Spreadsheet Service
In developing this script, there was a fair amount of data that needed to be exchanged between different users. We used Apps Script’s Spreadsheet Service for temporarily storing this data.var group = ContactsApp.getContactGroup("Sales Department");
// from that group, get all of the contacts
var contacts = group.getContacts();
// get the sheet that we want to write to
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Contact Data");
// iterate through contacts
for (var i in contacts) {
//save each of the values into their own columns
sheet.getRange(i, 1, 1, 1).setValue(contacts[i].getGivenName());
sheet.getRange(i, 2, 1, 1).setValue(contacts[i].getFamilyName());
...
sheet.getRange(i, 13, 1, 1).setValue(contacts[i].getWorkFax());
sheet.getRange(i, 14, 1, 1).setValue(contacts[i].getPager());
sheet.getRange(i, 15, 1, 1).setValue(contacts[i].getNotes());
}
3. Ui Service
Ui Services in Google Apps Scripts have an underlying Google Web Toolkit implementation. Using Ui Services in Apps Script, we easily built the user interface consisting of a 3 step wizard. In designing Ui using Ui Services, we used two main types of Ui elements - Layout Panels and Ui widgets. The layout panels, like FlowPanel, DockPanel, VerticalPanel, etc., allow you to organize the Ui widgets. The Ui widgets (TextBoxes, RadioButtons, etc.) are added to layout panels. Ui Services make it very easy to assemble and display a Ui interface very quickly.We built each of the components on their own, and then nested them by using the “add” method on the desired container. The UI widgets in the screenshot above were constructed by the code below:
var app = UiApp.createApplication().setWidth(600).setTitle(Share The Group);
// create all of the structural containers
var tabPanel = app.createTabPanel();
var overviewContent = app.createFlowPanel();
var step1Content = app.createFlowPanel();
var step2Content = app.createFlowPanel();
var step3Content = app.createFlowPanel();
// create u/i widgets
var selectLabel = app.createLabel("Select one of your Contact Groups you want to share with others.");
var contactGroupDropdown = app.createListBox().setName(groupChooser);
// add all children to their parents
overviewContent.add(selectLabel);
overviewContent.add(contactGroupDropdown);
tabPanel.add(overviewContent,"Overview");
tabPanel.add(step1Content,"Step 1");
tabPanel.add(step2Content,"Step 2");
tabPanel.add(step3Content,"Step 3");
app.add(tabPanel);
// tell the spreadsheet to display the app weve created.
SpreadsheetApp.getActiveSpreadsheet().show(app);
Continuing with this pattern, we created a pretty complex design using the UI Services. The next step in building a useful user interface is actually building in event handlers for the UI Widgets. Event Handlers let Apps Script know which function you want to run when your script needs to respond to a given user interaction. The code below is an example of a DropDownHandler that we used in our script in Step 1 of the wizard.
// callback element is passed in with the event.
function changeEventForDrowdown(el) {
Browser.msgBox("The dropdown has changed!");
}
// create event handler object, indicating the name of the function to run
var dropdownHandler = app.createServerChangeHandler(changeEventForDrowdown);
// set the callback element for the handler object.
dropdownHandler.addCallbackElement(tabPanel);
// add the handler to the "on change" event of the dropdown box
contactGroupDropdown.addChangeHandler(dropdownHandler);
4. Contacts Service
When a user of the script chooses to share a specific group, the script saves that group contact data into a spreadsheet. When a sharing recipient clicks on the run button to accept the contacts share request, the script fetches the contact group data from the spreadsheet and uses the Contacts Service to create contacts for the share recipients.for (var i = 0; i < sheet.getLastRow(); i++) {
var firstName = sheet.getRange(i, 1, 1, 1).getValue();
var lastName = sheet.getRange(i, 2, 1, 1).getValue();
var email = sheet.getRange(i, 3, 1, 1).getValue();
var myContact = ContactsApp.createContact(firstName, lastName, email);
// ...
// set other contact details
// ...
myContact.addToGroup(group);
}
As this application shows, Apps Script is very powerful. Apps Script has the ability to create applications which allow you to integrate various Google and non-Google services while building complex user interfaces.
You can find Dito’s Personal Contact Group Sharing Script here. Click here to view the video demonstration of this application. You can also find Dito Directory on the Google Apps Marketplace.
Posted by Steve Webster and Vinay Thakker from Dito
Want to weigh in on this topic? Discuss on Buzz
Managing groups using the new Groups Settings API
The recently launched Groups Settings API allows Google Apps domain administrators to write client applications for managing groups in their domain. Once you have created the groups and added members using the Provisioning API, you can use the Groups Settings API to perform actions like:
- manage access to the group
- configure discussion archiving
- configure message moderation
- edit a groups description, display format and custom fields
Let’s have a look at how you can make authorized calls to the Groups Settings API from your client application.
Getting Started
You must enable the Provisioning API to make requests to the Groups Settings API. You can do so by enabling the Provisioning API checkbox in the Domain settings tab of your Google Apps control panel.
Next, ensure that the Google Groups for Business and Email services are added to your domain by going to the Dashboard. If these services are not listed, add them by going to Add more services link next to the Service settings heading.
Now you are set to write client applications. Lets discuss the steps to write an application using the Python client library. You need to install the google-api-python-client library first.
You can register a new project or use an existing one from the APIs console to obtain credentials to use in your application. The credentials (client_id, client_secret) are used to obtain OAuth tokens for authorization of the API requests.
Authorization using OAuth 2.0
The Groups Settings API supports various authorization mechanisms, including OAuth 2.0. Please see the wiki for more information on using the library’s support for OAuth 2.0 to create a httplib2.Http object. This object is used by the Groups Settings service to make authorized requests.
Make API requests with GroupSettings service
The Python client library uses the Discovery API to build the Groups Settings service from discovery. The method build is defined in the library and can be imported to build the service. The service can then access resources (‘groups’ in this case) and perform actions on them using methods defined in the discovery metadata.
The following example shows how to retrieve the properties for the group staff@example.com.
service = build(“groups”, “v1”, http=http)
group = service.groups()
g = group.get(groupUniqueId=”staff@example.com”).execute()
This method returns a dictionary of property pairs (name/value):
group_name = g[name]
group_isArchived = g[isArchived]
group_whoCanViewGroup = g[whoCanViewGroup]
The update method can be used to set the properties of a group. Let’s have a look at how you can set the access permissions for a group:
body = {whoCanInvite: ALL_MANAGERS_CAN_INVITE,
whoCanJoin: ‘INVITED_CAN_JOIN’,
whoCanPostMessage: ‘ALL_MEMBERS_CAN_POST’,
whoCanViewGroup: ‘ALL_IN_DOMAIN_CAN_VIEW’
}
# Update the properties of group
g1 = group.update(groupUniqueId=groupId, body=body).execute() Additional valid values for these properties, as well as the complete list of properties, are documented in the reference guide. We have recently added a sample in the Python client library that you can refer to when developing your own application. We would be glad to hear your feedback or any queries you have on the forum.
| Shraddha Gupta profile Shraddha is a Developer Programs Engineer for Google Apps. She has her MTech in Computer Science and Engineering from IIT Delhi, India. |
Sunday, March 1, 2015
Using e Learning To Facilitate 21st Century Learning
- Slideshare version
- Thinking Back to The Future
MY TALK
My 2-hour talk explored learning and how we can use web 2.0 learning tools and Open Educational Resources (OER) to transform the way we learn. Finally, it reflected some of the challenges that we will probably face as we embark on this 21st century learning adventure.
Here are the slides:
SELF-ASSESSMENT
The moment of truth had arrived after my lecturing nightmares in 2008. This was my first lecture of the year to more than a 100 participants. Was I ready? Or would I crash, and procrastinate into total self-destruction?
Interestingly, I was invited again by the Ministry of Health (Training Division), after putting so many tutors to sleep during my previous lecture. I suppose they might have found something valuable from it. Otherwise, why would they have invited me back again? Maybe my negative imagination during that sad period had misled me to believe that it was much worse than it really was. Sometimes setting too high expectations can kill our joy to enjoy the process of learning and mastering. Nothing can be mastered over night! Ask Tiger Woods, and he will tell you?
So, lets start with the presentation slides? 108 slides (54 slides per hour), including four inspiring short videos (adding up to around 25 minutes) over a two-hour period. There are several more excellent short videos in the slides, which I ignored during the talk due to time constraints, but still worthwhile sharing for participants to explore after the talk.
Since, I was going to talk about e-learning, I was of course reluctant to give them print-outs to prove a point. So, I uploaded the slides to Slideshare the night before my talk for them to access during and after the seminar. Interestingly, I believe this is the first time in my life that I have actually been really satisfied with my presentation slides. Although, I missed out on a few resources and tools I wanted to share, and a few messy slides, I felt good about them. That was at least a good start.
My positive feelings were probably picked up by the Slideshare team, which within 24 hours featured the presentation slides on Slideshares front page. Within 48 hours it had been viewed more than a 1000 times, and retweeted 20+ times. So, this indirect feedback from a global audience has surely helped me regain my confidence :)
But then again, it was not my slides that were a problem last time. Instead it was my actual delivery (lecture) that literally nearly procrastinated me into total self-destruction. So, how would it go this time around?
Strangely over the last few months in my recovery to rediscover myself, I have lowered my expectations, and started to enjoy life. Yes, I have even started swimming 2-3 times a week, built some muscle, and should be ready to challenge Michael Phelps in the next Olympics. London here I come!
After months of frustration, reflections and rejecting several offers to conduct talks and workshops in Malaysia and abroad, God (Allah to me! For Atheists, I have no idea!) sparked a small light that has literally changed my life (at least until now!). My little four year old son looked me in the eyes and said a few words of magic (Please, get better soon!), and from that day on, slowly and steadily an inner strength has increasingly touched every cell in my body.
So, how did the lecture go? No fear, no pressure, no high expectations, more muscle, more experience, more fun, and more Yes, I can! Al-Hamdulilla, I believe it went very well. Actually, I believe I nailed it (Simon are you reading!). At the moment I feel like an e-Learning Gladiator that can battle through all the destructive forces of negativity to inspire people to explore all the wonderful opportunities to learn beyond face-to-face learning (please explore the slides!).
Looking back, I should have video recorded it! But then again, I am not ready to become a Stephen Downes yet (recording and sharing to the world!). Give me a couple of years of messing up first, then perhaps! But at least you all can enjoy my presentation slides as I learn to master the art of lecturing.
MY WIFE, MY LOVE!
However, as I have been so obsessed during the last few months trying to rediscover myself and become an e-learning gladiator, I have neglected and not given the kind of love and time a marriage and family deserves. At the moment I am paying the price for it, and should stop writing right now, and instead win back the only woman that I have ever loved.
I LOVE YOU! PLEASE FORGIVE ME! I CANT IMAGINE LIVING WITHOUT YOU! PLEASE COME BACK!...
Update (15/7):
Al-Hamdulilla, My Love mission has been completed successfully. Now, I can focus on being an e-Learning Gladiator again :)
Friday, February 27, 2015
Part 1 Would Nemo Survive Using the Blue Ocean Strategy
BLUE OCEAN STRATEGY?
"Based on a study of 150 strategic moves spanning more than 100 years (1880 - 2000) and 30 industries, it provides us with a systematic approach to making the competition irrelevant and creating uncontested market space. " - Source
So, what is Blue Ocean Strategy exactly?
"It is the simultaneous pursuit of differentiation and low-cost to create new market space. Blue Ocean Strategy seeks to make the competition irrelevant by creating a leap in value for both the company and its buyers. Blue Ocean Strategy aligns the following three propositions:
- Value proposition
The utility buyers receive from the product or service minus the price they pay for it. - Profit proposition
The price of the offering minus the cost of producing and distributing it. - People proposition
The readiness of employees to execute the new strategy with all of their energy, to the best of their abilities, and voluntarily.
Click here to read more and learn about BOS for free.
If the BOS theory still does not make sense, this should nail it:
- Kim & Mauborgne (PDF)
...And what is the likelihood of that?
TWO PART SERIES
In this two part series I will explore Blue Ocean Strategy (BOS), and reflect back on a 2-day BOS workshop I attended a few weeks back (1st - 2nd December) at the UCSI Blue Ocean Strategy Regional Centre. In Part 1, I will zoom in on BOS as a theory and share some insights that might have been overlooked by the authors. In part 2, I will focus on Blue Ocean as a systematic approach to gain insight, innovate and create value, and explore some of the useful tools that we can use to visualize our own Blue Ocean, whatever that might be.
Having read the book twice (first time in 2007), read dozens of related articles, and participated in a 2-day BOS workshop, I believe I am entitled to share my honest opinions regarding this approach next. Though, I might be wrong!
RED OCEAN VS BLUE OCEAN STRATEGY
While I kind of like the Blue Ocean idea (Exotically relaxing and hypnotizing!) and most of the BOS visualization tools (explored in Part 2), I kind of find the Read Ocean and Blue Ocean Strategy mambo jumbo (graphic above) and several of the case studies used in the book both misleading and a whole lot of _____ (you guess?)!
The BOS theory has already been around for a few years, and it is NOT short of criticism either, so I am not going to go on a full-blown (reinventing the wheel) shark attack. However, being fair to BOS, it has also rebutted six misconceptions about BOS (PDF) reasonable convincingly.
If you read the Blue Ocean Strategy (BOS) book, or listen to any consultant promoting BOS, they will for sure share with you the ultimate BOS example and pride Cirque du Soleil. No doubt the Cirque du Soleil (founder Guy Laliberté) is an inspiring, innovative and breathtaking story, but is it really a Blue Ocean?
First, Guy Laliberté never used BOS as a tool to innovate and create value. So, although it might be a Blue Ocean, it does not prove that the BOS as a theory is practical and implementable. Secondly, BOS like so many other theories often hijack success stories from a few angles (and hide others), and then absorb them into a portfolio of evidence of whatever they are trying to convince or sell.
Lets look a bit closer at the amazing Cirque du Soleil story, and explore whether it is really a Blue Ocean according to the Red Ocean vs Blue Ocean framework:
- Break the Value-cost Trade-off?
The authors would like you to believe that Cirque du Soleil grew out of the traditional circus act and then reinvented it by eliminating performing animals and star performers (cut cost), and shifted the buyer group from children (end-users of the traditional circus) to adults (purchasers of the traditional circus), drawing upon the distinctive strengths of other alternative industries, such as the theatre, Broadway shows and the opera, to offer a totally new set of utilities to more mature and higher spending customers (Source).
In reality, Guy Laliberté (folk musician, busker and fire breather) never really worked with performing animals or so called star performers, and we could actually argue instead that he reinvented street entertainment by transforming a group of street performers into a "proper circus" (learning the circus act from Guy Caron). He didnt pick up the idea of telling a story from the theatre, but from the Moscow Circus method. His vision was to create a circus with neither a ring nor animals. The rationale was that the lack of both of these things draws the audience more into the performance (Source).
Ironically, the book never mentions this, and the main reason is probably that these revelations would confuse their value-cost trade-off idea. Yes, Cirque du Soleil enhanced the show value and entertainment as they innovated over the years, but it also made the Cirque du Soleil much more costly than most other street entertainment shows (which are often free, but you are encouraged to donate/give a token of appreciation), and that had nearly catastrophic consequences during the first few years. Did you know that Guy Laliberté or his company went nearly bankrupt several times during the first few years, and if it was not for government grants, his never-say-die attitude, connections, and bit of fortune (luck!) this amazing story would have ended in disaster, and this again was never mentioned in the BOS book. The BOS book gives us an impression as if it was a smooth ride to heaven, and that the BOS was the secret to its success. What baloney! - Create Uncontested Market Space?
Seriously, what does this really mean? How do you create an uncontested market space for adult entertainment? Give us a break! Cirque du Soleil explored, innovated, and has developed (after several financial failures) over the years several amazing and unique shows that consists of a theatrical mix of circus arts and street entertainment. You could have 10 other groups use similar Blue Ocean Strategies and they would have failed, unless they had people like Guy Laliberté to make it happen.
The idea of creating an uncontested market space is an illusion, unless we simply define it as an uncontested market space, which is easy as the authors have provided no real measure (like so much else!) to prove this. That probably did not make much sense either, but then again the idea of creating an uncontested market space (perhaps on Mars!) in the 21st century, unless for an extremely short period, is highly unlikely. But, we should never stop dreaming. Anything is possible! - Make the Competition Irrelevant?
Very few companies and products throughout history have made competition irrelevant (e.g. Microsoft Office could be an example, but that cost millions, if not billions of dollars in research and development), and if they have made competition irrelevant, it has only been for short periods. But then again, can competition ever be irrelevant? Even the iPhone (Vs Blackberry Vs Android) has relevant competition, although it has been a tremendous success.
If there is no competition in sight, perhaps the market is not worth embracing anyway. In short, I would argue that there is no harm with contested competition. For example, the iPhone entered a read ocean competitive smart-phone market (which had bad products!), but through its exceptional user experience and iTunes Eco-system it has managed to capture a healthy market share. As for the Cirque du Soleil story, they are not the first acrobatic story show to pop-up. The Chinese dragon show has been around for centuries. Also, Cirque du Soleil will always have relevant competition from other amazing traveling shows and acts (and other forms of adult entertainment!), but as long as their shows are unique, attractive and entertaining, they will amplify their reputation and attract an increasing global demand. - Create and Capture New Demand?
Perhaps on Mars or Pluto (the Moon is more likely)! There is and has always been a demand for new forms of adult entertainment (or ways of being entertained), and Cirque du Soleil has been successful in capturing this universal demand with their amazing shows (not necessarily because of their strategy!). - Align the whole system of a firms activities in pursuit of differentiation and low cost?
Low cost for whom? The firm? The customer? Both? This idea has confused me until today. When I first read the book, I got the impression that Blue Ocean was about enhancing the customer value and at the same time lowering the product/service cost. But after attending the workshop, and scrutinizing some of the case studies, I get the impression that the lowering cost aspect, refers mostly to the firm, and not necessarily to the customer.
If we go back to the Cirque du Soleil case, we see a pursuit of differentiation and lower implementation cost if we compare to the traditional circus act. But, that is rather misleading, because we could have and perhaps should have compared it to street performances, which it really originated from. And if we did, it would be differentiation, but at a higher cost. Moreover, had Cirque du Soleil used performing animals and star performers, it would have certainly gone bankrupt, because it nearly went bankrupt without them several times. Though, kudos to Cirque du Soleil for hiring over the years many amazing street performers, and providing them a healthy and stable living income beyond what they would have probably got from performing on the streets.
WHAT IS YOUR POINT?
Having said all this, we could go BLUE arguing whether Cirque du Soleil is really a Blue Ocean or not. No point wasting any more time on this issue, though please challenge me on all accounts (can always update my post).
Having always been attracted to business improvement books, or books that explore creativity and business value innovations (attracted to the stories rather than the formulas!), I see a common trend and pattern in many of the books I have read, which is the manipulation of past and existing success stories to prove their ideas and frameworks for ultimate success. In other words, they will look through their narrow lenses and highlight what fits their theory, and then hide does aspects that do not fit.
The secret to sustained success lies in the marketing strategy (BOS misses this point)! No, it lies in strong ethical practices (BOS misses this point)! No, the secret to success is strategic execution (RIP)! No, it lies in the strategy itself. BOS claims based on its research that the strategic move, and not the company or the industry, is the right unit of analysis for explaining the creation of blue oceans and sustained high performance...bla, bla (p. 10). They are all right in their own lenses.
Though, I would argue that all of the above mentioned ideas, do not really highlight the real essence of companies that have had sustained success over time, which is exceptional leaders working with amazingly talented people. What would Apple today be without Steve Jobs, or Air Asia without Tony Fernandes?
Exceptional leaders have the ability to visualize (ideas), inspire, empower, and attract talented people to work for them, and as importantly they have the ability to continuously attract the world attention needed (or hire people that can!) to make it a sustained success. So, if you want a real strategy that really works, hire exceptional leaders and talented people with the right attitude (to your needs). Even if you dont have a great strategy, these people will most likely do a better job on strategy development than any consultant, or consultancy firm out there.
You are wrong! Maybe, I am!
PART 2?
Although, I find all the exotic buzz words (that can easily be manipulated) and the Red/Blue ocean framework from BOS a load of ____ (the real Blue Ocean!), they do have some interesting tools we can use to acquire useful insights and help us create value innovations. Your results using these tools might not turn out to be real Blue Oceans according to their immeasurable and exotic framework, but nevertheless the tools are worth a try.
So, what about the Nemo puzzle? That will be explored in part 2 (if I can cook up an answer!), and I will also reveal the ultimate secret to success, which is...