As a team lead, managing and creating Jira tasks is something I have to do on a daily basis. Jumping between the code in my editor and the Jira web interface often breaks my flow, so I've spent a lot of time looking for a better way to handle my backlog. Over the years, I've tried multiple…
When I released jira oil.nvim, I wanted a demo that looked clean and was easy to maintain. At first it sounded simple: open Neovim, do a few actions, record screen, publish GIF. In practice, there were three problems: 1. I could not expose real Jira issues from work. 2. Recording a good GIF from a…
This is the 100th post on this blog. I wrote the first one on April 15, 2020, mostly to see if I'd stick with it. Turns out I did, almost six years and a hundred posts later. To celebrate post 100, I decided to rebuild the entire site from scratch. Why redesign now The blog has been running on…
At work, we use Calico network policies extensively. Between NetworkPolicy and GlobalNetworkPolicy resources across multiple clusters, keeping track of what's allowed and what's blocked gets complicated fast. Reading raw YAML works when you have one simple policy, but once you're dealing with…
Lately, I’ve been spending most of my time working with Forgejo — a great self hosted Git service I use for both personal and work projects. Since almost all my coding happens inside Neovim , I rely heavily on a tight workflow between my editor and Git hosting. I’ve been using folke/snacks.nvim for…
I discovered a useful WebRTC testing page created by Mozilla: https://mozilla.github.io/webrtc landing/gum test.html. This page is designed to demonstrate and test the getUserMedia (gUM) API — part of the WebRTC suite of browser APIs that let web applications access a user's camera and microphone…
Forgejo is a self hosted Git service that provides a powerful CI/CD system through Forgejo Actions. However, running Forgejo runners in Kubernetes, especially in rootless mode, presents several challenges that require careful configuration. In this post, I'll walk you through setting up rootless…
I've been using Obsidian for managing notes across multiple devices for a while now. Initially, I relied on remote sync via Yandex Disk, mostly because it was convenient and free. However, recently I've encountered significant issues with it, primarily due to frequent HTTP 429 "Too Many Requests"…
Our company recently decided to transition from Zoom to Kontur Talk (ktalk) for voice and video communications. Kontur provides official application packages as Linux AppImage and macOS DMG files, but to ensure consistency across developer workstations running both Linux and macOS, I set out to…
Understanding ZFS ZED Service Failures on NixOS I'm running NixOS with ZFS, and couple timed during updates I've faced an issue with the ZFS Event Daemon ( zfs zed ) service. A typical error message looks like this: Why Does This Happen? When the Linux kernel updates on NixOS, the corresponding ZFS…
Renovate is an essential tool for managing dependencies automatically. Integrating Renovate with your Nix Flake based project ensures timely updates, maintains security, and keeps your project streamlined. Here's how to onboard your repository and configure Renovate effectively. Step by Step…
I was using nil language server for a while, and it was working fine. However, after a great video from vimjoyer's new video nixd seems to have more features, as it is in very active development state right now. Among the killer features for me was options auto completion. While vimjoyer did a…
Testcontainers is great framework for replacing complicated mocks in tests with the real dependencies like databases, message queues, etc.. in containers. Developers love this framework, and it's really easy to get it running on the local machine. However, running testcontainers in Kubernetes, as…
I really enjoyed using nvim jenkinsfile linter when I was writing Jenkinsfiles. Simple yet useful, this plugin helped to speed up writing Jenkins pipelines as I didn't have to to Jenkins Web UI to check if my pipeline is correct. Now I'm writing Gitlab CI, and I couldn't find any plugin with such…
Introduction If you're running NixOs on your laptop, and your laptop have fingrerprint scanner, it can be very convenient to use it for authentication. I couldn't find any articles on setting up fprintd on NixOS, so I'll share how I've done it. I am using regreet for my login manager, and, while it…
NixOs is gaining a lot of attentions right now. I've also decided to try to use is as my daily driver. I won't go into the details of installation of nixos, or setting up flake. Check out Introduction to Nix & NixOS free ebook and Nix starter configis As I use Colemak Mod DH layout, this was must…
When writing markdown, it's super common that you need numbered lists. (Neo)Vim has built in support which makes creating numbered lists like a breeze. Making a list of numbers article covers many approaches to creating lists, but it's hard to find the true gem automatic numbering. See :help v g…
If you're interested in Testing Infrastructure as Code, join me Feb 27 2023, 1:00pm with the By watching this webinar, you will learn: The importance of testing infrastructure code with Terraform How to use TFTest to test your devops infra modules Techniques for running tests in parallel and…
I continue my adventures with TrueNas Scale. After configuring UPS I wanted to see the UPS graphs on the reporting page, but they were empty. As it turns out, now reporting for UPS is broken, and you have to dig deep to make it work due to the following reasons: CollectD Debian maintainers disabled…
To protect my TrueNas Scale installation from power outage, I bought a UPS. I had a good deal on Huawei UPS2000G, and considering that it's an online UPS it was a no brainer for me. However, with all it's advantages, it has some drawbacks: Pretty loud fans, which doesn't make it a good fit for home…
TrueNas Scale uses k3s, which is a lightweight Kubernetes distribution. It's intended to be used only as platform for APPS, but I don't see why you can't use it as your playground. Connecting to TrueNas k3s locally This way you connect to k3s locally, which is more secure than exposing your…
Recently I bought a server that I will be using as NAS/HomeLab. My OS of choice for this server is TrueNas Scale. It's a great OS with a polished web interface, but for HomeLab you want to play around with it and customize a lot of things. So I thought that I'll write a series of blog posts sharing…
I've passed the course GitOps at Scale and follow up exam: This is a second course on ArgoCD. It has short and precise materials, useful pieces of advice on deploying and managing ArgoCD. The team did a great job on this course! During this course you'll learn: How to manage external clusters with…
Today I learned that since v1.1 , you can move Terraform resources into modules without recreation using moved block. Refactoring doc covers such use cases as renaming resources, enabling count or for each and splitting module into multiple modules. But this doc don't cover my use case, move one or…
Today I learned that since 1.14, 'kubectl' has Kustomize integrated in it: I don't know how I've missed this change, but it's nice to know. More info: Declarative Management of Kubernetes Objects Using Kustomize
Monitoring of each Kubernetes component is very important, and Calico is not exception. Today I learned that Calico provides capabilities to export Prometheus metrics out of the box. However, Official documentation is a bit misleading and examples from it doesn't work with Prometheus installed via…
I have a very useful mapping in my Neovim: gx , which opens the URL under the cursor in the browser. I even wrote a blog post on it: Neovim Opening URLs This blog post is a bit outdated,especially with the newly introduced way of setting up mappings through vim.keymap.set , but still works like a…
Today I learned that you can embed maps in geoJSON and topoJSON format into your markdown files. For example, you can select desired area in the geojson.io, copy the code and embed it like this: This snippet will be rendered automatically in your markdown files. To paste this in GitHub Pages, use…
I've passed some free courses and corresponding certifications, which I find pretty useful. Certified Calico Operator: Level 1 CCO L1 course will arm you with the knowledge you need to understand how Kubernetes networking works, how to configure and manage a Calico network, and how to secure your…
In one of our production clusters, we've faced the issue of depleting the IP addresses, due to how ENI assigns and reserves IP addresses. You can check out ENI Max Pods for the numbers. The most obvious choice is to use a different CNI plugin for the EKS, with Calico being the most popular one.…
While all commits to GitHub through the web interface are automatically signed, you have to do some configuration to make it work in the console. Signing Git commits might be a requirement for your job, OpenSource maintainers might only accept signed contributions or you might just want to increase…
Today I learned that Keda and DataDog don't work together. I was trying to implement automatic scaling based on the AWS SQS Queue. While according to the Scaler Documentation, everything should work, I kept receiving weird error messages. After some in depth investigation, I’ve figured out that…
Today marks two years of this blog. I wrote my first post on this blog on 2020.04.15. For two years, I wrote 73 posts, some of which become popular. In this post, I'll share some statistics about my blog, and I will use Google Analytics for that. Audience My audience slowly grew from zero, recently…
Working with Terraform on a daily basis and using Neovim as my main and only editor, I recently figured out a few improvements, which I'll share in this blog post. Correctly detecting TF filetype Many users of NeoVim use filetype.nvim, which replaces native filetype detection and speeds up Neovim…
I've became a technical reviewer for the book Kubernetes – An Enterprise Guide Second Edition Today I've received my printed copy of the book: I thought that I should share my thoughts if it's worth it. When you agree to became a technical reviewer, you sign a contract with Packt. For me, the…
Today I learned a pretty cool LSP feature automatic highlighting of references for the current text position: To make it work, a few requirements have to be met: Your LSP must support such capabilities Your colorscheme must support highlight groups defined Make it work by introducing autocommands…
When I saw that Digital Ocean @digitalocean is organizing a Kubernetes Challenge I decided that I'll participate. The idea behind the challenge is pretty cool you pick one of the proposed scenarios, DO give you some credit to implement this scenario, you create a write up describing your…
When you use Neovim LSP functions like vim.lsp.buf.definition() or vim.lsp.buf.implementation() , your cursor jumps to the corresponding position. Your previous position is added to the jumplist. However, if you start jumping around, your jumplist quickly becomes populated with irrelevant jumps and…
To understand what's going on on the market, it's useful to apply to open positions from time to time. This provides an opportunity to: figure out your weak spots understand fair pay for your skills and knowledge solve interesting technical challenges One of such interesting technical challenges…
In the beginning of 2021, Nat Friedman announced that Video files that you drop onto markdown files are now automatically embedded! While that sounded pretty cool, there were 2 things which didn't let me try this feature: 1. All demos showed that .mp4 files were added to the README.md, so I thought…
I've passed the course GitOps Fundamentals and follow up exam: The course is free, and all you need to pass the Exam is some time and patience. The course gives some insights how ArgoCD and Argo Rollouts works. In a simple way. Even if you never worked with ArgoCD you'll be taught how to install…
While everyone is hyped about GitHub's Copilot, I've discovered TabNine, an AI completion that I enjoy a lot. When Copilot is aiming to write the whole function for you, TabNine just tries to intelligently complete the current line. Furthermore, the current implementation of Copilot for vim looks…
In my daily work, I try to use sane commits messages. Here's a typical example of my commit messages: While they're make sense, there's a better approach to writing commit messages. Today I learned that there's a whole specification for writing Conventional Commits. They provide a nice and…
I've wanted to start using snippets for a while, but never actually invest time into figuring out how snippets work. The idea to expand blocks of text/code just but pressing a few key strokes seems very interesting. At the time of writing, there's a good amount of snippet plugins available for…
During my investigation of Pods taking a long time to start (20+ minutes) I saw following message in Pod's logs: I figured out that PVs are unavailable for reattaching as, due to enforced fsGroup , every time before mounting PV, SetVolumeOwnership() is run against the volume. For small volumes,…
If you want to feel the taste of the GitOps approach one of the best tools on the market at the moment is ArgoCD. It has all the features you'd like to see from such tool and is stable enough to use it in production. As I'm a huge fan of Helm, the ability to deploy Helm charts is a killer feature…
Testing your changes to the Helm chart is a must if you want to minimize the risk of failure. There are a set of techniques, which you may use to validate your chart: Running helm lint Running helm template Running helm upgrade dry run against real installation Installing helm chart to Kubernetes…
When you upgrade deployed Helm chart, you probably have replicas defined in values or pass it through set . But sometimes it's useful to respect the current amount of replicas, for example: If you're using Horizontal Pod Autoscaler If you're managing replicas through external automatization/script.…
As an active user and developer of Github Actions, I spend a lot of time watching how the run goes on and reviewing logs of unsuccessful runs. So far I had to constantly hop between Neovim and Browser with opened runs. I was looking into how my workflow can be improved and usage of CLI tool gh was…
If you're managing a lot of GitHub repositories you're probably using GitHub Actions. One extremely powerful action is github script. Using this script you can access any of GitHub APIs to do such things as modify repository permissions, manage GitHub App Installations, spread secrets, and many…