Content Developer II at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
122558 stories
·
29 followers

#383 Why aren’t devs shipping faster?

1 Share
Topics covered in this episode:
Watch on YouTube

About the show

Sponsored by Mailtrap: pythonbytes.fm/mailtrap

Connect with the hosts

Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays at 10am PT. Older video versions available there too.

Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.

Michael #1: I asked 100 devs why they aren’t shipping faster. Here’s what I learned

  • by Daksh Gupta (via PyCoders)
  • What’s stopping you from shipping faster?
    • Dependency bugs
    • Complicated codebase
      • >There is so much undocumented in our service, including poor records of new features, nonexistent or outdated info on our dependencies, or even essential things like best practices for testing, a lot of time is wasted in syncs trying to find the right information
  • QA Loops
  • Waiting for spec
    • > At Amazon? Meetings, approval, talking to 10 different stakeholders because changing the color of a button affects 15 micro services
  • Writing tests
  • Deployment/build speed
  • Scope creep
    • > The human tendency to stuff last-minute items into the crevices of their luggage minutes before leaving for the airport manifests itself at software companies as scope creep.
  • Unclear requirements
  • Excessive meetings
  • Motivation
    • >honest answer is i was on ads
    • >and that’s a very old / complicated / large stack (edited)
    • >and i didn’t understand it
    • >my friends on younger teams seemed happier, i was miserable
  • DORA metrics

Brian #2: Python 3.13.0 beta 1 released

  • "Python 3.13 is still in development. This release, 3.13.0b1, is the first of four beta release previews of 3.13.”
  • New REPL, featuring multi-line editing, color support, colorized exception tracebacks
  • Cool GIL, JIT, and GC features
  • Typing changes, including typing.TypeIs .
  • Some nice dead battery removals
  • and more
  • But seriously, the REPL is cool. Just ask Trey

Michael #3: A theme editor for JupyterLab

  • by Florence Haudin
  • A new tool for authoring JupyterLab themes
  • To lower the bar for customizing JupyterLab we created a new tool providing a simple interface for tuning the JupyterLab appearance interactively.
  • See jupyterlab-theme-editor on github

Brian #4: rich-argparse

  • “Format argparse and optparse help using rich.”
  • “rich-argparse improves the look and readability of argparse's help while requiring minimal changes to the code.”
  • They’re not kidding. 2 line code change.
    from rich_argparse import RichHelpFormatter
    parser = argparse.ArgumentParser(..., formatter_class=RichHelpFormatter)
    

Extras

Brian:

  • pytest course is now switched to the new platform.
    • I sent out an email including how to save their spot on the old site and mark that spot complete on the new site.
    • There’s now comments on the course now. Trying that out. If you’ve got a question, just ask in that section.

Michael:

Joke: Testing holiday





Download audio: https://pythonbytes.fm/episodes/download/383/why-aren-t-devs-shipping-faster.mp3
Read the whole story
alvinashcraft
42 minutes ago
reply
West Grove, PA
Share this story
Delete

HelloWorld.Again()

1 Share

The Microsoft 365 Developer podcast is rebooting ... again! Check out this first episode to find out the future of the show with a new special guest!


Links for this week:

Build Conference 2024

Developers guide to customizing Microsoft Copilot with Jeremy Thake and Barnam Bora Tuesday, May 21 | 11:30 AM - 12:15 PM Pacific Daylight Time

 

FREE 9-Day Email Course: Microsoft Teams AppDev OnRamp

FREE bi-weekly newsletter: The Full-Stack Developer’s Microsoft 365 Playbook

Microsoft Teams AppDev Accelerator

 

Jeremy Thake LinkedIn • 𝕏 • Threads

Andrew Connell Founder, Voitanos • YouTube • LinkedIn • 𝕏 • Threads

 





Download audio: https://mcdn.podbean.com/mf/web/57mbck5ervz54nr4/EP310_mixdown.mp3
Read the whole story
alvinashcraft
42 minutes ago
reply
West Grove, PA
Share this story
Delete

Secure your Container Apps with Key Vault Certificates

1 Share

Azure Container Apps has rolled out support for Azure Key Vault certificates on both the individual app and environment levels. This improvement makes it easier than ever for developers to manage authentication and certificates for their applications. This blog post will introduce certificate management in Container Apps and the benefits of storing your credentials in Key Vault. For detailed documentation on this feature, check here.

 

Intro to certificate management

Secure communication across services requires the constant management of information such as secrets, credentials, certificates, and keys. They have to be maintained with regular updates, renewals, and monitoring. Vulnerabilities like pushing a private connection string to the cloud are easy to create but difficult to detect and fix.

 

