Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
150169 stories
·
33 followers

Android 16 QPR2 is Released

1 Share
Posted by Matthew McCullough, VP of Product Management, Android Developer






Faster Innovation with Android's first Minor SDK Release

Today we're releasing Android 16 QPR2, bringing a host of enhancements to user experience, developer productivity, and media capabilities. It marks a significant milestone in the evolution of the Android platform as the first release to utilize a minor SDK version.


A Milestone for Platform Evolution: The Minor SDK Release


Minor SDK releases allow us to deliver APIs and features more rapidly outside of the major yearly platform release cadence, ensuring that the platform and your apps can innovate faster with new functionality. Unlike major releases that may include behavior changes impacting app compatibility, the changes in QPR2 are largely additive, minimizing the need for regression testing. Behavior changes in QPR2 are largely focused on security or accessibility, such as SMS OTP protection, or the support for the expanded dark theme.

To support this, we have introduced new fields to the Build class as of Android 16, allowing your app to check for these new APIs using SDK_INT_FULL and VERSION_CODES_FULL.

if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) && (Build.VERSION.SDK_INT_FULL >= Build.VERSION_CODES_FULL.BAKLAVA_1)) {
    // Call new APIs from the Android 16 QPR2 release
}

Enhanced User Experience and Customization

QPR2 improves Android's personalization and accessibility, giving users more control over how their devices look and feel.

Expanded Dark Theme

To create a more consistent user experience for users who have low vision, photosensitivity, or simply those who prefer a dark system-wide appearance, QPR2 introduced an expanded option under dark theme.

The old Fitbit app showing the impact of expanded dark theme; the new Fitbit app directly supports a dark theme

When the expanded dark theme setting is enabled by a user, the system uses your app's isLightTheme theme attribute to determine whether to apply inversion. If your app inherits from one of the standard DayNight themes, this is done automatically for you. If it does not, make sure to declare isLightTheme="false" in your dark theme to ensure your app is not inadvertently inverted. Standard Android Views, Composables, and WebViews will be inverted, while custom rendering engines like Flutter will not.

This is largely intended as an accessibility feature. We strongly recommend implementing a native dark theme, which gives you full control over your app's appearance; you can protect your brand's identity, ensure text is readable, and prevent visual glitches from happening when your UI is automatically inverted, guaranteeing a polished, reliable experience for your users.

Custom Icon Shapes & Auto-Theming

In QPR2, users can select specific shapes for their app icons, which apply to all icons and folder previews. Additionally, if your app does not provide a dedicated themed icon, the system can now automatically generate one by applying a color filtering algorithm to your existing launcher icon.

Custom Icon Shapes

Test Icon Shape & Color in Android Studio

Automatic system icon color filtering

Interactive Chooser Sessions

The sharing experience is now more dynamic. Apps can keep the UI interactive even when the system sharesheet is open, allowing for real-time content updates within the Chooser.

Boosting Your Productivity and App Performance

We are introducing tools and updates designed to streamline your workflow and improve app performance.

Linux Development Environment with GUI Applications

The Linux development environment feature has been expanded to support running Linux GUI applications directly within the terminal environment.

Wilber, the GIMP mascot, designed by Aryeom Han, is licensed under CC BY-SA 4.0. The screenshot of the GIMP interface is used with courtesy.

Generational Garbage Collection

The Android Runtime (ART) now includes a Generational Concurrent Mark-Compact (CMC) Garbage Collector. This focuses collection on newly allocated objects, resulting in reduced CPU usage and improved battery efficiency.

Widget Engagement Metrics

You can now query user interaction events—such as clicks, scrolls, and impressions—to better understand how users engage with your widgets.

16KB Page Size Readiness

To help prepare for future architecture requirements, we have added early warning dialogs for debuggable apps that are not 16KB page-aligned.


Media, Connectivity, and Health

QPR2 brings robust updates to media standards and device connectivity.

IAMF and Audio Sharing

We have added software decoding support for Immersive Audio Model and Formats (IAMF), an open-source spatial audio format. Additionally, Personal Audio Sharing for Bluetooth LE Audio is now integrated directly into the system Output Switcher.


