<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Jacob Young - Writing</title>
    <subtitle>Software engineer and founder of Sancho Studio in New York. I help companies make better technical decisions, faster — through technical due diligence, AI engineering, and systems work.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://jry.io/writing/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://jry.io/writing/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-04-20T00:00:00+00:00</updated>
    <id>https://jry.io/writing/atom.xml</id>
    <entry xml:lang="en">
        <title>Use boring languages with LLMs</title>
        <published>2026-04-20T00:00:00+00:00</published>
        <updated>2026-04-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Jacob Young
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jry.io/writing/use-boring-languages-with-llms/"/>
        <id>https://jry.io/writing/use-boring-languages-with-llms/</id>
        
        <content type="html" xml:base="https://jry.io/writing/use-boring-languages-with-llms/">&lt;p&gt;I keep coming back to this idea that consistency compounds. I’ve noticed it acutely as a consultant working on multiple different projects in the last two years. &lt;strong&gt;Large language models amplify inconsistent technology and quietly reinforce consistent ones&lt;&#x2F;strong&gt;. The languages and ecosystems that suffer from the most fragmentation produce the worst agentic output, and the ones with the strongest conventions produce the best. I think this effect will increasingly determine which tool survives in the paradigm of massive models trained on large corpuses.&lt;&#x2F;p&gt;
&lt;p&gt;Even if code is cheap, running inference is a gamble. It’s impossible to know if at any moment the model will make a decision to install a package or produce a bizarre coding pattern from 2019. If we consider that we’re gambling with tokens, we should bet on the set of embeddings which represent strongly consistent and reinforced model weights to produce median output. For software development this is actually ideal as the median program is typically doing the basics: processing information, reading&#x2F;writing files, responding to network requests, etc.&lt;&#x2F;p&gt;
&lt;p&gt;Before AI, engineers complained about languages which reinvented themselves on what felt like an annual basis. These complaints were real but mostly aesthetic and symptomatic of a frustration that humans needed to maintain or keep up with needlessly changing ecosystems.&lt;&#x2F;p&gt;
&lt;p&gt;If we look back, the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;2024.stateofjs.com&#x2F;en-US&#x2F;libraries&#x2F;&quot;&gt;2024 State of JS survey&lt;&#x2F;a&gt; describes a relatively fragmented ecosystem. For a human, fragmentation is annoying. For a model trained on the public corpus of all of it; fragmentation is something closer to a problem which needs to be solved in reinforcement learning or agent harnesses (e.g. Claude Code leaked and showed us that Anthropic hard-coded some bias for JavaScript frameworks).&lt;&#x2F;p&gt;
&lt;p&gt;Python is the same story but sung in a different key. Asking a simple question like “which package manager are you using?” produces a matrix of language versions, package manager version, and OS compatibility which I find to be completely mind-numbing as a technical lead.&lt;&#x2F;p&gt;
&lt;p&gt;Should one use pip, poetry, or uv? Does your toolchain matter, or are you cross-compiling? How do you know if a Python package silently has a link to a C dependency? Are you using async, or have you reached for a task queue instead? Django or FastAPI?&lt;&#x2F;p&gt;












&lt;figure class=&quot;not-prose img-figure my-8&quot;&gt;
  &lt;picture&gt;
    &lt;source
      type=&quot;image&#x2F;webp&quot;
      srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;python_environment_2x.a94450543ac43545.webp 480w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;python_environment_2x.cde47e3827794d21.webp 896w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;python_environment_2x.94f7ca6f9ace9f42.webp 1344w&quot;
      sizes=&quot;(max-width: 768px) 100vw, 896px&quot;
    &#x2F;&gt;
    &lt;img
      src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;python_environment_2x.31c22293018a06a8.png&quot;
      alt=&quot;xkcd 1987: the Python environment mess&quot;
      width=&quot;896&quot;
      height=&quot;887&quot;
      loading=&quot;lazy&quot;
      decoding=&quot;async&quot;
      
      class=&quot;img-photo w-full h-auto rounded-xl&quot;
    &#x2F;&gt;
  &lt;&#x2F;picture&gt;
  
  &lt;figcaption class=&quot;img-caption mt-3 text-center text-sm text-neutral-400&quot;&gt;
    xkcd 1987
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;From a model’s standpoint, there are simply too many ways to write any of this, and the corpus reflects every one of them in roughly equal weight unless recency bias is introduced at training time. What this means is straightforward to me and should be to you as well… &lt;strong&gt;Languages and ecosystems with low variance in their training corpus are represented better and executed more reliably by coding agents.&lt;&#x2F;strong&gt; In higher dimension vector spaces, cosine similarity in the training data is the substrate on which the model’s attention and MLP layers learn to predict the next token. A consistent corpus produces consistent inference tokens.&lt;&#x2F;p&gt;
&lt;p&gt;This pattern holds in other languages. Inference on Rails projects produces more consistent output compared to generic JavaScript backends in agentic work, not because Ruby is a better language in some Platonic sense, but because there is essentially one Rails. There are at least a dozen production-grade JavaScript frameworks offering different Venn diagrams over the same default features. &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rubyonrails.org&#x2F;doctrine&quot;&gt;Convention over configuration&lt;&#x2F;a&gt; was a win for human programmers because &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.windley.com&#x2F;archives&#x2F;2005&#x2F;08&#x2F;flexibility_is.shtml&quot;&gt;flexibility is overrated and constraints are liberating&lt;&#x2F;a&gt;. Twenty years later the same is true for machines, and arguably more so. The model just is solving for which outcome is most likely…&lt;&#x2F;p&gt;
&lt;p&gt;Go embodies this principle best and almost by accident. For years Golang resisted the conveniences and higher-level expressions that programmers kept demanding (generics in particular) and the resistance was deeply unpopular among working developers. I was one of those developers; I have written hundreds of thousands of lines of Go, and as a programmer I found the language often infuriating.&lt;&#x2F;p&gt;
&lt;p&gt;I know some of the people on the Golang team and admire their &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;go.dev&#x2F;doc&#x2F;go1compat&quot;&gt;headstrong commitment to the future of programs&lt;&#x2F;a&gt;. I have come to think Google produced, mostly inadvertently, the best language in the world for this moment. Out of the box, Go gives an agent a set of advantages no other mainstream language provides in the same combination.&lt;&#x2F;p&gt;
&lt;p&gt;The concurrency model is the first of these. Goroutines are a far more tractable primitive for coding agents than threads, callbacks, async&#x2F;await, or any of the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;journal.stuffwithstuff.com&#x2F;2015&#x2F;02&#x2F;01&#x2F;what-color-is-your-function&#x2F;&quot;&gt;colored-function&lt;&#x2F;a&gt; regimes that dominate elsewhere. They are simple, type-safe, and ubiquitously used in the corpus the model was trained on. There is no question of what color your function is, because the question does not exist.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;results&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; make&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;chan string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; len&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;urls&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; _&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt; urls&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    go func&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        resp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span&gt; http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;Get&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F38BA8;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            results&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;lt;-&lt;&#x2F;span&gt;&lt;span&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;Error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;            return&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        defer&lt;&#x2F;span&gt;&lt;span&gt; resp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Body&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;Close&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        results&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;lt;-&lt;&#x2F;span&gt;&lt;span&gt; resp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Status&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;    }(&lt;&#x2F;span&gt;&lt;span&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;for range&lt;&#x2F;span&gt;&lt;span&gt; urls&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fmt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;Println&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;&amp;lt;-&lt;&#x2F;span&gt;&lt;span&gt;results&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The standard library is the second. &lt;code&gt;net&#x2F;http&lt;&#x2F;code&gt; alone runs a non-trivial fraction of the internet’s microservices, and the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pkg.go.dev&#x2F;crypto&quot;&gt;cryptography packages&lt;&#x2F;a&gt; (funded and maintained by Google) are world-class. I have shipped production systems at Zoom and Keybase that depended on these defaults and never once needed to reach outside them.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;package&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt; main&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; (&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;    &amp;quot;fmt&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;    &amp;quot;net&#x2F;http&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;func&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; main&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;HandleFunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&#x2F;healthz&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; func&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt;w&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt; http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt;ResponseWriter&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt; r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt;http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt;Request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        fmt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;Fprintln&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;w&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;ok&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;    })&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;ListenAndServe&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;:8080&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F38BA8;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The toolchain is the third, and possibly the most underrated. Go has, by design, one right way to do most things: &lt;code&gt;gofmt&lt;&#x2F;code&gt;, &lt;code&gt;go vet&lt;&#x2F;code&gt;, and now &lt;code&gt;go fix&lt;&#x2F;code&gt; enforce a single canonical style with no negotiation. The best possible combination for a language model is a consistent corpus to train on, plus one-right-way tooling for testing and feedback at runtime. &lt;code&gt;gopls&lt;&#x2F;code&gt; is a fantastic guardrail for agents because it provides real-time semantic feedback, and &lt;code&gt;golangci-lint&lt;&#x2F;code&gt; lets you statically enforce coding styles and primitives without having to prompt the agent into compliance.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; go vet .&#x2F;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;.&#x2F;user.go:22:2:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; result of fmt.Errorf call not used&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;.&#x2F;user.go:38:9:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; declaration of &amp;quot;err&amp;quot; shadows declaration at line&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 34&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; golangci-lint run&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;user.go:51:6:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; exported func LoadUser should have comment&lt;&#x2F;span&gt;&lt;span&gt; (revive)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;user.go:63:3:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; if block ends with return, drop this else&lt;&#x2F;span&gt;&lt;span&gt; (golint)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The fourth advantage is performance with garbage collection. Language models are inconsistent in managing memory; this is a well-documented limitation, and not one that is going away soon. Rust enforces memory safety at the type and borrow-checking level, which is excellent for humans and a constant fight for agents. Writing C or C++ with a coding agent is harder still, because the training data is full of memory bugs, use-after-free errors, and decades of hard-won mistakes that the model is just as capable of reproducing as it is of avoiding. Go gives you native-like performance without asking the agent to manage memory directly.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;func&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; parseLines&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt; io&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt;Reader&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;) []&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    var&lt;&#x2F;span&gt;&lt;span&gt; out&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; []&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span&gt; bufio&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;NewScanner&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;Scan&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        out&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; append&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;out&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;Text&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; out&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The fifth is the small, known set of footguns. &lt;code&gt;nil&lt;&#x2F;code&gt; pointers can be difficult to trace down in production stack traces for human engineers, given the right tools agents are surprisingly good at it. The set of things that can go wrong in idiomatic Go is bounded in a way that the set of things that can go wrong in, say, Python with arbitrary metaclasses simply is not.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;data&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span&gt; os&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;ReadFile&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;path&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F38BA8;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; fmt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;Errorf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;read config %q: %w&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; path&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Reading this, the right reaction is not “Go is the best language” but something more specific. &lt;strong&gt;This language and toolchain can write the majority of non-visual software a working engineer would want.&lt;&#x2F;strong&gt; Consider using Go with an agent to build the next CLI, backend server, agent orchestrator.&lt;&#x2F;p&gt;
&lt;p&gt;If any of this resonated with you, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sancho.studio&#x2F;contact&quot;&gt;get in touch&lt;&#x2F;a&gt; If you’re looking for a technical lead to help your team deliver consistently&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Is all software converging</title>
        <published>2026-04-05T00:00:00+00:00</published>
        <updated>2026-04-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Jacob Young
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jry.io/writing/is-all-software-converging/"/>
        <id>https://jry.io/writing/is-all-software-converging/</id>
        
        <content type="html" xml:base="https://jry.io/writing/is-all-software-converging/">&lt;p&gt;We are living through a great convergence of software tooling. Tools that used to be distinct: a code editor, a project management suite, a design canvas - are all melting into a single, agentic slurry.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;linear.app&#x2F;next&quot;&gt;Linear declared issue tracking dead&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.figma.com&#x2F;blog&#x2F;the-figma-canvas-is-now-open-to-agents&#x2F;&quot;&gt;Figma opened its canvas to coding agents&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.notion.com&#x2F;releases&#x2F;2026-02-24&quot;&gt;Notion shipped autonomous Custom Agents&lt;&#x2F;a&gt; all within weeks of each other, all using nearly identical language. If you squint, everything is beginning to look like everything else.&lt;&#x2F;p&gt;
&lt;p&gt;This is not slop. There are a lot of bright people working on these problems. It seems that the incentive structure (n.b. investors, market) expects an adapt-or-die approach to AI. So firms respond to changing technology, selective forces don’t always select for novelty.&lt;&#x2F;p&gt;
&lt;p&gt;Why is so much software starting to offer exactly the same functionality - chat boxes and agents?&lt;&#x2F;p&gt;







