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

Apple Preparing New 'Gen AI' Website Ahead of WWDC — and New AI Features?

1 Share
Apple just registered a new subdomain record: genai.apple.com. The domain was spotted by a MacRumors contributing researcher, and though it doesn't yet lead to a live web page, they believe it's tied to Apple's annual developers conference WWDC which starts June 8, "where the company has promised to announce 'AI advancements' across its software platforms." The blog 9to5Mac speculates that "All signs point to WWDC 2026 being Apple's major AI renaissance, where the company will live up to the promises it made back at WWDC 2024, as well as a few additional new announcements." [I]it goes without saying that this is probably related to Apple's upcoming generative AI announcements at WWDC... Siri should finally be able to understand more personal context, have on screen awareness, and be able to take action in apps for you. This'll finally be made possible thanks to Apple's new partnership with Google, where Apple will be using Gemini-diffused models hosted on Private Cloud Compute to power Siri... Apple will also reportedly be introducing a new Siri app. This'll allow you to access your previous Siri conversations, as well as have text-based conversations with Siri. Other Apple Intelligence upgrades coming at WWDC 2026 include the ability to generate wallet passes from physical tickets, new editing features in the Photos app, and additional functionality for Visual Intelligence...

Read more of this story at Slashdot.

Read the whole story
alvinashcraft
56 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Random.Code() - Fixing ref struct Bugs in Rocks, Part 1

1 Share
From: Jason Bock
Duration: 2:05:05
Views: 33

I've discovered two ref struct issues in Rocks. In this stream, I'll work on getting them fixed.

https://github.com/JasonBock/Rocks/issues/414
https://github.com/JasonBock/Rocks/issues/415

#dotnet #csharp #roslyn

Read the whole story
alvinashcraft
58 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Android Weekly Issue #728