Container Apps has always provided options for certificate management such as Container App Managed Certificates. The support for Key Vault improves on that because it simplifies tasks like autorotation and follows security best practices by using managed identities to manage certificates.

 

Why Key Vault?

Key Vault’s certificate management service is powerful and comprehensive, allowing for everything from automatic renewal to setting up notifications around lifecycle events. That means that once a developer has integrated Key Vault into their project, they can stop thinking about maintaining the security of their application and focus on writing code.

 

Access to Key Vault leverages managed identities, which follows Azure security best practices.

 

Get started with certificate management

Now, we will walk through an overview of how to connect to Azure Key Vault using the Azure CLI and Portal. To follow this tutorial, you will need a Key Vault, certificate, and an environment-level managed identity – all with correct permissions configured. Detailed documentation, including how to set-up necessary resources and permissions, can be found here.

Portal

Navigate to your Container Apps Environment and open the ‘Certificates’ blade. Navigate to the ‘Bring your own certificates (.pfx)’ tab.

 

JiachenJiang_6-1715717168490.png

 

Select ‘Add certificate’ and for ‘Source’, select ‘Import from Key Vault’. Go through the process of selecting your Key Vault and certificate.

 

JiachenJiang_7-1715717179273.png

 

You will then be asked for the managed identity you want to use for authentication. You will be able to use either a System assigned or User assigned identity. Click ‘Add’ and if all permissions are correctly configured for your Key Vault and managed identity, your certificate should be successfully imported.

 

CLI

If you haven't already, download version 0.3.49 or higher of the containerapp extension to the Azure CLI. Check the version of your extension with this command:

 

 

 

az extension list-available --output table | findstr containerapp

 

 

 

Run the following CLI command to add a certificate:

 

 

 

az containerapp env certificate upload [--akv-url] [--certificate-file] [--certificate-identity] [--certificate-name] [--ids] [--location] [--name] [--password] [--resource-group] [--show-prompt] [--subscription]

 

 

 

Next steps

Congratulations, you have just set up certificate management through Key Vault for your application! You should now have a better understanding of the benefits of certificate management for your Container App. Thank you for reading!

Want to learn more? You can...

Read the whole story
alvinashcraft
42 minutes ago
reply
West Grove, PA
Share this story
Delete

Announcing the winners of the Global Gamers Challenge

1 Share

Our 10 top projects, and how to stay involved with sustainability games

We asked the Flutter and Global Citizen communities to come together to build epic Flutter games that focused on helping the planet. Hundreds of innovative game projects were submitted by thousands of passionate developers spanning over 50 countries.

Each project aimed to empower players with knowledge and actions that can protect our planet. From resource conservation to combating pollution, these games have raised our collective awareness of pressing environmental issues while being genuinely fun to play! We’re deeply inspired by the incredible ideas and passion of the entries.

One last drumroll for our Top 10

For 103 days, these project teams have ideated, built, sought feedback on, and refined their projects. The result — exciting games that encourage us all to think more deeply about the ways we can live more sustainably. Here they are, in alphabetical order!

Better World

A variety of environmental themes, colorful visuals and music, and ideas to partner with organizations to promote positive action.

Craftown

A unique blend of classic real-time strategy and resource management gameplay, with a focus on sustainability themes.

EcoShift Chronicles

Encourages positive action with charming visuals and sound design, presenting players with relatable choices and their environmental consequences.

Gomiland

Visually appealing, educational, waste management game, inspired by Japanese culture.

Last Bottle

Charming design and collectible elements that effectively communicate its core message about the limitations of recycling and thinking critically about environmental issues.

MGame — A waste management game

Ambitious simulation game that offers an engaging take on complex waste management systems, reminiscent of classic city-building titles.

Ocean Rangers

A compelling narrative, engaging characters, and strategic gameplay elements offer a unique take on a familiar genre with an environmental twist.

PlasticPunk

City-builder style game presenting a complex environmental challenge through engaging gameplay and appealing visuals.

Waste Wise

Waste sorting game featuring intuitive gameplay and effectively educating players on proper waste disposal.

Whaley’s Bins Waste Sorting

Waste sorting game with a creative approach to recycling education, featuring distinctive pixel art visuals.

We look forward to hanging out with these teams in New York City for a day of workshops and more in the Google offices and to celebrate with 60,000 other Global Citizens at Global Citizen Festival 2024!

But these are just 10 of over 30 teams that won prizes from the Global Gamers Challenge, including other members of the Top 20, who you’ll see in the Honorable Mentions list. Head to flutter.dev/global-gamers/#winners to see all of them!

