#WeArePlay | Meet George from the UK. More stories from Croatia, USA and Kenya.

Posted by Leticia Lago, Developer Marketing

Our celebration of app and game businesses continues with more #WeArePlay stories. Today, we’re starting with George from Bristol, UK – a young entrepreneur taking the streetwear industry by storm.

After spending hours and hours searching for the latest styles in sneakers and streetwear, George realised there’s a market in helping fellow enthusiasts find the latest drops. At just 16 years old, he took it upon himself to learn to code and created his app, Droplist. It points people to upcoming special collections from major labels around the world. Find out more about his story.

Today we also spotlight few more stories from around the world:

  • Anica and Kristijan from an island in Croatia – founders of Dub Studio Productions to help music lovers around the global turn up the bass or lower the treble on their favourite songs.

  • Robert from Wyoming, founder of Bluebird Languages – language learning apps with over 6 million hours of audio lessons spanning 164 languages, from Hungarian to Haitian Creole.

  • And one more new story – because why not! This time, featuring Annabel from Kenya. After struggling to find a mechanic when stuck on the roadside in Nairobi, she and her co-founder created Ziada to help people find local service providers.

Check out all the stories now at g.co/play/weareplay and stay tuned for even more coming soon.

How useful did you find this blog post?

Migrating from App Engine Blobstore to Cloud Storage (Module 16)

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

Introduction and background

The most recent Serverless Migration Station video demonstrated how to add use of the App Engine’s Blobstore service to a sample Python 2 App Engine app, kicking off the first of a 2-part series on migrating away from Blobstore. In today’s Module 16 video, we complete this journey, arriving at Cloud Storage. Moving away from proprietary App Engine services like Blobstore makes apps more portable, giving them enough flexibility to:

Showing App Engine users how to migrate to Cloud Storage

As described previously, a Blobstore for Python 2 dependency on webapp made the Module 15 content more straightforward to implement if it was still using webapp2. To completely modernize this app here in Module 16, the following migrations should be carried out:

  • Migrate from webapp2 (and webapp) to Flask
  • Migrate from App Engine NDB to Cloud NDB
  • Migrate from App Engine Blobstore to Cloud Storage
  • Migrate from Python 2 to Python (2 and) 3

Performing the migrations

Prior to modifying the application code, a variety of configuration updates need to be made. Updates applying only to Python 2 feature a “Py2” designation while those migrating to Python 3 will see “Py3” annotations.

  1. Remove the built-in Jinja2 library from app.yaml—Jinja2 already comes with Flask, so remove use of the older built-in version which may possibly conflict with the contemporary Flask version you’re using. (Py2)
  2. Use of Cloud client libraries (such as those for Cloud NDB and Cloud Storage) require a pair of built-in libraries, grpcio and setuptools, so add those to app.yaml (Py2)
  3. Remove everything in app.yaml except for a valid runtime (Py3)
  4. Add Cloud NDB and Cloud Storage client libraries to requirements.txt (Py2 & Py3)
  5. Create an appengine_config.py supporting both built-in (those in app.yaml) and non built-in (those in requirements.txt) libraries used (Py2)

The Module 15 app already migrated away from webapp2‘s (Django) templating system to Jinja2. This is useful when migrating to Flask because Jinja2 is Flask’s default template system. Switching from App Engine NDB to Cloud NDB is fairly straightforward as the latter was designed to be mostly compatible with the original. The only change visible in this sample app is to move Datastore calls into Python with blocks.

The most significant changes occur when moving the upload and download handlers from webapp to Cloud Storage. The video and corresponding codelab go more in-depth into the necessary changes, but in summary, these are the updates required in the main application:

  1. webapp2 is replaced by Flask. Instead of using the older built-in version of Jinja2, use the version that comes with Flask.
  2. App Engine Blobstore and NDB are replaced by Cloud NDB and Cloud Storage, respectively.
  3. The webapp Blobstore handler functionality is replaced by a combination of the io standard library module plus components from Flask and Werkzeug. Furthermore, the handler classes and methods are replaced by Flask functions.
  4. The main handler class and corresponding GET and POST methods are all replaced by a single Flask function.

The results

With all the changes implemented, the original Module 15 app still operates identically in Module 16, starting with a form requesting a visit artifact followed by the most recents visits page:
The sample app’s artifact prompt page

The sample app’s most recent visits page.

The only difference is that four migrations have been completed where all of the “infrastructure” is now taken care of by non-App Engine legacy services. Furthermore, the Module 16 app could be either a Python 2 or 3 app. As far as the end-user is concerned, “nothing happened.”

Migrating sample app from App Engine Blobstore to Cloud Storage


Module 16 featured four different migrations, modernizing the Module 15 app from using App Engine legacy services like NDB and Blobstore to Cloud NDB and Cloud Storage, respectively. While we recommend users move to the latest offerings from Google Cloud, migrating from Blobstore to Cloud Storage isn’t required, and should you opt to do so, can do it on your own timeline. In addition to today’s video, be sure to check out the Module 16 codelab which leads you step-by-step through the migrations discussed.

