Thursday, March 12, 2015

Changes to minimum password length for Google Apps accounts

As part of our continuous efforts to help our users protect their information, we recently launched 2-step verification for all Google accounts. Starting March 14, we will also increase the minimum password length requirement for Google Apps accounts from 6 characters to 8.

This new policy aligns Google Apps accounts with consumer accounts that already require passwords to be at least 8 characters long.

Existing users can keep their current password even if it doesn’t match the new security requirements, but they will be required to comply when changing their password for the first time. Administrators will also need to comply when resetting passwords for users.

With this change, passwords set via the Google Apps Control Panel from March 14 will need to be at least 8 characters long. Calls to the Provisioning API that try to set a users password that is shorter than 8 characters will also fail with an InvalidPassword error message. For more information on how to programmatically manage user accounts, please check the Provisioning API Developer’s Guide.

Want to weigh in on this topic? Discuss on Buzz

Read more »

Google Apps Developer Blog for developers by developers

Welcome to the Google Apps Developer Blog. Today were excited to introduce the Google Apps Developer Blog, for developers interested in building applications that leverage Google Apps. In this blog well cover topics of interest to Google Apps developers building applications on top of Google Apps, integrating with them or utilizing the APIs. Examples of some of the topics well cover and resources well provide include:
  • code snippets and samples
  • reviews of customer integration and deployment cases
  • interviews with developers on best practices for developing in Apps
  • voting on most-requested developer extensions in Apps
  • discussion of OAuth roadmap
  • references to OpenID
  • smart ways to do logging (and analysis/reporting) in AppEngine, etc.
  • Storing JSON in AppEngine
Watch this blog and subscribe to our feed for announcements of developer events, DevFests, Google I/O updates, product announcements, links to other Google developer related content and case studies on actual integration, implementation and deployments.

Also, dont forget to register for Google I/O, which is May 19-20, 2010 in San Francisco. Google I/O will feature 80 sessions, more than 3,000 developers, and over 100 demonstrations from developers showcasing their technologies. Youll be able to talk shop with engineers building the next generation of web, mobile, and enterprise applications. Last years I/O sold out before the start of the conference, so we encourage you to sign up soon.

Well do our best to bring you the most relevant developer content right here on this blog, and you can also check out these excellent sources of information for Google developers:

Google Apps Discussion Forum
Google Apps Client Libraries and Sample Code
Google Apps API Overview
Google Apps API Help Forum
Google Enterprise Blog

Finally, we want your feedback! Ask questions, suggest topics, and even submit your own stories for possible inclusion in this blog. Contact me at GADBeditor at google if you have a story for submission, or story suggestion. Comments will be enabled on this blog, and we hope youll join the discussion.

Thanks,

Don Dodge
Developer Advocate
Developer Relations Team
Read more »

Wednesday, March 11, 2015

Automate Google Analytics Reporting Using Google Apps Script

Editors note: This has been cross-posted with the Google Analytics blog and the Google Developers blog -- Jan Kleinert

Many people have been asking for a simple way to put Google Analytics data into a Google Spreadsheet. Once the data is inside a Google Spreadsheet, users can easily manipulate Google Analytics data, create new visualizations, and build internal dashboards.

So today we released a new integration that dramatically reduces the work required to put Google Analytics data into any Apps Script supported product, such as Google Docs, Sites, or Spreadsheets.

Here’s an example of Google Analytics data accessed through Apps Script and displayed in a Google Spreadsheet.

Custom API Dashboards - No Code Required

We know that a popular use case of this integration will be to create dashboards that automatically update. To make this easy to do, we’ve added a script to the Spreadsheets script gallery that handles all this work - no code required. The script is called Google Analytics Report Automation (Magic).

This script is a great template for starting your own project, and we’ve had many internal Google teams save hours of time using this tool. Here’s a video demoing how to build a dashboard using this script:

You can find this script by opening or creating a Google Spreadsheet, clicking Tools -> Script Gallery and searching for “analytics magic”.

Writing Your Own Script

Of course many developers will want to write their own code. With the new Analytics – Apps Script integration, you can request the total visitors, visits, and pageviews over time and put this data into a spreadsheet with just the following code:


// Get Data.
var results = Analytics.Data.Ga.get(
tableId,
startDate,
endDate,
ga:visitors,ga:visits,ga:pageviews,
{‘dimensions’: ‘ga:date’});

// Output to spreadsheet.
var sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet();
sheet.getRange(2, 1, results.getRows().length, headerNames.length)
.setValues(results.getRows());

// Make Sandwich.

To get started now, read our Automated Access to Google Analytics Data in Google Spreadsheets tutorial. Also check out the Google Analytics Apps Script reference docs.

Solving Business Problems

Are you ready to start building solutions using Google Analytics and Google Apps Script?

We’d love to hear new ways you use this integration to help manipulate, visualize and present data to solve business problems. To encourage you to try out this integration, we are giving out Google Analytics developer t-shirts to the first 15 developers to build a solution using both APIs.

To be eligible, you must publish your solution to either the Chrome Web Store or the Spreadsheets Script Gallery and include a description of a business problem the script solves. We’ll then collect these scripts and highlight the solutions in an upcoming blog post. After you publish your script, fill out this form to share what you’ve built.

We’re looking forward to seeing what you can do with this integration.

Nick Mihailovski   profile

