Skip to content

Software Development Blogs: Programming, Software Testing, Agile Project Management

Methods & Tools

Subscribe to Methods & Tools
if you are not afraid to read more than one page to be a smarter software developer, software tester or project manager!

Google Code Blog
Syndicate content
News and insights on Google platforms, tools and eventsewoodhttp://www.blogger.com/profile/12341551220176883769noreply@blogger.comBlogger1384125
Updated: 15 hours 7 min ago

Get your app in the Google index - and be ready for the future of Search

Fri, 09/19/2014 - 19:15
Last October we worked with a small number of developers to launch App Indexing, the ability for Google to index apps just like websites. In June, we opened App Indexing to all Android developers, giving you the ability to add app deep links to search results, helping users find your content and re-engage with your app after they’ve installed it.

Today, we’d like to highlight two videos to help you set up App Indexing. Check them out below. You’re only a few steps away from driving re-engagement and unlocking new avenues of discovery for your app.

1998 all over again

In 1998, Google set out to index the web and make content easily accessible and discoverable.

Today mobile app adoption is growing rapidly. Similar to the early days of the internet, it can be frustrating for users to search through their device to find what they need, since the content within apps typically exists in silos. By implementing App Indexing, you can re-engage your users from search results.

Consider the scenario of users looking for details about a great place for some Spanish food. Users might already have a great mobile app for restaurant details installed, but they typically still rely on a search engine to pull up information about local places to eat. Wouldn’t it be great if they could jump straight into your app from those search results? App Indexing is all about connecting users with the best content, whether it’s in-app or on the web. You can add it to your app very quickly -- simply add deep linking to your app, and then verify your website with Google. To enable re-engagement with your users, you can generate query autocompletions in the Google app using the App Indexing API.

Learn More

To learn more about App Indexing, and how you can use the API for your apps, check out this DevByte from Lawrence Chang, Senior Product Manager for App Indexing at Google.
For an in-depth look at App Indexing, demonstrating the technology, and the opportunities available with it, watch this session from Google I/O 2014: “The Future of Apps and Search.”
We’re at the beginning of a new wave of how people find and interact with content, and it often starts with search. Is your app in the index? If not, follow the steps in this post, and get ready for the future of Apps and Search!

Posted by Laurence Moroney

Laurence is a Developer Advocate at Google, working on Google Play services for Android. When not having fun with this, he's also a best-selling author of several Young Adult novels and dozens of books on computer programming.
Categories: Programming

gcloud-node - a Google Cloud Platform Client Library for Node.js

Wed, 09/17/2014 - 21:18
This post originally appeared on the Google Cloud Platform blog 

Today we are announcing a new category of client libraries that has been built specifically for Google Cloud Platform. The very first library, gcloud-node, is idiomatic and intuitive for Node.js developers. With today’s release, you can begin integrating Cloud Datastore and Cloud Storage into your Node.js applications, with more Cloud Platform APIs and programming languages planned. The easiest way to get started is by installing the gcloud package using npm:
$ npm install gcloud
With gcloud installed, your Node.js code is simpler to write, easier to read, and cleaner to integrate with your existing Node.js codebase. Take a look at the code required to retrieve entities from Datastore:
var gcloud = require('gcloud');

var dataset = new gcloud.datastore.Dataset({
projectId: 'my-project',
keyFilename: '/path/to/keyfile.json' // Details at
//https://github.com/googlecloudplatform/gcloud-node#README
});

dataset.get(dataset.key('Product', 123), function(err, entity) {
console.log(err, entity);
});
gcloud is open-sourced on Github; check out the code, file issues and contribute a PR - contributors are welcome. Got questions? Post them on StackOverflow with the [gcloud-node] tag. Learn more about the Client Library for Node.js at http://googlecloudplatform.github.io/gcloud-node/ and try gcloud-node today.

Posted by JJ Geewax, Software Engineer

Node.js is a trademark of Joyent, Inc. and npm is a trademark of npm, Inc.
Categories: Programming

Allowing end users to install your app from Google Apps Marketplace

Wed, 09/17/2014 - 17:32
by Chris Han, Product Manager Google Apps Marketplace
The Google Apps Marketplace brings together hundreds of third-party applications that integrate and enhance Google Apps for Work. Previously, only administrators were able to install these applications directly for people at work. Now, any Google Apps user can install these applications by logging into Google Apps, clicking the app launcher icon , clicking More, and then clicking More from Apps Marketplace. By default, any Google Apps user can install apps from the Google Apps Marketplace—excluding K-12 EDU domains that are defaulted off. For more information, please see our Help Center
If you have an app in the Google Apps Marketplace utilizing oAuth 2.0, you can follow the simple steps below to enable individual end users to install your app. If you’re not yet using oAuth 2.0, instructions to migrate are here.
1. Navigate to your Google Developer Console.

2. Select your Google Apps Marketplace project.3. Click APIs under the APIs & auth section.4. Click the gear icon next to Google Apps Marketplace SDK.5. Check Allow Individual Install.
6. Click Save changes.
Categories: Programming

An important announcement for iOS developers using the GooglePlus SDK

Tue, 09/16/2014 - 21:10
Last week, Apple updated their app submission policy requiring that resource bundles not include binaries. In order for your apps to meet these new requirements, you must either replace your existing Google+ iOS SDK with the updated 1.7.1 Google+ iOS SDK that has the files removed or remove the following files from the GooglePlus bundle:

  • GooglePlus.bundle/GPPSignIn3PResources
  • GooglePlus.bundle/GPPCommonSharedResources.bundle/GPPCommonSharedResources
  • GooglePlus.bundle/GPPShareboxSharedResources.bundle/GPPShareboxSharedResources 

