Ask HN: Have you created programs for only your personal use?

423 points by smarri ↗ HN
Curious to know if anyone has written programs for their own, regular, & personal use. And if so what they are? E.g. A colleague of mine tracks all of his homes energy use through a custom program which disaggregates the energy consumption per device and outputs a report to a tablet.

670 comments

[ 3.0 ms ] story [ 289 ms ] thread
I wrote a radio station-style audio playback system, because I didn't like the tiny few that existed for Mac OS
An SMS sending server on an Android phone, to send me OTP code from my VPS
I work as a water engineer, specializing in building hydraulic models so water utilities can simulate their network.

A big part of that is calibrating them which can be time consuming, you look through hundreds of options. I create a few web based apps to help grind through these tasks but ultimately they were for my own use as a consultant to close projects quickly.

I did pull out the engine as its own open source library for other to use, and that ended up helping me get my current role where I can now maintain it and be paid at the same time.

https://github.com/modelcreate/epanet-js

I wrote my own dns lookup tool in bash because most of the online ones are terrible or can't be customized.

I made my own IP finder site because most of the online ones are terrible (https://justyourip.com/)

Ruurtjan from NsLookup.io here. Would love to hear your feedback, since you probably can name a thing or two to improve :)
I wrote an expense splitting web app that works with multiple currencies and can export transactions in a format compatible with GNU Cash (that I use) and Excel (that my partner uses). Before that we were using an existing solution (Tricount) but its limitations regarding currencies and export meant that we always made mistakes.
(comment deleted)
Yes - I wrote a full DVD authoring workflow to take weekly anime fansubs and produce finished DVDs for friends with either bad internet connections or who preferred to watch in their living rooms.

This was before having an HTPC or media center was a mainstream idea.

All you did was add in the video files sorted by file name in a subdirectory and add a main menu image template, a main menu audio file, and episode select image template (the layouts were static so that the same dvdauthor XML could be used) and it would stitch together a DVD with an intro video, main menu screen with subtitle, play, and episode select options, and generate episode select screens by taking thumbnails from the video files.

Last time I used it was about five years ago before same day/date streaming of anime really took off. I still hack on it from time to time. I don't really have a use for the output, but it's nice to maintain it as the tools it use change/update and as I learn new things.

A simple server to send notifications to my phone, and an app to view/receive. Now setting up alerts anywhere is super easy.
How did you go about rolling your own? I've used discord webhooks for this.
A simple HTML app packaged via Phonegap for mobile. Server uses Google sign-in and rejects any sign-in apart from mine. Has a URL to generate an OTP token that allows connecting a mobile second in next 60 seconds. Once connected saves the device token in a free-mLabs DB (encrypted). Similarly, generate a webhooks URL for each service and wire. Hosted for free on Heroku!
I once wrote a program to scrape the logs from some printers so I could keep track of how much paper and ink was being used. It was just for fun but I showed it to my teammates and we ended up turning it into a leaderboard of who used the least amount of resources. Then they replaced the printers and I didn't feel like redoing it.
I self-host everything, and I wrote an authentication framework, which I call "Fancy Auth". It is configurable by YAML and works like a proxy in front of all my web apps. It's like a glorified Basic Auth, but can connect to LDAP, htpasswd files, can login with QR Code and Magic Link or via SSH.

I plan to release it some day though.

I wrote a web tool that automatically syncs all my brokerage transactions from multiple brokerages (either using their APIs or web scraping). It also grabs daily closing prices of my stocks and relevant foreign exchange rates from public sources, and then presents me with a bunch of graphs that I find relevant. It does my capital gains tax calculations every year.

It took me probably 6 months of hacking on it in my free time.

I’m curious: Why did you choose to do this yourself rather than use something like Personal Capital?
Personal Capital isn't available for Canadians.

In fact, there existed no other alternatives at the time (~2017). Especially none that did things like adjusting the cost basis of each security based on the foreign exchange rate on the day of purchase, and tracking gain/loss correctly in Canadian dollars. I also needed it to sync with my work's group RRSP provider which doesn't offer a standard API.

I don't know if this market has improved in the last 5 years, but I have a system I'm happy with now. :)

Thanks for responding!

I have the same issue with having multiple brokerage accounts. I haven’t signed up for Personal Capital because I read that they try to upsell you on wealth management services by phone periodically, plus I am uncomfortable giving my brokerage login credentials to them (or any other third-party service). So I was wondering if you were in the same boat!

Yeah I was definitely uncomfortable about giving brokerage logic credentials to anyone. Some brokerages can give you a read-only API key you can supply to an app, which is nice for systems like this. Maybe see if yours do that?

Wealthica is a Personal Capital competitor. Maybe take a look at them?

I created a program that allows me to control the max charge level of my laptop battery on linux, and persists the change through reboot. Written in rust, and I use it several times per week.

I designed it for my system, but it should work on any linux system with a battery, kernel version 5.4+, and systemd.

What do you use this for?
Keeping your battery charged at 100% for extended periods can reduce the overall life. Apple recently(?) switched to charging phones and laptops to 80% and delaying the remaining 20% until it was expected to be needed (like for the phone, charging overnight completes before the alarm goes off, the laptop will finish charging at the end of the workday before I move from my desk to my living room). I don't know what Windows does, and Linux is too large a target to make any universal statement about how it might treat charging and batteries.
I wrote this program for doing my vertigo exercises.

ruby -e '5.times {%w(left center right center).each{`say #{_1}`;sleep 30}};`say exercise over`'

