Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Tools you have made for yourself?
288 points by themantri on June 12, 2021 | hide | past | favorite | 454 comments
I am looking for tools that you might have built to scratch an itch or quell a regular annoyance. My main motivation for asking is to looking a different things people may have built and a secondary motivation is to learn how they went about it. I'm also interested in tools which are small scripts or a bunch of commands piped into one another that have boosted your quality of life.

Thank you.

I have a small YT channel [1] and I used to spend 30-40 mins recording and then 2-4 hrs editing to get a final 10-15 min video.

Then I fully scripted my video editing using Python+MoviePy [2]. The time savings are sweet. I just feed it my raw video and get the finished video a few minutes later. It cuts out all the dead air as well as the parts I don't want (which I indicate in-video).

In general scripting video editing is faster and more scalable compared to mousing around and making tiny cuts in a graphical video editor.

[1]: http://youtube.com/c/VivekHaldar [2]: https://youtu.be/Bdoi7BDhrWc

I had this same problem with making screencasts! Ended up building a Mac app [0] to do basically this, find the silence and chop it out.

I started off with a script too but realized I wanted more control over the timing, and the ability to manually designate some parts to keep/cut. Initially I only exported a cut list, so you could do the final tweaks in ScreenFlow or Final Cut or whatever. Now I’m slowly building out more in-app editing features and some other automations.

0: https://getrecut.com

"as well as the parts I don't want (which I indicate in-video)"

How do you indicate that in the video?

Well, https://youtu.be/Bdoi7BDhrWc explains that with a demo.

But tl;dr-- after a segment I want to keep, I switch my background to solid green; after a segment I want to drop, solid red. (Segment == clip between two solid red or green backgrounds)

That's a really interesting and clever idea, well done.

Nice! I built something similar with automating a movie making process by pulling gifs from Giphy, convert them to mp4 with ffmpeg, stitch, add a sound track, opening sequence and credits and produce a movie, all with just a keyword. Check out my code here


Great idea! Develop this as a standalone solution. There is a huge market open for you.

That is amazing. I have wanted such a thing for recording videos at work but had no idea how to articulate the idea that was so clearly laid out for me in this 4 minute video.

I personally know a few people who could very likely be your customer,so I second other commenter: do release it as a product.

Thanks for the kind words.

Script is open for anyone to use or adapt. Credit and link back would be nice :-)


I think they mean that you should make it into a standalone product that can be used by someone who doesn't know what Python or GitHub is. So if you are ever looking for a side hustle, you have a good candidate already.

God help but even after the video i didnt understood what it does ... can some simplify it to me ?

I have not watched the video but think I may be able to help with the comprehension aspect from reading,

making videos of all sorts of stuff has been normalized

To be less wasteful of your audiences time one edits the video to remove the lowest information content segments.

When you are generating the video you may have some notion the last segment was subpar so you flash a red flag in front of the camera lens and start over, when you think it was good enough you flash a green flag.

For post processing the software scans the video and edits out everything that is not the last interval before a green flag.

I would not be surprised if it could not also recognize quiet periods with low visual activity and optionally edit those out as well.

But as I have not watched the video... I dunno This is the sort of software that could help drag me and kicking & screaming into the current reality of sharing projects ... but really I would still rather someone else did it all.

While I completely relate to the sentiment and, I'd say, similar to the usual HN crowd find products to be a goal, I've personally lost complete interest and even develop resentment/hate toward personal projects the moment I tried to make them into a product.

I think the huge shift that happens from "this project is fun/useful for myself" to "I need to integrate payment/multi-user/backups/uptime/user requested features/random uses of the product that I never thought of" is wildly underestimated!

But, that's just me, after killing more than a few projects that I enjoyed by trying to make them products...

As an oldies station DJ from back home would say, this is good stuff! The use of screen color as an in-band indicator for what segments to keep or toss is especially elegant.

One question: If you find yourself silent for some period that you want to keep (maybe while something happens on the screen), how do/would you inhibit the dead air filtering?

I've never thought about keeping silent parts in since that's just not my use case, but conceptually you could do that if you introduced a third marker (color other than red or green) to indicate "keep with silent parts".

Have you used a ffmpeg wrapper like ffmpeg-python for dealing with video? If so, how does it compare? I remember seeing MoviePy briefly in my research but found there wasn't a lot of documentation.

I believe MoviePy uses ffmpeg underneath. Have not used ffmpeg-python, but MoviePy has nice higher-level abstractions like clips (both audio and video), time functions, transitions etc that you can then compose pretty elegantly. See some of the examples on their site:


This is very cool!

This should be a monthly thread in the middle of the month — to avoid overlap with the hiring/who’s

I’ve loved getting to know our community this way

Yes! Is there any way to make this happen? Or rather is there enough interest?

I would like this!


I wrote a tool that reads numbers from stdin and outputs the percentile statistics of those numbers.



    $ cat nums.txt

    $ cat nums.txt | zstat
    p0      =       56
    p50     =       366
    p90     =       773
    p95     =       773
    p99     =       826
    p99.9   =       826
    p100    =       826

OP here. A very similar tool I built prompted this question.

I built a weightlifting workout tracker. I did this because at the time I wrote it (2014) none of the current tools fit my use cases due to the fact that I compete in the sport of Olympic weightlifting and this was still pretty rare back then. I also wanted to be in control of my data and be able to run analysis on it as I saw fit.

I began by writing a django app deployed via heroku. I then decided I wanted to rewrite it in ruby on rails because I had never worked with rails in my career and was already working on django professionally. I then wrote a react/redux SPA frontend, not for any other reason than to practice and learn those libraries. Finally, I decided to buy a VPS and manage deployments myself because I wanted to learn some basic devops stuff myself.

Building and maintaining this project I got first hand experience on building a web application from scratch, designing UX and product requirements, maintaining my own infrastructure (Linux server hardening, supporting SSL, managing my own domain, etc) and got experience in languages I didn't work in professionally. Also I got a few friends to begin using my app and immediately found where my poor UX choices were, which was pretty enlightening.

I think the experience really boosted my confidence as an engineer. I had to learn a whole bunch of new skills and become my own one person startup. In the end it helped me appreciate all that goes into building a software product and highly recommend the experience. I still track my workouts using the app and now have 7 years of data.

I’m on the same boat. I’m building a library website for biologists after seeing my girlfriend’s struggles. I have never built anything like this before, or anything at all really.

I decided to use Spring boot because I want to boost my resume and my company hires Java devs. But I’m thinking I should’ve used something more trendy lol.

I’m basically at the point of designing the REST API and I’ll have to go through the same process you went through with the front end and everything else.

It’s a lot of work and the more I progress the more I realize I don’t know, feels like running in a forever elongating hallway but it’s rewarding.

How long did it take you?

I've built stuff to help friends in the past solve issues.

One tip, design 1 functionality on the API, build the UI on it, have your girlfriend try it out and give you feedback.

She'll slowly give you feedback to improve and also ask what other things she might want.

The things we end up thinking are priority (or the fun ones we want to tackle) might not really be priorities for them.

I would work on the project every Sundays for a few hours: sometimes just 1 hour, sometimes as much as 6. After a few Sundays I had a local dev environment running on my computer to be able to track workouts in. At that point I started using my app: I would write my workouts in my phone and then when I got home from the gym enter them into the app running on localhost. After a few weeks of doing that I got fed up and decided I wanted to be able to enter my workouts from the gym via my phone directly, so I spent the next Sunday (or maybe 2 or 3, hard to remember) to learn how to deploy with Heroku. I did a pgdump of my local environment and used that to seed the "production" database running in heroku.

I think one thing which kept me motivated and engaged in the project was that I focused on getting as much value from my efforts ASAP, like a one person agile startup with a single customer (myself). Everything I added had to add some value immediately. I focused on the database modeling and REST APIs and didn't even worry about what the app looked like. When I first began using the app it was a simple multipage web application with basic HTML forms built in Django with no css (literally white background with blue text links and black text). Being able to actually use the app drove me to want to improve it and add new features.

For example: A feature which I wanted, which no app at the time had, was to be able to find my personal records by varying sets and reps. I wanted to answer questions like: What are the most pullups I've ever done in a single set? What's the most weight I've deadlifted for 4 sets of 2 reps? What is the heaviest weight I have ever back squatted for 8 reps? I had the data, I just had to build it into my app. So the first feature I added after being able to create workouts was the ability to look up previous bests. Every time I would workout I would look up my previous best in the app and try to beat it. Being able to track and set new personal records in the gym kept me motivated in my workouts, it was pretty thrilling seeing my project actually pay off for me personally.

An elongating hallway is a good analogy. Every time I found out there was a new thing I had to learn I would be stressed out and overwhelmed, coming up against a hard edge of my knowledge. I would then read a few articles and do some googling, and next thing I knew I was successfully doing the things which originally stressed me out! In my previous comment I mentioned that doing this project increased my confidence as an engineer, which I think was caused by repeatedly bumping up against my limits and then surpassing them.

Thank you for your reply!

That’s an awesome experience and I am taking the same approach. I don’t have a front end yet either.

