Tools I Developed in 2024

During 2024, I developed several tools to automate tasks, solve specific problems, or enhance productivity. Here is a list of the tools I created, along with a brief description of each.

Most of these tools are basically micro script that does one thing and does it well. They are usually useful and tailored to my needs. I usually make them to solve a problem I have or to make my workflow easier. I also like to make them as simple as possible and with the least dependencies. But they might be useful for others too.

Physics Projects

  • lvec
    This was born as a python class to handle loerntz vectors in more intuitive way. I had the problem of mixing some code of uproot/vector/Awkward and PyROOT/numpy. This usually meant have to deal with some problems with metadata and also I didnt’ like non-standard syntax. So this was my try of unifying my analysis code. Then Ia decided to make it a package and make it more general.

  • BFit
    Fitting probability distribution functions for B-physics analyses often requires repetitive custom setups. I wrote this python module/package to provide a flexible library for fitting histogrammed data with a variety of signal and background models. With built-in visualization, parameter control, and support for multiple models like Gaussian, Breit-Wigner, and Crystal Ball. This obviusly was work for my physics analysis. I wanted to have a simple way to fit my data and get the parameters and errors.

  • BBH_SIM
    A simulator for binary black hole dynamics, visualizing orbits and gravitational waves. This was my course project to the amazing prineceton course on scintific software development. This was more about best practices in software development than in actual physics. Although I learned a lot about the physics of binary black holes. It allows you to simulate the dynamics of binary black holes and visualize their orbits and gravitational waves. It was a great learning experience and a fun project to work on.


Development Tools

  • LoggerNG
    In many of my C++ projects, I found myself repeatedly setting up custom logging systems to fit each project’s needs. So I created this C++ library to standardize this process. It provides a memory-safe, feature-rich logging utility with support for multiple log levels, timestamping and asynchronous logging. This tool saves time while offering flexibility and ease of integration across various projects.

  • Neovim Configuration Switcher
    Switching between Neovim configurations for different workflows can be tedious, especially when experimenting with setups. This was created to address this by providing an intuitive way to toggle between configurations like LazyVim, Kickstart, NvChad, and AstroNvim. With aliases and a fuzzy finder interface, this tool makes it effortless to tailor my Neovim environment for any coding need.

  • gpustat
    I work with GPU programming most of the time these days. Sometime I want to run throughput tests on some GPUs. I want to have a simple way of knowing what is currently happening but nvidia-smi is too verbose. So I made this tool to show me the most important information in a simple way.


Shell Utilities

  • nmem
    nmem is a poor’s man script to display memory usage information in a human-readable table format, similar to the free command. It can show data in different units like bytes, kilobytes, megabytes, and gigabytes, and can be continuously updated in watch mode. It is basically free with the most basic options and --watch option to continuously update the information

  • tree
    I was suprised that tree command is not installed by default in some systems. So I made my own implementation. It is not as feature rich as the original tree command but it does the job.

  • txm
    Managing tmux sessions, windows, and panes can sometimes feel clunky, especially when juggling multiple tasks. I created txm to improve this experience. With an intuitive CLI, it automates common tasks like session management, pane splitting, resizing, and even executing scripts in panes. Starting as a Python project and evolving into this Go-based tool. It is also my first (and only) Go project until now.


Git Enhancements Tools

For my workflow, these are utilities that help me with Git operations and repository management.

  • git_feature
    I often found myself working directly on the main or master branch, even when the work clearly belonged on a feature branch. To encourage better Git habits, I created this script to automate the process. It handles stashing changes, creating and switching to a new branch, committing changes, and optionally pushing the branch or returning to the main or master branch—all in a single command.

  • cp_push
    I often found myself manually creating GitHub repositories and setting up local repositories for new projects—a repetitive. This script was my solution to streamline the process. It automates creating a new GitHub repository (public or private), initializing a local Git repository, committing the code, and pushing it to GitHub in a single command. Perfect for quickly getting new projects up and running. Also I don’t want to remember the syntax of gh command.

  • gh-emergency
    In moments of urgency, managing Git commits and pushes can be error-prone and stressful. It was designed to simplify this process. It automates creating an emergency branch, staging all changes, committing with a default or custom message, and pushing to all remotes. This GitHub CLI extension ensures critical changes are safely backed up with minimal effort. I did it after two times of having to leave my laptop during drills in two different places (UC and UW) and thought of actual emergency situations that I might need to do this.

  • gh-cp
    Manually downloading specific files from a GitHub repository can be tedious, especially when dealing with multiple files or branches. I created this script to automate this process by providing an intuitive way to copy files directly to my local machine. With support for multiple files, branches, and even commits.


