Python Bytes
Python Bytes
Jul 9, 2020
#189 What does str.strip() do? Are you sure?
32 min

Sponsored by us! Support our work through:

Brian #1: Improving Python exception chaining with raise-from

  • Ram Rachum
  • Python3 has a change called PEP 3134: Exception Chaining and Embedded Tracebacks
  • It should be used more than it is.
  • If an exception is raised from an except clause, it could be because:
    • something unexpected happened
    • “An exception was raised, and we decided to replace it with a different exception that will make more sense to whoever called this code. Maybe the new exception will make more sense because we’re giving a more helpful error message. Or maybe we’re using an exception class that’s more relevant to the problem domain, and whoever’s calling our code could wrap the call with an except clause that’s tailored for this failure mode.”
  • If it’s the second case, you should change your code to something like this:
    try:
        [HTML_REMOVED]
    except ExpectedExceptionType as e:
        raise BetterException('Better explanation') from e
  • It’s the from e that does the magic.
  • And now instead of getting During handling of the above exception, another exception occurred:
  • You get: The above exception was the direct cause of the following exception:
  • “That’s how you know you have a case of a friendly wrapping of an exception.”

Michael #2: Create and publish interactive reports in Python

  • via Tim Pogue
  • Datapane is an open source framework which makes it easy to turn scripts and notebooks into interactive reports.
  • Free for individuals, paid(?) for teams
  • Build reports in Python and deploy scripts and notebooks as self-service reporting tools.
  • Analyze data in your own tools: Write code and analyze data in your own editor or environment, whether its Jupyter, Colab, or Airflow.
  • Build reports in code: Datapane's framework makes it easy to create rich reports from DataFrames, Markdown, and visualization libraries, such as Altair.
  • Publish and share: Export as standalone HTML files, or publish reports to Datapane.com for free, where they can be shared and embedded.
  • Add forms to filter / drive the report
  • Everything in Datapane is an API. Deploy scripts and generate reports from your server, GitHub, Airflow, or CI system.
  • Check out the gallery.

Brian #3: Pickle’s nine flaws

  • Ned Batchelder
  • Instead of “never use pickle”, Ned says “only use pickle if you are OK with it’s nine flaws”
  • The flaws
    • Insecure : Malicious pickles can get the unpickler to run bad code
    • Old pickles look like old code : Any changes to your data structures might break your ability to read old pickles
    • Implicit: All data is serialized as class objects, even if that’s not what you want.
    • Over-serializes: Serializes everything in your objects, even things like cached computation
    • __init__ isn’t called : during unpickling, even if it really should be for your situation
    • Python only : for the most part, it’s not something you can use with other languages
    • Unreadable: binary, so good luck debugging problems
    • Appears to pickle code: but doesn’t really. Keeping a list of functions or classes? It’ll get pickled as names and get bound to a function/class matching the name during unpickling.
    • Slow
  • Some of it you can work around, but then, why?
  • Alternatives: JSON, marshmallow, cattrs, protocol buffers, …

Michael #4: PEP 602 -- Annual Release Cycle for Python

  • by Łukasz Langa
  • Status accepted
  • This PEP proposes that Python 3.X.0 will be developed for around 17 months:
    • The first five months overlap with Python 3.(X-1).0's beta and release candidate stages and are thus unversioned.
    • The next seven months are spent on versioned alpha releases where both new features are incrementally added and bug fixes are included.
    • The following three months are spent on four versioned beta releases where no new features can be added but bug fixes are still included.
    • The final two months are spent on two release candidates (or more, if necessary) and conclude with the release of the final release of Python 3.X.0.
  • Annual release cadence: Feature development of Python 3.(X+1).0 starts as soon as Python 3.X.0 Beta 1 is released. This creates a twelve month delta between major Python versions.
  • This change provides the following advantages:
    • makes releases smaller: since doubling the cadence doesn't double our available development resources, consecutive releases are going to be smaller in terms of features;
    • puts features and bug fixes in hands of users sooner;
    • creates a more gradual upgrade path for users, by decreasing the surface of change in any single release;
    • creates a predictable calendar for releases where the final release is always in October (so after the annual core sprint), and the beta phase starts in late May (so after PyCon US sprints), which is especially important for core developers who need to plan to include Python involvement in their calendar;

