𝕽𝖚𝖆𝖎𝖉𝖍𝖗𝖎𝖌𝖍

       🅸 🅰🅼 🆃🅷🅴 🅻🅰🆆. 
 𝕽𝖚𝖆𝖎𝖉𝖍𝖗𝖎𝖌𝖍 𝖋𝖊𝖆𝖙𝖍𝖊𝖗𝖘𝖙𝖔𝖓𝖊𝖍𝖆𝖚𝖌𝖍 

Ceterum Lemmi necessitates reactiones

  • 7 Posts
  • 825 Comments
Joined 3 years ago
cake
Cake day: August 26th, 2022

help-circle





  • If that’s the only error mechanism, sure. Exceptions in most languages tend to be relatively expensive, though, and most have a cheaper idiomatic way of returning error codes; you’d want to use those if they’re available, right?

    Does Rust use exceptions a lot? I don’t know. V has panic and catch, but you almost never see them. Idiomatic is Option (?) and Return (!) values, which I thought V borrowed from Rust. Go does the (val, error) tuple-ish return thing, and while it too has catchable panics, they’re discouraged in favor of (error) return values.

    Depends on the language. “Higher level” is a pretty broad field!





  • My recommendation is to put all of the variables in an environment file, and use systemd’s EnvironmentFile (in [Service] to point to it.

    One of my backup service files (I back up to disks and cloud) looks like this:

    [Unit]
    Description=Backup to MyUsbDrive
    Requires=media-MyUsbDrive.mount
    After=media-MyUsbDrive.mount
    
    [Service]
    EnvironmentFile=/etc/backup/environment
    Type=simple
    ExecStart=/usr/bin/restic backup --tag=prefailure-2 --files-from ${FILES} --exclude-file ${EXCLUDES} --one-file-system
    
    [Install]
    WantedBy=multi-user.timer
    

    FILES is a file containing files and directories to be backed up, and is defined in the environment file; so is EXCLUDES, but you could simply point restic at the directory you want to back up instead.

    My environment file looks essentially like

    RESTIC_REPOSITORY=/mnt/MyUsbDrive/backup
    RESTIC_PASSWORD=blahblahblah
    KEEP_DAILY=7
    KEEP_MONTHLY=3
    KEEP_YEARLY=2
    EXCLUDES=/etc/backup/excludes
    FILES=/etc/backup/files
    

    If you’re having trouble, start by looking at how you’re passing in the password, and whether it’s quoted properly. It’s been a couple of years since I had this issue, but at one point I know I had spaces in a passphrase and had quoted the variable, and the quotes were getting passed in verbatim.

    My VPS backups are more complex and get their passwords from a keystore, but for my desktop I keep it simple.





  • Yeah, for me it’s more that just “produces correct output.” I don’t expect to see 5 pages of sequential if-statements (which, ironically, is pretty close to LLM’s internal designs), but also no unnessesary nested loops. “Correct” means producing the right results, but also not having O(n²) (or worse) when it’s avoidable.

    The thing that puts me off most, though, is how it usually expands code for clarified requirements in the worst possible way. Like, you start with simple specs and make consecutive clarifications, and the code gets worse. And if you ask it to refactor it to be cleaner, it’ll often refactor the Code to look better, but it’ll no longer produce the correct output.

    Several times I’ve asked it for code in a language where I don’t know the libraries well, and it’ll give me code using functions that don’t exist. And when I point out they don’t exist, I get an apology and sometimes a different function call that also doesn’t exist.

    It’s really wack how people are using this in their jobs.







  • Oh boy. This is a rabbit hole which, once you fall into, there’s no coming back out.

    There is a world of terminal software. You can, quite reasonably, get entirely rid of X (and Wayland) and live in the console. Honestly, the reason I don’t is only because there is no fully competent terminal web browser (although there are some quite good ones), and because anything having to do with graphics like photo management, or vector graphics drawing, is really where GUIs are useful. But for everything else, terminal clients are almost always superior.

    Choosing a good terminal emulator is important, and the best one right now is Rio. It’s fast, smaller memory footprint, and less CPU use than Wezterm or Kitty, and it supports ligatures, iTerm, and SIXEL graphics.

    In that goes tmux, because it works over ssh and having consistent everywhere is handy, because it survives terminal and window manager crashes, and because you can open multiple clients in different windows on the same tmux session.

    In that runs zsh, because it’s the best shell. It’s backwards-compatible to bash, but has a ton of extra features.

    I’m conservative about replacing standard POSIX tools with new fad tools, because grep is literally everywhere (even BusyBox) and new things usually aren’t; but ripgrep and fd are such nice improvements over grep and find I’ve been unable to resist. Helix is currently the best text editor. However, having a good familiarity with grep, find, and vi is IMHO critical, because they’re the foundations.

    My media player is ostui, which is an ncurses SubSonic client with synced lyrics and cover art support. I use catnip for visualization, because it uses less memory and CPU than cava. For task management I use a bespoke script (tdp) that use fzf with todo.txt files. I use gotop for system monitoring.

    I try to use chawan for terminal web browsing, and it does do CSS layout better than most, and supports sixel image rendering, but it’s often a chore so I mostly browse in Luakit, which is a GUI program.

    rook is my secret service tool that uses a KeePassXC DB as the backing store, and provides credentials to everything that needs them.

    • vdirsyncer syncs my calendar and contracts to a VPS, and thence to my phone
    • mbsync syncs all of my email from my IMAP server, and I use notmuch to index and tag it
    • khard is a terminal address book that uses standard vcard directories
    • lbb is a super-fast address book search tool which also works on vcard directories
    • khal is a TUI calendar app, which works with vcal directories
    • aerc, which someone else mentioned, is a fantastic TUI email client that can use notmuch.
    • tasker is what I use for scheduled cron control; it uses standard crontab files.
    • devmon and udevil handle automounts of USB media
    • mosh is a UDP-based ssh, with interruptable sessions and network resilience
    • mpdris2-rs is the agent I use to hook up various media control tooling to ostui (which supports the mpris protocol) and other players - mpris is a sort of standardized glue for media players.
    • gomuks is an excellent TUI for Matrix
    • weechat is a TUI for IRC. I prefer gomuk’s interface, but you can get a Matrix plugin for weechat if you want to use only one. I find I often have to restart weechat because otherwise it end up eating all of the memory; there’s a memory leak, or something in it.
    • syncthing-daemon for syncing between almost everything
    • restic for backups

    dinit handles all of my user task management, because systemd is fucking broken for user tasks. dinit is a better init system.

    Almost every application I use is a cli or TUI client. The exceptions are the web browser, for reasons I’ve explained; Jami, which doesn’t have a CLI client; Factorio, which is a game; and darktable for photo management. I’ll also occasionally open Gimp or Inkscape for graphics, vlc for movies (which I could probably watch in the terminal, now that I think of it), and I usually view PDFs in a GUI client such as mupdf.

    My philosophy on software is to use standards wherever possible. I avoid programs that insist on using their own DBs when there’s a perfectly good standard, such as ics, maildir, and so on. It’s just another form of vender lock-in. Hence notmuch (maildir), khard and lbb (directory of .ics), khal (directory of .vcs), rook (KeePass DB), and so on. This drives most of my tooling choices.