26 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.
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, 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
- 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
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:
- Traefik to reverse proxy all the things
- A homemade chat bot for various things
- Various game servers
- A small service the multiplexes audio and video feeds
- Gitea for https://git.lyte.dev
- Nginx to serve static files for https://files.lyte.dev
- Jellyfin
- Plausible for web analytics
- PostgreSQL as the great database for anything that needs one
- MariaDB for anything too lame to use Postgres
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
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 Headreset
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/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/battle-station-2022-10-13.3.jpg
Laptop: Lenovo T480 and MacBooks
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!
- 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!
- 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 head 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 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:
- https://git.lyte.dev for personal code management
- https://a.lyte.dev for personal online analytics
- https://bw.lyte.dev for shared password database management
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 editinggit
for code version management (source control)- I use
git-delta
for viewing diffs
- I use
pass
for passwords and secrets managementssh
andmosh
for accessing other machinestmux
andzellij
for multiplexing terminalshtop
andbtm
(orbottom
) for process management and resource monitoringrtx
for managing various runtimes' and applications' versionssk
(orskim
) for fuzzy searching for stuffrg
(orripgrep
) for specific searching for stuffsd
for most things I used to usesed
fornnn
andbroot
for filesystem browsing and navigationbat
for viewing files as acat
replacementexa
as anls
replacementman
for reading documentationxh
andcurl
for interacting with HTTP endpoints (I want to check outhurl
, too!)jq
,gron
, andjql
for interacting with JSON datarsync
for moving files amongst machinesrestic
for local and remote deduplicated, encrypted, and automated backupswatchexec
for doing stuff as I edit files (like running unit tests anytime code is changed)age
andsops
for secrets managementdua
for disk usage analysissc-im
for managing two-dimensional, relational data (spreadsheets)pulsemixer
for adjusting audio levels and volumesbluetoothctl
for managing bluetooth devices (alsobluetuith
for a TUI!)weechat
as my IRC client- This is usually running in a persistent
tmux
orzellij
session on a server that I remote into - I occasionally use the relay functionality that
weechat
offers as well
- This is usually running in a persistent
docker
andpodman
for container managementhexyl
when I need to look at binary datamake
for doing things describe inMakefile
s
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:
- Steam for installing and running games
- Slippi for playing Super Smash Brother Melee online!
- Lutris for running World of Warcraft
qpwgraph
for routing audio viawireplumber
- Inkscape for editing vector graphics (like SVGs) and image files
- Audacity for recording audio
- Krita and GIMP for editing non-vector (bitmap?) graphics and image files
- KDE Connect for when I want phone notifications
to be mirrored to my desktop
- Usually only when expecting a specific call or message
- Visual Studio Code for pairing with other VS Code folks or troubleshooting a VS Code user's setup
- Thunar for managing files in a GUI
- PulseAudio Volume Control (or
pavucontrol
)