<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>xhepi.dev — Logs</title><description>Notes from the console — systems, patterns, and the occasional post-mortem.</description><link>https://xhepi.dev/</link><language>en-US</language><item><title>DjangoCon Europe 2026 in Athens</title><link>https://xhepi.dev/logs/djangocon-europe-2026-athens/</link><guid isPermaLink="true">https://xhepi.dev/logs/djangocon-europe-2026-athens/</guid><description>A week of Django talks, ancient ruins, grilled meat, and a cat on a rock. Notes from DjangoCon Europe 2026 in Athens, Greece.</description><pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate><category>djangocon</category><category>django</category><category>athens</category><category>travel</category><category>conference</category></item><item><title>Advanced Indexing in Django and PostgreSQL</title><link>https://xhepi.dev/logs/advanced-indexing-in-django-and-postgresql/</link><guid isPermaLink="true">https://xhepi.dev/logs/advanced-indexing-in-django-and-postgresql/</guid><description>Six PostgreSQL index types you can use through Django ORM: covering, function-based, partial, hash, and BRIN indexes.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>djangocon</category><category>django</category><category>postgresql</category><category>indexing</category><category>performance</category></item><item><title>Digitising Historical Data with Django</title><link>https://xhepi.dev/logs/digitising-historical-data-with-django/</link><guid isPermaLink="true">https://xhepi.dev/logs/digitising-historical-data-with-django/</guid><description>A five-stage OCR + LLM pipeline for digitising 60 years of caving incident reports, with custom model fields and pluggable processing steps.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>djangocon</category><category>django</category><category>data-pipeline</category><category>ocr</category><category>custom-fields</category></item><item><title>Django Forms in the Age of HTMx</title><link>https://xhepi.dev/logs/django-forms-in-the-age-of-htmx/</link><guid isPermaLink="true">https://xhepi.dev/logs/django-forms-in-the-age-of-htmx/</guid><description>Single-field inline editing with HTMx and Django forms -- one form per field, a marker mixin registry, and JSON-backed plugin fields.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>djangocon</category><category>django</category><category>htmx</category><category>forms</category></item><item><title>Django Transaction Primitives</title><link>https://xhepi.dev/logs/django-transaction-primitives/</link><guid isPermaLink="true">https://xhepi.dev/logs/django-transaction-primitives/</guid><description>django-subatomic splits atomic() into explicit primitives so your code says what it means -- transaction, savepoint, transaction_required, and durable.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>djangocon</category><category>django</category><category>transactions</category><category>django-subatomic</category></item><item><title>Is It Time for a Django Admin Rewrite?</title><link>https://xhepi.dev/logs/is-it-time-for-a-django-admin-rewrite/</link><guid isPermaLink="true">https://xhepi.dev/logs/is-it-time-for-a-django-admin-rewrite/</guid><description>Django-Admin-Deux: a ground-up admin rewrite using generic class-based views, a plugin system, and factory-generated views.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>djangocon</category><category>django</category><category>admin</category><category>django-admin-deux</category></item><item><title>Partitioning Very Large Tables with Django</title><link>https://xhepi.dev/logs/partitioning-very-large-tables-with-django/</link><guid isPermaLink="true">https://xhepi.dev/logs/partitioning-very-large-tables-with-django/</guid><description>How Kraken Tech partitions billion-row PostgreSQL tables with Django 5.2 composite primary keys.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>djangocon</category><category>django</category><category>postgresql</category><category>partitioning</category></item><item><title>Reliable Django Signals</title><link>https://xhepi.dev/logs/reliable-django-signals/</link><guid isPermaLink="true">https://xhepi.dev/logs/reliable-django-signals/</guid><description>Making Django signals reliable using the transactional outbox pattern and Django 6 tasks framework.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>djangocon</category><category>django</category><category>signals</category><category>transactions</category><category>outbox-pattern</category></item><item><title>Role-Based Access Control in Django</title><link>https://xhepi.dev/logs/role-based-access-control-in-django/</link><guid isPermaLink="true">https://xhepi.dev/logs/role-based-access-control-in-django/</guid><description>Replacing Django built-in authorization with a custom RBAC backend using role hierarchies and transitive closure caching.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>djangocon</category><category>django</category><category>rbac</category><category>authorization</category><category>permissions</category></item><item><title>Scaling with Multiple Databases in Django</title><link>https://xhepi.dev/logs/scaling-with-multiple-databases-in-django/</link><guid isPermaLink="true">https://xhepi.dev/logs/scaling-with-multiple-databases-in-django/</guid><description>A 17-line database router for primary/replica splitting in Django, plus the three gotchas you will hit in production.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>djangocon</category><category>django</category><category>databases</category><category>scaling</category><category>replication</category></item><item><title>Static Islands in a Dynamic Sea</title><link>https://xhepi.dev/logs/static-islands-in-a-dynamic-sea/</link><guid isPermaLink="true">https://xhepi.dev/logs/static-islands-in-a-dynamic-sea/</guid><description>Building typed Python classes on top of Django ORM with Mantle to solve fat models, N+1 queries, and type safety.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>djangocon</category><category>django</category><category>orm</category><category>typing</category><category>mantle</category></item><item><title>Supply Chain Security for Python</title><link>https://xhepi.dev/logs/supply-chain-security-for-python/</link><guid isPermaLink="true">https://xhepi.dev/logs/supply-chain-security-for-python/</guid><description>Real supply chain attacks on PyPI and a practical defense toolkit: pip-audit, hash pinning, Trusted Publishing, and continuous monitoring.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>djangocon</category><category>python</category><category>security</category><category>supply-chain</category><category>pip</category></item><item><title>Lies &amp; Allies: Party Games Without the Ad Breaks</title><link>https://xhepi.dev/logs/lies-and-allies/</link><guid isPermaLink="true">https://xhepi.dev/logs/lies-and-allies/</guid><description>I built simple role-revealing web apps for Mafia and Spyfall because every existing option was either full of ads, abandoned, or both.</description><pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate><category>svelte</category><category>django</category><category>websockets</category><category>games</category><category>self-hosted</category></item><item><title>Why Accuracy Is a Terrible Metric for Trading Bots</title><link>https://xhepi.dev/logs/why-accuracy-is-a-terrible-metric-for-trading-bots/</link><guid isPermaLink="true">https://xhepi.dev/logs/why-accuracy-is-a-terrible-metric-for-trading-bots/</guid><description>A 90% win rate sounds incredible until you do the math. How building a binary options bot taught me that being right and being profitable are completely different problems.</description><pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate><category>trading</category><category>python</category><category>quantitative-finance</category><category>prediction-markets</category></item><item><title>Receiving Voice in Discord After DAVE: A Field Report</title><link>https://xhepi.dev/logs/discord-dave-voice-receive/</link><guid isPermaLink="true">https://xhepi.dev/logs/discord-dave-voice-receive/</guid><description>Discord enforced end-to-end encryption for voice in March 2026. Here is what broke, what was undocumented, and how I patched my way through it.</description><pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate><category>discord</category><category>voice</category><category>dave</category><category>python</category><category>debugging</category></item><item><title>How I Set Up Claude Code to Actually Work for Me</title><link>https://xhepi.dev/logs/my-claude-code-setup/</link><guid isPermaLink="true">https://xhepi.dev/logs/my-claude-code-setup/</guid><description>A walkthrough of my Claude Code setup with 16 plugins, a custom status line, and custom skills that turned a terminal tool into a proper development environment.</description><pubDate>Tue, 02 Dec 2025 00:00:00 GMT</pubDate><category>claude-code</category><category>ai</category><category>developer-tools</category><category>productivity</category></item></channel></rss>