Archive

All published posts

2607 posts latest post 2026-09-13 simple view
Publishing rhythm
Aug 2026 | 55 posts
cockpit-file-sharing [1] by 45Drives [2] is a game-changer in its space. Excited to see how it evolves. A Cockpit plugin to easily manage samba and NFS file sharing. References: [1]: https://github.com/45Drives/cockpit-file-sharing [2]: https://github.com/45Drives
Using OPNsense with Tailscale · Tailscale Docs Set up a Tailscale VPN on OPNsense. Get secure communication across your devices without the need for complex configuration. Tailscale · tailscale.com [1] On reboot of my opnsense router it did not tailscale up. I’m not sure if a key expired or what happened. The fix was to first enable ssh, then ssh in and run tailscale up. enable ssh # [2] In opnsense System > Settings > Administration > Secure Shell > Enable Secure Shell tailscale up # [3] ssh <opnsense ip> 8 # to select shell tailscale up Follow the link to log in. disable ssh # [4] now uncheck secure shell to lock down the opnsense machine. In opnsense System > Settings > Administration > Secure Shell > Enable Secure Shell References: [1]: https://tailscale.com/kb/1097/install-opnsense [2]: #enable-ssh [3]: #tailscale-up [4]: #disable-ssh

I’ve been debugging a cloudflared tunnel issue in my homelab all day today, and getting really frustrated. My issue ended up being that it was running twice, once without the correct config file and another with it. I believe that cacheing may have compounded the issue.

In yesterday’s post I setup a cloudflared tunnel on my ubuntu server to expose applications running on the server to the internet. I’m setting up a new server and running cloudflared in its own vm.

setup cloudflared tunnel on ubuntu

Check that dns is pointing to the correct tunnel #

dig subdomain.example.com
traceroute subdomain.example.com

Check that the tunnel is running #

export CLOUDFLARED_TUNNEL_ID = "my-tunnel-id"

cloudflared tunnel list
cloudflared tunnel info $CLOUDFLARED_TUNNEL_ID

I run a cloudflared tunnel on my ubuntu server to expose applications running on the server to the internet. I’m setting up a new server and running cloudflared in its own vm.

Get the cloudflared binary #

sudo wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O /usr/local/bin/cloudflared

sudo chmod +x /usr/local/bin/cloudflared

#

Now setup the config directory. For the systemd service to work, the config file needs to be in /etc/cloudflared. I like to give my user rights to edit the config file without being sudo, we will do that here by creating a group cloudflared, add ourselves to the group, give ownership of /etc/cloudflared to the group, give group write access to the directory, and refresh groups.

sudo mkdir -p /etc/cloudflared
sudo groupadd cloudflared
sudo usermod -aG cloudflared $USER
sudo chown -R root:cloudflared /etc/cloudflared
sudo chmod g+w /etc/cloudflared
newgrp cloudflared

login #

Now we can log into the domain zone with cloudflared.

cloudflared tunnel login

This will give a url, follow it in a browser to log in.

cloudflared tunnel create <NAME>
mv ~/.cloudflared/cert.pem /etc/cloudflared/cert.pem
mv ~/.cloudflared/<tunnel-id>.json /etc/cloudflared/<tunnel-id>.json

config #

Now setup config. For the systemd service to work, the config file needs to be in /etc/cloudflared. The config that I have provided below will expose localhost:8000 to tester.example.com