Please update your app immediately, or your app will be rejected by Apple. Because the files were only used for versioning, the change will have no impact on your app's functionality.

Posted by Mohamed Zoweil, Software Engineer, Google
Categories: Programming

Docker images for Dart now available

Tue, 09/16/2014 - 16:25
By Søren Gjesse, Software Engineer on Dart

Developers increasingly want to use the same language and business logic on the client and the server to reduce risk and complexity. To help developers easily build and deploy end-to-end Dart apps, we are happy to announce ready-to-use Docker images for Dart. This expands our Docker usage further beyond the recently announced Docker support in Google App Engine. There are now three Dart-related images on hub.docker.com for you to use: dart, dart-runtime and dart-hello, which uses the same naming scheme as the corresponding Node, Python and Go images already offered.

The image google/dart adds the Dart SDK to google/debian Debian wheezy image. Running Dart in a container is now as simple as this:

  $ docker run -i -t google/dart /usr/bin/dart --version

The image google/dart-runtime inherits from google/dart, and provides a convenient way to run a Dart server application using a one line Dockerfile. To inherit from google/dart-runtime, your server application requires the following layout:

  • has a the pubspec.yaml and pubspec.lock files listing its dependencies.
  • has a file bin/server.dart as the entrypoint script.
  • listens on port 8080

With this layout and a Dockerfile with the following content:

FROM google/dart-runtime

You can run your app in a container as simple as this:

  $ docker build -t my-app .
  $ docker run -d -p 8080:8080 my-app

The last image google/dart-hello is a sample Dart server application, that inherits from dart/runtime. Here is an example of how to run the sample:

  $ docker run -d -p 8080:8080 google/dart-hello

Depending on your local Docker installation the address of the server differs. If you are using boot2docker with the default configuration you can talk to the Dart server in the docker container on http://192.168.59.103:8080:

  $ curl http://192.168.59.103:8080/version

You can choose specific version tags, such as 1.6.0 (recommended), or choose the ‘latest’ tag for the latest stable version. Here is an example of running Dart 1.6 with Docker:

  $ docker run -i -t google/dart:1.6.0 /usr/bin/dart --version

If you haven't already, go and install boot2docker and start building you Dart server application using Docker images. Pushing these images to you server will simplify deployment and ensure you are running the same code on your server as you have been testing locally.

Posted by Mano Marks, Google Developer Platform Team
Categories: Programming

Announcing $100,000 for Startups on Google Cloud Platform

Fri, 09/12/2014 - 16:12
This post originally appeared on the Google Cloud Platform blog 
by Julie Pearl, Director, Developer Relations

Today at the Google for Entrepreneurs Global Partner Summit, Urs Hölzle, Senior Vice President, Technical Infrastructure & Google Fellow announced Google Cloud Platform for Startups. This new program will help eligible early-stage startups take advantage of the cloud and get resources to quickly launch and scale their idea by receiving $100,000 in Cloud Platform credit, 24/7 support, and access to our technical solutions team.

This offer is available to startups around the world through top incubators, accelerators and investors. We are currently working with over 50 global partners to provide this offer to startups who have less than $5 million dollars in funding and have less than $500,000 in annual revenue. In addition, we will continue to add more partners over time.

This offer supports our core Google Cloud Platform philosophy: we want developers to focus on code; not worry about managing infrastructure. Starting today, startups can take advantage of this offer and begin using the same infrastructure platform we use at Google.

Thousands of startups have built successful applications on Google Cloud Platform and those applications have grown to serve tens of millions of users. It has been amazing to watch Snapchat send over 700 million photos and videos a day and Khan Academy teach millions of students. Another example, Headspace, is helping millions of people keep their minds healthier and happier using Cloud Platform for Startups. We look forward to helping the next generation of startups launch great products.

For more information on Google Cloud Platform for Startups, visit http://cloud.google.com/startups.

Posted by Katie Miller, Google Developer Platform Team
Categories: Programming

Optimizing for Bandwidth on Apache and Nginx

Thu, 09/04/2014 - 16:27
This post originally appeared on Webmaster Central
by Jeff Kaufman, Make the Web Fast


Webmaster level: advancedEveryone wants to use less bandwidth: hosts want lower bills, mobile users want to stay under their limits, and no one wants to wait for unnecessary bytes. The web is full of opportunities to save bandwidth: pages served without gzip, stylesheets and JavaScript served unminified, and unoptimized images, just to name a few.So why isn't the web already optimized for bandwidth? If these savings are good for everyone then why haven't they been fixed yet? Mostly it's just been too much hassle. Web designers are encouraged to "save for web" when exporting their artwork, but they don't always remember.  JavaScript programmers don't like working with minified code because it makes debugging harder. You can set up a custom pipeline that makes sure each of these optimizations is applied to your site every time as part of your development or deployment process, but that's a lot of work.

An easy solution for web users is to use an optimizing proxy, like Chrome's. When users opt into this service their HTTP traffic goes via Google's proxy, which optimizes their page loads and cuts bandwidth usage by 50%.  While this is great for these users, it's limited to people using Chrome who turn the feature on and it can't optimize HTTPS traffic.

With Optimize for Bandwidth, the PageSpeed team is bringing this same technology to webmasters so that everyone can benefit: users of other browsers, secure sites, desktop users, and site owners who want to bring down their outbound traffic bills. Just install the PageSpeed module on your Apache or Nginx server [1], turn on Optimize for Bandwidth in your configuration, and PageSpeed will do the rest.

If you later decide you're interested in PageSpeed's more advanced optimizations, from cache extension and inlining to the more aggressive image lazyloading and defer JavaScript, it's just a matter of enabling them in your PageSpeed configuration.

