oldschool
webmaster
make email
Sat Feb 21 14:57:33 CET 2026
doveadm pw -s SHA512-CRYPT
mkdir -p /var/mail/vhosts/theendofthe.universe/shack
maildirmake.dovecot /var/mail/vhosts/theendofthe.universe/shack
chown -R 5000:110 /var/mail/vhosts/theendofthe.universe/shack
sqlite3 /etc/mail/mail.sqlite 'insert into users (username, password) values ("shack@theendofthe.universe", "SHA512... ");'
doveadm pw -t "$(sudo sqlite3 /etc/mail/mail.sqlite 'select password from users where username="shack@theendofthe.universe";')"
echo testmail | mail shack@theendofthe.universe
DONE
CIA one-liner git
Fri Feb 20 19:08:24 CET 2026
The original command
git branch --merged | grep -v "\*\|master" | xargs -n 1 git branch -d
How it works:
git branch --merged — lists all local branches that have already been merged into the current branch
grep -v "\*\|master" — filters out the current branch (*) and master so you don’t delete either
xargs -n 1 git branch -d — deletes each remaining branch one at a time, safely (lowercase -d won’t touch unmerged branches)
The updated command
Since most projects now use main instead of master, you can update the command and exclude any other branches you frequently use:
git branch --merged origin/main | grep -vE "^\s*(\*|main|develop)" | xargs -n 1 git branch -d
Run this from main after a deployment and your branch list goes from 40 entries back down to a handful.
I keep this as a git alias so I don’t have to remember the syntax:
alias ciaclean='git branch --merged origin/main | grep -vE "^\s*(\*|main|develop)" | xargs -n 1 git branch -d'
Then in your repo just run:
ciaclean
Postkarten und Briefumschläge
Sun Feb 8 19:13:36 CET 2026
defaults
auth on
tls on
tls_starttls on
tls_trust_file /opt/local/etc/openssl/cert.pem
logfile ~/.msmtp.log
from %F
allow_from_override off
... funktioniert nicht. musste ein wrapper script bauen
sort a trillion lines
Sat Jan 17 17:37:38 CET 2026
There is a use case for sort that might be worth mentioning. If
someone needs to sort billions or trillion of lines of data, it can be
done with coreutils sort. The trick is to use —-temporary-dir and
potentially use ulimit to restrict the process memory. Might be worth
mentioning under sort as it’s a neat trick.
emacs diary
Sat Jan 17 17:25:05 CET 2026
You're probably missing the key point that when you write %%(...),
the part after the %% is an arbitrary lisp form, rather than one of a
limited set of options. Hence the answer is simply:
Copy
%%(and (diary-block ...) (diary-cyclic ...))
Some other examples of combining things:
Copy
%%(or (diary-float t 3 2) (diary-float t 3 4))
The 2nd and 4th Wednesday of each month. (Not a 14-day cycle)
%%(or (diary-float '(1 3 5 7 9 11) 4 3) (diary-float '(2 4 6 8 10 12) 2 3))
Monthly dates alternating between the 3rd Tuesday and the 3rd Thursday
of each month.
%%(my-diary-foo)
Completely custom...
grep for word, linenumber and 3 around
Wed Jan 7 13:48:05 CET 2026
grep -rnoP "(\b\w+\b\s+){0,3}subset(\s+\b\w+\b){0,3}" .
subset variable width font
Wed Jan 7 15:10:11 CET 2026
get the ttf files
woff2_compress Roboto-VariableFont_wdth,wght.ttf
create chars.txt
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
.,:;!?…()[]{}"'«»„“”‚‘’–—-
@#$%&*/+=<>|^~_\-
äöüÄÖÜß
àâæçéèêëîïôœùûÿ
ÀÂÆÇÉÈÊËÎÏÔŒÙÛŸ
áéíóúñü
ÁÉÍÓÚÑÜ
¡¿
åäöÅÄÖ
øæØÆ
pyftsubset-3.13 roboto-italic-vf.woff2 --text-file=chars.txt
--flavor=woff2 --output-file=roboto-italic-vf-subset.woff2
pyftsubset-3.13 roboto-vf.woff2 --text-file=chars.txt
--flavor=woff2 --output-file=roboto-vf-subset.woff2
done
svg logo ratio and size
Wed Jan 6 08:48:52 CET 2026
read the svg and put the viewbox values in the html (width height) and the css:
aspect-ratio: width / height;
emacs kbd macro
Sun Mar 17 21:46:55 CET 2024
to use C-g inside a kbd recording without quitting the recording, use
M-x keyboard-escape-quit
let it flow
Wed Jul 12 19:00:16 CEST 2023
so to fliesstext a region in emacs - select it and do M-^ and done.
check with curl
Wed Dec 20 19:34:49 CET 2023
For a problem like that, I suggest using “curl -i https://your-url” to
investigate why the response isn’t what you expect. There should be a
redirection HTTP code in the response and a Location: header to say
where to go to.
rails german case
Wed Dec 20 19:32:18 CET 2023
to disable rails downcasing perfectly good german translations from
your de.yml file: put this into
/config/initializers/active_record_overrides.rb :
module ActiveRecord class Base def
self.human_attribute_name(attribute, options = {})
I18n.t("activerecord.attributes.#{model_name.i18n_key}.#{attribute}",
**options, default: attribute.to_s) end end end
local iphone check
Fri Aug 08 14:51:59 CET 2020
By default jekyll serve doesn’t expose the site on the local network
(for security reasons), but you can open it to the local network using
the -H or --host flag. Use 0.0.0.0 to bind to the host’s local IP
address:
bundle exec jekyll serve --host 0.0.0.0 Now you can visit the site
from any machine on the local network at: http://192.168.x.x:4000/
If you’re developing on a Mac, then you can take advantage of
Bonjour/ZeroConf and use the Mac’s name rather then the ever-changing
local IP address. The Mac’s name is defined in System-Preferences >
Sharing > Computer-Name.
For example, if you’ve named your Mac “Eddy”, then you can access your
Jekyll site at http://Eddy.local:4000/