libp2p performance benchmarking
I invested some time in studying QUIC and libp2p In this article, I will show you how to benchmark the network transfer using perf module for 2 scanerios:
- high latency, no packet loss
- low latency but high packet loss
Let’s print help first:
1 Running `rust-libp2p/target/debug/perf -h` 2Usage: perf [OPTIONS] 3 4Options: 5 --server-address <SERVER_ADDRESS> 6 --transport <TRANSPORT> 7 --upload-bytes <UPLOAD_BYTES> 8 --download-bytes <DOWNLOAD_BYTES> 9 --run-server Run in server mode 10 -h, --help Print help
Learning Rust by building Tetris: my favorite childhood game
After completing the Rust book and working through rustlings, I found myself standing at the crossroads, wondering where to go next. It was then that I had an idea - a project that would allow me to apply my newfound knowledge and create something meaningful. My favorite childhood game, Tetris, became the inspiration for my next coding adventure.
Since I want it to be playable on Windows, I chose the TUI library crossterm.
Turning Helix into an IDE with the help of WezTerm and CLI tools
This post recaps previous series of posts about Helix.
- Running code
- Jumping to build errors
- Quickly select a command and open it in a new pane
- Testing a single function
- Git integration
- File tree
- Creating snippets
- How to debug?
- Interactive global search
- Opening file in GitHub
1. Running code
In my previous post, I shared a method for running code from within Helix by using this PR.
I later discovered another useful trick here. We can use wezterm cli get-text command to extract the filename and line number from the status line:
Debug Rust in Helix using lldb-vscode: display the contents of local string variables
In a previous post titled debugging Rust in Helix,
I introduced a workaround using codelldb to address the visualization issue related to string variables within
However, the usage of
codelldb presents some challenges:
- We have to start the server first using
codelldb --port 13000
- It is noticeably slow
- The Helix theme breaks when listing variables
In my quest for an improved debugging experience, I found rust-lldb, which impressively manages to display the contents of string variables:
How to debug Rust in Helix?
Helix supports debugging Rust by default using lldb-vscode. However, there is an issue where string variables are displayed as memory addresses instead of their actual values:
Noticing that CodeLLDB natively supports visualization of most common Rust data types, I would like to give it a try.
Here’s the step-by-step process:
Download the CodeLLDB extension:
1$ cd ~/Downloads/ 2$ wget https://github.com/vadimcn/codelldb/releases/download/v1.9.2/codelldb-aarch64-darwin.vsix
Setup the extension:
1$ mkdir -p ~/.local 2$ set fish_user_paths /Users/quantong/.local/extension/adapter $fish_user_paths 3$ codelldb
If you encountered this error:
nnn: wcswidth returns different values for same Unicode code point between macOS and Linux
When attempting to integrate
nnn with Helix, I encountered an interesting issue that resulted in duplicate first characters in the filename:
What’s interesting is that this issue doesn’t occur on Linux:
I’ve spent several days troubleshooting this problem but haven’t been able to identify the root cause. The only solution I could come up with is a workaround, and I must admit, I’m still not entirely satisfied with it.
WezTerm: quickly select a command and open it in a new pane
In my previous post, jump to build errors with WezTerm, I demostrated how to navigate to build error using hyperlinks. One limitation of that approach is that it requires a mouse click.
In this post, I explore how to achieve the same functionality using a shortcut key in WezTerm, thanks to QuickSelectArgs feature.
QuickSelectArgs allows us to bind a shortcut key to select specific patterns and perform actions on the selected text.
Let’s say we have the following warning:
Open same file in already running instance of Helix
Recently, I came across this issue:
I find that I have occasionally (frequently!) made the mistake of two instances of helix in different terminals editing the same file. This causes me a problem, because I will then have changes in one of the instances overwrite changes that are made in another. The worst case is when I accidentally switch back to an instance that has an older version of the file open.
File tree workaround for Helix
Many people have expressed that the absence of a file tree is what prevents them from using Helix.
If, for some reasons, you cannot use the PR #5768, here’s a workaround to create a file tree using WezTerm and nnn
The idea here is to implement a custom opener in
When navigating to a file, it will be opened using
hx in the right pane.
When opening another file, it checks if there is a running instance of
hx in the right pane and sends the
:open $1\r command to that pane.
How to disable ligatures in WezTerm?
As you may know, I switched to WezTerm and Helix a few months ago.
What surprised me is when I type
!= in Helix, it is rendered as
This behaviour also occurs with other character combinations, for example:
<=becomes rendered as
->becomes rendered as
===becomes rendered as
My first guess was that Helix had something to do with the font rendering but I encountered the same issue when typing directly into terminal.