GnuPG (gpg) is a great utility that is usually available both on Linux and Mac. It can be used for generating encryption and signing keys and using them to encrypt and decrypt your sensitive data. Here’s a quick cheat sheet for basic usage scenarios.
Generate a new gpg key:
gpg --full-generate-key
The utility will ask some questions, for most of them the default values are fine:
In this article, I’ll explain in detail the solution for the “Strange Printer” coding problem. It’s featured on multiple coding exercise websites, you may have encountered it at LeetCode by the number of 664.
Suppose you have a printer whose purpose is to generate a string of lowercase English characters. The limitation of the printer is that at each step, it can only print a string containing the same character, e.g. aaa
, b
, or cccc
.
The trick is that the printer doesn’t print out the steps in sequence, but rather can start printing at any place, possibly overwriting the results…
Sometimes you may want to move or advance a tag as part of your GitHub Actions pipeline.
First, make sure you know what you’re doing — moving tags in a git repository is generally a bad idea, since it may mess with other people’s repositories and incur non-reproducible build and deployment issues. However, there are some workflows and cases that justify moving tags.
For instance, you may have a latest
, or a nightly
tag in your repository, which you use to execute a nightly build.
If you want to manually move a tag using your local development environment, this would…
You may wonder how long a particular line of Java code executes. If this line is part of your code, it’s easy to find out by putting System.currentTimeMillis()
calls before and after the line and finding the difference. But what if this line of code is part of a library or a framework? You could use a profiler, but a quicker and easier way might be to use breakpoints in IDEA.
Put a breakpoint on the line you want to profile (e.g. …
Encrypting an existing user home folder in Ubuntu should be a single-command task, but it got tricky for me with some complications. I’ll try to explain what issues I had and how I fixed them. I used the latest LTS 20.04.1 version of Ubuntu.
First off, you’ll probably want to encrypt the whole drive instead, since some sensitive data may reside not only in your home folder but also outside of it. …
The Kotlin programming language has two distinct features that may be used for similar purposes. Those are inline classes and type aliases. You could use them to improve code clarity and type safety, but what’s the difference between them? This is the topic of this article.
Type aliases first appeared in Kotlin version 1.1. They effectively allow you to declare a new name for any existing type. This declaration doesn’t create a new type, and you can pass the aliased type wherever the alias is expected (something that’s called assignment compatibility):
typealias Str = Stringval s: Str = "Hello"
…
If your work as a software developer is not directly related to open source (i.e. you don’t spend most of your working time supporting or contributing to an open-source project), your GitHub profile may be blank, except for some study projects and test assignments.
This is not necessarily bad, and it doesn’t make you a bad developer. But probably you’d like to create outside visibility of your work and boast some green tiles on your GitHub contributions timeline. So here’s a couple of tips to get you started.
Woah, this is certainly not about sneakily hacking on open source projects…
In this guide, I’ll explain what Docker labels are, what can you use them for, and how to set them on image and container level.
Labels are key-value pairs you can attach to almost everything in Docker. You define both keys and values for the labels.
Labels are metadata, meaning they don’t affect the functionality or configuration of the image or container, but you can inspect them. You can put them on images, containers, networks, volumes, etc.
There’s lots of different use case for labels, including, but not limited to the following:
Testing transactional routes in Apache Camel can get tricky, especially if the test involves JMS queues or XA (two-phase commit) transactions. Tests may sometimes fail, even if we use NotifyBuilder to wait for the route to complete. In this article, I’ll show how to fix issues with the testing of transactional routes in Camel.
The complete code for this article is available on GitHub.
Suppose we have a route that takes a message from the queue and puts it to the database. That’s a typical use case for XA transactions, provided you’ve set them up the right way, as I’ve…
In Hibernate, there’s a mystical option enableExtendedEnhancement
intended for fine-tuning of the bytecode enhancement. This option is not described well in the documentation. This article explains what it is, how to use it, and what benefits it may bring to you.
To demo the effect of Hibernate’s extended enhancement, we’ll start with a simple entity class Cat
that contains two fields: an automatically generated id and a name:
By the way, the full code for the article is available at GitHub — this is a very simple demo project using Java 14, Hibernate 5.4, and JUnit 5.
Hibernate can…
Technical project lead @ CRX Markets. I mostly write about Java and microservice architecture. Occasional rants on software development in general.