Congratulations to all of the winners!

It doesn’t end here

by Lisa Pak, Head of Operations at Playing 4 the Planet Alliance

The Global Gamers Challenge might be drawing to a close, but the sustainable games movement doesn’t end here. The games built during this challenge, and similar challenges like the Global Game Jam, have the potential to reach millions of players, creating a ripple effect of positive environmental change throughout the world.

To stay connected with this burgeoning movement:

  • Join the community: Consider joining online communities and forums dedicated to eco-conscious game design. These spaces offer invaluable opportunities to share your work and exchange ideas with fellow developers
  • Keep playing sustainability games: Keep an eye out for popular games that include green activations in the form of time limited events, challenges, and new levels, to engage their players on this important topic. Our goal is to reach as many people as possible, and these could be a great source of inspiration.
  • Make your own voice heard: Write about your experiences with sustainability game development, mentor aspiring developers, or organize your own initiatives. In sharing your knowledge and expertise, whether technical or environmental, you not only support the growth of the community but also inspire others to create games that make a positive impact on the planet.

Keep building

by Clayton Whittle, Co-Chair, Climate SIG

Sustainability in gaming includes promoting the movement itself, prioritizing climate and sustainability concerns in your team’s game design practice, and persisting as ambassadors for a sustainability games industry.

Green game design is an evolving field, with increasingly refined practices for creating games that yield tangible and measurable impact. While there are no universal rules for crafting a green game, adhering to standard guidelines can significantly benefit any game design team.

  • Know your audience: Effective sustainability games begin with understanding your audience’s needs and capabilities. Since sustainability games aim to transform players in some way, understanding your audience is crucial for guiding this transformation. Without knowing where your audience stands initially, it’s challenging to lead them to a desired endpoint.
  • Be specific: Focus your message to increase its effectiveness. Trying to change a player’s entire worldview with one game is unrealistic. Instead, identify specific areas where change makes sense.
  • Promote effective actions: Equip players with actionable knowledge. Teach them impactful actions they can take to make a difference. Players are more likely to engage if they see how their actions can influence ecosystems or society on a large scale.
  • Beware of greenwashing: Avoid superficial sustainability efforts. Greenwashing involves token sustainability elements that don’t genuinely integrate sustainability issues. While adding green artwork or naming a character “Captain Recycle” might seem appealing, players see through these superficial connections if the gameplay or narrative lacks meaningful sustainability actions.

Remember, there are countless ways to develop impactful green games. Your ideas and designs might extend beyond this guidance into uncharted territories. What works for your team depends on your mission and audience. However, incorporating these principles into your design discussions help ensure that your team remains focused on its impact mission.

How Flutter can help

Here are a couple ways that Flutter can help you spend less time worrying about where your game will run, and more time designing an impactful experience for your mission and audience.

  • Flutter is productive: Single codebase development with Flutter means you can write your game just one time, and deploy it across platforms. Features like stateful hot reload help you iterate quickly, speeding up your development flow.
  • Flutter is easy to learn: Even if you’re not a professional game developer, Starting with Flutter can be easier than with traditional game development tools. We also offer several resources, like game templates as part of the Flutter Casual Games Toolkit that give you a launching pad to boost your game development skills.

Thank you all for joining us on this journey! We can’t wait to see what you build next!


Announcing the winners of the Global Gamers Challenge was originally published in Flutter on Medium, where people are continuing the conversation by highlighting and responding to this story.

Read the whole story
alvinashcraft
43 minutes ago
reply
West Grove, PA
Share this story
Delete

What’s new in Flutter 3.22

1 Share

WebAssembly, Graphics rendering enhancements, and more options for AI integration

Welcome back for another exciting Flutter stable release! This time, we’re thrilled to present Flutter 3.22. We’re bringing WebAssembly to the stable channel, a fully featured Vulkan backend for Impeller on Android, promising smoother graphics and a major performance boost. We’re also introducing streamlined workflows with new widget state properties, dynamic view sizing, and improved form validation. But that’s not all — you’ll find flavor-conditional asset bundling, a preview of Vertex AI for Firebase in Dart, and updated DevTools to make your life easier.

In just a few months since our last update, we’ve merged an impressive 1595 pull requests from the Flutter community, with 37 new community members contributing to Flutter for the first time!

So, dive in and discover all the new features and enhancements that the Flutter community has brought to this latest release!

WebAssembly

