Ahhhhhhh, sweet sweet steroids
2026-02-07 04:28 pmI'm still spending a lot of time in bed, but I don't have to strategize about bathroom trips. One cane is sufficient.
Though I’ve followed Nadia’s Healthy Kitchen on Instagram for years, I’m not entirely certain I’ve ever actually made anything from her before. I am not vegan, gluten-free, or overly worried about sugar being in my baked goods, so I’m not entirely sure why I wanted to make these “healthy,” vegan, gluten-free, no-bake peanut butter and chocolate brownie batter bark bars, but I did! And now I’m here to tell you how difficult they were to make, and if they’re any good.
To start things off, let’s look at the video she posted that I saw:
You know, that didn’t look too hard! Here’s the recipe so you can follow along while we take a look at the ingredients list.
Despite having King Arthur’s measure-for-measure gluten-free flour in my pantry, this recipe did not call for 1-to-1 gluten-free flour, and instead calls for oat flour and ground almonds.
Now, you might notice a typo in the recipe in the measurements section. Nadia mentions ground almonds four times in the post leading up to the written recipe, and once in the instructions portion of the recipe, but makes the mistake of typing “ground oats” right below “oat flour” in the measurements. One of the comments on her recipe actually points this out, as well.
Moving on, I did not have oat flour or ground almonds, but I did have the cocoa powder, maple syrup, peanut butter, coconut oil, dark chocolate, and, of course, salt. So there I found myself in Kroger’s baking aisle buying Bob’s Red Mill’s Gluten-Free Oat Flour which is different than their Whole-Grain Oat Flour which is not gluten-free, and their Super-Fine Almond Flour (not their Natural Almond Flour, but that one is also gluten-free). I know the recipe says ground almonds, but I figured since the almond flour is basically just really finely ground almonds it’d be like the same thing, right?
Thankfully, this recipe is measured by weight, so this ended up being a very easy, one bowl recipe in which I just dumped all the ingredients in and measured by weight the entire time (except the 2 tbsp of coconut oil and 2 tbsp of peanut butter that are separate for the ganache). You literally just weigh it out and mix it all together, easy peasy!
After mixing the “dough” together (I don’t know if it’s technically considered a dough. What are the qualifications of a dough?), you just roll it out into a thin rectangle and pour the melted chocolate and peanut butter over top, then freeze it just long enough to solidify it enough to cut into bars.
I was genuinely surprised how quick and easy this recipe was, and it’s honestly not very many ingredients. Obviously the oat flour is something that not everyone just has on hand, but if you are gluten-free then maybe that’s more of a common household ingredient for you and this would actually be super convenient for you to whip up.
Okay, so it wasn’t hard and didn’t take very long, but it did it actually taste good? Well, honestly, I quite liked it! I wouldn’t be so bold as to claim that it tastes exactly like a fresh-baked, full-sugar, non-vegan brownie, but it definitely is rich and chocolatey, with some nice flavor from the peanut butter and a melt-in-your-mouth texture. One thing I really like about them is that it can feel like gluten-free treats are always super dry and crumbly, but these are pretty fudgy and not like crumbly sand.
Honestly they look just like they do in the video, and I’m happy I gave them a whirl. I wouldn’t say they’re life-changing, but if you have a gluten-free person in your life you want to whip up a treat for, these might be a really good option.
Final note, the chocolate ganache gets pretty melty at room temp, so I recommend keeping these bad boys in a container in the fridge.
Do you like using measure-for-measure gluten-free flour for your GF recipes, or do you prefer recipes that have flour alternatives like this one? Do you like the addition of the peanut butter, or do you wish this recipe were also nut-free (then I guess the almonds would be out, too)? Let me know in the comments, and have a great day!
-AMS
Locus List
2026-02-07 12:00 pmBoth Queen Demon and the Storyteller: A Tanith Lee Tribute anthology, made it on the Locus Recommended Reading List:
https://locusmag.com/2026/02/2025-recommended-reading/
with a lot of other excellent books and stories, including a new section for translated works.
You can also vote on the list for the Locus Awards. Anybody can vote here with an email address: https://poll.voting.locusmag.com/ though they have you fill out a demographic survey first with how many books you read per year, etc.
Of course a lot of great work did not end up on the list, like I was surprised not to see The Witch Roads and The Nameless Land duology by Kate Elliott, which I thought was excellent.
Books Received, January 31 — February 6
2026-02-07 09:15 am
With two books new to me, this just barely qualifies as books received. One SF, one fantasy and the SF novel is from a series.
Books Received, January 31 — February 6
Which of these look interesting?
A City Dreaming by Maurice Broaddus (June 2026)
16 (43.2%)
Lord of the Heights by Scarlett J. Thorne (July 2026
5 (13.5%)
Some other option (see comments)
1 (2.7%)
Cats!
28 (75.7%)
Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: d7afa745f32d0482c0e8f3da2c041d92a9b5f636 https://github.com/dreamwidth/dreamwidth/commit/d7afa745f32d0482c0e8f3da2c041d92a9b5f636 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)
Changed paths: M etc/docker/base/Dockerfile A etc/docker/base/build-static-legacy.sh
Log Message:
Preserve legacy build-static.sh for Ubuntu 18.04 base image
The 18.04 image still uses Compass/YUI which the new build-static.sh no longer supports. COPY a frozen copy of the old script into the image and overwrite the repo version before running the build. Can be removed when the 18.04 images are retired.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
Commit: b6ef69d4b76f3f3846f49fb62a81d3afc41bc598 https://github.com/dreamwidth/dreamwidth/commit/b6ef69d4b76f3f3846f49fb62a81d3afc41bc598 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)
Changed paths: M CLAUDE.md
Log Message:
Add never-amend rule to CLAUDE.md git workflow instructions
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
Compare: https://github.com/dreamwidth/dreamwidth/compare/8f82b8be8ff5...b6ef69d4b76f
To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications
Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: e26767b2e3f02ba7ff72fb279dcdf34cb894906a https://github.com/dreamwidth/dreamwidth/commit/e26767b2e3f02ba7ff72fb279dcdf34cb894906a Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)
Changed paths: M t/bin/initialize-db
Log Message:
Make initialize-db idempotent to avoid errors on rerun
Consolidate individual mysql calls into a single statement using CREATE USER/DATABASE IF NOT EXISTS, so the script can be run repeatedly without throwing errors on an already-initialized database.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
Commit: 8f82b8be8ff5db0e7e7b0ff8678a4680e7f394b7 https://github.com/dreamwidth/dreamwidth/commit/8f82b8be8ff5db0e7e7b0ff8678a4680e7f394b7 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)
Changed paths: M .devcontainer/Dockerfile M .devcontainer/setup.sh M bin/build-static.sh R config.rb M doc/dependencies-system M etc/docker/base22/Dockerfile R ext/dw-nonfree/config.rb
Log Message:
Replace Compass/YUI with Dart Sass/esbuild for static asset builds
- Switch SCSS compilation from deprecated Ruby Compass to Dart Sass (installed via npm), with proper --load-path for import resolution
- Replace YUI Compressor (Java) with esbuild (Node.js) for JS minification; CSS skips minification since Dart Sass already outputs compressed CSS
- Add --sass and --compress flags to build-static.sh for selective builds; asset sync (rsync) always runs
- Install Node.js 20 LTS via nodesource in devcontainer and base22 Dockerfiles; remove Ruby, Compass, default-jre, and YUI
- Symlink pre-built static assets in devcontainer setup instead of copying them
- Delete config.rb (Compass configuration) from both repos
- Leave Ubuntu 18.04 base image unchanged (being deprecated)
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
Compare: https://github.com/dreamwidth/dreamwidth/compare/4d2a30581c19...8f82b8be8ff5
To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications
Psalm 97:10
2026-02-07 12:00 pmBrought to you by BibleGateway.com. Copyright (C) . All Rights Reserved.
imbue
2026-02-07 12:00 amMerriam-Webster's Word of the Day for February 7, 2026 is:
imbue \im-BYOO\ verb
Imbue has two common meanings: "to permeate or influence as if by dyeing" and "to provide with something freely or naturally." In the second use it is usually used with with.
// A deep sense of history imbues the artist's work.
// The children were imbued with a passion for nature by their parents, both biologists.
Examples:
"Aged cachaça, like fine whiskey, derives its complexity from the barrels it's matured in. There are dozens of different Brazilian woods cachaça can be aged in, and each imbues the spirit with its distinct flavor, resulting in varieties that are more floral or herbal, nutty or woody, savory or spiced." — Rebekah Peppler, The New York Times, 5 Dec. 2025
Did you know?
Like its synonym infuse, imbue implies the introduction of one thing into another so as to affect it throughout. Someone's voice can be imbued with pride, for example, or a photograph might be imbued with a sense of melancholy. In the past imbue was also used synonymously with imbrue, an obscure word meaning "to drench or stain," but the two words are likely unrelated. Imbue comes from the Latin verb imbuere, meaning "to dye, wet, or moisten," while imbrue has been traced back through Anglo-French and Old French to the Latin verb bibere, meaning "to drink."
Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 4d2a30581c19aa0bbed317e1d87d05fa887026c5 https://github.com/dreamwidth/dreamwidth/commit/4d2a30581c19aa0bbed317e1d87d05fa887026c5 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)
Changed paths: M .devcontainer/Dockerfile M .devcontainer/setup.sh A .dockerignore
Log Message:
Pre-bake schema population and static build into devcontainer image
Move database schema setup, YUI compressor download, and static asset compilation from container creation time (setup.sh) into the Dockerfile so they're baked into the image. This makes container startup much faster since setup.sh now only runs idempotent catchup steps.
Static assets are built to /opt/dreamwidth-static/ in the image (since /workspaces/dreamwidth is overlaid by a bind mount at runtime) and fast-copied into place by setup.sh. Also fixes PERL5LIB to point to /opt/dreamwidth-extlib/lib/perl5 where cpm actually installs modules.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications
Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 3cd3d09906e985b511fcdfa0b98d2cc959e66424 https://github.com/dreamwidth/dreamwidth/commit/3cd3d09906e985b511fcdfa0b98d2cc959e66424 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)
Changed paths: M .devcontainer/devcontainer.json A .github/workflows/devcontainer-build.yml
Log Message:
Add CI workflow to pre-build devcontainer image on GHCR
Developers now pull ghcr.io/dreamwidth/devcontainer:latest instead of building the image from scratch. The workflow triggers on dependency file changes, nightly, and manual dispatch.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications
Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 58e398d69d2464e2f8fc5786c2312b1c2dac4d7b https://github.com/dreamwidth/dreamwidth/commit/58e398d69d2464e2f8fc5786c2312b1c2dac4d7b Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)
Changed paths: M .devcontainer/devcontainer.json
Log Message:
Remove redundant forwardPorts from devcontainer config
runArgs -p flags already handle port publishing for both VS Code and the devcontainer CLI, so forwardPorts is unnecessary.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications
Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 26cb4633dc9643410c171a560bbf82656c144252 https://github.com/dreamwidth/dreamwidth/commit/26cb4633dc9643410c171a560bbf82656c144252 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)
Changed paths: M .devcontainer/devcontainer.json
Log Message:
Add explicit port mappings for devcontainer CLI
forwardPorts only works in VS Code; the devcontainer CLI needs -p flags in runArgs to actually publish ports to the host.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications
Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 08af0eec17bd6bcabff328014253c09d3f8ddc1b https://github.com/dreamwidth/dreamwidth/commit/08af0eec17bd6bcabff328014253c09d3f8ddc1b Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)
Changed paths: M .github/workflows/tasks/worker-birthday-notify-service.json M .github/workflows/tasks/worker-change-poster-id-service.json M .github/workflows/tasks/worker-codebuild-notifier-service.json M .github/workflows/tasks/worker-content-importer-lite-service.json M .github/workflows/tasks/worker-content-importer-service.json M .github/workflows/tasks/worker-content-importer-verify-service.json M .github/workflows/tasks/worker-directory-meta-service.json M .github/workflows/tasks/worker-distribute-invites-service.json M .github/workflows/tasks/worker-dw-esn-cluster-subs-service.json M .github/workflows/tasks/worker-dw-esn-filter-subs-service.json M .github/workflows/tasks/worker-dw-esn-fired-event-service.json M .github/workflows/tasks/worker-dw-esn-process-sub-service.json M .github/workflows/tasks/worker-dw-send-email-service.json M .github/workflows/tasks/worker-dw-sphinx-copier-service.json M .github/workflows/tasks/worker-embeds-service.json M .github/workflows/tasks/worker-esn-cluster-subs-service.json M .github/workflows/tasks/worker-esn-filter-subs-service.json M .github/workflows/tasks/worker-esn-fired-event-service.json M .github/workflows/tasks/worker-esn-process-sub-service.json M .github/workflows/tasks/worker-expunge-users-service.json M .github/workflows/tasks/worker-import-eraser-service.json M .github/workflows/tasks/worker-import-scheduler-service.json M .github/workflows/tasks/worker-incoming-email-service.json M .github/workflows/tasks/worker-latest-feed-service.json M .github/workflows/tasks/worker-lazy-cleanup-service.json M .github/workflows/tasks/worker-paidstatus-service.json M .github/workflows/tasks/worker-process-privacy-service.json M .github/workflows/tasks/worker-resolve-extacct-service.json M .github/workflows/tasks/worker-schedule-synsuck-service.json M .github/workflows/tasks/worker-send-email-ses-service.json M .github/workflows/tasks/worker-shop-creditcard-charge-service.json M .github/workflows/tasks/worker-spellcheck-gm-service.json M .github/workflows/tasks/worker-sphinx-copier-service.json M .github/workflows/tasks/worker-sphinx-search-gm-service.json M .github/workflows/tasks/worker-support-notify-service.json M .github/workflows/tasks/worker-synsuck-service.json A .github/workflows/worker22-build.yml A .github/workflows/worker22-deploy.yml M config/update-workflows.py A etc/docker/worker22/Dockerfile A etc/docker/worker22/scripts/setup.sh A etc/docker/worker22/scripts/startup-dev.sh A etc/docker/worker22/scripts/startup-prod.sh
Log Message:
Add worker22 container for Ubuntu 22.04 worker migration
Create etc/docker/worker22/ (FROM base22), with parallel build and deploy workflows so workers can be migrated independently. Both worker and worker22 deploys share the same task definitions and log to the same per-worker CloudWatch log groups (/dreamwidth/worker/NAME), matching the Terraform configuration.
Also updates update-workflows.py to generate both worker-deploy.yml and worker22-deploy.yml, and fixes task definitions to use per-worker log groups instead of the shared /dreamwidth/worker group.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications
Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 6ed7244d8b66a8d3807bbac22ec1baffcc566158 https://github.com/dreamwidth/dreamwidth/commit/6ed7244d8b66a8d3807bbac22ec1baffcc566158 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)
Changed paths: M etc/docker/proxy/Dockerfile A src/proxy/go.mod
Log Message:
Move proxy container from Ubuntu 18.04 to 24.04
Add go.mod for the proxy since Go 1.22 (shipped with 24.04) requires module mode. The proxy uses only stdlib so no dependencies needed.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications
Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 8d37ec5d2b62954d591b7ce02bbcf43e2fa497fd https://github.com/dreamwidth/dreamwidth/commit/8d37ec5d2b62954d591b7ce02bbcf43e2fa497fd Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)
Changed paths: M .devcontainer/devcontainer.json M .devcontainer/start.sh
Log Message:
Use port 8080 for Starman in devcontainer, forward both server ports
Move Starman from port 80 to 8080 (matching its default) and add forwardPorts for both 8080 (Starman) and 8081 (Apache) so they're accessible at predictable ports on the host.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications
New Books and Arcs, 2/6/26
2026-02-06 09:13 pm
It’s February, again, and look! The groundhog brought a bunch of books with him! What here would you like to keep with you during the coldest part of the year? Share in the comments!
— JS
Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: ba0d37394abf33d74665d3583cbf76bf7230e566 https://github.com/dreamwidth/dreamwidth/commit/ba0d37394abf33d74665d3583cbf76bf7230e566 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-05 (Thu, 05 Feb 2026)
Changed paths: M bin/ecs-shell M cgi-bin/DBI/Role.pm
Log Message:
Fix DBD::mysql binary data corruption on Ubuntu 22.04
DBI/Role.pm: Add mysql_enable_utf8 => 0 to preserve binary gzip data stored in TEXT columns. DBD::mysql 4.050+ on Ubuntu 22.04 auto-enables UTF-8 handling, which corrupts compressed data. This option is safe on older versions where it was already the default.
bin/ecs-shell: Prefer 'web' container over 'cloudwatch-agent' sidecar when connecting to ECS tasks. Fixes "no such file or directory" error for /bin/bash since the cloudwatch-agent container uses a minimal image.
Co-Authored-By: Claude Opus 4.5 noreply@anthropic.com
To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications
Proverbs 21:21
2026-02-06 12:00 pmBrought to you by BibleGateway.com. Copyright (C) . All Rights Reserved.
sartorial
2026-02-06 12:00 amMerriam-Webster's Word of the Day for February 6, 2026 is:
sartorial \sahr-TOR-ee-ul\ adjective
Sartorial broadly means “of or relating to clothes,” but it often more specifically means “of or relating to a tailor or tailored clothes.”
// This particular English teacher is known both for engaging students deeply in literature and for her eccentric sartorial tastes.
Examples:
“As always, the Princess’s sartorial elegance shone through this year, with her championing British designers, turning to old favourites and adorning treasures she’s been gifted from the royal family over the years.” — Hello! Magazine (UK), 30 Dec. 2025
Did you know?
Study the seams in the word sartorial and you’ll find the common adjective suffix -ial and sartor, a Medieval Latin noun meaning “tailor.” (Sartor comes ultimately from Latin sarcire, “to mend.”) Sartorial has bedecked the English language since the early decades of the 19th century as a word describing things relating to clothes and to tailors, while sartor, though never fully adopted into the language, has also seen occasional use as a synonym for tailor. A third word shares the same root: sartorius (plural sartorii) refers to the longest muscle in the human body. Crossing the front of the thigh obliquely, it assists in rotating the leg to the cross-legged position in which the knees are spread wide apart—and in which tailors have traditionally sat.



