Advanced Search
Search Results
122 total results found
Miscellaneous notes
Here you'll find my miscellaneous, mostly-unsorted notes on various topics.
Projects
Documentation about various (technical) projects that I run or am involved in in some way.
Learning NixOS
A non-linear, wiki-style guide on learning to work with Nix and NixOS. Work in progress, and constantly improving.
NixOS
seekseek.org
A collection of specialized search engines
Validatem
An ergonomic and modular validation system for Javascript code - argument validation, arbitrary value validation, everything.
Promistreams
Easy-to-use, composable, universal streams for Javascript.
Project ideas
Various ideas for projects that I do not yet have the time, knowledge or energy to work on. Feel free to take these ideas if they seem interesting, though please keep them non-commercial and free of ads!
Hardware
Associated notes about hardware hacking, maintenance, etc.
Node.js
Things that are specific to Node.js. Note that things about Javascript in general, are found under their own "Javascript" chapter!
Privacy
Maths and computer science
Articles and notes that are more about the conceptual side of maths and computer science, rather than anything specific to a particular programming language.
Security
The computer kind, mostly.
The Fediverse and Mastodon
Cryptocurrency
Server administration
General Linux server management notes, not specific to anything in particular.
Databases and data management
Rust
Javascript
Anything about Javascript in general, that isn't specific to Node.js.
Concepts
This chapter introduces you to a number of different core concepts in Nix and NixOS, as well as various of the important tools in the ecosystem.
Deploying with morph
Security considerations
Running unpackaged software
This chapter guides you through a number of ways in which you can run software that isn't packaged for NixOS (yet), including proprietary and custom software and games that likely never will be packaged.
Setting up Bookstack
Turned out to be pretty simple. deployment.secrets.bookstack-app-key = { source = "../private/bookstack/app-key"; destination = "/var/lib/bookstack/app-key"; owner = { user = "bookstack"; group = "bookstack"; }; permissions = "0700"; }; services.b...
What is seekseek?
SeekSeek is a search engine project. But instead of being one general search engine, the goal is to build many smaller, highly specialized search engines with specially designed search interfaces, to work optimally for the specific kind of information you're l...
How does it work?
The following text was originally published on the seekseek website, at https://seekseek.org/technology. The information on this page is currently changing. While the current deployment of seekseek still does use the technology as described here, a next versi...
What is Validatem?
This article is derived from the documentation at https://www.npmjs.com/package/@validatem/core. The last validation library you'll ever need. Does every kind of validation, and does it well: it doesn't matter whether you're validating function arguments, ...
Why are there so many packages?
This article is derived from the documentation at https://www.npmjs.com/package/@validatem/core. Dependencies often introduce a lot of unnecessary complexity into a project. To avoid that problem, I've designed Validatem to consist of a lot of small, separate...
What are Promistreams?
This article (and most of the others in this chapter) were derived from a formerly-private draft. It is still subject to change, as Promistreams are polished further towards their first stable release. Despite this, you can test out Promistreams today! Promis...
Known issues
Currently there is a single known issue: a design change was fairly recently made, in the process of formalizing the spec, where it was decided that a 'happy abort' (ie. a cancellation under expected circumstances, like the successful completion of a process t...
How do I use Promistreams?
Here's a simple example of a valid Promistream pipeline: "use strict"; const pipe = require("@promistream/pipe"); const fromIterable = require("@promistream/from-iterable"); const map = require("@promistream/map"); const collect = require("@promistream/...
The behaviours and responsibilities of different types of streams
While you don't need to know much about the internals of Promistreams to use the libraries, there are a few things that are useful to know, mostly around which streams are responsible for what. In the Promistreams design, much of the behaviour is 'emergent'; i...
Missing from this documentation
Here are some of the things not (yet) covered in this documentation: Interoperating with Node streams (see example.js in @promistream/from-node-stream - this is pretty trivial and it's even entirely valid to only use Node streams in your pipeline, using thi...
Commonly useful Promistream packages
All of the existing Promistream packages can be found in the package list, but they're not very well-explained. The majority of these should be functional and have an example.js demonstrating their use. Here's a selection of the packages you are most likely t...
Troubleshooting
My process just exits and/or my pipeline doesn't run! You most likely forgot to call .read() on the pipeline. This is easy to forget. I still do it regularly! I get a weird error! All @promistream libraries are meant to produce clear and understandable erro...
Automatic authentication keys
Problem: Every website needs you to create an account. This is a pain to manage, and a barrier. This is especially problematic for self-hosted things like Forgejo, because it gives centralized platforms an advantage (everyone already has an account there). It ...
Cleaning sticky soda spills in a mechanical keyboard without disassembly
Follow these instructions at your own risk. This is an experimental approach that may or may not cause long-term damage to your keyboard. This approach was only tested using Kailh Choc switches on a Glove80. It may not work with other switch designs. A Glove...
Hacking the Areson L103G
This article was originally published many years ago at http://cryto.net/~joepie91/areson/, when I just started digging into supply chains more. The contents have not been checked for accuracy since! (it's called the Areson G3 according to the USB identific...
Running a Node.js application using nvm as a systemd service
This article was originally published at https://gist.github.com/joepie91/73ce30dd258296bd24af23e9c5f761aa. Hi there! Since this post was originally written, nvm has gained some new tools, and some people have suggested alternative (and potentially better) ap...
Secure random values
This article was originally published at https://gist.github.com/joepie91/7105003c3b26e65efcea63f3db82dfba. Not all random values are created equal - for security-related code, you need a specific kind of random value. A summary of this article, if you don't...
Don't use VPN services.
This article was originally published at https://gist.github.com/joepie91/5a9909939e6ce7d09e29. No, seriously, don't. You're probably reading this because you've asked what VPN service to use, and this is the answer. Note: The content in this post does not a...
ES Modules are terrible, actually
This post was originally published at https://gist.github.com/joepie91/bca2fda868c1e8b2c2caf76af7dfcad3, which was in turn adapted from an earlier Twitter thread. It's incredible how many collective developer hours have been wasted on pushing through the turd...
Quick reference for `checkit` validators
This article was originally published at https://gist.github.com/joepie91/cd107b3a566264b28a3494689d73e589. Presence exists - The field must exist, and not be undefined. required - The field must exist, and not be undefined, null or an empty string. empt...