1 Share
Articles & Tutorials
Sponsored
Your mobile release tooling is doing more work than it did a year ago. AI is driving up code volume, and the math on build vs. buy is shifting under it. Hear how engineers from Monzo, Spotify, Etsy, and Tuist are recalculating. May 28, 10am PT/1pm ET.
alt
Akshay Nandwana explores building a full Voice AI pipeline on Android, covering streaming audio capture, endpointing, and state management.
Thomas Künneth documents a week-long investigation into suppressing ChromeOS resize warnings for Android apps on ARC.
Sponsored
Ship accurate fixes, fast. Connect your AI coding assistant to your production app, right in your terminal. Tell it to pull live issues, compare performance across releases, or dig into crashes. Watch it work with Claude Code, Cursor, Windsurf, Copilot & Android Studio MCP panel. Free to try.
alt
KMP Bits walks through building a Gradle plugin that handles splash screen setup for both Android and iOS from a single Kotlin config block.
Adam McNeilly reflects on his Android career and why he's choosing human connection over AI-assisted development.
James Cullimore explores using Déjà vu to add recomposition assertions to a real Compose app, uncovering a tooling bug along the way.
Anand Gaur summarises every Google I/O 2026 announcement that matters to Android developers, from Android CLI to Compose-first tooling and Android 17.
Jaewoong Eum distills Google I/O 2026 into what changes daily Android work: Compose as the standard, Views in maintenance mode, Android CLI 1.0, and Play Billing 9.0.0 breaking changes.
Siarhei Krupenich explores how to adapt Android apps for TV, Auto, and Wear OS without falling into mobile-first assumptions.
Oğuzhan Aslan explains how Room database indices work under the hood and walks through single-column, composite, and unique index strategies.
Mike Yerou walks through Promies, a revamped promo code distribution system for Android app giveaways.
Akshay Nandwana highlights the 17 biggest Android announcements from Google I/O 2026, from AI-native experiences to Android 17 and AppFunctions.
Place a sponsored post
We reach out to more than 80k Android developers around the world, every week, through our email newsletter and social media channels. Advertise your Android development related service or product!
alt
Libraries & Code
A collection of AI agent skills for Kotlin projects, installable into coding agents like Claude Code or Codex.
A modular, fully unstyled Compose component library designed for building custom design systems.
A debug-only Android library that upgrades StrictMode with a live notification, Compose detail UI, and MCP server for AI agents.
A Kotlin JVM library that generates fully populated instances of any class for testing, with zero configuration.
A web-based adb logcat viewer that streams Android device logs to your browser, with filters, regex search, and no IDE required.
A macOS desktop app for reviewing Android screenshot test failures side-by-side, with one-click baseline acceptance.
A CLI tool that drives Android devices from the shell via ADB, with millisecond latency and CSS-like selectors.
News
Google announces Wear OS 7 with up to 10% better battery life, Wear Widgets, Live Updates, and Gemini Intelligence on select watches.
alt
JetBrains launches an official Kotlin extension for VS Code in alpha, powered by the Kotlin Language Server.
JetBrains Research shows Kotlin developers complete tasks 15–20% faster than Java, with Kotlin codebases barely slowing over time.
JetBrains introduces an 18-month security support policy for the Kotlin Standard Library's JVM runtime artifact.
JetBrains previews Kotlin 2.4.0, a unified Kotlin Toolchain, Language Server Alpha, and official VS Code support.
Google announces Android for Cars updates at I/O 2026, unifying Android Auto and Automotive OS with new Car App Library templates and components.
Google announces Play updates from I/O 2026, including app discovery in Gemini, Engage SDK expansions, and Play Shorts.
Google declares Compose the standard for all Android UI, placing View components and related Jetpack libraries in maintenance mode.
Google launches Android Performance Analyzer, a new open-beta profiler for CPU, GPU, memory, and power analysis on Android devices.
Google announces agentic Android Studio features at I/O, including Agent Skills, Firebase integration in Agent Mode, and Android CLI.
Google announces Android 17's adaptive-first standard, requiring apps to support diverse screen sizes across phones, foldables, tablets, and new Googlebook devices.
Google announces Android CLI 1.0 stable, bringing agent access to Android Studio capabilities and Antigravity 2.0 integration.
Google opens applications for the Android XR Developer Catalyst Program, offering hardware kits, technical support, and grants to developers building XR apps.
Google announces AI Studio can generate full native Kotlin/Compose Android apps from a prompt, with browser-based emulator, device install, and Play publishing.
Google announces new Google TV developer tools for app discoverability, Gemini integration, and pointer remote support.
Google recaps 17 key Google I/O announcements for Android developers, covering agentic workflows, tooling, and ecosystem updates.
Google announces ADK for Kotlin and ADK for Android 0.1.0, enabling multi-agent AI systems on-device and in the cloud.
Videos & Podcasts
Android Developers playlist covers all 24 Google I/O 2026 Android sessions, from platform updates to AI and Compose.
alt
Marcin Moskała explains how to use the Kotlin Duration API, how it works, and why it's useful.
Read the whole story
alvinashcraft
58 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Locking Down AI Tooling: Securing Claude, ChatGPT, Copilot, and Gemini Before Someone Pastes in Something They Shouldn’t

1 Share
One of the more interesting things about enterprise AI adoption is how quickly people become comfortable with these tools. We spent years teaching users to be skeptical of links, cautious with downloads, thoughtful about where sensitive data goes, and generally a little suspicious of shiny new software. Then AI assistants showed up, proved useful in about thirty seconds, and a lot of that caution went straight out the window. Suddenly people are pasting customer contracts in for summaries,...

Read the whole story
alvinashcraft
58 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Theseus: translating win32 to wasm

1 Share

This post is part of a series on Theseus, my win32/x86 emulator.

Theseus now can produce WebAssembly output, allowing it to translate a .exe file into something that runs on the web. Try it out here, but note it is full of bugs (e.g. Minesweeper crashes if you win).

This was pretty straightforward to get working, with the exception of one major detail that this post will go into.

The x86 emulation part of this is just recompiling the existing Theseus output with a different CPU target. This is one of the main benefits of this binary translation approach. The translated code is almost (with the exception of how main gets invoked) wholly agnostic to the environment it eventually runs in. In principle I now get optimized wasm compiler output for relatively free. The main challenge was figuring out the code layout to get Cargo to cooperate with my weird requirements.

