Off the top of my head, the most used ones are:
* A replacement front-end for "tar" and various compressors
* A script to synchronize my music library to a compressed version for playing in my car
* A secure-but-readable password generator
* A system to batch compress folders full of video files. (For ripped blu-ray discs, mostly.)
* A replacement front-end for "ffmpeg", see above
* A "sanity check" program for my internet connection to see if the problem is me, or Comcast
* A front-end for "rm" that shows a progress bar when deleting thousands of files. (Deletes on ZFS are unusually slow.)
And lots more tiny things.
I made a program to gender swap any text you put into it and then got a book deal to rewrite and illustrate Fairy Tales. It’s been published around the world.
https://genderswappedfairytales.com
The idea is to shine a light on the original versions but it also creates a lot of never-written-before characters. A lot of brave princesses and lady-beasts, but also men desperately wanting children and being rewarded for kindness.
I wrote the gender swap algorithm in Swift. It seemed like it would just be a simple auto replace type thing when I started but there’s some weird things in English, for example with his/him/her/hers where they don’t swap back and forth sensibly and you have to understand the context.
It was his > it was hers.
It was his sword > it was her sword
So I ended up down this rabbit hole of natural language processing to break up each sentence into verbs, nouns etc to work out the correct words to use. Even tried training an AI to do it based on the finished swapped text but a whole bunch of rules worked more reliably.
When I hand off a build to a client, if all the red dots are gone, I know I’ve at least TOUCHED everything.
If I’m working with another engineer, we can both see the dots in our browser and collaborate to clear them all while we test.
We noticed that we buy a lot of the same things (bananas, avocados, eggs, etc), so we implemented a system where anyone can stick a QR code onto something they want to share, and anyone else can scan it to record what they took. For example, this morning I pulled a carton of eggs out of the fridge, scanned it, recorded that I took 3, and a Splitwise expense was automatically updated between me and the person who bought the eggs (much easier and less awkward than handing someone 75 cents). Everyone is logged into the application via Splitwise OAuth, and all products/expenses/debts are automatically simplified within Splitwise and updated via the API - so the app is pretty much a wrapper over Splitwise specifically for granular sharing of food.
I wrote some CLI tool that could trigger a scan and read the data back, into a file. Worked well enough, but I wanted a GUI.
I started thinking I wanted to make a GUI for it. I started thinking "I'll need to do X like xv does, I'll need to do Y like xv does, I'll need to do Z like xv does..." Clearly, what I needed to do is extend xv so it could do scanning. I spent a weekend making the prototype, and it worked brilliantly.
xv was open source but licensed $25 for commercial use. I made a deal with the author, John Bradley to become a reseller for xv. Over the next few years I sold, I don't remember exactly, but maybe thousands of copies. To people, to government labs, to businesses large and small. It was the beginning of a company that I ran until around 7 years ago, and that just shuttered for good a few months ago, 25 years later.
All for program I wrote to scan a friend's album cover art.
- A Pomodoro timer that has exactly the features and user interface that I want
- A script to perform backups of select files and directories from a source drive to a specified backup volume
- A "pixels-per-inch" calculator that allows me to compare the resolutions of displays that I may be interested in purchasing; by entering the width and height of a display in pixels, and its diagonal in inches, it calculates the density in pixels-per-inch, and the dot pitch in millimeters
- Various user-friendly graphical interfaces to aid in solving different types of puzzles (think sudoku-like logic puzzles)
- Programs to actually solve various types of puzzles all on their own (I've written over 70 of these in the last 10+ years!)
- Various command line scripts for code management tasks (i.e. useful for sofware development itself)
Yes, for over 30 years. I could never list them all. Nearly every thought I have becomes a program. I've written x86 asm game hacks (DOS era), 2D tile games (80's), Windows MIDI composers, game frame languages, ray-tracing renderers, OpenGL visualization, PID controllers, camera controllers, video controllers, circuit simulators, flight controllers, so so so many games, scripts for analyzing data, scripts for scraping websites, ODBC readers for my cars, FM synths, game solvers, and that's just stuff in C, not even getting started with the bazillion websites.
Over decades, programming becomes such a part of your life, that it is simply the way you move about the world, and think about it.
It worked amazingly well, it got me hundreds (yes, 100+) of dates, incredible dating stories and a lifetime of memories, all in a semi-automated way without me requiring to “swipe right” or similar. As a matter of fact, my current girlfriend (of 5 years) was found through the software. She knows it and laughs about it.
Clearly the software didn’t do anything magical, I would have likely gotten the same results had I spent the time to individually message and interact with the 100s of women the software did in a semi-automated way, but it was really nice to save my time.
One day I should write a blog post.
Other than that though, I have a system that helps my D&D group (which meets weekly and has for years) choose what to order for dinner. The system keeps track of a number of restaurants in our area (hand annotated) and chooses 5 restaurants from different food genres and excludes the genre of food that was picked the previous week. The restaurant choices are placed in a ranked choice poll which I monitor and close manually to choose dinner. The ranked choice poll has been helpful when a restaurant actually ends up closed so we just step down the list and pick the next in ranking.
Admittedly this is a technical solution to a mostly social problem, but my D&D group has some neurodivergent personalities that are really bad at coming to consensus. Also, the system pretty much runs itself at this point as the restaurants are kept in a sqlite database and the code is so simple that it never really changes.
"Why not Google Maps?"
Several reasons: Google Maps requires a cell connection. (They have offline maps now — they didn't at the time I built the tool — but my offline maps are far more controllable in what data I pull down. And if I need data I haven't got, and I have a cell signal, I can fetch it on the fly and add it to the offline cache.)
Google maps was much worse at the time about finding rest areas. They're better marginally better now, but it's still pretty tedious to do on mobile. (There's no general search for it; you can search rest areas and usually get rest areas + junk, but you also really want to also search at the same time for, e.g., Flying Js, Loves. Contextual knowledge about the road would be good too, in case I'm on a turnpike. Also, still waiting for it to realize that, if I'm looking for gas, food, etc. … I want it downroad.) Admittedly my own implementation could have been better here, but I also lack the nice datasets that Google has…
OSM's map data is, in my opinion, better.
The GPS device I have can acquire a signal pretty much instantly. The phone … cannot. Useful in situations where we needed a quick answer, b/c things are happening at 60mph.
Though, we did end up supplementing the program with the phone. (On-the-fly routing is better in Maps, b/c it's a really tough problem, and I didn't build an interface into OpenRoute or whatever its called.)
OpenLayers is an amazing library, too.
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.
Probably the most important part of my flow is the following; it's a method for doing a personal "inbox" GTD style, 100% reliant on email + zim-wiki. I have a script that, when called manually, searches for new "inbox-marked" emails (i.e. ONLY those sent from me to me), and copies them to my zim notebook (specifically, to the page corresponding to "today" in the journal) as an open checkbox item.
Supporting that is-
- Desktop: a little shell script that pops open a zenity window to send such an email
- Smartphone: An android app called Blitzmail that does that and only that.(pops a window and sends to an address with no other interaction)
This replaces a LOT of things for me and helps prioritize immensely, (i.e. strongly prevents "email inbox as to-do list" which is a bad idea)
Created it from scratch, live coding it on my (https://JitterTed.Stream) Twitch channel (and some videos on my YouTube channel at https://JitterTed.TV). Written using TDD in Java + Spring Boot, deployed on Heroku and open-source at https://github.com/tedyoung/kid-bank.
I also recently wrote "Format Hero" (https://formathero.dev), because I could never remember which letters to use in Java's DateTimeFormatter. Was also a good demonstration of Hexagonal Architecture and, of course, I live coded it, TDDing all the way. Source is at https://github.com/jitterted/format-hero. Still some work to do on that one, but filled my immediate need.
[edit: added proper links for Stream/YouTube]
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.
What I've done at every job I've had (in software) is convince my boss "it's just a little code, let's open-source it! Maybe it'll go viral and a community will form to contribute & make it better!"
Which basically never happens (well it did once, in a big way) -- but when I'm working my next gig, guess what? I can use all that code again. And this time I can honestly recommend, "Let's use this thing on github, it does what we want & it's open source!!"
I pried open the remote, soldered on an extra circuit bypassing the push switch, and hooked it up to an Arduino. When a packet is sent over serial, the Arduino simulates a button push:
const int basePin = 2;
void triggerRemote() {
digitalWrite(basePin, HIGH);
delay(2000);
digitalWrite(basePin, LOW);
}
void setup() {
pinMode(basePin, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
Serial.read();
triggerRemote();
}
}
This was paired with a tiny web server to do the serial write: #!/opt/bin/python2.6
PORT = 5525
import BaseHTTPServer, SocketServer
class LoccaHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
server_version = "LoccaServer/1.0"
def do_GET(self):
if self.path.startswith("/trigger"):
serial.write('A')
self.send_response(200)
else:
self.send_error(404)
serial = open("/dev/ttyACM0", 'wb', 0)
httpd = SocketServer.TCPServer(("", PORT), LoccaHTTPRequestHandler, False)
httpd.allow_reuse_address = True
httpd.server_bind()
httpd.server_activate()
httpd.serve_forever()
Finally I threw together an iPhone app with the most basic UI imaginable: a static full-screen photo of the remote; tap once, it fires off a HTTP request, and the door swings open: - (IBAction)triggerRemote:(id)sender {
NSURL *url = [NSURL URLWithString:@"http://10.0.8.48:5525/trigger"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection connectionWithRequest:request delegate:nil];
}
That's basically all of the code. Considering how much of a janky hack this is, it worked great.Ancient write-up with some photos: https://web.archive.org/web/20120103180640/http://ghughes.co...
So I bought a cheap electric water gun from Amazon, built in WiFi using an ESP8266 and a relay shield; 3D printed a window mount for my old iPhone (running a webcam app) and hacked together some openCV code in python.
After all this was working on my desk, I had the pleasure to discover that the PCB Antenna of the ESP is to weak to receive WiFi on my balcony so I connected the ESP to my (current) iPhone hotspot and wrote a small go relay for my server so that my laptop can send the shooting commands to the water gun ~~over the internet~~. Oh and while I was at it, I added a Siri Shortcut, so it’s voice controllable, too. (They are surprisingly hacker-friendly)
The surprising thing is, that this Ruben Goldberg machine actually works really well and without much fiddling.
javascript:(function(){ location.href = `https://nitter.net${location.pathname}` })();
You can take this JavaScript snippet and save it as a clickable bookmark (hence the name bookmarklet) in you browser. I've named this "re-open in Nitter". I deleted my Twitter account a while back but sometimes I get handed a Twitter link. This snippet let's me quickly re-open the link in Nitter which is a nag-free way to browse Twitter without having an account. :)
Basically, I use a USB switch to switch my mouse, keyboard, and webcam between my personal desktop computer and the MacBook I use for work. I tried a full KVM switch at first, but every time I'd switch it to my MacBook, Windows on my PC would flip its shit. With the primary monitor disconnected, it would move everything to the secondary monitor, which was fine, except that when I moved the KVM switch back to my PC, it would move everything back to my primary display, whether or not it was originally on my primary or secondary. Additionally, since my two monitors are different resolutions, all my window sizing was wrong.
I tried to get around this by plugging my PC into my monitor's Display Port and plugging the MacBook into an HDMI port and just telling my monitor to switch inputs, and for the most part it works, but at 1 PM every day, if my monitor is set to HDMI, it drops the DP connection, making Windows think it lost the monitor, putting me back at square one.
So I wrote a simple program in Python that sits in my notification tray. I can tell it to save or restore all my window positions. So if Windows loses the monitor, after it comes back, I can restore everything to where it was.
As a bonus, I also added a "Easy Copy/Paste" menu to quickly copy emojis like ¯\_(ツ)_/¯ and ಠ_ಠ to my clipboard.
Sometimes you just want to code and see if you can recreate BLAH for yourself.
My oddest program was called 'heater' - it variable settings from warm -> hot and would peg the CPU at different rates (at the time I was in an unheated office, and rather than go buy a heater - I did what all programmers do and re-invent the wheel)
Programming is fun!
All these exist on the command line, some are short functions in my bashrc, and some are more substantial written as discrete scripts and run via launch daemons. Not having to worry about gui or capturing each and every test case makes solutions fast and only a couple to a few dozen lines most of the time. I don't worry about awkard characters in my strings and all the esoteric regex and special cases that would need to go into a production ready script, because i simply don't use those characters in strings or do anything funky that stack overflow comments like to bring up as a potential pitfall. Makes it easy when I am my own client. plus it makes it easy getting all these programs to some new computer of whatever OS when all I need to do is pull a git repo full of these scripts to install.
Finally, I made this service available to everyone so that it can be useful to others. I have also obtained the necessary permissions from the HN moderators to share such a service with you. So, I hope you will not miss important stories from this awesome platform with the help of this service.
A UI over ffmpeg to look into downloaded movies and add/remove/rename/change default tracks without recompressing (or re compressing certain tracks only). And to autorename files with imdb titles and ids. And another one to collect timestamp from videos to edit out segments. Or to merge videos, auto finding the best size, fps, etc.
Own mp3 player with ability to exclude songs, import files from different sources and sync playlists with itunes on windows through COM. (Had so many bad experiences with itunes that I don’t trust it as my reference for song data, ratings and playlists and only use it to sync iphones).
Various tools to edit and manipulate gpx (fix time zones mostly and apply gps to photos) or srt files.
All sort of web scrapers.
A nimbletext-like on which you can drop files
A home website that contains the downloadable imdb data to manage my movie library and suggest movies I don’t own already.
Music sorter to try new songs with fast keyboard shortcuts to fast forward/flag/discard. Same for photos.
Lots of CLI tools: CLI for my domain names (for instance to maintain a dyndns-like subdomain). My own ACME client for wildcard certs that also updates various softwares with the new certificate (IIS, mail server, will look into synology soon). Tool for wake-on-lan my devices. A tool to auto-update the other tools based on a central repository. Various commands to put in a powershell script to send notifications, update my own "dead man snitch" website. Watch new real estate transactions in my neighbourhood on land registry (UK).
Back in the day we used to clean them up and release them to Freshmeat. Clones of Freshmeat still exist today, but the kids today don't know about it, so nobody uses it, so it's mostly just old apps that are still maintained. But Freshmeat used to be the very first site you'd visit to find open source apps. Sooooo much easier than today where you have to search and search through various sites and still you're only seeing the most popular projects.
It took me probably 6 months of hacking on it in my free time.
The app enabled me to define the behavior of the BMS system as a state machine represented by a table (using PyQt tableview). It also simulated execution of the code as would be implemented, one scan at a time.
Once there, I added a bunch of tools to print out reports/documentation, run diff against models, extract transition comments where certain tags or similar existed (eg show all transitions with a comment that include "IEC 61511"), version tracking, etc etc etc.
It might sound slightly a trivial problem on first description, but one of the systems had ten burners and it ended up being a hierarchical set of 15 state machines 3 deep and it would have been almost impossible to define the behavior on paper - simulation picked up heaps of minor sequencing issues and allowed us to correct them before actual software was written and tested.
Basically, I ended up with an executable specification (not far off the IEC 61499 dream) that self documented. I could have made it write the core PLC code and export it as XML for import to the PLC programming tool, but it was sort of break even to go that far on SIL 2 systems, so I did not go the full distance on that. At one stage it looked like we might go SIL 3, so this would have been useful in that case.
In the end, I put in maybe 1200 hours to build this, in my spare time. Lots of late nights for well over a year, but I don't think we could have really done the project well without it, or something like it.
I looked at it, and decided to actually commercialize it in the form where I could maybe sell/give it to random punters was whole new level of effort. Plus it seemed to be the sort of software that people go broke trying to sell and support, so I just use it for my own purposes now.
1) a web application to manage customer Q-tagged VLAN Ethernet circuits within specific color-coded optical fibers of municipal fiber-to-the-home cables (12, 36, 48 and 96 fiber cables). The application enabled fiber optic physical plant to be optimized for customer Ethernet circuits, reducing the cost of implementing customers considerably below industry average.
2) a double-entry bookkeeping system optimized for the monthly US Bankruptcy Court Chapter 11 financial reporting requirements to manage the same company as debtor-in-possession when our largest customer(s) filed bankruptcy during the dot com bust (circa 2001), forcing us to also file for protection. This enabled us to successfully double our customer base, double our revenue and retire all debt while reorganizing in bankruptcy.
3) a general accounting web application emerged from these experiences specializing in multi-currency accounting of businesses specializing in asset management (features that Quickbooks etc just do not have). This built on my personal situation of being a citizen of more than one country.
All 3 of these were developed using PHP/MySQL and I have refactored them over the decades up to PHP ver 8 / MySQL ver 8 running on the latest Ubuntu LTS server version. As I am the sole user (with a few personal assistants), I have been able to focus on the addition of features and capabilities rather than user support, security and general hardening of the applications.
Also a disassembler, editor, file dumpers of various formats, directory comparators, accounting aids, audio file declicker, hard disk driver, a program that would image a floppy disk, VT52 emulator, etc.
Another recent thing (this one is open source, search for "5hay/notionbackup"): I wanted regular backups of my Notion workspace, so wrote a little program in Go that does that. I'm doing weekly backups and pushing it to my Google Suite with rclone (encrypted).
My biggest personal project is a streamlined android app I use to easily track my own job performance and statistics. I can back up my performance claims with real data, negotiate more valuable terms and identify optimization opportunities. It's helped me increase my profits by about 60% and also allowed me to work a lot less hours because I know how much time I need to accomplish each task and can optimize the use of my time accordingly.
I don't feel comfortable publishing things on github without at least polishing them a bit first and I no longer have enough free time or motivation to do it. Sometimes I come across an interesting concept that I just have to implement to convince myself it works and that I'm not insane for thinking it. Usually lose interest after it's proven, finishing it is a lot of work and it just feels pointless.
I wired up all my house electrical circuits with a TED[1] unit and wrote code to track electrical usage by circuit.
I've written scripts the automate the creation of parts like screws that can be imported into 3D CAD tools.
I've written code that processes processor data sheets to generate include files for the register definitions.
I wrote a simple CMS to manage web pages.
I've got a bunch of programs that are part of some ML experiments for converting text books into knowledge graphs.
I wrote a simple database to manage all the DVD/Blurays I have so I can know quickly at a yard sale if the movie is one I don't have.
I wrote a 3D graphics package that would talk to the 3DFx libraries for their VooDoo graphics accelerators.
I wrote a filter designer that would optimize RF filters based on standard available parts and a minimum of winding my own coils.
Libraries for STM32 chips so that I could easily go from idea to something I could test.
The list does go on, but you have to understand that before I ever wrote code "for money" I wrote it for fun, learning, and exploration.
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.
And tools can be anything: organizers, information accessors, information processors, learning aids...
As already mentioned, months ago I had to build a full word processor for Android. I just needed it and what was available was faulty. Worth mentioning because I had to laugh in front of the odd situation of having to build a Word Processor from scratch in 2021 - but there you go, you may need anything.
Most used program: I keep a journal of practical daily happenings in Emacs org-mode, organized hierarchically by year/month/day. It was too much hassle to add new entries (I'm lazy), so now I have a utility that inserts journal entries in the correct place from the command line, e.g., "add-journal 'talked with roofers to get estimate'". It's turned into an ad-hoc database for recording things like my weight, also, which gets parsed and turned into a graph.
- When I was a kid using a DOS PC I'd write them in Microsoft QuickBASIC or Turbo Pascal and compile them to EXEs. (I used to drag a few particularly useful ones around with me until a few years ago when the prevalence of 64-bit Windows made running them on a stock Windows machine impossible.) I had stuff there like a random password generator, dumping files to VGA mode 13h (to visually look for patterns in data), drop the DTR on a serial port (to hang up a modem from the command line), search/replace on INI files, and lots of others I've forgotten.
- I wrote a proto-Markdown text processor back in high school when I was taking notes on a vTech Laser PC4[0]. It took files from the vTech and rendered output files with Epson printer formatting codes, centered text, made headings, etc.
- I regularly use a script I wrote to import my phone backups' SMS logs and dump them into my IMAP mailbox. I love being able to search all my email and SMS communication in the same interface.
- I have a podcatcher I wrote bolted onto my (heavily forked) tt-rss[1] installation to download podcasts to a local webserver for archiving and playing.
- My father persists in using a DOS accounting package for his business. A small program I wrote ingests check printing output from the DOS app (meant for dot matrix tractor-fed checks) and reformats it for sheet-fed checks in a laser printer.
- Front-end scripts for lots of command line utilities so that I don't have to remember obscure options for common tasks.
Got some bugs with formatting complex lines of text, but it works well enough for me. I plan on porting to Rust one of these days.
Whenever the bot has gone down (I turned off the home server or whatever) my friends complain, so I know the bot is fulfilling its purpose :)
Options Simulator - An extended family member asked me to create a small simulator to help forecast the outcome when making options trades.
One of the simpler scripts I wrote that I actually published is a little helper to output WiFi signal strength on Macs into printable glyphs so that you can include it in your prompts on the terminal.
I'm just kidding, I'm assuming these are not for fun projects (because in that case, idk dozens to idk how many at this point) but general programs for my use as utilities beyond just the fun for programming, and I'm guessing scripts don't count, well once upon a time I made a notes app but that has fallen into disuse unfortunately.
Looking at the comment section, uh, scripts that are just wrappers for various tools (rsync, ffmpeg, others) are a dime-a-dozen I guess, I have so many in my ~/bin directory that I've forgotten what some of them do at this point.
Oh yeah, once upon a time I made a background changing app that just changes my desktop background based on the time so I would have backgrounds that matched the time of day, I did it in CL just because I loved learning CL but I have no real reason to use it in my work. I was going to make it automatically change the timestops based on the season, so evening photos etc change as the length of day changes, and make it based on the sunrise equation[0], but I sort of dropped it a few years ago and haven't really touched it since. You know I might do that again, just for an excuse to learn Lisp again.
I don't use it anymore myself and got a bug report last week. It's a couple of years since I've written any Swift at all, so I'm not mad keen on working on it, and I feel a bit bad that I have published it and it's not working. I never put the code on GitHub because the reverse engineering of the Bluetooth was somewhat incorrectly documented in the code and I didn't want to share bad information. Now GoPro have an SDK I could use.
Similarly, I wrote a Siri Shortcut for checking where the nearest Jump (bikeshare) bike is (Python on AWS Lambda). Then Uber sold Jump to Lime and there is no API access for me anymore (Sacramento).
https://www.youtube.com/watch?v=0RzahKxUYqc
https://apps.apple.com/ie/app/stoppro/id1453312416
https://gopro.github.io/OpenGoPro/demos/python/sdk_wireless_...
As it provides a decent competitive advantage I have no plans to publicise it, although it is on Github as a portfolio piece.
It has helped me wrap my head around certain areas of computing without getting lost in a pile of pdfs.
Very simple, but very comfortable for me.
I also created my own TODO / dashboard app, where all tasks are on a schedule (do this every x days) and I can enter a value each time I complete a task. These then show up as graphs on my dashboard - helpful for tracking weight etc. I also graph a bunch of random things automatically in the same system (how many unread emails I have).
It also tracks how many tasks are overdue so I can measure my general ability to get stuff done, and if it gets overwhelming I can tweak the settings so it just shows me a few things (or more realistically I tweak the task to either not need doing/tracking, or I slow down it's cadence).
I am not a huge fan of podcasts but I do listen to a select few. I am also weird and only listen to them on my main machine at home while doing something else.
I was a huge fan of Juice[0] but it hadn't been updated in ages and at some point its TLS parts were too old and I gave up updating it to Python 3 after a quick try. So I wrote my own Podcast library thing in C++/Qt which talks to a backend, where the data is stored.
[0]: http://juicereceiver.sourceforge.net/
And I wrote a soup.io clone in Clojure that I use mostly for song bookmarking via youtube (but so I can play them). Then I stripped nearly all of the soup features and now it's just a tumblelog I guess. Then after many years I rewrote it and didn't open source the rewrite.
And as you mentioned, the odd metrics/scraping/whatever job that's being run every night and where I actually look at the output several times per week, in one case it's an actual program, yeah.
I've also got a stupid one: a mouse waggler. My work enforces screen lock times to be 5 minutes, and I have two computers, one on an air gapped network. So when development happened in the air gapped PC, and I inevitably had to look up docs for something, I would always be prompted for my password. So, I made a program that nudged my mouse just slightly every five minutes. That has essentially turned into my Windows API test bed. Someone will ask, how hard will it be to implement X for Windows? I'll try and find a use for it in this waggler, and look how to implement it.
This has also lead to the waggler part being obsoleted by one function call:
SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED);
It's now a full GUI program with all sorts of timers and reminder things, it also happens to keep my screen on.
Since I have a ton of little SBCs sitting around my house, I decided to write a clojure app the queues up and transcodes my movies to H264. It uses Docker Swarm to handle distribution of nodes, RabbitMQ to queue up the movies, and core.async to handle local queuing within the application, and uses the Java NIO filesystem stuff to handle any kind of atomicity.
It's hardly the "first" or the "best" at what it does, but the advantage of writing your own is of course that you can tailor it exactly to your setup, and of course it was fun to write.
At a few months old I created BabyDots [0] as she loved this YouTube video of dancing dots [1] which really settled her when she was upset as a young baby.
At over a year old I added BabyPhone [2] to let her talk to family and have them “talk back” to her even when they were not available. I missed the timing on this and she didn’t enjoy it at all until literally this week when she started talking back to the little baby on the other end of the phone.
At 18 months old I made a book-building app [3] that takes titles of pages on Simple English Wikipedia, and creates pages for a book that can then be exported as a PDF and printed (or viewed on the phone). It also has a website [4] on a free heroku dyno which definitely won’t take much traffic. This was because when she gets interested in, e.g. planets, I don’t want to have to order a book on planets, I want to print one out 5 minutes later to keep her interested.
One of my proudest moments was at my new job where a team member said during our first standup “I have your baby dots app installed and although we don’t do screen time, the music really sooths our kid during nap time!”.
[0] - https://github.com/babydots/babydots [1] - https://www.youtube.com/watch?v=8DILz54aYFU [2] - https://github.com/babydots/babyphone [3] - https://github.com/babydots/babybook [4] - http://book.serwylo.com/
https://github.com/bigH/git-fuzzy
https://github.com/bigH/auto-sized-fzf
https://github.com/bigH/interactively
https://github.com/bigH/dotfiles/tree/master/bin
https://github.com/bigH/dotfiles/blob/master/aliases/git.sh
https://github.com/bigH/dotfiles/blob/master/aliases/kubectl...
https://github.com/bigH/dotfiles/blob/master/functions/fzf.s...
https://github.com/bigH/dotfiles/blob/master/functions/core....
So much shell scripting and use of `fzf`. I make things I enjoy and will be happy using and since I spend a lot of time in the terminal, it makes sense to make things like this for me.
- wgetcheck (Python): Downloads a file with wget and verifies a provided hash, for my convenience. Also automatically verifies internal checksums in zip, gz, and other archives, and verifies the size and MD5 checksum provided in a HTTP header. I'll probably next add verifying the provided size of the file to provide some sort of basic check for files without provided checksums. This all would probably be better done by a browser extension, so maybe I'll write one later.
- freeze (Python): A script to update a hash file (same format as shaXXXsum) by adding new files and noting which no longer have matching hashes. Optionally sets the files as immutable [0] to prevent them from being modified or deleted. Intended to be used on files which aren't supposed to change or change infrequently.
[0] https://en.wikipedia.org/wiki/Chattr (chattr +i)
There are staples I keep coming back to. I'm always trying to write a reverse ray tracer that shoots photons from light sources and tracks them around to see if they hit a pinhole camera, but they are of course way too slow. I've played with some ideas for compressing images, and I've taken a few runs at the hutter prize (compressing wikipedia). Writing a massive text-based old-school rogue-like is something I keep coming back to.
I used to mod games, and have played with some programs designed to edit different file types I was trying to reverse engineer. I've played around with trying to optimize sha-256 hashing, but haven't gotten anywhere. I also have tons of shells scripts that do various things.
I usually write in straight C these days, though I've tried various programs in D, Free Pascal, Ada, Java, assembly, Perl, BASIC (back in the day) and probably others I've forgotten. I remember in high school writing a game with a friend for one of the early Tandy machines in assembly on paper and then hand-assembling it to machine code and using poke in BASIC to put it in memory and then executing it. We didn't have access to an assembler.
I haven't ever given out any of my code, I just use it to play with ideas and to keep my skills up.
It works pretty well w/ Linux, and also iTerm2 on macOS (if you enable mouse reporting events). It's a hot mess if you use Terminal (but no one uses Terminal, right?)
It is a command line app that enables you to turn any text on your screen into text on your clipboard. When you envoke the ocr command, a "screen capture" like cursor is shown. Any text within the bounds will be converted to text.
You could invoke the app using the likes of Alfred.app, LaunchBar, Hammerspoon, Quicksilver, Raycast etc.
I only released it to the world when I swapped the backend out from being Google Vision to Apple's built-in OCR APIs.
I also made a "life management" app marcusOS [2], that does all the usual things you'd expect.
[1] https://github.com/schappim/macOCR
[2] https://s3-ap-southeast-2.amazonaws.com/cdn.amplifier.app/Sh...
I've also got my personal (network) monitoring software, some 'IoT' stuff to capture temperature and humidity data around my house, and I'm working on a ESP32 based alarm clock pulling data from iCalendar feeds.
https://github.com/neriymus/Fetcher if anyone's interested
I plan to release it some day though.
[0]: https://9to5google.com/2021/07/20/google-bookmarks-closure-m...
[1]: https://i.redd.it/uvrv7qsqtct81.png
[2]: https://hasura.io/
----
[1]: https://gist.github.com/YellowApple/7b9cc54cf6fbc20bf79cf240...
set-opt: ensure settings in conf files in /etc. [2]
s4: when i need to do distributed data processing and don’t want to import an apache project. [3]
bsv: when i need maximum performance data processing. [4]
tinysnitch: for monitoring network connections to/from my laptop. [5]
new-gocljs: when i need to start a new fullstack web prototype. [6]
cli-aws: when i need to work with aws from cli or go, and don’t want to import the cloudnative equivalent of an apache project. [7]
aws-rce: when i need remote code execution on aws for great good. [8]
1. https://github.com/nathants/agr
2. https://github.com/nathants/bootstraps/blob/master/scripts/s...
3. https://github.com/nathants/s4
4. https://github.com/nathants/bsv
5. https://github.com/nathants/tinysnitch
6. https://github.com/nathants/new-gocljs
Working on a music visualizer in Unity right now, half the fun is creating it.
The other half is creating music to showcase. Outside of this I'd argue all of my side projects have been created for my personal use.
I designed it for my system, but it should work on any linux system with a battery, kernel version 5.4+, and systemd.
- Plaintext
- Single list of notes
- Notes are auto-titled based on the start of the content, and auto-deleted when empty
- Sorted based on recently modified
- Pick a folder on startup, and notes are loaded from/saved to the folder as plain text files (one note == one text file). I use a folder that lives on my Dropbox so I get backup and syncing
- Text is centered and finite-width when full screen, so line wrapping is natural
- All UI except your text disappears when typing, and reappears when you move your mouse
- Light/dark mode toggle
- Made with Electron, so it's cross-platform and easy to modify
I played a D&D character that was, until recently, about as stupid as they could come. Think "Makes Forest Gump look intelligent". A monk who quoted scripture at random that had zero relation to the matter at hand. Never got anyone's name right (always got the first letter right)
So I wrote a discord bot. First in python, then eventually in rust (just because). The bot has a few commands, one to return a random quote from a database, one to add a quote to the database, and one to return a random name that starts with the specified letter.
Of course, things being what they are in D&D, he's suddenly a lot smarter, and the bot is no longer useful. Fun though, an interesting learning exercise.
I also made a custom debugging print function to print variable names as well as their value with only having to write "print(var)". It also will print the parent function and class names for context. I use this tool more than the debugger day to day now.
I know there are existing alternatives for one or both of these but there's nothing easier than tweaking a tool you wrote yourself. Plus I learned a lot about Python in the process!
* A ransomware detector based on accessing my home network file server via an all-Linux chain that stores file hashes and watches for changes.
* Converting PayPal transaction history from PDF to the numbers needed for my tax return, and some similar tax related scripts.
* Anything involving measurement or data logging, such as temperature, etc. During one episode, I sorted out whether my home furnace was operating intermittently.
I won't count hobby related stuff, which is innumerable.
If you're just having a look around, I might recommend to start with
- the hangman solver as a funny random example https://lucgommans.nl/p/hangman-solver/ (for a game to try it on: apt install bsdgames && hangman)
I use 'cau' a lot myself for 'inline' footnotes in chats, e.g. https://lgms.nl/p/cau/?Look+at+how+much+data+I+can+fit+in+th.... but I could see how most people would not use my server for that. Feel free to steal the code! https://lgms.nl/p/cau/?source
I'd be curious to know how many people haven't made the equivalent of https://lgms.nl/p/ip/, at least if you're from before when icanhazip became popular
OTOH I thought some people would enjoy this but no one did so unintentionally it's just for me.
I use nearly it every day on one or more of Windows, Mac, Desktop, Laptop, and VR (via Oculus Rift's ability to show the desktop in VR). It does have a couple of semi-showstopper bugs that I need to fix but I'm lazy and it continues to mostly meet my use-case well enough that I haven't gotten around to fixing it.
https://github.com/trevorpogue/topspace
I also made a Python tree data structure library to easily parse and read tree structures which I actively use in other personal projects.
This car cheap autoradio has no random nor memory. Everytime the engine start, the music restart from the beginning.
Just coded at a stop a little python script for Nokia to randomize the name of the music files of the usb stick.
This wasn't strictly speaking for personal use, but I created it and I was the only one who used it as far as I know.
The info was the same as the main status screen, but I made it frameless and always on top of other programs, and gesture aware. It was about 150 px by 700 px, with little blinkenlights for the statuses. It hung out on the right side of my screen and I could see at a glance whether things were running or not. There was a button to summon the main screen for more details.
The main work was understanding how to handle windows, and UX refinements.
I want to play with the radio, not with the tool that should help me with that.
My software simply does the following in the order I want it to do:
* asks me for a call sign
* shows info about the call sign gathered from a API
* shows previous contacts with this station
* asks for date, time, band, report, comment and prefills what it can
* submits this information via an API to an online logbook service
More info and code here: https://qrz.is/qrzlogger/
It's 3 bands of Adafruit Neopixels, which means I could play with colors as well, and it's driven by a Raspberry Pi 1 (accessible on local network only).
Fun fact: it runs on a computer PSU: the Raspberry is low power enough that it run on the stand-by rail, and the PSU is only turned on (by the Pi) when the lighting is on.
Due to how custom and crude it is, I never considered open-sourcing it. It's a fun party trick when I have guests though.
- I play a lot of chess and I want to click a button to copy the chess PGNs from chess.com easily while playing a game: https://pastebin.com/UKVUXQxc
- Another one is to grab property info from Redfin and paste it in google sheet for easier analysis and comparison b/w properties: https://pastebin.com/EmH66Q0r
I started by matching it to the solar elevation, but ultimately I like it more just on a fixed schedule. I've also programmed it to make a more dramatic warm shift near bedtime, and to fade up a bedroom light when it's time to wake up.
Due to the inevitability of scope creep this system also now tracks the charging status and position of my robot vacuum, and I'm working to expand it to collect the 15-minute-interval usage data from my electric provider's website.
1. StrongLift 5x5 tracker. This is a python CLI based script that tracks 5x5 (Strong Lift) program. I haven't used it in awhile, but a few friends still do.
2. HNews calendar style home page. I wrote this as a way to reduce my daily HN screen time but don't want to miss anything. So I created an app (django on raspberry pi) that downloads from HN API and group HN articles by date and point in a calendar style page. Pretty useful, but the code is still in Py2 and awful.
3. A crawler that downloads swim school class availability so I can sign my kids up.
Something that scrapes financial transactions from bank and credit-card accounts in a fully automated way where possible, and semi-automated way where necessary, dumps those transactions into a database, automatically categorizes them, and creates dashboards for commonly used views and analyses.
I've blogged a bit about it here: https://sagar.se/blog/where-is-the-money/
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.
- A scraper to get thousands of quiz questions from popular German TV shows and then import them into an Anki deck.
- Sync app between Foobar2000 and Plex playlists.
- A script to enter Steam giveaways for me. After winning over 1000 Steam games and DLCs, I've turned the script off (mainly due to playing more console games lately). I might do a write-up about this one someday.
- A movie management web app. It's been running for 7 years with low maintenance effort.
One program that I am particularly happy with is a calendar generator for Scribus.
The Python script generates a year calendar, which I then print as a book. It helps me to plan my art career by week, by month, and by quarter. The custom layout somehow makes me take all the planning very seriously. And there is a lot of room for sketching.
Another recent project is a personal mind map, which I can extend to my own needs. It is heavily inspired by Kinopio, which, unfortunately, is not open source.
I am always amazed that not everybody is using computers and programming in this way.
- s3d: fast(ish) image viewer. Basic but it gets the job done.
- Thoth: Text editor with FTP and note-taking features. Even though I uploaded it 2 years ago https://www.mirrorisland.com/thoth but I haven't needed to update anything on it because it does what I need just fine. I also use it to read error logs on various websites via FTP.
The first app is Battle Objectives [0] which I made so that my group could play with some "enhanced battle objectives" I found online. The fan-made enhanced battle objectives are freely available on Boardgame Geek but I didn't want to print out and cut out all the cards so I coded them into an app. I linked this app on BGG but didn't think it was getting any use from anyone outside my personal Gloomhaven group. But I also found out while writing this post that someone forked Battle Objectives to translate it to German so I guess someone was using it! [1]
The second one is Hitdeck [2] which I made to automate the tedium of reshuffling my hitdeck and of rebuilding it to add and remove cards as the game went on.
Edit: I almost forgot I coded a complete emulation of a solo card game called Friday [3] [4]. I enjoyed the card game a lot but it's well suited to many fast paced rounds and I got tired of having to shuffle all the cards so I made an app to emulate all of that. It's unfortunately just for me because I never got around to adding a tutorial or anything so unless you already know the rules of Friday you'll be pretty lost trying to play.
[0] https://github.com/tristanpendergrass/battle-objectives
[1] https://github.com/ToM-Korn/kampfziele
[2] https://github.com/tristanpendergrass/hitdeck
[3] https://boardgamegeek.com/boardgame/43570/friday
[4] https://github.com/tristanpendergrass/legendary-barnacle
It’s not a full replacement, and I wouldn’t use this in production. It is more meant to help lower the friction for starting new learning projects.
Right now I can do things like `wizard new rails -d postgresql MY_PROJECT` or `wizard rust test` or `wizard start`
It is mostly cli for now but I’ve started working on a nice TUI for it as well.
No good reason for this other than not wanting to depend on environment managers, tool chain managers, or a combination of different tools.
I don’t use docker-compose for almost anything now, but projects generated with my tool are fully docker-compose compatible as I also create a docker-compose file when creating a new project with my tool. It’s been a really fun learning exercise and I learned a LOT about docker and the docker api in the process
(There are services out there that can set the color of a light based on the weather, OR on the time, but I’ve never found anything that can do both.)
I once made a software in form of a digital book in Java it was more like personal motivational book on how I would start my business.
I later converted the software into an app and edited the content to fit an audience, surprisingly the software was a success https://play.google.com/store/apps/details?id=business_ideas...
I later created a few games with Unity and Godot which I shared with friends. They were pretty interesting 2d platformer games. I never uploaded these games but some of my friends still play the color shooter game I made with Godot.
As my programming got better, I started creating slightly advanced software like this music player that I had been using for a while as my default music player. I decided to upload the software on 6th April 2022 for public use https://play.google.com/store/apps/details?id=media.mp3playe...
Most recently, I wrote a "wgrep" program that scans an input of 5-letter words and extracts those that could be a Wordle solution, given a guess and its result on the command line; and another program that determines the best Wordle guess from a list of remaining words (where "best" means "minimizes sum of squares of counts of words with the same outcome").
I have a mark watched and delete button so that YT's algorithm still works to surface interesting videos.
Having offline videos allows me to watch videos like I couldn't before (even on a stable 1Gbps connection). I can fast-forward instantaneously and there are no ads. Subtitles are also downloaded and a thumbnail.
Another nice feature inherent of offline video is if you want to grab your laptop and go somewhere (I'll sometimes go to the park and eat), you don't have to worry about your video stopping because you don't have internet/need to tether.
The whole app is contained in one executable file (you'll need Ruby) and stores its data in the JSON files that Downie provides.
Screenshot and code: https://gist.github.com/ericboehs/79e7799829d86c3b84d449ad3c...
I've been using it for ~6 months. I've shared it with a few friends but I think I'm the only one that uses it every day.
The most used one is a tools called Railgun (https://github.com/hbayindir/railgun/) for sending e-mails from command line via Mailgun.
I've also built a backup tool for SMB shares [0], a simple time tracker [1], and a semi-sophisticated tool for helping me managing PXEBoot symbolic links[2].
Currently I'm working on, albeit slowly, on a tool for organizing Pocket (https://www.getpocket.com) items.
[0]: https://github.com/hbayindir/smb-backup
https://chrome.google.com/webstore/detail/crypto-prices-in-y...
The things that I use (or used to use) a fair bit though:
- a whole set of tooling to take my FLAC/ALAC music collection and transcode it to 256k AAC for my phone (including generating an iTunes library XML file I can just import into Music.app)
- tools to automatically scrape content from various websites and alert me / automatically download things
- a client for SchedulesDirect to feed into tvheadend
- various little game-related tools (often to edit data files)
- a slideshow app
- a Formula1 news aggregator
- tools to pair with RTL-SDR to scrape the readings from my neighbours' temperature sensors
- a simple webui to libvirt
- a game boy emulator (this was really fun!)
- a transparent tls proxy to evade geoblocking - uses the SNI hostname from ClientHello to push traffic to different VPN endpoints so I can watch things like F1TV live from the UK
- tools to scrape the DSL stats from my modems when I used to have DSL for diagnosing faults
I also write a ton of small scripts for work use - eg:
- a tool to allow me to pick ECS containers from a list for aws ecs execute-command
- wrappers around the AWS API to generate and update launch templates
Another one I'm sorta proud of being the only one using is Invoicer, a one-click invoicing app: https://github.com/DexterLagan/invoicer
Last one I'd consider strictly personal would be Todo Master, an advanced todo with calendar, preset/macro facilities for generating dev reports and tons of other features only I would find a use for: https://github.com/DexterLagan/todo-master
Oh wait, there's also Database Master, born out of frustration with MySQL Workbench: https://github.com/DexterLagan/database-master
As far as I know, most if not all of my github repos are only used by myself.
Cheers
So I guess it is actually used by one more person than me!
Two programs that to wrote just to make my life easier: one for viewing tab delimited data in a tabular TUI, and another for getting data from my server back to my local machine without using scp. The second one is actually quite handy. To use it, you start a daemon on your local machine. Then when you SSH to the server, it creates an SSH tunnel back to the local daemon. The tunnel is setup to use a Unix socket, so you don’t have authentication issues to worry about (just file permissions). Then to send a file back to your local computer, it’s just “rtun send remote1 {remote2…} local”. The best part though, is if you want to view a remote image, you can run “rtun view file1 {file2…}” and it will open the image locally (it transfers the file as a temp file and calls “open”, etc). When you generate a bunch of figures remotely, being able to open them locally from the remote command line is very helpful.
I wrote a simple app to turn an inperson tabletop conversation game accessory (pieces of paper) into something that can be used remotely in a pandemic. totpal.vercel.app
And I wrote a bunch of debugging/diagnostics tools for node.js. some for fun, some I actually needed. NPM: debugging-aid
Now I'm planning on releasing most of it as Open Source: https://nexusdev.tools
I really didn't plan on writing my own tech stack, because that's the last thing you typically do in a startup, especially if you're the sole founder. Nim has some basic web functionality in the form of Jester and Karax, so I went with it, despite Nim being relatively unknown compared to Python.
A big reason I went with Flutter is because I realized that the mobile market is huge and a lot of people want an app. Flutter can also be used on the web and the desktop. I'm always thinking about reusability of code. What I ended up with is a Flutter rendering engine which can be powered by the back-end in Nim. However the SDK is language agnostic, really, so I'm adding Python support too (Dart is included as it's needed on the front-end). Any desired language can be added in theory, as long as it can produce JSON and send it over a socket.
Windows clipboard capture to file tool. Any new image placed on the clipboard is written to a sequentially-numbered file so that I can just hit various Print-Screen key combinations or I can right click an image in a browser and click Copy to capture it.
Python / PIL scripts to arrange directories of images into seamlessly connected wallpaper images.
Lots of email automation scripts, both sending and receiving. ( Pruning spam, marking all of my unread messages read, sending alerts for blog post updates. )
Scripts to convert filenames to all lowercase in a folder.
Startup scripts that forcibly turn off Windows options that I don't want because Windows update sometimes re-enables these.
Python/Bash + Cheese - Poor man's security system. I used an old netbook with the camera pointed at the inside door of a house I used to own take a picture of the door area and send it to me via email so that I could monitor to see if anyone had been inside while I was gone for an overnight trip.
Custom RSS aggregator scripts ... sends results to me in email so that I keep a record of the articles by day.
...etc., ...etc.
I wrote an algorithmic trading bot in Common Lisp. Basically it uses statistical arbitrage to buy low and sell high.
It runs continuously so I'm not sure if that fits the spirit of your question.
Aside from various random shell scripts, I also wrote a python script that would alert me via push notifications when my plants need watering.
https://notes.probabletrain.com/
It was a handy excuse to try out YJS, as I (for no good reason) wanted it to sync live without conflicts, despite it not really being a multiplayer application. It can be opened across tabs on the same machine with updates propagating live across tabs, or by signing in with Google, can be opened across devices/browsers (with live syncing via websockets). I needed this so I could sync notes between my work and personal laptops.
Some other features:
- Keyboard friendly (but very mouse unfriendly)
- Markdown 'preview': typing markdown adds styles without changing what you typed. For example, '#' will still be visible in headings. The only markdown supported is headings, bullet points, and inline code.
- Good luck getting any use out of it on mobile
- Is a PWA, so I can open it on Mac with CMD+Space, 'notes', Enter
It does exactly what I need it to do and nothing more, and is extremely user-unfriendly.
I'll make it public in the near future.
I personally wrote:
* Scripts to command my window manager (i3): move workspace to other screen, create a temporary workspace, move a window to a new workspace * CLI scripts to send an ascii version of my calendar to Telegram / Slack * Scripts to generate complex transactions for the accounting of my consultancy company (eg. salary with the social taxes distributed to the right accounts). I use Ledger, so I also use its Python library to read all the transactions and output benefits/expenses/... graphs with matplotlib. Thanks to the matplotlib-backend-kitty project, I can have the graphs directly in my terminal. * Scripts to send convert ePub/mobi and send PDFs to my reMarkable, also a fake printer that directly sends the PDF to the reMarkable * A Pomodoro service with the possibility to subscribe to specific events, eg. play a gong sound when a pomodoro starts
So forwarding invoices to my accountant is as easy as throwing a special label onto the email and boom, done.
Was totally worth automating, been using it for like two years now.
I've spent <10 hours on it and did it to learn some next.js & preact, and as a bonus, people have been using it.
Another useful one was an Alexa skill to pick which kid at random had to do something (like get their shower first). Leaving it up to chance felt fair in a way that “JFC, it doesn’t actually matter!” didn’t.
I do have other things as well, some on GitHub some not. A scraper to notify me when a local gym booking website changes for a time I’m interested in. A bridge between a BroadLink RM4 and HomeKit for some fans [1] - I wanted to avoid home-assistant. A script to grab my power consumption data. A shim to make gpg-agent compatible with launchd’s socket activation protocol [2].
[0] - https://github.com/benpye/wsl-ssh-pageant
1) The most used one: An iOS app that I use to push myself articles from RSS feeds. I can send notifications via post request to a webserver (similar to services like Pushover). On the device I can select to read later or read directly. Inside the preview of the notification I have placed a WebView so that I use rich html content as preview. The app itself is a RSS reader that I built to learn SwiftUI [0].
2) More recently: A cron+python script that fetches the current queue from my sonos. It creates a list of viral songs and creates our flat-charts from the songs that either myself or my flatmate have added to the queue since last execution of the script.
3) An iOS app to help me create timelapses by taking one photo per day. For instance, I used it to create a timelapse of a blooming tree in spring. It uses OpenCV for image alignment.
4) An iOS app to track my camera setup for film photography [1], and a small flashcards iOS app I use for language learning [2].
5) A website with a covid map of the region i live in (because there was none).
[0] https://apps.apple.com/at/app/newsflash-rss/id1487449663 [1] https://apps.apple.com/at/app/film-logbook/id1520402017 [2] https://apps.apple.com/at/app/cardsflash-flashcards/id159183...
https://chrome.google.com/webstore/detail/scout/hgljpodblkjj...
Possibly the most useful for others is a small wrapper around pdftk that splits a PDF file into smaller ones based on the "bookmarks" (the chapter annotations that many PDF readers show as outlines in a side bar).
I've built tons. Most of them don't stick for long. One that has is a file-cabinet organization tool - https://github.com/robacarp/place
- it moves files into place within my filing system - renames the file so that even if it's moved _from_ the filing system I can see where it came from (eg sent in an email) - uses a custom TUI engine I built for this specific task https://github.com/robacarp/keimeno
----------------------
Another is a clean, bare bones, web-extension mode "picture on a new tab" extension. When I came back to firefox a few years ago I couldn't find one amongst the clutter on AMO so I put together https://github.com/robacarp/photographic_start
* cli tool to diff changes to a branch since the last revision you looked at when it has been rebased (only if you haven’t git gc’d!!)
* use fzf to choose from pulseaudio sinks/sources, changing the default and applying it to all current audio streams (ex.change mic or to headphones)
* change the default linux webcam by renaming devices, runs as a udev hook.
* various arch tools. Automatically download mirrorlist and enable the fastest 5 sources. Download/extract a package from the aur. Fzf multiselect all of the .pacnew files, vimdiff them, and delete the .pacnew files for files that changed. Also my own install script with choices for ext4 or zfs.
* use mplayer to play a video as the background on all monitors. I downloaded several 10hrs of ocean/forest sounds and alternate between them.
* tool to convert restructured text to html email in mutt
* using xargs to parallelize updating my most common config repos
* index all git repos on disk, then either fzf choose from or choose best match and cd into it. Not my idea, but I love it so much!
* makefile for my i3 config that looks at avail displays and gives me 10 monitors per display with the same hotkeys (like dwm).
* choose from several presets and recompile st with a different colourscheme.
* categorize all of my bank transactions to monitor my spending over time.
* a cli DM with different Xorg configurations and window managers (music keeps playing, fuse mounts retained). Useful for multimonitor games that require different setups.
* wine, proton scripts to manage prefixes and cd to common windows directories within them.
So,so many more.
1) backed up simply by storing in Google Drive (no special servers or DBs)
2) was principally for Markdown, but capable of storing entries of any type
3) dispensed with any form of folders in favor of tagging and a powerful search, using only the filename to store the tags
I couldn't find anything I really liked, so built https://github.com/mieubrisse/cli-journal . Haven't needed to modify the code in 2 years and it's still working great.
I'm currently (lazily) working on Montu, a terminal app that will read in a Markdown checklist and allow you to check things off with Vim-like bindings while editing the underlying checklist: https://github.com/mieubrisse/montu . It started with my desire to automatically check off the parent checkbox when you check off the children, and grew from there.
- Text snippet app to reply to support request emails. Use this to reply to about a dozen emails each day. I have over 300 snippets.
- App to got through a folder with my bank statement PDFs and produce a number of transaction and investment reports (calculates IRR and other metrics).
- An app to simulate all possible portfolio combinations for a given set of assets (this was before https://portfoliocharts.com)
- An egg timer that you can start before you set the time right after you put the eggs into the water. Those seconds are precious. Wrote this as a gift for somebody.
- App to generate monthly invoices for my app sales.
- A nice frontend to manipulate csv files.
While I was looking for an apartment, an app to look for new listings and notify me right away (often the nice apartments would already be gone by the time the daily email reached my inbox).
A workout timer. Simple app that tells me the time every 15 seconds. Throws in the occasional Tony Horton quote for motivation.
Oh, and a personal notes app, of course!
Of the ones I use every day:
* Parallel downloader (https://github.com/ThomasHabets/rslurp)
* Email client (https://github.com/ThomasHabets/cmdg)
* sudo replacement with phone auth: https://github.com/ThomasHabets/sim
* Custom frontend to youtube: https://github.com/ThomasHabets/yurate
* Scan-to-google-drive (https://github.com/ThomasHabets/autoscan)
* My own RSS reader (not published. It will never be end-user friendly enough to compete with other ones. But it's better for me)
And then plenty more than I use occasionally, and some I no longer use. E.g. for a while I used my own SSH replacement, in order to get TPM-backed keys (https://github.com/ThomasHabets/tlssh). Nowadays I use yubikey instead (https://blog.habets.se/2016/01/Yubikey-4-for-SSH-with-physic...).
Those are just the main ones (as in not small, and used every day), and ones that fit what I assume your criteria: ones with no expectation of users other than me. I find myself fixing problems all the time by writing code.
Browser based game where you try to pick two matches cards. When the pandemic started, I played this a lot with my kids (they were better every time). Got tired of shuffling cards and laying it out and I wanted to learn Javascript, so.
https://github.com/richsuca/memorygame
#2 Grade 2 Spelling Practise
My daughter had to learn spelling of a few words every week in Grade 2. To help her test it, I wrote a Windows desktop app that would say the word and she had to spell it.
https://github.com/richsuca/SpellWell
#3 Bulk Tag Remover from Pinboard
I had too many tags that it became useless so I had to retag all my links in Pinboard, the website doesn't let you do it in bulk so I made a Windows desktop app (also wanted to try out XAML).
Stock research platform using relatively cheap ($X00/yr)fundamental data & free pricing APIs.
Had a fun "fight" with a major pricing website for a game. When your (rate-limited! trying to be nice!) crawler needs to turn to OCR to defeat css spriting and they're leaving comments in the HTML though... a bit too combative. Fun project making it work though.
Any game with an economy I end up making stuff for. Personally, I wish games weren't so hostile to automation or user time these days!
I also once SaaS'd a weird file format translator thing on heroku for myself; sometimes old formats or algs do really just disappear!
I've made some small modules for my MagicMirror but haven't had inspiration on further stuff for that just yet.
I made attempts to extend it to various org-chem concepts, but it quickly became far too difficult in terms of modeling the molecules and reactions at that point and I quickly gave up on it. That taught me a valuable lesson as a budding developer: Some problems are just too hard, and the sooner you realise, the better.
I have a web app called Tamarind (acronym for throwaway mail alias randomization is not defeatable). I can create randomized e-mail aliases there which instantly go live. Likewise, delete them. Each entry is associated with a memo field that can contain URL's (these get rendered into links). Also a date of creation. The UI lets you edit the order: selecgt entries by checkbox and move them up and down, or to the top or bottom. There is a regex search box. It can authenticate the user using SASL or IMAP4. It works by editing a mail aliases file; your mail server has to know to include that one. It can work with the main /etc/aliases; Tamarind will avoid modifying any parts of the file it doesn't know about, confining itself to the area between its markers.
I found that everything else will overwelm me time and time again.
I really wanted to publish it for others to use. Without any serious subscription or payments, maybe patreon.
The "problem" is, that I'm based in germany and you can't just have a website, that integrates other peoples content without having a good lawyer, I guess.
Plus it would be a really good idea to block any scripts that feed creators put in their stuff to f*ck with other peoples systems. But you're not allowed to change feed content, or at least that might be a concern. Not to speak of if people subscribe to illegal stuff and you show it on your site (even only to them), maybe?
Too much uncertainty, so I'm nearly sure I will stay to be the only citizen in this neighbourhood.
Power on / off home theater device and set inputs Power projector on / off and set inputs Make calls to both at the same time working together Call AppleScripts to control music playing through the stereo from a connected Mac mini
I also built a tool for a friend in Bash and AppleScript. It watches a list of his favorite streamers and then calls to the Downie video download app to begin recording their streams. He runs it on a headless Mac mini checking each person in the list every two minutes.
Of all the things I've made for myself or others, these are the two that would most resemble a user-facing GUIable end-product.
edit: a letter
Sounds dumb but is surprisingly useful.
Most are just one-off utilities to solve a problem. Some people would do them in bash, or python, or PowerShell. I do them in C#, because I know it well, and can code it without thinking...
A Few 'Big' programs I've written are:
- Custom SMTP server to proxy in front of an Exchange Server - ran 24/7 for over a decade until last year when I migrated to Exchange Online.
- Gopher Client for Windows which people actually use! [1]
- A application launcher/dock thing that sits at the top of my screen with drop down menus for apps sorted into categories, because I cannot stand the windows Start menu.
- A similarly useful transparent current-month calendar that sits in the bottom right of my screen at all times, which saves me having to click on the clock to find out what date 'next Wednesday' is etc.
- An RSS reader in PHP that I use multiple times a day. It's different to most others in that it only shows the current items in the live RSS feed for a site - it has no history. I prefer that, so I don't get anxiety with unread items.
A nice recent one that's only been in constant use for a few months is a Python script that dumps all the data from my weather station and logs it into a MariaDB table. I'm not doing anything with the data just yet, just collecting it. Once I have enough back history to play with, I'll write a web app to display it all nicely.
I could go on and on.... my 'Source Code' folder is massive, full of useful stuff, and half-written ideas.
Oh, and I'm actually not a programmer by trade,
---
[1] http://www.jaruzel.com/gopher/gopher-client-browser-for-wind...
- Web page diff notifier with various heuristics, sms/email notifications, screenshot logging, and js page support.
- Linux keyboard macro tool.
- Dozens of scripts that I use daily to automate parts of my desktop, eg detecting where my laptop is plugged in (or not) and change the display setup, backups, grabbing the local weather report from the most reliable source, etc.
- Simple password manager with Google Secret Manager as a backend.
- A whole bunch of user scripts that fix issues on web sites that I use frequently.
- One or two browser extensions that also fixes web sites. Keyboard shortcuts for the HBO video player. Intercepting requests for certain web sites to swap some calls to a different backend.
- Fork that adds some features to a screen locker.
- Random name generator based on Markov chains in combination with user input and randomness.
And many more! It was fun to see what others are doing, thanks for sharing, everyone.
https://verhovs.ky/unicode-debugger/
https://github.com/verhovsky/unicode-debugger
It's probably not completely correct and there's probably issues stemming from the fact that text in web browsers is UTF-16 not UTF-8, but I've used it to quickly figure out that someone's input wasn't being parsed correctly because the spaces were actually non-breaking spaces for example. It can be used for noticing when some text has a letter that looks the same but is actually a different letter than you think (homoglyph attack) or to see what makes up an emoji.
1. https://github.com/hamon-in/invoice - A command line invoicing system. I wrote this to handle invoicing for my freelancing and later my company. I wanted to build something similar to ledger-cli for invoices and use a single sqlite db for all things including config
2. https://github.com/nibrahim/Calligraphic-Rulings - I use this to generate rulings for my calligraphy practise and wrapped it up as a tiny web app. http://calligraffiti.in/rulings. The logs suggest that a lot of serious calligraphers use it for their day to day work.
3. https://github.com/nibrahim/Hyde - I wrote this to manage my blogs which were on Jekyll/Octopress
4. https://github.com/nibrahim/showkeys - I wrote this to allow display of keys on the screen while recording technical screencasts. I was recording a series on Emacs at the time
5. https://github.com/nibrahim/IOS-config-mode - I wrote this while working for Cisco to make editing of IOS config files easier for me. (abandoned)
6. https://github.com/nibrahim/tomobi - Something to convert websites into kindle files for reading offline (abandoned)
There were a few others that never saw the light of day but these were the ones I wrote and still use/used. There are also several smaller shell scripts, makefiles, elisp snippets etc.
So I created a script which took a screenshot every 100ms, it scanned the image and checked the cards I had.
If the cards were bad (e.g 2h7s), it clicked "fold" for me automatically
But the most interesting ones I have are the ones that do illegal things. Like download things from other countries, store them on a remote box, do everything behind a pseudonym not associated with my personal online profiles. A lot of NFT mining stuff, so everything becoming available and its prices (if guessable), some of this stuff I share with a small circle but I am not stupid so I don’t like sharing any of this code and it’s not even on my primary computer. Just sits in a nondescript raspberry pi. One of the more illegal but traceable ones was with crypto trading (where I was inflating the price of a coin by a few percentage points), I had to stop because it could be tied back to me.
The two I'm most proud of are a web analytics that, coincidentally, I've made public today after a few weeks of work:
https://github.com/a-chris/faenz
I developed it for collect data for my personal website and it is working well so far, really happy of it.
The other one is a Google Chrome extension to manage bookmark because I think the default one is a mess and very unpratical to use. I haven't worked on it for a while:
Mostly these are written in Object Pascal via Lazarus and compiled natively for the target platforms, or they're web apps written in javascript and/or PHP. Many use SQLite for data storage; some just use an .ini file if the data is simple and not too volatile; a few are written against a MySQL back end.
sitesync - Program that could sync files and folders on local file system and remote (FTP or SFTP). Mainly used to help maintain a web site that other people were also modifying. It allowed me to develop on my local copy and push changes without clobbering anything someone else had changed. (Unpublished)
erudite - [0] - Pull articles from Instapaper or Pocket and add to your ebook library (including Hacker News integration that includes URLs for corresponding posts!)
bday - [1] - The super simple birthday and anniversary reminder program. Wrote for myself but several family members also like it. Originally on Windows and then ported to Linux as well.
moviesschedule - [2] - Tracks Australian movie release dates and can even maintain a Google calendar of the movies you are interested in.
coffeegrinder - Java program to help fold automation of coffeescript compilation to javascript. Included optional GUI for viewing javascript version updates whenever the .coffee file was saved. (Unpublished)
bom - A little web-site and FTP scraper to retrieve local weather info from the Australian Bureau of Meteorology. (Unpublished)
bgdicecalc - Little GUI program to easily figure out probabilities for various dice rolls in Backgammon. Want to convert this to a web-page some time. (Unpublished)
feedme - Web-site scraper to create RSS feeds of various comic strips (e.g. Dilbert) with the image directly in the feed. (Unpublished)
[0] https://github.com/evmcl/erudite
"garden" is kinda like a mashup of the flexibility/power of shell scripts with the convenience of being able to declare your development environment.
https://github.com/davvid/garden
I was kinda surprised when someone submitted the first issue =)
https://github.com/davvid/garden/issues/1
git-cola was pretty much written for my own personal use but it grew a few more users along the way.
I made my own IP finder site because most of the online ones are terrible (https://justyourip.com/)
I think most of my programs are just automating things I use regularly, but isn't that the point of software, really?
- my TV loudspeaker is frequency corrected by a microcontroller (so that the sound is better) and is connected by Bluetooth (using an ESP32)
I originally wrote a web app to track my finances in 2003 using classic ASP and T-SQL. In early 2017, I rewrote it from scratch, still using T-SQL, but with C#.NET and jQuery. Lets me review my budget, ensure my net worth is heading in the direction I want, make sure all my payments get made, and ensure my account balances never get too low (with a light forecasting element.)
Ideally I'd open source it, focus on the API documentation so anyone could write a back end, and iron out a few more front-end bugs, but since it gets the job done for me, the motivation never quite strikes me.
[1] https://devlids.com [2] https://github.com/niorad/Skewbacca-Native
A few I remember: The FinalKey, hardware device that acts like a keyboard, is a password manager.
OSGG, a lander game I actually want to play.
Chromogen, a bash script that generates lovely static image albums.
"sovs" at work, which fetches a fresh source tree because our procedure requires calling multiple programs with multiple parameters.
Lots of one-off things to fetch something out of some file or do some task on a set of files, for example, I made a utility that let me batch cut video files by giving a list of start-end times.
My memory fails me, and I think it means I should probably be better at keeping those utilities around and organized..
Unfortunately I no longer have access to that API. The last time I flew I did this process manually and slowly discovered I should leave on a weekday and leave on a weekend for the best flight.
I'm one of only two users as far as I know. It's in a public repository, but I doubt anyone has used it. Personally, I use it nearly every day, and it has enough features that I rarely have to use GnuCash anymore.
The app isn't the most beautiful thing in the world, but it works just well enough to be usable.
References
I wanted tool where I can zoom in using the mouse wheel and have the zoomed clip extracted. Needed the basic features of HUDL (https://www.hudl.com/), but the generated videos are local files and not controlled by HUDL.
Another UI tool I wrote and use is a tool that scans a directory for JPEG files and uses the EXIF data to create a hierarchy of directories in
I haven't used that approach to money in a couple of decades, but it was very useful for a while.
I started using python scripts to invest in the stock market when nobody did that and earned some money.
I modified a digital hygrometer and thermometer so I can register the temperature cycles inside and outside my house. I also do it with my plants in the garden.
I reverse engineer all my GPS(garmin) clocks so I can store or upload GPS coordinates and tracks without some stupid and inefficient web app that the manufacturer controls for me.
I reverse engineered and hacked the routers from old Internet providers and posted the instructions on the internet for others to replicate.
I scan and OCR and process every single ticket and receipt... Do the same with books.
I also have friends that do the same kind of things so it is kinda normal to do those things all the time.
You can check it out at:
Static blog generator from markdown to HTML - Golang
Selfhosted HTML LAN dashboard - PHP
GPIO garage door opener on a PI - Golang
CLI Geoip lookup from mmdb to stdout - C
SNMP client - C
Various web sites - python/flask, bare HTML/JS, Golang
User login 'guardian' daemon (time frame for kids login / tracking) - Golang
Spotify listener - Golang
Web scrapping bots - python
Reverse regular expression (regex pattern to strings that should math) - Golang
CTF score keeping/flag tracker - Golang
And many other small snippets in Perl, Python, C, shell, etc just for one offs or scripting needs.
Once I was far enough in I saw the tech could be generalized beyond my own personal use case (it is vaporware though, never got the level where others could use it)—but 99% of the drive was just making something so that I personally could code without pain again.
I've built a lot of "cheat" programs for games. Ranging from full on bots to something that just gives me information to act upon.
I also built a very rudimentary market analysis program for Eve Online back when I played, to help me play the market and optimize what I would build/mine/etc.
I have a simple chrome plugin that will auto-fill a form for me with random junk. This makes manually testing a UI with forms a lot faster.
Back when I had a lot of DnD books in pdf form, I built a program that would let me create a set of bookmarks across all the PDFs. DnD likes to spread classes and spells across multiple books, so this made it a lot easier to find stuff.
I built that incrementally over 10+ years out of necessity and one day I’d like to convert it to a little SaaS and see if anyone would pay money for it. Probably not but it would be a fun exercise so I could add automatic scraping of bank/financial accounts.
I regular refer back to the README myself or test out some conventions with the tool.
Most of the code I write for personal use is for one-shot scrapers or "query this database and fiddle with that information to give me something interesting"--the only things larger in scale than that which I continue to work on are a Discord bot and... well, I had been working on a Slay the Spire mod and it's been rotting for quite a while.
Currently writing `shite`, the wee static site generator from shell :D https://github.com/adityaathalye/shite
Two days ago I realised it has no if statements! Now that is going to become a design goal ... I need to add 2 or 3 things to make it fit my requirements, but I'm going to keep the if-s out without resorting to weird contortions.
1. A minimal "docker-compose without docker" tool. That allows me to run a group of backend web services with a single command and multiplex the terminal output.
2. A browser chooser that I set as my default browser, and which pops up a UI that allows me to choose which browser (and if Chrome, which chrome profile) I want to open links in. Super handy for making sure links get opened in the browser (profile) that has the correct cookies for that account. There are other tools that do this, but they are either written in Electron (slow) or don't support chrome profiles, or don't support macs.
And of course hundreds of little command line utilities from 1 liners to hundreds of lines of Rust or Python scripts.
https://www.adama-platform.com/
In a few years, I intend to embrace marketing. However, now I am on the pathless path wandering. I'm writing a post about it, and I'm kind of fine if no one uses it. Sure, it would be amazing if others would see the neatness, but I'm not really in a space for responsibility yet.
Perhaps, I'm going slow on building yet another deck builder with it (as I'm looking into which components to buy versus build for the IDE aspect), but I'm basically retired.
I will release it one day. The algorithm is super inefficient and can be 10 times faster. But I am the only user.
View result (and save cpu cycles): https://powpowstamp.com/designer/bc807d49-3899-4969-a342-528...
Upload a design (black/white outlines works best, see example) https://powpowstamp.com/designer/
My library website is similarly jank on the level that mostly only I should use it, though I have worked on generalizing it a bit.
I host a simple API that converts web pages to markdown files using headless browsers and save them into my cloud storage. I can now read the pages offline and free from clutter using a simple markdown viewer or use my own personal website to read them online.
I also have an email address that converts the mails received in it and turn them to markdown files using the same headless browser mechanism. Now my local text editor can sort of act as a mail inbox of its own.
I'm pleasantly surprised by the things I could accomplish with Shortcuts (Mac, iOS) + some webhooks.
While I know many here dislike “crypto,” it’s used to calculate some details on some OpenSea NFTs I’m interested in. The details on each NFT are varied, but two of these NFTs can have their details combined to create a “more powerful” NFT. Don’t think I should bother going into more detail, but the code calculates every permutation of the details for all the NFTs to identify the best combinations. Didn’t take long to write and I did it for fun as I never compiled Kotlin down to a stand-alone executable and I wanted to give it a try.
However very few of those pass the test of time, as it is hard and costly to maintain the quality of a comercial product which has invested the time in usability etc.
Software is a lot of work, but getting started is fun and people can achieve a lot within the few hours. The last touches is where the real greatest effort has to be brought in.
This was wrapped in a MacOS Automator workflow, which in turn was wrapped by a keyboard trigger in BetterTouchTool. So now, when I hit Cmd Shift M, a Google Meeting link is created and pasted wherever my cursor happens to be!
It makes a little boing noise too when it pastes the URL which never ceases to please me.
1. HTML Form to File.txt, to quickly create a post for publishing with a static website generator like Hugo or Jekyll: https://www.simongriffee.com/work/form-to-txt/
2. Pasta Clock, for cooking pasta al dente, not al mush: https://www.simongriffee.com/pastaclock/
I had photos on all sort of old phones, old laptops, and various external drives for both me and my partner that I wanted to organize to make sure nothing is lost. This program allowed my to just run through everything and let to do all the hard work.
- Flash card generator that combines ffmpeg, waifu2x, and other libraries to upscale clipart and turn them into flashcards for use in a classroom. Sizes it for printing on a number of standard paper sizes. It was really useful for when I used to teach children.
- Tunneling script that, in a much less elegant way, did what ngrok does before ngrok was a thing.
- Backup and restore scripts to reprovision my linux computers.
- Pomodoro timer that can warn you (text-to-speech) and optionally set your monitor brightness to 0 for N minutes to force myself to take breaks.
A home dashboard that gathers information from family calendars, school timetables, weather. All this readable from distance.
A chores app (that also displays on the dash above) with info about whose turn it is to fold the laundry, get out garbage etc. It worked for some time and then we reverted back to everyone yelling at everyone to do it.
All of these already exist but I wrote them to exactly meet my needs, and nothing more. Plus I learned quite a bit about Go, TS and Vue.
Best software comes from ones own need.
Personal use is the biggest driver of my ongoing learning.
The magic here is that there is a lot of hidden, intrinsic value that comes from doing this sort of thing, which isn't immediately obvious to others, and often even you at the time.
I have noticed a trend, when creating software and technology projects for myself, which is that a surprisingly percentage of those projects end up being useful in the not too distant future for commercial projects. In ways that always surprise me.
And even without that, the skills I learn tend to end up being as valuable as whatever direct or time-saving value the script/program gives me.
I've written about the motivations and the architecture here: https://lucasdicioccio.github.io/how-this-blog-works.html .
A Python script that grabs a wireless numpad keyboard (using evdev on Linux) to be used as remote control (volume / next / etc.) instead of keyboard.
A command-line tool "t" to translate a single word using my own match heuristics and a textfile-as-dict I got from somewhere (never updated). Wrote it ~15 years ago, still in regular use.
Tons of others (sleep tracker, custom RSS reader) that I used for years, but eventually stopped using.
My kid loves logical puzzles like this one: https://www.smartgames.eu/uk/one-player-games/little-red-rid...
It comes with a booklet of 40 or so problems which she quickly solved so I wrote a program to generate hundreds more e.g. https://i.gyazo.com/329753a6da1feac287bea02ee04a4e1f.jpg
[1] https://github.com/sandreas/m4b-tool/
It usually reaches perfect usability for me very quickly, but to make it usable for others or make it publishable would take months.
Here’s an example event: https://addyourself.to/it/c047e279-f5b4-4de8-9456-3fe71a77aa...
My Python CLI tool can read data from different sources & do my job. For example, it can read data from excel using Pandas, & then open Chrome, go to a web site, do login, fill forms, submit payments, etc using Pyautogui. In some cases it uses email & cronjobs to start executing automatically.
In another example, it uses Tesseract OCR to convert PDF to text files, & interactively convert them to CSV files that can be imported to any Accounting software.
My latest is a language learning application to help practice reading comprehension and vocabulary development. [1]
Thing is, when I create a program for personal use, I go ahead and make it available for the rest of the world because why not?
I’m going to be building software to manage my kids schools science fair project for next year that I’ll also share with the rest of the world.
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.
I occasionally think about sprucing it up to offer for public use, but it's the kind of task that never reaches the top of the to-do list.
I also created a very hacky script that uses the python paramiko library to ssh to different hosts and spawn a python interpreter which runs a python function remotely for things like grabbing uptimes.
For some reason my city doesnt have an app to track buses, so I made my own (with a lot of help). Wrote it in Python, it tracks the real time location of any bus number you enter. Took a long time, but it works and now I can ping a bus and see how far away it is before leaving the house.
There's usually a handful of busses on a single route, so I sorted them by distance from my current location. It was easily the funnest project I've done
This might not be in the "spirt" of this post but your colleague might be interested in looking into Home Assistant. Don't worry, there is plenty of space for custom scripts within HA, but it might be a nice foundation for them to build on as it has energy monitoring stuff built in as well as a way to visualize it all.
https://gist.github.com/scythe/7cea80364bacf1f1ce6a67786bcbc...
Had bought his book to get into the habit, hated wasting so much paper, so decided to build a web based day planner with simple note taking.
* A script that emails me every day a list of new articles published by a selection of academic journals. Using an RSS reader for this turned out to be too messy.
* A script that generates Spotify playlists based on my liked songs, optionally according to some criteria. The playlists can be sorted according to specific song features (higher to lower energy, for example).
* A zettelkasten engine, including search, rendering, and backup of entries.
* A system to generate and upload backups of my photos from my cameras’ SD cards.
I don't consider it a program nor do I consider myself a programmer. But man, it was so satisfying to have completed it.
- An Android notes app - just the way I wanted - I never implemented sync and it was not really polished but I didn’t feel like using anything else
- An Android app that does the counting and countdown thingie and relaxation time gap between two sets or even repetitions - with voice over of course (I needed when my trainer was no longer available) - I used to set it one and then there was start/pause/finish. I could tweak the presets.
Then I started using iPhone. It was quite sometimes back.
I click on it when I start working and click when I stop working.
It is missing autocomplete, that is a work in progress.
I just don't want to deal with the burden of answering to issues and tickets, so it remains as my personal toy.
The first is a background program to monitor my kids time on the PC. As their limit approaches it pops up a window with a timer countdown. When the countdown reaches zero, they're logged off.
The second is for resizing images. I wasn't happy with the way my image editor did it, and I wanted to do a deep dive on some algorithms so I went for it. Gained some great insight while working out all the bugs.
Also, more recently. I created a simple command line program to print a password.
I.e. you enter b003q3gqbba-
and it prints it like:
1: b
2: 0
3: 0
4: 3
5: q
6: 3
7: g
8 q
9: b
10: b
11: a
12: -
What's the reason? The stupid, insecure password masking that some banks use.
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'd release it but the videos are copyrighted - the clips might come under fair use, but I don't know the law well enough to be sure)
Recently, two of those programs have been web services, which are still public... but I have kept the code to myself and it's pretty liberating in a strange way.
I just cannot deal with enterprise installations of Jira and their forced insanity/slowness. So now I get to define my own fields, categories and icons, query everything locally, and I never have to worry about it again.
Oh, and if I were using atlassian cloud I wouldn’t have lost all my issues :P
https://uguu.org/src_aoba_pl.html
I did that because `cal(1)` broke for some reason, and I felt like making some ASCII art.
I can't count how many things I've made, most of which I abandoned after I stopped needing them. Sometimes I just make a one line shell script that uses a command line util, and other cases I'll write a bigger "script" (higher level programming language" which often still leverages command line tools.
I've also written a crapload of data processing apps to scrape through or convert various data I've acquired from places.
If I can save 10 minutes of drudgery by spending an hour writing a python or go app, guaranteed I've done it
It's getting to be a pretty cool too. It has a "Scorecard" and database for boxers, and I've taken my first (shallow) dive into "Sports Analytics" to predict a winner of an upcoming bout, and it's working pretty good too.
* Converting music files dropped into a folder to a format supported by my car (on a USB stick)
* Detecting HDMI connection (connect/disconnect) and switching audio outputs based on this
* Allowing ufw to whitelist by dynamic DNS hosts
* Zero downtime deployments for web projects (written well before Laravel's Envoyer/Forge but with similar functionality)
* Detect backup HDD and prompt for password / auto-mount when connected
I wrote a script that checked the OpenReach availability API every few minutes so that when someone ceased their service (because they were moving homes) I would be sent a link to upgrade my service. I think it took about 2 weeks.
I did the same for the second-chance London 2012 tickets.
- Static site generator
- Web server that delivers live-transformed Markdown
- EPUB and/or DOCX generator
- Book library management tool
- Markov-based text generator
- Hex map renderer
- Automatic Go API generator from structs
- Automatic C# API generator from Postgres database
- ORMs for Postgres in C# and Go
- C# migration tool for Postgres and MySQL
- Seneca-style microservices toolkit for C#
- Functions platform for Go
And many more ...
I made simple script that converts DB ids output per line that you'd get from a query into a comma separated line with a one line bash script.
e.g. converts:
1
2
3
to:
1, 2, 3
Since I do a lot of querying it is very helpful. To achieve the same thing in Excel is a fucking nightmare.
The cool part is when I feed it like 50000 lines of input how relatively quick it does it.
alias onelinify="paste -d, -s -"
example usage (on macos): cat db-ids.txt | onelinify | pbcopy
I created it for me but it is somewhat popular on github with hundreds of stars already.
I had a diary that I'd written in rails and used it for a couple of years. I'd written a fretboard calculator to visualize playing positions on my pedal steel guitar.
Wrote a script to scrape pictures off an old website from the Wayback Machine.
Wrote another program that scraped some data from a posted Apple Music playlist then used the data to generate a Spotify playlist with the same songs.
I've written several other smaller things related to Arduino and lighting but nothing too special.
+----------------+
| |
+------------+ | | +------------+
| ! | | ! !| | ! |
| ! | | ! !| | ! |
| ! | +----------------+ | |
| | +-+----------------+-+ | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | +--------------------+ | |
| ! | | ! |
| ! | | ! |
| ! | | ! |
+------------+ +------------+
! = 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).
- Terminal based Hacker News reader for the lurker [1]
- Terminal based Google News reader [2]
A Tivo subscription was too expensive, so I built my own DVR software to record from Locast. Worked like a charm until Locast shut down.
I had to replace it with a bunch of cron jobs + shell scripts which record using a local TV antenna connected to a NUC.
Puts out nice little mp4 files into a NFS which I can access anywhere in the world over Tailscale.
One I made and have used for something like 15 years is a Windows tray app - I click it and the cursor turns to a dropper that let's me select any pixel on screen, then it tells me the RGB, HSL and hex code for the colour of the pixel. I'm colour-blind, so this is frequently useful.
-A script for downloading and organizing videos from my Youtube Playlists since videos tend to get randomly deleted
-An old Minecraft server plugin which generates custom made structures throughout the world based on .schematic files you provide it and configurable spawning criteria.
A SMS-as-cli that reminds me of upcoming birthdays for my friends/family without me having to remember to launch an app, etc.
I'm also adding a way to add gift ideas for folks throughout the year so I'm not scrambling two weeks before to buy something.
This way I could prepare all the content of my laptop and then upload one zip file in an internet café and have it all published. Internet was still scarce back then. It worked very well.
https://wordle-js.deno.dev - Cause there are few times when I want to play wordle the whole day
I use alpakr a couple times a week for learning about new packages, crates, etc.
Pipe from stdin and output package summaries.
Back in the day when I had a Windows phone, I used Microsoft’s Zune player to sync it - but I used iTunes for my actual library management. This was a problem because all my playlists and ratings were in iTunes and there was no clear migration path. I’m pretty obsessive about organizing and cataloging my media files so this was something I couldn’t let stand. Unfortunately while iTunes had a decent SDK, Zune had none (at least not a public one).
I basically had to reverse engineer Zune’s APIs to figure out how to synchronize things like playlists and star ratings between the two platforms. It was all a big ugly hack — on the one side using iTunes’ documented but limited COM APIs, and on the other using Zune’s completely undocumented but thankfully also COM-based APIs so I could at least try to infer some functionality behind them via reflection. It was a precarious hack as well. When it worked, it worked well enough, but any time the Zune client software updated, parts of their API would change or break and I’d have to try to figure out how to hack around them again.
All these years later, iTunes still has a COM SDK but it hasn’t been updated since 2004 so it’s stuck only supporting some of the most basic iTunes features for automation.
I can still use it for some CLI tools that I have where I can use keyboard shortcuts to set star ratings on songs without having to manually go in iTunes while using it. That way if I have a playlist going in the background I can just press one of a set of programmable keys to launch this little CLI tool to rate a song on the fly without otherwise interrupting what I’m doing. Sadly the SDK doesn’t support the newer heart ratings, or things like checking/unchecking songs from playlists.
I guess what I’m discovering from writing this post is I seem to spend a lot of time trying to automate all my weird scenarios around media management.
Lately I’ve been working on a project in my spare time to control a BLE-based robotic cat toy. The company that made it stopped supporting it and delisted their applications. This was a very expensive toy that I didn’t want to stop working because of the whims of the company. It was a big challenge - I had to reverse engineer their protocols, reverse engineer their applications, and write something new to replicate the functionality. Just to amp up the difficulty I also decided to build a standalone ESP32-based device that I can use to control the robot without even needing a phone. It’s been a big challenge working with lots of unfamiliar technology but it’s also been a lot of fun learning and experimenting with these new (to me) things.
Made a bot to check for my desired dates and times and ping me if something opens up.
The latest example is https://cashier.alensiljak.eu.org/
These days, mostly I write little Emacs Lisp programs to provide nice (meaning Emacs-compatible) interfaces to tasks I have to do at work, like setting up and managing local Docker containers and running SQL queries.
#2 I've created some handy excel macros for my timesheets that saves me tons of time I sent to my clients (like auto skipping weekends, auto-filling hours etc.)
#3 I create indie games that I actually like to play :)
A cli todo list in 40 lines of bash https://news.ycombinator.com/item?id=31034532
Creating aliases from bash history with bash https://news.ycombinator.com/item?id=31034185
I'm working on building myself a Quicken replacement that does proper double-entry bookkeeping without the horrific UI of Quickbooks.
Wrote an iOS app to help my kids learn to sing harmony (called it HarmonMe)
Wrote a translator from English to phonetic symbols to help teach an ESL class
(That said, it’s going to be made more widely available eventually, so idk if that counts to OP.)
I am considering adding IMAP or POP3 to it to make checking emails in popular clients easier
Most recently:
A webapp to track my runs, a service which creates backups of my google drive photos to AWS S3, a streaming app to monitor my puppy when we have to leave him at home (with raspberry pi + webcam).
A text editor, data manipulation and display programs, front ends for various things, an interface to play podcasts and search them using podcastindex.org from within Emacs, all sorts.
I wrote a small dynamic DNS system that I'm pretty sure no one else uses :P
Lots of scripts and whatnot, of course.
The last one was a script that let me carry over my wordle stats when NYT took it over. I also made an offline copy of wordle to be free of any NYT shenanigans
More that haven't seen regular use or which are just configuration.
I -
* track my environment, ranging from actual physical to all host metrics and logs
* write my own music software (effects, instruments)
* write esoteric systems that end up being used for interesting use cases locally
* beer boards, because I like to know what's on tap at home
* database engines, because why not?
it's just a matter of whatever tickles my fancy, from utilities I need, things that differentiate from other sound I hear, to reinventing the wheel to better understand why it's round.
The one I like most it's a bash script that order all my local pictures on a folder into year and month folders based on metadata.
Other than that, just small misc programs
ruby -e '5.times {%w(left center right center).each{`say #{_1}`;sleep 30}};`say exercise over`'
a youtube downloading and playlist system that uses yt-dlp and newsboat rss feeds of my subscriptions.
vast majority of my own code has never been seen anywhere. portion only by clients/employers because done for them. very tiny slice in FOSS projects
App: https://akgupta.ca/smart-health-cards Source: https://github.com/amitkgupta/go-smarthealthcards
I’d be interested in seeing the program that OP’s colleague has to see energy consumption per device. I want this for electricity, gas, and water. The utilities are starting to get into smart metering, but they’re not up to what I’m looking for yet, at least not my providers.
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.
https://i.imgur.com/f7KuOUy.png
A password storage app and generator I first wrote 15 years ago, then re-wrote 10 years ago.
Various Greasemonkey scripts (not sure if they count) to bypass paywalls on various sites.
It is the worst UI for pretty much anything: music, video, podcast, lyrics ...
I selfhost ... i download the spotify exclusive podcasts and host them myself to use the with overcast. They come as OPUS files, but ffmpeg to the rescue.
I pay for premium ... so i want the best experience. Maybe against their api guidelines.
My main user interface is bash, so every time I want to view a PDF file, launch a web browser, list the files in a directory, or compile a program, I write a program to do it in bash and then hit "enter" to execute it. For example:
arm-linux-gnueabi-gcc-10 -mcpu=cortex-m4 -c -Wa,-adhlns=armpapel.lst -g -Wall -Os mpapel.c
Or: ls /media/compu/E8D3-C6AF/
Or: firefox &
Or: bg
In this way I estimate I create about 32 new programs a day for only my own personal use. But in many cases I only use each one once. ^R makes it easy to use them again a few times, but in other cases I save them into a shell script to make them easier to distribute to other machines, parameterize, and maintain. The one I most often use is probably a user interface for YouTube via youtube-dl or yt-dlp that consists of a few such shell scripts.My main editor is Emacs. If I want to do the same thing repeatedly (e.g., delete a line containing the string .LVL) I create a keyboard macro with F3 and F4 (or C-x ( and C-x )) when I do it once, then run it repeatedly with C-x e. I probably write about 4 programs a day in this way.
Emacs has a M-: command to evaluate Lisp expressions, which are programs. Recent programs I have written in this way include (/ 43.2 1.7), (* 9.3 1.2), and (+ 8 3 2.50 3.50 3 7 3.50 3 1.50 4.50 6 5.50 6.50 6 3 2.50 2.50). Probably I write about 1 program a day in this way but I only use each one once. Longer Lisp programs like this can be written in *scratch* and executed with C-j or in .emacs (or .emacs.d/init.el) and executed with C-x C-e. For example, (global-set-key [f5] 'recompile). I use my .emacs file constantly every day but probably only add something to it about once a month. An outdated version is at https://github.com/kragen/kragen-.emacs.d/blob/master/init.e....
Sometimes I write bigger programs for my own personal use too.
A few years ago I wrote https://github.com/kragen/pytebeat for a livecoding performance of bytebeat in a bar. I finished writing it in the train on the way to the bar.
In https://github.com/kragen/laserboot I wrote a simple parametric 2-D CAD system for laser cutters in PostScript.
For Dercuano http://canonical.org/~kragen/dercuano I wrote a kind of shitty HTML rendering engine that generates a PDF file, as well as a simple CMS for generating a tree of HTML files from a directory of Markdown.
The other night I wrote a bytecode interpreter with a graphical display in C as a sort of mockup for the operating system of a small computer I recently got the parts for; it's in http://canonical.org/~kragen/sw/erika.git.
I've also written compilers, interpreters, ray tracers, database engines, parser generators, graphics libraries, logic circuit optimizers, 2-D game engines, etc., for my own use.
Some of the recent ones are in http://canonical.org/~kragen/sw/dev3. Over the last 9 years, according to a shell script I just wrote, it has accumulated 170 C programs, 254 Python programs, 60 HTML files (mostly JS with a thin shell of JS), 43 Jupyter notebooks, 28 files in assembly language (though some of these are compiler output), 23 programs in OCaml, 17 programs in Golang, 15 programs in Rust, 14 programs in OpenSCAD, 11 standalone JS files, 9 programs in PostScript, 6 programs in Perl, 9 programs in C++, 7 programs in Scheme, 5 programs in Meta5ix, 5 programs in Java, 5 programs in Lua, 5 programs in Forth, a program in Prolog, and a lot of etc. That's 688 programs in all, according to a program I just wrote in the browser console, which is 69 per year or one every 5.3 days. However, there's probably some double-counting there, or counting of things I started but didn't finish, or things like the copy of D3 I checked in there, and the real number might be more like one every two weeks.
Some of the larger ones are https://nbviewer.org/url/canonical.org/~kragen/sw/dev3/fir-v..., which is a vocoder; http://canonical.org/~kragen/sw/dev3/ritmo.c, a stochastic wavetable synth for an Arduino; and http://canonical.org/~kragen/sw/dev3/qfitzah.s, an interpreter for a higher-order programming language with pattern matching, flexible parametrically-polymorphic data containers, and dynamically dispatched method calls with multiple dispatch, that assembles to an executable under 1K. Some other random ones are http://canonical.org/~kragen/sw/dev3/dnsscan.py, which scans random IP addresses for open DNS servers; http://canonical.org/~kragen/sw/dev3/andnot.go, which tests the behavior of the Golang &^ operator; http://canonical.org/~kragen/sw/dev3/weemenumain.cc, which is a test program for a C++ library for an imgui-style menu system I wrote for microcontrollers that only uses a few bytes of RAM; and http://canonical.org/~kragen/sw/dev3/rpncalc.c, a four-function RPN calculator program.
But, like I said, there's nearly 700 of these, and more in http://canonical.org/~kragen/sw/aspmisc, http://canonical.org/~kragen/sw/inexorable-misc, http://canonical.org/~kragen/sw/netbook-misc-devel, and the kragen-hacks archives, so I'm not going to try to describe them all here. They're all git cloneable except kragen-hacks.