Anton Zhiyanov
@antonz.org
π€ 128
π₯ 0
π 42
Open source maintainer. Writing interactive technical books at
https://antonz.org
The new chapter of my interactive Go Concurrency book covers atomics. They provide concurrent-safe operations without explicit synchronization, but there are several pitfalls to watch out for.
antonz.org/go-concurren...
loading . . .
Gist of Go: Atomics
Concurrent-safe operations without explicit synchronization.
https://antonz.org/go-concurrency/atomics
7 days ago
0
4
1
Accepted! Go 1.26 will introduce Hashers β a standard approach to hashing and equality checks in custom collections. I've made a summary of the proposal, and even managed to squeeze in some interactive examples.
antonz.org/accepted/map...
loading . . .
Go proposal: Hashers
Consistent approach to hashing and equality checks in custom collections.
https://antonz.org/accepted/maphash-hasher
9 days ago
0
12
0
You are a software engineer. Don't become a prompt refiner.
antonz.org/write-code
loading . . .
Write the damn code
You are a software engineer. Don't become a prompt refiner.
https://antonz.org/write-code
11 days ago
1
7
2
I'm launching a new Go-related series named Accepted. For each accepted proposal, I'll write a one-page summary that explains the change in simple terms. This should (hopefully) be the easiest way to keep up with upcoming changes. The first issue is already out!
13 days ago
2
8
3
The only way to run tasks concurrently in Go is by using goroutines. But what if we bypass the runtime and run tasks directly on OS threads or even processes? Let's find out!
antonz.org/multi
loading . . .
Native threading and multiprocessing in Go
Exploring unconventional ways to handle concurrency.
https://antonz.org/multi
14 days ago
0
2
0
xxhash is the best non-cryptographic hash algorithm I know. It's really fast, high quality (rare collisions and strong avalanche effect), and comes in three flavors: 32, 64, and 128-bit. So I figured now's a good time to add it to my SQLite extensions!
github.com/nalgeon/sqle...
about 1 month ago
0
0
0
I've made a public changelog for my projects. 35 major updates over the past 5 years β I guess I'm building in public after all!
antonz.org/tags/projects
about 1 month ago
0
3
0
WaitGroup.Go is a small change, but wait groups are so common in concurrent programming that switching from Add+Done to Go in my Go Concurrency book took me a while :) Anyway, it's done now, so a lot of examples are easier to read!
antonz.org/go-concurrency
loading . . .
Gist of Go: Concurrency
Interactive book on concurrent programming with many exercises.
https://antonz.org/go-concurrency
about 1 month ago
0
8
0
Two new SQLite extensions by Walter Wanderley! β HTTP requests β MQTT publish/subscribe
sqlpkg.org?q=litesql
about 2 months ago
0
2
0
Go 1.25 is out, and the announcement says: "Over the next few weeks, follow-up blog posts will cover some of the topics in more detail. Check back in later." So you can wait a few weeks OR you can read my interactive Go 1.25 tour right away:
antonz.org/go-1-25
loading . . .
Go 1.25 interactive tour
Fake clock, new GC, flight recorder and more.
https://antonz.org/go-1-25
about 2 months ago
0
12
4
I think third-party Go concurrency packages are often too opinionated and try to hide too much complexity. That's why I created `chans`: a package with generic channel operations that's unopinionated, composable, and doesn't take control away from the developer.
antonz.org/chans
loading . . .
Building blocks for idiomatic Go pipelines
Unopinionated and composable channel operations.
https://antonz.org/chans
about 2 months ago
1
2
0
All jokes aside, I've implemented promises and async/await in Go. Just make sure you NEVER use them.
github.com/nalgeon/azor
loading . . .
GitHub - nalgeon/azor: Promises and async/await in Go
Promises and async/await in Go. Contribute to nalgeon/azor development by creating an account on GitHub.
https://github.com/nalgeon/azor
2 months ago
0
1
0
The new chapter of my interactive Go Concurrency book covers signaling, one-time execution, and object pools. If you think channels are the only way for goroutines to communicate, check it out!
antonz.org/go-concurren...
loading . . .
Gist of Go: Signaling
Sending events between goroutines.
https://antonz.org/go-concurrency/signaling
3 months ago
0
5
0
I've updated the list of Go features by version. Now, each feature has β a link to the documentation, β a link to the proposal, and β a link to the commits. It's fascinating to see how Go has changed over the years.
antonz.org/which-go
loading . . .
Go features by version
Which major features appeared in which versions of Go.
https://antonz.org/which-go
3 months ago
1
8
3
Make smaller interfaces. Stay deep.
antonz.org/deep-modules
loading . . .
On deep modules
Make smaller interfaces. Seriously.
https://antonz.org/deep-modules/
3 months ago
0
1
0
You don't need testify/assert to write clear and expressive Go tests.
antonz.org/do-not-testify
loading . . .
You don't need testify/assert
To have expressive test assertions.
https://antonz.org/do-not-testify
3 months ago
0
4
1
Okay, I did it again. I reimplemented Redis using Postgres. Key/value, expiration, maps, lists, sets, and sorted sets β everything in your favorite database. With a Redis-compatible API and wire protocol.
github.com/nalgeon/redka
loading . . .
GitHub - nalgeon/redka: Redis re-implemented with SQL
Redis re-implemented with SQL. Contribute to nalgeon/redka development by creating an account on GitHub.
https://github.com/nalgeon/redka
3 months ago
0
2
0
How about a micro test assertions Go package with flexible error checking? Only 100 loc. I've named it "be" :)
github.com/nalgeon/be
loading . . .
GitHub - nalgeon/be: Minimal test assertions in Go
Minimal test assertions in Go. Contribute to nalgeon/be development by creating an account on GitHub.
https://github.com/nalgeon/be
3 months ago
0
3
0
The new chapter in my interactive Go Concurrency book is about Semaphores. You'll have a Rendezvous with some helpful synchronization tools and even overcome a few Barriers. If you know what I mean π
antonz.org/go-concurren...
loading . . .
Gist of Go: Semaphores
Limiting the concurrency and waiting for the peers.
https://antonz.org/go-concurrency/semaphores
3 months ago
0
4
3
Given how much I love Redis, it's strange that I haven't made a playground for it β until today. Now I (and everyone else) can finally write interactive Redis docs!
codapi.org/redis
loading . . .
Redis playground
Embeddable Redis playground for education, documentation, and fun.
https://codapi.org/redis
3 months ago
1
2
0
Go 1.25 is coming soon, and the official release notes are pretty dry. So I prepared an interactive version with lots of examples.
antonz.org/go-1-25
loading . . .
Go 1.25 interactive tour
Fake clock, new GC, flight recorder and more.
https://antonz.org/go-1-25
3 months ago
1
18
4
I'm working on an interactive Go 1.25 tour, but there are so many changes in json/v2 that I decided to cover them in a separate blog post. Plenty of interactive examples ahead!
antonz.org/go-json-v2
loading . . .
JSON evolution in Go: from v1 to v2
Reviewing the key changes in json/v2.
https://antonz.org/go-json-v2
4 months ago
2
29
16
Using mutexes to avoid data races might seem simple, but dealing with race conditions is a whole other matter. Let's learn how to handle these beasts βΒ in the new chapter of my Go Concurrency book!
antonz.org/go-concurren...
loading . . .
Gist of Go: Race conditions
Keep the system state correct by any means necessary.
https://antonz.org/go-concurrency/race-conditions
4 months ago
0
0
0
I'm back to working on the Go Concurrency book! The new chapter is all about data races and how to avoid them:
antonz.org/go-concurren...
loading . . .
Gist of Go: Data races
Two goroutines racing for the same data is a recipe for disaster.
https://antonz.org/go-concurrency/data-races
4 months ago
0
1
0
My rule of thumb: writing is an AI-free zone.
antonz.org/ai-free
loading . . .
AI-free writing
I never use AI-generated content in my writing, and I never will.
https://antonz.org/ai-free/
4 months ago
0
2
0
If you're into Go, I have a sad story for you. It's a tale of false flexibility, leaking abstractions, and httpβ.βDefaultTransport.
antonz.org/default-tran...
loading . . .
Sad story of http.DefaultTransport
A tale of false flexibility and leaking abstractions.
https://antonz.org/default-transport
5 months ago
0
1
0
Recently, I was working on an application that needed to know if it was connected to the internet. I didn't want to use ping (ICMP), and wanted to exercise the full stack used by real HTTP clients: DNS, TCP, and HTTP. So I did some digging, and here are the results:
antonz.org/is-online/
loading . . .
Am I online?
Checking internet connectivity with 'generate 204' endpoints.
https://antonz.org/is-online/
5 months ago
1
6
4
Did you know that there are SQLite extensions for: β Creating pivot tables. β Storing tables in S3. β Querying Excel files. β Reading Protobuf messages. β Fuzzy string matching. And many, many others!
5 months ago
1
1
0
Graft by
@f0a.org
implements strongly consistent replication between SQLite and object storage like S3/R2. Implemented as a SQLite virtual file system. Interesting!
5 months ago
1
1
0
Grep is one of the most useful cli tools I use every day. If you use it often, I encourage you to take a look at the interactive mini-book I wrote β you might learn a thing or two even if you are an experienced grep user.
antonz.org/grep-by-exam...
loading . . .
Grep by example: Interactive guide
Interactive introduction to grep with real-world use cases.
https://antonz.org/grep-by-example/
5 months ago
1
2
0
you reached the end!!
feeds!
log in