Jujutsu : git compatible but better DVCS

I learnt about Jujutsu from the “Rust in Production” podcast episode about Git Butler

One of the attractive quality about it is that it works with existing git repos 1

First superpower : Start using it with existing git repo locally cloned using jj git init --git-repo=. 2

This creates a .jj folder in the existing repo. .jj and .git co-exist peacefully

But I didn’t know that.

So for the first project to try Jujutsu, I jj git cloned my existing repo in a new folder, so that I have “old” git repo as well as jujutsu repo.

Continue Reading »

Rust: Doubly Linked List

No, this is not a post about how to implement doubly linked list in rust.

Or ir could be a very short post, since doubly linked list in built-in the std::collection as LinkedList

Following functions are available:

  • new : Creates new/empty linked list
  • push_back : Adds an element to the list
  • push_front : Since this is doubly linked list, element can be added at the beginning as well. Nice!
  • pop_back and pop_front : Remove an element from the list
  • clear : empty the entire list
  • append : Append one list to another to make bigger list. One that got appended becomes empty though.
  • contains : Searches through the list for the element 1
  • There are iter, iter_mut and len as well.

[Documentation](https://doc.rust-lang.org/std/collections/ struct.LinkedList.html) is easy to understand

Continue Reading »

Waydroid

I wanted to use Openvibe - an app that allows having a single timeline across multiple social media networks like mastodon and bluesky. It also supports cross posting (and more)

But currently it only has mobile apps (for both iOS and Android)

While the Desktop app is “in the works” - no specifics are provided.

I do not use mobile apps if at all possible. (Except for podcast and messeging apps to keep in touch with Family - on the go. If I’m at my desk, I use the Desktop version)

Continue Reading »

No One is (really) Evil

NSQ episode about evil led me to thinking about this.

Takeaways from the episode

  • Evil is attributed only to humans.
    • If an animal attacks and kills human(s) we do not label the animal as Evil.
  • Intentionality matters.
    • Accidental killing/death does not mean Evil
  • People do bad things because their brain is not “well”
    • Amigdala is the part of the brain that is responsible for fear and morality.
    • Should bad people be locked away longer (cause they may be threat to the society)
  • Phil zimbardo prison experiment
  • Bad barrel (Vs Bad Apple)
  • People become evil due to surrounding 1
  • Stanley Milgram Experiment
    • People are OK doing bad things if
      • They are in position of power and
      • Are told by their superiors to “punish” others
      • 2 out of 3 volunteers shocked the (the actors playing) students upon giving wrong answers, because they were “instructed” to do so 2

My thoughts

  • Only movies/TV has pure evil person
    • In good movie/TV, they have some explanation about why the person become “evil”
  • When people do bad things to you, do not hate them
  • Consider some of the points above.
  • What made them behave the way they did
  • (Most of the times) it is not personal [^3]

  1. One can choose to become Oskar Schindler in Nazy Germany. Do the right thing even if the surroundings are wrong. (But takes courage) ↩︎

Continue Reading »

How to run multiple postgres docker instances on local machine

When working on multiple projects, I run separate postgres instance for each of them.

Since these are docker instances, this is not a problem as long as they are not running at the same time

If I’m actively working working on multiple projects parallelly, then there are two problems :

  1. Resources : My laptop becomes slow. There is no solution for this 1
  2. Assuming you have LOTs of memory, second problem still remains. Both instances try to bind to local port 5432 the default port. Which does not work. So you need to bind other postgres instances to different local ports like 5433, 5434 and so on. This is controlled via -p in the docker command.

The format is :

Continue Reading »

How to Turn Off Inlay Hints in VS Code

I initially tried to turn off the type hints via rust-analyzer extension setting, but that did not work ๐Ÿ˜ž

Turns out it is very complicated (at least for me) documentation did not help ๐Ÿ˜ž

Here is what worked for me. Thanks to SO 1

  • Open Command Palette Cmd+Shift+P
  • Select Preferences: Open User Settings (JSON) from the drop down
  • Add the following to existing settings
    • Or create new one, if empty. You may need to enclose it within { } though.
	"editor.inlayHints.enabled": "offUnlessPressed"

This will turn off the type hint inlays.

Continue Reading »

Kinto : Mac Keyboard layout on Linux

After using Apple laptop for nearly 10 years, I have gotten used to Apple’s shortcuts where most places use Cmd instead of Ctrl

After switching to Linux, initially I fumbled.

Then I had to be alert, which I did most of the times, but when in the zone, I would still do Cmd+c to copy, and when pasted would be disappaointed that it did not work ๐Ÿ˜„

Then I came across kinto

Continue Reading »

Better History Search

No, I’m not talking about Atuin. 1

I improved my search experience with just one tool - fzf

As you might know, fzf is a general purpose fuzzy finder. 2

But adding just source <(fzf --zsh) at the end of ~/.zshrc (and/or running it in your existing session) improves your Ctrl+r experience.

See the demo yourself.


  1. I must confess that I’m tempted multiple times. But I think their USP is history sync, which is not my use case right now. For now, I’m happy with my current solution. ↩︎

Continue Reading »

How to define task dependencies in justfile

It has been more than 20+ years since I used Makefiles seriously. I did use them later, but they were very simple.

Then I found and moved just task runner, which is supposed to be replacement for make

My justfiles were also simple.

and today, I needed to define a task that we dependent on another.

Turns out, it is same as Makefile

task1:
  @echo "Task1"

task2: task1
  @echo "Task2"

In the above example, task2 depends on task1, and thus when we say just task2, task1 will get executed, as it is a dependency for task1

Installing Espanso on openSUSE

After the basic setup was done (I made a list of tools to be installed on line before I installed Linux itself), I wanted Espanso

While Espanso is well supported on X11, for wayland, it needs to be compiled from the source

I ran into this issue but solution was found in the same issue.

While install went through, I ran into issues related to capability grant.

Following worked:

sudo zypper install libcap-progs
sudo setcap "cap_dac_override+p" $(which espanso)
espanso start --unmanaged

I also needed to add the following to config/default.yml

Continue Reading »