Author Archives: Google Developers

Join the North America Android Study Jams to learn more about developing quality Android apps

Posted by Kübra Zengin, Program Manager

Android Study Jams Logo

Learning about Android development doesn’t mean you have to learn by yourself. Join fellow developers in your community and improve your skills by attending an Android Study Jam! Events are currently taking place across North America.

Android Study Jams are community events where developers come together to learn, create, and collaborate. Participants will follow guided codelabs designed to improve their development skills, all with an extra focus on improving the quality of applications.

These codelabs are created by the Android Developer Relations team at Google with three different tracks.

  1. Track one focuses on developers who are completely new to programming.
  2. Track two is for developers who are already experienced with Android development and are looking to take their skills to the next level.
  3. Track three is for advanced developers who want to learn about Modern Android Development: the Androids team’s recommended tools, APIs, and programming language to help developers more productively build better quality apps. This track will cover :
    • Jetpack Compose
    • Kotlin coroutines
    • Using Hilt and learning the importance of Dependency Injection
    • Advanced WorkManager
    • Advanced Testing Concepts
    • Jetpack Compose Basics

If you want to join an Android Study Jam, meet fellow developers, and learn alongside friends old and new, then check out this link to find an event!

Image with text saying Modern Android Development with 3 phones

Machine Learning GDEs: Q2 ‘21 highlights and achievements

Posted by HyeJung Lee, MJ You, ML Ecosystem Community Managers

Google Developers Experts (GDE) is a community of passionate developers who love to share their knowledge with others. Many of them specialize in Machine Learning (ML).

Here are some highlights showcasing the ML GDEs achievements from last quarter, which contributed to the global ML ecosystem. If you are interested in becoming an ML GDE, please scroll down to see how you can apply!

ML Developers meetup @Google I/O

ML Developer meetup at Google I/O

At I/O this year, we held two ML Developers Meetups (America/APAC and EMEA/APAC). Merve Noyan/Yusuf Sarıgöz (Turkey), Sayak Paul/Bhavesh Bhatt (India), Leigh Johnson/Margaret Maynard-Reid (USA), David Cardozo (Columbia), Vinicius Caridá/Arnaldo Gualberto (Brazil) shared their experiences in developing ML products with TensorFlow, Cloud AI or JAX and also introduced projects they are currently working on.

I/O Extended 2021

Chart showing what's included in Vertex AI

After I/O, many ML GDEs posted recap summaries of the I/O on their blogs. Chansung Park (Korea) outlined the ML keynote summary, while US-based Victor Dibia wrapped up the Top 10 Machine Learning and Design Insights from Google IO 2021.

Vertex AI was the topic of conversation at the event. Minori Matsuda from Japan wrote a Japanese article titled “Introduction of powerful Vertex AI AutoML Forecasting.” Similarly, Piero Esposito (Brazil) posted an article titled “Serverless Machine Learning Pipelines with Vertex AI: An Introduction,” including a tutorial on fully customized code. India-based Sayak Paul co-authored a blog post discussing key pieces in Vertex AI right after the Vertex AI announcement showing how to run a TensorFlow training job using Vertex AI.

Communities such as Google Developers Groups (GDG) and TensorFlow User Groups (TFUG) held extended events where speakers further discussed different ML topics from I/O, including China-based Song Lin’s presentation on TensorFlow highlights and Applications experiences from I/O which had 24,000 online attendees. Chansung Park (Korea) also gave a presentation on what Vertex AI is and what you can do with Vertex AI.

Cloud AI

Cloud AI

Leigh Johnson (USA) wrote an article titled Soft-launching an AI/ML Product as a Solo Founder, covering GCP AutoML Vision, GCP IoT Core, TensorFlow Model Garden, and TensorFlow.js. The article details the journey of a solo founder developing an ML product for detecting printing failure for 3D printers (more on this story is coming up soon, so stay tuned!)

Demo and code examples from Victor Dibia (USA)’s New York Taxi project, Minori Matsuda (Japan)’s article on AutoML and AI Platform notebook, Srivatsan Srinivasan (USA)’s video tutorials, Sayak Paul (India)’s Distributed Training in TensorFlow with AI Platform & Docker and Chansung Park (Korea)’s curated personal newsletter were all published together on Cloud blog.

