Protecting Secrets in Dotfiles with Chezmoi

Following up on my earlier blogs on Chezmoi Using Chezmoi Using Chezmoi part 2 - Templates one really nice feature is how Chezmoi integrates with various password managers so that you never have to put sensitive content into your dotfiles that you put on GitHub or some other shared/public location. You can read the Chezmoi docs for all the various supported password managers. I use 1Password so I will show a quick and simple example of integrating with that. ...

June 20, 2025 · 3 min · Ray Suliteanu

My Take on Helix and Neovim

I am a long time GUI IDE user, and most of that time I’ve used JetBrains IDEs, in particular IntelliJ IDEA. But prior to using GUIs, I used vi (yes vi, not vim!). Over this period of using GUIs, I would still use vim (now actual vim, yes) when I needed quick and dirty stuff … looking at or editing some config file from a terminal, for example. Then six months or so ago, I started using NeoVim. I documented some of my experience with NeoVim vis a vis IntelliJ in this blog. Since that time, I have been using NeoVim almost exclusively. This had more to do with the keyboard I’ve been using over that period than any real dissatisfaction with IntelliJ (or RustRover). Maybe I’ll write a blog on that at some point. ...

June 14, 2025 · 16 min · Ray Suliteanu

Peekable Iterators in Java

In Java there is your standard Iterator that has been around “forever” (since Java 1.2) and has hasNext() and next() methods, to check if the iterator has more elements and to get the next one, respectively. This is often sufficient, and can work well (though imperatively). Java 5 added a new Iterable interface along with the “enhanced for” loop, from which you can get an Iterator and a couple other things (primarily a forEach() method). ...

June 7, 2025 · 5 min · Ray Suliteanu

Using chezmoi part 2 - Templates

In my previous post on chezmoi I gave an introduction on the basic setup and usage. There is a lot more you can do with chezmoi, particularly if you’re using it across different computers you use. For example, maybe you have separate computers for work and at home, or maybe you have one computer that’s a Windows machine and one that’s MacOS and another one that’s Linux. Perhaps you have multiple Linux machines but you want the config to be slightly different. chezmoihas you covered. ...

April 7, 2025 · 6 min · Ray Suliteanu

Quick bytes - using UDP in Rust

This is the first post where I’m doing “quick bytes” of simple examples with Rust. This is both a way for me to keep track of some basic usage of various Rust-isms, but also a way for me to share that in case it’s helpful. I could just leave these as notes in my Obsidian vault, but why not share! UDP The User Datagram Protocol (UDP) is the lesser known sibling of the Transmission Control Protocol (TCP). The simple difference is TCP is guaranteed and UDP is not. What I mean is, UDP is like “fire and forget” and TCP has a whole retry mechanism. There are of course other differences, but that’s what I see as key to understand. UDP is also used for “multicast” where a packet is broadcast to multiple recipients. ...

April 1, 2025 · 3 min · Ray Suliteanu

What does "kidoni" mean?

You may wonder what kidoni means. Well, it is essentially my family name, in a round about way. This is all according to my late father, and I haven’t verified the Romanian aspect … because I don’t care! I like the story, such as it is. My father (and his brother and sister) was born in Romania in 1929. This as you hopefully know is (just) before World War II. My family is Jewish, and so not a great time to be in eastern Europe. While they survived the war staying in Bucharest, when the war was over they moved to Israel. Then the family moved to the United States in the early 1950s. Eventually you get me. But the story is about “kidoni” not my family history. I discuss this just enough to convey these key points: ...

April 1, 2025 · 1 min · Ray Suliteanu

Using Java's New Gatherer Interface

As a preview in JDK 23 and about to be final in the upcoming JDK 24, Java has added a capability to its Stream API to create new collectors using a new interface called Gatherer. Java has had a Collector API for a while now, but the Gatherer interface addresses some limitations, including the issue that there was no way to tell a Collector that processing was complete. If there were still some data the Collector was processing, this data was lost. You will see an example of this later. ...

March 1, 2025 · 8 min · Ray Suliteanu

Taking Screenshots in Neovim with Silicon

When I started writing blogs, since my code was stored in GitHub, I would use GitHub Gists of my code snippets to use in my blogs. I was also predominantly using JetBrains IDEs, which have a built-in Gist-taking feature, which I love. This was very convenient, staying within my IDE. Because I was also using Medium to publish my blogs, this turned out to be very convenient because Medium could take the URL of the Gist and nicely embed the image in the published blog. However, because the URL is actually to some Javascript, and not to an image file like a PNG or JPG, I could not use the Gist URL in my blog posts on my own website quite so easily. This is in part because of the publishing tool I’m using ( Quartz), but also because I want the Gist to show “inline” like an embedded image. ...

February 15, 2025 · 5 min · Ray Suliteanu

Totally Terrific Terminal Tools

With all the wonderful graphical interfaces available, it’s easy to forget that a terminal is still a powerful tool. And depending on your job or what you’re doing, it can be the only interface available. Or you may just be longer in the tooth like me and have been using terminal emulators or actual real-life terminals for decades, and feel comfortable and at home working within a terminal. I will use the term “terminal” from here on out, even though for almost everyone we’re really using terminal emulators. But even if you’re used to using terminals, you may not have heard of some of the newer tools available, which can seriously make you much more productive. So whether you’re relatively new to terminals or a seasoned pro, here are tools for the terminal that have made me much more productive. Some of these are replacements for tools you may be familiar with, and others are new(ish) and make one wonder how we got along without them. ...

February 3, 2025 · 14 min · Ray Suliteanu

Using chezmoi to manage dotfiles

There are many options available to manage dotfiles. I have been using chezmoi for a while now and I am quite happy with it. In this post I will explain how I have set up chezmoi to manage my dotfiles. I have tried several different approaches, including doing nothing - basically just making sure I had a backup somewhere. I’ve also tried a simple shell script that would manage symlinks for me. I’ve also tried GNU Stow. There are several reasons I don’t like stow but this post isn’t about bashing stow. I started to look into Nix HomeManager but I didn’t want to go all in on Nix. Nix seemed to all invasive and “heavyweight”. So what are my requirements? ...

January 9, 2025 · 8 min · Ray Suliteanu