With the release of Flutter 3.22, Wasm is now available on the stable channel, offering significant performance improvements. In our internal benchmarks using Chrome on an M1 MacBook, the Wonderous app’s frame rendering time improved by 2x on average and 3x in worst-case scenarios.

These enhancements are vital for apps with animations and rich transitions, where maintaining a smooth frame rate is essential. Wasm helps achieve this by reducing performance bottlenecks, resulting in smoother animations and transitions. To start using Wasm with your Flutter web apps, check out our Dart Wasm documentation and Flutter Wasm documentation. For the full announcement, visit the Flutter at Google I/O blog post.

Engine

Flutter 3.22 introduces significant updates to Impeller, the rendering engine that powers your Flutter applications. Key highlights include the completion of the Vulkan backend on Android for smoother graphics and improved performance, ongoing optimizations for blur effects and complex path rendering, and a new experimental API for testing with Impeller. In line with our roadmap, we’re committed to enhancing Impeller’s quality and performance, including completing the iOS migration to Impeller and expanding Android support.

Impeller

Vulkan backend feature complete on Android

In this release, Impeller’s Vulkan backend for Android is feature complete. In particular, in the past few months, the team has been hard at work completing the implementation of fast advanced blends, support for custom fragment shaders with the FragmentProgram API, PlatformView support (though it requires a small API migration), and fully implementing all blur styles.

Android preview

In the 3.19 stable release, after releasing improvements in Impeller’s OpenGL backend, we invited users to try out Impeller on Android devices both with and without Vulkan support. Over the past few months, after evaluating the performance of the OpenGL backend and estimating the remaining work on the Vulkan backend, we have decided to focus our efforts on making the Vulkan backend production ready first.

Impeller solves the issue of shader compilation jank. Additionally, in our benchmarks it outperforms the legacy renderer on average, 90th, and 99th percentile frame times. We therefore believe that the performance of the Vulkan backend on Android is acceptable. In this release (3.22), an app that opts-in to Impeller will use the Vulkan backend where available. In a future release, this will become the default. When an app that opts-in to Impeller runs on a device that doesn’t support Vulkan, Flutter will gracefully fall back automatically to using OpenGL ES with Skia. No action is necessary on your part. In the future, when we believe the OpenGL ES Impeller backend is production ready, this fallback will also use Impeller.

As the Impeller preview on Android continues through the 3.22 stable cycle, we request that Flutter developers upgrade to the latest stable version, and file issues about any shortcomings noticed when Impeller is enabled. Feedback at this stage is invaluable to ensuring that Impeller is successful on Android and that we will be able to confidently make it the default renderer in a release later this year. The Android hardware ecosystem is very diverse. For that reason, the most helpful feedback about Impeller should include detailed information about the specific device and Android version where issues occurred.

Blur performance improvements

Blur has been reimplemented in Impeller for both iOS and Android. In particular, the new approach, which is similar to Skia’s, reduces the CPU and GPU time of blurs by nearly half in benchmarks.

The chart below shows worst-case, 99%-ile, 90%-ile, and average frame rasterization times and GPU frame times in ms on an iPhone 11 device in a pathological benchmark intended to highlight blur performance. After rewriting Impeller’s blur, both the CPU and GPU cost of backdrop filter blurs has been nearly halved. This scale of this improvement translates to non-pathological cases as well, as would appear in typical apps.

99%-ile, 90%-ile and average frame rasterization times and GPU frame times in ms on an iPhone 11 device in a pathological benchmark intended to highlight blur performance

Stencil-then-Cover

Impeller on both iOS and Android has moved to a new rendering strategy based on the Stencil-then-Cover approach described in the chapter “Drawing Filled, Concave Polygons Using the Stencil Buffer” in the OpenGL Redbook. Team members discussed more on this technique as it applies to Flutter in GitHub issue #123671.

This approach solves the issue where the raster thread was spending too much time calculating tessellations for complex paths on the CPU for example, SVGs and Lottie animations. After the change, the total frame time (UI thread on the CPU + raster thread on the CPU + GPU work) is much lower for frames that contain complex paths. Users will notice that Lottie animations and other complex paths render more smoothly, with lower CPU utilization, and slightly higher GPU utilization.

(Left) A Lottie animation. Previously, Impeller on a recent iPhone took 64ms / frame of raster thread CPU time to render it. (Right) The same animation on the same device after we landed the Stencil-then-Cover optimization. Raster times are nearly 10x faster.

While pleased with these improvements, there is still more work to do. Among other opportunities, we are aware that polyline generation remains prominent in CPU profiles, and we intend to investigate shifting this work to the GPU, as well.

New API

