So, today I spent a bigger part of it writing a noise generator that will be used in pat.junkie.dev to produce some more interesting events and behaviors. But that's not the interesting part.
The interesting part is that tried to use Gemini Code Assist in VSCode as much as possible. I did not go as far as full vibe coding mode, but I tried to save myself as much typing as I could. For the context, I was writing in Go. Here are my impressions so far, in no particular order:
- good: it's great for "boring" stuff and boilerplate. It quickly bootstrapped me some unit tests, benchmarks and even fuzz tests. I definitely wouldn't bothered with the latter if I had to look it up myself.
- good: it's great for refactorings that are easy to describe, but hard to do with standard tools. For example, rearranging a few dozen printf format strings and appropriate arguments is very annoying to do by hand, but Gemini did it in a bit.
- bad: sometimes it sneaks in changes unrelated to what you've asked. Half the time they are fairly sensible (like removing a debug-print I totally forgot about), but I didn't ask for that and sometimes it's hard to convince it to only do what you need.
- okay?: it's not a fast thinker. I am definitely tempted to tab away to a different window while it's generating a response. But it's still faster than without it, so I can live with that.
- bad: sometimes it's being silly and creates a single-use variable that really don't need to be there. I guess it optimizes for self-explanatory code, but past a certain point it actually harms readability more than it helps.
- good: it's great for throwaway things I don't care about. For example, I needed a python script to visualize the generated noise and it generated it easily. It was ugly as fuck, but I was going to delete it anyway, so as long as it works...
- bad: explaining anything complicated or non-standard is so tedious that it isn't worth it. In my case, I wanted a variation of 1-d Perlin noise, but with for arbitrary points and with
time.Time
as the dimension unit. It really was easier to code it myself than watch out of all the type conversion bugs and bit-mashing mistakes it made. - meh: it's not great for things you have strong opinions about and want it in a particular way. Want a specific API? Gotta write out that interface, or you get something that doesn't match your broader intentions. Not very different from an intern, I guess :D
- good: Gemini's large context window allows it to just slurp up my whole project and analyze it as a whole. It made surprisingly good responses for silly questions like "tell me what this project is and how it works".
- bad: inline suggestions are nice, but they get messed up if
editor.autoClosingBrackets
is on. - good: With rare exceptions, the code it generates is correct. When it's not, it's a kind of mistakes I would have made myself. For example, who could have thought that
math.MaxUint64
is actually anint
(under very specific conditions)? - lolwhat: Sometimes it breaks style conventions really badly. Like, a variable
val1_at_t1
in Go, really? But it's very rare. This is the only noteworthy example I caught today.
Overall, it is quite handy and allowed me to focus a lot more on the interesting bits of the logic. I also clearly have a room to improve at my prompting, and I couldn't be bothered to try and feed it a design doc to see what happens. But if definitely made the time more pleasurable.
I can't believe we replaced blogs and RSS with people emailing their posts to you. just a really obviously stupid step backwards
Announcing: https://justaqrcode.com.
Tired of "free" QR code generators that are full of ads and trackers, that share your data, and that want to sell you something? Me too. Here's my act of resistance: I made a one-page site that works entirely in your browser to generate a simple QR code. And that's all it does. You can download the HTML page and run it locally, even. Read the source; nothing up my sleeves. Just a QR code.
My offer to you -- I will continue to pay for the domain name and web hosting for it, myself. If you find it valuable, you can pay it back by creating your own useful thing for the world and releasing it for free. Let's take back the friendly web, one vexingly-monetized utility at a time!
I got up to some fishy business yesterday, and wrote a blog post about it
More seriously, I wanted to figure out how transient prompt works in projects like Powerlevel10k, and once I did I decided to write it down.
https://nevkontakte.com/2025/transient-fish.html
It's a bit sad that I rarely have enough energy for random exploration outside of a vacation… But at least it's good to know that my brain is not a boring tin can yet.
Well, it was great while it lasted. Any recommendations for alternatives? The main requirement is iOS sharing integration for saving links.
One thing to remember about #ml (and, by extension, #ai) is that it is, at the end of the day, a technique for complex function approximation. No more, no less. Think back to Stone–Weierstrass theorem from the mathematical analysis course, just on a different scale.
It is hard to imagine writing down an analytical definition for the "human speech" function, but, amazingly, we can computationally arrive at something that is behaving very similarly, and we call our latest take at it "Large Language Models". The impressive thing about this is how unimpressive it really is for what it does.
When looking through that lens, it feels kind of silly to ascribe real intelligence to such models, since it's merely an imitation of the original phenomenon. But it does provoke some reflection on what the existence of such approximation tells us about the original.
I think it also indicates the limitations of the current generation of AI techniques: they can achieve great (perhaps arbitrarily great) accuracy when interpolating, that is, when we are working within the information space well-represented in the training dataset.
However, it's much harder to make assertions about extrapolation accuracy the ideas and knowledge not seen by the model before, never mind the ideas completely novel to the humanity entirely. To me this is a hint as to why AI is actually pretty bad at creativity. It's not so much because it's bad at creativity, it's because its extrapolation is rather unlikely to match what humans consider creative.
Does this make #AI useless for any art, or novel research, or other forms of innovation? Not at all, I don't think. For one, all innovation consists of 1% of actually new ideas and 99% of hard and boring implementation/testing/experimental work, and any help with those 99% could still be a massive help. And even within 1%, random flailing of AI models can inspire humans into actually useful ideas :)
All of that it say, AI is just a better brush and it's silly to pretend it doesn't exist.
I think I'm slowly coming around on the whole generative #AI stuff. Much like most of the folks in my #fediverse feed, my first reaction was "hype is bad for your brain" and "this is a solution looking for a problem". Both of which remain true. However...
I caught myself mentally defending the "AI is a dumb trend" position just because that was my instinctive reaction, which is as much of a fallacy as the opposite. So, I think before I restore my "criticize AI bros" privileges, I should learn first hand what AI can and can't do.
More than that, I think it is becoming self-evident, that AI tools can be valuable productivity boosters, just not in the ways that marketers would have you believe. In the same way that an LSP plugin lets me spend more cognitive power on the semantics of the code than hunting down missing semicolons, AI-based completion can help me with "boring" parts and let me focus on the high-level design and problem space. It's a smarter paint brush, but the result is still determined by whoever wields it.
Mind you, I am still responsible for making sure that the semicolons are in all the right places, and that the code is good enough for me to put my name next to it.
I realized that I was so burned out by all the FOMO marketing that I almost forgot how to be curious about things. So yeah, picking up this new paint brush and learning first hand what it can and can't do is by far not the worst way to spend my time.
WHAT IF youtube video descriptions actually contained video description, instead of a million affiliate links?! I know, a very novel idea.
Every now and then I go to https://pkg.go.dev/golang.org/x/tools and just explore the package tree. And almost every time I find new and cool nuggets that are interesting to poke at.
For example, https://pkg.go.dev/golang.org/x/tools@v0.33.0/cmd/fiximports seems like something I could replicate in gopherjs as a preprocessing stage to make the downstream translation simpler.
Today many of my Russian countrymen and other post-USSR nations celebrate the Victory Day, which marked the end of the Great Patriotic War in 1945 and heralded the end of World War II. On this day today, I would like to remind y'all of something...
As a little child, I always looked forward to a day off of school to go and watch the parade in our town. Watching cadets of the local military school and soldiers of the nearby garrison march by in crisp uniforms filled me with pride and joy for people who would defend my country, and deep respect for those who did in the past conflicts. And today, I still feel that deep respect.
I also feel that the tone shifted from honoring the defenders and celebrating peace to glorifying the military might for its own sake, and the ability to wage wars. This isn't right. So, on this day, I would like to remind y'all of something...
The Victory Day is a somber day. It's a day to remember every life that had to be laid down to thwart a terrible evil. It's a day to ponder how many artists, teachers, scientists, poets and makers didn't have a chance to flourish because the war cut their life short. It's a day to remember how much we longed for peace, and to remind ourselves to treasure it. It's a day to realize that the war was won because we — all the nations across the globe — were united in the pursuit of peace for everyone.
It's a day to revisit the crucial lesson: no nation is better than another. No nation is inherently evil or righteous. But we all are humanity, and we are better off together than apart.
Using #vim is easy once you learn a few basic keybindings.
h and l - move left and right
j and k - move down and up
η and λ - move backwards and forwards through time
ξ and κ - translation through additional temporal dimension (if applicable)
ᚻ, ᛄ, ᚳ and ᛚ - moving left, down, up, and right through celestial spheres
𐤄 and 𐤋 - switch deity to pantheon member to left or right
𐤉 - supplicate to chosen deity
𐤊 - challenge chosen deity (dangerous)
:q - exit
Support for Windows 10 ends on October 14, 2025. Microsoft wants you to buy a new computer. But what if you could make your current one fast and secure again?
Check out the End of 10 initiative to learn more! If you know anyone else who might find this useful, share it with them!
A small quality of life tip for when you are tinkering with your dotfiles (shell, in particular):
$ bash --norc --noprofile # bash is everywhere, and disable user configs in case they are in a busted state. Feel free not to do. bash-5.2$ while zsh; do true; done my-fancy-zsh> cd ~git/dotfiles # Try the current config, see if it works. my-fancy-zsh (errror, your git prompt is busted!)> # Oh no! Let's fiddle with .zshrc some more. my-fancy-zsh (errror, your git prompt is busted!)> ^D # Ctrl-D to exit the shell. my-fancy-zsh> # Restarted in a clean state! my-fancy-zsh> cd ~git/dotfiles # Try again. my-fancy-zsh (omg, something is not checked in)> # That's much better! my-fancy-zsh (omg, something is not checked in
)> exit 1 # We are done here. bash-5.2$ ^D
This works much better than source ~/.zshrc
because not everything in the rc file is idempotent and broken state from a bad attempt can mess with things. It spares me a lot of frustration of opening and closing terminal tabs, which is what computers are supposed to do for us.
Been to a book store today. Purchased myself some old religious texts…
Dark Tranquility is the band I often come back to when I feel stressed or need some comfort. The recently released song "Not Nothing" is... strangely reassuring? https://www.youtube.com/watch?v=pBsVsLRSgfE There is no guide to light our way, but ourselves. And that'll have to be enough.
"Clockwise" is British for "smart watch".
I am pleased to announce V, a social network that's only half as bad as X.
With bluesky (mostly) going down for a few hours today, I got to wondering about how decentralized the fediverse really is in terms of where its servers are hosted. I grabbed a server list from fedidb, with network information coming from ipinfo.io .
[EDIT: I did a better analysis on a dataset of 10x as many servers, see https://discuss.systems/@ricci/114400324446169152 ]
These stats are by the number of *servers* not the number of *users* (maybe I'll run those stats later).
fedidb currently tracks 2,650 servers of various types (Mastodon, pixelfed, lemmy, misskey, peertube, etc)
The fediverse is most vulnerable to disruptions at CloudFlare: 24% of Fediverse servers are behind it. Also note that this means that I don't have real data on where this 24% are located or hosted, since CloudFlare obscures this by design.
Beyond CloudFlare, the fediverse is not too concentrated on any one network. The most popular host, Hertzner, only hosts 14% of fediverse servers, and it falls off fast from there.
Here are the top networks where fediverse servers are hosted:
504 Cloudflare, Inc.
356 Hetzner Online GmbH
130 DigitalOcean, LLC
114 OVH SAS
56 netcup GmbH
55 Amazon.com, Inc.
55 Akamai Connected Cloud
36 Contabo GmbH
33 SAKURA Internet Inc.
32 The Constant Company, LLC
31 Xserver Inc.
28 SCALEWAY S.A.S.
24 Google LLC
23 Oracle Corporation
16 GMO Internet Group, Inc.
14 IONOS SE
14 FranTech Solutions
11 Hostinger International Limited
10 Nubes, LLC
Half of fediverse servers are on networks that host 50 or fewer servers - that's pretty good for resiliency.
There is even more diversity when it comes to BGP prefixes, which is good for resiliency: for example, the cloud providers that have multiple availability zones will generally have them on different prefixes, so this gets closer to giving us a picture of the specific bits of infrastructure the fediverse relies on.
The top BGP prefixes:
55 104.21.48.0/20
50 104.21.16.0/20
48 104.21.64.0/20
41 104.21.32.0/20
41 104.21.0.0/20
38 104.21.80.0/20
32 172.67.128.0/20
31 172.67.144.0/20
28 172.67.208.0/20
28 162.43.0.0/17
27 104.26.0.0/20
26 172.67.192.0/20
26 172.67.176.0/20
23 172.67.160.0/20
19 116.203.0.0/16
17 172.67.64.0/20
17 159.69.0.0/16
16 65.109.0.0/16
14 88.99.0.0/16
14 49.13.0.0/16
13 78.46.0.0/15
13 167.235.0.0/16
13 138.201.0.0/16
11 95.217.0.0/16
11 95.216.0.0/16
11 49.12.0.0/16
11 135.181.0.0/16
10 37.27.0.0/16
10 157.90.0.0/16
75% of fediverse servers are behind BGP prefixes that host 10 or fewer servers, meaning that the fediverse is *very* resilient to large network outages.
Top countries where fediverse servers are hosted:
871 United States
439 Germany
156 France
148 Japan
75 Finland
57 Canada
49 Netherlands
38 United Kingdom
26 Switzerland
26 South Korea
21 Spain
19 Sweden
18 Austria
17 Australia
15 Russia
12 Czech Republic
10 Singapore
10 Italy
And finally, a map of the locations of fediverse servers:
https://ipinfo.io/tools/map/91960023-e8c6-4bee-9b07-721f2c8febab
Here we have the common boneless cat aggressively relaxing down the stairs