Ask HN: Tools you have built for yourself?

27 points by themantri ↗ HN
What tools have you built to scratch an itch or quell a regular annoyance? They can be anything from a full blown application to a few commands stringed together.

Thank you.

45 comments

[ 3.6 ms ] story [ 106 ms ] thread
I built a TLS certificate tool targeted towards my company usecase for internal certificates (developers, OpenVPN, internal certificates): https://github.com/linsomniac/rgca

It's big features are that the cert generation can entirely be controlled from the command line, config, or environment, or any combination of the above, and it has tooling for the situation where I have an existing cert but want to add or remove a name from it. It also has pre/post scripts so I can have it do things like add it to the Ansible repo, vault encrypt it, and commit it. Beats the 10+ year old script that didn't work with Subject Alt Names.

I made a CLI tool that manages my life and beeps at me to stay on-track: https://taylor.town/nowify

A lot of acquaintances have been begging me to turn this into an app, so I may give it a go later this year :)

I manage multiple virtual machines, and whilst not coding, it sometimes feels that way, since you're bending a computer to your will, which is my definition of coding. Nothing more exciting than after a fresh install of Windows, and configuring the hell out of it to your liking (hardening it, de-bloating it, making it more performant, as-well as customizing it and installing choice applications to it).
I built a tool to conduct agile meetings like standup, sprint planning, and retro asynchronously based on my frustrations sitting through lots of poorly-run meetings: https://www.teaminal.com

Also great if your team is distributed - no more 7am/7pm meetings with your team in India!

A creativity app that can help people with their iterative creative process.

https://iterations.sprkwd.com/

Iterations is a new way to help you generate ideas.

Creative methodologies usually combine divergent thinking (applying a stimulus to generate potential outcomes) and convergent thinking (bringing facts and data together and applying logic).

Iterations help divergent thinking by giving suggestions on how to process the output. They work as a set of guitar effect pedals to your process. There is an input, a set of ambiguous instructions that can be applied to this input, and an undetermined output created by these effects.

Yes, like Oblique Strategies.

I built an HTTP stub application in my spare time. At first, I only built it for myself but at some point open sourced it. I still have a lot of fun building it. You can find it here: https://httplaceholder.org/
After being annoyed by most online json formatters out there, I decided to build a simple keyboard-driven one. One of the main things that I was looking for was to have it easily accessible, without the need to open new browser tabs or programs that I might need later like vscode so I enabled PWA for it.

When I noticed https://jsonformatter.com domain was not used I sent an email to the owner and he actually agreed to host my app since it was open source.

There are other people using it right now, but I enjoy using it every time I need to make a json more readable.

https://www.carpricetracker.com/

Needs some love now I have a fair amount of data! Wanted to see car depreciation and appreciation rates but couldn't find anything.

Old school server side java web app as I'm 47 :S

http://cortexprog.com/

since all other Cortex debuggers sucked in some way or another (not scriptable, took too long to support new chips, too expensive, pain in the ass to use, etc)

Lots of little web apps:

- https://hw.leftium.com/ is HN the way I want to read it (https://github.com/Leftium/hckrweb)

- Unique format for weather forecast (with historical data): https://github.com/Leftium/ultra-weather#readme

- Pretty veneer over Google sheets/forms for my dance club: https://www.modu-blues.com/

- Quick way to view formatted TaskPaper files: https://plaintext-press.leftium.com/https://www.dropbox.com/...

- User-friendly UI for PwdHash: https://ph.leftium.com/

- POC app my real-estate friend keeps asking for: https://hyunwoo.leftium.com/

- Beat-aware video player: https://phrasier.leftium.com/

- Search for images on multiple sites at once: https://is.leftium.com/

- Custom fork of oTranscribe: https://otranscribe.netlify.app/

- CLI tool to convert YouTube transcripts for oTranscribe fork from above: https://github.com/Leftium/otrgen

- Quick converters/calculators: https://cc.leftium.com/

- Update perpetual calendar event with notifications (for a game I used to play): https://ff.leftium.com/

- Visualize some data (for same game): https://orbs.leftium.com/

I translate children’s books in my spare time. One time, I got a little book called “The Wonky Donkey”, in which all the rhymes rhyme exclusively with the word “donkey”. The task here was to find the appropriate rhyme to my native language’s equivalent of “donkey” (gomar), while at the same time retaining the original meaning. So I built a tool to find all the rhymes to a given word.
My backup script, called with ./backup, and will incrementally backup my servers on the local machine using rsync and brtfs snapshots.

