<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Aturo Phil</title>
    <description>The latest articles on Forem by Aturo Phil (@aturo_phil).</description>
    <link>https://forem.com/aturo_phil</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3747101%2F78b01e87-c2fc-4f01-be01-029d6d3d9213.jpg</url>
      <title>Forem: Aturo Phil</title>
      <link>https://forem.com/aturo_phil</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/aturo_phil"/>
    <language>en</language>
    <item>
      <title>The Modern DevSecOps Engineering Stack (2026 Edition): From First Commit to Production</title>
      <dc:creator>Aturo Phil</dc:creator>
      <pubDate>Sun, 24 May 2026 13:23:36 +0000</pubDate>
      <link>https://forem.com/aturo_phil/the-modern-devsecops-engineering-stack-2026-edition-from-first-commit-to-production-110b</link>
      <guid>https://forem.com/aturo_phil/the-modern-devsecops-engineering-stack-2026-edition-from-first-commit-to-production-110b</guid>
      <description>&lt;p&gt;Here's a hard truth I learnt after watching a production database get wiped by a leaked &lt;code&gt;.env&lt;/code&gt; file: &lt;strong&gt;DevSecOps doesn't start with a tool. It starts with a habit.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most breaches happen because the fundamentals were loose — a secret committed to git, a code review that skimmed past an SQL injection, a dependency added without checking who maintains it.&lt;/p&gt;

&lt;p&gt;In this series, we're going to build something real: a Notes API in Go that goes from &lt;code&gt;git init&lt;/code&gt; all the way to Kubernetes. Every step gets a security layer. Every decision gets explained. And yes, you can clone it and break it yourself.&lt;/p&gt;

&lt;p&gt;Before we write a single line of Go, we need to talk about how to configure your development environment to be more secure. Here's the thing: your IDE, your git config, your pre-commit hooks — these are your first security controls.&lt;/p&gt;




&lt;h2&gt;
  
  
  Git: More Than Version Control
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Commit Signing
&lt;/h3&gt;

&lt;p&gt;Git trusts whatever you tell it. Change your email, change your name, and the commit looks legitimate in history. In a team environment — or even working solo — that means your audit trail is only as strong as your ability to prove who actually wrote what.&lt;/p&gt;

&lt;p&gt;Commit signing fixes this. It attaches a cryptographic signature to every commit, verified against your GPG key. Not optional for production codebases. Non-negotiable for compliance. And surprisingly easy to set up.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Generate a GPG key (RSA 4096, no expiry for simplicity)&lt;/span&gt;
gpg &lt;span class="nt"&gt;--full-generate-key&lt;/span&gt;

&lt;span class="c"&gt;# Tell git to use it&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.signingkey YOUR_KEY_ID
git config &lt;span class="nt"&gt;--global&lt;/span&gt; commit.gpgsign &lt;span class="nb"&gt;true&lt;/span&gt;

&lt;span class="c"&gt;# Verify any commit&lt;/span&gt;
git log &lt;span class="nt"&gt;--show-signature&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Try this: Run &lt;code&gt;git log --show-signature&lt;/code&gt; on your current project. If nothing shows up, your history is unverified — and in a security audit, unverified means untrusted.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pre-Commit Hooks
&lt;/h3&gt;

&lt;p&gt;Pre-commit hooks are your first automated line of defense. They run locally, before a commit ever reaches the remote, catching issues that are easy to miss when focusing on shipping features.&lt;/p&gt;

&lt;p&gt;Here is what that looks like in practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#.pre-commit-config.yaml&lt;/span&gt;
repos:
  - repo: https://github.com/gitleaks/gitleaks
    rev: v8.24.0  &lt;span class="c"&gt;# check for latest&lt;/span&gt;
    hooks:
      - &lt;span class="nb"&gt;id&lt;/span&gt;: gitleaks

  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v5.0.0
    hooks:
      - &lt;span class="nb"&gt;id&lt;/span&gt;: detect-private-key
      - &lt;span class="nb"&gt;id&lt;/span&gt;: check-merge-conflict
      - &lt;span class="nb"&gt;id&lt;/span&gt;: trailing-whitespace

  - repo: https://github.com/dnephin/pre-commit-golang
    rev: v0.5.1
    hooks:
      - &lt;span class="nb"&gt;id&lt;/span&gt;: go-fmt
      - &lt;span class="nb"&gt;id&lt;/span&gt;: go-vet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install and activate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;pre-commit
pre-commit &lt;span class="nb"&gt;install
&lt;/span&gt;pre-commit run &lt;span class="nt"&gt;--all-files&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What happens now: every &lt;code&gt;git commit&lt;/code&gt; scans for hardcoded secrets, private keys, and common mistakes before the code leaves your machine. This will help you catch the secret and makes sure it never enters git history. &lt;/p&gt;

&lt;h3&gt;
  
  
  What we are building:
&lt;/h3&gt;

&lt;p&gt;We'll build a production grade Notes API in Go, and secure it at every layer. Here is the architecture: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auth service&lt;/strong&gt;: JWT-based authentication with bcrypt password hashing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notes API&lt;/strong&gt;: CRUD operations with strict ownership enforcement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security controls&lt;/strong&gt;: IDOR protection, SQL injection prevention, structured logging and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stack&lt;/strong&gt;: Go, PostgreSQL, HashiCorp Vault, Docker, Kubernetes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a real-world pattern in production systems, small enough to understand completely, comprehensive enough to demonstrate every DevSecOps concept we cover.&lt;/p&gt;

