Showing posts with label to. Show all posts
Showing posts with label to. Show all posts

Because its gotta be super easy to find your files

| 0 comments |


(Cross-posted on the Google Drive Blog.)

When you store important files in Google Drive they’re not only safe, they’re accessible from any device. And finding them again from any device should be super easy so we’re rolling out a new search experience to get you better results — even faster.

Drive lets you search across all your files, regardless of the device they came from. To make that easier, you can use these new ways to find your files:
  • Narrow your search to a file type from the search box on Android, iOS, and the web.
  • Open advanced search instantly from the search box.
  • Access recent files or search Drive from the home screen using 3D Touch on iOS.
  • Search Drive using the iOS search bar without opening the Drive app.
Several behind-the-scenes improvements give your search queries even better results than they did before. And to get more specific results, anyone can now do the following:
  • Search for shared files by file owner using their name or email address.
  • Use advanced search options like the date a file was modified, words it contains, or who it was shared with.
This is all part of an ongoing effort to make Drive the easiest place to find your files. Look for these features as they roll out in the coming weeks.
Read More..

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..

3 2 1 Code in Inviting teens to contribute to open source

| 0 comments |

Code-in 2014 logo

We believe that the key to getting students excited about computer science is to give them opportunities at ever younger ages to explore their creativity with computer science. That’s why we’re running the Google Code-in contest again this year, and today’s the day students can go to the contest site, register and start looking for tasks that interest them.


Ignacio Rodriguez was just 10 years old when he became curious about Sugar, the open source learning platform introduced nationally to students in Uruguay when he was in elementary school. With the encouragement of his teacher, Ignacio started asking questions of the developers writing and maintaining the code and he started playing around with things, a great way to learn to code. When he turned 14 he entered the Google Code-in contest completing tasks that included writing two new web services for Sugar and he created four new Sugar activities. He even continued to mentor other students throughout the contest period.  His enthusiasm for coding and making the software even better for future users earned him a spot as a 2013 Grand Prize Winner.


Ignacio is one of the 1,575 students from 78 countries that have participated in Google Code-in since 2010. We are encouraging 13-17 year old students to explore the many varied ways they can contribute to open source software development through the Google Code-in contest. Because open source is a collaborative effort, the contest is designed as a streamlined entry point for students into software development by having mentors assigned to each task that a student works on during the contest. Students don’t have to be coders to participate; as with any software project, there are many ways to contribute to the project.  Students will be able to choose from documentation, outreach, research, training, user interface and quality assurance tasks in addition to coding tasks.


This year, students can choose tasks created by 12 open source organizations working on
disaster relief, content management, desktop environments, gaming, medical record systems for developing countries, 3D solid modeling computer-aided design and operating systems to name a few.  


For more information on the contest, please visit the contest site where you can find the timeline, Frequently Asked Questions and information on each of the open source projects students can work with during the seven week contest.


Good luck students!

By Stephanie Taylor, Open Source Programs
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..

Redefining what it means to go to school in New York

| 0 comments |

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

Editors note: New York is seeing great success with Google for Education. We talked to educators and administrators to reflect on how technology has changed what it means to teach and learn in New York. From group projects to collaborative lesson plans to online assessments, technology has improved the learning experience for students across the state. To learn more about Google’s solutions for Education, join the webinar with Amherst Central School District today at 2pm ET / 11am PT.

Learning isn’t just about listening to a lecture or reading a textbook. Similarly, educational transformation isn’t just about introducing technology. It’s about encouraging students to think differently, work together and make their education personal. Schools in New York are giving students more freedom and flexibility to learn and collaborate with the help of tools like Google Apps for Education, Chromebooks and Google Classroom. We’re highlighting a few ways New York schools are transforming their classrooms and benefiting from technology:




Enabling teachers to think outside the box


At Massapequa Public Schools (case study), teachers are providing students with a variety of learning resources, from articles and text-based guides to videos and audio content. For example, when students were studying Pythagorean theorem in math class, the teacher filmed a video showing students the math concept, a2 + b2 = c2, so they could reference the information from home. When students have access to digital learning materials at home, they’re able to learn anytime, anywhere.