Aqsa Kausar (Pakistan) gave a talk about Explainable AI in Google Cloud at the International Women’s Day Philippines event. She explained why it is important and where and how it is applied in ML workflows.

Learn agenda

Finally, ML Lab by Robert John from Nigeria, introduces the ML landscape on GCP covering from BigQueryML through AutoML to TensorFlow and AI Platform.

TensorFlow

Image of TensorFlow 2 and Learning TensorFlow JS books

Eliyar Eziz (China) published a book “TensorFlow 2 with real-life use cases”. Gant Laborde from the US authored book “Learning TensorFlow.js” which is published by O'Reilly and wrote an article “No Data No Problem - TensorFlow.js Transfer Learning” about seeking out new datasets to boldly train where no models have trained before. He also published “A Riddikulus Dataset” which talks about creating the Harry Potter dataset.

Iterated dilated convolutional neural networks for word segmentation

Hong Kong-based Guan Wang published a research paper, “Iterated Dilated Convolutional Neural Networks for Word Segmentation,” covering state-of-the-art performance improvement, which is implemented on TensorFlow by Keras.

Elyes Manai from Tunisia wrote an article “Become a Tensorflow Certified Developer ” - a guide to TensorFlow Certificate and tips.

BERT model

Greece-based George Soloupis wrote a tutorial “Fine-tune a BERT model with the use of Colab TPU” on how to finetune a BERT model that was trained specifically on greek language to perform the downstream task of text classification, using Colab’s TPU (v2–8).

JAX

India-based Aakash Nain has published the TF-JAX tutorial series (Part1, Part2, Part3, Part 4), aiming to teach everyone the building blocks of TensorFlow and JAX frameworks.

TensorFlow with Jax thumbnail

Online Meetup TensorFlow and JAX by Tzer-jen Wei from Taiwan covered JAX intro and use cases. It also touched upon different ways of writing TensorFlow models and training loops.

Neural Networks, with a practical example written in JAX

YouTube video Neural Networks, with a practical example written in JAX, probably the first JAX techtalk in Portuguese by João Guilherme Madeia Araújo (Brazil).

Keras

Keras logo

A lot of Keras examples were contributed by Sayak Paul from India and listed below are some of these examples.

Kaggle

Kaggle character distribution chart

Notebook “Simple Bayesian Ridge with Sentence Embeddings” by Ertuğrul Demir (Turkey) about a natural language processing task using BERT finetuning followed by simple linear regression on top of sentence embeddings generated by transformers.

TensorFlow logo screenshot from Learning machine learning and tensorflow with Kaggle competition video

Youhan Lee from Korea gave a talk about “Learning machine learning and TensorFlow with Kaggle competition”. He explained how to use the Kaggle platform for learning ML.

Research

Advances in machine learning and deep learning research are changing our technology, and many ML GDEs are interested and contributing.

Learning Neurl Compositional Neural Programs for Continuous Control

Karim Beguir (UK) co-authored a paper with the DeepMind team covering a novel compositional approach using Deep Reinforcement Learning to solve robotics manipulation tasks. The paper was accepted in the NeurIPS workshop.

Finally, Sayak Paul from India, together with Pin-Yu Chen, published a research paper, “Vision Transformers are Robust Learners,” covering the robustness of the Vision Transformer (ViT) against common corruptions and perturbations, distribution shifts, and natural adversarial examples.

If you want to know more about the Google Experts community and their global open-source ML contributions, please check the GDE Program website, visit the GDE Directory and connect with GDEs on Twitter and LinkedIn. You can also meet them virtually on the ML GDE’s YouTube Channel!

Deliver asynchronous notifications in Google Chat using webhooks

Posted by Charles Maxson, Developer Advocate & Justin Wexler, Strategic Cloud Engineer

