<?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>2020-09-28T02:11:10.731-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="chrome" /><category term="app engine" /><category term="developer" /><category term="faster web" /><category term="events" /><category term="html5" /><category term="featured" /><category term="cloud platform" /><category term="google apps" /><category term="Google" /><category term="developers" /><category term="javascript" /><category term="google io" /><category term="machine learning" /><category term="TensorFlow" /><category term="analytics" /><category term="mobile" /><category term="actions on google" /><category term="oauth" /><category term="apps script" /><category term="weekly roundup" /><category term="G Suite" /><category term="AI" /><category term="Google APIs" /><category term="maps" /><category term="Artificial Intelligence" /><category term="java" /><category term="api" /><category term="games" /><category term="bigquery" /><category term="google code project hosting" /><category term="youtube" /><category term="conferences" /><category term="google assistant" /><category term="google summer of code" /><category term="Who's at Google I/O" /><category term="google code" /><category term="googlenew" /><category term="hackathon" /><category term="podcast" /><category term="python" /><category term="security" /><category term="video" /><category term="Firebase" /><category term="gwt" /><category term="opensocial" /><category term="#io14" /><category term="devfest" /><category term="gdata" /><category term="gdl" /><category term="Udacity" /><category term="google developers" /><category term="google+" /><category term="openid" /><category term="VR" /><category term="calendar" /><category term="gmail" /><category term="page speed" /><category term="IoT" /><category term="assistant" /><category term="flutter" /><category term="gsoc" /><category term="launchpad" /><category term="apps" /><category term="chrome web store" /><category term="chromium" /><category term="dart" /><category term="google visualization api" /><category term="google web toolkit" /><category term="ios" /><category term="GDD11" /><category term="gadgets" /><category term="social" /><category term="ajax" /><category term="contest" /><category term="education" /><category term="event" /><category term="gdg" /><category term="google developer day" /><category term="google developer days" /><category term="google gears" /><category term="Edge TPU" /><category term="Google Cloud" /><category term="Google Drive" /><category term="coffee with a googler" /><category term="google data apis" /><category term="google storage" /><category term="googleio" /><category term="prediction api" /><category term="startup" /><category term="Drive" /><category term="Project Tango" /><category term="Smart Home" /><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="Coral" /><category term="Google Sheets API" /><category term="TensorFlow Lite" /><category term="adsense" /><category term="design" /><category term="google cast" /><category term="google chart api" /><category term="google compute engine" /><category term="google pay" /><category term="linux" /><category term="performance" /><category term="speakers" /><category term="web performance" /><category term="3d" /><category term="ARCore" /><category term="Gmail APIs" /><category term="Google Cloud Platform" /><category term="Google Drive SDK" /><category term="Google Slides API" /><category term="africa" /><category term="buzz" /><category term="code jam" /><category term="enterprise" /><category term="entrepreneurs" /><category term="google checkout" /><category term="google docs" /><category term="html" /><category term="mod_pagespeed" /><category term="native client" /><category term="polymer" /><category term="sdk" /><category term="search" /><category term="startups" /><category term="AR" /><category term="Ads" /><category term="GSuite" /><category term="Google Wave" /><category term="IO19" /><category term="accelerator" /><category term="augmented reality" /><category term="beacons" /><category term="cardboard" /><category term="cloud sql" /><category term="commerce" /><category term="google chrome" /><category term="google cloud storage" /><category term="google play services" /><category term="guest post" /><category term="guice" /><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="women techmakers" /><category term="#io2012" /><category term="#io2013" /><category term="AIY" /><category term="AIY Projects" /><category term="AutoML" /><category term="I/O" /><category term="MediaPipe" /><category term="Mobile web" /><category term="cast" /><category term="community" /><category term="countdown to I/O 2012" /><category term="css" /><category term="eclipse" /><category term="gdd07" /><category term="google earth" /><category term="google friend connect" /><category term="grow with google" /><category term="labs" /><category term="ml" /><category term="online payments" /><category term="orkut" /><category term="scholarship" /><category term="small business" /><category term="standards" /><category term="translate" /><category term="visualization" /><category term="web" /><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="Firebase Analytics" /><category term="Google Docs API" /><category term="actions" /><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="google pay api" /><category term="in-app payments" /><category term="maker" /><category term="picasa web" /><category term="project hosting" /><category term="prototype" /><category term="subversion" /><category term="virtual reality" /><category term="web fonts" /><category term="Announcement" /><category term="Auth" /><category term="Certification" /><category term="Datasets" /><category term="Estimators" /><category term="Go" /><category term="Google Coral" /><category term="Google Developer Groups" /><category term="Google Play" /><category term="Google sheets" /><category term="I/O Extended" /><category term="Makers" /><category term="OAuth2" /><category term="SVG" /><category term="Sheets API" /><category term="apis console" /><category term="app indexing" /><category term="authsub" /><category term="c++" /><category term="chrome os" /><category term="chromecast" /><category term="client libraries" /><category term="code for educators" /><category term="custom search" /><category term="developer student clubs" /><category term="diversity" /><category term="docs" /><category term="dsc" /><category term="feeds" /><category term="gdd09" /><category term="gears" /><category term="google apps api" /><category term="google for startups" /><category term="korean" /><category term="launchpad accelerator" /><category term="machine intelligence" /><category term="open web" /><category term="osx" /><category term="pubsubhubbub" /><category term="samba" /><category term="scholarships" /><category term="sidewiki" /><category term="speed" /><category term="training" /><category term="web components" /><category term="#io12" /><category term="#io13" /><category term="Android Things" /><category term="Blockly" /><category term="Developer Communities" /><category term="Edge TPU Accelerator" /><category term="Edge TPU Dev Board" /><category term="Europe" /><category term="G Suite Developer" /><category term="Game Developers Conference" /><category term="Gmail API" /><category term="Google Cloud Messaging" /><category term="Google Developers Live" /><category term="Google Fonts" /><category term="Google Maps" /><category term="Google Noto fonts" /><category term="Google Spreadsheets API" /><category term="I/O 2017" /><category term="IO17" /><category term="India" /><category term="Latest" /><category term="ML Kit" /><category term="Sceneform" /><category term="Serverless" /><category term="actionsongoogle" /><category term="ajax apis" /><category term="android wear" /><category term="announcements" /><category term="atom publishing protocol" /><category term="awards" /><category term="browser" /><category term="caption" /><category term="chinese" /><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="github" /><category term="google apps for your domain" /><category term="google fit" /><category term="google web elements" /><category term="identity" /><category term="interviews" /><category term="iphone" /><category term="launchpad studio" /><category term="mac" /><category term="machine learning accelerator" /><category term="meetup" /><category term="narratives" /><category term="open source blog" /><category term="oreilly" /><category term="picasa" /><category term="play services" /><category term="privacy" /><category term="programming" /><category term="rails" /><category term="random hacks of kindness" /><category term="research" /><category term="soc" /><category term="speed tracer" /><category term="testing" /><category term="web exponents" /><category term="webgl" /><category term="#GDC20" /><category term="AIYProjects" /><category term="AdWords" /><category term="Administrative APIs" /><category term="Android App Development" /><category term="App Development" /><category term="Audio" /><category term="Brazil" /><category term="Brotli" /><category term="CardDAV" /><category term="CocoaPods" /><category term="Crash Reporting" /><category term="Depth" /><category term="DevFest18" /><category term="DevFestStories" /><category term="Developer Preview" /><category term="EMEA" /><category term="Fabric" /><category term="Firebase Cloud Messaging" /><category term="Fonts" /><category term="GDD" /><category term="GDE" /><category term="Google AR" /><category term="Google Data Studio" /><category term="Google Developers Academy" /><category term="Google Maps Platform" /><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="Indie Games Accelerator" /><category term="Issue Tracker" /><category term="JS" /><category term="KDE 4.0" /><category term="Learning" /><category term="Local Home" /><category term="Local Home SDK" /><category term="Location" /><category term="MacFuse" /><category term="Machine" /><category term="Moderator" /><category term="MySQL" /><category term="O3D" /><category term="Occlusion" /><category term="Polymer Summit" /><category term="REST" /><category term="Remote Config" /><category term="Safety &amp; Security" /><category term="Scratch" /><category term="Startup accelerator" /><category term="Street View" /><category term="TF Lite" /><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="Women in Tech" /><category term="advogato" /><category term="android developers" /><category term="android11" /><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="compatibility" /><category term="computer science" /><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="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="http" /><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="open-source" /><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="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="thought leadership" /><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="young developers" /><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="Access" /><category term="Account Linking" /><category term="Actions Builder" /><category term="Actions SDK" /><category term="Actions console" /><category term="Alfred Camera" /><category term="Android Developer" /><category term="Android Development" /><category term="Android Studio" /><category term="Android TV" /><category term="App Invites" /><category term="App dev" /><category term="Application Development" /><category term="Augmented images" /><category term="Belarus" /><category term="Bluetooth" /><category term="Build Out" /><category term="BuildOut" /><category term="Bulgaria" /><category term="COVID" /><category term="COVID-19" /><category term="COVID19DetectProtect" /><category term="CPU" /><category term="Cache" /><category term="Cast Connect" /><category term="Chrome OS IO" /><category term="Chrome OS IO19" /><category term="Chromebooks" /><category term="Cloud Anchors" /><category term="Cloud Computing" /><category term="Cloud Functions" /><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="Console" /><category term="Containers" /><category term="Core ML" /><category term="Croatia" /><category term="Crostini" /><category term="Custom Elements" /><category term="Czechia" /><category term="DA" /><category term="DFP" /><category term="Data Compression" /><category term="Data Visualization" /><category term="Data science" /><category term="Databases" /><category term="Dataset" /><category term="Daydream" /><category term="Developer Advocate" /><category term="Developer Culture" /><category term="Developer Keynote" /><category term="Development" /><category term="Device" /><category term="Docker" /><category term="Ebay" /><category term="Error logging" /><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 Clock" /><category term="Flutter Create" /><category term="Flutter Interact" /><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="GDC 2020" /><category term="GDC17" /><category term="GET" /><category term="GKE" /><category term="GMTC" /><category term="GPE" /><category term="GPGS C++ Games" /><category term="GPT" /><category term="GWSOP" /><category term="Gigster" /><category term="Glass" /><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 Cardboard" /><category term="Google Cloud Talks" /><category term="Google Developer Experts" /><category term="Google Developer Scholarship" /><category term="Google Developers Groups" /><category term="Google Developers University Consortium" /><category term="Google Developers site" /><category term="Google For Games" /><category term="Google Groups Settings" /><category term="Google Home Hub" /><category term="Google IOS Android" /><category term="Google Identity Platform" /><category term="Google Pay India" /><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="GooglePlay AndroidDev" /><category term="Groovy" /><category term="Groups API" /><category term="Handwriting" /><category term="Headset" /><category term="I/O 17" /><category term="ICYMI" /><category term="IO" /><category term="IO19 Flutter" /><category term="IO2017" /><category term="IWD 2020" /><category term="Image Compression" /><category term="Imara" /><category term="In-app billing" /><category term="Instagram" /><category term="International Women’s Day" /><category term="KDE" /><category term="Keras" /><category term="Kotlin" /><category term="Krakow" /><category term="Kubernetes" /><category term="LatAm startups" /><category term="Latin America" /><category term="LaunchShow" /><category term="Leadership" /><category term="Linux on Chrome OS" /><category term="Linux on Chromebooks" /><category term="LoCo" /><category term="Logging" /><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="Micronaut" /><category term="Microservices" /><category term="Mobile App Development" /><category term="Mobile Development" /><category term="Mobile World Congress" /><category term="Monthly roundup" /><category term="NPM" /><category term="NYT" /><category term="Nest" /><category term="Nest WiFi" /><category term="Next Billion Users" /><category term="Noto Serif CJK" /><category term="OAuth playground" /><category term="OCaml" /><category term="ODF" /><category term="OOXML" /><category term="Object Detection and Tracking" /><category term="Optimization" /><category term="POST" /><category term="PWA" /><category term="PageSpeed" /><category term="Peer bonus program" /><category term="Poly" /><category term="Pose Detection" /><category term="Pose Estimation" /><category term="PowerMeter API" /><category term="Prerender" /><category term="Progressive Web App" /><category term="Project Connected Home over IP" /><category term="Project Loon" /><category term="Qualcomm" /><category term="Qualcomm Google" /><category term="Rasberry Pi" /><category term="React" /><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="Sample dialogs" /><category term="Santa Tracker" /><category term="Scala" /><category term="Serbia" /><category term="Sheets" /><category term="Shoreline Amphitheatre" /><category term="Slides API" /><category term="Smart Lock for Passwords" /><category term="Space" /><category term="Spring" /><category term="Stable release" /><category term="Stackdriver" /><category term="Static Sites" /><category term="Strobe" /><category term="Sundar Pichai" /><category term="TPU Dev Board" /><category term="Team Drives (new)" /><category term="Technical Writing" /><category term="TensorFlow Research Cloud" /><category term="Tez" /><category term="Toolkit" /><category term="Traits" /><category term="UN" /><category term="UNDP" /><category term="UNICEF" /><category term="URLs" /><category term="UX" /><category term="Ukraine" /><category term="Update" /><category term="VUI" /><category term="Wearables" /><category term="Weave" /><category term="WhiteHouse.gov" /><category term="Winter of Code" /><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="business console" /><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="coding" /><category term="collada" /><category term="color" /><category term="community connectors" /><category term="competition" /><category term="compressorhead" /><category term="computer vision" /><category term="computing heritage" /><category term="conference" /><category term="conversation design" /><category term="couchdb" /><category term="country support" /><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="desktop" /><category term="desktop apps" /><category term="developer features" /><category term="developer relations" /><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="domain" /><category term="domains" /><category term="doodles" /><category term="dreamweaver" /><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="face detection" /><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="golang" /><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 pay account" /><category term="google pay business" /><category term="google pay integration" /><category term="google pay support" /><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="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="integration status" /><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="language" /><category term="languages" /><category term="laptop apps" /><category term="laptops" /><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="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="prizes" /><category term="processing" /><category term="production access" /><category term="programmers" /><category term="proximity" /><category term="py3k" /><category term="releases" /><category term="reserve seats" /><category term="result snippets" /><category term="review process" /><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="shortcuts" /><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="spyware" /><category term="startup africa roadtrip" /><category term="stuff" /><category term="style" /><category term="subscription" /><category term="summer of code" /><category term="syndication" /><category term="targeted spyware" /><category term="techmakers" /><category term="templates" /><category term="tensorRT" /><category term="tensorflow dev summit" /><category term="text embedding models" /><category term="tfdevsummit" /><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="updates" /><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="websites" /><category term="win" /><category term="windows programming" /><category term="women developers" /><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>1980</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-6854970303541642311</id><published>2020-09-25T09:14:00.001-07:00</published><updated>2020-09-25T09:14:52.024-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="augmented reality" /><category scheme="http://www.blogger.com/atom/ns#" term="MediaPipe" /><title type="text">MediaPipe 3D Face Transform</title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-c8n-T8juUZ0/X2zbtCwzGnI/AAAAAAAAJZo/iyHQXS8-pb45QLJIpjaW6gm_gaZtWCzDACLcBGAsYHQ/s0/figure_1.gif"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-c8n-T8juUZ0/X2zbtCwzGnI/AAAAAAAAJZo/iyHQXS8-pb45QLJIpjaW6gm_gaZtWCzDACLcBGAsYHQ/s0/figure_1.gif "&gt; &lt;p&gt;&lt;em&gt;Posted by Kanstantsin Sokal, Software Engineer, &lt;a href="http://mediapipe.dev"&gt;MediaPipe team&lt;/a&gt;   &lt;/em&gt;&lt;p&gt; &lt;p&gt;Earlier this year, the &lt;a href="http://mediapipe.dev/"&gt;MediaPipe Team&lt;/a&gt; released the &lt;a href="http://solutions.mediapipe.dev/face_mesh"&gt;Face Mesh&lt;/a&gt; solution, which estimates the approximate 3D face shape via 468 landmarks in real-time on mobile devices. In this blog, we introduce a new face transform estimation module that establishes a researcher- and developer-friendly semantic API useful for determining the 3D face pose and attaching virtual objects (like glasses, hats or masks) to a face. &lt;/p&gt;&lt;p&gt;The new module establishes a metric 3D space and uses the landmark screen positions to estimate common 3D face primitives, including a face pose transformation matrix and a triangular face mesh. Under the hood, a lightweight statistical analysis method called &lt;a href="https://en.wikipedia.org/wiki/Procrustes_analysis"&gt;Procrustes Analysis&lt;/a&gt; is employed to drive a robust, performant and portable logic. The analysis runs on CPU and has a minimal speed/memory footprint on top of the original Face Mesh solution. &lt;/p&gt; &lt;center&gt; &lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://1.bp.blogspot.com/-c8n-T8juUZ0/X2zbtCwzGnI/AAAAAAAAJZo/iyHQXS8-pb45QLJIpjaW6gm_gaZtWCzDACLcBGAsYHQ/s0/figure_1.gif" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img style="width:500px" alt="MediaPipe image" border="0" data-original-height="339" data-original-width="400" src="https://1.bp.blogspot.com/-c8n-T8juUZ0/X2zbtCwzGnI/AAAAAAAAJZo/iyHQXS8-pb45QLJIpjaW6gm_gaZtWCzDACLcBGAsYHQ/s0/figure_1.gif"/&gt;&lt;/a&gt;&lt;/div&gt; &lt;/center&gt;   &lt;p&gt;&lt;em&gt;Figure 1: An example of virtual mask and glasses effects, based on the MediaPipe Face Mesh solution.&lt;/em&gt;&lt;/p&gt;&lt;h2&gt;Introduction&lt;/h2&gt;  &lt;p&gt;The &lt;a href="http://solutions.mediapipe.dev/face_mesh#face-landmark-model"&gt;MediaPipe Face Landmark Model&lt;/a&gt; performs a single-camera face landmark detection in the screen coordinate space: the X- and Y- coordinates are normalized screen coordinates, while the Z coordinate is relative and is scaled as the X coordinate under the &lt;a href="https://en.wikipedia.org/wiki/3D_projection#Weak_perspective_projection"&gt;weak perspective projection camera model&lt;/a&gt;. While this format is well-suited for some applications, it does not directly enable crucial features like aligning a virtual 3D object with a detected face. &lt;/p&gt;&lt;p&gt;The &lt;a href="http://solutions.mediapipe.dev/face_mesh#face-geometry-module"&gt;newly introduced module&lt;/a&gt; moves away from the screen coordinate space towards a metric 3D space and provides the necessary primitives to handle a detected face as a regular 3D object. By design, you'll be able to use a perspective camera to project the final 3D scene back into the screen coordinate space with a guarantee that the face landmark positions are not changed. &lt;/p&gt;&lt;h2&gt;Metric 3D Space&lt;/h2&gt;  &lt;p&gt;The Metric 3D space established within the new module is a right-handed orthonormal metric 3D coordinate space. Within the space, there is a virtual perspective camera located at the space origin and pointed in the negative direction of the Z-axis. It is assumed that the input camera frames are observed by exactly this virtual camera and therefore its parameters are later used to convert the screen landmark coordinates back into the Metric 3D space. The virtual camera parameters can be set freely, however for better results it is advised to set them as close to the real physical camera parameters as possible. &lt;/p&gt; &lt;center&gt; &lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://1.bp.blogspot.com/-kUAvRUd_bEU/X2zb92Nq36I/AAAAAAAAJZw/tu6QjKjPXa8h_ZQwjxR_g_I2HKFa59SEACLcBGAsYHQ/s0/figure%2B2.gif" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img style="width:250px" alt="MediaPipe image" border="0" data-original-height="356" data-original-width="200" src="https://1.bp.blogspot.com/-kUAvRUd_bEU/X2zb92Nq36I/AAAAAAAAJZw/tu6QjKjPXa8h_ZQwjxR_g_I2HKFa59SEACLcBGAsYHQ/s0/figure%2B2.gif"/&gt;&lt;/a&gt;&lt;/div&gt; &lt;/center&gt; &lt;p&gt;&lt;em&gt;Figure 2: A visualization of multiple key elements in the metric 3D space. Created in Cinema 4D&lt;/em&gt;&lt;/p&gt;&lt;h2&gt;Canonical Face Model&lt;/h2&gt;  &lt;p&gt;The Canonical Face Model is a static 3D model of a human face, which follows the 3D face landmark topology of the &lt;a href="http://solutions.mediapipe.dev/face_mesh#face-landmark-model"&gt;MediaPipe Face Landmark Model&lt;/a&gt;. The model bears two important functions: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;&lt;em&gt;Defines metric units&lt;/em&gt;: the scale of the canonical face model defines the metric units of the Metric 3D space. A metric unit used by the default canonical face model is a centimeter;  &lt;li&gt;&lt;em&gt;Bridges static and runtime spaces&lt;/em&gt;: the face pose transformation matrix is - in fact - a linear map from the canonical face model into the runtime face landmark set estimated on each frame. This way, virtual 3D assets modeled around the canonical face model can be aligned with a tracked face by applying the face pose transformation matrix to them. &lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Face Transform Estimation&lt;/h2&gt;  &lt;p&gt;The face transform estimation pipeline is a key component, responsible for estimating face transform data within the Metric 3D space. On each frame, the following steps are executed in the given order: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Face landmark screen coordinates are converted into the Metric 3D space coordinates;  &lt;li&gt;Face pose transformation matrix is estimated as a rigid linear mapping from the canonical face metric landmark set into the runtime face metric landmark set in a way that minimizes a difference between the two;  &lt;li&gt;A face mesh is created using the runtime face metric landmarks as the vertex positions (XYZ), while both the vertex texture coordinates (UV) and the triangular topology are inherited from the canonical face model. &lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Effect Renderer&lt;/h2&gt;  &lt;p&gt;The Effect Renderer is a component, which serves as a working example of a face effect renderer. It targets the &lt;em&gt;OpenGL ES 2.0 API&lt;/em&gt; to enable a real-time performance on mobile devices and supports the following rendering modes: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;&lt;em&gt;3D object rendering mode&lt;/em&gt;: a virtual object is aligned with a detected face to emulate an object attached to the face (example: glasses);  &lt;li&gt;&lt;em&gt;Face mesh rendering mode&lt;/em&gt;: a texture is stretched on top of the face mesh surface to emulate a face painting technique. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In both rendering modes, the face mesh is first rendered as an occluder straight into the depth buffer. This step helps to create a more believable effect via hiding invisible elements behind the face surface. &lt;/p&gt; &lt;center&gt; &lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://1.bp.blogspot.com/-HTe_pSMw1_g/X2zcf-sJxCI/AAAAAAAAJZ4/HCHB_gqVGoQDSTlPNWxOSfrEVbB7AeYUACLcBGAsYHQ/s0/figure%2B3.gif" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img style="width:250px" alt="MediaPipe image" border="0" data-original-height="354" data-original-width="200" src="https://1.bp.blogspot.com/-HTe_pSMw1_g/X2zcf-sJxCI/AAAAAAAAJZ4/HCHB_gqVGoQDSTlPNWxOSfrEVbB7AeYUACLcBGAsYHQ/s0/figure%2B3.gif"/&gt;&lt;/a&gt;&lt;/div&gt; &lt;/center&gt;   &lt;p&gt;&lt;em&gt;Figure 3: An example of face effects rendered by the Face Effect Renderer.&lt;/em&gt;&lt;/p&gt;&lt;h2&gt;Using Face Transform Module&lt;/h2&gt;  &lt;p&gt;The face transform estimation module is available as a part of the &lt;a href="http://solutions.mediapipe.dev/face_mesh"&gt;MediaPipe Face Mesh&lt;/a&gt; solution. It comes with &lt;a href="http://solutions.mediapipe.dev/face_mesh#face-effect-example"&gt;face effect application examples&lt;/a&gt;, available as graphs and mobile apps on Android or iOS. If you wish to go beyond examples, the module contains generic calculators and subgraphs - those can be flexibly applied to solve specific use cases in any MediaPipe graph. For more information, please visit our &lt;a href="http://solutions.mediapipe.dev/face_mesh#face-geometry-module"&gt;documentation&lt;/a&gt;. &lt;/p&gt;&lt;h2&gt;Follow MediaPipe&lt;/h2&gt;  &lt;p&gt;We look forward to publishing more blog posts related to new MediaPipe pipeline examples and features. Please follow the &lt;a href="https://developers.googleblog.com/search/label/MediaPipe"&gt;MediaPipe label&lt;/a&gt; on Google Developers Blog and Google Developers twitter account (&lt;a href="https://twitter.com/googledevs"&gt;@googledevs&lt;/a&gt;). &lt;/p&gt;&lt;h2&gt;Acknowledgements&lt;/h2&gt;  &lt;p&gt;We would like to thank Chuo-Ling Chang, Ming Guang Yong, Jiuqiang Tang, Gregory Karpiak, Siarhei Kazakou, Matsvei Zhdanovich and Matthias Grundman for contributing to this blog post. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/7mE5b-Cz_n0" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/6854970303541642311/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/09/mediapipe-3d-face-transform.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/6854970303541642311" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/6854970303541642311" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/7mE5b-Cz_n0/mediapipe-3d-face-transform.html" title="MediaPipe 3D Face Transform" /><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/-c8n-T8juUZ0/X2zbtCwzGnI/AAAAAAAAJZo/iyHQXS8-pb45QLJIpjaW6gm_gaZtWCzDACLcBGAsYHQ/s72-c/figure_1.gif " height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/09/mediapipe-3d-face-transform.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-5907353997357219643</id><published>2020-09-23T10:06:00.000-07:00</published><updated>2020-09-23T10:06:36.791-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="Android App Development" /><category scheme="http://www.blogger.com/atom/ns#" term="devfest" /><category scheme="http://www.blogger.com/atom/ns#" term="featured" /><category scheme="http://www.blogger.com/atom/ns#" term="Firebase" /><category scheme="http://www.blogger.com/atom/ns#" term="flutter" /><category scheme="http://www.blogger.com/atom/ns#" term="google assistant" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="Latest" /><category scheme="http://www.blogger.com/atom/ns#" term="TensorFlow" /><title type="text">Announcing DevFest 2020</title><content type="html">&lt;meta name="twitter:image" content=" https://1.bp.blogspot.com/-y54y3OiJmjA/X2tfhQ9tpKI/AAAAAAAAJZc/JGhR5cENV884WkTpL7ehYGQ6GeyWh6qfACLcBGAsYHQ/s0/GDGDevFest_GoogleDevCard_Date%2B%25281%2529.png"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-y54y3OiJmjA/X2tfhQ9tpKI/AAAAAAAAJZc/JGhR5cENV884WkTpL7ehYGQ6GeyWh6qfACLcBGAsYHQ/s0/GDGDevFest_GoogleDevCard_Date%2B%25281%2529.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Jennifer Kohl, Program Manager, Developer Community Programs &lt;/em&gt;&lt;p&gt; &lt;center&gt; &lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://1.bp.blogspot.com/-y54y3OiJmjA/X2tfhQ9tpKI/AAAAAAAAJZc/JGhR5cENV884WkTpL7ehYGQ6GeyWh6qfACLcBGAsYHQ/s0/GDGDevFest_GoogleDevCard_Date%2B%25281%2529.png" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img style= "width:650px" alt="DevFest Image" border="0" data-original-height="540" data-original-width="960" src="https://1.bp.blogspot.com/-y54y3OiJmjA/X2tfhQ9tpKI/AAAAAAAAJZc/JGhR5cENV884WkTpL7ehYGQ6GeyWh6qfACLcBGAsYHQ/s0/GDGDevFest_GoogleDevCard_Date%2B%25281%2529.png"/&gt;&lt;/a&gt;&lt;/div&gt; &lt;/center&gt; &lt;p&gt;&lt;strong&gt;On October 16-18,&lt;/strong&gt; thousands of developers from all over the world are coming together for &lt;a href="http://goo.gle/devfest"&gt;DevFest 2020&lt;/a&gt;, the largest virtual weekend of community-led learning on Google technologies.  &lt;/p&gt;&lt;p&gt;As people around the world continue to adapt to spending more time at home, developers yearn for community now more than ever. In years past, DevFest was a series of in-person events over a season. For 2020, the community is coming together in a whole new way – virtually – over one weekend to keep developers connected when they may want it the most. &lt;/p&gt; &lt;h2&gt; The speakers &lt;/h2&gt; &lt;p&gt;The magic of DevFest comes from the people who organize and speak at the events - developers with various backgrounds and skill levels, all with their own unique perspectives. In different parts of the world, you can find a DevFest session in many local languages. DevFest speakers are made up of various types of technologists, including &lt;a href="https://developers.googleblog.com/2019/11/devkids-inside-look-at-kids-of-devfest.html"&gt;kid developers &lt;/a&gt;, &lt;a href="https://www.youtube.com/watch?v=WQmfbS7dJGA&amp;t=4s"&gt;self-taught programmers from rural areas &lt;/a&gt;, and &lt;a href="https://www.youtube.com/watch?v=9ayKuMKhlDE"&gt;CEOs and CTOs of startups&lt;/a&gt;. DevFest also features a wide range of speakers from Google, &lt;a href="https://www.womentechmakers.com/"&gt;Women Techmakers&lt;/a&gt;, &lt;a href="https://developers.google.com/community/experts"&gt;Google Developer Experts&lt;/a&gt;, and more. Together, these friendly faces, with many different perspectives, create a unique and rich developer conference. &lt;/p&gt; &lt;center&gt; &lt;iframe width="560" height="315" src="https://www.youtube.com/embed/z-Wdaw0VRak" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt; &lt;/center&gt;   &lt;h2&gt;The sessions and their mission &lt;/h2&gt;   &lt;p&gt;Hosted by &lt;a href="https://developers.google.com/community/gdg"&gt;Google Developer Groups&lt;/a&gt;, this year’s sessions include technical talks and workshops from the community, and a keynote from Google Developers. Through these events, developers will learn how Google technologies help them develop, learn, and build together.  &lt;/p&gt;&lt;p&gt;Sessions will cover multiple technologies, such as &lt;a href="https://developer.android.com/"&gt;Android&lt;/a&gt;, &lt;a href="https://cloud.google.com/"&gt;Google Cloud Platform&lt;/a&gt;, Machine Learning with &lt;a href="https://www.tensorflow.org/"&gt;TensorFlow&lt;/a&gt;, &lt;a href="http://web.dev"&gt;Web.dev&lt;/a&gt;, &lt;a href="https://firebase.google.com/"&gt;Firebase&lt;/a&gt;, &lt;a href="https://developers.google.com/assistant/howassistantworks?hl=en"&gt;Google Assistant&lt;/a&gt;, and &lt;a href="https://flutter.dev/"&gt;Flutter&lt;/a&gt;.  &lt;/p&gt;&lt;br&gt;&lt;center&gt; &lt;i&gt; &lt;font size="+2"&gt;     At our core, Google Developers believes community-led developer events like these are an integral part of the advancement of technology in the world.   &lt;/font&gt; &lt;/i&gt; &lt;/center&gt;  &lt;br&gt;  &lt;p&gt;For this reason, Google Developers supports the community-led efforts of Google Developer Groups and their annual tentpole event, DevFest. Google provides esteemed speakers from the company and custom technical content produced by developers at Google. The impact of DevFest is really driven by the grassroots, passionate GDG community organizers who volunteer their time. Google Developers is proud to support them. &lt;/p&gt;   &lt;h2&gt;The attendees   &lt;/h2&gt;   &lt;p&gt;During DevFest 2019, 138,000+ developers participated across 500+ DevFests in 100 countries. While 2020 is a very different year for events around the world, GDG chapters are galvanizing their communities to come together virtually for this global moment. The excitement for DevFest continues as more people seek new opportunities to meet and collaborate with like-minded, community-oriented developers in our local towns and regions. &lt;/p&gt;   &lt;p&gt;Join the conversation on social media with &lt;strong&gt;#DevFest&lt;/strong&gt;. &lt;/p&gt;&lt;p&gt;&lt;b&gt;Sign up&lt;/b&gt; for DevFest at &lt;a href="http://goo.gle/devfest"&gt;goo.gle/devfest&lt;/a&gt;. &lt;/p&gt;&lt;br&gt;&lt;hr&gt; &lt;p&gt;&lt;b style="font-weight: normal;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.7999999999999998; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Roboto,sans-serif; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 300; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; white-space: pre;"&gt; &lt;i&gt; Still curious? Check out these popular talks from DevFest 2019 events around the world... &lt;/i&gt; &lt;/span&gt;&lt;/p&gt; &lt;center&gt; &lt;p&gt;&lt;/p&gt;&lt;div align="left" dir="ltr" style="margin-left: 0pt;"&gt;&lt;table style="border-collapse: collapse; border: none; table-layout: fixed; width: 468pt;"&gt;&lt;colgroup&gt;&lt;col&gt;&lt;/col&gt;&lt;col&gt;&lt;/col&gt;&lt;col&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 0pt;"&gt;&lt;td style="border-bottom: solid #ffffff 1pt; border-left: solid #ffffff 1pt; border-right: solid #ffffff 1pt; border-top: solid #ffffff 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"&gt;&lt;p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://www.youtube.com/watch?v=ZKrjsux7C38&amp;amp;feature=youtu.be" style="text-decoration: none;"&gt;&lt;span style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-family: Roboto,sans-serif; font-size: 9pt; font-style: normal; font-variant: normal; font-weight: 300; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; white-space: pre;"&gt;&lt;span style="border: none; display: inline-block; height: 145px; overflow: hidden; width: 194px;"&gt;&lt;img height="145" src="https://lh3.googleusercontent.com/462fGrEQv241pt5Zl1pIq-QBEehB7J-DaLu3PoNIdzRbyoTgbe5nOhiF0PyYKeFzbIbES1-QEiY_DE4WQHQr1UKeRdkg4d520HeHGx752_OXCQGSVgmtD27TH9a_NonmAOUL66hlwg" style="margin-left: 0px; margin-top: 0px;" width="194" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.7999999999999998; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://www.youtube.com/watch?v=ZKrjsux7C38&amp;amp;feature=youtu.be" style="text-decoration: none;"&gt;&lt;span style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-family: Roboto,sans-serif; font-size: 9pt; font-style: normal; font-variant: normal; font-weight: 300; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; white-space: pre;"&gt; Scalable Vector Graphics (SVG) &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-bottom: solid #ffffff 1pt; border-left: solid #ffffff 1pt; border-right: solid #ffffff 1pt; border-top: solid #ffffff 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"&gt;&lt;p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://www.youtube.com/watch?v=ZDaBHNwERmk&amp;amp;feature=youtu.be" style="text-decoration: none;"&gt;&lt;span style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-family: Roboto,sans-serif; font-size: 9pt; font-style: normal; font-variant: normal; font-weight: 300; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; white-space: pre;"&gt;&lt;span style="border: none; display: inline-block; height: 145px; overflow: hidden; width: 194px;"&gt;&lt;img height="145" src="https://lh4.googleusercontent.com/7vfCNl_t5gjBO7-PxmJQiAdFdqSRBuoHZgqP6ZHg4vi5OwMliLTe0zWe0tWRrC1nL_VXt-8h1QSF-KZEutcIS23HeoPvI0O_N72ekssRMPS-IUcdaMC4CeDuRy7oLDSYPwEGastS_g" style="margin-left: 0px; margin-top: 0px;" width="194" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.7999999999999998; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://www.youtube.com/watch?v=ZDaBHNwERmk&amp;amp;feature=youtu.be" style="text-decoration: none;"&gt;&lt;span style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-family: Roboto,sans-serif; font-size: 9pt; font-style: normal; font-variant: normal; font-weight: 300; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; white-space: pre;"&gt;How to add Flutter to your app&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-bottom: solid #ffffff 1pt; border-left: solid #ffffff 1pt; border-right: solid #ffffff 1pt; border-top: solid #ffffff 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"&gt;&lt;p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://www.youtube.com/watch?v=IgwIb3_1iUI&amp;amp;feature=youtu.be" style="text-decoration: none;"&gt;&lt;span style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-family: Roboto,sans-serif; font-size: 9pt; font-style: normal; font-variant: normal; font-weight: 300; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; white-space: pre;"&gt;&lt;span style="border: none; display: inline-block; height: 145px; overflow: hidden; width: 194px;"&gt;&lt;img height="145" src="https://lh4.googleusercontent.com/y7-7Qo5lTroLfNdsBIrFlI3aiQXeABGBzaU6AsyFoEgyYbIceC0ly4EunxodUpyLhVXtsh1EARb_SoQ-w3dSl92Dw4u0xXQA79ZQl_-dCG_Xu6ormuRTDTkSq-2xLBVWvGpOCKl8nA" style="margin-left: 0px; margin-top: 0px;" width="194" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.7999999999999998; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://www.youtube.com/watch?v=IgwIb3_1iUI&amp;amp;feature=youtu.be" style="text-decoration: none;"&gt;&lt;span style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-family: Roboto,sans-serif; font-size: 9pt; font-style: normal; font-variant: normal; font-weight: 300; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; white-space: pre;"&gt;The Flutter journey: production app &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0pt;"&gt;&lt;td style="border-bottom: solid #ffffff 1pt; border-left: solid #ffffff 1pt; border-right: solid #ffffff 1pt; border-top: solid #ffffff 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"&gt;&lt;p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://www.youtube.com/watch?v=lRX8O1tzkpA&amp;amp;feature=youtu.be" style="text-decoration: none;"&gt;&lt;span style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-family: Roboto,sans-serif; font-size: 9pt; font-style: normal; font-variant: normal; font-weight: 300; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; white-space: pre;"&gt;&lt;span style="border: none; display: inline-block; height: 145px; overflow: hidden; width: 194px;"&gt;&lt;img height="145" src="https://lh5.googleusercontent.com/q6h1gLSpt3RjD52MxSWu5vhDukw4asrcsjE1CbVqCSYWGU5caMdPRAd3hxLlRYpKUSKM0yGkjPPFXcIMvgHgFX9EoH4e--Jt30YJWul0rda7VBk5HWh6LIKDXBn7n43M7-HRug4ixA" style="margin-left: 0px; margin-top: 0px;" width="194" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.7999999999999998; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://www.youtube.com/watch?v=lRX8O1tzkpA&amp;amp;feature=youtu.be" style="text-decoration: none;"&gt;&lt;span style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-family: Roboto,sans-serif; font-size: 9pt; font-style: normal; font-variant: normal; font-weight: 300; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; white-space: pre;"&gt;Getting started with microcontrollers &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-bottom: solid #ffffff 1pt; border-left: solid #ffffff 1pt; border-right: solid #ffffff 1pt; border-top: solid #ffffff 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"&gt;&lt;p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://www.youtube.com/watch?v=cQA1L9OeaKg&amp;amp;feature=youtu.be" style="text-decoration: none;"&gt;&lt;span style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-family: Roboto,sans-serif; font-size: 9pt; font-style: normal; font-variant: normal; font-weight: 300; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; white-space: pre;"&gt;&lt;span style="border: none; display: inline-block; height: 145px; overflow: hidden; width: 194px;"&gt;&lt;img height="145" src="https://lh6.googleusercontent.com/PzdUfOX1a5GfoFcpIW2TDvCL3UybvQML8plMA2wJzhF5lDrvYWf1KqkhCXulywZcyss2vKoHUNYLvDV8V_7oeQ1DqGR9W4lqV_Upk005g-Wuq-NMtvWpx-EGSrWe_YlIk3FAWjvrDQ" style="margin-left: 0px; margin-top: 0px;" width="194" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.7999999999999998; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://www.youtube.com/watch?v=cQA1L9OeaKg&amp;amp;feature=youtu.be" style="text-decoration: none;"&gt;&lt;span style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-family: Roboto,sans-serif; font-size: 9pt; font-style: normal; font-variant: normal; font-weight: 300; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; white-space: pre;"&gt;Chet Haase and Romaine Guy: quality&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-bottom: solid #ffffff 1pt; border-left: solid #ffffff 1pt; border-right: solid #ffffff 1pt; border-top: solid #ffffff 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"&gt;&lt;p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://www.youtube.com/watch?v=Z4y2bNMYzPs&amp;amp;feature=youtu.be" style="text-decoration: none;"&gt;&lt;span style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-family: Roboto,sans-serif; font-size: 9pt; font-style: normal; font-variant: normal; font-weight: 300; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; white-space: pre;"&gt;&lt;span style="border: none; display: inline-block; height: 145px; overflow: hidden; width: 194px;"&gt;&lt;img height="145" src="https://lh4.googleusercontent.com/wfA8fe43WIsp6KBlzkRFPyleuFcgmL3tLPHNVeFkv6BdHUTHEf1pL2H1OvvBvLpvKdE7m83nCFaAEZHswtcoqlfkTMyqVxL-AMGJFq91ZwZjJ7mlUNMJG5u8LaXaDVXUZbi5qoktag" style="margin-left: 0px; margin-top: 0px;" width="194" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.7999999999999998; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://www.youtube.com/watch?v=Z4y2bNMYzPs&amp;amp;feature=youtu.be" style="text-decoration: none;"&gt;&lt;span style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-family: Roboto,sans-serif; font-size: 9pt; font-style: normal; font-variant: normal; font-weight: 300; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; white-space: pre;"&gt;Building the ultimate Beatles app&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0pt;"&gt; &lt;td style="border-bottom: solid #ffffff 1pt; border-left: solid #ffffff 1pt; border-right: solid #ffffff 1pt; border-top: solid #ffffff 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"&gt;&lt;p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://www.youtube.com/watch?v=HQpWqxrcSWE&amp;amp;feature=youtu.be" style="text-decoration: none;"&gt;&lt;span style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-family: Roboto,sans-serif; font-size: 9pt; font-style: normal; font-variant: normal; font-weight: 300; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; white-space: pre;"&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt; &lt;/center&gt;  &lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/goB8MkXgUho" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/5907353997357219643/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/09/announcing-devfest-2020.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/5907353997357219643" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/5907353997357219643" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/goB8MkXgUho/announcing-devfest-2020.html" title="Announcing DevFest 2020" /><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/-y54y3OiJmjA/X2tfhQ9tpKI/AAAAAAAAJZc/JGhR5cENV884WkTpL7ehYGQ6GeyWh6qfACLcBGAsYHQ/s72-c/GDGDevFest_GoogleDevCard_Date%2B%25281%2529.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/09/announcing-devfest-2020.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-2549836512024310444</id><published>2020-09-22T06:53:00.004-07:00</published><updated>2020-09-22T15:19:45.799-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Access" /><category scheme="http://www.blogger.com/atom/ns#" term="Console" /><category scheme="http://www.blogger.com/atom/ns#" term="Device" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="Nest" /><title type="text"> Google Nest Device Access Console now available for partners and individuals</title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-jDyPYzU6RPc/X2p4XyYlwHI/AAAAAAAAJZM/NEhr05yJj900FToucoURXjjR-_ONJSGhQCLcBGAsYHQ/s0/DeviceAccessLandingPage.png"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-jDyPYzU6RPc/X2p4XyYlwHI/AAAAAAAAJZM/NEhr05yJj900FToucoURXjjR-_ONJSGhQCLcBGAsYHQ/s0/DeviceAccessLandingPage.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Gabriel Rubinsky, Senior Product Manager&lt;/em&gt;&lt;p&gt;  &lt;p&gt;Today, we’re excited to announce the Device Access Console is available. &lt;/p&gt;&lt;p&gt;The Device Access program lets individuals and qualified partners securely access and control Nest products with their apps and solutions.  &lt;/p&gt; &lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://1.bp.blogspot.com/-jDyPYzU6RPc/X2p4XyYlwHI/AAAAAAAAJZM/NEhr05yJj900FToucoURXjjR-_ONJSGhQCLcBGAsYHQ/s0/DeviceAccessLandingPage.png" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="" border="0" data-original-height="1185" data-original-width="1602" src="https://1.bp.blogspot.com/-jDyPYzU6RPc/X2p4XyYlwHI/AAAAAAAAJZM/NEhr05yJj900FToucoURXjjR-_ONJSGhQCLcBGAsYHQ/s0/DeviceAccessLandingPage.png"/&gt;&lt;/a&gt;&lt;/div&gt; &lt;p&gt;At the heart of the Device Access program is the Smart Device Management API. Since we announced the program, Alarm.com, Control4, DISH, OhmConnect, NRG Energy, and Vivint Smart Home have successfully completed the Early Access Program (EAP) with Nest thermostat, camera, or doorbell traits. In the coming months, we expect additional devices to be supported and more smart home partners to launch their new integrations as well. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Enhanced privacy and security&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The Device Access program is built on a foundation of privacy and security. The program requires partner submission of qualified use cases and completion of a security assessment before being allowed to utilize the Smart Device Management API for commercial use. The program process gives our users the confidence that commercial partners offering integrated Nest solutions have data protections and safeguards in place that meet our privacy and security standards.  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Nest device access and control&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The Device Access program currently allows qualified partners to integrate directly with Nest devices, enable control of thermostats, access and view camera feeds, and receive doorbell notifications with images. All qualified partner solutions and services will require end-user consent before being able to access, control, and manage Nest devices as part of their service offerings, either through a partner client app or service platform. Ultimately, this gives users more choice in how to control their home and their own generated data.  &lt;/p&gt;&lt;p&gt;If you’re a developer or a Nest user interested in the Device Access program or access to the sandbox development environment,* you can find more information on our &lt;a href="https://developers.google.com/nest/device-access"&gt;Device Access site&lt;/a&gt;. &lt;/p&gt;  &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Device Access for Commercial Developers&lt;/strong&gt;&lt;p&gt;     The Device Access program allows trusted partners to offer access, management, and control of Nest devices within the partner’s app, solution, and ecosystem. It allows developers to test all API traits in the sandbox environment, before moving forward with commercial integration. &lt;a href="https://developers.google.com/nest/device-access/project/apply"&gt;Learn more&lt;/a&gt;&lt;/p&gt; &lt;li&gt;&lt;strong&gt;Device Access for Individuals&lt;/strong&gt;&lt;p&gt;     For individual smart home developer enthusiasts, you can register to access the sandbox development environment, allowing you to directly control your own Nest devices through your private integrations and automations. &lt;a href="https://support.google.com/googlenest/answer/9539279#individual_access"&gt;Learn more&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;We’re doing the work to make Nest devices more secure and protect user privacy long into the future. This means expanding privacy and data security programs, and delivering flexibility for our customers to use thousands of products from partners to create a connected, helpful home. &lt;/p&gt;&lt;br&gt;&lt;br&gt;  &lt;small&gt;  * Registration consists of the acceptance of the Google API and Nest Device Access Sandbox Terms of Service, along with a one-time, non-refundable nominal fee per account &lt;/small&gt;  &lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/hc6C12-mvts" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/2549836512024310444/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/09/google-nest-device-access-console.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/2549836512024310444" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/2549836512024310444" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/hc6C12-mvts/google-nest-device-access-console.html" title=" Google Nest Device Access Console now available for partners and individuals" /><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/-jDyPYzU6RPc/X2p4XyYlwHI/AAAAAAAAJZM/NEhr05yJj900FToucoURXjjR-_ONJSGhQCLcBGAsYHQ/s72-c/DeviceAccessLandingPage.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/09/google-nest-device-access-console.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-9009361353230299614</id><published>2020-09-18T18:00:00.000-07:00</published><updated>2020-09-18T18:00:07.389-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="flutter" /><category scheme="http://www.blogger.com/atom/ns#" term="google pay" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Pay India" /><category scheme="http://www.blogger.com/atom/ns#" term="Tez" /><title type="text">Google Pay picks Flutter to drive its global product development</title><content type="html">&lt;meta name="twitter:image" content=" "&gt;&lt;img style="display:none" src=" "&gt; &lt;p&gt;&lt;em&gt;Posted by David Ko, Engineering Director; Jeff Lim, Software Engineer; Pankaj Gupta, Director of Engineering; Will Horn, Software Engineer &lt;/em&gt;&lt;p&gt; &lt;p&gt;Three years ago, when we launched Google Pay India (then called Tez), our vision was to create a simple and secure payment app for everyone in India. We started with the premise of making payments simple and built a user interface that made making payments as easy as starting a conversation. The simplicity of the design resonated with users instantly and over time, we have added functionality to help users do more than just make payments. Today users can pay their bills, recharge their phones, get loans instantly through banks, buy train tickets and much more all within the app. Last year, we also launched the Spot Platform in India, which allows merchants to create branded experiences within the Google Pay app so they can connect with their customers in a more engaging way.   &lt;/p&gt;&lt;p&gt;As we looked at scaling our learnings from India to other parts of the world, we wanted to focus on a fast and efficient development environment, which was modern and engaging with the flexibility needed to keep the UI clean.  And more importantly one that enabled us to write once and be able to deploy to both iOS and Android reaching the wide variety of users.  &lt;/p&gt;&lt;p&gt;It was clear that we would need to build it, and ensure that it worked across a wide variety of payment rails, infrastructure, and operating systems. But with the momentum we had for Google Pay in India, and the fast evolving product features - we had limited engineering resources to put behind this effort.  &lt;/p&gt;&lt;p&gt;After evaluating various options, it was easy to pick &lt;a href="https://flutter.dev/"&gt;Flutter&lt;/a&gt; as the obvious choice. The three things that made it click for us were: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;We could write once in Dart and deploy on both iOS and Android, which led to a uniform best-in-class experience on both Android and iOS;  &lt;li&gt;Just-in-Time compiler with hot reload during development enabled rapid iteration on UI which tremendously increased developer efficiency; and  &lt;li&gt;Ahead-of-time compilation ensured high performance deployment. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Now the task was to get it done. We started with a small team of three software engineers from both Android and iOS. Those days were focused and intense. To start with we created a vertical slice of the app — home page, chat, and payments (with the critical native plugins for payments in India). The team first tried a hybrid approach, and then decided to do a clean rewrite as it was not scalable.  &lt;/p&gt;&lt;p&gt;We ran a few small sprints for other engineers on the team to give them an opportunity to rewrite something in Flutter and provide feedback. Everyone loved Flutter — you could see the thrill on people’s faces as they talked about how fast it was to build a user interface. One of the most exciting things was that the team could get instant feedback while developing. We could also leverage the high quality widgets that Flutter provided to make development easier. &lt;/p&gt;&lt;p&gt;After carefully weighing the risks and our case for migration, we decided to go all in with Flutter. It was a monumental rewrite of a moving target, and the existing app continues to evolve while we were rewriting features. After many months of hard work, Google Pay Flutter implementation is now available in open beta in India and Singapore. Our users in India and Singapore can visit the Google Play Store page for &lt;a href="https://play.google.com/store/apps/details?id=com.google.android.apps.nbu.paisa.user"&gt;Google Pay&lt;/a&gt; to opt into the beta program and experience the latest app built on Flutter.  Next, we are looking forward to launching Google Pay on Flutter to everyone across the world on iOS and Android. &lt;/p&gt; &lt;center&gt; &lt;div id="flexParent"&gt; &lt;a href="https://3.bp.blogspot.com/-USccXWiElOI/X2Oj1lxQi_I/AAAAAAAAJXs/7gllQLj-T4QDp37kp3pL8AhXmGio_kGHgCLcBGAsYHQ/s1600/01%2Bhomescreen.png" imageanchor="1" &gt;&lt;img style= "width: 300px" id="flexImg" border="0" src="https://3.bp.blogspot.com/-USccXWiElOI/X2Oj1lxQi_I/AAAAAAAAJXs/7gllQLj-T4QDp37kp3pL8AhXmGio_kGHgCLcBGAsYHQ/s1600/01%2Bhomescreen.png" alt= " Google Pay image" /&gt;&lt;/a&gt;    &lt;a href="https://4.bp.blogspot.com/-75m4zcYAag8/X2OkWVRLd0I/AAAAAAAAJX0/5SV71Mjtf_09Qip8G_dK8lcEzVi9RZQ9gCLcBGAsYHQ/s1600/Convo.png" imageanchor="1" &gt;&lt;img style= "width: 300px" id="flexImg" border="0" src="https://4.bp.blogspot.com/-75m4zcYAag8/X2OkWVRLd0I/AAAAAAAAJX0/5SV71Mjtf_09Qip8G_dK8lcEzVi9RZQ9gCLcBGAsYHQ/s1600/Convo.png" alt= "Google Pay image" /&gt;&lt;/a&gt;    &lt;a href="https://3.bp.blogspot.com/-9V9BNjoQ2R8/X2Okm7v0WAI/AAAAAAAAJX8/Ij1M9Y8TwvcnRFp0SOnUbIeZ_9WWLslxQCLcBGAsYHQ/s1600/04%2B%2BFood.png" imageanchor="1" &gt;&lt;img style= "width: 300px" id="flexImg" border="0" src="https://3.bp.blogspot.com/-9V9BNjoQ2R8/X2Okm7v0WAI/AAAAAAAAJX8/Ij1M9Y8TwvcnRFp0SOnUbIeZ_9WWLslxQCLcBGAsYHQ/s1600/04%2B%2BFood.png" alt= "Google pay image" /&gt;&lt;/a&gt; &lt;a href="https://1.bp.blogspot.com/-BwXTZN66vCQ/X2OlM9MkYoI/AAAAAAAAJYE/A8amBBws9Nw8MNcPwyNzpKucXZV_mKxaACLcBGAsYHQ/s1600/03%2Bbillpay.png" imageanchor="1" &gt;&lt;img style= "width: 300px" id="flexImg" border="0" src="https://1.bp.blogspot.com/-BwXTZN66vCQ/X2OlM9MkYoI/AAAAAAAAJYE/A8amBBws9Nw8MNcPwyNzpKucXZV_mKxaACLcBGAsYHQ/s1600/03%2Bbillpay.png" alt= "Google Pay image" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;/center&gt; &lt;p&gt;We hope this gives you a fair idea of how to approach and launch a complete rewrite of an active app that is used by millions of users and businesses of all sizes. It would not have been possible for us to deliver this without Flutter’s continued advances on the platform. Huge thanks to the Flutter team, as today, we are standing on their shoulders!  &lt;/p&gt;&lt;p&gt;When fully migrated, Google Pay will be one of the largest production deployments on the Flutter platform. We look forward to sharing more learnings from our transition to Flutter in the future.  &lt;/p&gt; &lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/YpbPjMlXhug" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/9009361353230299614/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/09/google-pay-picks-flutter-to-drive-its.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/9009361353230299614" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/9009361353230299614" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/YpbPjMlXhug/google-pay-picks-flutter-to-drive-its.html" title="Google Pay picks Flutter to drive its global product development" /><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/-USccXWiElOI/X2Oj1lxQi_I/AAAAAAAAJXs/7gllQLj-T4QDp37kp3pL8AhXmGio_kGHgCLcBGAsYHQ/s72-c/01%2Bhomescreen.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/09/google-pay-picks-flutter-to-drive-its.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-5684981672600944373</id><published>2020-09-16T09:28:00.000-07:00</published><updated>2020-09-16T09:28:00.380-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" /><category scheme="http://www.blogger.com/atom/ns#" term="TensorFlow Lite" /><title type="text">Doubling down on the edge with Coral's new accelerator</title><content type="html">&lt;meta name="twitter:image" content="https://3.bp.blogspot.com/-BjxRtNbgpQY/X2EKJ1kRzSI/AAAAAAAAJWs/FAmecxhq240vQR2zbIsIfDph8mlWYm7cACLcBGAsYHQ/s1600/NewProduct_Blog916-05-05B2.png"&gt;&lt;img style="display:none" src="https://3.bp.blogspot.com/-BjxRtNbgpQY/X2EKJ1kRzSI/AAAAAAAAJWs/FAmecxhq240vQR2zbIsIfDph8mlWYm7cACLcBGAsYHQ/s1600/NewProduct_Blog916-05-05B2.png"&gt; &lt;p&gt;&lt;em&gt;Posted by &lt;a href="https://coral.ai/"&gt;The Coral Team&lt;/a&gt; &lt;/em&gt;&lt;p&gt; &lt;center&gt; &lt;a href="https://3.bp.blogspot.com/-BjxRtNbgpQY/X2EKJ1kRzSI/AAAAAAAAJWs/FAmecxhq240vQR2zbIsIfDph8mlWYm7cACLcBGAsYHQ/s1600/NewProduct_Blog916-05-05B2.png" imageanchor="1" &gt;&lt;img style= "width:500px" border="0" src="https://3.bp.blogspot.com/-BjxRtNbgpQY/X2EKJ1kRzSI/AAAAAAAAJWs/FAmecxhq240vQR2zbIsIfDph8mlWYm7cACLcBGAsYHQ/s1600/NewProduct_Blog916-05-05B2.png" data-original-width="1600" data-original-height="1019" alt = "Coral image" /&gt;&lt;/a&gt; &lt;/center&gt;   &lt;p&gt;Moving into the fall, the Coral platform continues to grow with the release of the M.2 Accelerator with Dual Edge TPU.  Its first application is in Google’s Series One room kits where it helps to remove interruptions and makes the audio clearer for better video meetings. To help even more folks build products with Coral intelligence, we’re dropping the prices on several of our products. And for those folks that are looking to level up their at home video production, we’re sharing a demo of a pose based AI director to make multi-camera video easier to make.  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Coral M.2 Accelerator with Dual Edge TPU&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The newest addition to our product family brings two Edge TPU co-processors to systems in an M.2 E-key form factor. While the design requires a dual bus PCIe M.2 slot, it brings enhanced ML performance (8 TOPS) to tasks such as&lt;a href="https://coral.ai/docs/edgetpu/multiple-edgetpu/#performance-considerations"&gt; running two models in parallel&lt;/a&gt; or &lt;a href="https://coral.ai/docs/edgetpu/pipeline/"&gt;pipelining one large model across both Edge TPUs&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;The ability to scale across multiple edge accelerators isn’t limited to only two Edge TPUs.  As edge computing expands to local data centers, cell towers, and gateways, multi-Edge TPU configurations will be required to help process increasingly sophisticated ML models. Coral allows the use of a single toolchain to create models for one or more Edge TPUs that can address many different future configurations.   &lt;/p&gt;&lt;p&gt;A great example of how the Coral M.2 Accelerator with Dual Edge TPU is being used is in the Series One meeting room kits for Google Meet.  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;The new Series One room kits for Google Meet run smarter with Coral intelligence&lt;/strong&gt;&lt;/p&gt; &lt;center&gt; &lt;a href="https://2.bp.blogspot.com/-n8HPqPHtZ0o/X2EKzQl46QI/AAAAAAAAJW0/mYlGFFsQ-g03YJNEIilPFfzhXyuytogLQCLcBGAsYHQ/s1600/unnamed%2B%25282%2529.png" imageanchor="1" &gt;&lt;img style= "width: 600px" border="0" src="https://2.bp.blogspot.com/-n8HPqPHtZ0o/X2EKzQl46QI/AAAAAAAAJW0/mYlGFFsQ-g03YJNEIilPFfzhXyuytogLQCLcBGAsYHQ/s1600/unnamed%2B%25282%2529.png" data-original-width="512" data-original-height="288" alt= "Coral image" /&gt;&lt;/a&gt; &lt;/center&gt;    &lt;p&gt;Google’s new &lt;a href="https://meetingdevices.withgoogle.com/seriesone "&gt;Series One room kits&lt;/a&gt; use our Coral M.2 Accelerator with Dual Edge TPU to bring enhanced audio clarity to video meetings. TrueVoice®, a multi-channel noise cancellation technology, minimizes distractions to ensure every voice is heard with up to 44 channels of echo and noise cancellation, making distracting sounds like snacking or typing on a keyboard a concern of the past.    &lt;/p&gt;&lt;p&gt;Enabling the clearest possible communication in challenging environments was the target for the Google Meet hardware team. The consideration of what makes a challenging environment was not limited to unusually noisy environments, such as lunchrooms doubling as conference rooms. Any conference room can present challenging acoustics that make it difficult for all participants to be heard.  &lt;/p&gt;&lt;p&gt;The secret to clarity without expensive and cumbersome equipment is to use virtual audio channels and AI driven sound isolation.  &lt;a href="http://coral.ai/news/series-one"&gt;Read more about how Coral was used to enhance and future-proof the innovative design. &lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Expanding the AI edge&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Earlier this year, we reduced the prices of our &lt;a href="https://coral.ai/products/#prototyping-products"&gt;prototyping devices&lt;/a&gt; and &lt;a href="https://coral.ai/products/#sensors"&gt;sensors&lt;/a&gt;. We are excited to share further price drops on more of our products.&lt;em&gt; &lt;/em&gt;Our &lt;a href="https://coral.ai/products/som"&gt;System-on-Module&lt;/a&gt; is now available for $99.99, and our &lt;a href="https://coral.ai/products/pcie-accelerator"&gt;Mini PCIe Accelerator&lt;/a&gt;,  &lt;a href="https://coral.ai/products/m2-accelerator-ae"&gt;M.2 Accelerator A+E Key&lt;/a&gt;, and &lt;a href="https://coral.ai/products/m2-accelerator-bm"&gt;M.2 Accelerator B+M&lt;/a&gt; key are now available at $24.99.  We hope this lower price will make our edge AI more accessible to more creative minds around the world. Later, this month our SoM offering will also expand to include &lt;a href="https://coral.ai/products/som"&gt;2 and 4GB RAM options&lt;/a&gt;.  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Multi-cam with AI&lt;/strong&gt;&lt;/p&gt; &lt;center&gt; &lt;a href="https://4.bp.blogspot.com/-zlE9ND2eyDw/X2ELnviiq1I/AAAAAAAAJXI/BCko8IgK-K8N1Nq7xgBHFMyHKHFSjaXowCLcBGAsYHQ/s1600/Screen%2BShot%2B2020-09-15%2Bat%2B12.25.39%2BAM.png" imageanchor="1" &gt;&lt;img style="width:600px" border="0" src="https://4.bp.blogspot.com/-zlE9ND2eyDw/X2ELnviiq1I/AAAAAAAAJXI/BCko8IgK-K8N1Nq7xgBHFMyHKHFSjaXowCLcBGAsYHQ/s1600/Screen%2BShot%2B2020-09-15%2Bat%2B12.25.39%2BAM.png" data-original-width="1600" data-original-height="904" alt="Coral image"  /&gt;&lt;/a&gt; &lt;/center&gt;   &lt;p&gt;As we expand our platform and product family, we continue to keep new edge AI use cases in mind. We are continually inspired by our developer community’s experimentation and implementations.  When recently faced with the challenges of multicam video production from home, Markku Lepistö, Solutions Architect at Google Cloud, created this real-time pose-based multicam tool he so aptly dubbed, &lt;a href="https://www.youtube.com/watch?v=jIyM_qT9RZw"&gt;AI Director&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;  &lt;/p&gt;&lt;p&gt;We love seeing such unique implementations of on-device ML and invite you to share your own projects and feedback at &lt;a href="mailto:coral-support@google.com"&gt;coral-support@google.com&lt;/a&gt;. &lt;em&gt; &lt;/em&gt;&lt;/p&gt;&lt;p&gt;For a list of worldwide distributors, system integrators and partners, visit the &lt;a href="https://coral.ai/partnerships"&gt;Coral partnerships page&lt;/a&gt;. Please visit &lt;a href="https://coral.ai/"&gt;Coral.ai&lt;/a&gt; to discover more about our edge ML platform.   &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/1Ym8-gclCEo" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/5684981672600944373/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/09/doubling-down-on-edge-with-corals-new.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/5684981672600944373" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/5684981672600944373" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/1Ym8-gclCEo/doubling-down-on-edge-with-corals-new.html" title="Doubling down on the edge with Coral's new accelerator" /><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/-BjxRtNbgpQY/X2EKJ1kRzSI/AAAAAAAAJWs/FAmecxhq240vQR2zbIsIfDph8mlWYm7cACLcBGAsYHQ/s72-c/NewProduct_Blog916-05-05B2.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/09/doubling-down-on-edge-with-corals-new.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-8539392091515183648</id><published>2020-09-15T09:00:00.001-07:00</published><updated>2020-09-16T08:01:34.317-07:00</updated><title type="text">Applications are open for Google for Startups Accelerator in Japan</title><content type="html">&lt;meta name="twitter:image" content=" "&gt;&lt;img style="display:none" src=" "&gt; &lt;p&gt;&lt;em&gt;Posted by Takuo Suzuki, Developer Relations Program Manager &lt;/em&gt;&lt;p&gt; &lt;center&gt; &lt;a href="https://3.bp.blogspot.com/-NmVQMneVo5k/X2DiL80id_I/AAAAAAAAJWg/fxvsxDWr5VoGzCEEVGfrSP56xr-WjGDeQCLcBGAsYHQ/s1600/_DAI2235%2B%25281%2529.jpg" imageanchor="1" &gt;&lt;img style ="width:550px" border="0" src="https://3.bp.blogspot.com/-NmVQMneVo5k/X2DiL80id_I/AAAAAAAAJWg/fxvsxDWr5VoGzCEEVGfrSP56xr-WjGDeQCLcBGAsYHQ/s1600/_DAI2235%2B%25281%2529.jpg" data-original-width="1600" data-original-height="1067" alt= "image from a recent accelerator"/&gt;&lt;/a&gt; &lt;/center&gt;   &lt;p&gt;The Google for Startups Accelerator helps founders across the globe solve for important economic and societal challenges, while helping them grow and scale their business. Due to the continued success of the program around the world, we are pleased to open up applications for our third Accelerator class in Japan, commencing January 2021. &lt;a href="https://www.campus.co/tokyo/accelerator/"&gt;Applications &lt;/a&gt;will remain open until October 30, 2020. &lt;/p&gt;&lt;p&gt;This accelerator is designed  for established startups across Japan using technology to help solve important social and environmental issues, and that contribute to the Japanese economy. This includes (but is not limited to) startups tackling:  &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Ageing society and declining workforce   &lt;li&gt;Energy, environment, and sustainability  &lt;li&gt;Rural revitalization   &lt;li&gt;Medicine, health, and well-being  &lt;li&gt;Education   &lt;li&gt;Diversity, inclusion, and social equity   &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Google for Startups Accelerators provide support to later-stage companies that have already launched their product, and have strong market-fit and potential to scale rapidly in the future. Startups in the program benefit from tailored Google mentorship, product advice &amp; credits, technical workshops, and by getting connected to other founders, VCs, and industry experts.  &lt;/p&gt;&lt;p&gt;Each participating startup selected for the Google for Startups Accelerator program will join a 500+ company alumni network of startups from around the world, such as Selan, with their product &lt;a href="https://omsister.com/"&gt;Omister&lt;/a&gt; (Class #2 Japan), is improving education &amp; childcare in Japan by providing bilingual instructors for children, and &lt;a href="http://www.mymdoc.com/"&gt;mDoc&lt;/a&gt;, (Class #1 Sustainability, Europe), a Nigerian startup helping people in West Africa with chronic diseases get treatment via their app. &lt;/p&gt;&lt;p&gt;In summary: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Suitable for startups solving for societal or environmental issues in Japan  &lt;li&gt;Application open: September 15, 2020  &lt;li&gt;Application close: October 30, 2020  &lt;li&gt;Announcement of selected startups: December 2020  &lt;li&gt;Program runs from late-January 2021 to end of April 2021 (planned)  &lt;li&gt;Please refer to &lt;a href="https://www.campus.co/tokyo/accelerator/"&gt;the website &lt;/a&gt;for further information and to apply. &lt;/li&gt;&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/9jEHBVGn1FM" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/8539392091515183648/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/09/applications-are-open-for-google-for.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/8539392091515183648" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/8539392091515183648" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/9jEHBVGn1FM/applications-are-open-for-google-for.html" title="Applications are open for Google for Startups Accelerator in Japan" /><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/-NmVQMneVo5k/X2DiL80id_I/AAAAAAAAJWg/fxvsxDWr5VoGzCEEVGfrSP56xr-WjGDeQCLcBGAsYHQ/s72-c/_DAI2235%2B%25281%2529.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/09/applications-are-open-for-google-for.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-8172606407266560459</id><published>2020-09-14T10:48:00.000-07:00</published><updated>2020-09-14T10:48:03.551-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="G Suite" /><title type="text">Building solutions using the G Suite developer platform</title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-H-RxawSDyt8/X1plOOd0UaI/AAAAAAAAJWM/YX-QgelU_Wwi1pjZxAtwSYPBNDilPvTLgCLcBGAsYHQ/s1600/gsuitedevplatform.png"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-H-RxawSDyt8/X1plOOd0UaI/AAAAAAAAJWM/YX-QgelU_Wwi1pjZxAtwSYPBNDilPvTLgCLcBGAsYHQ/s1600/gsuitedevplatform.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Charles Maxson, Developer Advocate, G Suite&lt;/em&gt;&lt;p&gt;&lt;p&gt;Millions of users know G Suite as a collection of communication and productivity apps that enables teams to easily create, communicate, collaborate, and discover content to supercharge teamwork. Beneath the surface of this well-serving collection of apps is also an extensible platform that enables developers to build targeted custom experiences and integrations utilizing these apps, allowing G Suite’s vast user base to get even more value out of the platform. &lt;/p&gt;&lt;p&gt;  At first glance, it may not be natural to think of the tools you use for day-to-day productivity and collaboration as a developer platform. But consider what makes up a developer platform; Languages, APIs, runtimes, frameworks, IDEs, ecosystem, etc;  G Suite offers developers all of these things and more.   &lt;/p&gt;&lt;p&gt;Let’s take a closer look at what makes up the G Suite developer platform and how you can use it. &lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-H-RxawSDyt8/X1plOOd0UaI/AAAAAAAAJWM/YX-QgelU_Wwi1pjZxAtwSYPBNDilPvTLgCLcBGAsYHQ/s1600/gsuitedevplatform.png" imageanchor="1" &gt;&lt;img border="0" src="https://1.bp.blogspot.com/-H-RxawSDyt8/X1plOOd0UaI/AAAAAAAAJWM/YX-QgelU_Wwi1pjZxAtwSYPBNDilPvTLgCLcBGAsYHQ/s1600/gsuitedevplatform.png" data-original-width="898" data-original-height="645" /&gt;&lt;/a&gt;&lt;h2&gt;G Suite as a Developer Platform&lt;/h2&gt;&lt;p&gt;There are a lot of components that make up G Suite as a platform. As a developer, there is probably none more important than the data that your solution collects, processes and presents. As a platform, G Suite is both highly interoperable, secure, and also interestingly unique.  &lt;/p&gt;&lt;p&gt;Being interoperable, G Suite lets you interact with your data--whether your data is in G Suite or elsewhere, no matter how you store it or how you want to analyze it. G Suite allows you to keep your data where it best suits your application, while offering you flexibility to access it easily. Some examples include rich integrations with sources like &lt;a href="https://cloud.google.com/blog/products/g-suite/connecting-bigquery-and-google-sheets-to-help-with-hefty-data-analysis"&gt;BigQuery&lt;/a&gt; or &lt;a href="https://developers.google.com/apps-script/guides/jdbc"&gt;JDBC databases&lt;/a&gt;. Better yet, often little to no code is required to get you connected.   &lt;/p&gt;&lt;p&gt;Where G Suite as a platform is unique regarding data is it can be used to store, or perhaps even more interesting, be used to produce data. For native storage, you may use Drive as a content repository, or store information in a Sheets spreadsheet, or collect it via Google Forms as a front end. Additionally, there are many scenarios where the  content your users are engaging in (emails, chats, events, tasks, contacts, documents, identity, etc.) can be harnessed to create  unique interactions with G Suite. Solutions that build off, or integrate with G Suite provide such unique business value, but regardless where your data resides, accessing it as a developer is a non-issue via the platform.  &lt;/p&gt;&lt;p&gt;The core of the G Suite developer platform itself is composed of frameworks for developer features including &lt;a href="https://developers.google.com/gsuite/add-ons/overview"&gt;G Suite Add-ons&lt;/a&gt; and &lt;a href="https://developers.google.com/hangouts/chat/concepts"&gt;Chatbots&lt;/a&gt;, as well as a comprehensive library of &lt;a href="https://developers.google.com/gsuite/aspects/apis"&gt;REST APIs&lt;/a&gt;.  These allow you to interface with the full G Suite platform to create integrations, build extensions, add customizations, and access content or data.  &lt;/p&gt;&lt;p&gt; &lt;a href="https://developers.google.com/gsuite/add-ons/overview"&gt;G Suite Add-ons&lt;/a&gt; and &lt;a href="https://developers.google.com/hangouts/chat/concepts"&gt;Chatbots&lt;/a&gt; are frameworks specifically designed for G Suite that allow you to quickly and safely build experiences that enrich the way users interact within G Suite apps, while while the &lt;a href="https://developers.google.com/gsuite/aspects/apis"&gt;REST APIs&lt;/a&gt; give you essentially unlimited access to G Suite apps and data including Gmail, Classroom, Calendar, Drive, Docs, Sheets, Slides, Task, and more. What you build, and what you build with, including languages and dev environments is up to you! &lt;/p&gt;&lt;p&gt;The beauty of G Suite as a platform is how you can unlock complementary technologies like Google Cloud that expand the platform to be even more powerful. Think about a G Suite UI connecting to a Google Cloud Platform backend; the familiar interface of G Suite coupled with the phenomenal power and scale of GCP! &lt;/p&gt;&lt;p&gt;Building with GCP from G Suite, you have access to components like the &lt;a href="https://cloud.google.com/ai-platform"&gt;AI platform&lt;/a&gt;. This enables scenarios like using Google Sheets as a front end to AI tools like the Vision, Natural Language and the Translation APIs. Imagine how you can change the way users interact with G Suite, your app and your data combined with the power of ML?  &lt;/p&gt;&lt;p&gt;Another useful concept is how you can add natural conversational experiences to your app in G Suite with tools like &lt;a href="https://cloud.google.com/dialogflow/docs"&gt;DialogFlow&lt;/a&gt;. This way instead of writing complicated interfaces users have to learn, you could build a G Suite Chat bot that invokes Dialogflow to allow users to execute commands directly from within their team conversations in Chat. So for example, users could just ask a Chat bot to “Add a task to the project list” or “Assign this issue to Matt”. A recent example of this is &lt;a href="https://cloud.google.com/blog/products/data-analytics/introducing-data-qna"&gt;DataQnA&lt;/a&gt;, a natural language interface for analyzing BigQuery data.   &lt;/p&gt;&lt;p&gt;&lt;a href="https://cloud.google.com/devcenter/bq?hl=en"&gt;BigQuery&lt;/a&gt; is another GCP tool that works natively with G Suite to allow you to analyze and leverage larger, complicated data sets while producing unique custom reports that can be surfaced in a user friendly way. One of the ways to leverage BigQuery with G Suite is through &lt;a href="https://cloud.google.com/blog/products/g-suite/connected-sheets-is-generally-available"&gt;Connected Sheets&lt;/a&gt;, which provides the power and scale of a BigQuery data warehouse in the familiar context of Sheets. With Connected Sheets, you can analyze billions of rows of live BigQuery data in Google Sheets without requiring SQL knowledge. You can apply familiar tools—like pivot tables, charts, and formulas—to easily derive insights from big data.  &lt;/p&gt;&lt;p&gt;One relatively new addition to the Google Cloud family also worth mentioning here is &lt;a href="https://cloud.google.com/appsheet"&gt;AppSheet&lt;/a&gt;. AppSheet is a no-code tool that can be used to quickly build mobile and web apps. Being no-code, it may seem out of place in a discussion for a development platform, but AppSheet is a dynamic and agile tool that makes it great for building apps fast or envisioning prototypes, while also connecting to G Suite apps like Google Sheets, allowing you to access G Suite platform data with ease.  &lt;/p&gt;&lt;p&gt;When you do need the power of writing custom code, one of the foundational components of the G Suite developer platform is &lt;a href="https://developers.google.com/apps-script"&gt;Apps Script&lt;/a&gt;. For over a decade, &lt;a href="https://developers.google.com/apps-script"&gt;Apps Script&lt;/a&gt; has been the server-less, JavaScript-based runtime that natively powers G Suite extensibility. Built directly into G Suite with its own IDE, Apps Script makes it super fast and easy to get started building solutions with nothing to install or configure, just &lt;a href="https://script.google.com/"&gt;open and start coding&lt;/a&gt; -- or you can even let the &lt;a href="https://developers.google.com/apps-script/guides/sheets/macros"&gt;macro recorder&lt;/a&gt; write code for you! Apps Script masks a lot of complexities that developers face like handling user authentication, allowing you to focus on creating solutions quickly. Its native integration and relative simplicity also welcomes developers with diverse skill levels to build customized workflows, menus and UI, automations and more right inside G Suite. &lt;/p&gt;&lt;p&gt;While Apps Script is nimble and useful for many use cases, we know that many developers have preferences around tools, languages and development environments. G Suite is an open platform that encourages developers to choose options that makes them more productive. In continuing to build on that principle, we recently introduced &lt;a href="https://developers.google.com/gsuite/add-ons/guides/alternate-runtimes-overview"&gt;Alternate Runtimes&lt;/a&gt; for G Suite Add-ons. This new capability allows you to create solutions using the G Suite Add-ons framework without being bound to Apps Script as a toolset, giving you the choice and freedom to leverage your existing preferences and investments in hosting infrastructure, development tools, source control, languages, and code libraries, etc.  &lt;/p&gt;&lt;p&gt;Finally, what completes the vision of G Suite as a developer platform is that you have the confidence and convenience of an established platform that is broadly deployed and backed by tools like &lt;a href="https://cloud.google.com/iam"&gt;Google Identity Management&lt;/a&gt; and the G Suite &lt;a href="https://admin.google.com/"&gt;Admin Console&lt;/a&gt; for administration and security. This enables you to build your solutions--whether its a customized solution for your internal users or an integration between your software platform and G Suite--and distribute them at a domain level or even globally via the &lt;a href="https://gsuite.google.com/marketplace"&gt;G Suite Marketplace&lt;/a&gt;, which is an acquisition channel for developers and a discovery engine for end-users and enterprise admins alike. &lt;/p&gt;&lt;p&gt;Now that you can see how G Suite is a developer platform, imagine what you can build? &lt;/p&gt;&lt;p&gt;Visit the &lt;a href="https://developers.google.com/gsuite"&gt;G Suite Developer&lt;/a&gt; homepage and get started on your journey today.  &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/QwSkFve5bFw" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/8172606407266560459/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/09/building-solutions-using-g-suite-developer-platform.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/8172606407266560459" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/8172606407266560459" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/QwSkFve5bFw/building-solutions-using-g-suite-developer-platform.html" title="Building solutions using the G Suite developer platform" /><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/-H-RxawSDyt8/X1plOOd0UaI/AAAAAAAAJWM/YX-QgelU_Wwi1pjZxAtwSYPBNDilPvTLgCLcBGAsYHQ/s72-c/gsuitedevplatform.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/09/building-solutions-using-g-suite-developer-platform.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-8985185448568033674</id><published>2020-08-31T09:53:00.000-07:00</published><updated>2020-08-31T09:55:03.704-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="augmented reality" /><category scheme="http://www.blogger.com/atom/ns#" term="MediaPipe" /><title type="text">Instant Motion Tracking with MediaPipe</title><content type="html">&lt;meta name="twitter:image" content="https://2.bp.blogspot.com/-WoXXUqhoQ2o/X0kWvQUV1yI/AAAAAAAAJUs/IA965zDT_fQaRD5L6H2xqy5e9cxNi7LpACLcBGAsYHQ/s1600/unnamed%2B%25281%2529.png"&gt;&lt;img style="display:none" src="https://2.bp.blogspot.com/-WoXXUqhoQ2o/X0kWvQUV1yI/AAAAAAAAJUs/IA965zDT_fQaRD5L6H2xqy5e9cxNi7LpACLcBGAsYHQ/s1600/unnamed%2B%25281%2529.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Vikram Sharma, Software Engineering Intern; Jianing Wei, Staff Software Engineer; Tyler Mullen, Senior Software Engineer &lt;/em&gt;&lt;p&gt;  &lt;td&gt;Augmented Reality (AR) technology creates fun, engaging, and immersive user experiences. The ability to perform AR tracking across devices and platforms, without initialization, remains important for powering AR applications at scale. &lt;/p&gt;&lt;p&gt;Today, we are excited to release the &lt;a href="https://solutions.mediapipe.dev/instant_motion_tracking"&gt;Instant Motion Tracking&lt;/a&gt; solution in MediaPipe. It is built upon the &lt;a href="https://google.github.io/mediapipe/solutions/box_tracking.html"&gt;MediaPipe Box Tracking&lt;/a&gt; solution we &lt;a href="https://developers.googleblog.com/2019/12/object-detection-and-tracking-using-mediapipe.html"&gt;released previously.&lt;/a&gt; With Instant Motion Tracking, you can easily place fun virtual 2D and 3D content on static or moving surfaces, allowing them to seamlessly interact with the real world. This technology also powered &lt;a href="https://ai.googleblog.com/2018/02/the-instant-motion-tracking-behind.html"&gt;MotionStills AR&lt;/a&gt;. Along with the library, we are releasing an open source Android application to showcase its capabilities. In this application, a user simply taps the camera viewfinder in order to place virtual 3D objects and GIF animations, augmenting the real-world environment. &lt;/p&gt;  &lt;center&gt; &lt;div id="flexParent"&gt;&lt;a href="https://1.bp.blogspot.com/-H7-w-RRhmjg/X0kWC0uO1ZI/AAAAAAAAJUc/6ntKeayHCn0Cj6avSwbYWV5b0b9POYkCQCLcBGAsYHQ/s1600/robot_on_romba_watermark.gif" imageanchor="1" &gt;&lt;img style = "width:280px" id="flexImg" border="0" src="https://1.bp.blogspot.com/-H7-w-RRhmjg/X0kWC0uO1ZI/AAAAAAAAJUc/6ntKeayHCn0Cj6avSwbYWV5b0b9POYkCQCLcBGAsYHQ/s1600/robot_on_romba_watermark.gif" alt= "gif of instant motion tracking in MediaPipe" /&gt;&lt;/a&gt;  &lt;a href="https://2.bp.blogspot.com/-UM2JkzxAe70/X0kWT-_PZ7I/AAAAAAAAJUk/clxhFp28sjQ7Z_8Nx16wrfgNwsjd4OnkwCLcBGAsYHQ/s1600/robot_on_hand_2_watermark.gif" imageanchor="1" &gt;&lt;img style="width:280px" id="flexImg" border="0" src="https://2.bp.blogspot.com/-UM2JkzxAe70/X0kWT-_PZ7I/AAAAAAAAJUk/clxhFp28sjQ7Z_8Nx16wrfgNwsjd4OnkwCLcBGAsYHQ/s1600/robot_on_hand_2_watermark.gif" alt= "gif of instant motion tracking in MediaPipe" /&gt;&lt;/a&gt; &lt;/div&gt; &lt;/center&gt; &lt;p id="imgCaption"&gt;Instant Motion Tracking in MediaPipe &lt;/p&gt;  &lt;h2&gt;Instant Motion Tracking&lt;/h2&gt;  &lt;p&gt;The Instant Motion Tracking solution provides the capability to seamlessly place virtual content on static or motion surfaces in the real world. To achieve that, we provide the six degrees of freedom tracking with relative scale in the form of rotation and translation matrices. This tracking information is then used in the rendering system to overlay virtual content on camera streams to create immersive AR experiences. &lt;/p&gt;&lt;p&gt;The core concept behind Instant Motion Tracking is to decouple the camera’s translation and rotation estimation, treating them instead as independent optimization problems. This approach enables AR tracking across devices and platforms without initialization or calibration. We do this by first finding the 3D camera translation using only the visual signals from the camera. This involves estimating the target region's apparent 2D translation and relative scale across frames. The process can be illustrated with a simple pinhole camera model, relating translation and scale of an object in the image plane to the final 3D translation. &lt;/p&gt; &lt;center&gt; &lt;a href="https://2.bp.blogspot.com/-WoXXUqhoQ2o/X0kWvQUV1yI/AAAAAAAAJUs/IA965zDT_fQaRD5L6H2xqy5e9cxNi7LpACLcBGAsYHQ/s1600/unnamed%2B%25281%2529.png" imageanchor="1" &gt;&lt;img style="width: 400px" border="0" src="https://2.bp.blogspot.com/-WoXXUqhoQ2o/X0kWvQUV1yI/AAAAAAAAJUs/IA965zDT_fQaRD5L6H2xqy5e9cxNi7LpACLcBGAsYHQ/s1600/unnamed%2B%25281%2529.png" data-original-width="420" data-original-height="512" alt= image example of V1 to V2/&gt;&lt;/a&gt; &lt;/center&gt; &lt;p id="imgCaption"&gt; By finding the change in relative size of our tracked region from view position V1 to V2, we can estimate the relative change in distance from the camera.&lt;/p&gt;  &lt;p&gt;Next, we obtain the device’s 3D rotation from its built-in IMU (Inertial Measurement Unit) sensor. By combining this translation and rotation data, we can track a target region with six degrees of freedom at relative scale. This information allows for the placement of virtual content on any system with a camera and IMU functionality, and is calibration free. For more details on Instant Motion Tracking, please refer to our &lt;a href="https://arxiv.org/abs/1907.06796"&gt;paper&lt;/a&gt;. &lt;/p&gt;&lt;h2&gt;A MediaPipe Pipeline for Instant Motion Tracking&lt;/h2&gt;  &lt;p&gt;A diagram of Instant Motion Tracking pipeline is shown below, consisting of four major components: a Sticker Manager module, a Region Tracking module, a Matrices Manager module, and lastly a Rendering System. Each of the components consists of MediaPipe calculators or subgraphs.  &lt;/p&gt; &lt;center&gt; &lt;a href="https://3.bp.blogspot.com/-KeDGokpDLEs/X0kXe0r7fxI/AAAAAAAAJU4/sh3LtwFtHZErIC_5yV2c0xoCxckWnlX5gCLcBGAsYHQ/s1600/Screen%2BShot%2B2020-08-27%2Bat%2B1.48.36%2BPM.png" imageanchor="1" &gt;&lt;img style="width:650px" border="0" src="https://3.bp.blogspot.com/-KeDGokpDLEs/X0kXe0r7fxI/AAAAAAAAJU4/sh3LtwFtHZErIC_5yV2c0xoCxckWnlX5gCLcBGAsYHQ/s1600/Screen%2BShot%2B2020-08-27%2Bat%2B1.48.36%2BPM.png" data-original-width="1252" data-original-height="779" alt= Diagram of Instant Motion Tracking Pipeline /&gt;&lt;/a&gt; &lt;/center&gt; &lt;p id="imgCaption"&gt;Diagram of Instant Motion Tracking Pipeline&lt;/p&gt;  &lt;p&gt;The Sticker Manager accepts sticker data from the application and produces initial anchors (tracked region information) based on user taps, and user gesture controls for every sticker object. Initial anchors are then sent to our Region Tracking module to generate tracked anchors. The Matrices Manager combines this data with our device’s rotation matrix to produce six degrees-of-freedom poses as model matrices. After integrating any user-specified transforms like asset scaling, our final poses are forwarded to the Rendering System to render all virtual objects overlaid on the camera frame to produce the output AR frame. &lt;/p&gt;&lt;h2&gt;Using the Instant Motion Tracking Solution&lt;/h2&gt;  &lt;p&gt;The Instant Motion Tracking solution is easy to use by leveraging the MediaPipe cross-platform framework. With camera frames, device rotation matrix, and anchor positions (screen coordinates) as input, the MediaPipe graph produces AR renderings for each frame, providing engaging experiences. If you wish to integrate this Instant Motion Tracking library with your system or application, please visit our &lt;a href="https://solutions.mediapipe.dev/instant_motion_tracking"&gt;documentation&lt;/a&gt; to build your own AR experiences on any device with IMU functionality and a camera sensor. &lt;/p&gt;&lt;h2&gt;Augmenting The World with 3D Stickers and GIFs&lt;/h2&gt;  &lt;p&gt;Instant Motion Tracking solution allows bringing both 3D stickers and GIF animations into Augmented Reality experiences. GIFs are rendered on flat 3D billboards placed in the world, introducing fun and immersive experiences with animated content blended into the real environment.Try it for yourself! &lt;/p&gt;   &lt;center&gt; &lt;div id="flexParent"&gt;&lt;a href="https://3.bp.blogspot.com/-WwuXv_RKEq4/X0kYH3hwZjI/AAAAAAAAJVA/4S1ah0nLmA8BRzShqoIP0pAnKAbhQpEJQCLcBGAsYHQ/s1600/squirrel_on_tree_watermark3.gif" imageanchor="1" &gt;&lt;img style="width: 270px" id="flexImg" border="0" src="https://3.bp.blogspot.com/-WwuXv_RKEq4/X0kYH3hwZjI/AAAAAAAAJVA/4S1ah0nLmA8BRzShqoIP0pAnKAbhQpEJQCLcBGAsYHQ/s1600/squirrel_on_tree_watermark3.gif" alt= "Demonstration of GIF placement in 3D" /&gt;&lt;/a&gt;  &lt;a href="https://4.bp.blogspot.com/-hZ5rq_NiERc/X0kYhGnu0iI/AAAAAAAAJVI/zUqHE8kZShQR14Oiax7MXNTBAbWmiEYXgCLcBGAsYHQ/s1600/unnamed%2B%25281%2529.gif" imageanchor="1" &gt;&lt;img style= "width: 300px" id="flexImg" border="0" src="https://4.bp.blogspot.com/-hZ5rq_NiERc/X0kYhGnu0iI/AAAAAAAAJVI/zUqHE8kZShQR14Oiax7MXNTBAbWmiEYXgCLcBGAsYHQ/s1600/unnamed%2B%25281%2529.gif" alt= "Demonstration of GIF placement in 3D" /&gt;&lt;/a&gt; &lt;/div&gt; &lt;/center&gt; &lt;p id="imgCaption"&gt;Demonstration of GIF placement in 3D &lt;/p&gt;  &lt;p&gt;MediaPipe Instant Motion Tracking is already helping &lt;a href="https://en.pixelshift.ai/"&gt;PixelShift.AI&lt;/a&gt;, a startup applying cutting-edge vision technologies to facilitate video content creation, to track virtual characters seamlessly in the view-finder for a realistic experience. Building upon Instant Motion Tracking’s high-quality pose estimation, PixelShift.AI enables VTubers to create mixed reality experiences with web technologies. The product is going to be released to the broader VTuber community later this year.&lt;/p&gt;   &lt;center&gt; &lt;a href="https://3.bp.blogspot.com/-TegRmFHCU50/X00ke6vLy5I/AAAAAAAAJVg/k76Ay1r8-U4gfBS2JpEqFRluARn_ACE0wCLcBGAsYHQ/s1600/pixel_shift_gif.gif" imageanchor="1" &gt;&lt;img style= "width: 250px" border="0" src="https://3.bp.blogspot.com/-TegRmFHCU50/X00ke6vLy5I/AAAAAAAAJVg/k76Ay1r8-U4gfBS2JpEqFRluARn_ACE0wCLcBGAsYHQ/s1600/pixel_shift_gif.gif" data-original-width="320" data-original-height="569" alt= Instant Motion Tracking example gif  /&gt;&lt;/a&gt; &lt;/center&gt;  &lt;p id="imgCaption"&gt; Instant Motion Tracking helps PixelShift.AI create mixed reality experiences &lt;/p&gt;     &lt;/td&gt;&lt;h2&gt;Follow MediaPipe &lt;/h2&gt;  &lt;p&gt;We look forward to publishing more blog posts related to new MediaPipe pipeline examples and features. Please follow the &lt;a href="https://developers.googleblog.com/search/label/MediaPipe"&gt;MediaPipe label&lt;/a&gt; on Google Developers Blog and Google Developers twitter account (&lt;a href="https://twitter.com/googledevs"&gt;@googledevs&lt;/a&gt;). &lt;/p&gt;&lt;h2&gt;Acknowledgement&lt;/h2&gt;  &lt;p&gt; We would like to thank Vikram Sharma, Jianing Wei, Tyler Mullen, Chuo-Ling Chang, Ming Guang Yong, Jiuqiang Tang, Siarhei Kazakou, Genzhi Ye, Camillo Lugaresi, Buck Bourdon, and Matthias Grundman for their contributions to this release. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/c09gjCevXVY" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/8985185448568033674/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/08/instant-motion-tracking-with-mediapipe.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/8985185448568033674" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/8985185448568033674" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/c09gjCevXVY/instant-motion-tracking-with-mediapipe.html" title="Instant Motion Tracking with MediaPipe" /><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/-WoXXUqhoQ2o/X0kWvQUV1yI/AAAAAAAAJUs/IA965zDT_fQaRD5L6H2xqy5e9cxNi7LpACLcBGAsYHQ/s72-c/unnamed%2B%25281%2529.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/08/instant-motion-tracking-with-mediapipe.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-262210596718712627</id><published>2020-08-28T09:16:00.000-07:00</published><updated>2020-08-28T09:16:40.139-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="spyware" /><category scheme="http://www.blogger.com/atom/ns#" term="targeted spyware" /><title type="text"> Guidance to developers affected by our effort to block less secure browsers and applications</title><content type="html">&lt;meta name="twitter:image" content="https://4.bp.blogspot.com/-URqeKHrjucw/X0g3XKRDMNI/AAAAAAAAJUQ/gswV_TWmMkIbgZgTf1EFp6L25XRZu3C6wCLcBGAsYHQ/s1600/check-oauth%2B%25282%2529.png"&gt;&lt;img style="display:none" src="https://4.bp.blogspot.com/-URqeKHrjucw/X0g3XKRDMNI/AAAAAAAAJUQ/gswV_TWmMkIbgZgTf1EFp6L25XRZu3C6wCLcBGAsYHQ/s1600/check-oauth%2B%25282%2529.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Lillan Marie Agerup, Product Manager&lt;/em&gt;&lt;p&gt;&lt;p&gt;We are always working to improve security protections of Google accounts. Our security systems automatically detect, alert and help protect our users against a range of security threats. One form of phishing, known as “&lt;a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack"&gt;man-in-the-middle&lt;/a&gt;”, is hard to detect when an embedded browser framework (e.g., &lt;a href="https://bitbucket.org/chromiumembedded/cef/src"&gt;Chromium Embedded Framework - CEF&lt;/a&gt;) or another automation platform is being used for authentication. MITM presents an authentication flow on these platforms and intercepts the communications between a user and Google to gather the user’s credentials (including the second factor in some cases) and sign in. To protect our users from these types of attacks Google Account sign-ins from all embedded frameworks will be blocked starting on January 4, 2021. This block affects CEF-based apps and other non-supported browsers. &lt;/p&gt;&lt;p&gt;To minimize the disruption of service to our partners, we are providing this information to help developers set up OAuth 2.0 flows in supported user-agents. The information in this document outlines the following: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;How to enable sign-in on your embedded framework-based apps using browser-based OAuth 2.0 flows.   &lt;li&gt;How to test for compatibility.  &lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Apps that use embedded frameworks&lt;/h2&gt;  &lt;p&gt;If you're an app developer and use CEF or other clients for authorization on devices, use &lt;a href="https://developers.google.com/identity/protocols/oauth2/native-app"&gt;browser-based OAuth 2.0 flows&lt;/a&gt;. Alternatively, you can use a compatible full native browser for sign-in. &lt;/p&gt;&lt;p&gt;For limited-input device applications, such as applications that do not have access to a browser or have limited input capabilities, use &lt;a href="https://developers.google.com/identity/protocols/oauth2/limited-input-device"&gt;limited-input device OAuth 2.0 flows&lt;/a&gt;. &lt;/p&gt;&lt;h2&gt;Browsers&lt;/h2&gt;  &lt;p&gt;Modern browsers with security updates will continue to be supported. &lt;/p&gt;&lt;h3&gt;Browser standards&lt;/h3&gt;  &lt;p&gt;The browser must have JavaScript enabled. For more details, see &lt;a href="https://security.googleblog.com/2018/10/announcing-some-security-treats-to.html"&gt;our previous blog post&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;The browser must not proxy or alter the network communication. Your browser must not do any of the following: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Server-side rendering  &lt;li&gt;HTTPS proxy  &lt;li&gt;Replay requests  &lt;li&gt;Rewrite HTTP headers &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The browser must have a reasonably complete implementation of web standards and browser features. You must confirm that your browser does not contain any of the following: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Headless browsers  &lt;li&gt;Node.js  &lt;li&gt;Text-based browsers &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The browser must identify itself clearly in the User-Agent. The browser must not try to impersonate another browser like Chrome or Firefox. &lt;/p&gt;&lt;p&gt;The browser must not provide automation features. This includes scripts that automate keystrokes or clicks, especially to perform automatic sign-ins. We do not allow sign-in from browsers based on frameworks like CEF or Embedded Internet Explorer. &lt;/p&gt;&lt;h2&gt;Test for compatibility&lt;/h2&gt;  &lt;p&gt;If you're a developer that currently uses CEF for sign-in, be aware that support for this type of authentication ends on January 4, 2021. To verify whether you'll be affected by the change, test your application for compatibility. To test your application, add a specific HTTP header and value to disable the allowlist. The following steps explain how to disable the allowlist: &lt;/p&gt;&lt;ol&gt; &lt;li&gt;Go to where you send requests to &lt;code&gt;accounts.google.com&lt;/code&gt;.  &lt;li&gt;Add &lt;code&gt;Google-Accounts-Check-OAuth-Login:true&lt;/code&gt; to your HTTP request headers. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The following example details how to disable the allowlist in CEF.  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can add your custom headers in &lt;code&gt;CefRequestHandler#OnBeforeResourceLoad&lt;/code&gt;. &lt;/p&gt;   &lt;pre class="prettyprint"&gt;    CefRequest::HeaderMap hdrMap;&lt;br /&gt;    request-&gt;GetHeaderMap(hdrMap);&lt;br /&gt;    hdrMap.insert(std::make_pair("Google-Accounts-Check-OAuth-Login", "true"));&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;To test manually in Chrome, use &lt;a href="https://chrome.google.com/webstore/detail/modheader/idgpnmonknjnojddfkpgkljpfnnfcklj"&gt;ModHeader&lt;/a&gt; to set the header. The header enables the changes for that particular request. &lt;/p&gt; &lt;a href="https://2.bp.blogspot.com/-TJZkuuDkuJo/X0ktT7xNcyI/AAAAAAAAJVU/Cl4P6Dtp38k7ETT6Po5goH22LB1ALdDtgCLcBGAsYHQ/s1600/check-oauth%2B%25282%2529.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-TJZkuuDkuJo/X0ktT7xNcyI/AAAAAAAAJVU/Cl4P6Dtp38k7ETT6Po5goH22LB1ALdDtgCLcBGAsYHQ/s1600/check-oauth%2B%25282%2529.png" data-original-width="591" data-original-height="214" /&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;Setting the header using ModHeader &lt;/p&gt;&lt;h2&gt;Related content&lt;/h2&gt;  &lt;p&gt;See our previous &lt;a href="https://security.googleblog.com/2019/04/better-protection-against-man-in-middle.html"&gt;blog post&lt;/a&gt; about protection against man-in-the-middle phishing attacks. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/7jbw_lpZorQ" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/262210596718712627/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/08/guidance-for-our-effort-to-block-less-secure-browser-and-apps.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/262210596718712627" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/262210596718712627" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/7jbw_lpZorQ/guidance-for-our-effort-to-block-less-secure-browser-and-apps.html" title=" Guidance to developers affected by our effort to block less secure browsers and applications" /><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/-URqeKHrjucw/X0g3XKRDMNI/AAAAAAAAJUQ/gswV_TWmMkIbgZgTf1EFp6L25XRZu3C6wCLcBGAsYHQ/s72-c/check-oauth%2B%25282%2529.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/08/guidance-for-our-effort-to-block-less-secure-browser-and-apps.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-427363096872656988</id><published>2020-08-27T10:00:00.000-07:00</published><updated>2020-08-27T10:00:12.582-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="Android Developer" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="machine learning" /><category scheme="http://www.blogger.com/atom/ns#" term="ml" /><category scheme="http://www.blogger.com/atom/ns#" term="ML Kit" /><category scheme="http://www.blogger.com/atom/ns#" term="Pose Detection" /><category scheme="http://www.blogger.com/atom/ns#" term="Pose Estimation" /><title type="text"> ML Kit Pose Detection Makes Staying Active at Home Easier</title><content type="html">&lt;meta name="twitter:image" content="https://2.bp.blogspot.com/-Z_aWUs5uAH0/X0bIQFmhq5I/AAAAAAAAJTQ/_Mbdkv7w8QsLT-wf3GHLL8CUTZrCHd31wCLcBGAsYHQ/s1600/mlkitoverview.png"&gt;&lt;img style="display:none" src="https://2.bp.blogspot.com/-Z_aWUs5uAH0/X0bIQFmhq5I/AAAAAAAAJTQ/_Mbdkv7w8QsLT-wf3GHLL8CUTZrCHd31wCLcBGAsYHQ/s1600/mlkitoverview.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Kenny Sulaimon, Product Manager, ML Kit; Chengji Yan and Areeba Abid, Software Engineers, ML Kit&lt;/em&gt;&lt;p&gt; &lt;center&gt;&lt;a href="https://4.bp.blogspot.com/-bTXt2s-tbr8/X0a0h6NW3qI/AAAAAAAAJSY/BF34dH18WUclHLQ62hteu4jE5vLeaPhCgCLcBGAsYHQ/s1600/mlkit-logo-text.png" imageanchor="1" &gt;&lt;img border="0" style="width:50%" src="https://4.bp.blogspot.com/-bTXt2s-tbr8/X0a0h6NW3qI/AAAAAAAAJSY/BF34dH18WUclHLQ62hteu4jE5vLeaPhCgCLcBGAsYHQ/s1600/mlkit-logo-text.png" data-original-width="1200" data-original-height="369" alt="ML Kit logo"/&gt;&lt;/a&gt;&lt;/center&gt;&lt;p&gt;Two months ago we introduced the standalone version of the ML Kit SDK, making it even easier to integrate on-device machine learning into mobile apps. Since then we’ve launched the &lt;a href="https://developers.google.com/ml-kit/vision/digital-ink-recognition/"&gt;Digital Ink Recognition API,&lt;/a&gt; and also introduced the ML Kit early access program. Our first two early access APIs were Pose Detection and &lt;a href="https://developers.google.com/ml-kit/early-access/entity-extraction"&gt;Entity Extraction&lt;/a&gt;. We’ve received an overwhelming amount of interest in these new APIs and today, we are thrilled to officially add &lt;a href="https://developers.google.com/ml-kit/vision/pose-detection/"&gt;Pose Detection&lt;/a&gt; to the ML Kit lineup. &lt;/p&gt;&lt;img border="0" style="width:170%" src="https://2.bp.blogspot.com/-Z_aWUs5uAH0/X0bIQFmhq5I/AAAAAAAAJTQ/_Mbdkv7w8QsLT-wf3GHLL8CUTZrCHd31wCLcBGAsYHQ/s1600/mlkitoverview.png" data-original-width="1600" data-original-height="688" alt="ML Kit Overview"/&gt;&lt;p&gt;&lt;h2&gt;A New ML Kit API, Pose Detection&lt;/h2&gt;&lt;/p&gt;&lt;div id="flexParent"&gt;&lt;img id="flexImg" style="width:330px" border="0" src="https://4.bp.blogspot.com/-_f7p1nFVQs8/X0a27BXN67I/AAAAAAAAJS4/Ru9j5JsACrEnXs1PGkIDND1CZVTf316dgCLcBGAsYHQ/s1600/rope.gif" data-original-width="320" data-original-height="388" /&gt;&lt;img id="flexImg" style="width:300px" border="0" src="https://3.bp.blogspot.com/-ydHS71-jIM4/X0a3E_NoUqI/AAAAAAAAJS8/Nrp9JwKVljorMs1Epk992INPKZjXvuEiACLcBGAsYHQ/s1600/Dance.gif" data-original-width="320" data-original-height="427" /&gt;&lt;/div&gt;&lt;br&gt;&lt;p id="imgCaption"&gt;Examples of ML Kit Pose Detection&lt;/p&gt;&lt;p&gt;ML Kit Pose Detection is an on-device, cross platform (Android and iOS), lightweight solution that tracks a subject's physical actions in real time. With this technology, building a one-of-a-kind experience for your users is easier than ever. &lt;/p&gt;&lt;p&gt;The API produces a full body 33 point skeletal match that includes facial landmarks (ears, eyes, mouth, and nose), along with hands and feet tracking. The API was also trained on a variety of complex athletic poses, such as Yoga positions. &lt;/p&gt;&lt;center&gt;&lt;a href="https://4.bp.blogspot.com/-fyxQxeDxVcI/X0bIGBfw1-I/AAAAAAAAJTM/Y8CSz_Dtfvk4iMyN2w7n4UpLFaHEwBtUACLcBGAsYHQ/s1600/New-points.png" imageanchor="1" &gt;&lt;img style="width:75%" border="0" src="https://4.bp.blogspot.com/-fyxQxeDxVcI/X0bIGBfw1-I/AAAAAAAAJTM/Y8CSz_Dtfvk4iMyN2w7n4UpLFaHEwBtUACLcBGAsYHQ/s1600/New-points.png" data-original-width="658" data-original-height="862" alt="Skeleton image detailing all 33 landmark points"/&gt;&lt;/a&gt;&lt;/center&gt;&lt;p id="imgCaption"&gt;Skeleton image detailing all 33 landmark points&lt;/p&gt;&lt;p&gt;&lt;h2&gt;Under The Hood&lt;/h2&gt;&lt;a href="https://3.bp.blogspot.com/-SkeQgHK7R-o/X0bUp8H0rII/AAAAAAAAJUE/YXzjzCGCR7s3lKDBnR49nbiBZNctrYUxwCLcBGAsYHQ/s1600/schema_03.png" imageanchor="1" &gt;&lt;img border="0" src="https://3.bp.blogspot.com/-SkeQgHK7R-o/X0bUp8H0rII/AAAAAAAAJUE/YXzjzCGCR7s3lKDBnR49nbiBZNctrYUxwCLcBGAsYHQ/s1600/schema_03.png" data-original-width="1494" data-original-height="1443" /&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;Diagram of the ML Kit Pose Detection Pipeline&lt;/p&gt;&lt;p&gt;The power of the ML Kit Pose Detection API is in its ease of use. The API builds on the cutting edge &lt;a href="http://ai.googleblog.com/2020/08/on-device-real-time-body-pose-tracking.html"&gt;BlazePose&lt;/a&gt; pipeline and allows developers to build great experiences on Android and iOS, with little effort. We offer a full body model, support for both video and static image use cases, and have added multiple pre and post processing improvements to help developers get started with only a few lines of code. &lt;/p&gt;&lt;p&gt;The ML Kit Pose Detection API utilizes a two step process for detecting poses. First, the API combines an ultra-fast face detector with a prominent person detection algorithm, in order to detect when a person has entered the scene. The API is capable of detecting a single (highest confidence) person in the scene and requires the face of the user to be present in order to ensure optimal results. &lt;/p&gt;&lt;p&gt;Next, the API applies a full body, 33 landmark point skeleton to the detected person. These points are rendered in 2D space and do not account for depth. The API also contains a streaming mode option for further performance and latency optimization. When enabled, instead of running person detection on every frame, the API only runs this detector when the previous frame no longer detects a pose. &lt;/p&gt;&lt;p&gt;The ML Kit Pose Detection API also features two operating modes, “Fast” and “Accurate”. With the “Fast” mode enabled, you can expect a frame rate of around 30+ FPS on a modern Android device, such as a Pixel 4 and 45+ FPS on a modern iOS device, such as an iPhone X. With the “Accurate” mode enabled, you can expect more stable x,y coordinates on both types of devices, but a slower frame rate overall.  &lt;/p&gt;&lt;p&gt;Lastly,  we’ve also added a per point “InFrameLikelihood” score to help app developers ensure their users are in the right position and filter out extraneous points. This score is calculated during the landmark detection phase and a low likelihood score suggests that a landmark is outside the image frame.  &lt;/p&gt;&lt;p&gt;&lt;h2&gt;Real World Applications&lt;/h2&gt;&lt;/p&gt; &lt;div id="flexParent"&gt;&lt;img id="flexImg" border="0" style="width:320px" src="https://4.bp.blogspot.com/-lwryR8azaiU/X0bJv-pGQ6I/AAAAAAAAJTo/11We1akzGxAnq8o0nFSOwEhDoEd3Hq8ZwCLcBGAsYHQ/s1600/Pushup%2528640%2529.gif" data-original-width="512" data-original-height="288" /&gt;&lt;img id="flexImg" border="0" style="width:320px" src="https://3.bp.blogspot.com/-sC4EJWj3SRE/X0bJ2SmzT-I/AAAAAAAAJTs/HVkjE-MfBVk1dg_bhZMGCNNJvf4sHhDXgCLcBGAsYHQ/s1600/Squat-crop.gif" data-original-width="463" data-original-height="260" /&gt;&lt;/div&gt;&lt;br&gt;&lt;p id="imgCaption"&gt;Examples of a pushup and squat counter using ML Kit Pose Detection&lt;/p&gt; &lt;p&gt;Keeping up with regular physical activity is one of the hardest things to do while at home. We often rely on gym buddies or physical trainers to help us with our workouts, but this has become increasingly difficult. Apps and technology can often help with this, but with existing solutions, many app developers are still struggling to understand and provide feedback on a user’s movement in real time. ML Kit Pose Detection aims to make this problem a whole lot easier. &lt;/p&gt;&lt;p&gt;The most common applications for Pose detection are fitness and yoga trackers. It’s possible to use our API to track pushups, squats and a variety of other physical activities in real time. These complex use cases can be achieved by using the output of the API, either with angle heuristics, tracking the distance between joints, or with your own proprietary classifier model. &lt;/p&gt;&lt;p&gt;To get you jump started with classifying poses, we are sharing additional tips on how to use angle heuristics to classify popular yoga poses. &lt;a href="https://developers.google.com/ml-kit/vision/pose-detection/classifying-poses"&gt;Check it out here&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&lt;h2&gt;Learning to Dance Without Leaving Home&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;Learning a new skill is always tough, but learning to dance without the aid of a real time instructor is even tougher. One of our early access partners, &lt;a href="https://groovetime.com/"&gt;Groovetime&lt;/a&gt;, has set out to solve this problem.  &lt;/p&gt;&lt;p&gt;With the power of ML Kit Pose Detection, Groovetime allows users to learn their favorite dance moves from popular short-form dance videos, while giving users automated real time feedback on their technique. You can join their early access beta &lt;a href="https://groovetime-access.typeform.com/to/gJwwq387"&gt;here&lt;/a&gt;. &lt;/p&gt;&lt;a href="https://4.bp.blogspot.com/-zxr6Yl7RkQY/X0bKjVco9AI/AAAAAAAAJT4/3exKs0IG5n8a7hkbYOeCJ-g2p9oagBDjgCLcBGAsYHQ/s1600/Groovetime_blog_gif.gif" imageanchor="1" &gt;&lt;img id="imgHalf" border="0" src="https://4.bp.blogspot.com/-zxr6Yl7RkQY/X0bKjVco9AI/AAAAAAAAJT4/3exKs0IG5n8a7hkbYOeCJ-g2p9oagBDjgCLcBGAsYHQ/s1600/Groovetime_blog_gif.gif" data-original-width="735" data-original-height="1024" /&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;Groovetime App using ML Kit Pose Detection&lt;/p&gt; &lt;p&gt;&lt;h2&gt;Staying Active Wherever You Are&lt;/h2&gt;&lt;/p&gt; &lt;p&gt;Our Pose Detection API is also helping &lt;strong&gt;adidas Training&lt;/strong&gt;, another one of our early access partners, build a virtual workout experience that will help you stay active no matter where you are. This one-of-a-kind innovation will help analyze and give feedback on the user’s movements, using nothing more than just your phone. Integration into the &lt;strong&gt;adidas Training&lt;/strong&gt; app is still in the early phases of the development cycle, but stay tuned for more updates in the future. &lt;/p&gt; &lt;p&gt;&lt;h2&gt;How to get started?&lt;/h2&gt;&lt;/p&gt; &lt;p&gt;If you would like to start using the Pose Detection API in your mobile app, head over to the &lt;a href="https://developers.google.com/ml-kit/vision/pose-detection/"&gt;developer documentation&lt;/a&gt; or check out the sample apps for &lt;a href="https://github.com/googlesamples/mlkit/tree/master/android/vision-quickstart"&gt;Android&lt;/a&gt; and &lt;a href="https://github.com/googlesamples/mlkit/tree/master/ios/quickstarts/vision"&gt;iOS&lt;/a&gt; to see the API in action. For questions or feedback, please reach out to us through one of our &lt;a href="https://developers.google.com/ml-kit/community"&gt;community channels&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/5-XnRCSkTE0" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/427363096872656988/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/08/introducing-ml-kit-pose-detection.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/427363096872656988" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/427363096872656988" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/5-XnRCSkTE0/introducing-ml-kit-pose-detection.html" title=" ML Kit Pose Detection Makes Staying Active at Home Easier" /><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/-Z_aWUs5uAH0/X0bIQFmhq5I/AAAAAAAAJTQ/_Mbdkv7w8QsLT-wf3GHLL8CUTZrCHd31wCLcBGAsYHQ/s72-c/mlkitoverview.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/08/introducing-ml-kit-pose-detection.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-4531619232525659034</id><published>2020-08-26T09:00:00.000-07:00</published><updated>2020-08-26T09:00:13.893-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="actions on google" /><category scheme="http://www.blogger.com/atom/ns#" term="google assistant" /><title type="text">Join us for Google Assistant Developer Day on October 8</title><content type="html">&lt;meta name="twitter:image" content="https://3.bp.blogspot.com/-pD_xuTres0o/X0Wkb0EbRKI/AAAAAAAAJSM/srwh9344XssEvATiOQZrJvnwMKDYFOK5wCLcBGAsYHQ/s1600/Tweet%2B1%2BUpdated%2BAug%2B24%2B3PM%2BCST.jpg"&gt;&lt;img style="display:none" src="https://3.bp.blogspot.com/-pD_xuTres0o/X0Wkb0EbRKI/AAAAAAAAJSM/srwh9344XssEvATiOQZrJvnwMKDYFOK5wCLcBGAsYHQ/s1600/Tweet%2B1%2BUpdated%2BAug%2B24%2B3PM%2BCST.jpg"&gt; &lt;p&gt;&lt;em&gt;Posted by Baris Gultekin, Director, Product Management Google Assistant and &lt;br&gt;Payam Shodjai, Director, Product Management Google Assistant&lt;/em&gt;&lt;p&gt;&lt;p&gt;&lt;a href="https://3.bp.blogspot.com/-pD_xuTres0o/X0Wkb0EbRKI/AAAAAAAAJSM/srwh9344XssEvATiOQZrJvnwMKDYFOK5wCLcBGAsYHQ/s1600/Tweet%2B1%2BUpdated%2BAug%2B24%2B3PM%2BCST.jpg" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://3.bp.blogspot.com/-pD_xuTres0o/X0Wkb0EbRKI/AAAAAAAAJSM/srwh9344XssEvATiOQZrJvnwMKDYFOK5wCLcBGAsYHQ/s1600/Tweet%2B1%2BUpdated%2BAug%2B24%2B3PM%2BCST.jpg" data-original-width="1600" data-original-height="901" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;More and more people turn to Google Assistant every day to help them get the most out of their phones and smart displays: From playing games to using their favorite app by voice, there are more opportunities than ever for developers to create new and engaging experiences for Google Assistant.  &lt;/p&gt;&lt;p&gt;We welcome you to join us virtually at our &lt;a href="https://developersonair.withgoogle.com/events/assistant-devday"&gt;Google Assistant Developer Day&lt;/a&gt; on &lt;strong&gt;Thursday, October 8&lt;/strong&gt;, to learn more about new tools and features we’re building for developers to bring Google Assistant to mobile apps and Smart Displays and help drive discoverability and engagement via voice. This will also be a great chance to chat live with Google leaders and engineers on the team to get your questions answered.  &lt;/p&gt;&lt;p&gt;You’ll hear from our product experts and partnership leads on best practices to integrate with Google Assistant to help users more easily engage with their favorite apps by voice. Other sessions will include in-depth conversations around native development on Google Assistant, with so much more.   &lt;/p&gt;&lt;p&gt;We’ll also have guest speakers like: Garrett Gaudini, Head of Product at Postmates, Laurens Rutten, Founder &amp; CEO of CoolGames, Corey Bozarth, VP of Product &amp; Monetization at MyFitnessPal and many other, join us on stage to share their stories about how voice has transformed the way people interact with their apps and services.  &lt;/p&gt;&lt;p&gt;Whether you build for 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;p&gt;&lt;strong&gt;Registration is FREE! &lt;/strong&gt;Head on over to the &lt;a href="https://developersonair.withgoogle.com/events/assistant-devday"&gt;event website&lt;/a&gt; to register and check out the schedule.  &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/9JQQJdPsaG4" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/4531619232525659034/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/08/join-us-for-google-assistant-developer-day.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/4531619232525659034" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/4531619232525659034" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/9JQQJdPsaG4/join-us-for-google-assistant-developer-day.html" title="Join us for Google Assistant Developer Day on October 8" /><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/-pD_xuTres0o/X0Wkb0EbRKI/AAAAAAAAJSM/srwh9344XssEvATiOQZrJvnwMKDYFOK5wCLcBGAsYHQ/s72-c/Tweet%2B1%2BUpdated%2BAug%2B24%2B3PM%2BCST.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/08/join-us-for-google-assistant-developer-day.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-1375726598728814046</id><published>2020-08-26T06:19:00.002-07:00</published><updated>2020-08-26T07:32:11.289-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="Android App Development" /><category scheme="http://www.blogger.com/atom/ns#" term="developers" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Maps" /><category scheme="http://www.blogger.com/atom/ns#" term="startup" /><title type="text">Helping the Haitian economy, one line of code at a time </title><content type="html">&lt;meta name="twitter:image" content="https://3.bp.blogspot.com/-LmqeC4ePJXQ/X0WNGYpIjXI/AAAAAAAAJRo/YVJvR2N3xbUwo-VYzQGKg7M69jQfXmNXACLcBGAsYHQ/s1600/Yadley.jpg"&gt;&lt;img style="display:none" src="https://3.bp.blogspot.com/-LmqeC4ePJXQ/X0WNGYpIjXI/AAAAAAAAJRo/YVJvR2N3xbUwo-VYzQGKg7M69jQfXmNXACLcBGAsYHQ/s1600/Yadley.jpg"&gt; &lt;p&gt;&lt;em&gt;Posted by Jennifer Kohl, Program Manager, Developer Community Programs &lt;/em&gt;&lt;p&gt; &lt;center&gt; &lt;a href="https://3.bp.blogspot.com/-LmqeC4ePJXQ/X0WNGYpIjXI/AAAAAAAAJRo/YVJvR2N3xbUwo-VYzQGKg7M69jQfXmNXACLcBGAsYHQ/s1600/Yadley.jpg" imageanchor="1" &gt;&lt;img style="width:400px" border="0" src="https://3.bp.blogspot.com/-LmqeC4ePJXQ/X0WNGYpIjXI/AAAAAAAAJRo/YVJvR2N3xbUwo-VYzQGKg7M69jQfXmNXACLcBGAsYHQ/s1600/Yadley.jpg" data-original-width="260" data-original-height="260" alt= Picture of Yadley /&gt;&lt;/a&gt; &lt;/center&gt; &lt;p id="imgCaption"&gt;Eustache Luckens Yadley at a GDG Port-au-Prince meetup&lt;/p&gt; &lt;p&gt;Meet Eustache Luckens Yadley, or “Yadley” for short. As a web developer from Port-au-Prince, Yadley has spent his career building web applications that benefit the local Haitian economy. Whether it’s ecommerce platforms that bring local sellers to market or software tools that help local businesses operate more effectively, Yadley has always been there with a technical hand to lend.  &lt;/p&gt;&lt;p&gt;However, Yadley has also spent his career watching Haiti’s unemployment numbers rise to among the highest in the Caribbean. As he describes it,  &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;center&gt; &lt;p style="font-size:30px;"&gt; &lt;b&gt;“Every day, several thousand young people have no job to get by.” &lt;/b&gt; &lt;/center&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;So with code in mind and mouse in hand, Yadley got right to work. His first step was to identify a need in the economy. He soon figured out that Haiti had a shortage of delivery methods for consumers, making home delivery purchases of any kind extremely unreliable. With this observation, Yadley also noticed that there was a surplus of workers willing to deliver the goods, but no infrastructure to align their needs with that of the market’s.  &lt;/p&gt; &lt;center&gt; &lt;a href="https://2.bp.blogspot.com/-MWVpXuJDhzw/X0WNdEkJAkI/AAAAAAAAJRw/4N5UKQ42nFQ8g9dCUyB_HkU66I5O3UlSQCLcBGAsYHQ/s1600/Yadley%2BGDG.jpg" imageanchor="1" &gt;&lt;img style="width:550px" border="0" src="https://2.bp.blogspot.com/-MWVpXuJDhzw/X0WNdEkJAkI/AAAAAAAAJRw/4N5UKQ42nFQ8g9dCUyB_HkU66I5O3UlSQCLcBGAsYHQ/s1600/Yadley%2BGDG.jpg" data-original-width="1600" data-original-height="1200" alt= picture of a GDG meetup /&gt;&lt;/a&gt; &lt;/center&gt; &lt;p id="imgCaption"&gt;Yadley watching a demo at a GDG Port-au-Prince meetup&lt;/p&gt; &lt;a href="https://1.bp.blogspot.com/-Ni3U6HKUK8A/X0WORmxR0yI/AAAAAAAAJR4/Z8oGpemQ-g4Q1q7tGfQzvTs5FPewUm94QCLcBGAsYHQ/s1600/Livrezonpam.jpeg" imageanchor="1" &gt;&lt;img style="width:250px" border="0" src="https://1.bp.blogspot.com/-Ni3U6HKUK8A/X0WORmxR0yI/AAAAAAAAJR4/Z8oGpemQ-g4Q1q7tGfQzvTs5FPewUm94QCLcBGAsYHQ/s1600/Livrezonpam.jpeg" data-original-width="1500" data-original-height="500" align= "right" /&gt;&lt;/a&gt; &lt;p&gt;In this moment, Yadley did what many good developers would do: build an app. He created the framework for what is now called “&lt;a href="https://play.google.com/store/apps/details?id=com.livrezonpam.lite&amp;hl=en_US"&gt;Livrezonpam&lt;/a&gt;,” an application that allows companies to post where and when they need a particular product delivered and workers to find the corresponding delivery jobs closest to them.  &lt;/p&gt;&lt;p&gt;With a brilliant solution, Yadley’s last step was to find the right technical tools to build the concept out and make it a viable platform that users could work with to their benefit.  &lt;/p&gt;&lt;p&gt;It was at this crucial step when Yadley found the Port-au-Prince &lt;a href="https://gdg.community.dev/"&gt;Google Developer Group&lt;/a&gt;. With &lt;a href="https://gdg.community.dev/gdg-port-au-prince/"&gt;GDG Port-au-Prince&lt;/a&gt;, Yadley was able to bring his young app right into the developer community,  run different demos of his product to experienced users, and get feedback from a wide array of developers with an intimate knowledge of the Haitian tech scene. The takeaways from working in the community translated directly to his work. Yadley learned how to  build with the &lt;a href="https://cloud.google.com/training"&gt;Google Cloud Platform Essentials&lt;/a&gt;, which proved  key in managing all the data his app now collects. He also learned how to get the &lt;a href="https://developers.google.com/maps/documentation"&gt;Google Maps Platform API&lt;/a&gt; working for his app, creating a streamlined user experience that helped workers and companies in Haiti locate one another with precision and ease.  &lt;/p&gt; &lt;center&gt; &lt;a href="https://4.bp.blogspot.com/-FYqHtXJPnbk/X0WOxV71hJI/AAAAAAAAJSA/0LZ2e5xsYCkawPvYSZocyfmtyEbcHpbPACLcBGAsYHQ/s1600/YADLEY%2BAPP.png" imageanchor="1" &gt;&lt;img style="width: 600px" border="0" src="https://4.bp.blogspot.com/-FYqHtXJPnbk/X0WOxV71hJI/AAAAAAAAJSA/0LZ2e5xsYCkawPvYSZocyfmtyEbcHpbPACLcBGAsYHQ/s1600/YADLEY%2BAPP.png" data-original-width="1218" data-original-height="706" alt= picture of the app /&gt;&lt;/a&gt; &lt;/center&gt; &lt;p&gt;This wide array of community technical resources, from trainings, to mentors, to helpful friends, allowed Yadley to grow his knowledge of several &lt;a href="https://developers.google.com/"&gt;Google technologies&lt;/a&gt;, which in turn allowed him to grow his app for the Haitian community.  &lt;/p&gt;&lt;p&gt;Today, Yadley is still an active member of the GDG community, growing his skills and those of the many friends around him. And at the same time, he is still growing &lt;a href="https://play.google.com/store/apps/details?id=com.livrezonpam.lite&amp;hl=en_US"&gt;Librezonpam&lt;/a&gt; on the &lt;a href="https://developer.android.com/distribute/console"&gt;Google Play&lt;/a&gt; App Store to help local businesses reach their customers and bring more jobs directly to the people of Haiti.  &lt;/p&gt; &lt;br&gt; &lt;p&gt;Ready to start building with a Google Developer Group near you? Find the closest community to you, &lt;a href="https://developers.google.com/community/gdg"&gt;here&lt;/a&gt;.  &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/OtuCZIvHejc" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/1375726598728814046/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/08/helping-the-haitian-economy-one-line-of-code-at-a-time.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/1375726598728814046" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/1375726598728814046" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/OtuCZIvHejc/helping-the-haitian-economy-one-line-of-code-at-a-time.html" title="Helping the Haitian economy, one line of code at a time " /><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/-LmqeC4ePJXQ/X0WNGYpIjXI/AAAAAAAAJRo/YVJvR2N3xbUwo-VYzQGKg7M69jQfXmNXACLcBGAsYHQ/s72-c/Yadley.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/08/helping-the-haitian-economy-one-line-of-code-at-a-time.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-7247351371354637253</id><published>2020-08-25T09:36:00.000-07:00</published><updated>2020-08-25T09:36:22.035-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="women techmakers" /><title type="text">Introducing Spotlight: Women Techmakers series on career and professional development in tech</title><content type="html">&lt;meta name="twitter:image" content="https://2.bp.blogspot.com/-0wWnW_BwWXo/X0SABurptjI/AAAAAAAAJRU/6P4_YM3mWDIpMd5qCdOI1pZjsYXWHu4igCLcBGAsYHQ/s1600/wtmspotlightcard.png"&gt;&lt;img style="display:none" src="https://2.bp.blogspot.com/-0wWnW_BwWXo/X0SABurptjI/AAAAAAAAJRU/6P4_YM3mWDIpMd5qCdOI1pZjsYXWHu4igCLcBGAsYHQ/s1600/wtmspotlightcard.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Caitlin Morrissey, PgM for Women Techmakers&lt;/em&gt;&lt;/p&gt;&lt;p&gt;On July 9, &lt;a href="https://www.womentechmakers.com/"&gt;Women Techmakers&lt;/a&gt; launched the first episode of “Spotlight”, a new global program focused on amplifying the stories and pathways of women in technology across the industry. The idea for this series came from our community who were looking for more help with navigating their careers, especially during this time. We quickly realized that with our extensive network of professional women in all different parts of the tech industry, we could play a part in scaling this kind of guidance and advice to women all over the world. &lt;/p&gt;&lt;p&gt;The &lt;a href="https://www.youtube.com/watch?v=ZL0bWJotls8"&gt;first video&lt;/a&gt; features Priyanka Vergadia, a Developer Advocate for Google Cloud, who shared advice on taking risks, career paths in tech, and dealing with failure. “I wanted to be on the show because I am a firm believer that hearing someone's story can inspire you to create your own beautiful journey.” &lt;/p&gt;&lt;a href="https://2.bp.blogspot.com/-H_7tI7zVgwk/X0R_57CocqI/AAAAAAAAJRQ/oMKHhZq_XPI5gd6GvB2FzG76rE1fYHlCwCLcBGAsYHQ/s1600/priyankaandcaitlin.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-H_7tI7zVgwk/X0R_57CocqI/AAAAAAAAJRQ/oMKHhZq_XPI5gd6GvB2FzG76rE1fYHlCwCLcBGAsYHQ/s1600/priyankaandcaitlin.png" data-original-width="1600" data-original-height="860" /&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;Image of Priyanka Vergadia with Spotlight host Caitlin Morrissey&lt;/p&gt;&lt;p&gt;Since then, we’ve been releasing weekly episodes featuring women from all over the world on themes from finding the job that’s right for you and what’s needed to be successful in that role to overcoming imposter syndrome and leading with confidence. Each woman brings a unique perspective to the table -- some have their masters in Engineering, while others went through a coding bootcamp and got into tech as a second career. This diversity in experience and backgrounds brings a richness and variety to the advice shared across the episodes, providing valuable guidance a viewer can take away, regardless of where they are in their careers. &lt;/p&gt;&lt;a href="https://2.bp.blogspot.com/-0wWnW_BwWXo/X0SABurptjI/AAAAAAAAJRU/6P4_YM3mWDIpMd5qCdOI1pZjsYXWHu4igCLcBGAsYHQ/s1600/wtmspotlightcard.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-0wWnW_BwWXo/X0SABurptjI/AAAAAAAAJRU/6P4_YM3mWDIpMd5qCdOI1pZjsYXWHu4igCLcBGAsYHQ/s1600/wtmspotlightcard.png" data-original-width="1600" data-original-height="840" /&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;Image of Spotlight guests: Pujaa Rajan, Jessica Early-Cha and Jacquelle Horton&lt;/p&gt;&lt;p&gt;The response to the series has been overwhelmingly positive so far - “I am honestly blown away by the reception of the video,” said Priyanka, who received many heartfelt messages after her episode was published. And as Spotlight continues, we’re excited to tell more stories of more women in tech and build a library of career advice that &lt;em&gt;anyone&lt;/em&gt; can use to help navigate the tech ecosystem. &lt;/p&gt;&lt;p&gt;You can check out all episodes of Spotlight &lt;a href="https://www.youtube.com/playlist?list=PLNBb8OktVDKuma8g9K2qi6UZjLgcIFbPo"&gt;here&lt;/a&gt;, and make sure to &lt;a href="https://www.youtube.com/user/womentechmakers?sub_confirmation=1"&gt;subscribe to the Women Techmakers channel&lt;/a&gt; so you don’t miss out on future interviews. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/i8IOESvnKfU" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/7247351371354637253/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/08/introducing-spotlight-women-techmakers.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/7247351371354637253" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/7247351371354637253" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/i8IOESvnKfU/introducing-spotlight-women-techmakers.html" title="Introducing Spotlight: Women Techmakers series on career and professional development 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://2.bp.blogspot.com/-0wWnW_BwWXo/X0SABurptjI/AAAAAAAAJRU/6P4_YM3mWDIpMd5qCdOI1pZjsYXWHu4igCLcBGAsYHQ/s72-c/wtmspotlightcard.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/08/introducing-spotlight-women-techmakers.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-5906976792140443217</id><published>2020-08-20T09:50:00.000-07:00</published><updated>2020-08-20T09:50:01.180-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="G Suite" /><title type="text">Building G Suite Add-ons with your favorite tech stack </title><content type="html">&lt;meta name="twitter:image" content="https://3.bp.blogspot.com/-woNLs9iCd58/Xz6pdl-1JHI/AAAAAAAAJRE/JGfOlTEoIVklD7kMaYr4Hx2JohaDqr9BQCLcBGAsYHQ/s1600/Untitled%2Bdesign%2B%25284%2529.png"&gt;&lt;img style="display:none" src="https://3.bp.blogspot.com/-woNLs9iCd58/Xz6pdl-1JHI/AAAAAAAAJRE/JGfOlTEoIVklD7kMaYr4Hx2JohaDqr9BQCLcBGAsYHQ/s1600/Untitled%2Bdesign%2B%25284%2529.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Jon Harmer, Product Manager and Steven Bazyl, Developer Advocate for G Suite&lt;/em&gt;&lt;p&gt;&lt;p&gt;Let’s talk about the basics of G Suite Add-ons. G Suite Add-ons simplify how users get things done in G Suite by bringing in functionality from other applications where you need them. They provide a persistent sidebar for quick access, and they are context-aware -- meaning they can react to what you’re doing in context. For example, a CRM add-on can automatically surface details about a sales opportunity in response to an email based on the recipients or even the contents of the message itself.  &lt;/p&gt;&lt;p&gt;Up until recently, G Suite Add-ons leaned on Apps Script to build Add-ons, but choice is always a good thing, and in some cases you may want to use another scripting language.. So let’s talk about how to build Add-ons using additional runtimes:  &lt;/p&gt;&lt;p&gt;First, additional runtimes don't add any new capabilities to what you can build. What it does give you is more choice and flexibility in how you build Add-ons. We’ve heard feedback from developers that they would also like the option to use the tools and ecosystems they’ve already learned and invested in. And while there have always been ways to bridge Apps Script and other backends that expose APIs over HTTP/S, it isn't the cleanest of workarounds. .  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;So let’s look at a side by side comparison&lt;/strong&gt; of what it looks like to build an Add-on with alternate runtimes:  &lt;/p&gt;   &lt;pre class="prettyprint"&gt;function homePage() {&lt;br /&gt;  let card = CardService.newCardBuilder()&lt;br /&gt;    .addSection(CardService.newCardSection()&lt;br /&gt;      .addWidget(CardService.newTextParagraph()&lt;br /&gt;        .setText("Hello world"))&lt;br /&gt;    ).build();&lt;br /&gt;  return [card];&lt;br /&gt;}&lt;/pre&gt;  &lt;p&gt;Here’s the hello world equivalent of an Add-on in Apps Script. Since Apps Script is more akin to a serverless framework like GCF, the code is straightforward -- a function that takes an event and returns the UI to render. &lt;/p&gt;   &lt;pre class="prettyprint"&gt;// Hello world Node.js&lt;br /&gt;const express = require('express');&lt;br /&gt;const app = express();&lt;br /&gt;app.use(express.json());&lt;br /&gt;&lt;br /&gt;app.post('/home', (req, res) =&gt; {&lt;br /&gt;  let card = {&lt;br /&gt;    sections: [{&lt;br /&gt;      widgets: [{&lt;br /&gt;        textParagraph: {&lt;br /&gt;          text: 'Hello world'&lt;br /&gt;        }&lt;br /&gt;      }]&lt;br /&gt;    }]&lt;br /&gt;  };&lt;br /&gt;  res.json({&lt;br /&gt;    action: {&lt;br /&gt;      navigations: [{&lt;br /&gt;        pushCard:  card&lt;br /&gt;      }]&lt;br /&gt;    }&lt;br /&gt;  });&lt;br /&gt;}&lt;/pre&gt;  &lt;p&gt;This is the equivalent in NodeJS using express, a popular web server framework. It shows a little bit more of the underlying mechanics -- working with the HTTP request/response directly, starting the server, and so on. &lt;/p&gt;&lt;p&gt;The biggest difference is the card markup -- instead of using CardService, which under the covers builds a protobuf, we're using the JSON representation of the same thing.  &lt;/p&gt;&lt;pre class="prettyprint"&gt;function getCurrentMessage(event) {&lt;br /&gt;  var accessToken = event.messageMetadata.accessToken;&lt;br /&gt;  var messageId = event.messageMetadata.messageId;&lt;br /&gt;  GmailApp.setCurrentMessageAccessToken(accessToken);&lt;br /&gt;  return GmailApp.getMessageById(messageId);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Another area where things differ is accessing Google APis. In Apps Script, the clients are available in the global context -- the APIs mostly 'just work'.  Moving to Node requires a little more effort, but not much. &lt;/p&gt;&lt;p&gt;Apps Script is super easy here. In fact, normally we wouldn't bother with setting the token when using more permissive scopes as it's done for us by Apps Script. We're doing it here to take advantage of the per-message scope that the add-on framework provides. &lt;/p&gt;&lt;pre class="prettyprint"&gt;const { google } = require('googleapis');&lt;br /&gt;const { OAuth2Client } = require('google-auth-library');&lt;br /&gt;const gmail  = google.gmail({ version: 'v1' });&lt;br /&gt;&lt;br /&gt;async function fetchMessage(event) {&lt;br /&gt;    const accessToken = event.gmail.accessToken;&lt;br /&gt;    const auth = new OAuth2Client();&lt;br /&gt;    auth.setCredentials({access_token: accessToken});&lt;br /&gt;&lt;br /&gt;    const messageId = event.gmail.messageId;&lt;br /&gt;    const res = await gmail.users.messages.get({&lt;br /&gt;        id: messageId,&lt;br /&gt;        userId: 'me',&lt;br /&gt;        headers: { 'X-Goog-Gmail-Access-Token': event.gmail.accessToken },&lt;br /&gt;        auth&lt;br /&gt;    });&lt;br /&gt;    return res.data;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;The NodeJS version is very similar -- a little extra code to import the libraries, but otherwise the same -- extract the message ID and token from the request, set the credentials, then call the API to get the message contents. &lt;/p&gt;&lt;p&gt;&lt;h2&gt;Your Add-on, Your way&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;One of the biggest wins for alternate runtimes is the testability that comes with  using your favorite IDE, language, and framework--all of which helps you make developing add-ons more approachable.  &lt;/p&gt;&lt;p&gt;Both Apps Script and alternate runtimes for G Suite Add-ons have important places in building Add-ons. If you’re getting into building Add-ons or if you want to prototype more complex ones, Apps Script is a good choice.. If you write and maintain systems as your full time job, though, alternate runtimes allow you to use those tools to build your Add-on, letting you leverage work, code and processes that you’re already using. With alternate runtimes for G Suite Add-ons, we want to make it possible for you to extend G Suite in a way that fits your needs using whatever tools you're most comfortable with. &lt;/p&gt;&lt;p&gt;And don't just take our word for it, hear from one of our early access partners. Shailesh Matariya, CTO at Gfacility has this to say about alternate runtimes: "We're really happy to use alternate runtimes in G Suite Add-ons. The results have been great and it's much easier to maintain the code. Historically, it would take 4-5 seconds to load data in our Add-on, whereas with alternate runtimes it's closer to 1 second, and that time and efficiency really adds up. Not to mention performance, we're seeing about a 50% performance increase and thanks to this our users are able to manage their workflows with just a few clicks, without having to jump to another system and deal with the hassle of constant updates." &lt;/p&gt;&lt;p&gt;&lt;h2&gt;Next Steps&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;Read the &lt;a href="https://developers.google.com/gsuite/add-ons/guides/alternate-runtimes-overview"&gt;developer documentation&lt;/a&gt; for Alternate Runtimes and sign up for the &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSfK8Tv9VinvMhI_navvsjLbNTcmFr1Xr-bbK3iYVRaZI85IiQ/viewform"&gt;early access program&lt;/a&gt;.  &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/po04OFR_b44" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/5906976792140443217/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/08/building-g-suite-add-ons-with-your-favorite-tech-stack.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/5906976792140443217" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/5906976792140443217" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/po04OFR_b44/building-g-suite-add-ons-with-your-favorite-tech-stack.html" title="Building G Suite Add-ons with your favorite tech stack " /><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/-woNLs9iCd58/Xz6pdl-1JHI/AAAAAAAAJRE/JGfOlTEoIVklD7kMaYr4Hx2JohaDqr9BQCLcBGAsYHQ/s72-c/Untitled%2Bdesign%2B%25284%2529.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/08/building-g-suite-add-ons-with-your-favorite-tech-stack.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-6651499395200545236</id><published>2020-08-12T09:30:00.000-07:00</published><updated>2020-08-12T09:30:01.552-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chrome os" /><category scheme="http://www.blogger.com/atom/ns#" term="Chromebooks" /><category scheme="http://www.blogger.com/atom/ns#" term="Crostini" /><category scheme="http://www.blogger.com/atom/ns#" term="desktop" /><category scheme="http://www.blogger.com/atom/ns#" term="desktop apps" /><category scheme="http://www.blogger.com/atom/ns#" term="laptop apps" /><category scheme="http://www.blogger.com/atom/ns#" term="laptops" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux on Chrome OS" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux on Chromebooks" /><title type="text">ChromeOS.dev — A blueprint to build world-class apps and games for Chrome OS</title><content type="html">&lt;meta name="twitter:image" content="https://3.bp.blogspot.com/-uWXJQN6M8ek/XzL6IKb-ILI/AAAAAAAAJPA/D4SHfRklM5AMv65ysRgnA_LL4XMD7qK3gCLcBGAsYHQ/s1600/Blog%2Bpost_Hero%2Bbanner.png"&gt;&lt;img style="display:none" src="https://3.bp.blogspot.com/-uWXJQN6M8ek/XzL6IKb-ILI/AAAAAAAAJPA/D4SHfRklM5AMv65ysRgnA_LL4XMD7qK3gCLcBGAsYHQ/s1600/Blog%2Bpost_Hero%2Bbanner.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Iein Valdez, Head of Chrome OS Developer Relations&lt;/em&gt;&lt;/p&gt;&lt;a href="https://3.bp.blogspot.com/-uWXJQN6M8ek/XzL6IKb-ILI/AAAAAAAAJPA/D4SHfRklM5AMv65ysRgnA_LL4XMD7qK3gCLcBGAsYHQ/s1600/Blog%2Bpost_Hero%2Bbanner.png" imageanchor="1" &gt;&lt;img border="0" style="width:100%" src="https://3.bp.blogspot.com/-uWXJQN6M8ek/XzL6IKb-ILI/AAAAAAAAJPA/D4SHfRklM5AMv65ysRgnA_LL4XMD7qK3gCLcBGAsYHQ/s1600/Blog%2Bpost_Hero%2Bbanner.png" data-original-width="1600" data-original-height="481" /&gt;&lt;/a&gt;&lt;i&gt;This article originally appeared on ChromeOS.dev.&lt;/i&gt;&lt;p&gt;While people are spending more time at home than on the go, they’re relying increasingly on personal desktops and laptops to make everyday life easier. Whether they’re video-chatting with friends and family, discovering entertaining apps and games, multitasking at work, or pursuing a passion project, bigger screens and better performance have made all the difference. &lt;/p&gt;&lt;p&gt;This trend was clear from March through June 2020: Chromebook unit sales grew 127% year over year (YOY) while the rest of the U.S. notebook category increased by 40% YOY.&lt;sup&gt;1&lt;/sup&gt; Laptops have become crucial to people at home who want to use their favorite apps and games, like &lt;a href="https://play.google.com/store/apps/details?id=com.scopely.startrek&amp;hl=en_US"&gt;Star Trek™ Fleet Command&lt;/a&gt; and &lt;a href="https://play.google.com/store/apps/details?id=com.devolver.reignsGot&amp;hl=en_US"&gt;Reigns: Game of Thrones&lt;/a&gt; to enjoy action-packed adventure, &lt;a href="https://play.google.com/store/apps/details?id=com.calm.android&amp;hl=en_US"&gt;Calm&lt;/a&gt; to manage stress, or &lt;a href="https://play.google.com/store/apps/details?id=com.disney.disneyplus&amp;hl=en_US"&gt;Disney+&lt;/a&gt; to keep the whole family entertained. &lt;/p&gt;&lt;a href="https://2.bp.blogspot.com/-aJlWUS7129s/XzMRz_6P4dI/AAAAAAAAJPs/M8UQnVDiA2klXBp3msHDpEk-6D-Rl350ACLcBGAsYHQ/s1600/deviceyoy.gif" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-aJlWUS7129s/XzMRz_6P4dI/AAAAAAAAJPs/M8UQnVDiA2klXBp3msHDpEk-6D-Rl350ACLcBGAsYHQ/s1600/deviceyoy.gif" data-original-width="1477" data-original-height="744" alt="Device Sales YOY"/&gt;&lt;/a&gt;&lt;p&gt;To deliver app experiences that truly improve people’s lives, developers must be equipped with the right tools, resources, and best practices. That’s why we’re excited to introduce &lt;strong&gt;&lt;a href="https://chromeos.dev/en/"&gt;ChromeOS.dev &lt;/a&gt;&lt;/strong&gt;— a dedicated resource for technical developers, designers, product managers, and business leaders. &lt;/p&gt;&lt;p&gt;ChromeOS.dev, available in English and Spanish (with other languages coming soon), features the latest news, product announcements, technical documentation, and code samples from popular apps. Whether you’re a web, Android, or Linux developer who’s just getting started or a certified expert, you’ll find all the information you need on ChromeOS.dev. &lt;/p&gt;&lt;p&gt;Hear from our experts at Google and Chrome OS, as well as a variety of developers, as they share practical tips, benefits, and the challenges of creating app experiences for today’s users. Plus, you can review the updated &lt;a href="https://chromeos.dev/en/android/design"&gt;Chrome OS Layout and UX App Quality guidelines&lt;/a&gt; with helpful information on UI components, navigation, fonts, layouts, and everything that goes into creating world-class apps and games for Chrome OS. &lt;/p&gt;&lt;p&gt;Even better, as a &lt;a href="https://github.com/chromeos/chromeos.dev"&gt;fully open-source&lt;/a&gt; online destination, ChromeOS.dev is designed considering all the principles and methods for creating highly capable and reliable Progressive Web Apps (PWAs), ensuring developers always have quick, easy access to the information they need — even when they’re offline. &lt;/p&gt;&lt;a href="https://3.bp.blogspot.com/-DPouUK8To1E/XzMSRcCAfGI/AAAAAAAAJP0/-qHt1nFvTGgj0J42-mu64rOA16COksY-gCLcBGAsYHQ/s1600/chromeos.gif" imageanchor="1" &gt;&lt;img border="0" src="https://3.bp.blogspot.com/-DPouUK8To1E/XzMSRcCAfGI/AAAAAAAAJP0/-qHt1nFvTGgj0J42-mu64rOA16COksY-gCLcBGAsYHQ/s1600/chromeos.gif" data-original-width="800" data-original-height="419" /&gt;&lt;/a&gt;&lt;p&gt;Check out a few of the newest updates and improvements below, and be sure to install the ChromeOS.dev PWA on your device to stay on top of the latest information.  &lt;/p&gt;&lt;h2&gt;New features for Chrome OS developers&lt;/h2&gt;&lt;p&gt;Whether it’s developing Android, Linux, or web apps, every update on ChromeOS.dev is about making sure all developers can build better app experiences in a streamlined, easy-to-navigate environment. &lt;/p&gt;&lt;h3&gt;Customizable Linux Terminal&lt;/h3&gt;&lt;p&gt;The Linux (Beta) on Chrome OS Terminal now comes equipped with personalized features right out of the box, including:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Integrated tabs and shortcuts&lt;/b&gt;&lt;br&gt;Multitask with ease by using windows and tabs to manage different tasks and switch between multiple projects. You can also use familiar shortcuts such as Ctrl + T, Ctrl + W, and Ctrl + Tab to manage your tabs, or use the settings page to control if these keys should be used in your Terminal for apps like vim or emacs. &lt;li&gt;&lt;b&gt;Themes&lt;/b&gt;&lt;br&gt;Customize your Terminal by selecting a theme to switch up the background, frame, font, and cursor color. &lt;a href="https://2.bp.blogspot.com/-7b6WatO6EfA/XzM01pbtRwI/AAAAAAAAJQA/OcvDS48Iwc063kPy55FewRqpYHZ25RxEgCLcBGAsYHQ/s1600/linuxtheme.gif" imageanchor="1" &gt;&lt;img style="width:100%" border="0" src="https://2.bp.blogspot.com/-7b6WatO6EfA/XzM01pbtRwI/AAAAAAAAJQA/OcvDS48Iwc063kPy55FewRqpYHZ25RxEgCLcBGAsYHQ/s1600/linuxtheme.gif" data-original-width="800" data-original-height="450" /&gt;&lt;/a&gt;&lt;li&gt;&lt;b&gt;Redesigned Terminal settings&lt;/b&gt;&lt;br&gt;The settings tab has been reorganized to make it easier to customize all your Terminal options. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Developers can now start using these and other customizable features in the Terminal app. &lt;/p&gt;&lt;h3&gt;Android Emulator support&lt;/h3&gt;&lt;p&gt;&lt;a href="https://chromeos.dev/en/android-environment"&gt;Supported Chromebooks&lt;/a&gt; can now run a full version of the Android Emulator, which allows developers to test apps on any Android version and device without needing the actual hardware. Android app developers can simulate &lt;a href="https://developer.android.com/studio/run/emulator#extended"&gt;map locations&lt;/a&gt; and other sensor data to test how an app performs with various motions, orientations, and environmental conditions. With the Android Emulator support in Chrome OS, developers can optimize for different Android versions and devices — including tablets and&lt;a href="https://developer.android.com/guide/topics/ui/foldables#emulators"&gt; foldable smartphones&lt;/a&gt; — right from their Chromebook. &lt;/p&gt;&lt;h3&gt;Deploy apps directly to Chrome OS&lt;/h3&gt;&lt;p&gt;Building and testing Android apps on a single machine is simpler than ever. Now, developers who are running Chrome OS M81 and higher can&lt;a href="https://chromeos.dev/en/android-environment/deploying-apps"&gt; deploy and test apps directly on their Chromebooks&lt;/a&gt;  — no need to use developer mode or to connect different devices physically via USB. Combined with Android Emulator support, Chrome OS is equipped to support full Android development. &lt;/p&gt;&lt;h3&gt;Improved Project Wizard in Android Studio&lt;/h3&gt;&lt;p&gt;An updated &lt;a href="https://developer.android.com/studio/projects/templates#PrimaryDetailFlow"&gt;Primary/Detail Activity Template&lt;/a&gt; in Android Studio offers complete support to build experiences for larger screens, including Chromebooks, tablets, and foldables. This updated option provides multiple layouts for both phones and larger-screen devices as well as better keyboard/mouse scaffolding. This feature will be available in Android Studio 4.2 Canary 8. &lt;/p&gt;&lt;h3&gt;Updated support from Android lint checks&lt;/h3&gt;&lt;p&gt;We’ve improved the default checks in &lt;a href="https://developer.android.com/studio/write/lint"&gt;Android’s lint tool&lt;/a&gt; to help developers identify and correct common coding issues to improve their apps on larger screens, such as non-resizable and portrait-locked activities. This feature is currently available for testing in Canary channel. &lt;/p&gt;&lt;h2&gt;Unlock your app’s full potential with Chrome OS&lt;/h2&gt;&lt;p&gt;From day one, our goal has been to help developers at every skill level create simple, powerful, and secure app experiences for all platforms. As our new reality creates a greater need for helpful and engaging apps on large-screen devices, we’re working hard to streamline the process by making Chrome OS more versatile, customizable, and intuitive.  &lt;/p&gt;&lt;p&gt;Visit ChromeOS.dev and install it on your Chromebook to stay on top of the latest resources, product updates, thought-provoking insights, and inspiring success stories from Chrome OS developers worldwide. &lt;/p&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;hr&gt;&lt;/hr&gt;&lt;small&gt;&lt;p&gt;Sources:&lt;br&gt;&lt;sup&gt;1 &lt;/sup&gt;The NPD Group, Inc., U.S. Retail Tracking Service, Notebook Computers, based on unit sales, April–June 2020 and March–June 2020​. &lt;/p&gt;&lt;/small&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/pYTMj6ykeQw" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/6651499395200545236/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/08/introducing-chrome-os-dev.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/6651499395200545236" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/6651499395200545236" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/pYTMj6ykeQw/introducing-chrome-os-dev.html" title="ChromeOS.dev — A blueprint to build world-class apps and games for Chrome OS" /><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/-uWXJQN6M8ek/XzL6IKb-ILI/AAAAAAAAJPA/D4SHfRklM5AMv65ysRgnA_LL4XMD7qK3gCLcBGAsYHQ/s72-c/Blog%2Bpost_Hero%2Bbanner.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/08/introducing-chrome-os-dev.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-7524066219410789281</id><published>2020-08-06T17:44:00.001-07:00</published><updated>2020-08-06T17:44:48.802-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android TV" /><category scheme="http://www.blogger.com/atom/ns#" term="Cast Connect" /><title type="text">Introducing Cast Connect: a better way to integrate Google Cast directly into your Android TV apps</title><content type="html">&lt;meta name="twitter:image" content="https://4.bp.blogspot.com/-jZnpRo1KHrA/XyyTXFGGlnI/AAAAAAAAJOo/xXueBQl-gaUOI5O8WSbYAHOa0DqG5g1GQCLcBGAsYHQ/s1600/Screen%2BShot%2B2020-08-06%2Bat%2B4.33.35%2BPM.png"&gt;&lt;img style="display:none" src="https://4.bp.blogspot.com/-jZnpRo1KHrA/XyyTXFGGlnI/AAAAAAAAJOo/xXueBQl-gaUOI5O8WSbYAHOa0DqG5g1GQCLcBGAsYHQ/s1600/Screen%2BShot%2B2020-08-06%2Bat%2B4.33.35%2BPM.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Meher Vurimi, Product Manager&lt;/em&gt;&lt;p&gt;&lt;p&gt;For more than seven years, &lt;a href="https://developers.google.com/cast/"&gt;Google Cast&lt;/a&gt; has made it easy for users to enjoy your content on the big screen with Chromecast or a Chromecast built-in TV. We’re always looking to improve the casting experiences, which is why we’re excited to introduce &lt;a href="https://developers.google.com/cast/docs/android_tv_receiver"&gt;Cast Connect&lt;/a&gt;. This new feature allows users to cast directly to your Android TV app while still  allowing control from your sender app. &lt;/p&gt;&lt;p&gt;&lt;h2&gt;Why is this helpful?&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;With &lt;a href="https://developers.google.com/cast?hl=en"&gt;Google Cast&lt;/a&gt; your app is the remote control - helping users find, play, pause, seek, stop, and otherwise control what they’re watching. It enables you to extend video or audio from your Android, iOS, or Chrome app to a TV or sound system. With &lt;a href="https://developer.android.com/tv"&gt;Android TV&lt;/a&gt;, partners are able to build apps that let users experience your app's immersive content on their TV screen and control with a remote.  &lt;/p&gt;&lt;p&gt;With &lt;a href="https://developers.google.com/cast/docs/android_tv_receiver"&gt;Cast Connect&lt;/a&gt;, we are combining the best of both worlds; first, by prioritizing playback via the Android TV app to deliver a richer and more immersive experience, and second, by allowing the user to still control their experience from your Android, iOS or Chrome app, and now, also directly using their Android TV’s remote control. Cast Connect helps the user easily engage with other content directly on the TV instead of  only having to use your mobile device to browse for additional content.  &lt;/p&gt;&lt;a href="https://4.bp.blogspot.com/-2ZS4A6rR3e0/XyySUJOuHSI/AAAAAAAAJOg/tifV44XDdkwwfBz7dpyHvQllAxHt_ufLgCLcBGAsYHQ/s1600/STAN_CastConnect_v3%2B3.gif" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-2ZS4A6rR3e0/XyySUJOuHSI/AAAAAAAAJOg/tifV44XDdkwwfBz7dpyHvQllAxHt_ufLgCLcBGAsYHQ/s1600/STAN_CastConnect_v3%2B3.gif" data-original-width="957" data-original-height="537" /&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;Cast Connect User Journey on  Stan&lt;/p&gt;&lt;p&gt;&lt;h2&gt;Availability&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;We’re working closely with a number of partners on bringing Cast Connect to their Apps and, most recently, we’re excited to announce that &lt;a href="https://www.cbs.com/all-access/?gclsrc=aw.ds&amp;ds_rl=1275739&amp;ref=__iv_p_1_g_15527027287_w_kwd-170170805047_h_9032188_ii__d_c_v__n_g_c_247169935667_l__t__e__r__vi__&amp;ftag=AAM03c5ced&amp;vndid=google$null$null$cbs.all%20access&amp;gclid=EAIaIQobChMIpfDwga3L6gIVXx-tBh05RwXGEAAYASAAEgITYfD_BwE&amp;gclsrc=aw.ds&amp;_ivgu=5ed10151-d6e8-4681-b3d6-8b067c2b7fa2"&gt;CBS&lt;/a&gt; and our Australian SVOD partner, &lt;a href="https://www.stan.com.au/"&gt;Stan&lt;/a&gt; have launched Cast Connect. Starting today, the &lt;a href="https://developers.google.com/cast/docs/reference/atv_receiver/packages"&gt;Cast Connect library&lt;/a&gt; is available on Android, iOS and Chrome. To get started with adding Cast Connect to your existing framework, head over to the &lt;a href="https://developers.google.com/cast/docs/android_tv_receiver"&gt;Google Cast Developers&lt;/a&gt; site. Along the way, the Cast SDK team and the developer community are available to help you and answer questions on Stack Overflow by using the &lt;i&gt;&lt;strong&gt;google-cast-connect&lt;/strong&gt;&lt;/i&gt; tag. &lt;/p&gt;&lt;p&gt;Happy Casting! &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/vEv6btr1JWQ" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/7524066219410789281/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/08/introducing-cast-connect-android-tv.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/7524066219410789281" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/7524066219410789281" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/vEv6btr1JWQ/introducing-cast-connect-android-tv.html" title="Introducing Cast Connect: a better way to integrate Google Cast directly into your Android TV 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://4.bp.blogspot.com/-jZnpRo1KHrA/XyyTXFGGlnI/AAAAAAAAJOo/xXueBQl-gaUOI5O8WSbYAHOa0DqG5g1GQCLcBGAsYHQ/s72-c/Screen%2BShot%2B2020-08-06%2Bat%2B4.33.35%2BPM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/08/introducing-cast-connect-android-tv.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-1133622886183629912</id><published>2020-08-06T10:00:00.000-07:00</published><updated>2020-08-06T10:00:04.170-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI" /><category scheme="http://www.blogger.com/atom/ns#" term="Handwriting" /><category scheme="http://www.blogger.com/atom/ns#" term="ml" /><title type="text"> Digital Ink Recognition in ML Kit</title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-48oAveGVpcA/Xys1NiyAbVI/AAAAAAAAJN4/nv4b6Xeg8hI8AOBoVBX1HIkqShbYnU1cwCLcBGAsYHQ/s1600/digitalink.png"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-48oAveGVpcA/Xys1NiyAbVI/AAAAAAAAJN4/nv4b6Xeg8hI8AOBoVBX1HIkqShbYnU1cwCLcBGAsYHQ/s1600/digitalink.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Mircea Trăichioiu, Software Engineer, Handwriting Recognition&lt;/em&gt;&lt;p&gt;&lt;a href="https://1.bp.blogspot.com/-48oAveGVpcA/Xys1NiyAbVI/AAAAAAAAJN4/nv4b6Xeg8hI8AOBoVBX1HIkqShbYnU1cwCLcBGAsYHQ/s1600/digitalink.png" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-48oAveGVpcA/Xys1NiyAbVI/AAAAAAAAJN4/nv4b6Xeg8hI8AOBoVBX1HIkqShbYnU1cwCLcBGAsYHQ/s1600/digitalink.png" data-original-width="512" data-original-height="218" /&gt;&lt;/a&gt;&lt;p&gt;A month ago, we announced &lt;a href="https://android-developers.googleblog.com/2020/06/mlkit-on-device-machine-learning-solutions.html"&gt;changes to ML Kit to make mobile development with machine learning even easier&lt;/a&gt;. Today we're announcing the addition of the &lt;a href="https://developers.google.com/ml-kit/vision/digital-ink-recognition/"&gt;Digital Ink Recognition API&lt;/a&gt; on both &lt;a href="https://developers.google.com/ml-kit/vision/digital-ink-recognition/android"&gt;Android&lt;/a&gt; and &lt;a href="https://developers.google.com/ml-kit/vision/digital-ink-recognition/ios"&gt;iOS&lt;/a&gt; to allow developers to create apps where stylus and touch act as first class inputs. &lt;/p&gt;&lt;a href="https://2.bp.blogspot.com/-qD5pV_AqmBk/Xys1gNiaUNI/AAAAAAAAJOA/yJMzWZv-X-QJGRB32acX-Qt4vUFH2WUxgCLcBGAsYHQ/s1600/recognition.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-qD5pV_AqmBk/Xys1gNiaUNI/AAAAAAAAJOA/yJMzWZv-X-QJGRB32acX-Qt4vUFH2WUxgCLcBGAsYHQ/s1600/recognition.png" data-original-width="1600" data-original-height="533" /&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;Digital ink recognition: the latest addition to ML Kit’s APIs&lt;/p&gt;&lt;p&gt;Digital Ink Recognition is different from the existing Vision and Natural Language APIs in ML Kit, as it takes neither text nor images as input. Instead, it looks at the user's strokes on the screen and recognizes what they are writing or drawing. This is the same technology that powers handwriting recognition in Gboard - Google’s own keyboard app, which we described in detail in &lt;a href="https://ai.googleblog.com/2019/03/rnn-based-handwriting-recognition-in.html"&gt;a 2019 blog post&lt;/a&gt;. It's also the same underlying technology used in the &lt;a href="https://quickdraw.withgoogle.com/"&gt;Quick, Draw!&lt;/a&gt; and &lt;a href="https://experiments.withgoogle.com/autodraw"&gt;AutoDraw&lt;/a&gt; experiments. &lt;/p&gt; &lt;center&gt;&lt;a href="https://4.bp.blogspot.com/-gAUAWJrlumM/Xys3HTHMUPI/AAAAAAAAJOM/5OpUf_46jqQMYQWg2swfh4b3yOE9I6-0QCLcBGAsYHQ/s1600/handwritingdemo.gif" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-gAUAWJrlumM/Xys3HTHMUPI/AAAAAAAAJOM/5OpUf_46jqQMYQWg2swfh4b3yOE9I6-0QCLcBGAsYHQ/s1600/handwritingdemo.gif" data-original-width="288" data-original-height="342" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;p id="imgCaption"&gt;Handwriting input in Gboard&lt;/p&gt; &lt;center&gt;&lt;a href="https://1.bp.blogspot.com/-I4dWNhsyuDw/Xys3PJ2LVdI/AAAAAAAAJOQ/jzL0D5DMmxkHz1xOQ-mpPhfraC3JakkqgCLcBGAsYHQ/s1600/autodraw.gif" imageanchor="1" &gt;&lt;img border="0" style="width:75%" src="https://1.bp.blogspot.com/-I4dWNhsyuDw/Xys3PJ2LVdI/AAAAAAAAJOQ/jzL0D5DMmxkHz1xOQ-mpPhfraC3JakkqgCLcBGAsYHQ/s1600/autodraw.gif" data-original-width="1103" data-original-height="589" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;p id="imgCaption"&gt;Turning doodles into art with Autodraw&lt;/p&gt;  &lt;p&gt;With the new Digital Ink Recognition API, developers can now use this technology in their apps as well, for everything from letting users input text and figures with a finger or stylus to transcribing handwritten notes to make them searchable; all in near real time and entirely on-device. &lt;/p&gt;&lt;p&gt;&lt;h3&gt;Supports many languages and character sets&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;Digital Ink Recognition supports &lt;a href="https://developers.google.com/ml-kit/vision/digital-ink-recognition/base-models"&gt;300+ languages and 25+ writing systems&lt;/a&gt; including all major Latin languages, as well as Chinese, Japanese, Korean, Arabic, Cyrillic, and more. Classifiers parse written text into a string of characters &lt;/p&gt;&lt;p&gt;&lt;h3&gt;Recognizes shapes&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;Other classifiers can describe &lt;a href="https://developers.google.com/ml-kit/vision/digital-ink-recognition/base-models#shape_classifiers"&gt;shapes&lt;/a&gt;, such as drawings and emojis, by the class to which they belong (circle, square, happy face, etc). We currently support an autodraw sketch recognizer, an emoji recognizer, and a basic shape recognizer. &lt;/p&gt;&lt;p&gt;&lt;h3&gt;Works offline&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;Digital Ink Recognition API runs on-device and does not require a network connection. However, you must download one or more models before you can use a recognizer. Models are downloaded on demand and are around 20MB in size. Refer to the &lt;a href="https://developers.google.com/ml-kit/vision/digital-ink-recognition/android#managing_model_downloads"&gt;model download documentation&lt;/a&gt; for more information. &lt;/p&gt;&lt;p&gt;&lt;h3&gt;Runs fast&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;The time to perform a recognition call depends on the exact device and the size of the input stroke sequence.  On a typical mobile device recognizing a line of text takes about 100 ms.   &lt;/p&gt;&lt;p&gt;&lt;h3&gt;How to get started&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;If you would like to start using Digital Ink Recognition in your mobile app, head over to the &lt;a href="https://developers.google.com/ml-kit/vision/digital-ink-recognition"&gt;documentation&lt;/a&gt; or check out the sample apps for &lt;a href="https://github.com/googlesamples/mlkit/tree/master/android/digitalink"&gt;Android&lt;/a&gt; and &lt;a href="https://github.com/googlesamples/mlkit/tree/master/ios/quickstarts/digitalinkrecognition"&gt;iOS&lt;/a&gt; to see the API in action. For questions or feedback, please reach out to us through one of our &lt;a href="https://developers.google.com/ml-kit/community"&gt;community channels&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/dBFkmH-bawk" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/1133622886183629912/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/08/digital-ink-recognition-in-ml-kit.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/1133622886183629912" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/1133622886183629912" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/dBFkmH-bawk/digital-ink-recognition-in-ml-kit.html" title=" Digital Ink Recognition in ML Kit" /><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/-48oAveGVpcA/Xys1NiyAbVI/AAAAAAAAJN4/nv4b6Xeg8hI8AOBoVBX1HIkqShbYnU1cwCLcBGAsYHQ/s72-c/digitalink.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/08/digital-ink-recognition-in-ml-kit.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-7450440332078574132</id><published>2020-08-04T09:21:00.000-07:00</published><updated>2020-08-04T09:21:51.032-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google Cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="Serverless" /><category scheme="http://www.blogger.com/atom/ns#" term="Static Sites" /><title type="text"> Automatic Deployment of Hugo Sites on Firebase Hosting and Drafts on Cloud Run</title><content type="html">&lt;meta name="twitter:image" content="https://3.bp.blogspot.com/-dTUssho8JBU/XyikkAQSJhI/AAAAAAAAJL8/3nwp99zcL9ITwxkhOLtOuSwJ4rRY5fR_QCLcBGAsYHQ/s1600/hugostarterrepo.png"&gt;&lt;img style="display:none" src="https://3.bp.blogspot.com/-dTUssho8JBU/XyikkAQSJhI/AAAAAAAAJL8/3nwp99zcL9ITwxkhOLtOuSwJ4rRY5fR_QCLcBGAsYHQ/s1600/hugostarterrepo.png"&gt; &lt;p&gt;&lt;em&gt;Posted by &lt;a href="https://twitter.com/_jamesward?lang=en"&gt;James Ward&lt;/a&gt;, Developer Advocate&lt;/em&gt;&lt;p&gt; &lt;p&gt;Recently I completed the migration of &lt;a href="http://jamesward.com"&gt;my blog&lt;/a&gt; from Wordpress to Hugo and I wanted to take advantage of it now being a static site by hosting it on a Content Delivery Network (CDN).  With Hugo the source content is plain files instead of rows in a database.  In the case of my blog those files are in git on GitHub.  But when the source files change, the site needs to be regenerated and redeployed to the CDN.  Also, sometimes it is nice to have drafts available for review.  I setup a continuous delivery pipeline which deploys changes to my prod site on Firebase Hosting and drafts on Cloud Run, using Cloud Build.  Read on for instructions for how to set all this up. &lt;/p&gt;&lt;h2&gt;Step 1a) Setup A New Hugo Project&lt;/h2&gt;If you do not have an existing Hugo project you can create a &lt;a href="https://github.com/jamesward/hello-hugo/fork"&gt;GitHub copy&lt;/a&gt; (i.e. fork) of my Hugo starter repo: &lt;a href="https://3.bp.blogspot.com/-dTUssho8JBU/XyikkAQSJhI/AAAAAAAAJL8/3nwp99zcL9ITwxkhOLtOuSwJ4rRY5fR_QCLcBGAsYHQ/s1600/hugostarterrepo.png" imageanchor="1" &gt;&lt;img border="0" src="https://3.bp.blogspot.com/-dTUssho8JBU/XyikkAQSJhI/AAAAAAAAJL8/3nwp99zcL9ITwxkhOLtOuSwJ4rRY5fR_QCLcBGAsYHQ/s1600/hugostarterrepo.png" data-original-width="1040" data-original-height="806" /&gt;&lt;/a&gt;&lt;h2&gt;Step 1b) Setup Existing Hugo Project&lt;/h2&gt;&lt;p&gt;If you have an existing Hugo project you'll need to add some files to it: &lt;/p&gt;&lt;p&gt;&lt;code&gt;.firebaserc&lt;/code&gt;&lt;/p&gt;   &lt;pre class="prettyprint"&gt;{&lt;br /&gt;  "projects": {&lt;br /&gt;    "production": "hello-hugo"&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;  &lt;p&gt;&lt;code&gt;cloudbuild-draft.yaml&lt;/code&gt;&lt;/p&gt;   &lt;pre class="prettyprint"&gt;steps:&lt;br /&gt;- name: 'gcr.io/cloud-builders/git'&lt;br /&gt;  entrypoint: '/bin/sh'&lt;br /&gt;  args:&lt;br /&gt;  - '-c'&lt;br /&gt;  - |&lt;br /&gt;    # Get the theme git submodule&lt;br /&gt;    THEME_URL=$(git config -f .gitmodules --get-regexp '^submodule\..*\.url$' | awk '{ print $2 }')&lt;br /&gt;    THEME_DIR=$(git config -f .gitmodules --get-regexp '^submodule\..*\.path$' | awk '{ print $2 }')&lt;br /&gt;    rm -rf themes&lt;br /&gt;    git clone $$THEME_URL $$THEME_DIR&lt;br /&gt;&lt;br /&gt;- name: 'gcr.io/cloud-builders/docker'&lt;br /&gt;  entrypoint: '/bin/sh'&lt;br /&gt;  args:&lt;br /&gt;  - '-c'&lt;br /&gt;  - |&lt;br /&gt;    docker build -t gcr.io/$PROJECT_ID/$REPO_NAME-$BRANCH_NAME:$COMMIT_SHA -f - . &amp;lt;&amp;lt; EOF&lt;br /&gt;    FROM klakegg/hugo:latest&lt;br /&gt;    WORKDIR /workspace&lt;br /&gt;    COPY . /workspace&lt;br /&gt;    ENTRYPOINT hugo -D -p \$$PORT --bind \$$HUGO_BIND --renderToDisk --disableLiveReload --watch=false serve&lt;br /&gt;    EOF&lt;br /&gt;    docker push gcr.io/$PROJECT_ID/$REPO_NAME-$BRANCH_NAME:$COMMIT_SHA&lt;br /&gt;&lt;br /&gt;- name: 'gcr.io/cloud-builders/gcloud'&lt;br /&gt;  args:&lt;br /&gt;  - run&lt;br /&gt;  - deploy&lt;br /&gt;  - --image=gcr.io/$PROJECT_ID/$REPO_NAME-$BRANCH_NAME:$COMMIT_SHA&lt;br /&gt;  - --platform=managed&lt;br /&gt;  - --project=$PROJECT_ID&lt;br /&gt;  - --region=us-central1&lt;br /&gt;  - --memory=512Mi&lt;br /&gt;  - --allow-unauthenticated&lt;br /&gt;  - $REPO_NAME-$BRANCH_NAME&lt;/pre&gt;  &lt;p&gt;&lt;code&gt;cloudbuild.yaml&lt;/code&gt;&lt;/p&gt;   &lt;pre class="prettyprint"&gt;steps:&lt;br /&gt;- name: 'gcr.io/cloud-builders/git'&lt;br /&gt;  entrypoint: '/bin/sh'&lt;br /&gt;  args:&lt;br /&gt;  - '-c'&lt;br /&gt;  - |&lt;br /&gt;    # Get the theme git submodule&lt;br /&gt;    THEME_URL=$(git config -f .gitmodules --get-regexp '^submodule\..*\.url$' | awk '{ print $2 }')&lt;br /&gt;    THEME_DIR=$(git config -f .gitmodules --get-regexp '^submodule\..*\.path$' | awk '{ print $2 }')&lt;br /&gt;    rm -rf themes&lt;br /&gt;    git clone $$THEME_URL $$THEME_DIR&lt;br /&gt;&lt;br /&gt;- name: 'gcr.io/cloud-builders/curl'&lt;br /&gt;  entrypoint: '/bin/sh'&lt;br /&gt;  args:&lt;br /&gt;  - '-c'&lt;br /&gt;  - |&lt;br /&gt;    curl -sL https://github.com/gohugoio/hugo/releases/download/v0.69.2/hugo_0.69.2_Linux-64bit.tar.gz | tar -zxv&lt;br /&gt;    ./hugo&lt;br /&gt;&lt;br /&gt;- name: 'gcr.io/cloud-builders/wget'&lt;br /&gt;  entrypoint: '/bin/sh'&lt;br /&gt;  args:&lt;br /&gt;  - '-c'&lt;br /&gt;  - |&lt;br /&gt;    # Get firebase CLI&lt;br /&gt;    wget -O firebase https://firebase.tools/bin/linux/latest&lt;br /&gt;    chmod +x firebase&lt;br /&gt;    # Deploy site&lt;br /&gt;    ./firebase deploy --project=$PROJECT_ID --only=hosting&lt;/pre&gt;  &lt;p&gt;&lt;code&gt;firebase.json&lt;/code&gt;&lt;/p&gt;   &lt;pre class="prettyprint"&gt;{&lt;br /&gt;  "hosting": {&lt;br /&gt;    "public": "public"&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br&gt;&lt;/br&gt;&lt;h2&gt;Step 2) Setup Cloud Build Triggers&lt;/h2&gt;In the Google Cloud Build console, &lt;a href="https://console.cloud.google.com/cloud-build/triggers/connect"&gt;connect to your newly forked repo&lt;/a&gt;:  &lt;a href="https://3.bp.blogspot.com/-WsgNBXJGTrU/XyimivpxIpI/AAAAAAAAJMI/h0vFwC4Pd844vgVoAU24M8bimyUER_17gCLcBGAsYHQ/s1600/newlyforkedrepo.png" imageanchor="1" &gt;&lt;img border="0" src="https://3.bp.blogspot.com/-WsgNBXJGTrU/XyimivpxIpI/AAAAAAAAJMI/h0vFwC4Pd844vgVoAU24M8bimyUER_17gCLcBGAsYHQ/s1600/newlyforkedrepo.png" data-original-width="1040" data-original-height="806" /&gt;&lt;/a&gt; Select the newly forked repo:  &lt;a href="https://1.bp.blogspot.com/-UfsIwy8ecno/XyimqWZJHWI/AAAAAAAAJMM/t7PXafKqElghnHo6N3Autz9rx7AIzORCACLcBGAsYHQ/s1600/selectthenewlyforkedrepo.png" imageanchor="1" &gt;&lt;img border="0" src="https://1.bp.blogspot.com/-UfsIwy8ecno/XyimqWZJHWI/AAAAAAAAJMM/t7PXafKqElghnHo6N3Autz9rx7AIzORCACLcBGAsYHQ/s1600/selectthenewlyforkedrepo.png" data-original-width="1040" data-original-height="806" /&gt;&lt;/a&gt; Create the default push trigger:  &lt;a href="https://4.bp.blogspot.com/-HTx8QE6X2Dc/XyisiDlJpuI/AAAAAAAAJNo/v3XruX4tDQwd5AumtVHSag85wYylE-lNACLcBGAsYHQ/s1600/pasted%2Bimage%2B0.png" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-HTx8QE6X2Dc/XyisiDlJpuI/AAAAAAAAJNo/v3XruX4tDQwd5AumtVHSag85wYylE-lNACLcBGAsYHQ/s1600/pasted%2Bimage%2B0.png" data-original-width="1040" data-original-height="806" /&gt;&lt;/a&gt;Edit the new trigger: &lt;a href="https://4.bp.blogspot.com/-xZx_vjXKxoY/Xyim7fV0SBI/AAAAAAAAJMc/Lx19fESrcxY9kaJFgmYGKRLGDvwysF4AACLcBGAsYHQ/s1600/editnewtrigger.png" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-xZx_vjXKxoY/Xyim7fV0SBI/AAAAAAAAJMc/Lx19fESrcxY9kaJFgmYGKRLGDvwysF4AACLcBGAsYHQ/s1600/editnewtrigger.png" data-original-width="1040" data-original-height="806" /&gt;&lt;/a&gt; Set the trigger to only fire on changes to the &lt;code&gt;^master$&lt;/code&gt; branch:  &lt;a href="https://3.bp.blogspot.com/-ZJTCaEHfVhA/XyinAef77CI/AAAAAAAAJMg/CFRr6-plhhwsbi3QXsmBg9tlE1e3ivRpACLcBGAsYHQ/s1600/triggerbranch.png" imageanchor="1" &gt;&lt;img border="0" src="https://3.bp.blogspot.com/-ZJTCaEHfVhA/XyinAef77CI/AAAAAAAAJMg/CFRr6-plhhwsbi3QXsmBg9tlE1e3ivRpACLcBGAsYHQ/s1600/triggerbranch.png" data-original-width="1040" data-original-height="806" /&gt;&lt;/a&gt; Create a new trigger:  &lt;a href="https://3.bp.blogspot.com/-MjewTREGSpU/XyinEx05eoI/AAAAAAAAJMk/g-KWZJNLq4s115uUllqmit_Ei55Ox0nlwCLcBGAsYHQ/s1600/createnewtrigger.png" imageanchor="1" &gt;&lt;img border="0" src="https://3.bp.blogspot.com/-MjewTREGSpU/XyinEx05eoI/AAAAAAAAJMk/g-KWZJNLq4s115uUllqmit_Ei55Ox0nlwCLcBGAsYHQ/s1600/createnewtrigger.png" data-original-width="1040" data-original-height="806" /&gt;&lt;/a&gt; Give it a name like &lt;code&gt;drafts-trigger&lt;/code&gt;, specify the branch selector as &lt;code&gt;.*&lt;/code&gt; (i.e. any branch), and the build configuration file type to "Cloud Build configuration file" with a value of &lt;code&gt;cloudbuild-draft.yaml&lt;/code&gt; &lt;a href="https://4.bp.blogspot.com/-0q0lbra3mlo/XyindT2AwkI/AAAAAAAAJM4/46Vq0eRSr-MO7MtwlgEComgxYUEF0oXFwCLcBGAsYHQ/s1600/giveitaname.png" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-0q0lbra3mlo/XyindT2AwkI/AAAAAAAAJM4/46Vq0eRSr-MO7MtwlgEComgxYUEF0oXFwCLcBGAsYHQ/s1600/giveitaname.png" data-original-width="1040" data-original-height="806" /&gt;&lt;/a&gt; Setup permissions for the Cloud Build process to manage Cloud Run and Firebase Hosting by visiting the IAM management page, locate the member with the name ending with &lt;code&gt;@cloudbuild.gserviceaccount.com&lt;/code&gt;, and select the "pencil" / edit button:  &lt;a href="https://1.bp.blogspot.com/-TNxjJQy_zoM/XyinnEdk8MI/AAAAAAAAJM8/g3azkrzM9hkKJdcFtVs6yQzQsvlmRwRYwCLcBGAsYHQ/s1600/setuppermissions.png" imageanchor="1" &gt;&lt;img border="0" src="https://1.bp.blogspot.com/-TNxjJQy_zoM/XyinnEdk8MI/AAAAAAAAJM8/g3azkrzM9hkKJdcFtVs6yQzQsvlmRwRYwCLcBGAsYHQ/s1600/setuppermissions.png" data-original-width="1040" data-original-height="804" /&gt;&lt;/a&gt; Add a role for "Cloud Run Admin" and another for "Firebase Hosting Admin":  &lt;a href="https://1.bp.blogspot.com/-Ees8pQRhljI/XyinrJJFlGI/AAAAAAAAJNA/GYs2QjgGK54cWOrHtODIyrRRLdIoFU1QgCLcBGAsYHQ/s1600/addrole.png" imageanchor="1" &gt;&lt;img border="0" src="https://1.bp.blogspot.com/-Ees8pQRhljI/XyinrJJFlGI/AAAAAAAAJNA/GYs2QjgGK54cWOrHtODIyrRRLdIoFU1QgCLcBGAsYHQ/s1600/addrole.png" data-original-width="1040" data-original-height="804" /&gt;&lt;/a&gt; Your default "prod" trigger isn't read to test yet, but you can test the drafts on Cloud Run by going back to &lt;a href="https://console.cloud.google.com/cloud-build/triggers"&gt;the Cloud Build Triggers page&lt;/a&gt;, and clicking the "Run Trigger" button on the "drafts-trigger" line.  Check the build logs by finding the build in the &lt;a href="https://console.cloud.google.com/cloud-build/builds"&gt;Cloud Build History&lt;/a&gt;.  Once the build completes &lt;a href="https://console.cloud.google.com/run"&gt;visit the Cloud Run console&lt;/a&gt; to find your newly created service which hosts the drafts version of your new blog.  Note that the service name includes the branch so that you can see drafts from different branches. &lt;br&gt;&lt;/br&gt;&lt;h2&gt;Step 3) Setup Firebase Hosting&lt;/h2&gt;To setup your production / CDN'd site, &lt;a href="https://console.firebase.google.com"&gt;login to the firebase console&lt;/a&gt; and select your project: &lt;a href="https://4.bp.blogspot.com/-Ar6RW2zlR1w/XyipsG-5QwI/AAAAAAAAJNU/NGeQ4ved7SsW6mcjwWxDVhYs54l49ka6wCLcBGAsYHQ/s1600/firebasehosting.png" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-Ar6RW2zlR1w/XyipsG-5QwI/AAAAAAAAJNU/NGeQ4ved7SsW6mcjwWxDVhYs54l49ka6wCLcBGAsYHQ/s1600/firebasehosting.png" data-original-width="1040" data-original-height="804" /&gt;&lt;/a&gt;&lt;p&gt;Now you'll need your project id, which can be found in the URL on the Firebase Project Overview page.  The URL for my project is: &lt;/p&gt;&lt;p&gt;&lt;a href="https://console.firebase.google.com/project/jw-demo/overview"&gt;console.firebase.google.com/project/jw-demo/overview&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Which means my project id is: jw-demo &lt;/p&gt;&lt;p&gt;Now copy your project id go into your GitHub fork, select the &lt;code&gt;.firebaserc&lt;/code&gt; file and click the "pencil" / edit button: &lt;/p&gt;&lt;a href="https://4.bp.blogspot.com/-9PNXSkk0vYQ/XyiqtWp7AvI/AAAAAAAAJNc/GhBuKHyQEa0nvwtXAweoKg0O-GSy70G1QCLcBGAsYHQ/s1600/hellohugo.png" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-9PNXSkk0vYQ/XyiqtWp7AvI/AAAAAAAAJNc/GhBuKHyQEa0nvwtXAweoKg0O-GSy70G1QCLcBGAsYHQ/s1600/hellohugo.png" data-original-width="1040" data-original-height="804" /&gt;&lt;/a&gt;&lt;p&gt;Replace the &lt;code&gt;hello-hugo&lt;/code&gt; string with your project id and commit the changes.  This commit will trigger two new builds, one for the production site and one for the drafts site on Cloud Run.  You can check the status of those builds on the &lt;a href="https://console.cloud.google.com/cloud-build/builds"&gt;Cloud Build History page&lt;/a&gt;.  Once the default trigger (the one for Firebase hosting) finishes, check out your Hugo site running on Firebase Hosting by navigating to (replacing YOUR_PROJECT_ID with the project id you used above): https://YOUR_PROJECT_ID.web.app/ &lt;/p&gt;&lt;p&gt;Your prod and drafts sites are now automatically deploying on new commits! &lt;/p&gt;&lt;h2&gt;Step 4) (Optional) Change Hugo Theme&lt;/h2&gt;&lt;p&gt;There are &lt;a href="https://themes.gohugo.io/"&gt;many themes for Hugo&lt;/a&gt; and they are easy to change.  Typically themes are pulled into Hugo sites using git submodules.  To change the theme, edit your &lt;code&gt;.gitmodules&lt;/code&gt; file and set the subdirectories and url.  As an example, here is the content when using the mainroad theme: &lt;/p&gt;   &lt;pre class="prettyprint"&gt;[submodule "themes/mainroad"]&lt;br /&gt; path = themes/mainroad&lt;br /&gt; url = https://github.com/vimux/mainroad.git&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;You will also need to change the &lt;code&gt;theme&lt;/code&gt; value in your &lt;code&gt;config.toml&lt;/code&gt; file to match the directory name in the &lt;code&gt;themes&lt;/code&gt; directory.  For example: &lt;/p&gt;   &lt;pre class="prettyprint"&gt;theme = "mainroad"&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Note: At the time of writing this, Cloud Build does not clone git submodules so the &lt;code&gt;cloudbuild.yaml&lt;/code&gt; &lt;a href="https://github.com/jamesward/hello-hugo/blob/master/cloudbuild.yaml#L2-L11"&gt;does the cloning&lt;/a&gt; instead. &lt;/p&gt; &lt;h2&gt;Step 5) (Optional) Setup Local Editing&lt;/h2&gt;&lt;p&gt;To setup local editing you will first need to clone your fork.  You can do this with the &lt;a href="https://desktop.github.com/"&gt;GitHub desktop app&lt;/a&gt;.  Or from the command line: &lt;/p&gt;  &lt;pre class="prettyprint"&gt;git clone --recurse-submodules https://github.com/USER/REPO.git&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Once you have the files locally, &lt;a href="https://gohugo.io/getting-started/installing/"&gt;install Hugo&lt;/a&gt;, and from inside the repo's directory, run: &lt;/p&gt;   &lt;pre class="prettyprint"&gt;hugo -D serve&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;This will serve the drafts in the site.  You can check out the site at: localhost:1313 &lt;/p&gt;&lt;p&gt;Committing non-draft changes to master and pushing those changes to GitHub will kick off the build which will deploy them on your prod site.  Committing draft to any branch will kick off the build which will deploy them on a Cloud Run site. &lt;/p&gt;&lt;p&gt;Hopefully that all helps you with hosting your Hugo sites!  &lt;a href="https://github.com/jamesward/hello-hugo/issues"&gt;Let me know if you run into any problems&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/IYUfvbF-U_I" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/7450440332078574132/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/08/automatic-deployment-of-hugo-sites-on-firebase-hosting.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/7450440332078574132" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/7450440332078574132" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/IYUfvbF-U_I/automatic-deployment-of-hugo-sites-on-firebase-hosting.html" title=" Automatic Deployment of Hugo Sites on Firebase Hosting and Drafts on Cloud Run" /><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/-dTUssho8JBU/XyikkAQSJhI/AAAAAAAAJL8/3nwp99zcL9ITwxkhOLtOuSwJ4rRY5fR_QCLcBGAsYHQ/s72-c/hugostarterrepo.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/08/automatic-deployment-of-hugo-sites-on-firebase-hosting.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-2739920198423121654</id><published>2020-07-23T11:02:00.001-07:00</published><updated>2020-07-23T11:02:50.390-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer student clubs" /><category scheme="http://www.blogger.com/atom/ns#" term="dsc" /><title type="text"> Meet the global students solving local problems with code</title><content type="html">&lt;meta name="twitter:image" content="https://2.bp.blogspot.com/-vAVvaZWGGlQ/Xxig91y_LnI/AAAAAAAAJLA/CzwJvEtBAGcG9wrfngFTsOPnjS_ET0UlACLcBGAsYHQ/s1600/DSC%2BWinners.jpg"&gt;&lt;img style="display:none" src="https://2.bp.blogspot.com/-vAVvaZWGGlQ/Xxig91y_LnI/AAAAAAAAJLA/CzwJvEtBAGcG9wrfngFTsOPnjS_ET0UlACLcBGAsYHQ/s1600/DSC%2BWinners.jpg"&gt; &lt;p&gt;&lt;em&gt;Posted by Erica Hanson, Developer Student Clubs Program Manager, Google&lt;/em&gt;&lt;p&gt;&lt;a href="https://2.bp.blogspot.com/-vAVvaZWGGlQ/Xxig91y_LnI/AAAAAAAAJLA/CzwJvEtBAGcG9wrfngFTsOPnjS_ET0UlACLcBGAsYHQ/s1600/DSC%2BWinners.jpg" imageanchor="1" &gt;&lt;img border="0" id="imgFull" src="https://2.bp.blogspot.com/-vAVvaZWGGlQ/Xxig91y_LnI/AAAAAAAAJLA/CzwJvEtBAGcG9wrfngFTsOPnjS_ET0UlACLcBGAsYHQ/s1600/DSC%2BWinners.jpg" data-original-width="1575" data-original-height="1472" /&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="https://developers.google.com/community/dsc"&gt;Google Developer Student Clubs&lt;/a&gt; (DSC) are university based community groups for students who are interested in Google’s developer technologies. Each year, Google puts a call out to the entire DSC global community, asking students to answer one simple question: Can you solve a local problem in your community by building with Google’s technologies?   &lt;/p&gt;&lt;p&gt;This event is known as the DSC Solution Challenge and this year’s winners went above and beyond to answer the call - so much so that we couldn’t just pick one winner, we chose 10.  &lt;/p&gt;&lt;p&gt;While we initially thought we were the ones sending out the challenge, these young developers instead flipped the script back on us. Through their innovative designs and uncompromised creative spirit, they’ve pushed our team here at Google to stretch our thinking about how developers can build a more hopeful future.  &lt;/p&gt;&lt;p&gt;With this, we’re welcoming these passionate students and anyone interested to the virtual Solution Challenge Demo Day on August 26th, where the students will present their winning ideas in detail.  &lt;/p&gt;&lt;p&gt;Ahead of the event, learn more about this incredible group of thinkers and their solutions below.  &lt;/p&gt; &lt;h2&gt;1. FreeSpeak - Technical University of Munich, Germany&lt;/h2&gt;&lt;p&gt;Maria Pospelova, Wei Wen Qing, and Almo Gunadya Sutedjo developed FreeSpeak, a software that uses modern machine learning and video/audio analyzing tools by leveraging TensorFlow and Google Cloud’s Natural Language to analyze presentations and give individual feedback and tips as a “virtual coach.”   &lt;/p&gt;&lt;iframe id="imgFull" width="560" height="315" src="https://www.youtube.com/embed/xYmyODdRSCw" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;center&gt;&lt;p&gt;&lt;i&gt;“We’ve loved connecting with talented people from around the world and exchanging ideas with them. We see that we can provide impact not only to our local neighborhood, but also around the world and help people. This motivates us to work a lot harder.”&lt;/i&gt;&lt;/p&gt;&lt;/center&gt; &lt;h2&gt;2. CoronaAI - University of California Berkeley, United States&lt;/h2&gt;&lt;p&gt;Anushka Purohit, Anupam Tiwari, and Neel Desai created CoronaAI, a TensorFlow based technology that helps examine COVID-19 data. Specifically, the device is made up of a band worn around a patient's chest that uses electrodes to extract real-time images of the lungs. From here, the band connects to a monitor that allows doctors to examine patients in real time without being near them.&lt;/p&gt;&lt;iframe width="560" height="315" id="imgFull" src="https://www.youtube.com/embed/TvKnGL0Nr6w" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;center&gt;&lt;p&gt;&lt;i&gt;“We're honestly huge fans of the Google Cloud Platform because of its simplicity, familiarity, and the large number of resources available. Developing this project was the best learning experience.”&lt;/i&gt;&lt;/p&gt;&lt;/center&gt; &lt;h2&gt;3. Worthy Walk - National University of Computer &amp; Emerging Sciences, Pakistan&lt;/h2&gt;&lt;p&gt;Syed Moazzam Maqsood, Krinza Momin, Muhammad Ahmed Gul, and Hussain Zuhair built &lt;a href="http://www.worthywalkapp.com/"&gt;Worthy Walk&lt;/a&gt;: an Android and iOS app that provides its users a platform to achieve health goals by walking, running, or cycling. To encourage users, Worthy Walk provides an inbuilt currency called Knubs that can be redeemed as discounts from local businesses, shops, and startups. &lt;/p&gt;&lt;iframe id="imgFull" width="560" height="315" src="https://www.youtube.com/embed/eKhv4dd_LGo" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;center&gt;&lt;p&gt;&lt;i&gt;“Being a part of DSC means friendship - sharing knowledge and resources - all while developing a social infrastructure that gives people the power to build a global community that works for all of us.”&lt;/i&gt;&lt;/p&gt;&lt;/center&gt; &lt;h2&gt;4. Simhae : Deep sea of mind - Soonchunhyang University, South Korea&lt;/h2&gt;&lt;p&gt;Yuna Kim, Young hoon Jo, Jeong yoon Joo, and Sangbeom Hwang created Simhae, a platform created with Flutter and Google Cloud that allows users to access basic information and activities to inspire them to attend self-help gatherings run by suicide prevention centers. They believe that this experience is an important point that can lead to solidarity of suicide survivors. &lt;/p&gt;&lt;iframe id="imgFull" width="560" height="315" src="https://www.youtube.com/embed/UIexXnfIUqM" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;center&gt;&lt;p&gt;&lt;i&gt;“It's so nice to have a chance to meet more diverse people. Through these communities, I can make up for my shortcomings and share more information with those who have different experiences than me - all while developing my own potential.”&lt;/i&gt;&lt;/p&gt;&lt;/center&gt; &lt;h2&gt;5. Emergency Response Assistance - University of Education, Winneba (College of Technology Kumasi), Ghana&lt;/h2&gt;&lt;p&gt;Elvis Antwi Sarfo, Yaw Barnieh Anane, Ampomah Ata Acheampong Prince, and Perditha Abena Acheampong constructed Emergency Response Assistance, an Android application to help health authorities post the latest first aid steps to educate the public and also help the victims report emergency cases with a click of a button. The Emergency Response team will also be able to track the exact location of the victims on the map. &lt;/p&gt;&lt;iframe id="imgFull" width="560" height="315" src="https://www.youtube.com/embed/oLjyFD3B5eo" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;center&gt;&lt;p&gt;&lt;i&gt;“DSC is not just a community, it’s an inspiration. It’s outstanding how the platform has brought all of these students, lecturers, and teaching assistants, who are all so passionate about using tech to solve problems, together.”&lt;/i&gt;&lt;/p&gt;&lt;/center&gt; &lt;h2&gt;6. Tulibot - Politeknik Elektronika Negeri Surabaya, Indonesia&lt;/h2&gt;&lt;p&gt;Muhammad Alan Nur, Pravasta Caraka Bramastagiri, Eva Rahmadanti, and Namira Rizqi Annisa created Tulibot: an integrated assistive technology, built with the Google Speech API, that’s made to bridge communication between deaf people and society. The group made two main devices, Smart Glasses and Smart Gloves. Smart Glasses help with communication for the hearing impaired by showing real time answers directly on the glasses from its interlocutors. Smart Gloves transcribe gesture input into audio output by implementing gesture to text technology.&lt;/p&gt; &lt;iframe width="560" id="imgFull" height="315" src="https://www.youtube.com/embed/CUNms3gso-o" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt; &lt;center&gt;&lt;p&gt;&lt;i&gt;“This has been an amazing opportunity for us because with this challenge, we can learn many things like coding, management, business, and more. The special materials we can get directly from Google is so helpful.”&lt;/i&gt;&lt;/p&gt;&lt;/center&gt; &lt;h2&gt;7. Picare - The Hong Kong University of Science &amp; Technology,  Hong Kong&lt;/h2&gt;&lt;p&gt;Sze Yuk Yin, Kwok Ue Nam, Ng Chi Ting, Chong Cheuk Hei, and Silver Ng developed Picare, a healthcare matching platform built with Flutter and Google Machine Learning to help elderly people in Hong Kong. Users will be able to use the app to research, schedule, and pay caregivers directly through the app. &lt;/p&gt;&lt;iframe id="imgFull" width="560" height="315" src="https://www.youtube.com/embed/uM5vLz4qzoY" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;center&gt;&lt;p&gt;&lt;i&gt;“Our community hosted several workshops ranging from design thinking to coding techniques. This boosted our development by introducing us to various state-of-the-art technologies, such as Machine Learning and Cloud computing, which helped us reach our development goals.” &lt;/i&gt;&lt;/p&gt;&lt;/center&gt; &lt;h2&gt;8. Shareapy - Ho Chi Minh City University of Technology, Vietnam&lt;/h2&gt;&lt;p&gt;Vo Ngoc Khanh Linh, Tran Lam Bao Khang, Nguyen Dang Huy, and Nguyen Thanh Nhan built Shareapy: a digitized support group app created with Android that helps bring people together who share similar problems regardless of their age, gender, religion, financial status, etc. After conducting an extremely rigorous user testing phase, this team had the chance to see all that TensorFlow and Firebase could do.  &lt;/p&gt;&lt;iframe width="560" id="imgFull" height="315" src="https://www.youtube.com/embed/k1bO4kyW6is" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;center&gt;&lt;p&gt;&lt;i&gt;“My team loves Firebase so much. One of our team members now uses it to help do some of his homework problems.”&lt;/i&gt;&lt;/p&gt;&lt;/center&gt; &lt;h2&gt;9. Capstone - Midlands State University, Zimbabwe&lt;/h2&gt;&lt;p&gt;Victor Chinyavada, Marvellous Humphery Chirunga, and Lavender Zandile Tshuma started Capstone, a service hosted on the Google Cloud Platform that aims to combat plagiarism among students, authors, and researchers. In particular, the technology aims to develop more effective algorithms that will incorporate the latest in big data, artificial intelligence, and data mining.  As a team, the group bonded over applying technologies from Google to their project, but their real takeaway was working together to solve problems. &lt;/p&gt;&lt;iframe id="imgFull" width="560" height="315" src="https://www.youtube.com/embed/AEV1_y-XUM8" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;center&gt;&lt;p&gt;&lt;i&gt;“To submit our project on time, we started all night hackathons, which helped us finish all of our work while having fun and getting to know each other better.”&lt;/i&gt;&lt;/p&gt;&lt;/center&gt; &lt;h2&gt;10. MiCamp - Dr. B.R. Ambedkar National Institute of Technology,  India&lt;/h2&gt;&lt;p&gt;Praveen Agrawal built MiCamp, an Android app that holds all the info students from his campus need. Features include a calendar with upcoming campus events, student profiles, a used book marketplace, hostel management, online food ordering, and more. As a team of one, Praveen needed to speed up his development, so he applied his new knowledge of Flutter to finish.&lt;/p&gt;&lt;iframe id="imgFull" width="560" height="315" src="https://www.youtube.com/embed/95YLHE6m2as" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;center&gt;&lt;p&gt;&lt;i&gt;“I’d heard of technologies like Flutter, but never used them until joining DSC; they inspired us to use those technologies, which really improved my solution.”&lt;/i&gt;&lt;/p&gt;&lt;/center&gt;&lt;center&gt;________________________&lt;/center&gt;&lt;br&gt;&lt;/br&gt;Want to learn more about Developer Student Clubs? Join a club near you, &lt;a href="https://developers.google.com/community/dsc/clubs"&gt;here&lt;/a&gt; and stay tuned for our upcoming virtual Solution Challenge Demo Day on August 26th, &lt;a href="https://events.withgoogle.com/dsc-solution-challenge/"&gt;here&lt;/a&gt;.  &lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/4RGzRKcKdyc" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/2739920198423121654/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/07/dsc-global-students-solutions-with-code.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/2739920198423121654" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/2739920198423121654" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/4RGzRKcKdyc/dsc-global-students-solutions-with-code.html" title=" Meet the global students solving local problems with code" /><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/-vAVvaZWGGlQ/Xxig91y_LnI/AAAAAAAAJLA/CzwJvEtBAGcG9wrfngFTsOPnjS_ET0UlACLcBGAsYHQ/s72-c/DSC%2BWinners.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/07/dsc-global-students-solutions-with-code.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-3737588689271277163</id><published>2020-07-22T11:04:00.000-07:00</published><updated>2020-07-22T11:04:00.512-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" /><category scheme="http://www.blogger.com/atom/ns#" term="TensorFlow Lite" /><title type="text">Summer updates from Coral</title><content type="html">&lt;meta name="twitter:image" content="https://4.bp.blogspot.com/-7hpTQLwV7FY/XxdLMJ-YUbI/AAAAAAAAJKc/pD8jCobVq4Ao31abPxEh3Lza1Q5zM642QCLcBGAsYHQ/s1600/Coral_Summer_2020_v3.png"&gt;&lt;img style="display:none" src="https://4.bp.blogspot.com/-7hpTQLwV7FY/XxdLMJ-YUbI/AAAAAAAAJKc/pD8jCobVq4Ao31abPxEh3Lza1Q5zM642QCLcBGAsYHQ/s1600/Coral_Summer_2020_v3.png"&gt; &lt;p&gt;&lt;em&gt;Posted by the &lt;a href="http://coral.ai"&gt;Coral Team&lt;/a&gt;&lt;/em&gt;&lt;p&gt; &lt;a href="https://4.bp.blogspot.com/-7hpTQLwV7FY/XxdLMJ-YUbI/AAAAAAAAJKc/pD8jCobVq4Ao31abPxEh3Lza1Q5zM642QCLcBGAsYHQ/s1600/Coral_Summer_2020_v3.png" imageanchor="1" &gt;&lt;img border="0" id="imgFull" src="https://4.bp.blogspot.com/-7hpTQLwV7FY/XxdLMJ-YUbI/AAAAAAAAJKc/pD8jCobVq4Ao31abPxEh3Lza1Q5zM642QCLcBGAsYHQ/s1600/Coral_Summer_2020_v3.png" data-original-width="1600" data-original-height="1043" /&gt;&lt;/a&gt;&lt;p&gt;Summer has arrived along with a number of Coral updates. We're happy to announce a new partnership with balena that helps customers build, manage, and deploy IoT applications at scale on Coral devices. In addition, we've released a series of updates to expand platform compatibility, make development easier, and improve the ML capabilities of our devices. &lt;/p&gt;&lt;p&gt;&lt;h3&gt;Open-source Edge TPU runtime now available on GitHub&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;First up, our Edge TPU runtime is now open-source and &lt;a href="https://github.com/google-coral/libedgetpu"&gt;available on GitHub&lt;/a&gt;, including scripts and instructions for building the library for Linux and Windows. Customers running a platform that is not officially supported by Coral, including ARMv7 and RISC-V can now compile the Edge TPU runtime themselves and start experimenting. An open source runtime is easier to integrate into your customized build pipeline, enabling support for creating Yocto-based images as well as other distributions. &lt;/p&gt;&lt;p&gt;&lt;h3&gt;Windows drivers now available for the Mini PCIe and M.2 accelerators&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;Coral customers can now also use the &lt;a href="https://coral.ai/docs/m2/get-started#2b-on-windows"&gt;Mini PCIe and M.2 accelerators on the Microsoft Windows platform&lt;/a&gt;. New Windows drivers for these products complement the previously released Windows drivers for the USB accelerator and make it possible to start prototyping with the &lt;a href="https://coral.ai/docs/accelerator/get-started#1c-on-windows"&gt;Coral USB Accelerator on Windows&lt;/a&gt; and then to move into production with our Mini PCIe and M.2 products. &lt;/p&gt;&lt;p&gt;&lt;h3&gt;New fresh bits on the Coral ML software stack&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;We’ve also made  a number of new updates to our ML tools: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;The Edge TPU compiler is now version 14.1. It can be updated by running &lt;code&gt;sudo apt-get update &amp;&amp; sudo apt-get install edgetpu&lt;/code&gt;, or follow the &lt;a href="https://coral.ai/software/#debian-packages"&gt;instructions here&lt;/a&gt; &lt;li&gt;Our new Model Pipelining API allows you to divide your model across multiple Edge TPUs. The C++ version is currently in beta and the source is &lt;a href="https://github.com/google-coral/edgetpu/tree/master/src/cpp/pipeline"&gt;on GitHub&lt;/a&gt; &lt;li&gt;New &lt;a href="https://coral.ai/models/#on-device-retraining-classification"&gt;embedding extractor models&lt;/a&gt; for EfficientNet, for use with &lt;a href="https://coral.ai/docs/edgetpu/retrain-classification-ondevice-backprop/"&gt;on-device backpropagation&lt;/a&gt;. Embedding extractor models are compiled with the last fully-connected layer removed, allowing you to retrain for classification. Previously, only Inception and MobileNet were available and now retraining can also be done on EfficientNet  &lt;li&gt;New Colab notebooks to &lt;a href="https://colab.sandbox.google.com/github/google-coral/tutorials/blob/master/retrain_classification_ptq_tf2.ipynb"&gt;retrain a classification model with TensorFlow 2.0&lt;/a&gt; and &lt;a href="https://github.com/google-coral/tutorials"&gt;build C++ examples&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;h3&gt;Balena partners with Coral to enable AI at the edge&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;We are excited to share that the Balena fleet management platform now supports Coral products! &lt;/p&gt;&lt;p&gt;Companies running a fleet of ML-enabled devices on the edge need to keep their systems up-to-date with the latest security patches in order to protect data, model IP and hardware from being compromised. Additionally, ML applications benefit from being consistently retrained to recognize new use cases with maximum accuracy. Coral + balena together, bring simplicity and ease to the provisioning, deployment, updating, and monitoring of your ML project at the edge, moving early prototyping seamlessly towards production environments with many thousands of devices. &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.balena.io/blog/balena-partners-with-coral-to-enable-ai-at-the-edge/"&gt;Read more&lt;/a&gt; about all the benefits of Coral devices combined with balena container technology or get  started deploying container images to your Coral fleet with this &lt;a href="https://github.com/balena-io-examples/coral-streaming-object-detector"&gt;demo project&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&lt;h3&gt;New version of Mendel Linux&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://coral.ai/software/#mendel-linux"&gt;Mendel Linux&lt;/a&gt; (5.0 release Eagle) is now available for the Coral Dev Board and SoM and includes a more stable package repository that provides a smoother updating experience. It also brings compatibility improvements and a new version of the GPU driver. &lt;/p&gt;&lt;p&gt;&lt;h3&gt;New models&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;Last but not least, we’ve recently released BodyPix, a Google person-segmentation &lt;a href="https://blog.tensorflow.org/2019/11/updated-bodypix-2.html"&gt;model&lt;/a&gt; that was previously only available for TensorFlow.JS, as a &lt;a href="https://github.com/google-coral/project-bodypix"&gt;Coral model&lt;/a&gt;. This enables real-time privacy preserving understanding of where people (and body parts) are on a camera frame. We first demoed this at CES 2020 and it was one of our most popular demos. Using BodyPix we can remove people from the frame, display only their outline, and aggregate over time to see heat maps of population flow.  &lt;/p&gt;&lt;div id="flexParent"&gt;&lt;a href="https://4.bp.blogspot.com/-rFkCjXuhHHY/XxdM5iQ1W8I/AAAAAAAAJKk/2GR4m3KHB10rsw3vT4WNyHAhrrcpcxpKACLcBGAsYHQ/s1600/gif1.gif" imageanchor="1" &gt;&lt;img border="0" id="flexImg" src="https://4.bp.blogspot.com/-rFkCjXuhHHY/XxdM5iQ1W8I/AAAAAAAAJKk/2GR4m3KHB10rsw3vT4WNyHAhrrcpcxpKACLcBGAsYHQ/s1600/gif1.gif" data-original-width="512" data-original-height="288" /&gt;&lt;/a&gt;&lt;a href="https://1.bp.blogspot.com/-2JSd2PgT2vc/XxdM-yhbzfI/AAAAAAAAJKo/72OuU4KSM085ODUqFqJwlXK1u3r6KCkvwCLcBGAsYHQ/s1600/gif2.gif" imageanchor="1" &gt;&lt;img border="0" id="flexImg" src="https://1.bp.blogspot.com/-2JSd2PgT2vc/XxdM-yhbzfI/AAAAAAAAJKo/72OuU4KSM085ODUqFqJwlXK1u3r6KCkvwCLcBGAsYHQ/s1600/gif2.gif" data-original-width="512" data-original-height="288" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p id="imgCaption"&gt;Here are two possible applications of BodyPix: Body-part segmentation and anonymous population flow. Both are running on the Dev Board.&lt;/p&gt;&lt;p&gt;We’re excited to add BodyPix to the portfolio of projects the community is using to extend our models far beyond our demos—including tackling today’s biggest challenges. For example, Neuralet has taken our MobileNet V2 SSD Detection model and used it to implement &lt;a href="https://neuralet.com/docs/tutorials/smart-social-distancing/"&gt;Smart Social Distancing&lt;/a&gt;. Using the bounding box of person detection, they can compute a region for safe distancing and let a user know if social distance isn’t being maintained. The best part is this is done without any sort of facial recognition or tracking, with Coral we can accomplish this in real-time in a privacy preserving manner. &lt;/p&gt;&lt;p&gt;We can’t wait to see more projects that the community can make with BodyPix. Beyond anonymous population flow there’s endless possibilities with background and body part manipulation. Let us know what you come up with at our &lt;a href="https://coral.ai/support"&gt;community channels&lt;/a&gt;, including GitHub and StackOverflow. &lt;/p&gt;&lt;p&gt;&lt;center&gt;________________________&lt;/center&gt;&lt;/p&gt;&lt;p&gt;We are excited to share all that Coral has to offer as we continue to evolve our platform. For a list of worldwide distributors, system integrators and partners, including balena, visit the &lt;a href="https://coral.ai/partnerships"&gt;Coral partnerships page&lt;/a&gt;. Please visit &lt;a href="http://coral.ai"&gt;Coral.ai&lt;/a&gt; to discover more about our edge ML platform and share your 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/7Si33axai8c" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/3737588689271277163/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/07/coral-summer-2020-updates.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/3737588689271277163" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/3737588689271277163" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/7Si33axai8c/coral-summer-2020-updates.html" title="Summer updates from Coral" /><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/-7hpTQLwV7FY/XxdLMJ-YUbI/AAAAAAAAJKc/pD8jCobVq4Ao31abPxEh3Lza1Q5zM642QCLcBGAsYHQ/s72-c/Coral_Summer_2020_v3.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/07/coral-summer-2020-updates.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-2737084369580386439</id><published>2020-07-13T13:00:00.000-07:00</published><updated>2020-08-20T09:58:37.909-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;p&gt;&lt;strong&gt;UPDATE: &lt;p&gt; August 19, 2020: Revised guidance for Google Cloud client libraries and Apache Beam/Cloud Dataflow &lt;/p&gt;&lt;p&gt;August 12, 2020: Added guidance for Dataproc hadoop connector &lt;/p&gt;&lt;p&gt;July 13, 2020: Enumerate endpoints for JSON-RPC and Global HTTP Batch. Include examples of Non-Global HTTP Batch endpoints for contrast.&lt;/p&gt;&lt;p&gt;July 8, 2020: Limit usage of JSON-RPC and Global HTTP batch endpoints to existing projects only. Starting July 15 (JSON-RPC) and July 16 (Global HTTP Batch) we will no longer allow new projects to call these two endpoints. Projects with calls in the last 4 weeks will continue to work until the deadline of Aug 12, 2020.&lt;/p&gt;&lt;p&gt;Apr 23, 2020: gcloud min version has been updated &lt;p&gt;Apr 22, 2020: error injection planned for Apr 28 is CANCELLED, JSON-RPC and Global HTTP batch endpoint will perform normally. Next error injection window will be on May 26 as scheduled. &lt;/strong&gt;&lt;/p&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;a name='more'&gt;&lt;/a&gt;&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. Please note the timeline extension to Aug 12, 2020 does not apply to Places API. Please visit &lt;a href=" https://developers.google.com/places/ios-sdk/client-migration"&gt;Places SDK for iOS migration&lt;/a&gt; for information on Places API migration.    &lt;/p&gt;&lt;p&gt;Starting February 2020 and running through August 2020, we will periodically inject errors for short windows of time. Please see below for exact details and schedule of planned downtime 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;Planned downtime&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;To enable customers to identify systems that depend on these deprecated features, before the final turndown date is reached, there will be scheduled downtime for Global Batch and JSON-RPC starting from February 2020 and running through August 2020. &lt;/p&gt;&lt;p&gt;Below are details and schedule of periodic error injection windows, details of the downtime in June and July will be confirmed nearer the time, so please check back this &lt;a href="https://developers.googleblog.com/2018/03/discontinuing-support-for-json-rpc-and.html"&gt;blog post&lt;/a&gt; for the latest schedule.  &lt;/p&gt;&lt;a href="https://4.bp.blogspot.com/-EniMfDvdDgM/XwSwta5ae8I/AAAAAAAAJF0/vPIPsEWo794_UfXbvvoDeUB9kHFQPam6ACLcBGAsYHQ/s1600/updated.jpg" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-EniMfDvdDgM/XwSwta5ae8I/AAAAAAAAJF0/vPIPsEWo794_UfXbvvoDeUB9kHFQPam6ACLcBGAsYHQ/s1600/updated.jpg" data-original-width="1275" data-original-height="1502" /&gt;&lt;/a&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;h2&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;JSON-RPC&lt;/span&gt;&lt;/strong&gt;&lt;/h2&gt;&lt;h2&gt;&lt;strong&gt;Endpoints&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;The following JSON-RPC endpoints will no longer be supported. &lt;/p&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="https://www.googleapis.com/rpc"&gt;https://www.googleapis.com/rpc&lt;/a&gt; &lt;li&gt;&lt;a href="https://content.googleapis.com/rpc"&gt;https://content.googleapis.com/rpc&lt;/a&gt; &lt;li&gt;&lt;a href="https://clients6.google.com/rpc"&gt;https://clients6.google.com/rpc&lt;/a&gt;&lt;/li&gt;&lt;/ul&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;Endpoints&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;The following Global HTTP Batch endpoints will no longer be supported. &lt;/p&gt;&lt;ul&gt; &lt;li&gt;https://www.googleapis.com&lt;strong&gt;/batch&lt;/strong&gt; &lt;li&gt;https://content.googleapis.com&lt;strong&gt;/batch&lt;/strong&gt; &lt;li&gt;https://clients6.google.com&lt;strong&gt;/batch&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Non-Global HTTP Batch endpoints that include the API name in the URI will continue to be supported. Examples includes: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;https://www.googleapis.com/batch/&lt;strong&gt;&lt;em&gt;compute&lt;/em&gt;&lt;/strong&gt;/v1  &lt;li&gt;https://content.googleapis.com/batch/&lt;strong&gt;&lt;em&gt;compute&lt;/em&gt;&lt;/strong&gt;/v1  &lt;li&gt;https://clients6.google.com/batch/&lt;strong&gt;&lt;em&gt;compute&lt;/em&gt;&lt;/strong&gt;/v1  &lt;li&gt;https://&lt;strong&gt;compute&lt;/strong&gt;.googleapis.com/batch  &lt;li&gt;https://content-&lt;strong&gt;compute&lt;/strong&gt;.googleapis.com/batch  &lt;li&gt;https://&lt;strong&gt;&lt;em&gt;compute&lt;/em&gt;&lt;/strong&gt;.clients6.google.com/batch&lt;/li&gt;&lt;/ul&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 endpoint.   &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;Confirm that your code does not explicitly make a call to a Global HTTP Batch endpoint (e.g. www.googleapis.com/batch). These should be made to Non-Global HTTP Batch endpoints (e.g. www.googleapis.com/batch/compute/v1).    &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;Confirm that your code does not explicitly make a call to a Global HTTP Batch endpoint (e.g. www.googleapis.com/batch). These should be made to Non-Global HTTP Batch endpoints (e.g. www.googleapis.com/batch/compute/v1).    &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;Confirm that your code does not explicitly make a call to a Global HTTP Batch endpoint (e.g. www.googleapis.com/batch). These should be made to Non-Global HTTP Batch endpoints (e.g. www.googleapis.com/batch/compute/v1).    &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;Confirm that your code does not explicitly make a call to a Global HTTP Batch endpoint (e.g. www.googleapis.com/batch). These should be made to Non-Global HTTP Batch endpoints (e.g. www.googleapis.com/batch/compute/v1).    &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;Confirm that your code does not explicitly make a call to a Global HTTP Batch endpoint (e.g. www.googleapis.com/batch). These should be made to Non-Global HTTP Batch endpoints (e.g. www.googleapis.com/batch/compute/v1).    &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;Confirm that your code does not explicitly make a call to a Global HTTP Batch endpoint (e.g. www.googleapis.com/batch). These should be made to Non-Global HTTP Batch endpoints (e.g. www.googleapis.com/batch/compute/v1).    &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 (e.g. "&lt;code&gt;www.googleapis.com/batch/compute/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;Google Cloud Client Libraries&lt;/strong&gt;&lt;/h2&gt;  &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Java&lt;/strong&gt;&lt;p&gt;             Upgrade to &lt;a href="https://github.com/googleapis/google-cloud-java/tree/v0.57.0/google-cloud-clients/google-cloud-storage"&gt;v1.39.0 or later of the Google Cloud Java Client for Storage&lt;/a&gt; (released in &lt;a href="https://github.com/googleapis/google-cloud-java/releases/tag/v0.57.0"&gt;v0.57.0 of the Google Cloud Client Library&lt;/a&gt;). &lt;/p&gt;  &lt;li&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;p&gt;             &lt;a href="https://github.com/googleapis/python-storage/blob/master/CHANGELOG.md#190"&gt;Upgrade to v1.9.0 or later of the GCS client&lt;/a&gt;. &lt;/p&gt;&lt;/ol&gt;&lt;h2&gt;GCloud&lt;/h2&gt;&lt;p&gt;Older versions of gcloud used global batch calls in some cases. You should update your version of gcloudl. GCloud from v148.0.0 onwards is compatible with this deprecation.&lt;/p&gt; &lt;p&gt;In general this can be done by running "&lt;a href="https://cloud.google.com/sdk/gcloud/reference/components/update"&gt;gcloud components update&lt;/a&gt;".&lt;/p&gt;&lt;h2&gt;Apache Beam/ Cloud Dataflow&lt;/h2&gt;  &lt;p&gt;Users with Dataflow pipelines written using the &lt;a href="https://cloud.google.com/dataflow/docs/support/sdk-version-support-status"&gt;Beam (or Dataflow)&lt;/a&gt; Python or Java SDKs 2.4 and below should update their pipelines to a later SDK (than 2.4), ideally to the latest one available here.&lt;/p&gt; &lt;h2&gt; Dataproc hadoop connector &lt;/h2&gt;   &lt;p&gt;Users who run Apache Hadoop or Apache Spark jobs directly on data in Cloud Storage using gcs-connector should &lt;a href="https://github.com/GoogleCloudDataproc/hadoop-connectors/releases/tag/v1.6.3"&gt;update their connector to 1.6.3 or later&lt;/a&gt;. &lt;/p&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><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://4.bp.blogspot.com/-EniMfDvdDgM/XwSwta5ae8I/AAAAAAAAJF0/vPIPsEWo794_UfXbvvoDeUB9kHFQPam6ACLcBGAsYHQ/s72-c/updated.jpg" height="72" width="72" /><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-1958254850273140562</id><published>2020-07-13T09:15:00.000-07:00</published><updated>2020-07-13T14:09:01.088-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google pay" /><title type="text"> Google Pay plugin for Magento 2</title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-F70PrsJGozM/Xwig3KSuyZI/AAAAAAAAJIk/5k0HKHhgLicHgjHjPjq0s0bTGH4p5542QCLcBGAsYHQ/s1600/Magento_Blog_v3.png"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-F70PrsJGozM/Xwig3KSuyZI/AAAAAAAAJIk/5k0HKHhgLicHgjHjPjq0s0bTGH4p5542QCLcBGAsYHQ/s1600/Magento_Blog_v3.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Soc Sieng, Developer Advocate&lt;/em&gt;&lt;p&gt;&lt;a href="https://1.bp.blogspot.com/-F70PrsJGozM/Xwig3KSuyZI/AAAAAAAAJIk/5k0HKHhgLicHgjHjPjq0s0bTGH4p5542QCLcBGAsYHQ/s1600/Magento_Blog_v3.png" imageanchor="1" &gt;&lt;img border="0" src="https://1.bp.blogspot.com/-F70PrsJGozM/Xwig3KSuyZI/AAAAAAAAJIk/5k0HKHhgLicHgjHjPjq0s0bTGH4p5542QCLcBGAsYHQ/s1600/Magento_Blog_v3.png" data-original-width="1600" data-original-height="604" /&gt;&lt;/a&gt;&lt;h2&gt;Google Pay plugin for Magento 2&lt;/h2&gt;&lt;p&gt;We are pleased to announce the launch of the official &lt;a href="https://goo.gle/GooglePay-Magento-Plugin"&gt;Google Pay plugin for Magento 2&lt;/a&gt;. The Google Pay plugin can help increase conversions by enabling a simpler and more secure checkout experience in your Magento website. When you integrate with Google Pay, your customers can complete their purchases quickly using the payment methods they’ve securely saved to their Google Accounts. &lt;/p&gt;&lt;a href="https://3.bp.blogspot.com/-mGBIzJGr80I/Xwij1a7Q_TI/AAAAAAAAJIw/b2wfKV_daPAi6vSTQn7htUVHtsBUF3KSACLcBGAsYHQ/s1600/Magento%2BPlugin%2BPurchase.gif" imageanchor="1" &gt;&lt;img border="0" src="https://3.bp.blogspot.com/-mGBIzJGr80I/Xwij1a7Q_TI/AAAAAAAAJIw/b2wfKV_daPAi6vSTQn7htUVHtsBUF3KSACLcBGAsYHQ/s1600/Magento%2BPlugin%2BPurchase.gif" data-original-width="1296" data-original-height="810" /&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;Google Pay in action.&lt;/p&gt;&lt;p&gt;The Google Pay plugin is built in collaboration with Unbound Commerce, is free to use, and integrates with popular payment service providers including Adyen, BlueSnap, Braintree, FirstData - Payeezy &amp; Ucom, Moneris, Stripe, and Vantiv. &lt;/p&gt;&lt;h2&gt;Installation&lt;/h2&gt;&lt;p&gt;The Google Pay plugin can be installed from the &lt;a href="https://marketplace.magento.com/extensions.html"&gt;Magento Marketplace&lt;/a&gt; using this &lt;a href="https://goo.gle/GooglePay-Magento-Plugin"&gt;link&lt;/a&gt; or by searching the Magento Marketplace for “Google Pay”. &lt;/p&gt;&lt;p&gt;Refer to the &lt;a href="https://docs.magento.com/m2/ee/user_guide/magento/magento-marketplace.html"&gt;Magento Marketplace User Guide&lt;/a&gt; for more installation instructions. &lt;/p&gt;&lt;h2&gt;Getting started&lt;/h2&gt;&lt;p&gt;To get started with the Google Pay plugin, you will need your Google Pay merchant identifier which can be found in the &lt;a href="https://pay.google.com/business/console?utm_source=google_dev_blog&amp;utm_medium=article&amp;utm_campaign=business_console_launch"&gt;Google Pay Business Console&lt;/a&gt;. &lt;/p&gt;&lt;a href="https://3.bp.blogspot.com/-74ycnoEHrLM/XwilrXz4GZI/AAAAAAAAJJA/3VvOwLVmtl88N15KEb6kOBw7u1ftDQMqQCLcBGAsYHQ/s1600/Integrations%2Bscreen%2B%25E2%2580%2593%2Bmerchant%2Bid%2Bcut%2B1.jpg" imageanchor="1" &gt;&lt;img border="0" src="https://3.bp.blogspot.com/-74ycnoEHrLM/XwilrXz4GZI/AAAAAAAAJJA/3VvOwLVmtl88N15KEb6kOBw7u1ftDQMqQCLcBGAsYHQ/s1600/Integrations%2Bscreen%2B%25E2%2580%2593%2Bmerchant%2Bid%2Bcut%2B1.jpg" data-original-width="1440" data-original-height="1024" /&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;Your Merchant ID can be found in the Google Pay Business Console.&lt;/p&gt;&lt;h2&gt;Configuring the Google Pay plugin&lt;/h2&gt;&lt;p&gt;Once installed, you can configure the plugin in your site’s Magento administration console by navigating to Stores &gt; Configuration &gt; Sales &gt; Payment Methods and selecting the Configure button next to Google Pay.&lt;/p&gt;&lt;a href="https://4.bp.blogspot.com/-R381iSQqttk/Xwil6Cz6ZSI/AAAAAAAAJJE/U3dxIKunrUkN4PTt3VjurpzOQQNlNv44ACLcBGAsYHQ/s1600/configuration.png" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-R381iSQqttk/Xwil6Cz6ZSI/AAAAAAAAJJE/U3dxIKunrUkN4PTt3VjurpzOQQNlNv44ACLcBGAsYHQ/s1600/configuration.png" data-original-width="610" data-original-height="407" /&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;Click on the Configure button to start the setup process.&lt;/p&gt;&lt;p&gt;Testing out Google Pay can be achieved in three easy steps: &lt;/p&gt;&lt;ol&gt; &lt;li&gt;Google Pay credentials: enter your Google Pay merchant ID (available from the &lt;a href="https://pay.google.com/business/console?utm_source=google_dev_blog&amp;utm_medium=article&amp;utm_campaign=business_console_launch"&gt;Google Pay Business Console&lt;/a&gt;) and merchant name.  &lt;li&gt;Payment gateway credentials: select your payment gateway from the list of payment gateways supported by the Google Pay plugin.  &lt;ol&gt;  &lt;li&gt;Choose the Sandbox environment for testing purposes.   &lt;li&gt;Enter your payment gateway’s credentials into their respective form fields. &lt;/li&gt;  &lt;/ol&gt; &lt;li&gt;Google Pay settings: enable Google Pay and choose the card networks that you would like to accept. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;You can optionally try out some of the advanced settings that provide the ability to customize the color and type of Google Pay button as well as enabling Minicart integration, which is recommended. &lt;/p&gt;&lt;a href="https://2.bp.blogspot.com/-4G8Q58yVO1I/XwzNWq9BteI/AAAAAAAAJJw/0RlkTxbNqyQ_tIvEaBd2aPttYvh7M7rygCLcBGAsYHQ/s1600/advancedsettings.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-4G8Q58yVO1I/XwzNWq9BteI/AAAAAAAAJJw/0RlkTxbNqyQ_tIvEaBd2aPttYvh7M7rygCLcBGAsYHQ/s1600/advancedsettings.png" data-original-width="1600" data-original-height="1118" /&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;Checkout the Advanced Settings to further customize how and where the Google Pay button is presented in your store.&lt;/p&gt;&lt;p&gt;If your payment provider isn’t listed as an option in the payment gateway list, check to see if your payment provider’s plugin has built-in support for Google Pay.&lt;/p&gt;&lt;h2&gt;Launching Google Pay for your website&lt;/h2&gt;&lt;p&gt;When you’ve completed your testing, submit your website integration in the &lt;a href="https://pay.google.com/business/console?utm_source=google_dev_blog&amp;utm_medium=article&amp;utm_campaign=business_console_launch"&gt;Google Pay Business Console&lt;/a&gt;. You will need to provide your website’s URL and screenshots to complete the submission. &lt;/p&gt;&lt;h2&gt;Summing it up&lt;/h2&gt;&lt;p&gt;Integrating Google Pay into your website is a great way to increase conversions and to improve the purchasing experience for your customers. &lt;/p&gt;&lt;p&gt;Find out more about &lt;a href="https://pay.google.com/about/business/"&gt;Google Pay&lt;/a&gt; and the &lt;a href="https://goo.gle/GooglePay-Magento-Plugin"&gt;Google Pay plugin for Magento&lt;/a&gt;. &lt;/p&gt;&lt;h3&gt;What do you think?&lt;/h3&gt;&lt;p&gt;Do you have any questions? Let us know in the comments below or tweet using &lt;b&gt;#AskGooglePayDev&lt;/b&gt;. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/Fyi8O7iMfE4" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/1958254850273140562/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/07/google-pay-plugin-for-magento-2.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/1958254850273140562" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/1958254850273140562" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/Fyi8O7iMfE4/google-pay-plugin-for-magento-2.html" title=" Google Pay plugin for Magento 2" /><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/-F70PrsJGozM/Xwig3KSuyZI/AAAAAAAAJIk/5k0HKHhgLicHgjHjPjq0s0bTGH4p5542QCLcBGAsYHQ/s72-c/Magento_Blog_v3.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/07/google-pay-plugin-for-magento-2.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-6264773546314098325</id><published>2020-07-10T09:33:00.000-07:00</published><updated>2020-07-10T11:59:29.526-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="G Suite" /><title type="text">Introducing an easier way to design your G Suite Add-on</title><content type="html">&lt;meta name="twitter:image" content="https://4.bp.blogspot.com/-KnEqsG7lrcM/Xwd1_onTuyI/AAAAAAAAJHQ/o6yKT__5yDoqPcwuyjj9gP88oW7ar2__wCLcBGAsYHQ/s1600/step1.gif"&gt;&lt;img style="display:none" src="https://4.bp.blogspot.com/-KnEqsG7lrcM/Xwd1_onTuyI/AAAAAAAAJHQ/o6yKT__5yDoqPcwuyjj9gP88oW7ar2__wCLcBGAsYHQ/s1600/step1.gif"&gt; &lt;p&gt;&lt;em&gt;Posted by Kylie Poppen, Senior Interaction Designer, G Suite and Akshay Potnis, Interaction Designer, G Suite&lt;/em&gt;&lt;p&gt; &lt;p&gt;You’ve just scoped out an awesome new way to solve for your customer’s next challenge, but wait, what about the design? Building an integration between your software platform and another comes with a laundry list of things to think about: your vision, your users, their experience, your partners, APIs, developer docs, and so on. Caught between two different platforms, many constraints, and limited time, you're probably wondering: how might we build the most intuitive and powerful user experience? &lt;/p&gt;&lt;p&gt;Imagine making a presentation, with Google Slides you have all sorts of templates to get you started, and you can build a great deck easily. But, to build a seamless integration between two software platforms, those pre-built templates don’t exist and you basically have to start from scratch. In the best case scenario, you’d create your own components and layer them on top of each other with the goal of making the UI seem just about right. But this takes time. Hours longer than you want it to. Without design guidelines, you're stuck guessing what is or is not possible, looking to other apps and emulating what they've already done. Which leads us to the reality that some add-ons have a suboptimal experience, because time is limited, and you're left to build only for what you know you can do, rather than what's actually possible.  &lt;/p&gt;&lt;p&gt;To simplify all of this, we’re introducing the &lt;a href="https://www.figma.com/community/file/848275628252039675"&gt;G Suite Add-ons UI Design Kit&lt;/a&gt;, now live on Figma. With it you can browse all of the components of G Suite Add-ons’ &lt;a href="https://developers.google.com/gsuite/add-ons/concepts/card-interfaces"&gt;card-based interface&lt;/a&gt;, learn best practices, and simply drag-and-drop to create your own unique designs. Save the time spent recreating what an add-on will look like, so that you can spend that time thinking about how your add-on will work .  &lt;/p&gt;&lt;p&gt;While the UI Design Kit has only been live for a little over a month, we’ve already been hearing feedback from our partners about its impact.  &lt;/p&gt;&lt;p&gt;“Zapier connects more than 2,000 apps, allowing businesses to automate repetitive, time-consuming tasks. When building these integrations, we want to ensure a seamless experience for our customers,” said Ryan Powell, Product Manager at Zapier. “However, a partner’s UI can be difficult to navigate when starting from scratch. G Suite’s UI Design Kit allows us to build, test and optimize integrations because we know from the start what is and is not possible inside of GSuite’s UI.” &lt;/p&gt;&lt;h2&gt;Here’s how to use the UI Design Kit:&lt;/h2&gt;&lt;h3&gt;Step 1&lt;/h3&gt;&lt;p&gt;Find and duplicate design kit &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Search for G suite on Figma community or use this &lt;a href="https://www.figma.com/community/file/848275628252039675"&gt;link&lt;/a&gt; &lt;li&gt;Open G Suite Add Ons UI Design Kit  &lt;li&gt;Just click the duplicate button. &lt;/li&gt;&lt;/ul&gt;&lt;a href="https://4.bp.blogspot.com/-KnEqsG7lrcM/Xwd1_onTuyI/AAAAAAAAJHQ/o6yKT__5yDoqPcwuyjj9gP88oW7ar2__wCLcBGAsYHQ/s1600/step1.gif" imageanchor="1" &gt;&lt;img border="0" id="imgFull" src="https://4.bp.blogspot.com/-KnEqsG7lrcM/Xwd1_onTuyI/AAAAAAAAJHQ/o6yKT__5yDoqPcwuyjj9gP88oW7ar2__wCLcBGAsYHQ/s1600/step1.gif" data-original-width="1531" data-original-height="1012" /&gt;&lt;/a&gt;&lt;h3&gt;Step 2&lt;/h3&gt;&lt;p&gt;Choose a template to begin &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Go to UI templates page &lt;li&gt;Select a template from the list of templates&lt;/ul&gt;&lt;a href="https://2.bp.blogspot.com/-_cpxSYXkIqs/Xwd2TLTaelI/AAAAAAAAJHY/LrYUoMhrMKESSUGMDt2qjM5cMD3R_wROgCLcBGAsYHQ/s1600/step2.gif" imageanchor="1" &gt;&lt;img border="0" id="imgFull" src="https://2.bp.blogspot.com/-_cpxSYXkIqs/Xwd2TLTaelI/AAAAAAAAJHY/LrYUoMhrMKESSUGMDt2qjM5cMD3R_wROgCLcBGAsYHQ/s1600/step2.gif" data-original-width="512" data-original-height="338" /&gt;&lt;/a&gt;&lt;h3&gt;Step 3&lt;/h3&gt;&lt;p&gt;Copy the template and detach from symbols to start editing&lt;/p&gt;&lt;a href="https://3.bp.blogspot.com/-F7_rGeJSfEo/Xwd2gJknxXI/AAAAAAAAJHc/bJkelUCJG94JkIbn4jmZFjZI6V4hTdi-ACLcBGAsYHQ/s1600/step3.gif" imageanchor="1" &gt;&lt;img border="0" id="imgFull" src="https://3.bp.blogspot.com/-F7_rGeJSfEo/Xwd2gJknxXI/AAAAAAAAJHc/bJkelUCJG94JkIbn4jmZFjZI6V4hTdi-ACLcBGAsYHQ/s1600/step3.gif" data-original-width="1531" data-original-height="1012" /&gt;&lt;/a&gt;&lt;p&gt;&lt;strong&gt;Helpful Hints: Features to help you iterate quickly&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Build with auto layout, you don’t need to worry about the details. &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Copy paste maintains layout padding &amp; structure. &lt;/li&gt;&lt;/ul&gt;&lt;a href="https://4.bp.blogspot.com/-nte6fdZqbD4/Xwd27kJljPI/AAAAAAAAJHo/W5xCh_hzrPcdezz-bCnHX3qF7cG4h6fmgCLcBGAsYHQ/s1600/step3b.gif" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://4.bp.blogspot.com/-nte6fdZqbD4/Xwd27kJljPI/AAAAAAAAJHo/W5xCh_hzrPcdezz-bCnHX3qF7cG4h6fmgCLcBGAsYHQ/s1600/step3b.gif" data-original-width="1531" data-original-height="1012" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Maintained padding &amp; structure while editing.&lt;/li&gt;&lt;/ul&gt;&lt;a href="https://1.bp.blogspot.com/-0Sc7XEuxFAU/Xwd3KQTv_GI/AAAAAAAAJHs/k0XvZQeMhhYVWxlHwa3hLhMDHHdtHcC0gCLcBGAsYHQ/s1600/step3c.gif" imageanchor="1" &gt;&lt;img id="imgFull" border="0" src="https://1.bp.blogspot.com/-0Sc7XEuxFAU/Xwd3KQTv_GI/AAAAAAAAJHs/k0XvZQeMhhYVWxlHwa3hLhMDHHdtHcC0gCLcBGAsYHQ/s1600/step3c.gif" data-original-width="1531" data-original-height="1012" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Built in fixed footer and peek cards.&lt;/li&gt;&lt;/ul&gt;&lt;a href="https://2.bp.blogspot.com/-xz6LLnEOYko/Xwd3bKyerpI/AAAAAAAAJH0/TSdkXqZf6VwuEZgS0JYEPOAZNbldm49fACLcBGAsYHQ/s1600/step3d.gif" imageanchor="1" &gt;&lt;img border="0" id="imgFull" src="https://2.bp.blogspot.com/-xz6LLnEOYko/Xwd3bKyerpI/AAAAAAAAJH0/TSdkXqZf6VwuEZgS0JYEPOAZNbldm49fACLcBGAsYHQ/s1600/step3d.gif" data-original-width="1531" data-original-height="1012" /&gt;&lt;/a&gt;&lt;p&gt;Visualize your design against G-Suite surfaces easily.&lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-gg-ghXE7f-g/Xwd3lF33SkI/AAAAAAAAJH8/winxa_xuZyo1ehMuNHzP_6yttk0arec-QCLcBGAsYHQ/s1600/step3e.gif" imageanchor="1" &gt;&lt;img border="0" id="imgFull" src="https://1.bp.blogspot.com/-gg-ghXE7f-g/Xwd3lF33SkI/AAAAAAAAJH8/winxa_xuZyo1ehMuNHzP_6yttk0arec-QCLcBGAsYHQ/s1600/step3e.gif" data-original-width="1531" data-original-height="1012" /&gt;&lt;/a&gt;&lt;p&gt;Documentation built right into the template. &lt;/p&gt;&lt;ol&gt; &lt;li&gt;Go to the component page (e.g section)  &lt;li&gt;Find layout + documentation / api links on respective pages&lt;/ol&gt;&lt;a href="https://2.bp.blogspot.com/-x2cFoL7iqWA/Xwd5i8Z0LmI/AAAAAAAAJIU/ACqkt_2b_ywUI_Qf5KO4IZoQqeJFaenFwCLcBGAsYHQ/s1600/lastgif.gif" imageanchor="1" &gt;&lt;img border="0" id="imgFull" src="https://2.bp.blogspot.com/-x2cFoL7iqWA/Xwd5i8Z0LmI/AAAAAAAAJIU/ACqkt_2b_ywUI_Qf5KO4IZoQqeJFaenFwCLcBGAsYHQ/s1600/lastgif.gif" data-original-width="1531" data-original-height="1012" /&gt;&lt;/a&gt;&lt;h2&gt;Next Steps to Consider:&lt;/h2&gt;&lt;p&gt;With G Suite Add-ons, users and admins can seamlessly get their work done, across their favorite workplace applications, without needing to leave G Suite. With this UI Design Kit, you too can focus your time on building a great user experience inside of G Suite, while simplifying and accelerating the design process. Follow these steps to get started today:  &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.figma.com/community/file/848275628252039675"&gt;Download the UI Design Kit&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://developers.google.com/gsuite/add-ons/overview"&gt;Get started with G Suite Add-ons&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Hopefully this will inspire you to build more add-ons using the Cards Framework! To learn more about building for G Suite, check out the &lt;a href="https://developers.google.com/gsuite"&gt;developer page&lt;/a&gt;, and please register for Next OnAir, which kicks off July 14th. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/2UtMHzZ17n0" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/6264773546314098325/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/07/introducing-easier-way-to-design-your-gsuite-add-on.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/6264773546314098325" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/6264773546314098325" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/2UtMHzZ17n0/introducing-easier-way-to-design-your-gsuite-add-on.html" title="Introducing an easier way to design your G Suite Add-on" /><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/-KnEqsG7lrcM/Xwd1_onTuyI/AAAAAAAAJHQ/o6yKT__5yDoqPcwuyjj9gP88oW7ar2__wCLcBGAsYHQ/s72-c/step1.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/07/introducing-easier-way-to-design-your-gsuite-add-on.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-4214126511887091598</id><published>2020-07-09T09:00:00.002-07:00</published><updated>2020-07-09T09:00:57.430-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Technical Writing" /><title type="text"> Teaching the art of great documentation</title><content type="html">&lt;meta name="twitter:image" content="https://2.bp.blogspot.com/-psXX_PVSVdg/XwYMQYHTWtI/AAAAAAAAJG4/wKZ0nEbIbyIolSRHMg1g3MAJUMwRjRzTACLcBGAsYHQ/s1600/figure1.png"&gt;&lt;img style="display:none" src="https://2.bp.blogspot.com/-psXX_PVSVdg/XwYMQYHTWtI/AAAAAAAAJG4/wKZ0nEbIbyIolSRHMg1g3MAJUMwRjRzTACLcBGAsYHQ/s1600/figure1.png"&gt; &lt;p&gt;&lt;em&gt;Posted by &lt;a href="https://twitter.com/scottydocs?lang=en"&gt;James Scott&lt;/a&gt;, Technical writer&lt;/em&gt;&lt;p&gt; &lt;p&gt;Technical writing is simple - you merely have to explain brutally complex technologies to relentlessly unforgiving audiences. It's unsurprising that so many engineers find writing documentation is the most painful part of their job. If you would like to teach your colleagues to become writers, the good news is Google's fun and interactive technical writing course materials are free and available for everyone to use! Alternatively, if you're a developer who would like to learn how to write more clearly, you can read through the course work for yourself or convince a colleague to teach the course at your organisation! &lt;/p&gt;&lt;p&gt;We researched documentation extensively, and it turns out that the best sentences in the world consist primarily of words. Our self-paced and facilitator-led courses will not only help software engineers choose the right words but also help to make the whole writing process a lot less scary. Perhaps software engineers won't become William Shakespeare or even William Shatner overnight, but hopefully they will gain the confidence to write something worth publishing. As working from home becomes more common, good documentation has never been more important in enabling software engineers to work independently.  &lt;/p&gt;&lt;h2&gt;Courses overview&lt;/h2&gt;&lt;p&gt;Google introduced the technical writing courses, Technical Writing One and Technical Writing Two, in 2015. Since then, thousands of Google software engineers and product managers have taken and enjoyed the courses. In February 2020, we released the courses to the world.  &lt;/p&gt;&lt;p&gt;The classes have the following structure: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Students complete self-study work before attending the live class. The self-study work is valuable on its own, even for students who will never attend the live class.  &lt;li&gt;A facilitator guides students through a live class. The live class features practical exercises, class discussion, and extensive peer-to-peer feedback. Note that Google does not lead these live courses but provides extensive material to help facilitators prepare to lead them. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Organizations can choose to host the live classes virtually or in-person. &lt;/p&gt;&lt;h2&gt;Technical Writing One&lt;/h2&gt;&lt;p&gt;The first course, Technical Writing One, covers the basics of technical writing. Students learn to start thinking about their audience before even putting pen to paper. For example, in one exercise, students are challenged to write instructions for putting toothpaste on a toothbrush. That might sound relatively simple, but here's the catch - your audience has never brushed their teeth before. That's not to say they have bad oral hygiene, but they don't even know what a toothbrush is. The exercise aims to get students to think about documenting a completely new technology. &lt;/p&gt;&lt;p&gt;Another important lesson that Technical Writing One teaches you is how to shorten the sentence length in your documentation and how to edit unnecessarily long sentences. Hopefully once you have taken the course, you might edit the preceding sentence down to something like the following: &lt;del&gt;Another important lesson that&lt;/del&gt; &lt;strong&gt;Technical Writing One teaches you &lt;/strong&gt;&lt;del&gt;is&lt;/del&gt; &lt;strong&gt;to shorten sentences &lt;del&gt;length in your documentation and how to edit unnecessarily long sentences&lt;/del&gt;&lt;/strong&gt;.  &lt;/p&gt;&lt;p&gt;The course also advocates using lists instead of walls of text, so here, in list form, are some other topics it covers: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Using active voice instead of passive voice.  &lt;li&gt;Revising text into clear paragraphs.  &lt;li&gt;Learning various self-editing techniques. &lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Technical Writing Two&lt;/h2&gt;&lt;p&gt;Technical Writing Two builds on the techniques from the first course and is for those who already know verbs from adverbs. The course encourages students to express their creative side. For example, in one exercise, students find the best way to illustrate technical concepts. Spoiler alert: can you spot any issues with the following diagram?&lt;/p&gt;&lt;a href="https://2.bp.blogspot.com/-psXX_PVSVdg/XwYMQYHTWtI/AAAAAAAAJG4/wKZ0nEbIbyIolSRHMg1g3MAJUMwRjRzTACLcBGAsYHQ/s1600/figure1.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-psXX_PVSVdg/XwYMQYHTWtI/AAAAAAAAJG4/wKZ0nEbIbyIolSRHMg1g3MAJUMwRjRzTACLcBGAsYHQ/s1600/figure1.png" data-original-width="1600" data-original-height="620" alt="A diagram titled Finding a website through DNS, with seven boxes of varying colour, size, and shape connected by lines in various directions." /&gt;&lt;/a&gt;&lt;p id="imgCaption"&gt;Figure 1: Finding a website through DNS&lt;/p&gt;&lt;p&gt;Other intermediate techniques the course covers include: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Organizing large doc sets.  &lt;li&gt;Revising and reorganizing text.  &lt;li&gt;Writing accurate descriptions.  &lt;li&gt;Creating tutorials for beginners. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Students take part in interactive exercises and peer review with a lab partner. Technical Writing Two also includes class discussions on documentation types and how to write the dreaded first draft.  &lt;/p&gt;&lt;h2&gt;Want to know more?&lt;/h2&gt;  &lt;p&gt;If you would like to teach the courses at your own organization, see the &lt;a href="https://developers.google.com/tech-writing/for-instructors"&gt;facilitator guides&lt;/a&gt;. To review the pre-work and read through the training materials, see the &lt;a href="https://developers.google.com/tech-writing/overview"&gt;course overviews&lt;/a&gt;.  &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/NijqnnlYGoM" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/4214126511887091598/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/07/teaching-art-of-great-documentation.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/4214126511887091598" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/4214126511887091598" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/NijqnnlYGoM/teaching-art-of-great-documentation.html" title=" Teaching the art of great documentation" /><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/-psXX_PVSVdg/XwYMQYHTWtI/AAAAAAAAJG4/wKZ0nEbIbyIolSRHMg1g3MAJUMwRjRzTACLcBGAsYHQ/s72-c/figure1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/07/teaching-art-of-great-documentation.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-596098824972435195.post-7558285084099255212</id><published>2020-07-08T10:03:00.000-07:00</published><updated>2020-07-08T10:12:40.958-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Smart Home" /><title type="text"> New user features and developer tools to build the helpful home </title><content type="html">&lt;meta name="twitter:image" content="https://1.bp.blogspot.com/-XMXoklSvnaI/XwXyJkHZ_aI/AAAAAAAAJGo/k5GCs4ezVzo_0GFg4RNwBzLK8QRYGubVgCLcBGAsYHQ/s1600/deviceaccess.png"&gt;&lt;img style="display:none" src="https://1.bp.blogspot.com/-XMXoklSvnaI/XwXyJkHZ_aI/AAAAAAAAJGo/k5GCs4ezVzo_0GFg4RNwBzLK8QRYGubVgCLcBGAsYHQ/s1600/deviceaccess.png"&gt; &lt;p&gt;&lt;em&gt;Posted by Michele Turner, Director of Product and Smart Home Ecosystem for Google Nest&lt;/em&gt;&lt;p&gt;&lt;p&gt;To create a helpful home experience, we have focused on foundational features necessary to make it easier for people to manage their smart devices. But as people spend more and more time at home during these challenging times, it’s important that we invest in additional ways to work with developers to build a more useful connected home.  &lt;/p&gt;&lt;p&gt;Today, at the &lt;a href="https://eventsonair.withgoogle.com/events/heyg-smart-home-summit#"&gt;"Hey Google" Smart Home Virtual Summit&lt;/a&gt;, we gave updates on our latest smart home initiatives, talked more in-depth about the new smart home controls in Android 11, and previewed some platform tools that we're investing in to make devices easier to set up and work with Google Assistant.  &lt;/p&gt;&lt;h2&gt;Smart Home for Entertainment Device support with Google Assistant&lt;/h2&gt;  &lt;p&gt;As many of us continue to stay home, smart devices are being used a lot more. With the biggest growth coming from entertainment devices, we’re increasing our support in this area with our Smart Home API.  &lt;/p&gt;&lt;p&gt;Last year, we launched Google Assistant support for &lt;a href="https://developers.googleblog.com/2020/07/announcing-new-smart-home-shed-types-and-traits.html"&gt;Smart Home for Entertainment Device (SHED)&lt;/a&gt; device types and traits, including TVs, remotes, set-top boxes, speakers, soundbars, and even game consoles from top brands like Xbox, Roku, Dish, and LG. And now, we are making these APIs public for any Smart TV, set-top box or game developers to use. SHED gives users the ability to control their favorite entertainment devices from any Assistant-enabled smart display, smart speaker or mobile device.  &lt;/p&gt;&lt;h2&gt;Smart Home controls in Android 11 &lt;/h2&gt;&lt;a href="https://3.bp.blogspot.com/-l8hH-uSCmqU/XwXyYFEz_kI/AAAAAAAAJGs/yzXAANQnkC8KzsWFWQaaDjGSws0HtY9yQCLcBGAsYHQ/s1600/smarthomecontrols.png" imageanchor="1" &gt;&lt;img border="0" style="width:200px" id="floatRight" src="https://3.bp.blogspot.com/-l8hH-uSCmqU/XwXyYFEz_kI/AAAAAAAAJGs/yzXAANQnkC8KzsWFWQaaDjGSws0HtY9yQCLcBGAsYHQ/s1600/smarthomecontrols.png" data-original-width="450" data-original-height="940" /&gt;&lt;/a&gt;&lt;p&gt;With the release of Android 11, coming out later this year, we are introducing a dedicated space for Smart Home controls that users can find quickly, and access any time. We’ve redesigned the power menu to make devices linked to Google Assistant just a button-press away.   &lt;/p&gt;&lt;p&gt;Users with the Home App can choose all, or just their favorite controls to be in the space. For partners, you get this for free - there’s no new development work required. We’ll have sliders which will allow you to adjust specific settings, like the temperature of your thermostat in the morning, or how far to open the blinds. You can also customize what devices are visible from the control space and whether these devices can be accessible in your lockscreen.   &lt;/p&gt;&lt;h2&gt;Improved state reporting and reliability&lt;/h2&gt;  &lt;p&gt;With Android 11, we want to give users a quick and easy way to check or adjust the devices in their home. And as we continue to add new surfaces for device control, it becomes more critical to ensure we have accurate state. In the coming months, we’ll be introducing tools to measure your reliability and latency to help improve and debug state reporting. Once you hit key targets for reliability and latency, we will shift from a default of querying your state to using report state to render stateful controls. This will reduce query volume on your servers and improve the user experience with accurate device state across multiple surfaces. &lt;/p&gt;&lt;p&gt;In addition to state accuracy, the best user experience comes with strong reliability and low latency. To help achieve both, we launched local execution with the &lt;a href="https://developers.google.com/assistant/smarthome/concepts/local"&gt;Local Home SDK&lt;/a&gt; back in April.  As part of the Smart Home platform, local fulfillment can extend your Smart Home Action and routes commands to devices through the local network, benefitting users with reduced latency and higher reliability by removing an additional cloud hop. &lt;/p&gt;&lt;p&gt;To ease the development process, the Local Home platform supports both Chrome and Node.js runtime environments, as well as building and testing of apps on local development machines or personal servers. Once you've deployed your local fulfillment app, users will benefit immediately without having to upgrade hardware or manually update firmware. Nanoleaf and Yeelight have already enabled local execution for their devices. It’s available to all developers through the Actions on Google Console.   &lt;/p&gt;&lt;h2&gt;Improving linking&lt;/h2&gt;  &lt;p&gt;Implementing a high quality integration is important - it reduces churn and delights users. Yet, it’s still challenging to get users to discover these features, and we’re doing a couple of things on our end to increase the funnel of users linked to your action. We are excited to launch &lt;a href="https://developers.google.com/assistant/smarthome/concepts/account-linking#oauth-based_app_flip"&gt;OAuth-based App Flip&lt;/a&gt; on the developer console today. With AppFlip, we streamline the standard account linking flow by flipping users from the Google Home App to the Partner app to gather consent without requiring the users to re-enter their credentials.  &lt;/p&gt;&lt;p&gt;To increase awareness of your Action, you will soon be able to initiate the account linking flow within your app. There will also be more opportunities to increase awareness through feature promotion and in-app notification using your app, and we will have more details on discovery and linking opportunities later this year.  &lt;/p&gt;&lt;h2&gt;Robust monitoring, logging, analytics tools&lt;/h2&gt;  &lt;p&gt;We know that visibility into the behavior of your smart home integrations is critical, from debugging in early development to detailed analytics in production. To enhance developer productivity, we've integrated with the powerful monitoring and troubleshooting tools available in Google Cloud Platform to provide detailed event logs and usage metrics for smart home projects. &lt;/p&gt;&lt;p&gt;We’ve also recently &lt;a href="https://developers.googleblog.com/2020/06/announcing-enhanced-smart-home-analytics.html"&gt;launched&lt;/a&gt; new &lt;a href="https://developers.google.com/assistant/smarthome/develop/monitoring-logging"&gt;tools&lt;/a&gt; to help developers improve the reliability of their integrations and aid in debugging and resolving issues quickly. You can view aggregate metrics directly in the developer console, or build logs-based metrics to find trends and gain deeper insights into common problems. Google Cloud Platform also enables developers to build custom alerts to quickly identify production issues. &lt;/p&gt;&lt;p&gt;You can also find a new Smart Home Analytics Dashboard accessible from the developer console and pre-populated with charts for common metrics such as Daily Active Users and Request Breakdown — giving you an overall picture of your integration's behavior. This dashboard is powered by new usage and performance metrics in Google Cloud Monitoring, giving you the power to set alerts and be notified if your integration has an issue. Get started today by going to the “Analytics” tab in the Actions console or the Google Cloud console to check out these new logs, metrics, and alerting capabilities for your projects! &lt;/p&gt;&lt;h2&gt;Updates to Device Access program &lt;/h2&gt;  &lt;p&gt;Last year, we announced that we’re moving from the Works with Nest program to Works with Google Assistant and build on a foundation of &lt;a href="https://developers.google.com/nest/device-access"&gt;privacy and data security&lt;/a&gt; to ensure users have confidence in how Google and our partners are protecting the consumer’s home data.  &lt;/p&gt;&lt;p&gt;As part of that effort, we created the &lt;a href="https://support.google.com/googlenest/answer/9539279?hl=en"&gt;Device Access&lt;/a&gt; program to provide a way for partners to integrate directly with Nest devices. To support the Device Access program, we will soon launch the Device Access Console, a self-serve console that guides commercial developers  through the different project phases: development, certification and pilot testing, and finally production. &lt;/p&gt;&lt;a href="https://1.bp.blogspot.com/-XMXoklSvnaI/XwXyJkHZ_aI/AAAAAAAAJGo/k5GCs4ezVzo_0GFg4RNwBzLK8QRYGubVgCLcBGAsYHQ/s1600/deviceaccess.png" imageanchor="1" &gt;&lt;img border="0" id="imgFull" src="https://1.bp.blogspot.com/-XMXoklSvnaI/XwXyJkHZ_aI/AAAAAAAAJGo/k5GCs4ezVzo_0GFg4RNwBzLK8QRYGubVgCLcBGAsYHQ/s1600/deviceaccess.png" data-original-width="1600" data-original-height="771" /&gt;&lt;/a&gt;&lt;p&gt;For a commercial developer the console allows them to manage your various projects and integrations. It also provides development guides and trait documentation for all supported Nest devices. Individuals who want to create their own automations with their Nest devices will be able to do so with this console, but only for the homes they are a member of. &lt;/p&gt;&lt;h2&gt;Expanding routines &lt;/h2&gt;  &lt;p&gt;One of the most popular features with Nest users is the ability to automatically trigger routines based on whether users are &lt;a href="https://support.google.com/googlenest/answer/9251759?hl=en"&gt;Home or Away&lt;/a&gt;. Later this year, similar functionality will be available with Google Assistant through occupancy detection.  &lt;/p&gt;&lt;p&gt;Sleep is also a critical part in maintaining our overall well-being as we stay more at home. Last year we &lt;a href="https://blog.google/products/home/spring-healthy-habits-help-google-home/"&gt;launched&lt;/a&gt; the &lt;a href="https://support.google.com/googlenest/answer/9304145?hl=en#:~:text=The%20Gentle%20Sleep%20and%20Wake,minutes%20to%20imitate%20the%20sunrise."&gt;Gentle Sleep &amp; Wake feature&lt;/a&gt; with Philips Hue, which slowly brightens or dims the lights at a specific time or can be tied to your morning alarms. Just say, “Turn on Gentle Wake up” to your bedroom speaker to ‘set it and forget it.’ The &lt;a href="https://developers.google.com/assistant/smarthome/traits/lighteffects"&gt;Light Effects trait&lt;/a&gt; is now public so all developers can integrate their native Sleep or Wake experiences - in fact LIFX has recently launched! We encourage you to build and integrate your own unique experiences. We’ll have a larger launch moment later this year when we launch emulated Sleep and Wake effects so that it’ll work out of the box for any smart light!  &lt;/p&gt;&lt;p&gt;Another way partners will be able to innovate on our platform and provide more helpful experiences to users is by extending personal routines with custom routines designed by partners, available in the coming months. Developers will be able to create and suggest routines, not just for their devices, but that can work with other devices in a customer’s home. You’ll be able to create solutions for your customers that are based on your core business and bring value to your customers - whether it’s wellness, cleaning, or entertainment. Users will be able to browse and opt-in to approved routines and choose to have Nest and other devices react and participate in that routine.  &lt;/p&gt;&lt;p&gt;Our Smart Home efforts have grown significantly over the past several years. We now have integrations with thousands of partners covering all the major connected product categories and devices, and will continue our ambitious goal to build deeper in-home integrations. Be sure to review our docs/samples/videos to learn about all the cool new stuff, and &lt;a href="https://developers.google.com/assistant/community"&gt;connect&lt;/a&gt; with us on our dev communities. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GDBcode/~4/3iEyH5DtBuA" height="1" width="1" alt=""/&gt;</content><link rel="replies" type="application/atom+xml" href="http://developers.googleblog.com/feeds/7558285084099255212/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://developers.googleblog.com/2020/07/new-user-features-and-developer-tools-build-helpful-home.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/7558285084099255212" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/596098824972435195/posts/default/7558285084099255212" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GDBcode/~3/3iEyH5DtBuA/new-user-features-and-developer-tools-build-helpful-home.html" title=" New user features and developer tools to build the helpful 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://1.bp.blogspot.com/-XMXoklSvnaI/XwXyJkHZ_aI/AAAAAAAAJGo/k5GCs4ezVzo_0GFg4RNwBzLK8QRYGubVgCLcBGAsYHQ/s72-c/deviceaccess.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://developers.googleblog.com/2020/07/new-user-features-and-developer-tools-build-helpful-home.html</feedburner:origLink></entry></feed>