The win32 part was changing things to abstract over a "Host" API that is able to do things like fetch mouse events and render pixels. That is now implemented once for SDL and once for the web. This was also relatively straight forward, at least in my first pass.

So what was hard? It comes to a part of the design space I hadn't previously explored well: whether the emulator is allowed to block.

To block or not to block

In retrowin32, the emulator was designed to be able to step through some instructions and then return control to the caller. This is critical for the web version in particular, where you cannot block the main thread. In my earlier post "threading in two ways" I went into some detail on the various tradeoffs on how I could emulate threads in a browser, ultimately choosing a single thread.

This has its advantages, but is unsatisfying in a few important ways:

  • The main thread must repeatedly call into the emulator in a loop that yields control back to the browser.
  • Any Windows API implementation that might transfer control to the emulator must be made async, so that it can be suspended and resumed. This is obvious for functions that take a callback, but even a function like MoveWindow will synchronously send Windows messages related to moving to the window, so it is also async with respect to the message handling.
  • And finally, all the normal reasons async code is yucky: getting object lifetimes correct, how stack traces are busted, confusing debugging, and so on.

In the spirit of exploring the design space, when I got to revisit this choice in Theseus I instead made everything synchronous and implemented threads using real OS threads. In particular because Theseus maps the original program's code to function calls, it makes the debugging experience pretty pleasant: if I set a breakpoint or if something crashes, I get a stack trace that goes through both the source program and emulator code.

debugger screenshot

Picture: a Theseus program in a native debugger, with a stack trace including a generated x86 address on the left, and with a thread picker showing the Windows "winmm" multimedia thread on the right.

I mostly care about the developer experience here, but one additional reason this approach is nice is performance. Computers are really good at quickly running simple code made of nested function calls that store things on the stack. My asynchronous approach meant there was a lot of control overhead, even in tight loops.

Blocking on the web

In all, blocking is great. But on the web, you cannot block. Even in a single-threaded program a call to a Windows API like GetMessage is supposed to block until a message is available, but browser events will only come in via the browser event loop once you've returned control. It would seem you're stuck.

What it really means is that fundamentally, if you want to block, you must use a thread, even in the case where the program you're emulating is itself single-threaded. So here's the approach: I run the emulator's threads in web workers. When the emulator needs something from the browser, it can send a message via the postMessage API that comes in on the main thread's event loop. Critically, at this point I make the worker block until the message is handled.

This where the atomics API comes in. (Uh oh, synchronization code! The chances that I got this wrong are extremely high; I welcome your feedback on this, and I post it in part to provoke some reader who knows more than me to correct me.)

If you share memory between the main thread and worker, you can make the worker block on an atomic until the main thread is done. To do this, the worker sends the address of a local when it posts its message:

fn blocking_call() {
    let mut buf = 0i32;
    let msg = create_message(
        /* ... some JavaScript data indicating what function to call ... */,
      
        // ... and include the *address* of the above 'buf' variable
        &mut buf as *mut _ as u32
    );
    post_message(msg);
    unsafe {
        // wait while buf==0 until we get an Atomic notify on it
        wasm32::memory_atomic_wait32(&mut buf, 0, -1 /* forever */);
    }
}

The main thread receives these, and wakes the worker up when it's done by prodding the shared memory:

window.onmessage = (e) => {
  const msg = e.data;
  // ... handle message ...
  
  // interpret msg.buf as a pointer within the shared memory:
  const ints = new Int32Array(sharedMemory.buffer, msg.buf, /* length */ 1);
  ints[0] = 1;  // set `buf` from above to mark it successfully handled
  // wake up the waiting thread:
  Atomics.notify(ints, /* index */ 0, /* how many to wake up */ 1);
}

Note that because the worker is blocked until its message is processed, we know that the address of the local stack variable remains live until the main thread is done with it. This means we can effectively pass the address of any local variable from the worker and the main thread can safely modify it as it chooses.

From this sketch I hope you can see how I extended this to pass buffers in both ways: e.g. when the worker generates pixels, it sends a message just with a pointer to the pixels that the main thread can read directly from its memory (no copies!). And when the worker blocks to wait for an event, it can supply a buffer that the main thread can fill in.

