Showing posts with label and. Show all posts
Showing posts with label and. Show all posts

Angular 1 and Angular 2 integration the path to seamless upgrade

| 0 comments |

Originally posted on the Angular blog.

Posted by, Misko Hevery, Software Engineer, Angular

Have an existing Angular 1 application and are wondering about upgrading to Angular 2? Well, read on and learn about our plans to support incremental upgrades.

Summary

Good news!

    • Were enabling mixing of Angular 1 and Angular 2 in the same application.
    • You can mix Angular 1 and Angular 2 components in the same view.
    • Angular 1 and Angular 2 can inject services across frameworks.
    • Data binding works across frameworks.

Why Upgrade?

Angular 2 provides many benefits over Angular 1 including dramatically better performance, more powerful templating, lazy loading, simpler APIs, easier debugging, even more testable and much more. Here are a few of the highlights:

Better performance

Weve focused across many scenarios to make your apps snappy. 3x to 5x faster on initial render and re-render scenarios.

    • Faster change detection through monomorphic JS calls
    • Template precompilation and reuse
    • View caching
    • Lower memory usage / VM pressure
    • Linear (blindingly-fast) scalability with observable or immutable data structures
    • Dependency injection supports incremental loading

More powerful templating

    • Removes need for many directives
    • Statically analyzable - future tools and IDEs can discover errors at development time instead of run time
    • Allows template writers to determine binding usage rather than hard-wiring in the directive definition

Future possibilities

Weve decoupled Angular 2s rendering from the DOM. We are actively working on supporting the following other capabilities that this decoupling enables:

    • Server-side rendering. Enables blinding-fast initial render and web-crawler support.
    • Web Workers. Move your app and most of Angular to a Web Worker thread to keep the UI smooth and responsive at all times.
    • Native mobile UI. Were enthusiastic about supporting the Web Platform in mobile apps. At the same time, some teams want to deliver fully native UIs on their iOS and Android mobile apps.
    • Compile as build step. Angular apps parse and compile their HTML templates. Were working to speed up initial rendering by moving the compile step into your build process.

Angular 1 and 2 running together

Angular 2 offers dramatic advantages over Angular 1 in performance, simplicity, and flexibility. Were making it easy for you to take advantage of these benefits in your existing Angular 1 applications by letting you seamlessly mix in components and services from Angular 2 into a single app. By doing so, youll be able to upgrade an application one service or component at a time over many small commits.

For example, you may have an app that looks something like the diagram below. To get your feet wet with Angular 2, you decide to upgrade the left nav to an Angular 2 component. Once youre more confident, you decide to take advantage of Angular 2s rendering speed for the scrolling area in your main content area.

For this to work, four things need to interoperate between Angular 1 and Angular 2:

    • Dependency injection
    • Component nesting
    • Transclusion
    • Change detection

To make all this possible, were building a library named ng-upgrade. Youll include ng-upgrade and Angular 2 in your existing Angular 1 app, and youll be able to mix and match at will.

You can find full details and pseudocode in the original upgrade design doc or read on for an overview of the details on how this works. In future posts, well walk through specific examples of upgrading Angular 1 code to Angular 2.

Dependency Injection

First, we need to solve for communication between parts of your application. In Angular, the most common pattern for calling another class or function is through dependency injection. Angular 1 has a single root injector, while Angular 2 has a hierarchical injector. Upgrading services one at a time implies that the two injectors need to be able to provide instances from each other.

The ng-upgrade library will automatically make all of the Angular 1 injectables available in Angular 2. This means that your Angular 1 application services can now be injected anywhere in Angular 2 components or services.

Exposing an Angular 2 service into an Angular 1 injector will also be supported, but will require that you to provide a simple mapping configuration.

The result is that services can be easily moved one at a time from Angular 1 to Angular 2 over independent commits and communicate in a mixed-environment.

Component Nesting and Transclusion

In both versions of Angular, we define a component as a directive which has its own template. For incremental migration, youll need to be able to migrate these components one at a time. This means that ng-upgrade needs to enable components from each framework to nest within each other.

To solve this, ng-upgrade will allow you to wrap Angular 1 components in a facade so that they can be used in an Angular 2 component. Conversely, you can wrap Angular 2 components to be used in Angular 1. This will fully work with transclusion in Angular 1 and its analog of content-projection in Angular 2.

In this nested-component world, each template is fully owned by either Angular 1 or Angular 2 and will fully follow its syntax and semantics. This is not an emulation mode which mostly looks like the other, but an actual execution in each framework, dependending on the type of component. This means that components which are upgraded to Angular 2 will get all of the benefits of Angular 2, and not just better syntax.

This also means that an Angular 1 component will always use Angular 1 Dependency Injection, even when used in an Angular 2 template, and an Angular 2 component will always use Angular 2 Dependency Injection, even when used in an Angular 1 template.

Change Detection

Mixing Angular 1 and Angular 2 components implies that Angular 1 scopes and Angular 2 components are interleaved. For this reason, ng-upgrade will make sure that the change detection (Scope digest in Angular 1 and Change Detectors in Angular 2) are interleaved in the same way to maintain a predictable evaluation order of expressions.

ng-upgrade takes this into account and bridges the scope digest from Angular 1 and change detection in Angular 2 in a way that creates a single cohesive digest cycle spanning both frameworks.

Typical application upgrade process

Here is an example of what an Angular 1 project upgrade to Angular 2 may look like.

  1. Include the Angular 2 and ng-upgrade libraries with your existing application
  2. Pick a component which you would like to migrate
    1. Edit an Angular 1 directives template to conform to Angular 2 syntax
    2. Convert the directives controller/linking function into Angular 2 syntax/semantics
    3. Use ng-upgrade to export the directive (now a Component) as an Angular 1 component (this is needed if you wish to call the new Angular 2 component from an Angular 1 template)
  3. Pick a service which you would would like to migrate
    1. Most services should require minimal to no change.
    2. Configure the service in Angular 2
    3. (optionally) re-export the service into Angular 1 using ng-upgrade if its still used by other parts of your Angular 1 code.
  4. Repeat doing step #2 and #3 in order convenient for your application
  5. Once no more services/components need to be converted drop the top level Angular 1 bootstrap and replace with Angular 2 bootstrap.

