Read more of this story at Slashdot.
Read more of this story at Slashdot.
This beta update fixes several bugs reported in the previous build, and fixes compatibility for some effect plugins.
Changes since 5.2 Beta (build 9762):
Download and Install
This build is available via the built-in updater as long as you have opted-in to pre-release updates. From within Settings -> Updates, enable “Also check for pre-release (beta) versions of paint.net” and then click on the Check Now button. You can also use the links below to download an offline installer or portable ZIP.

You can also download the installer here (for any supported CPU and OS), which is also where you can find downloads for offline installers, portable ZIPs, and deployable MSIs.
For the experimental builds for Wine, you can go here to download them.
Azure Copilot is announcing the general availability of Troubleshooting Agent, a unified, built-in Azure Copilot capability that helps customers investigate and resolve operational issues faster.
Available through both Azure Copilot and Support + Troubleshooting in the Azure portal, Troubleshooting Agent enables you to move from issue detection to resolution faster by bringing together troubleshooting insights, operational context, and recommended actions in a single experience.
Learn more: https://msft.it/6051aYhKF
#Azure #AzureCopilot #TroubleshootingAgent #AgentAI
AI is changing the work of software teams, but Salima Bhimani argues that the bigger question is not only what AI can automate. In this BONUS episode, Salima shares what she learned inside Alphabet's moonshot ecosystem, why breakthrough ideas may be hiding in plain sight, and how more people can become moonshot makers when technology meets lived intelligence.
"Invention is something that is always happening in relationship to something that's in the world."
Salima traces her view of invention back to a family history of migration, adaptation, and rebuilding under constraints. Her roots go from India to East Africa, where her family had to learn new languages, new land, and new ways to survive. That experience shaped a practical view of innovation: invention is not only the work of a lone genius in a lab. It often starts in friction, necessity, and the daily encounter between people and the systems around them.
"We've actually shrunk our ability to see what's out there in the world by limiting who's in the room."
Salima respects what Silicon Valley has built, from search to self-driving technology to AI. But her challenge is that the dominant innovation model often starts with a small group defining the problem, building a product, and then deploying it into the world. That can miss the collective intelligence already present in the places where the problems live. For software leaders and agile practitioners, the question becomes sharper: what would change if discovery started earlier, closer to the real ecosystem, with more forms of expertise present before the solution is framed?
"The software itself is not just the solution. The software is the catalyst."
Salima argues that many organizations are still focused on AI as a tool for optimization: saving seconds, making teams more productive, or automating parts of the work. Those uses matter, but they can keep leaders thinking too narrowly. When AI becomes infrastructure, it becomes part of the platform that unlocks growth, capacity, and new ways to work across a system. In software organizations, that means shifting attention from "what tool should we apply?" to "what outcome could this platform make possible?"
"The greatest breakthroughs come from people really sitting down and asking what the world needs or doesn't need."
Working around Alphabet's moonshot environment taught Salima that breakthrough ideas are not only born from research labs or visionary founders. The next generation of innovation may come from people asking better ecosystem-level questions: how education changes with AI, how talent changes, how information is consumed, and how the labor market shifts around new infrastructure. The barrier to entry is lower now, which means more people can stand in the place where moonshots are imagined.
"Technology is not the breakthrough. Technology is a partner that allows us to unlock something in a system."
In Invent Now, Salima describes third-space moonshots as the convergence of three forces: technology as a co-partner, complex systems such as health, education, mobility, or energy, and human ingenuity from lived experience. This is not simply adding more people to a workshop. It is a different way of discovery, where an engineer, a scientist, a historian, and a street vendor may each see an opportunity the others would miss. As Vasco framed it, this is about bringing street smarts to the lab, and the lab to street smarts.
"Humanity is the moonshot, not technology."
The Zimbabwe Bush Pump example in Salima's book challenges the usual mental model of moonshots. It may not look like a Silicon Valley breakthrough, but it asks a deeper question: who gets to define what counts as invention, and what kind of impact matters? AI may help us build more, faster, and with lower barriers. But Salima's point is that the real opportunity is not replacing human ingenuity. It is helping more people bring their lived experience into the act of building what their communities, teams, and systems actually need.
"It's a book to spar with. It's not a book to just read."
Salima does not describe Invent Now as a playbook. She describes it as an invitation to spar with ideas, disagree, and use the book to provoke new thinking. For Scrum Masters, agile coaches, product leaders, and software teams, that invitation is practical: stop treating AI as the whole story, and start using it as one partner in a broader discovery conversation. The biggest opportunities may already be visible to people inside the system. The work is to notice them, bring the right knowledge together, and build from there.
Dr. Salima Bhimani is the author of Invent Now: The Next Leap in Moonshots and CEO of 10X Responsible Tech. A former Alphabet chief strategist for responsible technology, business, and leaders, she worked across Waymo, Wing, DeepMind, and Google X. Her work focuses on AI, moonshots, and inclusive innovation. LinkedIn
You can link with Salima Bhimani on LinkedIn, learn more at salimabhimani.com, and read her book Invent Now: The Next Leap in Moonshots.
Mazen talks with Wojciech Ogrodowczyk of Brains & Beards about building "Dreaming: Language Learning" with React Native. They share lessons on offline video, mobile performance, native modules, and using AI to investigate bugs and improve code reviews.
Show Notes
Connect With Us!
This episode is brought to you by Infinite Red!
Infinite Red is a premier mobile app consultancy, especially focused on Expo and React Native, located fully remote in the US. We’re a team of 30 with highly experienced mobile app developers and have been doing this for over a decade. We are also one of the first development teams to adopt agentic coding in a way that keeps high quality standards and aren’t afraid to do things the old school way if we need to. If you’re looking for mobile app or React Native or Expo expertise for your next project, hit us up at infinite.red/radio.
Ok, I lie, this demo is also pretty simple, but I wanted to break the pattern of the last few posts and at least pretend this example is a bit more complex. As I try to find excuses to write more TypeScript, I thought a great example of that would be a simple RSS aggregator. You hit the site, tell it the feeds you care about, and it renders a date sorted list of entries.
Because RSS typically can't be parsed in client-side JavaScript (don't know why? ask me below!) so I'd have to make use of a serverless function to proxy the calls (and at the same time, handle turning the XML into JSON).
Now, to be fair, I had built nearly the same thing back in February: Building an RSS Aggregator with Astro . This let me crib a bit of the work already done.
For this one, my stack was:
You can test this yourself here: https://ts-rss-vite.netlify.app/. The full source is here: https://github.com/cfjedimaster/typescript-stuff/tree/main/rss-reader-1.
I figure yall have seen a few of these posts already, so let me focus on sharing the interesting stuff.
I mentioned in my last post that when Vite would reload, it wasn't running the TypeScript checker. It only did this when a build was run. Enabling this checking while in dev mode took two steps.
First, simply add "strict": true, to tsconfig.json. Funny enough, in years past I can remember removing this when I was trying to get something working in a TypeScript app and I was too lazy to learn or figure it out.
Second, I had to add vite-plugin-checker to the app and modify vite.config.ts.
import { defineConfig } from 'vite';
import checker from 'vite-plugin-checker';
export default defineConfig({
plugins: [checker({ typescript: true })],
});
This file doesn't exist by default so it was a net new file for the app. As soon as I did that, if I screwed something up on purpose (ahem, I only make mistakes on purpose), I saw errors in my terminal when Vite was running.
For the backend, I used the ntl CLI (this is Netlify's CLI tool) to scaffold a function, which helpfully includes a TypeScript option. For the most part, the code here is a simpler version of what I had done for the Astro site, specifically I didn't bother with BLOB caching. Anyway, here's that function:
import Parser from 'rss-parser';
import type { Context } from '@netlify/functions';
type FeedItem = {
title: string;
link: string;
pubDate: string;
content: string;
feedTitle: string;
};
export default async (request: Request, context: Context) => {
if (request.method !== 'POST') {
return new Response('Method not allowed', {
status: 405,
headers: { Allow: 'POST' },
})
}
try {
const body: unknown = await request.json()
const parser = new Parser();
if (
typeof body !== 'object' ||
body === null ||
!('feeds' in body) ||
!Array.isArray(body.feeds)
) {
return new Response('Request body must include a feeds array', {
status: 400,
})
}
console.log('Parsing feeds:', body.feeds);
let reqs: Promise<any>[] = [];
let items: FeedItem[] = [];
for(const feed of body.feeds) {
reqs.push(parser.parseURL(feed.url));
}
const results = await Promise.allSettled(reqs);
for (const result of results) {
if (result.status === 'fulfilled') {
const feed = result.value;
console.log(`Fetched feed: ${feed.title} with ${feed.items.length} items.`);
let newItems:any[] = [];
feed.items.forEach(item => {
/*
will use content as a grab all for different fields
for example, netlify had summary, not content
*/
let content = item.contentSnippet || item.summary || item.content || '';
newItems.push({
title: item.title,
link: item.link,
content: content,
pubDate: item.pubDate,
feedTitle: feed.title
});
});
items.push(...newItems);
} else {
console.error('Error fetching/parsing feed:', result.reason);
}
}
// now sort items by pubDate descending
items.sort((a, b) => new Date(b.pubDate) - new Date(a.pubDate));
return new Response(JSON.stringify(items), {
status: 200,
headers: {
"Content-Type": "application/json",
},
});
} catch(e) {
console.log(e);
return new Response('Request body must be valid JSON', {
status: 400,
})
}
}
This is all pretty simple but I liked having the ability to create a custom type for my results.
I did run into an error after I created the function - and it's one I've seen twice now. Something in what the Netlify CLI does breaks some dependencies and my app fails to run at all. I passed the error to Claude and what it said was:
The most likely cause is that adding the Netlify function pulled in an older
typescript that's now being resolved instead of your project's version. This
usually happens when a netlify/functions package has its own package.json,
or when netlify-cli or the functions bundler is running an older tsc from a
different node_modules.
Its suggested fix, npm i -D typescript@latest, was enough to correct it. I definitely won't forget this when it happens again.
This has been so fun, at least for me. I've got my next two ideas ready! (Well, in my head at least. ;)