CLI Enhancements

These tools are utilities that enhance the command-line interface experience.

  • ali
    I often found myself losing track of aliases spread across multiple shell configuration files, making it hard to remember their purpose or origin. This simple script is my trial to make up for bad memory. It lists all active aliases, their commands, and where they were defined, making alias management more intuitive.

  • Redex
    This is basically me trying to remember the syntax of when do we pass the command output stdout and stdrr or both because I always forget and always do ./command.sh 2>&1 | tee log.txt. So I made this tool to do this for me.

  • history-wrapper
    One of my most used commnds across different machines I’m using (locally or remotely) is history | grep <something>. I use it and then search for something in this list. Some times I open the whole history file and search in them. I don’t remember the syntax of history command so I just wanted something easy like history search <something> or history run 125 and make more standard experience for my memory.

  • Shell History Ignore Plugin
    Shell history often becomes cluttered with repetitive or trivial commands, making it harder to find meaningful entries. This plugin provides an easy way to exclude specific commands from my shell’s history in both Bash and Zsh. With a customizable ignore list and simple commands to manage it, this tool helps keep my command history clean and relevant.

  • get
    I often found grep’s syntax unintuitive and difficult to remember for common tasks, especially when dealing with less frequently used options.So I created this script to make text search accessible to me. It provides a human-readable interface, flexible argument placement, and helpful error messages, making it easier to use while still leveraging the power of grep.


Networking Tools

  • ip-monitor
    I’m into selfhosting and recently I moved most of my stuff to a small cluster of few mini pcs. I host them in my home and I have T-mobile wireless internet. So I have both NAT and dynamic IP. I wanted to know when my IP changes so I can update my DNS records. I wrote this simple script to monitor my IP and send me an email when it changes. It allows me to keep history of ip changes too.

  • dd2cf.sh
    Maintaining accurate DNS records for systems with dynamic IPs can be challenging. This better script automates this process by updating Cloudflare ‘A’ records with my current public IP address. With support for multiple records, flexible configuration, and easy cron integration, this script ensures my DNS entries remain up-to-date without manual intervention. It is extension of the previous script but this time it updates the DNS records in Cloudflare itself.

  • AuthLog Analyzer
    Manually analyzing authentication logs can be tedious and error-prone. This tool is exactly for that, It help see th insights into both successful and failed login attempts. With features like IP geolocation, username analysis, and detailed breakdowns presented in clear tables. I needed this with having several servers open to the internet and I wanted to know what is happening.

  • Firewall
    Managing firewalls with ufw can sometimes feel cumbersome, especially when working with complex rule configurations or repetitive commands. This script was created to streamline this process by providing an intuitive CLI for ufw. With easy-to-remember commands for enabling, disabling, listing, and managing rules, as well as options for logging, backups, and resets, it simplifies firewall configuration while enhancing usability and efficiency. Just so I remember to update things acorss my different mini pcs consistently.

MacOS Utilities

These tools are utilities that enhance my macOS experience.

  • free-mac
    Unlike Linux, macOS lacks a native free command for monitoring memory usage, which I found inconvenient for quick memory diagnostics. I also found myself always writing free in local terminal trying to debug why things is slow because of my memory. This program bridges this gap, providing a familiar and user-friendly CLI tool to display memory and swap statistics. It offers feature parity with Linux’s free command. So nice thing that now I don’t have to worry about where I’m running my code. Also it was my first time dealing with darwin -MacOS Kernel- low level APIs.

  • macOS CapsLock Delay Configuration Tool
    The CapsLock key delay can be an annoyance for me who need a faster response or when I frequently activate it unintentionally. The script provides an intuitive way to customize or disable the CapsLock delay, enhancing keyboard productivity. With easy-to-follow steps and a simple GUI, it makes adjusting CapsLock behavior straightforward and accessible.

  • CleanCompress
    Compressing files on macOS often results in unwanted files like __MACOSX and .DS_Store cluttering the archive. It addresses this by combining easy file compression with automatic cleanup of these unnecessary files. Integrated directly into the Finder toolbar, it provides a simple and efficient way to create clean ZIP archives without hassle.

  • QuickFileCreate
    Creating new files in macOS Finder can be cumbersome, especially when needing specific extensions or editors.This tool make this easy by letting me quickly create files in the current Finder window, set their preferred editor, and optionally open files immediately. With intuitive options and persistent preferences.

  • sign-app
    Manually signing macOS applications can be annoying. So I created a this script that will also excludes system apps to maintain integrity. It offers powerful options like forced re-signing, custom entitlements, and app backup. I don’t actually use it anymore but I remember that it was useful when I was trying to sign some apps for my own use.