The thing that keeps me going is looking back and feeling comfortable now with things that a month ago I thought “I have no idea where to start, the quick start guide means nothing to me, how does this work? Why is it like this?” And now I’m like “oh yeah that makes sense” and I can read other people’s code better

I did something very similar using via a flutter mobile app when that was pretty new, and I also still use it every time I lift multiple times per week. Well done!

I once wrote a script to record the Tinder profiles I swiped left and right on, then fine tuned a CNN using the data and integrated it into an automatic swiper. It swiped right on my now partner!

I am both impressed and horrified.

I find it so interesting that you did this! Have you blogged about what you did? I’d love to read it. On one hand it has viral feel good ending (net current partner) but it also seems like something you’d cool criticism for so I understand if you’d prefer to keep the details on the down low.

That’s awesome, is the source available?

Why release the code when they can fine-tune it and make money off other people looking for love on Tinder?

I operate a long-form nonfiction website, and back in 2012 we wanted to introduce a podcast episode version for each of our articles. I started tinkering with making recordings, but I suffered from the cringe of hearing my own voice, which was amplified by hearing every mistake and retake.

I finally got past this problem by rolling my own audio recording software. I paste in the script, and the software highlights one sentence at a time. I tap a key to start recording that sentence. If I make a mistake or I'm not happy with how it sounded, one key press discards the audio and restarts the recording. When satisfied, one key press moves it to the next sentence.

When I'm done, I can download all of the recordings into one merged WAV, and I never have to hear any bad takes (it also trims 0.1 seconds from both ends of each sentence's audio so the key press noise is removed).

It's a little clunky, being home-grown and all, but it works great. Recording stuff is pretty easy now. I keep thinking about making it available to the public, but it's not yet polished enough for that.

This is a fantastic idea. I’ve found that nothing is more annoying than to get through like five minutes of a take when recording a video and then having to redo it because I slipped up. I would love to be able to write a script, be prompted a few sentences at a time and then have it stitched together seamlessly. You need to refine and market this. If you could do this with video you’d kill it.

That’s so cool. Any chance you’d be okay sharing the script?

This is a little embarrassing, but the tool is actually browser-based, powered by Javascript and PHP. I know that's not the ideal foundation, but those were the skills I had at the time. I do have a copy of it online that I used to demo it for a friend.

Being browser-based is not really a problem for me, because I run it on my local dev server and everything is instant. But over the web it has to upload each wav file to the server, which can be slow depending on bandwidth. It does however indicate when uploads are in progress so you can avoid interrupting it.

One of the ways the tool is unsophisticated is that it's designed for a single user. So anyone with the login can see/hear others' recordings, overwrite them, etc.

Anyway, if you're still interested in seeing it, just email me at: alan at [my HN username] dot com. I can send you the URL, username, and password.

A fiend of mine works at an Audio Reading service and they have wanted to improve their volunteer recoding workflow for ages. This sounds like it could have potential for them, and js / php might even be better than alternatives in their case.

Honestly, I like the idea. Sounds great and easy to deploy!

> it also trims 0.1 seconds from both ends of each sentence's audio so the key press noise is removed

If you wanted to, you could probably use something to wait for sound level to drop, and then cut until the silence ended. Although a fixed cut probably works fine, too.

Or trigger on key up? Though I suppose maybe there's a slight sound still when the cap hits it's maximum travel if it releases the switch before that?

I would think key up is going to be noisy, plus maybe you need a bit to compose yourself before you start speaking.

Agreed this is really neat! A couple months ago I had to make a product demo and it took way too long because I kept having to re-record bits.

Really hope you opensource it.

I had a major bike accident, shoulder dislocation that took weeks to recover and broken pinky.

I couldn’t type with my left hand, but I couldn’t afford not to work. I looked into one-handed keyboards, found a variety of half-keyboards that mirrored the other half while holding the spacebar. These are patented, and I also couldn’t afford them.

Being patented, I was also unable to find software offering the same. So I learned enough Objective C to build it for myself. It was a hacky, crashy mess but I never intended it to be production quality… so I also built a monitoring app to relaunch it when it crashed.

It wasn’t anything special but it got me through that recovery!

There's also qmk's swap hands feature [1]. Qmk doesn't run on any hardware but if it does the possibilities are pretty much endless. Glad you made it through though and don't need it any more :)

[1] https://beta.docs.qmk.fm/using-qmk/software-features/feature...

It’s cool to see this in software now! My little hack was useful enough for me but I didn’t bother taking it any further because I didn’t want to fuss with patents.

why was Objective C the solution for the tool you built? can you explain more what the product/output is and how you use it?

Objective C because that was the most viable option for native Mac development at the time, and I needed access to keyboard events system wide for it to be useful.

What it did was listen for keydown/up events on the spacebar, and swap the system keyboard layout to a horizontally reversed qwerty layout while the spacebar was held for some (arbitrary based on what felt right to me) duration. When released it would restore the normal qwerty layout.

This made it relatively cognitively easy to treat my right hand as a reversed “left” hand and use my touch typing muscle memory while I was unable to type with my actual left hand. If I remember correctly, I took a typing speed test and it was ~70% my normal two handed touch typing speed, which was good enough to keep working while I recovered.

Whilst learning classical Arabic it was a pain when reading to search through the Hans Wehr dictionary by first extracting the root letters of the word and then looking up the root and then finding the correct form.

So I put together a frontend [1] to search a scanned version I found of it. It has now evolved in to an offline PWA, which you can search from Arabic to English and English to Arabic, convert numbers in both classical or modern Arabic form, stem words etc. When searching in Arabic it removes affixes, prefixes, suffixes and also uses multiple stemming algorithms to obtain the root if an exact match is not found.

It's pretty neat and makes reading so much easier no matter what device I'm on. It's also used by other professors, teachers, students and friends who are also in the classical Arabic field.

[1] - https://dictionary.ilmwaa.ml/

Great! Adding it to my favorite dictionaries.

Let me know if you've got any feedback, suggestions or feature requests.

I couldn't find results for the Arabic verb: يعيب or its past form عاب. It means something like criticize. Any tips?

Well you've found an عيب in the dictionary! Currently it uses a single dictionary, Hans Wehr, which doesn't contain that word (I've checked in my physical copy also).

In my backlog is adding additional dictionaries to fill in where Hans Wher is lacking, with next in line Lane's Lexicon. Hans Wehr is a good dictionary for students and contains approximately 90% of the words they will encounter in their first few years of studying. The issue I'm having at the moment is that both dictionaries are structured differently and it requires some manual work to unify their structures.

When searching a verb you can either search the root letters, or any other form even with affixes attached and the stemming algorithms should get the right root word.


Great. Good luck with adding new dictionaries and thank you for your efforts.

By the way, have you seen the work of Taha Zerrouki. He has produced many open source tools to deal with Arabic language [1]. Thought you might be interested.

[1]: https://github.com/linuxscout?tab=repositories

جزاكم الله

My website was originally a Flask web app which used his Arabic number converter, Arabic stemmer, Arabic normaliser and other modules. But in order to use offline as a PWA I end up porting these to JavaScript. I will release the source code once tested properly and porting is completed.

Also just going through your blog, enjoying the summary of Abul Hasan Ali Nadwis book. Keep up the good work!

Edit: Also Taha's work is amazing and on the back of that I've been creating a programing language specifically for string processing, so it can be used for stemming algorithms etc which compiles to multiple other languages.

The idea is to hopefully port Taha's work over and hopefully benefit communities of other programing languages.

Hit me up if you're interested!

Yes I'm interested in that and would like to know when you release the source code.

And I'm glad you visited my blog and liked that post :)

That will definitely be useful for students, especially some of my classmates.

Is this open source? If so i may contribute where possible Also, a feature request (if your taking them) is a vocabulary learner and a way to test yourself and mark your progress.

Not open source at the moment but may do in the future.

That definitely would be useful and something I'll hopefully add.

You can email me at dev [at] dictionary ilmwaa ml

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

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

The amount of woodworking jigs and tools people develop on their own is fascinating. Some of these woodworkers on youtube spend more time creating jigs than actually building things. Matthias Wandel for example is a wizard. It's really similar to programming tools. Often, tinkering is more fun than finishing large projects.

The guy from "Aging Wheels" at YouTube, who by the way is a former software engineer, has a second woodworking channel channel called "Under Dunn". The last video was about a DIY Centrifugal Dust Separator [1]. It was a pretty cool video.

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

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

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

Was going to post something of the same type as you =)

Also made a wooden tool to check bicycle wheel dish that is used when lacing my own wheels by hand.

I don't have photos of mine right now, but it is inspired on this template:


1. I wrote a thing that logs the currently active window primarily for Ubuntu. Useful if you bill hourly and want to track total time spent.


2. I use markdown files to keep notes. So i made a couple of scripts to keep that organized. It can quick add new notes and create indexes.


3. No longer live: I made a printable forms builder. In a previous company we had to make custom paper forms for registration for every client so I made a thing that made nice printable forms.