With Google for Education, students have access to learning resources anytime, anywhere. Says Bob Schilling, executive director for assessment, student data and technology services at Massapequa Public Schools: “Students watch videos and access their teacher’s resources at home in order to be introduced to concepts, then spend class time applying those concepts in authentic experiences. That changes the value of a 40-minute class period.”


Getting moms and dads involved in education 


Amherst Central Schools (case study) wants parents to be a bigger part of their children’s learning and is using technology to get them more involved. With Google Apps for Education and Google Classroom, parents can see whether their child has started a project or needs a nudge. Students access their work wherever they are and can share progress with their families. For example, Jake, a third grader, shared his presentation about Canadian culture and history with his parents as he worked on the assignment so they could see what he was learning.

Teachers also create instructional videos to help parents take on the role of the teacher at home. While Michael Milliman, grade 5 math teacher at Smallwood Drive Elementary School, taught students a complex problem, parents could reference the 30-second video that Milliman created. “Learning is meant to be a social and collaborative process,” says Anthony Panella, assistant superintendent of curriculum and instruction at Amherst Central Schools. The district is helping extend the social aspect of learning to include parents.


Teaching students technology and teamwork skills for the future 


Rochester City School District’s (case study) main goal is to teach students skills that they can use during their education, in their careers and beyond. Many students don’t have access to technology at home, so Rochester City School District is teaching them how to use technology. And since students need to know how to work with others regardless of the line of work they pursue, teachers are also helping students learn teamwork by assigning group projects aided by collaboration tools. For example, fifth grade students collaborated in person with their peers on a biome project and provided feedback to their teammates using the chat and commenting features in Google Docs.

Schools continue to provide students with innovative online learning resources that help students learn more and teachers personalize education. Check out the schools’ stories and register for the webinar with Amherst Schools happening today to learn more.

We’ve heard great stories from many of you about how you’re using technology to do amazing things in your schools, so were going across the U.S. to see for ourselves! Check out the map below to see where we’ve been. We’d love to hear what’s happening in your state, so please share your story on Twitter or Google+ and tag us (@GoogleForEdu) or include the #GoogleEdu hashtag.


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..

Celect brings science to the art of retail merchandising

| 0 comments |


(Cross-posted on the Google Cloud Blog.)

Editors note: Today’s guest blog comes from Devavrat Shah, Chief Scientist and Co-founder of Celect, which helps retailers understand buying patterns and customer choices.

Retailers spend a lot of time and money trying to figure out what people will buy and when, online or offline. Many retailers see this as an art, but at Celect, we want to add science to this process. The answer lies in what we call the “Choice Engine,” which gathers data on what customers buy and don’t buy – instead of just simply finding out how they rate products they like. Think of the shopping process this way: If someone browses black shirts and red shirts online, but puts a blue shirt in the shopping cart, they’re giving you comparative information. Celect can take these choices and suggest which products a retailer should stock more or less of – as well as predict when price becomes a factor in a shopper’s purchase decision.

My cofounder Vivek Farias and I, both professors at MIT, decided to put our brains together and see if we could bring our technology to the commercial market. We knew our technology was great, so we bootstrapped a team together – two professors, two engineers, and one person on the ground doing business development. Our biggest challenge was scaling our technology even though we had an extremely small development team. We didn’t want to run a system when we didn’t yet have clients.

Fortunately for Celect, we met the criteria for Google Cloud Platform for Startups, giving us $100,000 in credit for Google Cloud Platform products and easy access to engineers and architects to help us make the most of our infrastructure. We quickly found out how good Google’s documentation is, which matters when you’re a startup that needs to move quickly. We get to tap into the expertise of people who’ve spent 10 years building cloud infrastructure, and they know it very well. The web user interface of Google Cloud Storage is very intuitive to navigate, and gives us an overall view of the system and the resources in use.

We run our workloads on Google Compute Engine, which operates easily with our commodity Linux machines – another way we save money as a startup. Google Cloud Platform also gives us peace of mind about security. Retailers trust us with highly proprietary information, and they’re very sensitive to data breaches. When they hear we rely on Google, retailers know we’re adhering to strong security standards.

