I'll explore the _talks directory structure and check the index.md files for external image URLs.
Found 10 directories with external image URLs. Let me download these images and update the files.
All images downloaded. Now let me read and update each index.md file to remove the image lines.
Now let me remove the image lines from all the index.md files.
Done. Let me verify the changes.
1.21-gigawatts
antediluvian-unix
app-cmd
destroy-all-monsters
dist-zilla
email-hates-the-living
jmap-minimum
modernizing-ancient-protocols
moose
perl5-debugger
perl5100delta
perl5120delta
perl5140delta
perl5160delta
perl5180delta
perl5200delta
perl5220delta
perl5240delta
perl5340delta
rjbs-loves-email
rx-validation
squiggly-characters
stop-worrying-love-email
sub-exporter
synergy
today-tomorrow-christmas
The standard approach in Jekyll/Liquid is to wrap the content in {% raw %} and {% endraw %} tags:
{% raw %}{{ $xyz }}{% endraw %}
For code blocks, you'd wrap the whole block:
{% raw %}
```blade
{{ $user->name }}
{% endraw %}
This tells Liquid to treat everything between the tags as literal text and not attempt to parse it as template syntax.
Let me read these files to understand the context of the {{ usage.
Let me analyze these files:
Already escaped (using {{ "{%" }} trick):
Need {% raw %} wrapping:
{{\$NEXT}})${{ }} syntax)${{ }} syntax){{...}})Let me apply the fixes.
That makes sense. I'll wrap entire code blocks instead. Let me apply those changes.
Done. Let me verify the changes are complete.
Created local-build in the blog root. Run it with:
./local-build
It will:
Gemfile (if missing) that uses the github-pages gem for compatibilityjekyll/jekyll:4 Docker image to build and serve at http://localhost:4000The first run will be slow (installing gems), but subsequent runs will be faster since Docker caches the gems in the container's bundle.
You may want to add Gemfile and Gemfile.lock to .gitignore if you don't want them committed, or commit them for reproducibility.
You're right, let me fix that so everything runs inside the container.
Updated. Now the only thing that runs on your host is the docker run command itself. The Gemfile creation and bundle install all happen inside the container.
Note: The Gemfile will still appear in your repo directory (since the container writes to the mounted volume), but no Ruby runs on your machine.
No, $0 is the path to the script itself, not an argument. So cd "$(dirname "$0")" changes to the directory where the script lives.
It's so you can run ./local-build from anywhere (e.g., ~/code/hub/rjbs.cloud/local-build while in your home directory) and it will still work correctly by first changing to the blog's directory.
If you'll only ever run it from within the blog directory, that line isn't needed.
You're not alone. The $0 vs $1, $@ vs $*, "$@" vs $@ distinctions have tripped up everyone at some point. It's one of those things that's simple once you know it but the syntax gives no hints.
The official jekyll/jekyll image doesn't have ARM builds. Let me switch to using a Ruby base image instead, which has proper ARM support.
Switched to the official ruby:3.3 image, which has ARM64 support. It will install Jekyll via the github-pages gem on first run.
Yes, exactly - --rm means fresh container each time. Installing gems to a local directory is a good approach. Let me update it to use vendor/bundle.
Done. Now gems install to vendor/bundle and persist between runs. Added to .gitignore:
vendor/ - the cached gems.bundle/ - bundle configGemfile and Gemfile.lockFirst run will still be slow, but subsequent runs should start quickly.
Jekyll is scanning the vendor/ directory and finding template files inside the gems. We need to tell Jekyll to exclude it.
Added vendor to the exclude list in _config.yml. That should fix it.
Files starting with _ or . are excluded by default. Easiest options:
.local-build or _local-buildlocal-build to the exclude list in _config.ymlWhich do you prefer?
Done. Committed to branch local-build:
ab491ba add local-build script for previewing site with Docker
I'm Claude Opus 4.5 (model ID claude-opus-4-5-20251101) according to my system info. I don't have information about a 4.6 release - my knowledge cutoff is May 2025, so if it was announced after that, I wouldn't know about it.