@silva.ph.bsky.social
Freelance Software Engineer based in Berlin Working with Web, Go, Linux, DevSecOps (also interested in OpenBSD, Plan 9) silva.ph
Redmine is so much more practical than Jira. Especially for issue tracking and it even allows cascading subtasks. The only major downside I see is the Wiki because editing is not in-place. Also post-configuring the Postgres tables was needed for me (utf8mb4) to allow Emojis in issue texts
09.07.2025 13:26 β π 0 π 0 π¬ 0 π 0Now that Let's Encrypt stopped their notification mails I just swapped nginx for Caddy which automagically handles certificates
30.06.2025 12:31 β π 0 π 0 π¬ 0 π 0IMHO the best tool to organize source installations on Linux: GNU Stow (unless using an immutable distribution like NixOS...)
07.05.2025 08:39 β π 0 π 0 π¬ 0 π 0Running nginx with HTTP/3 is quite adventurous. I appreciate though that (the required) compiling from source allows me to use LibreSSL
07.05.2025 08:29 β π 0 π 0 π¬ 0 π 0I always create a function Main() (err error) that I call from main. Mostly out of convenience though to be able to just write "return" for error checking
21.04.2025 12:58 β π 0 π 0 π¬ 0 π 0Vulnerability websites with logos seem to have fully superseded CVE numbers by now
16.04.2025 16:26 β π 0 π 0 π¬ 0 π 0I don't like the clunkiness of Dependency Injection but every time I'm surprised how test coverage increases almost by itself
28.03.2025 08:37 β π 1 π 0 π¬ 0 π 0Underrated file system protocol: WebDAV
18.03.2025 07:03 β π 0 π 0 π¬ 0 π 0Self-hosting E-Mail has come a long way. That's my second attempt now, this time with Mox. A few months aren't really enough data points but at this point it's already more reliable than Protonmail
04.03.2025 14:16 β π 0 π 0 π¬ 0 π 0To create a systemd user service:
β’ service definition in /home/username/.config/systemd/user/
β’ using target default (multi-user won't work on boot)
β’ loginctl enable-linger username
β’ systemctl --user enable my.service
(Optionally systemctl --user daemon-reload with XDG_RUNTIME_DIR set)
I tried the Vault Secrets Operator recently and once the setup is done, it's really practical. Also automated secret rotation is quite something. #kubernetes #vault
11.02.2025 16:28 β π 0 π 0 π¬ 0 π 0Current versions of WebPageTest are quite practical. Apart from the usual performance insights it also has now carbon control and an accessibility check.
28.01.2025 10:51 β π 1 π 0 π¬ 0 π 0Google enforcing JS enabled browsers reminds me of a discussion I had 11 years ago on the PhantomJS mailing list asking whether it adheres to robots.txt.
The answer was no, also with the argument that it's not a bot and scriptable like a Browser.
I still find it quite an interesting perspective.
I'd also add regularly cleaning the nozzle (watch out, it's hot) before problems occur, just with Isopropyl alcohol and a paper towel. There are plenty of guides how to do this though.
14.01.2025 14:30 β π 0 π 0 π¬ 0 π 0I see, that's not ideal. (I somewhat liked the standardization effort of the Filesystem hierarchy though while it was current but I guess that's only a small bit of it.)
13.01.2025 19:19 β π 0 π 0 π¬ 0 π 0I cannot believe the Linux Standard Base has been abandoned. (Paradoxically Linux on the Desktop is as popular as never before.) #linux
13.01.2025 19:07 β π 0 π 0 π¬ 1 π 0Using runtime.LockOSThread() is a nice trick to prevent unpredictable results when using #cgo or doing syscalls in #golang
08.01.2025 11:22 β π 2 π 0 π¬ 0 π 0How important is Rowhammer in the real world? Seems it'll be a bit more certain next year #38c3 flippyr.am
31.12.2024 13:25 β π 2 π 0 π¬ 0 π 0Happy holidays!
24.12.2024 09:23 β π 1 π 0 π¬ 0 π 0Go example that imports a library with a vulnerable accept header parser function from 2020. It uses the reflect package to call it. Running govulncheck in binary mode results in finding 2 vulnerabilities. Source code: ``` $ cat main.go package main import ( "golang.org/x/text/language" // v0.3.4 (2020) "reflect" ) func Main() { language.ParseAcceptLanguage("00-t-0o") } func main() { reflect.ValueOf(Main).Call([]reflect.Value{}) } ```
Again the same Go example calling a vulnerable function using reflect. This time govulncheck is called in source mode though, reporting: No vulnerabilities found. Your code is affected by 0 vulnerabilities. This scan also found 2 vulnerabilities in packages you import and 0 vulnerabilities in modules you require, but your code doesn't appear to call these vulnerabilities.
govulncheck also has a binary mode to increase coverage for reflect based call chains #devsecops #golang
18.12.2024 16:26 β π 4 π 1 π¬ 0 π 0log_format no_ip_ua '$time_local "$request" $status $body_bytes_sent "$http_referer"'; access_log /var/log/nginx/access.log no_ip_ua;
Logging in nginx without IP and User-Agent when feasible
13.12.2024 07:46 β π 0 π 0 π¬ 0 π 0Keeping dependency count low and sticking to high quality dependencies at the beginning of a project has multiplier effects. Upgrading to recent versions is feasible when done consistently. Thus keeping security in check and preventing package archeology during migrations #devsecops #shiftleft
06.12.2024 10:32 β π 2 π 0 π¬ 0 π 0Microservices all the way π I'm playing around with Next at the moment but I cannot decide yet. If anything more complex is needed Backend-wise, I rather put that into a separate service though
03.12.2024 19:59 β π 2 π 0 π¬ 0 π 0My favorite hosters are actually Hetzner and Scaleway. For instance Scaleway feels very round and I'm impressed that they use resource efficient adiabatic cooling in PAR2 which reduces water usage
02.12.2024 09:21 β π 6 π 0 π¬ 1 π 0Something random like UUID is definitely an advantage security-wise, e.g. to prevent enumeration attacks (definitely need to look into ULID, first time I hear about them)
28.11.2024 17:36 β π 2 π 0 π¬ 1 π 0I like just telling that "a password reset mail was sent to user@example.com" either way. Not disclosing whether that was actually successful. So legit users still have a reasonable UX and may even realize if they entered the wrong mail
Also it's possible to suggest more help (faq/contact)
Looking into 2FA for SSH with libpam-google-authenticator on a Debian server. What I notice:
β’ one factor must be password auth otherwise ineffective (3FA with Key Auth)
β’ β οΈ will lock out root by default
β’ Ansible use tricky
Feels robust so far but planning for lock out scenario seems essential
Thanks! π
21.11.2024 10:29 β π 1 π 0 π¬ 0 π 0Hi Andrei, would be awesome to get added as well!
21.11.2024 08:06 β π 1 π 0 π¬ 1 π 0