RSSAmplifier

Blog

Stefan Gloutnikov

Recent content on Stefan Gloutnikov

gloutnikov.comRSS feed ↗41 posts

Latest posts

Desktop Environment on a Linux Server from Your Browser

I needed a desktop environment to use a certain application on my small Linux VPS. X11 forwarding over SSH was the first thing that came to mind, but I decided to see what else was out there. I’m glad I did, as it led me to the Webtop project.

Git Push Over Tailscale SSH

Let’s imagine a scenario where we have an IoT device which is unable to reach our git repository due to some external factors (security, networking, etc.) but we still want to push code to it, maintain version control, and run that code on the device.

Key Remapping in Linux with keyd

There are many ways to handle key remapping in Linux, from various utilities to configuring them in your desktop environment. After trying quite a few I settled on keyd because of its ease of use and the benefit of getting a system wide remapping regardless of environment or tty.

Arch Linux with Limine Bootloader Install Notes

Limine is a relatively new bootloader that looked very interesting, and I wanted to try it out on my Arch installation. Overall, I’m very happy with it and decided to keep using it. These notes are an addition to my previous Arch install notes covering installing Arch Linux with full-disk encryption and btrfs, but instead of GRUB we will use Limine as the bootloader.

btrfs Snapshot and Restore Notes (GRUB)

Notes on setting up automated btrfs snapshots with the ability to boot them from GRUB and restore them. This post targets an Arch Linux installation but is useful for any Linux system.

Geospatial Radial Search RESTful API with PostGIS and entgo Example

Let’s look at an example of building a location-based search RESTful API–something you might use to find restaurants or points of interest in a radius around you. Specifically, we’ll use a database that efficiently handles geospatial queries and a RESTful API that lets users store location data as well as radial search for nearby points of interest.

Arch Linux with Full Disk Encryption Install Notes

The following post outlines installing Arch Linux with full-disk encryption on a btrfs filesystem. After recently getting a Framework 13 laptop, I wanted to install Arch Linux on it with FDE to be on the safer side as well as try out btrfs system snapshots and restore capabilities.

T.T.T. by Piet Hein

Put up in a place 
 where it’s easy to see 
 the cryptic admonishment 
 T.T.T.

Bruno: New API Client You Should Try

If you are doing any API development, a pretty useful tool can be an API Client. Some place to store and easily call various API endpoints with various payloads for testing.

Graceful Shutdown Pattern in Go

The following is an example of a graceful shutdown pattern I like to use in my Go applications which upon pressing Ctrl+C to quit allows for performing clean-up tasks.

My Number One Debugging Rule

Over the years of working in the software industry I have developed a single rule for myself when trying to debug, figure out why something is broken or doesn’t work. I can’t count the number of times not following my rule has come to bite me and led to countless hours of banging my head against the wall.

Publishing and Using Private Go Modules

In the following post we go over and show an example of publishing and using a Go module from a private Git repository.

Integration Tests with External Dependencies in Go

Integration tests are tests which use or depend on some external software like a database, cache layer, or any service. While unit tests validate smaller pieces of software logic, it is always good to also run integration tests in an as-close-as-possible to real environment, and preferably also have them automated. This post will go over a way to easily include and automate the use of external…

gRPC Go Example and Boilerplate

I put together a simple example and all the boilerplate needed to get started with a gRPC service in Go. The following Git repository includes some of what I consider best practices, useful middleware, observability, and other features.

Replacing Docker Desktop with Colima

Recent license changes to Docker Desktop meant that large companies would need a license to use it. I spent some time looking for a suitable alternative to Docker Desktop on MacOS, and until recently, that was running and ssh-ing into a Linux Virtual Machine. I stumbled upon the lima and colima projects, with the latter bringing container runtimes on macOS, and this is what I am using going…

Helm impersonations with kubie

In a previous post I discussed a convenient shell alias for elevating kubectl command privileges. Below is a similar alias to do the same, but for helm commands.

Embedding Git commit hash in a Go binary

This post will go over how to embed the Git commit hash inside a Go binary in order to support a /versionz endpoint. A /versionz could include multiple things, including manually defined version numbers, but another nice to have is the Git commit hash which produced the binary of the running software.

CNCF Projects Programming Language Statistics

I had heard before that Go dominates as the programming language of the cloud and wanted to investigate that claim. In this post I looked at the repositories of all Cloud Native Computing Foundation (CNCF) projects and assembled statistics on the programming languages used.

Consuming Protobuf Messages in Apache Flink Example

When I first dealt with consuming Protobuf messages in Apache Flink it took me some time to get everything working. In this post we will go over a simple example from a project I worked on that demonstrates how to consume Protobuf messages in Apache Flink.

Linux Observability Tools

The following is a collection of Linux observability tool diagrams that I have collected and keep close by for reference. They primarily come from the blog posts or books of Brendan Gregg.

Dataset Release: Six Years of SiriusXM Now Playing Data

My Sirius XM now playing tracker has been running for six years without any major interruptions. Today I gathered all the data collected to date and am open sourcing the dataset for anyone to use.

Quick docker container shell alias

Often we need to run shell commands on a running docker container. The traditional way would be to run docker exec -it <container> /bin/bash for example. Below is an alias to simplify this process a bit.

Kubernetes impersonations with kubie

Some Kubernetes resources require elevated privileges to access. For example, passing --as <namespace>-admin to each kubectl command. Below is a convenient alias to elevate your permissions for such resources.

Using awscli with multiple AWS accounts