Note that each individual change can be checked in separately and the application continues working letting you continue to release updates as you wish.

We are not planning on adding support for allowing non-component directives to be usable on both sides. We think most of the non-component directives are not needed in Angular 2 as they are supported directly by the new template syntax (i.e. ng-click vs (click) )

Q&A

I heard Angular 2 doesnt support 2-way bindings. How will I replace them?

Actually, Angular 2 supports two way data binding and ng-model, though with slightly different syntax.

When we set out to build Angular 2 we wanted to fix issues with the Angular digest cycle. To solve this we chose to create a unidirectional data-flow for change detection. At first it was not clear to us how the two way forms data-binding of ng-model in Angular 1 fits in, but we always knew that we had to make forms in Angular 2 as simple as forms in Angular 1.

After a few iterations we managed to fix what was broken with multiple digests and still retain the power and simplicity of ng-model in Angular 1.

Two way data-binding has a new syntax: [(property-name)]="expression" to make it explicit that the expression is bound in both directions. Because for most scenarios this is just a small syntactic change we expect easy migration.

As an example, if in Angular 1 you have: <input type="text" ng-model="model.name" />

You would convert to this in Angular 2: <input type="text" [(ng-model)]="model.name" />

What languages can I use with Angular 2?

Angular 2 APIs fully support coding in todays JavaScript (ES5), the next version of JavaScript (ES6 or ES2015), TypeScript, and Dart.

While its a perfectly fine choice to continue with todays JavaScript, wed like to recommend that you explore ES6 and TypeScript (which is a superset of ES6) as they provide dramatic improvements to your productivity.

ES6 provides much improved syntax and intraoperative standards for common libraries like promises and modules. TypeScript gives you dramatically better code navigation, automated refactoring in IDEs, documentation, finding errors, and more.

Both ES6 and TypeScript are easy to adopt as they are supersets of todays ES5. This means that all your existing code is valid and you can add their features a little at a time.

What should I do with $watch in our codebase?

tldr; $watch expressions need to be moved into declarative annotations. Those that dont fit there should take advantage of observables (reactive programing style).

In order to gain speed and predictability, in Angular 2 you specify watch expressions declaratively. The expressions are either in HTML templates and are auto-watched (no work for you), or have to be declaratively listed in the directive annotation.

One additional benefit from this is that Angular 2 applications can be safely minified/obfuscated for smaller payload.

For interapplication communication Angular 2 offers observables (reactive programing style).

What can I do today to prepare myself for the migration?

Follow the best practices and build your application using components and services in Angular 1 as described in the AngularJS Style Guide.

Wasnt the original upgrade plan to use the new Component Router?

The upgrade plan that we announced at ng-conf 2015 was based on upgrading a whole view at a time and having the Component Router handle communication between the two versions of Angular.

The feedback we received was that while yes, this was incremental, it wasnt incremental enough. We went back and redesigned for the plan as described above.

Are there more details you can share?

Yes! In the Angular 1 to Angular 2 Upgrade Strategy design doc.

Were working on a series of upcoming posts on related topics including:

  1. Mapping your Angular 1 knowledge to Angular 2.
  2. A set of FAQs on details around Angular 2.
  3. Detailed migration guide with working code samples.

See you back here soon!

Read More..

Celebrating 30 years of COM and the future of DOMAINS

| 0 comments |


(Cross-posted on the Official Google Blog.)

When you visited Google today, we’re pretty sure you didn’t type 173.194.113.18 into your browser. This string of numbers separated by periods—an IP address—isn’t nearly as easy or memorable as typing google.com. Domain names ending in things like .COM, .NET and .EDU make browsing the web and telling people where to find you online easier. Since this month marks the 30-year anniversary of .COM and several other domain endings, we’re taking a minute to celebrate these often-overlooked suffixes that have changed the way we use the web.
Though they were introduced in 1985, domain names didn’t gain much awareness and use amongst the public until the World Wide Web became available to all during the ‘90s and it became clear they were an important part in unlocking its power. Using these online addresses, people began to spread messages, start businesses and access information that otherwise would have been nearly impossible to find. Popularity and demand for these names grew so much that people were soon willing to pay millions of dollars for the perfect one.
Today there are 270+ million registered domain names; in fact, about 17 million were added just last year. To create more naming options for people online, hundreds of new top-level domains are being added, and many, like .TODAY, .NINJA and .BIKE are already available. We wrote about this back in 2012, and since then we’ve launched three of our own: .HOW, .SOY and .???.
As .COM turns 30, we’re looking back on the history of domain endings and all they’ve made possible. Today there are more choices than ever before for people to find the perfect name for their businesses, projects and ideas on the web. If you’re interested in learning more about this history, or you’d like to register your own piece of the web, head over to Google Domains to claim your .DOMAINS from a .COM to a .GURU.
Here’s to .COM’s 30th, and all that’s yet to come in how we name destinations on the Internet.

Read More..

Updated Material Design Guidelines and Resources

| 0 comments |

When we first published the Material Design guidelines back in June, we set out to create a living document that would grow with feedback from the community. In that time, we’ve seen some great work from the community in augmenting the guidelines with things like Sketch templates, icon downloads and screens upon screens of inspiring visual and motion design ideas. We’ve also received a lot of feedback around what resources we can provide to make using Material Design in your projects easier.

So today, in addition to publishing the final Android 5.0 SDK for developers, we’re publishing our first significant update to the Material Design guidelines, with additional resources including:

  • Updated sticker sheets in PSD, AI and Sketch formats
  • A new icon library ZIP download
  • Updated color swatch downloads
  • Updated whiteframe downloads, including better baseline grid text alignment and other miscellaneous fixes

The sticker sheets have been updated to reflect the latest refinements to the components and integrated into a single, comprehensive sticker sheet that should be easier to use. An aggregated sticker sheet is also newly available for Adobe Photoshop and Sketch—two hugely popular requests. In the sticker sheet, you can find various elements that make up layouts, including light and dark symbols for the status bar, app bar, bottom toolbar, cards, dropdowns, search fields, dividers, navigation drawers, dialogs, the floating action button, and other components. The sticker sheets now also include explanatory text for elements.

Note that the images in the Components section of the guidelines havent yet been updated (that’s coming soon!), so you can consider the sticker sheets to be the most up-to-date version of the components.