Nick is a Senior Developer Programs Engineer working on the Google Analytics API. In his spare time he likes to travel around the world.

Read more »

Announcing Election Info Using Apps Script to Provide Voting Information

It’s time for the 2012 General Election in the United States and along with it comes the tedious process of finding your voter registration, polling sites, times, directions, etc. The previously announced Google Civic Information API provides a great service to programmatically obtain much of this information based on the your home address. Google Apps Script makes it really quick and easy to build a web application that queries this information and uses various Google services to organize and track your information.

Election Info is a sample application built using Apps Script that can:

  • Query the Google Civic Information API to find polling locations and hours using client side JavaScript and AJAX.
  • Display polling information using HtmlService with jQuery for a clean effective UI.
  • Generate static maps via UrlFetch and the MapsService to show polling maps and directions.
  • Create a calendar event for election day with your polling location using the Calendar service.
  • Generate a bring-along document with poll directions and hours using the Document service.
  • Send you an email with a summary with your polling place information using the Gmail service.
  • Store your previous searches in UserProperties so it will remember your likely home address the next time you launch the app.

As you can see, this is a comprehensive sample app that is useful while also highlighting key Apps Script capabilities.

Install the app from the Chrome Web Store. Check back soon as we will be writing a blog post with details and sample code on how the sample was built.



Arun Nagarajan   profile | twitter

Arun is a Developer Advocate on Google Apps Script. Arun works closely with the community of partners, customers and developers to help them build compelling applications on top of Google Apps using Apps Script. In the past, he spent over 9 years building and designing platforms and infrastructure for enterprise mobile applications.. Arun is originally from the Boston area and enjoys basketball and snowboarding.

Read more »

Agile Retrospectives a Rising Patton Fusion

The last session of Agile Vancouver 2010 was a unique opportunity to watch Linda Rising conduct a conference retrospective with the Agile Vancouver organizers. It was interesting to watch how she facilitated and I wrote down some of her techniques so that I could try them out. The following day during the tutorials Jeff Patton led us through a mini retrospective with his own interesting twists based on his story mapping experience. What follows is the fusion of their ideas.

Note: This retrospective works nicely using index cards that can easily be sorted and grouped around a common table. If you are using walls and stickies, you can adapt where required.

Step 1 - Set the tone:
Recite Norm Kerths Prime Directive (Linda was able to recite this by memory):

"Regardless of what we discover, we understand and truly believe that everyone did the best job they could, given what they knew at the time, their skills and abilities, the resources available, and the situation at hand."

After reciting, ask each team member one by one if they agree to uphold this statement during the meeting and to avoid blame. A simple verbal "yes" indicates agreement. The verbal agreement is a simple influencing strategy or pattern that helps set the tone for the retrospective.

Step 2 - Framing the Retrospective:
The facilitator tells a story of a co-worker meeting you in the hallway of your company. The co-worker asks: "I know you were on project [X], how was that?". Each person responds with "It was great because...". Instead of speaking the answers out loud, give each person 3 index cards and have them write their answers down in silence. This allows input from each person regardless of personality type and keeps your team members answers from influencing your own.

When each person has filled out their 3 cards, they read each one out loud and place them on the table. Once all cards are on the table, ask the group to silently group the answers together. Cards that are similar should be close to one another and cards that are different should be farther apart. According to Patton, the simple reason for doing this in silence is because it allows the work to happen quickly and without much discussion. In our exercise, we found this to be true.

Now that the good things are grouped together, take a different coloured index card and have the group summarize each grouping with a new card. For example, summarizing items like "team worked well together", "Bob collaborated to help me with my task", "Team rallied to complete the stories together" might be summarized with a card called "Great team work".

Step 3 - Do Differently:
Now that we have acknowledged the good things about the last period, remind the team that it is only a perfect project if they would do that project or iteration again in exactly the same way. In reality there is always something we would do differently. Ask the team to silently fill out 3 more index cards with what they would do differently. They may not write cards that associate blame, describe what wrong, or try to problem solve. In this part of the retrospective we are only identifying what we would do differently.

Once everyone has completed their cards, we again read them aloud as we place them on the table, group the cards in silence, and summarize with a different coloured index card. As the cards are read or summarized, the facilitator may need to remind the team to refrain from problem solving or directing blame.

Step 4 - Voting:
The next step is for the team to agree on which items on the "Do Differently" list are the most important. To keep the voting impartial and independent, have each team member write their top 3 items on an index card and hand the cards to the facilitator. The facilitator then tallies the votes and records the totals on the summarized cards. An alternative is to use dot voting, but Ive found that dot voting can be gamed too easily and that initial dots influence those who vote later (group think).

Step 5 - Experiments:
Using the top 1 or 2 voted items, ask the group to split into groups to discuss them - 1 group per item. Instruct the groups to discuss small experiments or tweaks that the team could try in the next iteration. If you practice frequent retrospectives, this discussion does not need to be about problem solving or even root cause analysis. The goal is to quickly agree on small experiments to try to resolve the issue you are discussing. For those dedicated to root cause analysis this may be a problem, but give it a try and do what works for your team while avoiding blame or delving deep into problem solving. This part should be time boxed to 10 or 15 minutes maximum.

After deciding on the experiments, have one person from each group present the idea to the group. This idea needs to be included in the backlog for the iteration and the team (not an individual) commits to completing the experiment during the iteration and examining the results.

