Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Programs that saved you 100 hours?
629 points by zJayv on April 12, 2020 | hide | past | favorite | 516 comments
I learned about a ton of useful CLIs, desktop apps, and SaaS products from this thread (https://news.ycombinator.com/item?id=13887237).

But it was posted 3 years ago, and perhaps some useful stuff has emerged in the interim, hence my starting this thread.

The Z command line utility has saved me a ton of time. It remembers the directories you’ve visited and lets you jump to them with just a few characters. Almost like Chrome’s autocomplete for recently-visited directories (if you’re used to being able to type “g” to go to gmail or “n” for “news.ycombinator.com”...). For instance I can run “z B” and it’ll jump to my ~/Business directory (and “z ss” would do the same).


I couldn't do without a 'bookmarks' feature that I implemented for my terminal. It's triggered with `Alt+b`:

1. Scan an eternal history file for `cd` with absolute path except for /tmp/*

2. Sort and filter out duplicates

3. Call fzf and let user pick the desired result

4. Upon selection don't enter the directory but instead type `cd <selection>` into the prompt so that the user can navigate further using <Tab>.

What's nice about this approach is that it automatically builds your bookmarks, but only from `cd` commands where you deliberately used an absolute path.

Here's the code. It has some prerequisites (fzf[0] and ~/.eternal_bash_history[1]) and probably only works with my terminal (Xfce Terminal); it took a bit of tinkering to get it to work.

  # ~/bashrc.d/aliases.sh
  __b() { # bookmarks; props to fzf for providing examples of READLINE configuration
    local selected="cd "$(cat ~/.bash_eternal_history | grep '^cd /' | egrep -v '\.\.|/tmp' | awk '{print $2}' | sort | uniq | fzf --exact)
    READLINE_POINT=$(( READLINE_POINT + ${#selected} ))

  bind -m vi-insert -x '"\eb": "__b"' 2>/dev/null

[0]: https://github.com/junegunn/fzf

[1]: https://stackoverflow.com/a/19533853

I prefer my own kd, which is 40 dead simple LOCs of shell and is predictable since it operates only on dirs you added (which sounds like a chore but is just fine in practice)

    kd foo $PWD  # stores as foo
    kd f         # jumps to foo
    kd           # in a Ruby project subdir, jumps up to where the Gemfile is

Just updated kd with a long-time feature I wanted: tty detection!

   kd f             # => jumps to foo
   echo $(kd f)     # => outputs foo's path
   # some creative, if nonsensical, examples:
   cp some/file $(kd foo)/app/controllers/whatevs
   cp $(kd bar)/Gemfile $(kd foo)/Gemfile
   kd foo && cd app/controllers && cp $(kd)/config/whatever .
This is useful and possible because kd's output is stable and predictable: it always returns the last prefix match of the kdrc file (or, without argument, the project's top-level dir), and it returns non-zero rc on failure. Plus zsh will even gladly expand the result on <TAB> for double checking.

This is one of those things I set up a decade ago and it's become such a part of how I use my computer that I'm confused for a moment whenever it's not there.

It's one of those rare tools that interacts with my stream of consciousness which is one step away from mind reading.

Hehe since i got to know 'cd -' which changes back to the last directory i did not miss this feature - but it sounds interesting, and i should try it out.

You're going to love pushd and popd.

Did you mean "(...) almost like _Firefox's_ autocomplete (...)"?

I know this is OT but one of the reasons I've switched is history search that actually works.

For this particular case, I use a ncurses based file manager: ranger

Instead of z, I use https://github.com/wting/autojump, which is written in Python. This has the benefit that you can call it from outside the shell, too.

Since I also love ranger as a file manager, I wrote my own integration of both: https://github.com/fdw/ranger-autojump . It remembers where I went in ranger, and I can also call autojump in ranger.

another popular alternative I see mentioned a lot https://github.com/wting/autojump

> autojump is a faster way to navigate your filesystem. It works by maintaining a database of the directories you use the most from the command line.

VSCode, and/or Sublime Text have probably saved me a hundred hours I would have spent waiting for Eclipse to start.

Couldn't agree more.. People who say Electron (on which VSCode is running) is bloated and is slow probably haven't worked on full fledged IDEs using Java.. they consume memory in Gigabytes, are slower, at least appear to be slower, despite using native UI and takes a lot longer to open.

How often do you open your IDE though?

I switched form VSCode to PHPStorm half a year ago, and while it feels a bit slower, the improvements are so unbelievable worth it for me. It does have a taste for memory, but then again, it easily saves me a lot of time each month, so just throwing RAM at it was a no-brainer for me.

I use PyCharm and tried several times to such to vscode. I forced myself to only use vscode for 10 days.

I was relieved when I switched back to PyCharm.

Vscode is nice but still quite far away from some good IDEs.

Depends... I'll open/close a few times a day as I touch several projects. I can use VS Code for everything from db/sql, react, node and c# (.net core) projects. I also have used it for a little rust and golang.

As to the RAM, it's using around 1.2gb between vs code and the connecting server (WSL2), multiple isntances vary... but with the number of containers and VMs I'm running, I'm generally well over 16gb of use, and I have 64gb on my desktop. So even without VS Code, I have trouble on a 16gb system.

Yeah, IntelliJ-based IDEs are hungry, but even if mobile, I figure I'd just spend the extra money to get plenty of RAM, it's that good (to me at least).

I usually run 3-5 instances for different projects and it'll hover around 3gb RAM, but it appears that they share a lot of memory, closing one or opening an additional project has no visible impact.

In my case, often several times an hour. I work across 6-10 dofferent repositories. Opening them all at once is impractical, so being able to open each of the them quickly is quite important.

Have you tried multiple repositories in a VSCode workspace? It does a great job of managing multiple repos, git diffs, etc.

The problem I have with this is it makes "Go to file" functionality a bit too broad. e.g. If I want to open `package.json` I now have to choose between 10 different files. As I often `Cmd-P`, type pa, `Enter` without even looking, this makes it considerably slower.

I also have to do a lot of context switching (e.g. to review someone else's code), and being able to have a separate set of tabs (even within the same repo) is super-useful for this.

At previous jobs with less separated out code, I have taken this approach (although with Sublime Text rather than VSCode).

Agreed... deeply nested directory structures are also pretty painful.

Even in the mono-repos I work with, I'll generally open an editor per inner repo. Mostly ./feature/featurename/filename is as far as I have to open. Some of the C# projects are deeper though.

Or they have worked on full-fledged IDE's like VS 6, which starts up quickly and is super responsive even on period hardware.

Oh how the tables are turned... Coming from VS2008-2010, it's weird to see someone said Visual Studio is fast

VS2019 is pretty damn good.

I use it daily for .net coding, while i use VS code for everything else.

VS2019 is pretty fast, provided you don't use too much plugins.

Eclipse isn't a particularly good user of Cocoa, is it?

It does something completely its own (and horrible/slow) on Windows (possibly one of the 6534 equally awful Java UI packages), so I can't imagine it does anything better with iOS.

Eclipse uses SWT, which actually piggybacks on native toolkits, though I don't know if it doesn't go through some ancient version of GTK in the process.

AWT/Swing based IntelliJ manages to be much, much faster in comparison.

I think you mean macOS.

That seems odd to me. I basically never close my IDE. Sure, I might put the laptop to sleep in between or disconnect from the remote desktop server, but I rarely need the 500 MB that my IDE consumes, so there's little point in every closing it.

To each their own. It always fascinates me to hear about Java/.NET environments that massive. Do you only work on 1 project for months at a time? Do you not ever need to reboot into another OS? Is your laptop power efficient? Do you have a separate machine just for Gaming?

I mostly program in languages like Ruby & Perl using Vim. Even with my decked out version that has 35 plugins, and some other bells and whistles, I'm on average using 20 MB of RAM. Open/Close is near instantaneous.

Depends on your projects... I don't like to use the same editor for ui/db/api/service that may be related.

+1 for Sublime Text for being so darn fast.

And if you need something even lighter, something like a better Notepad is enough. Lightweight text editors are a dime a dozen, but I'm personally a fan of notepad2 / notepad2-mod / notepad3; even if they don't have tabs.

Also shout out to LINQPad, for letting me test quick snippets of C# with better visualization than Visual Studio. It's also a better alternative to Sql Server Management Studio for running SQL.

I finally switched from VSCode/Sublime to Spacemacs about a year ago ( It was my 3rd try switching ).

I'm sure this saved me an additional hundred hours.

+1 for VSCode for its configuration portability plugin, settings sync. It’s never been so easy to sync editor changes across my machines, and I’ve only had 1 dependency issue using it in 4 years. No longer having to maintain my vim config and dependencies has been great.

I believe Settings Sync is going to be included in the next release of VS Code. Yay!

The amount of work Microsoft is putting in this editor is amazing. Last month we got file history, that was the last thing I needed to ditch the Git GUI I had installed.

I use vscode but it's missing some basic code features for me. The biggest for me is probably keyboard macros, something that's been a basic feature of editors since at least the 80s. Keyboard macros in other editors has saved me 100s of hours.


Curious, what do you think of multi-cursor as a replacement for macros?

(I’m on the team)

As an emacs user, I view multi-cursor as suitable for only a subset of macro usage. Macros are inspectable, editable, savable, able to be applied across files, easily used a variable N times.

My typical pattern is something like: define it, try it, adjust it, then apply variable times (including “infinite until error”), maybe save 1% of them. That often takes less time to do than it just took me to describe.

I use macros probably 25x for every one time I reach for multi-cursors, though to be fair, if I came the other way, I’d probably use multi-cursor more often than currently. (I used macros for 30 years before getting multi-cursors, so if both can do the job, I’ll use a macro.)

> Macros are inspectable, editable, savable, able to be applied across files, easily used a variable N times.

In my experience with multicursor, I don't need to be able to "inspect" the operation as the act of typing it is inspection in and of itself. Sure they aren't saveable and thus aren't editable (but you admit this is a very rare use case - I can't recall needing that, ofc you often don't know when to want what you don't have).

As for applying across a number of files, I recently added an in-editor rendering of workspace search results to VS Code, and I've created an extension that can apply edits to those search results back to the original files. This allows for performing multicursor edits across many files.

As for using variable numbers of times, this is again quite trivial with multicursor. I simply select all the instances I need (either all in one go or iteratively), and go from there. I admit there is an art to selecting the right text such that iterative selection works with a single keypress, but once you get the hang of it it becomes pretty natural. (Unless you mean "apply this N times", which again I'm not sure I've ever been in want of)

The question might boil down to use case. If the use case is “in this file, change all spans with class foo to divs with class bar once ever”, probably both tools will work.

If the use case is “every day, download this file from a server and process it using pre-defined text editing commands”, multi-cursor doesn’t help you in any way that I can see.

I admit there’s a huge overlap in use, but when someone asks for macros and a product person says “how about multi-cursor instead?” I think it’s fair to raise the cases where someone asking for macros might actually want macros.

Multicurors aren't replacement for macros in the same sense as loops aren't replacement for recursion.

That's snappy but not informative at all. What do you miss in multicursor that macros give you?

I also prefer vim's macros to multicursors, but I think it ammounts to nothing more than habit and preference.

Macros in Vim are going to be much more powerful, with movement commands and selection commands giving yo a more flexible system... I think? Hard to be objective after so many years of Vim.

> What do you miss in multicursor that macros give you?

Not OP, but to take a recent example (although it was in Emacs, I'm pretty sure it would work in any advanced editor), I had a macro select the second half of the open file and pipe it through sort and uniq to replace it with each unique line and their number of occurences. That's not doable with multi-cursors; their use cases intersect but don't overlap with macros ones.

Honest question: when are loops not replacement for recursion?

My (admittedly naive) mental model of recursion is basically a loop where you bring your entire stack frame with you (or less, in the case of tail recursion).

There's a `macros` extension that's pretty good: https://marketplace.visualstudio.com/items?itemName=geddski....

Yeah, macros might be cool... I've gotten by with mostly using the regex options in string replace, etc... snippets have helped a little, but don't use them much, sometimes they annoy me when they pop in.

Killer features are directory view, integrated terminal, regexp for find/replace...

Lately, I'd add the remote ssh and wsl extensions have been insanely useful, but starting code from inside wsl has gotten sluggish since the last vs code update.

It is not fair to compare VSCode/Sublime Text with an IDE. They are very fast at opening, agreed, but they the features that an IDE provide (intelligent code completion, jump to definition, database-aware autocompletion, ANY sort of refactoring capability) easily save me hundreds and hundreds of hours.

Everything[0] by Voidtools as a Windows search replacement. It makes search practically instant.

Now that Windows search often fails to turn up even my most used files (what happened to Windows search? Was it intentionally nerfed?), Everything has become a necessity for me.

[0]: https://www.voidtools.com/

Wow, thanks for sharing this.

Also, to second your question: what the hell did happen to Windows search? I always just assumed I'd done something to break it (and honestly, could never be bothered trying to "fix" it... even after all these years), but apparently it's inherently broken.

I know very little about OS software. Could someone explain at a high-level how something as fundamental as file search can be rendered totally unusable? Doesn't windows have the best engineers in the world working on it?

I also thought I broke something. Since a couple of months it is absolutely unusable. It sometimes can't even find the calculator or even VSCode which I use every day.

Search is not an operating system function. It needs read access to every file you want it to find, but other than that it's just another application.

Windows has great engineers, yes, but the problem with Windows search is not an engineering problem, it's a trade-off between different use cases and performance and compatibility and innumerable other factors. Design by committee and circumstances of history made Windows search what it is, the shortcomings aren't caused by a lack of engineers capable of building Everything or Spotlight or grep or Google or whatever your ideal file search tool looks like.

I don't use windows search but, at least in the past, it took plugins to allow it to read through any format for which a plugin is registered. Of course MS included plugins for office files. Plugins for PDFs, zip files, etc. It's been around since the mid 90s. Sad if it's not working well.


A hearty second to that! Everything is one of the first programs I install on any new Windows installation.

Even on a machine with several million files on it, it searches as fast as I can type.

Everything also has an API that I've used to integrate the search into my own apps:


I prefer Wizfile [0] personally. It seems better as far as resource consumption than Everything. Wiztree by the same devs is great too as a replacement for WinDirStat.

[0] https://antibody-software.com/web/software/software/wizfile-...

I can confirm this too, I have not used Windows Search in years, it started getting slow in Windows 7, now in Windows 10 its practically unusable, you search for a file and it starts doing a web search.

And you can throw Wox on top to get something similar to macOS' Spotlight that uses Everything for search and uses python or c# plugins to do everything else from calculator to PirateBay browser for some reason. Original Wox release: https://github.com/Wox-launcher/Wox Fork that more likely to work with latest Windows 10 since original is seems to be abandoned: https://github.com/jjw24/Wox

FSearch is an equivalent for Linux.


A quite similar tool, or at least one you can configure to behave like that, which works in the CLI is fzf

hmmm... seems to be a fuzzy find

https://github.com/junegunn/fzf "A command-line fuzzy finder"

Windows search in win10 now uses bing.

I am not joking. I found out about it when it stopped working due to bing outrage and had to do registry fix to make it work again.

My install of this stopped working on my work desktop suddenly a few months ago. I was without it for about a week until I was able to figure out what was wrong, and in that time I realized just how incredibly dependent I am on this simple utility and just how much Windows search sucks for finding anything.

I don't about the SOTA but last time I tried to install it (everything) it did not have a support for indexing mapped network or disk drives. I ended up using locate [0][1] (works similar to locate and updatedb of linux/unix). I have local indexed DBs of all my disks mapped to fixed drive letters, so I know which external HD a certain file is on. Also useful to index network drives in the office.Does everything support this?

[0] https://locate32.cogit.net/ [1] https://sourceforge.net/projects/locate32/

I have avoided to install Everything after I have witnessed the chaos that results from its use in everyone's folder structure. People use to leave files everywhere without any organization criteria and simply rely to use Everything to find everything.

Everything only searching file names might seem like a dealbreaker to some people but it actually provides a great incentive to give your files useful descriptive names.

I got Everything in a hotkey so it also doubles as an application launcher. It really is quite elegant.

There's also Agent Ransack for searching file content.

I don't use Windows much nowadays, but ripgrep and fzf are sure handy on linux and mac.

Thank you, I just installed Agent Ransack and am checking it out. VoidTools Everything just searches filenames, not content, so this could be very useful.

I found it amusing that they also offer what is apparently the same product with completely different branding "for corporate environments" called FileLocator Lite/Pro.

I use ripgrep and fd on Windows as well. Nothing stopping you from doing so.

Seconded. This was recommended by a friend and saved me hours since. The search is near instant, it's flexible, updates in real time. Highly recommend.

I love that program, but must warn though, that I think there were few cases, when it affected file I/O.

That's why I only launch it when needed. The other time, I use listary (but couldn't replace Search Everything in all cases such as I need to view the dates and sizes of the list of matched files).

Does anyone know of a good Mac version of this?

I'm a long time user of quicksilver. Open source. Long time loyal users swear by its ux for efficiency. Development has slowed down recently, but it still runs great for me.


Nope, and I've been searching.

The issue with the spotlight engine that everyone uses is that it excludes "hidden" directories and in particular every dot file and dot directory.

Spotlight is built in, but Alfred’s also a good one.

I was looking for Everything for Mac and tbh I can't say Spotlight is even close. Sure Spotlight works great for apps and files in ~/Documents/, but I find it failing when I'm trying to find some obscure file in /Library/ or with-in Xcode SDK's.

Is Alfred good in this sense?

I’m using Alfred and you can add locations to search in, but I’m pretty sure you can also do that for Spotlight. It shouldn’t be a problem either way.

I used to use Alfred for this, but it's not really the same as Everything. I'm not sure why - something about the speed, results or maybe just the interface itself.

Some of the Windows tools use the NTFS / USN change journal for very fast access to metadata without traipsing across the rest of the filesystem. I dunno if APFS has such a thing?


1) Any terminal that you can summon/dismiss with a global hotkey. Examples are Guake for Linux and iTerm2 for OSX. I consider this a must-have for all developers.

2) Anything that lets you resize/place windows with hotkeys. For example, Divvy for OSX. Divvy is also nice because if you press the hotkey multiple times, it cycles the application through each of your monitors. No need to ever use your mouse to move/resize a window ever again.

3) Fuzzy file search in your editor. You know you want to open src/components/user.js so you type "cu<enter>" and it appears.

Any tools like this that become so ingrained in your muscle memory that you just kind of think things ("move this window and then summon my terminal") and the computer responds.

> 1) Any terminal that you can summon/dismiss with a global hotkey. Examples are Guake for Linux and iTerm2 for OSX. I consider this a must-have for all developers.

Years ago I saw someone using this (I think it was actually Yakuake) and ran it for a bit. I really didn't like that it was a single session. However, I later messed around with tiling window managers (which relates to your #2!) and having a shortcut to pop up a new terminal is really what I wanted this whole time.

Just to touch on #3, any time I'm writing a gui that's expected to have more than a handful of items I push to add a search bar with fuzzy matching at the top. Otherwise, search would get added after it's used for like a decade and everyone is immediately enthusiastic and grateful. All of the non-fuzzy solutions are too pedantic to use.

It absolutely blows my mind how many developer-centric search UIs don’t have fuzzy search. Developer tools css editors for one (CSS! The language with margin-* naming conventions everywhere!). Also GitHub issue labels.

Browser history too.

I think the people who sell tools or buy tools usually constrain themselves to "least common denominator" type of experiences.

(This might be true of free/shared/common tools that haven't been configured yet)

But getting past all that, after a lot of craftsmanship and idea sharing, that's when tools start to ramp up in productivity.

I use emacs, because if something doesn't work like you want to, you can coerce it to do so. That said I personally wish it was python-based, because I'm more fluent in python than lisp.

I don't use iTerm2, but I have a global hide/show shortcut via Hammerspoon (https://github.com/cweagans/dotfiles/blob/90764db6146383a92e...). I could extend this to pretty much any app, but the only one I regularly need it for is my terminal.

I like this method a little more because it's not a single session, there's no animation, etc. It just pops into existence exactly how/where I left it, and then goes away again when I'm done with it.

I'm not a fan of global/slideout terminals either. I typically have multiple tabs and multiple panes within each tab tiled on the right hand side of my monitor.

CMD+Tab is enough of a global hotkey for my needs, and it's usually only one or two tabs anyway.

when you summon the terminal do you first then need to `cd` into the directory you need?

What I assume the parent was talking about was the ability to literally just open a new terminal window with a keyboard shortcut (e.x. Mod-Enter in i3wm). If that's the case then yes.

While using i3, you can also place a terminal in the scratchpad, which works more similarly to Yakuake.

Yep. Looking at `history` it's often something like "ping" "top" "docker ps" "curl" which don't care about directory. Since it defaults to $HOME, that's generally good enough.

When I was working more seriously on things with project directories I had a couple aliases set up with a simple bookmark system. The "bookmarks" would be symlinks in a dot folder. I could type `g proj` or `g lib` to hop around.

> 3) Fuzzy file search in your editor

I’ve been using “fzf” [1] for file and directory search and I can’t recommend it enough.

It integrates nicely with vim [2] as well.

1. https://github.com/junegunn/fzf

2. https://youtu.be/qgG5Jhi_Els

What blows my mind is that fzf is insanely lightweight, I don't even know if it relies on external dependencies.

I wasn't aware iTerm2 supported this and now I'm very pleasantly surprised. It's not possible to overstate how thankful I am that you pointed this out.

> 1)

You don't need a separate terminal just for that. It's better to automate your window manager to open the terminal. I use this with tmux and i3:

  #!/usr/bin/env bash
  tmux new-window -t 0 -c "$1"
  i3-msg 'workspace 1' # switch to i3 workspace where my terminal is placed
I also use distinct hotkeys to specify which directory to cd to (the script above accepts a directory as argument).

Why is it "better"?

I rarely want to open a new window, I want a terminal that I never close, that stays in the background until I call it forward. And it has to be available on any workspace ("space" on macOS). Iterm does all of that perfectly

>2) Anything that lets you resize/place windows with hotkeys. For example, Divvy for OSX. Divvy is also nice because if you press the hotkey multiple times, it cycles the application through each of your monitors. No need to ever use your mouse to move/resize a window ever again.

Aquasnap is an OKish windows equivalent. The best i've found, at least.

Divvy works on Windows as well and is great.

> Any terminal that you can summon/dismiss with a global hotkey

Thanks! I didn't know I need this until I tried it!

what's the difference between 1 and "ctrl alt t" ?

So does Ctrl-Alt-f2 count?

I would definitely say PHPStorm. The amount of productivity gains are tremendous.

A lot of good editors have the issue that they are quite rigid when it comes to operating between multiple languages. So while your editor may shine at JavaScript, it won't understand vuejs templates or when you put Javascript code inside a php file.

This is where PhpStorm really shines. It can even complete your SQL statements inside php strings or go to a .vue file from a Html tag. I've never seen this type of understanding from an editor ever.

P.S. My only issue with it is that writing plugins for it is kinda hard. Since it is so extendable it's only expected that programmers would want to extend it with their own plugins. And while I have been able to write one plugin for it I found the documentation and tutorial for writing plugins all over the place and sometimes very outdated. It is my request if anyone from jetbrains read it to please make plugin docs more accessible and easier to understand, esp the testing quickly part.

+1 For JetBrains products. Possibly the only piece of software that I happily pay the yearly renewal on.

I use PHPStorm and DataGrip on a daily professional basis. I use PyCharm (CE) and CLion for side projects.

> P.S. My only issue with it is that writing plugins for it is kinda hard. Since it is so extendable it's only expected that programmers would want to extend it with their own plugins

Out of curiosity, what kind of plugins do you (want to) write?

> Out of curiosity, what kind of plugins do you (want to) write?

I wanted to write a plugin to enhance Vuejs (auto import mixins, etc). The current vue plugin is good lacks a few features which I wanted to fix but I couldn't figure it out.

There are tutorials done by the Jetbrains ceo himself but I think they are outdated now. It was supposed to be a fun weekend project but due to the disorganised nature of the plugin docs I really couldn't make any progress, especially because i found testing my plugin really hard.

Same for Pycharm. Type hinted python in that editor has almost every development benefit of a static language: completion, refactoring, docs and suggestions.

The documentation from JetBrains is horrible.

I still could not configure the correct build step for XML-based javax forms as part of Gravel build process. And that’s supposed to be one of the easiest parts?

In general, I agree that JetBrains could improve their docs. However, you very rarely need them.

I mean, your problem kind of sounds like it should be explained in the javax or Gravel manuals, but not in the JetBrains IDE manual.

Nope - my problem is there because I followed their examples which manage to give you an example of creating a settings page using javax forms and starts with using the IDEA gradle plugin to compile all of it.

Except when you actually do both you realise there’s no way of compiling this plugin through gradle unless you first run the build step through the IDE (which secretly puts all of the compiled forms in the same build directory).

It’s a mess.

I go with IntelliJ, which is basically the same with slightly more Java-ified shortcuts. And I agree, it's incredible how much time a good IDE can save you.

For an PHP focused editor it’s unfortunate that it isn’t possible to format 100% WordPress Coding Standards compliant code.

- Emacs (with evil mode) and org-mode. The hours gained far outweigh the hours put in (and the hours put in were fun).

- Yabai on mac for not having to think about moving windows around.

- Pomodoro (now through org-mode) for helping focus (and saving hours, in a round-about-way.)

- Removing as much advertising from my life as possible. (Ublock origin, deleting social networks when possible)

Didn't know Yabai! Thanks for sharing. Will have a look at it and probably give it a try.

I am using Amethyst [1] right now as a "tile" window manager which is easy to set up and works as intended.

[1] : https://ianyh.com/amethyst/

I've been using Spectacle [1] for 3 years now and it's been great. Note: it appears to have been discontinued in favor of Rectangle [2]

It's the first thing I landed on after switching to primarily OSX at work (I used i3 when I had a Linux dev box) so I'm not sure if it's the best among the alternatives; but I've been pretty happy with it.

[1]: https://www.spectacleapp.com/

[2]: https://rectangleapp.com/

Another great tool is Hammerspoon [1] for Mac. It has a lot of plugin and allowed me to get rid of a lot of small tools. It’s free and open source. It allows me to set key shortcut for my app, windows manager, timer “à la pomodoro”, caféine (screen does not go to sleep), etc... cannot live without it!

[1] https://www.hammerspoon.org

How is your experience with Yabai ? I just read about it but reluctant to try it . How stable is it ? Can we switch spaces with it ?

It's great. So far so good. I think I can switch spaces using skhd (by the same developer) [1] alongside it. I can definitely send windows to spaces, but still use ctrl + right/left arrow to navigate spaces. [1] https://github.com/koekeishiya/skhd

It's perfectly stable, but I didn't see it do anything that Amethyst can't do, and yabai requires you to run with SIP disabled

I run yabai just fine with SIP disabled.

You only need to disable SIP if you want features that require it like window opacity/stickyness/...

Any idea how to delete this social network (hacker news)? It's the last one I still use.

Set `noprocrast` in your profile to `yes`.

I had to look it up. very fun.

There are three new fields in your profile, noprocrast, maxvisit, and minaway. (You can edit your profile by clicking on your username.) Noprocrast is turned off by default. If you turn it on by setting it to "yes," you'll only be allowed to visit the site for maxvisit minutes at a time, with gaps of minaway minutes in between. The defaults are 20 and 180, which would let you view the site for 20 minutes at a time, and then not allow you back in for 3 hours. You can override noprocrast if you want, in which case your visit clock starts over at zero.

Same, mostly, other than the fediverse. Anything with ads and targeted marketing is more the problem, imo.

I tried to look for a way to delete my account yesterday but I did not find such a thing :<

Anyone know what the best way to set up Emacs on macOS is?

I just use this version. https://emacsformacosx.com/ I have a one line shell script that then lets me start Emacs from the cmd line. something like

    open -A [path to applications/emacs startup] $@
This supports emacs —daemon

That is what I use.

Additionally in my .bashrc I have:

  EMACSPOS="-g 140x66+655+23 --fullheight"
  e() { ( $EMACS $EMACSPOS "$@" & ) }
I also have it in the dock, but sometimes environment variables are not set up properly.

For this case, I create a plist file ~/.MacOSX/environment.plist and can add stuff to it like this:

    add_plist PATH "$PATH"

  add_plist () {
    /usr/libexec/PlistBuddy -c 'Delete :'"$1" ~/.MacOSX/environment.plist >/dev/null
    /usr/libexec/PlistBuddy -c 'Add :'"$1"' string "'"$2"'"' ~/.MacOSX/environment.plist >/dev/null

I wrote the last reply from my phone. The command is simply

/Applications/Emacs.app/Contents/MacOS/Emacs “$@“

The script goes into /usr/local/bin or wherever that’s in your path.

Best is subjective, but my current go-to is:


$ brew tap d12frosted/emacs-plus

$ brew install emacs-plus [options]


Cf. https://github.com/d12frosted/homebrew-emacs-plus

I use the “Emacs Mac Port” which is available via Homebrew.


I keep a clone of the main GNU Emacs git repository and build the emacs-27 branch (27 is the upcoming release) every few days on my MacBook (and the master branch on my Linux workstation).

BeyondCompare (cited in the original thread), especially the folder comparison feature. Saved my sanity when our team's shared directory stopped syncing silently on my laptop and I had to figure out which files I needed to sync manually.

WizTree (https://antibody-software.com/web/software/software/wiztree-...) is a freeware Windows utility (man, typing this took me back to 1997) that lets you quickly see which files are hogging your disk space. Think "df GUI for Windows". Especially useful to track down large application files hidden in the depths of system folders.

Meld [0] (written with GTK so available on Windows, Linux, and possibly Mac but I don't know about that last one) is another tool in the first category.

WinDirStat [1] (Windows) for the second. It is also available in the super-useful PortableApps format [2], which is always nice.

[0]: https://meldmerge.org/

[1]: https://windirstat.net/

[2]: https://portableapps.com/apps

WinDirStat is extremely slow compared to WizTree, give WizTree a try :)

`ncdu` is my preferred Linux ncurses equivalent to windirstat

BeyondCompare is an absolute workhorse for me. It's kind of amazing how many unrelated tasks involve directory and file comparison.

AraxisMerge (pretty -- ahem -- comparable to BeyondCompare). A good visual diff tool is a must-have; I can't imagine life without one.

Second that. Cannot imagine living without Beyond Compare.

Here's a couple (albeit macOS focused) favorites of mine:

- Deliveries: macOS / iOS package tracking https://itunes.apple.com/us/app/deliveries-a-package-tracker...

- Screenotate: OCR all of your screenshots with metadata like program/webpage https://screenotate.com

- The Tagger: lightweight macOS utility to tag music / fetch metadata from discogs https://deadbeatsw.com/thetagger/

- youtube-dl: Download any video / song online https://github.com/ytdl-org/youtube-dl/

It was fun thinking of these, I actually put together a blog post a while back listing my favorite software. Would love to revisit it soon: https://lukemil.es/blog/software-i-like

And for those who don't know, youtube-dl supports many, many other sites besides YouTube, including Vimeo, TikTok, Dailymotion, Twitch, YouKu, LiveLeak, Streamable and more.

Full list: https://ytdl-org.github.io/youtube-dl/supportedsites.html

The youtube-dl crew really does a good job, when you have an issue with a supported website, just picking the last commit generally solve the problem.

I'd be careful with package tracking. While I don't know if that particular app resell your purchase data. That one is paid, so they may not need to right now, but they may change that in the future. I know many other similar (Slice, Unroll.me, etc.) products do. It's an easy, high ROI monetization strategy.

PS: youtube-dl is not macos-specific, there is a windows build and many linux distros like ubuntu have packages

Apart from Arch, Fedora and [insert your fast-paced distro here] I wouldn't recommend to use the package manager's version of youtube-dl, because it's almost always too old.

Quoting the bug section of the Readme[1]

> Note that Ubuntu packages do not seem to get updated anymore. Since we are not affiliated with Ubuntu, there is little we can do. Feel free to report bugs to the Ubuntu packaging people - all they have to do is update the package to a somewhat recent version. See above for a way to update.

[1]: https://github.com/ytdl-org/youtube-dl/blob/master/README.md...

I have used the package coming from Chocolatey and haven't had any issues at all

    choco install youtube-dl

I just set up Tessaract for screenshot OCR purposes following below post and gotta say it's super easy and great. https://apple.stackexchange.com/a/354036

Hasura [https://hasura.io] Graphql API and Subscription for any Postgres DB

Keycloak [https://www.keycloak.org] OpenID Auth Server

nREPL + Cider [https://github.com/clojure-emacs/cider] Clojure's Network Repl and Emacs integration for live coding Clojure

Company Mode [https://company-mode.github.io] Emacs autocomplete mode

I'll second Hasura there (presumably an alternative like Postgraphile would have led to a similar result)

Fascinating to see OpenID here. Where do you use it? I thought it was pretty much dead, so implemented IndieAuth recently which does what I want, replacing OpenID’s functionality.

Keycloak is an IdP. It does everything, including OIDC (which is very widespread) and SAML. I assume when they say "OpenID", they mean OIDC.

I concur.

Pretty much dead and replaced by what? (I am curoous as I thought it was a well established standard)

As stated, the poster is talking about OIDC, not the predecessor OpenID.

Ah right, thanks. I read "OpenID" but was thinking "OpenID Connect" and was surprised by the depreciation.

For what / How do you use Keycloak?

We use it as the Auth layer for our web apps. Generally inside a docker container exposed at id.someappname.com

For better or worse, I find GUI git clients to be less useful than the CLI. But like any CLI tool, it's productivity is limited by your ability to type without errors. Git has an Autocorrect[1] that will help you out.

> git config --global help.autocorrect 1

Based on bash history data, I've also added a simple alias to my bash config:

> alias gti="git"

[1]: https://git-scm.com/book/en/v2/Customizing-Git-Git-Configura...

"Based on bash history data" is an interesting point, because it highlights that you can use your history to periodically check what you do inefficiently in the terminal, and which aliases you still need to add to your config: compute some statistics on the number of 1-word and 2-word commands you use the most, and see if they are more than e.g. 4 letters.

With zsh: "history 1 | awk '{print $2}' | sort | uniq -c | sort -n"

With bash I think this should be "history" instead of "history 1".

I make one change to every new .bashrc file.

I change this:


You would be surprised how useful this one change has been, answering historical questions easily, like how to generate that rsa key, or what packages did I install for that project last year.

You can usuall answer questions with ^r instead of the man page. Or maybe:

  "history | grep -C 10 <foo>"

While we’re on the subject of shortcuts, I have `awk1` mapped to `awk '{print $1}'` and the same up to awk9. It’s not that I can’t type it but it breaks my flow for such a simple use case.

`history 200000 | awk '{print $2" "$3}' | sort | uniq -c | sort -n`

There's a section of people that I belong to, that aren't fans of the GUI clients because it doesn't fit in their workflows but also find the CLI not productive enough. We start writing aliases and custom scripts. We integrate git with FZF.

Well for all of these people: I recently found Lazygit (https://github.com/jesseduffield/lazygit) which is a terminal UI for git and that does exactly what I've been looking for all these years, down to vim-like keybindings!

I think I've used a very similar one called LazyDocker. But after a while I found that it wasn't that useful, and I don't like seeing the "donate" button in my face all day (call me old-fashioned).

The true power of CLI apps comes from "alias" commands that you build up yourself. The following commands are great examples of this:

    alias docker-kill-all='docker kill `docker ps -aq`'
    alias docker-rm-all='docker rm `docker ps -aq`'
After a while I've learnt that a gui or cli-gui can never compose as well as the terminal can...

Lazydocker is made by the same guy yes! I don't find it as useful though.

> The true power of CLI apps comes from "alias" commands that you build up yourself

I usually agree. I spent way too many hours making aliases and I'm very proficient at it. But sometimes there's something like lazygit which does everything my aliases did, but slightly better as it gives me, for example, line-by-line staging and vim keybindings.

It is true that it does not compose, but I can still (and do) use the command line. It's just a nice increase of productivity in 90% of the cases (for me!)

Note: I'm not related to the lazygit project in any way, just very satisfied with it

Obligatory emacs magit. If you like the git cli, then magit will help you do everything with single keypress actions (l is log, c is commit) and provide autocomplete and lists where relevant (like all branches on checkout)


Visual walk through: https://emacsair.me/2017/09/01/magit-walk-through/

Better still

> alias g="git"

or g = ./gradlew

> For better or worse, I find GUI git clients to be less useful than the CLI.

Genuinely interested, why?

I'm a huge fan of the CLI in general, but for some things it just slows me down, git usage is one of those.

Random example: reverting a commit is 2-3 clicks, or a whole lot of typing.

> Genuinely interested, why?

They usually don't support the level of granularity I have on the CLI. For example, if I want to fix a commit on a PR based on feedback I've received, I can make the fix and `git rebase -i` will let me amend any of my previous commits (via 'fixup'). None of the IDEs I've tried support it; it's possible instead of an IDE one of the dedicated git tools like Kraken support this?

It's also just mildly terrifying when the IDE gives you a button with no further explanation for what it's actually doing. I.e. what do 'refresh' and 'sync' do in VS Code? The consequences could be dire: https://github.com/microsoft/vscode/issues/32405

> reverting a commit is 2-3 clicks, or a whole lot of typing.

Git revert is a single command; finding the commit to revert is the hard part. `git bisect` makes this easy, and I haven't seen any IDEs nail that one. That said, this is a rare use case.

> Random example: reverting a commit is 2-3 clicks, or a whole lot of typing.

    git log
    git revert {hash}
I'd hardly call that a whole lot of typing. It's roughly equivalent to 2-3 clicks in a GUI app.

Where the GUI falls down for me is more complicated things, like hard resetting a branch to origin or resolving merge conflicts.

Also, most of the git guis do things that I find distressing. For example, in one git GUI I tried a while back, I accidentally dragged a commit onto a branch listed in the sidebar. Only later did I realize the gui cherry-picked the commit into the branch without asking me for confirmation. It would do similar things if I dragged one branch into another.

The golden recipe: neovim, tmux, rg, fzf, i3/other tiling wm on nixos/arch

Fzf all you can, not just inside vim, but also use it to switch between tmux sessions in an instant. I have a tmux manager on top of tmuxp that is able to start / switch to already started sessions via fzf.

Identify patterns you use a lot and make snippets out of them. Create project templates.

Have a folder where you dump reference / things that need to be really easy to find, and set up vim to search into that instantly, no matter where you are.

Keep an inbox file to throw things in, make a wm bind a script to prompt for text and append it there via zenity. Don't throw links into it, it's gonna be a bookmark dump.

Make sure your todo system is a keybind away at all times.

Review your way of working, challenge, and improve it. Be lazy, but only when you afford it.

>Make sure your todo system is a keybind away at all times

This point here I think is incredibly useful in general. When accessing your full to-do list feels like its own todo, you're gonna have a bad time

I was about to get it on with tmux, but as soon as Neovim implemented a terminal I was outta there. Seeing as Neovim is has terminal emulator, windows and tabs why do you still use tmux?

I really need to get around to fixing my arch, its still left mid-reinstall after at least a month (and I'm lost on the networking for the 2nd time, you'd think I'd have learned by this point)

> Make sure your todo system is a keybind away at all times.

Can you access your todo system from your phone? I'm always torn on this, and why I keep my todos in google keep.

I'm using todo.txt via the CLI [1] with my TODO files in a Dropbox folder syncing it with Simpletask [2] for Android.

[1]: https://github.com/todotxt/todo.txt-cli [2]: https://github.com/mpcjanssen/simpletask-android

what is rg, i3 or tiling window wm? can't you use tmux as a tiling WM?

Only if everything you do is in a terminal.

If you also need a browser, IDE, or any other non-terminal application open then i3 lets you tile those as well.

I haven't used it in a while since we switched to macs and ssh'ing to remote linux dev desktops but when I had an all-linux dev setup I remember i3 being pretty amazing.

https://fishshell.com/ for sure

Just having sensible defaults on a shell works wonders on my day-to-day productivity.

Add a couple of aliases for productivity and off you go.

  abbr --add s "git status"
  abbr --add gap "git add --patch"
  abbr --add gco "git checkout"
  abbr --add gd "git diff"

  alias recent="git for-each-ref --sort=-committerdate refs/heads/ --format='%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)%(color:reset)' | column -ts'|' | tac"
  alias r="recent"

I absolutely love Fish, but it's worth warning anyone who's taking a first look and excited to try it, that some syntax differences from more familiar shells like Bash may cause frustration, both in terms of muscle memory and anytime you need to copypasta. It hasn't been enough of a problem for me to switch back (or to ZSH), the benefits far outweigh the frustration, but I do think it's worth a small warning.

I use zsh and found https://github.com/zsh-users/zsh-autosuggestions to be very comparable with fish autocomplete, while keeping zsh niceties.

Second that. Would additionally recommend the fzf for fuzzy reverse history search. Absolute gold

This one's tricky. I've driven fish daily for years, and it's definitely snappier than my old omzsh setup (I much prefer this style of history), but you can get bitten by certain tools not using shebangs properly.

Black, flake8, isort and mypy (with several type strengthening flags) have together ensured that Python editing and code reviews are an absolute breeze. The structure basically disappears, and all that I ever need to concentrate on is the actual change.

Sure, you can use your IDE to achieve some of this, but this is where the 80/20 rule really breaks down: since each IDE differs in the details, at some point auto-formatting the code is going to waste more time than it saves by having to undo or work around mutually incompatible formatting rules. You can't reasonably expect everyone to use the same IDE, but you can expect them to use the same Makefile targets and CI pipeline.

Python beginner here. Can you please elaborate on how you use Black, flake8, isort and mypy for code editing and code reviews?

For me, it's being able to have a consistent code-style that is completely unambiguous for all collaborators. You configure the tools to run in your editor (or as make targets, or as pre-commit scripts) and you run the same checkers on your CI which prevents non-conforming changes from being merged to master.

Here's a config file for running some of these checks with https://pre-commit.com/ both locally, and then again on CI:



For sure!

Black and isort complement each other in formatting your code, and both have flags to check whether they would change anything in your code. You can do the former either as a script or Makefile target, and the latter in CI to verify that the code is actually lint-free.

flake8 is your standard linter - it checks for idiomatic Python. I prefer to set it quite strict, with `max-complexity` starting at something like 4 and only moving it up if I really can't figure out a way to make the code simpler. And you shouldn't have to ignore any lints unless there's a linter or formatter bug or conflict. The only place I've seen this is with E203.

mypy is a tricky one if you're not yet used to Python type hints. I would recommend starting with no configuration and then introducing stricter rules as you understand more of them. My current go-to configuration sets all of check_untyped_defs, disallow_any_generics, disallow_untyped_defs, ignore_missing_imports, no_implicit_optional, warn_redundant_casts, warn_return_any, and warn_unused_ignores.

To list all the files in your project tracked by Git (because you don't want to lint or format any third party files) NUL-terminated (because you want to handle weird file names) run `git ls-files -z -- '[star].py'`. To instead list only the files changed from origin/master (your typical target branch for a merge request) except for those you've deleted locally you can run `git diff --diff-filter=d --name-only -z origin/master -- '[star].py'`. You can then pipe the result of either command to `xargs --no-run-if-empty --null black` and similar. Use the first Git command in CI to lint all the files, so that you don't miss out on any changes for example when any of the linters change their rules. Use the second Git command locally to format and lint your changed code. And make sure you have some way to force formatting/linting all the code for when you update any of these programs.

Finally, running all the linters as part of a pre-commit hook is a great way to make sure you never commit broken code. Having a bunch of lint fixup commits is ugly and counter-productive.

Thank you!

If you are a python beginner, don't try to do everything at once, it's too hard.

Start with black. It's very easy to setup, and the reward is great.

Excel's Power Query just saved my countless hours last week in cleaning up and merging two huge csv databases.

Learning the YouTube APIs saved me thousands of hours on editing video metadata, organizing playlists, etc (https://github.com/cgranier/pytube).

Everything (https://www.voidtools.com/) is a wonderful file search tool for Windows.

Thanks for all the links and ideas... new things to try this week.

Overcast says its Smart Speed feature has saved me 30 hours (over the last ~5 months), so I expect it to save me 100 hours within a year. It is especially useful for podcasts and language learning material with a lot of pauses, but I have become used to it, and so I now keep it enabled for most audiobooks that I load into Overcast just to get the dynamic playback speed.

I'm at 173 hours! I've liked Overcast (I've been a premium customer for two years), but I find myself wishing it has better features now. It feels like it was the best a couple years ago but hasn't done much since. Smart Speed is the one thing that has kept me from switching to something else so far.

296 hours myself. I have also been pleased with Overcast until just recently. Now that I am stuck at home, I went from listening to all my podcasts from my phone to listening to most of them from my computer. Overcast's lack of desktop app and pretty poor web interface are causing me to consider switching for the first time.

I don't love its web interface. But its ability to do the smartspeed thing + sync the played status to my phone for when I move from my desk to walking the dogs has been enough to stave off the switch for me.

What are you thinking about switching to?

I haven't yet spent much time researching alternatives. One podcast I used to listen to is now a Spotify exclusive. I use that to stream music and I really like how their desktop and mobile apps work together. I was thinking of giving them a try for podcasts until I realized it didn't seem possible to import an RSS feed. That would eliminate the ability to listen to Patreon supported podcasts which is a deal breaker for me.

I switched from Overcast to Pocketcasts. Everything I liked about Overcast plus playlists I can figure out how to use.

I use Pocket Casts specifically for the synchronization between my phone and the web interface.

When software grows I notice there can be a lot of dev done on features I don't end up using. I don't use CarPlay, watch, Smart Speed, Voice Boost, or playlists.

Last year it looks it launched a sharing interface with what looks like a non-trivial backend to it. In January, a rewrite of Voice Boost and support for Air Play 2 was released. So it's pretty actively developed.

What kind of features do you think is lacking? I feel like I have very simple needs. The only time I've wanted for something is occasionally wishing to use it on my desktop and the web interface is okay-ish for those brief periods.

How does it work? Does it really change the speed dynamically? Or it just trims the silences like pocketcasts?

Based on my observations and the details that Marco has blogged about, it seems to use a silence-detection algorithm that rapidly adjusts playback speed, so the silences are not cut out in a jarring manner, but rather played through at a typical 2.5-4x.

Maybe this will be unpopular, but I feel like speeding up podcasts is really disrespectful to the creator. It'd be incredibly rude to tell someone in real life that they're talking too slow, and in my opinion this is the same thing. Podcasts don't need to be so transactional.

> in my opinion this is the same thing

It definitely isn't the same thing. I kinda understand why you think that way, but it's pretty much completely illogical (see avoiding ever skim reading anything written by someone, or never fast forwarding any filmed media where a person is speaking).

Intellij IDEA and Pycharm. The autocomplete, search for symbols, quick documentation and especially refactoring have saved me well over 100 hours, especially at work with larger projects.

These IDEs are so powerful, I feel like I'm only ever scratching the surface. Double tapping shift to search for any file in the project is a favourite of mine.

- keeping all your configuration files (“dotfiles”: shell, git, etc) in one, version controlled place. Makes setting up new machines so much less stressful. Here are mine in case you’re interested, for macOS and Ubuntu: https://github.com/Bogidon/dotfiles

- setting up a personal vpn with a reserved IP if you connect to services that require your IP to be whitelisted and you move often

- for git cli: dashes take you back to your previous location (eg `git checkout -` will take you back to the previous branch). On zsh: `cd -n` will take you to n directories ago

Mac only:

- the Paste clipboard manager has been a most delightful tool, though I don’t know if I’ll ever upgrade to the new subscription version: https://pasteapp.io/

- the workflows feature in Alfred.app as a convenient place to keep utility applescripts / other kinds of little scripts that you want to invoke through global shortcuts or through Alfred

> - keeping all your configuration files (“dotfiles”: shell, git, etc) in one, version controlled place.

The thing that finally made this worthwhile for me is GNU stow.


Stow is available from homebrew if you prefer to get your Mac stuff that way.

I've been using "Copied", but in the last few months on Catalina it suddenly loses the ability to copy out of its history window, whether via cmd+c or clicking. Only an app restart solves it. I emailed the developer over a month ago and never got a reply, so... guess I'm switching to "Paste App".

I use copyclip as my clipboard manager: https://apps.apple.com/in/app/copyclip-clipboard-history/id5... It is free + simple.

Alfred has a clipboard manager built in, what does Paste offer over it that justifies its fee for you?

Mainly iCloud sync, tabs, and larger previews where more than one is visible at a time

Similarly, I use the clipboard plugin for quicksilver.

- Windows. By not having to configure drivers and other compatibility problems which I have on Linux it definitely saved me 100 hours.

- Listary (windows) Not sure if its 100 hours, but I love its search in any context of explorer. Default explorer search is terrible IMO. For example when you open file - you can use search there instead of navigating by hand.

> - Windows. By not having to configure drivers and other compatibility problems which I have on Linux it definitely saved me 100 hours.

OTOH building on windows takes literally multiple times the time it takes for building the same software on the same machine / SSD on linux. And that's something that I do every day, multiple times per day.

Have you tried WSL? I didn't like WSL 1, and early months of WSL2 were buggy af... but for the past 2 months, since I needed windows again, WSL2 with Docker Desktop support has been really nice.

The VS Code remote wsl and ssh support has also been invaluable.

I mean... I could but I am quite happy with my linux setup and quite infuriated whenever I have to do stuff on Windows so..

Odd. Completely the opposite experience here. Windows requires searching and installation of drivers and configuration via GUI. Linux has drivers built in so just works. I haven't had to install a driver manually since ditching nvidia a year ago. And all my config lives in text files on Github.

I'm guessing you haven't tried Linux in 10 years or so, but even then I don't understand how Windows does any better on the drivers front.

I had been using Linux on desktop up until 2019~ for many years. I have never had hardware (desktop or laptop) which worked flawlessly with Linux. I even bought parts in my current machine to be compatible with Linux, but even then it did not run smoothly. Maybe I am just unlucky. However, with Winodws it does feel great to have everything run smoothly. Zero hiccups with bluetooth, games, hardware lightning or anything else. WSL2 and VMs cover the rest.

I’ve been using Ubuntu on desktop and laptop since 2006, and Debian for 6 years before that. Haven’t had hardware problems for over a decade

Wife’s Mac mini sometimes prints, but it can take 20 minutes to go.

> Linux has drivers built in so just works.

Unless the driver is broken or doesn't exist, then you're SOL.

Bonus: you can update video drivers on Windows without even rebooting or losing your GUI session.

It certainly depends on the device. Several years ago I bought a Wii U Pro Controller before getting the actual console, so I'd planned to use it with my computer. On Windows I had to install the Toshiba bluetooth stack (on a non-Toshiba computer, fighting to remove what I'd had before from Windows Update), manually add the HID for my bluetooth dongle to the driver, then run in "Test Mode" for it to let it work. Test Mode watermarked the corner and also warned me it would only work for 30 days. On GNU/Linux it really truly just worked out of the box. This is an extreme example, but it's one I will never forget. I believe in the Windows world it's common to make controllers pretend to be Xbox 360 controllers because those are supported well, while the kernel known as Linux has support for more obscure things like Wii Remotes and such.

I guess depends on your use-case but I find Ubuntu vastly superior for development. Perhaps it’s just habitual. :)

I have to use ubuntu sometimes (18.04) but my personal favorite distro is Arch Linux.

- you will run the latest software

- from the very beginning you are involved and personally responsible for your machine.

- the wiki is very well written

- no periodic upgrade hell, since it has rolling updates (everything is always updating all the time)

- if software is not in the repository, it has AUR, which will help you build anything that is missing

Ubuntu is a necessary evil, but I don't like some things:


I miss Arch occasionally but I don’t like being responsible for the operation of my machine; I would rather delegate it to the operating system. ;)

The good thing about Ubuntu is that it’s the default “Linux” (distribution) so whatever you are looking for, there is likely an AskUbuntu question, a .deb package, a blogpost, or a mailing-list entry to help.

I don't know if I agree about software availability if you take AUR into account.

Also, it is dead simple to make your own PKGBUILD script for arch, but last time I tried looking into making a .deb my eyes rolled into the back of my head.

Well so do I (also mainly an Ubuntu user these days), but that can be orthogonal to time spent. I prefer it to Windows, which I used f/t for nearly a year after ditching macOS. I prefer the single file system (as opposed to the wsl/native Windows mishmash). I enjoy its speed (mostly filesystem related I think). I find the desktop (Gnome in my case) simpler yet more flexible at the same time (PaperWM ftw).

But there's no doubt I've spent at least 10x as much time on Ubuntu configuring and reading and fixing.

I have spent a considerable amount of time on Windows turning certain features off, removing some bloatware, and setting up my dev environment so Ubuntu doesn't feel any worse.

The only upside of Windows, and definitely a major one, is power management. On Ubuntu, my battery lasts around 2.5h with moderate use whereas on Windows, it's around 3-4 hours. Yes, I am already using powertop and TLP. =)

There are a few minor things I prefer about Windows here & there, but power management is the biggest single thing, agreed.

In truth I don't like any current OS - when you add up all the pros and cons, Linux has the best overall balance of attributes for my use. It's far from optimal though. I find the state of OSs in 2020 pretty sad.

A late addition because of something that came up today. I've had a laptop problem for a few days - screen blanking was failing. Immediately on blanking, the screen would reawaken, generally rearranging my open windows.

On Windows I would have vaguely but very briefly googled. I would either find a quick fix or not, and be on my way.

On Ubuntu I only bother searching online if I know what software's causing it, and it's open source. Otherwise I find the signal/noise ratio too high (and I rarely get useful answers on SO or other forums - I either get nothing or too many people helpfully but uselessly saying "try this!" "try that!"). More often I just dig into things myself.

So I trawled the syslog, couldn't initially find anything, narrowed down by triggering the issue deliberately while `journalctl -f`'ing, etc. I traced the problem to a recently installed Gnome extension that was crashing X on screen blanking. An uninstall failed so I had to find out where extensions are on the filesystem, remove it manually, restart mutter, etc.

The whole thing took about 25 mins.

The upside for Ubuntu here is that I could actually fix the issue. This is rarely a given with Windows (though for me it produces fewer such small issues). On Windows, if I can't fix something that's not critical within a few minutes, I end up just putting up with it. These accumulate over time and I find the OS increasingly irritating. Ubuntu's irritation level doesn't increase over time (though its plateau is way above zero). The downside for Ubuntu is that this really does involve more fiddling time (a known known because I keep logs). For me (a regular non-expert user) anyway.

I've used Ubuntu for development for the last 5 years, but due to the quarantine & hardware issues at home, I figured I'd give Windows a shot. With WSL 2 (Windows Subsystem for Linux 2) available, it's gotten so good! I can run our dev stack with similar performance to Ubuntu inside the subsystem, while simultaneously enjoying the larger ecosystem of Windows.

The only major roadblock I encountered was with PHPStorm, as it doesn't have native access to files inside the Linux subsystem due to the different file system format. In the end I opted for running an X server on Windows (via MobaXTerm) and running PHPStorm inside the Linux subsystem.

I wouldn't mind going back to Ubuntu (and probably I'll do so when the quarantine ends), but it was a nice surprise to see how good Windows has become for dev work.

Have you tried \\wsl$ , i use sublimetext windows to open file in wsl with that default share

I'd say chocolatey has been really useful for me on windows.

And for the past 2 months or so, WSL2, Docker Desktop (WSL2 enabled) and VS Code's WSL extension have made using windows for development about as nice as it gets.... all the non-essential stuff works (rgb controls, etc), and I can still just use linux for development using my GUI editor.

Maybe it’s gotten better, but that same reason made me switch from windows to macos(with some Linux in between, which was not great indeed). That plus not having to reboot every time you sneeze.

Rebooting often was true for XP and earlier. I own 4 Windows 10 machines, 2 laptops and 2 desktops. I never rebooted the laptops. Desktops were rebooted when there was a power glitch because I don't own an UPS.

These day I read more stories about people switching from macOS to Windows than the other way around.

Unless you disabled Windows Updates, your systems are probably broken if you haven't had to reboot the laptops.

I literally never rebooted my Windows 10 laptop other than for rare updates or driver installs that required it.

OTOH I have to reboot Ubuntu from time to time (once every week or two) because I can't solve a problem (eg. the suspend getting in a snit).

I agree. Recently I switched to Windows 10 Pro from Linux (mostly Arch and Ubuntu) and I don't regret it thus far.

WSL, Docker Desktop and VS Code with WSL integration. It works well enough.

+1 to Listary. I have to add that Listary is definitely underrated.

Qbserve (https://qotoqot.com/qbserve/) when I was on macOS, now RescueTime + Custom New URL Tab (Chrome extension) pointing to https://www.rescuetime.com/browse/productivity/by/hour/, so I get immediate feedback on my productivity (motivates me to keep moving) or slacking (motivates me to start working).

I cannot stress enough the word immediate. Delayed reports (after a week, after a day, or whenever I check) sure give a bit of reality-check and insight on what to change (usually only the first time) but were not useful for actually implementing these changes. (I have ADHD if that matters. For some people insight might be enough.)

Qbserve displays constantly the current productivity score. I had a love&meh relationship with RescueTime (since it does not offer a way to display productivity tracking all the time), but after composing it with a link to report on a new tab (my most common way of procrastination), it was a game-changer.

A small note - if you prefer something more private, and open-source, there is https://github.com/ActivityWatch/activitywatch (I use it as well). Not as polished, but clearly logging well, and it has Web UI on localhost, thus can be used with Custome New URL Tab as well.

Wow, thanks for the heads-up on ActivityWatch! I used rescuetime a bit a few years ago, but I really couldn't justify using it on my work machine (where I spent most of my time).

RE: RescueTime new URL tab.. that's really clever! Stealing this for myself. Cheers

- IntelliJ IDEA [https://www.jetbrains.com/idea/] (surprised no one mentioned it yet)

- Spotlight - for quick calculations

- Contexts [https://contexts.co/] and chunkwm for window management [https://github.com/koekeishiya/chunkwm]

- Maccy [https://maccy.app/] for a decent and beautiful clipboard manager

Wow, I didn't know you could use Spotlight to do calculations! Thank you!

For anyone on macOS who doesn't know, hit command + spacebar.

I feel like I spend all my time waiting for Intellij IDEA to start up and reindex everything... Does anyone feel like it is snappy?

neither of those two actions are "snappy" but I guess its understandably so.

reindex everything should be happening that often unless caches are cleared; you might want to raise an issue if it's happening more often than you'd expected

what I'm more bothered by is the regressions that creep in either IDE or official plugin updates; I've spent some amount of time on every update I'd deem wasted, just to find a YouTrack issue on it :\

Feel the same. It is always doing something, especially with a big project.

Try to change default GC to G1.

1) Probably not 100 hours but, terminator is very, very good: https://blog.al4.co.nz/2011/05/getting-the-most-out-of-termi...

The saving layouts feature is an absolute gem.

2) dmenu (https://tools.suckless.org/dmenu/) is a lifesaver. I use it even on Ubuntu to launch custom scripts. The autocomplete is good because unlike when I use alt-F2 I can actually tell if a command is type correctly or not. Also it's a little known fact but you can type full commands into it, complete with pipes, and it will execute it. For ages I had a bind against notify send so I could examine data by doing `Meta-P foo | show` which would dump it to a notification. Just really useful for getting data without needing to wait for a terminal to start, just to show you one thing or value you need for 2 seconds.

3) Also I'll go ahead and plug my filesystem tagger - koios (https://gitlab.com/finnoleary/koios). It has a feature where it will autodetect (using libmagic) the type of a file.

So you can do something like: "tag all the files that have the mime type 'png' files in the directory with the tag 'png'":

    koios auto image/png +png .
and then "give me all the files tagged with png that do not have the .png extension":

    koios show +png | grep -v '.png$'
It binds tags to files so there's no background processes or databases needed (aside from the actual 'tag name' database, which was done to save space), and you can move them, copy them, whatever, without worrying and the tags stay bound to the file.

Probably a given on Mac: iTerm2 Terminal Emulator https://www.iterm2.com/

Less of a given, still Mac: Rectangle Tiling Window Organiser https://rectangleapp.com/

For Linux I would use Xmonad to achieve the same as the two programs above.

I have been using Spectacle (https://www.spectacleapp.com/) for years wishing it had mouse driven window snapping. I even once tried to implement it myself but gave up. I just tried Rectangle by your suggestion and it is absolutely amazing. Thank you.

Been using spectacle for years but since it's no longer maintained I had to moved to rectangle. Very similar, love it

I have been looking for a Windows alike snapping tool for Mac. Just tried Rectangle and it works just fine, thank you!

Check out yabai for a great macOS tiling manager.

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