top | item 32953732

Software I’m thankful for (2021)

813 points| yarapavan | 3 years ago |crawshaw.io

509 comments

order
[+] sleepycatgirl|3 years ago|reply
Let's see.. Software I am thankful for.. there is a fair amount of such.

Anki - Software, that helped me build up habit, and made learning language an easier task

Emacs - Wonderful text editor, made interacting with system a bliss.

Nix/NixOS - Distro, that made updates a painless, and fearless task. I love it.

ZFS - Filesystem that I love, for it has many wonderful features, and they all just work. (Also cute compression)

Wine + DXVK/VKD3D - Thanks to this, I was able to completely drop windows partition, and go full Linux.

LaTeX - Thanks to it, I could have cute workflow for writing documents (And yesterday, wrote CV with its' help :D)

Calibre - Man.. what a behemot of book software. Makes anything ebook related painless

Common Lisp(SBCL) and Haskell(GHC) - Very interesting languages, with very wonderful features. I love them both.

Cool retro term - For playing roguelikes, lets me experience them in very retro, retro way.

Obviously, ublock origin, makes browsing web not a nightmare.

Aseprite - wonderful pixelart software.

There is more, but... I will stop there, to make the comment.. not too long.

[+] PointyFluff|3 years ago|reply
This was better and more thought out than the OP's blog post.
[+] barumrho|3 years ago|reply
Curious to learn, what are the differentiators of ZFS? File system seems like an invisible layer to me personally which makes me ask this question.
[+] ziotom78|3 years ago|reply
Thanks a lot for mentioning Anki! I was not aware of its existence, but it's exactly what I needed for myself and my children!
[+] dividedbyzero|3 years ago|reply
The fish shell, makes using the shell feel almost painless.

Hammerspoon, I use it to automatically switch audio devices based on context, so every call uses the best microphone currently available, window management via keystrokes, limiting media keys to Spotify, tons of other things. Indispensable.

Arduino, I don't think I would be able to tinker with microcontrollers as much if I had to write C and use obscure toolchains directly.

Solvespace, a limited but usable free CAD for simple parts to be 3d printed. Wish there was a real contender to the commercial ones though, or a free tier that doesn't smell like it's going away any time. Still very thankful that SolveSpace exists.

The Scala 3 compiler and the VSCode plugin for v3. Absolutely love the language and the experience is so much better than with IntelliJ, haven't had as much fun writing code in ages.

This will be a bit controversial, but Kubernetes, because if people use it via GKE, EKS etc. then I won't have to learn their organically grown solution to the same dozen-or-so operations problems, and I have yet to see one that isn't a hot mess in some way or other. Also anything running on top of Kubernetes won't be built the very old-fashioned vi-edits-on-server way, great for sanity.

Various modern messenger apps (Telegram, Whatsapp, Instagram's direct messages, ...) because I would hear a lot less from some highly cherished and very non-technical people in my life without these incredibly slick and fun and convenient apps. As one who's old enough to remember being dependent on landlines and payphones and letters, this still feels like a miracle.

[+] preseinger|3 years ago|reply
> This will be a bit controversial, but Kubernetes, because if people use it via GKE, EKS etc. then I won't have to learn their organically grown solution to the same dozen-or-so operations problems, and I have yet to see one that isn't a hot mess in some way or other. Also anything running on top of Kubernetes won't be built the very old-fashioned vi-edits-on-server way, great for sanity.

I appreciate this perspective. It's sane. But my consistent experience has been that the complexity permitted by the Kubernetes configuration surface area tends to be larger, more complex, and ultimately more difficult to wrangle than the complexity introduced by (reasonably coherent) home-grown systems.

I would generally prefer to be responsible for a bespoke solution, with all of its warts and pathologies, than for a Kubernetes deployment. The problems of the former tend to be at least tractable; wrangling Kubernetes to a reasonable level of availability is in my experience only possible if you dedicate your career to it.

[+] wan_ala|3 years ago|reply
I use fish as my main shell and haven't seen anyone else that has. Honestly its really good, the autocomplete feature is my favorite.
[+] alanbernstein|3 years ago|reply
Got any Hammerspoon config to share? I've used it for simple stuff for years, but recently noticed that people use it for window management, and macos' handling of windows on my second monitor is driving me nuts...
[+] barrenko|3 years ago|reply
Scala Metals team are absolute beasts, I can't really tell of other instances where it's so easy to get almost a full blown IDE out of vim so easily (as a total beginner).
[+] d3nj4l|3 years ago|reply
If you don't mind me asking, why do you prefer Scala 3 specifically? What did it change over 2 that you made such a big difference?
[+] zuhsetaqi|3 years ago|reply
Do you mind sharing your Hammerspoon config?
[+] _ink_|3 years ago|reply
JetBrains IDEs. I need to work with three different languages and it is just a blessing that every IDE works exactly the same.
[+] ziotom78|3 years ago|reply
Absolutely! I teach a CS class in my university and encourage my students to try them out. (It's a class where students are free to pick the language to use, but they usually end up using C++, C#, or Kotlin.) They seem to love the many suggestions the IDE provides about code style, and the visual clues that suggest how to use some syntax. At the end of the semester, many of them have thanked me for that tip, saying that «I would have never imagined that an IDE could teach me how to write better code!».
[+] bonestamp2|3 years ago|reply
Not to mention, there are so many helpers built in and it's one of the few pieces of software that I don't have any major complaints about.
[+] archon810|3 years ago|reply
Visual Studio Code works with many more languages, loads an order of magnitude quicker, has amazing settings sync and a rich community of plugin developers. And it's free.

If you haven't properly checked it out, you owe it to yourself to do so.

[+] billyhoffman|3 years ago|reply
Last week I learned some cool mouse and keyboard shortcuts in JetBrains, only to then discover they also did the same action in Visual Studio! No more “right click-go to definition” for me! I was presently surprised at how polished it was
[+] avl999|3 years ago|reply
Shellcheck https://github.com/koalaman/shellcheck : Shell scripts are unavoidable, you have to write one every now and then but shell is a terrible language with massive footguns around every corner. I don't write shell scripts extensively enough to remember all those footguns and even if I did, not sure I'd want to waste brainpower remembering all that archaic trivia.

Shellcheck makes writing shell scripts bearable and dare I say somewhat enjoyable. They have managed to collate all the shell scripting potholes and tribal knowledge into one static analysis tool. No shell script now gets checked in at work or on my personal machine without being pumped through shellcheck.

[+] linsomniac|3 years ago|reply
Python - It (still) makes writing software enjoyable for me.

Type annotations: Started using them this year and it allows my editor to give me all sorts of hints about things I'm doing wrong.

Typer / Click: I've been writing a bunch of CLIs this year and Typer and Click make this really fun.

Wezterm: Went all in on this terminal 3-4 months ago and it's really great! In particular I like the "copy mode" features and it's "tmux+mosh" abilities.

LunarVim: Been using it for ~9 months, and it gives me all the advanced developer features I felt like I was missing in my various attempts at a custom vim setup, without the pain.

sway / i3wm: On my 4th year using it and it just fits my workflow so well.

[+] scorxn|3 years ago|reply
I'd have to add Pi-hole to this list. Anytime I browse the web on another network, I'm reminded just how much crippling ad garbage it's sparing me.
[+] dont__panic|3 years ago|reply
I use a VPN into my home network at all times for exactly this reason.

Also useful to circumvent iOS's sorry state of ad blocking. I use an ad blocker on my device, too, but the pi-hole takes care of 90% of the stuff that annoys me.

I've donated a few times; consider buying the devs a cup of coffee!

[+] vanshg|3 years ago|reply
If you want to avoid the rigamarole of self hosting, I recommend NextDNS. It's a paid DNS service with tons of customizability (i.e. Ad blocking) and visibility (i.e. logs)
[+] tobinfekkes|3 years ago|reply
Pi-hole has been an absolutely life-saver to our household. It's typically blocking ~50% of traffic.

Using someone else's device and off my network is entirely scary.

[+] zuhsetaqi|3 years ago|reply
I prefer AdGuard Home for it’s simplicity. Used PiHole before and AdGuard Home is so much simpler for me
[+] scop|3 years ago|reply
Outside of OS & text editor (vim), there is one tool that I use countless times every, single, day:

fzf (https://github.com/junegunn/fzf)

I can only wonder how much time fzf has saved me in the long term.

In terms of "software that I don't use for writing software", iA Writer is probably what I am most grateful for.

[+] idealmedtech|3 years ago|reply
On a similar note for Windows: Everything Search. Blazing fast, super easy syntax, powerful search tools. Almost don't remember where most things are stored on my hard drive these days, since they're all just a shortcut and a few characters away
[+] graton|3 years ago|reply
fzf is awesome :)

My favorite fzf usage (but not the most often used) is this alias I put in my ~/.gitconfig file

    frbi = "!f() { git rebase -i $(git log --pretty=oneline --color=always | fzf --ansi | cut -d ' ' -f1)^ ; }; f"
So I do: git frbi (which to me means Fzf ReBase Interactive)

And then can easily pick what commit I will use as my starting point for doing some rebase work.

[+] fsckboy|3 years ago|reply
I don't know if the blame is fzf's or cygwin's, but when i used to use cygwin I would just install everything in Setup, and that meant that i at a certain point i got fzf with (what?) default config.

It was a hot mess and took over several bash/emacs control keys. It did a nice job of searching history, but I hated that it paralyzed my keyboard usage

[+] loudmax|3 years ago|reply
> WireGuard is a great demonstration of why the total complexity of the implementation ends up affecting the UX of the product.

This is absolutely true! Probably everything you could do with WireGuard you could accomplish with OpenSSL/OpenVPN, but the complexity is staggering. This makes it much more difficult to troubleshoot and far more likely that there will be an error in the configuration that could lead to compromise.

[+] Mister_Snuggles|3 years ago|reply
I'm torn on WireGuard.

Getting it set up was really easy. I think it took about an hour, which included standing up a new OpenBSD VM to run the server. Configuring clients (iOS) was pretty straight-forward and reasonable. I don't have a feeling that there's some security hole lurking in the configuration simply because there's not a lot to get wrong.

In comparison, IKEv2/IPSec was incredibly painful, especially when you also create configuration profiles for iOS and have to issue and distribute certificates. Once I understood how it worked it made some sense, but there's always that nagging feeling that I've screwed up the configuration because there's just so many options to get wrong. I've probably spent six hours, not all at once of course, getting it working and set up "just so."

In spite of all of this, I'm continuing to use my IKEv2/IPSec setup. I have not figured out how to get WireGuard to do split DNS, whereas this was a fairly simple part of the IKEv2/IPSec setup. The other requirement I have is split tunnels, but I think WireGuard can do that fairly easily.

[+] RedShift1|3 years ago|reply
I wish more developers would work on this, making sure their product works straight out of the box. Lots of software requires setting up additional things like Redis, an SQL server, Docker, a proxy server, etc... All those things are in most cases unnecessary. I understand that for high load scenarios they are needed but for small time setups it's just overkill. Make it run with sane defaults and when the time comes to scale up, then those other things can be added.
[+] onehair|3 years ago|reply
For my simple road warrior setup, 8 lines that are clearly understandable were all it took in wireguard.

OpenVPN was always a nightmare

[+] bloopernova|3 years ago|reply
Stuff I'm thankful for, in no particular order. None of these are particularly unique to me, nor are they obscure and hipster, they're just stuff I have found myself really thankful for.

powerlevel10k because it makes adding custom sections to my shell prompt really straightforward. https://github.com/romkatv/powerlevel10k

terraform because I have a job wrangling it lol

asdf because it manages versions of software for me really well and it has thus far been rock solid reliable. https://asdf-vm.com/

Emacs because it's about as configurable and customizable as my most insane requirements. And emacs lisp is very cool. Similarly, vim and vscode are also dear to me.

Factorio! because of course Factorio, it's amazing. Similarly Kerbal Space Program.

Firefox for standing up against the chrome hegemony nowadays, and for being so exciting back in 1998 with its initial open source decision.

And Tree Style Tabs, because every time I have to use a browser without it, my skin crawls at the lack of organization. https://github.com/piroor/treestyletab

And the big ones: grep, sed, awk, cut, sort, uniq, jq for all the times they've turned something incomprehensible into something useful to this tiny mind.

EDIT: oh and zsh because zmodload zsh/datetime gives me $EPOCHSECONDS which makes life so much easier to make cool prompt segments like "days and hours since last commit" and "remaining auth session time in minutes and seconds"

    # display time since last commit in days and hours
    gdate -d @$(($EPOCHSECONDS-$(git log -1 --format=%ct))) -u +"(%-dd %-Hh ago)"
[+] kazinator|3 years ago|reply
Breaks past one month, unfortunately.

I think, you want to take the difference and divide by 86400 to get the number of days. Then take the difference modulo 86400 to get seconds in a day, and convert that to hours (minutes:seconds) via strftime string.

Proof of concept:

  1> (let ((tdiff (- (time) (read (command-get-string "git log -1 --format=%ct")))))
       (match (@days @secs) (trunc-rem tdiff 86400)
         `(@{days}d @(time-string-utc secs `%H`)h ago)`))
  "(627d 12h ago)"
[+] danparsonson|3 years ago|reply
Wow thanks for the Tree Style Tabs tip, that looks really interesting!
[+] ziotom78|3 years ago|reply
Lots of good entries, I'll add a few that haven't been mentioned yet:

- ncdu, to find out which files and folders take up most of the disk space [1]

- julia, because scientific programming was never so fun and fast [2]

- midnight commander, because a TUI implementing Norton Commander dual-pane view is so useful! [3]

- lazarus, because creating multi-platform desktop apps couldn't be simpler [4]

- zstandard, its performance are awesome!

[1] https://dev.yorhel.nl/ncdu

[2] https://julialang.org/

[3] https://midnight-commander.org/

[4] https://www.lazarus-ide.org/

[5] http://facebook.github.io/zstd/

[+] sleepycatgirl|3 years ago|reply
Oh, I use ncdu too. Really wonderful tool, loving it. Also zstd, yeah, I use it on ZFS, and man, it saves me so much space its impressive, even on games lol
[+] aitchnyu|3 years ago|reply
I used Baobab which is bundled into Ubuntu to drill down and find space hogs and folders which have 100000s of files. The latter helped me shorten moving all my files between PCs.
[+] Dalewyn|3 years ago|reply
Strangely enough: Windows.

Yes, I fucking hate Windows 10/11 for several laundry lists' worth of reasons, but you know what? At the end of the day, Windows is the only desktop OS that enables me to use my computer to do the shit I need or want to do.

So long as that fundamental principle as a tool is not violated, I will forever be thankful for Windows regardless what criticism I might have for it.

[+] godshatter|3 years ago|reply
For me the list is:

  - Linux

  - gcc, vim, git, make, et al

  - KDE

  - firefox

  - yakuake (terminal that drops down like the old Quake console used to)

  - libre office

  - mpv

  - Steam and Proton (which have made gaming work very well on Linux and have contributed to the complete loss of all productivity gained by any of the above programs).
[+] vincent-manis|3 years ago|reply
Emacs. TeX/LaTeX. Classic Unix. i3. A bunch of Scheme implementations. Tcl/Tk.
[+] rs_rs_rs_rs_rs|3 years ago|reply
Software I’m Thankful For: the linux kernel and the gnu userland that's the base for the linux distributions I'm using for the last 20 years. I can't image a life without them.
[+] blooalien|3 years ago|reply
Software I'm thankful for (2022): Everything open source, even that which I do not use myself, because it's still there to benefit others, and it's there for me to learn from, adapt, etc, etc. Even bad open source software can be a good lesson in how not do to a thing, or may have some good bits worth learning from or adapting. So yeah, I'm thankful for open source software … All of it. My use of computers has been richer for it.
[+] onehair|3 years ago|reply
ffmpeg is one software that comes to mind. At first it sounds and looks complicated, but all the internet video is ran by it, and now even for small stuff I use it with admiration
[+] tezza|3 years ago|reply

  cygwin
  mintty
  stream deck
  firefox / thunderbird
  eclipse
  linux
  socat / netcat
  postgres / mysql
  ms windows (ducks)
  emacs
  ms excel
[+] unnouinceput|3 years ago|reply
Fucking finally somebody that says cygwin. Everybody nowadays is "wsl2 this, wsl2 that" but they forget that the OG, which still blows wsl2, it's CygWin. I use it for 2 decades, one of the 2 programs I install whenever I need to use somebody else (usually client) PC; the other one is uBlock Origin.
[+] danpalmer|3 years ago|reply
I have to add Django and Postgres to this. Both rock solid, stable, but still staying up to date and improving without being trend-driven.
[+] dekhn|3 years ago|reply
Mostly agree but I don't see goroutines (or go itself) as anything truly great for concurrent (many blocking operations waiting for external events) or parallel (using multiple cores to solve a problem faster than a single core could). It seems like just about everything with goroutines existed in some form or fashion in other widely used systems, but I'm always curious if I'm missing some magic.

Ultimately the software I'm thankful for is linux/GNU/python as that combination has not only ensure my continued employment, but the productivity of thousands of next-generation scientists.