4. A thing for estimating Trello cards. You would import a board. Then invite people. Then everyone could estimate all the cards without seeing other estimates. The owner would then see everyone's estimates and could accept an average and automatically tag all the cards with something like "effort: 3".

If you're interested in 3 or 4 email me and I can dig them out.

5. I made a few customizations to Jekyll including being able to publish posts from external folders.


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


Thank you!

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

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

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

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

Thanks for sharing!

It's all client side. The entire database of error messages is downloaded up front and searched in JavaScript. The database is just a JSON file that I put together with some scripts to parse a few header files and other documentation. The whole thing is fewer bytes than a typical news article page these days, so why not download it all up front? I wish more sites worked this way.

"tell me what tools you've made and i'll tell you who you are." Really.

Probably i make one sw tool per month - whatever annoys me enough to go over the lazyness treshold.

Most of my toys (made last 25+ years) stay at https://github.com/svilendobrev/svd_bin

https://github.com/svilendobrev/svd_util (python stuff)

apart of the bigger ones there with own repos

most used stuff seems:

* shell wrappers/configs to make using terminals a more humane+repeatable thing. A system (="language") of plenty of aliases and shortcut keys, for many combinations of x-terms/shells, so regardless of which one it is, it gets same human interface. Remember 4dos? there. F2 is dir/ls..

* similar thing for vim. F2 for save. ctrl-f for find. etc..

* vcs.sh - similar thing for 5-6 revision control systems


* sound files searching/cutting/diffing - searching one record within another - think recognizing start and end signals of some radio show, cutting it out from several alternative recording sessions - e.g. digitized analog vs http/rtmp streams; and diff'ing the results ; the timeline can be warped a lot (Wow and flutter, yes, with some charts out)

* hundreds of others.. some of them i dont remember anymore what they were for :/

have fun

I'm going to take a few hours out over the next few weekends and go through this. Thank you for sharing!

I was annoyed by the seemingly over-engineered tools for screen tracking, so I wrote one myself in ~50 LOC, which simply uses ffmpeg to create a screenshot every X seconds in a very low resolution:


It's super hackable and gets the job done.

I have an unorthodox system of things which is all quite interdependent. I prefer to just adjust things as I go. I know I'm reinventing the wheel at times, but I would rather a more personal UX than a UX for the lowest common denominator.

I have a variable loader that I can use in scripts/programs so that I don't have to hardcode filepaths and so I can change settings quickly. Variables can refer to other variables, even in parts of them. I can quickly insert references to those variables into scripts/programs with a shortcut key.

There is a note taker: a shortcut key immediately opens a blank file (which is named the date + time + a short unique ID to avoid any clashes).

There is also a note reviewer: It shows the next note to refine. I can postpone any that are uninteresting yet incomplete for whatever duration, and archive any which are complete and can show up as relevant matches elsewhere in my system. This stage allows me to deal with bits and pieces at a time, and review things I'm still working on. It avoids hierarchical constraints on purpose, and it breaks things down into tags instead.

I have a sort of data representation in which I can note how things/concepts are linked, and also express doubt, references, references to references and so on, to allow expressive representations of thoughts including incompleteness or ambiguity.

I have a music player that devalues a track every time it is not played in its entirety. The faster it gets skipped the more it gets devalued (and there are meta keys to add more weight). If a track's rank doesn't meet a random threshold then it gets skipped. It basically stops the listener getting too used to a track even though they may like it.

> I have a sort of data representation in which I can note how things/concepts are linked, and also express doubt, references, references to references and so on, to allow expressive representations of thoughts including incompleteness or ambiguity.

Could you tell us more about this?

I use it mostly for memory completion. If something comes up in my mind and it's older than a few years, and I have no idea what prompted it, then I just record it and anything in relation to it.

Some things I am not sure about so I prefix them with a question mark. If I'm not sure about the spelling of the word itself then I start the word with a question mark.

If I was with the thing itself in the experience that a memory is referring to then there are no reference marks as prefixes (the symbol I chose may not have been the best choice), but if the thing was mentioned etc. then I put however many reference marks as a prefix to express how many jumps I was away from the thing referenced.

So there are groups of things that act as a placeholder.

When I am reviewing, sometimes I can quickly look at the placeholder and jump to a memory that is even 'fainter', and sometimes see what I think is the reason why the thought re-emerged in the first place (usually what seems to be residual curiosity).

Sometimes it prompts me to quickly search for a name so I can see what the person looks/looked like etc. That way, labels that keep resurfacing become more than just empty placeholders; they become contextualized. It's basically just declaring curiosity, and I can just leave it as a placeholder if I don't care to explore it any further at the time.

I also find it good at exploring situations I feel embarrassed or awkward about. When I write, I cut out any grammar, emotions, concern for style or correct wording, and just focus on what things I have associated with them, so that I can do more to 'see' a situation as it was, regardless of how I felt/feel about it. I think that has helped me a lot in accepting how things are.


This is a small script made to do one thing: take an SQL query from the clipboard and output a CSV file with results.

As a data analyst, part of my job was sending results of ad-hoc queries to a bunch of people on slack. The data warehouse was quite slow, so I had to:

- write a query in DataGrip (or any SQL client)

- execute it

- wait for results

- remember that there was a request for data

- save the results to CSV file (with my mouse)

- send it to the person on Slack who asked for it

With many requests per day, many of them concurrent, this was a problem.

With this tool, I just had to write a query, make sure it works, copy it to clipboard and execute:

  vertica-query-paste | slackcat --channel some.person
and not worry about remembering to send it afterwards.

I also had an alias in my shell set to

  vqp=vertica-query-paste | pv -l
and a bunch of shortcuts for slackcat for people that most often asked for ad-hoc query results.

It works with Vertica, but can be generalized to any DB engine that has a CLI client.

Really simple, but probably saved my many hours.

I think the solution works for you now but wouldn't be better if you move those recurring queries to a dashboard that people can check the results themselves whenever they want?

A couple years ago I moved somewhere where my only internet option is satellite (HughesNet). The data caps are pretty low (50 GB per month) but if you use data on the “bonus zone” (midnight to 8am IIRC) you get an additional 50GB quota, so I wrote a tool that lets me queue up YouTube videos to download in the middle of the night. It’s a pretty simple collection of scripts that shell out to youtube-dl. I wrote it in TypeScript just because that’s what I was writing at work at the time: https://github.com/dylanscott/downlater

I’m still using it often a couple years later, though I’m hoping my Starlink pre-order will come through soon and render it obsolete.

There’s a lot of anecdotal evidence that starlink isn’t ready for prime time. If you have trees, forget about it.

I have a pretty clear view of the sky so I’m hoping for the best. HughesNet is barely usable for anything but basic browsing and the plan I’m on is more expensive than Starlink to boot.

Saw this today and thought of you stranger.


Indeed. I'm only encouraging you to go in with your eyes open, rather than discouraging you from trying altogether. Internet quality is definitely one of the downsides to living outside of major population centers, and I do respect HughesNet for managing to provide internet to so much low density space. I hope that starlink does become a solid competitor in these regions though once the kinks are worked out.

Starlink has an app to measure obstruction levels:


I'm saying this half in jest, but what about just mounting the antenna on a really long pole? Or on the roof.

IIRC it requires a very wide angle of visibility to the sky. I'm not an owner, I just read some articles about the issues a couple months ago.

I built a tiny Windows desktop app to hide files on my lap top from anyone who might be using the lap top briefly - visiting in-laws, friends who wanted to check email, etc. Building it was triggered by a nosy but technically un-savy sister who was always poking around.

This was about 8 years ago and I use it on all my machines since, even work ones. It 'hides' files by randomly renaming a folder's contents and removing the file extension. Simple, but surprisingly effective.

I called it Cloak My Stuff.


Consider creating a dedicated user account for guests

Agreed, that's the entire point of user accounts... to hide sensitive information and restrict access.

why use OS-provided functionality when you can write you own? :P

I have never contributed much to open source, but my high water mark was writing reportdhcp, the first available tool to report the status of DHCP pools. I wrote it because I needed it and none existed that I could find anywhere. It got packed into a few distros. After only a few years it was replaced by better tools (and in fact, I was even proud of the fact that the author of one specifically called out that it was better than reportdhcp). Got written up in Linux Magazine and one other publication at the time. I'm no superstar like many of you luminaries, and in fact I wrote it with the Llama Book sitting in my lap, but it was great to contribute the open source ecosystem to which I owe a large chunk of my career.

== killUnusedTerminalsAndBC.sh ==

This kills off any open bc instances I have, and then any open rxvts I have which aren't running another program

After a day or so I can easilly have 100+ rxvts in the background, some of which are running vim, some sshed into other servers, but many of which are just old windows I ran to do something briefly but never killed off

== another config differ == Someone else on the team had a nodejs based config checker (a script which every 10 minutes logs into -- like rancid, but looking nice). It broke after some minor change in one of the 456,914 imported scripts, so I bashed together my own and dragged in a visual diff tool.

I looked at rancid but it felt rather cumbersome, and I didn't want to store stuff in an VCS, it was quicker and easier just to do it myself