As Google Workspace is redefining the future of team collaboration and Google Chat Rooms evolve into Spaces, webhooks are a useful feature that already exists in the current Chat rooms of today that allow you to deliver asynchronous messages directly into Chat rooms where users work. Webhooks in Chat are powerful and simple to use. Unlike the more well known Chatbots, which are applications built specifically for interacting synchronously with users using the Google Chat API, webhooks enable asynchronous messaging into Google Chat from applications that aren't bots themselves. In this post, we’ll explore using webhooks in Chat and demonstrate a real world use case from our work internally at Google.

The Case for Webhooks in Google Chat

Teams create and use Rooms (now Spaces) in Google Chat for many purposes. Some rooms may work along themes, such as Sales Support or Customer Service topics, while others may be more generic for specific departments or company-wide conversations. But all these use cases are centered on human activity, and as we rely on them more and more, they have become a critical way we communicate with each other.

Webhooks allow you to add another dimension to rooms by introducing information and updates from other systems and applications that fit in with the theme of these rooms and conversations. For example, in a Sales Support room, a webhook could provide alerts from a CRM system notifying users when a deal closes or when a RFP deadline is approaching. In a Customer Service room, a webhook can post urgent alerts for requests to immediately get the attention of the whole team. For more generic scenarios, webhooks can be used to remind folks in a department about upcoming deadlines or broadly share a company’s stock price with all employees at the close of the market. Whatever the situation, webhooks can help efficiently deliver data and information in real time.

A Google Real World Use Case

We have a Chat room at Google named G Workspace Community that is used to connect Googlers who want to ask questions and stay up to date with news across our product and customer teams focused on Google Workspace. As you can imagine, this room is widely used, resulting in a constant flow of posts and responses every day. One of the most commonly discussed topics is around new features, which includes keeping track of their launch timing and status on our roadmap.

At Google, we also produce the Google Workspace Updates blog, a public feed that lets everyone know when new Workspace features ship. It would be logical to assume every member of the G Workspace Community also subscribes to the Updates blog and is up to date on every feature release. But the truth is the G Workspace Community Chat room has become the main resource where Googlers get the latest information about Google Workspace. Instead of referring room members to check the blog first before posting in the Chat room asking about releases, we decided to bring the Google Workspace Updates feed into the Google Workspace Community room. Webhooks in Google Chat made it easy, and now everybody can easily stay up to date on all the updates from Google Workspace.

Meet the Google Workspace Updates “bot”

As posts about new Workspace features are released on the Updates blog, the Google Workspace Updates “bot” (aka the Google Wexbot as its known internally after its creator, Justin Wexler) adds a new thread to the Chat room that calls out the post’s title and the first 250 characters of it’s main content. This offers room members a quick glimpse of what just launched, as well as a place to quickly have a discussion around the blog content. Users can ask questions or add comments about the feature release, making it a much more enhanced and collaborative experience, and they can get the full story on the Updates blog by simply clicking READ MORE.

Image of Google Workspace Updates bot

Webhooks + Apps Script = Magic

For community members receiving these timely updates, this “bot” may seem magical. In reality, it’s neither magic nor a traditional Chat bot, so the reference in the Chat UI calling it a “bot” is a bit of a misnomer. The Google Updates “bot” is in fact a simple Google Apps Script application that parses the RSS feed about new posts, and sends them asynchronously to the room via webhooks.

Apps Script is well suited to help deliver on this use case, as it offers triggers (ie. cron jobs) that can run on time-based intervals to check the Updates blog for new posts, parse the feed XML from those posts, and return those results using the Chat Card format to the waiting webhook via a UrlFetchApp call.

In our internal implementation of the Google Workspace Updates “bot”, an Apps Script trigger runs hourly to check for new posts to the Update blog. Beyond that, the project itself is a single Apps Script project file that doesn't require a significant amount of coding, is super easy to configure with Chat rooms, and has been essentially maintenance free. Justin’s effort to create the original version only took a couple of days -- and the value for the users is clearly worth it -- hence why they insisted on naming it after him ;)

Add Google Workspace Updates “bot” (aka Wexbot) to your own Chat rooms