Also, the new system icons sticker sheet contains icons commonly used in Android across different apps, such as icons used for media playback, communication, content editing, connectivity, and so on.

Stay tuned for more enhancements as we incorporate more of your feedback—remember to share your suggestions on Google+! We’re excited to continue evolving this living document with you!

For more on Material Design, check out these videos and the new getting started guide for Android developers.

Posted by Roman Nurik, Design Advocate
Read More..

Convert ImageView to black and white and set brightness using ColorFilter

| 0 comments |


MainActivity.java
package com.blogspot.android_er.androidcolorfilter;

import android.graphics.ColorFilter;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

ImageView imageView;
SeekBar brightnessBar;
TextView brightnessInfo;

PorterDuff.Mode[] optMode = PorterDuff.Mode.values();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

imageView = (ImageView)findViewById(R.id.iv);
brightnessBar = (SeekBar)findViewById(R.id.bar_brightness);
brightnessInfo = (TextView)findViewById(R.id.brightness_info);

brightnessBar.setOnSeekBarChangeListener(brightnessBarChangeListener);

setBlackAndWhite(imageView);
}

SeekBar.OnSeekBarChangeListener brightnessBarChangeListener
= new SeekBar.OnSeekBarChangeListener(){

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
setBlackAndWhite(imageView);
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}
};

private void setBlackAndWhite(ImageView iv){

float brightness = (float)(brightnessBar.getProgress() - 255);

float[] colorMatrix = {
0.33f, 0.33f, 0.33f, 0, brightness, //red
0.33f, 0.33f, 0.33f, 0, brightness, //green
0.33f, 0.33f, 0.33f, 0, brightness, //blue
0, 0, 0, 1, 0 //alpha
};

ColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
iv.setColorFilter(colorFilter);

brightnessInfo.setText(String.valueOf(brightness));
}

}


layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout


android_layout_width="match_parent"
android_layout_height="match_parent"
android_padding="16dp"
android_orientation="vertical"
tools_context=".MainActivity">

<TextView
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_layout_gravity="center_horizontal"
android_autoLink="web"
android_text="http://android-er.blogspot.com/"
android_textStyle="bold" />

<ImageView
android_id="@+id/iv"
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_src="@mipmap/ic_launcher"/>

<TextView
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_text="Brightness"/>

<SeekBar
android_id="@+id/bar_brightness"
android_layout_width="match_parent"
android_layout_height="wrap_content"
android_max="512"
android_progress="255"/>

<TextView
android_id="@+id/brightness_info"
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_text="Brightness"/>
</LinearLayout>


Related:
- Android example code using ColorFilter

Read More..

Bringing Unlimited Storage to all government customers looking back and looking ahead

| 0 comments |


I don’t know about you, but it seems like 2016 has started with a bang!

I have an exciting announcement for my first post of the year — now all U.S. government agencies can choose Google Apps for Work and store unlimited content with the assurance that its security is assessed against the FedRAMP standards. Over the holidays, we received a FedRAMP (Federal Risk and Authorization Management Program) Authorization to Operate for Google Apps for Work* and Google App Engine. And because this authorization — along with its ongoing compliance requirements — covers our common infrastructure, it benefits all existing Google Apps for Work and App Engine customers as well.

With 2016 off to a busy start, I’d like to take a moment to reflect on 2015. It was a big year for Google for Work.

We launched new features, powered by machine learning, that do more of the heavy lifting so you can work better and faster. For Sheets, we introduced Explore, which provides instant data analytics and visualization with the click of a button. We added Smart Reply to Inbox, which helps you respond to messages by generating short contextual responses to your emails, based on your typical responses. And we open-sourced TensorFlow, our fast and scalable machine learning system, to accelerate advances within the wider community.

Along with the roll out of Marshmallow to the Android for Work program, we held a virtual conference called Android for Work Live so users all over the world could watch and participate. On Maps, we launched Predict Travel Time — one of the most powerful features from our consumer Google Maps experience  so businesses and developers can make their location-based applications even more relevant for their users.

We’re continuing to build out and improve Google Cloud Platform at breakneck speed, with nearly 300 combined products and features launched in 2015. Nearline gives you the benefits of cold storage and the pricing of offline backups, but with high availability for your data. Bigtable gives you access to the same database service that powers many of Google’s core products, like Search and Maps. And Custom Machine Types give you the flexibility to create the virtual machine shape that works for you, so you get just the right amount of memory and processing power for your workloads.

We also reached a new milestone — there are now more than 2 million paying businesses using Google Apps for Work, including new customers like Morrisons, Catholic Health Initiatives and Thames Water. Organizations like Broad Institute, HTC, Atomic Fiction and Nomanini that want powerful data analytics and developer platforms, began using and partnering with Google Cloud Platform for everything from tackling genomic data to building innovative mobile payment apps.

Looking ahead, our goal remains the same: empower billions of people to work the way they choose and build what’s next. We’re building simple and secure tools that make it easier for you to focus on the things that matter. Technology can help by assisting with tasks, suggesting how to maximize your time and even proactively surfacing the information you need. It’s going to be an exciting year. Have a look at our full year wrap up and best wishes for a happy and productive 2016!

*Google Apps for Work, Google Apps for Work Unlimited, Google Apps for Education and Google Apps for Nonprofits. Googles dedicated Government edition is also FedRAMP-authorized.


Read More..

Colors Arrays and Dimensions Resources

| 0 comments |
Android provides three other types of resources that can be defined as XML files in the res/values folder. These resources can be Colors, Arrays and Dimensions.

Color Resources:
You can define XML files that contain definitions for colors that can be used in your application.


Colors in Android are hexadecimal RGB values, also optionally specifying an alpha channel (transparency).

You have your choice of single-character hex values or double-character hex values, leaving

you with four styles:

  • #RGB (Red: #F00).
  • #ARGB (Red with Alpha 5: #5F00).
  • #RRGGBB (Red : #FF0000).
  • #AARRGGBB (Red with Alpha 50: 50FF0000 #).
You define colors in the xml file as follows:

<color name="Red">#FF0000</color>
You can use it from code behind as this:
TextView txtColor=(TextView)findViewById(R.id.txtColor);
txtColor.setTextColor(this.getResources().getColor(R.color.Red));

or from the layout as this:



Dimensions Resources:
You can define Dimension resources to use them with your widgets to define padding, width or height.


The dimension resources can be defined in the following units:

  • Pixels: (px).
  • Inches: (in).
  • Millimeters: (mm).
  • Points: (pt).
  • Density: (dp) density-independent pixels based on 160 dpi (dot per inch).
  •  Scale: (sp) Scale-independent pixels (dimensions that allow for user sizing; helpful for use in
    fonts).
To define dimension resources in xml files you can write it like this:

<dimen name="PixelDim">10px</dimen>
<dimen name="PointsDim">10pt</dimen>
<dimen name="InchesDim">0.2in</dimen>
<dimen name="MilliDim">5mm</dimen>
<dimen name="DensityDim">20dp</dimen>
<dimen name="ScaleDim">20sp</dimen>


And you can use them from the xml layout definition like this



or from code like this:
TextView txtdp=(TextView)findViewById(R.id.txtdp);
txtdp.setTextSize(this.getResources().getDimension(R.dimen.DensityDim));


Array Resources:
Array resources allow you to define custom string arrays that hold values you can use in your application such as a countries list or a list of names.


An Array resource is defined using string-array element while items are defined using item element.

<string-array name="countries">
<item>USA</item>
<item>UK</item>
<item>Canada</item>
</string-array>

and you can use them from code like this:
String [] Countries=this.getResources().getStringArray(R.array.countries);
you can define more than one string-array in the same file


that was all about color, dimensions and arrays in android

Download sample application from here
Read More..

GIMP resize and change background color of animated GIF

| 0 comments |
To save (export as...) animated GIF, make sure the "As animation" is checked.


This video show how to resize and export GIF as animation:


To change background color of animated gif:

Read More..

Get WiFi link speed and frequency

| 0 comments |
Example show how to get WiFi link speed and frequency:


When WiFi OFF


package com.blogspot.android_er.androidwifispeedfrequency;

import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

TextView textInfo = (TextView)findViewById(R.id.info);
TextView textSpeed = (TextView)findViewById(R.id.speed);
TextView textFreq = (TextView)findViewById(R.id.frequency);

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
if(wifiManager!=null){
textInfo.setText(wifiManager.toString());
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
textSpeed.setText("Link Speed: " + wifiInfo.getLinkSpeed() + wifiInfo.LINK_SPEED_UNITS);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
textFreq.setText("Freuency: " + wifiInfo.getFrequency() + wifiInfo.FREQUENCY_UNITS);
}
}else{
textInfo.setText("wifiManager == null!");
}
}
}


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout

android_layout_width="match_parent"
android_layout_height="match_parent"
android_padding="16dp"
android_orientation="vertical"
tools_context="com.blogspot.android_er.androidwifispeedfrequency.MainActivity">

<TextView
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_layout_gravity="center_horizontal"
android_autoLink="web"
android_text="http://android-er.blogspot.com/"
android_textStyle="bold" />

<TextView
android_id="@+id/info"
android_layout_width="match_parent"
android_layout_height="wrap_content"
android_textStyle="italic"/>
<TextView
android_id="@+id/speed"
android_layout_width="match_parent"
android_layout_height="wrap_content"
android_textStyle="bold"
android_textSize="30dp"/>
<TextView
android_id="@+id/frequency"
android_layout_width="match_parent"
android_layout_height="wrap_content"
android_textStyle="bold"
android_textSize="30dp"/>

</LinearLayout>



uses-permission of "android.permission.ACCESS_WIFI_STATE" is needed in AndroidManifest.xml.

Read More..

A final farewell to ClientLogin OAuth 1 0 3LO AuthSub and OpenID 2 0

| 0 comments |

Posted by William Denniss, Product Manager, Identity and Authentication

Support for ClientLogin, OAuth 1.0 (3LO1), AuthSub, and OpenID 2.0 has ended, and the shutdown process has begun. Clients attempting to use these services will begin to fail and must be migrated to OAuth 2.0 or OpenID Connect immediately.

To migrate a sign-in system, the easiest path is to use the Google Sign-in SDKs (see the migration documentation). Google Sign-in is built on top of our standards-based OAuth 2.0 and OpenID Connect infrastructure and provides a single interface for authentication and authorization flows on Web, Android and iOS. To migrate server API use, we recommend using one of our OAuth 2.0 client libraries.

We are moving away from legacy authentication protocols, focusing our support on OpenID Connect and OAuth 2.0. These modern open standards enhance the security of Google accounts, and are generally easier for developers to integrate with.

13LO stands for 3-legged OAuth where theres an end-user that provides consent. In contrast, 2-legged (2LO) correspond to Enterprise authorization scenarios such as organizational-wide policies control access. Both OAuth1 3LO and 2LO flows are deprecated, but this announcement is specific to OAuth1 3LO.

Read More..

The new Training Center professional development by and for educators

| 0 comments |


(Cross-posted on the Google for Education Blog.)

Editors note: Twenty thousand educators from around the world will share ideas, tips, and trends for the upcoming year when they gather at ISTE, one of the largest education technology conferences in the world. If you’ll be in Philadelphia, come visit us in the Expo Hall at #1808. You can learn more about the new Training Center and check out any of over 50 short sessions that will share more ways to engage and inspire students.

Technology can transform education, but only when it enables and supports amazing educators. Effective professional development is thus a crucial part of creating real positive change and preparing students for the future. For this reason, we’re proud to introduce the new Google for Education Training Center, a free, interactive, online platform that helps educators apply Google’s tools in the classroom and beyond.


Professional development has long been a challenge for educators and administrators. A 2015 survey by the American Federation of Teachers found that the "adoption of new initiatives without proper training or professional development" was the primary reason for workplace stress, with 71% of respondents citing it. This is why we worked closely alongside educators to design professional development tools that fit the needs of their peers.

“We didn’t need another help center with how-to articles; we needed to start where teachers start, with learning objectives, classroom tasks and teaching strategies,” said Jay Atwood, EdTech coordinator at Singapore American School and project lead for the Training Center’s lesson creation. “With the new Training Center, we do just that.”

The Training Center provides interactive lessons with a practical classroom focus, allowing educators and administrators to customize their learning paths by choosing fundamental or advanced courses. Each course is organized around three themes:


Educators can access different units and lessons in any order they prefer. After completing either the fundamentals or advanced course, educators can then distinguish themselves as Google Certified Educators, Level 1 or Level 2.

The lessons support different skill sets, grade levels, content specialties, capacities and interests. “I thought I was pretty knowledgeable about Google, but in each session I learned something new,” says Carla Jones, a teacher at Cook Elementary School in Chicago, IL who previewed the Training Center content. “I learned tips and strategies that I could immediately use in my classroom, and each session got me super excited about how to make my classroom more tech integrated.”

Chicago Public Schools (CPS), the third largest school district in the United States with more than 600 schools and 400,000 students, worked with Google for Education as a launch partner for the new Training Center. CPS will use the Training Center as an integral part of its technology professional development program, and teachers’ time spent on Training Center courses will count toward their professional development hours.

“The new Google for Education Training Center empowers teachers to drive their own learning and track their progress,” says Donna Román, EdTech instructional specialist at CPS. “It combines differentiated content, flexible pace and application with the collaborative magic of Google Apps for Education in a supportive learning environment.”

The Training Center reflects what we value most about education, focusing on the process of learning rather than the tools themselves. “The Training Center was carefully designed around good pedagogy and instructional practices,” explains Mark Hammons, EdTech coordinator at the Fresno County Office of Education and a contributor to the platform. “Not only will teachers learn how to use Google Apps, but they will also learn how to apply them meaningfully in the classroom.”

To learn more about the Training Center, visit g.co/edutrainingcenter and try out a lesson or two.
Read More..

Xero keeps global offices connected and nimble using Chromebox for meetings

| 0 comments |


Editors note: It’s been just over a year since we launched Chromebox for meetings, and to celebrate the milestone we’re sharing stories about our customers and their approaches to business, culture and productivity that are bringing them success. In today’s post, online accounting software provider Xero tells how it manages to keep its startup-like efficiency, innovation and feel while expanding globally. To learn more about Chromebox for meetings, join us online at Chrome Live on April 22 and see how companies scale face-to-face meetings across the globe.


Xero was started by several developers nine years ago in an apartment above a coffee shop in Wellington, New Zealand. Today, we have more than 1,000 employees in 15 cities across the U.S., U.K., Australia and New Zealand and provide online accounting software to more than 400,000 global customers. With more than 200 percent five-year average sales growth as of June 2014, our biggest challenge now is managing the fast-paced growth while maintaining our nimble, tech-forward startup culture.

We like to keep work in small groups and move quickly. Our teams work closely on projects even when they’re located in different offices around the world. And since we like to stay on the cutting edge of technology, we’re using Google Apps, which allows us to stay coordinated and productive.

Our pain point in IT was finding a way for teams in different cities and offices to meet and collaborate at the same time. We used a variety of video conferencing technologies, including PCs, HDMI/VGA and projectors. They were difficult to set up, meetings were delayed and productivity suffered. As we continued to grow, this struggle intensified, and we realized that we needed to find a solution fast. We needed to streamline our meeting room setups and get the most out of Hangouts. When we heard about Chromebox for meetings, we jumped at the chance to try it out.

We started with six Chromebox for meetings units. Today, we have nearly a hundred. They’re in every meeting room. We use them for room-to-room conferencing and all hands meetings. The global team uses them to connect every two weeks and the CEO addresses the entire company via Hangout on Air.

Chromebox for meetings allow us to keep things simple. There’s very little infrastructure or wireless connections needed on our side, so no cables necessary. Setup is fast and the integration with Gmail makes joining Hangouts as easy as clicking a button. It’s easy to share documents and work on them together. Then there’s the cost savings. Instead of spending between $40,000 and $60,000 on a video conferencing system, we spent one-tenth of that on a Chromebox and a display.

We may be a larger company now, but we still want to move and act quickly. No matter how large we become, our values align with those of fresh innovative companies that respond rapidly to market demand, customer needs and competition. Thanks to Chromebox for meetings, we can keep the startup feel and agility while growing at breakneck speed.
Read More..

Convert bitmap to grayscale using matrix and ColorMatrixColorFilter

| 0 comments |

This example show how to convert bitmap to grayscale using matrix and ColorMatrixColorFilter. Once photo loaded, touch on the ImageView will show the original photo, touch release to show the grayscale photo.


MainActivity.java
package com.blogspot.android_er.androidimage;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.FileNotFoundException;

public class MainActivity extends AppCompatActivity {

private static final int RQS_OPEN = 1;
Button buttonOpen;
ImageView imageView;

Bitmap bmNormal, bmGrayScale;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonOpen = (Button) findViewById(R.id.opendocument);
buttonOpen.setOnClickListener(buttonOpenOnClickListener);

imageView = (ImageView)findViewById(R.id.image);
imageView.setOnTouchListener(imageViewOnTouchListener);
}

View.OnTouchListener imageViewOnTouchListener = new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {

if(event.getAction() == MotionEvent.ACTION_DOWN){
//user touch on ImageView
if(bmNormal != null){
imageView.setImageBitmap(bmNormal);
}
}else if(event.getAction() == MotionEvent.ACTION_UP){
//user release touch on ImageView
if(bmGrayScale != null){
imageView.setImageBitmap(bmGrayScale);
}
}
return true;
}
};

