<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://dev.arman.ac/feed.xml" rel="self" type="application/atom+xml" /><link href="https://dev.arman.ac/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-11-13T11:46:44-05:00</updated><id>https://dev.arman.ac/feed.xml</id><title type="html">Arman’s technical blog</title><subtitle>Notes on software engineering, systems, and things learned along the way.</subtitle><author><name>Arman</name></author><entry><title type="html">Hello, world</title><link href="https://dev.arman.ac/posts/hello-world/" rel="alternate" type="text/html" title="Hello, world" /><published>2026-11-13T00:00:00-05:00</published><updated>2026-11-13T00:00:00-05:00</updated><id>https://dev.arman.ac/posts/hello-world</id><content type="html" xml:base="https://dev.arman.ac/posts/hello-world/"><![CDATA[<p>This first post doubles as a style reference. Every element a technical write-up
here can use appears below once, with a note on how to write it.</p>

<ul id="markdown-toc">
  <li><a href="#text" id="markdown-toc-text">Text</a>    <ul>
      <li><a href="#lists" id="markdown-toc-lists">Lists</a></li>
    </ul>
  </li>
  <li><a href="#code" id="markdown-toc-code">Code</a></li>
  <li><a href="#math" id="markdown-toc-math">Math</a></li>
  <li><a href="#tables" id="markdown-toc-tables">Tables</a></li>
  <li><a href="#figures" id="markdown-toc-figures">Figures</a></li>
</ul>

<h2 id="text">Text</h2>

<p>Paragraphs are plain Markdown. <strong>Bold</strong> marks the one thing to remember,
<em>italics</em> add emphasis, and <a href="https://github.com/ArmanJR">links</a> look like this.
Inline code such as <code class="language-plaintext highlighter-rouge">O(n log n)</code> or <code class="language-plaintext highlighter-rouge">git rebase --onto</code> sits inside a sentence.
Keyboard shortcuts use <code class="language-plaintext highlighter-rouge">&lt;kbd&gt;</code>: press <kbd>Ctrl</kbd> + <kbd>C</kbd> to stop the run.</p>

<p>Footnotes keep the main text short while still citing the source.<sup id="fnref:cite" role="doc-noteref"><a href="#fn:cite" class="footnote" rel="footnote">1</a></sup></p>

<h3 id="lists">Lists</h3>

<ol>
  <li>Reproduce the bug with the smallest input.</li>
  <li>Write the failing test.</li>
  <li>Fix it, then delete the workaround.</li>
</ol>

<ul>
  <li>Unordered lists work too.</li>
  <li>They can nest:
    <ul>
      <li>like this.</li>
    </ul>
  </li>
</ul>

<blockquote>
  <p>Quotes are for other people’s words, or for the sentence you want the reader
to remember when they forget the rest of the post.</p>
</blockquote>

<h2 id="code">Code</h2>

<p>Fenced blocks get syntax highlighting, a language label, and a copy button.
Write the language after the opening fence:</p>

<div class="language-go highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">// Overlaps reports whether two weekly schedules share any half-hour slot.</span>
<span class="k">func</span> <span class="p">(</span><span class="n">w</span> <span class="n">Week</span><span class="p">)</span> <span class="n">Overlaps</span><span class="p">(</span><span class="n">o</span> <span class="n">Week</span><span class="p">)</span> <span class="kt">bool</span> <span class="p">{</span>
	<span class="k">for</span> <span class="n">i</span> <span class="o">:=</span> <span class="k">range</span> <span class="n">w</span> <span class="p">{</span>
		<span class="k">if</span> <span class="n">w</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">&amp;</span><span class="n">o</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="m">0</span> <span class="p">{</span>
			<span class="k">return</span> <span class="no">true</span>
		<span class="p">}</span>
	<span class="p">}</span>
	<span class="k">return</span> <span class="no">false</span>
<span class="p">}</span>
</code></pre></div></div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">logging</span>

<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="p">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>


<span class="k">def</span> <span class="nf">dedupe</span><span class="p">(</span><span class="n">items</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
    <span class="s">"""Keep the first occurrence of each item, preserving order."""</span>
    <span class="n">seen</span><span class="p">:</span> <span class="nb">set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
    <span class="n">out</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">items</span> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">x</span> <span class="ow">in</span> <span class="n">seen</span> <span class="ow">or</span> <span class="n">seen</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">x</span><span class="p">))]</span>
    <span class="n">logger</span><span class="p">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"dedupe: %d -&gt; %d items"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">items</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">out</span><span class="p">))</span>
    <span class="k">return</span> <span class="n">out</span>
</code></pre></div></div>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>uv run tests/check_site.py https://dev.arman.ac
</code></pre></div></div>

<p>Diffs show what changed in a fix:</p>

<div class="language-diff highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gd">- timeout = 5
</span><span class="gi">+ timeout = 30  # the upstream p99 is 12 s
</span></code></pre></div></div>

<h2 id="math">Math</h2>

<p>Posts that set <code class="language-plaintext highlighter-rouge">math: true</code> in front matter render LaTeX with KaTeX. Inline math
uses double dollars, so the expected false-positive rate of a Bloom filter with
\(m\) bits, \(k\) hash functions and \(n\) items is about \(\left(1 - e^{-kn/m}\right)^k\).
Display math goes on its own lines:</p>

\[k_{\text{opt}} = \frac{m}{n} \ln 2
\qquad
\Rightarrow
\qquad
p \approx 0.6185^{\,m/n}\]

<h2 id="tables">Tables</h2>

<p>Numbers are aligned with tabular figures. A colon in the separator row
right-aligns a column:</p>

<table>
  <thead>
    <tr>
      <th>Approach</th>
      <th style="text-align: right">Median (ms)</th>
      <th style="text-align: right">p99 (ms)</th>
      <th style="text-align: right">Memory</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Brute force</td>
      <td style="text-align: right">4,210</td>
      <td style="text-align: right">31,800</td>
      <td style="text-align: right">12 MB</td>
    </tr>
    <tr>
      <td>SAT solver</td>
      <td style="text-align: right">96</td>
      <td style="text-align: right">1,420</td>
      <td style="text-align: right">48 MB</td>
    </tr>
    <tr>
      <td>Greedy + prune</td>
      <td style="text-align: right">3</td>
      <td style="text-align: right">41</td>
      <td style="text-align: right">2 MB</td>
    </tr>
  </tbody>
</table>

<h2 id="figures">Figures</h2>

<p>Images and diagrams go in <code class="language-plaintext highlighter-rouge">assets/posts/&lt;post-name&gt;/</code>. A bare image gets the wide
column; use a <code class="language-plaintext highlighter-rouge">&lt;figure&gt;</code> when it needs a caption:</p>

<figure>
  <img src="/assets/posts/hello-world/pipeline.svg" alt="Markdown is converted by Jekyll with kramdown and Rouge into HTML, which GitHub Pages serves." />
  <figcaption>How a post gets from Markdown to this page.</figcaption>
</figure>

<hr />

<p>A horizontal rule (<code class="language-plaintext highlighter-rouge">---</code>) separates major parts of a long post. The last
paragraph of every post ends with a tombstone, the way a proof does.</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:cite" role="doc-endnote">
      <p>Footnotes are written as <code class="language-plaintext highlighter-rouge">[^name]</code> in the text and defined anywhere in the file. <a href="#fnref:cite" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Arman</name></author><summary type="html"><![CDATA[A tour of everything a post on this blog can contain, written as the reference I'll copy from.]]></summary></entry></feed>