While still experimental, flutter test now accepts the --enable-impeller flag, which exercises Impeller using the Vulkan backend.

Framework

Widget state properties

MaterialState has been moved outside of the Material library and renamed WidgetState, in order to make it available to Cupertino, the base Flutter framework, and package authors. For more information on migrating to the new WidgetState, see the migration guide.

Dynamic view sizing

Enhancements to dynamic view sizing benefits developers building responsive layouts, ensuring better UI adaptability across various device screens.

Improved form validation

Thanks to the contributions of Flutter community member SharbelOkzan, Flutter 3.22 comes with more flexible form validation methods allowing developers to create more robust user input handling, enhancing both usability and security.

Covariants in 2D APIs

Reducing the need for type casts in 2D graphics APIs simplifies development workflows and enhances performance, important for games and complex animations.

Flavor-conditional asset bundling

Developers using the flavors feature can now configure individual assets to be bundled only when building for a specific flavor. For more information, check out Conditionally bundling assets based on flavor.

Transformation of assets using Dart packages

Users can now configure Dart packages to transform their app’s assets as they are bundled. For more information, check out Transforming assets a built time.

Android

Deep linking

Deep links can significantly improve the user experience in your Flutter app, acting as shortcuts that seamlessly guide users to specific content within your app, boosting engagement, and driving sales. While Universal Links for iOS and App Links for Android are highly recommended for their security and user-friendly nature, setting them up can be a bit tricky.

In the last Flutter stable release, we introduced a deep link validator tool within DevTools that supports checking web configuration for Android apps. In this version, we added a new set of features to help verify setups within your Android manifest files.

For more information on using this tool, check out Validate deep links.

Predictive back gesture

Flutter now adds more support for Android’s upcoming predictive back feature, where users can peek at the previous route or even the previous app during a back gesture. This is still behind a feature flag on Android devices, but you can find details on how to try it out yourself on GitHub.

Flutter tool enforces version requirements on Gradle, AGP, Java, and Kotlin

In this release, the Flutter tool enforces a policy regarding the versions that it supports for Gradle, the Android Gradle Plugin (AGP), Java, and Kotlin. Initially, the tool only provides warnings.

Currently, the supported version ranges are as follows:

  • Gradle — Fully supported 7.0.2 to current, warn otherwise
  • AGP — Fully supported 7.0.0 to current, warn otherwise
  • Java — Fully supported Java 11 to current, warn otherwise
  • Kotlin — Fully supported 1.5.0 to current, warn otherwise

In the next major release these warnings will become errors, which can be overridden with the flag --android-skip-build-dependency-validation. More generally speaking, the tool provides a warning for at least one release before fully dropping support (generating an error) for a given version of these dependencies.

This policy was discussed in an associated design spec. Comments and feedback are always welcome.

Support for using Gradle Kotlin DSL in Gradle build scripts on Android

Gradle Kotlin DSL is now supported in Flutter, providing an alternative to the traditional Gradle Groovy DSL. This support allows for a better code editing experience, featuring auto-completion, quick access to documentation, source navigation, and context-aware refactoring.

This initial support was contributed by GitHub user bartekpacia. Developers can now choose to rewrite their Gradle build scripts in Kotlin to take advantage of these benefits, although the Flutter tool doesn’t yet allow for selecting Kotlin over Groovy when using flutter create.

For more details, check out the PR 140744 by bartekpacia.

Platform views improvements

Heads up for all Flutter app developers! If you’re using Flutter to build apps that rely on native Android components (like maps, web views, or certain UI elements), we have some important news.

Due to a bug in Android 14, apps built with older versions of Flutter might not work properly on devices running this new Android version.

Flutter 3.22 fixes this issue and improves the overall performance of these native components in your Android apps. So, to ensure your app runs smoothly on all Android devices, make sure to rebuild and release your app with Flutter 3.22.

This update also includes behind-the-scenes improvements to make platform views on Android more reliable and performant overall.

End of support for KitKat

Flutter’s minimum supported Android version is now Lollipop (API 21). Beginning with Flutter’s 3.22 stable release, Flutter will no longer work on devices running Android KitKat (API 19). For more details, see our deprecation guide.

iOS

Platform view performance

We understand that platform view performance on iOS has been a pain point for many Flutter developers. This has been especially noticeable within scroll views when using platform views.

Recent updates directly address these concerns, with significant improvements in scenarios like embedding multiple inline ads within an article. Here are some key improvements in our benchmark:

  • Reduced GPU usage: GPU usage has been reduced by 50%, leading to less power consumption and a potentially smoother user experience.
  • Improved frame rendering: Average frame render times have decreased by 1.66ms (33%).
  • Minimized jank: Worst-case frame render times have been reduced by 3.8ms (21%).

