I've always had a strange interest in optimization. This is probably one of the reasons I love working with computers and electronics so much- they can be used to optimize, sometimes to the point of automation, so many tasks and then even the execution of this task itself can be made faster and better by writing better and better code. But I don't just see opportunity for optimization in programming, but also in how we go about our day to day lives. Thus, I tend to spend more time than is probably optimal optimizing my own workspace and work flow. So here goes: This is how I work.
I mostly use Linux because I find the way in which Windows forces work flow patterns onto the user incredibly annoying. I prefer to setup my system in a way that works for me. Using Linux doesn't really tell you much though, as theres a lot of options here. So, to start with, this is a screenshot of one of my screens:
In Arch Linux I use i3, polybar, and rofi for my desktop enviroment. At the bottom of this screen shot is 'Polybar', a customizable bar that can take input from any command line program and display it on the bar, and has some capability for interaction, like playing or pausing my music. I have mine setup a bit different on each screen, but worth noting is the centered text in the bottom which is Tolkien's Tengwar (elvish), these are the names of my open workspaces in the i3 window manager, my preferred desktop environment as it maximizes the use of screen real estate and allows for very fast movement of windows or workspaces among monitors- something I find tedious on windows or on in floating window window managers - as it is a tiling window manager. If you're not sure what that is, I recommend you give it a Google. (or DuckDuckGo, or whatever you prefer. You do you.) But this picture may be enough to give you the idea:
In the middle of the screen is Rofi, which I use for launching programs (and inserting emoji/kaomoji). Rofi more than fits my needs as it just works, and does so quickly.
For file management I use a combination of Thunar and cli tools. I use Thunar for a graphical file manager when I want to move a lot of files around because of it's fast navigation by typing the beginning of a word. I'm still not 100% happy with it, as a fuzzy search of what I'm typing would be nicer, but overall it works pretty well.
When chilling in a terminal I know I should use something like ranger, a popular cli file browser, but more often than not I use the basic built in tools of cp, mv, etc. in combination with autojump. Like most things in life Zipf's Law, applies so really the vast majority of the folders I visit are very quickly navigated with autojump.
Furthermore, I personally find that quite often I know some thing other than the name of a file that I need to find, so using
ncdu, a terminal based disk usage analzer that can look at any folder recursively, is easy when I know I'm looking for a large file. ripgred and fd fill the gaps for when I know something about what's in the file I'm looking for. Finally, I end up using rsync fairly regularly because I own way to many hard drives and ssds.
In that screenshot you'll also see I use two different terminal emulators. 'Deepin-Terminal' is my main go to, where I run ZSH day to day with OhMyZsh and the gnzh theme. Deepin-Terminal is quite good looking and has nice feature and easy themeing. As a secondary terminal I use Hyper with xonsh, a great shell that can run both python and bash in the same terminal and allows for mixing the two languages. It's great for quick and dirty one time use scripts.
On the note of the shells, my .zshrc, .xonshrc, and other config are available for download at this github link But I'd like to go in depth a little here.
I've 'replaced' via alias some of the built in commands like cat with alternatives like bat so that they work better for my needs. You'll also notice a few single letter aliases. The most frequently used of those are h to open htop and n for ncmpcpp, my music player (well client) of choice. I find out of the seemingly infinite number of music players I've tried ncmpcpp is the fastest and easiest to use once it and mpd are configured, and it doesn't crash when loading my massive library. I also use TaskWarrior for managing todos.
Getting out of my shell, some of the graphical programs I use everyday include Vivaldi as my web browser and typora or marktext for text editing in markdown. Vivaldi was a no brainier once firefox killed off Tree-Style-Tab and I couldn't bring myself to go back to tabs at the top. Since I've switched Firefox has made Tree Style Tabs possible again; however, I find that Vivaldi is just a hair faster for my needs. Typora and Marktext (I usually use marktext, but typora has TOC support which I need for large docs) are my go to for just spewing out text, like this, since they're unobtrusive and just let the content flow without formatting getting in the way. I've also found that they work wonders for taking notes in classes.
To quickly rattle off some others, I typically do most of my chatting through telegram which has a fantastic Linux client, though occasionally use IRC through IRSSI. I use Whalebird to post on Mastodon when I'm in the tooting mood. I do some package management using Pamac as I'm running Arch Linux, but do prefer to use
yay in the terminal as it takes care of my packages in the AUR as well. For my officey things I have yet to find a scenario where libreoffice doesn't do what I need. I mostly use nomacs for quickly viewing or doing minor edits to images. My main editor for hammering out code is VsCode with the PlatformIO IDE extensions as well as a bunch of extra plugins (Colorized brackets are a must). Also I have steam and Itch.io installed for gaming, though sometimes I reboot into Windows anyway, mostly for VR stuff though as with Proton most things run well enough anyway. For video editing, sadly, linux just hasn't quite had an offering I'm happy with yet so I reboot to windows to use Davinci Resolve (yes, I know Resolve can run in Linux, but it sucks). When drawing digitally I use a 1080pen tablet with Krtia to hammer out the base image unless I want to do something weird, in which case I might use any of a number of strange art tools including (but not limited to) Hexels, Black Ink, ColorTool, Dotgrid, Ronin, MagicaVoxel, and RexPaint.
I also end up spending a fair amount of time making music, and frequently get lost playing music in VCV Rack, where I use Cadence and Catia for running the Jack server and routing audio. I also sometimes use ORCΛ, a cool creative coding midi/osc tool for sequencing things. Rarely I use Renoise as well, when I'm in the mood for tracker based music production. Though, as much as I hate it, I often boot back to Windows so I can make music using Ableton Live and a whole pile of VSTs along with VCV and my real eurorack hardware. I also typically run field recordings and samples through audacity as a quick once over to fix the audio up a bit.
For electronics I use KiCad and Circuit Simulator mostly, though I've used Simulide on occasion. I also have Vivado and STMCube installed for when I absolutely have to use them.
I super rarely use some other misc tools like Blender 2.8, Etherape, Cutter, but not enough to go into much detail.
from a direct workflow perspective it obviously depends on what I'm doing. As covered previously for large, basic text documents I prefer markdown and those editors. Office is Libreoffice etc. But as I use those I like to have one monitor running a task that I deem a background task - something nearly autonomous that needs intervention once every hour at max, one monitor for web and other media browsing/research, and one monitor for the actual task at hand. In the case of less screens I settle for organization via workspace. I tend to use Git a lot and try to plan and document just as much as I 'actually work'.
To manage my schedule I have given in to the privacy sacrifice and use Google Calendar and the Sectograph app on both my phone and smart watch (both android).
Starting with how I interact with my computer, I'm one one of the nerds that uses Dvorak, but I've actually gone further than that as I have an Ergodone that a friend built for me and I've made my own layout which allows me to type some extra fun characters that come in handy: ☐☑☒⎨⎪⎫...ⅰⅱⅲⅳäő≥≤ ... you get the idea. If you have a QMK board as well the code has been pushed to the QMK repo and is availabe here. I also have a Stinky Footboard, which is literally a keyboard for your feet, that I've replaced the controller in so that it runs QMK as well, and I use it to for media control (play, pause, next, prev, shuffle). My mouse is a Roccat tyon, and I've found it pairs really well with i3 and multiple monitors so I can navigate around my large screen realestate quickly simply by flicking my fingers.
I don't want to go into spectacular detail about my specific hardware though, partially because I don't see any value in hardware bragging, partially because it's not applicable knowledge to most people. I will share that I think mechanical keyboards are bomb, and I love my Box White switches but CherryMX Blue keys are great too. I tend to prefer rocking a large, bulky tower so I can do frequent hardware swaps, and I usually have an obscene amount of USB devices attached to my system (at one point I had over 35). I've found for me, that 3, 27", 16x9 monitors in a row is a sweet spot, but obviously cost and space are considerations, on top of that I have a 1080p pen tablet, but honestly it's almost to much screen for one person to manage, so I leave that off most of the time. Running 4k can have it's downsides though, so having a quick to access 1080p screen when necessary is nice. Back to a workflow perspective, when I can I like to have a large, deep desk with a slide out keyboard tray so I can work on papers or other projects directly on my desk and get my keyboard and mouse out of the way when I want. I also like to use speakers rather than headphones when I can without bothering people as I find the comfort and freedom to move around much nicer. Right now I'm running a quadraphonic setup as well, which is a total blast when making music.
When I'm on the go I vary between two laptops, one that is a royal piece of junk that has a similar to my normal linux set up on it, and one that's running Win10 and a clone of my normal Arch setup on my desktop. The nicer laptop is a pretty beefy system for it's weight with some of the most bottle necked specs I've ever seen. The i7-xxxxU part is still funny to me. How intel can call a system with 2 cores an i7 in 2017 (when this laptop was released) is beyond me, but I digress. It works rather well for just taking notes and getting stuff done in classes, and I have windows on it as it ensure compatibility in the more professional environments. Furthermore, I can always just SSH into the my home desktop- since I have a backup ssh key stored in the RFID implant in my right hand that's never an issue either.
Other than that I have some hardware I use when working with electronics like a RigolDS1054Z Oscilloscope which is absolutely overkill for most of what I do and has served me well as well as a LHT00SU1 logic analyzer that I can use with PulseView on linux. I keep the majority of my smaller componentry (ceramic and electrolytic caps, transistors, resistors, diodes) in a binder filled with baseball card holders that have been labeled with sharpie. This is by far the most space effient method I've found for organization assuming you can trust yourself not to accidentally turn the binder upside down. I also have a tackle box filled with boxes of ICs, a small set of generic slide out drawers with bulk misc components, and a small toolbox for bulk connectors and wires. My actual tools themselves are mostly strewn about as they get used so often, but my main go to tools are a set of IFixIt screwdivers, wire snips, a bendy 6-armed 3rd hand for holding what I'm working on, and a cheap but functional multimeter - the AstroAI WH5000A.
On my desk I use the 49key Launchkey Mk2, LaunchPad MK2, and Artuira Beatstep Midi controllers, along with a Leap Motion running Geco (it's a lot like a theramin for MIDI input) when I want live input when making music. When not in use most of the gear nicely slides underneath my monitors.
On the note of music, I have a pile of guitars - 2, 6 string electrics; a 12 string acoustic with a pickup tossed in; and a 6 string acoustic with two different pickups mounted internally. One of the electrics has a whammy bar while the other has an gyro hidden inside with a USB cable coming out so I can send midi information based on orientation. I often use a pitch->CV module in VCVRack as an input over the 49 key keyboard as I find pitch tracking on a guitar much more expressive. At some point I need to splurge for an actual midi pickup. I also have a decent starter Eurorack setup for making modular synth noises and music which I've been using for developing my own modules as well. As of now the setup consists of the Behringer Neutron, a few mults, a Zone BF dual LFO, an 'Event' Function/ADSR/OSC, a dual VCA, a uO_C running Hemispheres, a Mod Demix ring modulator, and Tempi as a clock source.
I usually wake up at about 7:30, and then actually get my ass out of bed by around 8:00 and then be fully up and running- having had breakfast if I chose to- by 9:00
From 9 to 10:30ish on most days I'll fire up some Youtube and get a dose of news and content that's usually more educational in nature and usually tech related. My main go tos are Level1Techs and Philip DeFranco for news, and then content like that from TED talks, DefCon panels, The Theught Emporium, Cody's Lab, Live Overflow, CNLohr, 3Blue1Brown, and This Exists to name some of my favorites. at around 10:30 I take about 10 minutes to go through my schedule for the rest of the day and make sure my schedule and mandatory todos/deadlines match up and make any corrections that are necessary. Then I try to hammer out at least a little work on something that's on that list by either priority or just what I'm actually feeling up for. Around this time is where I usually have class, though that schedule varies from day to day, (or if it's summer) with most days I'm done between 3 and 5, from there It's a good mix of planned out time for myself, projects, and work/school. I do try to micro manage my schedule as a tentative plan (at least for weekdays) but I rarely end up actually sticking to that schedule. It's more of an extra reminder that I should be spending about that much time that day on that thing. I'm actually working to following it more rigidly though as it does have time set aside for all of the things I generally want to do and prevents me from accidentally getting into a YouTube induced coma.
To Further prevent time wastage I have my watch set to do very short vibrations, one pulse at the half hour, and two short pulses at the hour ( This wasn't actually my idea though ). This works pretty well actually, and has the added benefit of over time (pun intended) helping to develop a better 'feel' for what time it is.
When writing I usually stick with a simple outline first, fill in what I know, then mark todos for the gaps to come back to. This applies both for technical writing or documentation and for fictional story writing. I find this has the annoying side effect of expanding scope pretty bad, but it also ensures that everything that needs talked about is talked about. Of course the outline grows with the paper as well, but oh well.
This is an almost shameful habit, but I tend to just use Telegram's 'Saved Messages' feature to save most quick thought and notes as well as forwarding links or bits of conversation to myself. Furthermore, I send myself quite a few screenshots from pages or posts I'd like to come back to but can't easily get a link to. This extends over to other social media as well where I'll often save Reddit, Mastodon, etc. posts so that I can build up a 'get to it later' pile to hammer through in one sitting. While I'm not necessarily recomending this workflow it does work well enough for me, espically since I can forward messages from most people back to myself as I do the majority of my texting through Telegram.
To me, there's this sort of evil, pick 2 triangle of 'Ergonomics V Space V Cost' question for most purchases. You see, I have a lot of hobbies: I play a pile of different instruments, skateboard, do some martial arts, work with electronics, program, PC Game, mess with Ham Radio, do some digital art, read... You get the idea. Each additional hobby takes up space. I'm by no means attempting to live in a 'tiny home' but I do have to many things. This is of dramatic impact on my workflow as it can be incredibly time consuming to setup or take down all of my music gear (audio interface, MIDI devices, effects pedals, synths, etc.) so that I can hook up my electrical lab (PSU, Scope, Meter, Dev boards, etc.) So, for the most part, both have to co-exist on my desk to some extent- even more so when I'm doing electrical work that involves sound. This has lead me to the conclusion that there's a constant battle between space, ergonomics, and cost. Something like a MIDI keyboard is a great example: small, cheap keyboards exist but are incredibly limiting. Large, cheap keyboards also exist but are a pain to store. Multiple smaller keyboards (I mostly actually end up splitting the board to play two things at once) exist, but that's expensive. The same idea goes for having an easy to sort through electronics storage system, having a decent digital drawing tablet, or even something as simple as the speakers used for listening to music. I've been attempting to give careful thought to a few questions before I get anything 'is this significantly easier to use than a digital equivalent?', 'will I use it often enough to justify the space it takes up', 'can it do something I can't do with something else?', and 'How complex is it to setup/take down?' For example: The Rigol oscilloscope I own can do a much better job than most any USB scope, doesn't risk frying my computer, has a comfortable user interface (real knobs), and only really needs a power cord; however, it does take up much more space than a USB scope and it's relatively large size necessitates a fair amount of room for it be available on my desk. To me, the pros outweighed the cons. On the flipside, I recently decided I'd like to add some Hurdy Gurdy and Lute sounds to my music: buying physical instruments would mean I'd have to first get over the learning curve to be proficient at playing them, I'd have to find a place to store them, and I'd have to pay upwards of $700 minimum to get reasonable quality versions of both. So, instead I purchased two virtual instruments that give me pretty nice Gurdy and Lute sounds while only requiring I have a high level knowledge of how the instrument functions and letting me use my existing MIDI controllers. I do lose out on some sonic possibilities, and, admittedly, it's less fun to play, but I deemed that a low price to pay for the convenience. Finally, from a sheer ergonomic perspective some things need to be considered. Realistically, from a space and cost perspective having multiple monitors is all around bad, but the massive advantage in ergonomics and workflow is well worth the cost to me.
I hope at least some of this was interesting and/or helpful to you. If you have any questions or comments as always feel free to send me a PM on telegram @Vegadeftwing
I'll probably be updating this same blog post from time to time, adding to or changing things as the way I work ever evolves, so if that's something that interests you, you may want to check back to this in the future.
I'd also love to hear what you do differently and why, I'd even gladly share it on this blog.