In Fall 2021, the App Engine team extended support of many of the bundled services to 2nd generation runtimes (that have a 1st generation runtime), meaning you are no longer required to migrate to Cloud Storage when porting your app to Python 3. You can continue using Blobstore in your Python 3 app so long as you retrofit the code to access bundled services from next-generation runtimes.

If you’re using other App Engine legacy services be sure to check out the other Migration Modules in this series. All Serverless Migration Station content (codelabs, videos, source code [when available]) can be accessed at its open source repo. While our content initially focuses on Python users, the Cloud team is working on covering other language runtimes, so stay tuned. For additional video content, check out our broader Serverless Expeditions series.

Google Dev Library Letters — 12th Issue

Posted by Garima Mehra, Program Manager

‘Google Dev Library Letters’ is curated to bring you some of the latest projects developed with Google tech submitted to Google Dev Library Platform. We hope this brings you the inspiration you need for your next project!


Shape your Image: Circle, Rounded Square, or Cuts at the corner in Android by Sriyank Siddhartha

Using the MDC library, shape images in just a few lines of code by using ShapeableImageView.

Foso/Ktorfit by Jens Klingenberg

HTTP client / Kotlin Symbol Processor for Kotlin Multiplatform (Js, Jvm, Android, Native, iOS) using KSP and Ktor clients inspired by Retrofit.

From offstage to onstage, my experience of becoming a Google Developer Expert

Written by Shuyu (Asher) Guo, Dart & Flutter GDE, China

At the end of May 2022, after more than a month of Google Developer Expert interviews, I finally became the fourth Flutter & Dart GDE in China.

I believe that the title of GDE should be very familiar for Android or Machine Learning developers. If you’re not familiar, the Google Developer Experts program is a global network of highly experienced technology experts, influencers, and thought leaders who have expertise in Google technologies, and are active leaders in the space and contribute to the wider developer and startup ecosystem.

My journey to becoming a GDE

In 2013, Android Bus was my first exposure to the Android community and it was at the ApkBus conference that I came into contact with the first GDE I’ve ever met. At that conference, I made Android developer friends and I also met some event organizers who invited me to speak at future events.

After the conference, I started my public speaking journey and spoke about Flutter because of the opportunities that came from networking and meeting the right people. By being more active in the community through speaking, I received an invitation to become a GDE in 2020. However, I learned that the application process is conducted in English and because of this, I ultimately didn’t complete the application process.

In 2021, while I was speaking at the Google DevFest conference, a GDE friend asked me again if I was interested in becoming a GDE, and with the encouragement of a team member from Google, I finally started preparing for the GDE application.

Application process

During the application process, the Google team pays careful attention to two aspects:

  1. Technical competence: your technical expertise in the field you are applying for
  2. Technical influence: such as output in areas such as public speaking, articles, and open source

I was not confident in speaking in English so I practiced before my interviews and I also translated some of my articles and posted them to Medium in English. Then I started my interview journey. The first interviewer mainly focused on the technical content of Flutter and Dart and despite my little experience with Flutter, my first community interview was completed.

The day after I completed the initial interview, I received a notification that I was assigned an interviewer for the product interview. The content of the product interview mainly revolved around some of my experience with Flutter technology. The interviewer was interested in the content of the books I had written and some awards I won that happened to be in the bookcase behind me, proving to be an excellent conversation starter. The next day, I received an email letting me know that I passed the interview – and after I signed the various agreements and terms and conditions, I had a final meeting with the team to become a GDE! Once I officially received the confirmation email from the GDE program, I was pulled into various groups, Slack, and projects. As a developer, I consider accomplishing the feat of becoming a GDE a major milestone.

Whether it is the GDE community or a Googler conducting the interviews, everyone was very friendly. I received a lot of support throughout my journey to becoming a GDE and offer my support to anyone interested in joining the community. Please feel free to connect with me at https://github.com/carguo!

Firebase Stories: Celebrating our developer community

Posted by Akua Prempeh Developer Marketing

When we ask you what you like best about Firebase, a lot of you tell us it’s the community that makes Firebase special. We are excited to highlight developers in the community who are using Firebase in their apps through a new series called, Firebase Stories.

Firebase Stories celebrates developers whose apps are helping promote positive change in their communities. Starting today, and over the coming months, you’ll hear from developers and founders from around the world about their app development journeys. Additionally, these developers will demo how they are using Firebase tools in their projects so you can apply Firebase to your own apps. Everyone can watch the demos together and chat with both the developers and members of the Firebase team along the way. We’ll also share guided codelabs on these Firebase features so you can get hands-on experience with them. Stay tuned for more details!

Lastly, we’d love to hear from you too. Use the hashtag #FirebaseStories on your social channels to share how Firebase empowers you throughout your app development journey. We will regularly select and share some stories on our channels.