Since we’re going after large retailers for our product, we need the scalability to store massive datasets. We can create new data stores in Google Cloud Platform so that every client’s data is siloed from the others. It’s the perfect on-demand infrastructure for a company like ours that needs to run lean for the first couple of years.

At this stage in our growth, we want to make very efficient use of every dollar we spend. The past year has been very successful for us, with some great retailer brands signed on and a threefold growth in employees. Google Cloud Platform will grow with us, while helping us develop our products better and faster.

- Posted by Devavrat Shah, Chief Scientist and Co-founder, Celect
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..

How do we prepare the students of today to be tomorrow’s digital leaders

| 0 comments |

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

Editors note: To understand the extent to which the skills taught in education systems around the world are changing, and whether they meet the needs of employers and society more widely, Google commissioned research from The Economist Intelligence Unit (EIU). The EIU surveyed senior business executives, teachers and students. The key findings of the survey and the main issues raised by educators and students were discussed by a diverse panel at the opening session of Education on Air, the free online conference from Google on May 8th. Read the full report here.

With rapidly evolving business needs, technological advances and new work structures, the skills that will be needed in the future are shifting. In response to these changes, policymakers, educators and experts around the world are rethinking their education systems.

During Education on Air a panel of education experts participated in a discussion aimed at understanding how to best adapt education systems to the skills needs of the future:

  • Ken Shelton, Educator, Trainer & Google Certified Teacher, USA 
  • Jaime Casap, Global Education Evangelist, Google, USA 
  • Jouni Kangasniemi, Special Adviser to the Ministry of Education & Culture, Finland 
  • Nicole, a secondary student from Isle of Portland Aldridge Community Academy, UK 
  • Zoe Tabary, Editor, Economist Intelligence Unit, UK 

The panel considered how to best help students learn and adopt the skills and attitudes that employers in the increasingly digital and networked economy require.

According to the EIUs research report, sponsored by Google for Education and presented by EIU editor Zoe Tabary during Education on Air, problem-solving, teamwork and communication are the most needed skills in the workplace.
                   This video provides a short summary of the report from the Economist Intelligence Unit.

But it seems that education systems have not yet responded to this demand; only a third of executives say they’re satisfied with the level of attainment of young people entering the workplace. Even more striking is that 51% of executives say a skills gap is hampering their organisations performance. Students and educators paint a similar picture.

Panelists echoed the EIU research by suggesting that education systems often lack the capacity to teach a wider range of skills—namely problem-solving, digital literacy, leadership and creativity—that would complement more conventional skills, such as numeracy and literacy. Time constraints, lack of flexibility and a reluctance to innovate with the curriculum are a few of the causes mentioned. For Jouni Kangasniemi, senior advisor to Finlands Ministry of Education and Culture, the key question was how to really embed these skills throughout the curriculum rather than just add them to the mix of skills and subjects.

Progress is being made, however, and panelists shared examples of how the education system is adapting to changing demands. Examples from the Finnish education system, presented by Mr Kangasniemi, suggest that learning results in this area improve when teachers have a certain degree of freedom and trust to adjust the curriculum to the learning styles of the students. Teaching becomes more personalised and student-focused, and supports learning, with questions exchanged collaboratively between teachers and students rather than teachers simply presenting answers and facts.

Technology also has a central role in skills development. According to the EIU research, 85% of teachers report that IT advances are changing the way they teach—but only 23% of 18-25-year-olds think their education system is very effective at making full use of the technologies now available. With the pace of technological change accelerating, education systems should respond by offering training and platforms for teachers that effectively use technology and better equip students for both today’s and tomorrow’s workplace.

Jaime Casap, global education specialist at Google, stressed the need to focus on teaching mindsets, rather than skills. "Skills can become obsolete—there is a finite timeline when they can be used or applied," Casap argues, whereas an inquisitive approach that seeks to solve problems will always be necessary, no matter what issues humanity will need to grapple with in the future. The question is how we can build a culture and environment—and education models—that prepare students to meet any challenge as future digital leaders.

Read the full report: “The skills agenda: Preparing students for the future.”


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..

6 tips to create innovate from the CEO of IDEO

| 0 comments |