If you’ve previously experienced performance challenges when using multiple platform views (like ads, maps, etc) within scrolling views, these optimizations offer the potential for a more fluid and responsive scrolling experience. Please give it a try and let us know what you think.

Ecosystem

Vertex AI for Firebase Dart SDK preview release

The Vertex AI for Firebase product has been released to public preview and includes the Dart SDK. This enables you to use the Gemini API to build generative AI features for your Dart or Flutter app, with production, performance and enterprise scale in mind. The SDK is integrated with Firebase App Check, which protects your API calls, and safeguards your backend infrastructure from serious threats like billing fraud, phishing, and app impersonation. Jump into the Getting Started for Dart and start using it with no cost with a promo code

The Google AI Dart SDK remains available, and is recommended for prototyping only. Google AI has free-of-charge access (within limits and where available) and pay-as-you-go pricing. If you have been prototyping with the Google AI Dart SDK, and are ready to migrate to Vertex AI for Firebase, check out the migration guide.

DevTools updates

We continue to improve DevTools, the suite of performance and debugging tools for Dart and Flutter. This release includes performance improvements, general polish, and new features like including CPU samples in the timeline, advanced filtering, and support for importing and exporting memory snapshots.

Other notable improvements were shipped with the devtools_extensions and devtools_app_shared packages that support DevTools extension authors. We added support for connecting an extension to the new Dart Tooling Daemon (DTD), which allows DevTools extensions to access public methods registered by other DTD clients, such as an IDE, as well as allowing access to a minimal file system API for interacting with the development project.

To learn more about all the updates included in Flutter 3.22 check out the release notes for DevTools 2.32.0, 2.33.0, and 2.34.1.

Google Mobile Ads SDK for Flutter

For those of you monetizing your Flutter apps with Ads, we’ve got some exciting news: Google Mobile Ads for Flutter has just released a major update to version 5.0.1!

Enhanced support for User Messaging Platform (UMP) SDK: The update adds support for the latest APIs from the Android UMP SDK version 2.2.0 and iOS UMP SDK version 2.4.0. The UMP SDK is crucial for complying with privacy regulations, making it easier for you to obtain user consent for personalized ads. This new version introduces several new APIs to simplify the consent gathering process.

Expanded mediation partners: We’ve broadened your ad monetization horizons by offering integrations with popular ad partners, including Unity, Meta, AppLovin, Iron Source, Mintegral, Pangle, DT Exchange, InMobi, and Liftoff. You can now maximize your app revenue with expanded mediation options and simplified implementation.

We encourage you to try out these new features in your Flutter apps and let us know which other mediation partners you’d like to see us support. Your feedback is invaluable as we continue to enhance the Google Mobile Ads SDK for Flutter.

Breaking Changes and Deprecations

ColorScheme.fromSeed

If the seedColor used in ColorScheme.fromSeed has a high chroma value, the resulting ColorScheme might produce pastel palettes that lack vibrancy. To ensure the output colors closely match the intended feel of the seed color, consider setting dynamicSchemeVariant to DynamicSchemeVariant.fidelity or DynamicSchemeVariant.content. These options generate palettes that more closely align with the original seed color.

Removal of v1 Android embedding

Deletion of version one of the Android embedding is under way. This will likely have no effect on most apps, as

  1. Version two has been the default for many years
  2. The Flutter tool would already block building version one apps, unless specifically overridden with the flag -- ignore-deprecation.

This release breaks Flutter tool support for v1 apps completely. It is no longer possible to override.

Plugin authors, please note: when the v1 android embedding was initially deprecated a migration doc was written for plugin authors at https://docs.flutter.dev/release/breaking-changes/plugin-api-migration. As part of this migration, it was recommended that plugin authors keep support for apps using the v1 embedding, by including in their *Plugin.java a method with the signature

public static void registerWith(@NonNull io.flutter.plugin.common.PluginRegistry.Registrar registrar)

We plan to fully delete the v1 Android embedding in the next release, at which point plugins that include a method with this signature will no longer compile (as it makes reference to a type from the v1 android embedding).

It currently serves no purpose, as this release has broken apps using the v1 embedding. We recommend that plugin authors release updated versions of their plugins with the v1 code removed as soon as possible, to avoid breakage in future versions of Flutter. For an example, check out PR 6494, which removed the plugins maintained by the Flutter team.

Deprecations removed in 3.22

