Rust: Clone vs Copy

One of the strength of Rust is memory management. This also leads to compiler errors related to move or borrow When we assign an existing variable to new variable, two things can happen.

Either the data is copied - in that case we can use both old and the new variable without worry. 1

Or data is moved - now we can only use the new variable, as the old variable is “out of scope”. But there is a way to access both the new and old variables. But in that case we have to explicit.

Continue Reading »

How to create IDE like experience in terminal using Zellij

(undocumented?) Zellij Keybindings

Undocumented, because these don’t show up in the default configuration, which shows (I assume) most useful key bindings. I had to look for these, and found them in Github discussions/issues.

  • Ctrl p d
    • Ctrl p is for pane, but d after that (which I assume stands for down) is not documented.
    • This creates a new terminal in horizontal split fashion 1
  • Ctrl n - to reduce the size of the terminal.
    • By default, it is split 50-50
    • Usually, you’ll want more screen real estate for the editor (Helix in my case, but works for (n)vi(m) or emacs-in-terminal as wlel)

There is also a possibility of running a floating pane. This may be used for running a server process, which mostly one doesn’t need to look at constantly.

Continue Reading »

error: Unknown binary 'rust-analyzer'

As I am setting up my new machine, I came across this error when emacs tried to use rust-analyzer

error: Unknown binary 'rust-analyzer' in official toolchain 'stable-x86_64-apple-darwin'.

As mentioned in this SO question, which rust-analyzer did not show any error.1

Luckily, the same SO question also had the solution

I needed to explicitly install it via rustup component add rust-analyzer


  1. Luckily, the comment in the accepted answer also explained why which works. It is a wrapper, which is created/installed by default, but platform specific binary needs to be installed explicitly. See this comment ↩︎

Continue Reading »

Format raw strings in rust

When refactoring code to make API call to Gemini, I learnt how to format raw strings in rust.

fn main() {
    let var1 = "test1";
    let formatted = format!(r#"var1 is: {}"#, var1);
    println!("{}", formatted);
}

This gives output as : var1 is: test1

If you want { in the output, then it needs to be escaped with additional { like:

fn main() {
    let var1 = "test1";
    let formatted = format!(r#"{{contents: {}}}"#, var1);
    println!("{}", formatted);
}

This gives output as : {contents: test1}

How to use .env files with your rust project

It is very important that secrets are stored in environment variables during the runtime.

During the development, it makes sense to use .env file. In my last project, there were probably 40+ variables in the .env. Although that project was in RoR the idea of .env itself is not new.

But for me, using .env with rust is new.

For my current (self) assignment, I needed to store an API Key. Hence, the use of .env file.

Continue Reading »

Why I switched to Zellij

I had tried switching to tmux for local shell sessions in past, but never truly understood why I might need it.

I extensively used tmux for remote sessions. But why might I need it locally ?

Then slowly I stopped using tmux and switched to wezterm which provided multiple tabs.

Fast-forward several years later.

Recently I came across Zellij. I decided to give it a go.

When I had tried tmux it took some time to get used to the keybinding.

Continue Reading »

How I generated 2000 parallel requests using nu-shell

At work, I need to load test new framework I had deployed.

Usually, I work with QA team. They use JMeter (with Azure Load test) for such task.

But today, the QA person was busy with other tasks, and I didn’t want to get blocked.

Since I am learning rust, (nu-shell is built in rust) I remembered that it may be possible to run parallel requests in nu-shell.

and it is!

Continue Reading »

Clippy

Clippy is a linter for Rust programming language.

If you are annoyed by the compiler (shouting at telling you how your code is wrong), wait till you install and use clippy ๐Ÿ˜„

Jokes apart, why I want to use clippy is it tells us about idiomatic rust and can autofix issues (if we tell it to do so)

Couple of fun facts I discovered :

  • First search result for clippy is not what I was looking for ๐Ÿ˜„ till I searched for rust clippy
  • clippy can not be installed via cargo install (As I tried initially)
    • (As with rest of the rust ecosystem) there was a helpful error message with solution ๐Ÿ˜‡
 error: Clippy is no longer available via crates.io

 help: please run `rustup component add clippy-preview` instead

Nu Shell

Earlier I wrote about various utilities written in rust. Nu shell is one of the most important of them (It is an entire shell after all, not just single utility)

Installing

Turns out I had installed nu-shell earlier, but via macports

and I had forgotten about macports (and nu shell)

Mysterious upgrade failure (Or so I thought)

When I installed nu-shell via brew I got the latest version, but nu kept invoking older version.

Continue Reading »

โ†’ Oxidise Your Life โˆž

This youtube video mentions the following tools:

  • exa
  • bat
  • zellij
  • mprocs
  • ripgrep
  • irust
  • bacon
  • cargo-info
  • ncspot
  • porsmo
  • speedtest-rs
  • rtx-cli

Of these I installed zellij, which is replacement for tmux (or screen)

I also installed mprocs, irust

I already have ripgrep

I had tried exa and bat in past, they are good but novelty item.

Installing bacon failed during the compile step :(

I’ve also installed nu-shell

I’ll write about nu-shell separately, after giving it enough time