Tools and technology that I use. You can contact me with any suggestions.
Hardware
-
A Lenovo Thinkpad T430 (which is over
1012 years old now but was new when I got it)- I also have a Librem 14 from Purism, though I haven’t used it much.
-
A discbound notebook (Arc notebook, Junior or A5 size), currently I’m using more traditional ring binders and clipboardsDiscbound notebooks are great because they’re kind of like a binder and clipboard in one: you can change positions of things easily and you can fold it over to write on it while standing. However, there’s a few drawbacks of discbound notebooks compared to traditional binders:
- Discbound notebooks can be expensive (at least for the covers), so if you want dedicated binders for projects, discbound notebooks are less economical.
- It’s hard to label the spines of discbound notebooks in order to see what they are at a glance on a bookshelf
- Discbound punched paper doesn’t feed easily into scanners
For personal notes and calendars, though, I think discbound notebooks work pretty well. You can make your own templates and such.
-
A couple Brother laser printers - an MFC-L2710DW and an HL-L8260CDW
Brother has pretty excellent GNU/Linux support. I’ve experienced some user-hostile features in competitors like HP or Epson, mostly in undismissable nagging prompts in their software. However, I think recent versions of Brother drivers might no longer be open source. This isn’t much of an issue since you can still use older drivers, but there’s some things I couldn’t change, like I think scanner properties.
-
I’m experimenting with using a Librem 5 (see /librem5) as my main “phone”.
It’s really more of a cyberdeck. I have a lot of fun with it, and it’s working better than I imagined it would. A friend, Hay, mentioned that he saw someone1 at the Internet Archive using one, so I thought “huh, if someone else can make it work, I probably can too”.
One of the things I really like about it is that I can actually program it since it’s a real GNU/Linux phone (rather than Android/Linux). I was a very early adopter of Android, I got the HTC Dream when it came out. However, in all the years of having an Android I never really wrote a program for it. I could configure it, but not program it. However, within the first month or so of using the Librem 5, I’ve already made scripts that appear as “apps” using
.desktopfiles. I’ve even wrote a program in Guile Scheme to track my GPS location similar to Overland (which I never got working on Android since it’s not on F-Droid).
1: I suspect this person was https://zacchae.us/.
-
Pixel 6a running GrapheneOS (along with a Librem 5)
Radon Rosborough at an Emacs SF meetup read this page and then showed me their setup with a Pixel 6a and GrapheneOS. I was at the time looking to replace my super old Pixel 2 XL (*cough* that was no longer receiving security updates *cough*), so I unashamedly copied that setup. I considered the Pixel 7, but decided I really didn’t need the features compared to a 6a. Anyways, thanks Radon!
GrapheneOS is great in that you can completely separate out Google stuff. If you want, you can put it in a separate profile. I rarely switch to this profile, though, because once I do I get bombarded with engagement-chasing notifications.
- Jabra microphone for video calls
- Yubikey 5 Neo as a second factor
-
BQ Cervantes as an E-ink reader, which is GPLv2Unfortunately I accidentally broke the screen -
A Keychron K8 Pro
Got it from Central Computers.
I think I have “brown” or “tactile” keys. It’s my first mechanical keyboard, and it’s pretty satisfying. I definitely like how Keychron advertises it as an open-source keyboard. I haven’t yet flashed firmware, but I definitely want to put some macros on it at some point.
For the next keyboard I think I’d just get a full-sized version with a numpad.
- Scanner: CanoScan LiDE 400 I got through ThinkPenguin.
Software
I exclusively use free software.
- Emacs (see my .emacs)
-
GNU/Linux
- NixOS for all my GNU/Linux needs, both on my laptop and increasingly on my servers
- Debian for where I don’t use NixOS. (e.g. PureOS on the Librem 5)
- systemd for writing and managing services (as well as timers a.k.a. cron jobs). systemd helps me use Linux-kernel-specific features without having to write C every time.
-
Usually GNOME for desktop/window stuff. Phosh as the “desktop” environment on the mobile Librem 5.
I used to use Sway a lot, when first trying out Wayland. Back when I was using X11 I used sawfish and FVWM. I miss the creativity I had playing around with sawfish and FVWM, but getting multiple displays working was usually a hassle.
- Wireguard
- btrfs (see /btrfs) as a COW filesystem for snapshots
- Pipewire for audio
- GNU Bash, zsh, or eshell as a shell
- Unbound and dnscrypt-proxy2 for DNS resolving
- systemd-nspawn and podman occasionally for containers
- For my keyboard, my
xkbOptionsaregrp:switch,ctrl:swapcaps_hyper,compose:rctrl, and I useus(symbolic)(English (US, Symbolic)) for the layout. Occasionally I use ibus for when I need to type Chinese.
-
Firefox
- to block tracking and other web spam
- Multi-Account Containers and Cookie AutoDelete to isolate websites from my browsing history
Redirector (see my Redirector rules)Privacy Badger from the EFF(though uBlock Origin does most of my blocking needs)HTTPS Everywherenow I just use Firefox’s setting to try HTTPS first
- for playing media
- Anki for spaced repetition and learning
- Inkscape any time I need to make a diagram or annotate photos. I’ll manually edit these SVG files with Emacs as well.
- Krita when drawing things with a tablet
- darktable for photo processing
- Occasionally Blender for 3D stuff or editing OBJ files
- ffmpeg for converting or compressing/optimizing media formats
- OBS Studio for streaming and video calls
- Zotero for papers
- PostgreSQL
- nginx
- Clojure and Pedestal via Jetty
- git-annex for syncing, backing up, and archiving data
- BorgBackup for backing up files
-
PureOS + Nix/Guix on my main phone (a Librem 5)
Again, see /librem5.
I’ve also used a PinePhone with Mobian, though I’ll say that the Librem 5 is significantly faster, has better hardware, and generally feels better. I did get the PinePhone to make calls and handle text messages, but I never had it as the only phone on my person.
-
AndroidGrapheneOS (which contains Linux but unfortunately not GNU) on my backup phone-
Firefox Nightly (which allows you to add arbitrary extensions like Redirector)
- uBlock Origin
- Redirector (otherwise sites like Reddit try to make you download their app)
- Dark Reader
- Cookie Autodelete
- F-droid for most apps. Others I sideload. I don’t have Google Play installed on my main profile.
- OsmAnd and Organic Maps for orienting myself in the real world
- Signal
- Element (for Matrix)
- Anki
- NextCloud
- VLC
- Unexpected Keyboard (which contains the Control key for when I use Emacs on my phone)
-
Firefox Nightly (which allows you to add arbitrary extensions like Redirector)
- FreeSwitch for telephony/VoIP for my phone numbers
Statistics and Data
-
R for statistics with ESS as an interface
It’s a GNU Project! This is what we used in statistics courses at Berkeley. I also TA’d Stat 133 a bit. I’m so glad we were able to use free software rather than proprietary environments like MATLAB.
- Stan for Bayesian inference (previously used JAGS)
- Previously used D3.js a lot for visualization. Also tried React Three (see /rtft/ for an example visualization I made) via Reagent and ClojureScript.
- data.table, but also tidyverse stuff
- ggplot
- ColorBrewer for a color palette
- Sometimes Clojure and ClojureScript. Clojure for where I’m doing realtime analysis (instead of batch). ClojureScript for interactive visualizations and presentations using reagent/re-frame.
- LaTeX for writing math, which I’ll embed using MathML (preferred) or MathJax.
Web Development
Backend
-
Clojure and Pedestal
- Jetty
GraphQL via LaciniaNot so much these days- PostgreSQL for data
- WebSockets for real time events
- nginx for reverse proxying and some static resources
- LetsEncrypt for my certs
-
node.js and Express(not so much recently, but this site used to be run through node.js)MongoDB- Not anymore. They’re no longer open source, and Postgres does what I need anyway.
Frontend
-
HTML5WHATWG HTML written in the XML syntax (formerly “XHTML”)OccasionallyRarely RDFa for metadata. It can be a real pain with few libraries to make practical use of it.
-
For JavaScript I either use
-
Handwritten JavaScript
Gives me a better feel for various Web APIs
- Shadow DOM + Templates + Custom Elements (aka “Web Components”)
-
- React via
-
node.js
- Webpack
Angular 1- Never made the jump to Angular 2, I just started using React.
require.js- Back before JavaScript modules became a thing
-
-
For CSS I either use:
-
Handwritten CSS with a lot of flexbox, grid/subgrid
- CSS custom properties along with cascade layers for theming
Semantic UI(mostly when I was using React/reagent)
-
Handwritten CSS with a lot of flexbox, grid/subgrid
-
SVG
- Inkscape - For manually drawing, editing
- Emacs - For tweaking and optimizing SVGs, adding metadata, creating SVG filters, and so on
- Usually CSS keyframes for animation, but sometimes SMIL
- D3.js
- React/reagent
- R when creating SVGs with data
-
WebGL
- Three.js (sometimes via React Three Fiber)
-
Static site generatorsHexo(Trying to upgrade it ended up breaking stuff)Pelican
Services
- Firefox Relay for giving out emails
- Digital Ocean and Linode for VPSes
Mozilla VPN
(homepage)- Wikipedia
- The Internet Archive (and especially the Wayback Machine)
- MDN
- Nextcloud for backups and RSS/Atom feeds
- OpenStreetMap
- The National Weather Service (weather.gov) for weather data
- Hacker News
- A VoIP provider for my phone numbers (and occasionally for fax when I still need that)
- Mostly Kagi for searching the web. Otherwise a combination of DuckDuckGo, Google, and occasionally Marginalia and Wiby.
- fatcat, Internet Archive Scholar, Google Scholar, Semantic Scholar for looking up papers (see /scholar notes). And *cough* Sci-Hub *cough* (even when I have an institutional VPN, as many publishers add tracking data to their PDFs)
- SomaFM for radio
Other /uses
Check out other /uses pages at uses.tech.