Learn more about installing PageSpeed or enabling Optimize for Bandwidth.
[1] If you're using a different web server, consider running PageSpeed on an Apache or Nginx proxy.  And it's all open source, with porting efforts underway for IIS, ATS, and others.

Posted by Mano Marks, Google Developer Platform Team
Categories: Programming

Runtastic on Android Wear

Tue, 09/02/2014 - 16:00

By Austin Robison, Product Manager, Android Wear




Fitness apps make  great additions to Android Wear. Let’s take a look at one of our favorites, Runtastic. Runtastic is a fitness app that lets you track your walks, runs, bike rides and more. With Runtastic on Android Wear, you'll see your time, distance, and calories burned at a glance on your wrist. You can also start, stop and pause your activity by touch. Tuck your phone away in a pocket or backpack and do everything on your watch.

It's challenging to build user experiences that really come alive on Android Wear because it's such a new type of device. Runtastic does a great job of showing the right information and providing just the right controls on the screen on your wrist. Let's dig into some of the Android Wear platform features that Runtastic uses to make such a great user experience.Voice ActionsAndroid Wear enables developers to launch their activities with voice. Runtastic responds to “Ok Google, start running” by beginning to track a session and displaying a card with your total time. This means you can start exercising without needing to pull your phone out of a pocket or arm strap. Android Wear is all about bringing you useful information just when you need it and enabling users to quickly and easily take action.

runtastic_01.png

Responding to platform voice intents on Wear is as simple as declaring a standard intent filter to start an activity.  For example, to launch your activity for the “start running” voice action, add the following to your activity’s entry in your AndroidManifest.xml:

<intent-filter>    <action android:name="vnd.google.fitness.TRACK"/>    <category android:name="android.intent.category.DEFAULT"/>    <data android:mimeType="vnd.google.fitness.activity/running"/></intent-filter>

Custom CardsOnce a user has started a run, Runtastic inserts a card in the stream as an ongoing notification to ensure it is ranked near the top of the stream during the activity. This card uses the setDisplayIntent() function to display custom UI. It provides quick, glanceable information, showing your activity time. Cool!

When the user swipes to the right of the card to expose its actions, we see some quick and easy to understand options; following the Android Wear style guidelines means that Runtastic has a familiar UI and feels like a natural extension of the watch. There are actions for pausing, stopping, and an action to see more details on the run.  This action launches a full screen Activity where Runtastic draws a completely custom layout.



You’ll notice this data updates live; Runtastic makes use of the Wearable Data Layer API in Google Play Services to synchronize data between the phone and the watch. It's an easy to use API for syncing data between your devices.

Background ServicesWhen a user finishes their run, Runtastic presents them with a special summary card that appears only on the watch. In this case, the notification is generated directly on the watch by a Service. This Service uses the Data Layer to receive information about the completed activity from the phone to the watch, including an image of a map of the user’s run generated through the Google Maps API.

To show that information, the app uses Android Wear’s NotificationManager, which functions just like the NotificationManager on a phone or tablet, except that instead of creating notifications in the pull-down shade, they appear in the stream.



Runtastic's implementation on Android Wear is a perfect example of how to take advantage of wearables to make something truly useful for users. For more information on these and other great platform features, please see the developer documentation.

For more inspiring Android Wear user experiences, check out this collection on the Play Store!

Posted by Mano Marks, Google Developer Platform Team
Categories: Programming

The Web Search API is Retiring

Fri, 08/29/2014 - 13:00
Posted by Dan Ciruli, Product Manager


On November 1, 2010, we announced the deprecation of the Web Search API. As per our policy at the time, we supported the API for a three year period (and beyond), but as all things come to an end, so has its deprecation window.

We are now announcing the turndown of the Web Search API. You may wish to look at our Custom Search API (note: it has a free quota of 100 queries per day).
The service will cease operations on September 29th, 2014.
Categories: Programming

How to move your files to Google Drive

Thu, 08/21/2014 - 17:00
Posted by Chuck Coulson, Drive Technology Partnerships, Google

Google Drive for Work is a new premium offering for businesses that includes unlimited storage, advanced audit reporting and new security controls and features, such as encryption at rest.

If you're getting ready to move your company to Drive, one of the first things on your mind is how to migrate all your existing files with as little hassle as possible. It's easy to migrate your files by uploading them directly to Drive or using the Drive Sync client. But, what if you have files stored elsewhere that you want to consolidate? Or what if you want to migrate multiple users at once? Many independent software vendors (ISVs) have built solutions to help organizations migrate their files from different File Sync and Share (FSS) solutions, local hard drives and other data sources. Here are some of the options available for you to use:
  • Cloud Migrator, by Cloud Technology Solutions, migrates user accounts and files to Google Drive and other Google Apps services. (websiteblogpost)
  • Cloudsfer, by Tzunami, transfers files from Box, Dropbox and Microsoft OneDrive to Google Drive. (website)
  • Migrator for Google Apps, by Backupify, migrates and consolidates personal Google Drive or other Google Apps for Business accounts into a single domain. (websiteblogpost)
  • Mover migrates data from 23 cloud services providers, web services, and databases into Google Drive. (websiteblogpost)
  • Nava Certus, by LinkGard, provides a migration and synchronization solution for on-premise and cloud-based storage platforms, including Dropbox, Microsoft OneDrive, Amazon S3, as well as local file systems. (website,blogpost)
  • SkySync, by Portal Architects, integrates existing on-site storage systems as well as other cloud storage providers to Google Drive. (websiteblogpost)