The main limitation of this approach is that the main thread cannot transfer any browser objects to the worker thread, because those must come in via the browser event loop.

TypeScript in the host?

You might have noticed the above code switches into TypeScript to show the main thread handler. At first I intended to write all of this as a single wasm blob that contained the code for both the main thread and the worker threads. I eventually turned back to TypeScript for a few reasons.

Because the main thread cannot block, this means it cannot practically share its memory with the workers if any synchronization might be involved. That would veto even using a malloc implementation. I think the best way to make this work is by running the main thread wasm with its own private memory, and handing it a reference to the workers' shared memory. I think because that shared memory object is opaque, you would need to call out to browser APIs to interact with it, rather than the native wasm memory APIs.

Unlike the main thread, the workers can safely malloc despite sharing memory because they can use locks like an ordinary program would. ...except that for reasons I don't fully understand, the Rust standard library under wasm isn't compiled with support for atomics turned on. Thankfully, there's a relatively supported but still nightly Rust path to rebuild the standard library itself as part of the worker build process. (It does however highlight that using shared memory web workers at all with Rust is still not exactly a supported path.)

The other main reason I turned back to TypeScript is that the worker threads cannot access the DOM, and while that can be cumbersome it also provides a nice wall between the Rust worker code and browser hosting code. The Rust/wasm support for interacting with the DOM is better than it could be, but it's still pretty clunky, where e.g. any DOM function you call gets wrapped in a JS helper that is imported by the wasm module. Instead I can write my Rust code without any knowledge of browser API, and do all of the DOM munging on the TypeScript side.

In general, it's hard to beat the experience of using TypeScript for web development. Tools like debugging and interactively inspecting objects are far superior to wasm debugging. (Also the recent TypeScript compiler rewrite in Go works well, it's so fast!)

The main downside so far is serialization. I still haven't yet figured out a mechanism I'm happy with for transporting more complex objects across the host/worker boundary. I saw a tech talk recently where someone used Rust's rkyv library for this purpose and it looked pretty neat.

What's next?

Ultimately the purpose of any of these projects is just to learn about the things I was curious about.

From this excursion I conclude that writing apps in wasm is impressive but still not quite there yet — I am glad I have my native build to fall back on when I want to deploy fancier tools. This is definitely a pattern I learned at Figma (where they also had a native build of their wasm-based app) and one that I would recommend to you.

Similarly, I conclude that Rust with shared memory workers is still pretty early. I think for an app where you really cared it works pretty well, but "use a nightly compiler so you can recompile the standard library" is not a great sign.

For Theseus itself, I have a few ideas of where to go next, but those will have to wait for another post!

Read the whole story
alvinashcraft
58 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Powering multi-cluster workloads with seamless cross‑cluster networking for Azure Kubernetes Fleet Manager

1 Share

As organizations modernize their application portfolios, we are witnessing a fundamental shift in how cloud-native infrastructure is architected. No longer is the question “How do we scale a cluster?” but rather “How do we scale across clusters, regions, and clouds while maintaining operational simplicity?”

Today, we are thrilled to announce the public preview of cross-cluster networking for Azure Kubernetes Fleet Manager. This capability represents the next evolution in multi-cluster management by introducing transparent E-W multi-cluster networking powered by Advanced Container Networking Services.

The challenge of multi-cluster networking

Whether driven by regulatory requirements, regional disaster recovery, or the need to isolate blast domains, organizations of every size often run multiple Azure Kubernetes Service (AKS) clusters. However, managing these clusters has historically introduced a “networking tax.” Traditional approaches rely on complex VPNs, gateways, and manual service discovery, adding latency and operational complexity.

Even when operating just a few clusters and especially when operating large scale fleets of clusters, teams need consistent, reliable cross‑cluster connectivity to support scenarios like failover, shared services architectures, and seamlessly shifting workloads across regions for capacity or latency. At the same time, platform teams want to abstract infrastructure details from developers, enabling seamless cluster-level changes without disrupting applications.