Brian #5: More git Resources:

  • On episode 187 we talked about Oh Sh*t, Git!, a zine by Julia Evans I mentioned that I was concerned about buying it for a team due to the mild swearing. John Place reached out to tell us there’s a non-swearing version:

  • Also both of these are inspired by two websites by Katie Sylor-Miller:

    • dangitgit.com
    • ohshitgit.com
    • These are free websites with “something went wrong, how to I fix it” solutions.
    • All issues have titles that are links/anchors, so you can send someone a link if they ask you a question of how to fix something with git, and hopefully they can figure it out themselves sometime.
  • Also Git Cheatsheet

    • Not just a pdf
    • An interactive single page site that is, for one, beautifully designed.
    • There’s 5 columns: Stash, Workspace, Index, Local Repo, Upstream Repo
    • Hover over a column and it shows you git commands that affect that part and flows to other columns.
    • Hover over a command and the description pops up at the bottom.
    • The visual is great for reinforcing how actions move data between different parts of a repository, and a great way to teach people to have that mental model that git is not just your repo, it’s all of these components working together.
  • Lastly, git-pretty

    • Similar goals as the dangit and ohsh*t offerings, this is a single page png flowchart that starts with “so you have a mess on your hands” and asks a bunch of questions to funnel you to how to fix it. A fun thing to print out and pin to your wall.

Michael #6: PEP 616 -- String methods to remove prefixes and suffixes

  • Dennis Sweeney
  • Status: Accepted
  • Question: What does this return? “saturday is the 1st".strip('st')
  • Answer: aturday is the 1
  • If you expected it to remove the string st, well, no. That’s PEP 616.
  • Add two new methods, removeprefix() and removesuffix(), to the APIs of Python's various string objects. These methods would remove a prefix or suffix (respectively) from a string, if present, and would be added to Unicode str objects, binary bytes and bytearray objects, and collections.UserString.

Extras:

Michael:

Joke:

Karen Chee (@karencheee):

  • you: A famous engineer / inventor is coming over for dinner tonight, want to join us?
  • me: Sure, who is it?
  • you: His name is Rube Goldberg
  • me: That name rings a bell, which sets off a trap that undoes a buckle and releases a ball that rolls down a pipe and …