View.OnClickListener buttonOpenOnClickListener =
new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, RQS_OPEN);
}
};

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && requestCode == RQS_OPEN) {
Uri dataUri = data.getData();
int w = imageView.getWidth();
int h = imageView.getHeight();
Toast.makeText(MainActivity.this,
dataUri.toString() + " " +
w + " : " + h,
Toast.LENGTH_LONG).show();

try {
bmNormal = bmGrayScale = null;
bmNormal = loadScaledBitmap(dataUri, w, h);
bmGrayScale = getGrayscale(bmNormal);
imageView.setImageBitmap(bmGrayScale);
Toast.makeText(MainActivity.this,
bmGrayScale.getWidth() + " x " + bmGrayScale.getHeight(),
Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}

private Bitmap getGrayscale(Bitmap src){

//Custom color matrix to convert to GrayScale
float[] matrix = new float[]{
0.3f, 0.59f, 0.11f, 0, 0,
0.3f, 0.59f, 0.11f, 0, 0,
0.3f, 0.59f, 0.11f, 0, 0,
0, 0, 0, 1, 0,};

Bitmap dest = Bitmap.createBitmap(
src.getWidth(),
src.getHeight(),
src.getConfig());

Canvas canvas = new Canvas(dest);
Paint paint = new Paint();
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
paint.setColorFilter(filter);
canvas.drawBitmap(src, 0, 0, paint);

return dest;
}

/*
reference:
Load scaled bitmap
http://android-er.blogspot.com/2013/08/load-scaled-bitmap.html
*/
private Bitmap loadScaledBitmap(Uri src, int req_w, int req_h) throws FileNotFoundException {

Bitmap bm = null;

// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(getBaseContext().getContentResolver().openInputStream(src),
null, options);

// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, req_w, req_h);

// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
bm = BitmapFactory.decodeStream(
getBaseContext().getContentResolver().openInputStream(src), null, options);

return bm;
}

public int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;

if (height > reqHeight || width > reqWidth) {

// Calculate ratios of height and width to requested height and
// width
final int heightRatio = Math.round((float) height
/ (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);

// Choose the smallest ratio as inSampleSize value, this will
// guarantee
// a final image with both dimensions larger than or equal to the
// requested height and width.
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}

return inSampleSize;
}
}


layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout

android_layout_width="match_parent"
android_layout_height="match_parent"
android_padding="5dp"
android_background="@android:color/black"
android_orientation="vertical"
tools_context=".MainActivity">

<TextView
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_layout_gravity="center_horizontal"
android_autoLink="web"
android_text="http://android-er.blogspot.com/"
android_textStyle="bold" />

<Button
android_id="@+id/opendocument"
android_layout_width="match_parent"
android_layout_height="wrap_content"
android_text="Open Document of Image/Video" />

<ImageView
android_id="@+id/image"
android_layout_width="match_parent"
android_layout_height="match_parent" />
</LinearLayout>

Read More..

Palo Alto High School journalism students are empowered to lead their publications and their learning

| 0 comments |


(Cross-posted on the Google Student Blog.)

Editors note: One of the main discussion points of Education on Air, the free online conference from Google on May 8th-9th, was how we can empower students in their learning. Our guest author today, Coby Parker, is one of the students who shared views as part of the student empowerment panel at the conference. Coby and his classmate and co-author Claire Liu are the Editors-in-Chief of the Campanile, the student-created, award-winning publication at Palo Alto High School. Today they share more insights about how the journalism program at his school, led by educator Esther Wojcicki, motivates students. We hope this provides ideas for teachers as they head into summer and next year.

One of the most vital pieces of an education is student empowerment. Here at Palo Alto High School, students are given the opportunity to take complete control over their academic and creative journey through the journalism program Esther Wojcicki (or “Woj”) has created.

The journalism program and publications that Woj has built over the last 30 years are incredibly appealing to our student body, as demonstrated by the hundreds of kids who choose to enroll in “Beginning Journalism” each year. High school is a challenging time – young people are faced with the obstacles presented by academic stress, extracurricular commitments and changing social norms. For me, it was difficult to find something to spend my time doing that provided both intellectual stimulation and creative escape.

Joining Paul Kandell’s “Beginning Journalism” class sophomore year, and then enrolling in The Campanile, a school newspaper that Woj advises, has granted me the space to grow my academic independence and leadership ability. Our entire publication is headed by students only. Student editors like me lead story ideas, and staff writers pick and choose the pieces they feel passionate about writing. There are no limitations on story ideas – as long as a proposal is relevant, we give it the green light.


If you like what you see in this highlight reel for the Education on Air student empowerment panel, check out the full session.

After students submit first drafts, peers make edits on Google Drive, suggesting changes, marking grammar and AP style errors, and more. When “production” begins, the entire staff stays on campus in the Media Arts Center until 9 P.M. each night to design the tangible, paper product. The entire process is run by students, meaning it is the high schoolers alone who create the complex and sophisticated end product. We even sell advertisements to pay the bills. If a student needs help, he or she asks a high school peer – not Woj. Woj leads very much from behind – an approach that may be challenging for many educators, but one that is truly beneficial to the strengthening of student initiative.

Essentially, the only time Woj intervenes is if she has a specific design suggestion, brief lesson, or if a specific story may contain libel or is unethical in some way – this happens pretty infrequently. In my three years on The Campanile, Woj has never forced us to do or publish anything we did not want to. Her approach provides students the room to take on big projects and develop a self-confidence and desire to test boundaries, both personal and societal.

My colleague Claire Liu, another Editor-in-Chief, explained the impact the course has had for her. “As a staff writer, I have pursued a range of stories, standard and provocative. Whether I was documenting a sports game, addressing race relations or discussing gender roles and sexuality through the paper, I have felt Woj’s subtle but ever present support. In this rare, fast-paced and invigorating environment, we are allowed to fail, and encouraged to take risks and challenge the norm, all while being supported by a teacher who consistently has our back (even when she’s feeling a bit hesitant, and even if we mess up big time!). Students join The Campanile expecting to learn how to design a newspaper page and write articles. They gain not only those things, but an entire toolbox of powerful character traits and skills that will last them a lifetime.”

In psychology class I recently learned the difference between intrinsic and extrinsic motivation. Generally in the education system, students work hard to get good grades and please their teachers – extrinsic motivation. In The Campanile, the motivation is more intrinsic. The threshold to get an A is the bare minimum, and anything above and beyond that has to come from the individual student’s efforts. The reward is much more basic than an A on the report card; it’s being able to hold a newspaper and point to the real impact that he or she made.

Our advisor, Woj, truly plays the role of advisor and not teacher. She’s there for us when we need her, but when we don’t, she doesn’t impose on us or make us do anything we don’t want to. In the end, we are responsible for our actions, the dime stops with us. I hope more schools can implement programs like The Campanile and empower students to take charge of their own education.

If you’re interested in learning more about Esther Wojcicki’s approach to teaching check out this interview with her in which she talks about her recent book “Moonshots in Education: Launching Blended Learning in the Classroom” or read more on her website.
Read More..

Retail in 2016 Looking ahead with our customers and partners at Retail’s Big Show

| 0 comments |