Breaking changes in this release include deprecated APIs that expired after the release of v3.19. To see all affected APIs, along with additional context and migration guidance, see the deprecation guide for this release. Many of these are supported by Flutter fix, including quick fixes in the IDE. Bulk fixes can be evaluated and applied with the dart fix command-line tool.

As always, many thanks to the community for contributing tests — these help us identify these breaking changes. To learn more, check out Flutter’s breaking change policy.

Conclusion

At the heart of Flutter’s success is you — our amazing community. This release wouldn’t be possible without your countless contributions and unwavering passion. From the bottom of our hearts, thank you.

Ready to explore Flutter 3.22? Dive into the full release notes and changelog, fire up your terminal, and run flutter upgrade. We can’t wait to see what you build!


What’s new in Flutter 3.22 was originally published in Flutter on Medium, where people are continuing the conversation by highlighting and responding to this story.

Read the whole story
alvinashcraft
43 minutes ago
reply
West Grove, PA
Share this story
Delete

Landing Flutter 3.22 and Dart 3.4 at Google I/O 2024

1 Share

Major milestones for Flutter web apps, graphics performance upgrades, productivity experiments, and more

It’s been a particularly busy last few months in Dart & Flutter air traffic control, but we’re happy to announce that Flutter 3.22 and Dart 3.4 have landed and are available today, just in time for this year’s Google I/O!

We remain committed to providing a strong language and framework pairing, enabling you to build beautiful, rich, and fast apps from a single, shared code base — so you can deliver apps to users on mobile, web, and desktop — without having to fragment your product roadmap.

Flutter 3.22 and Dart 3.4 offer performance improvements and platform-specific refinements that bring us closer to that vision. We’re particularly excited to share more about our journey with Wasm, but you’ll find so much more, including an improved Impeller rendering engine, smoother visuals and reduced CPU usage on iOS, enhanced platform navigation with Android’s predictive back gesture, expanded monetization options with the Google Mobile Ads SDK, and a new powerful deep link validator in DevTools. Dart developers will enjoy streamlined API migration with dart fix directly in the IDE and new DevTools capabilities for advanced profiling. Plus, you can now preview the Vertex AI for Firebase Dart SDK, integrating AI-powered features with robust security measures.

Today, we’ll also spotlight top companies using Flutter to increase productivity and build performant experiences. We’ll highlight just a few particularly exciting features that move us closer to our goal to deliver native-like performance across platforms, and include selected updates on our investments in productivity, developer experience, and games.

If you want more details on everything included in the releases, check out the dedicated Flutter and Dart posts. It’s time to Dash!

Flutter in action

Flutter developers are busy launching large, new apps into the app stores. Let’s look at a few.

Helping large, enterprise-scale applications deliver on mobile and the web

  • In the United Kingdom, financial institution Virgin Money is using Flutter across their suite of mobile banking and credit card apps to unify app development processes, speed up change, and enable an industry-leading user experience.
  • US insurance company GEICO recently shared that Flutter helped them improve branded user experiences across iOS, Android, and the web, reduce the size of their codebase, and increase development efficiency, all at scale.
  • Universal Studios Destinations & Experiences released new Flutter mobile apps for their Hollywood, Osaka, and Orlando parks. Watch the video below to learn why they chose Flutter and to see how it’s performing so far.

Going beyond mobile and the web

  • The Canonical team has been working with Flutter since 2021 to enable support for the Flutter ecosystem in Ubuntu. Over the past year the Canonical team has rebuilt the Ubuntu Installer from the ground up with Flutter.
  • LG has chosen Flutter to enhance their smart TV operating system, webOS. Flutter’s performance, productivity, and strong ecosystem allow LG to rapidly develop and deploy webOS system apps that run smoothly. By 2025, Flutter will power system apps on tens of millions of LG TVs worldwide.

We’re inspired by these success stories, and are committed to making Flutter even better. Let’s dive into the latest product updates to show what we’re doing to enable you to build even more amazing apps, games, and experiences.

WebAssembly: Chasing native performance on the web

Today we’re announcing support in our stable release for compiling Flutter web apps to WebAssembly (Wasm). This is an exciting new instruction format for web browsers, which provides a portable, platform neutral, binary code format.

Our support for Wasm has been a deep, multi-year investment. First we partnered with the Chrome team on defining support in WebAssembly for high-level, managed languages like Dart, which commonly use garbage collection. This resulted in the WasmGC proposal, which is now a full and finalized standard, with runtime implementations available in Chrome (Chromium 119 and later) and Firefox (120 and later), and with other browser vendors expected to follow. Next, we added a brand new Dart compiler backend to generate WasmGC code, and the Dart & Flutter teams collaborated to run both the compiled app code and the Flutter rendering engine as Wasm modules with efficient Wasm to Wasm interop.