Health Connect Updates

Health Connect now automatically tracks steps using the device's sensors. If your app has the READ_STEPS permission, this data will be available from the "android" package. Not only does this simplify the code needed to do step tracking, it's also more power efficient. It also can now track weight, set index, and Rate of Perceived Exertion (RPE) in exercise segments.

Smoother Migrations

A new 3rd-party Data Transfer API enables more reliable data migration between Android and iOS devices.

Strengthening Privacy and Security

Security remains a top priority with new features designed to protect user data and device integrity.

Developer Verification

We introduced APIs to support developer verification during app installation along with new ADB commands to simulate verification outcomes. As a developer, you are free to install apps without verification by using ADB, so you can continue to test apps that are not intended or not yet ready to distribute to the wider consumer population.

SMS OTP Protection

The delivery of messages containing an SMS retriever hash will be delayed for most apps for three hours to help prevent OTP hijacking. The RECEIVE_SMS broadcast will be withheld and sms provider database queries will be filtered. The SMS will be available to these apps after the three hour delay.

Secure Lock Device

A new system-level security state, Secure Lock Device, is being introduced. When enabled (e.g., remotely via "Find My Device"), the device locks immediately and requires the primary PIN, pattern, or password to unlock, heightening security. When active, notifications and quick affordances on the lock screen will be hidden, and biometric unlock may be temporarily disabled.

Get Started

If you're not in the Beta or Canary programs, your Pixel device should get the Android 16 QPR2 release shortly. If you don’t have a Pixel device, you can use the 64-bit system images with the Android Emulator in Android Studio. If you are currently on the Android 16 QPR2 Beta and have not yet installed the Android 16 QPR3 beta, you can opt out of the program and you will then be offered the release version of Android 16 QPR2 over the air.
For the best development experience with Android 16 QPR2, we recommend that you use the latest Canary build of Android Studio Otter.
Thank you again to everyone who participated in our Android beta program. We're looking forward to seeing how your apps take advantage of the updates in Android 16 QPR2.
For complete information on Android 16 QPR2 please visit the Android 16 developer site.
Read the whole story
alvinashcraft
just a second ago
reply
Pennsylvania, USA
Share this story
Delete

Securing AI agents and tool calls

1 Share
Beyond authentication: Learn how to secure your AI agent's tool calls from prompt injection by using application context and the principle of least privilege.
Read the whole story
alvinashcraft
just a second ago
reply
Pennsylvania, USA
Share this story
Delete

PostgreSQL integration

1 Share
Learn how to integrate PostgreSQL with Aspire applications, using both hosting and client integrations.
Read the whole story
alvinashcraft
50 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

How to Embed a YouTube Video in WordPress

1 Share

Embedding YouTube videos into your WordPress site is one of the simplest ways to add engaging content, and it only takes a few minutes!

This guide covers several ways to add a YouTube video to your WordPress site, whether you want quick and easy or more advanced control. It also includes customization tips, plugin options, and common fixes if something goes wrong.

1. Embedding a YouTube video with the YouTube Embed block

If you’re using the WordPress block editor, the YouTube Embed block allows you to quickly add a video to a page or post. Simply follow these steps:

  1. Copy the URL of your YouTube video.
  2. In your post or page, click the plus (+) sign to add a new block.
  3. Type “YouTube” in the block search bar.
  4. Drag the YouTube Embed block into your desired location on the page.
  5. Paste your video link into the field.
  6. Click Embed.
adding a YouTube Embed URL block

The video will appear directly in the editor. You can align it, resize the block, or add a caption if needed.

2. Embedding a YouTube video with a URL

WordPress supports automatic embeds using oEmbed, so you can paste a YouTube URL on its own line, and WordPress will turn it into a video automatically. To do this:

  1. Copy the video URL from YouTube.
  2. Go to your WordPress dashboard. In the page or post you’re working on, paste the URL on a new line.
  3. WordPress will detect it and convert it to a video player.
