My parents sold our van so I could have a Commodore 64. That wasn’t just a computer, it was belief in my future.
Full talk: hanselminutes.com
#TEDx #shorts
My parents sold our van so I could have a Commodore 64. That wasn’t just a computer, it was belief in my future.
Full talk: hanselminutes.com
#TEDx #shorts
I felt my age this weekend. Busy days of sports and chasing kids left me WORN OUT. But, lots of fun and memories. I’m on vacation the next two days while I take a kid to college, so the reading list will be back on Thursday.
[article] Harsh truths to save you from ChatGPT psychosis. It’s definitely dangerous to treat AI like some sentient, all-knowing partner. That said, Forrest is wrong on points 1 and 4, partially right on 2 and 3.
[blog] 14 ways Googlers use AI to work smarter. How are we using AI within Google? Most of us are using it every day for different parts of our job. This offers a wide range of scenarios.
[blog] You Can Build Better AI Agents in Java Than Python. Rod teased it last week, and proved it today. Yes, this JVM-based agent framework looks simpler and more production-ready than a well-known Python option.
[blog] How Google does it: Your guide to platform engineering. This isn’t a product pitch, but more of a philosophical look at how to think about platform engineering.
[article] Diagnosing Your Company’s Strategy Problem. Figure out what’s going wrong with your strategy efforts and how to get back on track.
[blog] Scalable AI starts with storage: Guide to model artifact strategies. Great advice here in an area I haven’t seen much written about.
[blog] The Great SSL Certificate Panic. I didn’t know about these new fast-expiring certs. Kate gets us smarter on it and how it might impact you.
[blog] URL context tool for Gemini API now generally available. This is such a powerful feature of the Gemini API. Augment the static knowledge of an LLM with ingesting content from a URL. I like that it now supports PDFs, images, and data files.
[article] Your Company Needs to Focus on Fewer Projects. Here’s How. Any of you feel like you’re doing too few projects right now? Anyone? Bueller? No, most of us know there’s too many competing priorities. This is a good read on how to narrow your focus.
[article] Why software developers burn out, and how to fix it. Constant interruptions are killing your folks. That, and vague requirements are combining to burn out some great folks.
[article] The Top AI Tool for Devs Isn’t GitHub Copilot, New Report Finds. Surveys are surveys, but there’s signal here. It’s amazing to see how fast developer preferences evolve.
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
About the show
Sponsored by Sentry: pythonbytes.fm/sentry - Python Error and Performance Monitoring
Connect with the hosts
Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday 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: pyx - optimized backend for uv
Brian #2: Litestar is worth a look
Brian #3: Django remake migrations
squashmigrations
command is great, but it only work on a single app at a time, which means that you need to run it for each app in your project. On a project with enough cross-apps dependencies, it can be tricky to run.”replaces
attribute.”Michael #4: django-chronos
Extras
Brian:
Michael:
Joke: python is better than java
Understanding how your SvelteKit application behaves in production — from request flows to performance bottlenecks — is crucial for building reliable user experiences. SvelteKit now has first-class support for observability: built-in OpenTelemetry tracing, and a dedicated instrumentation setup file that ensures your monitoring tools work seamlessly.
To opt in, upgrade SvelteKit and your adapter and add the following to your svelte.config.js
:
export default {
kit: {
experimental: {
tracing: {
server: boolean;
};
instrumentation: {
server: boolean;
};
};
}
kit: {
experimental: {
tracing: {
server: boolean;
};
instrumentation: {
server: boolean;
};
}
experimental: {
tracing: {
server: boolean;
}
tracing: {
server: boolean
server: true
},
instrumentation: {
server: boolean;
}
instrumentation: {
server: boolean
server: true
}
}
}
};
SvelteKit can now emit OpenTelemetry traces for the following:
handle
hook (handle
functions running in a sequence
will show up as children of each other and the root handle hook)load
functions (includes universal load
functions when they run on the server)The emitted spans include attributes describing the current request, such as http.route
, and surrounding context, such as the +page
or +layout
file associated with a load
function. If there are additional attributes you think might be useful, please file an issue on the SvelteKit GitHub issue tracker.
Emitting traces alone is not enough: You also need to collect them and send them somewhere. Under normal circumstances, this can be a bit challenging. Because of the nature of observability instrumentation, it needs to be loaded prior to loading any of the code from your app. To aid in this, SvelteKit now supports a src/instrumentation.server.ts
file which, assuming your adapter supports it, is guaranteed to be loaded prior to your application code.
In Node, your instrumentation might look something like this:
import { import NodeSDK
NodeSDK } from '@opentelemetry/sdk-node';
import { import getNodeAutoInstrumentations
getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
import { import OTLPTraceExporter
OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
import { import createAddHookMessageChannel
createAddHookMessageChannel } from 'import-in-the-middle';
import { function register<Data = any>(specifier: string | URL, parentURL?: string | URL, options?: Module.RegisterOptions<Data>): void (+1 overload)
Register a module that exports hooks that customize Node.js module
resolution and loading behavior. See
Customization hooks.
register } from 'module';
const { const registerOptions: any
registerOptions } = import createAddHookMessageChannel
createAddHookMessageChannel();
register<any>(specifier: string | URL, parentURL?: string | URL, options?: Module.RegisterOptions<any> | undefined): void (+1 overload)
Register a module that exports hooks that customize Node.js module
resolution and loading behavior. See
Customization hooks.
register('import-in-the-middle/hook.mjs', import.meta.ImportMeta.url: string
The absolute file:
URL of the module.
url, const registerOptions: any
registerOptions);
const const sdk: any
sdk = new import NodeSDK
NodeSDK({
serviceName: string
serviceName: 'my-sveltekit-app',
traceExporter: any
traceExporter: new import OTLPTraceExporter
OTLPTraceExporter(),
instrumentations: any[]
instrumentations: [import getNodeAutoInstrumentations
getNodeAutoInstrumentations()]
});
const sdk: any
sdk.start();
If you’re deploying to Vercel, it would look something like this:
import { import registerOTel
registerOTel } from '@vercel/otel';
import registerOTel
registerOTel({
serviceName: string
serviceName: 'my-sveltekit-app'
});
Consult your platform’s documentation for specific instrumentation instructions. As of now, all of the official SvelteKit adapters with a server component (sorry, adapter-static
) support instrumentation.server.ts
.
A huge thank-you to Lukas Stracke, who kicked us off on this adventure with his excellent talk at Svelte Summit 2025 and his initial draft PR for instrumentation.server.ts
. Another thank-you to Sentry for allowing him to spend his working hours reviewing and testing our work.
Amazon recently released Kiro, a new VS Code fork aimed at taking developers beyond vibe coding and remedying some of its downsides. Kiro directly supports spec-driven development. Developers describe their requirements in natural language. Kiro outputs user stories with their acceptance criteria, a technical design document, and a list of coding tasks implementing the requirements.
By Bruno Couriol