Jesús Espino
@jespino.bsky.social
Open Source enthusiast. Public Speaker. Working at @victoriametrics.bsky.social.
NUMA is easy to ignore. Your laptop probably doesn't have it, and Linux handles it transparently on your server. So you never notice your memory-intensive app leaving performance on the table. Check my new article about how NUMA works inside Linux: internals-for-interns.com/posts/linux-...
NUMA | Internals for Interns
In the previous article we followed a packet all the way in from the wire and all the way back out. At every step something was reading or writing memory — the page the driver handed the card, the sk...
internals-for-interns.com
Today I'm writting about NUMA It works on your machine because your machine has one CPU socket. On a two-socket server half the RAM is a detour away, and nothing warns you. Tomorrow I'll publish the article explaining how Linux handle NUMA nodes.
I'm getting my post about the Kronk late by one day (it will be out tomorrow). I was the last week busy at Percona Live, and I have the post almost ready but I don't want to rush it, so I want to give me the opportunity to polish it to the quality that I want.
We just published a PostgreSQL 19 Interactive Tour. If you want to know what is comming in the new version of Postgres and want to play with it and see it in action, check it out here: victoriametrics.com/blog/postgre...
PostgreSQL 19 interactive tour
An interactive tour of what’s new in PostgreSQL 19: property graph queries, REPACK, plan advice, temporal updates, and more, with short runnable SQL examples you can edit and run in the browser.
victoriametrics.com
New guest post: my friend @mdelapenya.bsky.social write about Ryuk. → your tests hold a TCP connection open to it → it drops, 10s grace, then Ryuk deletes everything tagged with your session ID Check the blog post here: internals-for-interns.com/posts/testco... #golang #testing #docker
Understanding Testcontainers: The Ryuk Reaper | Internals for Interns
If you’ve used Testcontainers in any language (Go, Java, .NET, Python, Node, Rust), you’ve probably noticed an extra container hanging around in your docker ps output while your tests run. Its image i...
internals-for-interns.com
My friend @mdelapenya.bsky.social (Staff engineer at Docker, testcontainers-go maintainer) brings a guest post 🎉 It answers what I never dug into: what IS that testcontainers/ryuk container in your docker ps? A deadman switch that ensure the cleanup after for your tests works or fails.
I published today an article at the @victoriametrics.bsky.social's blog, sharing the life of a metric. I think it is a good walkthrough about what happens to your metrics once they are scraped, until they gets discarded by the retention policy. victoriametrics.com/blog/the-lif...
The Life of a Metric
Follow a single metric through its whole life inside VictoriaMetrics: born as a counter in your process, exported over the wire, given an identity and an inverted-index entry, written through an LSM t...
victoriametrics.com
Today I write about network package goes through the linux kernel. Different layers (Ethernet, IP, TCP), interesting optimizations that groups and split packages, and some of the places where things like BPF and netfilter get hooked. internals-for-interns.com/posts/linux-... #Linux #Kernel
Network Subsystem | Internals for Interns
At the end of the previous article we watched a module fill in a struct net_device_ops (include/linux/netdevice.h:1436), hand it to register_netdev() (net/core/dev.c:11531), and walk away. That’s a p...
internals-for-interns.com
If you missed my talk at @gopherconuk about the select statement, here are the slides (speakerdeck.com/jespino/deep...) and the recording (www.youtube.com/watch?v=fH5h...). Check out the rest of the recordings in the conference, as always at @gopherconuk, the talks where amazing.
Deep dive into the select statement (GopherCon UK)
The select statement is a cornerstone of Go's concurrency model, enabling developers to coordinate multiple channel operations with precision. This talk…
speakerdeck.com
Sharing a bit of my week in Amsterdan being part of the Go Release Party, and spending some time with the Go community at the Amsterdam Go Meetup. It has been an amazing week. www.linkedin.com/pulse/go-rel...
Go Release Party and Amsterdam Meetup
It has been a very intense week for me at Amsterdam. I went there, invited by JetBrains, to co-host the Go 1.
linkedin.com
My new article, the Kronk SDK, is live. 3 important components: → prep: messages validated, templated and tokenized into a job → KV cache: restore the prefix, decode only what's new → engine: makes your tokens tick concurrently internals-for-interns.com/posts/kronk-... #golang #AI
The Kronk SDK | Internals for Interns
In the previous article we took yzma apart and found a very disciplined bridge: purego finds the functions inside libllama.so, libffi makes the calls, and no C compiler is involved anywhere. What you...
internals-for-interns.com
What makes @jespino.bsky.social excited about Go 1.27? You’ll probably hear more about it at our release party, but here’s a sneak peek for you 👀 Join us live on August 25 at 4 pm UTC 👉 https://jb.gg/go-127-obs
New article: Kernel Modules 🐧 I open a .ko with readelf to understand it: → a prebuilt struct module → .modinfo: license, vermagic, depends → holes where kernel functions addresses go Loading is linking. Then one call into init. internals-for-interns.com/posts/linux-... #Linux #Kernel #Drivers
Kernel Modules | Internals for Interns
At the end of the previous article we handed a request to “the driver” and let it disappear into the hardware. That’s been the pattern for a while now: the VFS hands off to a filesystem, the block la...
internals-for-interns.com
Today I'm exploring the kernel modules. Not from the macro side (module_init, EXPORT_SYMBOL). From the other end: open a compiled .ko with readelf and see what a plain .o doesn't have. A .ko is a half-linked object. The kernel finishes the link on load. It will be available tomorrow.
New article: Yzma, how Go drives a C++ inference engine with no CGo. → purego answers "where is the function?" → libffi answers "how do I call it?" Not only that, yzma also downloads the right build for your machine, and the gguf models. internals-for-interns.com/posts/yzma/ #golang #AI
Yzma | Internals for Interns
In the previous article we looked at what inference actually is — how a model takes a prompt and builds a response one token at a time. I mentioned two Go projects that let you run that loop locally:...
internals-for-interns.com
I'll be giving another talk at #gopherconUK about how the select statement works under the hood 🎉(Apart from my "Having fun with the go source code" workshop). It is already in the schedule www.gophercon.co.uk/schedule.
Schedule - GopherCon UK
Full conference schedule for GopherCon UK 2026. Talks, sessions, and breaks across two days.
gophercon.co.uk
Kick Ass job as always by @jespino.bsky.social on the release notes for 1.27. It felt overwhelming. I'm wondering if Go fix can be used to change Go code with some of these changes like struct literal field selectors and maybe switching to the new uuid package? victoriametrics.com/blog/go-1-27/
Go 1.27 interactive tour
An interactive tour of what’s new in Go 1.27: every notable language, runtime, and standard library change, with short runnable examples you can edit and run in the browser.
victoriametrics.com
Today I'm looking at yzma and how it calls llama.cpp without cgo. It binds at runtime, so two libraries split the work: → purego: dlopen/dlsym, finds the function's address → libffi: builds the call plan from a signature you describe in Go The blog post will be avaiable tomorrow.
Hello #Go Fans! Join our Principal Software Engineer, @jespino.bsky.social, who will present “Having fun with the Go source code” at gophercon.co.uk 2026 in #London. 📆 August 12th at 10:00 am GMT 📍 The Brewery, London, UK
Are you up for a bite with the team after work? Meet us for the Go 1.27 release party! We'll be joined by the people behind the @golang.org 1.27, @jespino.bsky.social, and Ainsley Clark to talk about what’s new in this release. 📅 August 25, 4:00 pm UTC 📍 online 🔗 jb.gg/go-127-obs
Running a workshop at #gopherconuk next week: "Having fun with the Go source code" two hours of building Go from source and then changing things you're not supposed to change. the lexer, a compiler pass, the scheduler. Wed 12 aug, 10:00, King Vault www.gophercon.co.uk/schedule
New guest post! @alexrios.me goes inside Go's `testing/synctest`. Your test goroutines live in a "bubble" the runtime tracks. Once they're all blocked, the fake clock jumps to the next timer, so a 10s sleep costs 0 real seconds. internals-for-interns.com/posts/inside... #golang #go #testing
Fake Clocks, Real Guarantees: Inside Go's synctest | Internals for Interns
The first time I reached for testing/synctest, I assumed it was a sleep helper with better manners. The public API is small enough to support that assumption: synctest.Test(t, func(t *testing.T) { ......
internals-for-interns.com
This Monday, @alexrios.me (Principal Engineer at Memed, author of System Programming Essentials with Go) takes us inside `testing/synctest`. Spoiler: it's not a library trick, it's a runtime feature. Fake clock included. Drops Monday #golang #go
Internals for Interns
A collection of blog posts explaining software internals in an approachable way
internals-for-interns.com
In this latest blog post, @jespino.bsky.social, Software Engineer, breaks down the upcoming changes with practical, runnable examples so you can quickly understand what has changed and how the new behavior works. If you want to learn more about #GoLang, this article is a great read. bit.ly/4fITgSV
Go 1.27 interactive tour
An interactive tour of what’s new in Go 1.27: every notable language, runtime, and standard library change, with short runnable examples you can edit and run in the browser.
bit.ly