embedding a video using the URL

This method is fast and doesn’t require any extra setup on your end.

3. Embedding a YouTube video in the Classic Editor

If you’re still using the Classic Editor, embedding simply requires pasting the video link. Follow these steps:

  1. Copy the YouTube video URL.
  2. In the Classic Editor in WordPress, make sure you’re in the Visual tab (not Text).
  3. Paste the link on a blank line.
  4. Save or update the post.
embedding a YouTube video in the Classic Editor

When you view the page, the embedded video will appear where you placed the link.

4. Embedding a YouTube video with the iframe embed code

If you want more control over how your video appears, try using the embed code from YouTube. Just follow these steps:

  1. On the YouTube video, click Share.
  2. Choose Embed, then copy the iframe code.
  3. In WordPress, add a Custom HTML block or widget to the page.
  4. Paste the iframe code into the block.
  5. Save or publish your page.
using the Custom HTMl block to add a video embed code

This method is great for advanced layout or design needs. If you’re familiar with basic coding principles, you can customize the iframe code by adding: 

  • autoplay=1 to start the video automatically
  • rel=0 to hide related videos at the end
  • controls=0 to hide playback controls
  • mute=1 to start the video with no sound

Example:

Replace VIDEO_ID with the actual ID from your YouTube link.

5. Embedding a YouTube video in sidebars

Want to show a YouTube video in your sidebar or footer? If you’re using a block theme, simply:

  1. Navigate to Appearance → Editor in the WordPress dashboard.
  2. Open the Patterns tab, then choose the pattern or template part you want to edit (e.g. the footer).
  3. With the footer open, click the + icon at the top left to open the Block Inserter. Search for “YouTube” and add the YouTube Embed block where you’d like in the footer.
  4. Paste the YouTube video link into the block and click Embed.
  5. The video will appear in the Site Editor. Now, click Save to save your changes.
adding a video to the footer

If you’re using a classic theme, follow these steps:

  1. On the YouTube video, click Share.
  2. Choose Embed, then copy the iframe code.
  3. Go to Appearance → Widgets in your WordPress dashboard.
  4. Expand the widget area where you want to add your video.
  5. Drag the Custom HTML widget into place.
  6. Add the iframe code you copied earlier and click Save.
adding a video embed code to a widget

6. Embedding a YouTube video with a plugin

Plugins give you more options for things like displaying video galleries and adding lightboxes. Here are a few you can choose from:

Common YouTube embedding problems and how to fix them

Most of the time, embedding works without problems. But here are some potential problems and ways to fix them quickly:

The video doesn’t appear:

  1. Make sure the URL is not inside a block that changes formatting (like a Quote block).
  2. Place the URL on its own line with no other text.
  3. Try previewing in a different browser or clear your cache.

The video doesn’t resize on mobile:

  • Use the YouTube block or plugins that make videos responsive.
  • If using iframe code, wrap it in a container with CSS like max-width: 100%.

The playback starts with sound on:

  • Add mute=1 to the embed code if you want autoplay without sound.
  • Try a different browser. Most browsers will block autoplay with sound by default.

A faster, cleaner way to host videos on WordPress

YouTube is a great place to share and discover videos, but it’s not always the best fit for every site. If you want more control over how your videos are displayed, how quickly they load, or what shows up at the end, consider a dedicated video hosting solution like Jetpack VideoPress.

Jetpack VideoPress is built for WordPress, so you can upload and manage your videos directly from your dashboard. It gives you a fast, reliable player without third-party branding or distracting ads. Your visitors see your content, and nothing else.

Here’s what makes Jetpack VideoPress a smart choice:

  • Fast load times: Videos are delivered through a global content delivery network (CDN) and stored separately from your site, so every page loads quickly.
  • A clean player: There are no third-party logos, suggested competitor videos, or platform clutter — just your video, styled to match your site.
  • Responsive design: The player adapts automatically to screen sizes, so your videos look great on phones, tablets, and desktops.
  • Simple management: Upload videos from the WordPress editor or media library just like any other image or file.