== vlc multiviewer == I wrote a VLC wrapper in python using a VLC Gtk widgit to give me a multiviewer so I could monitor multicast RTP streams and easilly mute/unmute from a touchscreen

== continuous pinger == Just a program to sit in the background pinging a list of servers continuously, traceroutes every 10 minutes, and storing them, then a webpage to show the results and summarise them (highlighting any losses and pinpointing the exact second, etc)

== multicast test tools == A couple of quite python multicast send/receive tools to check connectivity. The receiver can also dump out an output and generate a jpeg from the contents (using ffmpeg), and ties into monitoring to ensure that the streams are all working and we haven't had something like pim dying on a router (which has happened in the past)

== cheese.sh == Loads up mplayer to cheesefm and logs what's played (ICY Info lines) to a text file (having first rotated the last one)

== sshold == To ssh into old cisco switches. Barely a script

  ssh -oHostKeyAlgorithms=+ssh-dss -oKexAlgorithms=diffie-hellman-group14-sha1 $@

At least rxvt can run in daemon mode so you don't pay a full penalty for each instance, but it's still a bit OTT. Why not tmux for your ad-hoc terminals. Less likely to forget about them and they're easily managed.

> killUnusedTerminalsAndBC.sh

How do you ever find anything if you have 100+ rxvts open? Do you just open new terminals all the time and never go back to the old ones? (Have you heard about terminal multiplexers?)

> Do you just open new terminals all the time and never go back to the old ones

Yes. If I'm in a firefox window looking at an email, I'll hit alt-enter, do my task, possibly one of several open windows (I often end up with 4 quarter rxvts on monitor 1, half screen browser on monitor 2, and a half width rxvt on monitor 2).

When I finish whatever I'm doing the windows tend to get lost in the background and I reap them later.

A window sill-desk/laptop stand. I could place my laptop on this and look out the window at the same time whilst working. At the place I used to work we had some awesome views of the mountains, especially on the upper floors. I couldn’t stand staring at cubicle walls, so I would take breaks to walk around and see the amazing views. Eventually, I made the sweet desk. I could have my laptop on top with a wireless keyboard, or put the laptop below. I cut it to the dimensions of my height and where I like to rest my hands. There were some silicone strips/bumpers underneath to keep it from slipping or sliding or scratching the wall. Pics: https://photos.app.goo.gl/VJLQqUhzHjPt4uCB8

Sounds dumb but I go camping a lot and still want to access various informational APIs when I’m in limited cell reception areas so I built a bridge that allows me to hook my APIs up to text messaging. I just send a text like “news” and get the latest headlines over sms. It works pretty well even when I don’t have data access I can still usually get the text messages back.

Very cool. When I was travelling around Canada I also wanted a sms 2 api gateway.

3G/4g data was expensive and reception limited. But sms was free and unlimited, and more widely available.

I’m working on turning it into an online service - shoot me an email to recurry@outlook.com and I’ll give you a free unlimited account if you’d still like something like that.

I have so many of these things that I use daily.

I made a CLI password manager in Bash. It grabs random bytes from /dev/urandom, filters out the non-ASCII, then GPG encrypts with my key. Months later I realized I had reinvented the common utility 'pass'.

I made a utility to type accented characters on Linux. I learned to type French on an English keyboard under windows as a kid using Alt + 0NNN where NNN is the decimal character code. I made a delightfully hacky solution: when I press Alt+0 a tiny window is popped for a fraction of a second to capture the next keystrokes. If they are 3 digits, it spits out the relevant character into the active window. This one is also in bash.

The car share service I use got rid of their web interface. I reverse engineered their android app and created my own unauthorized web app so I can find available cars.(evofinder.ca)

I built an embedded device that connects to the door buzzer in my apartment so I can let myself into the building. It's built with a cheap esp8266 dev board and programmed with the arduino IDE, yet it has been running reliably for years.

I built a mobile trivia game web app that is simple and lightweight with no ads or tracking. I made it pre-COVID to kill time when I was out and about. (Justtrivia.fun)

If you want more info about any of these, check out https://jeremypoole.ca/posts

I am the original author of LatexMk[1], a Perl script that runs Latex the correct number of times to ensure all cross-references and such were resolved. It can also run continuously with a previewer and several other goodies.

I wrote it around 1993 to scratch my own itch, adapting it from a little script called “Go” by David J. Musliner. At the time I was using a literate programming tool that generated Latex from C code. When I moved on from that job a couple of years later, I released a final version two, which documented that I was no longer planning to maintain it. Since then John Collins took up the cause and been doing a wonderful job from what I can tell from occasional ego searches through google and stackexchange.

Two amusing things: 1) It is the only piece of Perl code I have written, ever, and 2) I had reason to use Latex a few years later, and decided I really dislike the sheer complexity of it all. Despite that, it is surely the most enduring and widely used piece of code that I can claim credit to having a hand in.

[1] https://www.ctan.org/pkg/latexmk/?lang=en

> I had reason to use Latex a few years later, and decided I really dislike the sheer complexity of it all

I'm not sure I understand what 'it' refers to in this sentence--is it LaTeX or LatexMk?

Also thanks a lot for LatexMk. When I was a course assistant in undergrad I used to live-TeX lecture notes and I couldn't have done it without LatexMk. Students loved the notes and I made sure to let them know about the Perl script that made them possible :)

it = LaTeX in this case.

Not trying to diss on those who like it. It's just not for me.

I have recently developed my own terminal-based UI for todo/task tracking [1] in markdown files because I was sick of rearranging todos in other tools.

The main advantage is that you can "migrate" all unfinished todos to a new page/day and thus get a clean start each day. This idea comes from bullet journalling.

To get it done I had to dig a bit into ncurses, which turned out more interesting than I thought. For instance, Windows Terminal just gained support for bracketed paste a couple of months ago and my tool supports it.

[1] https://github.com/coezbek/rodo

Stack: Ruby, Curses, Markdown

I'm also learning curses but went the LuaJIT ffi way and it's been a blast!

LuaJIT ffi allows me to load the ncurses shared library and use straight C to call whatever ncurses functions I want, or write light lua wrappers. I've been breaking my head thought over separation of concerns, coded myself in a corner a few times already but mixing the UI with the data...

I wrote a command line journal called 'did' that shows me what I did on this day over the last five years (like a 5 year diary). I enter a ton of items every day which all end up in text files. Only items including an asterisk will be repeated back to me in future years.

Inspired by: https://news.ycombinator.com/item?id=17538697

Do you have it public somewhere?

Not sure whether this meets your "definition of a tool" but I started tracking my investments publicly a couple of years ago here


The GoogleFinance Function has been a great way to help me "visualize progress" in a very different way compared to default visualizations provided by stock brokers

I have also tried to keep track of analytics more manually but hope to find some time to automate later (if you wanna help, lmk :)).

Basic metrics like the following: Hit Rate: % of investments that had a profit / Loss Rate: % of investments that had a loss / Size of Avg Winner / Size of Avg Loser / Expected Value of Investments / Win to Loss Ratio / Avg Holding Period / Opportunity cost analysis (eg: what is the stock price say 12-24 months after I sell?)

These basic things would help the individual investor get a lot more insight than they can easily get today.

This is really neat. Love how you’ve segmented separate portfolios based on risk/investment hypotheses. Thanks for sharing!


Yes, I believe that many investors are in a hurry to concentrate their investments. I prefer taking a large number of bets with high upside potential, thereby getting the benefits of diversification but also a decent expected value.

Are you updating it as you invest or irregularly? Last investment seems to be from April.

Yeah, I tend to update regularly, usually within a few days unless i am super busy for some reason. But since these are meant to be held for a minimum of three years, so a few day difference doesn't matter much.

The last one is actually from June, not April.

https://mark.show so I can present ideas quickly.

This is really great!


I wrote an in-terminal histogram tool[0] because... that's when/where I always need histograms.

[0] https://github.com/wizzat/distribution

