Chris Vincent @machinesareforpeople.com · 02/10/2026Migrating data from Redis Cloud to a Render Valkey instance is far more difficult than you would ever guess. After like half a dozen false starts, I finally got it working with a program called RedisShake, which is only fully documented in Chinese. 000
Chris Vincent @machinesareforpeople.com · 01/10/2026If you want the user to define a program, use Lua. It's not my favorite language, but this is literally what it's for. 000
Chris Vincent @machinesareforpeople.com · 01/10/2026I just migrated our CI to CircleCI as part of a larger migration off Heroku and I must be emphatic: Stop using YAML for literally anything, but especially for defining what is essentially a program. It's awful, nobody likes this, just stop it. I feel the same way about Home Assistant. 110
Chris Vincent @machinesareforpeople.com · 28/08/2026I have been working towards this all year ever since my successful pitch back in December. Tomorrow I will officially begin writing Elixir at work again, taking the first steps towards migrating our app completely off of Rails. #elixir-lang 290
Chris Vincent @machinesareforpeople.com · 22/08/2026Elixir-themed Def Leppard cover band called Defrecord #elixir-lang 010
Chris Vincent @machinesareforpeople.com · 11/08/2026Today I found dbslice, an amazing tool for grabbing an anonymized slice of production data with referential integrity: github.com/nabroleonx/d... And here's a #Nix package for it you can throw into a devshell: 010
Chris Vincent @machinesareforpeople.com · 08/08/2026My favorite little function I define in all of my Elixir projects. #elixir-lang 030
Chris Vincent @machinesareforpeople.com · 02/08/2026[to the tune of That's Amore] when your endofunctor is monoidal in shape that's a monad 000
Chris Vincent @machinesareforpeople.com · 02/08/2026I've been away from Elixir for a while so I'm not sure when this was introduced. 000
Chris Vincent @machinesareforpeople.com · 02/08/2026I don't think I like the new pages for Elixir Forum that come up in search... It took me a while to figure out that they were hiding the actual threads behind an incomplete representation. Gotta scroll way down to for the link to the original. And no syntax highlighting in code blocks? #elixir-lang 100
Chris Vincent @machinesareforpeople.com · 01/08/2026Ah this is cool. The macro I created last night was just a simple one to save a bit of boilerplate for my other thing to improve Req stub ergonomics (using a NimbleOwnership server to preserve async-friendliness). But Spark is really good to know about if I ever want to make a DSL 010
Chris Vincent @machinesareforpeople.com · 01/08/2026I've thought about Ash for a while but have yet to land in the right project for it. I've watched Zach's presentations and he sells it well. And I've long desired solutions for e.g. repeated logic in database queries vs app code 000
Chris Vincent @machinesareforpeople.com · 01/08/2026Wrote my first Elixir macro in a while. Love this language. You never have to put up with boilerplate if you don't want to. #elixir-lang 260
Chris Vincent @machinesareforpeople.com · 28/07/2026Things that are correct about being better for you, though perhaps annoying at first in their correctness: - Going to bed early and waking up early - Getting regular exercise - Static typing 000
Chris Vincent @machinesareforpeople.com · 26/07/2026If you don't have any unit tests in your NeoVim config, are you really even extending your editor at all? #neovim 000
Chris Vincent @machinesareforpeople.com · 25/07/2026Man, Bluesky image upload quality is atrocious sometimes. Really ought to get around to setting up my own PDS. 000
Chris Vincent @machinesareforpeople.com · 25/07/2026Finally, I have blessed iex with sane keybinds, a problem that has bothered me for _years_. Now it behaves a bit more like most shells, for easier context switching. Just a dash of tmux config. #elixir-lang 110
Chris Vincent @machinesareforpeople.com · 23/07/2026SQL and in particular PostgreSQL is such a grand achievement. The things you can just throw at it and it just works. I wonder how much ad hoc try-hard data processing scripting out in the world could have just been SQL queries. 000
Chris Vincent @machinesareforpeople.com · 21/07/2026Or maybe one could build an AT Proto alternative, and maybe an interface for interop with Matrix bridges... Bridges are a huge part of the appeal of Matrix for me, as I don't see a competing opening messaging platform working out without bridging in what people are already using. 100
Chris Vincent @machinesareforpeople.com · 21/07/2026Totally fair opinion. Wanting to see Matrix improve is part of what gets me thinking things like "what if there was a homeserver that didn't suck, and what if it were on the BEAM", for example. 110
Chris Vincent @machinesareforpeople.com · 18/07/2026I like mine to have other people on them which today unfortunately means neither of us are happy because we’re all on Discord 100
Chris Vincent @machinesareforpeople.com · 17/07/2026I've long thought the BEAM would be a great way to build on AT Proto. On a similar token, when will Gleam community leads get nerdsniped by the Matrix messaging protocol? 200
Chris Vincent @machinesareforpeople.com · 17/07/2026vdir-calendar-notifier 0.2.1 released, with a small fix to how boolean CLI options are parsed and merged with their equivalent config file options.tangled.orgmachinesareforpeople.com/vdir-calendar-notifierDesktop notifications for calendar events stored in the Vdir Storage Format. 000
Chris Vincent @machinesareforpeople.com · 16/07/2026It is difficult to search for prior art on this due to the existence of Doom Emacs 010
Chris Vincent @machinesareforpeople.com · 16/07/2026Musing that Vim macros are themselves Turing complete, leading to the horrifying possibility of porting Doom to Vim macros 101
Chris Vincent @machinesareforpeople.com · 16/07/2026Can't wait to be done with this framework for goodgithub.comUsers are being logged in as the wrong user · Issue #5740 · heartcombo/deviseHi We are having a really strange issue with devise for some reason a user is using 1 set of credentials and being randomly logged in as another user. The issue happens intermittently and we have s... 100
Chris Vincent @machinesareforpeople.com · 13/07/2026I won't get over how cool it is to release some software with a flake.nix, then turn around and use that flake as an input in my dotfiles flake.nix to build, configure, and install it. 000
Chris Vincent @machinesareforpeople.com · 13/07/2026Adding that probably added about 30% to the overall development time. Totally worth it. NixOS users are real sickos. 000
Chris Vincent @machinesareforpeople.com · 13/07/2026A very cool thing that fell out of this that I will definitely reuse: the included Nix Home Manager module defines its options directly from the Clap/Serde config definition on the Rust side, with JSON Schema serving as an intermediary format. That includes documentation and examples, if given. 100
Chris Vincent @machinesareforpeople.com · 13/07/2026I have learned a lot, and there is much I would do differently were I to start from scratch. But this is working software, and I am ready to move on. Looking forward to my next Rust project, whatever that may end up being. 100
Chris Vincent @machinesareforpeople.com · 13/07/2026Barring patches for bug fixes, this is likely completed software. It has handily accomplished both goals: - A robust calendar event reminder daemon for my minimalist Linux desktop environment. - A small but nontrivial project to actually practice some real world Rust with. 100
Chris Vincent @machinesareforpeople.com · 13/07/2026I have released vdir-calendar-notifier 0.2.0! - If a URL is parsed from the event, clicking the notification opens that URL - User-configurable snooze presets - Optional "Edit" button to open the iCalendar file in your default application - Refined relative time display tangled.org/machinesaref... 110
Chris Vincent @machinesareforpeople.com · 08/07/2026Why don’t they just build the whole codebase out of the test suite material 000
Chris Vincent @machinesareforpeople.com · 07/07/2026Well, back to it. The sooner I get this done the closer I am to getting back to LiveView. I'm closing in on about a year of trying to hew closely to the Hotwire Way in this legacy app, and it feels good to finally identify one of the things about it that has been gnawing at me beneath the surface. 000
Chris Vincent @machinesareforpeople.com · 07/07/2026In LiveView a UI component is just a UI component. It's not tied to any publicly accessible routes, it's just a thing your app renders, with those other details concealed privately, as they should be. 100
Chris Vincent @machinesareforpeople.com · 07/07/2026Adding e.g. a small, reusable form to an app should not require first thinking through where it lives as an externally accessible resource, for all the various contexts in which it might appear. It gets even hairier with polymorphism, and adds a lot of friction to the inevitable refactors. 110
Chris Vincent @machinesareforpeople.com · 07/07/2026It exposes paths that a user would never navigate to directly, each such path bringing its own request/response overhead and concerns like authentication/authorization. 100
Chris Vincent @machinesareforpeople.com · 07/07/2026I have pinpointed I think one of my core frustrations with the Rails/Hotwire/Turbo approach: every stateful UI component wants its own set of routes. This demands a lot of up-front architecture work that you are likely to get wrong the first time and tightly couples your UI to your IA. 100
Chris Vincent @machinesareforpeople.com · 02/07/2026Turning it into a proper daemon could open a lot of avenues to make it even better, while still being a very, very simple bit of kit. 000
Chris Vincent @machinesareforpeople.com · 02/07/2026This is actually how this (in the quote) came to be. Next up, if I can find the time, would probably be my URL router, maybe. Basically click a link from within any app, and decide how to open it based on regex matching. I know similar things exist, but this one is mine. 100
Chris Vincent @machinesareforpeople.com · 02/07/2026I do a lot of cool shit in my NixOS config that maybe kind of should just be extracted into a daemon (built in Rust) and packaged that way. However I am glad that Nix is sophisticated enough to get me into this conundrum in the first place, without ever losing my work. 110
Chris Vincent @machinesareforpeople.com · 24/06/2026Would I prefer drilling down through type errors over relying on my beautifully conceived test suite, borne of a hard-won mastery that took decades to develop? Oh yes without question. But sometimes you're dealt a legacy Ruby codebase that can't retire just yet. Feels good to deal with it well. 000
Chris Vincent @machinesareforpeople.com · 24/06/2026tfw you execute a breaking refactor and every single resulting failure in the test suite is directly relevant to the change you've made >>>>>>>>>> 100
Chris Vincent @machinesareforpeople.com · 23/06/2026Don’t mind me, just containing multitudes over here 000
Chris Vincent @machinesareforpeople.com · 23/06/2026That being said, when consuming a web API, I extremely favor a REST API oriented around resources! 100
Chris Vincent @machinesareforpeople.com · 23/06/2026The resource-oriented style pioneered by Rails can really hamstring you, especially recognizable when you’ve tried e.g. CQRS and event sourcing and the liberty to use data structures that make sense rather than what can be squished into database table rows 110