If you’re publishing video content regularly and want more speed, control, and flexibility, VideoPress is an easy way to upgrade your setup without adding complexity.

You can learn more or get started here.





Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete

Run Mistral Large 3 & Ministral 3 on vLLM with Red Hat AI on Day 0: A step-by-step guide

1 Share

Key takeaways

  • Mistral has released Mistral Large 3 and the Ministral 3 family under Apache 2, providing fully open source checkpoints to the community.
  • Mistral Large 3 is a sparse MoE available in BF16, and optimized low precision variants including FP8 and NVFP4 checkpoint provided through the Mistral AI, Red Hat AI, vLLM, and NVIDIA collaboration, using the LLM Compressor library.
  • Ministral 3 includes 3B, 8B, and 14B dense models in base, instruct, and reasoning variants. The official release notes that multiple compressed formats are available, and users should refer to the model cards for exact precision formats.
  • Mistral describes the Ministral 3 models as state of the art small dense models with strong cost-to-performance tradeoffs, multilingual and multimodal support, and built in vision encoders.
  • All new models are designed to run with upstream vLLM, with no custom fork required.
  • vLLM and Red Hat AI give developers Day 0 access, allowing immediate experimentation and deployment.

Mistral has released a major new wave of open source models under Apache 2, including Mistral Large 3 and the Ministral 3 family. This generation reflects Mistral's continued move toward a fully open ecosystem, with open weights, multimodal capability, multilingual support, and upstream compatibility with vLLM. See the Mistral AI launch blog for more details, including benchmarks.

As part of this release, we collaborated with Mistral AI using the llm-compressor library to produce optimized FP8 and NVFP4 variants of Mistral Large 3, giving the community smaller and faster checkpoints that preserve strong accuracy.

With vLLM and Red Hat AI, developers and organizations can run these models on Day 0. There are no delays or proprietary forks. You can pull the weights and start serving the models immediately.

What's new in the Mistral models

Mistral Large 3:

  • Sparse Mixture of Experts with fewer but larger experts
  • Softmax expert routing
  • Top 4 expert selection
  • Llama 4 style rope scaling for long context
  • Native multimodal support with image understanding
  • Released in BF16, FP8, and NVFP4, with additional low precision formats available, using the llm-compressor library with support from the Red Hat AI team.
  • Mistral states that the new model provides parity with the best instruction tuned open weight models on the market and improves quality in tone, writing, and general knowledge tasks

Ministral 3 (3B, 8B, 14B):

  • Dense models in baseinstruct, and reasoning variants
  • Mistral describes these as state of the art small dense models with leading cost-to-performance ratios
  • All include vision encoders
  • Support multilingual and multimodal inputs
  • Multiple precision formats are available, although users should refer to the model cards for specifics since not all variants are guaranteed in BF16 and FP8

Licensing and openness:

  • All checkpoints released under Apache 2
  • Fully compatible with upstream vLLM
  • Reflects Mistral's continued shift toward open source, which benefits the entire community and Red Hat customers

The power of open: Immediate support in vLLM

The new Mistral 3 models are designed to work directly with upstream vLLM, giving users immediate access without custom integrations.

  • Load the models from Hugging Face with no code changes; links here
  • Serve MoE and dense architectures efficiently
  • Use multimodal text and vision capabilities
  • Leverage quantization formats provided by Mistral, including FP8 and NVFP4 for Mistral Large 3
  • Enable speculative decoding, function calling, and long context features

This makes vLLM the fastest path from model release to model serving.

Quick side note: We at Red Hat hosted a vLLM meetup in Zurich together with Mistral AI in November 2025. You can view the meetup recording here for a primer and deep dive into Mistral AI's approach to building open, foundational models. 

Experiment with Red Hat AI on Day 0

Red Hat AI includes OpenShift AI and the Red Hat AI Inference Server, both built on top of open source foundations. The platform gives users a secure and efficient way to run the newest open models without waiting for long integration cycles.