I’m travelling around the world and writing program to help me categorize hotels / flights, show availability and weather for my trips.
I spent a week or two creating a trading tool for the popular video game EVE Online. The tool identifies regional arbitrage opportunities between large market hubs and allows me to prioritise the movement of goods to maximise profit while minimising time investment. It also helps me update orders efficiently.

As it provides a decent competitive advantage I have no plans to publicise it, although it is on Github as a portfolio piece.

A few come to mind:

A command line calculator. While it's on github, is really just made for me because I wanted something to do quick math and convert different units.

A note/todo app. Started it's life as just a text file in a git repo, but now has a web front end, a simple TUI front end, and a little backend so it can add repeating tasks or tasks future days when they come along.

I also have a little python script running to control my exterior Hue lights, turning them on at sunset and such. Just added a thing today that turns on the lights in my office to full brightness when I open Zoom. It's nice, but every time I go down the rabbit hole of home automation, my SO rightly gets annoyed at the silliness of it all.

lots.

many of them live in my emacs config...

also, a TUI noaa weather interface, piles of little bespoke automations, etc. None of it's portable, none of it's really meant to be.

I needed to hire a Ruby on Rails engineer a few years back, and didn't have much experience with Rails. So took a weekend to scratch an itch and created a web app where I could input a URL to a YouTube video, and the app would then pull the audio from the file and add it to a podcast RSS feed so that I could listen later on my iPhone in Overcast.

It was super useful for a while, and never turned it into anything more. Was handy for just listening to conference talks and other content where the video wasn't very important.

Sounds like NewPipe
Yeah, I was using it for basically the same purpose as the background player. But wanted on iOS, and then just used as an excuse to play around and get a bit more familiar with Rails. :)
I made a domain scraping tool that found a nice 3 letter domain, a few graphic editors for game design, html+js+php minifier, file copiers to backup only certain files, and other automation tools.
I have written some programs...

An old IRC channel I was on migrated to Slack, so I wrote a Python script that logs it in an IRC log-like format, like I use to do on the IRC channel.

I wrote an Android app that tracks my movements if I am moving, and sends it to a server. I wrote it all in about a week in 2018. Have not had time to update it but it works well enough. Have not done much with the data yet, but it has been useful when I am trying to remember when I went somewhere and for things like that.

I use other things, but they're mostly open source programs that I modified slightly for my purposes.

My entire linux Desktop feels this way! It's my favorite part of working in a barebones Linux distro like Arch. I've got to build everything from the ground up. Need a screenshot program? OK... let's pull in Flameshot. Where's it going to host that image? Well, let's create a watch folder and shuttle everything off to a GCP static bucket.

Window manager? I3... heh, let's build a bunch of scripts. Vim? Well... man, that's a whole ecosystem of tooling I an hack together and write against.

I do this as a designer. I'm actually not a fantastic programmer, I just like the flexibility of building tools that are specific to me. My entire desktop feels like a love letter to building cool things the way I want.

I have a couple but the first that comes to mind is a tiny little mac app I wrote that "jumps" my mouse between monitors. I use it because I have 2 monitors in vertical orientation, one in horizontal between them, and another smaller monitor above the center monitor. Here is some ascii art of it:

                     +----------------+
                     |                |
    +------------+   |                |   +------------+
    |          ! |   | !             !|   | !          |
    |          ! |   | !             !|   | !          |
    |          ! |   +----------------+   |            |
    |            | +-+----------------+-+ |            |
    |            | |                    | |            |
    |            | |                    | |            |
    |            | |                    | |            |
    |            | |                    | |            |
    |            | |                    | |            |
    |            | +--------------------+ |            |
    |          ! |                        | !          |
    |          ! |                        | !          |
    |          ! |                        | !          |
    +------------+                        +------------+

    ! = Where my mouse would get stuck
My little app helps to keep my cursor from getting "caught" on the 2 vertical monitors. By default macOS treats the parts of my vertical monitors that go above/below the middle monitor as hard stops/walls so it's annoying if my mouse is too low/high that I have to stop what I'm doing, drag my cursor up/down, then continue moving across the monitors. Likewise, the only way to get to the top monitor is to first go to the center monitor then go up. I hated feeling like my mouse was running into walls constantly so I wrote this app. If my cursor hits any of the old "walls" then my app moves the cursor up/down until it lines up with the bottom/top edge of the center monitor. Also if I'm hitting a wall at the top of the vertical monitors it will jump me over the "gap" to the to top-center monitor.

I looked for (and paid for) a couple of apps out there that claim to do this or something similar but none of them worked for me. I had never really written any Swift code but I was able to cobble together enough code to make it work and in around 200 lines of code I got exactly what I wanted. I wrote this over 2 years ago and I haven't had to touch it since. In fact the first time I rebooted I got confused at why my mouse was getting stuck because I had grown so used to it (added my little "app" to login items and everything has been smooth sailing ever since).

EDIT: Added "!" to the diagram to show all the places my mouse would get "stuck" previously. I left out the ones on the center monitor since they are harder to explain where I'd get stuck going up (the edges since the bottom monitor is higher resolution that the top one).

I love that you included the ASCII art!
Would you be willing to share the source for this one? Or at least how it works (i.e. what apis were used)
I wrote a quick program in Go to move a certain file from my Downloads folder to my Google Drive folder, when the file is detected. It's to help me backup with Tiddlywiki.
I made a video player for studying languages (Chinese in my case) its fully keyboard driven and allows marking areas of the video to be looped, so I can play through the video and efficiently mark all the areas with speech, then loop through those and navigate between them. I can also write a note for each marked area, which I use to transcribe and translate the video content.

I'll make it public in the near future.