RSSAmplifier

Blog

Frog Wizard

If I don't write it down somewhere then I'll forget I did it. ...

frogwizard.bearblog.devRSS feed ↗10 posts

Latest posts

130 lines of bash to connect my headphones

BlueZ says "Connected: yes", no sound comes out. The bash script that escalates until Bluetooth headphones actually produce an audio sink.

Sign AWS OpenSearch requests from a custom Ansible module

A custom Ansible module that SigV4-signs AWS OpenSearch API calls to manage ISM policies idempotently.

Run an iron condor book with two slash commands

Daily workflow for selling SPX iron condors: one slash command to open, one to manage, and two CSVs that hold every cash event.

Driving an API-less blog from a Python CLI

This blog is a git repo of markdown files. I edit posts locally and push them live with a 440-line Python CLI ( bearblog.py , requests the only dependency). Bear Blog has no public API, so the CLI logs in with account credentials, keeps the session cookie, and drives the same dashboard form endpoints the web UI uses. python bearblog.py list # uid + title of every post python bearblog.py new…

Tenants are data, not code

Manage tenants as data, not code.

Put the math in code, the judgment in the spec

When you build an agentic tool, split the work by one question: does this step have a single correct output? If yes, write code. If no, write a spec the agent reads. I have a tool that picks and manages long-dated SPY call options. The split falls out cleanly. The numbers have one right answer, so they live in Python. One script fetches the chain and computes a delta for every contract; another…

MediaWiki uploads on Linode object storage with Extension:AWS

I run self-hosted MediaWiki and put uploads in Linode Object Storage instead of serving them from disk. Linode is cheaper than AWS for my stack, and the AWS extension works with Linode’s S3-compatible API. Extension:AWS configuration for Linode My LocalSettings.php files look something like this: wfLoadExtension( 'AWS' ); $wgAWSCredentials = [ 'key' => getenv( 'LINODE_OBJECT_STORAGE_ACCESS_KEY' )…

Streaming Log Metrics to Datadog StatsD with Python

I wanted log observability without paying for log retention. Datadog's free tier includes StatsD ingestion, so I wrote a script that uses a generator to tail the log file, parses out what I care about, and ships metrics without retaining anything. The example here counts response status codes from nginx access logs. Finding the Log File Docker writes container logs to a JSON file on the host. The…

Automating Social Media Posts with Trello

I wanted a way to queue up social media posts from my phone or the web and have them go out on a schedule without paying for anything. Trello is free and has an API, so I used a Trello board as a post queue. No need to build a front end. What It Does You create Trello cards on a designated list. The card title becomes your post text. Attach an image and the card description becomes its alt text.…

Claude AI Resume Generator

In 2014 I had no problem getting interviews with my resume. A minimalist thing — where I've been, a few bullet points, some technology name drops. That was all it took to get companies on the phone. In 2026 that same approach wasn't getting past ATS filters. It turns out you need to keyword match the job description so their AI-driven screening software will pass your resume along to a human. So I…