To learn more about this campaign, visit our website, follow us on Twitter and subscribe to the Firebase YouTube channel.

Google Play Indie Games Festival: Finalists revealed

Posted by Patricia Correa, Director, Global Developer Marketing

The Indie Games Festival shines a spotlight on some of the best games on Google Play, and celebrates the passion and creativity that small games studios bring to gamers worldwide. This year we are hosting Festival in South Korea, Japan and Europe, for local developers and gamers from all over the world.

Earlier this summer, we opened submissions, and today we’re revealing the finalists. Scroll down to see the shortlisted games!

Join the finals

September 3rd will be a jam packed day for indie games fans. Everyone is invited to attend the finals for the three Festivals, starting with South Korea at 2pm KST, followed shortly after by Japan at 3pm JST, and wrapping up with Europe at 11am CET.

The finals will be held in a custom virtual world where you can meet the people behind the finalist games, explore the titles, have fun with gamers from around the world, and be the first to discover the winners.

The events will be hosted by Julia Hardy (Europe), Inho Jung (Korea) and Kajisac (Japan).

At the European finals we will also reveal the class of 2022 of the Indie Games Accelerator, a program that helps small game studios take their game to the next level by providing them training and mentorship.

Without further ado, please meet the finalists and join us in congratulating them!


(in alphabetical order, also in this collection)

Blacken Slash

DT Space Races

Dungeons of Dreadrock

Find Hidden Objects Game (AR)

Fury Unleashed

Get Together: A Coop Adventure

Gladiators: Survival in Rome

Hygge is…

Kingdom: Idle Gold Tycoon

Kitty Q

Light It Up: Energy Loops

Luna Ravel

Paths: Beatrice’s adventure


Please, Touch The Artwork



Square Valley

sugar game




(in alphabetical order)

A Year of Springs

Attack on Tankette

Brave Farm Survival

Cards and Dragons Sealed

Catastrophe Restaurant

Crazy Donuts

DeathAntique (Early Access not yet available globally)

Dungeon and Gravestone


GenEi AP: Empty Heart


Jack & Detectives

Raspberry Mash


Statute of Limitations “1 minute” world


Sushi Food Cart

Time for Coffee in the Strange Forest

Train’s Run




(in alphabetical order)

Bingo Star

Calibur League


Counting Star

Cube Of Life: Resurrection

Drawing Beats!

Dungeon Rogue


Idle Ghost Hotel

Lost Pages

Meow Tower: Nonogram

Merge of Mini : with your legion


Random Card


Soul Launcher


The Greater


Undead vs Demon

More about the Indie Games Festival and the Indie Games Accelerator