Coming out of the holiday rush, retailers are already thinking about the year ahead and how to compete in 2016 and beyond. We’re headed to the industry’s largest global event, Retail’s Big Show (January 17-20 in New York City), hosted by the National Retail Federation (NRF), to talk about just that. With more than 30,000 attendees, Retail’s Big Show is the hub of conversations about retail innovation. Many of our own customers will be there, and we look forward to hearing how they’re evolving for the digital age.

Thousands of the world’s top retailers rely on Google Apps, Chrome, Google Maps, Google Cloud Platform and Google Search to work better, wherever they are — from designing the latest trends to selling must-have gadgets (see top tips from our retail customers).

With customized retail tools and APIs, Google helps retailers to master fast fashion, create leaner supply chains and gain a better understanding of customer data. Retailers can grow revenue, reduce costs and innovate quickly.

On the first day of Retail’s Big Show, our partner PricewaterhouseCoopers (PwC) will host a panel of retailers innovating with Google Apps: Chico’s, Kohl’s, OVS SpA and Waitrose. These customers will discuss how retail CIOs are leading organizational transformation and how their teams transitioned to Google Apps — which reduced costs, strengthened customer experience, shortened product launch cycles and improved how their teams work together on a global scale.

We’re continuing to build an ecosystem of solutions that support the next generation of digital business in retail — including partnerships with technologies for retail workforce management, digital signage, and merchandising, planning, operations and supply chain. Googlers will be hanging out in partner booths at Retail’s Big Show to talk more about these integrations. Look for us in the booths for Kronos Software, Scala and JDA Software to learn about our joint solutions and offerings, and stay tuned for future blog posts from each of these partners and their Google for Work integration stories.

If you’re planning to attend Retail’s Big Show, we hope to see you at the Connected Retailing panel on January 17 at 3:15 p.m. in Hall E, 1E 07.
Read More..

1 000 Chrome Experiments and counting

| 0 comments |

Posted by Valdean Klump, Data Arts Team

Originally posted to the Google Chrome blog

In 2009, we launched Chrome Experiments to showcase the work of creative coders who pushed HTML5 and JavaScript to the limits in order to build beautiful, unique web experiences. At first, the site had only 19 experiments, but we hoped they would be a source of inspiration for programmers who made art with open web technologies. Since then, we’ve been humbled by the quantity and quality of new submissions. Today, we’ve reached a major milestone: 1,000 experiments.

To celebrate, we’ve created a special Experiment #1000 that visualizes every other experiment on the site. You can explore all 1,000 in a variety of ways, including a real-time code editor and a timeline with selectable tags. Click on the WebGL tag, for example, and you’ll see how that technology surged in popularity when it was added to Chrome in 2011.

A visualization of the first 1,000 Chrome Experiments

Along with Experiment #1000, we’ve redesigned ChromeExperiments.com using Polymer. It’s mobile-friendly, so no matter what kind of phone or tablet you have, or how you hold it, the site scales smoothly. If you’re on your phone, you can also filter the list to mobile-compatible experiments by selecting the Mobile tag.

The new ChromeExperiments.com

Looking back at the old experiments this month has been a joy. Highlights include Mr.doob’s classic Ball Pool (one of the original 19 experiments), the first WebGL experiment by Gregg Tavares (try 4,000 fish – this used to be very slow!), and Dinahmoe’s multiplayer audio toy Plink, which combines the Web Audio API with Node.js. At Google I/O in 2012, we released the first mobile experiments, including AlteredQualia’s Multitouch Toy and Dominic Szablewski’s X-Type. And each year afterward, new web technologies appeared, like getUserMedia and the Web Speech API. It’s been a wonderful journey.

Thank you to everyone who has supported the site, and most of all to the creators who have shared their work. We’re excited see what experiments you come up with next.

Read More..

Beacons the Internet of things and more Coffee with Timothy Jordan

| 0 comments |

Posted by Laurence Moroney, Developer Advocate

In this episode of Coffee With a Googler, Laurence meets with Developer Advocate Timothy Jordan to talk about all things Ubiquitous Computing at Google. Learn about the platforms and services that help developers reach their users wherever it makes sense.

We discuss Brillo, which extends the Android Platform to Internet of Things embedded devices, as well as Weave, which is a services layer that helps all those devices work together seamlessly.

We also chat about beacons and how they can give context to the world around you, making the user experience simpler. Traditionally, users need to tell you about their location, and other types of context. But with beacons, the environment can speak to you. When it comes to developing for beacons, Timothy introduces us to Eddystone, a protocol specification for BlueTooth Low Energy (BLE) beacons, the Proximity Beacon API that allows developers to register a beacon and associate data with it, and the Nearby Messages API which helps your app sight and retrieve data about nearby beacons.

Timothy and his team have produced a new Udacity series on ubiquitous computing that you can access for free! Take the course to learn more about ubiquitous computing, the design paradigms involved, and the technical specifics for extending to Android Wear, Google Cast, Android TV, and Android Auto.

Also, dont forget to join us for a ubiquitous computing summit on November 9th & 10th in San Francisco. Sign up here and well keep you updated.

Read More..

Empowering students through choice and voice

| 0 comments |


(Cross-posted on the Google for Education Blog.)

Editors note: Jason Markey is the Principal of East Leyden High School and was one of the panel members discussing student empowerment as part of Education on Air last Friday. We received a lot of questions about this topic and the approach at Jason’s school so we asked him to write this blog post to share more.

At Education on Air I connected with amazing educators and leaders, and learned from sessions like Jennie Magiera’s “Power to the pupil,” Michael Fullan’s “Three ways to drive system-wide change,” and Laszlo Bock’s “Making work rule.” These sessions offered everything from system-wide ideas on implementing change to building a culture for our teachers resulting in more successful schools to the steps we can take to further empower our students. I enjoyed speaking on the student empowerment panel on Friday and wanted to share a bit more about our approach at East Leyden High School.

Over the past several years, Leyden has introduced a 1:1 program with one Chromebook per student and Tech Support Internship (TSI) to support our technology initiative and offer real-world learning experiences. Having a 1:1 program means that students now have a direct line to their teachers and administrators. They write emails and Tweets to share their opinions, preferences and questions. We’ve seen our students, with the support of school administration, unite through a hashtag.

I believe that student empowerment is about introducing more choice into the classroom and opening up more opportunities for students to share their voices. My experiences at Leyden have affirmed something I’ve always believed: education, at its core, is about relationship-building and community-building. Students, like everyone else, want to feel that they’re part of a community. They want to be active participants, choosing to learn and think about and discuss the things they find relevant.