If you are interested in adding your own Google Workspace Updates “bot”, or you’d like to see how you can leverage Apps Script to fulfill other use cases for sending asynchronous messages to Google Chat via webhooks, the project is available up on GitHub for you to explore and implement:

Google Chat Updates Bot Project - GitHub

README | Apps Script Code.js

More Resources

To start learn more about working with Google Workspace Chatbots and using webhooks, please explore the following resources:

And remember to sign up for the Google Workspace Developer Newsletter!

Deliver asynchronous notifications in Google Chat using webhooks

Posted by Charles Maxson, Developer Advocate & Justin Wexler, Strategic Cloud Engineer

As Google Workspace is redefining the future of team collaboration and Google Chat Rooms evolve into Spaces, webhooks are a useful feature that already exists in the current Chat rooms of today that allow you to deliver asynchronous messages directly into Chat rooms where users work. Webhooks in Chat are powerful and simple to use. Unlike the more well known Chatbots, which are applications built specifically for interacting synchronously with users using the Google Chat API, webhooks enable asynchronous messaging into Google Chat from applications that aren't bots themselves. In this post, we’ll explore using webhooks in Chat and demonstrate a real world use case from our work internally at Google.

The Case for Webhooks in Google Chat

Teams create and use Rooms (now Spaces) in Google Chat for many purposes. Some rooms may work along themes, such as Sales Support or Customer Service topics, while others may be more generic for specific departments or company-wide conversations. But all these use cases are centered on human activity, and as we rely on them more and more, they have become a critical way we communicate with each other.

Webhooks allow you to add another dimension to rooms by introducing information and updates from other systems and applications that fit in with the theme of these rooms and conversations. For example, in a Sales Support room, a webhook could provide alerts from a CRM system notifying users when a deal closes or when a RFP deadline is approaching. In a Customer Service room, a webhook can post urgent alerts for requests to immediately get the attention of the whole team. For more generic scenarios, webhooks can be used to remind folks in a department about upcoming deadlines or broadly share a company’s stock price with all employees at the close of the market. Whatever the situation, webhooks can help efficiently deliver data and information in real time.

A Google Real World Use Case

We have a Chat room at Google named G Workspace Community that is used to connect Googlers who want to ask questions and stay up to date with news across our product and customer teams focused on Google Workspace. As you can imagine, this room is widely used, resulting in a constant flow of posts and responses every day. One of the most commonly discussed topics is around new features, which includes keeping track of their launch timing and status on our roadmap.

At Google, we also produce the Google Workspace Updates blog, a public feed that lets everyone know when new Workspace features ship. It would be logical to assume every member of the G Workspace Community also subscribes to the Updates blog and is up to date on every feature release. But the truth is the G Workspace Community Chat room has become the main resource where Googlers get the latest information about Google Workspace. Instead of referring room members to check the blog first before posting in the Chat room asking about releases, we decided to bring the Google Workspace Updates feed into the Google Workspace Community room. Webhooks in Google Chat made it easy, and now everybody can easily stay up to date on all the updates from Google Workspace.

Meet the Google Workspace Updates “bot”

As posts about new Workspace features are released on the Updates blog, the Google Workspace Updates “bot” (aka the Google Wexbot as its known internally after its creator, Justin Wexler) adds a new thread to the Chat room that calls out the post’s title and the first 250 characters of it’s main content. This offers room members a quick glimpse of what just launched, as well as a place to quickly have a discussion around the blog content. Users can ask questions or add comments about the feature release, making it a much more enhanced and collaborative experience, and they can get the full story on the Updates blog by simply clicking READ MORE.

Image of Google Workspace Updates bot

Webhooks + Apps Script = Magic

For community members receiving these timely updates, this “bot” may seem magical. In reality, it’s neither magic nor a traditional Chat bot, so the reference in the Chat UI calling it a “bot” is a bit of a misnomer. The Google Updates “bot” is in fact a simple Google Apps Script application that parses the RSS feed about new posts, and sends them asynchronously to the room via webhooks.

Apps Script is well suited to help deliver on this use case, as it offers triggers (ie. cron jobs) that can run on time-based intervals to check the Updates blog for new posts, parse the feed XML from those posts, and return those results using the Chat Card format to the waiting webhook via a UrlFetchApp call.

In our internal implementation of the Google Workspace Updates “bot”, an Apps Script trigger runs hourly to check for new posts to the Update blog. Beyond that, the project itself is a single Apps Script project file that doesn't require a significant amount of coding, is super easy to configure with Chat rooms, and has been essentially maintenance free. Justin’s effort to create the original version only took a couple of days -- and the value for the users is clearly worth it -- hence why they insisted on naming it after him ;)

Add Google Workspace Updates “bot” (aka Wexbot) to your own Chat rooms

If you are interested in adding your own Google Workspace Updates “bot”, or you’d like to see how you can leverage Apps Script to fulfill other use cases for sending asynchronous messages to Google Chat via webhooks, the project is available up on GitHub for you to explore and implement:

Google Chat Updates Bot Project - GitHub

README | Apps Script Code.js

More Resources

To start learn more about working with Google Workspace Chatbots and using webhooks, please explore the following resources:

And remember to sign up for the Google Workspace Developer Newsletter!

#IamaGDE: Diana Rodríguez Manrique

#IamaGDE series presents: Google Maps Platform

Welcome to #IamaGDE - a series of spotlights presenting Google Developer Experts (GDEs) from across the globe. Discover their stories, passions, and highlights of their community work.

Today, meet Diana Rodríguez— Maps, Web, Cloud, and Firebase GDE.

Google Developer Expert, Diana Rodríguez

Diana Rodríguez’s 20 years in the tech industry have been focused on community and making accessible content. She is a full-stack developer with experience in backend infrastructure, automation, and a passion for Python. A self-taught programmer, Diana also learned programming skills from attending meetups and being an active member of her local developer community. She is the first female Venezuelan GDE.

“I put a lot of myself into public speaking, workshops, and articles,” says Diana. “I want to make everything I do as open and transparent as possible.”

Diana’s first foray into working with Google Maps was in 2016, when she built an app that helped record institutional violence against women in Argentina. As a freelance developer, she uses the Google Maps Platform for her delivery services clients.

“I have plenty of clients who need not only location tracking for their delivery fleet, but also to provide specific routes,” says Diana.

“The level of interaction that’s been added to Maps has made it easier for me as a developer to work with direct clients,” says Diana, who uses the Plus Codes feature to help delivery drivers find precise locations on a map. “I’m a heavy user of plus codes. They give people in remote areas and underserved communities the chance to have location services, including emergency and delivery services.”

Getting involved in the developer community

Diana first became involved in the developer community 20 years ago, in 1999, beginning with a university user group. She attended her first Devfest in Bangkok in 2010 and has worked in multiple developer communities since then. She was a co-organizer of GDG Triangle and is now an organizer of GDG Durham in North Carolina. In 2020, she gave virtual talks to global audiences.

“It’s been great to get to know other communities and reach the far corners of the Earth,” she says.

Image of Diana Rodriguez

Favorite Google Maps Platform features and current projects

Diana is excited about the Places API and the Maps team’s continuous improvements. She says the Maps team keeps the GDEs up to date on all the latest news and takes their feedback very seriously.

“Shoutout to Claire, Alex, and Angela, who are in direct contact with us, and everyone who works with them; they have been amazing,” she says. “I look forward to showcasing more upcoming changes. What comes next will be mind-blowing, immersing people into location in a different way that is more interactive.”

Of the new features released in June 2020, which include Cloud-based maps styling and Local Context, Diana says, “Having the freedom to customize the experience a lot more is amazing.”

As a Maps GDE in 2021, Diana plans to continue working on open source tech projects that benefit the greater good, like her recently completed app for Diabetes users, ScoutX, which notifies emergency contacts when a Diabetic person’s blood glucose values are too high or too low, in case they need immediate help.

She envisions an app that expands connectivity and geolocation tracking for hikers in remote areas, using LoRaWan technologies that can withstand harsh temperatures and conditions.

“Imagine you go to Yellowstone and get lost, with no GPS signal or phone signal, but there’s a tracking device connected to a LoRaWan network sending your location,” Diana says. “It’s much easier for rescue services to find you. Rack Wireless is working on providing satellite access, as well, and having precise latitude and longitude makes mapping simple.”

In the future, Diana sees herself managing a team that makes groundbreaking discoveries and puts technologies to use to help other people.

Follow Diana on Twitter at @cotufa82

Check out Diana’s projects on GitHub

For more information on Google Maps Platform, visit our website.

For more information on Google Developer Experts, visit our website.

#IamaGDE: Diana Rodríguez Manrique

#IamaGDE series presents: Google Maps Platform

Welcome to #IamaGDE - a series of spotlights presenting Google Developer Experts (GDEs) from across the globe. Discover their stories, passions, and highlights of their community work.

Today, meet Diana Rodríguez— Maps, Web, Cloud, and Firebase GDE.

Google Developer Expert, Diana Rodríguez

Diana Rodríguez’s 20 years in the tech industry have been focused on community and making accessible content. She is a full-stack developer with experience in backend infrastructure, automation, and a passion for Python. A self-taught programmer, Diana also learned programming skills from attending meetups and being an active member of her local developer community. She is the first female Venezuelan GDE.

“I put a lot of myself into public speaking, workshops, and articles,” says Diana. “I want to make everything I do as open and transparent as possible.”

Diana’s first foray into working with Google Maps was in 2016, when she built an app that helped record institutional violence against women in Argentina. As a freelance developer, she uses the Google Maps Platform for her delivery services clients.

“I have plenty of clients who need not only location tracking for their delivery fleet, but also to provide specific routes,” says Diana.

“The level of interaction that’s been added to Maps has made it easier for me as a developer to work with direct clients,” says Diana, who uses the Plus Codes feature to help delivery drivers find precise locations on a map. “I’m a heavy user of plus codes. They give people in remote areas and underserved communities the chance to have location services, including emergency and delivery services.”

Getting involved in the developer community

Diana first became involved in the developer community 20 years ago, in 1999, beginning with a university user group. She attended her first Devfest in Bangkok in 2010 and has worked in multiple developer communities since then. She was a co-organizer of GDG Triangle and is now an organizer of GDG Durham in North Carolina. In 2020, she gave virtual talks to global audiences.

“It’s been great to get to know other communities and reach the far corners of the Earth,” she says.

Image of Diana Rodriguez

Favorite Google Maps Platform features and current projects

Diana is excited about the Places API and the Maps team’s continuous improvements. She says the Maps team keeps the GDEs up to date on all the latest news and takes their feedback very seriously.

“Shoutout to Claire, Alex, and Angela, who are in direct contact with us, and everyone who works with them; they have been amazing,” she says. “I look forward to showcasing more upcoming changes. What comes next will be mind-blowing, immersing people into location in a different way that is more interactive.”

Of the new features released in June 2020, which include Cloud-based maps styling and Local Context, Diana says, “Having the freedom to customize the experience a lot more is amazing.”

As a Maps GDE in 2021, Diana plans to continue working on open source tech projects that benefit the greater good, like her recently completed app for Diabetes users, ScoutX, which notifies emergency contacts when a Diabetic person’s blood glucose values are too high or too low, in case they need immediate help.

She envisions an app that expands connectivity and geolocation tracking for hikers in remote areas, using LoRaWan technologies that can withstand harsh temperatures and conditions.

“Imagine you go to Yellowstone and get lost, with no GPS signal or phone signal, but there’s a tracking device connected to a LoRaWan network sending your location,” Diana says. “It’s much easier for rescue services to find you. Rack Wireless is working on providing satellite access, as well, and having precise latitude and longitude makes mapping simple.”

In the future, Diana sees herself managing a team that makes groundbreaking discoveries and puts technologies to use to help other people.

Follow Diana on Twitter at @cotufa82

Check out Diana’s projects on GitHub

For more information on Google Maps Platform, visit our website.

For more information on Google Developer Experts, visit our website.

Cloud NDB to Cloud Datastore migration

Posted by Wesley Chun (@wescpy), Developer Advocate, Google Cloud

An optional migration

Serverless Migration Station is a mini-series from Serverless Expeditions focused on helping users on one of Google Cloud's serverless compute platforms modernize their applications. The video today demonstrates how to migrate a sample app from Cloud NDB (or App Engine ndb) to Cloud Datastore. While Cloud NDB suffices as a current solution for today's App Engine developers, this optional migration is for those who want to consolidate their app code to using a single client library to talk to Datastore.

Cloud Datastore started as Google App Engine's original database but matured to becoming its own standalone product in 2013. At that time, native client libraries were created for the new product so non-App Engine apps as well as App Engine second generation apps could access the service. Long-time developers have been using the original App Engine service APIs to access Datastore; for Python, this would be App Engine ndb. While the legacy ndb service is still available, its limitations and lack of availability in Python 3 are why we recommend users switch to standalone libraries like Cloud NDB in the preceding video in this series.

While Cloud NDB lets users break free from proprietary App Engine services and upgrade their applications to Python 3, it also gives non-App Engine apps access to Datastore. However, Cloud NDB's primary role is a transition tool for Python 2 App Engine developers. Non-App Engine developers and new Python 3 App Engine developers are directed to the Cloud Datastore native client library, not Cloud NDB.

As a result, those with a collection of Python 2 or Python 3 App Engine apps as well as non-App Engine apps may be using completely different libraries (ndb, Cloud NDB, Cloud Datastore) to connect to the same Datastore product. Following the best practices of code reuse, developers should consider consolidating to a single client library to access Datastore. Shared libraries provide stability and robustness with code that's constantly tested, debugged, and battle-proven. Module 2 showed users how to migrate from App Engine ndb to Cloud NDB, and today's Module 3 content focuses on migrating from Cloud NDB to Cloud Datastore. Users can also go straight from ndb directly to Cloud Datastore, skipping Cloud NDB entirely.

Migration sample and next steps

Cloud NDB follows an object model identical to App Engine ndb and is deliberately meant to be familiar to long-time Python App Engine developers while use of the Cloud Datastore client library is more like accessing a JSON document store. Their querying styles are also similar. You can compare and contrast them in the "diffs" screenshot below and in the video.

The diffs between the Cloud NDB and Cloud Datastore versions of the sample app

The "diffs" between the Cloud NDB and Cloud Datastore versions of the sample app

All that said, this migration is optional and only useful if you wish to consolidate to using a single client library. If your Python App Engine apps are stable with ndb or Cloud NDB, and you don't have any code using Cloud Datastore, there's no real reason to move unless Cloud Datastore has a compelling feature inaccessible from your current client library. If you are considering this migration and want to try it on a sample app before considering for yours, see the corresponding codelab and use the video for guidance.

It begins with the Module 2 code completed in the previous codelab/video; use your solution or ours as the "START". Both Python 2 (Module 2a folder) and Python 3 (Module 2b folder) versions are available. The goal is to arrive at the "FINISH" with an identical, working app but using a completely different Datastore client library. Our Python 2 FINISH can be found in the Module 3a folder while Python 3's FINISH is in the Module 3b folder. If something goes wrong during your migration, you can always rollback to START, or compare your solution with our FINISH. We will continue our Datastore discussion ahead in Module 6 as Cloud Firestore represents the next generation of the Datastore service.

All of these learning modules, corresponding videos (when published), codelab tutorials, START and FINISH code, etc., can be found in the migration repo. We hope to also one day cover other legacy runtimes like Java 8 and others, so stay tuned. Up next in Module 4, we'll take a different turn and showcase a product crossover, showing App Engine developers how to containerize their apps and migrate them to Cloud Run, our scalable container-hosting service in the cloud. If you can't wait for either Modules 4 or 6, try out their respective codelabs or access the code samples in the table at the repo above. Migrations aren't always easy, and we hope content like this helps you modernize your apps.

Meet some of the best indie game devs

Posted by Patricia Correa, Director, Global Developer Marketing

During the month of June we received thousands of submissions for two of our annual developer programs - the Indie Games Accelerator and the Indie Games Festival. These programs support the growth of small games studios on Google Play.

Every year we’re impressed with the art and creativity of the entries. This year was no exception. Many thanks to everyone who submitted their game.

Meet the Festival finalists

Today, we’re announcing the finalists of the Festivals in Europe, Japan, and South Koreadrumroll, please.

Indie Games

Europe

Beat Workers by NaturalPad Games, France

Bird Alone by George Batchelor, United Kingdom

Cats in Time by Pine Studio, Croatia

Figment by Bedtime Digital Games, Denmark

Froglike: The Frog Roguelike by Jimjum Studios, Israel

Garson by Anastasiya Shabunia, Belarus

Gumslinger by Itatake, Sweden

Lyxo by Emoak, Austria

Psychofunk by Tommy Søreide Kjær, Norway

Railways by Infinity Games, Portugal

Sticky Terms by kamibox, Germany

Sweet Sins Superstars by Platonic Games, Spain

Tiny Robots Recharged by Big Loop Studios, Bulgaria

Tofu Drifter by Roach Games, Russia

Towers by JOX Development, Ukraine

Unholy Adventure by Dali Games, Poland

Warplane Inc by Nuclear Games, Russia

Watch Me Stream My Mental Breakdown by Ultaan Games, Poland

Woof: The Good Boy Story by CHPV.GAMES, Russia

Zen Symmetry by 8tbl, Russia

Sign up to attend the European finals.

Indie Games

Japan

3D Chess: NOCCA NOCCA by Curiouspark, Inc.

5colors in Nate by NekodoraSoft

Amabie san by HARAPECORPORATION Inc.

Archer Battle Online by Takuya Fujieda

Cthulhu DreamStairs by Tenyu

ElectriarCode by ELECTRIAR LABO

Escape from the Closed Circle by Hanachiru

Heart of Sengoku by ZEN APP

Leaving Two Tiles Dojo by ScreenPocket

Living in the Ending World by illuCalab.

MAKOTO WAKAIDO’s Case Files “Executioner’s Wedge” by HafHaf-Oden(Sukashiuma-LAB)

Mini Mini Farm by CoffeeBreak

MonohakobiPro by CGO

Mousebusters by Odencat

Numpurr Card Wars by Nukenin

Parasite Days by Zxima

Quantum Transport by ruccho

Super Glitter Rush by tiny cactus studio

Survivor's guilt by aso

Wolf Chess by Baton

Sign up to attend the Japanese finals.

Indie Games

South Korea

Angel Saga by Alchemist Games Inc.

Animal Card Royale by Banjihagames

Animal Doll Shop by Funnyeve

BattleLive: Zombie&Human by PLOTRICK

Box It Up! Inc. by team TAPE

CATS & SOUP by HIDEA

Cats are Cute: Pop Time by kkiruk studio

Detective Mio by 1N1

Dicast: Rules of Chaos by BSS COMPANY

Forest Island by Nanali Studios

Frontier of Fortune by Dotomchi Games Inc.

FUNKYGUNNER by FUNKY5

Group Project Simulator! by Studio806

Gun Tactics by Gimle Games

Hybrid Warrior: Dungeon of the Overlord by Cat Lab

Metro Blossom by The Sane Studio

Portal Dungeon by Oblique Line

Rush Hour Rally by Soen Games

The Way Home by CONCODE

Titan Slayer by Touchholic

Sign up to attend the South Korean finals.

Join the adventure on September 4

This year the three Festivals are virtual, so everyone has the chance to explore the games, meet the developers who made them, cheer them on, and be the first to hear who the winners are.

Expect plenty of fun and some very special surprises. So, don’t miss out. Sign up now to virtually attend the events showcasing the finalists from Europe, Japan, and South Korea. The events are free to attend and will all take place in the same space, so sign up to one and you will be able to teleport to all events!

How about the Indie Games Accelerator?

If you’re interested in knowing which developers are joining the 2021 class of the Indie Games Accelerator, sign up to attend the European Festival, where we will also announce the selected developers.

Indie Games