Editors note: Today, we hear from Tim Brown, CEO of IDEO and author of “Change by Design.” As a leader of the global design and innovation firm, with clients like IKEA, Joie De Vivre Hotels and NBC’s Today Show, Tim focuses on finding pathways to creativity. Watch an extended interview with Tim from our interactive event #Atmosphere15 here.

I remember the first time I walked into a bookstore and noticed the books facing forward with handwritten reviews dangling underneath. It made deciding which book to buy much easier compared to scanning rows of book spines. That’s creativity to me: looking beyond what’s conventional and finding a different and better way. For me, life’s much more enjoyable and rewarding when I keep wondering how things could be different from the way they are now. Here are some ways that I keep my mind open to creative breakthroughs.
  1. Challenge assumptions. Ask why things happen the way they do and why the world works the way it does. Unless we’re curious, it’s very hard to come up with new ideas.

  2. Think of the creative process as starting with a question rather than an answer. Rather than the standard creative assertion, “I’ve got an idea,” the key is to start with a really interesting question. Go home, go back to the office and allow yourself to wonder. When you have interesting questions, you’ll get to interesting solutions.

  3. Reframe problems by asking different questions. If the obvious question is “How do I solve this thing that’s bugging me?” reframe it to ask “Why do I do that thing at all?” or “Is there a better way to approach that thing in the first place?” The key is to ask the right questions with enough room to inspire new ideas. If you ask too narrow a question, you get an obvious answer.

    For example, instead of asking “How do we make this chair more comfortable?” we can ask more broadly, “How do we sit in different ways in order to have a better conversation?” We might not even need the chair at all. The idea is to frame the question so that it gives you enough space to go to interesting places.

  4. Show creative confidence. We all have a natural ability to spur creative ideas. The important next step is to find the courage to act on those ideas. People get hung up on the idea of failure, but failure is an essential mode for learning what works and what doesn’t.

  5. Use a creative mindset, whatever your role. We live in a world where change is happening everywhere and nothing stays the same for long, so we need to bring creativity to everything we do. On a personal level, it’s rewarding to figure out how things could be different, and professionally, it keeps us competitive. It doesn’t matter what role you play in an organization — there’s always room for improvement in the way we do things.

  6. Be observant. Most of us have powerful devices at our fingertips that allow us to easily and extensively observe the way people work and live. Take photos all the time, and share those pictures at work, because observing how people do things now is the start of figuring out how to do things differently.

To hear more from Tim, watch his full recorded session at our #Atmosphere event. And to see more about creating a culture of innovation, visit the Google Apps Insights page.
Read More..

Reminder to migrate to OAuth 2 0 or OpenID Connect

| 0 comments |

Posted by William Denniss, Product Manager, Identity and Authentication

Over the past few years, we’ve publicized that ClientLogin, OAuth 1.0 (3LO)1, AuthSub, and OpenID 2.0 were deprecated and would shut down on April 20, 2015. We’re moving away from these older protocols in order to focus support on the latest Internet standards, OAuth 2.0 and OpenID Connect, which increase security and reduce complexity for developers.

The easiest way to migrate to these new standards is to use the Google Sign-in SDKs (see the migration documentation). Google Sign-in is built on top of our OAuth 2.0 and OpenID Connect infrastructure and provides a single interface for authentication and authorization flows on Web, Android and iOS.

If the migration for applications using these deprecated protocols is not completed before the deadline, the application will experience an outage in its ability to connect with Google (possibly including the ability to sign in) until the migration to a supported protocol occurs. To avoid any interruptions in service, it is critical that you work to migrate prior to the shutdown date.

If you need to migrate your integration with Google:

  • Migrate from OpenID 2.0 to Google Sign-in
  • Migrate from OAuth 1.0 to OAuth 2.0
  • For AuthSub and ClientLogin, there is no migration support. You’ll need to start fresh with OAuth 2.0 and users need to re-consent

If you have any technical questions about migrating your application, please post questions to Stack Overflow under the tag google-oauth or google-openid.

1 3LO stands for 3-legged OAuth: Theres an end-user that provides consent. In contrast, 2-legged (2LO) correspond to Enterprise authorization scenarios: organizational-wide policies control access. Both OAuth1 3LO and 2LO flows are deprecated.

Read More..

Basic steps for upgrading source code from SDK 1 5 to 2 1 using Eclipse IDE

| 0 comments |
This is a step by step guide to upgrade one’s source code that was developed for an earlier version of android SDK, as is to work on a new version of SDK installed on your development environment



Pre-requisites:
1. You are using Eclipse IDE - Ganymede
2. You have installed SDK 2.1 on your machine
3. You have upgraded ADT to 0.96 on Eclipse IDE
4. You have pointed the Eclipse IDE to the new SDK 2.1
5. You have changed the default JDK compiler version on Eclipse to 1.6
6. You have created an Android Virtual Device (AVD) that uses the SDK 2.1 / Google API


NOTE: Upgrading SDK and Eclipse installations itself is provided in detail at http://developer.android.com/sdk/index.html & http://developer.android.com/sdk/installing.html


For each project that you have in your eclipse workspace that was written for the earlier version of SDK, you need to do the following for basic upgrade (this does not include the upgrade of APIs that have be deprecated):

Step-by-step guide
1. Right click the project and go to Project Properties -> Android
2. You wil see tha right pane showing the ‘Project Build Target’
3. In this pane you will see either or both: ‘Android 2.1’ & ‘Google APIs’ depending on what you chose to install when upgrading your ADT to 0.96
4. Select Google ‘Android 2.1’ or ‘Google API” whichever is required by your earlier project (note you might have used only Android 1.5 for most projects. You would need Google API only for those projects that use google maps)
5. Then, go to the ‘Project’ menu and click on ‘clean’. Note, this is an optional step. You may have to do this if you get the error ‘Conversion to Dalvik format failed with error 1’.
6. Then, build the project by going to ‘Project’ -> ‘build’
7. You are done. You can now run the earlier Android application using the new SDK 2.1


Read More..

Chromebox now bringing face to face meetings to bigger spaces

| 0 comments |


When we launched Chromebox for meetings last year, we wanted to help teams meet face to face, room to room, no matter where they’re sitting. Since then, a variety of companies like Xero and the Climate Corporation have chosen Chromebox for meetings to shrink the distance between remote offices.

Today, we’re expanding to bigger spaces. Chromebox for meetings now supports larger meeting rooms, so groups of up to twenty can seamlessly sync with colleagues around the world and still feel like they’re in the same place. Companies of all sizes, including Whirlpool Corporation, Netflix and Foursquare have tested Chromebox for meetings for the large room and said their users have enjoyed the video quality of the HD meetings.

“Expanding Chromebox for meetings to larger rooms continues to improve Whirlpool Corporations face-to-face collaboration across our global meeting rooms, and with the price point and simple installation, were able to bring room-to-room video conferencing to many more people,” says Troy McKim, Sr. Manager, Collaboration at Whirlpool Corporation. “In addition, Googles continuous enhancements to Chrome device management makes it easy for my team to remotely monitor the status of our global Chromebox for meetings units.”

New hardware to support larger rooms. The new Chromebox for meetings bundle equips rooms with the same instant face-to-face meeting functionalities as the original bundle, but with additional hardware to support larger rooms. New hardware includes:

  • Pan-tilt-zoom camera: USB-enabled 1080 HD PTZ delivers professional video quality for larger conference spaces.
  • 2x microphone and speaker: Capture conversations in longer rooms with an additional mic and speaker.
  • Enhanced dual screen support: Now you can connect two monitors to the PTZ camera and dual microphone and speakers, so your participants can get the richest video conferencing experience.

Better screenshare experience. Full-screen mode in Chromebox for meetings allows for better presentations. This is now available with any sized meeting room powered by Chrome.

More management controls. We’re adding more Chrome management controls to the admin panel. Admins can remotely monitor the health of their Chrome devices in one simple view to see which devices are online or offline. Chrome management also lets admins delegate administration of devices to other users besides the super admin.

Managing and deploying Chromebox for meetings for the large room is still just as simple. Chromebox for meetings runs on Chrome OS, which means it’s fast, secure and easy to manage. And setup and deployment for larger rooms is still just as easy — with Chrome management, admins can deploy devices in minutes and remotely manage tens of thousands of devices.

Chromebox for meetings for the large room is available in the US at $1999, which includes the first year’s management and support fee, with everything you need to get your bigger spaces going — just bring your own display(s). That means that you can get HD video meetings in many more meeting rooms at one-tenth the cost of legacy video conferencing solutions. And later this year, we’ll be expanding availability to different regions.

You can learn more about Chromebox for meetings on our website.
Read More..

Scan Reachable IP to discover devices in network

| 0 comments |

This example, scan a range of IPs, to check if it is reachable, in turn to discover connected devices in the same network.


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

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

private Button btnScan;
private ListView listViewIp;

ArrayList<String> ipList;
ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnScan = (Button)findViewById(R.id.scan);
listViewIp = (ListView)findViewById(R.id.listviewip);


ipList = new ArrayList();
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, ipList);
listViewIp.setAdapter(adapter);

btnScan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ScanIpTask().execute();
}
});

}

private class ScanIpTask extends AsyncTask<Void, String, Void>{

/*
Scan IP 192.168.1.100~192.168.1.110
you should try different timeout for your network/devices
*/
static final String subnet = "192.168.1.";
static final int lower = 100;
static final int upper = 110;
static final int timeout = 5000;

@Override
protected void onPreExecute() {
ipList.clear();
adapter.notifyDataSetInvalidated();
Toast.makeText(MainActivity.this, "Scan IP...", Toast.LENGTH_LONG).show();
}

@Override
protected Void doInBackground(Void... params) {

for (int i = lower; i <= upper; i++) {
String host = subnet + i;

try {
InetAddress inetAddress = InetAddress.getByName(host);
if (inetAddress.isReachable(timeout)){
publishProgress(inetAddress.toString());
}

} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

return null;
}

@Override
protected void onProgressUpdate(String... values) {
ipList.add(values[0]);
adapter.notifyDataSetInvalidated();
Toast.makeText(MainActivity.this, values[0], Toast.LENGTH_LONG).show();
}

@Override
protected void onPostExecute(Void aVoid) {
Toast.makeText(MainActivity.this, "Done", Toast.LENGTH_LONG).show();
}
}

}


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" />

<Button
android_id="@+id/scan"
android_layout_width="match_parent"
android_layout_height="wrap_content"
android_text="Scan"/>
<ListView
android_id="@+id/listviewip"
android_layout_width="match_parent"
android_layout_height="wrap_content"/>
</LinearLayout>


Permission of "android.permission.INTERNET" is needed in AndroidManifest.xml
 <uses-permission android_name="android.permission.INTERNET"/>



Related:
- Java version run on Raspberry Pi - scan connected IP in the same network

Read More..

The first ever Chrome Live Coming to a screen near you on April 22nd

| 0 comments |

Chrome was a big bet when it was introduced six years ago and has since grown to provide a simpler, speedier and safer web for more than 750 million users around the world. Today, Chrome is an integrated hardware and software solution for work that meets the challenges of and innovates upon traditional platforms.


Join us online April 22nd at 10:00am PDT at Chrome Live, our first-ever online event, to hear from Googlers, technical experts and our customers about how Chrome is meeting the needs of a more mobile, social and cloud-oriented workplace. At Chrome Live, you’ll:

  • Have a front-row seat to two keynotes from:
    • Amit Singh, President of Google for Work, who’ll share how Chrome for Work is part of the transformational agenda of many businesses today. He’ll also be announcing a number of new products coming to the Chrome for Work family.
    • Rajen Sheth, Director of Product Management for Chrome for Work, who’ll discuss how devices have revolutionized the way we work. He’ll also uncover a few pathways of our top-secret roadmap and may have a few surprises in store.
    • Learn how the web, meeting technology and digital displays are being reimagined with Chrome for Work product managers Saswat Panigrahi and Vidya Nagarajan
    • See live deployment and management demos by Chrome team experts
    • Hear from IT leaders at Netflix, Pinterest and Chico’s about integrating devices with the cloud and enabling IT admins at top companies to streamline day-to-day operations
    • Get a sneak peek at the team’s plans to continue innovating and addressing new needs in the market

    To be a part of Chrome Live, all you need is a comfortable seat, an Internet connection and a computer, tablet or phone; pants are optional but recommended. You’ll be able to interact with Google experts and ask questions.

    Register now to learn all this and more at the first Chrome Live event on Wednesday, April 22nd at 10:00am PDT. And even if you can’t attend on the scheduled dates, be sure to register to stay up to date on all things Chrome. Feel free to share your thoughts, impressions and questions using #chromelive15 on social media.
    Read More..

    How to Generate a kernel log after random reboot

    | 0 comments |
    Once in a while, a software bug in the kernel will cause a random reboot, so in order to help kernel developers to fix and troubleshoot the reboots, a kernel log need to be submitted to the developer for further analysis and hopefully lead to a bug fix.

    Most Android kernels have "RAM Consoles" to save the necessary kernel logs immediately after reboot in the RAM.  The users can then retrieve this RAM log on a subsequent reboot to submit to kernel developers. Here is a quick tour on how to do that.


    [ Using ADB ]
    1. adb shell
    2. su
    3. cat /proc/last_kmsg > /sdcard/last_kmsg.txt
    4. exit
    5. exit
    6. adb pull /sdcard/last_kmsg.txt
    File last_kmsg.txt will be located in the same location as adb.exe executable.


    [ Using android terminal app ]
    1. su
    2. cat /proc/last_kmsg > /sdcard/last_kmsg.txt
    3. exit
    4. exit
    5. adb pull /sdcard/last_kmsg.txt
    File last_kmsg.txt will be located on your SD-card.


    [ Using Root Explorer / ES Explorer with Root ]
    1. go to /proc folder
    2. copy last_kmsg to /sdcard/
    3. rename last_kmsg to last_kmsg.txt
    File last_kmsg.txt will be located on your SD-card.

    The best method to share the last_kmsg.txt content is to upload it to pastebin.com and send a link to the developer.

    Source: faux123 (Google +)

    Have any questions or comments? Feel free to share! Also, if you like this article, please use media sharing buttons (Twitter, G+, Facebook) below this post!
    Read More..

    Teaching teams New ways to work together in Classroom

    | 0 comments |


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

    We built Classroom to help teachers spend less time on paperwork, and more time with their students. Since we launched, we’ve also heard from teachers and professors that they’d love to be able to use Classroom to collaborate with other educators.

    Teach together: Whether it’s a substitute, a teacher’s aide or a department chair, almost every teacher and professor is supported by other educators. So starting today, you can have multiple teachers in a Classroom class. To try it out, just go to your class’s About page and click “Invite teacher.” Additional teachers can do almost everything the primary teacher can do: they can create assignments or announcements, view and grade student submissions, participate in the comments on the class “stream,” invite students and even get email notifications – everything except delete the class.

    Dani Raskin, a special education teacher at Clarkstown High School South in New York, has been helping us test out this new feature. “It’s really important for me to be able to work closely with other teachers who also teach my students, but we don’t always have prep time together,” Dani said. “We are now able to split the workload: both of us can provide direct feedback via comments and grading. It really fosters an authentic sense of teamwork and collaboration."


    Prep for your classes in advance: We know how much planning goes into every class you teach, and now we’re making it a little bit easier to do some of that planning in Classroom. You can save announcements and assignments as “drafts” and wait to send them to students until you’re ready. And similar to Gmail, any time you start creating a new announcement or assignment, it’ll be automatically saved as a draft. This works with multiple teachers as well, so all the teachers in a class can collaboratively prep assignments in advance, and even make changes to each other’s posts on the fly.
    We’re also making some other updates you’ve told us will make Classroom easier to use:

    • Autosaved grades: If you can’t get all of your assignments graded in one session, but still want to return them to students at the same time, grades will now be auto saved as you enter them. You can choose when to return them to students.
    • Better notifications: Teachers and students will now receive email notifications when a private comment is left on an assignment. 

    For schools here in North America and in Europe, we know you’re working hard as you round the corner into the end of the year. We are, too, and we’ll have more Classroom news for you before school’s out for summer.
    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..