What tools have you built to scratch an itch or quell a regular annoyance? They can be anything from a full blown application to a few commands stringed together.
I built a TLS certificate tool targeted towards my company usecase for internal certificates (developers, OpenVPN, internal certificates): https://github.com/linsomniac/rgca
It's big features are that the cert generation can entirely be controlled from the command line, config, or environment, or any combination of the above, and it has tooling for the situation where I have an existing cert but want to add or remove a name from it. It also has pre/post scripts so I can have it do things like add it to the Ansible repo, vault encrypt it, and commit it. Beats the 10+ year old script that didn't work with Subject Alt Names.
Iterations is a new way to help you generate ideas.
Creative methodologies usually combine divergent thinking (applying a stimulus to generate potential outcomes) and convergent thinking (bringing facts and data together and applying logic).
Iterations help divergent thinking by giving suggestions on how to process the output. They work as a set of guitar effect pedals to your process. There is an input, a set of ambiguous instructions that can be applied to this input, and an undetermined output created by these effects.
I translate children’s books in my spare time. One time, I got a little book called “The Wonky Donkey”, in which all the rhymes rhyme exclusively with the word “donkey”. The task here was to find the appropriate rhyme to my native language’s equivalent of “donkey” (gomar), while at the same time retaining the original meaning.
So I built a tool to find all the rhymes to a given word.
They do what they sound like. The first command will run even on Windows Server Core and Linux, and doesn't need Excel installed. It's only slightly slower than the 64-bit C++ compiled MS Excel executable at parsing multi-gigabyte files, which it can do in constant memory (streaming mode).
The purpose of this is to enable spreadsheet-driven bulk provisioning tasks where there are a lot of distinct-but-similar parameters. I added some niceties such as the ability to trim off leading or trailing spaces and blank lines to prevent objects being created with names such as "xyz ".
The Export-SQL is the twin, which dynamically adds missing columns to a table and similarly allows streaming input. Simply pipe anything from the command-line to get it into a database for indexing and querying. This will work as expected:
For general purpose queries over medium amounts of data, nothing really beats the performance of SQL Server on an 8-core laptop with modern SSD and 64 GB of memory.
I planned to open-source and publish both utilities, but there remain a couple of bugs that I could never be bothered to fix, and I'm not comfortable publishing tools that could potentially lose or corrupt data. That could make someone else's day very bad.
- [Use GPT-3 to improve handwriting recognition for Rocketbook notes](https://notesvac.vercel.app) - currently not working because I don't want to pay for GPT-3.
- [Track availability and presence in a distributed team](https://team-are-online.vercel.app) (designed for call centre staff to be able to communicate their break/availability status when the pandemic hit and we didn't have a good solution for sharing dashboards yet)
I manage multiple virtual machines, and whilst not coding, it sometimes feels that way, since you're bending a computer to your will, which is my definition of coding. Nothing more exciting than after a fresh install of Windows, and configuring the hell out of it to your liking (hardening it, de-bloating it, making it more performant, as-well as customizing it and installing choice applications to it).
Back in my Applescript days I wrote a number of small apps to remove various repetitive burdens (most have been lost to the ages), then carried on to Objective-C and shell scripting.
• "BatchPrint" : Standalone Applescript app with GUI front-end; allowed a designer to perform a query-based batch print of InDesign files. For example, "print all color ads running in tomorrow's New York Post to the 4th floor large-format inkjet"
• "GridMaker" : Applescript for InDesign; had a little bit of business logic in it to take an image frame in InDesign and split into a grid, following certain layout restrictions (specific gutter width, tag the boxes with metadata for FileMakerPro integration reasons, etc)
• "Filewrangler" : a publicly released Objective-C app for the Mac from before the launch of the Mac App Store (though it was on the store day one); batch file renaming using a custom visual filename "builder". Horizontal blocks in a chain combined to form a template for the new file name pattern, where each block represents one discrete chunk of text. Some 15 years later I still get email about it, asking if it will ever be updated for modern systems (no, it won't).
• The real workhorse tool, still in daily production use by my employer, is a shell script that turns Xcode Server into a lightweight CI system. It monitors for Github activity and creates and destroys XCServer bots as needed. With multiple servers, each can be assigned an "ID" which effectively allows them to load-balance. Only one bug report in 6 years. Alas, Xcode Server has been deprecated so we're migrating to CircleCI, which makes sense given the growth of the company.
• "Nuke the Metadata" : simple little shell script to run on files before posting them to public forums
• Various little shell and CMD scripts for Mac and Windows to do git checkout/prune trees/update submodules/etc all in one shot; return a project folder to pristine after running builds (for example)
I have the same type of script, but very specific to file types and not just a general "remove all metadata from the input file". I assume yours works the same way? How many file types can you use this on and how?
No, mine's quite brain-dead. I'm sure yours does a better job on specific file types, and I'm sure there's stuff I'm not getting, now that I think about it. But I've downloaded the images (for example) that I uploaded post-nuke and didn't see any obvious references to me or my organization. A more robust nuker might make for a nice project in my coming off-time (post layoff).
I built an HTTP stub application in my spare time. At first, I only built it for myself but at some point open sourced it. I still have a lot of fun building it. You can find it here: https://httplaceholder.org/
I built a LAN pastebin using flask and htmx. I wanted to be able to copy short text, URLS etc. to / from my laptop to / from my smartphone without going to the web. Works great. Didn't even realize that there was such a thing as a pastebin when I started it.
Two recently, one is a state machine specification tool that uses a tableview (like excel) and is an executable specification that can automatically generate code and test cases, plus documentaation, originally aimed at functional safety and burner systems, but applicable a far afield as business processes and UI design. It has an OPC server built in so you can interface the simulation with a HMI, or whatever you want.
The other I just got to useable POC last night - making process control Cause and Effects diagrams 'executable' straight off the PDF's.
Both cases I used a mix of python, PyQt, numpy and OpenCV, primarily.
I am an electrical and control systems engineer that primarily analyses and/or designs and delivers control and safety systems.
After being annoyed by most online json formatters out there, I decided to build a simple keyboard-driven one. One of the main things that I was looking for was to have it easily accessible, without the need to open new browser tabs or programs that I might need later like vscode so I enabled PWA for it.
When I noticed https://jsonformatter.com domain was not used I sent an email to the owner and he actually agreed to host my app since it was open source.
There are other people using it right now, but I enjoy using it every time I need to make a json more readable.
I use the tool to build a directed graph of the type and method usages, and to see which code is grouped into which packages. The code is rendered in a graph diagram that I can see, query, and filter. It really helps me when I'm doing code review or working on a part of the code I'm not too familiar with.
Not on the App Store anymore, but I built a Japanese-English Dictionary that would give you SRS notifications (a few hours later, a few days later, a few more days later) of words you looked up. I did this because I often looked up words, but forgot them.
I can re-deploy this if anyone is interested, I just took it down since it's pretty expensive (couple hundred bucks a year) to put an app on the app store I made exclusively for myself.
sca - scaffold a project of the day in a current folder. Only touches files. Content gets added via vim snipmate.
GTA:SA car physics editor gui in pygtk.
Batch upscaler using magick, realesrgan and rembg in node. Pre-resizes to 1mp, converts to webp.
html-to-m - convert html into mithril m() expression indented to my taste. Works as a vim filter.
Few AHK scripts (god forgive the syntax).
Few variants of update-these-vpses via sh/ssh/coreutils. Needed it because had no devops. Trying to learn terraform and ansible instead.
A dashboard for ERP software that made our life much easier when I worked at a warehouse (as a keeper, non-dev). It presented today’s tasks in a detailed list, created multiple cascades of documents with select-and-click, allowed to query qtys through omnisearch and to store cell addresses in unused fields for faster inventory. Our “terminal” was one of the quickest in a company, but nobody up there gave a fuck about some boy’s code. It was actively used by other employees for 17 more years after I left, also they asked to fix it a bunch of times after ERP upgrades. Proud.
A local webapp for doclinks, plans, motivation, remote project control. Sort of a self-launch dashboard. Most procrastinated WIP right now, wish I had it to implement it faster.
I am a game dev, so work in Windows for the majority of my time. I wanted something that would show the current working directory of my windows terminal in the title bar of the window so I could see which one was which on the taskbar and during alt-tabs, so I cobbled together a combination of publicly available doskey macros to do it.
I built a tool to conduct agile meetings like standup, sprint planning, and retro asynchronously based on my frustrations sitting through lots of poorly-run meetings: https://www.teaminal.com
Also great if your team is distributed - no more 7am/7pm meetings with your team in India!
A UI for shell commands. It started when a project had so many helper scripts that I kept forgetting how to call them, so I made this dashboard or command-runner. https://github.com/seldomU/dasdashboard
since all other Cortex debuggers sucked in some way or another (not scriptable, took too long to support new chips, too expensive, pain in the ass to use, etc)
Over the years, I've written many apps and utilities for myself or others (that didn't end up get used). These are the interesting ones I remember. Many not quite complete/usable. Other than hackerer.news none of them are 'up' and running. Some have and others haven't been published as opensource.
https://hackerer.news HN viewer (source[0]): I use daily so I can see today's top stories in reverse chronological order with mainstream topics grouped at the bottom, leaving niche/deeper stores at the top.
Qwickly[1] keyboard layout: I use all the time as an easier to learn and more comfortable to type than Colemak/Tarmak. Made macOS and Windows packages. Linux I didn't do as I'd need to do 2 for text and graphical (X11) and didn't learn how. If anyone has simple instructions I can follow, link me.
SafeQL[2]: Java type-safe SQL expression composer that reduces constant expressions and eliminates N+1 queries loading associations by always operating on set relation or array of models.
Moja[3]: Composable computation pipelines for Java: Async, Lazy, Option, Try, Result, Multi (List), Stated, Reader, Logger, Writer.
Gitgrep.com[4] Opensource SaaS version of etsy/houndd (now called hound-search).
StatusPages.me: Status page aggregator with dynamic javascript for scraping each source using selector expressions.
movies to watch aggregator: with links to sources to watch. It was hard at the time to get 3rd party deep links into streaming services so included some torrent magnet hashes. Got a DMCA phone call, so took it down. Combined thumbnails, summaries, actors(?), imdb ratings, links.
Java2cpp: Translate a moderately sized java app with test suite to C++, not 100% required final manual fixups.
Swift2java (or maybe it was java2swift, it's fuzzy now): translate Swift to Java obviously, using ANTLR4. Not 100% required final manual fixups.
Gui2log: Write an ASCII rendition of on-screen GUI widgets into an application log file when form submitted, so users couldn't complain that they saw X, but got Y.
some basic stats/ML algorithms: k-nearest neighbour, RNN back-propagation, etc?
Java in-memory DB: Small SQL-like memory tables with indexing/searching.
wwwsqldesigner: This exists as opensource and I extended it to infer foreign key relationships based on naming conventions used in a MySQL schema. It was great for zooming around a large ERD.
Quicklog: combination of distributed microservices parent/child span logging and generated high level events shown as a sequence diagram. Integrated with Loggly for full/verbose logs of selected high-level events.
Pcl2bmp downscaler: Reduce high resolution HP LaserJet (PCL5) printed to file to lower resolution bitmap pages for screen display (before retina DPI was common). It aimed to shrink same-color areas and preserve black/white transitions while reducing.
My backup script, called with ./backup, and will incrementally backup my servers on the local machine using rsync and brtfs snapshots.
The command "list" to find stuff in the current directory, recursively. Basically "find | grep". Works if you have the Python module or Java package name / path, since "." will match any character, including slashes :-)
#!/usr/bin/env sh
if [ "$1" = "-h" ]; then
exec cat << EOF
Usage: $(basename "$0")^ [--] search_string
List paths having search_string in them.
Note: options are passed to grep.
EOF
fi
if [ "$1" = "--" ]; then
shift
fi
find -type f | grep "$@" | grep -v '.pyc' | fgrep -v /target/
And "fkt", which will open the files returned by list with your preferred editor (f for find, kt for kate, because that's my editor and didn't find any fitting name for this command)
#!/usr/bin/env sh
editor=kate
if [ "$FORCE_EDITOR" ]; then
editor=$FORCE_EDITOR
fi
help () {
exec cat << EOF
Usage: $(basename "$0")^ [--] search_string
Open files with paths having search_string in it.
\$FORCE_EDITOR can be used to give the name of the editor to use
current default editor: $editor (edit $0 to change)
Note: options are passed to grep.
EOF
}
if [ "$1" = "" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
help
fi
if [ "$1" = "--" ]; then
shift
fi
if [ "$1" = "" ]; then
help
fi
list -- "$@" | while read line; do
printf "open with ${editor}? %s [Y/n/q]: " "$line"
read confirm < /dev/tty
ok=""
while [ "$ok" = "" ]; do
if [ "$confirm" = "" ] || [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
ok=y
"$editor" "$line"
elif [ "$confirm" = "n" ]; then
ok=y
elif [ "$confirm" = "q" ]; then
echo "bye"
exit
else
echo "wat? "
fi
done
done
Turns out, I use "list" dozens of time per day, I forgot a bit about fkt but I might get back to it thanks to this post because I often copy-paste results from list to open them. I had forgotten about adding this confirm prompt :-)
I'm sure there are existing, better, tools for this though.
(I've never tested them on non GNU systems, there might be GNUisms in them)
It's big features are that the cert generation can entirely be controlled from the command line, config, or environment, or any combination of the above, and it has tooling for the situation where I have an existing cert but want to add or remove a name from it. It also has pre/post scripts so I can have it do things like add it to the Ansible repo, vault encrypt it, and commit it. Beats the 10+ year old script that didn't work with Subject Alt Names.