Kubernetes Podcast from Google
Kubernetes Podcast from Google
Adam Glick and Craig Box
KubeCon NA 2020, with Stephen Augustus
Join us for all the news from KubeCon NA 2020, and a conversation with conference co-chair Stephen Augustus. Stephen is a Senior Open Source Engineer on the VMware Tanzu team, a chair of Kubernetes’ SIG Release, and a leader in many other parts of the project, past and present. Do you have something cool to share? Some questions? Let us know: * web: kubernetespodcast.com * mail: kubernetespodcast@google.com * twitter: @kubernetespod Chatter of the week * The kākāpō wins Bird of the Year * We’re off for 2 weeks. See you on December 8! News of the week * Cisco acquires Banzai Cloud * CNCF announces Cloud Native Survey 2020 results * Red Hat: New edge features, industrial AI/ML blueprint and AWS launch * CNCF End User Tech Radar for storage * New End User benefits * Envoy Mobile joins the CNCF * New sandbox projects * cert-manager * cdk8s * Kyverno * OpenKruise * Pravega * SchemaHero * Tinkerbell * k8ssandra from Datastax * Episode 98 with Sam Ramji * k0s from Mirantis * Solo.io announces Gloo Mesh Enterprise and rebrands products * Episode 55, with Idit Levine * Pinniped * Shipa launches Ketch * Kinvolk launches Headlamp * The SPIFFE book “Solving The Bottom Turtle” * Episode 45, with Andrew Jessup * Anthos Developer Sandbox * GKE ingress features * Ambassador Labs takes in $18m and launches v1.9 * Tanzu SQL: Postgres on Kubernetes * Lightning round: * Accurics extends Terrascan * AWS adds containers to Lightsail * Arrikto takes $10m in funding * Brobridge releases Gravity * CircleCI runner is GA * Cloud66 for agencies and multiple database support * Cloudflare Origin CA cert-manager plugin * Cloudical Vanillastack * Cloudify version 5.1 * Codefresh launches GitOps 2.0 features * Commvault backup-as-a-service * Diamanti Spektra 3.1 and customer portal * Dynatrace PurePath 4 * Elastisys Compliant Kubernetes * The Fairwinds Kubernetes Maturity Model * Garden takes “seed” funding * Gremlin adds soundproofing * Humio Operator * Instana adds observability tools on Kubernetes * Intuit runs TurboTax on Kubernetes * Kioxia announces a new storage offering * Kubecost adds features for monitoring outside a cluster * KubeMQ adds automatic network creation * Kubermatic updates KubeOne to v1.1 * Kubernative SINA * Kublr 1.19 * Lablup announced Backend.ai 20.09 RC * Magalix launches KubeAdvisor 2.0 * Mayadata launches Kubera Propel and Kubera Chaos * Mirantis adds extensions to Lens * Puppet Labs adds Relay to Puppet Enterprise * Reblaze announces Curiefense to add WAF to Envoy * Replicates wants to help you Troubleshoot * Styra adds new editions to DAS * Sysdig introduces Kubernetes-native network security (ZTNSK) and partners with IBM Cloud * TrilioVault for Kubernetes v2.0 * Zerto for Kubernetes * Google Open Source Live Kubernetes Links from the interview * KubeCon NA 2020 * Episode 117, with Constance Caramanolis * CNCF Twitch * SIG Friday: ping Stephen for the current link * Slack * CNCF Slack * Kubernetes Slack * Hallway Track * Kubernetes Podcast chat * CoreOS * CoreOS Tectonic * CoreOS acquired by Red Hat * Tectonic on Azure * SIG Azure * SIG Release * SIG PM (retired) * Kubernetes Enhancement Process * Receipts process KEP * Sidecar containers - KEP closed! * Production readiness review * Episode 10, with Josh Berkus and Tim Pepper * Release managers * Black Lives Matter announcement banner * Better announcements * Kubernetes Naming working group * Inclusive Naming project * Dan Kohn memorial * Stephen Augustus on Twitter and on the web
53 min
Streaming Audio: A Confluent podcast about Apache Kafka
Streaming Audio: A Confluent podcast about Apache Kafka
Confluent, original creators of Apache Kafka®
Multi-Tenancy in Apache Kafka ft. Anna Pozvner
Multi-tenancy has been quite the topic within the Apache Kafka® community. Anna Povzner, an engineer on the Confluent team, spends most of her time working on multi-tenancy in Kafka in Confluent Cloud. Anna kicks off the conversation with Tim Berglund (Senior Director of Developer Experience, Confluent) by explaining what multi-tenancy is, why it is worthy to be desired, and advantages over single-tenant architecture. By putting more applications and use cases on the same Kafka cluster instead of having a separate Kafka cluster for each individual application and use case, multi-tenancy helps minimize the costs of physical machines and also maintenance. She then switches gears to discuss quotas in Kafka. Quotas are essentially limits—you must set quotas for every tenant (or set up defaults) in Kafka. Anna says it’s always best to start with bandwidth quotas because they’re better understood. Stick around until the end as Anna gives us a sneak peek on what’s ahead for multi-tenant Kafka, including KIP-612, the addition of the connection rate quota, which will help protect brokers. EPISODE LINKS * Sharing is Caring: Toward Creating Self-Tuning Multi-Tenant Kafka (Anna Povzner, Confluent) Join the Confluent Community Slack * Learn more with Kafka tutorials, resources, and guides at Confluent Developer * Live demo: Kafka streaming in 10 minutes on Confluent Cloud * Use *60PDCAST* to get an additional $60 of free Confluent Cloud usage (details)
44 min
Software Defined Talk
Software Defined Talk
Software Defined Talk LLC
Episode 272: This time we’re doing it in green
This week we discuss IBM buying Instana, highlights from Kubecon and the rise of Substack. Plus, Coté updates us on his quest to live the iPad lifestyle. The Rundown IBM To Acquire Instana For Undisclosed Terms (https://www.nasdaq.com/articles/ibm-to-acquire-instana-for-undisclosed-terms-quick-facts-2020-11-18) Instana Crunch Base Overview (https://www.crunchbase.com/organization/instana) KubeCon Review Envoy Mobile Joins the CNCF (https://medium.com/@mike.schore/99aee4bdb32e) Open Source Web Engine Servo to be Hosted at Linux Foundation - The Linux Foundation (https://www.linuxfoundation.org/press-release/2020/11/open-source-web-engine-servo-to-be-hosted-at-linux-foundation/) Relevant to your Interests The Evolution of Cloud (https://greylock.com/jerry-chen-the-evolution-of-cloud/) 2020 State of DevOps Report | presented by Puppet, & CircleCi (https://puppet.com/resources/report/2020-state-of-devops-report/?mkt_tok=eyJpIjoiWldSbVpUbGtaVEZtWVRFMiIsInQiOiJhYWtBcEcxQ3Z2TitXcCtkbXJDZTBIbVcrb25qMEtTR1VvWXZNaDV2QmZEXC96ekJxZGxIRmxcL0JwaHdjN1FVYWMrUm9rRG8rYTE3QmozRlo4QU9IdFhvRWt3WUNvdDVvZWJSVmpLaFEzZnhNMllocGZNZUlUS0RmcVwvTDVZSEh3RSJ9) Amazon's Inferentia AI Chip Is Ready For Prime Time, Now Powers the Alexa Service (https://www.fool.com/investing/2020/11/12/amazons-inferentia-ai-chip-is-ready-for-prime-time/) FinOps Foundation launches Kubernetes Whitepaper with CNCF, adds vendor members, Densify, SoftwareOne, Virtasant and more... (https://www.finops.org/blog/finops-foundation-launches-kubernetes-whitepaper-with-cncf-adds-vendor-members-cloudcmx-densify-softwareone-and-virtasant/) Google Pay reimagined: pay, save, manage expenses and more (https://blog.google/products/google-pay/reimagined-pay-save-manage-expenses-and-more/?utm_source=newsletter&utm_medium=email&utm_campaign=newsletter_axioslogin&stream=top) New Zoom feature can alert room owners of possible Zoombombing disruptions (https://www.zdnet.com/article/new-zoom-feature-can-alert-room-owners-of-possible-zoombombing-disruptions/) Fast Facts Your Pa$$word doesn't matter (https://techcommunity.microsoft.com/t5/azure-active-directory-identity/your-pa-word-doesn-t-matter/ba-p/731984) 11 facts about real world container use (https://www.datadoghq.com/container-report/) Half of all containers are now managed by cloud provider and third-party registries (https://www.datadoghq.com/container-report/#10) Apple Apple to lower commissions for small businesses on App Store (https://www.axios.com/apple-to-lower-commissions-for-small-businesses-on-app-store-a385a49b-9558-411d-bd1b-6cb57f2d44cc.html) Safely open apps on your Mac (https://support.apple.com/en-us/HT202491?utm_source=newsletter&utm_medium=email&utm_campaign=newsletter_axioslogin&stream=top) Yeah, Apple’s M1 MacBook Pro is powerful, but it’s the battery life that will blow you away (https://techcrunch.com/2020/11/17/yeah-apples-m1-macbook-pro-is-powerful-but-its-the-battery-life-that-will-blow-you-away/) Mac users couldn’t launch apps this afternoon after Apple verification server issue (https://www.theverge.com/2020/11/12/21563092/apple-mac-apps-load-slow-big-sur-downloads-outage-down-issues) Nonsense Welcome to Slow Boring (https://www.slowboring.com/p/welcome-to-slow-boring) Zoom Is Temporarily Removing Its 40 Minute Limit on Video Calls for Thanksgiving Day (https://www.news18.com/news/tech/zoom-is-temporarily-removing-its-40-minute-limit-on-video-calls-for-thanksgiving-day-3083945.html) Sponsors strongDM — Manage and audit remote access to infrastructure. Start your free 14-day trial today at: strongdm.com/SDT (http://strongdm.com/SDT) Teleport provides consolidated access to all computing resources such as servers, Kubernetes clusters or internal applications across all environments. Watch a demo, download the free version, or sign up for cloud at goteleport.com (https://goteleport.com/) Listener Feedback Little Snitch (http://Little Snitch 4) from Jordy Mac users couldn’t launch apps this afternoon after Apple verification server issue (https://www.theverge.com/2020/11/12/21563092/apple-mac-apps-load-slow-big-sur-downloads-outage-down-issues) Conferences Mykel Alvis All Day DevOps Talk (https://youtu.be/cttjekzVEqU?t=1945) SDT news & hype Join us in Slack (http://www.softwaredefinedtalk.com/slack). Send your postal address to stickers@softwaredefinedtalk.com (mailto:stickers@softwaredefinedtalk.com) and we will send you free laptop stickers! Follow us on Twitch (https://www.twitch.tv/sdtpodcast), Twitter (https://twitter.com/softwaredeftalk), Instagram (https://www.instagram.com/softwaredefinedtalk/) and LinkedIn (https://www.linkedin.com/company/software-defined-talk/). Brandon built the Quick Concall iPhone App (https://itunes.apple.com/us/app/quick-concall/id1399948033?mt=8) and he wants you to buy it for $0.99. Use the code SDT to get $20 off Coté’s book, (https://leanpub.com/digitalwtf/c/sdt) Digital WTF (https://leanpub.com/digitalwtf/c/sdt), so $5 total. Become a sponsor of Software Defined Talk (https://www.softwaredefinedtalk.com/ads)! Recommendations Matt: Rewatching Veep (https://www.imdb.com/title/tt1759761/). Brandon: The Undoing (https://www.hbo.com/the-undoing?camp=GOOGLE%7cHTS_SEM%7cPID_p56310902692&keyword=the+undoing+hbo+show&utm_id=sa%7c71700000070858786%7c58700006239587173%7cp56310902692&utm_content=tun&gclid=Cj0KCQiA48j9BRC-ARIsAMQu3WSxjOpeoiBA6i3bBzeC-IL0JpPrwhoPrBOmtfTcNA37YokcAcnFo54aAtPnEALw_wcB&gclsrc=aw.ds) on HBO (https://www.hbo.com/the-undoing?camp=GOOGLE%7cHTS_SEM%7cPID_p56310902692&keyword=the+undoing+hbo+show&utm_id=sa%7c71700000070858786%7c58700006239587173%7cp56310902692&utm_content=tun&gclid=Cj0KCQiA48j9BRC-ARIsAMQu3WSxjOpeoiBA6i3bBzeC-IL0JpPrwhoPrBOmtfTcNA37YokcAcnFo54aAtPnEALw_wcB&gclsrc=aw.ds) and Serverless Data APIs (https://www.thecloudcast.net/2020/11/serverless-data-apis.html) from the Cloudcast Coté: Dithering (https://dithering.fm/)) podcast (https://dithering.fm/)) (https://dithering.fm/ (https://dithering.fm/)); Ted Laso. (https://tv.apple.com/show/umc.cmc.vtoh0mn0xn7t3c643xqonfzy?itscg=MC_20000&itsct=atvp_brand_omd&mttn3pid=a_google_adwords&mttnagencyid=1625&mttncc=US&mttnsiteid=143238&mttnsubad=OUS2019863_1-469980364686-c&mttnsubkw=106182847425_kwd-937070194980_rdMG7cVq_&mttnsubplmnt=) Photo Credit from Red Hat Container Coloring Book (https://developers.redhat.com/books/container-coloring-book-whos-afraid-big-bad-wolf) Photo Credit (https://unsplash.com/photos/wBzam0EPbXU)
1 hr 5 min
Azure DevOps Podcast
Azure DevOps Podcast
Jeffrey Palermo
Scott Nichols on the State of Azure - Part 2 - Episode 116
This episode is part 2 of the interview with Scott Nichols! Be sure to tune in to part 1 first before joining in on this episode’s conversation. Scott Nichols is a Sr. Cloud Solutions Architect, Scott works for the commercial enterprise division serving the west region. He is also the leader of the .NET and the Azure user groups in Boise, Idaho. He started his career in the IT profession in 1993 as a mainframe and web developer. Since then, he has served as a Lead Software Engineer/Solution Architect, a Software Development Engineering Manager, a Sr. Cloud Software Solution Architect, a Sr. Enterprise Solution Architect, and of course, most recently, a Sr. Cloud Solutions Architect at Microsoft since 2019. In this second part, the interview transitions from discussing the state of Azure and the Cloud industry into talking about how customers are modernizing their existing applications and infrastructure for Azure. Scott shares about infrastructure as code tools he sees as having the most traction right now, his recommendations for those looking to get their application into Azure, and what he sees as being the most successful pathways for his customers utilizing Azure infrastructure. Topics of Discussion: [:38] Be sure to visit AzureDevOps.Show for past episodes and show notes. [1:01] About The Azure DevOps Podcast and Jeffrey’s offer to speak at virtual user groups. [1:11] Clear Measure is hiring! Be sure to check out the link in the show notes. [1:33] Jeffrey welcomes Scott back to the podcast for part 2 and shares about this episode’s conversation. [2:06] The infrastructure as code tools Scott sees as having the most traction. [4:35] Does Scott have any customers that have used Azure Bicep yet? [4:56] How Scott thinks about Azure infrastructure and what he sees as being most successful with his customers. [7:42] For certain tweaks in the infrastructure, where does an ARM template work? [9:45] What is the mechanism in Azure that would know that the Powershell script has not been run yet or has already been run so that it doesn’t run it again? [11:07] A word from Azure DevOps Podcast’s sponsor: Clear Measure. [11:38] For people looking to get their application into Azure, what would Scott recommend their next steps be? [20:37] Jeffrey thanks Scott for joining the podcast and Scott offers some parting words of advice for developers. Mentioned in this Episode: Azure DevOps Clear Measure (Sponsor) .NET DevOps for Azure: A Developer's Guide to DevOps Architecture the Right Way, by Jeffrey Palermo — Available on Amazon! bit.ly/dotnetdevopsebook — Click here to download the .NET DevOps for Azure ebook! Jeffrey Palermo’s Youtube Jeffrey Palermo’s Twitter — Follow to stay informed about future events! The Azure DevOps Podcast’s Twitter: @AzureDevOpsShow Scott Nichols’ LinkedIn Scott Nichols’ Twitter @TheScottNichols Azure Architecture Center - Microsoft Amazon Web Services (AWS) Azure Architectures - Microsoft Docs Google Cloud (GCP) Microsoft Cloud Adoption Framework (CAF) Azure Bicep on GitHub .NET Conference 2020 Python Terraform Azure Resource Manager (ARM) CICD PowerShell HashiCorp Want to Learn More? Visit AzureDevOps.Show for show notes and additional episodes.
23 min
The Cloudcast
The Cloudcast
Cloudcast Media
eBPF & Cilium Cloud-native Networking
Dan Wendlandt (@danwendlandt, CEO/Co-Founder @Isovalent talks about the evolution of cloud networking, eBPF and Cilium for programmable infrastructure, and blurring the lines between networking, security and service-mesh.  *SHOW: *476 *SHOW SPONSOR LINKS:* * CloudAcademy -Build hands-on technical skills. Get measurable results.  * Get 50% of the monthly price of CloudAcademy by using code CLOUDCAST * Datadog Security Monitoring Homepage - Modern Monitoring and Analytics * Try Datadog yourself by starting a free, 14-day trial today. Listeners of this podcast will also receive a free Datadog T-shirt. * Learn more about Fauna: https://www.fauna.com/serverless * Try FaunaDB for Free: https://dashboard.fauna.com/accounts/register *CLOUD NEWS OF THE WEEK *- http://bit.ly/cloudcast-cnotw *PodCTL Podcast is Back (Enterprise Kubernetes) *- http://podctl.com *SHOW NOTES:* * Isovalent (homepage) * Cilium (homepage) * What is eBPF?  *Topic 1 *- Welcome to the show. We’ve been following your work for a while (Nicira, OpenShift networking, etc), but tell our audience a little bit about your background. *Topic 2* - A few years ago I wrote an article that said, “if you’re in networking, the #1 skill you should learn is Linux”. Why has there been so much shift from “traditional networking” to so many new capabilities being implemented in software, and specifically Linux? *Topic 3 *- Help us understand these two new concepts - eBPF and Cilium. It’s new packet filtering, it’s container networking, it’s multi-cluster networking, it can help with observability - lots going on here.  *Topic 4 *- What are some of the gaps in today’s networking/filtering/observability stacks that can improve with eBPF/Cilium?*   * *Topic 5 *- We’ve seen quite a few companies evolve from expertise in an open-source project to commercial offerings. What lessons have you learned from other companies that shape how Isovalent will both go-to-market and also engage with ecosystem partners?* * *Topic 6 *- What are some of the common use-cases or applications you see that highlight the value of the Isovalent stack?  *FEEDBACK?* * Email: show at thecloudcast dot net * Twitter: @thecloudcastnet
36 min
More episodes
Search
Clear search
Close search
Google apps
Main menu