Described below is a convenient way to configure and switch awscli between multiple AWS accounts.

Print on Your Old Printer from Any Client on Your Home Network

If you are like me, you may have an old, but still perfectly functioning printer which you would like to print on from anywhere in your house. In my case, I even kept an old Windows PC just for printing. That PC is soon going to recycling, now that a Raspberry Pi helped make the printer reachable from any computer, phone, or tablet on the home network. This post will show how to easily achieve…

Getting Started with Apache Pulsar on Kubernetes

Apache Pulsar is a distributed pub-sub messaging system that I have recently enjoyed testing for some projects of mine. It has grown very much on me and am now preferring it over Apache Kafka. In this post we will go over installing and getting started with an Apache Pulsar instance running on Kubernetes.

Time Series Session Window(s) SQL Query

A while back I needed to identify time windows within a time series dataset which led me to discover some interesting SQL functions I was not aware of. In short, what I refer to as a window is a start and end timestamp during which certain defined conditions were true. This post will explore a bit more of the problem definition and go over an example SQL query to tackle it.

GraphQL Subscriptions with Go (gqlgen) Example

GraphQL subscriptions are extremely useful in situations when a server needs to update its clients. A chat application is a great example to demonstrate this, as when new messages arrive we want to distribute them among all chat participants as quickly as possible without polling. When I first started looking at implementing GraphQL subscriptions in Go it took me a bit before I had my aha moment…

Quotes

My absolute favorite to kick off this list: &#xA; &#xA; &ldquo;There are only two hard things in Computer Science: cache invalidation and naming things.&rdquo; &#xA; &ndash; Phil Karlton &#xA; &#xA; later evolved to &#xA; &#xA; &ldquo;There are two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors.&rdquo; &#xA; &#xA; If you are wondering how naming things…

Pragmatic Programmer Tips

One of my favorite software engineering books recently released a new edition and has been an absolute pleasure to read again. The Pragmatic Programmer is back with a 20th-anniversary edition and a fresh look at the modern software development landscape.

Prevent your Apple ID from constantly getting locked

If you are like me, and have all of your Apple devices constantly prompt you for your Apple ID password only to inform you that your Apple ID is locked, here is something that you could do to prevent it.

Identifying and Graphing Missing Time Series Data with Apache Spark and Highcharts

When performing my analysis and graphing for my previous post I ran into a problem of identifying and displaying missing time series data. From a series of data that occurs daily, I wanted to identify if there were missing days, and to graph them so that they can easily be seen.

Analyzing SiriusXM&#39;s The Heat &#34;Now Playing&#34; Data with Apache Spark

My SiriusXM tracker for &lsquo;The Heat&rsquo; radio station has now been running since the summer of 2016 and has collected a good amount of data. It seemed like a great opportunity to make use of this data for getting some insight into what songs/artists/albums have been popular throughout the months, and also get some Spark practice under my belt.

Using Apache Spark with MongoDB

This example will go over setting up a simple Scala project in which we will access a Mongo Database and perform read/write operations. In order to access MongoDB from spark we will need the MongoDB Connector for Spark .

Vaadin Spring and Spring Boot - Reload UI changes without server restarts in IntelliJ IDEA

After having worked with GWT several years ago and really liking the framework, I recently found myself trying out Vaadin for a hobby application I want to develop. Vaadin and GWT have their similarities and differences. One of the differences is that Vaadin runs its application logic on the server side, unlike GWT which runs on the client side. This calls for some little extra setup required in…

Host your own Heroku with Dokku on DreamHost&#39;s Cloud

After hosting a few of my apps on Heroku I quickly became a fan of the platform, and saw why it gets such high praise. The ease of deploying an application straight through Git is amazing. Not having to worry about managing servers, or managing the environment is perfect&ndash;it allows a developer to go straight into developing and deploying their apps with minimal hassle.

Control your Homebrew package upgrades

I have always upgraded my installed homebrew packages whenever updates became available. Recently however, I ran into a situation where I did not want to upgrade a specific package while also upgrading the rest. Loved how incredibly easy Homebrew made this.

Projects

gRPC Go Boilerplate &#xA; A minimal repo containing all the boilerplate for getting started with gRPC in Go. [Blog] &#xA; NeterraProxy &#xA; On-demand m3u8 playlist/playback daemon for Neterra.tv, running on Android. &#xA; SiriusXM: The Heat Tracker & The Highway Tracker &#xA; Tracks songs played on SiriusXM&rsquo;s The Heat R&B and Hip-Hop station. Displays top played statistics and new songs.…

SiriusXM: The Heat Tracker

There are a few SiriusXM stations that I always listened to in my car. With Hip-Hop being one of my favorite genres, The Heat was one of my favorite stations. I liked that they play new and old songs, and I would always pick up on some new song that is beginning to trend. After moving to Bulgaria I lost this ability, and I could not justify paying more for online radio than Spotify. This seemed…

About Me

&#xA; Systems/Software Engineer especially interested in distributed systems, working with data, and information security. &#xA; I was born in the town of Gabrovo , located in north-central Bulgaria, where I lived throughout my early childhood before my family moved to the United States. I received a B.S. and M.S. in Computer Science from San José State University . &#xA; Ever since getting my…

Hello World! From Hugo

First post from Hugo &ndash;the fast and modern static website engine. &#xA; I quickly become a fan of statically generated sites after seeing Jekyll a few years ago. After getting tired of WordPress, it was on my radar to update my site to a statically generated one, and learn something new at the same time. I was not a fan of the installation dependencies I had to manage with Jekyll, but…