Every TSI student pursues an independent learning pathway, with options including computer programming, app development, web design or a project of her choice. TSI students have made the course their own, and often come up with new programs, like a new student orientation to introduce first-year and transfer students to Chromebooks and Google Apps. In addition TSI students volunteer their time for tech support — they’re learning skills that range from troubleshooting to communicating professionally. Here’s a video to give you a flavor of what goes on in TSI.

They also use our school hashtag, #leydenpride, to share news about our school — from athletic successes to club events and academic achievements. Twitter has become a way for us to spread positivity, share and listen, and build community and student ownership. As an example, here’s a student perspective from East Leyden Senior Maja Bulka.

As teachers and administrators, we’ve made a concerted effort to empathize with our students and see through their eyes. We do this in informal ways — through #leydenpride, for instance — as well as through more formal programs. For instance, the assistant principal and I (along with all new teachers) shadow a student for one day each year so we can better understand what it’s like to go straight from gym to an AP calculus test. Aside from shadowing, I spend as much time as I can talking to students and sitting in on classes. If we don’t understand what students have to say, we won’t be able to build the environment to engage, support and empower them.

If you want to hear more ways that educators are empowering students you might want to check out some of the recorded sessions from Education on Air like Jennie Magiera’s session “Moving beyond Genius Hour: empowering students all day” or David Chan’s session “It’s all about students: student tech programs.”

Read More..

The Realtime API In memory mode debug tools and more

| 0 comments |

Posted by Cheryl Simon Retzlaff, Software Engineer on the Realtime API team

Originally posted to the Google Apps Developer blog

Real-time collaboration is a powerful feature for getting work done inside Google docs. We extended that functionality with the Realtime API to enable you to create Google-docs style collaborative applications with minimal effort.

Integration of the API becomes even easier with a new in memory mode, which allows you to manipulate a Realtime document using the standard API without being connected to our servers. No user login or authorization is required. This is great for building applications where Google login is optional, writing tests for your app, or experimenting with the API before configuring auth.

The Realtime debug console lets you view, edit and debug a Realtime model. To launch the debugger, simply execute gapi.drive.realtime.debug(); in the JavaScript console in Chrome.

Finally, we have refreshed the developer guides to make it easier for you to learn about the API as a new or advanced user. Check them out at https://developers.google.com/drive/realtime.

For details on these and other recent features, see the release note.

Read More..

Working better together – a study of innovation and collaboration at work

| 0 comments |


Editors note: Today we share a few of the most enlightening insights from our study on the impact of collaboration and innovation on a company’s success. Read on for some highlights of what we learned from business leaders at companies of all sizes and industries, then check out the full report here.

As a culture, and in business, we’ve become increasingly conscious of the positive impact of collaboration, group interaction and free exchange of information. And with the word “social” tied to many of the ways we now spend our time — social media, social apps, social gaming, social software — we’re often reminded of the power of connecting and sharing.

The numbers reflect this trend. Over the last decade, Google search volume for the term “social collaboration” has grown globally by more than 300 percent, while interest for the term “social innovation” has jumped more than 200 percent. And the money trail is headed in the same direction: business leaders are directing focus and budget on tools and strategies that foster collaboration.

So how exactly does collaboration stack up against other business objectives in the eyes of today’s business leaders? We teamed up with Raconteur to find out. We surveyed senior staff and C-suite executives at 258 North American companies of all sizes and industries about a wide range of business concerns, from changes that impact profitability, to barriers and drivers of innovation, to the most formidable organizational threats they’re facing, to the tools they’re using to address their challenges. Here’s what those business leaders told us.

Collaboration is good business


Our research shows that the benefits of collaboration extend far beyond the success of any single project. An overwhelming 73% of business leaders said their organization would be more successful if employees could work in more flexible and collaborative ways. In fact, they tell us that “employees working together more collaboratively in person” is the number one factor impacting profitability.

Another eye-opening discovery was that collaboration and employee happiness go hand in hand: 88% of business leaders who believe their company fosters a culture of knowledge sharing and collaboration also say employee morale and job satisfaction are high.

Business leaders also told us that the most serious people management-related threats to organizations are failure to attract enough talent (25%), inability to retain the best talent (18%), and concerns about a disengaged workforce (14%). While we haven’t proven a direct causation, it appears that a culture of collaboration could potentially help address these threats by creating a more desirable work environment.

Who can spark change?


While business leaders look to departments across the organization for innovation and collaboration, they consider IT the greatest changemaker. Twenty-six percent named IT the leading department for driving innovation, and 28% named IT the department that best collaborates with internal and external teams. So we weren’t surprised when leaders also told us that investing in technology, which IT manages, has the biggest impact on knowledge sharing and collaboration. We saw that companies of all sizes rely on IT and technology for the tools to share, innovate and transform.

Business teams with access to the right technologies and tools and the support of IT and leadership can work better together, with greater mobility. And this paves the way for a collaborative culture that may bring a host of benefits, including greater profitability, happier employees and more consistent innovation. We may continue to be surprised by what results when teams truly sync.

See the full report on collaboration here.
Read More..

Docs Sheets and Forms add ons now open to all developers

| 0 comments |

Posted by Saurabh Gupta, Product Manager

Back in 2014, we introduced add-ons for Google Docs, Sheets, and Forms in developer preview. Since then, the developer community has built a wide variety of features to help millions of Docs, Sheets and Forms users become more productive. Over the last few months, we launched a number of developer-friendly features that made it easier to build, test, deploy and distribute add-ons. Some key capabilities include:

  • Ability to publish add-ons in Google Apps Marketplace
  • Ability to bundle your add-on with existing Apps Marketplace listing
  • Availability of Apps Script triggers in add-ons
  • Testing tools for add-ons
  • Using standalone scripts to publish add-ons
  • Option to use your own Google Developers console project
  • Iframe sandbox mode for faster UI

With these features under our belt, we are ready to graduate add-ons out of developer preview. Starting today, any developer can publish an add-on. To ensure users find the best tools for them, every new add-on will undergo a review for adherence to our guidelines before it’s available in the add-ons store.

We can’t wait to see what you will build!

Read More..