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 an int (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.

Nevkontakte shared 2 days ago
Nevkontakte shared 5 days ago

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 (and, by extension, ) 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 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 stuff. Much like most of the folks in my 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.

Nevkontakte shared 11 days ago

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.

🌷

Nevkontakte shared 21 days ago
Nevkontakte shared 23 days ago

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.

- YouTube www.youtube.com

"Clockwise" is British for "smart watch".

I am pleased to announce V, a social network that's only half as bad as X.

Nevkontakte shared a month ago
Nevkontakte shared a month ago