So what’s the net result? We’re seeing much improved performance, approaching what we have on mobile and desktop devices running machine code. In our internal benchmarks (in Chrome on an M1 MacBook), the frame rendering time of Wonderous improved by 2x in the general case and by 3x for the 99% worst case performance. Improved rendering performance is critical in demanding apps that feature animations and rich transitions, where exceeding the frame budget (the time allocated to render the next frame) causes very visible jank. Wasm has the potential to eliminate that, as illustrated by the juxtaposition below of the Wonderous app running with our traditional JS compilation compared to Wasm compilation.

Comparing the rendering speed of Javascript vs Wasm for the Wonderous demo application.

Wasm compilation for Flutter web apps is available in stable today. To get started, check out our Dart Wasm documentation and Flutter Wasm documentation.

Dart macros: raising the development abstraction level

We’re committed to providing a best-in-class developer experience. That means tackling long standing pain-points for Dart developers, like serializing JSON data.

It’s a prevalent pattern that’s equal parts trivial and tedious. Current solutions mean either slogging through encoding and decoding boilerplate manually, or layering on extra tooling in the form of code generation solutions like the JsonSerializable package.

Today, we’re announcing a preview of a better option for JSON: the JsonCodable macro.

Macros are code that creates more code. They’re like code generation, except the macro system is built into Dart and happens in real-time as you are editing and running the code. It’s an integrated experience without delays, fully supporting our existing developer workflows such as hot reload, as illustrated by this screencast:

Screencast showing the experience of using a macro: Initially no toJson code completion exists, but after adding @JsonCodable to the class, the toJson code completion shows up immediately.

We’re excited to see macros solve all kinds of problems for our developers. Take, for example, data classes, the highest voted Dart language feature. Beyond specific applications, our eventual goal is to have a macro system in Dart that allows users to create their own macros and raise the abstraction level of Dart programming.

Designing and implementing such a powerful macro system is a large task, so there is currently no date set for a stable release — for more details check out the Dart 3.4 post. In the meantime, try out a preview of the JsonCodable macro today. For more information, check out macros documentation.

New resources for Flutter game development

We’re seeing promising results from our early investment in games, including success stories from industry leaders like Etermax and Supercell, who are each leveraging Flutter’s power and flexibility to efficiently deliver delightful user experiences and expand their reach.

Today, we’re excited to continue to build on that momentum with these new resources for Flutter game developers:

Empowering sustainable game development

In January 2024, inspired by the story behind their use of Flutter, we partnered with Global Citizen to challenge our communities to design, build, and publish sustainability games using Flutter. These games are meant to inspire and empower players to take small, but meaningful actions for the environment. Today, we’re announcing the 10 winners.

Congrats to all of the winners!

Much more to explore

That’s all we have time to spotlight today, but there are many more exciting improvements that we didn’t touch on. Here are a few more things to know:

  • You can preview the Vertex AI for Firebase Dart SDK to use the Gemini API for AI-driven features in a Dart or Flutter app. The SDK is integrated with Firebase App Check, which protects your API calls, and safeguards your backend infrastructure from serious threats like billing fraud, phishing, and app impersonation. For details, see our AI page.
  • Impeller, our next-gen rendering engine, is now feature complete on Android.
  • Android’s predictive back gesture is now supported both when navigating within a Flutter app, and when navigating to another app or to the homescreen.
  • Platform views on iOS have been performance optimized, reducing CPU usage by up to 50%.
  • The Google Mobile Ads SDK has been extended to support more ad partners and mediation options.
  • DevTools has a new deep link validator that helps you identify and troubleshoot errors in Android deep link configuration, so you can more easily connect web experiences to a Flutter app.
  • Dart fix, our API migration tool, can now be invoked directly from the IDE.
  • DevTools now supports advanced filtering and CPU samples in the timeline.

Head over to the Flutter technical post and the Dart 3.4 post for more details on each of these, and more.

As always, we’re incredibly grateful for your continued support, passion, enthusiasm, and feedback. This project wouldn’t be possible without you, and we can’t wait to see how you continue to push Flutter forward.

Flutter over and out. We hope to see you on board again soon!


Landing Flutter 3.22 and Dart 3.4 at Google I/O 2024 was originally published in Flutter on Medium, where people are continuing the conversation by highlighting and responding to this story.

Read the whole story
alvinashcraft
43 minutes ago
reply
West Grove, PA
Share this story
Delete
Next Page of Stories