These are just a few companies that offer migration solutions. Please visit the Google Apps Marketplace for a complete listing of tools and offerings that add value to the Google Apps platform.
Categories: Programming

Office Hours for Google’s Udacity MOOCs

Mon, 08/18/2014 - 16:39
By Peter Lubbers, a Program Manager in charge of Google’s Scalable Developer Programs, which include MOOC developer training. Peter is the author of "Pro HTML5 Programming" (Apress) and, yes, his car's license plate is HTML5!
At Google I/O, we launched four new Udacity MOOCs, helping developers learn how to work with Android, Web, UX Design, and Cloud technology. We’re humbled that almost 100,000 students signed up for these new courses since then. Over the next two weeks, we’ll be hosting on-air office hours to help out students who are working through some of these classes. Ask your questions via the Moderator links below, and the Google Experts will answer them live. Please join us if you are taking the class, or just interested in the answers.
Screen Shot 2014-08-18 at 8.06.30 AM.png

Class: Web Performance Optimization — Critical Rendering Path
Class: Android Fundamentals
Class: Building Scalable Apps with Google App Engine
You can find all of the Google Udacity MOOCs at www.udacity.com/google.


Posted by Mano Marks, Scalable Developer Advocacy Team


Categories: Programming

Google Fit Preview SDK now available

Thu, 08/07/2014 - 18:00
By Angana Ghosh, Product Manager, Google Fit

At Google I/O we announced Google Fit: an open platform for developers to more easily build fitness apps. Today we’re making a preview SDK available to developers so that you can start to build.

Google Fit provides a single set of APIs for apps and device manufacturers to store and access activity data from fitness apps and sensors on Android and other devices (like wearables, heart rate monitors or connected scales). This means that with the user’s permission, you can get access to the user’s fitness history -- enabling you to provide more interesting features in your app like personalized coaching, better insights, fitness recommendations and more.

There are three sets of APIs designed to meet specific developer needs:
  1. Sensors API provides high-level access to sensors from the device and wearables—so with one API your app can talk to sensors, whether on an Android device or a wearable. So if you’re making a running app, you could register it to receive updates from a connected heart rate monitor every 5 seconds during a user’s run and give immediate feedback to the runner on the display.
  2. Recording API allows apps to register for battery-efficient, cloud-synced background collection of fitness data. For example, a running app could ask to store user’s location so it can map the run later. Once it registers for these data types, collection is done by Fit in the background with no further work needed by the app.
  3. History API allows operations on the data like read, insert and delete. When the exerciser finishes her run, the running app can query the History API for all locations during the run and show a map.
To get started, download the updated version of Google Play services containing the Google Fit APIs for Android in the Android L Developer Preview Nexus 5 and Nexus 7 system images. Use the Android SDK Manager to download the Google Play services client labeled "Google Play services for Fit Preview". You can start developing today using local fitness history on the device — the cloud backend will be available soon. Join the Google Fit developer community on Google+ to discuss the Preview and ask questions. For additional resources and more information about Google Fit, check out the Google Fit developers site.

The preview SDK gives you the tools to start building your app. You’ll be able to launch your app later this year when we launch the full Google Fit SDK as part of Google Play services for handsets, Android Wear and also for the web. We’re excited to see what you can come up with to make fitness in a connected world better.


Join the discussion on
+Google Fit Developers
Angana Ghosh is a product manager for the Google Fit team.

Posted by Louis Gray, Googler
Categories: Programming

Upgrade now to Calendar APIv3

Thu, 07/17/2014 - 19:30
Cross-posted from the Google Apps Developers Blog

Back in 2011, we launched Calendar APIv3, which offers developers several improvements over older versions of the API, including better support for recurring events and lightweight resource representation in JSON. At that same time, we also announced that the older versions of the API – v1 and v2 – would be entering a three-year deprecation period in order to give developers time to migrate to the new version. Those three years are coming to an end, and on November 17, the v1 and v2 endpoints will be shut down. If you haven’t already done so, you should migrate your application now to APIv3 so that it continues to work after that date (and to start taking advantage of all that the new API offers!).

For additional resources, check out our Migration and Getting started guides. And if you have questions or issues, please reach out to us on StackOverflow.com, using tag #google-calendar.

By Lucia Fedorova, Calendar API Team

Lucia Fedorova is a Tech Lead of the Google Calendar API team. The team focuses on providing a great experience to Google Calendar developers and enabling new and exciting integrations.

Posted by Louis Gray, Googler
Categories: Programming

The New Roboto

Wed, 07/16/2014 - 18:00
By Christian Robertson, Android Visual Designer

Along with the Material Design guidelines we released a new version of the Roboto type family. A lot of things have changed as we tuned the font to work across more screen sizes and conditions, from watches to desktops, televisions to cars. It still keeps much of its character that made it successful for both phones and tablets, but almost every glyph has been tweaked and updated in some way.

We see Roboto as an evolving type family and plan to continue to change and update it as the system evolves. It used to be that a type family was designed once and then used without change for many years. Sometimes an updated version was released with a new name, sometimes by appending a "Neue" or "New". The old model for releasing metal typefaces doesn't make sense for an operating system that is constantly improving. As the system evolves over time, the type should evolve along with it.

The easiest way to identify the new version is to look for the R and K. They were some of the rowdier glyphs from version one and have been completely redrawn. Also check for the dots on the letter i or in the punctuation. We have rounded them out to make the types a little more friendly when you look at them closely. We also rounded out the sides of the upper case characters like O and C which makes the font feel less condensed even though it still has a high character count per line.