At Google Play we’re committed to helping developers of all sizes succeed on our platform. Programs like the Festival and the Accelerator are here to help small games studios:

  • Festival | Promotions & prizes that put your game in the spotlight: This contest is your chance to showcase your game to industry experts and players worldwide, and win prizes that will celebrate your art and promote your game.
  • Accelerator | Training and mentorship to supercharge your growth: Over a period of 10 weeks, you will get tailored online training sessions and mentorship from industry and Google experts to help you polish your game and scale with Google Play.

    Learn more about the programs.

    For more updates about all of our programs, resources and tools for indie game developers, follow us on Twitter @GooglePlayBiz and Google Play business community on LinkedIn.

    How useful did you find this blog post?

    Meet the 2022 Code Jam World Finalists!

    Posted by Julia DeLorenzo, Program Manager, Coding Competitions

    The Code Jam World Finals returns!

    Over the past several months, participants have worked their way through multiple rounds of algorithmic coding challenges, and solved some of the most challenging competitive programming problems. The field has been narrowed down from tens of thousands of participants, to the top competitors who will face off at the World Finals on August 5th, 2022

    Join us 16:30 UTC for a livestream to see which one of these finalists will be crowned the Code Jam 2022 World Champion, winning the grand prize of $15,000 USD!

    Here are this year’s finalists sharing their favorite music genres, tips, fun facts, and more.

    This year’s Code Jam World Finalists are:

    Antonio Molina Lovett

    Handle: y0105w49

    What’s your favorite music to listen to while coding?
    “Always looping the Vicious Delicious album by Infected Mushroom.”

    Yuhao Du

    Handle: xll114514

    Code Jam claim to fame:
    This is Yuhao’s second time at the Code Jam World Finals, previously competing in the 2021 World Finals.

    Benjamin Qi

    Handle: Benq

    What’s your favorite 2022 Code Jam Problem?
    “Qualification Round – Twisty Little Passages. First time I used importance sampling in a contest!”

    Sangsoo Park

    Handle: molamola

    What does your handle mean?
    “1. I personally like sunfish 🙂
    2. I like the way it sounds.
    3. Mola is pronounced “몰라” in Korean, which means “I don’t know”.”

    Daniel Rutschmann

    Handle: dacin21

    What’s the best coding competition advice you’ve ever received?
    “Have fun and always try to challenge yourself by solving problems that seem too difficult at first.”

    Mingyang Deng

    Handle: CauchySheep

    What’s an interesting and fun fact about yourself?
    “I love random walking.”

    Gennady Korotkevich

    Handle: Gennady.Korotkevich

    What’s your favorite 2022 Code Jam Problem?
    Saving the Jelly from Round 2 took the most creativity to solve!”

    Alexander Golovanov

    Handle: Golovanov399

    What’s an interesting and fun fact about yourself?
    “I have 11 musical instruments, most of which I can only play on a level “may accompany in a song I know.”

    Andrew He

    Handle: ecnerwala

    Code Jam claim to fame:
    This will be Andrew’s fourth time competing in the Code Jam World Finals, having competed in 2019, 2020, and 2021 previously.

    Aleksei Esin

    Handle: ImBarD

    What’s an interesting and fun fact about yourself?
    “I love bungee jumping.”

    Lingyu Jiang

    Handle: jiangly

    What’s an interesting and fun fact about yourself?
    This is Lingyu’s first time competing in the Code Jam World Finals.

    Kevin Sun

    Handle: ksun48

    Code Jam claim to fame:
    This will be Kevin’s third time competing in the Code Jam World Finals, having competed in 2019 and 2020 previously.

    Lukas Michel

    Handle: lumibons

    What does your handle mean?
    “It’s a combination of letters from my name and the name of the village where I grew up.”

    Matvii Aslandukov

    Handle: BigBag

    What’s an interesting and fun fact about yourself?
    “I enjoy playing sports such as tennis, table tennis, volleyball, football, as well as playing piano and guitar.”

    Borys Minaiev

    Handle: qwerty787788

    What’s an interesting and fun fact about yourself?
    “A year ago I started doing buildering and we created a chat with just 3 people in it. Now there are almost 100 participants. Who could imagine it would grow so fast?”

    Yahor Dubovik

    Handle: mhg

    What’s your favorite music to listen to while coding?
    “Red Hot Chilli Peppers.”

    Mateusz Radecki

    Handle: Radewoosh

    What’s the best coding competition advice you’ve ever received?
    “Becoming good isn’t about creating a chance to solve a problem. It’s about removing a chance to not solve a problem.”

    Nikolay Kalinin

    Handle: KalininN

    What’s an interesting and fun fact about yourself?
    “I’m an experimentalist in laser physics, also I love traveling and photography.”

    Simon Lindholm

    Handle: simonlindholm

    What’s an interesting and fun fact about yourself?
    “I’ve been really into the Super Mario 64 A Button Challenge recently, and N64 game decompilation. Also, mushroom hunting.”

    Kento Nikaido

    Handle: Snuke

    What’s an interesting and fun fact about yourself?
    “I’m a cat. My recent hobby is Sed Puzzle

    Tiancheng Lou

    Handle: ACRushTC

    Code Jam claim to fame:
    This will be Tiancheng’s eighth Code Jam World Finals, having previously competed in the World Finals in 2006, 2008, 2009, 2010, 2011, 2019, 2021.

    Aleksei Daniliuk

    Handle: Um_nik

    What’s your favorite 2022 Code Jam Problem?
    I, O Bot from Round 2, because it was actually a competitive programming problem”

    Yuta Takaya

    Handle: yutaka1999

    What’s your favorite 2022 Code Jam Problem?
    Saving the Jelly. It is mainly because I solved it in the last five minutes of the contest.”

    Konstantin Semenov

    Handle: zemen

    Code Jam claim to fame:
    This will be Konstantin’s third Code Jam World Finals, having previously competed in the World Finals in 2017 and 2018.

    Watch the Code Jam World Finals Livestream 

    Join us on August 5 at 16:30 UTC for a livestream of the Code Jam 2022 World Finals. 

    Watch all the action unfold as the Code Jam team broadcasts live from Google New York. You’ll have an opportunity to hear from our team, see Code Jam engineers explain the problems from the round, and watch live as we reveal the scoreboard and announce this year’s winners!

    At the end, one of these finalists will be crowned the Code Jam 2022 World Champion, winning the grand prize of $15,000 USD. Good luck to all the finalists and as always, happy coding!

    RandoTek: Traveling around Tunisia to share technical knowledge

    Posted by Salim Abid, Regional Lead. Middle East & North Africa, Google Developers

    Training young Tunisian developers in remote areas

    On weekends, the volunteers would travel for hours to new regions, sometimes on bumpy roads and on crowded, rickety buses. Their purpose? To inspire others around the country and teach them about new technologies. When the members of two Google Developer Groups (GDG) in the Beja and Sousse regions of Tunisia came together to address the challenge that many of their fellow Tunisian citizens had limited access to technology. They decided to make a difference by launching Randotek, a program in Tunisia to help train young developers that gets its name from the French word randonne, which means to hike.

    Many community members from these chapters, including Alaedeen Eloueryemmi of GDG Sousse and Yasmina Rebai of GDG Beja, support the initiative. Alaedeen, a software engineer, joined GDG Sousse in 2021, after graduating from university, where he co-founded the ESSTHS Google Developer Student Club. Yasmina joined GDG Beja at the suggestions of a software engineer friend.

    Sharing technology knowledge and building community

    The origin story for GDG RandoTek goes back to January 2022, when Alaedeen gave a talk at DevFest Beja. During his talk, he and the other members of the GDG Beja and GDG Sousse teams noticed many students couldn’t follow his talk because of their lack of familiarity with Google technologies. Acknowledging that many of their fellow Tunisian citizens need more access to technology, the GDG RandoTek volunteers began teaching workshops in February 2022.

    “We wanted to give others an overview of the community and the new technologies out there,” says Alaedeen. “We want to build a strong community of developers and allow people to achieve their dreams. In Tunisia, people don’t always have access to courses or materials, so we bring that to them.”

    Positive impacts for the community

    To date, the program generated positive impacts, in Tunisia including:

    • The organizers hosted nine sessions for over 412 developers in eight regions of Tunisia and five cities.
    • The community initiative has run many four-hour workshops on Google technologies including Flutter; Go; Angular; progressive web apps; AI and machine learning; TensorFlow; Google Cloud Platform; and DevOps.
    • Attendees expressed interest in learning more about specific technologies, like Flutter and Cloud, and in joining a GDG group.
    • GDG RandoTek members continue to be asked to give additional workshops, online and in-person, making it a powerful learning experience for them as well.

    Building a tech community in Tunisia

    The GDG RandoTek organizers note that as more young developers receive training on various technologies, they will feel inspired to form new developer communities in their own local area. The more of those types of groups there are, the easier it will be to reach even more people in Tunisia. “That’s what we want to spread in Tunisia–to have more than one GDSC in every region, and more than one chapter in every place,” says Yasmina. The RandoTek team remains motivated to share knowledge and expand the community with new members.

    “What we wanted to do during this program is to share the knowledge,” says Alaedeen. “Share the spirit of community work and get together and learn stuff.” The organizers all seem to share a mutual admiration for helping others. “Seeing how the world evolves each day and the need for technologies in our daily life, I would advise anyone, especially students, to learn as much technology as possible because they’re going to use them someday, somehow,” Yasmina says.

    What’s next for GDG RandoTek in Tunisia

    For organizers like Aladeen, Yasmina, and their collaborators, the GDG community unlocks potential, creates leaders, and helps people relate to each other through technology. It creates a way to motivate others to become teachers and share technical knowledge and build skills.

    “For me, if it wasn’t for GDG, I wouldn’t be the person I am today,” says Alaedeen. “It improved my career, my management skills, and my technical skills, and I want everyone to have that opportunity.”

    Visit the Google Developer Groups page and find out how to join a Google Developer Community near you!

    How to use App Engine Blobstore (Module 15)

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

    Introduction and background

    In our ongoing Serverless Migration Station mini-series aimed at helping developers modernize their serverless applications, one of the key objectives for Google App Engine developers is to upgrade to the latest language runtimes, such as from Python 2 to 3 or Java 8 to 17. Another goal is to demonstrate how to move away from App Engine legacy APIs (now referred to as “bundled services”) to Cloud standalone replacement services. Once this has been accomplished, apps are much more portable, making them flexible enough to:

    Developers building web apps that provide for user uploads or serve large files like videos or audio clips can benefit from convenient “blob” storage backing such functionality, and App Engine’s Blobstore serves this specific purpose. As mentioned above, moving away from proprietary App Engine services like Blobstore makes user apps more portable. The original underlying Blobstore infrastructure eventually merged with the Cloud Storage service anyway, so it’s logical to move completely to Cloud Storage when convenient, and this content is inform on this process.

    Showing App Engine users how to use its Blobstore service

    In today’s Module 15 video, we begin this journey by showing users how to add Blobstore usage to a sample app, setting us up for our next move to Cloud Storage in Module 16. Similar videos in this series adding use of an App Engine bundled service start with a Python 2 sample app that has already migrated web frameworks from webapp2 to Flask, but not this time.

    Blobstore for Python 2 has a dependency on webapp, the original App Engine micro framework replaced by webapp2 when the Python 2.5 runtime was deprecated in favor of 2.7. Because the Blobstore handlers were left “stuck” in webapp, it’s better to start with a more generic webapp2 app prior to a Flask migration. This isn’t an issue because we modernize this app completely in Module 16 by:

    • Migrating from webapp2 (and webapp) to Flask
    • Migrating from App Engine NDB to Cloud NDB
    • Migrating from App Engine Blobstore to Cloud Storage
    • Migrating from Python 2 to Python (2 and) 3

    We’ll go into more detail in Module 16, but it suffices to say that once those migrations are complete, the resulting app becomes portable enough for all the possibilities mentioned at the top.

    Adding use of Blobstore

    The original sample app registers individual web page “visits,” storing visitor information such as the IP address and user agent, then displaying the most recent visits to the end-user. In today’s video, we add one additional feature: allowing visitors to optionally augment their visits with a file artifact, like an image. Instead of registering a visit immediately, the visitor is first prompted to provide the artifact, as illustrated below.

    The updated sample app’s new artifact prompt page

    The end-user can choose to do so or click a “Skip” button to opt-out. Once this process is complete, the same most recent visits page is then rendered, with one difference: an additional link to view a visit artifact if one’s available.

    The sample app’s updated most recent visits page

    Below is pseudocode representing the core part of the app that was altered to add Blobstore usage, namely new upload and download handlers as well as the changes required of the main handler. Upon the initial GET request, the artifact form is presented. When the user submits an artifact or skips, the upload handler POSTs back to home (“/”) via an HTTP 307 to preserve the verb, and then the most recent visits page is rendered as expected. There, if the end-user wishes to view a visit artifact, they can click a “view” link where the download handler which fetches and returns the corresponding artifact from the Blobstore service, otherwise an HTTP 404 if the artifact wasn’t found. The bolded lines represent the new or altered code.

    Adding App Engine Blobstore usage to sample app


    In this “migration,” we added Blobstore usage to support visit artifacts to the Module 0 baseline sample app and arrived at the finish line with the Module 15 sample app. To get hands-on experience doing it yourself, do the codelab by hand and follow along with the video. Then you’ll be ready to upgrade to Cloud Storage should you choose to do so. 

    In Fall 2021, the App Engine team extended support of many of the bundled services to 2nd generation runtimes (that have a 1st generation runtime), meaning you are no longer required to migrate to Cloud Storage when porting your app to Python 3. You can continue using Blobstore in your Python 3 app so long as you retrofit the code to access bundled services from next-generation runtimes

    If you do want to move to Cloud Storage, Module 16 is next. You can also try its codelab to get a head start. All Serverless Migration Station content (codelabs, videos, source code [when available]) can be accessed at its open source repo. While our content initially focuses on Python users, the Cloud team is working on covering other language runtimes, so stay tuned. For additional video content, check out our broader Serverless Expeditions series.

    Machine Learning Communities: Q2 ‘22 highlights and achievements

    Posted by Nari Yoon, Hee Jung, DevRel Community Manager / Soonson Kwon, DevRel Program Manager

    Let’s explore highlights and accomplishments of vast Google Machine Learning communities over the second quarter of the year! We are enthusiastic and grateful about all the activities by the global network of ML communities. Here are the highlights!


    TFUG Agadir hosted #MLReady phase as a part of #30DaysOfML. #MLReady aimed to prepare the attendees with the knowledge required to understand the different types of problems which deep learning can solve, and helped attendees be prepared for the TensorFlow Certificate.

    TFUG Taipei hosted the basic Python and TensorFlow courses named From Python to TensorFlow. The aim of these events is to help everyone learn about the basics of Python and TensorFlow, including TensorFlow Hub, TensorFlow API. The event videos are shared every week via Youtube playlist.

    TFUG New York hosted Introduction to Neural Radiance Fields for TensorFlow users. The talk included Volume Rendering, 3D view synthesis, and links to a minimal implementation of NeRF using Keras and TensorFlow. In the event, ML GDE Aritra Roy Gosthipaty (India) had a talk focusing on breaking the concepts of the academic paper, NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis into simpler and more ingestible snippets.

    TFUG Turkey, GDG Edirne and GDG Mersin organized a TensorFlow Bootcamp 22 and ML GDE M. Yusuf Sarıgöz (Turkey) participated as a speaker, TensorFlow Ecosystem: Get most out of auxiliary packages. Yusuf demonstrated the inner workings of TensorFlow, how variables, tensors and operations interact with each other, and how auxiliary packages are built upon this skeleton.

    TFUG Mumbai hosted the June Meetup and 110 folks gathered. ML GDE Sayak Paul (India) and TFUG mentor Darshan Despande shared knowledge through sessions. And ML workshops for beginners went on and participants built up machine learning models without writing a single line of code.

    ML GDE Hugo Zanini (Brazil) wrote Realtime SKU detection in the browser using TensorFlow.js. He shared a solution for a well-known problem in the consumer packaged goods (CPG) industry: real-time and offline SKU detection using TensorFlow.js.

    ML GDE Gad Benram (Portugal) wrote Can a couple TensorFlow lines reduce overfitting? He explained how just a few lines of code can generate data augmentations and boost a model’s performance on the validation set.

    ML GDE Victor Dibia (USA) wrote How to Build An Android App and Integrate Tensorflow ML Models sharing how to run machine learning models locally on Android mobile devices, How to Implement Gradient Explanations for a HuggingFace Text Classification Model (Tensorflow 2.0) explaining in 5 steps about how to verify the model is focusing on the right tokens to classify text. He also wrote how to finetune a HuggingFace model for text classification, using Tensorflow 2.0.

    ML GDE Karthic Rao (India) released a new series ML for JS developers with TFJS. This series is a combination of short portrait and long landscape videos. You can learn how to build a toxic word detector using TensorFlow.js.

    ML GDE Sayak Paul (India) implemented the DeiT family of ViT models, ported the pre-trained params into the implementation, and provided code for off-the-shelf inference, fine-tuning, visualizing attention rollout plots, distilling ViT models through attention. (code | pretrained model | tutorial)

    ML GDE Sayak Paul (India) and ML GDE Aritra Roy Gosthipaty (India) inspected various phenomena of a Vision Transformer, shared insights from various relevant works done in the area, and provided concise implementations that are compatible with Keras models. They provide tools to probe into the representations learned by different families of Vision Transformers. (tutorial | code)


    ML GDE Aakash Nain (India) had a special talk, Introduction to JAX for ML GDEs, TFUG organizers and ML community network organizers. He covered the fundamentals of JAX/Flax so that more and more people try out JAX in the near future.

    ML GDE Seunghyun Lee (Korea) started a project, Training and Lightweighting Cookbook in JAX/FLAX. This project attempts to build a neural network training and lightweighting cookbook including three kinds of lightweighting solutions, i.e., knowledge distillation, filter pruning, and quantization.

    ML GDE Yucheng Wang (China) wrote History and features of JAX and explained the difference between JAX and Tensorflow.

    ML GDE Martin Andrews (Singapore) shared a video, Practical JAX : Using Hugging Face BERT on TPUs. He reviewed the Hugging Face BERT code, written in JAX/Flax, being fine-tuned on Google’s Colab using Google TPUs. (Notebook for the video)

    ML GDE Soumik Rakshit (India) wrote Implementing NeRF in JAX. He attempts to create a minimal implementation of 3D volumetric rendering of scenes represented by Neural Radiance Fields.


    ML GDEs’ Kaggle notebooks were announced as the winner of Google OSS Expert Prize on Kaggle: Sayak Paul and Aritra Roy Gosthipaty’s Masked Image Modeling with Autoencoders in March; Sayak Paul’s Distilling Vision Transformers in April; Sayak Paul & Aritra Roy Gosthipaty’s Investigating Vision Transformer Representations; Soumik Rakshit’s Tensorflow Implementation of Zero-Reference Deep Curve Estimation in May and Aakash Nain’s The Definitive Guide to Augmentation in TensorFlow and JAX in June.

    ML GDE Luca Massaron (Italy) published The Kaggle Book with Konrad Banachewicz. This book details competition analysis, sample code, end-to-end pipelines, best practices, and tips & tricks. And in the online event, Luca and the co-author talked about how to compete on Kaggle.

    ML GDE Ertuğrul Demir (Turkey) wrote Kaggle Handbook: Fundamentals to Survive a Kaggle Shake-up covering bias-variance tradeoff, validation set, and cross validation approach. In the second post of the series, he showed more techniques using analogies and case studies.

    TFUG Chennai hosted ML Study Jam with Kaggle and created study groups for the interested participants. More than 60% of members were active during the whole program and many of them shared their completion certificates.

    TFUG Mysuru organizer Usha Rengaraju shared a Kaggle notebook which contains the implementation of the research paper: UNETR – Transformers for 3D Biomedical Image Segmentation. The model automatically segments the stomach and intestines on MRI scans.


    ML GDE Sayak Paul (India) and ML GDE Chansung Park (Korea) shared how to deploy a deep learning model with Docker, Kubernetes, and Github actions, with two promising ways – FastAPI (for REST) and TF Serving (for gRPC).

    ML GDE Ukjae Jeong (Korea) and ML Engineers at Karrot Market, a mobile commerce unicorn with 23M users, wrote Why Karrot Uses TFX, and How to Improve Productivity on ML Pipeline Development.

    ML GDE Jun Jiang (China) had a talk introducing the concept of MLOps, the production-level end-to-end solutions of Google & TensorFlow, and how to use TFX to build the search and recommendation system & scientific research platform for large-scale machine learning training.

    ML GDE Piero Esposito (Brazil) wrote Building Deep Learning Pipelines with Tensorflow Extended. He showed how to get started with TFX locally and how to move a TFX pipeline from local environment to Vertex AI; and provided code samples to adapt and get started with TFX.

    TFUG São Paulo (Brazil) had a series of online webinars on TensorFlow and TFX. In the TFX session, they focused on how to put the models into production. They talked about the data structures in TFX and implementation of the first pipeline in TFX: ingesting and validating data.

    TFUG Stockholm hosted MLOps, TensorFlow in Production, and TFX covering why, what and how you can effectively leverage MLOps best practices to scale ML efforts and had a look at how TFX can be used for designing and deploying ML pipelines.

    Cloud AI

    ML GDE Chansung Park (Korea) wrote MLOps System with AutoML and Pipeline in Vertex AI on GCP official blog. He showed how Google Cloud Storage and Google Cloud Functions can help manage data and handle events in the MLOps system.

    He also shared the Github repository, Continuous Adaptation with VertexAI’s AutoML and Pipeline. This contains two notebooks to demonstrate how to automate to produce a new AutoML model when the new dataset comes in.

    TFUG Northwest (Portland) hosted The State and Future of AI + ML/MLOps/VertexAI lab walkthrough. In this event, ML GDE Al Kari (USA) outlined the technology landscape of AI, ML, MLOps and frameworks. Googler Andrew Ferlitsch had a talk about Google Cloud AI’s definition of the 8 stages of MLOps for enterprise scale production and how Vertex AI fits into each stage. And MLOps engineer Chris Thompson covered how easy it is to deploy a model using the Vertex AI tools.


    ML GDE Qinghua Duan (China) released a video which introduces Google’s latest 540 billion parameter model. He introduced the paper PaLM, and described the basic training process and innovations.

    ML GDE Rumei LI (China) wrote blog postings reviewing papers, DeepMind’s Flamingo and Google’s PaLM.

    #WeArePlay | Meet Melissa from BringFido in South Carolina. More stories from Japan, India & France.

    Posted by Leticia Lago, Developer Marketing

    We’re back with more #WeArePlay stories to celebrate you: the global community of people behind apps and games businesses.

    Following last week’s “virtual roadtrip” of all of the US, today we’re kicking off with Melissa from Greenville, South Carolina. She’s on a mission to make the world a more pet-friendly place. Her app, BringFido, helps people find somewhere to stay, eat or visit with their furry friends. In this film you will meet her, her dogs Ace and Roxy, and hear how she went from idea, to website, to growing app and thriving business.

    This week we are also introducing you to game founders from other parts of the world:

    • Arnaud, an AI-enthusiast from Chartres in France, who founded Elokence. This 12-people team created Akinator, which has been downloaded over 260 million times on Google Play.
    • Daigo, a creative indie from Japan, founder of Odencat, whose games have won multiple accolades.
    • Keerti and Kashyap, a cricket-loving couple from Hyderabad in India, who used their life savings to start Hitwicket Cricket Games. Millions of fans worldwide enjoy their games.

    Check out all the stories now at g.co/play/weareplay and stay tuned for even more coming soon.

    How useful did you find this blog post?

    Campaign Anomaly Detector

    Posted by Meirav Shaul, Dvir Kalev, Roy Sela, Omri Levy, Tal Rimon Edelstein, Elad Ben-David, and Tzhahi Zilberstein, Team Lead

    A while ago Google released “Account Anomaly Detector” which you know.

    A few clients approached the gTech team at Google, asking to add some monitoring capabilities.

    That’s why we created an unofficial, open-source evolved version of it. We named it “Campaign Anomaly Detector”. It has recently been published on github, ready for advertisers to deploy and use it for defining and detecting metrics anomalies.

    Hosted on github, everyone is more than welcome to contribute more code to this ever-growing project. Happy monitoring!

    Solution Requirements

    Key Features

    • Entity to Monitor – option to select all/some child accounts under an MCC/specific campaigns.
    • Period selection – option to select both current and past periods for comparison
    • Metrics Selection & Anomaly Definition option to select key metrics to be monitored, and the threshold values which will be considered as anomalies.
    • Dashboard – Data studio dashboard that presents identified anomalies
    • Email alerts option to define the emails to notify once anomaly is identified

    Key Components

    The solution includes the following components:

    • Configuration Sheet (“input”) – Google Sheet for setting the monitoring parameters (entities for monitoring, period selection, metrics & thresholds, email alerts)
    • Simulator to support the period calculation and settings
    • Dashboard Sheet (“results”) – dedicated tab in the configuration sheet, that presents the identified anomalies
    • Data Studio Dashboard that presents the identified anomalies

    Tutorial Video


    • Find the open source repository here


    Copyright 2022 Google LLC. This solution, including any related sample code or data, is made available on an “as is,” “as available,” and “with all faults” basis, solely for illustrative purposes, and without warranty or representation of any kind. This solution is experimental, unsupported and provided solely for your convenience. Your use of it is subject to your agreements with Google, as applicable, and may constitute a beta feature as defined under those agreements. To the extent that you make any data available to Google in connection with your use of the solution, you represent and warrant that you have all necessary and appropriate rights, consents and permissions to permit Google to use and process that data. By using any portion of this solution, you acknowledge, assume and accept all risks, known and unknown, associated with its usage, including with respect to your deployment of any portion of this solution in your systems, or usage in connection with your business, if at all.