Surprised by Github; their RSA SSH host key has been updated in the last week of March

Trying to push some new code to github, I’ve received the following thing:

PS D:\projects\SimpleBank> git push -u origin main -v
Pushing to github.com:andonescu/tpg-simple-bank.git
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s.
Please contact your system administrator.
Add correct host key in /c/Users/en_ia/.ssh/known_hosts to get rid of this message.
Offending RSA key in /c/Users/en_ia/.ssh/known_hosts:1
RSA host key for github.com has changed and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

It looks like things have changed: https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/

To overpass this locally, the solution is simple (just to remove the old key):

ssh-keygen -R github.com

Java BackPressure Example generated with ChatGPT

Trying to play with chatGPT I requested to generate a java code that uses backpressure when running high intensive tasks.

This is what I’ve received, and I find it a good start point

import java.util.concurrent.*;

public class BackPressureExample {

private static final int MAX_QUEUE_SIZE = 10;
private static final int MAX_CONCURRENT_TASKS = 4;
private static final int NUM_TASKS = 20;

public static void main(String[] args) {
// Create a bounded blocking queue with a capacity of MAX_QUEUE_SIZE
BlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(MAX_QUEUE_SIZE);

// Create a new executor service with a fixed pool of MAX_CONCURRENT_TASKS threads
ExecutorService executor = new ThreadPoolExecutor(MAX_CONCURRENT_TASKS, MAX_CONCURRENT_TASKS,
0L, TimeUnit.MILLISECONDS, queue);

// Submit NUM_TASKS tasks to the executor, with backpressure
for (int i = 0; i < NUM_TASKS; i++) {
try {
// Wait until there is available space in the queue
queue.put(new Task(i));
} catch (InterruptedException e) {
System.err.println("Task submission interrupted: " + e.getMessage());
}
}

// Shutdown the executor and wait for all tasks to complete
executor.shutdown();
try {
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
System.err.println("Tasks interrupted: " + e.getMessage());
}
System.out.println("All tasks completed");
}

private static class Task implements Runnable {
private int id;

public Task(int id) {
this.id = id;
}

public void run() {
System.out.println("Task " + id + " started by thread " + Thread.currentThread().getName());
try {
// Perform some work
Thread.sleep(1000);
} catch (InterruptedException e) {
System.err.println("Task " + id + " interrupted: " + e.getMessage());
}
System.out.println("Task " + id + " completed by thread " + Thread.currentThread().getName());
}
}
}

Rancher Desktop – Is the docker daemon running?

After I’ve uninstall Docker Desktop and installed Rancher Desktop, I had the following error:

ionut@home % docker ps -a
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

The way I’ve resolved this issue was to run the following command. Worked like a charm.

sudo ln -s ~$USER/.rd/docker.sock /var/run/docker.sock

How to Detect Memory Leaks in Java* +: Tips and Tricks

WIP

First thing: LOGS

JVM generates can generate 3 types of logs, to help you optimise the performance.

  1. GC log
  2. Thread Dump
  3. Heap Dump

Check GC algorithm

With Java 11+, G1 algorithm is the default one. For java8+ version, this new algorithm needs to be enabled explicitly.

Useful tools:

Simple way to add system variable to OSx

one simple way to add system variables to OSx is to include them in .zshrc file from your home ~

vim ~/.zshrc 

and in there the new variable and also include it into $PATH

eg: with JAVA_HOME

export JAVA_HOME="/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home"

export PATH="$JAVA_HOME:$PATH"