The command "list" to find stuff in the current directory, recursively. Basically "find | grep". Works if you have the Python module or Java package name / path, since "." will match any character, including slashes :-)

    #!/usr/bin/env sh

    if [ "$1" = "-h" ]; then
        exec cat << EOF
    Usage: $(basename "$0")^ [--] search_string

    List paths having search_string in them.
    Note: options are passed to grep.
    EOF
    fi

    if [ "$1" = "--" ]; then
        shift
    fi

    find -type f | grep "$@" | grep -v '.pyc' | fgrep -v /target/
And "fkt", which will open the files returned by list with your preferred editor (f for find, kt for kate, because that's my editor and didn't find any fitting name for this command)

    #!/usr/bin/env sh

    editor=kate

    if [ "$FORCE_EDITOR" ]; then
            editor=$FORCE_EDITOR
    fi

    help () {
        exec cat << EOF
    Usage: $(basename "$0")^ [--] search_string

    Open files with paths having search_string in it.
    \$FORCE_EDITOR can be used to give the name of the editor to use

    current default editor: $editor (edit $0 to change)
    Note: options are passed to grep.
    EOF
    }

    if [ "$1" = "" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
        help
    fi

    if [ "$1" = "--" ]; then
        shift
    fi

    if [ "$1" = "" ]; then
        help
    fi

    list -- "$@" | while read line; do
            printf "open with ${editor}? %s [Y/n/q]: " "$line"
            read confirm < /dev/tty
            ok=""
            while [ "$ok" = "" ]; do
                    if [ "$confirm" = "" ] || [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
                            ok=y
                            "$editor" "$line"
                    elif [ "$confirm" = "n" ]; then
                            ok=y
                    elif [ "$confirm" = "q" ]; then
                            echo "bye"
                            exit
                    else
                            echo "wat? "
                    fi
            done
    done
Turns out, I use "list" dozens of time per day, I forgot a bit about fkt but I might get back to it thanks to this post because I often copy-paste results from list to open them. I had forgotten about adding this confirm prompt :-)

I'm sure there are existing, better, tools for this though.

(I've never tested them on non GNU systems, there might be GNUisms in them)

I work in a large monolith that doesn't always have the package and code separation that I'd like.

I built PackageMap to help me visualise the codebase, and see where the natural seams were -- or should be.

https://packagemap.co

I use the tool to build a directed graph of the type and method usages, and to see which code is grouped into which packages. The code is rendered in a graph diagram that I can see, query, and filter. It really helps me when I'm doing code review or working on a part of the code I'm not too familiar with.

This looks very useful! I'm gonna try to give this a shot some time this week.
I'd be very keen to hear your feedback if you do manage to give it a go.

You can mail me hello@ <productname>.co

I built DailyLauncher[1] to keep track of links I use daily, in a graphical way. Basically a drag and drop GUI for bookmarks with some customization.

I had a grand vision for how it could look with different APIs, and might still pick it up later to work on. For now it scratches my itch.

1) https://www.dailylauncher.com/

I built a LAN pastebin using flask and htmx. I wanted to be able to copy short text, URLS etc. to / from my laptop to / from my smartphone without going to the web. Works great. Didn't even realize that there was such a thing as a pastebin when I started it.
The PowerShell commands:

    Import-Xlsx and Export-SQL
They do what they sound like. The first command will run even on Windows Server Core and Linux, and doesn't need Excel installed. It's only slightly slower than the 64-bit C++ compiled MS Excel executable at parsing multi-gigabyte files, which it can do in constant memory (streaming mode).

The purpose of this is to enable spreadsheet-driven bulk provisioning tasks where there are a lot of distinct-but-similar parameters. I added some niceties such as the ability to trim off leading or trailing spaces and blank lines to prevent objects being created with names such as "xyz ".

The Export-SQL is the twin, which dynamically adds missing columns to a table and similarly allows streaming input. Simply pipe anything from the command-line to get it into a database for indexing and querying. This will work as expected:

    Get-AzVM | Export-SQL -TableName 'azurevms' -Database 'Reports'
For general purpose queries over medium amounts of data, nothing really beats the performance of SQL Server on an 8-core laptop with modern SSD and 64 GB of memory.

I planned to open-source and publish both utilities, but there remain a couple of bugs that I could never be bothered to fix, and I'm not comfortable publishing tools that could potentially lose or corrupt data. That could make someone else's day very bad.