site.lyte.dev/content/uses.md
2023-07-17 23:53:09 -05:00

30 KiB

title description
Uses About my tools, workflow, and other things I use as a software developer.

This page lists the tools (both physical and otherwise) that I use to do my job as a software developer along with some thoughts on them.

For other pages like this from other folks, check out this repository: https://github.com/wesbos/awesome-uses

I'll go through a theoretical "day in the life" of myself working. Mostly to help me remember all the stuff involved, but also as a means of storytelling and being imformative. I normally don't drop brand names, but since that's kind of the point here, I will be doing a lot of name dropping. No links to products for simplicity, but everything listed here should be searchable. If not, let me know! I'll try to link to anything free, though, such as software.

I'll break stuff up by topic as things come up so you can skip things that are not interesting to you.

I also think that in general sharing this much information about yourself isn't the best idea. However, since I'm confident the bots can't know much more about me that they already do and this will really only mostly be useful to my fellow human beings, I think it's worth sharing. I hope you discover some cool new stuff! Better yet, I hope you recommend me better stuff! I'm always wanting to try new tools and discover something new that's good at something.

Regarding the configuration of my machines and the software referenced below, please refer to my dotfiles repo!

Good morning!

I wake up when my kids do out of a Purple mattress.

I slip on my PineTime wrist watch, grab my Android smartphone and backpack, put on my prescription glasses, and usually make some tea.

Mattress: Purple King Size

Sleep is real important, so get a good mattress! Of course, "good" here is highly subjective, so you will want to do your own research. We usually have a kid or two join my wife and I in the mattress, so we went with a king size to account for this. Fantastic decision!

Smart Watch: PineTime

I love my PineTime! It serves as a good flashlight in the pitch black of a baby's room and can tell the time. That alone is good enough. However, it can also vibrate when I get notifications on my phone if I want, which I do use on occasion. The price is also unbeatable at 25USD and the InfiniTime firmware keeps improving! I get about two weeks of battery with light use and bluetooth off. I get about 5 days if I've got notifications on full blast, but they recently improved the firmware and claim this may now be more than double!

Smart Phone: ASUS ROG Phone 5S

I bought the phone that I can get root access to with the biggest battery, nicest display, and a headphone jack. That's pretty much all I want in a phone. The speakers are a great bonus. The two USB-C ports is actually a super nice feature since I can connect peripherals while charging without a dock or crazy dongle. I've also used the video mirroring on the side port to good effect a few times in a pinch. I love this device so much I've bought it twice. I'm not sure I've done that for anything else...

Android-Specific Software & Applications