Some of the most significant changes are in the rhythm and spacing, especially for the caps. This isn't apparent as you look at individual glyphs, but makes for a better texture on the screen. Some of the more subtle fixes were to balance the weights between the caps and lowercase characters (the caps are slightly heavier in this version) and better correction for the distortions that occur in the obliqued italic characters.

Ultimately the purpose of a typeface is to serve the content and help people to understand it. We think that the new updates to Roboto along with the new Material Design guidelines will help it do more of just that.

Posted by Louis Gray, Googler
Categories: Programming

Noto: A CJK Font That is Complete, Beautiful and Right for Your Language and Region

Tue, 07/15/2014 - 23:00
By Xiangye Xiao, Stuart Gill, and Jungshik Shin,
Google Text and Font Team, Internationalization Engineering


Chinese, Japanese and Korean (CJK) readers represent approximately one quarter of the world’s population. Google’s mission is to organize the world’s information and make it universally accessible to all users no matter what language they use. To that end, Google, in cooperation with our partner Adobe, has released a free, high-quality Pan-CJK font family: Noto Sans CJK. These fonts are intended to provide a richer and more beautiful reading experience to the East Asian community in many OSes and software applications.


Noto Sans CJK comprehensively covers Simplified Chinese, Traditional Chinese, Japanese, and Korean in a unified font family and yet conveys the expected aesthetic preferences of each language. Noto Sans CJK is a sans serif typeface designed as an intermediate style between the modern and traditional. It is intended to be a multi-purpose digital font for user interface designs, digital content, reading on laptops, mobile devices, and electronic books. Noto Sans CJK is provided in seven weights: Thin, Light, DemiLight, Regular, Medium, Bold, and Black.


Fully supporting CJK requires tens of thousands of characters—these languages share the majority of ideographic characters, but there are also characters that are unique to only one language or to a subset of the languages. One of the primary design goals of Noto Sans CJK is that each script should retain its own distinctive look, which follows regional conventions, while remaining harmonious with the others.

Chinese ideographic characters are not only used by Simplified and Traditional Chinese, where they are called hanzi, but also by Japanese (kanji) and Korean (hanja). Although all originated from ancient Chinese forms, in each region and language they evolved independently. As a result, the same character can vary in shape across the different languages. For example, the image below shows variants of the same character (骨 - bone) designed for Simplified Chinese, Traditional Chinese, Japanese, and Korean. Look at how the inner top part and inner bottom part are different. Noto Sans CJK is designed to take these variations into account. In addition to ideographic characters, Noto Sans CJK also supports Japanese kana and Korean Hangeul—both contemporary and archaic.


Google and Adobe partnered to develop this free high-quality Pan-CJK typeface. Google will release it as Noto Sans CJK as part of Google's Noto font family. Adobe will release it as Source Han Sans as a part of Adobe's Source family. Adobe holds the copyright to the typeface design, and the fonts are released under the Apache License, version 2.0 which makes them freely available to all without restriction.

About this partnership: Google contributed significant input into project direction, helped to define requirements, provided in-country testing resources and expertise, and provided funding that made this project possible. Adobe brought strong design and technical prowess to the table, along with proven in-country type design experience, massive coordination, and automation. In addition, three leading East Asian type foundries were also brought in to design and draw a bulk of the glyphs—Changzhou SinoType Technology, Iwata Corporation, and Sandoll Communication—due to the sheer size of the project and their local expertise.

Building Noto Sans CJK font is a major step towards our mission to make the reading experience beautiful for all users on all devices. Noto Sans CJK is the newest member of the Noto font family, which aims to support all languages in the world. The entire Noto font family, including Noto Sans CJK, is free and open. Visit the Noto homepage to download Noto Sans CJK and other Noto fonts.

Xiangye Xiao is a Product Manager at Google Inc. where she works on fonts and text input.
Stuart Gill is the Tech Lead and Manager of Google’s Text and Font team.

Jungshik Shin is the Noto visionary and is a Software Engineer in Google’s Internationalization Engineering team working on Text and Fonts as well as on Chrome.


Posted by Louis Gray, Googler
Categories: Programming

Design Sprints for Developers

Thu, 07/10/2014 - 19:04
Author PictureBy Nadya Direkova, Staff Designer and Design Evangelist at Google[x]

At Google and throughout the industry, we all agree that two things matter: design and speed. But how can we do great design quickly? For our teams, one of our most important tools is the design sprint.

While a typical product design process takes months or years, a design sprint compresses this into a week or less. The design sprint combines key design and research methods and focuses on a single challenge or multiple challenges in parallel. It brings all the stakeholders—designers, developers, product managers, and other decision makers—into one place to work together on a short deadline. It often leads to insights and solutions more quickly than anyone thought possible. At Google, we've been using design sprints for over four years, from external projects like Ads, Glass and Project Loon to our internal tools.

One team has even run a huge sprint with 175 participants in 23 teams. How did that feel? As Cordell Ratzlaff, User Experience Director for Ads & Commerce, says: “When you participate in a sprint, you either win or you learn.” Our latest Google Design Minutes short tells this story:

Design sprints at scale: Cordell Ratzlaff and team on the importance of constraints

We’re really excited about sharing our design sprint methods more broadly. Design sprints were an important theme in the “Design, Develop, Distribute” message at Google I/O 2014, where developers got a chance to learn about and experience short sprints in person.

The design sprint: from Google Ventures to Google[x]; Daniel Burka, Jake Knapp, Nadya Direkova share insights with developers at Google I/O 2014

However, this was just a first glimpse; over the summer, we’ll be hosting design sprints for select developers in the Bay Area, helping developers design for platforms like Glass and Android Wear or build with the material design approach. To get updates when these limited-seating events become available, sign up here.

No matter what your challenge and design process, design sprints can help you reduce the time it takes to create great ideas. So make great things, and make them quickly!

Categories: Programming

Putting your Professional Group on the Map

Wed, 07/09/2014 - 17:30
By Sarah Maddox, Google Developer Relations team

People love to know what's happening in their area of expertise around the world. What better way to show it, than on a map? Tech Comm on a Map puts technical communication tidbits onto an interactive map, together with the data and functionality provided by Google Maps.


I'm a technical writer at Google. In this post I share a project that uses the new Data layer in the Google Maps JavaScript API, with a Google Sheets spreadsheet as a data source and a location search provided by Google Places Autocomplete.

Although this project is about technical communication, you can easily adapt it for other special interest groups too. The code is on GitHub. The map in action Visit Tech Comm on a Map to see it in action. Here's a screenshot:
The colored circles indicate the location of technical communication conferences, societies, groups and businesses. The 'other' category is for bits and pieces that don't fit into any of the categories. You can select and deselect the checkboxes at top left of the map, to choose the item types you're interested in.

When you hover over a circle, an info window pops up with information about the item you chose. If you click a circle, the map zooms in so that you can see where the event or group is located. You can also search for a specific location, to see what's happening there.

Let's look at the building blocks of Tech Comm on a Map.
Getting hold of a mapI'm using the Google Maps JavaScript API to display and interact with a map. Where does the data come from?When planning this project, I decided I want technical communicators to be able to add data (conferences, groups, businesses, and so on) themselves, and the data must be immediately visible on the map.

I needed a data entry and storage tool that provided a data entry UI, user management and authorization, so that I didn't have to code all that myself. In addition, contributors shouldn't need to learn a new UI or a new syntax in order to add data items to the map. I needed a data entry mechanism that is familiar to most people - a spreadsheet, for example.

In an episode of Google Maps Developer Shortcuts, Paul Saxman shows how to pull data from Google Drive into your JavaScript app. That's just what I needed. Here's how it works.

The data for Tech Comm on a Map is in a Google Sheets spreadsheet. It looks something like this:


Also in the spreadsheet is a Google Apps Script that outputs the data in JSON format:

var SPREADSHEET_ID = '[MY-SPREADSHEET-ID]';var SHEET_NAME = 'Data';function doGet(request) {  var callback = request.parameters.jsonp;  var range = SpreadsheetApp      .openById(SPREADSHEET_ID)      .getSheetByName(SHEET_NAME)      .getDataRange();  var json = callback + '(' +      Utilities.jsonStringify(range.getValues()) + ')';    return ContentService      .createTextOutput(json)      .setMimeType(ContentService.MimeType.JAVASCRIPT);}


Follow these steps to add the script to the spreadsheet and make it available as a web service:
  1. In Google Sheets, choose 'Tools' > 'Script Editor'.
  2. Add a new script as a blank project.
  3. Insert the above code.
  4. Choose 'File' > 'Manage Versions', and name the latest version of the script.
  5. Choose 'Publish' >  'Deploy as web app'. Make it executable by 'anyone, even anonymous'. Note: This means anyone will be able to access the data in this spreadsheet via a script.
  6. Choose 'Deploy'.
  7. Copy the URL of the web service. You'll need to paste it into the JavaScript on your web page.

In your JavaScript, define a variable to contain the URL of the Google Apps script, and add the JSONP callback parameter:
var DATA_SERVICE_URL =   "https://script.google.com/macros/s/[MY-SCRIPT-ID]/exec?jsonp=?";

Then use jQuery's Ajax function to fetch and process the rows of data from the spreadsheet. Each row contains the information for an item: type, item name, description, website, start and end dates, address, latitude and longitude.