Red Hat AI Inference Server, built on vLLM, lets customers run open source LLMs in production environments on prem or in the cloud. With the current Red Hat preview  build, you can experiment with Mistral Large 3 and Ministral 3 today. A free 60-day trial is available for new users.

If you are using OpenShift AI, you can import the following preview runtime as a custom image:

registry.redhat.io/rhaiis-preview/vllm-cuda-rhel9:mistral-3-series

You can then use it to serve the models in the standard way, and add vLLM parameters to enable features such as speculative decoding, function calling, and multimodal serving.

This gives teams a fast and reliable way to explore the new Apache licensed Mistral models on Red Hat's AI platform while full enterprise support is prepared for upcoming stable releases.

Serve and inference a large language model with Podman and Red Hat AI Inference Server (CUDA)

This guide explains how to serve and run inference on a large language model using Podman and Red Hat AI Inference Server, leveraging NVIDIA CUDA AI accelerators.

Prerequisites

Make sure you meet the following requirements before proceeding:

System requirements

  • A Linux server with data center-grade NVIDIA AI accelerators installed.

Software requirements

  • You have installed either:
    • Podman or Docker
  • You have access to Red Hat container images:
    • Logged into registry.redhat.io

Technology Preview notice

The Red Hat AI Inference Server images used in this guide are a Technology Preview and not yet fully supported. They are for evaluation only, and production workloads should wait for the upcoming official GA release from the Red Hat container registries.

Procedure: Serve and inference a model using Red Hat AI Inference Server (CUDA)

This section walks you through the steps to run a large language model with Podman and Red Hat AI Inference Server using NVIDIA CUDA AI accelerators. For deployments in OpenShift AI, simply import the image registry.redhat.io/rhaiis-preview/vllm-cuda-rhel9:mistral-3-series as a custom runtime, and use it to serve the model in the standard way, eventually adding the vLLM parameters described in the following procedure to enable certain features (speculative decoding, function calling, and so on).

1. Log in to the Red Hat Registry

Open a terminal on your server and log in to registry.redhat.io

podman login registry.redhat.io

2. Pull the Red Hat AI Inference Server Image (CUDA version)

podman pull registry.redhat.io/rhaiis-preview/vllm-cuda-rhel9:mistral-3-series

3. Configure SELinux (if enabled)

If SELinux is enabled on your system, allow container access to devices:

sudo setsebool -P container_use_devices 1

4. Create a volume directory for model caching

Create and set proper permissions for the cache directory:

mkdir -p rhaiis-cache
chmod g+rwX rhaiis-cache

5. Add your Hugging Face token

Create or append your Hugging Face token to a local private.env file and source it:

echo "export HF_TOKEN=<your_HF_token>" > private.env
source private.env

6.  Start the AI Inference Server container

If your system includes multiple NVIDIA GPUs connected via NVSwitch, perform the following steps:

a. Check for NVSwitch

To detect NVSwitch support, check for the presence of devices:

ls /proc/driver/nvidia-nvswitch/devices/

Example output:

0000:0c:09.0  0000:0c:0a.0  0000:0c:0b.0  0000:0c:0c.0  0000:0c:0d.0  0000:0c:0e.0

b. Start NVIDIA Fabric Manager (root required)

sudo systemctl start nvidia-fabricmanager

Important

NVIDIA Fabric Manager is only required for systems with multiple GPUs using NVSwitch.

c. Verify GPU visibility from container

Run the following command to verify GPU access inside a container:

podman run --rm -it \
 --security-opt=label=disable \
 --device nvidia.com/gpu=all \
 nvcr.io/nvidia/cuda:12.4.1-base-ubi9 \
 nvidia-smi

d. Start the Red Hat AI Inference Server container

Start the Red Hat AI Inference Server container with the Mistral Large 3 FP8 model:

podman run --rm -it \
  --device nvidia.com/gpu=all \
  --shm-size=4g \
  -p 8000:8000 \
  --tmpfs /home/vllm/.cache:rw,exec,uid=2000,gid=2000 \
  --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \
  --env "HF_HUB_OFFLINE=0" \
  -e HF_HUB_CACHE=/opt/app-root/src/.cache \
  registry.redhat.io/rhaiis-preview/vllm-cuda-rhel9:mistral-3-series \
    --model mistralai/Mistral-Large-3-675B-Instruct-2512 \
    --tokenizer-mode mistral \
    --config-format mistral \
    --load-format mistral \
    --kv-cache-dtype fp8 \
    --tensor-parallel-size 8 \
    --limit-mm-per-prompt '{"image":10}' \
    --enable-auto-tool-choice \
    --tool-call-parser mistral \
    --host 0.0.0.0 \
    --port 8000

Note: This configuration can be used to run Mistral Large 3 (FP8) on one 8x H200 node. Note the  --tensor-parallel-size parameter, adjust to match other situations.

Function calling

vLLM also supports calling user-defined functions. Make sure to run models with the following arguments.

podman run --rm -it \
  --device nvidia.com/gpu=all \
  --shm-size=4g \
  -p 8000:8000 \
  --tmpfs /home/vllm/.cache:rw,exec,uid=2000,gid=2000 \
  --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \
  --env "HF_HUB_OFFLINE=0" \
  -e HF_HUB_CACHE=/opt/app-root/src/.cache \
  registry.redhat.io/rhaiis-preview/vllm-cuda-rhel9:mistral-3-series \
    --model mistralai/Mistral-Large-3-675B-Instruct-2512 \
    --tokenizer-mode mistral \
    --config-format mistral \
    --load-format mistral \
    --kv-cache-dtype fp8 \
    --tensor-parallel-size 8 \
    --limit-mm-per-prompt '{"image":10}' \
    --enable-auto-tool-choice \
    --tool-call-parser mistral

Speculative decoding with the draft model (EAGLE3):

podman run --rm -it \
  --device nvidia.com/gpu=all \
  --shm-size=4g \
  -p 8000:8000 \
  --tmpfs /home/vllm/.cache:rw,exec,uid=2000,gid=2000 \
  --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \
  --env "HF_HUB_OFFLINE=0" \
  -e HF_HUB_CACHE=/opt/app-root/src/.cache \
  registry.redhat.io/rhaiis-preview/vllm-cuda-rhel9:mistral-3-series \
    --model mistralai/Mistral-Large-3-675B-Instruct-2512 \
    --tokenizer-mode mistral \
    --config-format mistral \
    --load-format mistral \
    --kv-cache-dtype fp8 \
    --tensor-parallel-size 8 \
    --limit-mm-per-prompt '{"image":10}' \
    --host 0.0.0.0 \
    --port 8000 \
    --speculative_config '{
      "model": "mistralai/Mistral-Large-3-675B-Instruct-2512-Eagle",
      "num_speculative_tokens": 3,
      "method": "eagle",
      "max_model_len": "16384"
    }'

What's next

The release of Mistral Large 3 and Ministral 3 represents another major step for open source LLMs and the open infrastructure supporting them.

Coming soon:

  • WideEP on GB200 for next-generation multi-expert parallelism with llm-d
  • Full enterprise support for Mistral 3 models in future Red Hat AI stable builds.

Open models are evolving faster than ever, and with vLLM and Red Hat AI, developers and enterprises can experiment on Day 0  safely, openly, and at scale.

The post Run Mistral Large 3 & Ministral 3 on vLLM with Red Hat AI on Day 0: A step-by-step guide appeared first on Red Hat Developer.

Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete

Use cd - in Powershell 7 to Return to Previous Directory

1 Share

Introduction

A command that many shells have had forever and that PowerShell has had for a long time as well is ‘cd -’ which means “change directory to previous folder”. This means you could do something like this:

1
2
3
4
5
6
> cd c:\dev
c:\dev
> cd c:\temp
c:\temp
> cd -
c:\dev

This is quite handy in many situations. In particular, since I’ve modified my PowerShell Profile to NOT start in my users folder but instead to start in my c:\dev folder (from which I can easily get to any repo I may be working from), I very often find myself using cd - whenever I create a new terminal in the folder I want to be in such as when using VS Code.

Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories