bajsicki.com/content/blog/_index.md
2024-11-18 18:02:35 +01:00

2239 lines
118 KiB
Markdown

+++
title = "Blog"
lastmod = 2024-11-18T18:02:29+01:00
draft = false
meta = true
type = "list"
[menu]
[menu.nav]
identifier = "blog"
weight = 30
+++
## <span class="org-todo todo draft">draft</span> Category {#category}
## Tech <span class="tag"><span class="_tech">@tech</span></span> {#tech}
### On Mark Zuckerberg's recent claims <span class="tag"><span class="copyright">copyright</span><span class="_llm">@llm</span><span class="zuckerberg">zuckerberg</span></span> {#zucc-may-be-lying}
The other day, a post on the Fediverse caught my attention, linking to [this article from The Verge.](https://www.theverge.com/2024/9/25/24254042/mark-zuckerberg-creators-value-ai-meta) I thought I'd make some things clear.
<!--more-->
This isn't the only website I run; in fact, this is not even the largest. I have written books worth of commentary and articles dealing with a variety of topics, a lot of which pertain to difficult, labyrinthine and opaque matters.
The time I spent writing these wasn't free. The time I spent researching wasn't free. And as tradition demands, I put very few restrictions on the use of my writing; my only requirements for printing, copying, and distribution are that:
1. If you find errors, let me know so I can fix them.
2. The text must be whole, with all the notes and edits and footnotes and sidenotes and margin-notes.
3. You're not allowed to charge for copies. At all. If you want to send someone a copy, cover the cost yourself.
4. You're not allowed to paywall it; reproductions must remain free to access, and be complete.
5. You're not to use my writing for machine learning or training 'ai' models of any sort.
I don't think that's unfair; if anything, some of the articles I've written have taken years to put together.
The idea that the value of my specific content is 'overestimated', to the point where I'd give up ownership of it, is silly.
I'm not arguing that I should be paid for them using my work. I'm stating that my work should be accessible freely and, in its entirety.
I have seen enough silliness from LLMs to know that they can't be trusted to faithfully reproduce complex writing, and the last thing I wish for myself is to be accused of claims I did not make.
In short: Zucc, my writing doesn't exist to fuel climate change by training massive data matrices that can't even answer simple questions reliably.
Wouldn't it be so much easier to use tools that algorithmically, predictably, reliably solve problems, instead of... whatever this is?
### MissKey: Resetting Admin Password <span class="tag"><span class="misskey">misskey</span><span class="admin">admin</span><span class="postgres">postgres</span><span class="_tech">@tech</span></span> {#misskey-resetting-admin-password}
So recently I had the need to reset the admin password in [MissKey](https://github.com/misskey-dev/misskey/).
Alas, there was no recovery email configured, nor other users on the instance, so I needed to do some digging in the database.
<!--more-->
So here is the short of it.
1. Log in with your misskey user into postgres (assuming that's what you're running MissKey on).
2. Connect to the database.
3. `select * from "user" where "isAdmin" = true;`
4. Grab the `userId` for the user you're resetting the password for.
5. `select * from user_profile where "userId" = 'your-userId';` to confirm that you're getting the right info.
6. Get the hashed password with `bcrypt`, such as:
`python -c 'import bcrypt; print(bcrypt.hashpw("new-password", bcrypt.gensalt(log_rounds=10)))'`
7. `UPDATE user_profile SET password = 'hashed-password' WHERE "userId" = 'your-userId';`
Notes:
- Step 6 requires that you have python-bcrypt installed, and uses that library to do its thing.
- There is a difference between single quotes, double quotes, and lowercase/ capitals. This is a quirk of psql, so make sure you get those right.
And... done.
<span class="underline">[Join the FSF.](https://my.fsf.org/join)</span>
### Shared hosting is a scam <span class="tag"><span class="sharedhosting">sharedhosting</span><span class="saas">saas</span><span class="scam">scam</span><span class="_tech">@tech</span></span> {#shared-hosting-scam}
This isn't the first, and won't be the last time I rant against shared hosting, SaaS, and all the other 'I want to be a landlord' scams out there.
This time in shared hosting: friend of mine wants to set up a tech stack for their new agency. Website, email, CRM, the works.
<!--more-->
Starting with the basics, we talked a bit, and arrived at the conclusion that, since they're not very tech literate, it would make the most sense to just buy a domain and set up with Google Workspace (easy!) and Google Sites (easy!). That's about $15/mth. The domain is about $20/yr, which gives us a total of $200/yr for that simple set-up.
A reasonably speedy VPS that would handle this load would be about $60/yr, plus domain we go up to $80-ish a year... but you only break even on this after two years of use (not including maintenance costs if you'd hire someone for that.) Note the amounts are cumulative.
| Year | Google | VPS |
|------|--------|------|
| 1 | $200 | $280 |
| 2 | $400 | $360 |
| 3 | $600 | $440 |
| 4 | $800 | $520 |
This is based on a quick estimation that setting up a VPS, domain, website and email server (just the tech, no content or graphical design) would take a few hours of sysadmin time. Let's call it $200.
The actual figure is only mildly relevant, as we can clearly see that as time passes, renting a VPS is much more affordable and sane.
Plus, you get to grow and expand your tech stack at no additional cost. There is a [long list of available free alternatives to garbage software.](https://github.com/RunaCapital/awesome-oss-alternatives)
And it gets much worse...
When they asked their friendly neighbourhood web designer about setting a server up for them...
They got the following offer (verbatim):
- SSL
- 5GB space
- 1TB bandwidth
- 3 emails
- unlimited use
- free FTP
All words which the average person doesn't understand. How do you even begin making sense of this if you don't grasp how the Internet works?
The price tag? A very not cool $50/mth. _For shared hosting with ridiculous limits._
I can't fathom how a person can justify having these restrictions on a $50/mth plan. For that money you can _easily_ rent a top of the line VPS that'll dance and sing to any tune you play.
**And how does it stack up? $600/yr makes for 600, 1200, 1800, 2400... you get the picture.**
For **the worst service** at the **highest price.**
This is right on par with SaaS and vendor lock in terms of how bad this is.
Be ethical. Don't give money to thieves.
[Join the FSF.](https://my.fsf.org/join)
### Note about LLM's and training data <span class="tag"><span class="copyright">copyright</span><span class="_llm">@llm</span><span class="thieves">thieves</span><span class="_tech">@tech</span></span> {#LLM-Note}
No license is granted for any use of the content on this website for the purposes of training Large Language Models (commonly referred to as "AI"), commercial, or any other purposes not covered by Fair Use.
Yes, I don't want corporations to profit a single bit from my work. Bite me.
[Join the FSF.](https://my.fsf.org/join)
### Haxe, heaps, and VSCode (small rant) <span class="tag"><span class="_software">@software</span><span class="proprietary">proprietary</span><span class="vscode">vscode</span><span class="vendorlock">vendorlock</span><span class="_tech">@tech</span></span> {#haxe-vscode}
Yesterday me and a friend have been trying to set me up with a development environment to start working on a small game.
He's already made all the big choices, and so the plan was for me to set up with Haxe, Heaps, and the HashLink VM with the IDE VSCode.
We got everything running, except for the debugger link. We spent - no joke - over two hours until we found an explanation for the issue.
<!--more-->
There is an extension that is deliberately _hidden_ from the FOSS version of Code. I was unable to install and use it until I switched over to the binary release of Code that Microsoft provides.
I can see no reason why that would be the case. Haxe is Open Source, GPLv2 and MIT licensed. Heaps and Hashlink are licensed under the MIT license.
What possible reason could there be to gatekeep access to the main supported IDE solution behind proprietary software with built-in telemetry and very restrictive access to the way it works?
I can't think of one. I feel like the Haxe Foundation should give a clearer explanation for setting the environment up.
Eventually I managed to get a tracker-free VS Code installed, by using [VSCodium](https://vscodium.com/), which is a fully FOSS distribution of VSCode. I also used a [patch from the AUR](https://aur.archlinux.org/packages/vscodium-bin-marketplace) to enable the marketplace and actually make things work.
Rant over.
[Join the FSF.](https://my.fsf.org/join)
### VPS is my new friend <span class="tag"><span class="vps">vps</span><span class="sysadmin">sysadmin</span><span class="servers">servers</span><span class="_tech">@tech</span><span class="ssh">ssh</span><span class="sshfs">sshfs</span><span class="foss">foss</span><span class="vendorlock">vendorlock</span></span> {#vps-is-my-new-friend}
Over the past month and a half, I have migrated all of my services over to a VPS that I am renting from [Netcup.de](https://netcup.de). Unsurprisingly, I am very happy with it.
<!--more-->
To start with, I bought the lowest package, but I had some performance issues with the number of things I set up on it: caddy, nginx, MariaDB, Wordpress, all paled in the face of running an email server for myself.
And then I wanted to add GitLab for backing up my agenda (in org-mode, of course), notes, and other such things. So I upgraded a tier up, at a very reasonable price. The upgrade was seamless, and I'm frankly delighted.
I have not noticed any downtime, no connectivity issues, and my sshfs connection (through which I am editing this document) has been rock-solid.
So my current workflow for all my text editing, writing, and organization looks like so:
I use Emacs for nearly everything that has to do with text (aside from work, which requires that I type into Google Chrome).
{{< marginnote >}}
I have sshfs set up to log in with keys, so the command I run (through an alias) is:
```bash
sshfs \
[user]@[ip]:/srv/ ~/remote/ \
-p [port] \
-o identityFile=[id-file] \
-o reconnect
```
I rarely if ever have issues with my internet connection at home, but I still keep the reconnect option just in case.
{{< /marginnote >}}
I have my _srv_ directory mounted into ~/remote on my local PC through sshfs. I don't have it as a permanent mount, since I don't use it often enough, however I have created aliases in fish, `vpssh` and `vpsshu`, which let me mount and unmount through `sshfs`.
For git, I use magit. It has made using git simple and easy for me. I was reluctant to head that way at first, but I found that using git in the terminal was just too much typing when I wanted to push an update.
I _want_ to move my email reading to emacs, too, but every time I look at something like Wonderlust or mu4e, I find myself faced with another cliff to climb. Not that it wouldn't be a wonderful learning experience, but for something as mission-critical to me as email, I'm not quite yet willing to roll the dice.
Fundamentally, I am happy. This set-up makes me happy. It sparks joy. It's wonderfully simple, easy to maintain, and simply _superior_ to any shared hosting solution I've seen yet.
And it's almost as cheap. It was cheaper than shared hosting I had before, on the smaller VPS tier, but even with this (4 cores, 4GB RAM), it's very, very affordable, and infinitely more flexible.
I can't, at this point in time, see anything advantageous about choosing shared hosting. The only advantage it has is that it's easy and has pretty graphics. But it also limits the customer in ways that are outrageous... while also being much more expensive for what's on offer.
Worse still, many web hosts don't let you choose what version of PHP you can run, whether you get shell access into your account, or let you set up custom Apache/ nginx configurations for your websites.
And true enough, that way anyone can set up a WordPress website in minutes... but that's all you're really getting. A fancy GUI that'll give you an instance of whatever pre-packaged framework you desire. If it's on the list. For the price of an actual VPS that can do **everything**.
Why buy a slice of cake, when you can have a whole, better, juicier cake for the same price?
The only answer I can come up with is convenience, a'la "I don't want to learn new things."
Way I think of it is, if what you don't have is time, then fair enough. But if you have money, you can literally hire someone to set one up for you, and go from there, with much smaller ongoing cost and more flexibility.
If what you don't have is money, a VPS **is** the most cost-effective solution.
If what you don't have is both money and time, you can get **free** hosting for your website (and e-mail) from many, many vendors all over the web. You can get shell accounts, too, if you need them. I've used an account on [hashbang.sh](https://hashbang.sh) for a while, and found it perfectly acceptable for the vast majority of applications. That can work well for taking notes and keeping your agenda in an accessible place - you can ssh into your account from anywhere, on any device.
In any case, choosing a shared hosting provider has ONE advantage, and that's its click-and-go nature.
On the other hand, it's more expensive, and limits your ability to actually **do things** other than running a simple website.
It's a shame that shared hosting is the norm. I can't help but wonder... would there be interest in a VPS service that offers pre-installed and pre-set up servers?
What I'm envisioning here is a service where you simply check some boxes for what you want on your server while placing your order, and a new VPS is spun up with exactly those packages, already configured and ready to go. _Does this already exist?_
It seems like such an obvious solution - bypass the set-up part, maybe give the user some scripts that will guide them through the process of setting up their passwords, permissions, hardening their VPS, setting up domain names and all, mailboxes, etc...
Most VPS providers already give access to a TTY from a web interface, this could easily be the 'second step', after the order is placed.
Ideas, ideas.
In conclusion: VPS's are awesome and I'm kicking myself for not getting one sooner.
[Join the FSF.](https://my.fsf.org/join)
### Considerations on FOSS and subscription models <span class="tag"><span class="business">business</span><span class="foss">foss</span><span class="vendorlock">vendorlock</span><span class="proprietary">proprietary</span><span class="saas">saas</span><span class="scam">scam</span><span class="_tech">@tech</span></span> {#foss-subscription-model}
I've had this idea for a few days. Mulled it over. Thought about it. And I end up considering options.
There are a ton of vendors for automation services. Zapier, Make, and others. Fundamentally what they do can be done as a one-time service.
<!--more-->
Make the automation script. Feed it the API keys and details. Set it up on a server and run it.
That simple. What the automation vendors offer is the front-end website, which lets you put together that code yourself in a graphical user interface.
These carry a subscription charge - for every month you use their servers to run those scripts, you are charged for the privilege of running very basic (and simple) code on their servers.
AND they don't actually offer any support. If you want help with setting up an automation, whether it's because you don't understand something or because it broke (for whatever reason), you can't count on them to come in and help.
With automation vendors like that, you're entirely on your own to figure out what's broken, and how to fix it.
So what if you had your own server? What if you had the scripts that do all the things, yourself? Not hidden behind a paywall, not obscured by fancy pictures and colors. Just there. Working. And in the off-chance something breaks... you have a team on call, and it's reliably fixed within hours.
The funny thing is, you can. A basic VPS is about $20-30 a year. Hiring a coder who can create automations in an hour or two is about $100. Then you can easily find maintenance for it at $15-20/h, depending on the specifics.
Then instead of paying for a subscription... you can have the automations under your control. Your data. Your server. No dependence on a third party who may or may not be using your data for their own ends. No hang-ups or crashes that you can't respond to. No downtime because of vendor errors.
Best part: you can then sell that same automation to your clients, or add it as a bonus. It's already there. It's working! There is absolutely no reason you can't make it part of your product line.
There is a real market for this, and if it can be asked, this kind of offer can easily become the foundation for a managed automations business.
The idea being that you develop, install, and maintain automations for clients - not through a front-end, but by actually having a human look and write the code to meet whatever needs there are.
But the TL;DR is:
- Subscription services are a scam. The benefit of 'ease' and 'convenience' is entirely offset by platform limitations and lack of real support.
- Hosting your own software to do these things is much easier than it may seem.
- Having control over your IT and business processes is a sure way to ensure that you're not getting undercut by vendor issues.
- [Join the FSF.](https://my.fsf.org/join)
- Use [Emacs](https://www.gnu.org/software/emacs/).
### Efficient computer use <span class="tag"><span class="ergonomics">ergonomics</span><span class="keyboards">keyboards</span><span class="typing">typing</span><span class="speed">speed</span><span class="efficency">efficency</span><span class="_tech">@tech</span></span> {#efficiency-typing}
There's been a whole bunch of things going in the background that kept me from writing more recently. Work has regularly left me brain-drained, and I've found myself in a position where I desperately need to focus on moving my career forward.
<!--more-->
With this came the realization that I use my computer in a way that's likely significantly more efficient than most people. There are three reasons for this.
1. I type faster than most people.
2. I was not scared to take the leap and use a tiling window manager.
3. I am using keyboard shortcuts wherever I can.
For this short blog, let's look at just typing.
One of the most powerful ways to increase the _pleasure_ of using electronics is to become adept at typing. And when I say pleasure, I really do mean it. Typing quickly with your hands doing the minimum amount of movememt is, in fact, an experience unlike any other. Particularly when your co-workers can't keep up.
Therefore, here's a short list of basic-yet-super-good resources for understanding typing, improving your speed, or even completely changing the layout you can use to spend less time typing, and more time thinking.
1. [Monkeytype](https://monkeytype.com) - a great typing training website, includes multiple lists of words (start with English/English200 - it's the 200 most common words in English), options for different tests, punctuation, capitalization, etc. etc.
If you're starting here, your goal should be to first learn proper touch-typing technique, and then get to a reasonable speed (say, 80 WPM) on the 60s default English test.
2. [Keybr](https://keybr.com) - this one is different. It's a progressive training website that starts with the home row (for multiple common layouts), and adds keys once you hit about 40WPM with them. It automatically generates words using common bigrams and trigrams, leading do a very well-rounded word list for training. If you're learning a new layout, Keybr is indispensable for the first few hours, until you start being able to feel your way around the keys.
3. <https://bit.ly/keyboard-layouts-doc> - This is a document that goes into detail into the various layouts, the mechanics of typing, what to look for in a layout, how to type efficiently, and why QWERTY is bad (it really is). Well-worth the read. It's a lot of theory, which may not be the most interesting thing in the world, but understanding it is critical if you're looking to dive deep into optimization.
4. [DreymaR's Big Bag of Kbd Tricks](https://dreymar.colemak.org) - DreymaR went to great lengths to make Colemak-DH accessible to everyone, and with that, he developed a wide variety of tools. If you choose to learn Colemak, his website is great. If you choose to go with something else, [DreymaR's ExtEnd layer](https://dreymar.colemak.org/layers-extend.html) will still save you effort. The idea is to have a layer that includes the common nav keys, so you hold the modifier button for instance, and have your arrow keys right on your home row. It's a huge time saver, and I personally don't think I can go back to moving my hand to the arrows all the time.
5. [OXEY's Playground](https://o-x-e-y.github.io/layouts/playground/) - An amazing project. This website lets you drag and drop keys to change the layout so see exactly how the relevant statistics go up and down. This way you can evaluate alternative keyboard layouts and check if your desired changes make sense. If you're experimenting with improving the layout you're using for yourself, that's the place to start, imo.
Those are really great resources, I think, and learning to type faster than the average of 40 WPM is kinda... necessary, if you work with computers at all.
I like to think about it in simple terms: if I type faster, then the time I spend thinking is increased by the time I save typing.
- If I type 40 words (a short note) in a minute, that minute is all spent typing that note.
- If I type 40 words in 30 seconds... I get to keep those 30 seconds to do with as I please, or to move to other tasks.
Here's a short table to illustrate how much typing speed affects your performance:
Time spent typing 50 words (about the length of a short note):
| WPM | Time to 50 words |
|-----|------------------|
| 10 | 05:00 |
| 20 | 02:30 |
| 30 | 01:40 |
| 40 | 01:15 |
| 50 | 01:00 |
| 60 | 00:50 |
| 70 | 00:42 |
| 80 | 00:37 |
| 90 | 00:33 |
| 100 | 00:30 |
| 110 | 00:27 |
| 120 | 00:25 |
| 130 | 00:23 |
| 140 | 00:21 |
| 150 | 00:20 |
| 160 | 00:18 |
| 170 | 00:17 |
| 180 | 00:16 |
| 190 | 00:15 |
| 200 | 00:15 |
So for what should be a short note, if you go from 50 to 60 WPM, you will save 10 seconds. If you are typing a 150 word email, that's half a minute. And while the savings fade around the 140 WPM mark... that's still a hell of a lot faster than 40.
But the important thing is... if you're poking at your keyboard with two (or even four) fingers, you're missing out a lot. If you're just not very comfortable using a computer, and you're at say, 20, or 30. Going up to 60-70 doesn't take long at all.
And you'll see improvement really quickly, simply by learning where the keys are, and using all of your fingers. It only takes a few hours - and as you can see in the table above, if you type on a regular basis, that time comes back to you pretty quickly.
Learning to type faster pays for itself.
[Join the FSF.](https://my.fsf.org/join)
### I really, really like Emacs <span class="tag"><span class="_emacs">@emacs</span><span class="orgmode">orgmode</span><span class="_tech">@tech</span></span> {#I-love-emacs}
I was taking with a friend a few hours ago and he mentioned that Emacs is intimidating. And yes, it may well appear so.
<!--more-->
But all things considered, that's really not true at all. It's no more difficult to use than GUI programs such as Microsoft Word, or Excel (the latter of which said friend excels at, pun fully intended.)
So let me dispel this uncertainty and doubt about Emacs, and the way it actually feels to use.
First and foremost... it's a keyboard-driven application. For many, that is reason enough to panic, but if you can get past the fear factor... remembering key sequences for functions is really not that different than remembering where to click on the screen in any other piece of software.
Secondly... you don't really have to remember. I have yet to find a function in Emacs that would not have a corresponding command to be ran with `M-x`. But what is `M-x`? It is how most keybindings in Emacs are written.
`M-x` opens the `execute-extended-command` prompt at the bottom of the Emacs window, which lets you look up functions by name. Thankfully they're all quite sane, so if you remember the verb you want to use (e.g. 'transpose', 'kill', 'delete', 'replace'), you can just type it in, and you will be faced with a good bunch of choices to make your life easier.
There are several modifier keys which act much like shift does on your keyboard. Except instead of making Emacs type in different letters and symbols, they call different functions of the software.
For example, `C-t` (that is, holding the control key and pressing `t` on your keyboard) transposes the two letters (and symbols) on either side of your text cursor. Conversely, `M-t` does the same for _words_.
Of course, you don't need to remember this - I don't. Usually I just backspace and fix things if I need to.
But there are bindings which are useful. For example, making a list (note that this is probably only applicable to org-mode, but that's fairly exclusively the mode I use):
```text
- dash, space, type type type... C-return (or C-enter if that's your preference)
- and here we just continue typing in a new bullet
```
And numbered lists work the same. So do headings, which start with `*`. If I want a subheading, I just increase the number of asterisks. _Or_ I can just hold Meta (the Alt key on the keyboard) and use the arrow keys to move that heading or list element around - including making it a subheading, promoting it to a full heading, or moving it up and down the list.
_Note that in the example block, the bullets are displaying as hyphens_ dashes - that is how the actual website is written. It's only later shown in your browser as bullets./
Then there's the wonderful ways in which Emacs handles files.
When you open a file in Emacs, it is loaded into what's called a buffer. It's essentially a separate space in Emacs where that file then lives, until it's closed (or in Emacs parlance, the buffer it's loaded in is killed).
To switch buffers, you just hit `C-x b` and pick from the list. You can have as few, or as many as you wish. There is no real limit to how many files you can open... and they take no screen space unless you choose to see them. No dozens of windows floating around on the screen makes for much easier focus and quicker work.
But what if you want to see more than one file at a time? `C-x 2` splits the view vertically (i.e. one buffer on top of the other), and `C-x 3` splits it horizontally (one on the left, one on the right.)
And when you want to go back to seeing just one buffer... `C-x 0`. That simple.
Of course, you can also look at the same buffer in different places. That's the major reason why I went full-time with Emacs back in 2016. I was writing _a lot_ of copy at the time, and needed a sane way to manage my notes, my references, and make sure the sales letters were internally consistent.
Emacs has been a true godsend to someone who, like me, lives and breathes typing and editing.
But let's talk about one of the things a lot of people get hung up on when it comes to Emacs. The kill-ring, and the most useful of all commands, `C-k`. `C-k` kills (that is, cuts) from your cursor to the end of the line.
```text
In the next line, I'll put the cursor right after THIS word, and press C-k.
In the next line, I'll put the cursor right after THIS
And in the next line I'll press C-y (yank):
word, and press C-k.
```
As you can see, spaces are preserved in the kill-ring.
You can also use `M-y` to choose which previously killed bits to yank from the kill-ring right into your live buffer.
Note that I'm only bringing the `kill-line` function up because we _all obviously know_ about `C-backspace` to kill the last word, and `M-d` to kill the next word after the cursor.
And this isn't getting into even the half of it.
- `C-x C-s` (or, x-then-s while holding down the control key) saves the buffer (file) to your drive.
- `C-x C-f` opens a file in a new buffer (if it's already open, it brings up its buffer).
- `C-x k` opens a menu which lets you select which buffer to kill (close the file).
- `C-g` stops any processes and quits out of any menus you may find yourself in
- `C-space` sets a mark. When you then navigate the file (for instance with your arrow keys), it selects text. No need to hold shift!
- `C-x space` sets a mark for _rectangular_ selection. Ever only want to select the first few characters of each line of text? You easily can!
- `C-w` kills the selected region
- `C-c .` (in org-mode only; and yes, that's a period as the second part), opens a menu to insert an active time-stamp into the document
- `C-s` starts a search in the document
- `M-%` (that's alt-shift-5) lets you do run the query-replace function, to replace any instances of a phrase with something else
- And of course, `C-x C-c` exits (closes) Emacs.
And there's so much more... but that's about 90% of what I use on a daily basis. I don't even code on the regular - all plain text editing.
The bottom line is... Emacs is not at all hard. And it's infinitely customizable, because it's not really a text editor. It's a full interpreter for the Emacs Lisp programming language. You can surf the web, get your email, run project management, store your diary, translate, write, code, read rss feeds, watch videos, run all kinds of code IN IT.
The text editor part is very extensive and well thought out, but it's really not at all difficult to learn. Once you get used to just how comfortable and effortless writing becomes when you take advantage of that polish, it is really difficult to go back to anything else.
Emacs is just the supreme tool for any use-case which requires typing.
There is no alternative that comes even close to how powerful Emacs is.
[Join the FSF.](https://my.fsf.org/join)
PS. If you want a nice, very well polished and 'out-of-the-box' experience with Emacs, give [Doom Emacs](https://github.com/doomemacs/doomemacs) a go. It's really good, very easy to configure, and _fast_. It includes everything you could need to start using it, and be ready to go in minutes.
### A new look: ox-tufte <span class="tag"><span class="_emacs">@emacs</span><span class="orgmode">orgmode</span><span class="web">web</span><span class="css">css</span><span class="tufte">tufte</span><span class="_tech">@tech</span></span> {#a-new-look}
Struck by insomnia and dissatisfaction with the way my website has looked so far, I have opted for something less garish, and lighter, than before.
<!--more-->
I was lucky enough to have stumpled onto [this wonderful stylesheet based on Edward Tufte's work](https://edwardtufte.github.io/tufte-css/), and couldn't help but look for an implementation that would be compatible with [org-mode.](https://orgmode.org)
Fortunately, I found one that seems to do _exactly_ what I wanted it to.
[ox-tufte](https://github.com/ox-tufte/ox-tufte) is an HTML export backend for org-mode which makes the output HTML compatible with the stylesheet.
I _did_ make a few adjustments, namely:
- Removed left margin, instead I'm padding by 20px.
- Added some additional CSS for source blocks, since those didn't seem to be getting styled correctly in my exports (and I don't want to have to hunt around to find the culprits.)
- Removed a bit of padding on top.
- Made the numerals generated by org-mode hidden, because otherwise foodnotes and footnote references had two of their number, instead of just the one they need.
I think it looks rather good, and it'll let me go over my existing articles and add the side/margin notes {{< sidenote >}} Yay! This is how every footnote should be. None of that scrolling for miles to find what you're interested in stuff.] that I wanted, but couldn't before {{</ sidenote >}}.
Overall, I am quite happy with this {{<sidenote>}}I know there is some js in the HTML that's generated. I aim to remove it at some point. No big deal for now.{{</sidenote>}}. And it only took... 3-4 hours of work, research included. Pretty cool!
Very happy indeed.
<span class="underline">[Join the FSF!](https://www.fsf.org/)</span>
### VPS set-up <span class="tag"><span class="vps">vps</span><span class="sysadmin">sysadmin</span><span class="_tech">@tech</span><span class="servers">servers</span></span> {#vps-setup}
A few months ago I took up a project to centralize and collect all of my websites and email boxes.
<!--more-->
I took some time researching what I needed, and settled on netcup.de for my host. The major reason is that they're based in Germany, which means they comply with GDPR - this way I don't have to worry about my data being processed in ways I don't explicitly agree to.
Being European, I do tend to take my privacy for granted, and am reasonably careful not to contribute information about myself to businesses if I can avoid it. (Did you know that Facebook goes into overdrive with targeted advertising when you enter the US?)
I had no experience setting up servers before, aside from basic MySQL on Windows Server around the year 2007. Maybe 2008.
However... it turns out to be a really simple process if - like me - you're using Linux as your daily driver. I normally run Arch, but after some quick research I found that it's a bad choice for servers. Ubuntu it is.
So I installed Ubuntu. That's one thing sorted.
Then I had to choose a web server. I had prior experience configuring Apache and nginx, and I found them unnecessarily complicated. I don't plan to do anything more complex. Just a bunch of simple HTML files and a mail server.
I then found Caddy, and seeing its elegant and simple configuration, I was quickly sold. The setup was simple enough, and the configuration was easy. I pointed my domains to the server, and migrated most of my websites shortly.
I had previously used Wordpress, however I wanted to avoid the heavy and resource intensive nature of Wordpress. It's not bad software by any means, but I am personally biased toward lighter solutions. Having been an Emacs user for years, it only made sense to use org-mode and export to HTML.
This way I only ever need a web server that serves files, and I don't have to deal with databases.
Then the email server. I wanted this as simple as possible. I tried a number of solutions, and having issues with them, I settled on iRedMail. The installation was simple enough, but required that I handle its own webserver - it comes bundled with nginx for webmail access.
This turned Nita an entire project as I had to learn about handling SSL. Caddy procures its own certificates from Let's Encrypt, and the nginx webmail didn't like that because iRedMail generates local certs for itself.
I reconfigured Caddy to place its SSL files in a sheared directory and made nginx would read. Didn't work, nginx complained. Eventually I gave up. Since the servers are on the same physical machine, and Caddy is the server facing the web, I let it do that, and removed the SSL option from nginx.
That solved my mail issues.
Thankfully&amp; adding DKIM and DMARC to the domains was very straightforward.
Then... something interesting happened. My wife wanted to set up a Wordpress install for her new shirt store.
I chose MariaDB for the database. The set-up process for SQL DB's hasn't become any easier in the last 20 years, for inexplicable reasons. But with a small bit of research, I was able to follow the documentation, and set it up in a day from scratch.
The Wordpress install is entirely served by Caddy, and the setup was truly painless in comparison to setting up email. Still, I got it done.
The final set-up is like so:
- Ubuntu
- Caddy
- iRedMail
- nginx (behind Caddy)
- MariaDB
- Wordpress
- Emacs
For the most part, the set-up was straightforward. The sticky points were SSL between Caddy and nginx, setting up the mail server (even though I used iRedMail, it required a bit of research to set up correctly. And MariaDB for Wordpress.
Sum total: about 10-12 hours of work. In retrospect, I'm confident I could set this up again in much less time, and it was a healthy learning experience.
### Moving to Hugo <span class="tag"><span class="hugo">hugo</span><span class="web">web</span><span class="orgmode">orgmode</span><span class="css">css</span><span class="tufte">tufte</span><span class="_emacs">@emacs</span></span> {#moving-to-hugo}
It's been a long time since I started using the `ox-tufte` exporter to keep and maintain my website. However, I have had issues with it; one of the larger ones being that it's a pain in the butt to remember how it all works when I want to change the structure of it.
I also was a little tired of the look and layout; being presented with an endless table of contents isn't the best experience one could hope for online.
<!--more-->
Not to worry, I am in the midst of migrating most of my writing to Hugo!
Naturally, since I am a lover of prose and dearly enamored with sidenotes, I opted for [the hugo-tufte theme.](https://github.com/loikein/hugo-tufte) However, I immediately found some unpleasantness in it.
While I can and do appreciate whitespace, there is such a thing as too much. So I spent a number of hours fixing up the CSS (and a few minor things) more to my liking. at the same time, I realized that there are some limitations.
I won't bore you with the details, suffice to say I [forked the repo and started messing with it](https://git.bajsicki.com/phil/hugo-tufte). I'm not familiar or even remotely good with CSS/ HTML/ Hugo, so please don't expect miracles{{<sidenote>}}Also called 'clean code.'{{</sidenote>}}.
Most of my changes were minor; color scheme adjustments, decreasing the massive margins between the elements, getting some styling on the margin and side notes, and such.
One thing that I realized quickly was that the way sidenotes are implemented leads to them overlapping when they're close together; I have yet to find a solution for that, so for the time being, I am choosing to simply make the sidenote font smaller so they don't.
Other than that... I'm really happy with it.
Of course, I didn't stop there. Being the crazy person that I am, I wanted to automate deployment of my website through git.
And so I did. You can find the repo [here.](https://git.bajsicki.com/phil/bajsicki.com) The important bit lies on the server side.
I'm using a git hook to automatically purge and re-build the `/public` directory after each commit. I don't get enough traffic for this to be an inconvenience.
I used some of [this article](https://jasonmurray.org/posts/2020/githugogen/) by Jason Murray to help me understand how git hooks work. I'm running [Forgejo](https://forgejo.org/), and this is a much more elegant and simple solution when compared to running Actions or other CI/CD tools.
The post-receive hook is like so:
```sh
#!/bin/bash
# Directory on the server where the website will be mapped.
export GIT_WORK_TREE=/srv/bajsicki.com
echo `pwd`
echo "post-receive: Generating https://bajsicki.com with Hugo..."
# Create the directory and all subdirectories if they don't exist.
mkdir -p $GIT_WORK_TREE
chmod 755 $GIT_WORK_TREE
# Remove any files already in the public directory, a fresh copy will be generated by hugo
rm -rf $GIT_WORK_TREE/public
# Generate the site with hugo
cd $GIT_WORK_TREE && chmod +x update.sh
cd $GIT_WORK_TREE && ./update.sh
# Fix any permission problems.
find $GIT_WORK_TREE/public -type f -print | xargs -d '\n' chmod 644
find $GIT_WORK_TREE/public -type d -print | xargs -d '\n' chmod 755
echo "post-receive: Hugo site generation complete"
```
The `update.sh` script is as dead simple as things get.
```sh
#!/usr/bin/env sh
cd themes/hugo-tufte/
git reset --hard && git pull origin main -f
cd ../..
git reset --hard && git pull origin main -f
hugo
```
In short... it just works, and I can easily transition my blogging/ websites to Hugo without compromising on my `org-mode addiction`.
All thanks to [ox-hugo](https://ox-hugo.scripter.co/), which made the process very easy, since I already had all of my articles in org-mode format in the first place.
I guess the last thing to mention are the sidenotes and margin notes... sadly, the way to use them with ox-hugo is quite cumbersome. My current process is to keep these two snippets in the kill-ring{{<sidenote>}}I will be moving them to yasnippet... at some point.{{</sidenote>}}, so I can easily insert them when needed.
```org
@@hugo:{{</*sidenote*/>}}
{{</*/sidenote*/>}}@@
```
Then an example of it would look like this{{<sidenote>}}Or maybe not, I'm not sure.{{</sidenote>}}.
```org
@@hugo:{{</*sidenote*/>}}Or maybe not, I'm not sure.{{</*/sidenote*/>}}@@
```
The same formatting applies to `marginnote`.
As you may notice, there is an issue. For some reason the hugo-tufte theme doesn't treat the sidenote number/ indicator as only a character, but adds a whitespace after it as well. This can lead to some hanging punctuation, so if you see that on this website, that's why. And if you don't, there's a tiny chance I fixed it.
Still, all things considered, I am quite happy, and working on this website has been a great reprieve from bombarding my brain with infosec.
<span class="underline">[Join the FSF.](https://my.fsf.org/join)</span>
## Mind <span class="tag"><span class="_mind">@mind</span></span> {#mind}
### Some words in a moment of peace <span class="tag"><span class="language">language</span><span class="words">words</span><span class="meaning">meaning</span><span class="clarity">clarity</span><span class="communication">communication</span><span class="_mind">@mind</span></span> {#words-in-a-moment-of-peace}
There are many things in the world which annoy me.
Yet time and time again, I have these moments of clarity where the world makes sense and everything is good. It's hopeful.
<!--more-->
For a long time now I've wanted to share what's in my head with the world. Some of it is good, some of it is bad. The bad I can ignore for the most part. Habits that we repeat tend to grow and become autonomous.
But the good things?
I've never been good at writing, really. Even when I wrote professionally, there was always an anxiety in me, whispering "these words don't mean what you want them to."
So I found myself relying on dictionaries. I speak three languages, to I thought
it would be wise to rely largely on the collected wisdom regarding language.
Yet that didn't work out the way I expected. Time and time again I was faced with people (usually native speakers), who used the words differently. Often ignorant of what they actually mean.
We see this every day. I'm not going to nitpick, but there are so many words which mean specific things, yet are said as if they don't.
Here's the thing about words: they're 'pointers at' particular categories of natural phenomena that we get to observe.
If you say 'apple', you're referring to a category of natural phenomena that meets certain specific criteria in your sensory system.
An apple might have a certain color, weight, take up a certain volume of space, its skin can have a number of different textures, it can taste a number of ways...
Yet all those too are words that describe categories of things we see out in the world.
If we focus on the words, on the categories, on the descriptors, then we're missing a critical part of being. We're missing the object itself.
Words are abstract. They're basically groups of sounds (and eventually symbols) that are associated with particular meanings.
These meanings in turn are derived (abstracted) from out experiences, which in turn stem from our interactions with the natural phenomena (things) in our environment.
So words are at least 3-4 levels off from reality.
This isn't a useful observation by itself, yet we can then derive (ha!) a few useful observations.
- Reality does not lie. It has no capacity to do so. Things are as they are.
- You can either accept it, or you can struggle against it.
- Accepting reality leads to peace and kindness.
- Struggling against reality leads to suffering and anguish.
- This doesn't mean 'accept it with open arms.' It means accept that what you see, what you're experiencing, is real.
- Doing things in the world is less abstract, less divorced from reality.
- Therefore observing how people act yields more truth than hearing them describe what they are doing.
- Eating an apple is not the same as describing eating an apple.
- Therefore if someone makes claims about things, it is wise to ask for evidence that it is so.
- Thinking is further from reality than direct interaction.
- Therefore it is wise to quiet down and act.
- Thinking, verbalizing, writing and talking are abstract, and therefore extremely prone to being false.
- Therefore be careful with your speech, as it may not be accurately reflecting the world.
- There are people who speak carelessly, or intentionally in such a way as to misrepresent reality.
- Taking a little time to verify their words it worth more than losing time/money/health by blindly trusting them.
- In cases where it is impossible to verify, it's often best to ask for evidence.
Well, that's a bunch of thoughts.
I suppose the bottom line for me when evaluating who I can trust, and who I should avoid is _integrity_.
If someone is acting inconsistently with what they say (i.e. they make promises or commitments and then don't fulfill them), that's a huge red flag.
If someone is speaking inconsistently across time (i.e. they say one thing today, and a contradictory thing tomorrow), that's a huge red flag.
Consistency and predictability is what allows us to trust each other. The only way for this to be true is when the things we say align with how the world is.
Words mean things. Please help others understand what you mean by using them carefully.
Thank you.
### Wisdom from a Satyr <span class="tag"><span class="_wisdom">@wisdom</span><span class="ethics">ethics</span><span class="suffering">suffering</span><span class="buddhism">buddhism</span><span class="_mind">@mind</span></span> {#wisdom-from-a-satyr}
This is something a dear friend said in a chat a while back. I thought it was one an awesome summary of the human condition.
<!--more-->
> If ethical behavior clearly led to immediate gratification, we would live in a less brutal world. The majority of functional people would behave like saints. This is just the nature of doing the right thing. It won't necessarily end well for you in the short term.
>
> But attempting to protect our self from suffering won't necessarily prevent suffering. If you could live alone in a cave you might just suffer differently. In fact our attachment to the self brings us more pain, not less. We don't just suffer, we dwell on the fact it's happening to our self, the injustice of it all, adding suffering to suffering. We assume that this self will exist in the future and fear more suffering to come adding yet more suffering.
>
> So, it's in our best interest to stop thinking in terms of what is best for the self. Doing the right thing can ultimately be in our favor, even when we may suffer for it in the immediate future. We will suffer more in the long term indulging and protecting the self.
_Satyr, 30/01/2023_
Big Zen vibes.
### Brain supplements: A two month summary <span class="tag"><span class="supplements">supplements</span><span class="nootropics">nootropics</span><span class="_mind">@mind</span></span> {#brain-lube-3}
Over the past two months I've been trying out some brain supplements for my issues with focus and concentration.
<!--more-->
In particular, I was using the following stack on a (nearly) daily basis:
- 150mg pregabalin
- 200mg caffeine
- 300mg Alpha GPC (occasionally 600mg, if I knew it was a busy day)
- 200mg L-Theanine
- 500mg Lion's Mane extract
Overall, it has been great. My focus improved, my energy levels have increased on average to the point where I can function pretty well at work. My sleep quality has improved, although I still do rely on a 25-50mg dose of diphenhydramine occasionally. I blame the caffeine.
I have had a few rough days, particularly around the holidays, when I forgot to take one or more of the supplements.
Despite the marked improvement, I still find it difficult to focus past work. I currently start at 1400, which means that I lose a lot of my day. If I want to have energy left to last the day, I wake up past noon, and then rely on the caffeine to stay up. I finish work around 21, 2230, depending on the day.
I think, of all the supplements, the Alpha GPC is the most notable one, as it seems to significantly decrease the effort that concentrating requires. It makes maintaining focus much easier.
I have noticed that the L-Theanine seems to work well together with the pregabalin to quell my anxieties and help me be more present in the moment. It's not quite to the point where I'm completely 'there', but it's close enough for now.
I can't say anything about Lion's Mane. I have not noticed any clear effect that I can attribute to it so far.
Caffeine is obviously a big one. I must note here that taking it _without_ the L-Theanine leads to jitters for me. Can be quite unpleasant. I have not noticed any changes to my heart rate on the 200mg dose, which is good.
Anyway,
[Join the FSF.](https://my.fsf.org/join)
### On Problems <span class="tag"><span class="psychology">psychology</span><span class="problems">problems</span><span class="_mind">@mind</span></span> {#on-problems}
I had a fairly interesting conversation today with a young immigrant from Palestine to Germany.
<!--more-->
The topics varied, but the major take-away from the conversation may be useful.
1. You're okay as you are.
2. Being the problem is easier than being the one _with_ the problem.
3. If you think you have a problem, sit, breathe and ask yourself: is it really _your_ problem?
In the vast majority of cases, it's really not yours. And if it doesn't impact you, are there reasons for you to handle it? When people act out and do things that are reckless, ill-thought-out, or just bad...
**It's not about you.** They're acting out their own emotions, thoughts, and tensions that live in them. And if it really is about you, _they'll let you know_. And that'll give you a clear idea of how to address it.
Considering whether the problem _really is a problem_ has been a major way I've managed stress over the years. Most things are not problems, and most things can wait.
Or you can let them proceed to their conclusion without getting involved.
And if they are a problem, they might not be _your_ problem. If it's not your problem, then you don't have to address it - unless you want to.
This also gives you relief. You don't _have to_ handle it. It's not your responsibility.
You're okay as you are. Just sit back, relax, and let the dice fall where they may.
Stressing over things doesn't do any good - to you or to others involved. Keeping a clear head is by far the best way to handle things.
It even shows up in the ol' OODA loop.
- Observe - **take your time** to see.
- Orient - **take your time** to find yourself in the situation.
- Decide - **take your time** to choose a direction.
- Act - **move fast**, with the confidence that **taking your time** gives you.
You don't have to rush in life.
Things will happen, are happening, and have happened.
It's okay.
[Join the FSF.](https://my.fsf.org/join)
### Trying out some brain supplements, pt. 2 <span class="tag"><span class="supplements">supplements</span><span class="nootropics">nootropics</span><span class="_mind">@mind</span></span> {#brain-lube-2}
Two days have passed. I've found that [Alpha-GPC should be dosed at twice what I've been using.](https://www.webmd.com/vitamins/ai/ingredientmono-1087/alpha-gpc) Today's the first day that I've done that.
<!--more-->
It took about 90 minutes to kick in. I've taken it with the other supplements - L-Theanine and Lion's Mane. I had some matcha as well, for the caffeine boost. Despite being a Sunday, and me feeling lazy, and not having slept very well...
I'm genuinely being productive. In 40 minutes I did an amount of work that would normally take me at least a few hours - simply by being able to focus and not have distractions.
There are some parts to this.
1. The Alpha-GPC is undoubtedly affecting my ability to focus and do work, in a significant way. I didn't expect this to be the case, but the change is profound.
2. The L-Theanine... I can't tell if it's doing anything. I certainly feel less stressed and more relaxed, but I don't have any way of confirming that's the case.
3. I can't say anything about the Lion's Mane caps yet. It's not been long enough.
4. I have been able to truly focus today, and without distractions at that. It's certainly a factor in the increase of my productivity - the vast majority of my work has been reliant on constantly switching contexts, which is a _huge_ obstacle for me (personally) being effective.
Overall, I am extremely happy with this. These supplements are reasonably cheap, and for what they do, they're very much worth the price for me.
Being able to focus effortlessly (relative to my normal), and actually think in-depth about the projects I'm working on is a godsent.
It's not PERFECT, by any means, but the difference is very clear to me.
[Join the FSF.](https://my.fsf.org/join)
### Trying out some brain supplements <span class="tag"><span class="supplements">supplements</span><span class="nootropics">nootropics</span><span class="_mind">@mind</span></span> {#brain-lube}
As a person working in a high-speed, high-attention and multifaceted environment (currently working as an Executive Assistant, soon starting a new job in Quality Assurance), I am changing contexts all the time.
<!--more-->
Changing contexts means shifting from one task (e.g. taking notes in a meeting) to another (e.g. fixing scheduling issues) to another (e.g. preparing for the next meeting), where the tasks are disconnected and involve different relationships, thoughts, information, and priority.
Over the past 6 months, this has taken a large toll on my ability to focus - and in many ways, my mental health. It takes _a lot_ of mental effort to go from thinking about one thing to another. Particularly when it happens multiple times each hour, often multiple times in the span of a few minutes.
So I've been ending each day feeling fried, unable to even conceive of doing anything else that day. I don't like being tired and feeling useless.
A close friend pointed me to some supplements that should help my focus. I started on them today, and here's my thoughts after just 5 hours or so. L-Theanine and Alpha GPC kick in quickly, thus the notes.
- L-Theanine (200mg): super good, the effects are subtle yet noticable. I found my body much more comfortable to control, and a lot of the muscle tension seems to have faded.
- Lion's Mane (500mg, extract): Haven't noticed anything that I could attribute to it yet. Supposedly it takes a while to build up, around two weeks.
- Alpha GPC (300mg): very nice. My focus and executive function appears to have improved dramatically (compared to _my_ normal). I feel like switching tasks isn't as difficult. If I didn't know that I had taken it, I would just think that I'm randomly having a really good day, so the effect isn't immediately obvious.
Now, I don't know if those effects are as I attributed them. Compared to my average day, I do feel significantly more focused and able to stay on track with multiple things at once. So that's good. But do bear in mind that every brain is different - some are sensitive to one thing, and not another.
Whether this will take a permanent place in my day-to-day routine is TBD. I do plan on staying on this regimen for at least a month or two, and determine if it's worth it then.
In any case...
[Join the FSF.](https://my.fsf.org/join)
## Body <span class="tag"><span class="_body">@body</span></span> {#body}
### Overcoming typing-related RSI <span class="tag"><span class="ergonomics">ergonomics</span><span class="keyboard">keyboard</span><span class="typing">typing</span><span class="rsi">rsi</span><span class="health">health</span><span class="_body">@body</span></span> {#overcoming-rsi}
<span class="timestamp-wrapper"><span class="timestamp">[2022-09-22 Thu]</span></span>
Over the past few weeks, I've found that decreasing the amount I type has helped a lot. I can't remember the last time I was unable to sleep due to pain.
<!--more-->
I now type only when necessary - much less than before. My language is more brief. It's becoming a habit to leave explanations out of what I say.
I still type a lot at work. When segments - such as today - happen, during which I type non-stop for longer than about 50-60 minutes, the pain does set in, and takes a few hours to subside again.
Still, it does not get to the point where I need to take painkillers to continue work at a slower pace.
RSI (Repetitive Strain Injuries) take a **very** long time to heal. If you're at risk, re-think your ergonomics. Some of the solutions I've implemented, which have helped a lot are:
- Putting a cushion on my chair, to sit up higher - and thus having the keyboard relatively lower.
- Float your hands over the keyboard. Doing so allows more hand movement - reaching for keys using your arms instead of stretching your fingers... and removes tension from your wrists and tendons by keeping your hands aligned with your forearms. Less wrist movement = less strain.
- Tilting my keyboard outward slightly, to decrease the amount of 'twisting' my forearms to be horizontal over the desk. I have found that tilting too much (!!!) does actually make typing more difficult for my relatively short pinkies. So try a few settings out, if you're able to. _Note: this is only possible if you're using a split keyboard... which brings us to:_
- Use a split keyboard. This allows your arms to rest over the keyboard in a neutral position, with the right (usually shoulder-width) gap between them. On a regular keyboard, it's easy to build a habit of hunching over the keyboard because it forces your hands to be together. Additionally, it adds an unnatural twist to your wrists - if you use 'proper' typing technique.
- Sit up straight, with your elbows 'hanging' along your torso. Not always possible if your chair's armrests are too high, but that allows you to relax your shoulders, which has a waterfall effect on how much stress is held in your arms, forearms, wrists and hands.
- Take frequent breaks to stretch, and do other work with your hands. Changing what your hands are doing from the same motions to something radically different (e.g. washing dishes, doing laundry, etc.) allows your tendons to experience a different kind of work, which feels like it resets the tension that builds up in them. _Note: this is only based on my experience and is not in any way medical advice. If your particular issues are made worse by this, don't blame me - check with your doctor._
- Wrist braces. Wear them when:
- typing
- in pain
- sleeping (many people, me included, have a tendency to sleep with their wrists curled inward - this appears to cause further stress on the tendons)
- REST. This cannot be overstated. REST. STOP TYPING UNLESS NECESSARY.
The whole reason this article is here so late is because I had to give my arms time to rest, and recover to the point where I can type somewhat comfortably.
Even with that, having written this in one go, I am finding my forearms starting to ache. Not great. Take care of ergonomics - if your life relies on being able to type, you can't take risks.
Serious cases of RSI can take YEARS to heal. Stay safe.
### Learning a new keyboard layout <span class="tag"><span class="_body">@body</span><span class="ergonomics">ergonomics</span><span class="keyboard">keyboard</span><span class="colemak">colemak</span><span class="typing">typing</span></span> {#new-keyboard-layout-colemak-dh}
<span class="timestamp-wrapper"><span class="timestamp">[2022-08-18 Thu]</span></span>
Given that I type a lot - and I do mean A LOT, and I'm past the age of good hand health... I'm in a certain amount of constant pain.
<!--more-->
I started learning Colemak-DH as a way of moving away from QWERTY. This was on my laptop keyboard. It went well up until I reached about 50WPM (I was oscillating around 95-105 WPM on QWERTY). Then my hands gave out.
"Hey maybe it's an issue with the keyboard!" I thought, since my usual keyboard wasn't with me. After all, a laptop can't have the oh-so-comfy mechanical switches.
So I went ahead and ordered a Moonlander keyboard. I like it. But moving to a matrix keyboard wasn't as painless as I had hoped. The pain shifted from my wrists to my arms. I'm not yet sure what the issue is quite yet.
Still, I am able to maintain a reasonably steady 50ish WPM.
In the meantime, I am experimenting with ather layouts that will hopefully reduce the amount of strain an my hands. My job requires that I type most of the day, and so losing that ability would be rather... painful.
So far I have tried Canary (which I am typing this post with), Engram, ISRT, and a number of other layouts. There are two parts which make it difficult for me to switch from Colemak-DH full-time.
1. It is a large time investment, and compromises my ability to work efficiently.
2. My arms already hurt, and I'm concerned about developing RSI. Learning a new layout seems to exacerbate this process.
Once that's sorted and an opportunity presents itself, I am planning on putting in the work to move forward with a more ergonomic layout.
If you are considering moving away from QWERTY, the easiest and (in my mind) best layout to switch to is Colemak, by far. Not only does it preserve most keyboard shortcuts, but it also improves ergonomics by lhat feels like an order of magnitude.A
## Books <span class="tag"><span class="_books">@books</span></span> {#books}
### Weekend thoughts - _Mastering Emacs_ by Mickey Petersen <span class="tag"><span class="emacs">emacs</span><span class="review">review</span><span class="_books">@books</span></span> {#mastering-emacs}
Over The Past few weeks I've found myself spending more and more time in Emacs. As such, I want to learn more about it, and how to use it effectively. It seems worth the effort, because if I save 5 seconds every day, that stacks up and saves inordinate amounts of time.
<!--more-->
It's a lot like training to type faster and more accurately. If I can finish the tasks before me 10% faster, that means that I get that 10% more free time. Which I like, because it lets me occupy my mind with other efficiency fixes.
In researching how to use Emacs better, I stumbled upon [Mickey Petersen's website](https://www.masteringemacs.org). He's got a wonderful blog with loads of tips, and is selling a book, Mastering Emacs.
I do admit that it is a bit pricey for my tastes (at least compared to simply reading the blog and reading the documentation). Nonetheless, it is exceedingly accurate in explaining the very fundamentals, the _core of Emacs_, and the functionality.
I'm about halfway through it, and it certainly merits a second read once my brain isn't so occupied with work.
I think the most important part of 'Mastering Emacs', and what justifies the book in my mind, is that it explains some very advanced functionality (e.g. point and mark, occur mode in isearch) which isn't present in other software that I am aware of, in a way that's lucid, approachable, and easily comprehensible.
Of note, and the reason I have come to _love_ this book, is its mention and clarification of `imenu`. I was not aware of its existence, and given that I extensively work with org-mode files, it has become by far my preferred way of navigating them.
As if turns out, Doom Emacs has it bound by default to `C-c s i`, which while not a perfect binding on Colemak (`s` is right above `c` - they're hit with the same finger), is absolutely wonderful to have.
In any case, the book is worth it. Some of it is already in the blog posts on the website, but frankly - even if all were there, it's still worth a buy to use as a guidebook for explaining Emacs to people who don't yet understand the power that is in their grasp.
Good read. Might update this after I finish the book, if I have time or any thoughts to add.
## Business <span class="tag"><span class="_business">@business</span></span> {#business}
### Shiny objects, and learning <span class="tag"><span class="mindset">mindset</span><span class="attitude">attitude</span><span class="rant">rant</span><span class="_business">@business</span></span> {#shiny-objects-and-learning}
It's been three months, and life has moved forward a little. Today's rant is one
that's been brewing in me for a long time.
One of the most pernicious, annoying, frustrating, infuriating aspects of online
businesses is the influence of non-technical management.
<!--more-->
I consistently notice this issue in most companies I interact with. It's not a
simple topic, and there are many facets to it.
First, let's imagine our avatar. A simple, non-technical manager that has some
say in what their department does, how it works, and so on. They have friends
who they speak to, and their friends recommend a specific piece of software
because it serves _their_ business case well.
And that's great. But our manager doesn't understand the details of the
software, how it works, what it does, or how it interacts with the rest of their
friend's systems. Nor does our manager understand much about the differences
between the software they're using currently, and the software they're being
recommended.
There are two outcomes we can generally expect:
1. Our manager does their research, and consults with their team before making a
decision on whether they should buy and start using the new software,
considering the upsides/ downsides seriously, as well as the overhead of
migrating their data, processes, and training{{<sidenote>}}This happens the most in companies which foster a culture of care and risk management, in my experience.{{</sidenote>}}.
2. Our manager doesn't do the research, and enforces the change over to the new
software based on what's effectively hearsay, creating friction in their department{{<sidenote>}}Migrating data, processes, implementing new training for hires, updating their tech stack to integrate with the new software.{{</sidenote>}}.
The core difference is nothing else but the manager's awareness. Our
imaginary manager may understand the limits of their knowledge, and have the self-awareness to admit when they're out of their depth.
This isn't easy.
There is also the element of FOMO when faced with peer pressure{{<sidenote>}}Not always, but sometimes artificially created by marketers{{</sidenote>}}..Our imaginary manager, when
faced with love bombing {{<sidenote>}}Using the term lightly here. Businesses have social media managers whose role is to make each prospective user (lead) feel important and appreciated, playing on their emotions in an attempt to sell their software.{{</sidenote>}} from a software's community (social media groups, e.g. on Facebook),
can rarely help growing into a positive emotional relationship with the company.
In turn, in an effort to be part of the in-group, they buy into the software
eco-system because of this New Hot Amazing Feature (`Shiny
Object`){{<sidenote>}}Frequently finding the software wanting, for many reasons.{{</sidenote>}}.
The new software is then integrated into the department's systems, on our manager's request. This involves great cost:
1. The software itself{{<sidenote>}}Frequently inflated to cover the software company's high marketing and advertising costs.{{</sidenote>}}.
2. Migrating data from existing systems into the new software.
3. Migrating existing processes into the new software - including integrations,
APIs, and so on.
4. Training staff on the new software.
As you can see, the overhead is large, and it's not limited to that.
For a non-technical person, the idea of `no-code`, or `magic thing that does what
you mean` is alluring, however it carries with itself a great cost.
But it doesn't stop there. Our manager may neglect the need to learn and
understand the software they use in the first place. Then the dangerous idea of
"we need X, let me search for the best X that we can get" appears. Despite the
existing tech stack easily allowing for that need to be served{{<sidenote>}}Example: subscribing to a CRM SaaS (Software as a Service) platform to send mass mail (e.g. announcements, )instead of using their existing Google Workspace e-mail with merge fields.{{</sidenote>}}.
If this is the case, it's inevitable that tech bloat will take place.
This is particularly an issue in startups/ microbusinesses, where an expense of
$500/mth may be significant. So understanding the feature set of the tech stack,
and ensuring that features in it don't overlap can be a very effective way of
avoiding unnecessary costs.
It's also important to think about the most fundamental cost/ benefit equation.
> Is the cost of our hypothetical manager learning about tech, little by little
> each day, high enough to offset the costs of changing the software stack in the
> first place?
I personally don't believe so. The only cure to ignorance is self-awareness, and
a drive to learn and understand the world around us.
There. Rant over.
<span class="underline">[Join the FSF.](https://my.fsf.org/join)</span>
### A kind view of business <span class="tag"><span class="mindset">mindset</span><span class="rant">rant</span><span class="_business">@business</span></span> {#a-kind-view-of-business}
Scrolling LinkedIn today, I saw a post talking about the entitled attitude of
business owners when hiring{{<sidenote>}}Sorry for not linking to it, I can't morally support that platform.{{</sidenote>}}.
<!--more-->
The post's point was that most businesses are not providing sufficient
compensation for the skills and effort they are asking for when hiring.
And... I can't help but agree. But I would also like to voice a bit of my
thoughts about the matter, because I feel like it needs a little bit more
context and explanation.
A business has one goal: to make money.
To maximize the amount of money a business or enterprise can bring in, a
business has to... stay in business.
What follows from that is that the business has to be structured in a way that's
resilient to adversity, but also allows for increasing its potential in several
ways:
1. Sales/ Marketing
2. Production/ Services
3. Logistics/ Infrastructure
4. HR/ Legal
The important part about these is, they're all departments that are run by
**humans**.
Hiring an employee is no different from signing a service agreement. Your
employee agrees to perform certain actions for a certain amount of compensation.
It is an adverse relationship, because while the owner of the business wants to
get the most out of the employee for the given price, the employee wants to get
the most compensation for the least amount of work.
And this is an important point. Fundamentally, an employer is on equal grounds
with the employee at every point - the business can lay them off, and the
employee can quit.
But... the employer can _actually_ put themselves at a severe disadvantage, if
they neglect the real value skilled people can bring to their business.
1. Institutional knowledge{{<sidenote>}}I.e. all the things about your business that only they know, such as the way your systems interact with each-other, side-effects certain actions may have, etc.{{</sidenote>}}
2. A practical understanding of the systems and processes in place{{<sidenote>}}The ability to rapidly solve issues as they appear, while keeping the big picture in mind, so as not to break anything.{{</sidenote>}}.
3. The mood and culture in the company that facilitates teamwork and collaboration{{<sidenote>}}Seeing people leave makes their friends sad, and that decreases their trust and emotional investment in the workplace{{</sidenote>}}.
If the business doesn't understand just how valuable these contributions are,
and doesn't compensate employees for their real contributions... churn starts.
Employees start realizing that their presence isn't appreciated, and that their
contributions will be valued more highly elsewhere.
In my experience, it's rare that an employee quits because of a specific event
at work. In most cases, it's the culture, attitude and mindset enforced top-down
by the business owner/ CEO/ management.
And fundamentally, this is an incentives problem. People work better when they
see that their efforts are being rewarded.
> _"Why should I work hard, performing duties and tasks that would easily warrant
> $40+/h,<br />
> when I'm only being paid $12/h?"_
So then when employees are leaving, or being fired for bringing up issues{{<sidenote>}}Yes, there is a juicy story there, and the company in question isn't in my resumé because of that.{{</sidenote>}}, this not only creates an exodus (because employees
start questioning the value and stability of their employment), but also strips
the businses of established, knowledgable, skilled talent.
Which means new employees must be trained and brought up to speed. This is a
significant expense to the business, often far outweighing the cost of
compromising with existing employees, and giving them better working conditions.
If you're a micro-small business owner, you don't have the leverage, the power
to compensate talent that bigger businesses have. You're not in a position to
ask for a laundry list of skills that would put your applicants in the top 10%.
As an applicant{{<sidenote>}}I am actively searching for a job as of this writing.{{</sidenote>}}, when I see a
laundry list of very in-demand and valued skills for a position, such
as...{{<sidenote>}}This is pulled from the jobs page of a company I worked for.{{</sidenote>}}
> - Be a top-rated CRM specialist
> - Responsible for:
> - managing customer data
> - automating marketing campaigns
> - creating effective sales funnels
> - streamlining the CRM management process
> - ensure seamless automations
> - optimizing funnels
> - designing engaging landing pages
> - automating personalized email campaigns
>
> [Follows a list of very undescriptive and vague "benefits", such as
> 'opportunities for rate increases', 'rates based on project requirements',
> 'we're here to support you' and such.]
Give me a guess... how much do you think this company is willing to pay for this
kind of skill-set?
For reference, Glassdoor gives a bracket of $59k to $100k. That translates to
about $28/h.
The real pay for this position is about $10-11/h, not accounting for the 'other
duties as assigned' trick that American companies try to get away with.
So this person may end up not only managing the CRM, but also working on
documentation, unrelated automations, project management, and a number of other
things that are outside of their skillset.
Of course, the position is paid hourly under the pretense of the employee (by
IRS standards) being a contractor. And so the business doesn't offer any
insurance, worker's comp, PTO, or anything of the sort, because it's preying on
international hires being 'invisible' in the system, and for whom these
conditions are better than what they can get locally.
Many of them are amazing people. Kind, skilled, enthusiastic and very willing to
learn, because as it turns out - life is hard when you're broke, so you do what
you have to do.
And the same applies to American workers, too. Ironically, they have much fewer
protections than the rest of the world has, and so they're getting exploited and
manipulated by their condition to settle for less than their labor is truly
worth.
With the rising wave of awareness about these topics (as we see on Reddit, BlueSky,
Mastodon), businesses that want to find a point of stability from which they can
grow have to start accounting for the human element.
Most of us are not happy with human-on-human violence, or violence in general.
And violence isn't limited to fists, knives or guns. It's also the lack of
respect for each-other as members of the same species.
The work an employee performs is what's on sale. Trying to get a better price is
okay in my mind, but there are limits one shouldn't cross, such as compensation
not meeting the needs of the employee.
Google can afford to take their employees all the way
through <span class="underline">[the stages of Maslow's hierarchy of needs.](https://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs#Stages)</span>
Small businesses often can't, but they should still strive to, because not doing
so automatically undermines workplace stability, and increases costs.
It's not rare to see one skilled, established employee be let go, only to be
replaced by two or three new hires, who not only cost more, but don't have the
_institutional knowledge_ necessary for them to be effective and efficient at the
job.
So then, what can a small business do?
Focus on maintaining few highly skilled employees who are _happy_ and _fulfilled_
working for you. You can hire cheap and help newbies grow, but even then,
compensation has to follow the market, if you want to keep them long-term.
Because if you don't, all those skills and knowledge go to your competition.
If you're a CEO/owner, and you're looking for help to get the daily stuff out of
the way (communication, scheduling, task management, team coordination), get a
good assistant. They're pricy, but you really get what you pay for.{{<sidenote>}}An
assistant with some technical skills can often handle the entire back-end of your business on their own (fulfillment and deliverables excluded), and as your business grows, they'll be the perfect person to step into the COO position.{{</sidenote>}}
TL;DR: Be kind, and think a little bit about what each of your employees _needs_.
Creating internal tension in your business, between management and employees is
the perfect way to ruin long-term prospects, both for the business, and the
people it consists of.
Thanks for reading my venty rant.
<span class="underline">[Join the FSF!](https://www.fsf.org/)</span>
### On Avoidance in Business <span class="tag"><span class="psychology">psychology</span><span class="riskmanagement">riskmanagement</span><span class="avoidance">avoidance</span><span class="fear">fear</span><span class="_business">@business</span></span> {#avoidance-in-business}
I have worked with a wide variety of businesses. I feel like that puts me in a reasonably good position to comment on one of the most frequent issues small businesses encounter.
<!--more-->
Unlike what some might claim, it's not a lack of vision, or a lack of SOPs and KPIs.
**The core problem of running a business is execution.**
Now, it might seem simple: Observe, Orient, Decide, Act.
Yet time and time again I have seen people fail at the final step. It sticks out like a sore thumb, and for good reason.
Regardless of the planning, vision, awareness, processes or culture you introduce into a business - no matter how great they are - **it is impossible to succeed if the execution fails.**
And there are many reasons it can fail, for example:
- tech issues,
- team coordination,
- lack of awareness,
- avoidance,
- inconsistency,
- emergencies...
The list can get quite long.
Most of these can be accounted for, and addressed before they happen. So, not really an issue in the first place. Tech can be set up, redundancies made, schedules adjusted.
Yet at the end of the day, all those are things that have to be _executed_. Someone has to get up and do them.
This isn't a problem in a large enough business that can hire more hands or outsource parts of their projects.
But **when it comes to small teams, or one-man operations, execution is what truly determines success.**
You can plan, envision, coordinate, manage and lead... but someone has to pull the trigger.
And that's uncomfortable, especially in positions where you have to sell your product to people you don't know. Anxiety kicks in...
- _"what if I don't get the sale?"_
- _"what if they don't like me?_
- _"what if I mess up?"_
You get the idea. But it can get worse than that.
**_"If I don't get the sale, my business dies."_**
This is dangerous not so much because it affects the sales process, and the interactions you have with your clients.
**This fear can be so great that you end up avoiding selling in the first place.**
Why? Because it's an existential dread about your livelihood. It's something we, being human, are uncomfortable with, and instinctively avoid. Even going so far as to shut it out of awareness, and unconsciously evading it whenever it comes up.
1. Goal: _"I must sell something, now now now!"_
2. Query: _"What's the best way to sell?"_
3. Answer: _"I'll develop a process that gets me sales with as little discomfort as possible!"_
4. **Correct answer:** _"I'll call|email|contact as many people as possible before doing anything else until I have money in the bank."_
This is how avoidance works. It's not invisible, exactly, but it's something that permeates the decision-making process and perverts incentives in an effort to avoid the scary and uncomfortable parts of life.
This same process applies to every part of life, of course.
One of the wisdoms I have found in life is the very short statement:
> [Choronzon](https://en.wikipedia.org/wiki/Choronzon) is the process by which means to ends become ends in themselves.
The only solution to this is to accept how things really are. Yes, things can get scary, they can get overwhelming and difficult.
Yet at the end of the day, those are feelings you have - they don't always reflect reality accurately. Nor should they keep you from taking the actions that you _know_ are correct.
Falling to dispersion, getting lost in the weeds, and giving up agency are clear marks of cowardice in the face of reality.
One could say, in the face of God.
Reality can be challenging. Yet each challenge can be overcome, in one way or another. Some through effortful action, others through acceptance; whether by meditation, prayer, contemplation or other means.
Here is a Zen solution that I enjoy:
- Sit down, with your spine straight.
- Count your breaths up to 10. You can count both inhalations and exhalations to start with, and once you're used to it, you can count only full breath cycles.
- Once you reach 10, start at 1 again.
- If you lose your count, start at 1 again.
- Sit for a short time to start with.
- Your mind should NOT wander from your breath. If you find yourself daydreaming, or distracted by feelings, memories, thoughts: _gently_ guide your attention back to your breath.
- This is not a race. Simply let your mind rest upon your breath, and do nothing else as you sit.
This is called [susokukan](https://www.themathesontrust.org/library/susokukan-zen-counting).
It's an excellent way to start your day, or to take a break between tasks to recover your mental energy.
In any case. I hope this has been helpful.
Thanks!
<span class="underline">[Join the FSF.](https://my.fsf.org/join)</span>
### [Happy Holidays!] On posting lists for self-promotion <span class="tag"><span class="badmarketing">badmarketing</span><span class="linkedin">linkedin</span><span class="_business">@business</span></span> {#lists-self-promotion}
Recently I have been talked into signing up for LinkedIn by a friend. I found myself faced with a wall of blatant self-promotion.
<!--more-->
And I can't help but wonder...
Who even reads these?
It feels very much like someone read a marketing 101 blog.
"Hey lists are a thing people like, just find 10 things that might be useful and post it on social media!"
And then we're all flooded by posts that add nothing to the conversation, with no explanation of what the listed things do differently, what their individual advantages are, what they cost, their licensing, and so on.
I really don't see the purpose of posting these short lists of things that exist outside of hunting for clicks.
It doesn't even help you build authority either. I've seen countless people post these under their own name... only to find the exact same list of '10 tools for taking notes' in 5 seconds on google.
Guess which came first?
Of course, the problem isn't with the people doing this. It's only natural to seek popularity using whatever tools are available, and it's quite apparent that a lot of people do in fact enjoy these lists - at least gauging by the number of people liking these threads.
The real issue is with the systems that social media use. These are systems that rate things by how many interactions they have. With the option to simply 'click' and give a post with no real value, no real purpose, a small boost in its reach, this becomes dangerous.
Well thought out and insightful messages get drowned out in the noise.
The Feed™ becomes a hell-scape of low-effort "content", rather than a place of discovery and wonder. A serious discussion cannot take place when the very platforms it _should_ take place on are against it.
There is also the rampant self-interest that social media make so apparent. If your livelihood depends on being popular, then naturally you'll want to be doing what attracts the most engagement, because that is exactly what these platforms promote. And if it's low effort, all the better!
Anyway.
Happy Holidays!
[Join the FSF.](https://my.fsf.org/join)
### Realistic deadlines <span class="tag"><span class="projectmanagement">projectmanagement</span><span class="work">work</span><span class="_business">@business</span></span> {#realistic-deadlines}
Recently a wrote an after-action report on a project that failed to materialize for a number of reasons. The details are irrelevant - whether it worked or not would be an afterthought given its consequences in other places.
<!--more-->
One of the key skills of a great project manager is to set realistic timelines. If this imaginary PM sets them badly, it is very easy to see how this can rapidly snowball.
Suppose you have two projects, both happening in parallel, and a delay of one day - let's say something broke and requires fixing.
It means you'll only spend one day catching up on the project that was delayed, but also you'll also incur an additional day's delay on the other project, because you were busy cleaning up the mess.
That's a two day delay, from a single project's issue.
Now, if you have multiple projects, this snowballs to the point where each additional project carries its own penalty in the same way.
Imagine if a company has 10 projects they are working on, and someone gets sick for a few (let's say 3) days. If there is little capacity for someone else to pick up the slack, that's...
1. A three day delay on the first project.
2. A six day delay on the second project.
3. A nine day delay on the third project.
4. A twelve day delay on the fourth project.
5. A fifteen day delay on the fifth project, and so on.
To keep things moving, it is not at all necessary to 'speed things up' or 'crunch' or other inhumane things. The simple, natural and most Zen solution is to _take these delays into account._
For each additional project that you take, add a few days time to the deadlines of **all** projects.
So that if someone is sick and out, that's not a problem. They can come back when they're all good and ready, and everything is still perfectly on time.
If you add a week's time for each additional project you're working on, you're easily safe, on time, and with no additional issues. And what I mean here is, for EVERY project add (number-of-projects x 1week) on top of the expected timeline to completion.
Of course, this can create issues when you sell to customers that want the shiny thing 'now now now,' but if they're flush with money... hey we have time to spare on additional work for a pretty penny too!
Work that we wouldn't be able to accept if we were promising tight deadlines and crunching to meet them.
A better opportunity comes along sooner than expected. Take it easy.
### Some thoughts on SaaS and business applications of Free Software <span class="tag"><span class="_business">@business</span><span class="saas">saas</span><span class="scam">scam</span><span class="vendorlock">vendorlock</span><span class="interoperability">interoperability</span></span> {#saas-business-foss}
SaaS is a pain in the rear for many reasons, which bother me a lot and which I can't help but vent about today.
<!--more-->
1. Vendor lock-in. If you use a SaaS solution, you have to keep on using it, with the cost consistently rising over time. Just the other day, Zapier announced they're multiplying the price of their plans. Had we (i.e. the company I work at) not looked for cheaper automation service vendors and migrated our automations, we would be unable to continue our normal course of business without unnecessarily increasing our expenses. Props to Zapier on giving early warning, but...
2. There is no standard. Migrating from Zapier to Make (formerly Integromat) was a hassle, and our IT guy had to go to great lengths to set things up, basically from scratch. We particularly had to contend with multiple services we use NOT having API options in Make, and had to rely on webhooks instead. Not impossible to work with, but certainly a hindrance to other tasks and projects that required attention at the same time.
3. Some features, which are _the exact same_ between two different services, carry different prices. The API calls between something like ClickUp and Trello, or Infinity, are not at all that different. They're not any more computationally expensive. But they cost different.
The point being, when we use SaaS, we're spending money on a solution to a problem that does not exist.
Of course, all of this is proprietary, and it is impossible to get any of these solutions to run on our own, company-owned server. Why should they want to share their source code, or even binaries, with us? It makes more sense to shear the sheep for years instead. I can't even count the number of times I asked vendors to let us run their software on our own servers, and gotten a 'no' back.
But then we have to ask ourselves... is it really a good idea to pay a monthly fee to a SaaS vendor, instead of running our own server (or, cheaper, a VPS) which can handle all that for cents on the dollar?
For the vast majority of API calls, a simple script will suffice - there are ample libraries to facilitate these things.
So then you can turn most automations into one-time expenses, by setting up a VPS (which is the only ongoing cost - and much cheaper than any SaaS will ever be, for these purposes).
Programmers who can set these things up are plentiful and easy to reach. They may not seem cheap, but compare spending $50/mth over a year ($600 total), and spending $200 one-time to set up some scripts, and $100 for the VPS. (And if something breaks, it's fixable in minutes 99% of the time.)
**No ongoing cost, full control over your data and processing, and NO vendor lock-in.** You can use the APIs any way you want (within contractual scope), and if something breaks - you can fix it because you KNOW what is going on in the first place.
Which is where Free Software comes in. It's literally free, and you're welcome to use it. All you have to do is supply the hardware (which for servers, is not at all costly).
A simple automation stack might look like this:
- VPS (I'm partial to EU vendors but if you're processing personal data, you will want to use one based in the US)
- Linux (Ubuntu for simplicity)
- A Python installation (You can also use Perl, Raku, Lisp, or any language - whatever is most comfortable.)
- A programmer that will write your scripts.
For APIs, you want to have an account with your services, and make sure to get an API key from them. Then your programmer (or you) plugs in the API key into their automation script, and everything is running.
For regular automations, which need to recur every once in a while, you can use [cron](https://man7.org/linux/man-pages/man8/cron.8.html) - it's a wonderful utility that ensures your scripts run when you want them to.
Webhooks are also easy - there is a wide variety of web server software built specifically for this purpose. One example is [Webhook](https://github.com/adnanh/webhook).
Fundamentally, the premise of SaaS solutions is to aid in efficiency, convenience, and collaboration - the latter being the most challenging to address with Free Software.
However, when we really look at the offering, it's poor and not really accomplishing most of what it claims. SaaS solutions are universally more expensive than a custom-built, purpose-made solution. Not only are they inefficient when it comes to migrating, but they're also subject to vendor lock-in, often relying on their _particular_ way of interfacing with the automation scripts, rather than giving actual, full access to what their servers can offer.
Because at the end of the day, **every SaaS solution is merely a front-end, an interface with which customers can avoid typing a few lines of code.** On its face, it seems simple and quick. But it's very expensive, and creates a reliance on a third party that not only creates security risks _(if you're running automations on customer data... that data is accessible by whatever service you're using)_, but is also much more expensive than doing it in-house.
Anyway. Rant over. [Join the FSF.](https://my.fsf.org/join)
### On the value of calling it a day (and how to get there) <span class="tag"><span class="psychology">psychology</span><span class="work">work</span><span class="projectmanagement">projectmanagement</span><span class="_business">@business</span></span> {#call-it-a-day}
There is little as refreshing as finishing all the work you have to do on a Friday early.
<!--more-->
There is little as relaxing as knowing - really knowing - that your next week is all scheduled, and you have time to just chill and vibe.
There is little as freeing as being able to confidently take some personal time and just be in the moment, without a care in the world.
Work?
Nah. It's the weekend. I'm off the clock.
It's great. It's been a long time since I've finished a week truly feeling like I'm done, like Monday is going to be a fresh start.
But it is!
And the biggest factor for it is catching up on all the overdue tasks we had in our project management platform, re-evaluating their importance, and then just killing them if they're no longer relevant.
If there's a task from 3 months ago that you never got to... chances are you can just cancel it. Nobody cares. Nobody remembers.
So it's fine.
And so, you can relax at the end of the day, because all the tasks for next week are lined up. There is no scrambling to find out what prep is needed... because the prep is planned too!
All with realistic deadlines, and accounting for delays. How amazingly good is that?
Now, on the technical side, here's the process that I used to got there:
1. Separate a bunch of org-mode files. I have:
1. Inbox (with 3 headings for org-capture: Inbox, Work Inbox, and Business Inbox),
2. Phil, for my personal tasks
3. Work, for work,
4. Business, for the business ideas I work on in my spare time,
5. Reminders, for all the simple dates and appointments I have,
6. Ideas, for what doesn't need any action yet, but may be useful in the future,
7. Dates, for all the recurring things, like birthdays, anniversaries, and all that.
8. Complete - for all the tasks that are done and don't belong in any of the above any more. This includes canceled tasks.
I put ALL new tasks/ projects/ ideas/ whatever in the inbox. Then I sort them out several times a day, to keep at inbox zero. The process is as simple as can be. I put my cursor on the task in the inbox file, I hit `C-c C-w`, and then choose from a list where I want that task to go, both in terms of which file, but also under which heading in that file it should be. It only takes a few keystrokes, and everything is sorted.
Then, things that I can do quickly, I do whenever an opportunity arises. I have emacs up on one of my three screens at all times.
I switch contexts based on what I'm doing. If I'm at work, I go through work.org. If I am working on side-projects, that's business.org. If I'm having dealing with things which only affect me individually, that's phil.org.
It's that simple. And any time I want to see what I need to do today, I just hit `C-c n a a` and I'm _set_.
```text
I use Doom Emacs with vim keys disabled. ~C-c n a a~ opens the org-agenda view for the week.
```
It's a really fantastic, and very efficient system that I have not truly had a chance to explore before. It's a bit of a variation on the _Getting Things Done_ method. Looser, and I don't do a weekly review, because my lifestyle doesn't require it yet.
But the point is, I can see at a glance how much time I have, and how much I can dedicate to any particular thing. Which means that I can much more accurately schedule tasks and events, have enough time between them to rest and recover, _and_ still finish everything on time.
Combined with picking _one single task_ to complete every day, that nearly guarantees that I remain at least somewhat productive even on the worst of days.
Anyway. Excited rant over. It's the weekend!
## Videogames <span class="tag"><span class="_videogames">@videogames</span></span> {#videogames}
### My favorite Factorio mods <span class="tag"><span class="factorio">factorio</span><span class="mods">mods</span><span class="_videogames">@videogames</span></span> {#my-favorite-factorio-mods}
I've been meaning to make a list of Factorio mods that I've really liked, and write a little bit about them. While Factorio is a masterpiece in both game design and quality, there are many mods for it that make the game either more fun, entirely different, or plain ol' QoL.
<!--more-->
I know some dislike the idea of using mods that streamline the game, or consider some quality of life mods cheating - I don't. If you're following the tech tree, everything's okay, and saving time by giving yourself a bunch of belts is - in my view - very acceptable, considering that some processes can take a really long time.
#### Overhaul Mods {#factorio-mods-overhaul}
<!--list-separator-->
- Angel &amp; Bob (!Angels Mods, !Bobs Mods)
One of the most expansive mod packs available, A&amp;B expands production processes significantly.
- There are byproducts to nearly every production process.
- These byproducts can and sometimes need to be processed into materials used further down the production trees.
- Instead of pure ores, there are complex minerals to be mined - these can be refined into various ores.
- Unlocking new refining methods leads to gaining new ores from each mineral.
- Different minerals require different refining processes.
- Fluids got a complete overhaul - there are various types of oil, gases, and other fluids that require different types of processing.
- Water has multiple stages of purification, each with its own byproducts.
- New research, including lots of alien life processing (farming!).
- There is voiding options for excess fluids and items as needed.
- Protip: Leave _a lot_ of space between your various factories. As you unlock more sophisticated refining and processing chains, your factories will require more space.
<!--list-separator-->
- Krastorio 2 (Krastorio 2)
Another 'big' overhaul mod. This one is significantly easier, and much closer to vanilla. Very good for a starter overhaul, if you've finished Factorio and want something new.
- A lot of the recipes have been changed and made more complex.
- Byproducts are largely not an issue.
- New power options.
- New research.
- Ores have been largely left alone.
- TL;DR: It's chill, won't fry your brain.
#### Individual Mods {#factorio-mods-individual}
<!--list-separator-->
- Circuit Network
<!--list-separator-->
- Improved Combinator
Saves space - it's basically a container for multiple decider and arithmetic combinators. Really cool.
<!--list-separator-->
- Inventory Sensor
A combinator that reads the contents of vehicles and buildings it's placed next to.
<!--list-separator-->
- Pushbutton
Sends a signal of your choice for one game tick.
<!--list-separator-->
- Switch Button
Sends a signal of your choice when it's on.
<!--list-separator-->
- Circuit Network Signals
These add additional signals that you can use in your circuit network. They help remember what your signals stand for. Much easier to remember a check-mark than 'A'.
<!--list-separator-->
- AAI Signals
<!--list-separator-->
- Atilla's Signals Mod
<!--list-separator-->
- Programmable Speaker Sounds
Additional sounds you can play through the programmable speakers.
<!--list-separator-->
- C&amp;C RedAlert Sounds
<!--list-separator-->
- Info
<!--list-separator-->
- 418 Industries: Knowledge Base
Adds an in-game wiki (sorta) for storing important information about the base. Really useful for multiplayer.
<!--list-separator-->
- Ammo Alerts
This shows you a yellow alert (in the alert area on the bottom right) when a turret is close to running out of ammo.
<!--list-separator-->
- Better Alert Arrows
Just better looking arrows. I like to go into the settings and scale them up a bit. Sometimes I just don't notice them, so it helps a lot.
<!--list-separator-->
- Bottleneck Lite
Adds status lights to production buildings, so you can see if they're working, stalled, or out of ingredients.
<!--list-separator-->
- Clock
Adds a clock to the top left of the screen.
<!--list-separator-->
- ControlTech
Adds Smart Displays you can place down.
<!--list-separator-->
- Diggs
Adds a timer on top of your mining drills that shows how long it will take for the miner to deplete the ore under it.
<!--list-separator-->
- GUI Unifyer
Collects all the buttons various mods add into a pretty frame.
<!--list-separator-->
- Informatron
Lets mods add help pages into the game.
<!--list-separator-->
- Milestones
Keeps track of your progress and shows achievements.
<!--list-separator-->
- YARM - Resource Monitor
Shows a pretty table of all the resource patches, and their estimated time to depletion.
<!--list-separator-->
- Automatic Utilities
<!--list-separator-->
- Auto Deconstruct
Automatically marks mining drills for deconstruction when they have no more ores available. Really useful.
<!--list-separator-->
- Automatic Underground Pipe Connectors
Says what it does. If you have underground pipes that can connect with a single overground (regular, normal) pipe, it just places the pipe for you.
Really useful when setting up fluid processing, saves a lot of time.
<!--list-separator-->
- Calculator UI
Adds a calculator, so you don't have to leave Factorio.
<!--list-separator-->
- Chest Auto Sort
Automatically sorts the contents of a chest when you open it. It makes it much easier to find the items you're looking for when everything is in some kind of order.
<!--list-separator-->
- Fluids
<!--list-separator-->
- Fluid Must Flow
Adds massive pipes for when you need to push fluids across large distances in quantity.
<!--list-separator-->
- Flow Control
Adds pipes with set, static connections. This allows you to lay down straight
overground pipes next to each other without having them connect. Really nice for saving space.
<!--list-separator-->
- Flow Control for Bob's Logistics
As above, but adds compatibility for Bob's new types of pipes.
<!--list-separator-->
- Tools
<!--list-separator-->
- Wire Shortcuts X
Tap alt-w for circuit wires.
<!--list-separator-->
- Ultimate Research Queue
Prettier and more usable interface for science research.
<!--list-separator-->
- Inventory Repair
Uses repair packs from your inventory to fix items you have.
<!--list-separator-->
- Even Distribution
Lets you control-left-click-drag to place equal amounts of items into buildings. Shift-c automatically cleans your inventory of items that can be inserted into nearby buildings. Really useful.
<!--list-separator-->
- Editor Extensions
Lets you edit the map, give all items, etc. I like to use it for large-scale building projects, as well as moving factories around.
I'll accept it's cheating, but I'm not the kind that's willing to spend an hour moving a factory stack when I can just cut and paste it into place.
<!--list-separator-->
- Power
<!--list-separator-->
- Full Power Coverage Redux
Makes power poles supply area match their wire reach. Reduces the wire reach slightly, but prevents the ugly gaps that exist with vanilla power poles.
<!--list-separator-->
- Bots
<!--list-separator-->
- No Wall Repair
Keeps bots from repairing walls, so they don't die to biters as much.
<!--list-separator-->
- Fireproof Bots
Bots get 100% fire resistance. This is useful when biters are setting your base on fire, and bots die while trying to repair burning buildings.
<!--list-separator-->
- Dynamic Robot Queues
Helps your construction bots be more responsive.
<!--list-separator-->
- Constructron-Continued
Adds a spidertron that automatically moves and builds blueprints (ghosts) you put down. Requires logistic network.
Really helpful when you need to build a lot outside your static logistic network.
<!--list-separator-->
- Belts
<!--list-separator-->
- Double Speed Belts
Makes each tier of belt twice as fast to you can use splitters with full throughput.
<!--list-separator-->
- BeltRouter Lite
1. Shift-click an existing belt that you want to run somewhere.
2. Shift-right-click an existing belt that you want the first belt to connect to.
3. Belts are laid for you.
The mod is configurable in the settings. I find that by default it uses too many underground belts.
<!--list-separator-->
- Inserters
<!--list-separator-->
- Bob's Adjustable Inserters mod
I know some consider this cheating, but frankly it allows for much prettier and compact bases, so... yeah. It's excellend. Very recommended.
It lets your inserters pick up and place anywhere in a 3 tile radius around them, extending one tile further than long inserters.
<!--list-separator-->
- Factory Planning/ Design
<!--list-separator-->
- Task List
For tracking all the things that still need to be done. Really useful when the factory grows large, or in multiplayer.
<!--list-separator-->
- Recipe Book
Shows all the things about items: properties, how they're made, what they're used for.
<!--list-separator-->
- Rate Calculator
Select buildings and see what their max input/ output rates are.
<!--list-separator-->
- Mining Patch Planner
Automatically designs and places a blueprint for your mining patches. You can choose from several different layouts, pick what power poles or belts you want, etc.
<!--list-separator-->
- P.U.M.P.
Mining Patch Planner but for pumpjacks.
<!--list-separator-->
- Factory Search
Lets you search your factory for items, assemblers making items, assemblers consuming items, etc. Absolutely critical for large overhaul mods such as AngelBob.
<!--list-separator-->
- Factory Planner
Automatically calculates the recipes, requirements, and production chains for your factories. Really useful when you need a lot of a thing - saves time on maths.
<!--list-separator-->
- Factory Building
<!--list-separator-->
- Show Max Underground Distance
What it says. Helps with planning.
<!--list-separator-->
- Underground Indicators
Adds visual indicators for easier pipe alignment.
<!--list-separator-->
- Tapeline
Helps you measure distances.
<!--list-separator-->
- Power Grid Comb
Cleans up power wires.
<!--list-separator-->
- Pipe Visualizer
Shows the layout and fluids as an overlay.
<!--list-separator-->
- Pick It Up
When you pick up an inserter, you'll also pick up what it's holding. Prevents random items falling on the ground.
<!--list-separator-->
- Mouse-over Construction
Place blueprint, mouse over it, and it gets built. Saves a ton of time when getting furnace stacks up, since you don't have to be clicking anymore. Just make sure you have the items in your inventory.
<!--list-separator-->
- Laser Lines
Adds placeable lasers you can use to ensure alignment.
<!--list-separator-->
- Fill4Me
When you put down vehicles or turrets, it automatically places fuel and ammo into them from your inventory.
<!--list-separator-->
- Cursor Enhancements
Some changes here - the most important for me, and the reason I use this mod, is that when you run out of items in your inventory, it automatically changes your held item to a ghost of what you were placing.
Additionally, you can pick ghost items from the crafting menu, which lets you lay down ghosts even for items you have not made yet. Really cool.
<!--list-separator-->
- Copy Assembler Pipe Direction
In vanilla, when you copy-paste a recipe into an assembler, the pipe input direction isn't copied, so often you have to go back and rotate the assemblers manually.
This mod saves you that time, by rotating the assemblers automatically.
<!--list-separator-->
- Trains
<!--list-separator-->
- Cybersyn Combinator
Adds a combinator for Projcet Cybersyn that lets you set up the signals for your stations easier.
<!--list-separator-->
- Honk
Makes trains honk.
<!--list-separator-->
- Project Cybersyn
Automatically coordinates trains based on train station signals.
<!--list-separator-->
- Rail Signal Planner
Automatically places signals, configurable for nearly any spec.
<!--list-separator-->
- Stranded Train Fuel Logistics
Refuels trains with construction bots when they run out of fuel.
<!--list-separator-->
- Train Log
Keeps a record of all the trips trains have made, as well as their cargo.
<!--list-separator-->
- Train Mode Switcher
Lets you quickly click-and-drag over trains to switch them to automatic mode.
<!--list-separator-->
- Transportation/ Traversal/ Movement
<!--list-separator-->
- RitnTeleporter
Adds teleports to the game, very useful when crossing the factory takes minutes, instead of seconds.
<!--list-separator-->
- Squeak Through
Lets you walk between buildings.
<!--list-separator-->
- Tree Collision
Makes forests easier to traverse.
<!--list-separator-->
- User Interface
<!--list-separator-->
- Placeables
Shows an item picker window for all the buildable things in your inventory. Really useful for overhaul mods that introduce a lot of buildings.
<!--list-separator-->
- Orphan Finder With UI Button
Adds a toolbox button that highlights underground pipes and belts that don't have a counterpart.
<!--list-separator-->
- Weapons
<!--list-separator-->
- Ceisc's Maximum Range Projectiles
This lets you throw grenades at max range when your mouse cursor is outside the green range area. In vanilla Factorio, when you try to throw grenades like that, it just doesn't do anything, and this mod fixes that behavior.
<!--list-separator-->
- Combat Bot Booster
Combat bots no longer expire on a timer. Instead, they start with some ammo and they expire when the ammo runs out.
#### Aesthetic Mods {#factorio-mods-aesthetic}
<!--list-separator-->
- Lights
<!--list-separator-->
- BIG LIGHT
Increases the size of lights on train stations and other things.
<!--list-separator-->
- Brighter Lamps
What it says on the tin.
<!--list-separator-->
- Color Coding
Adds colored lamps and concrete.
<!--list-separator-->
- Inbuilt Lighting
Makes power poles act like small lamps.
<!--list-separator-->
- Inlaid Lamps Extended
Adds lamps that can sit _in_ the floor, so you can walk over them.
<!--list-separator-->
- Larger Lamps
Adds bigger, brighter lamps.
<!--list-separator-->
- Lightorio
Adds a glow to some buildings, helping visibility at night.
<!--list-separator-->
- Nicer Fuel Glow but it's 1.1
Adds a glow to burners. Pretty.
<!--list-separator-->
- Realistic Heat Glow
Prettier heat pipes.
<!--list-separator-->
- New Art, Reskins, Adjustments
<!--list-separator-->
- Artisanal Reskins: Angel's Mods and Artisanal Reskins: Bob's Mods
Not much to say, these change the way AngelBob looks, making some items easier to see, and upgrades the overall fidelity.
<!--list-separator-->
- Automatic Train Painter and Automatic Station Painter Continued
Automatically changes the colors of the trains and the stations they visit based on the train's contents. Just makes the game prettier and more interesting to look at.
<!--list-separator-->
- Black Rubber Belts
Makes the belts nicer, in my view.
<!--list-separator-->
- Fluid Wagon Color Mask
Changes the colors of fluid wagons depending on their contents.
<!--list-separator-->
- Labcore
Makes the labs less boring.
<!--list-separator-->
- Science pack glow
Science packs glow.
<!--list-separator-->
- Thicker Power Wires
Makes power and circuit wires more visible by making them thicker.
<!--list-separator-->
- Tinted Ghosts
Change the tint of ghost items for better visibility.
<!--list-separator-->
- Signs, Displays
<!--list-separator-->
- Holographic Signs
Pretty signs you can configure.
<!--list-separator-->
- Nixie Tubes
Aesthetic tubes for displaying circuit network signals.
<!--list-separator-->
- Text Plates
Create pretty text labels for your factory.
<!--list-separator-->
- Tiles
<!--list-separator-->
- Cleaned Concrete
Removes ground decorations when placing concrete down. Just makes the factory look cleaner.
<!--list-separator-->
- Dectorio
Lots of things to make your factory look pretty.
Also adds a new tab to your crafting menu for them, to keep things tidy.
<!--list-separator-->
- Even More Text Plates
Adds more text plates, depends on the Text Plates mod.
<!--list-separator-->
- NiceFill
Makes the landfill match the surrounding tiles.
<!--list-separator-->
- Character
<!--list-separator-->
- Gear Girl Character
Imo has better animations than the awkward Factorio Engineer.
#### Summary {#factorio-mods-summary}
This is a more-or-less complete list of mods that I regularly play Factorio with. I _believe_ that it covers everything I might ever need to help the factory grow.
For most, this is likely to be entirely overkill. The purpose of the vast majority of these mods is to save time and help me focus more on design and process, instead of spending vast amounts of time placing individual inserters, or waiting for sufficient belts to be produced.
In any case! I may revisit this list in the future if I find something worth noting.
<span class="underline">[Join the FSF.](https://my.fsf.org/join)</span>
### Heaps of fun (Yakuza) <span class="tag"><span class="yakuza">yakuza</span><span class="review">review</span><span class="_videogames">@videogames</span></span> {#games-yakuza}
I've been a bit sick over the past week. Not the 'rona as far as I can tell. Just a flu. Probably.
I spent most of that time playing _Yakuza Zero_, then _Kiwami_, and now I'm in the middle of playing through _Kiwami 2_.
<!--more-->
An observation that occurred to me is that the Yakuza games fit very neatly into Warren Spector's "one block" ideal. The areas are relatively small, realistically sized, and chock-full of content, interactable items, and a story that is very localized. TONS of localized content is present, which adds a lot of life and _flavor_ to Kamurocho (and the other areas the characters visit in the course of the games)
This leads to a very enjoyable pattern of go-fight-go-fight, with combat being rather frequent (and excellently executed).
And that's not even getting into the dozens of mini-games, and the side-quests (or, stories, as the game calls them) which explore and give some insight into the everyday lives of regular people in the crime-infested world the games portray.
Another thing that I've noted is that the Yakuza games have A LOT of Souls-like elements. The combat is snappy, rhythmic, and patterned in a way that punishes getting 'greedy'. It's really enjoyable, particularly since the difficulty balancing is very precise, and doesn't lead to complete blow-outs very often (I played the games on Normal - this may not be true on Hard).
Then there's the plot. It's consistent, has few to no plot holes (I didn't notice any myself, but I can imagine they exist), and goes into truly dark places, psychologically.
My only criticism is that at no point (well, we see this at ONE point at the beginning of Kiwami) do we see the main characters engage in violence against civilians. The story relies on the trope of a 'bad good guy.' Which isn't necessarily bad - but it does stick out like a sore thumb when you take a step back for an overview of what's happening.
Otherwise, I have nothing but good things to say about these games. The only other games I can say this about are _Metal Gear Solid 3: Snake Eater_, _Splinter Cell: Chaos Theory_, and _Deus Ex: Mankind Divided_. Off the top of my head, at least.
_Yakuza Kiwami 2_ is by far the best of the PC titles - the developers paid attention and introduced a number of quality of life changes that truly make it a joy to play.
[Join the FSF.](https://my.fsf.org/join)