$.ajax({  url: DATA_SERVICE_URL,  dataType: 'jsonp',  success: function(data) {    // Get the spreadsheet rows one by one.    // First row contains headings, so start the index at 1 not 0.    for (var i = 1; i < data.length; i++) {      map.data.add({        properties: {          type: data[i][0],          name: data[i][1],          description: data[i][2],          website: data[i][3],          startdate: data[i][4],          enddate: data[i][5],          address: data[i][6]        },        geometry: {          lat: data[i][7],          lng: data[i][8]        }      });    }  }});The new Data layer in the Maps JavaScript API
Now that I could pull the tech comm information from the spreadsheet into my web page, I needed a way to visualize the data on the map. The new Data layer in the Google Maps JavaScript API is designed for just such a purpose. Notice the method map.data.add() in the above code. This is an instruction to add a feature in the Data layer.

With the basic JavaScript API you can add separate objects to the map, such as a polygon, a marker, or a line. But by using the Data layer, you can define a collection of objects and then manipulate and style them as a group. (The Data layer is also designed to play well with GeoJSON, but we don't need that aspect of it for this project.)

The tech comm data is represented as a series of features in the Data layer, each with a set of properties (type, name, address, etc) and a geometry (latitude and longitude).

Style the markers on the map, with different colors depending on the data type (conference, society, group, etc):


function techCommItemStyle(feature) {
 var type = feature.getProperty('type');
 var style = {
   icon: {      path: google.maps.SymbolPath.CIRCLE,      fillOpacity: 1,      strokeWeight: 3,      scale: 10            },    // Show the markers for this type if    // the user has selected the corresponding checkbox.    visible: (checkboxes[type] != false)  };
 // Set the marker colour based on type of tech comm item.  switch (type) {    case 'Conference':      style.icon.fillColor = '#c077f1';      style.icon.strokeColor = '#a347e1';      break;    case 'Society':      style.icon.fillColor = '#f6bb2e';      style.icon.strokeColor = '#ee7b0c';      break;. . . SNIPPED SOME DATA TYPES FOR BREVITY    default:      style.icon.fillColor = '#017cff';      style.icon.strokeColor = '#0000ff';  }  return style;}

Set listeners to respond when the user hovers over or clicks a marker. For example, this listener opens an info window on hover, showing information about the relevant data item:

 map.data.addListener('mouseover', function(event) {    createInfoWindow(event.feature);    infoWindow.open(map);  });The Place Autocomplete search
The last piece of the puzzle is to let users search for a specific location on the map, so that they can zoom in and see the events in that location. The location search box on the map is provided by the Place Autocomplete widget from the Google Places API.What's next?
Tech Comm on a Map is an ongoing project. We technical communicators are using a map to document our presence in the world!

Would you like to contribute? The code is on GitHub.

Posted by Louis Gray, Googler
Categories: Programming

Art, made with code, opens at London’s Barbican

Wed, 07/02/2014 - 19:30
Author PhotoBy Paul Kinlan, Staff Developer Advocate and tinkerer

Good News Everybody! DevArt has officially opened at the Barbican’s Digital Revolution Exhibition, the biggest exploration of digital creativity ever staged in the UK.

(Images - Andrew Meredith)
Technology has long gone hand in hand with art and with DevArt we’re showcasing the developers who use technology as their canvas and code as their raw material to create innovative, interactive digital art installations. Karsten Schmidt, Zach Lieberman, and duo Varvara Guljajeva and Mar Canet, have been commissioned by Google and the Barbican for Digital Revolution. Alongside these three commissions, a fourth - Cyril Diagne and Beatrice Lartigue - were handpicked as a result of DevArt’s global initiative to discover the interactive artists of tomorrow. You can also see their incredible art online and through our exhibition launch film here:


Play the World, 2014. Zach Lieberman [View on Github]
Using Google Compute Engine, Google Maps Geolocation API and openFrameworks, Zach has been able to find musical notes from hundreds of live radio stations around the world, resulting in a unique geo-orientated piece of music every time a visitor plays the piano at the centre of the piece.


Image by Andrew Meredith

Wishing Wall, 2014, Varvara Guljajeva & Mar Canet [View on Github]
Taking advantage of Google Compute Engine, Web Speech API, Chrome Apps, openFrameworks and node.js, Varvara and Mar are able to capture a whispered wish, and let you watch it transform before your eyes, allowing you to reach out and let it land on your hand.

Image by Andrew Meredith

Co(de) Factory, 2014, Karsten Schmidt [View on Github]
Android, Google Cloud Platform, Google Closure Compiler, WebGL, WebSockets, and YouTube have been combined by Karsten to allow anybody to create art and become an artist. It empowers people by giving them the tools to create, and offers them the chance to have their digital piece fabricated in 3D and showcased in the exhibition.

Image by Andrew Meredith

Les Métamorphoses de Mr. Kalia, 2014, Béatrice Lartigue and Cyril Diagne [View on Github]
Android, Chrome Apps, Google App Engine, node.js, openFrameworks have enabled Béatrice and Cyril to create tracking technology that transforms movement into a visual performance where visitors take on the persona of Mr. Kalia, a larger-than-life animated character, that undergoes a series of surreal changes while following your every movement.

Image by Andrew Meredith

DevArt will tour the world with the Digital Revolution Exhibition for up to five years following the Barbican show in London.

Soon we’re also starting our DevArt Young Creators program — an education component of DevArt designed to inspire a new generation of coders — each led by the DevArt interactive artists. Developed alongside the UK’s new computing curriculum, the workshops have been designed especially for students aged 9-13 years who have never tried coding before. Each workshop will be developed into lesson plans in-line with the UK’s new national computing curriculum, and distributed to educators by arts and technology organisations.

Paul Kinlan is a Developer Advocate in the UK on the Chrome team specialising on mobile. He lives in Liverpool and loves trying to progress the city's tech community from places like DoES Liverpool hack-space.

Posted by Louis Gray, Googler
Categories: Programming

Cloud Enabling your Mobile App

Thu, 06/26/2014 - 20:00
By Jason Polites, Cloud Platform Team

Many mobile apps today suffer from “app-nesia” — the affliction that causes an app to forget who you are. Have you ever re-installed an app only to discover you have to re-create all your carefully crafted preferences? This is typically because the user’s app data lives only on the device.

By connecting your apps to a backend platform, you can solve this issue, but it can be challenging. Whether it’s building basic plumbing, or just trying to load and save data in a network & battery-efficient way, spending time dealing with the backend can take precious time away from building an awesome app. So, we’re introducing two new features to help make your life easier.

Google Cloud Save
Google Cloud Save allows you to easily load and save user data to the cloud without needing to code up the backend. This is handy for situations where you want to save user state and have that state synchronized to multiple devices, or survive an app reinstall.

We handle all the backend logic as well as the synchronization services on the client. The synchronization services work in the background, providing offline support for the data, and minimizing impact on the battery. All you need to do is tell us when and what to save, and you do this with just 4 simple methods:
  • .save(client, List<Entity>)
  • .delete(client, Query)
  • .query(client, Query)
  • .requestSync(client)
All data is written locally first, then automatically synchronized in the background. The save, delete and query methods provide your basic CRUD operations while the requestSync method allows you to force a synchronization at any time.On the backend the data is stored in Google Cloud Datastore which means you can access the raw data directly from a Google App Engine or Google Compute Engine instance using the existing Datastore API. Changes on the server will even be automatically synced back to client devices. Importantly, this per-user data belongs to you, the developer, and stored in your own Google Cloud Datastore database. Cloud Save (3).pngGoogle Cloud Save is currently in private beta and will be available for general use soon. If you’re interested in participating in the private beta, you can sign up here!

Cloud Tools for Android Studio
To simplify the process of adding an App Engine backend to your app, Android Studio now provides three App Engine backend module templates which you can add to your app:
  • App Engine Java Servlet Module - Minimal Backend
  • App Engine Java Endpoints Module - Basic Endpoint scaffolding 
  • App Engine with Google Cloud Messaging - Push notification wireup 
When you choose one of these template types your project is updated with a new Gradle module containing your new App Engine backend. All of the required dependencies/permissions will be automatically set up for you. Built-in rich editing support for Google Cloud Endpoints
Once you have added the backend module to your Android application, you can use Google Cloud Endpoints to streamline the communication between your backend and your Android app. Cloud Endpoints automatically generates strongly-typed, mobile optimized client libraries from simple Java server-side API annotations, automates Java object marshalling to and from JSON, and provides built-in OAuth 2.0 support.On deployment, this annotated Endpoints API definition class generates a RESTful API. You can explore this generated API (and even make calls to it) by navigating to Endpoints API explorer as shown in the image below: api-explorer.png

To simplify calling this generated API from your Android app, Android Studio will automatically set up your project to include all compile dependencies and permissions required to consume Cloud Endpoints, and will re-generate strongly-typed client libraries if your backend changes. This means that you can start calling the client libraries from your Android app immediately after defining the server-side Endpoints API. The underlying work-horses: Gradle, and Gradle plug-in for App EngineUnder the hood, Gradle is used to build both your app and your App Engine backend. In fact, when you add an App Engine backend to your Android app, the open-source App Engine plug-in for Gradle is automatically downloaded by Android Studio, and common App Engine tasks become available as Gradle targets. This allows you to use the same build system across your IDE, command-line or continuous integration environments.Checkout more details on the new Cloud Endpoints features in Android Studio on the Android Developer Blog.

Posted by Louis Gray, Googler
Categories: Programming

Sneak peek: Google Cloud Dataflow, a Cloud-native data processing service

Thu, 06/26/2014 - 14:00
By Frances Perry, Google Cloud Platform Team

In today's world, information is being generated at an incredible rate. However, unlocking insights from large datasets can be cumbersome and costly, even for experts.

It doesn’t have to be that way. Yesterday, at Google I/O, you got a sneak peek of Google Cloud Dataflow, the latest step in our effort to make data and analytics accessible to everyone. You can use Cloud Dataflow:
  • for data integration and preparation (e.g. in preparation for interactive SQL in BigQuery)
  • to examine a real-time stream of events for significant patterns and activities
  • to implement advanced, multi-step processing pipelines to extract deep insight from datasets of any size
In these cases and many others, you use Cloud Dataflow’s data-centric model to easily express your data processing pipeline, monitor its execution, and get actionable insights from your data, free from the burden of deploying clusters, tuning configuration parameters, and optimizing resource usage. Just focus on your application, and leave the management, tuning, sweat and tears to Cloud Dataflow.

Cloud Dataflow is based on a highly efficient and popular model used internally at Google, which evolved from MapReduce and successor technologies like Flume and MillWheel. The underlying service is language-agnostic. Our first SDK is for Java, and allows you to write your entire pipeline in a single program using intuitive Cloud Dataflow constructs to express application semantics.

Cloud Dataflow represents all datasets, irrespective of size, uniformly via PCollections (“parallel collections”). A PCollection might be an in-memory collection, read from files on Cloud Storage, queried from a BigQuery table, read as a stream from a Pub/Sub topic, or calculated on demand by your custom code.

Because PCollections can be arbitrarily large, Cloud Dataflow includes a rich library of PTransforms (“parallel transforms”), which you can customize with your own application logic. For example, ParDo (“parallel do”) runs your code over each element in a PCollection independently (like both the Map and Reduce functions in MapReduce or WHERE in SQL), and GroupByKey takes a PCollection of key-value pairs and groups together all pairs with the same key (like the Shuffle step of MapReduce or GROUP BY and JOIN in SQL). In addition, anyone can define new custom transformations by composing other transformations -- this extensibility lets you write reusable building blocks which can be shared across programs. Cloud Dataflow provides a starter set of these composed transforms out of the box, including Count, Top, and Mean.

Writing in this modular, high-level style naturally leads to pipelines that make multiple logical passes over the same data. Cloud Dataflow automatically optimizes your data-centric pipeline code by collapsing multiple logical passes into a single execution pass. However, this doesn't turn the system into a black box: as you can see below, Cloud Dataflow’s monitoring UI uses the building block concept to show you the pipeline as you wrote it, not as the system chooses to execute it.

 Code snippet and monitoring UI from the Cloud Dataflow demo in the IO keynote.
The same Cloud Dataflow pipeline may run in different ways, depending on the data sources. As you start designing or debugging, you can run against data local to your development environment. When you’re ready to scale up to real data, that same pipeline can run in parallel batch mode against data in Cloud Storage or in distributed real-time processing mode against data coming in via a Pub/Sub topic. This flexibility makes it trivial to transition between different stages in the application development lifecycle: to develop and test applications, to adapt an existing batch pipeline to track time-sensitive trends, or to fix a bug in a real-time pipeline and backfill the historical results.

When you use Cloud Dataflow, you can focus solely on your application logic and let us handle everything else. You should not have to choose between scalability, ease of management and a simple coding model. With Cloud Dataflow, you can have it all.

If you’d like to be notified of future updates about Cloud Dataflow, please join our Google Group.

Posted by Louis Gray, Googler
Categories: Programming