export CLOUDFLARED_TUNNEL_ID=$(ls /etc/cloudflared/*.json | xargs -n 1 basename | sed 's/\.json$//')
mv ~/.cloudflared/${CLOUDFLARED_TUNNEL_ID}.json /etc/cloudflared/${CLOUDFLARED_TUNNEL_ID}.json
mv ~/.cloudflared/cert.pem /etc/cloudflared/cert.pem
echo "
tunnel: $(CLOUDFLARED_TUNNEL_ID)
credentials-file: /etc/cloudflared/$(CLOUDFLARED_TUNNEL_ID).json
ingress:
  - hostname: tester.example.com
    service: http://localhost:8000
  - service: 'http_status:404'
" >> /etc/cloudflared/config.yaml

dns #

Now to get a dns record for tester.example.com to point to the cloudflared tunnel.

cloudflared tunnel route dns $(CLOUDFLARED_TUNNEL_ID) tester.example.com

systemd #

Now install the systemd service.

sudo cloudflared service install
sudo systemctl status cloudflared.service
# if its not running
sudo systemctl start cloudflared.service
Fitting two hard drives and an SSD in a Dell OptiPlex 7010 SFF The Dell OptiPlex 7010 SFF officially only has room for one 2.5" hard drive internally, I fitted two 3.25" hard drives and a 2.5" SSD in one. willj.net [1] This guy fit 2 3.5" drives and an sdd in a dell 7050 SFF. It looks tight, and there it probably not much airflow running in it, but its an impressive project. References: [1]: https://willj.net/posts/fitting-two-hard-drives-and-an-ssd-in-a-dell-optiplex-7010-usff/
How To Fix An Office Chair Popping Noise? With Root Causes If you hear a popping noise from under your office chair when you move around or when you spin it, it’s time to repair your office chair. Read more. ToErgonomics · toergonomics.com [1] I tried this fix on my secretlabs chair, but unfortunately it did nothing for me. Mine ended up being an issue in the tilt mechanism and not the hydraulic piston. I greased the crap out of it, it can only help the longevity. I did notice that the two washers on either side of my bearing were quite worn in. References: [1]: https://toergonomics.com/office-chair-popping-noise/
Reddit reddit.com [1] This is definitely happening to my secretlabs chair. I did the fix this morning, its still not perfect, but it’s better now than it has been in a long time. Mine use to be so bad that it would pop and creak every time I sat down or moved the smallest bit. It’s now quiet through the mid range of its motion with the occasional pop when I sit down. References: [1]: https://www.reddit.com/r/secretlab/comments/s6ayop/if_anyone_else_is_having_sound_clicking_with/
[1]@changelog [1]) on X — 🗣️@dhh on Kubernetes' migration pitch: “Oh, we’re on Amazon? Flip the switch, George! Let’s move over to GCP.” Vs reality: "Flip the switch, George! We’ll start having the meetings about the meetings about how we can move out four years from now."" loading=“lazy”> Changelog (@changelog [2]) on X 🗣️@dhh on Kubernetes' migration pitch: “Oh, we’re on Amazon? Flip the switch, George! Let’s move over to GCP.” Vs reality: "Flip the switch, George! We’ll start having the meetin… X (formerly Twitter) · x.com switching cloud providers, theres no easy way. K8s was supposed to get us there, haha, the deep integrations with each vendor just keep locking us in References: [1]: https://x.com/changelog/status/1860697708463378497 [2]: https://changelog.com/podcast
Just starred nvtop [1] by Syllo [2]. It’s an exciting project with a lot to offer. GPU & Accelerator process monitoring for AMD, Apple, Huawei, Intel, NVIDIA and Qualcomm References: [1]: https://github.com/Syllo/nvtop [2]: https://github.com/Syllo
- This is a really amazing documentary of argocd. I got into k8s pretty late in the game. Which is pretty typical for me. As I went to use k8s for the first time i was using workflows, then cd. both of these tools had a level of polish that made them seem like they had been there forever and not quite as young as they actually are. I thought it was interesting how they focused on how the name must be two syllables or less, start with a or b, logo needs to be cutesy funny and recognizable seemed interesting, but puts them at the top of lists and makes them look like they’ve been there forever.
I’m impressed by kubectl-debug-ide [1] from devfile [2]. A kubectl plugin to debug Pods from an IDE rather than the CLI References: [1]: https://github.com/devfile/kubectl-debug-ide [2]: https://github.com/devfile
[1] A new completion plugin that I might give a try. Readme makes it sound like its built on some fast teck that allows them to handle a lot of items and run more frequently. The videos look like they don’t have some of the same issues cmp does for me. Maybe its my configuration, but I’m pretty sure it does not update when you backspace and things like that. References: [1]: /static/https://github.com/Saghen/blink.cmp
Wes Bos (@wesbos) on X CSS Anchors: flip a tooltip to the bottom when it goes offscreen X (formerly Twitter) · x.com [1] These css anchors are crazy that you can do this with html [2] and not a bunch of js, probably requiring a library or framework. [3] References: [1]: https://x.com/wesbos/status/1856724739336859713 [2]: /html/ [3]: https://x.com/i/status/1856724739336859713

I’ve been playing with 3d printing some items through the slant3d api. I’ve been pricing out different prints by running a slice request through their api.

make a project #

I’ve been using uv for project management. It’s been working well for quick projects like this while making it reproducible, I’m still all in on hatch for libraries.

mkdir slantproject
cd slantproject
uv init
uv venv
. ./.venv/bin/activate
uv add httpx rich python-dotenv

Get an api key #

You will need an api key from the slant api, which currently requires a google account and a credit card to create.

# .env
#  replace with your api key from https://api-fe-two.vercel.app/
SLANT_API_KEY=sl-**

slicing an stl with teh slant api #

Then you can run the python script to price out your print. I’m not exactly sure how this compares to an order, especially when you add in different materials.

from dotenv import load_dotenv
import httpx
import os

load_dotenv()

stl_url = ''
api_key = os.environ["SLANT_API_KEY"]

api = httpx.Client(base_url="https://www.slant3dapi.com/api/slicer")

res = httpx.post(
    "https://www.slant3dapi.com/api/slicer",
    json={"fileURL": stl_url},
    headers={"api-key": api_key, "Content-Type": "application/json"},
    timeout=60,
)


print(res.json())
External Link cdn.statically.io [1] Staically makes creating OG [2] images so easy, you can just pop this in your section with some og tags. <meta name="og:image" name="og:image" content="https://cdn.statically.io/og/{{post.title}}" /> <meta name="twitter:image" name="twitter:image" content="https://cdn.statically.io/og/{{post.title}}" /> <meta name="og:image:height" content="640" /> <meta name="og:image:width" content="1280" /> References: [1]: https://cdn.statically.io/og/statically%20makes%20OG%20images%20**easy** [2]: /og/
Check out terminal-tree [1] by willmcgugan [2]. It’s a well-crafted project with great potential. No description available. References: [1]: https://github.com/willmcgugan/terminal-tree [2]: https://github.com/willmcgugan
E576: Error while reading ShaDa file: there is an item at position 270498 that must not be there: Missing itemsare for internal uses only · Issue #6875 · neovim/neovim v0.2.0 Vim 8.0 works well. macOS Sierra 10.12.5 (16F73) iTerm2 v3.0.15 $TERM: screen-256color Actual behaviour When I start neovim by nvim, it prints an error message which is E576: Error while rea... GitHub · github.com [1] I hit an interesting error after updating my nvim plugins today. I’m sti not even quite sure what a ShaDa file is, but I found min in my nvim state directory, unlike this issue that mentions it being in share. The Error. Error while reading ShaDa file: The Fix mv ~/.local/state/nvim/shada/main.shada ~/.local/state/nvim/shada/main.shada.bak References: [1]: https://github.com/neovim/neovim/issues/6875
Production-ready Python Docker Containers with uv Starting with 0.3.0, Astral’s uv brought many great features, including support for cross-platform lock files uv.lock. Together with subsequent fixes, it has become Python’s finest workflow too... Hynek Schlawack · hynek.me [1] Hynek has a sick dockerfile setup for using uv in python projects. References: [1]: https://hynek.me/articles/docker-uv/
I’m really excited about IronCalc [1], an amazing project by ironcalc [2]. It’s worth exploring! Main engine of the IronCalc ecosystem References: [1]: https://github.com/ironcalc/IronCalc [2]: https://github.com/ironcalc
Proper handling of None in WHERE condition · Issue #109 · fastapi/sqlmodel First Check I added a very descriptive title to this issue. I used the GitHub search to find a similar issue and didn't find it. I searched the SQLModel documentation, with the integrated search. I... GitHub · github.com [1] SQLModel models ship with an is_, and is_not that you can use to compare to None without pesky linters complaining. This comment summed it up quite well. I believe this is concerned entirely with SQLAlchemy, not with SQLModel, and has to do with the required semantics to construct a BinaryExpression object. Hero.age == None evaluates to a BinaryExpression object which is eventually used to construct the SQL query that the SQLAlchemy engine issues to your DBMS. Hero.age is None evaluates to False immediately, and not a BinaryExpression, which short-circuits the query no matter the value of age in a row. From a cursory search, it does not seem that the is operator can be overridden in Python. This could help explain why the only possibility is by using the == operator, which can be overridden. so rather than using Team.heros == None we can use Team.seros.is_(None) which checks for...
If you’re into interesting projects, don’t miss out on blink.cmp [1], created by saghen [2]. Performant, batteries-included completion plugin for Neovim References: [1]: https://github.com/saghen/blink.cmp [2]: https://github.com/saghen
I’m really excited about cluster-api-k3s [1], an amazing project by k3s-io [2]. It’s worth exploring! Cluster API k3s References: [1]: https://github.com/k3s-io/cluster-api-k3s [2]: https://github.com/k3s-io
Gridfinity Generator gridfinity.perplexinglabs.com [1] Gridfinity generator uses open scad, so you can make rugged boxes, bins and base plates with form input. not fully custom fit to things, but you can custom size square bins, hole cut out sides and all. From what I can tell, no bento box either. so as long as what you are looking for is square this generator has you pretty well covered. I’m definitely using this for simple bins and rugged boxes. References: [1]: https://gridfinity.perplexinglabs.com/pr/gridfinity-extended/0/0
External Link printables.com [1] The BethDeck is a sick looking DIY steam deck competitor built on top of the framework 13" mainboard. No soldering needed, lt with all off the shelf parts. Controllers appear to be an off the shelf controller with the shell removed and plugged into a usb hub. [2] References: [1]: https://www.printables.com/model/1051411-framework-portable-handheld-case-beth-deck [2]: https://media.printables.com/media/prints/1051411/images/7965723_09c13004-58b9-4868-b078-e3a66073d740_3b514c55-bb6b-4448-a216-842d7de48955/thumbs/inside/1600x1200/jpg/pxl_20240910_005549812.webp
Document how to provide a negative number as an argument · fastapi typer · Discussion #798 First Check I added a very descriptive title here. I used the GitHub search to find a similar question and didn't find it. I searched the Typer documentation, with the integrated search. I already ... GitHub · github.com [1] Today I learned that you cannot pass negative integers as values to typer. in this case context_settings={"ignore_unknown_options": True} is required so that the - does not look like a flag. # script name: main.py import typer app = typer.Typer() @app.command() def failing(value: float): print(f"{value=}") @app.command( context_settings={"ignore_unknown_options": True} ) def working_good(value: float): print(f"{value=}") if __name__ == "__main__": app() References: [1]: https://github.com/fastapi/typer/discussions/798
rommapp [1] has done a fantastic job with romm [2]. Highly recommend taking a look. A beautiful, powerful, self-hosted [3] rom manager References: [1]: https://github.com/rommapp [2]: https://github.com/rommapp/romm [3]: /self-host/
I came across pz [1] from CZ-NIC [2], and it’s packed with great features and ideas. Easily handle day to day CLI operation via Python instead of regular Bash programs. 🇺🇦 #supporting References: [1]: https://github.com/CZ-NIC/pz [2]: https://github.com/CZ-NIC
Looking for inspiration? textual-demo [1] by Textualize [2]. Quick access to the Textual demo References: [1]: https://github.com/Textualize/textual-demo [2]: https://github.com/Textualize
I’m impressed by rocketnotes [1] from fynnfluegge [2]. AI-powered markdown editor - leverage vector embeddings and LLMs with your personal notes - 100% local or in the cloud References: [1]: https://github.com/fynnfluegge/rocketnotes [2]: https://github.com/fynnfluegge
faststream [1] by airtai [2] is a game-changer in its space. Excited to see how it evolves. FastStream is a powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ, NATS and Redis. References: [1]: https://github.com/airtai/faststream [2]: https://github.com/airtai
I came across faststream [1] from ag2ai [2], and it’s packed with great features and ideas. FastStream is a powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ, NATS and Redis. References: [1]: https://github.com/ag2ai/faststream [2]: https://github.com/ag2ai
The work on memos [1] by usememos [2]. An open-source, lightweight note-taking solution. The pain-less way to create your meaningful notes. Your Notes, Your Way. References: [1]: https://github.com/usememos/memos [2]: https://github.com/usememos
pypeaday [1] has done a fantastic job with learn-kestra [2]. Highly recommend taking a look. No description available. References: [1]: https://github.com/pypeaday [2]: https://github.com/pypeaday/learn-kestra
pypeaday [1] has done a fantastic job with learn-n8n [2]. Highly recommend taking a look. No description available. References: [1]: https://github.com/pypeaday [2]: https://github.com/pypeaday/learn-n8n
Aaron Francis (@aarondfrancis) on X 📣 We're excited to announce Mastering Postgres, a video course coming October 15th. @steve_tenuto and I started this business with dreams to improve the quality of database education. With the… X (formerly Twitter) · x.com [1] Aaron Francis is a database master, pumped for thsi dude and all that he is able to accomplish. References: [1]: https://x.com/aarondfrancis/status/1833533150674268469
[1]@willmcgugan [1]) on X — New Version of #Textual released! 😎🤓🦾 The demo has been updated. It's not quite finished, expect an update next release, but it is a lot of fun. Press C at any point to see the code powering that page (makes a great learning tool). Video 👇 https://t.co/p2ScsuL7GZ" [2] loading=“lazy”> Will McGugan (@willmcgugan [3]) on X New Version of #Textual released! 😎🤓🦾 The demo has been updated. It's not quite finished, expect an update next release, but it is a lot of fun. Press C at any point to see the code pow… X (formerly Twitter) · x.com This new demo of textual is wildly awesome, so many widgets and features being added into the main library. The themes and animations are on point and far surpass my expectations of a tui. References: [1]: https://x.com/willmcgugan/status/1849831271289012463 [2]: https://t.co/p2ScsuL7GZ%22 [3]: https://willmcgugan.github.io
I like joshmedeski’s [1] project sesh [2]. Smart session manager for the terminal References: [1]: https://github.com/joshmedeski [2]: https://github.com/joshmedeski/sesh
The work on menu [1] by nvzone [2]. Menu plugin for neovim ( supports nested menus ) made using volt References: [1]: https://github.com/nvzone/menu [2]: https://github.com/nvzone
Reddit reddit.com [1] ploopy just dropped a trackpad that runs qmk. This sounds so cool. I’m excited to see some videos on it. It would be sick to get this incorporated into a porta john running zmk, one bluetooth device to run all the peripherals. References: [1]: https://www.reddit.com/r/ErgoMechKeyboards/comments/1g5phts/not_a_split_keyboard_but_perhaps_a_companion_to/
Just starred windsurf.nvim [1] by Exafunction [2]. It’s an exciting project with a lot to offer. A native neovim extension for Codeium References: [1]: https://github.com/Exafunction/windsurf.nvim [2]: https://github.com/Exafunction
I’m really excited about codeium.nvim [1], an amazing project by Exafunction [2]. It’s worth exploring! A native neovim extension for Codeium References: [1]: https://github.com/Exafunction/codeium.nvim [2]: https://github.com/Exafunction
Pin versions of dependencies · Issue #2200 · Kozea/WeasyPrint Stack trace: pdf = HTML(file_obj=html, base_url='/').write_pdf() File "/service/venv/lib/python3.9/site-packages/weasyprint/__init__.py", line 252, in write_pdf self.render(font_config, counter_sty... GitHub · github.com [1] weazyprint was throwing me some errors, turns out that it’s currently not compatible with the latest pydyf package. my error TypeError: __init__() takes 1 positional argument but 3 were give I fixed it by locking in pydyf at 0.8.0 pydyf==0.8.0 References: [1]: https://github.com/Kozea/WeasyPrint/issues/2200