Welp, I Paid For That

Home loan balance: 3 cents. Not bad for just-over-40 years old. Thanks to everyone in my life that’s helped, most especially borysSNORC. 🥰 [Read More]

Charts.yaml Missing While Deploying Helm Release Through Terraform

If you see this nonsense: helm_release.example: Modifying... [id=example] ╷ │ Error: Chart.yaml file is missing │ │ with helm_release.example, │ on example.tf line 28, in resource "helm_release" "example": │ 28: resource "helm_release" "example" { │ You’ve probably got a folder with the same name as the release, ie, called example - because helm can’t deal with a folder the same dir as the release name. Seriously. [Read More]

Model Collapse and the increasing value of "pre-AI" data

There’s a curious callout at the end of this article talking about “model collapse” where an increase in non-human created data being used as sources creates problems on the outputs… Although there is no agreed-upon way to track LLM-generated content at scale, one proposed option is community-wide coordination among organizations involved in LLM creation to share information and determine the origins of data. In the meantime, to avoid being affected by model collapse, companies should try to preserve access to pre-2023 bulk stores of data. [Read More]

Installing Python packages From subdirectories with Branches

With pip Python’s official spec is in PEP508. pip install 'git+https://github.com/yaleman/kanidm.git@mycoolbranch#subdirectory=pykanidm' With poetry Poetry documents it here. kanidm = { git = "git@github.com:yaleman/kanidm.git", branch = "mycoolbranch", subdirectory = "pykanidm" } Or slightly more easy to read: [tool.poetry.dependencies.kanidm] git = "git@github.com:yaleman/kanidm.git" branch = "mycoolbranch" subdirectory = "pykanidm" [Read More]

Removing Kubernetes namespaces stuck in 'Terminating'

Here’s a handy set of commands for removing namespaces which are stuck in “Terminating” status for whatever reason. for ns in $(kubectl get ns --field-selector status.phase=Terminating -o jsonpath='{.items[*].metadata.name}') do kubectl get ns $ns -ojson | \ jq '.spec.finalizers = []' | \ kubectl replace --raw "/api/v1/namespaces/$ns/finalize" -f - done for ns in $(kubectl get ns --field-selector status.phase=Terminating -o jsonpath='{.items[*].metadata.name}') do kubectl get ns $ns -ojson | \ jq '.metadata.finalizers = []' | \ kubectl replace --raw "/api/v1/namespaces/$ns/finalize" -f - done It should go without saying that just yolo’ing code off the internet into your k8s environment is a bad idea, but this worked for me when trying to excise a stuck namespace. [Read More]

Bluetooth Scanner With ESPHome and an ESP32

This is a super-simple one, but took some searching to find it. Add the following config to an ESPHome device and deploy it, and it’ll spam regularly in the logs every BLE device it sees. You need an ESP32 (because they have bluetooh) and it uses the esp32_ble_tracker module. esp32_ble_tracker: text_sensor: - platform: ble_scanner name: "BLE Devices Scanner" Pretty simple, spams shit out of the logs with what’s going on every time it finds something. [Read More]

Fuzzy Power

So, I get a weird “buzzy” or “fuzzy” feeling when using things connected to a USB charger, unless they’re good quality grounded devices. And yes, this includes Apple’s devices, until I use the “extension cable” which is a three-prong grounded cable. There’s a small difference on those Apple cables - inside the “mating” connector are ground tabs which connect to the “lug” on the power brick. It’s a little hard to see, but if you squint you can tell the difference. [Read More]

Unable to Run Search While Using map Command in Splunk

Sometimes errors are just a little too confusing for me on a Monday. I was trying to run the following search: | makeresults 1 | eval cheese_id="12345", index="cheese" | map search="index=$index$ cheese_id=$cheese_id$ sourcetype=cheese_info" | table cheese_id, name, description And couldn’t work out why it was throwing the following error: warn : Unable to run query index=cheese cheese_id=12345 sourcetype=cheese_info | table cheese_id, name, description. Turns out that if I’d squinted a little harder at the example in the documentation, I’d have realised that I need to prepend searches with search. [Read More]

Writing Rust-style Python

This post by @kobzol highlights some good methodologies for writing Python in a more defensive manner. I learned that typing.assert_never allows one to inform their IDE/type checker about code which should be unreachable. Similarly, simpler Union typing and the existence of the pyserde package make for more powerful access to data - but I’ll have to test serde against the venerable pydantic which has been my go-to for the longest time. [Read More]