&lt;figure class=&quot;not-prose img-carousel-figure my-8&quot; id=&quot;carousel-1&quot; tabindex=&quot;0&quot;&gt;
  
  &lt;div class=&quot;img-carousel relative overflow-hidden rounded-xl&quot; role=&quot;region&quot; aria-label=&quot;Image carousel&quot; aria-roledescription=&quot;carousel&quot;&gt;
    
    &lt;div class=&quot;img-carousel-track flex transition-transform duration-300 ease-out motion-reduce:transition-none&quot; style=&quot;transform: translateX(0%);&quot;&gt;
      
        
        
        

        
        
        
        

        &lt;div class=&quot;img-carousel-slide w-full flex-shrink-0&quot; role=&quot;group&quot; aria-roledescription=&quot;slide&quot; aria-label=&quot;Slide 1 of 3&quot;&gt;
          &lt;picture&gt;
            &lt;source
              type=&quot;image&#x2F;webp&quot;
              srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;posthog.9b4237d3950c6006.webp 480w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;posthog.7a64aeaf8ed7b027.webp 896w&quot;
              sizes=&quot;(max-width: 768px) 100vw, 896px&quot;
            &#x2F;&gt;
            &lt;img
              src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;posthog.05c3b00513fb60c3.png&quot;
              alt=&quot;PostHog&amp;#x27;s AI assistant - What can I help you with?&quot;
              width=&quot;896&quot;
              height=&quot;750&quot;
              loading=&quot;eager&quot;
              decoding=&quot;async&quot;
              class=&quot;img-photo w-full h-auto&quot;
            &#x2F;&gt;
          &lt;&#x2F;picture&gt;
        &lt;&#x2F;div&gt;
      
        
        
        

        
        
        
        

        &lt;div class=&quot;img-carousel-slide w-full flex-shrink-0&quot; role=&quot;group&quot; aria-roledescription=&quot;slide&quot; aria-label=&quot;Slide 2 of 3&quot;&gt;
          &lt;picture&gt;
            &lt;source
              type=&quot;image&#x2F;webp&quot;
              srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;notion.26d4b59232046b1b.webp 480w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;notion.4a913d22c73502f1.webp 896w&quot;
              sizes=&quot;(max-width: 768px) 100vw, 896px&quot;
            &#x2F;&gt;
            &lt;img
              src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;notion.74d7fd9a75f98260.png&quot;
              alt=&quot;Notion&amp;#x27;s AI agent - On call and ready, how can I help?&quot;
              width=&quot;896&quot;
              height=&quot;675&quot;
              loading=&quot;lazy&quot;
              decoding=&quot;async&quot;
              class=&quot;img-photo w-full h-auto&quot;
            &#x2F;&gt;
          &lt;&#x2F;picture&gt;
        &lt;&#x2F;div&gt;
      
        
        
        

        
        
        
        

        &lt;div class=&quot;img-carousel-slide w-full flex-shrink-0&quot; role=&quot;group&quot; aria-roledescription=&quot;slide&quot; aria-label=&quot;Slide 3 of 3&quot;&gt;
          &lt;picture&gt;
            &lt;source
              type=&quot;image&#x2F;webp&quot;
              srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;linear.3cbf21423510f02d.webp 480w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;linear.63a3915be0c0e381.webp 896w&quot;
              sizes=&quot;(max-width: 768px) 100vw, 896px&quot;
            &#x2F;&gt;
            &lt;img
              src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;linear.fe9d7e0597de03c7.png&quot;
              alt=&quot;Linear&amp;#x27;s new agentic interface - Ask anything or tell Linear what you need&quot;
              width=&quot;896&quot;
              height=&quot;631&quot;
              loading=&quot;lazy&quot;
              decoding=&quot;async&quot;
              class=&quot;img-photo w-full h-auto&quot;
            &#x2F;&gt;
          &lt;&#x2F;picture&gt;
        &lt;&#x2F;div&gt;
      
    &lt;&#x2F;div&gt;

    
    &lt;button
      class=&quot;img-carousel-btn absolute left-3 top-1&#x2F;2 -translate-y-1&#x2F;2 flex items-center justify-center rounded-full border border-white&#x2F;10 bg-black&#x2F;50 backdrop-blur-sm p-2 text-white&#x2F;70 transition-all duration-200 hover:bg-black&#x2F;70 hover:text-white hover:border-orange-500&#x2F;30 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-2&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      aria-label=&quot;Previous slide&quot;
      data-carousel-prev
    &gt;
      &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; class=&quot;shrink-0&quot;&gt;
        &lt;polyline points=&quot;12,15 7,10 12,5&quot; &#x2F;&gt;
      &lt;&#x2F;svg&gt;
    &lt;&#x2F;button&gt;

    
    &lt;button
      class=&quot;img-carousel-btn absolute right-3 top-1&#x2F;2 -translate-y-1&#x2F;2 flex items-center justify-center rounded-full border border-white&#x2F;10 bg-black&#x2F;50 backdrop-blur-sm p-2 text-white&#x2F;70 transition-all duration-200 hover:bg-black&#x2F;70 hover:text-white hover:border-orange-500&#x2F;30 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-2&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      aria-label=&quot;Next slide&quot;
      data-carousel-next
    &gt;
      &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; class=&quot;shrink-0&quot;&gt;
        &lt;polyline points=&quot;8,5 13,10 8,15&quot; &#x2F;&gt;
      &lt;&#x2F;svg&gt;
    &lt;&#x2F;button&gt;

    
    &lt;div class=&quot;img-carousel-hint pointer-events-none absolute bottom-4 left-1&#x2F;2 -translate-x-1&#x2F;2 flex items-center gap-1.5 rounded-full border border-white&#x2F;10 bg-black&#x2F;50 backdrop-blur-sm px-3 py-1.5 text-xs text-white&#x2F;50 opacity-0 transition-opacity duration-300 md:hidden&quot; aria-hidden=&quot;true&quot;&gt;
      &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 16 16&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.5&quot; stroke-linecap=&quot;round&quot; aria-hidden=&quot;true&quot; class=&quot;shrink-0&quot;&gt;&lt;path d=&quot;M3 8h10M10 5l3 3-3 3&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
      swipe
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;

  
  &lt;div class=&quot;flex justify-center gap-2 mt-4&quot; aria-label=&quot;Carousel slide indicators&quot;&gt;
    
    &lt;button
      class=&quot;img-carousel-dot h-2 w-2 rounded-full transition-all duration-200 hover:bg-orange-500&#x2F;40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-1 img-carousel-dot--active&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      aria-current=&quot;true&quot;
      aria-label=&quot;Go to slide 1&quot;
      data-carousel-dot=&quot;0&quot;
    &gt;&lt;&#x2F;button&gt;
    
    &lt;button
      class=&quot;img-carousel-dot h-2 w-2 rounded-full transition-all duration-200 hover:bg-orange-500&#x2F;40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-1 bg-white&#x2F;10 border border-white&#x2F;20&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      
      aria-label=&quot;Go to slide 2&quot;
      data-carousel-dot=&quot;1&quot;
    &gt;&lt;&#x2F;button&gt;
    
    &lt;button
      class=&quot;img-carousel-dot h-2 w-2 rounded-full transition-all duration-200 hover:bg-orange-500&#x2F;40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-1 bg-white&#x2F;10 border border-white&#x2F;20&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      
      aria-label=&quot;Go to slide 3&quot;
      data-carousel-dot=&quot;2&quot;
    &gt;&lt;&#x2F;button&gt;
    
  &lt;&#x2F;div&gt;

  
  &lt;span class=&quot;sr-only&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot; data-carousel-live&gt;Slide 1 of 3&lt;&#x2F;span&gt;

  
  &lt;figcaption class=&quot;img-caption mt-3 text-center text-sm text-neutral-400&quot;&gt;
    Applications are putting chat front and center
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;script&gt;
(function() {
  var root = document.getElementById(&#x27;carousel-1&#x27;);
  if (!root) return;

  var track = root.querySelector(&#x27;.img-carousel-track&#x27;);
  var slides = root.querySelectorAll(&#x27;.img-carousel-slide&#x27;);
  var dots = root.querySelectorAll(&#x27;.img-carousel-dot&#x27;);
  var prevBtn = root.querySelector(&#x27;[data-carousel-prev]&#x27;);
  var nextBtn = root.querySelector(&#x27;[data-carousel-next]&#x27;);
  var hint = root.querySelector(&#x27;.img-carousel-hint&#x27;);
  var live = root.querySelector(&#x27;[data-carousel-live]&#x27;);
  var total = slides.length;
  var current = 0;
  var startX = 0;
  var deltaX = 0;
  var dragging = false;
  var reduceMotion = window.matchMedia &amp;&amp; window.matchMedia(&#x27;(prefers-reduced-motion: reduce)&#x27;).matches;

  if (reduceMotion) {
    track.style.transition = &#x27;none&#x27;;
  }

  function goTo(index) {
    current = ((index % total) + total) % total;
    track.style.transform = &#x27;translateX(-&#x27; + (current * 100) + &#x27;%)&#x27;;
    dots.forEach(function(dot, i) {
      var isActive = i === current;
      dot.classList.toggle(&#x27;img-carousel-dot--active&#x27;, isActive);
      dot.classList.toggle(&#x27;bg-white&#x2F;10&#x27;, !isActive);
      dot.classList.toggle(&#x27;border&#x27;, !isActive);
      dot.classList.toggle(&#x27;border-white&#x2F;20&#x27;, !isActive);
      if (isActive) {
        dot.setAttribute(&#x27;aria-current&#x27;, &#x27;true&#x27;);
      } else {
        dot.removeAttribute(&#x27;aria-current&#x27;);
      }
    });
    if (live) live.textContent = &#x27;Slide &#x27; + (current + 1) + &#x27; of &#x27; + total;
    if (hint) hint.style.opacity = &#x27;0&#x27;;
  }

  prevBtn.addEventListener(&#x27;click&#x27;, function() { goTo(current - 1); });
  nextBtn.addEventListener(&#x27;click&#x27;, function() { goTo(current + 1); });

  dots.forEach(function(dot) {
    dot.addEventListener(&#x27;click&#x27;, function() {
      goTo(parseInt(dot.dataset.carouselDot, 10));
    });
  });

  &#x2F;&#x2F; Keyboard navigation
  root.addEventListener(&#x27;keydown&#x27;, function(e) {
    if (e.key === &#x27;ArrowLeft&#x27;) { goTo(current - 1); e.preventDefault(); }
    if (e.key === &#x27;ArrowRight&#x27;) { goTo(current + 1); e.preventDefault(); }
  });

  &#x2F;&#x2F; Touch &#x2F; swipe
  track.addEventListener(&#x27;touchstart&#x27;, function(e) {
    startX = e.touches[0].clientX;
    dragging = true;
    track.style.transition = &#x27;none&#x27;;
  }, { passive: true });

  track.addEventListener(&#x27;touchmove&#x27;, function(e) {
    if (!dragging) return;
    deltaX = e.touches[0].clientX - startX;
    var offset = -(current * 100) + (deltaX &#x2F; track.offsetWidth) * 100;
    track.style.transform = &#x27;translateX(&#x27; + offset + &#x27;%)&#x27;;
  }, { passive: true });

  track.addEventListener(&#x27;touchend&#x27;, function() {
    if (!dragging) return;
    dragging = false;
    track.style.transition = reduceMotion ? &#x27;none&#x27; : &#x27;&#x27;;
    var threshold = track.offsetWidth * 0.2;
    if (deltaX &lt; -threshold) goTo(current + 1);
    else if (deltaX &gt; threshold) goTo(current - 1);
    else goTo(current);
    deltaX = 0;
  });

  &#x2F;&#x2F; Show swipe hint on touch devices
  if (hint &amp;&amp; &#x27;ontouchstart&#x27; in window) {
    setTimeout(function() { hint.style.opacity = &#x27;1&#x27;; }, 500);
    setTimeout(function() { hint.style.opacity = &#x27;0&#x27;; }, 3000);
  }
})();
&lt;&#x2F;script&gt;
&lt;p&gt;At 10,000 ft, agentic coding tools like Claude Code, Codex, Conductor are all offering some variation of a model in a loop. Sometimes exactly the same model with a differing UI. The cost to copy those UIs is rapidly approaching zero.&lt;&#x2F;p&gt;
&lt;p&gt;At 5,000 ft, old tools are rebranding as new tools. Notion was a team wiki and dynamic database, now it’s a team of agents on top of a wiki. Linear used to be an issue tracking tool, now it’s a team of agents on top of an issue tracking tool.&lt;&#x2F;p&gt;
&lt;p&gt;At 1,000 ft small software is also converging. Every morning there is a new orchestrator or agent sandbox launched on X. Sometimes big players like Vercel will smoke a frog between the hours of 1AM and 4 AM PST and launch “the future of apps” the next morning. Rinse and repeat.&lt;&#x2F;p&gt;
&lt;p&gt;As models get better, the marginal cost of deploying “intelligence” will approaching zero. The technology and its interface get applied to everything. Yes there are costs - token costs - but they are pennies on the human-dollar.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rhythms-in-convergence&quot;&gt;Rhythms in convergence&lt;&#x2F;h3&gt;
&lt;p&gt;Seeing this convergence reminded me of the Industrial Revolution. &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;quoteinvestigator.com&#x2F;2014&#x2F;01&#x2F;12&#x2F;history-rhymes&#x2F;&quot;&gt;The past does not repeat itself, but it rhymes&lt;&#x2F;a&gt; - Industrialization converted a massive amount of production from craft-based (i.e. human) to machine-based (i.e. mechanized factories). “Ready to Wear” clothing revolution changed humanity’s relationship to clothing. Before the mid-1800s almost all clothing was bespoke. Tailors, tanners, hand stitching.&lt;&#x2F;p&gt;
&lt;p&gt;Cheap, mass produced garments are ubiquitous today. So much so that most people don’t know anyone who knows anyone who can make a garment entirely from raw materials, let alone individual artisans who specialize in roles in the production process.&lt;&#x2F;p&gt;







&lt;figure class=&quot;not-prose img-pair-figure my-8&quot;&gt;
  &lt;div class=&quot;grid grid-cols-1 md:grid-cols-2 gap-3&quot;&gt;
    
      
      
      
        
      

      
      
      
      

      &lt;picture&gt;
        &lt;source
          type=&quot;image&#x2F;webp&quot;
          srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;spinning-wheel.56dd27f7adc51150.webp 400w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;spinning-wheel.8b571ad2d99b1e3a.webp 480w&quot;
          sizes=&quot;(max-width: 768px) 100vw, 480px&quot;
        &#x2F;&gt;
        &lt;img
          src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;spinning-wheel.ab115a28e21c9dd4.png&quot;
          alt=&quot;The spinning wheel was a pre-industrial tool for domestic production of clothing&quot;
          width=&quot;480&quot;
          height=&quot;389&quot;
          loading=&quot;lazy&quot;
          decoding=&quot;async&quot;
          
          class=&quot;img-photo w-full h-full object-cover rounded-xl&quot;
        &#x2F;&gt;
      &lt;&#x2F;picture&gt;
    
      
      
      
        
      

      
      
      
      

      &lt;picture&gt;
        &lt;source
          type=&quot;image&#x2F;webp&quot;
          srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;spinning-mule.6e53e85eeb9fa964.webp 400w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;spinning-mule.1a7ee5c7c3fc66d6.webp 480w&quot;
          sizes=&quot;(max-width: 768px) 100vw, 480px&quot;
        &#x2F;&gt;
        &lt;img
          src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;spinning-mule.8b055ac4ba5593b9.png&quot;
          alt=&quot;The Industrial Revolution eventually converted the spinning wheel into the Spinning Mule&quot;
          width=&quot;480&quot;
          height=&quot;317&quot;
          loading=&quot;lazy&quot;
          decoding=&quot;async&quot;
          
          class=&quot;img-photo w-full h-full object-cover rounded-xl&quot;
        &#x2F;&gt;
      &lt;&#x2F;picture&gt;
    
  &lt;&#x2F;div&gt;
  
  &lt;figcaption class=&quot;img-caption mt-3 text-center text-sm text-neutral-400&quot;&gt;
    From the spinning wheel to the Spinning Mule — industrialization at work.
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;One of the great benefits to industrialization is abundance, but it also comes with waste and conformity as the cost to produce plummets. Software is going through an industrialization process - machines are producing computer code which is producing software. Vibe coding produces software yes, but on average we call it slop.&lt;&#x2F;p&gt;
&lt;p&gt;The software is becoming “&lt;strong&gt;Ready to Use&lt;&#x2F;strong&gt;”. Every tool has a chat box, a helpful assistant, and maybe actions it can take. &lt;strong&gt;The Universal Interface&lt;&#x2F;strong&gt; as I’ll call it.&lt;&#x2F;p&gt;
&lt;p&gt;I predict that the Universal Interface will be everywhere. Your grocery delivery app will have an agentic interface to curate your delivery. Your dog walking app will have an agentic interface to schedule your walker. Your dating app will have an agent interface to find you a mate.&lt;&#x2F;p&gt;
&lt;p&gt;This type of ‘chatification’ of every software tool is cheap, lacks character, and is a minimization of effort. Why build specialized tools when we can throw one massive omni-tool at it? Both standardized clothing and now Ready to Use software are undoubtedly innovative. We lost our craft of tools and our culture around process along the way.&lt;&#x2F;p&gt;
&lt;p&gt;The danger of this convergence is not that it’s boring (it totally is). It’s that it constrains how we think. Typing on a keyboard versus writing by hand &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pmc.ncbi.nlm.nih.gov&#x2F;articles&#x2F;PMC8222525&#x2F;&quot;&gt;changes how you think&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tools-are-thought&quot;&gt;Tools are thought&lt;&#x2F;h3&gt;
&lt;p&gt;Recall a transition in thought that none of us lived through: the move from Roman numerals to Arabic numerals. If your aspirations in life were to count sheep, &lt;code&gt;LXXXVIII&lt;&#x2F;code&gt; was just fine. Trying to divide those sheep into groups of &lt;code&gt;XIX&lt;&#x2F;code&gt; was a lot harder. The tool limits the thought. Rome had the notion of nothing - &lt;em&gt;nihil&lt;&#x2F;em&gt; - but no notion of the number zero. The number zero is a revolution in thought as much as it is in notation.&lt;&#x2F;p&gt;
&lt;p&gt;The antidote to this convergence is more &lt;strong&gt;character (n. the mental and moral qualities distinctive to an individual).&lt;&#x2F;strong&gt; Be outlandish, inquisitive, divergent - all to explore what it means to create tools in our own image. I’m not so sure that agentic tools are created in our image or even help us think new or different thoughts.&lt;&#x2F;p&gt;
&lt;p&gt;Tools might hold an emotional place in your life. It may have been a camera, or a piano, or a laptop (for me it was a bicycle). The things we create with tools define us and can be seen in the style of a film, or the resonance of a piece of music. Our creations define our species, and the tools used to create are equally important in both the myth and novelty of those creations.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tools-are-expression&quot;&gt;Tools are expression&lt;&#x2F;h3&gt;
&lt;p&gt;This reminds me of something Johann Wolfgang von Goethe wrote in his novel &lt;em&gt;Wilhelm Meister’s Apprenticeship&lt;&#x2F;em&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“A man should hear a little music, read a little poetry, and see a fine picture every day of his life, in order that worldly cares may not obliterate the sense of the beautiful which God has implanted in the human soul.”&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;In the story, the theater manager Serlo offers this advice to young Wilhelm Meister as he navigates the tension between his mundane commercial duties and his artistic calling, implying that unless we intentionally curate beauty, the sheer weight of “being useful” will inevitably erode our capacity for wonder.&lt;&#x2F;p&gt;
&lt;p&gt;Goethe wasn’t just talking about being a “cultured” person. He was talking about &lt;strong&gt;survival&lt;&#x2F;strong&gt;. He was warning us that the “worldly cares” (the chores, the productivity, the “agents”, the endless copying of the same clothing and condiments) will eventually scorch out our ability to feel the soul because our creations are cheap, easy, and ultimately meaningless.&lt;&#x2F;p&gt;
&lt;p&gt;Is everyone just copying each other? Mostly, yes. Because it’s easy and there’s intense competitive pressure to do so during times of new technology. Natural selection doesn’t always select for the ideal traits - just the ones necessary to survive. Perhaps that’s where we are with tool making.&lt;&#x2F;p&gt;
&lt;p&gt;Special thanks to Sophie, Greg, and Michael for reviewing and editing this writing.&lt;&#x2F;p&gt;
&lt;details&gt;
&lt;summary&gt;Epilogue - Divergent contributions&lt;&#x2F;summary&gt;
&lt;p&gt;My father sent me the Goethe quote this morning which prompted me to write this. He runs a company that sits between writing and technology. He’s always been an admirer of the arts be it visual or literary. It’s helpful to process the work done by thinkers before us - take what we can and leave the rest.&lt;&#x2F;p&gt;
&lt;p&gt;Also this week, a disappointing interaction meeting the CEO of a startup. I expressed concerns about the effects of AI on labor, society, and income inequality. The response I got was “we’ll have all these new friends to talk to”. &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.darioamodei.com&#x2F;essay&#x2F;the-adolescence-of-technology&quot;&gt;If we create a country of geniuses in a data center&lt;&#x2F;a&gt; hopefully we can solve critical frontier science - which would benefit all of humanity…&lt;&#x2F;p&gt;
&lt;p&gt;By definition it would also make human brains as obsolete as the cow’s brain.&lt;&#x2F;p&gt;
&lt;p&gt;I expressed that the humanities are a study of the human condition and can teach us a lot about new technologies. The response I received was “the humanities don’t know anything about technology”.&lt;&#x2F;p&gt;
&lt;p&gt;It broke my heart to hear that. Philosophy is categorized in the humanities. Some of the best scientific thinkers were philosophers first. The humanities are the study of ourselves by ourselves.&lt;&#x2F;p&gt;
&lt;&#x2F;details&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>You Are Not Your Job</title>
        <published>2026-03-22T00:00:00+00:00</published>
        <updated>2026-03-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Jacob Young
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jry.io/writing/you-are-not-your-job/"/>
        <id>https://jry.io/writing/you-are-not-your-job/</id>
        
        <content type="html" xml:base="https://jry.io/writing/you-are-not-your-job/">&lt;p&gt;Saying “I am a software engineer” is beginning to feel like saying “&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wikiwand.com&#x2F;en&#x2F;Computer_(occupation)&quot;&gt;I am a calculator&lt;&#x2F;a&gt;” in 1950 now that digital machines can use electrical circuits to count, add, multiply - &lt;em&gt;it’s not long until they’ll be able differentiate a non-continuous function&lt;&#x2F;em&gt;… You’re beginning to feel less-than-useful.&lt;&#x2F;p&gt;
&lt;p&gt;This bothers a lot of people for a reason (I think) that has nothing to do with the technology. The fear isn’t really about losing a job title, it’s about &lt;strong&gt;losing the story you tell yourself about who you are&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;It’s worth reminding ourselves of how narrative plays a role in this transition. We’re the storytelling species. We wake up and narrate ourselves into existence. “I am a software engineer”. “I am a doctor”. “I am a teacher”.&lt;&#x2F;p&gt;
&lt;p&gt;These statements feel like facts, but they’re fictions we’ve constructed and believed so thoroughly that we can’t separate them from our actual selves. Our ability to believe our own stories is called &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wikiwand.com&#x2F;en&#x2F;Homo_narrans&quot;&gt;the secret of our species’ success&lt;&#x2F;a&gt;. Collectively we use our stories to build societies, culture, religion — on our own, we use our labor to build identity.&lt;&#x2F;p&gt;
&lt;p&gt;Half your life is spent working. It’s reasonable that we build a self around it. In fact it’s effortless. At its core, identifying by our labor is a silent assertion that “I am what I do” which is no more true than “I am what I eat”.&lt;&#x2F;p&gt;
&lt;p&gt;I like &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.cell.com&#x2F;trends&#x2F;cognitive-sciences&#x2F;abstract&#x2F;S1364-6613(06)00329-9&quot;&gt;Susan Fiske’s&lt;&#x2F;a&gt; research on how humans judge each other shows something worth sitting with. When you meet someone, you assess them on two dimensions. The first is warmth - do you believe they mean you well? The second is competence - do you believe they’re capable?&lt;&#x2F;p&gt;
&lt;p&gt;The order matters. You evaluate someone’s warmth first to gauge their intent before ability. Before you even care whether someone can do something, you need to know “will this person hurt or help me”?&lt;&#x2F;p&gt;
&lt;p&gt;My technical skills are being disrupted by machines - that’s fine I’ll go do other things. Being replaced is what is “supposed to happen”. We don’t mourn the telephone operator. We don’t build statues for bank tellers.&lt;&#x2F;p&gt;
&lt;p&gt;Capitalism is a machine for maximizing the allocation of money to extract resources to produce value - automating away human labor happens in the process because human are expensive and inefficient.&lt;&#x2F;p&gt;
&lt;p&gt;Thus far we have automated away “wasteful” or “unnecessary” jobs. Perhaps the elevator operator was your friend, someone you saw everyday. I’m not certain their purpose was “useless”. They’re gone nonetheless.&lt;&#x2F;p&gt;
&lt;p&gt;This is the whole point of the system. Yes, we don’t want humans hand-churning butter forever so unemployment numbers are at zero - hooray?&lt;&#x2F;p&gt;
&lt;p&gt;Your material needs and wellbeing are important, make no mistake. Whether or not you are taken care of is entirely in the realm of the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wikiwand.com&#x2F;en&#x2F;The_Social_Contract&quot;&gt;social contract&lt;&#x2F;a&gt;, politics, and human governance. We possess the means to care for everyone – yet choose not to. It is hard for humanity to look in the mirror.&lt;&#x2F;p&gt;
&lt;p&gt;Whether you do well through an economic transition or not has little to do with the cause (AI, digital technology, industrialization, coal), and more to do with the social and political structures which exist around you (which is a blog post for another day).&lt;&#x2F;p&gt;
&lt;p&gt;But warmth. Empathy. The ability to sit with someone in their confusion and make them feel understood. The ability to crack a joke at exactly the right moment and remind someone that they’re not alone. The capacity to be fully present with another person, to see them not as a role they’re playing but as a whole human being… that cannot be automated away and hopefully never will.&lt;&#x2F;p&gt;
&lt;p&gt;Your existence is a measurement of your relationships to the people and world around you. &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wikiwand.com&#x2F;en&#x2F;Martin_Buber&quot;&gt;Buber&lt;&#x2F;a&gt; wrote about “&lt;strong&gt;I-It”&lt;&#x2F;strong&gt; and “&lt;strong&gt;I-You”&lt;&#x2F;strong&gt; relationships, (&lt;em&gt;Ich-Du&lt;&#x2F;em&gt; in german). An “I-It” relationship treats the other person as an object, a function, something to be used. A doctor in an I-It relationship with their patient is fixing a broken thing. A software engineer in an I-It relationship with their coworkers is just executing tasks. An I-You relationship is mutual and real. The other person isn’t a role or a function. They’re a whole self. Buber said human life finds its meaningfulness in those relationships. It is in how you relate, not in what you produce, which has meaning.&lt;&#x2F;p&gt;
&lt;p&gt;When Bronnie Ware &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wikiwand.com&#x2F;en&#x2F;The_Top_Five_Regrets_of_the_Dying&quot;&gt;interviewed people&lt;&#x2F;a&gt; at the end of their lives, she asked them about their regrets. The clearest pattern wasn’t hard to see. Nobody was lying on their deathbed wishing they’d earned more money or accomplished more.&lt;&#x2F;p&gt;
&lt;p&gt;The regrets were about relationships. Not staying in touch with friends. Not expressing what they felt. Working too hard. Not living true to themselves. The people who were dying weren’t grieving their lost productivity.&lt;&#x2F;p&gt;
&lt;p&gt;You could read all this and think, okay, relationships matter, I should be nicer to people. That’s not quite the point. The point is that your value to the people around you - the actual people in your life - has nothing to do with your job title. It has nothing to do with your technical skill or your ability to produce or your career advancement.&lt;&#x2F;p&gt;
&lt;p&gt;The people who love you don’t love you because you’re good at your job. They love you because of something else entirely. Maybe it’s your humor. Maybe it’s that you actually listen. Maybe it’s that you remember things about their lives and ask about them. Maybe it’s simply that you show up. You’re present. You don’t extract a conversation and then disappear.&lt;&#x2F;p&gt;
&lt;p&gt;I can automate my job (honestly it feels great for now I’m getting so much done). I can’t automate my presence. I can’t outsource my attention. I can’t delegate my capacity to sit with someone when they’re confused or scared or just need to feel known. That’s the thing I’m actually built for.&lt;&#x2F;p&gt;
&lt;p&gt;If you’ve built your entire sense of self around technical skill, the disruption happening in AI feels like existential threat. And it should be. The skill that which you exchanged for money and stability is being replaced, you are being replaced just shuffled around. The machine doesn’t replace you. It replaces part of what you do. It does nothing for the actual thing that makes you valuable in your life.&lt;&#x2F;p&gt;
&lt;p&gt;Start practicing presence. Notice the people around you with astonishing effort. Notice when you’re giving someone your divided attention and pretending it’s presence. Notice the difference between listening so you can respond and listening because you actually want to understand. Being alive is drinking from a sacred and finite source while flying through space on a rock - isn’t that alone that worth your attention?&lt;&#x2F;p&gt;
&lt;p&gt;The harder version is asking yourself: &lt;em&gt;if my job title disappeared tomorrow, would I still be me&lt;&#x2F;em&gt;? Would the people who matter still love me? If the answer is yes, you’re in the right place.&lt;&#x2F;p&gt;
&lt;p&gt;If the answer is no - if your identity is not cleanly separated from what you do for money - your relationship to yourself may need an update.&lt;&#x2F;p&gt;
&lt;p&gt;You are not your job. You’re a person first. Your ability to connect, be present, and make people feel understood is what makes you irreplaceable to the people around you, which is the only market that counts.&lt;&#x2F;p&gt;
&lt;details&gt;
&lt;summary&gt;Epilogue - Let&#x27;s chat&lt;&#x2F;summary&gt;
&lt;p&gt;If any of this resonated with you, write to me. Especially if you are a current or recent Computer Science student.&lt;&#x2F;p&gt;
&lt;p&gt;If you live in or are passing through New York City, &lt;a href=&quot;&#x2F;bagel&quot;&gt;🥯 I’ll buy you a bagel&lt;&#x2F;a&gt; and we can share thoughts in person (seriously). I enjoy meeting new people.&lt;&#x2F;p&gt;
&lt;p&gt;Cheers!&lt;&#x2F;p&gt;
&lt;&#x2F;details&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Lessons from the last decade</title>
        <published>2026-03-17T00:00:00+00:00</published>
        <updated>2026-03-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Jacob Young
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jry.io/writing/lessons-from-the-last-decade/"/>
        <id>https://jry.io/writing/lessons-from-the-last-decade/</id>
        
        <content type="html" xml:base="https://jry.io/writing/lessons-from-the-last-decade/">&lt;p&gt;I recently crossed into another decade of life. Thirty was an age I didn’t expect to reach - I couldn’t conceive of it - now that I’m here I appreciate the journey more than I realized and embrace the acceptance that time continues.&lt;&#x2F;p&gt;
&lt;p&gt;I have been alive for &lt;code&gt;946,708,560&lt;&#x2F;code&gt; seconds… In about 1.5 years that number will be 1 billion seconds. That’s an infinite number of &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wikiwand.com&#x2F;en&#x2F;High_availability&quot;&gt;nine’s in uptime&lt;&#x2F;a&gt;… pretty good if you ask me :)&lt;&#x2F;p&gt;
&lt;p&gt;I am going to be quite vulnerable here (a relatively new skill) and I hope you find something that resonates with you, my email is open, feel free to write to me.&lt;&#x2F;p&gt;
&lt;p&gt;The biggest lesson from the last 10 years is that unexpected changes in life are the entire point. Following a plan with guard rails turns out to be a dull existence which predicates disappointment as crisis when life does not go ‘according to plan’. Early in my adulthood I grappled with rejection from my dream college. It made me a bitter and frustrated person - I would spend the next five years healing those self inflicted wounds.&lt;&#x2F;p&gt;
&lt;p&gt;It is exactly when life does not go our way which produces motivation and I was truly motivated. I found different opportunities at obscure places which turned into amazing opportunities. From a Hacker News comment I spent a year working at the MIT Media Lab at Tulip Industries in between years of college. It all started from a (quite bad) email I wrote at the age of 20 —&lt;&#x2F;p&gt;












&lt;figure class=&quot;not-prose img-figure my-8&quot;&gt;
  &lt;picture&gt;
    &lt;source
      type=&quot;image&#x2F;webp&quot;
      srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;summer.3c124d7da9a9ca49.webp 480w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;summer.c43ba33c921197a0.webp 896w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;summer.c1ed4730e2aabb3d.webp 1344w&quot;
      sizes=&quot;(max-width: 768px) 100vw, 896px&quot;
    &#x2F;&gt;
    &lt;img
      src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;summer.0640862caee547cd.png&quot;
      alt=&quot;The email that started it all&quot;
      width=&quot;896&quot;
      height=&quot;318&quot;
      loading=&quot;lazy&quot;
      decoding=&quot;async&quot;
      
      class=&quot;img-photo w-full h-auto rounded-xl&quot;
    &#x2F;&gt;
  &lt;&#x2F;picture&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;That job kickstarted my career and I learned an immense amount from the people at Tulip. A massive thank you to Fuzzy (ben), &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.linkedin.com&#x2F;in&#x2F;mason-glidden-296a02a9&#x2F;&quot;&gt;Mason&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.linkedin.com&#x2F;in&#x2F;mason-glidden-296a02a9&#x2F;&quot;&gt;Mark&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.linkedin.com&#x2F;in&#x2F;amirmikhak&#x2F;&quot;&gt;Amir&lt;&#x2F;a&gt; at Tulip for taking me under your wing so early. By the time I was done at Tulip I could tell anyone about the internal memory allocators in the v8 engine in 2016. A big leap from some random college student taking CS classes.&lt;&#x2F;p&gt;
&lt;p&gt;I can’t say my 20s were my favorite stretch of life thus far, certainly much better than my youth. I spent most of my 20s paying down mental and emotional challenges from my youth; I learned immensely from it and have been fortunate to grow, experience kindnesses, luck, and privilege. Advice is cheap these days - I won’t be sharing any, however authenticity is in short supply so here is my contribution.&lt;&#x2F;p&gt;
&lt;p&gt;Another part of age and is having the wisdom to fix what you can about yourself and accepting the rest. I’ve been far from a perfect person and have made plenty of mistakes. My biggest regrets are around not keeping people and friends closer. Giving a real apology is a good start and I’ve given my fair share.&lt;&#x2F;p&gt;
&lt;p&gt;There are a few themes of growth I’ve noticed that are worth saying out loud.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;seeking-discomfort&quot;&gt;Seeking discomfort&lt;&#x2F;h3&gt;
&lt;p&gt;I lived a good life, nothing to complain about. I noticed that I never used my body or went outside for a prolonged period - I had no connection to the natural world.&lt;&#x2F;p&gt;
&lt;p&gt;In 2023 I found myself very comfortable in life yet empty. Despite enduring a global pandemic and the stressors it caused, I found myself with a career-changing windfall from doing my best work as well as a adversity-free lifestyle. No external (and sadly internal) motivators were pushing my growth. I am putting a nice face on this, but beneath was a sense of languishing, depression, and anxiety about the future.&lt;&#x2F;p&gt;
&lt;p&gt;The discrepancy between my material &#x2F; financial needs and my mental &#x2F; emotional needs caused a lot of distress. I found myself trapped in a pincer movement between two rungs of Maslow’s Hierarchy of Needs. I was not self-actualizing to put it clinically - at the time my thoughts were full of dread: ‘who will I become’, ‘will I ever be happy’, and ‘why am I not proud of myself’.&lt;&#x2F;p&gt;
&lt;p&gt;I stumbled onto a documentary called &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=rY0i2wUmIak&quot;&gt;Two Years on a Bike&lt;&#x2F;a&gt;. Right place and right time. I watched this documentary with bated breath. The adventure, narrative, cinematography - all spoke to me after three prolonged years of socializing at a distance and seeing my friends and co-workers exclusively over Zoom.&lt;&#x2F;p&gt;
&lt;p&gt;Ultimately I chose discomfort and to embark on a trial bike ride of 1,100 miles down the Pacific Coast along Highway 1. My route was from Seattle to San Francisco.&lt;&#x2F;p&gt;
&lt;p&gt;The ride was stunning but truly a mental battle. I was miserable, out of shape, way out of my depth and genuinely did not have a good time.&lt;&#x2F;p&gt;
&lt;p&gt;The ride represented a means to prove to myself that I am capable of hard things. The ride was physically painful and uncomfortable. I spent most of the riding camping outdoors. The mental component was different - I started every day convinced I would be unable to make it to my destination for the day - a consignment of failure to start the day.&lt;&#x2F;p&gt;
&lt;p&gt;To say the trip was exhausting would be true, except mentally rather than physically.&lt;&#x2F;p&gt;
&lt;p&gt;I learned that my mental state is a choice, and putting myself into a better mental state makes pain, discomfort, and adversity possible and eventually - enjoyable.&lt;&#x2F;p&gt;
&lt;p&gt;It took a year to forget the misery of it all - in the end I had a great time, and enjoyed it more via my reflections than I ever did on the trip itself. &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rei.com&#x2F;blog&#x2F;climb&#x2F;fun-scale&quot;&gt;Type 2 fun&lt;&#x2F;a&gt; was introduced into my lexicon.&lt;&#x2F;p&gt;







&lt;figure class=&quot;not-prose img-carousel-figure my-8&quot; id=&quot;carousel-1&quot; tabindex=&quot;0&quot;&gt;
  
  &lt;div class=&quot;img-carousel relative overflow-hidden rounded-xl&quot; role=&quot;region&quot; aria-label=&quot;Image carousel&quot; aria-roledescription=&quot;carousel&quot;&gt;
    
    &lt;div class=&quot;img-carousel-track flex transition-transform duration-300 ease-out motion-reduce:transition-none&quot; style=&quot;transform: translateX(0%);&quot;&gt;
      
        
        
        

        
        
        
        

        &lt;div class=&quot;img-carousel-slide w-full flex-shrink-0&quot; role=&quot;group&quot; aria-roledescription=&quot;slide&quot; aria-label=&quot;Slide 1 of 3&quot;&gt;
          &lt;picture&gt;
            &lt;source
              type=&quot;image&#x2F;webp&quot;
              srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;1.f550b4d5c3a9ce63.webp 480w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;1.07bdc606c54911f0.webp 896w&quot;
              sizes=&quot;(max-width: 768px) 100vw, 896px&quot;
            &#x2F;&gt;
            &lt;img
              src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;1.2e87f447ab49166b.jpg&quot;
              alt=&quot;Biking down the Pacific Coast&quot;
              width=&quot;896&quot;
              height=&quot;504&quot;
              loading=&quot;eager&quot;
              decoding=&quot;async&quot;
              class=&quot;img-photo w-full h-auto&quot;
            &#x2F;&gt;
          &lt;&#x2F;picture&gt;
        &lt;&#x2F;div&gt;
      
        
        
        

        
        
        
        

        &lt;div class=&quot;img-carousel-slide w-full flex-shrink-0&quot; role=&quot;group&quot; aria-roledescription=&quot;slide&quot; aria-label=&quot;Slide 2 of 3&quot;&gt;
          &lt;picture&gt;
            &lt;source
              type=&quot;image&#x2F;webp&quot;
              srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;2.67856850d211c8b2.webp 480w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;2.66d03f96e3f8ec75.webp 896w&quot;
              sizes=&quot;(max-width: 768px) 100vw, 896px&quot;
            &#x2F;&gt;
            &lt;img
              src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;2.ca1555583642fd37.jpg&quot;
              alt=&quot;Pacific Coast cliffs&quot;
              width=&quot;896&quot;
              height=&quot;597&quot;
              loading=&quot;lazy&quot;
              decoding=&quot;async&quot;
              class=&quot;img-photo w-full h-auto&quot;
            &#x2F;&gt;
          &lt;&#x2F;picture&gt;
        &lt;&#x2F;div&gt;
      
        
        
        

        
        
        
        

        &lt;div class=&quot;img-carousel-slide w-full flex-shrink-0&quot; role=&quot;group&quot; aria-roledescription=&quot;slide&quot; aria-label=&quot;Slide 3 of 3&quot;&gt;
          &lt;picture&gt;
            &lt;source
              type=&quot;image&#x2F;webp&quot;
              srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;3.821f420595ab8413.webp 480w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;3.7a0998dc63c4b11a.webp 896w&quot;
              sizes=&quot;(max-width: 768px) 100vw, 896px&quot;
            &#x2F;&gt;
            &lt;img
              src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;3.cb60c4444cd0f6a8.jpg&quot;
              alt=&quot;The physical toll&quot;
              width=&quot;896&quot;
              height=&quot;672&quot;
              loading=&quot;lazy&quot;
              decoding=&quot;async&quot;
              class=&quot;img-photo w-full h-auto&quot;
            &#x2F;&gt;
          &lt;&#x2F;picture&gt;
        &lt;&#x2F;div&gt;
      
    &lt;&#x2F;div&gt;

    
    &lt;button
      class=&quot;img-carousel-btn absolute left-3 top-1&#x2F;2 -translate-y-1&#x2F;2 flex items-center justify-center rounded-full border border-white&#x2F;10 bg-black&#x2F;50 backdrop-blur-sm p-2 text-white&#x2F;70 transition-all duration-200 hover:bg-black&#x2F;70 hover:text-white hover:border-orange-500&#x2F;30 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-2&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      aria-label=&quot;Previous slide&quot;
      data-carousel-prev
    &gt;
      &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; class=&quot;shrink-0&quot;&gt;
        &lt;polyline points=&quot;12,15 7,10 12,5&quot; &#x2F;&gt;
      &lt;&#x2F;svg&gt;
    &lt;&#x2F;button&gt;

    
    &lt;button
      class=&quot;img-carousel-btn absolute right-3 top-1&#x2F;2 -translate-y-1&#x2F;2 flex items-center justify-center rounded-full border border-white&#x2F;10 bg-black&#x2F;50 backdrop-blur-sm p-2 text-white&#x2F;70 transition-all duration-200 hover:bg-black&#x2F;70 hover:text-white hover:border-orange-500&#x2F;30 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-2&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      aria-label=&quot;Next slide&quot;
      data-carousel-next
    &gt;
      &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; class=&quot;shrink-0&quot;&gt;
        &lt;polyline points=&quot;8,5 13,10 8,15&quot; &#x2F;&gt;
      &lt;&#x2F;svg&gt;
    &lt;&#x2F;button&gt;

    
    &lt;div class=&quot;img-carousel-hint pointer-events-none absolute bottom-4 left-1&#x2F;2 -translate-x-1&#x2F;2 flex items-center gap-1.5 rounded-full border border-white&#x2F;10 bg-black&#x2F;50 backdrop-blur-sm px-3 py-1.5 text-xs text-white&#x2F;50 opacity-0 transition-opacity duration-300 md:hidden&quot; aria-hidden=&quot;true&quot;&gt;
      &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 16 16&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.5&quot; stroke-linecap=&quot;round&quot; aria-hidden=&quot;true&quot; class=&quot;shrink-0&quot;&gt;&lt;path d=&quot;M3 8h10M10 5l3 3-3 3&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
      swipe
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;

  
  &lt;div class=&quot;flex justify-center gap-2 mt-4&quot; aria-label=&quot;Carousel slide indicators&quot;&gt;
    
    &lt;button
      class=&quot;img-carousel-dot h-2 w-2 rounded-full transition-all duration-200 hover:bg-orange-500&#x2F;40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-1 img-carousel-dot--active&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      aria-current=&quot;true&quot;
      aria-label=&quot;Go to slide 1&quot;
      data-carousel-dot=&quot;0&quot;
    &gt;&lt;&#x2F;button&gt;
    
    &lt;button
      class=&quot;img-carousel-dot h-2 w-2 rounded-full transition-all duration-200 hover:bg-orange-500&#x2F;40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-1 bg-white&#x2F;10 border border-white&#x2F;20&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      
      aria-label=&quot;Go to slide 2&quot;
      data-carousel-dot=&quot;1&quot;
    &gt;&lt;&#x2F;button&gt;
    
    &lt;button
      class=&quot;img-carousel-dot h-2 w-2 rounded-full transition-all duration-200 hover:bg-orange-500&#x2F;40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-1 bg-white&#x2F;10 border border-white&#x2F;20&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      
      aria-label=&quot;Go to slide 3&quot;
      data-carousel-dot=&quot;2&quot;
    &gt;&lt;&#x2F;button&gt;
    
  &lt;&#x2F;div&gt;

  
  &lt;span class=&quot;sr-only&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot; data-carousel-live&gt;Slide 1 of 3&lt;&#x2F;span&gt;

  
  &lt;figcaption class=&quot;img-caption mt-3 text-center text-sm text-neutral-400&quot;&gt;
    Biking the Pacific Coast — Seattle to San Francisco
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;script&gt;
(function() {
  var root = document.getElementById(&#x27;carousel-1&#x27;);
  if (!root) return;

  var track = root.querySelector(&#x27;.img-carousel-track&#x27;);
  var slides = root.querySelectorAll(&#x27;.img-carousel-slide&#x27;);
  var dots = root.querySelectorAll(&#x27;.img-carousel-dot&#x27;);
  var prevBtn = root.querySelector(&#x27;[data-carousel-prev]&#x27;);
  var nextBtn = root.querySelector(&#x27;[data-carousel-next]&#x27;);
  var hint = root.querySelector(&#x27;.img-carousel-hint&#x27;);
  var live = root.querySelector(&#x27;[data-carousel-live]&#x27;);
  var total = slides.length;
  var current = 0;
  var startX = 0;
  var deltaX = 0;
  var dragging = false;
  var reduceMotion = window.matchMedia &amp;&amp; window.matchMedia(&#x27;(prefers-reduced-motion: reduce)&#x27;).matches;

  if (reduceMotion) {
    track.style.transition = &#x27;none&#x27;;
  }

  function goTo(index) {
    current = ((index % total) + total) % total;
    track.style.transform = &#x27;translateX(-&#x27; + (current * 100) + &#x27;%)&#x27;;
    dots.forEach(function(dot, i) {
      var isActive = i === current;
      dot.classList.toggle(&#x27;img-carousel-dot--active&#x27;, isActive);
      dot.classList.toggle(&#x27;bg-white&#x2F;10&#x27;, !isActive);
      dot.classList.toggle(&#x27;border&#x27;, !isActive);
      dot.classList.toggle(&#x27;border-white&#x2F;20&#x27;, !isActive);
      if (isActive) {
        dot.setAttribute(&#x27;aria-current&#x27;, &#x27;true&#x27;);
      } else {
        dot.removeAttribute(&#x27;aria-current&#x27;);
      }
    });
    if (live) live.textContent = &#x27;Slide &#x27; + (current + 1) + &#x27; of &#x27; + total;
    if (hint) hint.style.opacity = &#x27;0&#x27;;
  }

  prevBtn.addEventListener(&#x27;click&#x27;, function() { goTo(current - 1); });
  nextBtn.addEventListener(&#x27;click&#x27;, function() { goTo(current + 1); });

  dots.forEach(function(dot) {
    dot.addEventListener(&#x27;click&#x27;, function() {
      goTo(parseInt(dot.dataset.carouselDot, 10));
    });
  });

  &#x2F;&#x2F; Keyboard navigation
  root.addEventListener(&#x27;keydown&#x27;, function(e) {
    if (e.key === &#x27;ArrowLeft&#x27;) { goTo(current - 1); e.preventDefault(); }
    if (e.key === &#x27;ArrowRight&#x27;) { goTo(current + 1); e.preventDefault(); }
  });

  &#x2F;&#x2F; Touch &#x2F; swipe
  track.addEventListener(&#x27;touchstart&#x27;, function(e) {
    startX = e.touches[0].clientX;
    dragging = true;
    track.style.transition = &#x27;none&#x27;;
  }, { passive: true });

  track.addEventListener(&#x27;touchmove&#x27;, function(e) {
    if (!dragging) return;
    deltaX = e.touches[0].clientX - startX;
    var offset = -(current * 100) + (deltaX &#x2F; track.offsetWidth) * 100;
    track.style.transform = &#x27;translateX(&#x27; + offset + &#x27;%)&#x27;;
  }, { passive: true });

  track.addEventListener(&#x27;touchend&#x27;, function() {
    if (!dragging) return;
    dragging = false;
    track.style.transition = reduceMotion ? &#x27;none&#x27; : &#x27;&#x27;;
    var threshold = track.offsetWidth * 0.2;
    if (deltaX &lt; -threshold) goTo(current + 1);
    else if (deltaX &gt; threshold) goTo(current - 1);
    else goTo(current);
    deltaX = 0;
  });

  &#x2F;&#x2F; Show swipe hint on touch devices
  if (hint &amp;&amp; &#x27;ontouchstart&#x27; in window) {
    setTimeout(function() { hint.style.opacity = &#x27;1&#x27;; }, 500);
    setTimeout(function() { hint.style.opacity = &#x27;0&#x27;; }, 3000);
  }
})();
&lt;&#x2F;script&gt;
&lt;h3 id=&quot;living-generously&quot;&gt;Living generously&lt;&#x2F;h3&gt;
&lt;p&gt;I attended Recurse Center not long after my thru-hike on the Pacific Crest Trail. For several years I had admired Recurse from afar because I regularly saw their alumni posting brilliantly technical writing. Former co-workers of mine like &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;printf.net&#x2F;&quot;&gt;Chris Ball&lt;&#x2F;a&gt; were Recurse alums as well as some of the engineers’ minds I most admire, like &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;github.com&#x2F;raphlinus&quot;&gt;Raph Levin&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Recurse did not disappoint and in many ways I am grateful that I waited until it returned &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.recurse.com&#x2F;blog&#x2F;189-a-new-kind-of-retreat&quot;&gt;in-person&lt;&#x2F;a&gt; in 2023. I was in the second or third batch since it moved from the virtual world to a hybrid model.&lt;&#x2F;p&gt;
&lt;p&gt;Nick and Sonali at Recurse have done such a good job of facilitating the community. Years of work compressed down into the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.recurse.com&#x2F;self-directives&quot;&gt;self-directives&lt;&#x2F;a&gt;. I want to highlight one, &lt;strong&gt;learn generously,&lt;&#x2F;strong&gt; and modify it for my own needs.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Living generously&lt;&#x2F;strong&gt; involves sharing the living energy you possess with others, it may take many forms. From sharing good deeds with a friend or stranger. For making yourself vulnerable at the right moment for another person. Suffering and sharing your challenges so others may learn from them. Most of all, it means giving your fellow humans your authentic presence, unrefined, with care and empathy.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;We live in an age of increasingly unreasonable norms and expectations. Neither you nor I will solve these issues in their entirety nor likely in their constituent parts: does tipping solve income inequality?&lt;&#x2F;p&gt;
&lt;p&gt;Nonetheless, living generously involves orienting yourself around &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wikiwand.com&#x2F;en&#x2F;Dunbar&amp;#x27;s_number&quot;&gt;Dunbar’s number&lt;&#x2F;a&gt; - the number of human relationships you can actively maintain with full attention - and doubling down on it as a natural limit. I can’t care about everything on the planet all at once.&lt;&#x2F;p&gt;
&lt;p&gt;Instead, I try to focus on what is in front of me, especially the people, by showing up and staying in touch. When I fail I try to correct those mistakes, reflect and apologize, and repair the relationship.&lt;&#x2F;p&gt;
&lt;p&gt;I noticed that living generously is not the opposite of selfishness. The key idea is presence, your presence undivided is usually more valuable than you can imagine - and has an unspoken yet immeasurable effect on the people around you.&lt;&#x2F;p&gt;
&lt;p&gt;It may involve noticing verbal habits or body language which signal we are not present, and might involve behavior change. If we internalize ‘there is nowhere else I would rather be than right here with you’ our actions follow, and we can cultivate great relationships.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;traveling-for-humility&quot;&gt;Traveling for humility&lt;&#x2F;h3&gt;
&lt;p&gt;Living in Japan was the most transformative experience of my twenties, and one I had not anticipated when I boarded the plane.&lt;&#x2F;p&gt;
&lt;p&gt;I have always had a knack for languages. Yet I found myself bumbling, gesturing, like an infant. The complexity of my interior world - the opinions, the humor, the nuance - became inaccessible to me. I was left with nouns, a handful of verbs, and facial expressions.&lt;&#x2F;p&gt;
&lt;p&gt;This is the healthiest form of discomfort I know. It is not fun. Not at first. But it can become fun. Primordial connection with humans.&lt;&#x2F;p&gt;
&lt;p&gt;Stripped of language you are bare - laughter, frustration, hunger, warmth. It’s unlikely for race, politics, religion to be prejudice when you are pointing at a menu item with an apologetic smile - while the person across the counter is pointing back and laughing with you, not at you (then again how would I know the difference).&lt;&#x2F;p&gt;
&lt;p&gt;I found more warmth and connection in my most linguistically helpless moments than in years of speaking English and living in the United States. I found it in a tea farm in some forgotten Japanese village, and on the side of the road in no-where California.&lt;&#x2F;p&gt;
&lt;p&gt;Traveling to be humbled is a recurring theme for me. It is not masochism. It is the fastest shortcut I’ve found to shaking off the noise, the identity performance, and the accumulated self-seriousness of life.&lt;&#x2F;p&gt;
&lt;p&gt;You cannot be precious about yourself when you are rationing water and your feet hurt and you still have 24 km to go on a hike in a country where you don’t speak the language and don’t know a soul.&lt;&#x2F;p&gt;







&lt;figure class=&quot;not-prose img-pair-figure my-8&quot;&gt;
  &lt;div class=&quot;grid grid-cols-1 md:grid-cols-2 gap-3&quot;&gt;
    
      
      
      
        
      

      
      
      
      

      &lt;picture&gt;
        &lt;source
          type=&quot;image&#x2F;webp&quot;
          srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;4.9733dffe5b1892d5.webp 400w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;4.2dd155fef1c87593.webp 480w&quot;
          sizes=&quot;(max-width: 768px) 100vw, 480px&quot;
        &#x2F;&gt;
        &lt;img
          src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;4.88a36c2d501f1b49.jpg&quot;
          alt=&quot;Roadside shrine in Japan&quot;
          width=&quot;480&quot;
          height=&quot;320&quot;
          loading=&quot;lazy&quot;
          decoding=&quot;async&quot;
          
          class=&quot;img-photo w-full h-full object-cover rounded-xl&quot;
        &#x2F;&gt;
      &lt;&#x2F;picture&gt;
    
      
      
      
        
      

      
      
      
      

      &lt;picture&gt;
        &lt;source
          type=&quot;image&#x2F;webp&quot;
          srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;5.d5f1671d0af2b7dc.webp 400w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;5.b07be8b662ad02d4.webp 480w&quot;
          sizes=&quot;(max-width: 768px) 100vw, 480px&quot;
        &#x2F;&gt;
        &lt;img
          src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;5.1711c90d6f607f51.jpg&quot;
          alt=&quot;Nachi Falls and the pagoda&quot;
          width=&quot;480&quot;
          height=&quot;360&quot;
          loading=&quot;lazy&quot;
          decoding=&quot;async&quot;
          
          class=&quot;img-photo w-full h-full object-cover rounded-xl&quot;
        &#x2F;&gt;
      &lt;&#x2F;picture&gt;
    
  &lt;&#x2F;div&gt;
  
&lt;&#x2F;figure&gt;












&lt;figure class=&quot;not-prose img-figure my-8&quot;&gt;
  &lt;picture&gt;
    &lt;source
      type=&quot;image&#x2F;webp&quot;
      srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;6.4093d5da773670fb.webp 480w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;6.bfe64fd3af7b33ba.webp 896w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;6.83453ecfd9098d6f.webp 1344w&quot;
      sizes=&quot;(max-width: 768px) 100vw, 896px&quot;
    &#x2F;&gt;
    &lt;img
      src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;6.6b7660c22288cca0.jpg&quot;
      alt=&quot;Fishing port in Japan&quot;
      width=&quot;896&quot;
      height=&quot;1342&quot;
      loading=&quot;lazy&quot;
      decoding=&quot;async&quot;
      
      class=&quot;img-photo w-full h-auto rounded-xl&quot;
    &#x2F;&gt;
  &lt;&#x2F;picture&gt;
  
  &lt;figcaption class=&quot;img-caption mt-3 text-center text-sm text-neutral-400&quot;&gt;
    A quiet fishing port somewhere along the Kumano Kodo
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;cultivating-yourself-then-others&quot;&gt;Cultivating yourself, then others&lt;&#x2F;h3&gt;
&lt;p&gt;The order matters: yourself then others. I spent the better part of my twenties attempting to show up for others without caring for my own well-being. It doesn’t work. You cannot pour from a cup you haven’t filled - not sustainably, not without consequence. The consequence for me was a kind of quiet rage against myself for the inability or unwillingness to care for myself in the manner I was willing to care for others.&lt;&#x2F;p&gt;
&lt;p&gt;The unglamorous work of my twenties was learning to fill my own cup. Therapy helped as well as journaling when I could find the motivation. Being exposed outdoors helped the most. Getting on a bike and being miserable for 23 days. Sleeping on dirt most nights without a tent. All of it slowly taught me the difference between discomfort (temporary) and suffering.&lt;&#x2F;p&gt;
&lt;p&gt;If there was only one message to myself 10 years ago, it is this:&lt;&#x2F;p&gt;
&lt;p&gt;The inner work &lt;em&gt;is&lt;&#x2F;em&gt; the outer work.&lt;&#x2F;p&gt;
&lt;p&gt;The time you invest to know yourself, being honest with yourself, sitting with uncomfortable truths - all compound. Not quickly. But they compound.&lt;&#x2F;p&gt;
&lt;p&gt;As I grow in age feeling, for the first time, like a person I would want to know.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Recurse 2 - Connections, Challenges, Creative Coding</title>
        <published>2023-10-02T00:00:00+00:00</published>
        <updated>2023-10-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Jacob Young
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jry.io/writing/rc-week-two/"/>
        <id>https://jry.io/writing/rc-week-two/</id>
        
        <content type="html" xml:base="https://jry.io/writing/rc-week-two/">&lt;p&gt;Reflections on my second week at &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;recurse.com&quot;&gt;The Recurse
Center&lt;&#x2F;a&gt;. &lt;a href=&quot;https:&#x2F;&#x2F;jry.io&#x2F;writing&#x2F;rc-week-one&#x2F;&quot;&gt;Last week&lt;&#x2F;a&gt;  I
wrote about what came before RC and introducing myself to the unique people in
my batch.&lt;&#x2F;p&gt;
&lt;p&gt;The second week of Recurse consisted of exploration. I attended more interest
groups than I had expected and organized two myself. The openness of the
calendar reminds me of a directory of clubs at school you can join.
Everyone is welcome and half the time you don’t know what the club does until
you show up.&lt;&#x2F;p&gt;
&lt;p&gt;Here is a brief summary and description of my experience with different working
groups at RC this batch:&lt;&#x2F;p&gt;
&lt;h3 id=&quot;creative-coding&quot;&gt;Creative Coding&lt;&#x2F;h3&gt;
&lt;p&gt;Create a computer program, in 90 minutes or less, which satisfies a randomly
generated prompt. You program can be anything, or do anything, related to the
prompt. Here are some examples:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Would anyone want it?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Think of the radio&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;creativecoding.recurse.com&#x2F;&quot;&gt;Creative Coding&lt;&#x2F;a&gt; tradition started
about three years ago, and there is a rich gallery of out-of-the-box
websites and programs from previous Recursers. I suggest you take the time to
look through past projects.&lt;&#x2F;p&gt;
&lt;p&gt;In such a constrained time frame it’s surprising both how much and how little
can get done. For example, I spent 60 minutes fighting with tooling while trying to
build &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jryio&#x2F;creativecoding&#x2F;tree&#x2F;master&#x2F;evileditor&quot;&gt;Evil
Editor&lt;&#x2F;a&gt;, a text
editor which rejects your words if they are too negative. While with &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jryio&#x2F;creativecoding&#x2F;tree&#x2F;master&#x2F;cipherFM&quot;&gt;CipherFM&lt;&#x2F;a&gt;
I learned the relevant parts of the WebCrypto API to generate a
radio station which produces cryptographic noise… BZZZ.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F; CipherFM, a poorly designed, rapidly implemented radio station of random&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F; cryptogrpahic noise. Enjoy!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; buf2hex&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt;buffer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt; Uint8Array&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt; &#x2F;&#x2F; buffer is an ArrayBuffer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;...&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;font-weight: bold;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; Uint8Array&lt;&#x2F;span&gt;&lt;span&gt;(buffer)]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;    .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;toString&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;padStart&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;#39;0&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;    .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; tocolor&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 88&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 92&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;blue&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; else if&lt;&#x2F;span&gt;&lt;span&gt; (p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 92&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 96&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;yellow&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; else if&lt;&#x2F;span&gt;&lt;span&gt; (p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 96&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;green&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; else if&lt;&#x2F;span&gt;&lt;span&gt; (p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 104&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;red&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; else if&lt;&#x2F;span&gt;&lt;span&gt; (p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 104&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 108&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;pink&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;black&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; freuency&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; document&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;getElementById&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;frequency&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; label&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; document&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;getElementById&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;label&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; histogramElement&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; document&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;getElementById&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;histogram&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; fm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; lastFm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;freuency&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;?.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;addEventListener&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;input&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt;event&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt; Event&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (event&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; instanceof&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt; HTMLInputElement&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; event&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;?.&lt;&#x2F;span&gt;&lt;span&gt;value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;label)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    label&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;innerHTML&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; `Frequency: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span&gt;fm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; MHz`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;    &#x2F;&#x2F; crypto&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 256&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; alg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;HKDF&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; pw&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; enc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;font-weight: bold;&quot;&gt; new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; TextEncoder&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; await&lt;&#x2F;span&gt;&lt;span&gt; window&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;crypto&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;subtle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;importKey&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;      &amp;quot;raw&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      enc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;encode&lt;&#x2F;span&gt;&lt;span&gt;(pw)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;      {&lt;&#x2F;span&gt;&lt;span&gt; name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;PBKDF2&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; },&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;      false&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;deriveBits&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;deriveKey&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    )&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    while&lt;&#x2F;span&gt;&lt;span&gt; (fm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; !==&lt;&#x2F;span&gt;&lt;span&gt; lastFm)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;      const&lt;&#x2F;span&gt;&lt;span&gt; salt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; window&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;crypto&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;getRandomValues&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;font-weight: bold;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; Uint8Array&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;      const&lt;&#x2F;span&gt;&lt;span&gt; derivedBits&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; await&lt;&#x2F;span&gt;&lt;span&gt; window&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;crypto&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;subtle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;deriveBits&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;        {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;PBKDF2&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          salt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          iterations&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 100000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          hash&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;SHA-256&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;        },&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      )&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;      const&lt;&#x2F;span&gt;&lt;span&gt; output&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;font-weight: bold;&quot;&gt; new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; Uint8Array&lt;&#x2F;span&gt;&lt;span&gt;(derivedBits)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;      const&lt;&#x2F;span&gt;&lt;span&gt; hex&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; buf2hex&lt;&#x2F;span&gt;&lt;span&gt;(output)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;      const&lt;&#x2F;span&gt;&lt;span&gt; histogram&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;      const&lt;&#x2F;span&gt;&lt;span&gt; histostring&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;      const&lt;&#x2F;span&gt;&lt;span&gt; binned&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; hex&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;&quot;&gt;&#x2F;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;{1,2}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;g&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;      if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;binned)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      binned&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        const&lt;&#x2F;span&gt;&lt;span&gt; count&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; histogram[x]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        histogram[x]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; count&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; ?&lt;&#x2F;span&gt;&lt;span&gt; count&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; :&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        histostring[x]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;repeat&lt;&#x2F;span&gt;&lt;span&gt;(count)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;      }&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;      if&lt;&#x2F;span&gt;&lt;span&gt; (histogramElement)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        const&lt;&#x2F;span&gt;&lt;span&gt; children&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; Object&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;values&lt;&#x2F;span&gt;&lt;span&gt;(histostring)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt;value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;          let&lt;&#x2F;span&gt;&lt;span&gt; pre&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; document&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;createElement&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;pre&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          pre&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;innerHTML&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          pre&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;style&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;transform&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;rotate(-90deg)&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;          const&lt;&#x2F;span&gt;&lt;span&gt; color&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; tocolor&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;Number&lt;&#x2F;span&gt;&lt;span&gt;(fm))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          pre&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;style&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;color&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; color&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          pre&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;style&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;margin&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;0&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          pre&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;style&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;padding&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;0&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;          return&lt;&#x2F;span&gt;&lt;span&gt; pre&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt; Node&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        histogramElement&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;replaceChildren&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;...&lt;&#x2F;span&gt;&lt;span&gt;children)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;      }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This group is more fun and more anxiety inducing than I thought. We often do not
need to write our computer code under duress, adding the time pressure
and the strong desire to have something working by the end of the time slot,
causes extreme focus. Focus on what is sufficient to get the program
working, everything else is irrelevant. &lt;em&gt;The Essentials Driven Development&lt;&#x2F;em&gt;
is a useful practice to strengthen decision making during regular development. I
have found myself thinking this week: &lt;em&gt;If I gave myself 90 minutes to build
this Merkle Tree implementation, what would it look like?&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Creative Coding is the most surprising and refreshing thing I have done so far
at RC.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tool-time-talk&quot;&gt;Tool Time Talk&lt;&#x2F;h3&gt;
&lt;p&gt;This group is all about getting together to talk about the different tools we know and use. Thus far it&lt;br &#x2F;&gt;
has been a topical meeting once per week where we’ll discuss things like
editors, shells, data wrangling tools, debuggers etc. I have found that while I
have plenty of tools to offer, I have even more to learn.&lt;&#x2F;p&gt;
&lt;p&gt;Also, there is great fun geeking out about tools where every tool is on equal
footing. No vim v.s. emacs flame wars, just plain old fashioned: “what tools do
you use for this job”. Connecting to the root of &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;australian.museum&#x2F;learn&#x2F;science&#x2F;human-evolution&#x2F;homo-sapiens-modern-humans&#x2F;&quot;&gt;Homo Sapien&lt;&#x2F;a&gt;,
wisdom, tool making, and teaching can be great fun even if it’s  about
computer tools.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rust-books-crew&quot;&gt;Rust Books Crew&lt;&#x2F;h3&gt;
&lt;p&gt;I should not have been surprised to find many of my fellow Recursers programing
in Rust during their batch. For the last eight years in a row, Rust has
ranked &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;survey.stackoverflow.co&#x2F;2023&#x2F;#section-admired-and-desired-programming-scripting-and-markup-languages&quot;&gt;most admired programming language&lt;&#x2F;a&gt;
on the Stack Overflow Developer Survey.&lt;&#x2F;p&gt;
&lt;p&gt;Skill levels in Rust skew towards beginner at Recurse and had I joined only a
few months ago I would have been a beginner as well. Thankfully there are
several great Rust programmers on Zulip who incorporate lively debugging and
discussion into the group.&lt;&#x2F;p&gt;
&lt;p&gt;This batch there are enough intermediate Rust programmers, myself included, to
have a group book club for &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nostarch.com&#x2F;rust-rustaceans&quot;&gt;Rust for
Rustaceans&lt;&#x2F;a&gt;. Covering topics like
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;varkor.github.io&#x2F;blog&#x2F;2018&#x2F;07&#x2F;03&#x2F;existential-types-in-rust.html&quot;&gt;Existential
Types&lt;&#x2F;a&gt;
and &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;stable&#x2F;std&#x2F;marker&#x2F;struct.PhantomData.html&quot;&gt;Marker
Traits&lt;&#x2F;a&gt; have
been useful in a group setting instead of individual reading.&lt;&#x2F;p&gt;
&lt;p&gt;Aside from tokio, I have not dealt directly with spawning threads, channels, or
working with atomics yet. All are things I am interested in diving deeper into.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cryptopals&quot;&gt;Cryptopals&lt;&#x2F;h3&gt;
&lt;p&gt;What fun! Rather unexpectedly the Cryptopals group turned out to be sizable,
engaged, and curious. I am enjoying so much organizing this group and working
through the challenges.&lt;&#x2F;p&gt;
&lt;p&gt;Specifically &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cryptopals.com&#x2F;sets&#x2F;1&#x2F;challenges&#x2F;3&quot;&gt;Cryptopals Set 1 - Challenge
3&lt;&#x2F;a&gt; - breaking a single character XOR
cipher -  engaged more of my byte-level Rust
than I expected. Without lower level exercises like these, it can be easy to
throw &lt;code&gt;clone()&lt;&#x2F;code&gt; around in Rust without appreciating how to take the “harder”
reference and lifetime approach.&lt;&#x2F;p&gt;
&lt;p&gt;Implementing a frequency analysis on cipher texts is a great way to work
directly with character bytes, ASCII tables, and statistical testing methods
like &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Chi-squared_test&quot;&gt;chi-squared&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;After several attempts, and getting the scoring value inverted (oops), here is
my implementation of scoring text based on expected English character frequencies.&lt;&#x2F;p&gt;
&lt;p&gt;Some issues I encountered while implementing:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Which characters in the ASCII table should be considered valid?&lt;&#x2F;li&gt;
&lt;li&gt;Which non-alphanumeric characters should be counted? For example &lt;code&gt;&#x27;&lt;&#x2F;code&gt;, &lt;code&gt;\n&lt;&#x2F;code&gt;, &lt;code&gt;\t&lt;&#x2F;code&gt;, &lt;code&gt;&quot;&lt;&#x2F;code&gt;, &lt;code&gt;.&lt;&#x2F;code&gt;, &lt;code&gt;!&lt;&#x2F;code&gt;, &lt;code&gt;?&lt;&#x2F;code&gt;, &lt;code&gt;,&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;How should invalid characters be scored?&lt;&#x2F;li&gt;
&lt;li&gt;Should the frequency of a character be scored or character counts themselves?&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I landed on a set of tradeoff which have worked thus far in the challenges.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;ASCII control characters should not be considered when analyzing texts to
determine if they are similar to English texts.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;It is important to count whitespace because it is so clearly a marker of a
formatted sentence.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Punctuation should be counted as well, but in aggregate rather than
per-character. Attempting to score per-character leads to chi-squared scores
which deviate from expected results.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Comparing expected character counts against actual character counts is better
than comparing frequency values because the smaller text size of an actual
cipher text will almost certainly be non-representative of the entire English
langauge character frequency.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Higher chi-squared values are not better, in fact pay attention to what the
formula says: &lt;code&gt;(expected - actual)^2&lt;&#x2F;code&gt; tells you that actual character count
values being closer to expected character count values produce smaller
chi-squared scores.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F;&#x2F; Computes the frequency of characters in an buffer and compares against known English langauge&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F;&#x2F; character frequency, returning a score.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F;&#x2F; The score is computed using the chi-sqaured test: (difference squared of the actual - expected&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F;&#x2F; values) divided by the expected value, summed for all measurements&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F;&#x2F; Low values of chi-sqaured indicate a high fit between the recorded results and the expected.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;&#x2F;&#x2F;&#x2F; High score indicate large difference between actual and expected results.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;pub fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; frequency_score&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;&quot;&gt;buffer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;u8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; u32&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;    &#x2F;&#x2F; Highest score says that this is invalid&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; !&lt;&#x2F;span&gt;&lt;span&gt;buffer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;is_ascii&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;u32&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;MAX&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;    &#x2F;&#x2F; Highest score says that this is invalid&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; buffer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;iter&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;any&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;|&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; ASCII_NEWLINE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span&gt;c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; ASCII_CONTROL_END&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; ||&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; ASCII_CONTROL_DEL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;    {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;u32&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;MAX&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span&gt; actual_chars_len&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; buffer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; as f64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span&gt; actual_chars_count&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt; HashMap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DCEB;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;u8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; f64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DCEB;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; buffer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;iter&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;|&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;font-style: italic;&quot;&gt; char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;to_ascii_lowercase&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;        .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;fold&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F9E2AF;&quot;&gt;HashMap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(),&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; hash_map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;            &#x2F;&#x2F; ASCII a-z or A-Z&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;            let&lt;&#x2F;span&gt;&lt;span&gt; key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; u8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; if&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;is_alphabetic&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; as u8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;            }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;            &#x2F;&#x2F; whitespace mapping&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;            else if&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; as u8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; ASCII_WHITESPACE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; ||&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; as u8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; ASCII_TAB&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;                ASCII_WHITESPACE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;            }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;            &#x2F;&#x2F; Convert all other characters (punctuation or numbers) to &amp;#39;.&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;            else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;                ASCII_PERIOD&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;            };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            hash_map&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;                .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;entry&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;                .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;and_modify&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;| *&lt;&#x2F;span&gt;&lt;span&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;                .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;or_insert&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;DEFAULT_FREQUENCY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            hash_map&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;        });&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    let mut&lt;&#x2F;span&gt;&lt;span&gt; chi_sqrd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span&gt;c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; ENGLISH_FREQUENCIES&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        let&lt;&#x2F;span&gt;&lt;span&gt; expect_num_char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; actual_chars_len&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        let&lt;&#x2F;span&gt;&lt;span&gt; actual_num_char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; actual_chars_count&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;get&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;unwrap_or&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt;DEFAULT_FREQUENCY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;        let&lt;&#x2F;span&gt;&lt;span&gt; diff&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; expect_num_char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; actual_num_char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        chi_sqrd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span&gt;diff&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; diff&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; expect_num_char&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    chi_sqrd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; as u32&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There are a few Rust gems in the code sample above I would like to point out
because they made me happy when discovering them:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;doc.rust-lang.org&#x2F;1.72.1&#x2F;std&#x2F;collections&#x2F;struct.HashMap.html#method.entry&quot;&gt;&lt;code&gt;HashMap::entry()&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; is a great API for getting and inserting values in a single
method call. It solves the issue of calling &lt;code&gt;HashMap::get()&lt;&#x2F;code&gt;, checking if the
value exists, then calling &lt;code&gt;HashMap::set()&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;1.72.1&#x2F;std&#x2F;iter&#x2F;trait.Iterator.html#method.fold&quot;&gt;&lt;code&gt;Iterator::fold()&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;
has a nice design for iterators where you wish to reduce into a different type
than the type of the iterator.
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;1.72.1&#x2F;std&#x2F;iter&#x2F;trait.Iterator.html#method.reduce&quot;&gt;&lt;code&gt;Iterator::reduce()&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;
will use the first element
of the iterator as the accumulator, so for example if you have an iterator of
&lt;code&gt;u32&lt;&#x2F;code&gt;, &lt;code&gt;reduce&lt;&#x2F;code&gt; takes the first &lt;code&gt;u32&lt;&#x2F;code&gt; as the initial value and lets you do
whatever operations you wish until it collapses all of the &lt;code&gt;u32&lt;&#x2F;code&gt; values into a
single one. By contrast &lt;code&gt;fold&lt;&#x2F;code&gt; lets you take an iterator or anything and fold
it into the type you specify as the first argument. It is nice to have these two
separated.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;doc.rust-lang.org&#x2F;1.72.1&#x2F;std&#x2F;primitive.char.html#method.is_alphanumeric&quot;&gt;&lt;code&gt;char::is_alphanumeric()&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;
and its related methods are helpful functions for dealing with ASCII characters
but not byte values directly. Thanks to &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mcastorina&quot;&gt;Miccah&lt;&#x2F;a&gt;
for pointing this one out.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;upcoming-work&quot;&gt;Upcoming Work&lt;&#x2F;h3&gt;
&lt;p&gt;Next week I would like to buckle down and sink my teeth into encrypted file
systems and their trade offs. I have taken a look at the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;ori.scs.stanford.edu&#x2F;&quot;&gt;ORI
Filesystem&lt;&#x2F;a&gt;,
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tahoe-lafs.org&#x2F;trac&#x2F;tahoe-lafs&quot;&gt;Tahoe-LAFS&lt;&#x2F;a&gt;, and even
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;age-encryption.org&#x2F;&quot;&gt;Age&lt;&#x2F;a&gt; (not a file system).&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Get a FUSE mounted to my macbook&lt;&#x2F;li&gt;
&lt;li&gt;Make a VirtualFS abstraction over the directly file system (what design
choices to make?)&lt;&#x2F;li&gt;
&lt;li&gt;Design a multiparty key exchange for a shared foler. Perhaps a reader keyring
and writer keyring.&lt;&#x2F;li&gt;
&lt;li&gt;Decide to what degree I care about authenticated and trusted key exchange (might
have to overlook this for the intial version).&lt;&#x2F;li&gt;
&lt;li&gt;Determine the behavior for chunking and encrypted file data.&lt;&#x2F;li&gt;
&lt;li&gt;How much, and what, metadata should be exposed to the sync server?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Recurse 1 - Dealing with Burnout, Thru-Hiking, and Back Again</title>
        <published>2023-09-22T00:00:00+00:00</published>
        <updated>2023-09-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Jacob Young
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jry.io/writing/rc-week-one/"/>
        <id>https://jry.io/writing/rc-week-one/</id>
        
        <content type="html" xml:base="https://jry.io/writing/rc-week-one/">&lt;p&gt;This is a summary of my first week at &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;recurse.com&quot;&gt;The Recurse Center&lt;&#x2F;a&gt;,
which is a 12-week retreat for programmers. The retreat aims to allow
programmers to challenge themselves and “work at the edge of their abilities”.
The Recurse Center operates on a self-directed basis, meaning there are no
classes or curriculum to follow. Each participant is responsible for creating
their own schedule and can join or create interest groups with fellow
batchmates.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;brain-goes-burn-out&quot;&gt;Brain Goes ‘Burn Out’&lt;&#x2F;h3&gt;
&lt;p&gt;I experienced burnout during the past year due to a combination of factors. My
personal life was not going well, and after years of working remotely, I reached
a point where I was totally unsatisfied with my work, professional success, and
environment. I want to express my gratitude to my coworkers at Keybase&#x2F;Zoom
during this time. They were all amazing and handled the acquisition with great
professionalism. Although I wish the circumstances were different, I am
extremely grateful for their support and what we accomplished.&lt;&#x2F;p&gt;
&lt;p&gt;Burnout is an interesting thing, I knew about it from the frequent discussions
in the technology community as well as the collective experience during the
pandemic. However knowing and feeling are two entirely different experiences
and I found myself with a lack of outlets and support. Unlike many others the
pandemic did not make me feel claustrophobic. Despite spending three years in a
small New York City apartment. Eventually, the computer no longer provided the
escape it once did, so I began looking for something more.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;thru-hiking&quot;&gt;Thru-Hiking&lt;&#x2F;h3&gt;







&lt;figure class=&quot;not-prose img-carousel-figure my-8&quot; id=&quot;carousel-1&quot; tabindex=&quot;0&quot;&gt;
  
  &lt;div class=&quot;img-carousel relative overflow-hidden rounded-xl&quot; role=&quot;region&quot; aria-label=&quot;Image carousel&quot; aria-roledescription=&quot;carousel&quot;&gt;
    
    &lt;div class=&quot;img-carousel-track flex transition-transform duration-300 ease-out motion-reduce:transition-none&quot; style=&quot;transform: translateX(0%);&quot;&gt;
      
        
        
        

        
        
        
        

        &lt;div class=&quot;img-carousel-slide w-full flex-shrink-0&quot; role=&quot;group&quot; aria-roledescription=&quot;slide&quot; aria-label=&quot;Slide 1 of 3&quot;&gt;
          &lt;picture&gt;
            &lt;source
              type=&quot;image&#x2F;webp&quot;
              srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;pct1.ba0bffbe0d4c03e5.webp 480w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;pct1.778026997ae0e0c3.webp 896w&quot;
              sizes=&quot;(max-width: 768px) 100vw, 896px&quot;
            &#x2F;&gt;
            &lt;img
              src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;pct1.498f738dbb2e3609.jpg&quot;
              alt=&quot;Pacific Crest Trail Photo&quot;
              width=&quot;896&quot;
              height=&quot;672&quot;
              loading=&quot;eager&quot;
              decoding=&quot;async&quot;
              class=&quot;img-photo w-full h-auto&quot;
            &#x2F;&gt;
          &lt;&#x2F;picture&gt;
        &lt;&#x2F;div&gt;
      
        
        
        

        
        
        
        

        &lt;div class=&quot;img-carousel-slide w-full flex-shrink-0&quot; role=&quot;group&quot; aria-roledescription=&quot;slide&quot; aria-label=&quot;Slide 2 of 3&quot;&gt;
          &lt;picture&gt;
            &lt;source
              type=&quot;image&#x2F;webp&quot;
              srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;pct2.167bf739c7caa139.webp 480w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;pct2.fc66e6372cb08a3e.webp 896w&quot;
              sizes=&quot;(max-width: 768px) 100vw, 896px&quot;
            &#x2F;&gt;
            &lt;img
              src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;pct2.f2cd161357c46969.jpg&quot;
              alt=&quot;Pacific Crest Trail Photo&quot;
              width=&quot;896&quot;
              height=&quot;672&quot;
              loading=&quot;lazy&quot;
              decoding=&quot;async&quot;
              class=&quot;img-photo w-full h-auto&quot;
            &#x2F;&gt;
          &lt;&#x2F;picture&gt;
        &lt;&#x2F;div&gt;
      
        
        
        

        
        
        
        

        &lt;div class=&quot;img-carousel-slide w-full flex-shrink-0&quot; role=&quot;group&quot; aria-roledescription=&quot;slide&quot; aria-label=&quot;Slide 3 of 3&quot;&gt;
          &lt;picture&gt;
            &lt;source
              type=&quot;image&#x2F;webp&quot;
              srcset=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;pct3.d8a9992793a812c1.webp 480w, https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;pct3.32ef8204a667a22a.webp 896w&quot;
              sizes=&quot;(max-width: 768px) 100vw, 896px&quot;
            &#x2F;&gt;
            &lt;img
              src=&quot;https:&amp;#x2F;&amp;#x2F;jry.io&amp;#x2F;processed_images&amp;#x2F;pct3.509e31e2ad750134.jpg&quot;
              alt=&quot;Pacific Crest Trail Photo&quot;
              width=&quot;896&quot;
              height=&quot;1194&quot;
              loading=&quot;lazy&quot;
              decoding=&quot;async&quot;
              class=&quot;img-photo w-full h-auto&quot;
            &#x2F;&gt;
          &lt;&#x2F;picture&gt;
        &lt;&#x2F;div&gt;
      
    &lt;&#x2F;div&gt;

    
    &lt;button
      class=&quot;img-carousel-btn absolute left-3 top-1&#x2F;2 -translate-y-1&#x2F;2 flex items-center justify-center rounded-full border border-white&#x2F;10 bg-black&#x2F;50 backdrop-blur-sm p-2 text-white&#x2F;70 transition-all duration-200 hover:bg-black&#x2F;70 hover:text-white hover:border-orange-500&#x2F;30 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-2&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      aria-label=&quot;Previous slide&quot;
      data-carousel-prev
    &gt;
      &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; class=&quot;shrink-0&quot;&gt;
        &lt;polyline points=&quot;12,15 7,10 12,5&quot; &#x2F;&gt;
      &lt;&#x2F;svg&gt;
    &lt;&#x2F;button&gt;

    
    &lt;button
      class=&quot;img-carousel-btn absolute right-3 top-1&#x2F;2 -translate-y-1&#x2F;2 flex items-center justify-center rounded-full border border-white&#x2F;10 bg-black&#x2F;50 backdrop-blur-sm p-2 text-white&#x2F;70 transition-all duration-200 hover:bg-black&#x2F;70 hover:text-white hover:border-orange-500&#x2F;30 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-2&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      aria-label=&quot;Next slide&quot;
      data-carousel-next
    &gt;
      &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; class=&quot;shrink-0&quot;&gt;
        &lt;polyline points=&quot;8,5 13,10 8,15&quot; &#x2F;&gt;
      &lt;&#x2F;svg&gt;
    &lt;&#x2F;button&gt;

    
    &lt;div class=&quot;img-carousel-hint pointer-events-none absolute bottom-4 left-1&#x2F;2 -translate-x-1&#x2F;2 flex items-center gap-1.5 rounded-full border border-white&#x2F;10 bg-black&#x2F;50 backdrop-blur-sm px-3 py-1.5 text-xs text-white&#x2F;50 opacity-0 transition-opacity duration-300 md:hidden&quot; aria-hidden=&quot;true&quot;&gt;
      &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 16 16&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.5&quot; stroke-linecap=&quot;round&quot; aria-hidden=&quot;true&quot; class=&quot;shrink-0&quot;&gt;&lt;path d=&quot;M3 8h10M10 5l3 3-3 3&quot;&#x2F;&gt;&lt;&#x2F;svg&gt;
      swipe
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;

  
  &lt;div class=&quot;flex justify-center gap-2 mt-4&quot; aria-label=&quot;Carousel slide indicators&quot;&gt;
    
    &lt;button
      class=&quot;img-carousel-dot h-2 w-2 rounded-full transition-all duration-200 hover:bg-orange-500&#x2F;40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-1 img-carousel-dot--active&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      aria-current=&quot;true&quot;
      aria-label=&quot;Go to slide 1&quot;
      data-carousel-dot=&quot;0&quot;
    &gt;&lt;&#x2F;button&gt;
    
    &lt;button
      class=&quot;img-carousel-dot h-2 w-2 rounded-full transition-all duration-200 hover:bg-orange-500&#x2F;40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-1 bg-white&#x2F;10 border border-white&#x2F;20&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      
      aria-label=&quot;Go to slide 2&quot;
      data-carousel-dot=&quot;1&quot;
    &gt;&lt;&#x2F;button&gt;
    
    &lt;button
      class=&quot;img-carousel-dot h-2 w-2 rounded-full transition-all duration-200 hover:bg-orange-500&#x2F;40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-500 focus-visible:ring-offset-1 bg-white&#x2F;10 border border-white&#x2F;20&quot;
      style=&quot;--tw-ring-offset-color: #101011;&quot;
      
      aria-label=&quot;Go to slide 3&quot;
      data-carousel-dot=&quot;2&quot;
    &gt;&lt;&#x2F;button&gt;
    
  &lt;&#x2F;div&gt;

  
  &lt;span class=&quot;sr-only&quot; aria-live=&quot;polite&quot; aria-atomic=&quot;true&quot; data-carousel-live&gt;Slide 1 of 3&lt;&#x2F;span&gt;

  
  &lt;figcaption class=&quot;img-caption mt-3 text-center text-sm text-neutral-400&quot;&gt;
    Yours truly got the trail name &amp;#x27;Bamba&amp;#x27; after the Israeli snack food he carried with him, and his matching yellow shirt
  &lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;script&gt;
(function() {
  var root = document.getElementById(&#x27;carousel-1&#x27;);
  if (!root) return;

  var track = root.querySelector(&#x27;.img-carousel-track&#x27;);
  var slides = root.querySelectorAll(&#x27;.img-carousel-slide&#x27;);
  var dots = root.querySelectorAll(&#x27;.img-carousel-dot&#x27;);
  var prevBtn = root.querySelector(&#x27;[data-carousel-prev]&#x27;);
  var nextBtn = root.querySelector(&#x27;[data-carousel-next]&#x27;);
  var hint = root.querySelector(&#x27;.img-carousel-hint&#x27;);
  var live = root.querySelector(&#x27;[data-carousel-live]&#x27;);
  var total = slides.length;
  var current = 0;
  var startX = 0;
  var deltaX = 0;
  var dragging = false;
  var reduceMotion = window.matchMedia &amp;&amp; window.matchMedia(&#x27;(prefers-reduced-motion: reduce)&#x27;).matches;

  if (reduceMotion) {
    track.style.transition = &#x27;none&#x27;;
  }

  function goTo(index) {
    current = ((index % total) + total) % total;
    track.style.transform = &#x27;translateX(-&#x27; + (current * 100) + &#x27;%)&#x27;;
    dots.forEach(function(dot, i) {
      var isActive = i === current;
      dot.classList.toggle(&#x27;img-carousel-dot--active&#x27;, isActive);
      dot.classList.toggle(&#x27;bg-white&#x2F;10&#x27;, !isActive);
      dot.classList.toggle(&#x27;border&#x27;, !isActive);
      dot.classList.toggle(&#x27;border-white&#x2F;20&#x27;, !isActive);
      if (isActive) {
        dot.setAttribute(&#x27;aria-current&#x27;, &#x27;true&#x27;);
      } else {
        dot.removeAttribute(&#x27;aria-current&#x27;);
      }
    });
    if (live) live.textContent = &#x27;Slide &#x27; + (current + 1) + &#x27; of &#x27; + total;
    if (hint) hint.style.opacity = &#x27;0&#x27;;
  }

  prevBtn.addEventListener(&#x27;click&#x27;, function() { goTo(current - 1); });
  nextBtn.addEventListener(&#x27;click&#x27;, function() { goTo(current + 1); });

  dots.forEach(function(dot) {
    dot.addEventListener(&#x27;click&#x27;, function() {
      goTo(parseInt(dot.dataset.carouselDot, 10));
    });
  });

  &#x2F;&#x2F; Keyboard navigation
  root.addEventListener(&#x27;keydown&#x27;, function(e) {
    if (e.key === &#x27;ArrowLeft&#x27;) { goTo(current - 1); e.preventDefault(); }
    if (e.key === &#x27;ArrowRight&#x27;) { goTo(current + 1); e.preventDefault(); }
  });

  &#x2F;&#x2F; Touch &#x2F; swipe
  track.addEventListener(&#x27;touchstart&#x27;, function(e) {
    startX = e.touches[0].clientX;
    dragging = true;
    track.style.transition = &#x27;none&#x27;;
  }, { passive: true });

  track.addEventListener(&#x27;touchmove&#x27;, function(e) {
    if (!dragging) return;
    deltaX = e.touches[0].clientX - startX;
    var offset = -(current * 100) + (deltaX &#x2F; track.offsetWidth) * 100;
    track.style.transform = &#x27;translateX(&#x27; + offset + &#x27;%)&#x27;;
  }, { passive: true });

  track.addEventListener(&#x27;touchend&#x27;, function() {
    if (!dragging) return;
    dragging = false;
    track.style.transition = reduceMotion ? &#x27;none&#x27; : &#x27;&#x27;;
    var threshold = track.offsetWidth * 0.2;
    if (deltaX &lt; -threshold) goTo(current + 1);
    else if (deltaX &gt; threshold) goTo(current - 1);
    else goTo(current);
    deltaX = 0;
  });

  &#x2F;&#x2F; Show swipe hint on touch devices
  if (hint &amp;&amp; &#x27;ontouchstart&#x27; in window) {
    setTimeout(function() { hint.style.opacity = &#x27;1&#x27;; }, 500);
    setTimeout(function() { hint.style.opacity = &#x27;0&#x27;; }, 3000);
  }
})();
&lt;&#x2F;script&gt;
&lt;p&gt;This journey began with a single video on YouTube titled &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=rY0i2wUmIak&quot;&gt;“Two Years on a
Bike&lt;&#x2F;a&gt;“. Seeing Martijn’s journey
sparked something in my brain that had been under-stimulated. I realized that I
was not making the most of my life, and time was slipping away. At the beginning
of this year, I made the choice to hike the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Pacific_Crest_Trail&quot;&gt;Pacific Crest
Trail&lt;&#x2F;a&gt;. I documented my
journey through &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jakeby.land&quot;&gt;my travel blog&lt;&#x2F;a&gt;, but I ended up not
completing the trail due to a torn quadriceps after 37 days of hiking.&lt;&#x2F;p&gt;
&lt;p&gt;I can write about the PCT for pages. Endless trail stories, characters met,
disasters overcome, and friendships forged. This is not the post for those
stories, I may write a retrospective on the trail soon, but the most important
thing worth mentioning is this: the trail community was pure, loving, kind,
ambitious, and most of all smelly.&lt;&#x2F;p&gt;
&lt;p&gt;We slept in tents, sometimes directly on the dirt, we walked every day - always
north, we ate and ate and ate, then ate some more. We saw stars, swam in rivers
and hot springs, lamented the scorching desert heat, and the freezing nights. We
cried, nursed our blisters and wounds, said goodbye to friends, made new ones.
We supported each other, loved one another, and laughed - so much laughter.&lt;&#x2F;p&gt;
&lt;p&gt;I miss those friends I made on trail every day, and I have the honor of seeing
several of them complete their thru-hike today.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;arriving-at-rc&quot;&gt;Arriving at RC&lt;&#x2F;h3&gt;
&lt;p&gt;Getting to Recurse has been on my list for several years now. RC entered my
radar with either a blog post or a conversation from one of the many alumni I
have followed, such as my former co-worker and Keybaser &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;printf.net&#x2F;&quot;&gt;Chris
Ball&lt;&#x2F;a&gt;, not to mention &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jvns.ca&#x2F;&quot;&gt;Julia Evans&lt;&#x2F;a&gt;, as
well as &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;filippo.io&#x2F;&quot;&gt;Filippo Valsorda&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Being effectively homeless while walking the Pacific Crest Trail then coming
home to nothing was a wake up call. I realized I could either put my engineering
hat back on and try for startups or corporations again, or I could take a few
more steps back and use the time I allocated for the trail to continue self
reflecting.&lt;&#x2F;p&gt;
&lt;p&gt;It became clear to me that I wanted to have a fresh experience with programming
again. I needed a revival of my love for coding, computers, technology and an
exorcism of sorts for my cynicism around my field. In late August I tried
interviewing again while simultaneously applying for RC, I let those two race
each other, whichever completed first would win. So I went to RC&lt;&#x2F;p&gt;
&lt;h3 id=&quot;first-day-of-school&quot;&gt;First Day of School&lt;&#x2F;h3&gt;
&lt;p&gt;Fellow batchmate Stacey Tay put it well in &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stace.dev&#x2F;rc-01-first-week-at-recurse&quot;&gt;his week one
roundup&lt;&#x2F;a&gt;, starting RC is a lot
like returning to school.&lt;&#x2F;p&gt;
&lt;p&gt;There is a certain kind of nervous energy after returning to classes after a
long summer of play. The Recurse Center is no different. The first week was ripe
with new faces, new ideas, and testing the waters to see if any of these other
people are as weird as me. Turns out, they are, and there are heaps of quirky
weekly discussion groups, impromptu pairing sessions, and creative coding.&lt;&#x2F;p&gt;
&lt;p&gt;I decided to commit to learning about my fellow batchmates and their interests
before hitting the ground running on my personal projects and goals at RC. In
theory I could be building something interesting on my own at any time, but a
being included in rich circle of curious programmers does not happen every day.
There are several people currently at RC with overlapping interests in
cryptography, Rust, lower level systems, and fancy web tech. Now I know I won’t
be the odd ball.&lt;&#x2F;p&gt;
&lt;p&gt;The facilitators at RC do an excellent job making everyone feel welcome and have
a keen sense of what we need to get started. In the first week I was able to
join a ‘Rust Books Crew’ as well as revive some interest in the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cryptopals.com&quot;&gt;Cryptopals
challenges&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;what-i-ll-work-on&quot;&gt;What I’ll Work On&lt;&#x2F;h3&gt;
&lt;p&gt;Here’s the big idea: I have enjoyed working on security and cryptography over
the past several years, but I have not had the opportunity or time to take a
deeper dive into cryptography engineering. My overall goal is to work on
building up my cryptography knowledge my implementing primitives from the ground
up whenever possible. Additionally my programming experience up until now have
been with &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Garbage_collection_(computer_science)&quot;&gt;Garbage
Collected&lt;&#x2F;a&gt;
languages like Go, JavaScript&#x2F;TypeScript, Ruby, and Python. In University I
steered clear of the C&#x2F;C++ track because I did not trust myself to write memory
safe code and was more interested in producing things for the web where garbage
collected languages reign supreme.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;rust-memory-management-and-concurrency&quot;&gt;Rust, Memory Management, and Concurrency&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Read through &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nostarch.com&#x2F;rust-rustaceans&quot;&gt;Rust for Rustaceans&lt;&#x2F;a&gt; by
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;thesquareplanet.com&#x2F;&quot;&gt;Jon Gjengset&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Dive into native Rust multi-threading (thread spawning, joining, and channels)&lt;&#x2F;li&gt;
&lt;li&gt;Use &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tokio.rs&#x2F;&quot;&gt;tokio&lt;&#x2F;a&gt; for a project (here be dragons)&lt;&#x2F;li&gt;
&lt;li&gt;Understand &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;std&#x2F;sync&#x2F;atomic&#x2F;enum.Ordering.html&quot;&gt;atomic memory
orderings&lt;&#x2F;a&gt;
(which are effectively C++ 20’s memory orderings)&lt;&#x2F;li&gt;
&lt;li&gt;Get very comfortable with
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;std&#x2F;sync&#x2F;struct.Arc.html&quot;&gt;Arc&lt;&#x2F;a&gt;,
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;std&#x2F;sync&#x2F;struct.Mutex.html&quot;&gt;Mutex&lt;&#x2F;a&gt;,
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;std&#x2F;sync&#x2F;struct.RwLock.html&quot;&gt;RwLock&lt;&#x2F;a&gt;, etc.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;cryptography-fundamentals&quot;&gt;Cryptography Fundamentals&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Implement either
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;ChaCha20-Poly1305&quot;&gt;XChaCha20Poly1305&lt;&#x2F;a&gt; or
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Advanced_Encryption_Standard&quot;&gt;AES&lt;&#x2F;a&gt; from scratch&lt;&#x2F;li&gt;
&lt;li&gt;Build and compile a &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Merkle_tree&quot;&gt;Merkle Tree&lt;&#x2F;a&gt;
explorer to &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;webassembly.org&#x2F;&quot;&gt;Web Assembly&lt;&#x2F;a&gt; and host it&lt;&#x2F;li&gt;
&lt;li&gt;Complete, ideally, all of the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cryptopals.com&quot;&gt;Cryptopals challenges&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Finish my reading of &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.manning.com&#x2F;books&#x2F;real-world-cryptography&quot;&gt;Real-World
Cryptography&lt;&#x2F;a&gt; by David
B. Wong&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;encrypted-filesystem&quot;&gt;Encrypted Filesystem&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;While at Keybase I was not able to work directly on
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;book.keybase.io&#x2F;files&quot;&gt;KBFS&lt;&#x2F;a&gt;, Keybase’s end to end encrypted
filesystem. I was a heavy user naturally and can happily describe it a magic.
Totally effortless, secure, and pleasant to use.&lt;&#x2F;li&gt;
&lt;li&gt;Why no re-implement the magical
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Filesystem_in_Userspace&quot;&gt;FUSE&lt;&#x2F;a&gt; part of KBFS in
Rust as a learning exercise while at RC?&lt;&#x2F;li&gt;
&lt;li&gt;I have no desire or intention to re-implement the key exchange, social proofs,
or discoverability necessary to make KBFS work the way it did, however it
would be nice to tackle &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;End-to-end_encryption&quot;&gt;End to End
Encryption&lt;&#x2F;a&gt; for file
systems.&lt;&#x2F;li&gt;
&lt;li&gt;Big question: can I cross compile the core file system cryptography to Web
Assembly to it can run in the browser while also enabling nice system
integration via FUSE?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;more-web-projects&quot;&gt;More Web Projects&lt;&#x2F;h4&gt;
&lt;p&gt;I learned that I am a ‘show don’t tell’ type of programmer. I enjoy telling
computers how to build something I can show to another person, the visual or
interactive nature of a web application is a great manifestation of this. Today
everyone has a universally compatible browser which can run web applications,
this is nothing short of magical and we forgot it daily. The web is a fantastic
ecosystem and it deserve more panache than SEO, E-commerce, and banking. I have
a few ideas in this domain I hope to write about soon.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;writing-speaking-presenting&quot;&gt;Writing, Speaking, Presenting&lt;&#x2F;h4&gt;
&lt;p&gt;Those who know me would not describe me a shy, but perhaps private. I have taken
my public presence seriously by not having one. I think my thesis in life,
especially on the internet, is to &lt;a href=&quot;https:&#x2F;&#x2F;jry.io&#x2F;writing&#x2F;keep-a-low-profile&#x2F;&quot;&gt;Keep a Low Profile&lt;&#x2F;a&gt;.
Yet, we learn and grow by putting ourselves ‘out there’, to make a statement publicly and hear back
from the void “you suck!”&lt;&#x2F;p&gt;
&lt;p&gt;At least amongst the people at the Recurse Center, the tone is friendly,
forgiving, and most of all accepting of vulnerability. Many of my batchmates are
switching careers into tech and I fully support them, if they can make blog
posts about what they are learning so can I! Thanks for the encouragement
everyone.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;spontaneity&quot;&gt;Spontaneity!&lt;&#x2F;h4&gt;
&lt;p&gt;Many people at RC will write a semi-daily checkin via Zulip. Reading these
checkins are a constant source of connection, pair programming, and inspiration.
Checkins are great for “chaotic distractive creativity” because often times a
single statement by a peer will lead to hours of fruitful conversation. For
those who attended a university, it is directly equivalent to overhearing or
walking in on intellectual conversation in classrooms and hallways.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;after-my-batch&quot;&gt;After My Batch&lt;&#x2F;h3&gt;
&lt;p&gt;Using Rust at work and at scale is my biggest technical goal after my time at
Recurse. I am sold entirely on its ability to produce fast, safe, and
multi-platform code. It is a true &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=rOHaBw7XlzA&quot;&gt;Hydro-Dynamic Spatula with port and starboard
attachments and turbo drive&lt;&#x2F;a&gt;. Rust
also has a strong future in Cryptography, especially thanks to its memory
safety. Equally as important, I hope to find an excellent group of people to
work with. There are several companies on my radar whose culture matches what I
am looking for. We shall see how this assessment holds up in 12 weeks. In the
mean time excited for what is to come!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Keep a Low Profile</title>
        <published>2023-07-14T00:00:00+00:00</published>
        <updated>2023-08-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Jacob Young
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jry.io/writing/keep-a-low-profile/"/>
        <id>https://jry.io/writing/keep-a-low-profile/</id>
        
        <content type="html" xml:base="https://jry.io/writing/keep-a-low-profile/">&lt;p&gt;Keeping a low profile online is an important and lost skill. We have
collectively decided that we prefer to plaster our most sensitive thoughts,
moments, and media over the digital airspace.&lt;&#x2F;p&gt;
&lt;p&gt;Avoiding drawing attention to one self online is an art. Knowing how much to
share, where, and with whom should be a foundational internet literacy skill.
Eating a hamburger may feel good, but we all know we’re inching closer to
obesity with each bite.&lt;&#x2F;p&gt;
&lt;p&gt;As I write more on this site, the premise will be about keeping a low profile. I
have no expectations for high readership or feedback. I want to enjoy the web,
making things for it, and playing with new tools.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
