<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>CryptoPatrick</title>
    <link>https://cryptopatrick.com/</link>
    <description>Recent content on CryptoPatrick</description>
    <generator>Hugo</generator>
    <language>en-EN</language>
    <copyright>&#39;I write to understand as much as to be understood.&#39; —Elie Wiesel&lt;br&gt; (c) 2024 CryptoPatrick</copyright>
    <lastBuildDate>Tue, 13 Jan 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://cryptopatrick.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>About Me</title>
      <link>https://cryptopatrick.com/about/</link>
      <pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/about/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Who am I?:&lt;/strong&gt; Hi! My name is Patrick. I was born and raised in Gothenburg, on the Swedish West Coast.&#xA;I&amp;rsquo;m a trained &lt;em&gt;Computational Linguist&lt;/em&gt;, specializing in &lt;em&gt;Large Language Models (LLM)&lt;/em&gt; and &lt;em&gt;Agentic Artificial Intelligence&lt;/em&gt;. I&amp;rsquo;m passionate about building systems that are simple, have few parts, are easy to maintain, and very fast. I&amp;rsquo;m looking for my first professional developer role. I have several years of experience in developing Open Source Software.&lt;/p&gt;</description>
    </item>
    <item>
      <title>jax-rs</title>
      <link>https://cryptopatrick.com/code/jax-rs/</link>
      <pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/code/jax-rs/</guid>
      <description>&lt;h2 id=&#34;what-it-is&#34;&gt;What it is&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/jax-ml/jax&#34;&gt;JAX&lt;/a&gt; is Google&amp;rsquo;s library for numerical computing: NumPy-style arrays plus transformations like &lt;code&gt;grad&lt;/code&gt; that compute derivatives automatically. jax-rs brings that model to Rust. It has an &lt;code&gt;Array&lt;/code&gt; type with broadcasting and NumPy-like operations, reverse-mode automatic differentiation by tracing computations into a graph, kernel fusion, and a WebGPU backend for running on the GPU, including in the browser.&lt;/p&gt;&#xA;&lt;h2 id=&#34;using-it&#34;&gt;Using it&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;use&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;jax_rs&lt;/span&gt;::{&lt;span style=&#34;color:#434f54&#34;&gt;Array&lt;/span&gt;, &lt;span style=&#34;color:#434f54&#34;&gt;Shape&lt;/span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;Array&lt;/span&gt;::&lt;span style=&#34;color:#434f54&#34;&gt;from_vec&lt;/span&gt;(&lt;span style=&#34;color:#d35400&#34;&gt;vec!&lt;/span&gt;[&lt;span style=&#34;color:#8a7b52&#34;&gt;1.0&lt;/span&gt;, &lt;span style=&#34;color:#8a7b52&#34;&gt;2.0&lt;/span&gt;, &lt;span style=&#34;color:#8a7b52&#34;&gt;3.0&lt;/span&gt;, &lt;span style=&#34;color:#8a7b52&#34;&gt;4.0&lt;/span&gt;], &lt;span style=&#34;color:#434f54&#34;&gt;Shape&lt;/span&gt;::&lt;span style=&#34;color:#434f54&#34;&gt;new&lt;/span&gt;(&lt;span style=&#34;color:#d35400&#34;&gt;vec!&lt;/span&gt;[&lt;span style=&#34;color:#8a7b52&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#8a7b52&#34;&gt;2&lt;/span&gt;]));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;y&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;Array&lt;/span&gt;::&lt;span style=&#34;color:#434f54&#34;&gt;from_vec&lt;/span&gt;(&lt;span style=&#34;color:#d35400&#34;&gt;vec!&lt;/span&gt;[&lt;span style=&#34;color:#8a7b52&#34;&gt;5.0&lt;/span&gt;, &lt;span style=&#34;color:#8a7b52&#34;&gt;6.0&lt;/span&gt;, &lt;span style=&#34;color:#8a7b52&#34;&gt;7.0&lt;/span&gt;, &lt;span style=&#34;color:#8a7b52&#34;&gt;8.0&lt;/span&gt;], &lt;span style=&#34;color:#434f54&#34;&gt;Shape&lt;/span&gt;::&lt;span style=&#34;color:#434f54&#34;&gt;new&lt;/span&gt;(&lt;span style=&#34;color:#d35400&#34;&gt;vec!&lt;/span&gt;[&lt;span style=&#34;color:#8a7b52&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#8a7b52&#34;&gt;2&lt;/span&gt;]));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;sum&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;x&lt;/span&gt;.&lt;span style=&#34;color:#434f54&#34;&gt;add&lt;/span&gt;(&lt;span style=&#34;color:#728e00&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#434f54&#34;&gt;y&lt;/span&gt;);          &lt;span style=&#34;color:#95a5a6&#34;&gt;// element-wise&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;prod&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;x&lt;/span&gt;.&lt;span style=&#34;color:#434f54&#34;&gt;matmul&lt;/span&gt;(&lt;span style=&#34;color:#728e00&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#434f54&#34;&gt;y&lt;/span&gt;);      &lt;span style=&#34;color:#95a5a6&#34;&gt;// matrix product&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;mean&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;x&lt;/span&gt;.&lt;span style=&#34;color:#434f54&#34;&gt;mean_all&lt;/span&gt;();      &lt;span style=&#34;color:#95a5a6&#34;&gt;// 2.5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Derivatives:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ripley</title>
      <link>https://cryptopatrick.com/code/ripley/</link>
      <pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/code/ripley/</guid>
      <description>&lt;h2 id=&#34;what-it-is&#34;&gt;What it is&lt;/h2&gt;&#xA;&lt;p&gt;Model quality can change from one week to the next without notice. Ripley is a small daemon that runs simple, deterministic test tasks against the Claude Code CLI on a schedule, scores each run on correctness, token use and duration, and stores the results in SQLite. Rolling statistics flag when the pass rate drops. It is named after Ellen Ripley, who follows procedure and notices when systems that claim to be fine aren&amp;rsquo;t.&lt;/p&gt;</description>
    </item>
    <item>
      <title>cargo-x402</title>
      <link>https://cryptopatrick.com/code/cargo-x402/</link>
      <pubDate>Thu, 27 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/code/cargo-x402/</guid>
      <description>&lt;h2 id=&#34;what-it-is&#34;&gt;What it is&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;x402&lt;/strong&gt; revives HTTP status code &lt;em&gt;402 Payment Required&lt;/em&gt;: a server can ask for a small payment before serving a request, and a client (or an AI agent) can pay and retry automatically. It makes pay-per-request APIs possible without accounts or subscriptions.&lt;/p&gt;&#xA;&lt;p&gt;cargo-x402 is a &lt;code&gt;cargo&lt;/code&gt; subcommand that starts a new x402 project from a template. It finds templates in GitHub repositories tagged &lt;code&gt;x402-template&lt;/code&gt;, lets you pick one interactively, and fills in the project name and options. I wrote five templates for it: a basic API, a CLI, a full-stack app, an observability setup and a starter kit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AgentFS</title>
      <link>https://cryptopatrick.com/code/agentfs/</link>
      <pubDate>Tue, 25 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/code/agentfs/</guid>
      <description>&lt;h2 id=&#34;what-it-is&#34;&gt;What it is&lt;/h2&gt;&#xA;&lt;p&gt;Agents need somewhere to put things: files they produce, settings they keep, and a record of the tools they called. AgentFS gives an agent a POSIX-like workspace with three parts:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;fs&lt;/code&gt;: files and directories (&lt;code&gt;mkdir&lt;/code&gt;, &lt;code&gt;write_file&lt;/code&gt;, &lt;code&gt;read_file&lt;/code&gt;, &lt;code&gt;readdir&lt;/code&gt;, &amp;hellip;),&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;kv&lt;/code&gt;: a key-value store for state and configuration,&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;tools&lt;/code&gt;: an audit log of tool calls with their inputs, outputs, outcome and statistics.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Everything is stored in a database. AgentFS is built on &lt;strong&gt;agentdb&lt;/strong&gt;, a database-independent interface, and &lt;strong&gt;agentsql&lt;/strong&gt;, which implements it for SQLite, PostgreSQL and MySQL.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AgentSmith</title>
      <link>https://cryptopatrick.com/code/agentsmith/</link>
      <pubDate>Sun, 16 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/code/agentsmith/</guid>
      <description>&lt;h2 id=&#34;what-it-is&#34;&gt;What it is&lt;/h2&gt;&#xA;&lt;p&gt;Most agents forget everything when the process stops. AgentSmith wraps an agent built with the Rust &lt;a href=&#34;https://github.com/0xPlaygrounds/rig&#34;&gt;Rig&lt;/a&gt; framework and records every turn in a SQLite database with full-text search, the way &lt;a href=&#34;https://github.com/atuinsh/atuin&#34;&gt;Atuin&lt;/a&gt; does for shell history. Before each reply, it searches past conversations for relevant turns and adds them to the prompt.&lt;/p&gt;&#xA;&lt;h2 id=&#34;using-it&#34;&gt;Using it&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;use&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;agentsmith&lt;/span&gt;::{&lt;span style=&#34;color:#434f54&#34;&gt;AgentHistory&lt;/span&gt;, &lt;span style=&#34;color:#434f54&#34;&gt;SmartAgent&lt;/span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;use&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;rig&lt;/span&gt;::&lt;span style=&#34;color:#434f54&#34;&gt;providers&lt;/span&gt;::&lt;span style=&#34;color:#434f54&#34;&gt;openai&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;history&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;AgentHistory&lt;/span&gt;::&lt;span style=&#34;color:#434f54&#34;&gt;new&lt;/span&gt;(&lt;span style=&#34;color:#7f8c8d&#34;&gt;&amp;#34;my_agent.db&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#728e00&#34;&gt;Some&lt;/span&gt;(&lt;span style=&#34;color:#7f8c8d&#34;&gt;&amp;#34;session-123&amp;#34;&lt;/span&gt;)).&lt;span style=&#34;color:#728e00&#34;&gt;await&lt;/span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;?&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;client&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;openai&lt;/span&gt;::&lt;span style=&#34;color:#434f54&#34;&gt;Client&lt;/span&gt;::&lt;span style=&#34;color:#434f54&#34;&gt;new&lt;/span&gt;(&lt;span style=&#34;color:#728e00&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#434f54&#34;&gt;std&lt;/span&gt;::&lt;span style=&#34;color:#434f54&#34;&gt;env&lt;/span&gt;::&lt;span style=&#34;color:#434f54&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#7f8c8d&#34;&gt;&amp;#34;OPENAI_API_KEY&amp;#34;&lt;/span&gt;)&lt;span style=&#34;color:#728e00&#34;&gt;?&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;agent&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;client&lt;/span&gt;.&lt;span style=&#34;color:#434f54&#34;&gt;agent&lt;/span&gt;(&lt;span style=&#34;color:#7f8c8d&#34;&gt;&amp;#34;gpt-4&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#434f54&#34;&gt;preamble&lt;/span&gt;(&lt;span style=&#34;color:#7f8c8d&#34;&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#434f54&#34;&gt;build&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;mut&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;smart&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;SmartAgent&lt;/span&gt;::&lt;span style=&#34;color:#434f54&#34;&gt;new&lt;/span&gt;(&lt;span style=&#34;color:#434f54&#34;&gt;agent&lt;/span&gt;, &lt;span style=&#34;color:#434f54&#34;&gt;history&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;reply&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;smart&lt;/span&gt;.&lt;span style=&#34;color:#434f54&#34;&gt;chat&lt;/span&gt;(&lt;span style=&#34;color:#7f8c8d&#34;&gt;&amp;#34;How did we fix the JSON parsing bug?&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#728e00&#34;&gt;await&lt;/span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;?&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;AgentHistory&lt;/code&gt; can also be used directly: &lt;code&gt;log_turn&lt;/code&gt; records a message with metadata (duration, success, tokens), &lt;code&gt;search&lt;/code&gt; and &lt;code&gt;recent&lt;/code&gt; retrieve turns, &lt;code&gt;summarize_session&lt;/code&gt; writes a summary, and &lt;code&gt;import_jsonl&lt;/code&gt; loads an existing log.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Foras</title>
      <link>https://cryptopatrick.com/code/foras/</link>
      <pubDate>Thu, 09 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/code/foras/</guid>
      <description>&lt;h2 id=&#34;what-it-is&#34;&gt;What it is&lt;/h2&gt;&#xA;&lt;p&gt;Foras (&lt;strong&gt;F&lt;/strong&gt;irst-&lt;strong&gt;O&lt;/strong&gt;rder &lt;strong&gt;R&lt;/strong&gt;e&lt;strong&gt;AS&lt;/strong&gt;oner) is an automated theorem prover for first-order logic with equality. You give it axioms and the negation of a goal; it searches for a contradiction using resolution and paramodulation, and either prints a proof or reports that the search saturated without finding one.&lt;/p&gt;&#xA;&lt;p&gt;It started as a small reasoner and became a faithful &lt;strong&gt;port of Otter 3.3&lt;/strong&gt;, William McCune&amp;rsquo;s classic prover from Argonne National Laboratory. &amp;ldquo;Faithful&amp;rdquo; is measured, not claimed: a tool compares Foras&amp;rsquo;s search with C Otter&amp;rsquo;s clause by clause. On Otter&amp;rsquo;s 81 reference examples, 70 produce identical searches and the other 11 match up to the point where Otter&amp;rsquo;s memory accounting takes over.&lt;/p&gt;</description>
    </item>
    <item>
      <title>miniFIX Tutorial | Part 08</title>
      <link>https://cryptopatrick.com/blog/2025/09/22/minifix-tutorial-part-08/</link>
      <pubDate>Mon, 22 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2025/09/22/minifix-tutorial-part-08/</guid>
      <description>In production financial systems, security is paramount. FIX messages often contain sensitive trading information that must be protected during transmission. TLS (Transport Layer Security) provides the cryptographic foundation for secure FIX communication. This post explores building a TLS-enabled FIX acceptor using miniFIX, focusing on security best practices for financial applications.</description>
    </item>
    <item>
      <title>miniFIX Tutorial | Part 07</title>
      <link>https://cryptopatrick.com/blog/2025/09/21/minifix-tutorial-part-07/</link>
      <pubDate>Sun, 21 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2025/09/21/minifix-tutorial-part-07/</guid>
      <description>Simple Open Framing Header (SOFH) is a lightweight framing protocol often used to wrap FIX messages for reliable transport over TCP connections. When building high-throughput financial systems, combining SOFH framing with async Rust provides excellent performance characteristics. This post demonstrates how to build a SOFH-enabled TCP server using miniFIX and Tokio.</description>
    </item>
    <item>
      <title>miniFIX Tutorial | Part 06</title>
      <link>https://cryptopatrick.com/blog/2025/09/20/minifix-tutorial-part-06/</link>
      <pubDate>Sat, 20 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2025/09/20/minifix-tutorial-part-06/</guid>
      <description>Modern trading systems require interactive, user-friendly interfaces that can handle real-time market data and order management. This post explores building an interactive trading client using miniFIX with Tokio for async operations, combined with a command-line interface for trader interaction.</description>
    </item>
    <item>
      <title>miniFIX Tutorial | Part 05</title>
      <link>https://cryptopatrick.com/blog/2025/09/19/minifix-tutorial-part-05/</link>
      <pubDate>Fri, 19 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2025/09/19/minifix-tutorial-part-05/</guid>
      <description>Modern financial systems often need to work with multiple message formats. While FIX is the standard for electronic trading, many systems also use JSON for APIs, configuration, testing, and integration with web-based interfaces. miniFIX provides seamless conversion between JSON and FIX tag=value formats, enabling flexible system architectures.</description>
    </item>
    <item>
      <title>miniFIX Tutorial | Part 04</title>
      <link>https://cryptopatrick.com/blog/2025/09/18/minifix-tutorial-part-04/</link>
      <pubDate>Thu, 18 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2025/09/18/minifix-tutorial-part-04/</guid>
      <description>While standard FIX specifications (4.0, 4.1, 4.2, 4.4, etc.) cover most trading scenarios, many organizations need custom fields and message types. Exchanges like Coinbase often extend FIX with proprietary fields for their specific business needs. miniFIX supports custom specifications through QuickFIX XML format and provides code generation capabilities to create type-safe Rust definitions.</description>
    </item>
    <item>
      <title>miniFIX Tutorial | Part 03</title>
      <link>https://cryptopatrick.com/blog/2025/09/17/minifix-tutorial-part-03/</link>
      <pubDate>Wed, 17 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2025/09/17/minifix-tutorial-part-03/</guid>
      <description>While decoding FIX messages is essential for processing incoming data, encoding messages is equally important for sending orders, confirmations, and other trading instructions. miniFIX provides a powerful, type-safe encoder that makes creating FIX messages straightforward while maintaining the performance and reliability needed for financial applications.</description>
    </item>
    <item>
      <title>miniFIX Tutorial | Part 02</title>
      <link>https://cryptopatrick.com/blog/2025/09/16/minifix-tutorial-part-02/</link>
      <pubDate>Tue, 16 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2025/09/16/minifix-tutorial-part-02/</guid>
      <description>In real-world trading applications, FIX messages often arrive as continuous streams over network connections. Unlike processing individual complete messages, streaming scenarios require handling partial messages, buffering incomplete data, and parsing messages as they arrive. miniFIX provides excellent support for streaming FIX message decoding.</description>
    </item>
    <item>
      <title>harel</title>
      <link>https://cryptopatrick.com/code/harel/</link>
      <pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/code/harel/</guid>
      <description>&lt;h2 id=&#34;what-it-is&#34;&gt;What it is&lt;/h2&gt;&#xA;&lt;p&gt;David Harel&amp;rsquo;s &lt;strong&gt;statecharts&lt;/strong&gt; extend finite state machines with nested states, parallel regions and history, which makes complex behaviour (a microwave, a traffic light, a voice dialogue) much easier to describe. &lt;strong&gt;SCXML&lt;/strong&gt; is the W3C standard for writing statecharts as XML.&lt;/p&gt;&#xA;&lt;p&gt;harel parses SCXML documents into typed Rust structures (&lt;code&gt;&amp;lt;state&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;parallel&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;final&amp;gt;&lt;/code&gt;, transitions, data model, &lt;code&gt;&amp;lt;invoke&amp;gt;&lt;/code&gt;), checks that they are well formed, and writes them back out as XML.&lt;/p&gt;</description>
    </item>
    <item>
      <title>isu</title>
      <link>https://cryptopatrick.com/code/isu/</link>
      <pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/code/isu/</guid>
      <description>&lt;h2 id=&#34;what-it-is&#34;&gt;What it is&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Information State Update&lt;/strong&gt; (ISU) is a theory of dialogue from computational linguistics: a conversation is a shared &lt;em&gt;information state&lt;/em&gt; (what has been said, what is agreed, which questions are open), and every utterance is a &lt;em&gt;dialogue move&lt;/em&gt; that updates it according to rules. The &lt;strong&gt;IBIS&lt;/strong&gt; model organises the state around the questions under discussion.&lt;/p&gt;&#xA;&lt;p&gt;isu is a Rust implementation of an IBIS-style dialogue manager: domain knowledge (predicates, sorts, individuals), a database interface, plans that say what to find out, and a grammar that maps between text and dialogue moves. It ships with a complete &lt;strong&gt;travel-booking&lt;/strong&gt; example.&lt;/p&gt;</description>
    </item>
    <item>
      <title>miniFIX Tutorial | Part 01</title>
      <link>https://cryptopatrick.com/blog/2025/09/15/minifix-tutorial-part-01/</link>
      <pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2025/09/15/minifix-tutorial-part-01/</guid>
      <description>The Financial Information eXchange (FIX) protocol is the backbone of electronic trading in financial markets. If you&amp;rsquo;re building trading systems in Rust, miniFIX provides a modern, type-safe way to work with FIX messages. In this post, we&amp;rsquo;ll explore how to decode FIX messages using miniFIX&amp;rsquo;s powerful decoding capabilities.</description>
    </item>
    <item>
      <title>miniFIX Tutorial Series</title>
      <link>https://cryptopatrick.com/blog/2025/09/14/minifix-tutorial-series/</link>
      <pubDate>Sun, 14 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2025/09/14/minifix-tutorial-series/</guid>
      <description>Intro to a comprehensive blog post tutorial series covering all aspects of the miniFIX Rust crate, from basic usage to advanced production scenarios.</description>
    </item>
    <item>
      <title>PGF Specification 1.0</title>
      <link>https://cryptopatrick.com/blog/2025/09/05/ai-pgf-specification-1.0/</link>
      <pubDate>Fri, 05 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2025/09/05/ai-pgf-specification-1.0/</guid>
      <description>Just something I read and found interesting.</description>
    </item>
    <item>
      <title>pgf2json</title>
      <link>https://cryptopatrick.com/code/pgf2json/</link>
      <pubDate>Wed, 03 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/code/pgf2json/</guid>
      <description>&lt;h2 id=&#34;what-it-is&#34;&gt;What it is&lt;/h2&gt;&#xA;&lt;p&gt;When the Grammatical Framework compiler builds a grammar, it writes a binary &lt;strong&gt;Portable Grammar Format&lt;/strong&gt; (PGF) file. pgf2json reads that binary format into Rust data structures and converts it into structured JSON: functions, categories and each language&amp;rsquo;s concrete syntax. It can also parse a sentence with the loaded grammar. It is the loading layer underneath &lt;a href=&#34;./code/gf-core/&#34;&gt;gf-core&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;using-it&#34;&gt;Using it&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;use&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;pgf2json&lt;/span&gt;::{&lt;span style=&#34;color:#434f54&#34;&gt;read_pgf&lt;/span&gt;, &lt;span style=&#34;color:#434f54&#34;&gt;pgf_to_json&lt;/span&gt;, &lt;span style=&#34;color:#434f54&#34;&gt;parse&lt;/span&gt;, &lt;span style=&#34;color:#434f54&#34;&gt;language&lt;/span&gt;, &lt;span style=&#34;color:#434f54&#34;&gt;types&lt;/span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#95a5a6&#34;&gt;// Load a compiled grammar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;pgf&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;read_pgf&lt;/span&gt;(&lt;span style=&#34;color:#7f8c8d&#34;&gt;&amp;#34;./grammars/Food.pgf&amp;#34;&lt;/span&gt;)&lt;span style=&#34;color:#728e00&#34;&gt;?&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#95a5a6&#34;&gt;// The whole grammar as JSON&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;json&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;pgf_to_json&lt;/span&gt;(&lt;span style=&#34;color:#728e00&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#434f54&#34;&gt;pgf&lt;/span&gt;)&lt;span style=&#34;color:#728e00&#34;&gt;?&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#95a5a6&#34;&gt;// Parse a sentence with the English concrete syntax&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;lang&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;language&lt;/span&gt;::&lt;span style=&#34;color:#434f54&#34;&gt;read_language&lt;/span&gt;(&lt;span style=&#34;color:#7f8c8d&#34;&gt;&amp;#34;FoodEng&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#434f54&#34;&gt;unwrap&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;typ&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;types&lt;/span&gt;::&lt;span style=&#34;color:#434f54&#34;&gt;start_cat&lt;/span&gt;(&lt;span style=&#34;color:#728e00&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#434f54&#34;&gt;pgf&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#728e00&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;trees&lt;/span&gt; &lt;span style=&#34;color:#728e00&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#434f54&#34;&gt;parse&lt;/span&gt;(&lt;span style=&#34;color:#728e00&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#434f54&#34;&gt;pgf&lt;/span&gt;, &lt;span style=&#34;color:#728e00&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#434f54&#34;&gt;lang&lt;/span&gt;, &lt;span style=&#34;color:#728e00&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#434f54&#34;&gt;typ&lt;/span&gt;, &lt;span style=&#34;color:#7f8c8d&#34;&gt;&amp;#34;this pizza is delicious&amp;#34;&lt;/span&gt;)&lt;span style=&#34;color:#728e00&#34;&gt;?&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ideas-for-using-it&#34;&gt;Ideas for using it&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Inspect a grammar.&lt;/strong&gt; Dump a PGF to JSON to see what a grammar actually contains, which is handy when debugging a grammar written by someone else.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Grammars in the browser.&lt;/strong&gt; Ship the JSON to a web front end and run parsing or generation in JavaScript.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Diff grammar versions.&lt;/strong&gt; JSON makes it easy to compare two compiled versions of a grammar.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;status&#34;&gt;Status&lt;/h2&gt;&#xA;&lt;p&gt;Stable for PGF 1.0. Support for PGF 2.1 is experimental: there is a known format difference still to handle.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Agentic Micro Economy</title>
      <link>https://cryptopatrick.com/blog/2025/08/20/agentic-micro-economy/</link>
      <pubDate>Wed, 20 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2025/08/20/agentic-micro-economy/</guid>
      <description>Just something I read and found interesting.</description>
    </item>
    <item>
      <title>The Time Lock</title>
      <link>https://cryptopatrick.com/blog/2025/01/13/the-time-lock/</link>
      <pubDate>Mon, 13 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2025/01/13/the-time-lock/</guid>
      <description>&lt;!--&#xA;**▶** This short story is a work in progress.&#xA;--&gt;&#xA;&lt;p&gt;&lt;img src=&#34;./img/time-lock-message/rebellion.jpg&#34; alt=&#34;&#34; title=&#34; &#34;&gt;&lt;/p&gt;&#xA;&lt;!--![alt text](/img/rebound.jpg &#34;hello&#34;)--&gt;&#xA;&lt;!--![alt text](/img/orb3.jpg &#34;texasdfasdfat&#34;)--&gt;&#xA;&lt;table&gt;&lt;/table&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Version:&lt;/strong&gt; 0.5.0 Unreleased Draft&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The Rebel Commander never expected the mission to be a walk in the Simulation Park,&#xA;but the current situation was best described as a tactical nightmare&lt;br&gt;&#xA;⠀⠀⠀⠀⠀ - and time&amp;hellip;was running out.&lt;br&gt;&#xA;⠀⠀⠀⠀⠀ &amp;ldquo;Our medical team sure know their shit,&amp;rdquo; the female Sargent&#xA;accross the planning table broke the silence&#xA;, an attempt to  thableacche boasted without&#xA;looking up from the print image.&#xA;⠀⠀⠀⠀⠀ On the table in front of him was a grainy image printout, of a number.&#xA;During the last four hours, the medical team had managed to salvage and extract fragments of a few visual memories from the female Federalist&amp;rsquo;s damaged brain. Most memories were stored in old neuron clusters, encoding what the team interpreted to be childhood memories;&#xA;learning to ride a jetbike, some kind of 1st-in-class trophy, acceptance to the Federation Juvenile Military Academy, and so forth.&lt;br&gt;&#xA;⠀⠀⠀⠀⠀ On the verge of giving up, the Rebel medical team then stumbled on a tiny neuro-cluster, bordering a massive volume of dead neurons. Similar to the &amp;ldquo;childhood memory&amp;rdquo; cluster, this tiny cluster of neurons appeared to encode the aggregate feeling of “pride and accomplishment”. However, in contrast, these neurons had recently been stimulated!, not by the medical team’s nano robots, but by a surge of pure old-fashioned neurotransmitters, presumably to encode a recent and strong sense of accomplishment by the host.&lt;br&gt;&#xA;⠀⠀⠀⠀⠀ The medical team then decided to try a new, but highly controversial, Interogation NeurOp Procedure. They tortured Angela&amp;rsquo;s long-time colleague, Yuhey, and fed the recorded sound of his primal screams straight into her still functional hearing receptors. As expected, these horrific signals triggered a deeply traumatic experience in Angela’s half-dead brain. Her brainstem responded by releasing a massive burst of excitatory neurotransmitters. This in turn gave rise to neural activity in the form of new neural pathways being created in almost every area of her brain which still contained living neurons, to encode potentially life-saving information. With this “trap” in place, the nano robots managed to entice individual neurons in the tiny cluster to connect, and once chemically consolidated, an “interface” into the high-value target memories was complete. The NeurOp had succeeded.&lt;br&gt;&#xA;⠀⠀⠀⠀⠀ Building on top of that breakthrough, the team then relied on 31st century standard&#xA;medical procedures for patients with traumatic brain injury - to map, copy, and&#xA;virtualize the structure, density, and impedance of the cluster.&#xA;Basically creating a biosynthetic 1:1 copy of the memory cluster, which could then be&#xA;rendered &lt;em&gt;back&lt;/em&gt; into the format that triggered the memory encoding in the first place.&#xA;The final result of the entire operation now lay in front of the Rebel commander,&#xA;in the form of a printed image, depicting a number:&lt;br&gt;&#xA;$$\mathsf{691200}$$&lt;/p&gt;</description>
    </item>
    <item>
      <title>Squarings Modulo N per Second</title>
      <link>https://cryptopatrick.com/blog/2024/12/19/squarings-modulo-n-per-second/</link>
      <pubDate>Thu, 19 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2024/12/19/squarings-modulo-n-per-second/</guid>
      <description>A quick, non-scientific, look at how we might estimate the number of squarings modulo n that a computer can perform per second.</description>
    </item>
    <item>
      <title>Block Time-Lock Messages</title>
      <link>https://cryptopatrick.com/blog/2024/12/12/block-time-lock-messages/</link>
      <pubDate>Thu, 12 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2024/12/12/block-time-lock-messages/</guid>
      <description>Exploring how to use Bitcoin block hashes as time-dependent keys for encrypting messages that can only be decrypted after a specific block is mined.</description>
    </item>
    <item>
      <title>Const Generics</title>
      <link>https://cryptopatrick.com/blog/2024/12/06/const-generics/</link>
      <pubDate>Fri, 06 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2024/12/06/const-generics/</guid>
      <description>A look at const generics in Rust, explained through a Dungeons &amp;amp; Dragons magic system analogy.</description>
    </item>
    <item>
      <title>Avalonia UI on MacOS</title>
      <link>https://cryptopatrick.com/blog/2024/10/17/avalonia-ui-on-macos/</link>
      <pubDate>Thu, 17 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2024/10/17/avalonia-ui-on-macos/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Description: How to get Avalonia setup on MacOS (Big Sur).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For VS Code users there&amp;rsquo;s an extension that can help speed up development process. You can find it on the &lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=AvaloniaTeam.vscode-avalonia&#34;&gt;VS Code Extension marketplace&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h1 id=&#34;step-install-net&#34;&gt;Step: Install .NET&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ dotnet new install Avalonia.Templates&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#95a5a6&#34;&gt;# Check installation:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ dotnet --version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;step-install-avalonia&#34;&gt;Step: Install Avalonia&lt;/h1&gt;&#xA;&lt;p&gt;Using the .NET CLI we install the Avalonia UI templates.&#xA;We can install Avalonia project templates with the following command:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cargo Deploy</title>
      <link>https://cryptopatrick.com/blog/2024/09/25/cargo-deploy/</link>
      <pubDate>Wed, 25 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2024/09/25/cargo-deploy/</guid>
      <description>&lt;p&gt;In this post we&amp;rsquo;ll create our own third-party cargo subcommand, &lt;code&gt;cargo deploy&lt;/code&gt;. When we call our command in a Rust project, the command will send a binary to our server at Netlify, and print out the URL in the command line.&#xA;Let&amp;rsquo;s get started.&lt;/p&gt;&#xA;&lt;h2 id=&#34;naming&#34;&gt;Naming&lt;/h2&gt;&#xA;&lt;p&gt;The binary of our command needs to be named &lt;code&gt;cargo-${command}&lt;/code&gt;. In our case we&amp;rsquo;ll name it &lt;code&gt;cargo-deploy&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;placement&#34;&gt;Placement&lt;/h2&gt;&#xA;&lt;p&gt;The binary of our command needs to be stored in &lt;code&gt;~/.cargo/bin&lt;/code&gt;.&#xA;There&amp;rsquo;s an easy way to do this: we simply create the binary (named &lt;code&gt;cargo-deploy&lt;/code&gt;) and then &lt;strong&gt;publish&lt;/strong&gt; it to &lt;code&gt;crates.io&lt;/code&gt;.&#xA;Then, &lt;code&gt;cargo install cargo-deploy&lt;/code&gt; will download and place the binary in &lt;code&gt;~/.cargo/bin&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Logging</title>
      <link>https://cryptopatrick.com/blog/2024/09/25/logging/</link>
      <pubDate>Wed, 25 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2024/09/25/logging/</guid>
      <description>A quick post looking at two ways to do logging in a Rust code-base.</description>
    </item>
    <item>
      <title>Fixed Point Theory</title>
      <link>https://cryptopatrick.com/blog/2024/06/10/fixed-point-theory/</link>
      <pubDate>Mon, 10 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2024/06/10/fixed-point-theory/</guid>
      <description>We start from scratch and try to build our understanding of the most fundamental idea of Fixed Point Theory- &lt;strong&gt;the Banach Contraction Principle&lt;/strong&gt;.</description>
    </item>
    <item>
      <title>gf-core</title>
      <link>https://cryptopatrick.com/code/gf-core/</link>
      <pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/code/gf-core/</guid>
      <description>&lt;h2 id=&#34;what-it-is&#34;&gt;What it is&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.grammaticalframework.org/&#34;&gt;Grammatical Framework&lt;/a&gt; (GF) is a programming language for grammars. You write one &lt;strong&gt;abstract syntax&lt;/strong&gt; (what can be said) and one &lt;strong&gt;concrete syntax&lt;/strong&gt; per language (how it&amp;rsquo;s said). The GF compiler turns them into a PGF file, and a runtime uses that file to &lt;strong&gt;parse&lt;/strong&gt; text into trees and &lt;strong&gt;linearise&lt;/strong&gt; trees back into text, in any of the languages.&lt;/p&gt;&#xA;&lt;p&gt;gf-core is a runtime for those compiled grammars, written in Rust, so GF can be embedded in Rust programs without the Haskell toolchain at run time. It is a runtime only: grammars are still compiled with the official GF compiler.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Solana 101</title>
      <link>https://cryptopatrick.com/blog/2024/04/12/solana-101/</link>
      <pubDate>Fri, 12 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2024/04/12/solana-101/</guid>
      <description>I start by reading the Solana documentation and will see how far I get in building something with Solana.</description>
    </item>
    <item>
      <title>graph_mvcc</title>
      <link>https://cryptopatrick.com/code/graph-mvcc/</link>
      <pubDate>Wed, 30 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/code/graph-mvcc/</guid>
      <description>&lt;h2 id=&#34;what-it-is&#34;&gt;What it is&lt;/h2&gt;&#xA;&lt;p&gt;Databases let many transactions run at once without reading each other&amp;rsquo;s half-finished changes. &lt;strong&gt;Multiversion concurrency control&lt;/strong&gt; (MVCC) does this by keeping several versions of each record: every transaction sees a consistent snapshot from the moment it started, and writes become visible only on commit.&lt;/p&gt;&#xA;&lt;p&gt;graph_mvcc applies that idea to a graph. Nodes and edges are created inside transactions, edges carry a type, and a transaction either commits all its changes or rolls them all back. I wrote about the design in &lt;a href=&#34;./blog/2023/08/20/mvcc-101/&#34;&gt;MVCC 101&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>MVCC 101</title>
      <link>https://cryptopatrick.com/blog/2023/08/20/mvcc-101/</link>
      <pubDate>Sun, 20 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2023/08/20/mvcc-101/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Multiversion_concurrency_control&#34;&gt;MVCC&lt;/a&gt; stands for MultiVersion Concurrency Control.&#xA;It&amp;rsquo;s a way to implement &lt;em&gt;transactional isolation&lt;/em&gt; in any application that needs to manage the &lt;em&gt;state&lt;/em&gt; of &lt;em&gt;data&lt;/em&gt; items.&lt;/p&gt;&#xA;&lt;p&gt;The traditional mechanism for state management in a database is concurrent control using read-write locks. However, this solution is based on &lt;em&gt;blocking&lt;/em&gt; and can create &lt;em&gt;contention&lt;/em&gt;.&#xA;MVCC is &lt;em&gt;not&lt;/em&gt; blocking. This means that multiple clients can read and write simultaneously -  reads do not block other reads and writes do not block other writes or reads.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Graph Database</title>
      <link>https://cryptopatrick.com/blog/2023/07/29/graph-database/</link>
      <pubDate>Sat, 29 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2023/07/29/graph-database/</guid>
      <description>A beginner-oriented post containing a few fundamental concepts, and usually a step-by-step rudimentary example. I&amp;rsquo;m hoping this post will serve as a quick refresher on the covered subject. The content of the post is usually heavily inspired by books and Wiki - my aim is to have a post close at hand if I need to refresh my memory. For proper tutorials and primers - please see other sources on the Internet.</description>
    </item>
    <item>
      <title>REST API</title>
      <link>https://cryptopatrick.com/blog/2022/04/04/rest-api/</link>
      <pubDate>Mon, 04 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://cryptopatrick.com/blog/2022/04/04/rest-api/</guid>
      <description>I recently started using Axum, a web framework for Rust, and I&amp;rsquo;m a fan of it so far. I&amp;rsquo;m writing this post to document my learning process and cover how to build a REST API using Axum as a web framework and SQLx for SQL queries. Let&amp;rsquo;s go!</description>
    </item>
  </channel>
</rss>