&lt;p&gt;The project structure lives here, and every section of this series maps to a tagged commit so you can follow along exactly:&lt;br&gt;
&lt;a href="https://github.com/philaturo/secure-notes-api" rel="noopener noreferrer"&gt;https://github.com/philaturo/secure-notes-api&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Star it to track progress, clone it to break things, and open an issue if you spot something I missed. This is being built in the open — no polished final product, just real commits, real mistakes, and real fixes.&lt;/p&gt;

&lt;p&gt;In part 2, we'll look at how to harden the CI/CD pipeline, least privilege, artifact signing and why a misconfigured &lt;code&gt;.yml&lt;/code&gt; file is a security vulnerability. See you there !&lt;/p&gt;

</description>
      <category>devops</category>
      <category>go</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>ElixirConf EU 2026: Three Technical Shifts That Matter</title>
      <dc:creator>Aturo Phil</dc:creator>
      <pubDate>Mon, 18 May 2026 09:54:44 +0000</pubDate>
      <link>https://forem.com/aturo_phil/-elixirconf-eu-2026-three-technical-shifts-that-matter-1ih8</link>
      <guid>https://forem.com/aturo_phil/-elixirconf-eu-2026-three-technical-shifts-that-matter-1ih8</guid>
      <description>&lt;p&gt;Málaga hosted the ElixirConf EU 2026. Here's what changed.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Type Inference Arrives (No Annotations Required)
&lt;/h2&gt;

&lt;p&gt;Elixir 1.20 introduces whole-program type inference. The compiler now understands function signatures, guard conditions, and map key domains without explicit type annotations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this means:&lt;/strong&gt; A function performing arithmetic on map values now infers that the input must be a map containing numeric keys. Pattern matching across clauses carries type knowledge forward. Handle &lt;code&gt;nil&lt;/code&gt; in one branch? Subsequent branches know the value cannot be &lt;code&gt;nil&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The system also tracks map mutations through the &lt;code&gt;Map&lt;/code&gt; module, emitting compile-time warnings when operations reference keys proven to be absent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For teams:&lt;/strong&gt; Fewer runtime errors. Earlier logic flaw detection. Testing effort shifts from defensive type checking to business logic validation.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Requires Erlang/OTP 27 or later.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. DurableServer: State That Survives Node Failures
&lt;/h2&gt;

&lt;p&gt;Chris McCord's keynote introduced &lt;code&gt;DurableServer&lt;/code&gt;—a new abstraction for stateful processes that persist across node failures and support seamless state migration in distributed clusters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem it solves:&lt;/strong&gt; Traditional &lt;code&gt;GenServer&lt;/code&gt; implementations tie process state to node lifecycle. Distributed applications struggle with process locality guarantees.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution:&lt;/strong&gt; &lt;code&gt;DurableServer&lt;/code&gt; integrates with pluggable storage backends. Process state lives independently of the node.&lt;/p&gt;

&lt;p&gt;Complementary sessions demonstrated Kafka-backed architectures and Oban processing at scale. The combination enables architectures that maintain consistency without external coordination layers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For teams:&lt;/strong&gt; Redesign stateful components for resilience without rewriting application architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Compilation Gets Faster (Up to 4x)
&lt;/h2&gt;

&lt;p&gt;Elixir 1.20 delivers measurable compilation improvements through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lazy module loading&lt;/li&gt;
&lt;li&gt;Parallel dependency resolution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Large codebases see build time reductions of up to four times in benchmark scenarios.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tooling additions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mix source&lt;/code&gt; for better visibility&lt;/li&gt;
&lt;li&gt;Enhanced IEx debugging output&lt;/li&gt;
&lt;li&gt;Type-aware autocomplete in IEx&lt;/li&gt;
&lt;li&gt;Improved error messaging for undefined functions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;For teams:&lt;/strong&gt; Lower cognitive overhead when working with large, modular applications.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Means for You
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Implication&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Teams evaluating Elixir&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Enhanced type system reduces test coverage needs for edge cases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Existing Elixir projects&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Upgrade to 1.20 for incremental type-aware development. Compiler detects redundant clauses and dead code, supporting refactoring with higher confidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Engineering leadership&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The "one monolith, many teams" pattern presented at Málaga shows Elixir's module isolation and supervision trees provide natural boundaries for team autonomy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  One More Thing: AI Patterns
&lt;/h2&gt;

&lt;p&gt;Multiple talks addressed AI integration. The BEAM's lightweight process model aligns naturally with asynchronous, stateful AI orchestration.&lt;/p&gt;

&lt;p&gt;Two libraries worth noting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Legion&lt;/strong&gt; – Code execution by AI agents using pure Elixir&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arcana&lt;/strong&gt; – Retrieval-augmented generation pipelines without external runtimes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Concurrent inference requests. Familiar supervision patterns. No additional orchestration layers.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: ElixirConf EU 2026 announcements, Elixir 1.20 release candidate documentation, and community resources compiled on the Elixir Forum.&lt;/em&gt;&lt;/p&gt;




</description>
      <category>elixir</category>
      <category>functional</category>
      <category>erlang</category>
      <category>phoenix</category>
    </item>
  </channel>
</rss>