This is the best thing since sliced bread, but it doesn't work for me on a recent Ubuntu. Tried with both Python 2 and 3.


  $ sudo du -sb /etc/* | sort | uniq | sort -rn | head -10
  2897355 /etc/brltty
  436966  /etc/java-11-openjdk
  402728  /etc/ssl
  251196  /etc/apparmor.d
  244732  /etc/ImageMagick-6
  219185  /etc/X11
  170093  /etc/fonts
  144084  /etc/java-8-openjdk
  131407  /etc/init.d
  117524  /etc/systemd

  $ sudo du -sb /etc/* | distribution
                           Key|Ct (Pct)   Histogram
                 9795     /etc/ssh|1 (0.40%) -----------------------------------------
  97442   /etc/speech-dispatcher|1 (0.40%) -----------------------------------------
            9592  /etc/sysctl.d|1 (0.40%) -----------------------------------------
      9461        /etc/update-manager|1 (0.40%) -----------------------------------------
          9438    /etc/locale.gen|1 (0.40%) -----------------------------------------
         9376     /etc/libreoffice|1 (0.40%) -----------------------------------------
             92   /etc/host.conf|1 (0.40%) -----------------------------------------
              91  /etc/networks|1 (0.40%) -----------------------------------------
         9077     /etc/libblockdev|1 (0.40%) -----------------------------------------
                  9074    /etc/pm|1 (0.40%) -----------------------------------------
           9013   /etc/bluetooth|1 (0.40%) -----------------------------------------
             890  /etc/gshadow-|1 (0.40%) -----------------------------------------
              890 /etc/gshadow|1 (0.40%) -----------------------------------------
                8894      /etc/skel|1 (0.40%) -----------------------------------------
                  887     /etc/rpc|1 (0.40%) -----------------------------------------
The indentation is all janky. And it's not sorted how I'd like.

That's why every Python project should have a Docker image.

For the indentation, have you tried using the option -g (--graph)? That does the trick for me

I haven't - thank you that works!

Wow, I didn't know I needed this but after looking at it I realized I do.

I built a kanban board with two goals:

1. Dark mode by default

2. Dead simple

I am looking to make a couple of WPF projects over the next couple of years and wanted to track them but found all the online Kanban tools missed the mark by miles in one way or another: in particular, they were all far, far too complicated.

So I built my own: https://allthetasks.com

It's not long up and missing a bunch but it works and scratches my itch :)

Edit: Oh, almost forgot. It was also to use some of the stuff I don't get to use in my day job... we tend to just build something and ship it as fast as possible (development speed, not application speed) so I wanted to make something as small as possible and fast as possible too!

https://www.npmjs.com/package/tavuelo - I've created own Vue.js table plugin because I was so annoyed with customizing another table from UI library for the 100th time to achieve similar result so I've created a dedicated solution that will cover most common problems/requirements I need to develop at work.

https://github.com/writteli/writteli - I've created static site generator because I've wanted something that suits my needs for 100% and I won't need to "fight" with the 3rd party solutions to achieve what I want. Also I've wanted to learn something during the process. I'm using it on daily basis to maintain my website (https://lukaszkups.net) and also now I'm working on a desktop app that will be compatible with it.

https://github.com/mrmnmly/scaffolder - I was sick of creating boilerplate code over and over again when I was doing my baby steps with Meteor.js so I've created a stupid simple bash script that will generate it for me.

Recently I released a webapp to fix a problem I faced. I can paste any image from my clipboard (mostly screenshot in my case) to get its base64 version so I can integrate it directly in any markdown: https://paste64.vercel.app/

It was also an excuse to try out Svelte with TypeScript: https://github.com/aloisdg/paste64

Seems like a fun learning project, but in the real world it's very counterproductive. You can obtain the base64 representation of the current clipboard contents very quickly using a single terminal shell command.

We must have very different definitions of "counterproductive". Sure, if you have mental space to remember the commands to generate the base64 via a terminal then more power to you. For the rest of us that would rather store a bookmark and/or might not always have access to a *nix environment for running shell commands this seems like a great solution. Either way it is far from "counterproductive".

This is an incredibly weird reply. "Very counterproductive"?

You hit ctrl+v and click a button using the app, that is roughly equally, if not more, convenient than switching to a terminal and entering a command.

and its sharable to the rest of the world

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

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

In an attempt to gamify my own fitness, I wrote a simple workout tracking app that used energy bars which depleted and refilled over time. If I hit a particular muscle group that day, the energy bar for that muscle group would deplete and take a couple of days to recharge. The idea was to keep all the muscle groups on cool-down. It was actually quite fun for a while. Kind of like looking at a simulated representation of your body recovering over time.

It seems like a toy compared to most of the other tools in this thread, but FWIW I have a little script I call "did":

    grep "$1" ~/.bash_history | tail
It just shows me the last ten commands that include a search term. E.g. "did foo" shows the last ten commands that include "foo".

This is going straight into my bash_aliases. Thanks!

Cheers! :)

Got tired of paying for SSL certificates on WordPress. Built a plugin that generated free SSL from Let's Encrypt: SSL Zen <https://wordpress.org/plugins/ssl-zen/> It's now used by 50,000+ websites.

I was tired of bringing up environments with multiple tools (packer, ansible, terraform, chef etc)

So I wrote a tool that coordinates tools. It's configured as a graph, more specifically, it's configured as a Graphviz file.

Here's a graph that brings up Hashicorp Consul, Kubernetes, Prometheus, Hashicorp Vault, Java private web server, Debian repository, bastion box. It brings up workers as part of the build process. The workers run the actual tools.


The graphviz looks like this: https://github.com/samsquire/mazzle-starter/blob/master/arch...

Essentially you define dependency -> depender in the graphviz file.

It runs all the tools in parallel and has a GUI.


Every night at midnight, I have a script that sends me a blank email with a smiley face as subject. It’s a nice way to very quickly distinguish emails from today, yesterday etc. and also to stunt my prior that every email I get is going to be stressful.

Tool to generate a random order of a popular food delivery service in The Netherlands. Wanted to discover new local restaurants instead of eating the same 3 things always. http://thuisbezorgdroulette.nl/

Do you have a chance to review what is being ordered? How do you make sure you're getting enough food or not too much food?

Some restaurantes like sushi for example have items that are just a couple of things and that would not be enough for a full meal for example.

This is great thanks for sharing

Cool idea!

I use NYC's bike share system (Citibike) quite a bit. Unfortunately the app's map of bike/dock availability [0] requires a lot of scrolling and tapping to get info, in my opinion. It definitely looks pretty, but it's not so functional. So, I built my own version [1] that is far more information dense, but much uglier.

[0]: https://apps.apple.com/us/app/citi-bike/id641194843

[1]: https://github.com/kevindong/bbam

I am currently learning SQL/Python, I often just wanted to know the headers and how many rows are in a CSV file, so I just wrote a small Python script for it.

  import csv
  import readline

  readline.set_completer_delims(' \t\n=')
  readline.parse_and_bind("tab: complete")

  def csvOpen(file):

      with open(file, "r", newline='', encoding='utf-8-sig')  as csvfile:
          reader = csv.reader(csvfile)
          i = next(reader)
          dRows = sum(1 for line in reader)
          print(f"You have {dRows} rows in the CSV file:\n" f"Your headers are:\n {i}")

  file = input("Please enter the filename to show the CSV   headers: ")

I also have an alias for it in my .bash_aliases.

  alias sqhead='python /home/user/Coding/Py-Code/sqlHead.py'

Nice! It could probably benefit from passing the file as an argument:

  import sys

  file = sys.argv[1]
instead of call to input()

You could probably do:

  if len(sys.argv) > 1:
      file = sys.argv[1]
      file = input(...)

Oh wow, that's a nice improvement. Thank you.

This can be done using two lines of Bash

- `head -n 1 <file>` to get headers - `wc -l <file>` to count number of rows

I was thinking about using bash, but couldn't come up with a solution to use tabcompletion when I'm in a different directory than the CSV file I want the data from, so I don'need to change directory.

Not really, not if the CSV contains quoted newlines.

what does sq in sqhead mean?

Well, it actually doesn't "mean" anything. I just needed to come up with an alias for the command, so I wouldn't need to type it out all the time.

I guess the CSV files are SQL table dumps

I set up wifi on 130 acres on a mix of solar and grid, wired Ethernet, "wireless" Ethernet, and mesh wifi. We have two shakey ISPs. I ping all network devices every ten minutes and plot the results over time. Has helped me tremendously when troubleshooting

This isn’t anywhere near as impressive as some of the examples here, but anyway:

I run an Etsy store that sells artwork. One of the most time-consuming tasks was creating the mock-ups for product listings, so I wrote a shell script that used Imagemagick to automatically generate all the images.

I was pretty pleased as I’d never written a Bash script before and it saves hours and hours of work.

I also wrote a Ruby script that uses the Etsy API to generate a fully-working Jekyll e-commerce site from my Etsy store’s listings. Much better that paying Shopify plus a bunch of other apps for pretty much the same thing.

Nice I like the Etsy Ruby + Jekyll idea. Is the repo open source?

Yes, it's open source. Here's the link [1].

I'm sure there's some sort of rule against posting code this bad on HN, bit worried it'll get my hacker status revoked :). Was a total Ruby n00b when I wrote this (still am) - haven't even worked out how to handle offsets in the Etsy API.

Anyway, it does a good job of creating Jekyll collection items from Etsy listings – here's the site I'm building with it, though it's still a work-in-progress [2].

[1] https://github.com/MattKevan/Etsy-API-to-Jekyll

[2] https://dev.thedoveandtheseagull.com

for what it is and does it's pretty alright... I mean it's a simple script to munge some data and there isn't much more you need to do with it. you don't need fully well thought out full object oriented solution with a bunch of error handling and stuff for a scraper doing 100 records at a time. one nit is that ruby generally doesn't use tabs and only uses 2 spaces.

I have thousands of images of journal entries & notes about things I want to make (music, stories, software) collected over the last 8 years. I'm currently organizing it all with tags and metadata using a Django web app. It's fun, even addictive, and I'm finally getting the insight from my own personal records that I've been hoping for.

What this looks like is gathering my data, spinning up different views and templates based on what I want to do next, using and iterating on the page while I use it, getting a new idea, rinse & repeat.

A few years back, my car was one of the millions with an airbag recall. For months, they sent letters saying it was my turn, but if I called to book an appointment, they'd say they didn't have the part in for me yet, and I had to check a web site to see if it was really my turn.

So I wrote a script that would poll the web site using curl and notify me via Slack if the status had changed. I put that in cron, and every day it would give me the airbag report.

One day it told me that status had changed, so I called and they booked the appointment.

I did something similar for the Walgreens website for my mother when vaccines were new and appointments were hard to come by, it worked pretty perfectly and we were able to schedule her an appointment shortly after she was eligible.

Though, somewhat humorously, very soon afterward eligibility was expanded to everyone in my state and vaccination appointments were much easier to find.

I missed an emoji picker for Linux. I couldn't find anything that was not integrated into Gnome/KDE or maintained. So I set out to write one myself, just a simple Python script with rofi. I uploaded it to Github, because maybe someone else also wanted that. That was several years ago, and now [rofimoji] can do all UTF-8 characters (and custom ones), works on Wayland and is packaged for some distros. I'm so happy how my tiny project turned out and how many people helped with PRs and issues.

[rofimoji]: https://github.com/fdw/rofimoji

Professionally, I (and the whole team) lost track of our deployed artifacts, as we're not on a release schedule but also not really on continuous deployment. Mainly, we released when someone noticed that a release has been running stably on staging for a while. We also needed a way to ensure our configurations were correct and to track API versions. So I started hacking together a small React app (new for me at the time) to collect and display all that information. It had a good welcome in our team, and so a colleague and I improved it a lot, added an actual backend and, for example, integrated it into our CI so that you can now see which commits happened since the last deployment and deploy through it, with just two clicks. We also automated a lot of our previously manual checks for larger deployments. It's become the main tool for that stuff, even for our not-so-technical PO.

I've made a lot of things for myself. Of the things that come to mind:

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

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

I wrote qlip [0], a stupid-simple shell utility written in 5 lines of Rust that prints your clipboard as a QR code to stdout. I used it as a clipboard sharing utility before KDE Connect fixed their universal clipboard feature. It should compile for any platform that supports Rust, and you can install it to your system in a few seconds using `cargo install`.

[0] https://github.com/toasterrepairman/qlip

That's useful for sharing links etc. with others without sharing phone numbers. Thanks.

I used to write Java tests for of asynchronous operations such as sending emails and waiting for them to arrive in a mailbox. In order to poll the mailbox I wrote a small routine that would support retrying actions with configurable intervals. At some point I extracted it into a separate project called retryJ and recently released it as open source on Maven Central [1].

[1] https://github.com/gdiegel/retryJ

I built a documentation platform [1] for work since I didn't want to worry about licensing costs (With something like Confluence) being a factor, limiting potential access, when it comes to documenting and sharing knowledge.

I also wrote a simple little PHP script [2] to check HTTPS certificates (And email results) to help keep on top of things.

[1]: https://github.com/BookStackApp/BookStack [2]: https://github.com/ssddanbrown/sslcheck

I often want to run small "experiment code" many times with different inputs, but don't like wrapping everything in a big framework to do it. So I wrote a little tool that calls any command-line program multiple times with different inputs according to a template and a search strategy [1].

Another upside is that most parameter search programs seem to assume you want either grid search (which is hideously inefficient for large search spaces) or bayesian optimization (which can be overkill and comes with its own caveats). I wanted to make it easy to use quasirandom search [2], which is basically always the right choice for small searches where you just want to understand the parameter space better.

[1] https://github.com/maxwells-daemons/argsearch [2] https://en.wikipedia.org/wiki/Low-discrepancy_sequence

As a Wikimedian who used to spend sleepless nights editing on the Malagasy language Wikipedia and Wiktionary, I have been developing botjagwar (https://github.com/radomd92/botjagwar) on and off for the last 10 years. More details at https://github.com/radomd92/botjagwar/wiki/Backstory

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

My IT guys at work somehow keep disabling the show hidden files and folders feature in windows 10. So I wrote a program that checks every 5minutes and turns it back on lol

You could update it to report when it had to actually switch it back, and perhaps find the source of the problem.

99% sure it's just a group policy that somebody switched on because "I don't want users to delete config files by accident and call me".

Your script could send your IT guys an email too, that might eventually fix the source of the problem…

Oh I have. It's a standard policy for everyone in my organization

I don't work exclusively with programmers and it's a rather large bearucratic nightmare

Try not to infer more than what is presented please.

Have an ultrasonic sensor on top of my monitor that's used as a presence sensor to tell the computer when I’m in front of it or not.

Pauses the music player when I walk away and starts again when I return.

More details here: https://www.michevan.id.au/posts/are-you-there/


I have a lot of Spotify playlists and I wanted an Alfred like tool to quickly add songs to my Spotify playlists, mostly using my keyboard. There was none out there that I was happy with, so I built it myself.

Fast forward to today, I've added a few more features I wanted for myself - auto removal of songs I skip often, auto like of songs I listen 100% and a smart playlist feature that gathers new songs from playlists I select into one separate playlist, every Monday.

cute name

Not small, but myopic in a way.

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

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

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

Do you have a community of people to bounce ideas off of? BoardGameGeek perhaps? Other niche language developers? Sounds cool. Feel free to ping me if I can help. I've made a few board games and computer games. (Contact info in my profile)

On a different note. I made my own laptop stand out of carbon fiber because I wanted specific things that I couldn't get out of the store. I am a digital nomad and finally build the thing after 4.5 years of country hopping. Got lots of interest and now working on a production run: https://www.fiberstand.com :)

Software wise, mostly scrapers for classified ads ect.

I'm super forgetful - so i made a simple website [1] to remind myself of stuff. It's useful! I plan to open source it soon too

The other thing I've built for myself is a tool to find domain names [2] (all the obvious ones are taken). It uses a ML model in the background that I trained to generate suggestions, scores them on a few metrics and calls the whois api to check if they're available. I also want to put this one online, for fun & profit.

Hope you like these little projects!

[1] https://www.remindy.me

[2] https://www.namehunt.dev

Edit: ah, i actually found the remindy.me domain name with the ml model, thought it was cute and that's how the website was born

I built a small (borderline trivial) script that I put at ~/bin/update on my regular user account on every server. Its purpose is to do whatever I’ve decided is most appropriate to keep that server up-to-date.

For most Debian-based servers, it’s approximately:

  sudo apt update
  sudo apt upgrade
  uname -a
  prompt me to hit y if I want to reboot that server now. (This is what uname is for: to orient me to where that window is connected to prevent downing a server I don’t want to.)
This pattern means I can customize it for any given server without having to remember what/why for each. (This context is for my home network; I don’t claim that this is a great practice for production workloads, but it’s nice and handy for my home network.)

My SEO Live Test Framework


Runs a lot of SEO checks (including Google Search Console Data) over your websites Static,Rendered and Idle DOM

Built it cause I can and put lots of my technical SEO edge cases knowledge in there.

I just bought your book to support your efforts (soft copy) via paypal and just wanted you to know your success page upon return from paypal is not functional. (The page you were looking for could not be found. It might have been removed, renamed, or did not exist in the first place.)

Nice I will have to have a proper look at this when i get back to work on Monday

I'm going to play with this over the weekend.

I made this for fun after watching some breathless microsoft video about AI in VS code which amounted to autocomplete sorted by popularity. I told a friend I could knock out something more useful (at the time) in half an hour. It's a ahk wrapper of howdoi designed to find code snippets from stack exchange and put them right into the code file you are editing. It is so simple but I actually found it pretty useful for learning new languages or for getting a quick reminder how to do that thing you don't use often. https://github.com/irthomasthomas/helpmecode

Can you explain what it searches for? Is it the 'I feel lucky' first code block from the first match of the search term?

How does it know the language? Window title?

I set it up with a autohotkey client and a python server. I did that because I am actually a linux user now and I intended to write a linux version later. The ahk client uses WinGetTitle to figure out which language you are working on. I wont lie, it is pretty cheap and dirty, but it works smoothly in vs code.

The python server handles the search logic and it is mostly relying on the howdoi project which already did most of the work in this area. So I send a query to howdoi and that does a normal google search (or ddg/bing if you wish) and returns me the results which I further filter down to try and be more useful.

I work in consulting and struggle to keep all of my calendars up-to-date with between company and client -- I want both domains to see my entire calendar (the union of two or more calendars). Without this I was often double booked because someone couldn't see one of my other events. And auto-forwarding invites had downsides too.

I created a tool to automatically replicate calendar events between O365 and Google calendars once given OAuth access.

Originally I built this for myself, but after a few friends/colleagues asked, I built up additional tooling around it and launched a product.


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

The original concept was in excel and VBA.

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


i’m not familiar with hydraulic models and only marginally familiar with water and mapping, but this is cool

Made something really similar to apple's recently unveiled "universal control," but from Windows -> Mac. Lets me have the mouse wander off the side of the screen if "pushed hard" and it "pops out" on the mac. It has some issues with modifiers sticking and it's hard-coded to my network IPs and screen resolutions, PLUS it requires an unrelated tool I made to actually build the thing; it's on my "open source someday" list but it's not very other-programmer-friendly.

Made lots of other things but that's probably my fave and the strongest one for productivity.

Synergy does this really well https://symless.com/synergy

And barrier is a fork of synergy before it went quasi-open source that actually works!


Nice! I can feel less guilty about not trying to finish mine. :j

I work in media and have been pushing to improve web page performance for a variety of reasons (better UX, lower bounce rate, load ads faster, higher ad CPMs, etc.)

I created a tool to show how my org (at the time) was doing relative to others, and also to apply a bit of friendly competition to motivate for improvement's:


At the time I started, I was at The New Yorker and we were in the top 20, with a Speed Index closer to 8,000. Now its in the 40-50 rank with a Speed Index around 25,000 :(

This is actually quite nice. Did you open source it?

In the category of old unmaintained tools:

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

  - https://klifter.datapio.co : Easy GitOps
  - https://klander.datapio.co : Kubernetes Compliance as Code

I made https://kontxt.io to highlight, share, organize, and discover the best parts of the World Wide Web.

People I share articles with now know the exact parts that are relevant and they can quickly skip between the highlights and we can discuss inline to maintain context. It lets me and other people publicly share what we highlight in an easily searchable way so you can find quality content from trusted sources. Want to see what resources other people like you, in this case programmers, found useful and shared. Boom! Now you can. Starting to look into something new that you’re unfamiliar with, say investing, wouldn’t it be great to see what resources other investors previously found useful? Boom! Now you can. Now imagine having this tool at work with all your super smart go-workers? Boom! Now you can. It works for PDFs, too. It’s just a wonderful research and planning tool to save, share, organize, and discuss digital information, which is a huge time saver and productivity booster. Step 1: Google, Step 2: Kontxt, Step 3: Success. :)

It’s really a multi-purpose overlay for the entire World Wide Web with unlimited use-cases. And I’ve recently gained access To OpenAI and have some cool AI stuff coming for preemptive highlights and auto generated reading lists based on interests and past reading history.

I built this tool for myself. I’m an avid reader always looking to grow my skills. If this is you, too, sign up and let’s learn and grow together.

About 18 months ago I started using Letterboxd. Also, I like Roger Ebert's reviews. I wanted both in one place.

So I wrote some code to scrape his nearly 8000 reviews from rogerebert.com and then import them to letterboxd:


(I only put the first two paragraphs of his review on letterboxd then link to his full review on his site.)

The hard parts of this were:

- Extracting the text of his reviews correctly from his site's HTML. That wasn't too terrible though.

- Matching his reviews to the correct movies on TMDB. This just required a bunch of trial and error and about 20-30 manual corrections. I employed various strategies to match by using movie title, year of review, year of movie release (if on his review, but often off by a year or two), director, producer, cast if on his review.

I also built this for myself:


I should put my bin directory full of random scripts up on GitHub. I tend to build them as I need them. They're often very simple things like:

- jqpaste -- which is just "pbaste | jq"

- jsonl [jq|gron --stream] which takes it input and if it isn'v valid JSON, converts it to a JSON string so that I can paste random log output which is sometimes a mix of JSON and not into jq or gron.

Those are just a couple off the top of my head.

ohh so random that this was you!!, i've been following the roger user for a long time

https://github.com/oxplot/pdftilecut : tiles a PDF to help with printing on small printers

https://fpx.oxplot.com/ : Tiny module that allows powering anything with USB-C

Some small scripts:

https://github.com/oxplot/gists/blob/master/flashserve : creates a QR code to transfer a file over Wi-Fi from terminal

https://github.com/oxplot/gists/blob/master/qrconnect : Read a Wi-Fi password QR code from the camera and connects to Wi-Fi

https://github.com/oxplot/gists/blob/master/qropen : Opens a webpage from QR code read from webcam

I made a webapp (sheetUI) that turns a simple google sheet into a beautiful webpage. I used it when I was apartment hunting, amongst other things. I tabulated the data of each apartment I found (fb marketplace, craigslist, etc), along with images, into a google sheet. Then I used my tool to display them as a grid of cards. There were auto generated filters on the top of the webpage that I could use to filter the cards by whatever criteria I choose.

I made it public last year and it's quite enlightening to see what people have been using it for. E-commerce, contacts, work check-ins, image gallery, inventory, workshop listing, etc.

It's not the best tool, and I don't make a lot of money from it, but I'm happy I'm providing value to others. I still keep the free version around since plenty of people are relying on it.

I'm working on a new version catering to business's internal use cases now, with read/edit/permission control capabilities. Hoping to get it out soon :)

https://sheetui.com if you're interested.

That's extremely impressive.

I wrote a tool to copy stdout from a remote machine to my windows clipboard. I alias ssh to ssh with port forwarding to a static port that isnt used anywhere, run a flask site locally on my laptop that has an endpoint for accepting base 64 encoded posts for copied data and an endpoint that has some bash function definitions for doing a curl post of base64 encoded piped data to the port that was forwarded over ssh. I have a terminal hot key which does a curl get of the bash functions and imports them.

so this on a remote machine:

some_remote_machine> echo hello | cb

Will base64 encode hello, post that to localhost:1234 on the remote machine which gets forwarded to my laptop flask site, it base64 decodes the text, then since im in wsl, the flask site runs powershell to write it to my windows clipboard.

It's good for note taking and sharing output in slack easily. I also have an alias for cbc or clipboard with command which prefixes the text with the command used to generate the output.

I made HackerCards(https://chrome.google.com/webstore/detail/hackercards/ncblkm...) to easily skim over HackerNews on chrome new tab page.

Another one is Hijri for Chrome(https://chrome.google.com/webstore/detail/hijri-for-chrome/m...), a Hijri date viewer that too made for myself for tracking ramadan fasting count.

And yes my own Chrome theme 'Space Grey'(https://chrome.google.com/webstore/detail/space-grey/cohabkm...)

I used to etch PCBs at home a lot when I was in college. I used a glossy sheet to print the PCB Gerber on it. Most times I had to etch multiple PCBs and then two things used to happen when I used the same glossy sheet again and again. They were expensive where I lived. 1. The glossy sheet would get blackened due to printing multiple times on the same side. 2. I did not have a printer so I went to a cyber cafe to print and he would charge me for every print even though I was printing on the same sheet. 3. I had to carry my laptop to manually adjust the gaps and often it got screwed up.

So, I wrote this script [0] that would combine the gerbers in a single PDF that I could print in a single go. I used it a lot and saved a lot of Money to keep the hobby alive :)

[0] http://rohitg.in/2015/04/17/BoardMerge/

I wrote https://github.com/banga/git-split-diffs mainly to scratch an itch about not having side by side git diffs in the terminal, then ended up adding more fancy features like syntax highlighting and it got somewhat popular.

Looks awesome! Also worth looking at is Delta diff.

Here's a shell script template that helps parse command-line options and informs its users of any missing commands that are required to run the script successfully:


Example script that includes the template:


A more recent version of the script template is available at:


Script to filter out records of a .jsonl file based on some property (e.g. only want records w/ a timestamp greater than 163623...):

    import sys
    import orjson
    import argparse

    if __name__ == '__main__':
        parser = argparse.ArgumentParser()
        parser.add_argument('file', nargs='?')
        args = parser.parse_args()
        expression = compile(args.expr, '<string>', 'eval', optimize=0)

        if args.file:
            stream = open(args.file, 'f')
            stream = sys.stdin

            for line in stream:
                json = orjson.loads(line)
                if eval(expression, {}, json):
            if args.file:

My last tool is WireGUIrd, a wireguard gui client for linux.


Looks great! It's always awesome to see another GTK developer out there doing their thing in the wild!

A tool for visualizing log file volume over time in your terminal [1]. Useful for quickly getting a handle on traffic patterns during a production incident. This began as a scratch-the-itch project and was also the first useful thing I made in Rust. Two itches scratched :)

A tool for visualizing ping latency as a heatmap [2]. My Macbook's wifi had developed a severe latency stutter every ~500ms that was driving me nuts when using interactive tools like SSH. It was very satisfying to visualize it and see the pattern, and it helped to narrow the list of possible causes.

[1] https://github.com/acj/krapslog-rs

[2] https://github.com/acj/pingrok

I've built jql[0] as a much more uniform and simple to use alternative to jq, with a lispy syntax.

It may seem dead, but it's not. It's just finished, and I'm using it daily.

[0]: https://github.com/cube2222/jql

Thank you, jq is always driving me crazy. If I have to get used to lisp syntax to get away from it, then so be it :-)

Also.. the fzf --preview tip you had. Thank you, it's going to save so much time next time I need to iterate trough some jq/jql/sed/awk/grep...

And finally, > It may seem dead, but it's not. It's just finished

Glad to see a tool which is "done". It's a bit sad that it's something you have to state nowadays to not be considered "dead project".

I built a music player for videogame music formats because the only other player on MacOS that supported them had a terrible UI and didn't support all the formats I wanted. I consider it a tool because I use it a ton during work to play infinitely-looping songs to help me focus.


The progression of me building the app was (over a span of maybe 7 years):

- Prototype compiling GME[1] into asm.js, generating sound samples on a webpage, and piping them into the Web Audio API.

- Turning that prototype into a desktop app in order to learn Electron.

- Giving the desktop app a proper UI in order to learn React + Redux.

- Switching to a native node.js addon to fix slowdown/memory use during playback.

- Switching to musicplayer[2] so that I could play Playstation music.

- Adding a Windows build so I could listen to music while coding on my Windows computer with the same UI as on MacOS that I had by now grown accustomed to.

- Adding a visualizer to learn how, well, visualizers work.

- Adding a piano-roll visualizer for NES music and rendering-to-video because my friends who make chiptune videos on Youtube use an old, inflexible program to make their videos.

I would say the number one driving force is that I made a tool I use pretty much every day; tools I've made that are only occasionally used never really motivate me enough to bother fixing them up, but with Moseamp every fix is an _immediate_ improvement in my day-to-day.

[1] https://bitbucket.org/mpyne/game-music-emu/wiki/Home [2] https://github.com/sasq64/musicplayer/

Nice, any music suggestions to help focus?

Something like EDM, but open to suggestions. Thanks!

Deep House for programming, for some reason. It works.

Just yesterday I wrote a command line tool I called “slice” that acts like Python list slicing for lines in a file. It’s a bit simpler than piping head to tail, and I’ve needed it enough times this week that I went ahead and wrote it in Zig. Haven’t used it yet in practice, but I’m excited to!

I have not found a good ebook reader that keeps my state on edge devices and syncs to a server my position. When I had more time to read manga I built this: https://github.com/gravypod/ComicReader

It takes a folder of webp files and remembers your page on local storage. It's not perfect but it's ok. It also prefetches the next 10 or so pages which is fine for reading on a train.

Another, tool that sends wake-on-lan packets and shutdown packets to a windows machine that allowed me to steam stream from a dedicated windows machine: https://github.com/gravypod/SteamStreamScripts

I wrote a URL handler on MacOS where I can configure rules to define which browser will actually open the URL. Rules can be configured based on a URL regex or currently open Slack workspace.

You can target different browsers, including profile (Chrome) or container (Firefox).

I hope to open source this at some point.

Is it available for download/use by others? This seems to solve a particular problem for me

Not yet! I'll probably post it here on hn as a "Show: " when I do.

I along with 50ish colleagues use a software that has ole object which can be pasted in PowerPoint. The object contains plots which can be modified for axis and zoom etc. Our reports mostly contain these plots which explain acoustic/vibration events in a car. Making a complex presentation is a difficult task considering when you paste these they don’t exactly occupy the space you want them to occupy. I made a neat ribbon toolbar using VB.net (vsto addin) that even updates over network path after PowerPoint bootsup. The toolbar let’s you resize an object and place it on the slide in a click. It also ‘activates’ the object at certain zoom level, so that they are look better.

P.s. I’m not comp sci guy so forgive me if im not using the right words here.

Oh lots. The ones that readily come to mind are my suite of tools for working with ledger-cli data.

The one that I work with most is my reporting tool, which ingests ledger-cli formatted files, dumps the resulting CSV into PostgreSQL and then provides a structure for writing reports.

Most recently I wrote a tool that consumes a spreadsheet generated by Tiller and appends transactions to my ledger files. This has allowed me to automate my ETL process down to just invoking an update command.



A web based code editor [1] that supported a small set of languages (C++, JS, Go, Python and Rust), it also supported Vim-key binding (thanks to CodeMirror), came with a localStorage based "file system", so you can save multiple file in your browser. You can get the source on GitHub [2]. To host it on your server, you'll need Docker for the runtime btw. It's pretty helpful to code when I only have access to the iPad during the weekend.

[1]: https://kodes.app [2]: https://github.com/huytd/code-playground

I built dockly - https://github.com/lirantal/dockly

An immersive terminal interface for managing docker containers to help me do that from the command line

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

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

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

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

https://github.com/learnbyexample/command_help so that I can quickly get documentation for command options. Inspired by http://explainshell.com/ but wanted a cli tool.

Fails for lot of corner cases, but still useful most of the time. Here's an example:

    $ ch ls -Gv
           ls - list directory contents

           -G, --no-group
                  in a long listing, don't print group names

           -v     natural sort of (version) numbers within text

Most recently, this websub-listener[1] to subscribe to websub feeds, mostly just to catch spacex launches. just sends a message to some slack channels, but could be extended to do a lot. Still really happy with how it's working out, maybe I'll extend it with RSS later.

I've had some annoyances with Insomnia and wanted to take a shot at making my own tool. so here's http-client[2].

[1] https://github.com/kryptn/websub-listener

[2] https://github.com/kryptn/http-client

When wunderlist was shutdown i had to find an alternative. I only used basic features of wunderlist and wanted something similar. But all options was just too much. So I built it myself. I've used it every day since. For shoppinglists and work tasks and any household tasks. It's perfect for what I want. It even looks a bit like wunderlist. Https://github.com/lallassu/doit

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

A friend and I always develop small scripts to generate stuff that's really boilerplatey in Android, basically writing text to files with node.

I've also made my own autoclicker for grindy Android games that otherwise detect in-OS clickers by basically using batch and adb to click certain spots randomly in a while loop.

Also a few batch scripts for a musician friend who's 0% technical to separate mp3 songs into instrument tracks (to rehearse and have fun) with spleeter by just dragging the file into the .bat.

Oh and a bunch of mini scripts to pull and merge stuff from one git branch to another and push it all (like dev to staging) to trigger a CI flow.

I hate blogging using markdown/wordpress so I built myself a blogging platform which lets me post via gmail. I've [Show HN]-ed it a few times now that I decided to productize it but it didn't get too many eyeballs.

Can you share the link?

https://moogle.cc/ - thanks for asking.

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

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

I have several networking devices around the country with OpenWrt on them (for example, at my mom's house). They serve different needs, with different selections of packages installed, and are not of the same hardware, so keeping them up to date proved a hassle eventually. I chose to wrap some primitive Python around OpenWrt's excellent ImageBuilder that helps me keep a declarative build configuration around in an INI-style file, and (most of the time, when point releases are released) only dial up a single version number variable to rebuild all images in parallel. The flashing afterwards I haven't automated, but that might be too much of a footgun anyway.

If you feel like taking a look, here's the source: https://johannes.truschnigg.info/code/openwrt_autobuild/


While I was responsible for running the internal CAs at $prevjob, I wanted to give (human) users a convenient and secure means to generate and submit CSRs. I implemented a browser-based CSR generator based on the great work if https://pkijs.org - a demo variant of this internal portal is online at https://johannes.truschnigg.info/csr/ and might actually be of use to someone else :)


Several years ago also at $prevjob, I was looking for a reliable way to do PostgreSQL WAL archiving without the clunky shellscripts floating around in documentation and on Wikis, and implemented a little C program to do that job. While today you're probably using something like wal-g or other advanced tools that consume the WAL for replication and DR purposes, you may still want to have a program that does one thing, and one thing well, and that is making sure WAL segments get copied from location A to location B, without much overhead, period.

That would be it: https://johannes.truschnigg.info/code/pg_archive_wal_segment...

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


(Been saving me a few minutes ever since)

That's neat. I love ideas like this that remove small amounts of friction from useful behaviour.

I have a widget on my home screen that powers on my PC, syncs to latest, compiles my work code base and sends me a push notification when it's done (10-15 minutes most mornings). I use that time to make coffee and breakfast.

It's a flutter app using Firesbae for state and push notifications. I have a smart power strip, and my PC powers on when it received power, and logs in if the yubikey is attached to it (which I leave in at night). I have a golang service on my PC that runs in the background and listens to firebase for certain events and runs the commands and posts results back

SIM Notes, a wysiwyg markdown notes taking tool, based on Notational Velocity. It's a tool I literally tailored to my needs: 100% flat markdown files, in-place rendering, no structure, no tags, but a powerful and fast search. It's my own perfect zettelkasten.

Unfortunately I had to stop working on it when I had a burnout, so it's still buggy but good enough for me to use it every day.

I'm very slowly working on a v2, with a simple localhost daemon and no Electron.


A long time ago, before Spotify had support for multiple devices where one could act as a remote and control the other, I wrote a tool called Shpotify: https://github.com/hnarayanan/shpotify . It is a simple Bash/AppleScript.

The primary usecase for me was to SSH tunnel into a media centre Mac in my living room and control music on Spotify. I released it on GitHub and it has grown a lot in popularity amongst people who like to do a lot of their computing in the shell.

I use Shpotify to shuffle and play a playlist of eurotrash/techno during especially long builds. Pretty nifty thing you made!

You're very welcome.

I made https://paymewith.xyz to share my social payments faster. Got tired of the “do you have Venmo/Square Cash/Paypal” dance.

It seems like an alternative to https://linktr.ee

Somewhat similar but much more focused on payments specifically.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact