<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Elixir on Glenn Roberts</title><link>https://glenn-roberts.com/tags/elixir/</link><description>Recent content in Elixir on Glenn Roberts</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Glenn Roberts - All rights reserved.</copyright><lastBuildDate>Mon, 09 Nov 2026 23:55:26 +1000</lastBuildDate><atom:link href="https://glenn-roberts.com/tags/elixir/index.xml" rel="self" type="application/rss+xml"/><item><title>Render PDFs in Elixir with the Typst NIF</title><link>https://glenn-roberts.com/posts/2026/11/09/render-pdfs-in-elixir-with-the-typst-nif/</link><pubDate>Mon, 09 Nov 2026 23:55:26 +1000</pubDate><guid>https://glenn-roberts.com/posts/2026/11/09/render-pdfs-in-elixir-with-the-typst-nif/</guid><description>A Phoenix app renders its report PDFs inside the BEAM with the typst package's NIF. Why not headless Chrome or the Typst CLI, the checks a NIF has to pass, and a benchmark against the CLI.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://glenn-roberts.com/posts/2026/11/09/render-pdfs-in-elixir-with-the-typst-nif/feature.webp"/></item><item><title>A time on the Phoenix scope goes stale in a LiveView</title><link>https://glenn-roberts.com/posts/2026/11/07/pass-the-time-as-now-not-on-the-phoenix-scope/</link><pubDate>Sat, 07 Nov 2026 23:54:13 +1000</pubDate><guid>https://glenn-roberts.com/posts/2026/11/07/pass-the-time-as-now-not-on-the-phoenix-scope/</guid><description/></item><item><title>Phoenix filter_parameters doesn't redact tokens in the URL path</title><link>https://glenn-roberts.com/posts/2026/11/05/phoenix-filter-parameters-doesnt-redact-tokens-in-the-url-path/</link><pubDate>Thu, 05 Nov 2026 21:34:51 +1000</pubDate><guid>https://glenn-roberts.com/posts/2026/11/05/phoenix-filter-parameters-doesnt-redact-tokens-in-the-url-path/</guid><description/></item><item><title>Make the Phoenix scope the first argument</title><link>https://glenn-roberts.com/posts/2026/11/03/make-the-phoenix-scope-the-first-argument/</link><pubDate>Tue, 03 Nov 2026 21:23:08 +1000</pubDate><guid>https://glenn-roberts.com/posts/2026/11/03/make-the-phoenix-scope-the-first-argument/</guid><description>Pass Phoenix 1.8's Scope first to almost every public context function, and the context becomes one authorization layer for your LiveViews, controllers, APIs and MCP server.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://glenn-roberts.com/posts/2026/11/03/make-the-phoenix-scope-the-first-argument/feature.webp"/></item><item><title>Enforce Phoenix contexts with boundary</title><link>https://glenn-roberts.com/posts/2026/10/27/enforce-phoenix-contexts-with-boundary/</link><pubDate>Tue, 27 Oct 2026 21:22:28 +1000</pubDate><guid>https://glenn-roberts.com/posts/2026/10/27/enforce-phoenix-contexts-with-boundary/</guid><description>Phoenix contexts are a convention until something checks them. boundary makes a call from the web layer into a context's internals fail the build, even on an app that already breaks the rules.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://glenn-roberts.com/posts/2026/10/27/enforce-phoenix-contexts-with-boundary/feature.webp"/></item><item><title>MCP before REST when the caller is an agent</title><link>https://glenn-roberts.com/posts/2026/10/25/mcp-before-rest-when-the-caller-is-an-agent/</link><pubDate>Sun, 25 Oct 2026 22:40:01 +1000</pubDate><guid>https://glenn-roberts.com/posts/2026/10/25/mcp-before-rest-when-the-caller-is-an-agent/</guid><description>We wanted AI agents to work with our app. I built an MCP server with OAuth first, and REST only when a script that doesn't speak MCP needed the app too.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://glenn-roberts.com/posts/2026/10/25/mcp-before-rest-when-the-caller-is-an-agent/feature.webp"/></item><item><title>Mutation Testing Finds What Coverage Misses</title><link>https://glenn-roberts.com/posts/2026/10/22/mutation-testing-finds-what-coverage-misses/</link><pubDate>Thu, 22 Oct 2026 23:06:44 +1000</pubDate><guid>https://glenn-roberts.com/posts/2026/10/22/mutation-testing-finds-what-coverage-misses/</guid><description>Line coverage said our Phoenix app was 96% tested. Mutation testing with Muex, run only on a branch's changed lines and fast tests, found 17 changes no test caught.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://glenn-roberts.com/posts/2026/10/22/mutation-testing-finds-what-coverage-misses/feature.webp"/></item><item><title>Which id belongs in the URI</title><link>https://glenn-roberts.com/posts/2026/02/26/which-id-belongs-in-the-uri/</link><pubDate>Thu, 26 Feb 2026 22:07:34 +1000</pubDate><guid>https://glenn-roberts.com/posts/2026/02/26/which-id-belongs-in-the-uri/</guid><description>A record with its own primary key and an id from the upstream system that sent it. The upstream id usually belongs in the URI, when it passes three tests.</description></item><item><title>Re-fetch on a 409 when two Oban jobs create the same record</title><link>https://glenn-roberts.com/posts/2026/02/05/409-from-racing-oban-jobs-means-re-fetch/</link><pubDate>Thu, 05 Feb 2026 22:20:50 +1000</pubDate><guid>https://glenn-roberts.com/posts/2026/02/05/409-from-racing-oban-jobs-means-re-fetch/</guid><description/></item><item><title>Where to block PromEx's /metrics</title><link>https://glenn-roberts.com/posts/2025/11/24/where-to-block-promex-metrics/</link><pubDate>Mon, 24 Nov 2025 20:02:47 +1000</pubDate><guid>https://glenn-roberts.com/posts/2025/11/24/where-to-block-promex-metrics/</guid><description>PromEx's plug serves /metrics on the Phoenix app's public port. Why blocking it at the load balancer beats an ingress-nginx snippet, and when a separate metrics port is simpler.</description></item><item><title>How to test your Elixir Phoenix LiveView apps with k6.</title><link>https://glenn-roberts.com/posts/2022/10/25/how-to-test-your-elixir-phoenix-liveview-apps-with-k6/</link><pubDate>Tue, 25 Oct 2022 23:09:24 +1000</pubDate><guid>https://glenn-roberts.com/posts/2022/10/25/how-to-test-your-elixir-phoenix-liveview-apps-with-k6/</guid><description>How to test your Elixir Phoenix LiveView apps with k6.</description></item><item><title>Circle Shift an Array in Elixir</title><link>https://glenn-roberts.com/posts/2020/09/27/circle-shift-an-array-in-elixir/</link><pubDate>Sun, 27 Sep 2020 00:00:00 +0000</pubDate><guid>https://glenn-roberts.com/posts/2020/09/27/circle-shift-an-array-in-elixir/</guid><description>Circle Shift an Array in Elixir</description></item></channel></rss>