Our vision: Multi-cluster management with seamless networking

In response to similar challenges, we built Azure Kubernetes Fleet Manager. Fleet Manager is designed to simplify multi-cluster Kubernetes for everyone. While Fleet Manager has already simplified workload propagation (deploying to many clusters) and update orchestration (safe, staged upgrades), the network remained a challenge.

With the introduction of Cilium-based cross-cluster networking in Azure Kubernetes Fleet Manager, we are delivering a managed, high-performance network that can span your entire fleet.

This capability extends the Kubernetes networking model across clusters, enabling services and workloads to communicate across cluster boundaries as if they were local, while preserving cluster-level isolation and governance.

Built on an open-source foundation, this capability uses Cilium for dataplane and Kubefleet for fleet-level orchestration, both active Cloud Native Computing Foundation (CNCF) projects. This ensures transparency, portability, and alignment with the broader Kubernetes ecosystem, while benefiting from continuous innovation from the open-source community.

The following diagram shows how clusters in a fleet are connected through a unified, managed network, enabling seamless communication, service discovery, and policy enforcement.

Key capabilities include:

  • Seamless east-west connectivity: Using eBPF-based routing with power of Azure CNI powered by Cilium and Advanced Container Networking Services, pods can communicate across clusters with native performance, no proxies or gateways required.
  • Global service discovery: With a simple annotation (service.cilium.io/global=true), a standard Kubernetes Service becomes “global.” Cross-cluster networking automatically discovers endpoints across joined member clusters, providing transparent load balancing and failover.
  • Multi‑cluster observability: Gain a unified view of network health across clusters with aggregated metrics, logs, and flow visibility. Advanced Container Networking Services integrates Cilium telemetry to provide consistent insights, faster troubleshooting, and end‑to‑end visibility across the fleet.
  • Unified security and governance: Security policies are no longer confined by cluster boundaries. Through Advanced Container Networking Services, you can now enforce enterprise-grade network policies and gain deep observability across your entire global footprint, ensuring identity-based security follows your workloads wherever they run.
  • Zero-touch management: Fleet Manager handles the complex lifecycle, managing certificates, and network configurations, so you don’t have to.

These capabilities are using eBPF to enable efficient routing, policy enforcement, and observability for high-performance networking

Strategic resilience with cross-cluster networking

In a digital-first economy, resilience is a competitive advantage. Cross-cluster networking enables customers to build architectures that are inherently resilient to single-cluster or single-region failures.

Whether you are running “Shared Services” clusters to support hundreds of tenants or building “Global Services” that route traffic to the healthiest available endpoints, cross-cluster networking for Azure Kubernetes Fleet Manager ensures your infrastructure is as agile as your business needs.

We are committed to providing the most robust, secure, and performant platform for multi-cluster environments. Cross-cluster networking is a big step towards a future where the physical boundaries of a cluster no longer limit the innovation within it.

Getting started with cross-cluster networking

Cross-cluster networking for Azure Kubernetes Fleet Manager is designed to minimize operational complexity:

Prerequisites for your clusters:

  • Azure CNI powered by Cilium as the networking dataplane.
  • Advanced Container Networking Services enabled.

Set up cross-cluster networking:

  1. Join clusters to a Fleet.
  2. Associate the members with a cross-cluster network profile.
  3. Deploy services with global annotations to enable cross-cluster communication.

Once configured, Fleet Manager automatically deploys and manages the required components, enabling direct pod-to-pod communication across clusters without additional gateways or overlays.

This managed approach removes the burden of setting up and maintaining Cilium multi-cluster components manually, allowing teams to focus on application delivery instead of infrastructure management.

See it in action: Watch the Cross-Cluster Networking for Azure Kubernetes Fleet Manager Video Guide to learn more and see a quick demo.

Documentation and resources

If you have feedback or would like to learn more, reach out to your Microsoft account team or share feedback through the Azure Kubernetes Service community channels, we would love to hear from you!

The post Powering multi-cluster workloads with seamless cross‑cluster networking for Azure Kubernetes Fleet Manager appeared first on Microsoft Azure Blog.

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