<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-596098824972435195</id><updated>2019-09-28T19:21:07.989-07:00</updated><category term="Google I/O" /><category term="apis" /><category term="open source" /><category term="Fridaygram" /><category term="cloud" /><category term="android" /><category term="app engine" /><category term="chrome" /><category term="developer" /><category term="faster web" /><category term="events" /><category term="html5" /><category term="cloud platform" /><category term="featured" /><category term="google apps" /><category term="google io" /><category term="javascript" /><category term="Google" /><category term="developers" /><category term="analytics" /><category term="mobile" /><category term="oauth" /><category term="weekly roundup" /><category term="apps script" /><category term="machine learning" /><category term="maps" /><category term="TensorFlow" /><category term="api" /><category term="java" /><category term="Google APIs" /><category term="bigquery" /><category term="games" /><category term="google code project hosting" /><category term="youtube" /><category term="actions on google" /><category term="conferences" /><category term="google summer of code" /><category term="G Suite" /><category term="Who's at Google I/O" /><category term="google code" /><category term="googlenew" /><category term="hackathon" /><category term="podcast" /><category term="video" /><category term="gwt" /><category term="opensocial" /><category term="python" /><category term="security" /><category term="Firebase" /><category term="#io14" /><category term="gdata" /><category term="gdl" /><category term="Udacity" /><category term="google+" /><category term="openid" /><category term="VR" /><category term="gmail" /><category term="google assistant" /><category term="page speed" /><category term="gsoc" /><category term="apps" /><category term="calendar" /><category term="chrome web store" /><category term="chromium" /><category term="dart" /><category term="google visualization api" /><category term="google web toolkit" /><category term="GDD11" /><category term="assistant" /><category term="devfest" /><category term="gadgets" /><category term="ios" /><category term="launchpad" /><category term="social" /><category term="Artificial Intelligence" /><category term="ajax" /><category term="contest" /><category term="education" /><category term="event" /><category term="google developer day" /><category term="google developer days" /><category term="google gears" /><category term="AI" /><category term="Google Drive" /><category term="coffee with a googler" /><category term="flutter" /><category term="google data apis" /><category term="google storage" /><category term="googleio" /><category term="prediction api" /><category term="Drive" /><category term="Project Tango" /><category term="accessibility" /><category term="ajax search" /><category term="code review" /><category term="develop" /><category term="google apps marketplace" /><category term="#io15" /><category term="AdMob" /><category term="IoT" /><category term="adsense" /><category term="gdg" /><category term="google cast" /><category term="google chart api" /><category term="google compute engine" /><category term="google developers" /><category term="linux" /><category term="performance" /><category term="speakers" /><category term="startup" /><category term="web performance" /><category term="3d" /><category term="Gmail APIs" /><category term="Google Cloud Platform" /><category term="africa" /><category term="buzz" /><category term="code jam" /><category term="design" /><category term="google checkout" /><category term="google docs" /><category term="mod_pagespeed" /><category term="native client" /><category term="polymer" /><category term="sdk" /><category term="search" /><category term="AR" /><category term="Ads" /><category term="Google Sheets API" /><category term="Google Wave" /><category term="IO19" /><category term="accelerator" /><category term="beacons" /><category term="cloud sql" /><category term="commerce" /><category term="enterprise" /><category term="google chrome" /><category term="google cloud storage" /><category term="google play services" /><category term="guest post" /><category term="guice" /><category term="html" /><category term="igoogle" /><category term="maps apis" /><category term="material design" /><category term="oss devs" /><category term="sign-in" /><category term="student programs" /><category term="students" /><category term="#io2012" /><category term="#io2013" /><category term="AIY" /><category term="AIY Projects" /><category term="ARCore" /><category term="Google Drive SDK" /><category term="Google Slides API" /><category term="I/O" /><category term="Mobile web" /><category term="cardboard" /><category term="cast" /><category term="countdown to I/O 2012" /><category term="css" /><category term="eclipse" /><category term="entrepreneurs" /><category term="gdd07" /><category term="google earth" /><category term="google friend connect" /><category term="grow with google" /><category term="labs" /><category term="orkut" /><category term="scholarship" /><category term="standards" /><category term="startups" /><category term="translate" /><category term="visualization" /><category term="webmaster" /><category term="wtm" /><category term="#growwithgoogle" /><category term="#io16" /><category term="#io17" /><category term="#io18" /><category term="20% project" /><category term="AMP" /><category term="Edge TPU" /><category term="Firebase Analytics" /><category term="GSuite" /><category term="TensorFlow Lite" /><category term="apache" /><category term="app" /><category term="beacon" /><category term="chrome apps" /><category term="chrome dev summit" /><category term="chrome devtools" /><category term="chrome extensions" /><category term="classes" /><category term="conversations" /><category term="courses" /><category term="font api" /><category term="gdl weekly" /><category term="geolocation" /><category term="google code search" /><category term="google gadgets" /><category term="google mashup editor" /><category term="in-app payments" /><category term="picasa web" /><category term="project hosting" /><category term="prototype" /><category term="small business" /><category term="subversion" /><category term="web fonts" /><category term="women techmakers" /><category term="Auth" /><category term="Certification" /><category term="Coral" /><category term="Datasets" /><category term="Estimators" /><category term="I/O Extended" /><category term="Makers" /><category term="SVG" /><category term="actions" /><category term="apis console" /><category term="app indexing" /><category term="authsub" /><category term="c++" /><category term="chromecast" /><category term="client libraries" /><category term="code for educators" /><category term="community" /><category term="custom search" /><category term="diversity" /><category term="docs" /><category term="feeds" /><category term="gdd09" /><category term="gears" /><category term="google apps api" /><category term="korean" /><category term="machine intelligence" /><category term="maker" /><category term="open web" /><category term="osx" /><category term="pubsubhubbub" /><category term="samba" /><category term="scholarships" /><category term="sidewiki" /><category term="speed" /><category term="virtual reality" /><category term="web" /><category term="#io12" /><category term="#io13" /><category term="Android Things" /><category term="Announcement" /><category term="Blockly" /><category term="Developer Communities" /><category term="Edge TPU Dev Board" /><category term="Europe" /><category term="Go" /><category term="Google Cloud" /><category term="Google Cloud Messaging" /><category term="Google Coral" /><category term="Google Developers Live" /><category term="Google Docs API" /><category term="Google Fonts" /><category term="Google Noto fonts" /><category term="Google Play" /><category term="Google Spreadsheets API" /><category term="Google sheets" /><category term="I/O 2017" /><category term="IO17" /><category term="Sceneform" /><category term="Sheets API" /><category term="actionsongoogle" /><category term="ajax apis" /><category term="android wear" /><category term="announcements" /><category term="atom publishing protocol" /><category term="augmented reality" /><category term="awards" /><category term="browser" /><category term="caption" /><category term="chinese" /><category term="chrome os" /><category term="cloud datastore" /><category term="cloud services" /><category term="cloud storage" /><category term="code-in" /><category term="codelabs" /><category term="compression" /><category term="devart" /><category term="dialogflow" /><category term="discovery service" /><category term="dns" /><category term="documentation" /><category term="dot net" /><category term="fusion tables" /><category term="ghop" /><category term="git" /><category term="google apps for your domain" /><category term="google fit" /><category term="google pay" /><category term="google pay api" /><category term="google web elements" /><category term="identity" /><category term="interviews" /><category term="iphone" /><category term="launchpad accelerator" /><category term="launchpad studio" /><category term="mac" /><category term="machine learning accelerator" /><category term="meetup" /><category term="ml" /><category term="narratives" /><category term="online payments" /><category term="open source blog" /><category term="oreilly" /><category term="picasa" /><category term="play services" /><category term="rails" /><category term="random hacks of kindness" /><category term="research" /><category term="soc" /><category term="speed tracer" /><category term="testing" /><category term="training" /><category term="web components" /><category term="web exponents" /><category term="webgl" /><category term="AIYProjects" /><category term="AdWords" /><category term="Administrative APIs" /><category term="App Development" /><category term="Audio" /><category term="Brotli" /><category term="CardDAV" /><category term="CocoaPods" /><category term="Crash Reporting" /><category term="DevFest18" /><category term="DevFestStories" /><category term="EMEA" /><category term="Edge TPU Accelerator" /><category term="Fabric" /><category term="Firebase Cloud Messaging" /><category term="Fonts" /><category term="GDD" /><category term="Google AR" /><category term="Google Data Studio" /><category term="Google Developer Groups" /><category term="Google Developers Academy" /><category term="Google Slides" /><category term="Google tech talk" /><category term="Hangouts Chat" /><category term="Hangouts Chat API" /><category term="I/O Live" /><category term="India" /><category term="Indie Games Accelerator" /><category term="Issue Tracker" /><category term="KDE 4.0" /><category term="Learning" /><category term="ML Kit" /><category term="MacFuse" /><category term="Machine" /><category term="Moderator" /><category term="MySQL" /><category term="O3D" /><category term="OAuth2" /><category term="Polymer Summit" /><category term="Remote Config" /><category term="Scratch" /><category term="Street View" /><category term="TFLite" /><category term="TPU" /><category term="Test Lab" /><category term="UI" /><category term="Unity" /><category term="Universal App Campaigns" /><category term="University" /><category term="Vim" /><category term="WebP" /><category term="Women Tech Makers" /><category term="advogato" /><category term="android developers" /><category term="apis. charts" /><category term="app indexing api" /><category term="apple" /><category term="asia" /><category term="best practices" /><category term="beta" /><category term="blogger" /><category term="bootcamp" /><category term="building ajax apps" /><category term="caldav" /><category term="campfire one" /><category term="chrome experiment" /><category term="closure tools" /><category term="cloud functions for firebase" /><category term="cloud portability" /><category term="contacts api" /><category term="contextual gadgets" /><category term="crisis response" /><category term="css3" /><category term="custom search api" /><category term="developer expert" /><category term="django" /><category term="doubleclick" /><category term="drupal" /><category term="eddystone" /><category term="email" /><category term="finance" /><category term="gcc" /><category term="geo" /><category term="github" /><category term="goo.gl" /><category term="google assistant sdk" /><category term="google buzz" /><category term="google developers community groups" /><category term="google photos" /><category term="google scholarships" /><category term="google technoloy user groups" /><category term="google tv" /><category term="googledevelopers" /><category term="gtug" /><category term="hamilton" /><category term="hibernate" /><category term="ignite" /><category term="internationalization" /><category term="internet explorer" /><category term="japanese" /><category term="joomla" /><category term="kernel" /><category term="keynote" /><category term="khronos" /><category term="kids" /><category term="kml" /><category term="latitude" /><category term="localization" /><category term="london" /><category term="material" /><category term="mozilla" /><category term="myspace" /><category term="mythtv" /><category term="nearby" /><category term="notifications" /><category term="nss" /><category term="objective-c" /><category term="open data" /><category term="opengl" /><category term="oscon" /><category term="payment handler" /><category term="payment request api" /><category term="payment web standard" /><category term="payments" /><category term="programming" /><category term="python sprint" /><category term="reader" /><category term="safety and security" /><category term="salesforce" /><category term="schedule" /><category term="screencast" /><category term="sessions" /><category term="shindig" /><category term="sites api" /><category term="sketchup" /><category term="soap search api" /><category term="spdy" /><category term="speech" /><category term="storage" /><category term="subscribed links" /><category term="sxsw" /><category term="tasks API" /><category term="themes" /><category term="tools" /><category term="tutorials" /><category term="tv" /><category term="ubuntu" /><category term="videos" /><category term="web animations api" /><category term="web designer" /><category term="web platform docs" /><category term="webfonts" /><category term="website optimizer" /><category term="windows" /><category term="yahoo" /><category term="#AIY" /><category term="#GooglePlay #AndroidDevStory #PlayStore #DeveloperConsole #StoreListingExperiments" /><category term="#devfest18 #devfeststories #gdg #googledevelopers #developers #community" /><category term="#freeandopen" /><category term="#io2014" /><category term="+1" /><category term=".app" /><category term=".dev" /><category term="3D face mesh" /><category term="AI Principles" /><category term="AMP Cache" /><category term="API.AI" /><category term="Android Development" /><category term="Android Studio" /><category term="App Invites" /><category term="App dev" /><category term="Application Development" /><category term="Augmented images" /><category term="AutoML" /><category term="Belarus" /><category term="Bluetooth" /><category term="Brazil" /><category term="Build Out" /><category term="BuildOut" /><category term="Bulgaria" /><category term="CPU" /><category term="Cache" /><category term="Chrome OS IO" /><category term="Chrome OS IO19" /><category term="Cloud Anchors" /><category term="Cloud Next" /><category term="Cloud Study Jam" /><category term="Cloud anchor" /><category term="Colaboratory" /><category term="Colt McAnlis" /><category term="Compilers" /><category term="Containers" /><category term="Core ML" /><category term="Croatia" /><category term="Czechia" /><category term="DFP" /><category term="Data Compression" /><category term="Data Visualization" /><category term="Databases" /><category term="Dataset" /><category term="Daydream" /><category term="Developer Culture" /><category term="Developer Keynote" /><category term="Development" /><category term="Docker" /><category term="Ebay" /><category term="Estimator" /><category term="Ethics" /><category term="FCM" /><category term="FCP" /><category term="Fairness" /><category term="Firebase Dynamic Links" /><category term="Flutter 1.2" /><category term="Flutter 1.5" /><category term="Flutter 1.9" /><category term="Flutter Create" /><category term="Flutter Live" /><category term="Flutter at IO" /><category term="Flutter for desktop" /><category term="Flutter for web" /><category term="Follow Us" /><category term="G+" /><category term="GCP" /><category term="GDA" /><category term="GDC17" /><category term="GDE" /><category term="GKE" /><category term="GMTC" /><category term="GPE" /><category term="GPGS C++ Games" /><category term="GPT" /><category term="GWSOP" /><category term="Game Developers Conference" /><category term="Google AI" /><category term="Google Assistant Bluetooth" /><category term="Google Assistant IO" /><category term="Google Assistant IO19" /><category term="Google Brain" /><category term="Google Developer Scholarship" /><category term="Google Developers Groups" /><category term="Google Developers University Consortium" /><category term="Google Developers site" /><category term="Google Groups Settings" /><category term="Google Home Hub" /><category term="Google IOS Android" /><category term="Google Identity Platform" /><category term="Google Maps" /><category term="Google Maps Platform" /><category term="Google Play Developer API" /><category term="Google Registry" /><category term="Google Science Fair" /><category term="Google in Asia" /><category term="Google technology" /><category term="GoogleAssistant" /><category term="GooglePlay" /><category term="Groups API" /><category term="Headset" /><category term="I/O 17" /><category term="IO" /><category term="IO19 Flutter" /><category term="IO2017" /><category term="Image Compression" /><category term="Imara" /><category term="In-app billing" /><category term="Instagram" /><category term="KDE" /><category term="Keras" /><category term="Krakow" /><category term="Kubernetes" /><category term="LatAm startups" /><category term="Leadership" /><category term="LoCo" /><category term="Local Home" /><category term="MDL" /><category term="MIT CSAIL" /><category term="MIT Media Lab" /><category term="MLCC" /><category term="MOOC" /><category term="Marketplace" /><category term="Mexico startups" /><category term="Mobile App Development" /><category term="Mobile Development" /><category term="Mobile World Congress" /><category term="NYT" /><category term="Noto Serif CJK" /><category term="OAuth playground" /><category term="OCaml" /><category term="ODF" /><category term="OOXML" /><category term="Optimization" /><category term="PWA" /><category term="PageSpeed" /><category term="Peer bonus program" /><category term="Poly" /><category term="PowerMeter API" /><category term="Prerender" /><category term="Progressive Web App" /><category term="Project Loon" /><category term="Qualcomm" /><category term="Qualcomm Google" /><category term="Rasberry Pi" /><category term="Responsible AI" /><category term="Reto Meier" /><category term="Rewarded Ads" /><category term="Rewarded Video Ads" /><category term="SIMD" /><category term="STEM" /><category term="Saatchi" /><category term="Safety &amp; Security" /><category term="Sample dialogs" /><category term="Santa Tracker" /><category term="Serbia" /><category term="Shoreline Amphitheatre" /><category term="Slides API" /><category term="Smart Home" /><category term="Smart Lock for Passwords" /><category term="Space" /><category term="Stable release" /><category term="Startup accelerator" /><category term="Strobe" /><category term="Sundar Pichai" /><category term="TF Lite" /><category term="Team Drives (new)" /><category term="TensorFlow Research Cloud" /><category term="Toolkit" /><category term="URLs" /><category term="UX" /><category term="Ukraine" /><category term="VUI" /><category term="Wearables" /><category term="Weave" /><category term="WhiteHouse.gov" /><category term="Winter of Code" /><category term="Women in Tech" /><category term="WomenTechmakers" /><category term="Young Makers" /><category term="ZXing" /><category term="about.com" /><category term="activity" /><category term="adobe" /><category term="advanced" /><category term="agency program" /><category term="agpl" /><category term="ajax search books news apis" /><category term="all for good" /><category term="amarok" /><category term="and Assistant" /><category term="android developer certification" /><category term="animation" /><category term="apis explorer" /><category term="app design" /><category term="area 120" /><category term="artifact management" /><category term="augmented faces" /><category term="australia" /><category term="authentication" /><category term="automatic speech recognition" /><category term="axsjax" /><category term="barcodes" /><category term="bespin" /><category term="bitcoin" /><category term="book search" /><category term="books API" /><category term="braintree" /><category term="british english" /><category term="business" /><category term="caja" /><category term="camino" /><category term="certification award" /><category term="channel" /><category term="chronoscope" /><category term="cifs" /><category term="classroom api" /><category term="cms" /><category term="coca cola" /><category term="codeedu" /><category term="collada" /><category term="color" /><category term="community connectors" /><category term="competition" /><category term="compressorhead" /><category term="computer science" /><category term="computer vision" /><category term="computing heritage" /><category term="conversation design" /><category term="couchdb" /><category term="crash course" /><category term="crashlytics" /><category term="creative commons" /><category term="cricket" /><category term="cryptocurrency" /><category term="cryptography" /><category term="danish linux forum" /><category term="database" /><category term="datastore" /><category term="dataviz" /><category term="deprecation" /><category term="developer features" /><category term="developer relations" /><category term="developer student clubs" /><category term="developers. meetup" /><category term="devfest developer chrome maps social wave apps" /><category term="differential privacy" /><category term="do-it-yourself" /><category term="documents list api" /><category term="dojo" /><category term="domains" /><category term="doodles" /><category term="dreamweaver" /><category term="dsc" /><category term="dynamic links" /><category term="earn" /><category term="earth" /><category term="eclipsecon" /><category term="educatio" /><category term="endpoints" /><category term="estonia" /><category term="evolution" /><category term="execution api" /><category term="extensions" /><category term="fairness in machine learning" /><category term="fintech" /><category term="firebug" /><category term="firefox" /><category term="firestore" /><category term="firevox" /><category term="firstbeta" /><category term="fitness" /><category term="flutter release preview 1" /><category term="flutter release preview 2" /><category term="fosdem" /><category term="freebsd" /><category term="freenet" /><category term="gaming" /><category term="gci" /><category term="gdd08" /><category term="geoserver" /><category term="getpaid" /><category term="gnome" /><category term="gnome women's summer outreach program" /><category term="google certification" /><category term="google code university" /><category term="google data protocol" /><category term="google developers certification" /><category term="google doctype" /><category term="google domains" /><category term="google grants" /><category term="google health" /><category term="google platform" /><category term="google space" /><category term="google wallet" /><category term="google.org" /><category term="googlecast" /><category term="googlewebelements googleio" /><category term="green linux" /><category term="grow" /><category term="gtags" /><category term="gulp" /><category term="gzip" /><category term="hacking" /><category term="hackthon" /><category term="hangouts" /><category term="haproxy" /><category term="hg" /><category term="howto" /><category term="hpux" /><category term="http" /><category term="iOS SDK" /><category term="iPhone Development" /><category term="ical" /><category term="ietf" /><category term="iguanas" /><category term="iiw" /><category term="image search" /><category term="in-app purchase" /><category term="incubator" /><category term="indie" /><category term="information visualization" /><category term="intelligentwire" /><category term="interactive music" /><category term="internet of things" /><category term="internship" /><category term="io18" /><category term="ipad" /><category term="israel" /><category term="jaiku" /><category term="jetpack" /><category term="joomladayus2007" /><category term="joomladayusa" /><category term="json" /><category term="karaoke" /><category term="kernel summit" /><category term="kids coding" /><category term="kids coding team" /><category term="lanchpad" /><category term="languages" /><category term="latam accelerator" /><category term="latvia" /><category term="launch" /><category term="lca" /><category term="lens" /><category term="lessons" /><category term="licenses" /><category term="linux foundation" /><category term="linux summit" /><category term="linux virtual server" /><category term="linuxconf eu" /><category term="lithuania" /><category term="malware" /><category term="material components" /><category term="mercurial" /><category term="mobile UX" /><category term="mobile design" /><category term="mobile performance" /><category term="mobile sites" /><category term="mobile speed" /><category term="monetize" /><category term="multi-platform" /><category term="mylar" /><category term="named" /><category term="native ads" /><category term="netbsd" /><category term="non-profit" /><category term="nonsense" /><category term="nosql" /><category term="nvidia" /><category term="ocr" /><category term="office hours" /><category term="oha" /><category term="open source releases" /><category term="open-source" /><category term="openajax alliance" /><category term="openssh" /><category term="openssl" /><category term="oscon2007" /><category term="osi" /><category term="ossjam" /><category term="pactester" /><category term="palette" /><category term="paypal" /><category term="persistent AR" /><category term="phone" /><category term="photos" /><category term="places API" /><category term="playground" /><category term="plone" /><category term="plone sprint" /><category term="poland" /><category term="portugal" /><category term="posix" /><category term="preview" /><category term="privacy" /><category term="prizes" /><category term="processing" /><category term="proximity" /><category term="py3k" /><category term="releases" /><category term="reserve seats" /><category term="result snippets" /><category term="rhino" /><category term="sandbox" /><category term="scalability" /><category term="scale-ups" /><category term="scopes" /><category term="sdks" /><category term="serif" /><category term="service worker" /><category term="seurat" /><category term="shape" /><category term="shopping" /><category term="showcase" /><category term="silverstripe" /><category term="sitemaps" /><category term="sixapart" /><category term="small businesses" /><category term="social graph" /><category term="solaris" /><category term="solutions challenge" /><category term="souders" /><category term="spa2007" /><category term="startup africa roadtrip" /><category term="stuff" /><category term="style" /><category term="subscription" /><category term="summer of code" /><category term="syndication" /><category term="techmakers" /><category term="templates" /><category term="tensorRT" /><category term="tensorflow dev summit" /><category term="text embedding models" /><category term="tfdevsummit" /><category term="thought leadership" /><category term="tool" /><category term="topp" /><category term="tranparency" /><category term="transit" /><category term="translation" /><category term="ubiquitous computing" /><category term="ubiquity" /><category term="ubucon" /><category term="unicode" /><category term="unit test" /><category term="universal" /><category term="unix" /><category term="url" /><category term="url shortener" /><category term="verification" /><category term="virtual keyboard" /><category term="voice" /><category term="voice kit" /><category term="voice user interface" /><category term="wattpad" /><category term="web apps" /><category term="web design" /><category term="web development" /><category term="web registry" /><category term="webVR" /><category term="win" /><category term="windows programming" /><category term="writing" /><category term="xauth" /><category term="zlib" /><category term="zurich" /><title type="text">Google Developers Blog</title><subtitle type="html">Blog of our latest news, updates, and stories for developers</subtitle><link rel="alternate" type="text/html" href="http://developers.googleblog.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default?start-index=26&amp;max-results=25&amp;redirect=false" /><author><name>ewood</name><uri>http://www.blogger.com/profile/12341551220176883769</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>1895</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/GDBcode" /><feedburner:info uri="gdbcode" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-3942210037491103569</id><published>2019-09-20T11:00:00.000-07:00</published><updated>2019-09-20T11:00:00.326-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developers" /><category scheme="http://www.blogger.com/atom/ns#" term="devfest" /><category scheme="http://www.blogger.com/atom/ns#" term="gdg" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Developer Groups" /><category scheme="http://www.blogger.com/atom/ns#" term="google developers" /><title type="text">From Code to Community: Why developers call DevFest home</title><content type="html">&lt;meta name="twitter:image" content="https://4.bp.blogspot.com/-qmrkD_y0374/XYP7duXl-PI/AAAAAAAAH4U/70ap4MVEf_M2TJKrupGSWayrzo52z7XmgCLcBGAsYHQ/s1600/Screen%2BShot%2B2019-09-19%2Bat%2B3.04.26%2BPM.png"&gt;&lt;img style="display:none" src="https://4.bp.blogspot.com/-qmrkD_y0374/XYP7duXl-PI/AAAAAAAAH4U/70ap4MVEf_M2TJKrupGSWayrzo52z7XmgCLcBGAsYHQ/s1600/Screen%2BShot%2B2019-09-19%2Bat%2B3.04.26%2BPM.png"&gt; &lt;a href="https://3.bp.blogspot.com/-Otezx8f4TII/XYQBO6audaI/AAAAAAAAH4o/RjtPIa-Nutc5J5phwuealccOfI0rw1bygCLcBGAsYHQ/s1600/DevFest-Twitter-Banner.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-Otezx8f4TII/XYQBO6audaI/AAAAAAAAH4o/RjtPIa-Nutc5J5phwuealccOfI0rw1bygCLcBGAsYHQ/s1600/DevFest-Twitter-Banner.png" data-original-width="1500" data-original-height="500" alt="DevFest Banner"/&gt;&lt;/a&gt;&lt;div id="flexParent"&gt;   &lt;img id="floatLeft" id="imgHalf" style="margin:10%;" style="width:40%;" border="0" src="https://4.bp.blogspot.com/-jUbyUcdjWjU/XYPFR7KqINI/AAAAAAAAH3Y/_5YtVp6kqBo0laE2SG-POpz-ipCilVGNQCLcBGAsYHQ/s1600/image1.jpg" data-original-width="948" data-original-height="614" alt="Ricardo on the left with fellow GDG lead planning DevFest Coimbra" /&gt;  &lt;p id="floatRight" style="width:45%;"&gt;&lt;em&gt;&lt;strong&gt;&lt;font size="3"&gt;Ricardo Costeira is a Software Engineer from Coimbra, Portugal. For the first time last year, he attended DevFest, the largest developer community-led movement hosted by Google Developer Groups across the world. To celebrate DevFest 2019, we want to share with you Ricardo’s story and how he went from writing code to finding community.&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt; &lt;/p&gt;&lt;/div&gt; &lt;p id="floatRight" style="width:45%;"&gt;&lt;p id="imgCaption"&gt;&lt;font size="1"&gt;Ricardo (left) and a fellow GDG Lead plan DevFest Coimbra. &lt;/font&gt;&lt;/p&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1. How did you first hear about DevFest? What inspired you to join?&lt;/strong&gt;&lt;/p&gt;In 2018, after living in Coimbra for 3 years, I didn't have any friends outside of work that were  software developers. I longed to fill my life with more people that understood my passion and decided it was time to make a change. So I took to social media to see how I could connect with more like minded thinkers. Eventually, DevFest showed up on my feed. Out of nowhere, I saw this crazy event in Coimbra packed with bold leaders, energizing speakers, and profoundly creative exercises.  I never expected that being with a community would get me so excited. I got a ticket on the spot.  &lt;p&gt;&lt;strong&gt;2. Can you tell us about your first experience at DevFest?&lt;/strong&gt;&lt;/p&gt;&lt;div id="flexParent"&gt;  &lt;p id="floatLeft" style="width:45%;"&gt;  It was exhilarating - out of this world. When I first walked in, everyone talked to me as if we had known each other for years. Big smiles, loud laughs, and deep kindness were all around me. As someone who is relatively shy and a loner by nature, I was stunned when I felt myself saying, "I belong here, I'm home."   That very same night, I looked up the next event I could attend. Since then, I have attended 2 other events, signed up for 6 more, and have become a GDG Lead. In other words, I’m hooked.   &lt;/p&gt; &lt;img id="floatRight" id="imgHalf" style="margin:10%;" style="width:40%;" border="0" src="https://3.bp.blogspot.com/-1ry-OEGkbDQ/XYP22AgLN9I/AAAAAAAAH4A/oNNvOYxpryQXYpVWN8-1Gz3bt80Iv9RrACLcBGAsYHQ/s1600/image2.JPG" data-original-width="948" data-original-height="614" alt="Ricardo" /&gt;  &lt;/div&gt; &lt;p&gt;So how did this all change me? To be honest, DevFest brought forward a shift in my personality. I now want to be part of a community - that is a new feeling in my life. &lt;/p&gt;&lt;p&gt;&lt;h3&gt;&lt;em&gt;&lt;center&gt;“As someone who is relatively shy and a loner by nature, I was stunned when I felt myself saying, "I belong here, I'm home."&lt;/center&gt;&lt;/em&gt;&lt;/h3&gt;   &lt;/p&gt;&lt;p&gt;&lt;strong&gt;3. What from DevFest 2018 are you looking forward to seeing again this year?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The booths. DevFest Coimbra has booths where you can talk with different companies. It’s exciting to learn about all the opportunities to grow so close to home. In my case, it was thrilling to see just how quickly Portugal is scaling and how so many companies come to DevFest eager to talk with the best talent. Forming these relationships is what can make the difference when finding the right opportunity for you.  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;4. Leading up to DevFest 2019, what are you most excited for?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Lighting a spark in new attendees. I recently joined the organizational staff and I’m excited to give new attendees that feeling I had when I first walked into DevFest. I’ve found such meaning in working with my fellow GDG Leads to bring together attendees in a sense of shared awe.  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;5. Any advice for those attending DevFest 2019?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Just say hi. You will be surprised with how far it will take you. DevFest is not only about the talks or workshops, it’s also about the people. This community knows the extrovert and understands the introvert, and warmly welcomes both. That is to say, no matter who you are or how you code, there is a place for you here.  &lt;/p&gt;&lt;p&gt;&lt;h3&gt;&lt;em&gt;&lt;center&gt;“DevFest is not only about the talks or workshops, it’s also about the people.”&lt;/center&gt;&lt;/em&gt;&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Want to find a DevFest event near you? Check out &lt;a href="http://devfest.withgoogle.com"&gt;devfest.withgoogle.com&lt;/a&gt; to join our community, meet other developers and learn about Cloud, Android, Flutter, Machine Learning and more.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;center&gt;&lt;strong&gt;#DevFest #Community &lt;/strong&gt;&lt;/center&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/lSpBnhRv4Gg" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/3942210037491103569/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/09/from-code-to-community-why-developers.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/3942210037491103569" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/3942210037491103569" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/lSpBnhRv4Gg/from-code-to-community-why-developers.html" title="From Code to Community: Why developers call DevFest home" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://4.bp.blogspot.com/-qmrkD_y0374/XYP7duXl-PI/AAAAAAAAH4U/70ap4MVEf_M2TJKrupGSWayrzo52z7XmgCLcBGAsYHQ/s72-c/Screen%2BShot%2B2019-09-19%2Bat%2B3.04.26%2BPM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/09/from-code-to-community-why-developers.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-8687629393185058770</id><published>2019-09-18T11:00:00.000-07:00</published><updated>2019-09-18T11:00:02.084-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google APIs" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><category scheme="http://www.blogger.com/atom/ns#" term="scopes" /><category scheme="http://www.blogger.com/atom/ns#" term="Strobe" /><category scheme="http://www.blogger.com/atom/ns#" term="verification" /><title type="text">Get smart about preparing your app for OAuth verification</title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-qWpFqHv2TYg/XYAQCSIWgdI/AAAAAAAAH2c/8dFUy-s3aGk65H-n4a0H9JDczP6WUr6bwCLcBGAsYHQ/s1600/image1.png"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-qWpFqHv2TYg/XYAQCSIWgdI/AAAAAAAAH2c/8dFUy-s3aGk65H-n4a0H9JDczP6WUr6bwCLcBGAsYHQ/s1600/image1.png"&gt;  &lt;em&gt;Posted by Nafis Zebarjadi, Product Manager and Adam Dawes, Senior Product Manager&lt;/em&gt; &lt;p&gt;&lt;a href="https://www.blog.google/technology/safety-security/update-project-strobe-new-policies-chrome-and-drive/"&gt;Project Strobe&lt;/a&gt; was started to help users have control over their data while giving developers more explicit rules of the road to ensure everyone is confident that their data is secure. One result of this effort has been to expand our app verification program to cover more apps and more types of data access. It is important to understand how the process works so that you can optimally build your app and streamline the verification process. Here we walk you through the process of preparing your app for OAuth verification. &lt;/p&gt;&lt;h2&gt;Getting prepared for verification&lt;/h2&gt;  &lt;p&gt;The first thing you should do is confirm whether your app needs verification. App verification is only required if you want to launch your app widely to consumer or enterprise users and the app requests sensitive or restricted scopes. Apps that use non-sensitive scopes, are under development, or are built just for your own G Suite users are not required to go through verification. If the app is just for users within your own organization, choose the ‘Internal’ application type to restrict the app to use within your own organization and skip verification. &lt;/p&gt;&lt;p&gt;Once you initiate app verification, it is not easy to make updates to your app's Google API configuration. If you make any changes while in the process, you will need to start over again, so it’s critical that you get your app ready before initiating verification to avoid delays.   &lt;/p&gt;&lt;h3&gt;Determining if your app is using sensitive or restricted scopes&lt;/h3&gt;  &lt;p&gt;The first thing you need to do is look at your code on each platform to determine which OAuth scopes (Google APIs) your service needs. Be sure to do this on every client; we often see that apps will request different scopes on different platforms, and then initiate app verification on a subset of scopes than your clients actually use. Often, you can find the scopes by searching your code for the string “www.googleapis.com/auth”. Not all legacy scopes contain that string so you may also want to find the code related to the Google API library you’re using (on the specific platform) to see what scopes are being requested, or look at our &lt;a href="https://developers.google.com/identity/protocols/googlescopes?authuser=0"&gt;directory of scopes&lt;/a&gt;.  &lt;/p&gt;&lt;p&gt;Once you have identified all of the scopes that your apps use, you can check to see whether they are sensitive or restricted by going to the &lt;a href="https://console.cloud.google.com/"&gt;Cloud Console&lt;/a&gt; (APIs &amp; Services -&gt; Credentials -&gt; OAuth consent screen -&gt; Scopes for Google APIs) and pressing the ‘Add scope’ button. This will bring up the following window:  &lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-qWpFqHv2TYg/XYAQCSIWgdI/AAAAAAAAH2c/8dFUy-s3aGk65H-n4a0H9JDczP6WUr6bwCLcBGAsYHQ/s1600/image1.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-qWpFqHv2TYg/XYAQCSIWgdI/AAAAAAAAH2c/8dFUy-s3aGk65H-n4a0H9JDczP6WUr6bwCLcBGAsYHQ/s1600/image1.png" data-original-width="954" data-original-height="552" alt="Google Cloud Console’s ‘Add Scope’ to your OAuth client tool and how it highlights sensitive scopes." /&gt;&lt;/a&gt;&lt;p&gt;If the scope has a lock icon, it means that the scope is either &lt;a href="https://support.google.com/cloud/answer/9110914#definition"&gt;sensitive&lt;/a&gt; or &lt;a href="https://support.google.com/cloud/answer/9110914#restricted-scopes"&gt;restricted&lt;/a&gt; and that you’ll need to go through app verification before you can widely launch to Google users.  &lt;/p&gt;&lt;p&gt;[Note that the tool only lists scopes for APIs that you’ve enabled for your project. If you don’t see a scope listed, you’ll first need to enable the corresponding API for your project from the &lt;a href="https://console.cloud.google.com/apis/library"&gt;API Library&lt;/a&gt;. The fact that you’re not seeing the scope used in your code may mean that you have clients set up in different projects.]  &lt;/p&gt;&lt;h3&gt;Setting up the right project structure&lt;/h3&gt;  &lt;p&gt;Apps are reviewed and approved at the project level so you’ll want to make sure that you’ve configured your clients properly before starting app verification. If you have multiple projects, each one will have to independently go through app verification. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;When to add multiple clients to a project:&lt;/strong&gt; You may have multiple clients for your app to support different platforms like Android, Web and iOS. Ideally, all of these clients should be in the same project because it will smooth out the &lt;a href="https://developers.google.com/identity/protocols/CrossClientAuth"&gt;cross-client&lt;/a&gt; consent experience. When clients are in the same project, users only need to provide consent to one of the clients. Other clients can automatically get tokens without forcing the user to go through the consent flow for the same requested scopes again. The user is agreeing to share data with your service regardless of which platform they happen to be using and your service terms should be the same across platforms. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;When to separate clients into separate projects:&lt;/strong&gt; Your company may also have multiple apps that you publish to users. You may or may not want to host the clients related to your different apps in the same project. Generally, if the different apps use the same login system, have the same privacy policy and users recognize the brand of the publisher of all the apps, then it makes sense to have all the clients in the same project. For example, if PersonalFinance Corp has accounting, budgeting and tax apps that all share the same login, privacy policy and users recognize the PersonalFinance Corp brand, then it is best to structure those all in the same project. However, if CoolGames publisher has lots of titles that have different login systems and different privacy policies, or users are more familiar with the individual game titles than the CoolGames brand, then you should use separate projects.  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Reorganizing projects:&lt;/strong&gt; It is not possible to move or reorganize clients once they are created. If you want to make changes, you can either choose to create new clients in a centralized project or get each app verified independently. If you create new clients in a centralized project, you’ll update your apps to use the new client and abandon the old clients. The issue you may encounter with this approach is that your app may have to obtain user consent all over again (if the user hasn’t also consented to your other client). Alternately, you can leave your clients in separate projects; however, each project will have to go through app verification independently and users will have to consent to each of your clients individually.  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Setting up test vs production projects: &lt;/strong&gt;For many developers, it is also helpful to have a parallel test project to your production project. This allows you to easily change scopes or other app properties and test behavior without having to go through app verification. &lt;/p&gt;&lt;h3&gt;Configuring your project&lt;/h3&gt;  &lt;p&gt;If your app does need to be verified, you’ll want to make sure the information about your project is up-to-date to avoid delay. &lt;/p&gt;&lt;h4&gt;&lt;span style="text-decoration:underline;"&gt;Project Owners&lt;/span&gt;&lt;/h4&gt;  &lt;p&gt;As we roll out changes across our API ecosystem, it is important to make sure your projects have up-to-date contact information. We often need to send notifications about changes, and have had developers miss important updates because of incorrect contact information which has resulted in their app being unexpectedly disabled. One way to help ensure your team gets notifications is to &lt;a href="https://support.google.com/groups/answer/2464926"&gt;create a Google Group &lt;/a&gt;that aliases to a stable group within your company (and be sure to configure the group to receive emails from non-members). Another option is to create an &lt;a href="https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy#organizations"&gt;Organizational Resource&lt;/a&gt; in the Cloud Console so that your client assets can be centrally administered and recovered when owners leave the company. It’s also very good practice to ensure the owners of the Android/iOS/Web clients are also owners or editors of the project. Domain verification is also required for every app, so you will also want to add your DNS administrator to the project so that person can easily go through the process. &lt;/p&gt;&lt;p&gt;To update project owners, use &lt;a href="https://cloud.google.com/iam/docs/overview"&gt;Cloud IAM&lt;/a&gt; in the Cloud Console (Cloud Console -&gt; IAM and admin -&gt; IAM).  &lt;/p&gt;&lt;h4&gt;&lt;span style="text-decoration:underline;"&gt;Branding Info and Domain Verification&lt;/span&gt;&lt;/h4&gt;  &lt;p&gt;Branding info includes your app’s name and logo. It is critical that these are accurate because users use these to decide whether they know and trust your app. In the verification process, we will validate that you own the brand and logo and that it matches the information on your web site. If you make changes, your previously approved branding will continue to be shown until the new information can be verified. &lt;/p&gt;&lt;a href="https://4.bp.blogspot.com/-jEuRFa-yzVg/XYAQnJPQuwI/AAAAAAAAH2k/yO-e81NX43EtpYzK5yZoNa05OAOiAFhGACLcBGAsYHQ/s1600/image2.png" imageanchor="1" &gt;&lt;img id="imgHalf" border="0" src="https://4.bp.blogspot.com/-jEuRFa-yzVg/XYAQnJPQuwI/AAAAAAAAH2k/yO-e81NX43EtpYzK5yZoNa05OAOiAFhGACLcBGAsYHQ/s1600/image2.png" data-original-width="474" data-original-height="836" alt="OAuth consent screen showing a redirect domain" /&gt;&lt;/a&gt; &lt;p&gt;You will also need to verify the domain associated with your brand. This is true even if you only have Android/iOS versions of your app because you must have a website to publicly host your privacy policy. You start the domain verification process by linking your domain to your project in the Cloud Console (APIs &amp; Services -&gt; Domain verification). You’ll then need to go to the &lt;a href="https://search.google.com/search-console"&gt;Search Console&lt;/a&gt; to prove that you own and control the domain.  &lt;/p&gt;&lt;p&gt;Domain verification is a key security feature for your web clients. If you have web clients in your project, each of those must have their Authorized Redirect URIs or Authorized JavaScript Origins match an already verified domain. This enables us to guarantee that OAuth tokens are only returned to your application.  &lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-NeIbCXFvFO0/XYARz19pQiI/AAAAAAAAH2w/6C8N-XkY4PAHKDZg6CHY2dxG31igZ6JjACLcBGAsYHQ/s1600/image3.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-NeIbCXFvFO0/XYARz19pQiI/AAAAAAAAH2w/6C8N-XkY4PAHKDZg6CHY2dxG31igZ6JjACLcBGAsYHQ/s1600/image3.png" data-original-width="653" data-original-height="407" alt="Adding an authorized domain for a Google Cloud Project in the domain verification tab" /&gt;&lt;/a&gt; &lt;h4&gt;&lt;span style="text-decoration:underline;"&gt;Scopes&lt;/span&gt;&lt;/h4&gt;  &lt;p&gt;Since you’ve already identified the scopes that your app uses, you should now check to see if you can change scopes to minimize your data access. Our &lt;a href="https://developers.google.com/terms/api-services-user-data-policy"&gt;API User Data Policy&lt;/a&gt; requires that you only request information that your app needs and that you’re clear to the user about how you will use it. It’s inappropriate to gain access to Google user data for alternate purposes such as advertising and market research. &lt;/p&gt;&lt;p&gt;In particular, you’ll want to try to avoid the use of &lt;a href="https://developers.google.com/terms/api-services-user-data-policy#additional-requirements-for-specific-api-scopes"&gt;restricted scopes&lt;/a&gt;. The verification process for restricted scopes can take several weeks longer than sensitive scopes. It also requires significant documentation and may involve a third-party security assessment that you must pay for. Currently, only specific Gmail scopes are restricted, but we have &lt;a href="https://developers.google.com/terms/api-services-user-data-policy#additional-requirements-for-specific-api-scopes"&gt;announced&lt;/a&gt; that most Drive scopes are also becoming restricted in early 2020.  &lt;/p&gt;&lt;p&gt;If your app does need to access a restricted scope, consider architecting your app such that the Google user data is only ever stored client-side on the user’s device (like a contact manager app). Storing data in the cloud or on your own servers will require you to obtain a third-party security assessment (at your expense), and could also result in significant work to resolve any security issues found during the assessment.  &lt;/p&gt;&lt;p&gt;Once you’ve decided on the scopes your app will need, make sure that they are registered with your project and reflected in your app’s code. We’ve seen many cases where a developer’s code calls a different set of scopes than those that have been registered in the Cloud Console. If your app does this, your users will see an &lt;a href="https://support.google.com/cloud/answer/7454865?hl=en"&gt;unverified app error&lt;/a&gt;. Many developers request troubleshooting help because their users are unexpectedly seeing these errors even though their app was approved. Inevitably, it is because their code does not match what was verified. Similarly, if you need to add new scopes to your application, you’ll need to get those scopes approved before you launch the functionality into your production app (a test client is going to be essential here).  &lt;/p&gt;&lt;p&gt;While you’re thinking about scopes, you should also consider how and when you are asking your users for consent. The best practice is to &lt;em&gt;not&lt;/em&gt; request scopes at sign-in, but to use &lt;a href="https://developers.google.com/identity/sign-in/web/incremental-auth"&gt;incremental authorization&lt;/a&gt; to allow a user to access a particular feature when they want it. This is a great way to build trust because the user interacts in a particular feature, can see the benefit of the feature, and understands why granting a particular permission will make the feature more useful.&lt;/p&gt;  &lt;h4&gt;&lt;span style="text-decoration:underline;"&gt;Privacy Policy&lt;/span&gt;&lt;/h4&gt;  &lt;p&gt;Our goal in verifying apps is to ensure that any data users choose to share with third-parties is well-managed and meets users’ expectations about how it will be used. Your privacy policy is your public contract to your users and a critical proof to us that users’ expectations will be met. &lt;/p&gt;&lt;p&gt;You must include a link to your privacy policy on your website. If the domain where you host that policy isn’t verified, we won’t verify your app. If your app is purely mobile, with no server-side component, you will still need a privacy policy, but it may be very simple and describe that your app only stores data on a user’s device. &lt;/p&gt;&lt;p&gt;Google can not provide guidance on your privacy policy, but if your app requests restricted scopes, we will scrutinize your policy to understand how you plan to use that data and ensure that it conforms to our requirements. Make sure you understand the &lt;a href="https://developers.google.com/terms/api-services-user-data-policy#additional-requirements-for-specific-api-scopes"&gt;Limited Use requirements&lt;/a&gt;, and consult with your legal counsel to ensure that your &lt;a href="https://support.google.com/cloud/answer/9110914?hl=en#inconsistent"&gt;privacy policy is consistent&lt;/a&gt; with the requirements. To ensure clarity in how your app handles email content, we also recommend adding the following statement to your application’s home page:  “App’s use of information received from Gmail APIs will adhere to &lt;a href="https://developers.google.com/terms/api-services-user-data-policy#additional-requirements-for-specific-api-scopes"&gt;Google's Limited Use Requirements&lt;/a&gt;.”  This is needed when your privacy policy is not specific in how email content is used. &lt;/p&gt;&lt;h2&gt;Submitting your app for verification&lt;/h2&gt;  &lt;p&gt;Once you have your project(s) configured with all the appropriate information, you can submit your app for verification. We have three different types of app verification depending on the scopes you request, each taking a different amount of time to complete. If you start your verification with one set of scopes and later decide you need different scopes, you usually need to finish your existing verification before you can start the process again. This could cause frustration and lengthen your overall verification process.  &lt;/p&gt;&lt;p&gt;     &lt;h4&gt;&lt;span style="text-decoration:underline;"&gt;Brand Verification&lt;/span&gt;  (2-3 days)&lt;/h4&gt;&lt;/p&gt;&lt;p&gt;     Brand Verification is our simplest process and validates that your brand name and logo belong to you. It is an optional step if your app is requesting non-sensitive scopes like Google Sign-In and typically takes just 2 to 3 business days. If your app doesn’t go through brand verification, users will only see your domain name listed on the consent page. &lt;/p&gt;&lt;p&gt;     &lt;h4&gt;&lt;span style="text-decoration:underline;"&gt;Sensitive Scope Verification&lt;/span&gt;  (3-5 days)&lt;/h4&gt;&lt;/p&gt;&lt;p&gt;     Starting in June 2019, we greatly expanded the classification of sensitive scopes and started requiring more extensive verification for new apps that are accessing those scopes. Existing apps that are already accessing sensitive scopes need to go through this verification process in the latter half of 2019. &lt;/p&gt;&lt;p&gt;     Sensitive scope verification involves brand and domain validation, checking that the privacy policy is prominently available from your application home page. We also review your app and privacy policy against our &lt;a href="https://developers.google.com/terms/api-services-user-data-policy"&gt;API Services: User Data Policy&lt;/a&gt; and check for deceptive practices. The privacy policy must disclose the manner in which your application accesses, uses, stores, or shares Google user data. Your use of Google user data must be limited to the practices disclosed in your published privacy policy. &lt;/p&gt;&lt;p&gt;     A YouTube or accessible Drive video will also be required to understand how users will experience your request for scopes, showing specifically how they’ll benefit from granting you access. The identity of your app needs to be clear from the video (including the app’s client ID), and you’ll need to highlight the value proposition you communicate to the user before requesting the scopes. &lt;/p&gt;&lt;p&gt;     Until verification is completed, users will see an unverified app page when your app requests a scope requiring verification. Up to 100 users may choose to grant access while your app is unverified. After that, users will be blocked from granting access to your app until verification is complete. &lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-UHHUs6Fe7qY/XYASCzssfwI/AAAAAAAAH20/9-zEFM71logQ5LZVsGKMTR21WCRWR_bcgCLcBGAsYHQ/s1600/image4.png" imageanchor="1" &gt;&lt;img id="imgHalf" border="0" src="https://1.bp.blogspot.com/-UHHUs6Fe7qY/XYASCzssfwI/AAAAAAAAH20/9-zEFM71logQ5LZVsGKMTR21WCRWR_bcgCLcBGAsYHQ/s1600/image4.png" data-original-width="773" data-original-height="1600" alt="Unverified app screen on mobile" /&gt;&lt;/a&gt; &lt;p&gt;     Sensitive scope verification usually takes 3 to 5 business days if there aren’t any issues with your app. &lt;/p&gt;&lt;p&gt;     &lt;h4&gt;&lt;span style="text-decoration:underline;"&gt;Restricted Scope Verification &lt;/span&gt;(4-6 weeks)&lt;/h4&gt;&lt;/p&gt;&lt;p&gt;     Restricted scope verification is a much more involved process. In addition to going through all the steps for a sensitive scope verification, your app will also have a much more rigorous privacy policy review to ensure that your use of Google user data conforms to our &lt;a href="https://developers.google.com/terms/api-services-user-data-policy#additional-requirements-for-specific-api-scopes"&gt;Limited Use&lt;/a&gt; requirements. Only permitted application types will be considered for access to restricted scopes. Finally, if your app stores data on a server, you will need to pass an annual &lt;a href="https://support.google.com/cloud/answer/9110914#security-assessment"&gt;security assessment&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;We do error validation before allowing you to click the ‘Submit for Verification’ button. Here are some common reasons why the button is not clickable: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;No verified domain  &lt;li&gt;Privacy policy URL, authorized redirect URIs or origins for your client do not match an authorized domain  &lt;li&gt;No new scopes added to the project that require verification &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;When you submit your app for verification, you will need to provide a written explanation for why your app needs the requested scopes. This explanation should include the nature of the feature and how the user will benefit from using it. It’s also best to include a link to your YouTube video in the original submission to save some back and forth with the review team. &lt;/p&gt;&lt;p&gt;You’ll also be asked again what email should receive questions and notifications about the verification process. Make sure you provide an address that you pay attention to and can receive emails from outside your domain. Questions will go to the person who initiated verification (not necessarily project owners) and the contact email address provided in the verification form. We’ve seen many requests delayed because the developer hasn’t responded to questions from the verification team. &lt;/p&gt;&lt;a href="https://3.bp.blogspot.com/-EL8TKuHULWA/XYASMIC8GoI/AAAAAAAAH28/EJ4q0jsj6NAyl1Fxy4ZhpEiTzivIM_OewCLcBGAsYHQ/s1600/image5.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-EL8TKuHULWA/XYASMIC8GoI/AAAAAAAAH28/EJ4q0jsj6NAyl1Fxy4ZhpEiTzivIM_OewCLcBGAsYHQ/s1600/image5.png" data-original-width="783" data-original-height="770" alt="Example form for a project requesting verification" /&gt;&lt;/a&gt; &lt;p&gt;     &lt;h4&gt;&lt;span style="text-decoration:underline;"&gt;Responding to verification questions&lt;/span&gt;&lt;/h4&gt;&lt;/p&gt;&lt;p&gt;     Apps with sensitive and restricted scopes often need to answer questions from the verification team. If you believe it has taken a long time to get a response from the verification team, you should search your inbox for messages from ‘api-oauth-dev-verification-reply’ to ensure that you haven’t missed anything.  &lt;/p&gt;&lt;p&gt;By following these guidelines for submitting your app for verification, you can greatly streamline the process of getting your app approved and released to the Google user community. If you have any follow-up questions, be sure to scan the &lt;a href="https://support.google.com/cloud/answer/9110914"&gt;OAuth API Verification FAQ&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/P1vBe7pJUcI" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/8687629393185058770/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/09/get-smart-about-preparing-your-app-for-OAuth-verfication.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/8687629393185058770" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/8687629393185058770" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/P1vBe7pJUcI/get-smart-about-preparing-your-app-for-OAuth-verfication.html" title="Get smart about preparing your app for OAuth verification" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-qWpFqHv2TYg/XYAQCSIWgdI/AAAAAAAAH2c/8dFUy-s3aGk65H-n4a0H9JDczP6WUr6bwCLcBGAsYHQ/s72-c/image1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/09/get-smart-about-preparing-your-app-for-OAuth-verfication.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-4514117567937152722</id><published>2019-09-12T09:00:00.000-07:00</published><updated>2019-09-12T19:45:18.683-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ARCore" /><category scheme="http://www.blogger.com/atom/ns#" term="augmented faces" /><category scheme="http://www.blogger.com/atom/ns#" term="augmented reality" /><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Anchors" /><category scheme="http://www.blogger.com/atom/ns#" term="persistent AR" /><title type="text">ARCore updates to Augmented Faces and Cloud Anchors enable new shared cross-platform experiences</title><content type="html">&lt;meta name="twitter:image" content="https://2.bp.blogspot.com/-4tcAjXSKyH0/XXmnTsv34lI/AAAAAAAAH2Q/9T2VuVqyw5MFZvXqoes2jcI1SqkHMEskgCLcBGAsYHQ/s1600/LEN007%2BThumb-80.jpg"&gt;&lt;img style="display:none" src="https://2.bp.blogspot.com/-4tcAjXSKyH0/XXmnTsv34lI/AAAAAAAAH2Q/9T2VuVqyw5MFZvXqoes2jcI1SqkHMEskgCLcBGAsYHQ/s1600/LEN007%2BThumb-80.jpg"&gt; &lt;em&gt;Posted by Christina Tong, Product Manager, Augmented Reality&lt;/em&gt; &lt;p&gt;Two years ago, we launched &lt;a href="https://developers.google.com/ar/"&gt;ARCore&lt;/a&gt;, our developer platform for building augmented reality (AR) experiences. Since then, we’ve seen developers create &lt;a href="https://play.google.com/store/search?q=augmented%20reality&amp;c=apps"&gt;thousands of AR apps&lt;/a&gt; across Android and iOS that transform the way people play, shop, learn and create together. To enable even more shared cross-platform AR experiences, we’re announcing new updates to ARCore’s Augmented Faces and Cloud Anchors APIs.  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Augmented Faces on iOS&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Earlier this year, &lt;a href="https://developers.googleblog.com/2019/02/new-ui-tools-and-richer-creative-canvas.html"&gt;we announced&lt;/a&gt; our Augmented Faces API, which offers a high-quality, 468-point 3D mesh that lets users attach fun effects to their faces — all without a depth sensor on their smartphone. With the addition of iOS support rolling out today, developers can now create effects for more than a billion users. We’ve also made the creation process easier for both iOS and Android developers with a new face effects template. &lt;/p&gt;  &lt;iframe id="imgFull" style="padding:1.5em;" width="560" height="315" src="https://www.youtube.com/embed/QAqOTaCCD9M" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;p&gt;&lt;strong&gt;Improvements to Cloud Anchors&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Last year, we introduced the &lt;a href="https://developers.google.com/ar/reference/c/group/cloud"&gt;Cloud Anchors API&lt;/a&gt;, which lets developers create shared AR experiences across Android and iOS. Cloud Anchors let devices create a 3D feature map from visual data onto which anchors can be placed. The anchors are hosted in the cloud so multiple people can use them to enable shared real world experiences. Cloud Anchors power a wide variety of cross-platform apps, like &lt;a href="https://play.google.com/store/apps/details?id=com.arexperiments.justaline&amp;hl=en_US"&gt;Just a Line&lt;/a&gt;, &lt;a href="https://play.google.com/store/apps/details?id=com.proverse.algorythm&amp;hl=en_US"&gt;PHAROS AR&lt;/a&gt; and &lt;a href="https://play.google.com/store/apps/details?id=gov.nasa.jpl.spacecraftAR&amp;hl=en"&gt;Spacecraft AR&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;In our latest ARCore update, we’ve made some improvements to the Cloud Anchors API that make hosting and resolving anchors more efficient and robust. This is due to improved anchor creation and visual processing in the cloud. Now, when creating an anchor, more angles across larger areas in the scene can be captured for a more robust 3D feature map. Once the map is created, the visual data used to create the map is deleted and only anchor IDs are shared with other devices to be resolved. Moreover, multiple anchors in the scene can now be resolved simultaneously, reducing the time needed to start a shared AR experience. &lt;/p&gt;&lt;p&gt;These updates to Cloud Anchors are &lt;a href="https://developers.google.com/ar/develop/downloads"&gt;available&lt;/a&gt; for developers today. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Persistent Cloud Anchors and Call for Collaborators&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;As we look to the future, we’re taking steps to expand the scale and timeline of shared AR experiences with persistent Cloud Anchors. We see this as enabling a “save button” for AR, so that digital information overlaid on top of the real world can be experienced at anytime.  &lt;/p&gt;&lt;p&gt;Imagine working together on a redesign of your home throughout the year, leaving AR notes for your friends around an amusement park, or hiding AR objects at specific places around the world to be discovered by others. &lt;/p&gt;&lt;p&gt;Persistent Cloud Anchors are powering &lt;a href="http://www.mark.app"&gt;Mark AR&lt;/a&gt;, a social app being developed by &lt;a href="https://sybogames.com/"&gt;Sybo&lt;/a&gt; and &lt;a href="https://www.idreamsky.com/en/"&gt;iDreamSky&lt;/a&gt; that lets people create, discover, and share their AR art with friends and followers in real-world locations. With persistent Cloud Anchors, users can continuously return back to their pieces as they create and collaborate over time. &lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-MV75KhZD7nA/XXlTLK0X9tI/AAAAAAAAH2E/JMv3Q_UyAMccdwIdh1ukHzx33_GcyIiuACLcBGAsYHQ/s1600/MarkAR_GIF.gif" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-MV75KhZD7nA/XXlTLK0X9tI/AAAAAAAAH2E/JMv3Q_UyAMccdwIdh1ukHzx33_GcyIiuACLcBGAsYHQ/s1600/MarkAR_GIF.gif" data-original-width="720" data-original-height="405" alt="Mark AR phone demonstration" /&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;&lt;em&gt;&lt;a href="https://youtu.be/EQ0v_LoLS9g"&gt;Mark AR&lt;/a&gt; is an app that lets people create and discover AR art in real-world locations.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Reliably anchoring AR content for every use case—regardless of surface, distance, and time—pushes the limits of computation and computer vision because the real world is diverse and always changing. By enabling a “save button” for AR, we’re taking an important step toward bridging the digital and physical worlds to expand the ways AR can be useful in our day-to-day lives. &lt;/p&gt;&lt;p&gt;We’re currently looking for more developers to help us explore and test persistent Cloud Anchors in real world apps at scale, before making the feature broadly available. If you’re interested in early access, you can &lt;a href="https://services.google.com/fb/forms/persistentCloudAnchorsCollab/"&gt;apply here&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/hSX_M3GTdWw" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/4514117567937152722/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/09/arcore-updates-to-augmented-faces-and.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/4514117567937152722" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/4514117567937152722" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/hSX_M3GTdWw/arcore-updates-to-augmented-faces-and.html" title="ARCore updates to Augmented Faces and Cloud Anchors enable new shared cross-platform experiences" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-4tcAjXSKyH0/XXmnTsv34lI/AAAAAAAAH2Q/9T2VuVqyw5MFZvXqoes2jcI1SqkHMEskgCLcBGAsYHQ/s72-c/LEN007%2BThumb-80.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/09/arcore-updates-to-augmented-faces-and.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-4484734910742776973</id><published>2019-09-10T07:00:00.000-07:00</published><updated>2019-09-10T15:28:22.503-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="flutter" /><category scheme="http://www.blogger.com/atom/ns#" term="Flutter 1.9" /><category scheme="http://www.blogger.com/atom/ns#" term="GDD" /><category scheme="http://www.blogger.com/atom/ns#" term="google developer days" /><category scheme="http://www.blogger.com/atom/ns#" term="google developers" /><title type="text">Flutter news from GDD China: uniting Flutter on web and mobile, and introducing Flutter 1.9</title><content type="html">&lt;meta name="twitter:image" content="https://2.bp.blogspot.com/-q6Tsm3thNfM/XXe7Kex90VI/AAAAAAAAH14/N-HITRo_XswHcHAO7RTp1VLpSaQOomyDQCLcBGAs/s1600/mmexport1568123208193.jpg"&gt;&lt;img style="display:none" src="https://2.bp.blogspot.com/-q6Tsm3thNfM/XXe7Kex90VI/AAAAAAAAH14/N-HITRo_XswHcHAO7RTp1VLpSaQOomyDQCLcBGAs/s1600/mmexport1568123208193.jpg"&gt; &lt;em&gt;Posted by Chris Sells, PM for the Flutter developer experience&lt;/em&gt; &lt;a href="https://2.bp.blogspot.com/-q6Tsm3thNfM/XXe7Kex90VI/AAAAAAAAH14/N-HITRo_XswHcHAO7RTp1VLpSaQOomyDQCLcBGAs/s1600/mmexport1568123208193.jpg" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-q6Tsm3thNfM/XXe7Kex90VI/AAAAAAAAH14/N-HITRo_XswHcHAO7RTp1VLpSaQOomyDQCLcBGAs/s1600/mmexport1568123208193.jpg" data-original-width="1080" data-original-height="718" alt="Google Developer Days taking place in China" /&gt;&lt;/a&gt;&lt;p&gt;This week is a big one for &lt;a href="http://flutter.dev"&gt;Flutter&lt;/a&gt;! Today, at &lt;a href="https://events.google.cn/intl/en/developerdays2019/"&gt;Google Developer Days&lt;/a&gt;, our flagship conference for Chinese developers, we used the keynote to &lt;strong&gt;announce our latest stable release: Flutter 1.9&lt;/strong&gt;. This release is our biggest update yet with more than 1,500 PRs from more than 100 contributors. The new features and updates span a wide range, from support for macOS Catalina and iOS 13 to improved tooling support, as well as new Dart language features and new Material widgets.  &lt;/p&gt;&lt;p&gt;At the keynote, we also announced a major milestone for Flutter’s web support, with the&lt;strong&gt; successful integration of Flutter’s web support into the main Flutter repository&lt;/strong&gt;, allowing developers to write for mobile, desktop and web with the same codebase. And we showcased &lt;a href="https://www.youtube.com/watch?v=DVGIBU109nI&amp;feature=youtu.be"&gt;Tencent&lt;/a&gt;, one of the largest worldwide internet brands, who are using Flutter in a growing number of their mobile apps.  &lt;/p&gt;&lt;p&gt;Let’s take a deeper look at this week’s news, starting with what’s new in Flutter 1.9. &lt;/p&gt;&lt;h2&gt;Supporting macOS Catalina and iOS 13&lt;/h2&gt;  &lt;p&gt;As Apple prepares to release Catalina, the latest version of macOS, we’ve worked hard to make sure that Flutter is ready for you to upgrade. We’ve updated the end-to-end tooling experience to ensure it works well on Catalina and with Xcode 11. This includes adding support for the new Xcode build system, enabling 64-bit support throughout the toolchain, and simplifying platform dependencies.  &lt;/p&gt;&lt;p&gt;With iOS 13 on the way, we’ve also been working to ensure your Flutter apps look great on the latest iPhone release. Flutter 1.9 includes &lt;a href="https://github.com/flutter/flutter/pull/35829"&gt;an implementation of the iOS 13 draggable toolbar&lt;/a&gt;, with both long-press and drag-from-right, and supports &lt;a href="https://github.com/flutter/flutter/pull/37724"&gt;vibration feedback&lt;/a&gt;. Work on iOS dark mode is also well underway with a number of &lt;a href="https://github.com/flutter/flutter/issues/35541"&gt;pull requests already merged&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;Finally, in the latest development builds, you can now turn on &lt;a href="https://github.com/flutter/flutter/wiki/Creating-an-iOS-Bitcode-enabled-app-(experimental)"&gt;experimental support for Bitcode&lt;/a&gt;, which is Apple’s platform-independent intermediate representation of a compiled program. Submitting your app as Bitcode allows Apple to optimize your binary in the future without resubmission, and opens the door to Flutter potentially supporting platforms like watchOS and tvOS that require Bitcode for app submission.  &lt;/p&gt;&lt;h2&gt;New Material widgets&lt;/h2&gt;  &lt;p&gt;The &lt;a href="https://material.io/"&gt;Material&lt;/a&gt; components and features also get an upgrade in Flutter 1.9. Material is one of the world’s leading open-source design systems, providing a comprehensive, flexible set of building blocks for implementing interactive user experiences across many platforms.  &lt;/p&gt;&lt;p&gt;In this release, we provide several new widgets including &lt;code&gt;ToggleButtons&lt;/code&gt; (left) and &lt;code&gt;ColorFiltered&lt;/code&gt; (right). &lt;/p&gt; &lt;div id="flexParent"&gt;&lt;a href="https://3.bp.blogspot.com/-yaAiaQQIk1E/XXZ43Cesk9I/AAAAAAAAH0Q/Lq42QJwNiKcVEN4ZZ-tWETRmjCiTF4jAQCLcBGAs/s1600/image1phone.gif" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-yaAiaQQIk1E/XXZ43Cesk9I/AAAAAAAAH0Q/Lq42QJwNiKcVEN4ZZ-tWETRmjCiTF4jAQCLcBGAs/s1600/image1phone.gif" data-original-width="600" data-original-height="1332" alt="Flutter ToggleButtons Demo" /&gt;&lt;/a&gt;&lt;a href="https://2.bp.blogspot.com/-_pq9NaSzbIA/XXZ47k6NWeI/AAAAAAAAH0U/hiMjyBwbvLklfkOKWIpjvEJcep0iuWKEACLcBGAs/s1600/image2phone.gif" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://2.bp.blogspot.com/-_pq9NaSzbIA/XXZ47k6NWeI/AAAAAAAAH0U/hiMjyBwbvLklfkOKWIpjvEJcep0iuWKEACLcBGAs/s1600/image2phone.gif" data-original-width="600" data-original-height="1332" alt="Flutter ColorFilter Demo" /&gt;&lt;/a&gt; &lt;/div&gt; &lt;p&gt;The &lt;code&gt;ToggleButtons&lt;/code&gt; widget bundles a row of &lt;code&gt;ToggleButton&lt;/code&gt; widgets together, often composed of a set of &lt;code&gt;Icon&lt;/code&gt; and &lt;code&gt;Text&lt;/code&gt; widgets, to form a set of buttons with fully customizable look and behavior. Do you want single selection or multi-select? Do you want to require at least one selection or allow none? Do you want square or rounded edges, thick or thin borders, icons or text, etc? You can see some of these options above on the left and see how they’re implemented in &lt;a href="https://github.com/csells/flutter_toggle_buttons"&gt;the ToggleButtons sample&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;As shown in the image above on the right, the &lt;code&gt;ColorFiltered&lt;/code&gt; widget allows you to recolor a tree of child widgets just like you can recolor an image using one of several different algorithms (some of which are shown in the example screenshot above). This has many uses, for example, handling color blindness accessibility issues for your users. To see this in action, check out &lt;a href="https://github.com/csells/flutter_color_filter"&gt;the ColorFiltered sample&lt;/a&gt;. &lt;/p&gt;&lt;h2&gt;Worldwide language support&lt;/h2&gt;  &lt;p&gt;We’ve also added support for 24 new languages, from Afrikaans to Zulu. &lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-TsKss-1ry78/XXcXibIqU0I/AAAAAAAAH1Y/0cNoPl7VSTkeWo6gepP22eESHVikBDLXwCLcBGAs/s1600/Screen%2BShot%2B2019-09-09%2Bat%2B8.24.11%2BPM.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-TsKss-1ry78/XXcXibIqU0I/AAAAAAAAH1Y/0cNoPl7VSTkeWo6gepP22eESHVikBDLXwCLcBGAs/s1600/Screen%2BShot%2B2019-09-09%2Bat%2B8.24.11%2BPM.png" data-original-width="1400" data-original-height="414" alt="Table of languages supported" /&gt;&lt;/a&gt; &lt;h2&gt;Dart 2.5 release&lt;/h2&gt;  &lt;p&gt;The end-to-end developer experience depends not just on the features of Flutter but also on the underlying language itself. As part of the Flutter 1.9 release, we are also releasing &lt;a href="https://medium.com/dartlang/dart-2-5-release-328822024970"&gt;Dart 2.5&lt;/a&gt;. Dart 2.5 includes a pre-release of Foreign Function Interface (FFI) support, providing native extensions so Dart can call directly into code written in C. It also introduces machine learning-powered code completions for the IDE. You can learn about both of these and more in the &lt;a href="https://medium.com/dartlang/dart-2-5-release-328822024970"&gt;Dart 2.5 announcement&lt;/a&gt;. &lt;/p&gt;&lt;h2&gt;Toolchain improvements&lt;/h2&gt;  &lt;p&gt;With this release, new projects default to Swift instead of Objective-C and Kotlin instead of Java for iOS and Android projects respectively. Since many &lt;a href="https://pub.dev"&gt;packages&lt;/a&gt; are written with Swift, making it the default language removes manual work for adding those packages to an app created with the default options. Swift 5 is ABI stable, and thanks to &lt;a href="https://developer.apple.com/documentation/xcode_release_notes/xcode_10_2_release_notes/swift_5_release_notes_for_xcode_10_2#3138038"&gt;app thinning work Apple has done in recent releases&lt;/a&gt;, the Swift dynamic libraries no longer need to be included in the distribution package for iOS 12.2 or greater, reducing the size of Swift applications compared to previous releases.  &lt;/p&gt;&lt;p&gt;And as Kotlin is now the default language for new projects in Android Studio, it seems natural to make the language switch for Android also. These options are now the default for both the &lt;code&gt;flutter&lt;/code&gt; CLI tool and the &lt;a href="https://plugins.jetbrains.com/plugin/9212-flutter"&gt;IntelliJ/Android Studio&lt;/a&gt; and &lt;a href="https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter"&gt;VS Code&lt;/a&gt; plugins for Flutter, but you can always switch back to Objective-C or Java if you prefer.  &lt;/p&gt;&lt;p&gt;Additionally, we’ve been working to improve Flutter’s error messages by making them more readable, more concise and more actionable. &lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-mVD28irb1Uo/XXZ5h-QxFlI/AAAAAAAAH0g/fftgkPUSGyY_oMIB2ZkcWsiidMR-lOHwgCLcBGAs/s1600/fluttererrormessage.png" imageanchor="1" &gt;&lt;img style="width:100%;" id="imgFull" border="0" src="https://1.bp.blogspot.com/-mVD28irb1Uo/XXZ5h-QxFlI/AAAAAAAAH0g/fftgkPUSGyY_oMIB2ZkcWsiidMR-lOHwgCLcBGAs/s1600/fluttererrormessage.png" data-original-width="1600" data-original-height="868" alt="Flutter error message"/&gt;&lt;/a&gt;&lt;p&gt;The Flutter User Experience team has led the charge on this project; you can read the details in a separate &lt;a href="https://medium.com/@taodong/e098513cecf9"&gt;blog post&lt;/a&gt; covering the work on structured error display. We’ve just started to apply these new patterns, and you can expect more error messages to take advantage of this work in coming releases. &lt;/p&gt;&lt;h2&gt;Flutter on the web&lt;/h2&gt;  &lt;p&gt;And finally, we are very happy to announce that &lt;a href="https://github.com/flutter/flutter_web"&gt;the flutter_web repository&lt;/a&gt; is deprecated now that web support has been merged into &lt;a href="https://github.com/flutter/flutter"&gt;the main flutter repository&lt;/a&gt;! What this means is that if you have the latest builds of Flutter from the master or dev channel, you can target the web with the latest experimental version of Flutter by running &lt;code&gt;flutter run -d chrome&lt;/code&gt;.  &lt;/p&gt;&lt;p&gt;When you create a project, Flutter now creates a web runner via a minimal &lt;code&gt;web/index.html&lt;/code&gt; file that bootstraps your web-compiled Flutter code. With that file in place, you can use the Flutter CLI tool or the IDE plugins to edit and run Flutter apps on the web. &lt;/p&gt;&lt;a href="https://3.bp.blogspot.com/-wyaZzuonB-A/XXZ5r-N3GzI/AAAAAAAAH0k/aenDvVIxraE51FDVE7eqGG43NrMuoj4XACLcBGAs/s1600/vscode.png" imageanchor="1" &gt;&lt;img style="width:100%;" id="imgFull" border="0" src="https://3.bp.blogspot.com/-wyaZzuonB-A/XXZ5r-N3GzI/AAAAAAAAH0k/aenDvVIxraE51FDVE7eqGG43NrMuoj4XACLcBGAs/s1600/vscode.png" data-original-width="1600" data-original-height="626" alt="screenshot of VS Code with web support enabled for Flutter" /&gt;&lt;/a&gt;&lt;p&gt;Above is a screenshot of VS Code with web support enabled for Flutter. Notice the &lt;code&gt;web/index.html&lt;/code&gt; file, along with the dropdown list allowing you to choose Chrome as your target development device. Support for web output with Flutter is still at an early phase, but this release represents a major step forward towards enabling production support for web development with Flutter. &lt;/p&gt;&lt;p&gt;At the end of July, we &lt;a href="https://medium.com/flutter/flutter-for-web-early-adopter-program-now-open-9f1fb146e4c4"&gt;announced an early adopter program&lt;/a&gt; designed to get a group of select Flutter applications deployed to production on the web over the next six to twelve months. We received over 1,000 submissions to the program. Unfortunately, we don’t have the capacity to support everyone who applied to join the program, but now web support is merged into the Flutter framework, we’re excited that everyone can now experiment with this capability.  &lt;/p&gt;&lt;p&gt;Some community experiments have already showcased Flutter’s web output: &lt;/p&gt; &lt;div id="flexParent"&gt;&lt;a href="https://3.bp.blogspot.com/-uIk37Y3_wK4/XXZ7IzJ9Y-I/AAAAAAAAH00/aMqPHeB5ZIkR6eL9AE6wwA5Fo_K6LfwtQCLcBGAs/s1600/communityexperiment1.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-uIk37Y3_wK4/XXZ7IzJ9Y-I/AAAAAAAAH00/aMqPHeB5ZIkR6eL9AE6wwA5Fo_K6LfwtQCLcBGAs/s1600/communityexperiment1.png" data-original-width="1462" data-original-height="1600" alt="Flutter Widget Livebook" /&gt;&lt;/a&gt;&lt;a href="https://1.bp.blogspot.com/-nBK51fLLjMQ/XXZ7LxrIavI/AAAAAAAAH04/edUuLtwX2qMQn98UIt6eW_fU46PHibOagCLcBGAs/s1600/communityexperiment2.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-nBK51fLLjMQ/XXZ7LxrIavI/AAAAAAAAH04/edUuLtwX2qMQn98UIt6eW_fU46PHibOagCLcBGAs/s1600/communityexperiment2.png" data-original-width="1461" data-original-height="1600" alt="Panache" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;a href="https://flutter-widget-livebook.blankapp.org/"&gt;Flutter Widget Livebook&lt;/a&gt; (left) is built with Flutter for web and shows Flutter widgets running live in your browser. &lt;a href="https://rxlabz.github.io/panache_web/"&gt;Panache&lt;/a&gt; (right) is a tool for creating themes for Flutter which you can then download and drop directly into your code.  &lt;/p&gt;&lt;p&gt;Please give this updated experimental support for Flutter on the web a try and &lt;a href="https://github.com/flutter/flutter/issues"&gt;let us know if you have any feedback&lt;/a&gt;. &lt;/p&gt;&lt;h2&gt;Community&lt;/h2&gt;  &lt;p&gt;We’re thrilled to see continuing fast growth and adoption of for Flutter. Here at Google, hundreds of developers are working on more than twenty projects using Flutter, including some that are released and many that are still in development. At GDD China this week, we highlighted how Tencent, one of the largest internet brands, is using Flutter pervasively for a wide variety of projects: &lt;/p&gt; &lt;iframe id="imgFull" width="560" height="315" src="https://www.youtube.com/embed/DVGIBU109nI" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;p&gt;Switching gears to something just for fun, if you have Google Assistant on your phone or one of the Google Nest Hub devices, try saying “OK Google. &lt;a href="https://assistant.google.com/services/a/uid/000000f3a4034e91"&gt;Talk to Flutter Widget Quiz&lt;/a&gt;.” We loved seeing this community-powered quiz that tests your knowledge of Flutter. &lt;/p&gt;&lt;a href="https://4.bp.blogspot.com/-WnoX_nu_xLQ/XXZ7zNXYH8I/AAAAAAAAH1A/jB4iodXkUnQsHUbbOg1J97yVIoa3XLEoACLcBGAs/s1600/flutterwidgetquiz.png" imageanchor="1" &gt;&lt;img id="imgHalf" border="0" src="https://4.bp.blogspot.com/-WnoX_nu_xLQ/XXZ7zNXYH8I/AAAAAAAAH1A/jB4iodXkUnQsHUbbOg1J97yVIoa3XLEoACLcBGAs/s1600/flutterwidgetquiz.png" data-original-width="778" data-original-height="1600" alt="Flutter Widget Quiz" /&gt;&lt;/a&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;  &lt;p&gt;We love the support we’ve received from the developer community, whether in the form of blogs and articles, published apps or issues and code contributions. For more details on upgrading to Flutter 1.9, including details on how to fix any breaking changes that you might experience as you migrate your code, check out the detailed &lt;a href="https://github.com/flutter/flutter/wiki/Release-Notes-Flutter-1.9.1"&gt;Flutter 1.9 release notes&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;There’s a ton for you to try with this release, from trying out &lt;a href="https://medium.com/dartlang/dart-2-5-release-328822024970"&gt;the new dart:ffi or ML-based code completion features&lt;/a&gt; to &lt;a href="https://flutter.dev/web"&gt;experimenting with Flutter for web&lt;/a&gt;; from the new support for Catalina and iOS 13 and new &lt;a href="https://github.com/csells/flutter_toggle_buttons"&gt;ToggleButtons&lt;/a&gt; and &lt;a href="https://github.com/csells/flutter_color_filter"&gt;ColorFilter&lt;/a&gt; widgets to testing yourself on &lt;a href="https://assistant.google.com/services/a/uid/000000f3a4034e91"&gt;your Flutter widget knowledge&lt;/a&gt;. &lt;/p&gt;&lt;iframe id="imgFull" width="560" height="315" src="https://www.youtube.com/embed/wzNd3yyLcaU" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;p&gt;Now that you’ve got Flutter 1.9 in your hands, we’re excited to see what you will build with it! &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/mFJUXdn3s_w" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/4484734910742776973/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/09/flutter-news-from-gdd-china-flutter1.9.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/4484734910742776973" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/4484734910742776973" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/mFJUXdn3s_w/flutter-news-from-gdd-china-flutter1.9.html" title="Flutter news from GDD China: uniting Flutter on web and mobile, and introducing Flutter 1.9" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-q6Tsm3thNfM/XXe7Kex90VI/AAAAAAAAH14/N-HITRo_XswHcHAO7RTp1VLpSaQOomyDQCLcBGAs/s72-c/mmexport1568123208193.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/09/flutter-news-from-gdd-china-flutter1.9.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-9126290860812697024</id><published>2019-09-05T03:00:00.000-07:00</published><updated>2019-09-05T03:00:05.519-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="differential privacy" /><category scheme="http://www.blogger.com/atom/ns#" term="google developers" /><category scheme="http://www.blogger.com/atom/ns#" term="open-source" /><category scheme="http://www.blogger.com/atom/ns#" term="privacy" /><title type="text">Enabling developers and organizations to use differential privacy</title><content type="html">&lt;meta name="twitter:image" content="https://2.bp.blogspot.com/-cY23bdQ_B_o/XXA01uQIDnI/AAAAAAAAHzs/TiSL5_tY29QMa7Sehm6VdX6cDjB6cvmrgCLcBGAs/s1600/popular%2Btimes%2B_%2Bdishes%2Bgif.gif"&gt;&lt;img style="display:none" src="https://2.bp.blogspot.com/-cY23bdQ_B_o/XXA01uQIDnI/AAAAAAAAHzs/TiSL5_tY29QMa7Sehm6VdX6cDjB6cvmrgCLcBGAs/s1600/popular%2Btimes%2B_%2Bdishes%2Bgif.gif"&gt; &lt;em&gt;Posted by  Miguel Guevara, Product Manager, Privacy and Data Protection Office &lt;/em&gt; &lt;p&gt;Whether you're a city planner, a small business owner, or a software developer, gaining useful insights from data can help make services work better and answer important questions.  But, without strong privacy protections, you risk losing the trust of your citizens, customers, and users. &lt;/p&gt;&lt;p&gt;Differentially-private data analysis is a principled approach that enables organizations to learn from the majority of their data while simultaneously ensuring that those results do not allow any individual's data to be distinguished or re-identified. This type of analysis can be implemented in a wide variety of ways and for many different purposes. For example, if you are a health researcher, you may want to compare the average amount of time patients remain admitted across various hospitals in order to determine if there are differences in care. Differential privacy is a high-assurance, analytic means of ensuring that use cases like this are addressed in a privacy-preserving manner. &lt;/p&gt;&lt;p&gt;Today, we’re rolling out the open-source version of the &lt;a href="https://github.com/google/differential-privacy/"&gt;differential privacy library&lt;/a&gt; that helps power some of Google’s core products. To make the library easy for developers to use, we’re focusing on features that can be particularly difficult to execute from scratch, like automatically calculating bounds on user contributions.&lt;strong&gt; &lt;/strong&gt;It is now freely available to any organization or developer that wants to use it. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;A deeper look at the technology&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Our open source library was designed to meet the needs of developers. In addition to being freely accessible, we wanted it to be easy to deploy and useful.  &lt;/p&gt;&lt;p&gt;Here are some of the key features of the library: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;&lt;strong&gt;Statistical functions:&lt;/strong&gt; Most common data science operations are supported by this release. Developers can compute counts, sums, averages, medians, and percentiles using our library.   &lt;li&gt;&lt;strong&gt;Rigorous testing:&lt;/strong&gt; Getting differential privacy right is challenging. Besides an extensive test suite, we’ve included an extensible ‘Stochastic Differential Privacy Model Checker library’ to help prevent mistakes.  &lt;li&gt;&lt;strong&gt;Ready to use: &lt;/strong&gt;The real utility of an open-source release is in answering the question “Can I use this?” That’s why we’ve included a &lt;a href="https://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt; extension along with common recipes to get you started. We’ve described the details of our approach in a &lt;a href="https://arxiv.org/abs/1909.01917"&gt;technical paper&lt;/a&gt; that we’ve just released today.  &lt;li&gt;&lt;strong&gt;Modular:&lt;/strong&gt; We designed the library so that it can be extended to include other functionalities such as additional mechanisms, aggregation functions, or privacy budget management.  &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Investing in new privacy technologies&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;We have driven the research and development of practical, differentially-private techniques since we &lt;a href="https://security.googleblog.com/2014/10/learning-statistics-with-privacy-aided.html"&gt;released RAPPOR&lt;/a&gt; to help improve Chrome in 2014, and continue to spearhead their real-world application.  &lt;/p&gt;&lt;p&gt;We’ve used differentially private methods to create helpful features in our products, like how busy a business is over the course of a day or how popular a particular restaurant’s dish is in Google Maps, and &lt;a href="https://blog.google/products/project-fi/its-easier-ever-travel-project-fi/"&gt;improve Google Fi&lt;/a&gt;.  &lt;/p&gt;&lt;p&gt;&lt;a href="https://2.bp.blogspot.com/-cY23bdQ_B_o/XXA01uQIDnI/AAAAAAAAHzs/TiSL5_tY29QMa7Sehm6VdX6cDjB6cvmrgCLcBGAs/s1600/popular%2Btimes%2B_%2Bdishes%2Bgif.gif" imageanchor="1" &gt;&lt;img id="imgHalf" border="0" src="https://2.bp.blogspot.com/-cY23bdQ_B_o/XXA01uQIDnI/AAAAAAAAHzs/TiSL5_tY29QMa7Sehm6VdX6cDjB6cvmrgCLcBGAs/s1600/popular%2Btimes%2B_%2Bdishes%2Bgif.gif" data-original-width="616" data-original-height="1224" alt="Screen recording on phone checking popular times of restaurant" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This year, we’ve announced several open-source, privacy technologies—&lt;a href="https://medium.com/tensorflow/introducing-tensorflow-privacy-learning-with-differential-privacy-for-training-data-b143c5e801b6"&gt;Tensorflow Privacy&lt;/a&gt;, &lt;a href="https://medium.com/tensorflow/introducing-tensorflow-federated-a4147aa20041"&gt;Tensorflow Federated&lt;/a&gt;, &lt;a href="https://security.googleblog.com/2019/06/helping-organizations-do-more-without-collecting-more-data.html"&gt;Private Join and Compute&lt;/a&gt;—and today’s launch adds to this growing list. We're excited to make this library broadly available and hope developers will consider leveraging it as they build out their comprehensive data privacy strategies. From medicine, to government, to business, and beyond, it’s our hope that these open-source tools will help produce insights that benefit everyone. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Acknowledgements&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Software Engineers: Alain Forget, Bryant Gipson, Celia Zhang, Damien Desfontaines, Daniel Simmons-Marengo, Ian Pudney, Jin Fu, Michael Daub, Priyanka Sehgal, Royce Wilson, William Lam&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/47fTpF0ux3M" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/9126290860812697024/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/09/enabling-developers-and-organizations.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/9126290860812697024" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/9126290860812697024" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/47fTpF0ux3M/enabling-developers-and-organizations.html" title="Enabling developers and organizations to use differential privacy" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-cY23bdQ_B_o/XXA01uQIDnI/AAAAAAAAHzs/TiSL5_tY29QMa7Sehm6VdX6cDjB6cvmrgCLcBGAs/s72-c/popular%2Btimes%2B_%2Bdishes%2Bgif.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/09/enabling-developers-and-organizations.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-501424357455199538</id><published>2019-08-21T11:00:00.000-07:00</published><updated>2019-08-21T11:00:01.368-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="computer science" /><category scheme="http://www.blogger.com/atom/ns#" term="developer" /><category scheme="http://www.blogger.com/atom/ns#" term="developer student clubs" /><category scheme="http://www.blogger.com/atom/ns#" term="developers" /><category scheme="http://www.blogger.com/atom/ns#" term="dsc" /><category scheme="http://www.blogger.com/atom/ns#" term="google developers" /><category scheme="http://www.blogger.com/atom/ns#" term="solutions challenge" /><category scheme="http://www.blogger.com/atom/ns#" term="startup africa roadtrip" /><title type="text">Developer Student Clubs: A Walk That Changed Healthcare</title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-_4RspNvgUic/XVxTZWGmhiI/AAAAAAAAHzI/riVACO6VFrUFquEE8kUGo483JLVgDmhCACLcBGAs/s1600/classroomphoto.jpg"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-_4RspNvgUic/XVxTZWGmhiI/AAAAAAAAHzI/riVACO6VFrUFquEE8kUGo483JLVgDmhCACLcBGAs/s1600/classroomphoto.jpg"&gt; &lt;p&gt;&lt;em&gt;Posted by Erica Hanson, Program Manager&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ARUA, UGANDA&lt;/strong&gt; - Samuel Mugisha is a 23 year old university student with a laugh that echoes off every wall and a mind determined to make change. Recently he heard from a healthcare worker that many children at a local clinic were missing vaccinations, so he decided to take a walk. He toured his community, neighbor to neighbor, and asked one simple question: “Can I see your vaccination card?” &lt;/p&gt;&lt;p&gt;In response he was given dirt stained, wrinkled, torn pieces of paper, holding life or death information - all written in scribble. &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;He squinted, held the cards to the light, rubbed them on his pant leg, but for no use. They were impossible to read. As Samuel put it, “They were broken.”  &lt;/p&gt;&lt;p&gt;    &lt;/p&gt;&lt;p&gt;From the few cards he could read, Samuel noted children who had missed several vaccinations - they were unknowingly playing the odds, waiting to see if disease would find them.  &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;&lt;h2&gt;“Looking through the cards, you could tell these kids had missed several vaccinations.” &lt;/h2&gt;&lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;Without hesitation, Samuel got right to work, determined to fix the healthcare system with technology.  &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;He first brought together his closest friends from &lt;a href="https://developers.google.com/community/dsc/"&gt;Developer Student Clubs&lt;/a&gt; (DSC), a program supporting students impacting their communities through tech. He asked them: “Why can’t technology solve our problem?”  &lt;/p&gt;&lt;p&gt;&lt;a href="https://1.bp.blogspot.com/-CZUTYoL4F0w/XVxTNE2Zy9I/AAAAAAAAHzE/01CFqhIoOnED7Kchi8JghHSkw5QL6qfMgCLcBGAs/s1600/teamphoto.jpg" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-CZUTYoL4F0w/XVxTNE2Zy9I/AAAAAAAAHzE/01CFqhIoOnED7Kchi8JghHSkw5QL6qfMgCLcBGAs/s1600/teamphoto.jpg" data-original-width="1600" data-original-height="902" alt="Team photo of Developer Student Club"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;This newly formed team, including Samuel, Joshwa Benkya and Norman Acidri, came up with a twofold plan:  &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;ol&gt; &lt;li&gt;Create a mobile app to replace the broken cards, so healthcare workers can clearly track which vaccines their young patients have received.   &lt;li&gt;Create a notification to alert healthcare workers when a child is due for a new vaccination.  &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;The idea came together right as Developer Student Clubs launched its first Solution Challenge, an open call for all members to submit projects they recently imagined. These young developers had to give it a shot. They created a model, filled out an application, and pitched the idea. After waiting a month, they heard back - their team won the competition! Their idea was selected from a pool of 170 applicants across India, Africa, and Indonesia. In other words, everything was about to change.  &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;In a country where talent can go unnoticed and problems often go unsolved, this new team had pushed through the odds. Developer Student Clubs is a platform for these types of bold thinkers. Students who view the issues of their region not simply as obstacles to overcome, but chances to mend their home, build a better life for themselves, and transform the experiences of their people. &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;The goal of the Solution Challenge, and all other DSC programs, is to educate young developers early and equip them with the right skills to make an impact in their community.  &lt;/p&gt;&lt;p&gt;In this case, office space in Uganda was expensive and hard to find. Samuel’s team previously had few chances to all work under the same roof. After winning the challenge, Developer Student Clubs helped them find a physical space of their own to come together and collaborate - a simple tool, but one that led to a turning point. As Samuel described it,  &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;&lt;h2&gt;“Developer Student Clubs helped us not be alone and apart from each other while trying to solve this problem. They gave us the space to come together and learn. We could all be in the same room, thinking together.” &lt;/h2&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://1.bp.blogspot.com/-_4RspNvgUic/XVxTZWGmhiI/AAAAAAAAHzI/riVACO6VFrUFquEE8kUGo483JLVgDmhCACLcBGAs/s1600/classroomphoto.jpg" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-_4RspNvgUic/XVxTZWGmhiI/AAAAAAAAHzI/riVACO6VFrUFquEE8kUGo483JLVgDmhCACLcBGAs/s1600/classroomphoto.jpg" data-original-width="1265" data-original-height="713" alt="Image of developers in classroom"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;With this new space to work, DSC then brought some of Africa’s best &lt;a href="https://developers.google.com/community/gdg/"&gt;Google Developer Group&lt;/a&gt; Leads directly to the young developers. In these meetings, the students were given high-level insights on how to best leverage Android, Firebase, and Presto to propel their product forward. As Samuel put it:  &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;&lt;h2&gt;“If we wanted to learn something, they gave us the best expert.” &lt;/h2&gt;&lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;As a result, the team realized that with the scarcity of internet in Uganda, Firebase was the perfect technology to build with - allowing healthcare workers to use the app offline but “check in” and receive updates when they were able to find internet.  &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;Although the app has made impressive strides since winning the competition, this young team knows they can make it even better. They want to improve its usability by implementing more visuals and are working to create a version for parents, so families can track the status of their child’s vaccination on their own. &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;While there is plenty of work ahead, with these gifted students and Developer Student Clubs taking each step forward together, any challenge seems solvable.  &lt;/p&gt;&lt;p&gt;&lt;em&gt;What has the team been up to recently? From August 5th-9th they attended the &lt;a href="http://startupafricaroadtrip.com/"&gt;Startup Africa Roadtrip&lt;/a&gt;, an intensive training week on how best to refine a startup business model. &lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/-By-AENXPxQ" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/501424357455199538/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/08/developer-student-clubs-walk-that.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/501424357455199538" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/501424357455199538" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/-By-AENXPxQ/developer-student-clubs-walk-that.html" title="Developer Student Clubs: A Walk That Changed Healthcare" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-_4RspNvgUic/XVxTZWGmhiI/AAAAAAAAHzI/riVACO6VFrUFquEE8kUGo483JLVgDmhCACLcBGAs/s72-c/classroomphoto.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/08/developer-student-clubs-walk-that.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-6696146899425783139</id><published>2019-08-14T10:00:00.000-07:00</published><updated>2019-08-14T10:09:02.541-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AMP" /><category scheme="http://www.blogger.com/atom/ns#" term="FCP" /><category scheme="http://www.blogger.com/atom/ns#" term="Prerender" /><category scheme="http://www.blogger.com/atom/ns#" term="search" /><category scheme="http://www.blogger.com/atom/ns#" term="speed" /><title type="text">The Speed Benefit of AMP Prerendering</title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-W-j_FkY4mhI/XVHSIjK_h7I/AAAAAAAAHyM/XXxIHCYQMz84qopZCxu2eIDa1EN0yMWgACLcBGAs/s1600/graph1.png"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-W-j_FkY4mhI/XVHSIjK_h7I/AAAAAAAAHyM/XXxIHCYQMz84qopZCxu2eIDa1EN0yMWgACLcBGAs/s1600/graph1.png"&gt; &lt;em&gt;Posted By Eric Steinlauf, Software Engineer, Google&lt;/em&gt; &lt;p&gt;Today we want to walk through some updated analysis on the benefit that prerendering can provide on load times. AMP is &lt;a href="https://amp.dev/about/mission-and-vision"&gt;designed to reduce page load time&lt;/a&gt;, and one of the most important ways Google Search reduces page load time is through &lt;a href="https://blog.amp.dev/2018/07/23/privacy-and-user-choice-in-amps-software-architecture/"&gt;privacy-preserving-prerendering&lt;/a&gt; AMP documents before a link is clicked. &lt;/p&gt; &lt;h2&gt;First Viewport Ready&lt;/h2&gt;  &lt;p&gt;The AMP framework has been designed to understand the layout of all page content and the loading status of all resources, so it can determine the time when all "above the fold" content has loaded. It also knows when the document is prerendered and when it is displayed. Thus, the AMP framework can compute the time from click until the above the fold content is displayed. AMP measures page load speed with a custom metric called &lt;a href="https://github.com/ampproject/amphtml/blob/master/extensions/amp-viewer-integration/TICKEVENTS.md"&gt;First Viewport Ready&lt;/a&gt; (FVR). This is &lt;a href="https://github.com/ampproject/amphtml/blob/master/extensions/amp-viewer-integration/TICKEVENTS.md"&gt;defined&lt;/a&gt; as the point in time "when non-ad resources above the fold fired their load event measured from the time the user clicks (So takes pre-rendering into account)". If an AMP document is fully prerendered this metric will be 0. If prerendering was not complete at the time of click or if the document was not prerendered at all, then the metric will be greater than 0. &lt;/p&gt;&lt;p&gt;Google Search prerenders some AMP documents and not others so we are able to see the impact that prerendering has on FVR. The chart below shows percentiles for FVR with and without prerendering. FVR is 0 when the AMP framework successfully completes prerendering before the document is displayed. &lt;/p&gt;&lt;p&gt; &lt;a href="https://1.bp.blogspot.com/-W-j_FkY4mhI/XVHSIjK_h7I/AAAAAAAAHyM/XXxIHCYQMz84qopZCxu2eIDa1EN0yMWgACLcBGAs/s1600/graph1.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-W-j_FkY4mhI/XVHSIjK_h7I/AAAAAAAAHyM/XXxIHCYQMz84qopZCxu2eIDa1EN0yMWgACLcBGAs/s1600/graph1.png" data-original-width="1388" data-original-height="858" alt="Chart showing percentiles for FVR with and without prerendering" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;First Contentful Paint&lt;/h2&gt;  &lt;p&gt;&lt;a href="https://developers.google.com/web/tools/lighthouse/audits/first-contentful-paint"&gt;First Contentful Paint&lt;/a&gt; (FCP) is a page load speed metric that is measured by the browser. It is available for all documents, not just AMP documents. FCP is the point in time when the first bit of content from the DOM is rendered. A high value for FCP indicates that a page is definitely slow, but a low value for FCP does not necessarily mean that a page loads quickly since the first bit may not be important content. This is useful, but since AMP has a better understanding of what content is visible, FVR gives a better understanding of when content becomes visible. &lt;/p&gt;&lt;p&gt;FCP is not aware of prerendering so AMP computes a prerender sensitive derivative metric, Prerender-adjusted First Contentful Paint (PFCP), that subtracts out the time before click. When not prerendered, PFCP = FCP. FCP also decreases with prerendering, but the difference is less dramatic than FVR. &lt;/p&gt;&lt;p&gt; &lt;a href="https://1.bp.blogspot.com/-_EqRJ-XqFe4/XVHSZAwFDQI/AAAAAAAAHyQ/lizRDPfXnOAb5gRDOCSobGJJ_J7kwDzcACLcBGAs/s1600/graph2.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-_EqRJ-XqFe4/XVHSZAwFDQI/AAAAAAAAHyQ/lizRDPfXnOAb5gRDOCSobGJJ_J7kwDzcACLcBGAs/s1600/graph2.png" data-original-width="1388" data-original-height="858" alt="Chart showing percentiles for FVR with and without prerendering" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;It may be surprising that median prerendered PFCP is higher than median prerendered FVR. This happens because the browser has to draw the content to the screen after the click. PFCP includes that time, while FVR does not. &lt;/p&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;  &lt;p&gt;Prerendering AMP documents leads to substantial improvements in page load times. Page load time can be measured in different ways, but they consistently show that prerendering lets users see the content they want faster. For now, only AMP can provide the privacy preserving prerendering needed for this speed benefit. In the future, new web platform features, such as &lt;a href="https://developers.google.com/web/updates/2018/11/signed-exchanges"&gt;Signed Exchanges&lt;/a&gt;, will bring &lt;a href="https://blog.amp.dev/2019/05/22/privacy-preserving-instant-loading-for-all-web-content/"&gt;privacy-preserving instant loading&lt;/a&gt; to non-AMP documents too. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/TRbOnSbNNrk" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/6696146899425783139/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/08/the-speed-benefit-of-amp-prerendering.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/6696146899425783139" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/6696146899425783139" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/TRbOnSbNNrk/the-speed-benefit-of-amp-prerendering.html" title="The Speed Benefit of AMP Prerendering" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-W-j_FkY4mhI/XVHSIjK_h7I/AAAAAAAAHyM/XXxIHCYQMz84qopZCxu2eIDa1EN0yMWgACLcBGAs/s72-c/graph1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/08/the-speed-benefit-of-amp-prerendering.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-8621752650580388783</id><published>2019-08-06T10:00:00.000-07:00</published><updated>2019-08-06T10:42:42.046-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI" /><category scheme="http://www.blogger.com/atom/ns#" term="Artificial Intelligence" /><category scheme="http://www.blogger.com/atom/ns#" term="AutoML" /><category scheme="http://www.blogger.com/atom/ns#" term="Coral" /><category scheme="http://www.blogger.com/atom/ns#" term="Edge TPU" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="IoT" /><category scheme="http://www.blogger.com/atom/ns#" term="machine learning" /><category scheme="http://www.blogger.com/atom/ns#" term="TensorFlow" /><title type="text">Coral summer updates: Post-training quant support, TF Lite delegate, and new models! </title><content type="html"> &lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-0LfFVi1IRYs/XUmfy4IVTsI/AAAAAAAAHx0/bp7r3QJJiCshp-j-QJtM5vQNGmAZim4OgCLcBGAs/s1600/Summer_Updates_v2.png"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-0LfFVi1IRYs/XUmfy4IVTsI/AAAAAAAAHx0/bp7r3QJJiCshp-j-QJtM5vQNGmAZim4OgCLcBGAs/s1600/Summer_Updates_v2.png"&gt;  &lt;p&gt;&lt;em&gt;Posted by &lt;a href="https://twitter.com/vikramtank?lang=en"&gt;Vikram Tank&lt;/a&gt; (Product Manager), &lt;a href="https://coral.withgoogle.com/"&gt;Coral Team&lt;/a&gt;&lt;/em&gt;&lt;/p&gt; &lt;a href="https://1.bp.blogspot.com/-0LfFVi1IRYs/XUmfy4IVTsI/AAAAAAAAHx0/bp7r3QJJiCshp-j-QJtM5vQNGmAZim4OgCLcBGAs/s1600/Summer_Updates_v2.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-0LfFVi1IRYs/XUmfy4IVTsI/AAAAAAAAHx0/bp7r3QJJiCshp-j-QJtM5vQNGmAZim4OgCLcBGAs/s1600/Summer_Updates_v2.png" data-original-width="1600" data-original-height="1043"   alt="Summer updates cartoon" /&gt;&lt;/a&gt;&lt;p&gt;Coral’s had a busy summer working with customers, expanding distribution, and building new features — and of course taking some time for R&amp;R. We’re excited to share updates, early work, and new models for our platform for local AI with you. &lt;/p&gt;&lt;p&gt;The compiler has been updated to version 2.0, adding support for models built using post-training quantization—&lt;a href="https://www.tensorflow.org/lite/performance/post_training_quantization#full_integer_quantization_of_weights_and_activations"&gt;only when using full integer quantization&lt;/a&gt; (previously, we required quantization-aware training)—and fixing a few bugs. As the &lt;a href="https://medium.com/tensorflow/tensorflow-model-optimization-toolkit-post-training-integer-quantization-b4964a1ea9ba"&gt;Tensorflow team mentions in their Medium post&lt;/a&gt; “post-training integer quantization enables users to take an already-trained floating-point model and fully quantize it to only use 8-bit signed integers (i.e. `int8`).” In addition to reducing the model size, models that are quantized with this method can now be accelerated by the Edge TPU found in Coral products. &lt;/p&gt;&lt;p&gt;We've also updated the Edge TPU Python library to version 2.11.1 to include new APIs for transfer learning on Coral products. The &lt;a href="https://coral.withgoogle.com/docs/edgetpu/retrain-classification-ondevice-backprop/"&gt;new on-device back propagation API&lt;/a&gt; allows you to perform transfer learning on the last layer of an image classification model. The last layer of a model is removed before compilation and implemented on-device to run on the CPU. It allows for near-real time transfer learning and doesn’t require you to recompile the model. Our previously released &lt;a href="https://coral.withgoogle.com/docs/edgetpu/retrain-classification-ondevice/"&gt;imprinting API&lt;/a&gt;, has been updated to allow you to quickly retrain existing classes or add new ones while leaving other classes alone. You can now even keep the classes from the pre-trained base model. Learn more about both options for &lt;a href="https://coral.withgoogle.com/docs/edgetpu/models-intro/#transfer-learning-on-device"&gt;on-device transfer learning&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;Until now, accelerating your model with the Edge TPU required that you write code using either our &lt;a href="https://coral.withgoogle.com/docs/edgetpu/api-intro/"&gt;Edge TPU Python API&lt;/a&gt; or &lt;a href="https://coral.withgoogle.com/docs/edgetpu/api-cpp/"&gt;in C++&lt;/a&gt;. But now you can accelerate your model on the Edge TPU when using the &lt;a href="https://www.tensorflow.org/lite/guide/inference"&gt;TensorFlow Lite interpreter API&lt;/a&gt;, because we've released a TensorFlow Lite delegate for the Edge TPU. The &lt;a href="https://www.tensorflow.org/lite/performance/delegates"&gt;TensorFlow Lite Delegate API&lt;/a&gt; is an experimental feature in TensorFlow Lite that allows for the TensorFlow Lite interpreter to delegate part or all of graph execution to another executor—in this case, the other executor is the Edge TPU. Learn more about the &lt;a href="https://coral.withgoogle.com/docs/edgetpu/api-intro/#tensorflow-lite-delegate"&gt;TensorFlow Lite delegate for Edge TPU&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;Coral has also been working with Edge TPU and AutoML teams to release &lt;a href="https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/edgetpu"&gt;EfficientNet-EdgeTPU&lt;/a&gt;: a family of image classification models customized to run efficiently on the Edge TPU. The models are based upon the &lt;a href="https://ai.googleblog.com/2019/05/efficientnet-improving-accuracy-and.html"&gt;EfficientNet architecture&lt;/a&gt; to achieve the image classification accuracy of a server-side model in a compact size that's optimized for low latency on the Edge TPU. You can read more about the models’ development and performance on the &lt;a href=" https://ai.googleblog.com/2019/08/efficientnet-edgetpu-creating.html"&gt;Google AI Blog&lt;/a&gt;, and download trained and compiled versions on the &lt;a href="https://coral.withgoogle.com/models"&gt;Coral Models page&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;And, as summer comes to an end we also want to share that &lt;a href="https://www.arrow.com/en/campaigns/student-teacher-discount"&gt;Arrow offers a student teacher discount&lt;/a&gt; for those looking to experiment with the &lt;a href="https://www.arrow.com/en/manufacturers/google-corporation"&gt;boards&lt;/a&gt; in class or the lab this year. &lt;/p&gt;&lt;p&gt;We're excited to keep evolving the Coral platform, please keep sending us feedback at &lt;a href="mailto:coral-support@google.com"&gt;coral-support@google.com&lt;/a&gt;.  &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/MRzoL4dUOQw" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/8621752650580388783/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/08/coral-summer-updates-post-training.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/8621752650580388783" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/8621752650580388783" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/MRzoL4dUOQw/coral-summer-updates-post-training.html" title="Coral summer updates: Post-training quant support, TF Lite delegate, and new models! " /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-0LfFVi1IRYs/XUmfy4IVTsI/AAAAAAAAHx0/bp7r3QJJiCshp-j-QJtM5vQNGmAZim4OgCLcBGAs/s72-c/Summer_Updates_v2.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/08/coral-summer-updates-post-training.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-2737084369580386439</id><published>2019-07-31T12:00:00.000-07:00</published><updated>2019-08-02T14:17:55.854-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="endpoints" /><category scheme="http://www.blogger.com/atom/ns#" term="http" /><category scheme="http://www.blogger.com/atom/ns#" term="json" /><title type="text">Discontinuing support for JSON-RPC and Global HTTP Batch Endpoints</title><content type="html">&lt;meta name="twitter:image" content="https://2.bp.blogspot.com/-34CQznme--I/WmvQde4mXmI/AAAAAAAAEa8/OEwsdN_w8eIgk79mTxuVk-b1p3uqM0vogCLcBGAs/s1600/Screen%2BShot%2B2018-01-26%2Bat%2B5.03.14%2BPM.png"&gt; &lt;em&gt;Updated by Shilpa Kamalakar, Technical Program Manager &lt;/em&gt;&lt;p&gt;We have invested heavily in our API and service infrastructure to improve performance and security and to add features developers need to build world-class APIs. As we make changes we must address features that are no longer compatible with the latest architecture and business requirements. &lt;/p&gt;&lt;p&gt;The JSON-RPC protocol (&lt;a href="http://www.jsonrpc.org/specification"&gt;http://www.jsonrpc.org/specification&lt;/a&gt;) and Global HTTP Batch (&lt;a href="https://developers.google.com/classroom/guides/batch"&gt;example&lt;/a&gt;) are two such features. Our support for these features was based on an architecture using a single shared proxy to receive requests for all APIs. As we move towards a more distributed, high performance architecture where requests go directly to the appropriate API server we can no longer support these global endpoints. &lt;/p&gt;&lt;p&gt;We had originally planned to decommission these features by Mar 25, 2019. However, it came to our attention that few highly impacted customers might not have received the earlier notification. &lt;/p&gt;&lt;p&gt;As a result, we are extending the deprecation timeline to Aug 12, 2020, when we will discontinue support for both these features.   &lt;p&gt;Starting February 2020 and running through August 2020, we will periodically inject errors for short windows of time.  Closer to February 2020, we will provide exact details and schedule of these error injection windows.  &lt;/p&gt;&lt;p&gt;We know that these changes have customer impact and have worked to make the transition steps as clear as possible. Please see the guidance below which will help ease the transition. &lt;/p&gt;&lt;h2&gt;&lt;strong&gt;How do I know if I should migrate ?&lt;/strong&gt;&lt;/h2&gt;  &lt;h3&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;JSON-RPC&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;To identify whether you use JSON-RPC, you can check whether you send requests to &lt;code&gt;&lt;em&gt;"https://www.googleapis.com/rpc"&lt;/code&gt;&lt;/em&gt; or &lt;code&gt;&lt;em&gt;"https://content.googleapis.com/rpc"&lt;/code&gt;&lt;/em&gt;. If you do, you should migrate. &lt;/p&gt;&lt;h3&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;HTTP batch&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;A batch request is homogenous if the inner requests are addressed to the same API, even if addressed to different methods of the same API. Homogenous batching will still be supported but through &lt;em&gt;API specific&lt;/em&gt; batch endpoints. If you are currently forming homogeneous batch requests, using &lt;a href="https://developers.google.com/api-client-library/"&gt;Google API Client Libraries&lt;/a&gt; or using non-Google API client libraries or no client library (i.e making raw HTTP requests), you should migrate. &lt;/p&gt;&lt;p&gt;A batch request is heterogeneous if the inner requests go to different APIs. Heterogeneous batching will not be supported after the turn down of the Global HTTP batch endpoint. If you are currently forming heterogeneous batch requests, change your client code to send only homogenous batch requests, i.e you should migrate. &lt;/p&gt;&lt;h2&gt;&lt;strong&gt;What do you need to do to migrate ?&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;Clients will need to make the changes outlined below to migrate. &lt;/p&gt;&lt;h3&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;JSON-RPC&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;  &lt;h2&gt;&lt;strong&gt;Using Client Libraries&lt;/strong&gt;&lt;/h2&gt;&lt;/p&gt;  &lt;p&gt;         If you are using JSON-RPC client libraries (either the Google published libraries or other libraries), switch to REST client libraries and modify your application to work with REST client libraries. &lt;/p&gt;&lt;p&gt;         &lt;strong&gt;Example code for Javascript&lt;br&gt;&lt;/strong&gt; &lt;em&gt;Before&lt;/em&gt;&lt;br&gt; &lt;pre class="prettyprint"&gt;// json-rpc request for the list method&lt;br /&gt;gapi.client.rpcRequest('zoo.animals.list', 'v2',&lt;br /&gt;  {name:'giraffe'}).execute(x=&gt;console.log(x))&lt;br /&gt;&lt;/pre&gt; &lt;em&gt;After&lt;br&gt;&lt;/em&gt;&lt;pre class="prettyprint"&gt;&lt;em&gt;// json-rest request for the list method&lt;/em&gt;&lt;br /&gt;gapi.client.zoo.animals.list({name:'giraffe'}).then(x=&gt;console.log(x))&lt;br /&gt;&lt;/pre&gt;  &lt;h2&gt;    &lt;strong&gt;Not Using Client Libraries i.e making raw HTTP requests&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;         If you are not using client libraries (i.e. making raw HTTP requests): &lt;/p&gt;&lt;ol&gt; &lt;li&gt;Use the REST URLs, and  &lt;li&gt;Change how you form the request and parse the response.          &lt;p&gt;&lt;strong&gt;Example code&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;&lt;em&gt;Before&lt;br&gt;&lt;/em&gt;&lt;pre class="prettyprint"&gt;// Request URL (JSON-RPC)&lt;br /&gt;POST https://content.googleapis.com/rpc?alt=json&amp;key=xxx&lt;br /&gt;// Request Body (JSON-RPC)&lt;br /&gt;[{&lt;br /&gt;  "jsonrpc":"2.0",&lt;br /&gt;  "id":"gapiRpc",&lt;br /&gt;  "method":"zoo.animals.list",&lt;br /&gt;  "apiVersion":"v2",&lt;br /&gt;  "params":{"name":"giraffe"}&lt;br /&gt;}]&lt;br /&gt;&lt;/pre&gt;&lt;em&gt;After&lt;/em&gt;&lt;pre class="prettyprint"&gt;// Request URL (JSON-REST)&lt;br /&gt;GET &lt;br /&gt;https://content.googleapis.com/zoo/v2/animals?name=giraffe&amp;key=xxx &lt;/pre&gt; &lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;HTTP batch&lt;/span&gt;&lt;/strong&gt;&lt;/h2&gt;  &lt;h2&gt;    &lt;strong&gt;Heterogeneous batch requests&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;         If you are currently forming heterogeneous batch requests, change your client code to send only homogenous batch requests. &lt;/p&gt;&lt;p&gt;         &lt;strong&gt;Example code&lt;br&gt;&lt;/strong&gt;The example demonstrates how we can split a heterogeneous batch request for 2 apis (urlshortener and zoo) into 2 homogeneous batch requests. &lt;/p&gt;         &lt;br&gt;&lt;em&gt;Before&lt;/em&gt;&lt;br&gt; &lt;pre class="prettyprint"&gt;// heterogeneous batch request example.&lt;br /&gt;&lt;br /&gt;// Notice that the outer batch request contains inner API requests&lt;br /&gt;// for two different APIs.&lt;br /&gt;&lt;br /&gt;// Request to urlshortener API&lt;br /&gt;request1 = gapi.client.urlshortener.url.get({"shortUrl": &lt;br /&gt;"http://goo.gl/fbsS"});&lt;br /&gt;&lt;br /&gt;// Request to zoo API&lt;br /&gt;request2 = gapi.client.zoo.animals.list();&lt;br /&gt;&lt;br /&gt;// Request to urlshortener API&lt;br /&gt;request3 = gapi.client.urlshortener.url.get({"shortUrl":&lt;br /&gt;"https://goo.gl/XYFuPH"});&lt;br /&gt;&lt;br /&gt;// Request to zoo API&lt;br /&gt;request4 = gapi.client.zoo.animal().get({"name": "giraffe"});&lt;br /&gt;&lt;br /&gt;// Creating single heterogeneous batch request object&lt;br /&gt;heterogeneousBatchRequest = gapi.client.newBatch();&lt;br /&gt;// adding the 4 batch requests&lt;br /&gt;heterogeneousBatchRequest.add(request1);&lt;br /&gt;heterogeneousBatchRequest.add(request2);  &lt;br /&gt;heterogeneousBatchRequest.add(request3);&lt;br /&gt;heterogeneousBatchRequest.add(request4);&lt;br /&gt;// print the heterogeneous batch request&lt;br /&gt;heterogeneousBatchRequest.then(x=&gt;console.log(x));&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;    &lt;br&gt;     &lt;em&gt;After&lt;/em&gt;&lt;br&gt; &lt;pre class="prettyprint"&gt;// Split heterogeneous batch request into two homogenous batch requests&lt;br /&gt;&lt;br /&gt;// Request to urlshortener API&lt;br /&gt;request1 = gapi.client.urlshortener.url.get({"shortUrl": "http://goo.gl/fbsS"});&lt;br /&gt;&lt;br /&gt;// Request to zoo API&lt;br /&gt;request2 = gapi.client.zoo.animals.list();&lt;br /&gt;&lt;br /&gt;// Request to urlshortener API&lt;br /&gt;request3 = gapi.client.urlshortener.url.get({"shortUrl": "http://goo.gl/fbsS"})&lt;br /&gt;&lt;br /&gt;// Request to zoo API&lt;br /&gt;request4 = gapi.client.zoo.animals.list();&lt;br /&gt;&lt;br /&gt;// Creating homogenous batch request object for urlshorterner&lt;br /&gt;homogenousBatchUrlshortener = gapi.client.newBatch();&lt;br /&gt;// adding the 2 batch requests for urlshorterner&lt;br /&gt;homogenousBatchUrlshortener.add(request1); &lt;br /&gt;homogenousBatchUrlshortener.add(request3); &lt;br /&gt;&lt;br /&gt;// Creating homogenous batch request object for zoo&lt;br /&gt;homogenousBatchZoo = gapi.client.newBatch();&lt;br /&gt;&lt;br /&gt;// adding the 2 batch requests for zoo&lt;br /&gt;homogenousBatchZoo.add(request2); &lt;br /&gt;homogenousBatchZoo.add(request4);&lt;br /&gt;// print the 2 homogenous batch request&lt;br /&gt;Promise.all([homogenousBatchUrlshortener,homogenousBatchZoo])&lt;br /&gt;    .then(x=&gt;console.log(x));&lt;br /&gt;&lt;/pre&gt;  &lt;h2&gt;    &lt;strong&gt;Homogeneous batch requests &lt;/strong&gt;&lt;/h2&gt;  &lt;h2&gt;        &lt;strong&gt;Google API client libraries&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;         If you are using &lt;a href="https://developers.google.com/api-client-library/"&gt;Google API Client Libraries&lt;/a&gt;, these libraries have been regenerated to no longer make requests to the global HTTP batch endpoint. Recommendation for clients using these libraries is to upgrade to the latest version if possible. Please see the language specific guidance below for minimum Google API Client Library to upgrade to. &lt;/p&gt;&lt;strong&gt;1. Java&lt;/strong&gt;&lt;ol&gt;&lt;ul&gt;  &lt;li&gt;Minimum Google Client Library Version supported is 1.23.1.   &lt;li&gt;Consumer Steps   &lt;ol&gt;&lt;li&gt;&lt;p&gt;Update all Google API Service packages (`com.google.apis`) to a version where the supporting library version is 1.23.1 or higher. For example, upgrade `com.google.apis:google-api-services-drive` from version `v3-rev159-1.22.0` to `v3-rev20190620-1.30.1`.&lt;/li&gt;         &lt;ol&gt;&lt;li&gt;If you explicitly import `com.google.api-client:google-api-client`, upgrade `com.google.api-client:google-api-client` to version 1.23.1 or higher.&lt;/li&gt;&lt;/ol&gt;   &lt;li&gt;  Please ensure you are creating your BatchRequest (i.e)  &lt;code&gt;com.google.api.client.googleapis.batch.BatchRequest&lt;/code&gt; instance via your service client. The BatchRequest constructor is now deprecated and will not work in the future. Instead, use your service client’s batch() method to create a new BatchRequest using below example &lt;/li&gt;&lt;/li&gt;&lt;p&gt;                   &lt;strong&gt;Example code&lt;/strong&gt;&lt;/p&gt; &lt;pre class="prettyprint"&gt;Drive client = Drive.builder(transport, jsonFactory, &lt;br /&gt;credential).setApplicationName("BatchExample/1.0").build&lt;br /&gt;();&lt;br /&gt;&lt;p&gt;BatchRequest batch = client.batch();&lt;br /&gt;&lt;/pre&gt;    &lt;li&gt; For global batch, confirm that your code does not explicitly specify the global batch path (i.e. &lt;code&gt;&lt;em&gt;"/batch"&lt;/em&gt;&lt;/code&gt; at the end of the path).  If it does, change it to refer to the api/version specific path (example &lt;code&gt;"&lt;em&gt;/batch/library/v1&lt;/em&gt;"&lt;/code&gt;).   &lt;li&gt;&lt;p&gt; Rebuild&lt;/p&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;/ol&gt; &lt;strong&gt; 2. Python &lt;/strong&gt;  &lt;ul&gt;  &lt;li&gt;Minimum Google Client Library Version supported is 1.6.6.   &lt;li&gt;Consumer Steps   &lt;ul&gt;   &lt;li&gt;Update to version 1.6.6 or higher    &lt;li&gt;For global batch, confirm that your code does not explicitly specify the global batch path (i.e. &lt;code&gt;&lt;em&gt;"/batch"&lt;/em&gt;&lt;/code&gt; at the end of the path).  If it does, change it to refer to the api/version specific path (example &lt;code&gt;"&lt;em&gt;/batch/library/v1&lt;/em&gt;"&lt;/code&gt;).    &lt;li&gt;Rebuild &lt;/li&gt;   &lt;/ul&gt;  &lt;li&gt;Please note, a warning is included if users try to construct a request with the legacy batch endpoint. See &lt;a href="https://github.com/googleapis/google-api-python-client/releases/tag/v1.6.6"&gt;Release&lt;/a&gt; notes for reference. &lt;/li&gt;  &lt;/ul&gt; &lt;strong&gt;3. PHP&lt;/strong&gt;  &lt;ul&gt;  &lt;li&gt;Minimum Google Client Library Version supported is 0.86.    &lt;li&gt;Consumer Steps   &lt;ul&gt;   &lt;li&gt;Update to version 0.86 or higher    &lt;li&gt;For global batch, confirm that your code does not explicitly specify the global batch path (i.e. &lt;code&gt;&lt;em&gt;"/batch"&lt;/em&gt;&lt;/code&gt; at the end of the path).  If it does, change it to refer to the api/version specific path (example &lt;code&gt;"&lt;em&gt;/batch/library/v1&lt;/em&gt;"&lt;/code&gt;).    &lt;li&gt;Rebuild &lt;/li&gt;   &lt;/ul&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;strong&gt;4. .NET&lt;/strong&gt;  &lt;ul&gt;  &lt;li&gt;Minimum Google Client Library Version supported is 1.32.2.   &lt;li&gt;Consumer Steps   &lt;ul&gt;   &lt;li&gt;Update to version 1.32.2 or higher    &lt;li&gt;For global batch, confirm that your code does not explicitly specify the global batch path (i.e. &lt;code&gt;&lt;em&gt;"/batch"&lt;/em&gt;&lt;/code&gt; at the end of the path).  If it does, change it to refer to the api/version specific path (example &lt;code&gt;"&lt;em&gt;/batch/library/v1&lt;/em&gt;"&lt;/code&gt;).    &lt;li&gt;Rebuild &lt;/li&gt;   &lt;/ul&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;strong&gt;5. Javascript&lt;/strong&gt;  &lt;ul&gt;  &lt;li&gt;If you are using Javascript client lib, please reach out to us with your questions and we will do our best to support &lt;/li&gt;  &lt;/ul&gt; &lt;strong&gt;6. Objective-C&lt;/strong&gt;  &lt;ul&gt;  &lt;li&gt;Minimum Google Client Library Version supported is 1.3.0.   &lt;li&gt;Consumer Steps   &lt;ul&gt;   &lt;li&gt;Update to version 1.3.0 or higher    &lt;li&gt;For global batch, confirm that your code does not explicitly specify the global batch path (i.e. &lt;code&gt;&lt;em&gt;"/batch"&lt;/em&gt;&lt;/code&gt; at the end of the path).  If it does, change it to refer to the api/version specific path (example &lt;code&gt;"&lt;em&gt;/batch/library/v1&lt;/em&gt;"&lt;/code&gt;).    &lt;li&gt;Rebuild &lt;/li&gt;   &lt;/ul&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;strong&gt;7. Dart&lt;/strong&gt;   &lt;ul&gt;  &lt;li&gt;The Google API Dart Client Library does not support these features.  &lt;/ul&gt;    &lt;strong&gt;8. Ruby&lt;/strong&gt;  &lt;ul&gt;  &lt;li&gt;Minimum Google Client Library Version supported is 0.11.0.   &lt;li&gt;Consumer Steps   &lt;ul&gt;   &lt;li&gt;Update to version 0.11.0 or higher    &lt;li&gt;For global batch, confirm that your code does not explicitly specify the global batch path (i.e. &lt;code&gt;&lt;em&gt;"/batch" &lt;/em&gt;&lt;/code&gt;at the end of the path).  If it does, change it to refer to the api/version specific path (example &lt;code&gt;"&lt;em&gt;/batch/library/v1&lt;/em&gt;"&lt;/code&gt;).    &lt;li&gt;Rebuild &lt;/li&gt;   &lt;/ul&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;strong&gt;9. Node.js&lt;/strong&gt;  &lt;ul&gt;  &lt;li&gt;Minimum Google Client Library Version supported is 1.0.    &lt;li&gt;Consumer Steps   &lt;ul&gt;   &lt;li&gt;Update to version 1.0 or higher    &lt;li&gt;For global batch, confirm that your code does not explicitly specify the global batch path (i.e. &lt;code&gt;&lt;em&gt;"/batch"&lt;/em&gt;&lt;/code&gt; at the end of the path).  If it does, change it to refer to the api/version specific path (example &lt;code&gt;"&lt;em&gt;/batch/library/v1&lt;/em&gt;"&lt;/code&gt;).    &lt;li&gt;Rebuild &lt;/li&gt;   &lt;/ul&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;strong&gt;10. Go&lt;/strong&gt;  &lt;ul&gt;  &lt;li&gt;The Google API Go Client Library does not support these features. &lt;/li&gt;  &lt;/ul&gt; &lt;strong&gt;11. C++&lt;/strong&gt;  &lt;ul&gt;  &lt;li&gt;The &lt;a href="https://github.com/google/google-api-cpp-client"&gt;Google C++ API Client Library&lt;/a&gt; has been deprecated due to unrelated reasons. However, should you need to use the C++ client with batching in the short term, see consumer steps below.   &lt;li&gt;Consumer Steps   &lt;ul&gt;   &lt;li&gt;Change app code to explicitly pass the non-global batch URL to the C++ client library i.e pass the API-version specific endpoint (example “&lt;code&gt;/batch/library/v1&lt;/code&gt;") to the overload method that takes the batch endpoint as an explicit parameter; merely updating the C++ client library to the latest version will not help. &lt;p&gt; &lt;strong&gt;Example code&lt;/strong&gt;&lt;br&gt;&lt;em&gt;Before&lt;/em&gt;&lt;pre class="prettyprint"&gt;&lt;em&gt;HttpRequestBatch batch(service-&gt;transport());&lt;/em&gt;&lt;/pre&gt;  &lt;br&gt;&lt;em&gt;After&lt;/em&gt;          &lt;pre class="prettyprint"&gt;HttpRequestBatch batch(service-&gt;transport(), &lt;br /&gt;service-&gt;batch_url());&lt;br /&gt;&lt;/pre&gt;       &lt;li&gt;Link, rebuild and redeploy&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ol&gt; &lt;h2&gt;&lt;strong&gt;Non-Google API client libraries or no client library&lt;/strong&gt;&lt;/h2&gt;          If you are currently forming homogeneous batch requests and using non-Google API client libraries or no client library (i.e making raw HTTP requests), then: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Change the endpoint from www.googleapis.com/batch to www.googleapis.com/batch/&amp;lt;api&gt;/&amp;lt;version&gt;.  &lt;li&gt;Or, simply read the value of 'batchPath' from the API's discovery doc and use that value. &lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;&lt;strong&gt;We’re here to help&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;For help on migration, consult the &lt;a href="https://developers.google.com/products/"&gt;API documentation&lt;/a&gt; or tag Stack Overflow questions with the &lt;a href="https://stackoverflow.com/tags/google-api/"&gt;'google-api'&lt;/a&gt; tag. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/hHSfS_4jwCs" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/2737084369580386439/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2018/03/discontinuing-support-for-json-rpc-and.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/2737084369580386439" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/2737084369580386439" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/hHSfS_4jwCs/discontinuing-support-for-json-rpc-and.html" title="Discontinuing support for JSON-RPC and Global HTTP Batch Endpoints" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2018/03/discontinuing-support-for-json-rpc-and.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-5788335494769599777</id><published>2019-07-31T10:05:00.001-07:00</published><updated>2019-07-31T10:11:32.834-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Developer Communities" /><category scheme="http://www.blogger.com/atom/ns#" term="diversity" /><category scheme="http://www.blogger.com/atom/ns#" term="gdg" /><category scheme="http://www.blogger.com/atom/ns#" term="women techmakers" /><category scheme="http://www.blogger.com/atom/ns#" term="wtm" /><title type="text"> Women Techmakers Summit Europe: Supporting Diversity &amp; Inclusion in Tech </title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-Co0NEJk_hHw/XUCZ-VNz6RI/AAAAAAAAHxU/ncW-zyBhZZ45dmOEcRMeot4NSFr0FTb4QCLcBGAs/s1600/image1.png"&gt; &lt;em&gt;Posted By &lt;a href="https://twitter.com/_francied?lang=en"&gt;Franziska Hauck&lt;/em&gt;&lt;/a&gt; and &lt;a href="https://twitter.com/ThisKatha"&gt;&lt;em&gt;Katharina Lindenthal &lt;/a&gt;, Google Developer Relations Europe&lt;/em&gt; &lt;p&gt;Once a year, we invite community organizers and influencers from &lt;a href="https://developers.google.com/community/gdg/"&gt;developer groups&lt;/a&gt; that support diversity and inclusion in their local tech ecosystem to the &lt;a href="https://www.womentechmakers.com/"&gt;Women Techmakers&lt;/a&gt; Summit Europe. The Women Techmakers Summit is designed to provide training opportunities, share best practices, show success stories and build meaningful relationships. The fourth edition of the WTM Summit in Europe took place in Warsaw, one of Europe’s most innovative tech and startup ecosystems. &lt;/p&gt;&lt;p&gt; &lt;div style="width:image width px; font-size:80%; text-align:center;"&gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-Co0NEJk_hHw/XUCZ-VNz6RI/AAAAAAAAHxU/ncW-zyBhZZ45dmOEcRMeot4NSFr0FTb4QCLcBGAs/s1600/image1.png" data-original-width="919" data-original-height="446" alt="Such positive energy! All 120 attendees of the WTM Summit Europe 2019" width="width" height="height" style="padding-bottom:0.5em;" /&gt;&lt;em&gt;Such positive energy! All 120 attendees of the WTM Summit Europe 2019&lt;/em&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;h2&gt;Expertise from the Community for the Community&lt;/h2&gt; &lt;p&gt;The Women Techmakers Summit hosted 120 people, all women and men that are leading tech communities across Europe. With more than half of the sessions being delivered by community influencers, the group came together to share their best practices, learn from each other and discuss all things related to diversity &amp; inclusion.  “A fantastic opportunity to meet other community organizers across Europe and learn from each other.” &lt;/p&gt;&lt;p&gt;We also invited role models to draw inspiration and motivation from. Head of Google for Startups, Agnieszka Hryniewicz-Bieniek, and Cloud Engineer, Ewa Maciaś, demonstrated that stepping out of our comfort zone is something we should do more and more. No one has the right answers from the start but by trying out new ways, we can carve our individual paths. Fear of failure is real. It should not keep us from experimenting, though. &lt;/p&gt;&lt;p&gt;Google’s Natalie Villalobos, head of the Women Techmakers program, and Emma Haruka Iwao, record breaker for calculating the most accurate value of Pi with Google Cloud, gave a glimpse into their personal stories. Their insights? Sometimes we need to go through hard times. They equipped us with the right mindset to push through, become your boss and succeed.  &lt;/p&gt;&lt;p&gt;This left the attendees with the right motivation to get back to their communities: “This was my first WTM Summit, and it was an incredible experience. I met some amazing ladies and role models, and will be happy to share the inspiration I got with my local community.” &lt;/p&gt;&lt;p&gt; &lt;div style="width:image width px; font-size:80%; text-align:center;"&gt;&lt;img id="imgFull" border="0" src="https://4.bp.blogspot.com/-bcGDpgPS2mM/XUCcfMY7-KI/AAAAAAAAHxo/cTF1DE0sNSsbt3sB6VQqwoHVT2ev2XwwwCLcBGAs/s1600/image3.png" alt="Googler Emma Haruka Iwao sharing her journey to break the world record for calculating the most accurate value of Pi " width="width" height="height" style="padding-bottom:0.5em;" /&gt;&lt;em&gt;Googler Emma Haruka Iwao sharing her journey to break the world record for calculating the most accurate value of Pi &lt;/em&gt;&lt;/div&gt;  &lt;/p&gt;&lt;p&gt; &lt;h2&gt;Building the Basis for Diversity and Inclusion&lt;/h2&gt;  &lt;p&gt;“Being at the WTM Summit felt like being inside a family. I felt really included like at no conference before." To make everyone feel welcome, a code of conduct was visible for all attendees, and prayers and parents spaces were provided for all attendees. The itself needed to become the inspiration for community organizers and influencers to carry the learnings back to the communities.  &lt;/p&gt;&lt;p&gt; &lt;div style="width:image width px; font-size:80%; text-align:center;"&gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-SCfH6jRFGRw/XUCb-P9QN9I/AAAAAAAAHxg/5lEP9ZDctN4h-W2U8UGw4Pqn1Yn0GQIsgCLcBGAs/s1600/image2.png" alt="Organizers working together to develop best practices to foster diversity and inclusion in their tech communities " width="width" height="height" style="padding-bottom:0.5em;" /&gt;&lt;em&gt;Organizers working together to develop best practices to foster diversity and inclusion in their tech communities &lt;/em&gt;&lt;/div&gt; &lt;/p&gt;&lt;h2&gt;Women Techmakers: Changing the Narrative&lt;/h2&gt;  &lt;p&gt;One of the core elements of Women Techmakers is creating and providing community for women in tech. Women Techmakers Ambassadors thrive diversity and inclusion initiatives in their local tech community to help to bring more women into the industry. In Europe, more than &lt;a href="https://www.womentechmakers.com/ambassadors"&gt;150 WTM Ambassadors&lt;/a&gt; from 25 countries support their local tech communities to close the gap between the number of women and men in the industry. Meetup organizers and community advocates who want to achieve parity can join the Women Techmakers program. As members, they are given the tools and opportunities to change the narrative.  &lt;/p&gt;&lt;p&gt;If you are interested in joining the WTM Ambassadors Program, reach out to &lt;a href="mailto:WTM-Ambassadors-Europe@google.com"&gt;WTM-Europe@google.com&lt;/a&gt;  &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/XSP6KuoaAqY" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/5788335494769599777/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/07/women-techmakers-summit-europe.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/5788335494769599777" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/5788335494769599777" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/XSP6KuoaAqY/women-techmakers-summit-europe.html" title=" Women Techmakers Summit Europe: Supporting Diversity &amp; Inclusion in Tech " /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-Co0NEJk_hHw/XUCZ-VNz6RI/AAAAAAAAHxU/ncW-zyBhZZ45dmOEcRMeot4NSFr0FTb4QCLcBGAs/s72-c/image1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/07/women-techmakers-summit-europe.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-4578601445237193105</id><published>2019-07-11T11:38:00.000-07:00</published><updated>2019-07-11T11:38:07.385-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="actions on google" /><category scheme="http://www.blogger.com/atom/ns#" term="codelabs" /><category scheme="http://www.blogger.com/atom/ns#" term="Women Tech Makers" /><category scheme="http://www.blogger.com/atom/ns#" term="women techmakers" /><title type="text">International Women's Day'19 featuring Actions on Google</title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-exyldFrUWf0/XSZotCD7LDI/AAAAAAAAHwU/hhvLkf1GQbEiIPvr2yxm6pFQeRd4rq75wCLcBGAs/s1600/Screen%2BShot%2B2019-06-27%2Bat%2B2.35.29%2BPM%2B-%2BRubi%2BMartinez.png"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-exyldFrUWf0/XSZotCD7LDI/AAAAAAAAHwU/hhvLkf1GQbEiIPvr2yxm6pFQeRd4rq75wCLcBGAs/s1600/Screen%2BShot%2B2019-06-27%2Bat%2B2.35.29%2BPM%2B-%2BRubi%2BMartinez.png"&gt; &lt;em&gt; Posted by Marisa Pareti, Rubi Martinez &amp; Jessica Earley-Cha &lt;/em&gt; &lt;p&gt;In celebration of International Women’s Day,&lt;a href="https://www.womentechmakers.com/"&gt; Women Techmakers&lt;/a&gt; hosted its sixth annual summit series to acknowledge and celebrate women in the tech industry, and to create a space for attendees to build community, hear from industry leaders, and learn new skills. The series featured 19 summits and 305 meetups across 87 countries. &lt;/p&gt;&lt;p&gt;This year, Women Techmakers partnered with the&lt;a href="https://developers.google.com/actions/"&gt; Actions on Google&lt;/a&gt; team to host technical workshops at these events so attendees could learn the fundamental concepts to develop Actions for the Google Assistant.Together, we created hundreds of new Actions for the Assistant. Check out some of the highlights of this year’s summit in the video below: &lt;/p&gt; &lt;center&gt;&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/lsJuGnwBqJ0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;/center&gt; &lt;h2&gt;&lt;strong&gt;Technical Workshop Details&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;If you couldn’t attend any of our meetups this past year, we’ll cover our technical workshops now so you can start building for the Assistant from home. The technical workshop kicked off by introducing Actions on Google — the platform that enables developers to build Actions for the Google Assistant. Participants got hands-on experience building their first Action with the following features: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Users can start a conversation by explicitly calling the Action by name, which then responds with a greeting message.  &lt;li&gt;Once in conversation, users are prompted to provide their favorite color. The Action parses the user’s input to extract the information it needs (namely, the color parameter).  &lt;li&gt;If a color is provided, the Action processes the color parameter to auto-generate a “lucky number” to send back to the user and the conversation ends.  &lt;li&gt;If no color is provided, the Action sends the user additional prompts until the parameter is extracted.  &lt;li&gt;Users can explicitly leave the conversation at any time. &lt;/li&gt;&lt;/ul&gt; &lt;a href="https://4.bp.blogspot.com/-56qzAi15BfI/XSZpsD8UCaI/AAAAAAAAHwc/nicusY6BLvMdirr5gb4m-2DyUuCtHdUBACLcBGAs/s1600/1aog.png" imageanchor="1" &gt;&lt;img id=imgFull border="0" src="https://4.bp.blogspot.com/-56qzAi15BfI/XSZpsD8UCaI/AAAAAAAAHwc/nicusY6BLvMdirr5gb4m-2DyUuCtHdUBACLcBGAs/s1600/1aog.png" data-original-width="1400" data-original-height="857" /&gt;&lt;/a&gt; &lt;p&gt;During&lt;a href="https://codelabs.developers.google.com/codelabs/actions-1/#0"&gt; Codelab level 1&lt;/a&gt;, participants learned how to parse the user’s input by using&lt;a href="https://dialogflow.com/"&gt; Dialogflow&lt;/a&gt;, a tool that uses Machine Learning and acted as their Natural Language Processor (NLP). Dialogflow processes what the user says and extracts important information from that input to identify how to fulfill the user’s request. Participants configured Dialogflow and connected it to their code’s back-end using&lt;a href="https://dialogflow.com/docs/fulfillment/configure"&gt; Dialogflow’s inline editor&lt;/a&gt;. In the editor, participants added their code and tested their Action in the&lt;a href="https://developers.google.com/actions/tools/simulator"&gt; Action Simulator&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;In&lt;a href="https://codelabs.developers.google.com/codelabs/actions-2/#0"&gt; Codelab level 2&lt;/a&gt;, participants continued building on their Action, adding features such as: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Supports deep links to directly launch the user into certain points of dialog  &lt;li&gt;Uses utilities provided by the Actions on Google platform to fetch the user’s name and address them personally  &lt;li&gt;Responds with follow-up questions to further the conversation  &lt;li&gt;Presents users with a rich visual response complete with sound effects &lt;/li&gt;&lt;/ul&gt; &lt;a href="https://4.bp.blogspot.com/-5HfLRFSiaBg/XSZp8rqjZKI/AAAAAAAAHwk/wxgnxdKJ_9AZUem3sJ4JjSefKjrmHo-VgCLcBGAs/s1600/2aog.png" imageanchor="1" &gt;&lt;img id=imgFull border="0" src="https://4.bp.blogspot.com/-5HfLRFSiaBg/XSZp8rqjZKI/AAAAAAAAHwk/wxgnxdKJ_9AZUem3sJ4JjSefKjrmHo-VgCLcBGAs/s1600/2aog.png" data-original-width="1400" data-original-height="759" /&gt;&lt;/a&gt;  &lt;p&gt;Instead of using Dialogflow’s inline editor, participants set up a&lt;a href="https://firebase.google.com/docs/functions/"&gt; Cloud Functions for Firebase&lt;/a&gt; as their server. &lt;/p&gt;&lt;p&gt;You can learn more about developing your own Actions &lt;a href="https://developers.google.com/actions/codelabs/"&gt;here&lt;/a&gt;. To support developers’ efforts in building great Actions for the Google Assistant, the team also has a&lt;a href="https://developers.google.com/actions/community/"&gt; developer community program&lt;/a&gt;. &lt;/p&gt;&lt;p&gt; &lt;em&gt;Alex Eremia, a workshop attendee, reflected, “I think voice applications will have a huge impact on society both today and in the future. It will become a natural way we interact with the items around us.”&lt;/em&gt;&lt;/p&gt;&lt;p&gt;From keynotes, fireside chats, and interactive workshops, the Women Techmakers summit attendees enjoyed a mixture of technical and inspirational content. If you’re interested in learning more and getting involved, follow us&lt;a href="https://twitter.com/WomenTechmakers"&gt; WTM on twitter&lt;/a&gt;,&lt;a href="https://www.womentechmakers.com/"&gt; check out our website&lt;/a&gt; and sign up to become&lt;a href="https://www.womentechmakers.com/membership"&gt; a member&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;To learn more&lt;a href="https://developers.google.com/actions/"&gt; Actions on Google&lt;/a&gt; and how to build for the Google Assistant, be sure to&lt;a href="https://twitter.com/actionsongoogle"&gt; follow us on Twitter&lt;/a&gt;, and join our&lt;a href="https://www.reddit.com/r/GoogleAssistantDev/"&gt; Reddit community&lt;/a&gt;! &lt;/p&gt; &lt;a href="https://1.bp.blogspot.com/-fgRnrocAaJg/XSZqJO7bc7I/AAAAAAAAHwo/t8u-ntk7zGgg4W-ZueJOJVZjDks96Y4oACLcBGAs/s1600/3aog.png" imageanchor="1" &gt;&lt;img id=imgFull border="0" src="https://1.bp.blogspot.com/-fgRnrocAaJg/XSZqJO7bc7I/AAAAAAAAHwo/t8u-ntk7zGgg4W-ZueJOJVZjDks96Y4oACLcBGAs/s1600/3aog.png" data-original-width="1028" data-original-height="690" /&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/PyghRdW7kqE" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/4578601445237193105/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/07/international-womens-day19-featuring.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/4578601445237193105" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/4578601445237193105" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/PyghRdW7kqE/international-womens-day19-featuring.html" title="International Women's Day'19 featuring Actions on Google" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-exyldFrUWf0/XSZotCD7LDI/AAAAAAAAHwU/hhvLkf1GQbEiIPvr2yxm6pFQeRd4rq75wCLcBGAs/s72-c/Screen%2BShot%2B2019-06-27%2Bat%2B2.35.29%2BPM%2B-%2BRubi%2BMartinez.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/07/international-womens-day19-featuring.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-8976394398036880115</id><published>2019-07-09T09:00:00.000-07:00</published><updated>2019-07-09T09:00:00.796-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="actions on google" /><category scheme="http://www.blogger.com/atom/ns#" term="assistant" /><category scheme="http://www.blogger.com/atom/ns#" term="Local Home" /><category scheme="http://www.blogger.com/atom/ns#" term="Smart Home" /><title type="text">Developer Preview of Local Home SDK</title><content type="html">&lt;meta name="twitter:image" content="https://3.bp.blogspot.com/-cYIn1muZjvU/XQk5XwN1QsI/AAAAAAAAHuo/bVtDQSmHYm4k_F6rH4i4bNApEee6omyKQCLcBGAs/s1600/homegraph.png"&gt;&lt;img style="display:none" src="https://3.bp.blogspot.com/-cYIn1muZjvU/XQk5XwN1QsI/AAAAAAAAHuo/bVtDQSmHYm4k_F6rH4i4bNApEee6omyKQCLcBGAs/s1600/homegraph.png"&gt; &lt;em&gt;Posted by Toni Klopfenstein&lt;/em&gt; &lt;p&gt;Recently at Google I/O, we gave you a &lt;a href="https://developers.googleblog.com/2019/05/Actions-on-Google-at-IO-2019.html"&gt;sneak peek&lt;/a&gt; at our new Local Home SDK, a suite of local technologies to enhance your smart home integrations. Today, the SDK is live as a developer preview. We've been working hard testing the platform with our partners, including GE, LIFX, Philips Hue, TP-Link, and Wemo, and are excited to bring you these additional technologies for connecting smart devices to the Google Assistant.  &lt;/p&gt;&lt;p&gt; &lt;a href="https://4.bp.blogspot.com/-4R_TBHonIRw/XQk4PUiYmaI/AAAAAAAAHug/lX3LOsCqqXswDwC6AXDuvh0NQvXJ8oueQCLcBGAs/s1600/googleassistant.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://4.bp.blogspot.com/-4R_TBHonIRw/XQk4PUiYmaI/AAAAAAAAHug/lX3LOsCqqXswDwC6AXDuvh0NQvXJ8oueQCLcBGAs/s1600/googleassistant.png" data-original-width="883" data-original-height="480" /&gt;&lt;/a&gt; &lt;p id="imgCaption"&gt;Figure 1: The local execution path&lt;/p&gt;  &lt;/p&gt;&lt;p&gt;                                              &lt;/p&gt;&lt;p&gt;This SDK enables developers to more deeply integrate their smart devices into the Assistant by building upon the existing &lt;a href="https://developers.google.com/actions/smarthome/"&gt;Smart Home platform&lt;/a&gt; to create a local execution path via Google Home smart speakers and Nest smart displays. Developers can now run their business logic to control new and existing smart devices in JavaScript that executes on the smart speakers and displays, benefitting users with reduced latency and higher reliability.  &lt;/p&gt;&lt;h2&gt;How it works:&lt;/h2&gt; &lt;p&gt;The SDK introduces two new &lt;a href="https://developers.google.com/actions/smarthome/reference/local/enums/smarthome.intents"&gt;intents&lt;/a&gt;, &lt;code&gt;IDENTIFY&lt;/code&gt; and &lt;code&gt;REACHABLE_DEVICES&lt;/code&gt;. The local home platform scans the user's home network via mDNS, UDP, or UPnP to discover any smart devices connected to the Assistant, and triggers &lt;code&gt;IDENTIFY&lt;/code&gt; to verify that the device IDs match those returned from the familiar Smart Home API &lt;code&gt;SYNC&lt;/code&gt; intent. If the detected device is a hub or bridge, &lt;code&gt;REACHABLE_DEVICES&lt;/code&gt; is triggered and treats the hub as the proxy device for communicating locally. Once the local execution path from Google Home to a device is established, the device properties are updated in &lt;a href="https://developers.google.com/actions/smarthome/concepts/homegraph"&gt;Home Graph&lt;/a&gt;. &lt;/p&gt;&lt;p&gt; &lt;center&gt;&lt;a href="https://3.bp.blogspot.com/-cYIn1muZjvU/XQk5XwN1QsI/AAAAAAAAHuo/bVtDQSmHYm4k_F6rH4i4bNApEee6omyKQCLcBGAs/s1600/homegraph.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-cYIn1muZjvU/XQk5XwN1QsI/AAAAAAAAHuo/bVtDQSmHYm4k_F6rH4i4bNApEee6omyKQCLcBGAs/s1600/homegraph.png" data-original-width="809" data-original-height="356" /&gt;&lt;/a&gt;&lt;/center&gt;  &lt;/p&gt;&lt;p&gt;&lt;p id="imgCaption"&gt;Figure 2: The intents used for each execution path&lt;/p&gt;&lt;/p&gt;&lt;p&gt;When a user triggers a smart home Action that has a local execution path, the Assistant sends the &lt;code&gt;&lt;a href="https://developers.google.com/actions/smarthome/develop/process-intents#EXECUTE"&gt;EXECUTE&lt;/a&gt;&lt;/code&gt; intent to the Google Nest device rather than the developer's cloud fulfillment. The developer's JavaScript app is invoked, which then triggers the Local Home SDK to send control commands to the smart device over TCP, UDP socket, or HTTP/HTTPS requests. By defaulting to local execution rather than the cloud, users experience faster fulfillment of their requests. The execution requests can still be sent to the cloud path in case local execution fails. This redundancy minimizes the possibility of a failed request, and improves the overall user experience.   &lt;p&gt;Additional features of the Local Home platform include: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Support for all Wi-Fi-enabled &lt;a href="https://developers.google.com/actions/smarthome/guides/"&gt;device types&lt;/a&gt; and &lt;a href="https://developers.google.com/actions/smarthome/traits/"&gt;device traits&lt;/a&gt; without two-factor authentication enabled.    &lt;li&gt;No user action required to deploy Local Home benefits to all devices.  &lt;li&gt;Easily configure discovery protocols and the hosted JavaScript app URL through the &lt;a href="http://console.actions.google.com"&gt;Actions console&lt;/a&gt;. &lt;/li&gt;&lt;/ul&gt; &lt;center&gt;&lt;a href="https://3.bp.blogspot.com/-yyyol32yRC4/XQk73i8Bq4I/AAAAAAAAHu0/TcDsMuqsGAUwMnE6h4FQxf5jGrs-ybsSwCLcBGAs/s1600/console.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-yyyol32yRC4/XQk73i8Bq4I/AAAAAAAAHu0/TcDsMuqsGAUwMnE6h4FQxf5jGrs-ybsSwCLcBGAs/s1600/console.png" data-original-width="975" data-original-height="1213" /&gt;&lt;/a&gt;&lt;/center&gt;   &lt;p&gt;&lt;p id="imgCaption"&gt;Figure 3: Local Home configuration tool in the Actions console&lt;/p&gt;&lt;/p&gt;&lt;p&gt;JavaScript apps can be tested on-device, allowing developers to employ familiar tools like &lt;a href="https://developers.google.com/web/tools/chrome-devtools/console/"&gt;Chrome Developer Console&lt;/a&gt; for debugging. Because the Local Home SDK works with the existing smart home framework, you can self-certify new apps through the &lt;a href="https://developers.google.com/actions/smarthome/tools/smart-home-test-suite"&gt;Test suite for smart home&lt;/a&gt; as well.  &lt;/p&gt;&lt;h2&gt;Get started&lt;/h2&gt;  &lt;p&gt;To learn more about the Local Home platform, check out the &lt;a href="https://developers.google.com/actions/smarthome/reference/local/"&gt;API reference&lt;/a&gt;, and get started adding local execution with the &lt;a href="https://developers.google.com/actions/smarthome/concepts/local/"&gt;developer guide&lt;/a&gt; and &lt;a href=" https://github.com/actions-on-google/smart-home-local"&gt;samples&lt;/a&gt;. For general information covering how you can connect smart devices to the Google Assistant, visit the &lt;a href="https://developers.google.com/actions/smarthome/"&gt;Smart Home documentation&lt;/a&gt;, or check out the &lt;a href="https://youtu.be/Y6Ue5hQ9meM"&gt;Local Technologies for the Smart Home&lt;/a&gt; talk from Google I/O this year.   &lt;/p&gt;&lt;p&gt;You can send us any feedback you have through the &lt;a href="https://issuetracker.google.com/issues/new?component=655104&amp;template=1284327"&gt;bug tracker&lt;/a&gt;, or engage with the community at &lt;a href="https://www.reddit.com/r/GoogleAssistantDev"&gt;/r/GoogleAssistantDev&lt;/a&gt;. You can tag your posts with the flair local-home-sdk to help organize discussion. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/kNCVCWdehBc" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/8976394398036880115/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/07/developer-preview-of-local-home-sdk.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/8976394398036880115" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/8976394398036880115" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/kNCVCWdehBc/developer-preview-of-local-home-sdk.html" title="Developer Preview of Local Home SDK" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://3.bp.blogspot.com/-cYIn1muZjvU/XQk5XwN1QsI/AAAAAAAAHuo/bVtDQSmHYm4k_F6rH4i4bNApEee6omyKQCLcBGAs/s72-c/homegraph.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/07/developer-preview-of-local-home-sdk.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-543724601935623416</id><published>2019-06-20T09:48:00.000-07:00</published><updated>2019-06-20T09:48:26.360-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="braintree" /><category scheme="http://www.blogger.com/atom/ns#" term="google pay" /><category scheme="http://www.blogger.com/atom/ns#" term="google pay api" /><category scheme="http://www.blogger.com/atom/ns#" term="online payments" /><category scheme="http://www.blogger.com/atom/ns#" term="paypal" /><category scheme="http://www.blogger.com/atom/ns#" term="processing" /><title type="text">Google Pay and PayPal expand their integration to give merchants more ways to accept payments online</title><content type="html">&lt;meta name="twitter:image" content="https://3.bp.blogspot.com/-ftwnPlZcF3U/XQrHMu1x5VI/AAAAAAAAHvU/J54Ov9WOfEodACyF_B6pf_ai7RmKe4qyQCLcBGAs/s1600/1.png"&gt;&lt;img style="display:none" src="https://3.bp.blogspot.com/-ftwnPlZcF3U/XQrHMu1x5VI/AAAAAAAAHvU/J54Ov9WOfEodACyF_B6pf_ai7RmKe4qyQCLcBGAs/s1600/1.png"&gt;  &lt;em&gt;Posted by Jose Ugia, Google Developers Engineer&lt;/em&gt;  &lt;p&gt;We’re thrilled to announce we’ve expanded our collaboration with PayPal to make payments easy and seamless no matter how or where your customers like to shop. Now, you’ll be able to accept PayPal with Google Pay on your app or website in all 24 countries where your customers can link their PayPal account to Google Pay.  &lt;/p&gt;&lt;p&gt;Here are 5 ways this integration can add value to your business:  &lt;/p&gt;&lt;p&gt;&lt;h2&gt;1. Reach more customers already set up to pay&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;Hundreds of millions of users already have their payment methods saved to their Google Account. And as of 2018, customers who use their PayPal account to make a purchase on a Google app or service like Google Play and YouTube can automatically choose that PayPal account when they pay with Google Pay—no new setup required. When you enable PayPal as a payment method on your Google Pay integration, all of these customers will be able to seamlessly check out on your website or app.  &lt;/p&gt;&lt;p&gt; &lt;a href="https://3.bp.blogspot.com/-ftwnPlZcF3U/XQrHMu1x5VI/AAAAAAAAHvU/J54Ov9WOfEodACyF_B6pf_ai7RmKe4qyQCLcBGAs/s1600/1.png" imageanchor="1" &gt;&lt;img id="imgHalf" style="width: 65%" border="0" src="https://3.bp.blogspot.com/-ftwnPlZcF3U/XQrHMu1x5VI/AAAAAAAAHvU/J54Ov9WOfEodACyF_B6pf_ai7RmKe4qyQCLcBGAs/s1600/1.png" data-original-width="1482" data-original-height="1600" /&gt;&lt;/a&gt;&lt;p style= "font-size:12px" id ="imgCaption"&gt; Users will be able to choose PayPal—or any other payment method—right from the Google Pay payment sheet. &lt;/p&gt;  &lt;p&gt;&lt;h2&gt;2. Deliver a faster checkout experience with more customer benefits&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;Once users link their PayPal account, they won’t need to sign in to PayPal when they use it with Google Pay. This means they’ll enjoy fewer steps at checkout, which often leads to higher conversion rates. In addition, your customers will get all the advantages that come with their PayPal account—like &lt;a href="https://www.paypal.com/us/webapps/mpp/paypal-safety-and-security"&gt;Purchase Protection&lt;/a&gt; and &lt;a href="https://www.paypal.com/us/webapps/mpp/returns"&gt;Return Shipping&lt;/a&gt;—along with Google Pay’s fast, simple checkout experience and increased security.  &lt;/p&gt;&lt;p&gt;&lt;h2&gt;3. Give customers more choices at checkout &lt;/h2&gt;&lt;/p&gt;&lt;p&gt;Google Pay lets customers keep all of their payment methods in one place. They’ll easily be able to switch between debit cards, credit cards, their PayPal account, and more just by choosing Google Pay at checkout.  &lt;/p&gt;&lt;p&gt;&lt;h2&gt;4. Keep the benefits  &lt;/h2&gt;&lt;/p&gt;&lt;p&gt;PayPal merchants who enable the acceptance of PayPal through Google Pay can continue to get the PayPal benefits they already enjoy. This includes the ability to receive payments directly to their &lt;a href="https://www.paypal.com/us/webapps/mpp/referral/paypal-business-account"&gt;PayPal Business Account&lt;/a&gt; within minutes, no minimum processing requirements, and seller protection on eligible transactions.   &lt;/p&gt;&lt;p&gt;&lt;h2&gt;5. Integrate with ease &lt;/h2&gt;&lt;/p&gt;&lt;p&gt;If you’ve already implemented Google Pay, enabling PayPal is as easy as adding it to your list of allowed payment methods in the body of your requests: &lt;/p&gt;  &lt;pre class="prettyprint"&gt;&lt;br /&gt;const payPalPaymentMethod = {&lt;br /&gt;  type: "PAYPAL",&lt;br /&gt;  parameters: {&lt;br /&gt;    purchase_context: {&lt;br /&gt;      purchase_units: [{&lt;br /&gt;        payee: {&lt;br /&gt;          merchant_id: "&amp;lt;YOUR_PAYPAL_ACCOUNT_ID&gt;"&lt;br /&gt;        }&lt;br /&gt;      }]&lt;br /&gt;    }&lt;br /&gt;  },&lt;br /&gt;  tokenizationSpecification: {&lt;br /&gt;    type: "DIRECT"&lt;br /&gt;  }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;paymentRequest.allowedPaymentMethods = [payPalPaymentMethod, cardPaymentMethod];&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Once you’ve done that, you’ll receive a token you can send to your servers as soon as your customers confirm their transaction. You’ll use this token to issue a call against PayPal’s payment service—see &lt;a href="https://developer.paypal.com/docs/checkout/how-to/googlepay-integration/"&gt;PayPal’s documentation&lt;/a&gt; for more details and best practices.  &lt;/p&gt;&lt;p&gt;If you haven’t implemented Google Pay yet, check out our &lt;a href="https://www.youtube.com/watch?v=rP_UAPcIG4I?utm_source=google-developers-blog&amp;utm_medium=blog&amp;utm_campaign=google-pay-paypal-online"&gt;online API introduction video&lt;/a&gt; or our step-by-step guided codelabs for &lt;a href="https://codelabs.developers.google.com/codelabs/pay-android-checkout/#0?utm_source=google-developers-blog&amp;utm_medium=blog&amp;utm_campaign=google-pay-paypal-online"&gt;Android&lt;/a&gt; and &lt;a href="https://codelabs.developers.google.com/codelabs/pay-web-checkout/#0?utm_source=google-developers-blog&amp;utm_medium=blog&amp;utm_campaign=google-pay-paypal-online"&gt;Web&lt;/a&gt; to learn more about it. If you prefer to explore on your own, read &lt;a href="https://developers.google.com/pay/api/?utm_source=google-developers-blog&amp;utm_medium=blog&amp;utm_campaign=google-pay-paypal-online"&gt;our documentation&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;We’re excited to offer developers the best of both worlds with Google Pay and PayPal, all while making payments simpler for customers and businesses around the world. Stay tuned for more updates.  &lt;/p&gt;&lt;p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/13MDbEMBlxw" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/543724601935623416/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/06/google-pay-and-paypal-expand-their.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/543724601935623416" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/543724601935623416" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/13MDbEMBlxw/google-pay-and-paypal-expand-their.html" title="Google Pay and PayPal expand their integration to give merchants more ways to accept payments online" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://3.bp.blogspot.com/-ftwnPlZcF3U/XQrHMu1x5VI/AAAAAAAAHvU/J54Ov9WOfEodACyF_B6pf_ai7RmKe4qyQCLcBGAs/s72-c/1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/06/google-pay-and-paypal-expand-their.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-6026053127074037231</id><published>2019-06-05T11:50:00.000-07:00</published><updated>2019-06-05T11:50:31.740-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docs" /><category scheme="http://www.blogger.com/atom/ns#" term="Drive" /><category scheme="http://www.blogger.com/atom/ns#" term="G Suite" /><category scheme="http://www.blogger.com/atom/ns#" term="Google APIs" /><category scheme="http://www.blogger.com/atom/ns#" term="google apps" /><category scheme="http://www.blogger.com/atom/ns#" term="google apps api" /><category scheme="http://www.blogger.com/atom/ns#" term="google docs" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Docs API" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Drive" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Drive SDK" /><category scheme="http://www.blogger.com/atom/ns#" term="Google sheets" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Sheets API" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Spreadsheets API" /><category scheme="http://www.blogger.com/atom/ns#" term="GSuite" /><category scheme="http://www.blogger.com/atom/ns#" term="Sheets API" /><title type="text"> Mail merge with the Google Docs API</title><content type="html">&lt;meta name="twitter:image" content="https://4.bp.blogspot.com/-xFL1VwsOLuI/XPbUr0hiA8I/AAAAAAAAHuI/7UaYC87Kd38hkvEIwoV0aVnoFh2nCtAZgCLcBGAs/s1600/GCP088%2Bthumbnail%2B%25281%2529.jpg"&gt; &lt;em&gt;Posted by &lt;a href="http://twitter.com/wescpy"&gt;Wesley Chun&lt;/a&gt;, Developer Advocate, Google Cloud&lt;/em&gt; &lt;p&gt;Students and working professionals use &lt;a href="https://gsuite.google.com/products/docs"&gt;Google Docs&lt;/a&gt; every day to help enhance their productivity and collaboration. The ability to easily share a document and simultaneously edit it together are some of our users' favorite product features. However, many small businesses, corporations, and educational institutions often find themselves needing to automatically generate a wide variety of documents, ranging from form letters to customer invoices, legal paperwork, news feeds, data processing error logs, and internally-generated documents for the corporate CMS (content management system). &lt;/p&gt;&lt;p&gt;Mail merge is the process of taking a master template document along with a data source and "merging" them together. This process makes multiple copies of the master template file and customizes each copy with corresponding data of distinct records from the source. These copies can then be "mailed," whether by postal service or electronically. Using mail merge to produce these copies at volume without human labor has long been a killer app since word processors and databases were invented, and now, you can do it in the cloud with &lt;a href="https://developers.google.com/gsuite"&gt;G Suite APIs&lt;/a&gt;! &lt;/p&gt;&lt;p&gt;While the &lt;a href="https://developers.google.com/apps-script/reference/document"&gt;Document Service&lt;/a&gt; in &lt;a href="https://developers.google.com/apps-script"&gt;Google Apps Script&lt;/a&gt; has enabled the creation of Google Docs &lt;a href="https://developers.google.com/apps-script/guides/docs"&gt;scripts&lt;/a&gt; and &lt;a href="https://developers.google.com/gsuite/add-ons/editors/docs"&gt;Docs Add-ons&lt;/a&gt; like &lt;a href="https://chrome.google.com/webstore/detail/pjjcjgmiefkilipggmepmjkndjaiijdb"&gt;GFormit&lt;/a&gt; (for Google Forms automation), use of Document Service requires developers to operate within the Apps Script ecosystem, possibly a non-starter for more custom development environments. Programmatic access to Google Docs via an HTTP-based REST API wasn't possible until the &lt;a href="https://cloud.google.com/blog/products/g-suite/process-paperwork-pronto-with-the-new-google-docs-api"&gt;launch of the Google Docs API&lt;/a&gt; earlier this year. This release has now made building custom mail merge applications easier than ever! &lt;/p&gt;&lt;p&gt;&lt;iframe id= "imgFull" width="560" height="315" src="https://www.youtube.com/embed/536IF8lJch4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;p&gt;Today's technical overview video walks developers through the concept and flow of mail merge operations using the Docs, &lt;a href="https://developers.google.com/sheets"&gt;Sheets&lt;/a&gt;, &lt;a href="http://developers.google.com/drive"&gt;Drive&lt;/a&gt;, and &lt;a href="https://developers.google.com/gmail"&gt;Gmail&lt;/a&gt; APIs. Armed with this knowledge, developers can dig deeper and access a fully-working &lt;a href="https://developers.google.com/docs/api/samples/mail-merge"&gt;sample application&lt;/a&gt; (Python), or just skip it and go straight to &lt;a href="https://github.com/gsuitedevs/python-samples/tree/master/docs/mail-merge"&gt;its open source repo&lt;/a&gt;. We invite you to check out the &lt;a href="https://developers.google.com/docs"&gt;Docs API documentation&lt;/a&gt; as well as &lt;a href="https://developers.google.com/docs/api/how-tos/overview"&gt;the API overview page&lt;/a&gt; for more information including Quickstart samples in a variety of languages. We hope these resources enable you to develop your own custom mail merge solution in no time! &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/wLfiKZBql6E" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/6026053127074037231/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/06/mail-merge-with-google-docs-api.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/6026053127074037231" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/6026053127074037231" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/wLfiKZBql6E/mail-merge-with-google-docs-api.html" title=" Mail merge with the Google Docs API" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/536IF8lJch4/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/06/mail-merge-with-google-docs-api.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-6891552939229608610</id><published>2019-06-04T13:00:00.000-07:00</published><updated>2019-06-04T13:00:16.946-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="google pay" /><category scheme="http://www.blogger.com/atom/ns#" term="google pay api" /><category scheme="http://www.blogger.com/atom/ns#" term="online payments" /><category scheme="http://www.blogger.com/atom/ns#" term="payment handler" /><category scheme="http://www.blogger.com/atom/ns#" term="payment request api" /><category scheme="http://www.blogger.com/atom/ns#" term="payment web standard" /><title type="text">Google Pay launches new, dynamic features for Online Payments and Passes APIs</title><content type="html">&lt;meta name="twitter:image" content="https://2.bp.blogspot.com/-LAZ3RlpHQZo/XO76a190HLI/AAAAAAAAHrc/LttwoBdzRqQPwYH-LGNB_wu__IJohDDjACLcBGAs/s1600/image4.png"&gt;&lt;img style="display:none" src="https://2.bp.blogspot.com/-LAZ3RlpHQZo/XO76a190HLI/AAAAAAAAHrc/LttwoBdzRqQPwYH-LGNB_wu__IJohDDjACLcBGAs/s1600/image4.png"&gt;  &lt;p&gt;&lt;em&gt;Posted by Stephen McDonald, Google Developers Engineer and Jose Ugia, Google Developers Engineer  &lt;/em&gt;&lt;/p&gt;&lt;p&gt;At Google I/O 2019, we shared some of the new features we’re adding to Google Pay and discussed how you can use them to add value to your customers—whether you accept payments on your app or website or engage with customers beyond payments through loyalty cards, offers, event tickets, and boarding passes. &lt;/p&gt;&lt;p&gt;Read on for a summary of what we covered during the event. If you want to hear the full story, check out the recordings of our sessions: &lt;a href="https://www.youtube.com/watch?v=yvzcqhTqmRU&amp;list=PLOU2XLYxmsILVTiOlMJdo7RQS55jYhsMi&amp;index=67"&gt;Building Powerful Checkout Experiences with Google Pay&lt;/a&gt; and &lt;a href="https://www.youtube.com/watch?v=qaNP4AmNWJA&amp;list=PLOU2XLYxmsILVTiOlMJdo7RQS55jYhsMi&amp;index=3"&gt;Engaging Customers Beyond Payments: Tickets, Transit, and Boarding Passes&lt;/a&gt;. &lt;/p&gt;&lt;h2&gt;Making online payments even more seamless&lt;/h2&gt;  &lt;p&gt;Better checkout experiences are more likely to increase your conversions. Here’s a look at some of the ways &lt;a href="https://developers.google.com/pay/api/?utm_source=Google%20Developers%20Blog&amp;utm_medium=blog%20post"&gt;Google Pay&lt;/a&gt; can help you improve your checkout process from start to finish. &lt;/p&gt;&lt;h3&gt;Dynamic updates for faster checkout &lt;/h3&gt;  &lt;p&gt;In an effort to bring customers more detail and transparency, we’ve made some changes to the Google Pay API. Going forward, the Google Pay payment sheet will display pricing information, so customers can double-check their order before they confirm their purchase. We’re also adding modifiers based on transaction conditions (like shipping options), so customers can see all relevant purchase details quickly, without going back to the merchant site, leading to a faster checkout experience. &lt;/p&gt;&lt;p&gt;  &lt;a href="https://2.bp.blogspot.com/-meDmoqj59eI/XO74lf5CJeI/AAAAAAAAHrQ/7Tuy31q-29URxYKrjCB054L3nZE5roCxACLcBGAs/s1600/image6.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://2.bp.blogspot.com/-meDmoqj59eI/XO74lf5CJeI/AAAAAAAAHrQ/7Tuy31q-29URxYKrjCB054L3nZE5roCxACLcBGAs/s1600/image6.png" data-original-width="1000" data-original-height="539" /&gt;&lt;/a&gt;  &lt;/p&gt; &lt;p id="imgCaption"&gt;Users paying online can see the price of the order dynamically before they initiate the transaction. &lt;/p&gt;&lt;h3&gt;More payment button options &lt;/h3&gt;  &lt;p&gt;Along with these improvements to the payment sheet, we’re offering creative new button and onboarding options to encourage customers to choose Google Pay for faster checkout. To start, we launched the &lt;code&gt;createButton&lt;/code&gt; API for web developers. This enables a dynamic purchase button that uses the right styling and colors and is localized to your user’s device or browser settings. We’ve also been experimenting with personalized buttons that display important information before users enter the checkout flow. For instance, we can show customers exactly what card they’ll be paying with or let them know if they need to sign in or set up Google Pay – and this information is displayed right on the button. As the button is hosted and rendered by Google Pay, all of this happens without you having to make any changes. &lt;/p&gt; &lt;p&gt;&lt;a href="https://2.bp.blogspot.com/-LAZ3RlpHQZo/XO76a190HLI/AAAAAAAAHrc/LttwoBdzRqQPwYH-LGNB_wu__IJohDDjACLcBGAs/s1600/image4.png" imageanchor="1" &gt;&lt;img id="imgHalf" border="0" src="https://2.bp.blogspot.com/-LAZ3RlpHQZo/XO76a190HLI/AAAAAAAAHrc/LttwoBdzRqQPwYH-LGNB_wu__IJohDDjACLcBGAs/s1600/image4.png" data-original-width="900" data-original-height="836" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p id="imgCaption"&gt;createButton API allows to display card information directly on the checkout button  &lt;/p&gt;&lt;h2&gt;Delivering extra value with Google Pay Passes &lt;/h2&gt;  &lt;p&gt;The &lt;a href="https://developers.google.com/pay/passes?utm_source=Google%20Developers%20Blog&amp;utm_medium=blog%20post"&gt;Google Pay API for Passes&lt;/a&gt; lets you connect your business to millions of Android users by linking your loyalty programs, gift cards, offers, boarding passes, and event tickets to their Google Accounts. This year, we’re launching new capabilities and integrations that will help you engage customers at more times and places.  &lt;/p&gt;&lt;h3&gt;High priority notifications for boarding passes&lt;/h3&gt;  &lt;p&gt;Your passengers can add their boarding pass to Google Pay for a seamless check-in experience. Google Pay sends the passengers a high priority notification with their boarding pass just a few hours before their flight so they can easily access it when needed. They’ll also receive notifications with important dynamic information like gate changes or flight delays. These notifications are high priority and will stay prominent on passengers’ phones until they dismiss it or their flight takes off.  &lt;/p&gt;&lt;h3&gt;Integration with the Google Assistant&lt;/h3&gt;  &lt;p&gt;Google’s ecosystem can help create complete user journeys across multiple touchpoints. Earlier this year, we &lt;a href="https://blog.google/products/assistant/hey-google-whats-new-assistant-ces-year/"&gt;announced&lt;/a&gt; the ability to check-in to flights directly from the Google Assistant. Once a flight is ready for check-in, your passenger will receive a notification that takes them directly to the Assistant to complete the process. At the end of this flow, the user is issued a boarding pass that can be accessed from the Assistant or from Google Pay. This is built on top of the Passes API, which means that as an airline, if you already added support for boarding passes, you can just add the check-in with the Assistant integration on top of it. &lt;/p&gt;&lt;div id="flexParent"&gt;&lt;a href="https://1.bp.blogspot.com/-EOQiB3ng8zA/XO77wb-rQ7I/AAAAAAAAHrk/JYrIPJU1OvEq925ippIFVdbtqqsd9Or4wCLcBGAs/s1600/image3.png" imageanchor="1" &gt;&lt;img id="flexImg" border="0" src="https://1.bp.blogspot.com/-EOQiB3ng8zA/XO77wb-rQ7I/AAAAAAAAHrk/JYrIPJU1OvEq925ippIFVdbtqqsd9Or4wCLcBGAs/s1600/image3.png" data-original-width="767" data-original-height="1600" /&gt;&lt;/a&gt; &lt;a href="https://3.bp.blogspot.com/-GpAe_wQs5t0/XO772xgSOMI/AAAAAAAAHrs/zt1yCR83Pc0iNOCSFlIl16rnNW1yM3QBgCLcBGAs/s1600/image1.png" imageanchor="1" &gt;&lt;img id="flexImg" border="0" src="https://3.bp.blogspot.com/-GpAe_wQs5t0/XO772xgSOMI/AAAAAAAAHrs/zt1yCR83Pc0iNOCSFlIl16rnNW1yM3QBgCLcBGAs/s1600/image1.png" data-original-width="767" data-original-height="1600" /&gt;&lt;/a&gt; &lt;a href="https://1.bp.blogspot.com/-hBOKhb7QOaw/XO778pVvjrI/AAAAAAAAHrw/5Zki_lnMfEEHayHr6tGQ_sSH7QLBZckjQCLcBGAs/s1600/image5.png" imageanchor="1" &gt;&lt;img id="flexImg" border="0" src="https://1.bp.blogspot.com/-hBOKhb7QOaw/XO778pVvjrI/AAAAAAAAHrw/5Zki_lnMfEEHayHr6tGQ_sSH7QLBZckjQCLcBGAs/s1600/image5.png" data-original-width="767" data-original-height="1600" /&gt;&lt;/a&gt; &lt;a href="https://2.bp.blogspot.com/-qARDKA2wRJg/XO78BayD3dI/AAAAAAAAHr0/SVD2BsvxzRQNYtBD-_RVSwLaxljosvmfgCLcBGAs/s1600/image2.png" imageanchor="1" &gt;&lt;img  id="flexImg" border="0" src="https://2.bp.blogspot.com/-qARDKA2wRJg/XO78BayD3dI/AAAAAAAAHr0/SVD2BsvxzRQNYtBD-_RVSwLaxljosvmfgCLcBGAs/s1600/image2.png" data-original-width="767" data-original-height="1600" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p id="imgCaption"&gt;From left to right: new high priority notifications, integration of Myki card inside of Google Maps, new transit tickets and automatic Gmail import. &lt;/p&gt;&lt;h3&gt;An open API for transit, with support for dynamic barcodes &lt;/h3&gt;  &lt;p&gt;We’re excited to announce we’re making transit an open API. This means if you’re a transit provider and currently offer barcode tickets for your transportation services, you can now utilize the Passes API to get your tickets digitized in Google Pay. We’ll also be enhancing this API to support dynamic barcodes. The barcodes on customers’ transit tickets or passes will update every few seconds – even if their device is offline. This allows you to increase security -- since your QR codes are changing all the time, it makes it harder to duplicate the ticket.&lt;/p&gt;  &lt;h3&gt;Loyalty Integration with Gmail &lt;/h3&gt;  &lt;p&gt;Now you can also give customers the opportunity to import your loyalty cards to Google Pay right from Gmail—just by adding some markup to your emails. When customers open the Google Pay app, they’ll be shown any loyalty cards from Gmail they haven’t added to Google Pay. With just a tap, they can add them all automatically so they can access them at any time. This feature is currently only available with loyalty programs, but we’ll be expanding to other types of passes in the future.   &lt;/p&gt;&lt;h3&gt;What’s next&lt;/h3&gt;  &lt;p&gt;We’re working on making Passes available to your users on Google even if they haven’t installed the Google Pay app. We are starting with boarding passes and transit tickets, then plan to extend the same functionality to the other Passes. Stay tuned for more.  &lt;/p&gt;&lt;h2&gt;Resources&lt;/h2&gt;  &lt;p&gt;To learn more about Google Pay, visit our developer resources: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;YouTube → &lt;a href="https://www.youtube.com/watch?v=rP_UAPcIG4I&amp;feature=youtu.be"&gt;Google Pay API Explained&lt;/a&gt;  &lt;li&gt;Developer documentation → &lt;a href="https://developers.google.com/pay/api/"&gt;Google Pay API&lt;/a&gt;, &lt;a href="https://developers.google.com/pay/passes/"&gt;Google Pay API for Passes&lt;/a&gt;&lt;li&gt;Codelabs → &lt;a href="https://codelabs.developers.google.com/codelabs/pay-android-checkout/index.html?index=..%2F..index#0"&gt;Android&lt;/a&gt;, &lt;a href="https://codelabs.developers.google.com/codelabs/pay-web-checkout/#0"&gt;Web&lt;/a&gt;&lt;li&gt;GitHub → &lt;a href="https://github.com/google-pay"&gt;Google Pay on GitHub&lt;/a&gt;&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/ctoySgNh6cY" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/6891552939229608610/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/06/google-pay-launches-new-dynamic.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/6891552939229608610" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/6891552939229608610" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/ctoySgNh6cY/google-pay-launches-new-dynamic.html" title="Google Pay launches new, dynamic features for Online Payments and Passes APIs" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-LAZ3RlpHQZo/XO76a190HLI/AAAAAAAAHrc/LttwoBdzRqQPwYH-LGNB_wu__IJohDDjACLcBGAs/s72-c/image4.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/06/google-pay-launches-new-dynamic.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-4020867505778344675</id><published>2019-06-03T15:22:00.000-07:00</published><updated>2019-06-03T15:22:30.473-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="googledevelopers" /><category scheme="http://www.blogger.com/atom/ns#" term="internship" /><category scheme="http://www.blogger.com/atom/ns#" term="student programs" /><title type="text">Developer Student Clubs - Apply to be a Lead today. Deadline extended to June 15!</title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-Xi-q77d4gyU/XPVXgLzaxEI/AAAAAAAAHtw/E9Z3dT0ZntIrGRWeJ9wo6pJ2oQ0W3ubRwCLcBGAs/s1600/image1.jpg"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-Xi-q77d4gyU/XPVXgLzaxEI/AAAAAAAAHtw/E9Z3dT0ZntIrGRWeJ9wo6pJ2oQ0W3ubRwCLcBGAs/s1600/image1.jpg"&gt;  &lt;p&gt;&lt;p&gt;&lt;em&gt;Posted by Erica Hanson, Google Developer Relations&lt;/em&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt; &lt;iframe id=imgFull width="560" height="315" src="https://www.youtube.com/embed/DcN_hcHXR_0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;   &lt;/p&gt;&lt;p&gt;This spring, Google and &lt;strong&gt;&lt;a href="https://developers.google.com/programs/dsc/"&gt;Developer Student Clubs&lt;/a&gt;&lt;/strong&gt; are looking for new passionate student leaders from universities across the globe!  &lt;/p&gt;&lt;p&gt;Developer Student Clubs is a program &lt;strong&gt;with Google Developers&lt;/strong&gt;.&lt;strong&gt; &lt;/strong&gt;Through in-person meetups, university students are empowered to learn together and use technology to solve real life problems with local businesses and start-ups. &lt;/p&gt;&lt;p&gt;Less than two years ago, DSC launched in parts of Asia and Africa where &lt;strong&gt;90,000+ &lt;/strong&gt;students have been trained on Google technologies; &lt;strong&gt;500+ solutions built&lt;/strong&gt; for&lt;strong&gt; 200+ local startups&lt;/strong&gt; and organizations and 170+ clubs participated in our first Solution Challenge! &lt;/p&gt;&lt;p&gt; &lt;a href="https://1.bp.blogspot.com/-Xi-q77d4gyU/XPVXgLzaxEI/AAAAAAAAHtw/E9Z3dT0ZntIrGRWeJ9wo6pJ2oQ0W3ubRwCLcBGAs/s1600/image1.jpg" imageanchor="1" &gt;&lt;img id=imgFull border="0" src="https://1.bp.blogspot.com/-Xi-q77d4gyU/XPVXgLzaxEI/AAAAAAAAHtw/E9Z3dT0ZntIrGRWeJ9wo6pJ2oQ0W3ubRwCLcBGAs/s1600/image1.jpg" data-original-width="1600" data-original-height="1067" alt="computer shot from up top" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Bridging the gap between theory and practical application, Google aims to provide student developers with the resources, opportunities and the experience necessary to be more industry ready. &lt;/p&gt;&lt;p&gt; &lt;a href="https://2.bp.blogspot.com/-5Qy2FYAQ6QQ/XPVXokuqTWI/AAAAAAAAHt4/LxwAQLS_ot8yy9mNmXbB3FIS6p4YdZnvACLcBGAs/s1600/image3.png" imageanchor="1" &gt;&lt;img id=imgFull border="0" src="https://2.bp.blogspot.com/-5Qy2FYAQ6QQ/XPVXokuqTWI/AAAAAAAAHt4/LxwAQLS_ot8yy9mNmXbB3FIS6p4YdZnvACLcBGAs/s1600/image3.png" data-original-width="1600" data-original-height="1071" alt= computer with students surrounding it" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You may be wondering what the &lt;strong&gt;benefit of being a Developer Student Club Lead&lt;/strong&gt; is? Well, here are a few reasons:&lt;/p&gt;  &lt;ul&gt; &lt;li&gt;Help students grow as developers  &lt;li&gt;Gain access to Google technology and platforms at no cost  &lt;li&gt;Build prototypes and solutions for local problems  &lt;li&gt;Participate in a global developer competition  &lt;li&gt;Get invitations to select Google events and conferences  &lt;li&gt;Be recognized as a collaborator with Google Developers &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;    &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Apply to be a Developer Student Club Lead&lt;/strong&gt; at &lt;a href="http://g.co/dev/dsc"&gt;g.co/dev/dsc&lt;/a&gt;.  &lt;/p&gt;&lt;p&gt;Deadline to submit applications has been extended to &lt;strong&gt;June 15th&lt;/strong&gt;. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/Y5WHxWEvUzc" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/4020867505778344675/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/06/developer-student-clubs-apply-to-be.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/4020867505778344675" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/4020867505778344675" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/Y5WHxWEvUzc/developer-student-clubs-apply-to-be.html" title="Developer Student Clubs - Apply to be a Lead today. Deadline extended to June 15!" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-Xi-q77d4gyU/XPVXgLzaxEI/AAAAAAAAHtw/E9Z3dT0ZntIrGRWeJ9wo6pJ2oQ0W3ubRwCLcBGAs/s72-c/image1.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/06/developer-student-clubs-apply-to-be.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-5782747280711418136</id><published>2019-05-31T10:25:00.000-07:00</published><updated>2019-05-31T10:25:26.051-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AIY Projects" /><category scheme="http://www.blogger.com/atom/ns#" term="Artificial Intelligence" /><category scheme="http://www.blogger.com/atom/ns#" term="Coral" /><category scheme="http://www.blogger.com/atom/ns#" term="Edge TPU" /><category scheme="http://www.blogger.com/atom/ns#" term="Edge TPU Accelerator" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Coral" /><category scheme="http://www.blogger.com/atom/ns#" term="IoT" /><category scheme="http://www.blogger.com/atom/ns#" term="machine intelligence" /><category scheme="http://www.blogger.com/atom/ns#" term="machine learning" /><category scheme="http://www.blogger.com/atom/ns#" term="maker" /><category scheme="http://www.blogger.com/atom/ns#" term="prototype" /><category scheme="http://www.blogger.com/atom/ns#" term="TensorFlow" /><category scheme="http://www.blogger.com/atom/ns#" term="TensorFlow Lite" /><category scheme="http://www.blogger.com/atom/ns#" term="TF Lite" /><category scheme="http://www.blogger.com/atom/ns#" term="TPU" /><title type="text">Coral updates: Project tutorials, a downloadable compiler, and a new distributor </title><content type="html">&lt;meta name="twitter:image" content="https://3.bp.blogspot.com/-qB39KfM7Uxo/XPBc8NxPvRI/AAAAAAAAHsI/L8ffivSP3acIHMOZUY_4cHbSki1ifiobwCLcBGAs/s1600/Coral-family-368-final.jpg"&gt;&lt;img style="display:none" src="https://3.bp.blogspot.com/-qB39KfM7Uxo/XPBc8NxPvRI/AAAAAAAAHsI/L8ffivSP3acIHMOZUY_4cHbSki1ifiobwCLcBGAs/s1600/Coral-family-368-final.jpg"&gt; &lt;p&gt;&lt;em&gt;Posted by Vikram Tank (Product Manager), Coral Team&lt;/em&gt;&lt;/p&gt; &lt;a href="https://3.bp.blogspot.com/-qB39KfM7Uxo/XPBc8NxPvRI/AAAAAAAAHsI/L8ffivSP3acIHMOZUY_4cHbSki1ifiobwCLcBGAs/s1600/Coral-family-368-final.jpg" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-qB39KfM7Uxo/XPBc8NxPvRI/AAAAAAAAHsI/L8ffivSP3acIHMOZUY_4cHbSki1ifiobwCLcBGAs/s1600/Coral-family-368-final.jpg" data-original-width="1600" data-original-height="851" alt="coral hardware"/&gt;&lt;/a&gt; &lt;p&gt;We’re committed to evolving Coral to make it even easier to build systems with on-device AI. Our team is constantly working on new product features, and content that helps ML practitioners, engineers, and prototypers create the next generation of hardware. &lt;/p&gt;&lt;p&gt;To improve our toolchain, we're making the Edge TPU Compiler available to users as a downloadable binary. The binary works on Debian-based Linux systems, allowing for better integration into custom workflows. Instructions on downloading and using the binary are &lt;a href="https://coral.withgoogle.com/docs/edgetpu/compiler/"&gt;on the Coral site&lt;/a&gt;.  &lt;/p&gt;&lt;p&gt;We’re also adding a &lt;a href="https://coral.withgoogle.com/projects"&gt;new section to the Coral site&lt;/a&gt; that showcases example projects you can build with your Coral board. For instance, &lt;a href="https://coral.withgoogle.com/projects/teachable-machine/"&gt;Teachable Machine&lt;/a&gt; is a project that guides you through building a machine that can quickly learn to recognize new objects by re-training a vision classification model directly on your device. &lt;a href="https://coral.withgoogle.com/projects/minigo"&gt;Minigo&lt;/a&gt; shows you how to create an implementation of AlphaGo Zero and run it on the Coral Dev Board or USB Accelerator. &lt;/p&gt;&lt;p&gt;Our distributor network is growing as well: Arrow will soon sell Coral products. &lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/1B-hSxIIf74" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/5782747280711418136/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/05/coral-updates-project-tutorials.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/5782747280711418136" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/5782747280711418136" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/1B-hSxIIf74/coral-updates-project-tutorials.html" title="Coral updates: Project tutorials, a downloadable compiler, and a new distributor " /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://3.bp.blogspot.com/-qB39KfM7Uxo/XPBc8NxPvRI/AAAAAAAAHsI/L8ffivSP3acIHMOZUY_4cHbSki1ifiobwCLcBGAs/s72-c/Coral-family-368-final.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/05/coral-updates-project-tutorials.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-1621953690341861777</id><published>2019-05-16T10:08:00.000-07:00</published><updated>2019-05-16T10:08:32.361-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Study Jam" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Developer Groups" /><category scheme="http://www.blogger.com/atom/ns#" term="women techmakers" /><title type="text">Increasing Diversity: Cloud Study Jam for Women Techmakers in Europe</title><content type="html">&lt;meta name="twitter:image" content="https://2.bp.blogspot.com/-zFX4_ZRZiPE/XN2XzQh_CwI/AAAAAAAAHoc/GZ8BkoIErgARbH-4jOM3wGyqebIto7koQCLcBGAs/s1600/image1.jpg"&gt;&lt;img style="display:none" src="https://2.bp.blogspot.com/-zFX4_ZRZiPE/XN2XzQh_CwI/AAAAAAAAHoc/GZ8BkoIErgARbH-4jOM3wGyqebIto7koQCLcBGAs/s1600/image1.jpg"&gt; &lt;p&gt;&lt;em&gt;Posted by Franziska Hauck, DevRel Ecosystem Regional Lead DACH&lt;/em&gt;&lt;/p&gt; &lt;p&gt;When we look at the community landscape in programming in 2019, we find people of all backgrounds and with expertise as varied as the people themselves. There are developer groups for every imaginable interest out there. What becomes apparent, though, is that the allocation is not as equally balanced as it might be. In Europe, we observe that more programming women are in front-end development and active in the associated groups.  &lt;/p&gt;&lt;p&gt;But what about in cloud? Recently, Global Knowledge published a ranking that showed that Google Cloud Certification is the &lt;a href="https://www.globalknowledge.com/us-en/resources/resource-library/articles/top-paying-certifications/"&gt;most coveted achievement in the labor market&lt;/a&gt;. We knew that the interest was there. How could we capture it and get more women and diverse poeple involved?  [Indeed, we had seen women succeed and in this chosen field at that. It was time to contribute to seeing more success stories coming our way.] &lt;/p&gt;&lt;p&gt;Immediately the Cloud Study Jam came to mind. This campaign is a self-study, highly individualized study jam for Google Developer Groups (GDGs) and other tech meetups. Organizers get access to study materials to help them prepare for their event, register it on the global map and conduct the activity with their attendees in any location they choose. Attendees receive &lt;strong&gt;free Qwiklabs credits&lt;/strong&gt; to complete a number of courses of their choice. The platform even offers a complete Google Cloud environment - the best training ground for aspiring and advanced programmers! &lt;/p&gt;&lt;p&gt;&lt;iframe width="560" height="315" id=imgFull src="https://www.youtube.com/embed/FvWl7Ftz1uM" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;p&gt;GDGs form one pillar of our community programs. One of the other cornerstones is the Women Techmakers program with which we engage and involve organizers interested in increasing diversity worldwide. Cloud Study Jams in the local groups, with dedicated Women Techmakers, seemed like the most natural fit for us. And, as we soon realized, so thought the organizers.  &lt;/p&gt;&lt;p&gt;&lt;iframe width="560" height="315" id=imgFull src="https://www.youtube.com/embed/fknJH4qyOIc" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;p&gt;For us - Almo, Abdallah and Franziska - that was the start of a great initiative and an even bigger road trip. Together with local volunteers from Google and the groups, we held 11 Cloud Study Jams all over Europe in March and April. &lt;/p&gt;&lt;p&gt; Over 450 attendees, 80 % of them women, learned about Cloud technologies. &lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-_qebu0gPos8/XN2XRvwITyI/AAAAAAAAHoM/g9s_yjELXgwT3Zqqy_6okq1CZtX5PgW3gCLcBGAs/s1600/image2.jpg" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-_qebu0gPos8/XN2XRvwITyI/AAAAAAAAHoM/g9s_yjELXgwT3Zqqy_6okq1CZtX5PgW3gCLcBGAs/s1600/image2.jpg" data-original-width="1570" data-original-height="883" /&gt;&lt;/a&gt; &lt;a href="https://3.bp.blogspot.com/-y7XsW5ojvy0/XN2XXIBdj4I/AAAAAAAAHoQ/3ykmKV3QvwAelblY9KzFGMWX-OhRByrTQCLcBGAs/s1600/image3.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-y7XsW5ojvy0/XN2XXIBdj4I/AAAAAAAAHoQ/3ykmKV3QvwAelblY9KzFGMWX-OhRByrTQCLcBGAs/s1600/image3.png" data-original-width="590" data-original-height="544" /&gt;&lt;/a&gt;&lt;p&gt;This was some of their feedback: &lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;blockquote&gt;“This made me aim for the Cloud Certificate exam as my next goal in my career!”&lt;/blockquote&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;blockquote&gt;“I found useful everything! The labs are interesting... and I would like to have more meetups like this.”&lt;/blockquote&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;blockquote&gt;“The labs are interesting, at least both that we did. I would like to have more meetups like this!”&lt;/blockquote&gt;&lt;/em&gt;&lt;/p&gt;&lt;a href="https://2.bp.blogspot.com/-zFX4_ZRZiPE/XN2XzQh_CwI/AAAAAAAAHoc/GZ8BkoIErgARbH-4jOM3wGyqebIto7koQCLcBGAs/s1600/image1.jpg" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://2.bp.blogspot.com/-zFX4_ZRZiPE/XN2XzQh_CwI/AAAAAAAAHoc/GZ8BkoIErgARbH-4jOM3wGyqebIto7koQCLcBGAs/s1600/image1.jpg" data-original-width="1600" data-original-height="1201" /&gt;&lt;/a&gt;&lt;p&gt;As surmised, many attendees were indeed front-end developers. It was amazing to see that, with the courses, they “converted” to Cloud and are now going forward as ambassadors. We also saw quite a big number of data scientists and back-end developers. All in all, it was a great mix of enthusiastic participants. &lt;/p&gt;&lt;p&gt;Cloud Study Jams are a great way to engage group members by guided materials. The way they are designed makes it easy for the organizers to focus on the participants. Since attendees follow their chosen courses on their own organizers act as facilitators. They need only jump  in when organizational questions arise. &lt;/p&gt;&lt;p&gt;If you would like to hold a Cloud Study Jam with your group or organization you will find &lt;a href="https://docs.google.com/presentation/d/1SGF2rC7uhvX867jS4mSMJQmjPxgf9yFhtK43eGlrqdc/"&gt;more information here&lt;/a&gt;. Register your event via the link to get access to the free Qwiklabs credits for your attendees. &lt;/p&gt;&lt;p&gt;We are very much looking forward to supporting you! &lt;/p&gt;&lt;p&gt;Almo, Abdallah, Franziska &amp; the European DevRel Ecosystem &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/jSrj3A5LkDw" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/1621953690341861777/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/05/increasing-diversity-cloud-study-jam.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/1621953690341861777" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/1621953690341861777" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/jSrj3A5LkDw/increasing-diversity-cloud-study-jam.html" title="Increasing Diversity: Cloud Study Jam for Women Techmakers in Europe" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-zFX4_ZRZiPE/XN2XzQh_CwI/AAAAAAAAHoc/GZ8BkoIErgARbH-4jOM3wGyqebIto7koQCLcBGAs/s72-c/image1.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/05/increasing-diversity-cloud-study-jam.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-8712484176700630272</id><published>2019-05-15T03:00:00.000-07:00</published><updated>2019-05-15T03:00:07.438-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developers" /><category scheme="http://www.blogger.com/atom/ns#" term="entrepreneurs" /><category scheme="http://www.blogger.com/atom/ns#" term="safety and security" /><category scheme="http://www.blogger.com/atom/ns#" term="small business" /><title type="text">.App: bringing more people online securely</title><content type="html">&lt;meta name="twitter:image" content="https://4.bp.blogspot.com/-ueCSLCANVHc/XNs_EP4_PeI/AAAAAAAAHns/347GfAoIWFwQaNV5YBFl1BjTER7SYXtQACLcBGAs/s1600/Top_100_v013_25fps.jpg"&gt;&lt;img style="display:none" src="https://4.bp.blogspot.com/-ueCSLCANVHc/XNs_EP4_PeI/AAAAAAAAHns/347GfAoIWFwQaNV5YBFl1BjTER7SYXtQACLcBGAs/s1600/Top_100_v013_25fps.jpg"&gt; &lt;p&gt;&lt;em&gt;Posted by Ben Fried, VP, CIO, &amp; Chief Domains Enthusiast&lt;/em&gt;&lt;/p&gt; &lt;a href="https://2.bp.blogspot.com/-2u0rbmLlXzU/XNtDlgsZN1I/AAAAAAAAHoA/2T3MiyiWXAAUWdFOV4MjeYQodwbT7PbVACLcBGAs/s1600/gif%2B%25285%2529.gif" imageanchor="1" &gt;&lt;img id="imgFull" style="width:100%;" border="0" src="https://2.bp.blogspot.com/-2u0rbmLlXzU/XNtDlgsZN1I/AAAAAAAAHoA/2T3MiyiWXAAUWdFOV4MjeYQodwbT7PbVACLcBGAs/s1600/gif%2B%25285%2529.gif" data-original-width="1486" data-original-height="618" /&gt;&lt;/a&gt;  &lt;p id=”imgCaption”&gt;Celebrating 100 of our favorite .app websites. &lt;a href="https://www.registry.google/announcements/appturnsone/#!/"&gt;See the list here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;A year ago, we &lt;a href="https://blog.google/technology/developers/introducing-app-more-secure-home-apps-web/"&gt;launched .app&lt;/a&gt;, the first open top-level domain (TLD) with built-in security through &lt;a href="https://security.googleblog.com/2017/09/broadening-hsts-to-secure-more-of-web.html"&gt;HSTS preloading&lt;/a&gt;. Since then, hundreds of thousands of people have registered .app domains, and we want to take a moment to celebrate them.   &lt;/p&gt;&lt;p&gt;People are making more websites and apps than ever before. A &lt;a href="https://safe.page/survey"&gt;recent survey&lt;/a&gt; we conducted with The Harris Poll found that nearly half (48%) of U.S. respondents plan to create a website in the near future. And a lot of people, especially students, are already building on the web. Over a third (34%) of 16-24 year olds who’ve already created a website did so for a class project.  &lt;/p&gt;&lt;p&gt;Having a meaningful domain name helps students turn their projects into reality. Take Ludwik Trammer, creator of shrew.app, who said: “The site started as a project for my graduate Educational Technology class at Georgia Tech. Getting the perfect domain gave me the initial push to turn it into the real deal (instead of making a prototype, publishing a scientific paper on it, and forgetting it).” &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Helping creators launch their sites securely&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;With so many new creators, it’s essential that everyone does their part to make the &lt;a href="https://blog.google/technology/safety-security/tips-from-google-to-stay-safe-while-browsing-the-internet/"&gt;internet safer&lt;/a&gt;. That’s why &lt;a href="https://www.registry.google/"&gt;Google Registry&lt;/a&gt; designed .app to be secure by default, meaning every website on .app requires a HTTPS connection to ensure a secure connection to the internet. &lt;/p&gt;&lt;p&gt;HTTPS helps keep you and your website visitors safe from bad actors, who may exploit connections that aren’t secure by: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;intercepting or altering the site’s content  &lt;li&gt;misdirecting traffic  &lt;li&gt;spying on open Wi-Fi networks  &lt;li&gt;injecting ad malware or tracking &lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;hr&gt;&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;&lt;em&gt;“As a social application, data protection is paramount. As cyber attacks increase, the security benefits a .app domain brings was a key factor for us. We also believe that a .app domain is significantly more descriptive than a .com domain, meaning users can find us more easily! All in all it was a no brainer for us switching to .app.”&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;-Daneh Westropp&lt;/strong&gt;, Founder, pickle.app&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt; &lt;hr&gt;&lt;/p&gt;&lt;p&gt;There's still work to  be done. One out of two people don’t know the difference between HTTP and HTTPS. Many major browsers (like Chrome) warn users in the URL bar when content is "not secure," but there’s every website creator still has a shared responsibility to keep their users safe. &lt;/p&gt;&lt;p&gt;.App is year in, and we’re happy to see so many people using it to build secure websites and connect with the world. You can &lt;a href="https://www.registry.google/announcements/appsaroundtheworld/#!/"&gt;read more stories from .app owners here&lt;/a&gt; and get your own .app name at &lt;a href="https://get.app"&gt;get.app&lt;/a&gt;. If you’re one of the millions of people planning to build a website, we hope you’ll join us in making the internet safer and take the steps to securely launch your website. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/s_v3CPUMCvs" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/8712484176700630272/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/05/app-bringing-more-people-online-securely.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/8712484176700630272" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/8712484176700630272" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/s_v3CPUMCvs/app-bringing-more-people-online-securely.html" title=".App: bringing more people online securely" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://4.bp.blogspot.com/-ueCSLCANVHc/XNs_EP4_PeI/AAAAAAAAHns/347GfAoIWFwQaNV5YBFl1BjTER7SYXtQACLcBGAs/s72-c/Top_100_v013_25fps.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/05/app-bringing-more-people-online-securely.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-3980692938352322480</id><published>2019-05-14T10:07:00.001-07:00</published><updated>2019-05-14T10:07:50.636-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI" /><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="Firebase" /><category scheme="http://www.blogger.com/atom/ns#" term="ML Kit" /><title type="text">New ML Kit features easily bring Machine Learning to your apps</title><content type="html">&lt;meta name="twitter:image" content="https://2.bp.blogspot.com/-TJy_MBXfWUI/XNotzTCVuMI/AAAAAAAAHmk/D-FBoZqiME4PdxhnDwPBj2aoae7IovL0ACLcBGAs/s1600/image3.png"&gt;&lt;img style="display:none" src="https://2.bp.blogspot.com/-TJy_MBXfWUI/XNotzTCVuMI/AAAAAAAAHmk/D-FBoZqiME4PdxhnDwPBj2aoae7IovL0ACLcBGAs/s1600/image3.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Brahim Elbouchikhi, Director of Product Management and Matej Pfajfar, Engineering Director&lt;/em&gt;&lt;/p&gt; &lt;p&gt;We launched ML Kit at I/O last year with the mission to simplify Machine Learning for everyone. We couldn’t be happier about the experiences that ML Kit has enabled thousands of developers to create.  And more importantly, user engagement with features powered by ML Kit is growing more than 60% per month. Below is a small sample of apps we have been working with. &lt;/p&gt;&lt;a href="https://4.bp.blogspot.com/-qjc8fASfPIk/XNoqBCLHJtI/AAAAAAAAHl0/ya8rLIJIbKgyIoEB_nHXf_0kO8L-9UmCQCLcBGAs/s1600/image1.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://4.bp.blogspot.com/-qjc8fASfPIk/XNoqBCLHJtI/AAAAAAAAHl0/ya8rLIJIbKgyIoEB_nHXf_0kO8L-9UmCQCLcBGAs/s1600/image1.png" data-original-width="1592" data-original-height="888" /&gt;&lt;/a&gt;&lt;p&gt;But there is a lot more. At I/O this year, we are excited to introduce four new features. &lt;/p&gt;&lt;a href="https://2.bp.blogspot.com/-3SHkg9oBPjE/XNoqW-2zfGI/AAAAAAAAHmA/k2-pCo9zKcowdEz2hBwhNlL-DQHtKarqQCLcBGAs/s1600/adidas-io-demo.gif" imageanchor="1" &gt;&lt;img id="imgHalf" style="width:40%;" border="0" src="https://2.bp.blogspot.com/-3SHkg9oBPjE/XNoqW-2zfGI/AAAAAAAAHmA/k2-pCo9zKcowdEz2hBwhNlL-DQHtKarqQCLcBGAs/s1600/adidas-io-demo.gif" data-original-width="720" data-original-height="1280" /&gt;&lt;/a&gt; &lt;p&gt;The &lt;strong&gt;&lt;a href="https://firebase.google.com/docs/ml-kit/object-detection"&gt;Object Detection and Tracking API&lt;/a&gt; &lt;/strong&gt;lets&lt;strong&gt; &lt;/strong&gt;you identify the prominent object in an image and then track it in real-time. You can pair this API with a cloud solution (e.g. Google Cloud’s &lt;a href="https://cloud.google.com/vision/#industry-leading-accuracy-for-image-understanding"&gt;Product Search API&lt;/a&gt;) to create a real-time visual search experience.&lt;/p&gt;&lt;p&gt;When you pass an image or video stream to the API, it will return the coordinates of the primary object as well as a coarse classification. The API then provides a handle for tracking this object's coordinates over time.  &lt;p&gt;A number of partners have built experiences that are powered by this API already. For example, &lt;a href="https://play.google.com/store/apps/details?id=com.adidas.app"&gt;Adidas&lt;/a&gt; built a visual search experience right into their app.   &lt;/p&gt;&lt;a href="https://4.bp.blogspot.com/-vmJgHvh_mtM/XNr1gCRCvgI/AAAAAAAAHnU/iVDlyZc7HKYV6Gwya5tWWDx-9ZYJnU72ACLcBGAs/s1600/translate.gif" imageanchor="1" &gt;&lt;img id="imgHalf" style="width:40%;" border="0" src="https://4.bp.blogspot.com/-vmJgHvh_mtM/XNr1gCRCvgI/AAAAAAAAHnU/iVDlyZc7HKYV6Gwya5tWWDx-9ZYJnU72ACLcBGAs/s1600/translate.gif" data-original-width="237" data-original-height="512" /&gt;&lt;/a&gt; &lt;p&gt;The &lt;a href="https://firebase.google.com/docs/ml-kit/translation"&gt;On-device Translation API&lt;/a&gt; allows you to use the same offline models that support Google Translate to provide fast, dynamic translation of text in your app into 58 languages. This API operates entirely on-device so the context of the translated text never leaves the device.&lt;/p&gt;&lt;p&gt;You can use this API to enable users to communicate with others who don't understand their language or translate user-generated content. &lt;/p&gt;&lt;p&gt;To the right, we demonstrate the use of ML Kit’s text recognition, language detection, and translation APIs in one experience. &lt;/p&gt; &lt;a href="https://2.bp.blogspot.com/-O9Y28rYvdDI/XNorHjZTZII/AAAAAAAAHmQ/ljUMfQyBzPo9ElIfoIVKo6q9tyZOVngOgCLcBGAs/s1600/image5.gif" imageanchor="1" &gt;&lt;img id="imgHalf"  style="width:40%;" border="0" src="https://2.bp.blogspot.com/-O9Y28rYvdDI/XNorHjZTZII/AAAAAAAAHmQ/ljUMfQyBzPo9ElIfoIVKo6q9tyZOVngOgCLcBGAs/s1600/image5.gif" data-original-width="360" data-original-height="720" /&gt;&lt;/a&gt;   &lt;p&gt;We also collaborated with the Material Design team to produce a set of design patterns for integrating ML into your apps.  We are open sourcing implementations of these patterns and hope that they will further accelerate your adoption of ML Kit and AI more broadly.&lt;/p&gt;&lt;p&gt;Our design patterns for machine learning powered features will be available on the Material.io &lt;a href="https://material.io/collections/machine-learning/patterns-for-machine-learning-powered-features.html#introduction"&gt;site&lt;/a&gt;.  &lt;a href="https://3.bp.blogspot.com/-hwonr61aupE/XNotslZYnaI/AAAAAAAAHmg/NooGzxJDeD4DTTGE0xARTlQlV7ZGP1YBACLcBGAs/s1600/image2.png" imageanchor="1" &gt;&lt;img id="imgFull"  border="0" src="https://3.bp.blogspot.com/-hwonr61aupE/XNotslZYnaI/AAAAAAAAHmg/NooGzxJDeD4DTTGE0xARTlQlV7ZGP1YBACLcBGAs/s1600/image2.png" data-original-width="1600" data-original-height="780" /&gt;&lt;/a&gt;&lt;p&gt;With &lt;a href="https://firebase.google.com/docs/ml-kit/automl-vision-edge"&gt;AutoML Vision Edge&lt;/a&gt;, you can easily create custom image classification models tailored to your needs. For example, you may want your app to be able to identify different types of food, or distinguish between species of animals. Whatever your need, just upload your training data to the Firebase console and you can use Google’s AutoML technology to build a custom TensorFlow Lite model for you to run locally on your user's device. And if you find that collecting training datasets is hard, you can use &lt;a href="https://github.com/firebase/mlkit-custom-image-classifier"&gt;our open source app&lt;/a&gt; which makes the process simpler and more collaborative.  &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Wrapping up&lt;/strong&gt;&lt;/p&gt;&lt;a href="https://2.bp.blogspot.com/-TJy_MBXfWUI/XNotzTCVuMI/AAAAAAAAHmk/D-FBoZqiME4PdxhnDwPBj2aoae7IovL0ACLcBGAs/s1600/image3.png" imageanchor="1" &gt;&lt;img id="imgFull"  border="0" src="https://2.bp.blogspot.com/-TJy_MBXfWUI/XNotzTCVuMI/AAAAAAAAHmk/D-FBoZqiME4PdxhnDwPBj2aoae7IovL0ACLcBGAs/s1600/image3.png" data-original-width="1600" data-original-height="966" /&gt;&lt;/a&gt;&lt;p&gt;We are excited by this first year and really hope that our progress will inspire you to get started with Machine Learning.  Please head over to &lt;a href="http://g.co/mlkit"&gt;g.co/mlkit&lt;/a&gt; to learn more or visit Firebase to &lt;a href="https://firebase.google.com/docs/ml-kit/"&gt;get started&lt;/a&gt; right away. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/3uKWfLFbVt4" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/3980692938352322480/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/05/new-ml-kit-features-easily-bring.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/3980692938352322480" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/3980692938352322480" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/3uKWfLFbVt4/new-ml-kit-features-easily-bring.html" title="New ML Kit features easily bring Machine Learning to your apps" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-TJy_MBXfWUI/XNotzTCVuMI/AAAAAAAAHmk/D-FBoZqiME4PdxhnDwPBj2aoae7IovL0ACLcBGAs/s72-c/image3.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/05/new-ml-kit-features-easily-bring.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-7926032813066107370</id><published>2019-05-10T11:33:00.000-07:00</published><updated>2019-05-10T11:34:18.226-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="app" /><category scheme="http://www.blogger.com/atom/ns#" term="chrome os" /><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="flutter" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="Google I/O" /><category scheme="http://www.blogger.com/atom/ns#" term="IO19" /><category scheme="http://www.blogger.com/atom/ns#" term="Toolkit" /><category scheme="http://www.blogger.com/atom/ns#" term="UI" /><title type="text">Flutter and Chrome OS: Better Together</title><content type="html">&lt;meta name="twitter:image" content="https://2.bp.blogspot.com/-2sZnLe4zwsM/XNWdwBvxvuI/AAAAAAAAHlY/NGOjbYMc4MgfgIerxOLJmf5aJiqc5-D_QCLcBGAs/s1600/image2.jpg"&gt;&lt;img style="display:none" src="https://2.bp.blogspot.com/-2sZnLe4zwsM/XNWdwBvxvuI/AAAAAAAAHlY/NGOjbYMc4MgfgIerxOLJmf5aJiqc5-D_QCLcBGAs/s1600/image2.jpg"&gt; &lt;p&gt;&lt;em&gt;Posted by the Flutter and Chrome OS teams&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Chrome OS is the fast, simple, and secure operating system that powers Chromebooks, including the Google Pixelbook and millions of devices used by consumers and students every day. The latest Flutter release adds support for building beautiful, tailored Chrome OS applications, including rich support for keyboard and mouse, and tooling to ensure that your app runs well on a Chromebook. Furthermore, Chrome OS is a great developer workstation for building general-purpose Flutter apps, thanks to its support for developing and running Flutter apps locally on the same device. &lt;/p&gt;&lt;h2&gt;Flutter is a great way to build Chrome OS apps&lt;/h2&gt;  &lt;p&gt;Since its inception, &lt;a href="http://flutter.dev"&gt;Flutter&lt;/a&gt; has shared many of the same principles as Chrome OS: productive, fast, and beautiful experiences. Flutter allows developers to build beautiful, fast UIs, while also providing a high degree of developer productivity, and a completely open-source engine, framework and tools. In short, it’s the ideal modern toolkit for building multi-platform apps, including apps for Chrome OS. &lt;/p&gt;&lt;p&gt;Flutter initially focused on providing a  UI toolkit for building apps for mobile devices, which typically feature touch input and small screens. However, we’ve been building keyboard and mouse support into Flutter since before our 1.0 release last December. And today, we’re pleased to announce that Flutter for Chrome OS is now stronger with scroll wheel support, hover management, and better keyboard event support. In addition, Flutter has always been great at allowing you to build apps that run at any size (large screen or small), with seamless resizing, as shown here in the &lt;a href="https://github.com/flutter/samples/tree/master/chrome-os-best-practices"&gt;Chrome OS Best Practices Sample&lt;/a&gt;: &lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-IBtBmcuD8v4/XNWdR3ZWg3I/AAAAAAAAHlI/9YvEv3znPksOGUeFCwBJIjUcosajxGQFgCLcBGAs/s1600/image1.gif" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-IBtBmcuD8v4/XNWdR3ZWg3I/AAAAAAAAHlI/9YvEv3znPksOGUeFCwBJIjUcosajxGQFgCLcBGAs/s1600/image1.gif" data-original-width="1495" data-original-height="841" alt="The Chrome OS best practices sample in action"/&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;The Chrome OS best practices sample in action &lt;/p&gt;&lt;p&gt;The Chrome OS Hello World sample is an app built with Flutter that is optimized for Chrome OS. This includes a responsive UI to showcase how to reposition items and have layouts that respond well to changes in size from mobile to desktop. &lt;/p&gt;&lt;p&gt;Because Chrome OS runs Android apps, targeting Android is the way to build Chrome OS apps. However, while building Chrome OS apps on Android has always been possible, as described in &lt;a href="https://developer.android.com/chrome-os/intro"&gt;these guidelines&lt;/a&gt;, it’s often difficult to know whether your Android app is going to run well on Chrome OS. To help with that problem, today we are adding a new set of lint rules to the Flutter tooling to catch violations of the most important of the Chrome OS best practice guidelines: &lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-NPZjTxAbGPY/XNWdaBsR0yI/AAAAAAAAHlM/pgwyCEbGwnoHrohVCuxPpjTwvuK9VFJBACLcBGAs/s1600/image3.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-NPZjTxAbGPY/XNWdaBsR0yI/AAAAAAAAHlM/pgwyCEbGwnoHrohVCuxPpjTwvuK9VFJBACLcBGAs/s1600/image3.png" data-original-width="1600" data-original-height="258"alt="The Flutter Chrome OS lint rules in action"/&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;The Flutter Chrome OS lint rules in action&lt;/p&gt; &lt;p&gt;When you’re able to put these Chrome OS lint rules in place, you’ll quickly be able to see any problems in your Android app that would hamper it when running on Chrome OS. To learn how to take advantage of these rules, see the &lt;a href="https://github.com/flutter/flutter/wiki/Linting-Flutter-apps-for-Chrome-OS"&gt;linting docs for Flutter Chrome OS&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;But all of that is just the beginning -- the Flutter tools allow you to develop and test your apps directly on Chrome OS as well. &lt;/p&gt;&lt;h2&gt;Chrome OS is a great developer platform to build Flutter apps&lt;/h2&gt;  &lt;p&gt;No matter what platform you're targeting, Flutter has support for rich IDEs and programming tools like Android Studio and Visual Studio Code. Over the last year, Chrome OS has been building support for running the Linux version of these tools with the beta of &lt;a href="https://chromium.googlesource.com/chromiumos/docs/+/master/containers_and_vms.md"&gt;Linux on Chrome OS&lt;/a&gt; (aka Crostini). And, because Chrome OS also supports Android natively, you can configure the Flutter tooling to run your Android apps directly without an emulator involved. &lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-jB8f5mZy1K0/XNWdg0SuibI/AAAAAAAAHlQ/770hAgI_5FkwW5jVH79UtbGds9hKbL_sgCLcBGAs/s1600/image2.gif" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-jB8f5mZy1K0/XNWdg0SuibI/AAAAAAAAHlQ/770hAgI_5FkwW5jVH79UtbGds9hKbL_sgCLcBGAs/s1600/image2.gif" data-original-width="900" data-original-height="506" alt="The Flutter development tools running on Chrome OS "&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;The Flutter development tools running on Chrome OS&lt;/p&gt; &lt;p&gt;All of the great productivity of Flutter is available, including Stateful Hot Reload, seamless resizing, keyboard and mouse support, and so on. Recent improvements in Crostini, such as high DPI support, Crostini file system integration, easier adb, and so on, have made this experience even better! Of course, you don’t have to test against the Android container running on Chrome OS; you can also test against Android devices attached to your Chrome OS box. In short, Chrome OS is the ideal environment in which to develop and test your Flutter apps, especially when you’re targeting Chrome OS itself. &lt;/p&gt;&lt;h2&gt;Customers love Flutter on Chrome OS&lt;/h2&gt;  &lt;p&gt;With its unique combination of simplicity, security, and capability, Chrome OS is an increasingly popular platform for enterprise applications. These apps often work with large quantities of data, whether it’s a chart, or a graph for visualization, or lists and forms for data entry. The support in Flutter for high quality graphics, large screen layout, and input features (like text selection, tab order and mousewheel), make it an ideal way to port mobile applications for the enterprise. One purveyor of such apps is &lt;a href="https://apptreesoftware.com/"&gt;AppTree&lt;/a&gt;, who use Flutter and Chrome OS to solve problems for their enterprise customers.  &lt;/p&gt;     &lt;em&gt;&lt;blockquote&gt;“Creating a Chrome OS version of our app took very little effort. In 10 minutes we tweaked a few values and now our users have access to our app on a whole new class of devices. This is a huge deal for our enterprise customers who have been wanting access to our app on Desktop devices.”&lt;br/&gt;&lt;/em&gt;    --Matthew Smith, CTO, AppTree Software&lt;/blockquote&gt;&lt;p&gt;By using Flutter to target Chrome OS, AppTree was able to start with their existing Flutter mobile app and easily adapt it to take advantage of the capabilities of Chrome OS. &lt;/p&gt;&lt;h2&gt;Try Flutter on Chrome OS today!&lt;/h2&gt;  &lt;p&gt;If you’d like to target Chrome OS with Flutter, you can do so today simply by &lt;a href="https://flutter.dev/docs/get-started/install"&gt;installing the latest version of Flutter&lt;/a&gt;. If you’d like to run the Flutter development tools on Chrome OS, you can &lt;a href="https://flutter.dev/docs/get-started/install/chromeos"&gt;follow these instructions&lt;/a&gt; to get started fast. To see a real-world app built with Flutter that has been optimized for Chrome OS,  check out the &lt;a href="https://github.com/2d-inc/developer_quest"&gt;the Developer Quest sample&lt;/a&gt; that the Flutter DevRel team launched at the 2019 Google I/O conference. And finally, don’t forget to &lt;a href="https://github.com/flutter/flutter/wiki/Linting-Flutter-apps-for-Chrome-OS"&gt;try out the Flutter Chrome OS linting rules&lt;/a&gt; to make sure that your Chrome OS apps are following the most important practices. &lt;/p&gt;&lt;p&gt;Flutter and Chrome OS go great together. What are you going to build? &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/9xKJoy8S9-8" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/7926032813066107370/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/05/flutter-and-chrome-os-better-together.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/7926032813066107370" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/7926032813066107370" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/9xKJoy8S9-8/flutter-and-chrome-os-better-together.html" title="Flutter and Chrome OS: Better Together" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-2sZnLe4zwsM/XNWdwBvxvuI/AAAAAAAAHlY/NGOjbYMc4MgfgIerxOLJmf5aJiqc5-D_QCLcBGAs/s72-c/image2.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/05/flutter-and-chrome-os-better-together.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-2791375161654768870</id><published>2019-05-09T04:30:00.000-07:00</published><updated>2019-05-09T04:30:11.456-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bluetooth" /><category scheme="http://www.blogger.com/atom/ns#" term="google assistant" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Assistant Bluetooth" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Assistant IO" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Assistant IO19" /><category scheme="http://www.blogger.com/atom/ns#" term="Headset" /><category scheme="http://www.blogger.com/atom/ns#" term="IO19" /><category scheme="http://www.blogger.com/atom/ns#" term="Qualcomm" /><category scheme="http://www.blogger.com/atom/ns#" term="Qualcomm Google" /><title type="text">Adding the Assistant to Bluetooth devices gets easier for device makers</title><content type="html">&lt;meta name="twitter:image" content="https://2.bp.blogspot.com/-mrUfyDL9r1s/XNM4tUTcPnI/AAAAAAAAHkM/FFqaJSRDDhIJmpfv1EQ27ng7Zk8GKbBUACLcBGAs/s1600/Screen%2BShot%2B2019-05-03%2Bat%2B7.48.27%2BAM.png"&gt;&lt;img style="display:none" src="https://2.bp.blogspot.com/-mrUfyDL9r1s/XNM4tUTcPnI/AAAAAAAAHkM/FFqaJSRDDhIJmpfv1EQ27ng7Zk8GKbBUACLcBGAs/s1600/Screen%2BShot%2B2019-05-03%2Bat%2B7.48.27%2BAM.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Tomer Amarilio, Product Manager, Google Assistant&lt;/em&gt;&lt;/p&gt; &lt;h2&gt;Building Google Assistant Bluetooth devices gets easier for device makers&lt;/h2&gt; &lt;p&gt;Headphones were one of the first devices optimized for the Google Assistant. With just your voice, you can ask the Assistant to make calls to friends or skip to the next song when you’re commuting on the subway to work or biking around on the weekend without having to always glance at your phone. &lt;/p&gt;&lt;p&gt;But as wireless Bluetooth devices like headphones and earbuds become more popular, we need to make it easier to have the same great Assistant experience across many headsets. We collaborated with Qualcomm to design a comprehensive, customizable development kit to provide all device makers with the building blocks needed to create a smart headset with the Google Assistant. The new Qualcomm Smart Headset Development Kit for the Google Assistant is powered by Qualcomm’s QCC5100-series Bluetooth audio chip and supports Google Fast Pair to make pairing Bluetooth accessories a hassle-free process.  &lt;/p&gt;&lt;p&gt;To inspire device makers, we also built a Qualcomm Smart Headset Reference Design which delivers high quality audio, noise cancellation capabilities, and supports extended battery life and playback time. The reference design includes a push button to activate the Assistant and is just an example of what manufacturers can engineer. &lt;/p&gt; &lt;a href="https://2.bp.blogspot.com/-mrUfyDL9r1s/XNM4tUTcPnI/AAAAAAAAHkM/FFqaJSRDDhIJmpfv1EQ27ng7Zk8GKbBUACLcBGAs/s1600/Screen%2BShot%2B2019-05-03%2Bat%2B7.48.27%2BAM.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://2.bp.blogspot.com/-mrUfyDL9r1s/XNM4tUTcPnI/AAAAAAAAHkM/FFqaJSRDDhIJmpfv1EQ27ng7Zk8GKbBUACLcBGAs/s1600/Screen%2BShot%2B2019-05-03%2Bat%2B7.48.27%2BAM.png" data-original-width="1584" data-original-height="1021" alt="Qualcomm Smart Headset"/&gt;&lt;/a&gt; &lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/io_er_iluzQ" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/2791375161654768870/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/05/assistant-at-io19.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/2791375161654768870" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/2791375161654768870" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/io_er_iluzQ/assistant-at-io19.html" title="Adding the Assistant to Bluetooth devices gets easier for device makers" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-mrUfyDL9r1s/XNM4tUTcPnI/AAAAAAAAHkM/FFqaJSRDDhIJmpfv1EQ27ng7Zk8GKbBUACLcBGAs/s72-c/Screen%2BShot%2B2019-05-03%2Bat%2B7.48.27%2BAM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/05/assistant-at-io19.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-428509950283820164</id><published>2019-05-07T14:00:00.000-07:00</published><updated>2019-05-07T14:31:28.339-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chrome os" /><category scheme="http://www.blogger.com/atom/ns#" term="Chrome OS IO" /><category scheme="http://www.blogger.com/atom/ns#" term="Chrome OS IO19" /><category scheme="http://www.blogger.com/atom/ns#" term="IO19" /><title type="text">What’s new in Chrome OS? A faster, simpler, and more secure environment for Web and Android developers</title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-oo8ZCmt5Op0/XNHTdwFPSbI/AAAAAAAAHi4/4-P3iztxpVUH5Se3acoYkr2HddFeZvEgACLcBGAs/s1600/image3.png"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-oo8ZCmt5Op0/XNHTdwFPSbI/AAAAAAAAHi4/4-P3iztxpVUH5Se3acoYkr2HddFeZvEgACLcBGAs/s1600/image3.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Allan Livingston, Product Management Director, Chrome OS App Ecosystem &lt;/em&gt;&lt;/p&gt; &lt;p&gt;When Google launched Chrome OS nine years ago, we designed every aspect around three core principles: &lt;strong&gt;speed, simplicity, and security. &lt;/strong&gt;Last year at I/O, Google put those principles at developers’ fingertips by implementing Linux support on Chrome OS. This gave developers the increased flexibility of building and running Linux apps combined with the speed and security of working within Chrome OS. &lt;/p&gt;&lt;p&gt;In just the last year, the Chrome OS ecosystem has grown at an incredible rate. Linux support has been rolled out to over half of all Chromebooks. Plus, all devices launched this year will be Linux-ready right out of the box. The combination of Linux and Chrome OS makes for a great web development environment — and we’re making the process even easier for Android development.  &lt;/p&gt;&lt;p&gt;At I/O this year, we showed web and Android developers a few of the most exciting improvements that have made Chrome OS an even faster, simpler, and more secure environment than ever. Let’s get into a few of the highlights:  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;File sharing&lt;br&gt;&lt;/strong&gt;Today we announced that it’s much easier to share files between Linux, Android, and Chrome OS. Now you can use the file manager to move your files safely across Chrome OS, Google Drive, Android, and Linux.  &lt;/p&gt;&lt;a href="https://3.bp.blogspot.com/-siCMYJGMAHM/XNHs6GBXVnI/AAAAAAAAHjc/ulFNR7jsOmgz-utesG2wpKHFdg1oe9avgCLcBGAs/s1600/_IO-Keynote-Blog-Post_1.gif" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-siCMYJGMAHM/XNHs6GBXVnI/AAAAAAAAHjc/ulFNR7jsOmgz-utesG2wpKHFdg1oe9avgCLcBGAs/s1600/_IO-Keynote-Blog-Post_1.gif" data-original-width="1600" data-original-height="1067" alt="Laptop displaying file sharing drag and drop"/&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Port forwarding  &lt;/strong&gt;&lt;br&gt;We’ve also made improvements to port forwarding on Chrome OS, making it easier to connect networking services between Linux and Chrome OS. That way, you can run a web server within the Linux container while debugging on the same machine. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Android Studio one-click installation and integrated debugging &lt;br&gt;&lt;/strong&gt;Installing Android Studio on Chrome OS used to be a fairly lengthy process. Now, it takes a simple double-click. There’s no need to use a terminal to download, move, and unzip the file — just download it, click, and install. &lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-oo8ZCmt5Op0/XNHTdwFPSbI/AAAAAAAAHi4/4-P3iztxpVUH5Se3acoYkr2HddFeZvEgACLcBGAs/s1600/image3.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-oo8ZCmt5Op0/XNHTdwFPSbI/AAAAAAAAHi4/4-P3iztxpVUH5Se3acoYkr2HddFeZvEgACLcBGAs/s1600/image3.png" data-original-width="1600" data-original-height="1067" alt="Android Studio one-click installation screen on laptop" /&gt;&lt;/a&gt;&lt;p&gt;Now in beta channel with Chrome OS 75, we also enabled secure USB support for Android phones. You can develop, debug, and push your APK to Android phones on any of the &lt;a href="https://developer.android.com/studio#Requirements"&gt;Android developer-recommended Chromebooks&lt;/a&gt;.  &lt;/p&gt;&lt;p&gt;Chrome OS also automatically handles common installation pain-points, like hardware compatibility and power management set-up. &lt;/p&gt;&lt;h2&gt;A growing opportunity for Android developers&lt;/h2&gt;  &lt;p&gt;App developers have to consider a huge range of factors to deliver amazing experiences on every screen size and form factor. In just the last few years, the app experience has evolved far beyond mobile screens. People are using apps across different devices that blur the lines between mobile and desktop — from attaching keyboards to their tablets to using their smartphones to project onto a desktop screen. And no matter what device they’re using, they expect apps to deliver a seamless experience every time. &lt;/p&gt;&lt;p&gt;When you’re building on and for Chrome OS, you’re on a streamlined path to reaching a massive and fast-growing audience of engaged users. In just the last year, the number of monthly active users who enabled Android apps on Chrome OS has grown by 250%.&lt;sup&gt;1  &lt;/sup&gt;And in Q4 2018, 21% of notebooks sold in the U.S. were Chromebooks — a 23% YoY unit sales growth.&lt;sup&gt;2&lt;/sup&gt;&lt;/p&gt;&lt;a href="https://4.bp.blogspot.com/-nlHi3ZjZ6nU/XNHT_WYnQBI/AAAAAAAAHjE/VHCh9Tem0Iw5MSqzbAXJtgYFKILdVWgVwCLcBGAs/s1600/image1.gif" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://4.bp.blogspot.com/-nlHi3ZjZ6nU/XNHT_WYnQBI/AAAAAAAAHjE/VHCh9Tem0Iw5MSqzbAXJtgYFKILdVWgVwCLcBGAs/s1600/image1.gif" data-original-width="1200" data-original-height="628" alt="Quote that reads: In Q4 2018, 21% of notebooks sold in the U.S. were Chromebooks — a 23% YoY unit sales growth"/&gt;&lt;/a&gt;&lt;p&gt;Because millions of Android apps already run on Chrome OS, you can take the same APK and extend your app’s reach to even more consumers with just a few tweaks. Whether they’re building apps with larger screens in mind from the start or optimizing old apps to reach new users, developers behind some of the most popular mobile apps and games have already seen incredible results from Chromebook users. &lt;/p&gt;&lt;h2&gt;Developer spotlight: Concepts &amp; BandLab&lt;/h2&gt;  &lt;p&gt;As people use apps in more unpredictable and inspiring ways, devs are seeing even higher engagement after optimizing for larger screens. Watch the video below to see how &lt;a href="https://developer.android.com/stories/apps/concepts"&gt;Concepts&lt;/a&gt; created a larger, more responsive canvas for aspiring digital designers and how BandLab gave musicians a more immersive platform for exploring and composing new music. &lt;/p&gt;&lt;iframe width="560" height="315" id=imgFull src="https://www.youtube.com/embed/ypTbEKzwMEo" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt; &lt;h2&gt;Chrome OS: A fast and secure development environment&lt;/h2&gt;  &lt;p&gt;It’s never been easier or more secure to develop for the Web and Android on Chrome OS. Between a fast-growing user base, Progressive Web Apps, millions of Android apps, and now, Linux, the potential for developing on and for Chrome OS is only going to keep growing.  &lt;/p&gt;&lt;p&gt;Chrome OS delivers the speed and performance app users expect, and it’s now even faster, simpler, and more secure than ever for all developers.  &lt;/p&gt;&lt;p&gt;We can’t wait to see the amazing stuff you create with your Chromebooks!  &lt;/p&gt; &lt;span style="font-size:12px; color:#696969; line-height:8px;"&gt;Sources&lt;br/&gt;1. Google Internal Data, March 2018 to March 2019. &lt;br/&gt;2. The NPD Group, Inc., Retail Tracking Service, U.S., Notebook Computers, Chrome OS, based on units, Oct. 8, 2017–Jan. 6, 2018 vs. Oct. 7, 2018–Jan. 5, 2019. &lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/G2vUFUTUB3I" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/428509950283820164/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/05/ChromeOS-io19.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/428509950283820164" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/428509950283820164" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/G2vUFUTUB3I/ChromeOS-io19.html" title="What’s new in Chrome OS? A faster, simpler, and more secure environment for Web and Android developers" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-oo8ZCmt5Op0/XNHTdwFPSbI/AAAAAAAAHi4/4-P3iztxpVUH5Se3acoYkr2HddFeZvEgACLcBGAs/s72-c/image3.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/05/ChromeOS-io19.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-2971018812040247285</id><published>2019-05-07T13:30:00.000-07:00</published><updated>2019-05-07T13:30:05.375-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="assistant" /><category scheme="http://www.blogger.com/atom/ns#" term="dart" /><category scheme="http://www.blogger.com/atom/ns#" term="Ebay" /><category scheme="http://www.blogger.com/atom/ns#" term="flutter" /><category scheme="http://www.blogger.com/atom/ns#" term="Flutter 1.5" /><category scheme="http://www.blogger.com/atom/ns#" term="Flutter at IO" /><category scheme="http://www.blogger.com/atom/ns#" term="Flutter Create" /><category scheme="http://www.blogger.com/atom/ns#" term="Flutter for desktop" /><category scheme="http://www.blogger.com/atom/ns#" term="Flutter for web" /><category scheme="http://www.blogger.com/atom/ns#" term="Google IOS Android" /><category scheme="http://www.blogger.com/atom/ns#" term="IO" /><category scheme="http://www.blogger.com/atom/ns#" term="IO19" /><category scheme="http://www.blogger.com/atom/ns#" term="IO19 Flutter" /><category scheme="http://www.blogger.com/atom/ns#" term="keynote" /><category scheme="http://www.blogger.com/atom/ns#" term="multi-platform" /><category scheme="http://www.blogger.com/atom/ns#" term="NYT" /><title type="text">Flutter: a Portable UI Framework for Mobile, Web, Embedded, and Desktop</title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-ak_aEW48mmA/XNCDH1UYfaI/AAAAAAAAHeg/NUhgwcoZX2Ei7exfQreLRSmOfPtxdCReQCLcBGAs/s1600/image2.png"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-ak_aEW48mmA/XNCDH1UYfaI/AAAAAAAAHeg/NUhgwcoZX2Ei7exfQreLRSmOfPtxdCReQCLcBGAs/s1600/image2.png"&gt; &lt;p&gt;&lt;em&gt;Posted by the Flutter Team&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Today marks an important milestone for the &lt;a href="https://flutter.dev/"&gt;Flutter framework&lt;/a&gt;, as we expand our focus from mobile to incorporate a broader set of devices and form factors. At I/O, we’re releasing our first technical preview of &lt;a href="https://flutter.dev/web"&gt;Flutter for web&lt;/a&gt;, announcing that Flutter is powering Google’s smart display platform including the Google Home Hub, and delivering our first steps towards supporting desktop-class apps with Chrome OS. &lt;/p&gt;&lt;h2&gt;From Mobile to Multi-Platform&lt;/h2&gt;  &lt;p&gt;For a long time, the Flutter team mission has been to build the best framework for developing mobile apps for iOS and Android. We believe that mobile development is ripe for improvement, with developers today forced to choose between building the same app twice for two platforms, or making compromises to use cross-platform frameworks. Flutter hits the sweet spot of enabling a single codebase to deliver beautiful, fast, tailored experiences with high developer productivity for both platforms, and we’ve been excited to see how our early efforts have flourished into one of the &lt;a href="https://github.com/flutter/flutter"&gt;most popular open source projects&lt;/a&gt;.  &lt;/p&gt;&lt;p&gt;As we started to home in on &lt;a href="https://developers.googleblog.com/2018/12/flutter-10-googles-portable-ui-toolkit.html"&gt;our 1.0 release last year&lt;/a&gt;, we began experimenting with broadening the scope of Flutter to other platforms. This was triggered both by internal teams within Google who are increasingly relying on Flutter, as well as the latent potential of the &lt;a href="https://dart.dev"&gt;Dart platform&lt;/a&gt; for delivering portable experiences. In particular, a small team who were already building a web framework for Dart for internal usage started an exploratory project (codename “Hummingbird”) to evaluate the technical merits of porting the Flutter engine to support the standards-based web.  &lt;/p&gt;&lt;p&gt;The results of this project were startling, thanks in large part to the rapid progress in web browsers like Chrome, Firefox, and Safari, which have pervasively delivered hardware-accelerated graphics, animation, and text as well as fast JavaScript execution. Within a few months of beginning the project, we had the core Flutter framework primitives working, and soon after we had demos running on mobile and desktop browsers. Along with Dart’s long pedigree of compiling for the web, this proved that we could also bring the Flutter framework and apps to run on the web.  &lt;/p&gt;&lt;p&gt;In parallel, the core Flutter project has been making progress to enable desktop-class apps, with input paradigms such as keyboard and mouse, window resizing, and tooling for Chrome OS app development. The exploratory work that we did for embedding Flutter into desktop-class apps running on Windows, Mac and Linux has also graduated into the core Flutter engine.  &lt;/p&gt;&lt;h2&gt;A Portable UI Framework for All Screens&lt;/h2&gt; &lt;a href="https://1.bp.blogspot.com/-ak_aEW48mmA/XNCDH1UYfaI/AAAAAAAAHeg/NUhgwcoZX2Ei7exfQreLRSmOfPtxdCReQCLcBGAs/s1600/image2.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-ak_aEW48mmA/XNCDH1UYfaI/AAAAAAAAHeg/NUhgwcoZX2Ei7exfQreLRSmOfPtxdCReQCLcBGAs/s1600/image2.png" data-original-width="1600" data-original-height="895" alt="Flutter Mobile, Web, Desktop, and Embedded"/&gt;&lt;/a&gt;&lt;p&gt;It’s worth pausing for a moment to acknowledge the business potential of a high-performance, portable UI framework that can deliver beautiful, tailored experiences to such a broad variety of form factors from a single codebase.  &lt;/p&gt;&lt;p&gt;For startups, the ability to reach users on mobile, web, or desktop through the same app lets them reach their full audience from day one, rather than having limits due to technical considerations. Especially for larger organizations, the ability to deliver the same experience to all users with one codebase reduces complexity and development cost, and lets them focus on improving the quality of that experience.  &lt;/p&gt;&lt;p&gt;With support for mobile, desktop, and web apps, our mission expands: we want to build &lt;strong&gt;the best framework for developing beautiful experiences for &lt;em&gt;any &lt;/em&gt;screen&lt;/strong&gt;.  &lt;/p&gt;&lt;h2&gt;Flutter for Web&lt;/h2&gt;  &lt;p&gt;This week, we are releasing the &lt;strong&gt;first technical preview of Flutter for the web&lt;/strong&gt;. While this technology is still in development, we are ready for early adopters to try it out and give us feedback. Our initial vision for Flutter on the web is not as a general purpose replacement for the document experiences that HTML is optimized for; instead we intend it as a great way to build highly interactive, graphically rich content, where the benefits of a sophisticated UI framework are keenly felt.  &lt;/p&gt;&lt;p&gt;To showcase Flutter for the web, we worked with the New York Times to build a demo. In addition to world-class news coverage, the New York Times is famous for its crossword and other puzzle games. Since avid puzzlers want to play on whatever device they’re using at the time, their development team was attracted to Flutter as a potential solution for their needs. Discovering that they could reach the web with the same code was a huge boon. At Google I/O this week, you can get a sneak peek of their &lt;a href="https://www.nytimes.com/games/prototype/kenken"&gt;newly refreshed KENKEN puzzle game&lt;/a&gt;, which runs with the same code on Android, iOS, web, Mac, and Chrome OS.  &lt;/p&gt;&lt;a href="https://3.bp.blogspot.com/-e1IGVi16-Qo/XNGnZNzvKeI/AAAAAAAAHgo/D1mP3-JAzY4xJVB6ZFuD8PXvmWUcymwLQCLcBGAs/s1600/gif%2B%25282%2529.gif" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-e1IGVi16-Qo/XNGnZNzvKeI/AAAAAAAAHgo/D1mP3-JAzY4xJVB6ZFuD8PXvmWUcymwLQCLcBGAs/s1600/gif%2B%25282%2529.gif" data-original-width="1256" data-original-height="732" alt="ken-gratulations puzzle"/&gt;&lt;/a&gt; &lt;p&gt;Here’s what Eric von Coelln, Executive Director of Puzzles at the New York Times has to say about their experiences with Flutter: &lt;/p&gt;&lt;blockquote&gt;&lt;em&gt;     "The New York Times Crossword has more than 400,000 stand-alone subscriptions and is a daily ritual for puzzle solvers. Along with the Crossword, we’ve grown our portfolio of digital puzzles that reaches more than two million solvers each month.  &lt;/p&gt;&lt;p&gt;     We were already beginning to explore Flutter as a potential solution to the challenge of quickly developing engaging, high-quality mobile experiences.  Now the addition of being able to publish to web makes Flutter an even more appealing option to quickly deploy across all of our user platforms. This update of our old Flash-based KenKen game into a multi-platform playable experience is something we’re excited to bring to our solvers this year.” &lt;/em&gt;&lt;/blockquote&gt;&lt;p&gt;There’s lots more to say about Flutter for web than we have space for here, so check out the dedicated &lt;a href="https://medium.com/flutter-io/bringing-flutter-to-the-web-904de05f0df0"&gt;article about Flutter for web&lt;/a&gt; on the Flutter blog. &lt;/p&gt;&lt;p&gt;At this early stage, we’re eager to get your feedback on how you’d like to use Flutter for web. We expect to rapidly evolve the code, with a particular focus on performance, and harmonizing the codebase with the rest of the Flutter project.  &lt;/p&gt;&lt;h2&gt;Flutter for Mobile Devices&lt;/h2&gt;  &lt;p&gt;The core Flutter framework also receives an upgrade this week, with the &lt;strong&gt;immediate availability of Flutter 1.5&lt;/strong&gt; in our stable channel. &lt;a href="https://medium.com/flutter-io/announcing-flutter-1-5-6e5d7e35b75f"&gt;Flutter 1.5&lt;/a&gt; includes hundreds of changes in response to developer feedback, including updates for new App Store iOS SDK requirements, updates to the iOS and Material widgets, engine support for new device types, and Dart 2.3 featuring new &lt;a href="https://medium.com/dartlang/making-dart-a-better-language-for-ui-f1ccaf9f546c"&gt;UI-as-code&lt;/a&gt; language features. &lt;/p&gt;&lt;p&gt;As the framework itself matures, we’re investing in building out the supporting ecosystem. The architectural model of Flutter has always prioritized a small core framework, supplemented by a rich package community. In the last few months, Google has contributed production-quality packages for web views, Google Maps, and Firebase ML Vision, and this week, we’re adding &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fpub.dartlang.org%2Fpackages%2Fin_app_purchase"&gt;initial support for in-app payments&lt;/a&gt;. And with over 2,000 open source packages available for Flutter, there are options available for most scenarios.  &lt;/p&gt;&lt;p&gt;One particularly exciting project that we’re announcing this week at I/O is the &lt;a href="http://github.com/firebase/mlkit-custom-image-classifier"&gt;ML Kit Custom Image Classifier&lt;/a&gt;. Built using Flutter and Firebase, it offers an easy-to-use app-based workflow for creating custom image classification models. You can collect training data using the phone's camera, invite others to contribute to your datasets, trigger model training, and use trained models, all from the same app. &lt;/p&gt;&lt;a href="https://3.bp.blogspot.com/-B6k0eVGGeMs/XNCDm5FcODI/AAAAAAAAHes/POhYABZ-M_YSzsCVVIzfcE-zlQrfWwW5QCLcBGAs/s1600/image3.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-B6k0eVGGeMs/XNCDm5FcODI/AAAAAAAAHes/POhYABZ-M_YSzsCVVIzfcE-zlQrfWwW5QCLcBGAs/s1600/image3.png" data-original-width="1600" data-original-height="827" alt="Flutter ML Kit: create datasets, collaborate to collect data, train model, run inference" /&gt;&lt;/a&gt;&lt;p&gt;Flutter continues to grow in popularity and adoption. A &lt;a href="https://flutter.dev/showcase"&gt;growing roster of demanding customers&lt;/a&gt; including eBay, Sonos, Square, Capital One, Alibaba and Tencent are developing apps with Flutter. And they’re having fun! Here’s what Larry McKenzie, a senior developer at eBay had to say about Flutter: &lt;/p&gt;&lt;blockquote&gt;&lt;em&gt;     “Flutter is fast! Features that once took us multiple days to implement can be finished in a single day.  Many problems we used to spend a lot of time on, simply no longer occur. Our team can now focus on creating more polished user experiences and delivering functionality.  Flutter is enabling us to exceed expectations!” &lt;/em&gt;&lt;/blockquote&gt;&lt;p&gt;More broadly, &lt;a href="https://learning.linkedin.com/blog/tech-tips/the-fastest-growing-skills-among-software-engineers--and-how-to-"&gt;LinkedIn recently conducted a study&lt;/a&gt; that showed &lt;strong&gt;Flutter is the single fastest-growing skill among software engineers&lt;/strong&gt;, based on site members claiming it on their profile over the last 12 months. And in the recent 2019 StackOverflow developer survey, &lt;a href="https://insights.stackoverflow.com/survey/2019#technology-_-most-loved-dreaded-and-wanted-other-frameworks-libraries-and-tools"&gt;Flutter was listed as one of the most-loved developer frameworks&lt;/a&gt;.  &lt;/p&gt;&lt;h2&gt;Flutter for Desktop&lt;/h2&gt;  &lt;p&gt;Flutter is also being used on the desktop. For some months, we’ve been working on the desktop as &lt;a href="https://github.com/google/flutter-desktop-embedding"&gt;an experimental project&lt;/a&gt;. But now we’re graduating this into Flutter engine, integrating this work directly into the mainline repo. While these targets are not production-ready yet, we have published early &lt;a href="https://github.com/flutter/flutter/wiki/Desktop-shells"&gt;instructions for developing Flutter apps to run on Mac, Windows, and Linux&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;Another quickly growing Flutter platform is Chrome OS, with millions of Chromebooks being sold every year, particularly in education. Chrome OS is a perfect environment for Flutter, both for running Flutter apps, and as a developer platform, since it supports execution of both Android and Linux apps. With Chrome OS, you can use Visual Studio Code or Android Studio to develop a Flutter app that you can test and run locally on the same device without an emulator. You can also publish Flutter apps for Chrome OS to the Play Store, where millions of others can benefit from your creation.  &lt;/p&gt;&lt;h2&gt;Flutter for Embedded Devices&lt;/h2&gt;  &lt;p&gt;As the final example of Flutter’s portability, we offer Flutter embedded on other devices. We recently published &lt;a href="https://medium.com/flutter-io/flutter-on-raspberry-pi-mostly-from-scratch-2824c5e7dcb1"&gt;samples&lt;/a&gt; that demonstrate Flutter running directly on smaller-scale devices like Raspberry Pi, and we offer an &lt;a href="https://github.com/flutter/flutter/wiki/Custom-Flutter-Engine-Embedders"&gt;embedding API for Flutter&lt;/a&gt; that allows it to be used in scenarios including home, automotive and beyond.  &lt;/p&gt;&lt;p&gt;Perhaps one of the most pervasive embedded platforms where Flutter is already running is on the smart display operating system that powers the likes of Google Home Hub.  &lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-bjyxSBa7HaA/XNCEFNpv2wI/AAAAAAAAHe4/YrVDngeN7fQoEKlzkAEA3JCs8lWSFHdpwCLcBGAs/s1600/image1.png" imageanchor="1" &gt;&lt;img id="imgHalf" border="0" src="https://1.bp.blogspot.com/-bjyxSBa7HaA/XNCEFNpv2wI/AAAAAAAAHe4/YrVDngeN7fQoEKlzkAEA3JCs8lWSFHdpwCLcBGAs/s1600/image1.png" data-original-width="1119" data-original-height="897" alt-"Google Home Hub Smart Display powered by Flutter"/&gt;&lt;/a&gt;&lt;p&gt;Within Google, some Google-built features for the Smart Display platform are powered by Flutter today. And the Assistant team is excited to continue to expand the portfolio of features built with Flutter for the Smart Display in the coming months; the goal this year is to use Flutter to drive the overall system UI. &lt;/p&gt;&lt;h2&gt;Other Resources&lt;/h2&gt;  &lt;p&gt;We often get asked by developers how they can get started with Flutter. We are pleased today to &lt;a href="https://www.appbrewery.co/p/flutter-development-bootcamp-with-dart/"&gt;announce a comprehensive new training course for Flutter&lt;/a&gt;, built by &lt;a href="https://www.appbrewery.co/"&gt;The App Brewery&lt;/a&gt;, authors of the highest-rated iOS training course on Udemy. Their new course has over thirty hours of content for Flutter, including videos, demos and labs, and with Google’s sponsorship, they are announcing today a time-limited discount of this course from the retail price of $199 to just $10. &lt;/p&gt;&lt;p&gt;Many developers are creating inspiring apps with Flutter.  In the run-up to Google I/O, we ran a contest called Flutter Create to encourage developers to see what they could build with Flutter in 5KB or less of Dart code. We had over 750 unique entries from around the world, with some amazing examples that pushed what we imagine would be possible in such a small size.  &lt;/p&gt; &lt;iframe width="560" height="315" src="https://www.youtube.com/embed/WLvpROMUjYQ" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;p&gt;Today, we’re announcing the winners, which can be found on &lt;a href="https://flutter.dev/create"&gt;flutter.dev/create&lt;/a&gt;. Congratulations to the overall winner, Zebiao Hu, who wins a fully-loaded iMac Pro worth over $10,000!  &lt;p&gt;Flutter is no longer a mobile framework, but a &lt;a href="https://youtu.be/5VbAwhBBHsg"&gt;multi-platform framework&lt;/a&gt; that can help you reach your users wherever they are. We can’t wait to see what you’ll build with Flutter on the web, desktop, mobile, and beyond! &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/Jr4vzUS07lQ" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/2971018812040247285/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/05/Flutter-io19.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/2971018812040247285" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/2971018812040247285" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/Jr4vzUS07lQ/Flutter-io19.html" title="Flutter: a Portable UI Framework for Mobile, Web, Embedded, and Desktop" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-ak_aEW48mmA/XNCDH1UYfaI/AAAAAAAAHeg/NUhgwcoZX2Ei7exfQreLRSmOfPtxdCReQCLcBGAs/s72-c/image2.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/05/Flutter-io19.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-1342700611859786194</id><published>2019-05-07T13:06:00.000-07:00</published><updated>2019-05-07T13:06:47.946-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="actions on google" /><category scheme="http://www.blogger.com/atom/ns#" term="assistant" /><category scheme="http://www.blogger.com/atom/ns#" term="google assistant" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Home Hub" /><category scheme="http://www.blogger.com/atom/ns#" term="google io" /><category scheme="http://www.blogger.com/atom/ns#" term="IO19" /><title type="text">Actions on Google at I/O 2019: New tools for web, mobile, and smart home developers</title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-sJ4Zeub6m-k/XNHflNtLl6I/AAAAAAAAHjQ/Hh1D01Mxsm8rl6psHkMl_4cDjGIYBQ0iwCLcBGAs/s1600/io19_Blog_AoG.png"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-sJ4Zeub6m-k/XNHflNtLl6I/AAAAAAAAHjQ/Hh1D01Mxsm8rl6psHkMl_4cDjGIYBQ0iwCLcBGAs/s1600/io19_Blog_AoG.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Chris Turkstra, Director, Actions on Google&lt;/em&gt;&lt;/p&gt; &lt;a href="https://1.bp.blogspot.com/-sJ4Zeub6m-k/XNHflNtLl6I/AAAAAAAAHjQ/Hh1D01Mxsm8rl6psHkMl_4cDjGIYBQ0iwCLcBGAs/s1600/io19_Blog_AoG.png" imageanchor="1" &gt;&lt;img id="imgFull" style="width:100%" border="0" src="https://1.bp.blogspot.com/-sJ4Zeub6m-k/XNHflNtLl6I/AAAAAAAAHjQ/Hh1D01Mxsm8rl6psHkMl_4cDjGIYBQ0iwCLcBGAs/s1600/io19_Blog_AoG.png" data-original-width="1600" data-original-height="900" /&gt;&lt;/a&gt; &lt;p&gt;People are using the Assistant every day to get things done more easily, creating lots of opportunities for developers on this quickly growing platform. And we’ve heard from many of you that want easier ways to connect your content across the Assistant. &lt;/p&gt;&lt;p&gt;At I/O, we’re announcing new solutions for Actions on Google that were built specifically with you in mind. Whether you build for web, mobile, or smart home, these new tools will help make your content and services available to people who want to use their voice to get things done. &lt;/p&gt;&lt;h2&gt;Enhance your presence in Search and the Assistant &lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Help people with their “how to” questions&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Every day, people turn to the internet to ask “how to” questions, like how to tie a tie, how to fix a faucet, or how to install a dog door. At I/O, we’re introducing support for &lt;a href="http://g.co/howto-markup"&gt;How-to markup&lt;/a&gt; that lets you power richer and more helpful results in Search and the Assistant. &lt;/p&gt;&lt;p&gt;Adding How-to markup to your pages will enable the page to appear as a rich result on mobile Search and on Google Assistant Smart Displays. This is an incredibly lightweight way for web developers and creators to connect with millions of people, giving them helpful step-by-step instructions with video, images and text. You can start seeing How-to markup results on Search today, and your content will become available on the Smart Displays in the coming months.  &lt;/p&gt;&lt;p&gt;Here’s an example where DIY Network added markup to their existing content on the web to provide a more helpful, interactive result on both Google Search and the Assistant:  &lt;/p&gt;&lt;div id="flexParent"&gt; &lt;a href="https://2.bp.blogspot.com/-FTU0FLHqCmA/XNHCb8rAinI/AAAAAAAAHh8/702Y5SlTD_sdA-nj4Mi4ZHAFkUd6RqoaACLcBGAs/s1600/image1.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://2.bp.blogspot.com/-FTU0FLHqCmA/XNHCb8rAinI/AAAAAAAAHh8/702Y5SlTD_sdA-nj4Mi4ZHAFkUd6RqoaACLcBGAs/s1600/image1.png" data-original-width="686" data-original-height="1030" alt="Mobile Search screenshot showing how to install a dog door"/&gt;&lt;/a&gt; &lt;a href="https://4.bp.blogspot.com/-9jJX-b8OHtY/XNHN9ix1FyI/AAAAAAAAHiI/Cd4XCbMCExItXMSEcDj2nNiYd6XZnC7kgCLcBGAs/s1600/image3.gif" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-9jJX-b8OHtY/XNHN9ix1FyI/AAAAAAAAHiI/Cd4XCbMCExItXMSEcDj2nNiYd6XZnC7kgCLcBGAs/s1600/image3.gif" data-original-width="1600" data-original-height="900" alt="How-to Markup of how to install a dog door"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;For content creators that don’t maintain a website, we created a &lt;a href="http://developers.google.com/actions/templates/how-to"&gt;How-to Video Template&lt;/a&gt; where video creators can upload a simple spreadsheet with titles, text and timestamps for their YouTube video, and we’ll handle the rest. This is a simple way to transform your existing how-to videos into interactive, step-by-step tutorials across Google Assistant Smart Displays and Android phones.  &lt;/p&gt;&lt;p&gt;Check out how REI is getting extra mileage out of their YouTube video:  &lt;/p&gt;&lt;a href="https://3.bp.blogspot.com/-vISyANPbmQE/XNHPUIfFJOI/AAAAAAAAHiQ/LGD1viO-jbMHgAD3O7lqw8vN_PY6RRfJwCLcBGAs/s1600/image2.gif" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-vISyANPbmQE/XNHPUIfFJOI/AAAAAAAAHiQ/LGD1viO-jbMHgAD3O7lqw8vN_PY6RRfJwCLcBGAs/s1600/image2.gif" data-original-width="1346" data-original-height="780" alt="Laptop to Home Hub displaying How To Template for the REI compass"/&gt;&lt;/a&gt;&lt;p&gt;How-to Video Templates are in developer preview so you can &lt;a href="http://g.co/howto-video-template"&gt;start&lt;/a&gt; building today, and your content will become available on Android phones and Smart Displays in the coming months.  &lt;/p&gt;&lt;h2&gt;Easier engagement with your apps &lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Help people quickly get things done with App Actions&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If you’re an app developer, people are turning to your apps every day to get things done. And we see people turn to the Assistant every day for a natural way to ask for help via voice. This offers an opportunity to use intents to create voice-based entry points from the Assistant to the right spot in your app.  &lt;/p&gt;&lt;p&gt;Last year, we previewed &lt;a href="https://developers.google.com/actions/app"&gt;App Actions&lt;/a&gt;, a simple mechanism for Android developers that uses intents from the Assistant to deep link to exactly the right spot in your app. At I/O, we are announcing the release of &lt;a href="https://developers.google.com/actions/app/bii-integrations"&gt;built-in intents&lt;/a&gt; for four new App Action categories: Health &amp; Fitness, Finance and Banking, Ridesharing, and Food Ordering. Using these intents, you can integrate with the Assistant in no time.  &lt;/p&gt;&lt;p&gt;If I wanted to track my run with Nike Run Club, I could just say “Hey Google, start my run in Nike Run Club” and the app will automatically start tracking my run. Or, let’s say I just finished dinner with my friend Chad and we're splitting the check. I can say "Hey Google, send $15 to Chad on PayPal" and the Assistant takes me right into Paypal, I log in, and all of my information is filled in – all I need to do is hit send. &lt;/p&gt;&lt;a href="https://4.bp.blogspot.com/-jHYQ9rcoR_U/XNHP7n6bJlI/AAAAAAAAHiY/ip0UUw0T7tUYuqE1Ewk8ld2aD4H0ZVORACLcBGAs/s1600/image4.gif" imageanchor="1" &gt;&lt;img id="imgHalf" style="width:30%;" border="0" src="https://4.bp.blogspot.com/-jHYQ9rcoR_U/XNHP7n6bJlI/AAAAAAAAHiY/ip0UUw0T7tUYuqE1Ewk8ld2aD4H0ZVORACLcBGAs/s1600/image4.gif" data-original-width="320" data-original-height="648" alt="Google Pixel showing App Actions Nike Run Club"/&gt;&lt;/a&gt;&lt;p&gt;Each of these integrations were completed in less than a day with the addition of an Actions.xml file that handles the mapping of intents between your app and the Actions platform. You can start building with these new intents today and deploy to Assistant users on Android in the coming months. This is a huge opportunity to offer your fans an effortless way to engage more frequently with your apps.  &lt;/p&gt;&lt;h2&gt;Build for devices in the home&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Take advantage of Smart Displays’ interactive screens&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Last year, we saw the introduction of the Smart Display as a new device category. The interactive visual surface opens up many new possibilities for developers.  &lt;/p&gt;&lt;p&gt;Today, we’re introducing a developer preview of &lt;a href="https://developers.google.com/actions/canvas/"&gt;Interactive Canvas&lt;/a&gt; which lets you create full-screen experiences that combine the power of voice, visuals and touch. Canvas works across Smart Displays and Android phones, and it uses open web technologies you’re likely already familiar with, like HTML, CSS and Javascript.  &lt;/p&gt;&lt;p&gt;Here’s an example of what you can build when you can leverage the full screen of a Smart Display:  &lt;/p&gt;&lt;a href="https://3.bp.blogspot.com/-xZeTWF342rI/XNHQPqH0D3I/AAAAAAAAHic/DlONfcRJXYkHJMb1r1hJPsaOD_PDu_z2ACLcBGAs/s1600/image5.gif" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-xZeTWF342rI/XNHQPqH0D3I/AAAAAAAAHic/DlONfcRJXYkHJMb1r1hJPsaOD_PDu_z2ACLcBGAs/s1600/image5.gif" data-original-width="1600" data-original-height="900" alt="Full screen of a Smart Display"/&gt;&lt;/a&gt;&lt;p&gt;Interactive Canvas is available for building games starting today, and we’ll be adding more categories soon. Visit the Actions Console to be one of the first to try it out. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Enable smart home devices to communicate locally &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;There are now more than 30,000 connected devices that work with the Assistant across 3,500 brands, and today, we’re excited to announce a new suite of local technologies that are specifically designed to create an even better smart home.  &lt;/p&gt;&lt;p&gt;Introducing a preview of the &lt;a href="http://g.co/localhomesdk"&gt;Local Home SDK&lt;/a&gt; which enables you to run your smart home code locally on Google Home Speakers and Nest Displays and use its radios to communicate locally with your smart devices. This reduces cloud hops and brings a new level of speed and reliability to the smart home. We’ve been working with some amazing partners including Philips, Wemo, TP-Link, and LIFX on testing this SDK and we’re excited to open it up for all developers next month. &lt;/p&gt;&lt;a href="https://3.bp.blogspot.com/-S88w2iELOGw/XNHQbgz-qaI/AAAAAAAAHik/3d6R5c4cEHErBiRl7zQ19eHMzET44BLIQCLcBGAs/s1600/image6.gif" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-S88w2iELOGw/XNHQbgz-qaI/AAAAAAAAHik/3d6R5c4cEHErBiRl7zQ19eHMzET44BLIQCLcBGAs/s1600/image6.gif" data-original-width="1280" data-original-height="720" alt="Flowchart of Local Home SDK" /&gt;&lt;/a&gt;&lt;p&gt;&lt;strong&gt;Make setup more seamless&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;And, through the Local Home SDK, we’re improving the device setup experience by providing users with a seamless setup experience, something we launched in partnership with GE smart lights this past October. So far, people have loved the ability to set up their lights in less than a minute in the Google Home app. We’re now scaling this to more partners, so go &lt;a href="https://assistant.google.com/business/form/"&gt;here&lt;/a&gt; if you’re interested. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Make your devices smart with Assistant Connect&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Also, at CES earlier this year we previewed Google Assistant Connect which leverages the Local Home SDK. Assistant Connect enables smart home and appliance developers to easily add Assistant functionality into their devices at low cost. It does this by offloading a lot of work onto the Assistant to complete Actions, display content and respond to commands. We've been hard at work developing the platform along with the first products built on it by Anker, Leviton and Tile. We can't wait to show you more about Assistant Connect later this year. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;New device types and traits&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;For those of you creating Actions for the smart home, we’re also releasing 16 new device types and three new device traits including LockUnlock, ArmDisarm, and Timer. Head over to our &lt;a href="https://developers.google.com/actions/smarthome/"&gt;developer documentation&lt;/a&gt; for the full list of 38 device types and 18 device traits, and check out our &lt;a href="https://github.com/actions-on-google/smart-home-nodejs"&gt;sample project on GitHub&lt;/a&gt; to start building.  &lt;/p&gt;&lt;h2&gt;Get started with our new tools for all types of developers &lt;/h2&gt;&lt;p&gt;Whether you’re looking to extend the reach of your content, drive more usage in your apps, or build custom Assistant-powered experiences, you now have more tools to do so. &lt;/p&gt;&lt;p&gt;If you want to learn more about how you can start building with these tools, check out our &lt;a href="https://developers.google.com/actions/"&gt;website&lt;/a&gt; to get started and our &lt;a href="https://developers.googleblog.com/2019/04/check-out-google-assistant-talks-at-io.html"&gt;schedule&lt;/a&gt; so you can tune in to all of our developer talks that we’ll be hosting throughout the week.  &lt;/p&gt;&lt;p&gt;We can’t wait to build together with you! &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/wU0iMOq9waU" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/1342700611859786194/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2019/05/Actions-on-Google-at-IO-2019.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/1342700611859786194" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/1342700611859786194" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/wU0iMOq9waU/Actions-on-Google-at-IO-2019.html" title="Actions on Google at I/O 2019: New tools for web, mobile, and smart home developers" /><author><name>Google Developers</name><uri>http://www.blogger.com/profile/11166847513477443177</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-sJ4Zeub6m-k/XNHflNtLl6I/AAAAAAAAHjQ/Hh1D01Mxsm8rl6psHkMl_4cDjGIYBQ0iwCLcBGAs/s72-c/io19_Blog_AoG.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2019/05/Actions-on-Google-at-IO-2019.html</feedburner:origLink></entry></feed>