Since I'm discussing my phone, I'll go over phone-specific apps (and some common with my laptops/desktops) now in no particular order. I have no idea if any of these have iOS equivalents, but here ya go.

  • Firefox as my web browser
    • Firefox supports extensions even on Android! I use the following:
  • F-Droid as an awesome resource for applications
  • Termux for doing Linux-y and terminal-y things on my phone
  • OpenKeychain for mobile GPG key management
  • Password Store for interacting with my password manager database
  • Bitwarden for interacting with shared password databases
  • Magisk for managing Android root access
  • NewPipe for YouTube access without dealing with ads
  • Smart AudioBook Player for listening to audiobooks
  • Gadgetbridge for interfacing with my smart watch
  • Obsidian for reading and writing my notes (sync'd via git)
  • Fedilab as my mobile fediverse client
  • Weechat-Android as my mobile IRC relay interface
  • Tailscale for accessing my VPN
  • Google Wallet for NFC payments (tap-to-pay or contactless) because getting cards out of a wallet is so pre-COVID
  • Google Messages for SMS, MMS, and RCS
  • Google Maps for meatspace navigation
  • Pocket Casts for listening to podcasts
  • Spotify for listening to music

Backpack

The portable office! I keep my laptop, a multi-tool, extension cord, power strip, laptop charger, a suite of adapters and flash drives, water bottle, and the odd cable here or there. If I'm feelin' that I might be gamin', I throw in the Steam Deck. More on all this later.

Server Room

Once the day has started and I've said my goodbyes to the fam, I head downstairs to my basement where my home office is located. I walk past a super overkill server rack I got on Craigslist. It holds a few things, but the most important things are my home router/gateway. It's connected to a Google Fiber jack where I get 500 Mb/sec (symmetric) speeds for about 55USD/month. It's hooked up to a Netgear 16-port gigabit switch which in turn is hooked up to a bunch of little devices, the most important of which are my home server, WiFi access point, and a really long cable that goes to my desk where there is another tp-link 8-port gigabit switch.

The rack also has a bunch of loose cables, peripherals, and other random gear, like a big knife. I think I was using it to strip some wires. I should get some easy-mode wire strippers.

Router & Gateway: Any decent dual-NIC machine

For a long time, I used a Raspberry Pi 4 with a USB3 ethernet adapter. It did great, too! But then I wanted it (and my ethernet adapter) for another project and I scored a Datto Alto 2 with 2 NICs built right in on Ebay for like $30. Ebay is awesome.

The Datto Alto 2 is great, but not because of what it is. Any little dual-NIC box will do nicely. It's running Arch Linux and is configured via the contents of this repo (please be nice to my network). Having a router I'm in full control of has helped with networking problems immensely and makes port forwarding stuff a breeze. I'm roughly familiar with its workings, which makes troubleshooting network problems that much easier for me.

WiFi Access Point: Unifi AP-Pro

Fantastic access point that plays nicely with my very DIY home router. Not really much else to say. I set it up a long time ago and update it with some regularity, but it just works. At some point, I'd love to get wireless devices on their own VLAN for another layer of security.

Ethernet Switches: Anything with enough speed and ports

Seriously I just bought the cheapest switches at Micro Center with enough ports for me. They're getting hilariously cheap, which is great! Having extra ports for ad-hoc stuff, like LAN parties, is a must-have for me, even in the age of WiFi.

Share the load.

Server(s)

I have a lot of servers, but the main server is just an ASUS Chromebox 3 that I flashed Arch Linux to. It pretty much just runs a big ol' Docker Compose setup with a sprinkling of other non-Docker'd services. It can do the hardware transcoding for Jellyfin, my home media server, and just generally does not break a sweat.

I recently was given a Dell R720xd with 20 hyperthreaded CPU cores (40 threads), 256GB RAM, and 44TB of raw disk space, which I am very excited about, so I'll probably be moving most stuff to that bad boy, though I expect the power bill to go up just a tad.

I have a few other cheap machines with larger disks at friends and family's houses for off-site, encrypted backups of important data. I should really take the time to validate and automate my backup setup, because right now, I do a completely garbage job of it.

Any paid client workloads are served via redundant mechanisms via cloud services, generally Digital Ocean, and backed up with whatever the relevant cloud offering is.

I run the following applications for my home:

I run a few services from the cloud as well:

  • A small DDNS application that machines report to so I have relatively up-to-date public IP information on most of my devices (this can't run from home for fairly obvious reasons 😉)
  • Various monitoring scripts for specific things (also can't run from home - who would monitor the monitors?)

Starting Work

I sit in a way-too-expensive computer chair at a homemade desk and wiggle my mouse or slap my keyboard until my workstation wakes up. I punch in my password and a script fires off to make sure I am ready to work. It does stuff like have me log in to various work services that need daily (or hourly) authentication and making sure I remember to review certain reminders and things of that nature.

I usually spend my work mornings reviewing neat things I read about the night before on my various feeds -- assuming nothing urgent is happening with work, which there usually is not. Tinkering with things is super important for learning. This is usually done by pulling down my notes as sync'd from my phone, where I do most of my reading.

I may also spend some time playing games or working with electronics in the workshop area.

Then the standup meeting notification pops up and I spend about 10 minutes reviewing work stuff so I'm ready for the day. I make sure any audio/visual settings are reset for the workday from any tinkering I may have done the previous evening, usually with musical instruments or just general goofing around with Pipewire.

Chair: Steelcase Gesture with Headrest

Like a mattress, very subjective. Get your chairs secondhand for way cheap and you can get some heckin' nice chairs. I spend about 8 hours a day in my chair, so having a good chair is well worth it, even if the price tag is 1,500USD. 😬

Desk: Custom

It's a huge slab of butcher's block I got from Home Depot for about 200USD and I made some really crappy legs to try and hold it up. It's huge and awesome and by the time I can't move it around by myself anymore is probably a good indicator for retirement.

You can see an old but decent picture of it here: https://files.lyte.dev/images/archives/battle-station-2020.jpg

Mouse: Logitech MX Master 3 and Mionix Avior Pro

The MX Master 3 is my default, go-to mouse. It's great. I don't use any of the fancy features, really, but the mousewheel on it is real special. Can't go back.

The Avior Pro I got a long time ago after my last mouse bit the dust. I really only pull out for gaming on the more competitive side, such as Counter Strike. For pretty much everything else, the MX Master 3 is not noticeably bad -- even for Doom Eternal.

Keyboard: Sofle Choc RGB

Another very subjective thing! Building and programming your own keyboard is something that is super fun for heavy keyboard users, which I think is most people these days. This one is focused on being good for my hands and wrists to use for long programming sessions. It's split into two wireless pieces so each hand can move them independently and the keys are laid out in a sensible manner that fits the human hand. There are other features that are nice, but that I rarely use.

Here's a picture if you like: https://files.lyte.dev/keyboards/zofle.jpg

Monitors: Aorus FO48U and 2 Dell U2720Q

I stumbled into having a huge 4K display when COVID had Postmates send our little Kansas City satellite office packing and I took the meeting hardware home. At some point, I plugged it in to see what World of Warcraft would look like in 4K on a big screen and realized it was actually amazing for programming as well.

Here's roughly my monitor layout, though I usually have two of the secondary monitors -- one on either side: https://files.lyte.dev/images/archives/battle-station-2022-10-13.3.jpg

Laptop: Lenovo T480 and MacBooks

The T480 is a recent acquisition. It was pretty busted up when I got it, but I bought the high capacity external battery and some phat sticks of RAM and replaced the trackpad. A little bit of superglue and a good cleaning later and I've just fallen in love with this laptop. Sometimes I use it even though I have a really beefy workstation with what I consider to be a pretty high-end setup -- it just feels so cozy! All my machines run Arch Linux configured as specified in my dotfiles repo.

Work provides MacBooks. I'm able to use them as proxies and simply SSH into them for work-related tasks. They otherwise run Linux virtual machines or serve as dumb terminals to Linux environments in the cloud where I do the majority of my work. In general, I'm not a big of macOS and its interface, but I fully recognize that I'm used to a very bespoke and unique way of interacting with my computer.

That said, before work really cracked down, the M1 Max MacBook Pro they got me was one of my favorite machines ever. Insane battery life, performance, speakers, display, and the ability to run Linux natively on it is going to be really hard to beat. I miss being able to use that thing to its fullest!

Desktop: Custom Rig

Probably easiest to list the parts. I wanted something quiet, small, and cute. In hindsight, I think it would have been more practical to just get a bigger and more expandable system. I'm somehow always out of USB ports.

  • CPU: AMD Ryzen 9 5950X
    • I wanted as many performant cores as possible for as cheaply as possible and reasonable. I did some math and realized that with the time spend running unit tests and compiling code, this thing would pay for itself in a month or two. It did. Love it and looking forward to the next upgrade!
  • GPU: AMD Radeon RX 6700 XT
    • Bought this at the worst possible time, but it's been a great card. It can't quite keep up with 4K@120Hz for some titles like Doom Eternal on the highest settings, but it's good enough for my current usage.
  • RAM: Some 64GB kit that's more than enough for me
  • PSU: Some small form factor 750W fully modular power supply - it's very cute because it's so little!
  • CPU Cooler: Can't remember what it is exactly, but I bought the biggest, baddest air cooler that would fit with my setup
  • Case: Cooler Master NR200P
  • Linux SSD: Sabrent Rocket 1TB PCIe 4.0 NVMe
    • I went with PCIe 4.0 since I make pretty heavy use of my disk what with a great internet connection and all - those Docker images ain't gonna sling themselves, y'know!
      • What is it with "enterprise" Docker images being absolutely gargantuan?! Why must things suck?! Not that I put anything proprietary to work on my personal machine(s) of course!
  • Windows SSD: TeamGroup MP34 2TB PCIe 3.0 NVMe
    • Occasionally, I boot to Windows for some games that run better or at all, like Valorant or Destiny 2

Other Neat Computing Devices

I also have a PinePhone and a Steam Deck.

The PinePhone was unfortunately a dud for me personally since MMS is still pretty prevalent in my life in a way that I can't overlook in addition to the notification setup not quite being up to snuff. I am very excited for the time when a Linux (you know what I mean) phone is feasible, though! I got the keyboard addon, though, and since my phone has some radio issues in the US, I sometimes use it when I need better radio performance, like when camping.

The Steam Deck is absolutely wonderful. Anything I would play with a controller, I usually just play it on the Steam deck. I haven't touched my Switch since! Plus, it's Linux, so the tinker factor is there too. Highly recommend one if you're considering it.

Headphones: Sony WH-1000XM4

Bought the XM3s on a Black Friday special and fell in love. Nice noise cancelling headphones are absolutely wonderful. They made my mom cry.

Work got almost all their engineers the XM4s not long after so I kind of have 2 pair. The XM4s are much nicer with multiple device pairing and the firmware voice feedback fading out your audio instead of cutting it completely when it says anything. The XM4s also automatically shut down if they can detect they aren't on your head for a little bit, which makes the main issue I had with the XM3s of setting them on my desk without turning them off a non-issue.

Microphone: Blue Yeti USB

Sounds good enough, but I've got a fancy audio interface now, so I'm wanting to upgrade at some point. Super low priority, though.

Audio Interface: MOTU M4

A recent gift. I'm hoping to do more with music and mixing in the future, though, so it will be welcome at that point! I play drums and would love to put together a decent electric guitar setup. I also have an Arturia MicroFreak digital synthesizer which is a lot of fun to play with. I'd love to put some cool tracks together!

Keys: Some twist-lock cable keyring

It's nicer than those metal rings you have to snap your thumbnail to get keys off of. I had one fail after about 10 years and my keys went everywhere, so if you're gonna use these, I guess you should replace them occasionally or check them in rather rough ways with some regularity after a certain amount of time.

These are usually karabiner'd to my backpack or a belt loop.

When I'm driving with the family, we take the van, which has one of those wireless keys, so I can just throw my whole bag in and we can drive. If I'm driving solo, it's still a good, old insert-and-turn key, so the keys un- karabiner from the bag or loop and go back on when disembarking.

My keyring is also attached to my wallet. Speaking of which...

Wallet: Chums Surfshorts Wallet

Cheap, has a zipper to hold keyfobs and cards, and easily attaches to my keys. Having them all together means I just gotta grab two things, one for each pocket: phone and wallet-keys.

I haven't tried tap-to-paying through the wallet, which is probably a big security hazard. 🤷

Software

When my machine boots up, I'm greeted by the standard Linux login at the console. No display manager or graphical login or anything. Once I'm logged in, I usually run wm which fires up my window manager, Sway.

When Sway starts, it runs Kitty, my terminal emulator of choice, and Firefox, my web browser of choice.

Anywhere I can, I really like to use the Catppuccin color scheme. Otherewise, I used a modified Monokai with a darkened background color for the longest time.

Web Applications

Firefox is awesome. I'm a big fan. I make heavy use of their "Sync" offering, which syncs just about everything. It's very convenient and I'm sure it will somehow bite me later.

I use the following must-have browser extensions:

Firefox usually has the following web applications opened:

  • Shortwave as my email client for my Google Mail accounts to which my other emails forward to
  • Linear for personal task management (a better Jira/ Trello IMHO)
  • Google Calendar for scheduling, planning, event management, etc. for both work and personal life
  • Hacker News for mostly-relevant and interesting links to me and for high-quality discussions
  • Lobsters for reasons similar to Hacker News
  • Lemmy.world for federated link aggregation and discussions since Reddit killed API access for my clients of choice
  • GitHub for open-source and similar work
  • Band for communicating with friends, family, and church folks
  • Discord for communicating with friends, family, "more- hip" church folks, various communities, and other acquaintences
  • Element for communicating with friends, coworkers, various communities, and other acquaintencas
  • Slack for communicating with friends, coworkers, and various communities
  • Spotify for music
  • Various applications specific to work, such as Okta, Jira, GitLab, etc.

Ugh, modern messaging is a mess, isn't it?

Tailscale connects all my machines to the same VPN. It's great! And I think once I get it fully setup, I will put it in the "gamechanger" bucket.

I also frequent these:

And do my online shopping here:

  • ebay.com
  • facebook.com/marketplace
  • craigslist.com
  • amazon.com
  • aliexpress.us

I'm sure I'm forgetting a ton here.

Terminal

Beyond the web stuff, I pretty much live in the terminal. Interacting with my machine is mostly done via hotkeys as configured for Sway. Otherwise, everything happens in the terminal. Here are my most popular commands in no particular order:

  • fish as my interactive shell (and sometimes for scripts, too!)
  • helix for text editing
  • git for code version management (source control)
  • pass for passwords and secrets management
  • ssh and mosh for accessing other machines
  • tmux and zellij for multiplexing terminals
  • htop and btm (or bottom) for process management and resource monitoring
  • rtx for managing various runtimes' and applications' versions
  • sk (or skim) for fuzzy searching for stuff
  • rg (or ripgrep) for specific searching for stuff
  • sd for most things I used to use sed for
  • nnn and broot for filesystem browsing and navigation
  • bat for viewing files as a cat replacement
  • exa as an ls replacement
  • man for reading documentation
  • xh and curl for interacting with HTTP endpoints (I want to check out hurl, too!)
  • jq, gron, and jql for interacting with JSON data
  • rsync for moving files amongst machines
  • restic for local and remote deduplicated, encrypted, and automated backups
  • watchexec for doing stuff as I edit files (like running unit tests anytime code is changed)
  • age and sops for secrets management
  • dua for disk usage analysis
  • sc-im for managing two-dimensional, relational data (spreadsheets)
  • pulsemixer for adjusting audio levels and volumes
  • bluetoothctl for managing bluetooth devices (also bluetuith for a TUI!)
  • weechat as my IRC client
    • This is usually running in a persistent tmux or zellij session on a server that I remote into
    • I occasionally use the relay functionality that weechat offers as well
  • docker and podman for container management
  • hexyl when I need to look at binary data
  • make for doing things describe in Makefiles

GUI

From Sway, the only utilities I use are the following:

  • waybar shows the time, a HUD for my virtual desktops, various volume information, and a high level overview of system resource usage.
  • mako shows me notifications and let's me interact with them.
  • gammastep makes my displays orange-y at night time.

Beyond these, I have a bunch of scripts and configuration in my dotfiles repo.

I use wofi for launching applications occasionally. It lists the following often-used applications:

Music

I dabble in music sometimes, depending on my workload or how much I need an outlet, mostly as a poser metal drummer, so I'll list that stuff here, too!

  • Roland TD-11 electric drum kit
  • Arturia MicroFreak digital synthesizer
    • Very new to me; super fun to play with
  • Novation LaunchKey 61 MIDI controller
    • Haven't taken the time yet to really setup a DAW to work with this
  • Some piece of crap first act electric guitar that I keep trying to fix and make work
    • I just need to bite the bullet and save up for a nice Ibanez (used of course)

Electronics

I also tinker a lot with electronics and "maker"-y things! The only name-able thing is my 3D printer, which is an Ender CR-10S. Micro Center was having an incredible sale one upon a day. The thing is really awesome. I still want a real nice one that I can reliably send prints over the network to.

Other unnamed tools I have and use on roughly a weekly basis:

  • Soldering iron
  • Solder sucker
  • Air purifier (solder and 3D printer fumes ain't all that good for you)

And I'm sure there are other unsung heroes I just don't think about. Like butter knives.

Finishing The Day

That about does it! I usually head upstairs when work is done, make food in unidentifiable cookware, tinker and play with my kids for a bit, head out to whatever evening activity we've got going on if applicable, come home, and bedtime!

Ah, we have a couple tablets for Khan Academy Kids, white noise (and other sleep-inducing ambience), and podcasts (like Base Camp Adventures!) and a Google Home Mini or two, mostly for playing loud and obnoxious music or setting timers.