Digital Minimalism for the Working Hacker
blog.zdsmith.com
blog.zdsmith.com
Specifically, command line interfaces to Slack and GPM just add more headache and frustration.
My setup: a terminal with tmux; Firefox; Spotify. (Recently switched from GPM, would recommend). Stock everything except dark themes on some stuff and caps lock->ctrl.
I don’t have some super-enlightened workflow where everything is in terminal or has keybinds or something. But more importantly, I’m not continually wasting time on changing my env and adding complexity.
And then I became a consultant and was logging into someone else’s machine every day, often when I couldn’t install any customizations at all. I learned to love bash as-is, and vim as-is. And my custom launcher stopped working, so I switched back to the default Android launcher. And then my work gave me an iPhone that I couldn’t customize. And suddenly I was spending more time working and less time customizing and my productivity shot through the roof. All I had to do was stop seeking things to make me work better and actually just start working. And in addition to higher productivity, I now had more free time in the day because my work got done faster.
It really is freeing in a Zen-like fashion to just use a tool as-is and not constantly wonder how you could make it 5% better or 3% faster.
All I need to get started.
When I got a second laptop last year, within an hour it had my python development tools, desktop wallpaper, browser plugins, wifi passwords, and the master branches of my most recent git repos cloned into $HOME. No more taking weeks to hunt down all the tweaks and utilities I need.
Automation takes effort, but having a consistent reproducible environment has been well worth the effort!
First I've tried mg. Nope, back to Emacs. Then I've tried no init file at all, but the defaults were really driving me crazy.
I've tried Spacemacs in Evil mode. It's an amazing and very polished package, and so many things just make better sense... But the Vi editing style is just not for me, I needed to get stuff done and muscle memory was getting in my way. Next I've tried Spacemacs without Evil, and then Prelude, and both were quite decent, except I was missing maybe half a dozen of my most common tweaks... Like C-x C-a to call align-regexp. When I started copying over just the bits from my old config that I needed the most... And turning off some of the more annoying stuff in Prelude (eg. I dislike both helm and ido)... Look, we're back to square 1.
I went back to my old config that I've been tweaking endlessly for over a decade. I finally feel productive again.
The only thing I still have some configuration for is vim[0]. Mostly to make it work better with tmux and for an improved JavaScript development workflow.
[0]: my .vimrc: https://github.com/mxstbr/dotfiles/blob/master/vimrc
This, too, is my dream (or sorts).
- Spotify without the spotify interface. (Google Music, in his case)
- Slack without the slack interface (IRC, I guess)
- Email without the web-client or sluggish Apple mail interface.
I know there are CLI for each of those use cases. But it takes commitment to learn and get them working to your liking.
A console or text-based interface seems like a big equalizer; for sure it's often easier to manage a console application but it puts hard limits on how much attention these applications may siphon away. Perhaps it's easier for my attention to wander than others, but when the task at hand is particularly boring or unpleasant, I find I can waste quite a lot of time browsing through music or "catching up" on likely useless Slack conversations. Since I've moved them to a text-based interface, I do feel I am wasting time like this far less often.
On a sidenote: Any tips on making my digital experience less attention focused? For instance I would really like to use surf or uzbl but they don't have support for MacOS and I would still need an adblocker/ reader mode.
I believe that's why "power" users gravitate to the command line. With the command line and terminal you have a much more cohesive experience with your computing.
Jeff Raskin with the Canon Cat (http://www.canoncat.org/) and his son Aza with Enso (https://therichwebexperience.com/blog/aza_raskin/2007/01/ens...) and later with Ubiquity (https://venturebeat.com/2008/08/27/mozilla-labs-aza-raskin-t...) attempted to address this problem.
Actually, the first time I started to recognize this issue was back in 1996 when I read about David Galernter's Lifestreams (http://www.cs.yale.edu/homes/freeman/lifestreams.html).
The current state of affair;, Emacs goes quite a ways to solving this problem. Where Emacs falls down is the ability render html content and graphical content in general the way a browser does. If Emacs could render graphical content then I think it could be used to implement my ideal UI.
My ideal UI would be this:
1. Command input component similar to browser omni bars or Emacs M-X interface which parses command input and delegates to service.
2. Result of command entry is a list of 0-N items presented in a tree list view with the first item in the list selected by default. Think old Usenet UI.
3. Any item selected in 2 renders its own view. Again think of old Usenet UI. However instead of just text this item renderer can be anything. Text, graphics, embedded video, etc.
4. The resultant list of any command can, in turn, be used as input to a following command. Think Unix pipe.
The result is an interface that's a hybrid of the command line and Emacs M-x but is modern enough to handle more than text rendering. With this interface you don't develop applications but agents/verbs that return items and you provide renderers for each item
You might find what you're looking for in dmenu: https://tools.suckless.org/dmenu/
What I'm thinking of is limited in scope to "commands" that are registered with the component. Maybe dmenu can be bent to this use case; thanks for the link.
This really resonates with me, and I have to say I agree.
I try to treat my browser as a tool, it holds state only for as long as it's open. I pretend that at any time the browser (or computer) could crash and I would loose my place.
I use my web browser (I switched back to Firefox from many years with Chrome) very similar to how I use my email inbox.
For email this is "inbox zero". If I need to reread an email, respond, or do something with a message, I mark it as unread. Unread stuff gets cleared at least once a day (often more now that I have a smart phone). I open my email and work it down to zero (or as close as I can) and then I close it. Email acts as a tool, a communication / todo list, hybrid.
An unread email is the same as an open browser tab, it symbolizes work-in-progress.
With my web broswer, I open it as needed and open as many tabs or even windows as I need. When a tab, window, or page is no longer needed, I close it.
To "save" a page I create a bookmark (but I can't tell you the last time I've actually used bookmarks to find something). Another way I "save" is when I'm tearing down my web browser, I pull a page's tab out into it's own window. This marks it as "unread"; I need to do something with it.
This process doesn't really save the page, it just allows me to clear out the other tabs and context out of my head. It helps me focus, and reminds me to just do that task on the single tab instead of letting it linger.
I close my web browser multiple times a day.
I follow this practice with my terminal windows as well.
So, I use Emacs as a window manager. My computer boots into a full screen Emacs, so I don't think of it as opening Emacs — I think of my computer as an Emacs-based thing, which in turn contains a bunch of other tools (like M-x shell for running shell commands).
The way the author uses xterm with tmux and Vim, I use Emacs instead.
My environment has a large font and no syntax highlighting. I find that language mode regexps so often get confused that they're more annoying than convenient.
I would really, really like to try working with an e-ink monitor. Slow latency and monochrome would be a benefit as far as I'm concerned.
For what language modes do you have that experience? I haven't used emacs myself much, but in other editors, most syntax highlighting descriptions are pretty good. The only exception to this rule is highlighting Haskell, which is apparently a monstrous challenge that no-one can even do remotely well.
Heredocs in shell, metaprogramming tricks in Ruby, reader extensions in Lisp, nested quotes, etc etc etc—I might be weird, but I feel like I run into these edge cases a lot, when editors think my parens are unbalanced when they're actually not, and so on.
Auto-indentation rarely formats things the way I want, too, and I very rarely need anything more advanced than shifting blocks in and out.
I also just find it a bit strange that we have culturally started to believe that editing code is nearly unthinkable without different colors everywhere!
In sublime text, for example, the syntax definitions are basically stack machines (if I'm not mistaken), and can therefore parse any context-free grammar. This is clearly powerful enough to handle all the edge cases you mention.
I really like the author's place -vs- tool metaphor to contrast wannabe immersive experiences with tools that stay out of your way. I don't think it makes sense to avoid having places you go to (where you feel "at home") -- I mean that very generally, but even in the specific case of computing, your goto places might be your favorite browser, the command line, the unix system, Emacs, your IDE etc. A place where you feel at home, at control, with a sense of the multitude of possibilities lying ahead, and still in the driver's seat.
The important requirement then is that the environment shouldn't try to nudge you around (especially towards misaligned goals). This is where most web/software platforms of today come up short, IMHO.
This metaphor is also the best elucidation of Alan Kay's pithy quote (reproduced approximately): To me, a computer is worth more than my car, because of all the things it enables me to do. Most people, however, pay about as much for a computer, as they pay for a TV, and use it in roughly the same way.
I can see a relation to the economics of software development. Companies want their products to be places, so they capture a slice of your attention and deepen awareness of their brand. Nvidia is an example: It is just a single part of the computer hardware, yet it comes with a GUI tool and often demands attention.
Free software can afford to become a tool. Imagine if you boot a Linux desktop and various involved projects show you a series of splash screens first: This desktop experience brought to you by systemd, dbus, dnsmasq, CUPS, NetworkManager, PulseAudio, Gnome, Mozilla Firefox, Gnome Keyring Daemon, gvfsd, and bash.
That really did help me think of my music player as a tool and not a place. Though the little scrolling text could be distracting sometimes, I do occasionally find myself missing that style of interface.
My WinAmp substitute is Audacious. It plays music, has repeat, shuffle, playlists, and little more.
I tried to use Amarok to see what the fuss is about and was repulsed. It's not an audio player, it's an unfocused sound-related system thingy.
WinAmp is a tool, and it still works. If you aren't using it, perhaps you actually want a place instead of a tool?
For that matter, Winamp is still a tool you can use to access streaming services: rtsp streams / internet radio / ShoutCast / etc.
The problem is not with the tool, it's with the places you want to bring your tools to. They specifically don't allow you to do that. They close down the API's and take down alternative clients.
Spotify feels like a place because it is a place, and it's not your home.
As an Emacs user, I agree with this. The author's preference for more tools and fewer immersive applications still resonates with me because I see Emacs as a place for all the tools I need for development and writing.
Understanding my computer this way has brought me a lot of sanity. I only use a tiling window manager (xmonad), Emacs, a browser (firefox) and a Unix terminal (urxvt).
Previously I was trying to move most of my computing into pure Unix CLI. While it was fast and simple, I found most ncurses applications (e.g. mutt, remind, irssi) do not really compose as well as simple Unix programs do (e.g. wc, grep, xargs). Moving everything to elisp packages instead (e.g. org, notmuch, magit), where all elisp nicely blends together has been a great improvement. Plus dealing with configuration in a functional way, by switching to NixOS.
I just feel tired of huge, complicated software that requires big time investment to customize. I want things to be simple and modular. My setup is not beautiful, might have fewer features than full DE, but it's ergonomic and I understand what all my configs do.
- no distractions
- minimalism, most navigation on the keyboard
- easy to setup a startup script that preloads your default screens / workspaces / apps setup
- easy to map your workspaces in your mind
From machine boot to coding: 30 seconds.I found it on distrowatch; I installed it about 6 months ago on an old laptop and I'm pretty happy with it.
http://planetwatt.com/new/index.php/about/
"wattOS is a lightweight Linux operating system remastered from the core Ubuntu Linux build."
The interface is fantastic, it's the first WM I've used (apart from maybe tmux or vim) that actually manages my windows well. In hindsight the desktop metaphor is such and obviously dead end that we've wasted for too much time on. It will take some retraining, but even things like tabs in the web browser no longer feel necessary, the WM can handle this and give a consistent global interface. MS is kind of heading in this direction too: https://www.theverge.com/2017/11/28/16709190/microsoft-windo... .
I started off with the manjaro distro (https://manjaro.org/category/community-editions/i3/), it's got a fair bit of bling that you won't get by default elsewhere but the performance is great.
I'm not just saying this just to nitpick - I think the stateful daemon concept is a useful extension to the place/tool metaphor and might be a way to achieve the author's desired web browsing experience.
For example, what if web browsers could move tabs to a sort of "invisible window", and there was some shell command like "recall-tab Hacker News" which foregrounded them into a new window? I think something like this might be already possible with something like surf or uzbl and window manager cooperation.
In hindsight it's crazy that I'd fiddle with WM_STATE_SOMETHING in compton so that X has shadow but Y doesn't if they overlap with transparency (or something like that). My dunst notifications looked very aesthetically pleasing but... so do countless default notifications on mainstream distros.
Yes, the whole mopidy/mcp/whatever looks really rad, especially if a program uses vi(m) keyboard shortcuts, but my music player really isn't something I want to think about and learn. Playing music isn't such an integral part of my work day that I need to make it more efficient.
I am now using a MacBook Pro at work and on my desktop at home I use Antergos with Gnome. The latter is perfect as it gives me up-to-date packages and easy access to the AUR, while still coming with the bells and whistles of Gnome.
I am also not sure if tiling windows really improve your productivity. I would say that most people would be better of having their apps on full-screen, to minimize distractions, instead of having all sorts of windows side-by-side.
Ultimately I nowadays resonate more with what some other posts have mentioned: pick a platform and programs with sane defaults and only deviate from them if it's really worth it. If your job requires you to look at several terminals at the same time constantly and things like terminator/tmux/gnome-terminal don't do it, then sure, look into i3 (herbstluftwm/[insert flavor of the month]). Anything else I would now consider premature optimization.
Nevertheless Slack still manages to do it badly: Cmd+Shift+K takes 3 seconds to load the list of channels for a quick jump. How's that considered usable?
It's something I generally miss: the ability to do actions using the keyboard. I think IDEA did it relatively well: their double-shift "Search everywhere" window works both fast and literally searches everything, providing something quite familiar to the console.
I'd say in most cases it takes more time to learn a console application. GUI's these days are, mostly, pretty intuitive. CLI applications are not intuitive at all.
The difference is, for me, that GUI use quickly levels out in efficiency. _If_ I have learned the CLI commands and know them well, I generally can do tasks a whole lot quicker than a GUI I know well. It just has a higher up-front cost, which may be very worth it, to not worth it at all, depending on how much you use the application.
GUI programs can be intuitive too, but they also have their own special anti-intuitive things: meaningless icons, weird drag and drop paradigms, etc.
A multi-tabbed configuration would be the worst counter-example of the former. On the other hand mentioning IDEA again - their config window (Cmd+,) directly allows one to search for the elements of the configuration in a flat manner. That's damn efficient.
Have you ever tried to scroll through a list of 100s of items? What if all of these items are in pop-over menu that closes if you accidentally click outside it? How much easier that is in a console though.
I would always vouch for software that is both easy to use right from the start, but neither does not hide it's functionality anymore: just the way we have moved from yellow pages on the internet arranged in a tree-like fashion for a purely flat Google interface, I would like to be able to use software in the same non-hierarchical way.
It goes into way more than that.
If by "purpose" you mean "what I get out of this", then not much. It's a rant, not some tutorial.
But really, I -- and everybody else -- should really just use an IDE. For OO languages you need to have intelligent refactoring (and IntelliSense) and so you need to have an IDE. Refactoring tools are to programming what nondestructive editing is to image editing: a total paradigm shift in workflow that no one these days can live without. It takes a lot of effort to extend Emacs to understand the target language well enough to support these features (and it won't be done in elisp).
1) It is claimed that using keyboard-only controls reduces "context switching."
2) It is claimed that tiling window managers are simpler and more logical, because you use more of the screen real estate and keep everything open all the time.
3) It is claimed that vim and emacs are better because the brief keyboard commands allow for amazing power with few keystrokes.
Alas, these are almost all arguments voiced by people who grew up with technologies built around severely limited hardware constraints. GUIs were terrible for the longest time, and ten or twenty years ago you certainly couldn't get acceptable performance on them when working remotely.
There are very good reasons why people would avoid all of these tools. Hardware is much better. Compositing window managers are much better.
It is particularly understandable that people avoid vim and emacs. And there's really no empirical evidence at all that they save time, improve accuracy, or anything else.
And any empirical studies on this question would have difficulty isolating the variables. People who do understand systems at the low level, and with all the historical context, could very well be better programmers in some ways... but not because of their environment.
Thinking you could become like Richard Stallman by using emacs is cargo cult reasoning.
The 'refresh rate' of a line editor would be a couple of seconds at best and to do an edit-compile-test cycle would be on the order of a couple of hours, two per day if you are lucky, but most likely only one per day.
To do this: ctrl+U (in FF) -> look for css link at top of html -> look for font names near top of css.
Every one of us minimalists draws the line somewhere else. I like vim, Python, Rust, RSS, web of documents rather than web of applications, static blog generators, roguelike games, symbols and symbolic graphics in computer games and boardgames. I prefer Ultima IV graphics to Ultima V graphics , because the latter started drawing individual torches, chairs, dishes, bushes, etc.
I'm not anti-modern. I just have an eclectic taste. I pick what I consider the best of various areas. I dislike most social media. I would like Twitter if it wasn't overrun by bots. I have a phone I can throw and break a window with, in fact I fell on it from my bike and it's still okay, but my clavicle broke. When people are starting at their smartphones I either look around (in a bus etc), at other people, through window, or read a book. I'm saving for an E-ink device, it's too bead the technology stagnated because of tablets and smartphones.
I hate being labeled a luddite or cranky because I don't sheepishly run into every innovation. Not all change is progress.
I'm not anti-modern either, but it's hard to pinpoint what makes me choose differently than many others. Here's two relevant outlooks I hold, but I'd say that they are insufficient to explain this behaviour. Trend following has no value, unless to fool someone. Solution's popularity does not imply that it is better.
While I'm one who thinks there's always room for improvement, I've owned about 5-6 various Kindles and if you're interested in having hundreds of books on one portable device you should just grab one.
I've got the 1st (I believe) Paperwhite and it's all I need. I've looked at the newer Paperwhite and the Oasis but I just don't need the improvements they offer. Any paperwhite is fantastic. The reason I did upgrade to the paperwhite from whatever Kindle I had prior was the backlight was an absolute revolution. I used to have a battery powered light I had to stick on my previous kindle.
The $80 for a Paperwhite is a great deal for what you get. I have 0 complaints. It could be a little faster and I prefer buying books on Amazon from my phone or laptop (edit: and not through the Kindle directly) then reading them on the Kindle but it's not a show stopper at all.
Also, word of advice, if you're into Audible you can often find better deals by buying the Kindle version w/ Whispersync. I've almost bought $15-20 audible books before then saw that the kindle book was $7 and after that purchase the audiobook would be $3-5. It's not always the case but I can frequently find good deals on buying both.
Also, I would prefer a device that isn't from Amazon. They're probably all "made in China" anyway so any of them can be bugged, I guess...
I consider message boards / forums bloated and clunky. I miss usenet and threaded discussion. Disqus technically does that, but it takes what, 20 seconds to load ? And after recent acquisition it's only going to get worse.
I think threaded discussion is much more like natural human conversation than "topics" on message boards. That's shoe-horning discussion. They invariably get off topic sooner or later, and moderators pride themselves on deleting posts that stray too far.
It boggles my mind why topic-based message boards remain popular.
With improvements over HN: https://www.talkyard.io/-32/how-hacker-news-can-be-improved-...
Hmm I think threaded discussions, make the more sense, the more people join the discussion. If 999 people talk about something, they're going to split up into smaller groups, each group talking about a sub topic = thread. And everything laid out in a flat way = a huge mess. But if just 5 people talk about something — then they can stay focused on the same thing all of them. Flat = more ok.
No not yet. So far I've been focused on coding though (and I've learned that's the wrong way to get things done, I should instead start with validating the idea). But now a MVP is finished, and I'm shifting focus to marketing & PR. And one of the first steps, is ... to rename the project from EffectiveDiscussions to Talkyard. That's what I've been doing the past week, and ... the plan thereafter is to focus a bit on embedded comments for static site generators. There seems to be a slight vacuum here; Disqus isn't so popular any longer, it seems to me, among tech people = those who use static generators.
> there are quite a bit of forum platforms out there
Yes that's a problem for me. When I started this, in year 2010, there weren't. But I spent many years doing the wrong things, getting a job again & doing this on the spare time only ... and now suddenly there's Discourse, Flarum, Slack, Mattermost, Rocket Chat, Spot.IM, Discord, Matrix, and others. Maybe I was too slow. On the other hand, Talkyard is the only project with HackerNews topic types + chat features combined, so maybe it can find its niche.
Parent post = red indentation 1 = orange yellow, blue, green, brown, grey, black, white, etc. Then colors could cycle.
I think it would make it easy at a glance to recognize which posts respond to what, after some initial getting used to. No clicking required and I think it's more intuitive.
For colorblind users you could use SVG pattern backgrounds. In fact, it could be better for everyone, because you could have more patterns than visually distinct colors.
When there is enough space for indendation, though, I'd prefer indenting. Otherwise, cannot visualize more than the first indentation depth, right.
(Hmm not sure what you have in mind with "no clicking required" — Hacker News and Talkyard also don't require any clicking?)
No clicking required - I mean clicking to jump to parent. That's introducing GOTOs to online discussion. If possible, I'd rather have a more intuitive way. Or maybe even something as blunt as printing the indentation level directly as a number!
Hmm that's an interesting idea. I'm a bit worried the resulting page would make use of too many colors — maybe a grayscale and patterns would be better (like you mentioned).
One would, however, still need to click-and-jump, or scroll-manually, to find the parent, if one needs to reread it, and it's not on screen. I think the colors would mainly be useful on large screens, where one sees the parent comment without scrolling. On mobiles, I think click-to-jump-to-the-parent is more user friendly (rather than scrolling-scrolling-scrolling and scanning for a certain color).
Most message boards are ugly in this aspect: they use more vertical space for displaying irrelevant user information and avatars, instead of focusing on content. A post 'td' or 'div' is always at least as high as the left box with avatar and user info. Posts with few words become very wasteful. I think it should be the opposite: the post row height should be only as high as needed to fit post content. If the user doesn't post enough, his avatar/user info is trimmed. That should be doable with SVG avatars at least.
I can't really do anything about employer mandated Slack, but most corporate or hosted email is accessible through IMAPS and SMTP. Can't do much about Spotify, but I don't use that while working anyway, I tend to buy music files if it's convenient to do so, and I play those in cmus.
The default keyboard shortcuts are also pretty great in standard VTE3 terminals like Termite and GNOME Terminal (Ctrl + Shift + V for paste, Ctrl + Shift + C for copy), though that isn't specified by VTE3 itself. Rectangular selection works better in VTE3 than in URXVT or XTerm.
- graphical programs (but Blender makes a heavy use of hotkeys) - some games - new interfaces. Mouse is easier to use initially. Websites fall into this category, I'd say they're even a pathological case: it's pretty common for a website to radically change its interface. It can be partially dealt with, for example Konqueror used to display link hotkeys when you press CTRL. I need to look it up.
Most of the time you don't require extra precision a mouse offers. A button press is binary, so why require precise movements, mess with icon sizes, etc ?