Step 0 - Review Experiments:
At the beginning of the next retrospective, add a new step at the beginning to discuss your experiments to see how effective they were and use this information as input into future experiments.

Other notes:
If you are doing a retrospective for a larger period of time, then consider starting the retrospective by building a timeline of events. For more info, check out this blog: http://www.thekua.com/rant/2006/03/a-retrospective-timeline/

Thanks Linda and Jeff for sharing your methods and ideas.
Read more »

Tuesday, March 10, 2015

Introducing the Google Drive Android API

Author PhotoBy Magnus Hyttsten, Developer Advocate, Google Drive

With todays developer preview of the Google Drive Android API in Google Play Services 4.1, you can add the convenience of Google Drive cloud storage to your apps without breaking a sweat.

While Drive integration on Android was possible in the past, the new API creates a faster, seamless experience that enables your apps to integrate with the Drive backend within minutes.

The new API offers a number of benefits:

1. Transparent use and syncing of local storage

The Google Drive Android API temporarily uses a local data store in case the device is not connected to a network. So, no need to worry about failed API calls in your app because the user is offline or experiencing a network connectivity problem. Data stored locally in this fashion will automatically and transparently be stored in the Google Drive cloud by Android’s sync scheduler when connectivity is available to minimize impact on battery life, bandwidth, and other resources.


2. Designed for Android and available everywhere

The API was developed for Android and conforms to the latest Android design paradigms, such as using the new uniform client API GoogleAPIClient. And being part of the latest release of Google Play Services provides additional benefits:
  • There’s minimal impact on the weight of your apps. As the client library is a stub to Google Play Services, incorporating the API has minimal impact on the size of your .apk binaries, resulting in faster downloads, fewer updates, and smaller execution footprint.
  • User files are automatically synced between different devices (provided the app has the same namespace and is signed with the same key).
  • Any device running the Gingerbread or later releases of Android and Google Play Services will automatically have support for the Google Drive Android API.

3. User interface components

File picker and creator user interface components are provided with this initial release of the Google Drive Android API, enabling users to select files and folders in Google Drive.


For example, the file picker is implemented as an Intent and allows you develop a native Android user experience with just a couple lines of code. This following code snippet launches the picker and allows the user to select a text file:
// Launch user interface and allow user to select file
IntentSender i = Drive.DriveApi
.newOpenFileActivityBuilder()
.setMimeType(new String[] { “text/plain” })
.build(mGoogleApiClient);
startIntentSenderForResult(i, REQ_CODE_OPEN, null, 0, 0, 0);

The result is provided in the onActivityResult callback as usual.

4. Direct access to Drive functionality

You may be wondering how the Google Drive Android API relates to the Storage Access Framework released as part of Android 4.4 KitKat.

The Storage Access Framework is a generic client API that works with multiple storage providers, including cloud-based and local file systems. While apps can use files stored on Google Drive using this generic framework, the Google Drive API offers specialized functionality for interacting with files stored on Google Drive — including access to metadata and sharing features.

Additionally, as part of Google Play services the Google Drive APIs are supported on devices running Android 2.3 Gingerbread and above.

How to get started

As you incorporate the Google Drive Android API into your apps, we hope it makes your life a little bit easier, and enables you to create fun, powerful apps that take advantage of all that Android and Google Drive can do together.

For more information visit our documentation or explore our API demo and other sample applications on the official Google Drive GitHub repository.

Also check out the official launch video:



Let’s keep the discussions going on +GoogleDrive, and Stack Overflow (google-drive-sdk).


Magnus Hyttsten is a Developer Advocate on the Google Drive team. Beyond work, he enjoys trying out new technologies, thinking about product strategies, and exploring California.

Posted by Scott Knaster, Editor

Cross posted on the Google Developers Blog.

Read more »

Smartsheet Inside Google Apps Marketplace

Editors Note: Brent Frei is founder and chairman at SmartSheet. Smartsheet makes an online project management solution that employs a spreadsheet-like interface on top of a powerful work automation engine. We invited SmartSheet to share their experience with the Google Apps Marketplace.

The Challenge

Last summer, the Smartsheet team had what I expect is a fairly typical Software as a Service (SaaS) company priorities discussion: should we integrate with one of the big application marketplaces? Here are some of the questions we considered:
  1. Are our customers asking for it?
  2. Will it give us access to a significantly larger lead flow?
  3. Do the people that use these apps typically pay for them?
  4. Would our target customer expect to find our type of tool there?
  5. What does the competition look like on each platform?
  6. What is the scope of the development effort?
Then, do the answers to any of these choices outweigh the benefits of the alternatives on our broader list of priorities?

Decision Time

Google Apps seemed to rank highly across all 6 criteria. Of the dozen major application marketplaces competing for ISV mindshare, Google Apps seemed to be the most natural upstream app from Smartsheet. Google Apps customers were most likely to look next toward solutions that are addressed by our application.



Weaving SmartSheet collaboration and workflow features in amongst the Google Apps was a very natural fit for our users. As you can see in the video, the familiar spreadsheet-like interface and direct access from the Google menu bar makes Smartsheet an effective companion app. The integration of Smartsheet with Google Apps turns the combination into the companys operating software.

It was therefore fortunate that the Google Apps APIs proved to be just as natural a fit. Well done, well documented, easy to implement and, as we later discovered, solid developer support.

The Details

Once the decision was made, we dedicated one senior architect and one product manager to designing and delivering the integration. It required about 4 days of technical investigation to validate the design concepts. The Google Apps API documentation and developer support were first rate, which made the delivery nearly as easy as the design.

Virtually every part of Googles application stack had a natural fit within our customers common workflow.

  1. Universal Navigation and Single Sign-on
  2. Move Data to and from Google Spreadsheets
  3. Attach Google Docs to Any Row
  4. Open any attached file as a Google Doc
  5. Synchronize Contacts
  6. Display & Manage dates between Sheets & Calendars
  7. Share individual parts of the sheet via Gmail
We divided the development into two phases based largely on the availability of the specific Google Apps APIs. Mail and Calendar were phase 2, everything else was phase 1. We had a single, mostly dedicated developer for the effort.

Stage 1

We first implemented single-sign-on via OpenID and Google Docs API integration using OAuth for standard Google Accounts. This included data import/export, attaching Google Docs to rows, uploading office documents to Google Docs, and importing Contacts. We then extended this integration to support Google Apps users. These features were rolled out in Q3 of 2009, well in advance of the Google Apps Marketplace launch. It took a senior developer roughly 6 weeks to implement this first stage. With the core integration features completed, we were able to quickly implement new Apps Marketplace functionality, including Universal Navigation and the Licensing API, as they were made available in the sandbox.

Stage 2

We are developing full-featured Google Calendar integration, utilizing both the Google Calendar Data API and Calendar Event Gadgets, to be delivered in May 2010. Gmail integration will follow quickly, utilizing both the OAuth access to IMAP and SMTP and Gmail Contextual Gadgets. With the experience we have integrating other APIs, the development of these features is greatly simplified, as the infrastructure – implementation of OpenID, OAuth, and the GData Java Client Library – is already in place.

The Mechanics

We chose to enter three variations of Smartsheet into the Google Apps Marketplace: two mainstream solutions and one emerging technology solution.

Mainstream:
  1. Smartsheet Sales Pipeline for Google Apps
  2. Smartsheet Project Management for Google Apps
Emerging Technology:
  1. Smartsheet Crowdsourcing for Google Apps
The decision to start with the Project Management and Sales Pipeline applications was based on the belief that they would have the broadest appeal to two Google Apps customer types: Small Businesses and Large Scale Education customers.

We included Smartsheet Crowdsourcing as a test of an entirely unique product that pushes an emerging trend.

The Results

Google Apps Marketplace has performed very well across several of Smartsheets key performance indicators.

Strong Leads - the percentage of signups that accrue a statistically significant quantity of behavioral actions within the application. A strong lead is highly correlated with an eventual paying customer.
Convert to Paid - the percentage of total leads that eventually become paying customers.
Average MRR - Monthly Recurring Revenue is the average monthly spend of the leads that become paying customers.


The statistics are fantastic, and have improved the profitability of our customer acquisition programs significantly. Today, we get "free" leads generated by SEO, PR and buzz (Non-Paid). These are the Holy Grail source of profitable customers. We add $2,160 a month in recurring revenue for every 1,000 leads that come in via non-paid channels. At $1,740 a month per 1,000 leads, Google Apps Marketplace is also a very profitable channel that brings up the overall averages (subtract the 20% Google is planning to charge for Apps customers).

None of the statistics above matter without lead volume to power them. Thats where the Google Apps Marketplace really makes these numbers sing. Weve seen a very meaningful increase in high quality, non-paid lead flow directly attributable to Google Apps customers.


Our customers cite Smartsheets tight integration with Googles Data APIs as a key factor in their decision to purchase. A common theme emerging in the feedback is reflected in this comment from a manufacturing company president: "Smartsheet is making the Docs component of Google Apps more useful to our team."

Moving Forward

Customer requests for features and enhancements to our Apps integration have already started pouring in. They are great guideposts toward attracting a larger percentage of these great Apps users.

The Google Apps Marketplace is a rich source of customers, so staying above the noise as it attracts more ISVs will be a priority. Were confident we can continue refining our product and services to deliver a superior solution. And, well count on the Google team to value customer success and application utility as primary criteria for rating and ranking the vendor directories.

Read more »

Introducing JavaScript Support for the Drive API

Did you know you can write a complete Google Drive App with JavaScript that runs completely in the web browser? You can! Your browser-based application, including Chrome extensions, can take advantage of our client library, or just use CORS requests to the API.

Your app can support all the functionality of the Drive API, including uploading files, downloading files, tracking changes, listing files and managing revisions. Also you can take advantage of our user interface components that make opening and sharing files easy.

We are really keen to offer first-class support to browser-based applications, so we have added JavaScript snippets to all our API reference documentation. Please let us know how we are doing by posting to Stack Overflow.

Want to try it out? Check out our Javascript Quickstart Guide, which helps you get your application up and running in five minutes or so.

Ali Afshar profile | twitter

Tech Lead, Google Drive Developer Relations. As an eternal open source advocate, he contributes to a number of open source applications, and is the author of the PIDA Python IDE. Once an intensive care physician, he has a special interest in all aspects of technology for healthcare

Read more »

Documents List API Best Practices Sharing Multiple Documents Using Collections

