Ask HN: Tools you have made for yourself?

288 points by themantri ↗ HN
I am looking for tools that you might have built to scratch an itch or quell a regular annoyance. My main motivation for asking is to looking a different things people may have built and a secondary motivation is to learn how they went about it. I'm also interested in tools which are small scripts or a bunch of commands piped into one another that have boosted your quality of life.

Thank you.

457 comments

[ 4.6 ms ] story [ 395 ms ] thread
In the category of old unmaintained tools:

  - https://github.com/linkdd/manyssh : Before discovering ansible/puppet/etc...
  - https://github.com/linkdd/i3tools : For when I was using i3wm
  - https://github.com/linkdd/xautostart : Also for when I was using i3wm without a Display Manager
For more recent projects:

  - https://klifter.datapio.co : Easy GitOps
  - https://klander.datapio.co : Kubernetes Compliance as Code
A basic résumé/CV generator out of JSON resume, it also supports inline SCSS: https://github.com/omninonsense/resume-stylist

I'd generally "print to PDF".it before sending it out. I was in the process of automating PDF generation when 1) I got hired and 2) Chrome was changing up the API in the next release so I just kinda... Lost motivation I guess, especially since I didn't need it anymore either.

https://github.com/omninonsense/spotlight-thief

This saves the windows spotlight images (on lock screen) to a folder that I use for randomised background images. I manually filter out the ones I dislike. It runs automatically on Linux (it's wrapped though).

Interesting that they're both in Ruby. I guess Ruby is my go-to scripting language, even though I usually never write Ruby. Maybe it's the language's ergonomics or something.

I built https://sumi.news so I could read RSS, Twitter, and newsletters peacefully. It started as a local app to fetch RSS, and transitioned to a web app to enable reading newsletters. It’s written in Haskell and hosted on Linode.

I also wrote my own classless UI library. I can drop in a single style sheet and write plain HTML, no classes or anything, and get beautiful cross-platform UI that is accessible and functional out-of-the-box. I use this for a lot of my projects. I plan on polishing it, open-sourcing it, and selling it in the future.

I wrote a small utility that helps me to kickstart writing blog posts.

https://github.com/scriptnull/sblog

(Been saving me a few minutes ever since)

That's neat. I love ideas like this that remove small amounts of friction from useful behaviour.
I've made a lot of things for myself. Of the things that come to mind:

1. An Alexa Skill that allows me to ask my bookshelf for the position of a book. I've spoken at PyCon India 2019 about this. (https://stonecharioteer.com/2019/10/12/pycon.html) 2. A Discord bot (https://stonecharioteer.com/sarathi.html) to update my blog's TIL page. (https://stonecharioteer.com/til.html) 3. A shell script to connect to the right Wi-Fi at my office (useless now) 4. A script to set/unset proxies on my work laptop so I could download packages from external registries. 5. A script that would collect weather information to correlate with my migraines. This eventually ended up being a correlation is not causation situation. 6. A NAS using a Raspberry Pi 4 so that all TVs at home can stream from my movie/anime collection.

I am in the process of building more things, as a way to learn Rust, and as a way to scratch the programming itch that I have. Do reach out if you want to discuss any of my projects. I will blog more stuff eventually. I use the same handle on Twitter.

A webapp to help me calibrate hydraulic models of water networks.

The original concept was in excel and VBA.

I ended up pulling out the engine as a separate open source library which I've used on a few other projects.

https://github.com/modelcreate/epanet-js#model-calibrate

i’m not familiar with hydraulic models and only marginally familiar with water and mapping, but this is cool
I got tired of firing up an image editor every time to create a simple open-graph/social image for my blog posts and built https://thumbnail.ai

It's been a great time saver and a handful of people use it daily.

I wrote this (at work) to update versions in our projects from one place, and even partial versions. Saves me some headache and mental space every time. I know there are competitors but none I found was just simple, everything else was bloated with Git-integration or regex search instead.

https://gitlab.com/MaxIV/app-maxiv-semver

Decoder Ring: https://james.darpinian.com/decoder/ to look up error codes. Started with OpenGL, then added Windows error codes, Linux, HTTP, and Vulkan.

I was a bit frustrated always pasting error codes into Google, as it doesn't always come up with the best result. You often have to extract just the code from a larger message, and potentially convert to/from hex or signed/unsigned, e.g. Windows error codes like "-2005270521". My tool handles all that for you. Just paste an error message containing codes in whatever format and it'll find them, and it's incredibly fast.

I also made https://aqi.today during the California wildfires. I was frustrated by other air quality sites that load way too slowly and don't emphasize the one number that matters. Airnow.gov has improved since I made this, but but I still prefer mine for the simplicity, speed, and much better data sourced from Purpleair. Airnow.gov sensors are typically 5+ miles apart, and data is delayed by an hour or more, while air quality can vary on a block-to-block and minute-to-minute basis. Purpleair has far better sensor coverage and data is delayed only 10-20 minutes.

Could you please explain more about how the Decoder ring works? And how it's data is maintained?

Thanks for sharing!

It's all client side. The entire database of error messages is downloaded up front and searched in JavaScript. The database is just a JSON file that I put together with some scripts to parse a few header files and other documentation. The whole thing is fewer bytes than a typical news article page these days, so why not download it all up front? I wish more sites worked this way.
When wunderlist was shutdown i had to find an alternative. I only used basic features of wunderlist and wanted something similar. But all options was just too much. So I built it myself. I've used it every day since. For shoppinglists and work tasks and any household tasks. It's perfect for what I want. It even looks a bit like wunderlist. Https://github.com/lallassu/doit

Then I also wanted to read my news from the shell in a simple manner. And I knew what I wanted but no existing rss client had the feeling I wanted. So I built Gorss. I use that every day as well. Https://github.com/lallassu/gorss

Not small, but myopic in a way.

I've been tinkering on and off with my own programming language for the last couple of years: http://www.adama-lang.org/

The key motivation is dealing with the complexities of managing all the state between people as they play a game with a strong boundary for privacy.

I am debating what my next steps are with what I've learned. Do I focus on growing things around it, or do I abandon yet another project and do something that might actually achieve success.

Do you have a community of people to bounce ideas off of? BoardGameGeek perhaps? Other niche language developers? Sounds cool. Feel free to ping me if I can help. I've made a few board games and computer games. (Contact info in my profile)
As a Wikimedian who used to spend sleepless nights editing on the Malagasy language Wikipedia and Wiktionary, I have been developing botjagwar (https://github.com/radomd92/botjagwar) on and off for the last 10 years. More details at https://github.com/radomd92/botjagwar/wiki/Backstory

It's mostly bot scripts written in Python. Data is stored in a self-hosted PostgreSQL. In addition to a backend I'd written myself, I also use PostgREST. A rather rustic front-end was written in 2020 (https://github.com/radomd92/botjagwar-frontend) as a COVID lockdown side-project. Other scripts also use Redis as a page cache to speed up operations involving a large number of page reads.

I wrote my own terminal emulator stack. I was annoyed that the colors were often unreadable on others and that shift+page up wouldn't work to scroll from inside gnu screen that I used to use. So I rewrote the whole thing from scratch, my own terminal emulator and my own replacement for gnu screen. The terminal has both a custom palette and refuses to display certain combinations (if you ask it to do white on white, for example, it will do grey on white instead) and forwards various things like the shift+page up keys all the way down (and on the other side, commands like clipboard paste request all the way too), so when I ssh to the desktop and attach the session, all my habits still work.

I know it sounds like overkill but it just really bugged me to strain my eyes and have to hit different weird keys depending on where I was.

I write Raycast[0] scripts to automate small, common tasks I do daily, for example:

- Connect my AirPods to my Mac - Count the characters in some text - Create a new text expansion shortcut with Espanso[1] - Start/stop a Focus[2] session - etc.

Because they're in Raycast, they're super accessible to me — I simply hit CMD + Space, type the first word of what I need and hit Enter. Loving it!

[0]: https://raycast.com [1]: https://espanso.org/ [2]: https://heyfocus.com/

I wrote a GitHub Gist management experience for VS Code, since I wanted an extremely easy way to capture notes, docs and code snippets throughout the day: http://aka.ms/gistpad.

It completely transformed my behavior of writing and sharing, and I ended up expanding the experience to support GitHub repos as well, so that I could access and edit any of my “knowledge bases”, regardless how they’re stored in GitHub.

The Perry Rhodan series was translated into English in the 1970s, but the series is very long and the translation stopped very soon. I can find Perry Rhodan ebooks and upload to Google Translate. However, converting the ebooks to text does not put them in a format useful for translating--the sentences are broken by newlines and there are specific problems like page numbers and the letter M embedded at a page break.

Thus, wrote a tool to convert such converted ebooks to have full sentences and to do a couple of other odd things so Google Translate and the particular ebook reader I am using handle them better.

A lot of the tools now in fuchsias fx started life as personal standalone scripts later exported to the team. Nowadays contrib contains tons more, some of which also started similarly. These all now have a long history from many contributors. You may be able to glean the historical process stuff from the git history.

https://cs.opensource.google/fuchsia/fuchsia/+/main:tools/de...

I wrote a small Python script that will SSH into my remarkable paper tablet, copy all of the raw files to my desktop, and then convert the binaries to pdf. I use this tool on a daily basis to offline backup my handwritten notes.

https://github.com/awwong1/remarkable-cli

Probably not the kind of tool you are asking about, but I made a pair of woodworking planes that cut a quarter inch wide, quarter inch deep groove a quarter of an inch from the edge of a board. This operation is commonly needed for drawer bottoms and raised paneling. Two symmetric planes are needed so that you can always work with the rising grain of the wood.

You can buy adjustable grooving planes and old molding planes that will do this, but it was fun (and much cheaper) to make my own pair.

I made an extra long wrench socket for field repairs of a heavy duty pivoting contraption by cutting a normal 1-1/4” socket in half and welding the wrench and handle sections to either end of a 6” length of steel pipe. The pipe had a smaller outside diameter than the socket halves, but big enough for the threaded rod.

Imagine the hijinks the first time I put that through an airport scanner. Good thing it was 2000 and not 2002.

The amount of woodworking jigs and tools people develop on their own is fascinating. Some of these woodworkers on youtube spend more time creating jigs than actually building things. Matthias Wandel for example is a wizard. It's really similar to programming tools. Often, tinkering is more fun than finishing large projects.
The guy from "Aging Wheels" at YouTube, who by the way is a former software engineer, has a second woodworking channel channel called "Under Dunn". The last video was about a DIY Centrifugal Dust Separator [1]. It was a pretty cool video.

[1] https://www.youtube.com/watch?v=n2OStvRteRE.