Google Docs supports sharing collections and their contents with others. This allows multiple Google Docs resources to be shared at once, and for additional resources added to the collection later to be automatically shared.

Class.io, an EDU application on the Google Apps Marketplace, uses this technique. When a professor creates a new course, the application automatically creates a Google Docs collection for that course and shares it with all the students. This gives the students and professor a single place to go in Google Docs to access and manage all of their course files.

A collection is a Google Docs resource that contains other resources, typically behaving like a folder on a file system.

A collection resource is created by making an HTTP POST to the feed link with the category element’s term set to http://schemas.google.com/docs/2007#folder, for example:

<?xml version=1.0 encoding=UTF-8?>
<entry xmlns="http://www.w3.org/2005/Atom">
<category scheme="http://schemas.google.com/g/2005#kind"
term="http://schemas.google.com/docs/2007#folder"/>
<title>Example Collection</title>
</entry>

To achieve the same thing using the Python client library, use the following code:

from gdata.docs.data import Resource

collection = Resource(folder)
collection.title.text = Example Collection

# client is an Authorized client
collection = client.create_resource(entry)

The new collection returned has a content element indicating the URL to use to add new resources to the collection. Resources are added by making HTTP POST requests to this URL.

<content 
src="https://docs.google.com/feeds/default/private/full/folder%3A134acd/contents"
type="application/atom+xml;type=feed" />

This process is simplified in the client libraries. For example, in the Python client library, resources can be added to the new collection by passing the collection into the create_resource method for creating resources, or the move_resource method for moving an existing resource into the collection, like so:

# Create a new resource of document type in the collection
new_resource = Resource(type=document, title=New Document)
client.create_resource(new_resource, collection=collection)

# Move an existing resource
client.move_resource(existing_resource, collection=collection)

Once resources have been added to the collection, the collection can be shared using ACL entries. For example, to add the user user@example.com as a writer to the collection and every resource in the collection, the client creates and adds the ACL entry like so:

from gdata.acl.data import AclScope, AclRole
from gdata.docs.data import AclEntry

acl = AclEntry(
scope = AclScope(value=user@example.com, type=user),
role = AclRole(value=writer)
)

client.add_acl_entry(collection, acl)

The collection and its contents are now shared, and this can be verified in the Google Docs user interface:

Note: if the application is adding more than one ACL entry, it is recommended to use batching to combine multiple ACL entries into a single request. For more information on this best practice, see the latest blog post on the topic.

The examples shown here are using the raw protocol or the Python client library. The Java client library also supports managing and sharing collections.

For more information on how to use collections, see the Google Documents List API documentation. You can also find assistance in the Google Documents List API forum.



Ali Afshar profile | twitter

Ali is a Developer Programs engineer at Google, working on Google Docs and the Shopping APIs which help shopping-based applications upload and search shopping content. As an eternal open source advocate, he contributes to a number of open source applications, and is the author of the PIDA Python IDE. Once an intensive care physician, he has a special interest in all aspects of technology for healthcare.

Read more »

Monday, March 9, 2015

How about inline slideshow with a nice pop up gallery

A simple thing was kinda blowing my mind lately. Theres a lot of fancy galleries out there. Jquery and others, where Highslide happens to remain one of the best. But as I went through all of them and being more or less impressed, on none of "XY most best wow galleries" have I noticed 1 to satisfy my ... kind of a simple need.

What I (my client) wanted was a gallery that is inline as slideshow (with custom effects) and then as you click on the image, it enlarges into more-or-less full-screen or something like it.

Now amazingly I havent found any to be complete like that. Either theyre inline excellent slideshows without "popup-zoomin", or theyre amazing galleries that work from thumbnails (meaning static photos in the page). No fancy-wow-ough-yeah gallery covers the thing as:

1. inline slideshow (not thumbnails)
AND 2. pop-up (zoom-in or whatever) gallery (that has the controls of forward, backward,... and effects,...).

So after a month (or three months?), a combination of 2 scripts seems to somehow provide the best option:

1. Jquery cycle
2. prettyPhoto

With 1st, you put in images in 1 div and cycle through them with several effects. Nice, simple to plug in.

< div id="PhotosScrolling" >
< img1... />
< img2... />
< img3... />
< /div >

With 2nd, you just need to put some links over those imgs, so the final html looks like this:


< div id="PhotosScrolling" >
< a href="BigImage1" rel="ImageGalleryName" > < img1... /> < /a>
< a href="BigImage2" rel="ImageGalleryName" > < img2... /> < /a>
< a href="BigImage3" rel="ImageGalleryName" > < img3... /> < /a>
< /div>

Add the script calls with options. Example is as great as the great touristic destination itself :-).

What I love about these 2 scripts is their simplicity and css dependency. You can easily implement it on any database logic and need not think about much else.

Still wondering though, did I miss any script that does both jobs and can be implemented even easier?
Read more »

Automatically Generate Maps and Directions with Google Apps Script

Following up on our recent post about the new Doc List capability in Google Apps Script, we thought we’d take a moment to look a little more closely at another new feature in Apps Script - integration with Google Maps. Google Maps has had an API for quite some time, but now we’ve made it very easy to generate customized maps and driving directions straight from a script.


A mail merge is often used to automate some of the drudgery involved in sending invitations to a large number of people. With the new Apps Script Maps Service you can easily add a map image to the email, and even add a marker showing the event location.


While that’s nice, it’s hardly a time saver - why write code to generate the same image repeatedly? A much more useful feature is generating a custom map for each guest, along with personalized driving directions. We’ve made a spreadsheet template that includes just such a script - it’s available here.


Let’s look at a short code snippet that illustrates the calls required to generate a map image and add a marker at the start and end addresses:


function getMap (start, end) {

// Generate personalized static map.

var directions = Maps.newDirectionFinder()

.setOrigin(start)

.setDestination(end)

.getDirections();

var map = Maps.newStaticMap().setSize(500, 350);

map.setMarkerStyle(Maps.StaticMap.MarkerSize.MID,
"red"
, null);

map.addMarker(start);

map.addMarker(end);

return map.getMapUrl()

}


Running the function with start and end set to Google, San Francisco and Google, Mountain View, we get a link to the following image:





Along with generating maps images, the Maps feature can also find directions, retrieve elevation data and even perform some geocoding operations. Please note that any data returns by these APIs should not be used without displaying an associated map image - see the Google Maps API Terms of Service for more details.


Posted by Evin Levey, Google Apps Script Product Manager

Read more »

Is agile suitable for all projects

At some point in your agile journey you begin to ask and/or hear this question: "Is agile suitable for all projects?"

Here are some of the responses Ive heard from both those who are still learning about agile and those who have a lot of agile experience:
  • Agile isnt necessary when you have a known problem and a known solution.
  • Agile doesnt work in regulated environments.
  • Agile doesnt work in government.
  • Agile cant work in a large enterprise.
  • etc.

In my opinion and experience all of these answers are borne out of legitimate concerns but none of these responses are valid. Let me explain why.

One of the significant differences between traditional projects and agile projects are the short feedback loops. These short feedback loops allow teams to validate assumptions sooner, identify and deal with risks and issues sooner, find and correct defects sooner, and deliver a solution sooner. Agile will be implemented differently based on the project types identified in the responses above, but I believe that all projects will benefit from agiles short feedback loops. To say otherwise assumes that we always get it right the first time - even in the uncommon situation where the solution is 100% known, we get everything right the first time about 0% of the time. Agile helps us discover that sooner so that we can correct our mistakes.

Additionally, any project can benefit from increased trust amongst team members, increased trust between teams and customers, increased trust between teams and management, and increased trust of project status.

In my opinion and experience, the only question you need to ask has nothing to do with the type of project, the type of problem, or the type of solution. Instead, here is the key question:
Does the team want to use agile and have the support to do it?
If the answer is yes, then it can work. If the answer is no, it is not likely to work.

P.S. Here are some examples of agile being used in projects and organizations where "agile wont work":

Agile in a regulated environment.
Abbot Labs experience report - Development of a nucleic acid purification platform and companion real-time analyzer
Agile in a Regulated Environment - Linkedin Group

Agile in government.
Public sector case study - Social Security domain, software to support change in legislation.
Manitoba Parks Reservation Service - Agile case study as told by Terry Bunio.

Agile in a large enterprise
The agile experience at John Deeres Intelligent Solutions Group.- presentation by Chad Holdorf at Much Ado About Agile VI - Vancouver 2011.
Plus an article talking about the John Deere agile experience. "I figure if John Deere can test working software every two weeks on a tractor in a field, then Agile will work anywhere."

Agile with a known solution and a known problem
I recently completed a project with a known solution and a known problem - converting a VB6 application to dotnet "as is". We used agile and the project was very successful.

Agile outside of software
Wikispeed - Joe Justice and his volunteer team designed a 100+ MPG car using agile techniques."We can swap out an engine in the time it takes to change tires".

Want to receive future blog posts in your inbox? Enter your email address here.
Read more »

Wednesday, March 4, 2015

August Currently!

Im going to make this post short and sweet!  Its a new month, which means its time for Farleys currently!


Ive been working all day (literally all day!) on re-vamping my word wall, and I still have two Dolch lists to go.  Its amazing how much time we spend on making things just right for our classrooms!
Read more »

Tuesday, March 3, 2015

Effective corporate IT training Bursting the e learning bubble

Link to article (By Roland Van Liew)
"In the more than half a decade of e-learning availability, one thing has become clear: the Internet is not a good platform for teaching complex technical topics. "
"But with over half a decade of e-learning availability, emerging statistics and studies conducted by a variety of institutions have yielded some interesting results:
  • 57% of respondents to one study described their e-learning experience as "frustrating, lonely, and stressful;"
  • The best e-learning environment (which includes audio and visual techniques) yields only about 40% retention of the material covered;
  • Humans, by nature, learn best through social interaction - a critical element removed by e-learning;
  • Much of e-learning course material is simply live lecture material posted to the Internet, resulting in a poor learning experience in which crucial context is removed because there is no human instructor to impart it."

"As the overall online experience becomes richer and more varied with each technological advance, the debate over live training versus e-learning will continue. But at the end of the day, IT training is all about developing competency, not just completing a course or achieving certification. For any IT training participant to achieve true competency and confidence in the skills they are learning, they must take part in a program that provides extensive, hands-on lab exercises where they can practice and hone their newly-developed skills, enabling them to put these skills to immediate use upon return to the workplace. Until the day arrives that e-learning provides an equally rich, personally-interactive experience, the ability to gain true competence in IT training will remain firmly entrenched in the classroom."

Read more »

Was The DNA of a 21st Century Educator Plagiarised in China

Source
This Article in other formats: 
  • Scribd
  • SlideShare
  • PDF 

DISCOVERY

The last time I looked in a mirror, I certainly didnt look like that! However, the DNA slide looks familiar. Oops, it looks like a slide from my DNA of a 21st Century Educator (Version 2) presentation. Awesome! Someone in China has translated my slide, and is sharing it with a group of local and international educators attending a conference (or seminar) exploring the future of education at the Luoyang International School (17 Oct, 2012). Here is another picture that reveals a bit more about this event:


Source


So, whats the problem here?



THE STORY

Yesterday evening (9 Jan, 2013), I got an e-mail from my Norwegian (online) buddy Stian Håklev (Co-founder of Peer2Peer University) informing me...

 Important Links:
  • Chinese Translation of my presentation
  • Report about the conference (Luoyang International School)
  • Company: General Plan
(Should the links above be deleted for some reason, please click here to view the presentation and report saved to Dropbox)

    WOW! Thanks, Stian for sharing this Pretty Hilarious news with a CSI kind of reporting of the event. Initially, I thought this whole thing was really cool, and I was kind of thrilled that someone would actually go to such lengths to reuse and translate slides that originated from me (WOW, the slides must be really good!). 

    I have heard and read that translated plagiarism is a BIG BIG BIG PROBLEM in China, but not in my wildest dreams did I anticipate it would happen to me. Certainly, not like this.

    Lets break down the case.


    THE CASE

    I first gave the DNA of a 21st Century Educator talk during the Annual Teaching and Learning Seminar 2012" at USM on the 26 June, 2012. However, the slides that have been reused and translated are from the second version, which was published 19 July (2012) on SlidesShare. Here is my original version:


    DNA of a 21st Century Educator (v2) from Zaid Alsagoff

    Since, the Chinese version was presented on the 17 October (2012), we can presume based on existing evidence that I am more likely the author. 

    Also, based on the time between both these events (19 July - 17 October), Mr. Copytran (Code name for the author(s) of the Chinese version) had more than sufficient time to translate the presentation slides to Chinese.

    The English version has 81 slides compared to 28 slides for the Chinese version. Interestingly, 26 (out of 28) or 92.85% of the Chinese version seems to be visually similar compared to the English version. However, we have to give credit to some critical thinking taking place here, as the 26 slides have been filtered (from 81), shuffled and organized a bit differently compared to the English version. 

    Moreover, unless Mr. Copytran used only Google translate (or outsourced the translation), he/she/it/they must have spent considerable time to translate these 26 slides, which I assume requires masterful language ability. Though, since my Chinese is practically zero, I would need some expert to verify this.

    Also, we have to give credit to Mr. Copytran for showing amazing ability to manipulate, redesign and delete important aspects of the 26 slides that will be revealed one-by-one next.


    SLIDE-BY-SLIDE


    Here we go:

    Yes, the DNA word has moved from one side to the other (Originality?). Also, the Creative Commons (CC BY-NC-SA 3.0) license has simply vanished from all 26 slides. Also, you notice that the IMU logo(s) are no longer there. 

    Interestingly (red arrow), the General Plan logo appears for the first time. As we explore these slides, you will notice that this logo will appear, disappear and even move during its journey over 26 slides. I assume the General Plan logo is suffering from some kind of appearance disorder (perhaps feeling guilty, or perhaps wanting to be associated with important slides and points).  


    You notice the logo has repositioned itself on slide 2, as if it is the solution to the question (Say no more!). Besides the translations, not much more to say. Awesome slide, though!


    I cant believe that the LIC Facebook poll slide, identifying what (a few) members of this group think are the ingredients of a 21st Century educator was translated. Mr. Copytran please explain; "Why did you include this one?"


     Kudos! I mean, I just reused a stunning mind map explaining Howard Gardners 5 Minds for the Future. Mr. Copytran on the other hand, must have spent considerable time translating and manipulating the image. Also, he didnt delete the links (URLs) to the relevant resources, which is good. Though, if he did, surely someone would question Mr. Copytran how he managed to visualize the mind map so nicely.

     Same old story (as slide 4)!

     Same old story (as slide 4)!

     Same old story (as slide 4)!

     Still wondering why Route 21 was deleted from the Chinese version? No clues at the moment!


    Oops, I mashed up that graphic in 2009 (Evidence) based on Lucifer Chus wise words during his Keynote at the 2nd International Conference of e-Learning hosted by UiTM (ICEL 2009). So, Mr. Copytran, how did you develop this graphic? You certainly dont have any reference links to support your case, if you didnt develop it.


     Notice that the logo has reappeared and moved strategically beyond my comprehension to a new location. No doubt, my original slide looks better, right?



    Jane Hart, congratulations for getting your slide translated!

     

    WOW! Historic moment! Could this be a break through?

    Oops, back to basics. Steve Wheeler, congratulations for getting your slide translated!

    Now, the logo appears again and has amazingly moved again, too. It is as if the logo is playing a hide-and-seek game with us. Correct me if I am wrong!


    I was really happy with this mash-up of mine, and Yes Mr. Copytran does provide a link to my blog post, so thanks for the reference. It is nice to reference our own work, but even better when others reference our own reference. What do you think?

     
    Prof. Rozhan, congrats! Now, your 3-dimensial Technogogy diagram has been translated and hopefully it will be explored further in China. 


    Mr. Copytran, not a bad translated copy of the original one. What software do you use to edit graphics? 

     Same old story! This is getting boring!

     Yes, the logo appears again, and believe it or not, it has repositioned itself again, too. Amazing!


     Back to basics!

     Thanks for the translation!

     Jackie Gerstein, congratulations! Your diagram has been translated!


    Thanks for including this slide, because this is the one that enlightened Stian Håklev to discover the rest. 


    No comment!

    This is where I draw the line. Where is your reference to my Recap? Also, why is the logo suddenly appearing again? At least this time it appears the same place as the last time.


    Of course there is much more, Mr. Copytran you still have another 55 potential slides (81 - 26 = 55) to translate. LOL!


    I just cant believe that you cant even create your own Q&A slide! Take a risk and use your imagination a bit. Come on! Is that too much to ask for?



    Is this a case of Plagiarism? Please share your views.



    MY CASE VERDICT

    Seriously, Mr. Copytran you must have spent hours translating and manipulating this presentation to meet your desired goals. We should be celebrating your effort for all your hard work? However, that might not be the case, especially if this story goes viral in a negative sense. Maybe, in your mind you didnt do anything wrong, and just maybe you had every right to do what you did.

    I am actually not bothered by you reusing the 26 slides from my presentation (That is why I share!), but I am angry and irritated based on the observations shared above that you seem to have deliberately plagiarized some of my content, ideas and recommendations, without giving any form of recognition for it. Also, when I read the Google translated version of the conference report, my ego of any doubt vanished (like the CC license did in your slides). 

     Didnt you realize that the DNA of a 21st Century Educator (version 2) presentation has been viewed more than 31,000+ times by now? Actually, by day 3 or 4 (after publishing it on SlideShare - 19 July) it had already been viewed more than 15,000+ times (was featured as Top Presentations of the day), and cited by numerous of bloggers and educators around the world through varies social media tools (Facebook, Twitter, Google+, blog posts, etc).

    More importantly, didnt you realize that this presentation has been published under a Creative Commons license (Attribution - NonCommercial - ShareAlike or CC BY-NC-SA) empowering anyone for free to reuse and remix for non-commercial reasons with attribution. Most of my learning articles, presentations and artifacts since 2008 have been published with such a license, and hundreds of educators around the world have been reusing or remixing them as they like (with attribution), and that is one major reason why I love to share.

    However, when a person representing a corporate e-Learning company (General Plan) literally takes my presentation (or 26 slides from it), and presents it at a conference (translated version) without giving any credit (at least on the slides). And then has the cheekiness to put his company logo, and even delete the Creative Commons license from all the 26 slides translated, is something that I find really unacceptable.

    It might be flattery (to some), but it is also totally against any principles of professionalism (that I know of).

    The best way (in my opinion) to deal with people with such integrity and professionalism is to expose them to the world and remind others that doing such things are not worth the risk.
     
    I can go on, but then again perhaps Mr. Copytran did no wrong. 

    In the 21st century you can easily copy or plagiarize, but you can easily get caught, too. And you certainly cant hide online for that long! That is for sure! 

    Why potentially waste your career and credibility just for one presentation?

    What were you thinking?
    Read more »

    Mega Giveaway! Today only!!!

    Okay, I admit it... I have been slightly neglecting my blog, but not because I havent been doing work!  Ive been working hard to prep for the new school year and for the Phonics, Vocabulary, and Comprehension PD that Katie (over at Kdots Learning Spot) and I have been working on!

    Well of course, this big TPT sale coming up tomorrow has inspired me to post a few of the things Ive been working on!  And of course, to repay all of you for continuing to follow me even though Im posting less frequently... I think Ill give away ALL OF MY NEW ITEMS today! :)


    And of course, if you dont win, all of these products will be on super sale tomorrow and Monday!

    (Props to Krista from The Creative Chalkboard for the amazing sign!!)

    Now... lets see what you can win!

    Im going to start with the project that took me the most time.  I made videos that are about 5 minutes long each for each letter of the alphabet!  And even though the video itself is only about 5 minutes long, it took WAY long than that to make!  I probably spent about one hour on each video with all of the editing I did... but Im SO happy with how they came out!  I have the letters A & B up for free so please download those and let me know what you think!!!  Click the picture to check them all out (and I promise I will upload the rest of the letters by the end of the day tomorrow!


    You can check out one of the videos here:



    I also created visual word walls to go along with some of the fry words.  I still have to work on the first 100 words and the fifth 100 words, so expect to see those soon... but in the meantime, I have finished the second 100 words, third 100 words, and fourth 100 words!




    I also worked on phonemic awareness posters with multiple visuals for each of the sounds:


    I also made a fun center game to practice sight words and CVC words:




    Then, I made these adorable math visual vocabulary cards!



    I also made a pack of Proverb, Sayings and Phrases to go along with the Core Knowledge Scope and Sequence for Kindergarten:


    Phew!!!!! Thats $64 worth of items!!!

    So are you ready to win all of that!?

    a Rafflecopter giveaway



    This raffle ends today at 8pm!



    Read more »