<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Roquib</title>
<subtitle>Senior software engineer building products with AI-assisted engineering. TypeScript, NestJS, Next.js, Rails, and PostgreSQL, and learning Rust.</subtitle>
<link href="https://abdurroquib.com/feed.xml" rel="self" type="application/atom+xml"/>
<link href="https://abdurroquib.com/" rel="alternate" type="text/html"/>
<id>https://abdurroquib.com/</id>
<updated>2026-10-30T00:00:00.000Z</updated>
<author><name>Abdur Roquib Pramanik</name></author>
<entry>
<title>Hello, world</title>
<link href="https://abdurroquib.com/2026/10/30/hello-world.html" rel="alternate" type="text/html"/>
<id>https://abdurroquib.com/2026/10/30/hello-world.html</id>
<published>2026-10-30T00:00:00Z</published>
<updated>2026-10-30T00:00:00Z</updated>
<author><name>Abdur Roquib Pramanik</name></author>
<summary>This is the first post on the new version of the blog. Posts are plain text files written in Djot, and a small Node script turns them into HTML.</summary>
<content type="html" xml:base="https://abdurroquib.com/2026/10/30/hello-world.html"><![CDATA[
<header class="post-header">
<h1>Hello, world</h1>
<time class="meta" datetime="2026-10-30">Oct 30, 2026</time>
</header>
<p>This is the first post on the new version of the blog. Posts are plain text files written in <a href="https://djot.net">Djot</a>, and a small Node script turns them into HTML.</p>
<p>Here is a short code sample, highlighted at build time:</p>

<figure class="code-block">
<figcaption>Binary search over a sorted array</figcaption>
<pre><code class="language-js"><span class="hljs-keyword">function</span> <span class="hljs-title function_">binarySearch</span>(<span class="hljs-params">items, target</span>) {
  <span class="hljs-keyword">let</span> lo = <span class="hljs-number">0</span>;
  <span class="hljs-keyword">let</span> hi = items.<span class="hljs-property">length</span> - <span class="hljs-number">1</span>;
  <span class="hljs-keyword">while</span> (lo &lt;= hi) {
    <span class="hljs-keyword">const</span> mid = (lo + hi) &gt;&gt; <span class="hljs-number">1</span>;
    <span class="hljs-keyword">if</span> (items[mid] === target) <span class="hljs-keyword">return</span> mid;
    <span class="hljs-keyword">if</span> (items[mid] &lt; target) lo = mid + <span class="hljs-number">1</span>;
    <span class="hljs-keyword">else</span> hi = mid - <span class="hljs-number">1</span>;
  }
  <span class="hljs-keyword">return</span> -<span class="hljs-number">1</span>;
}</code></pre>
</figure>

<aside class="admonition note">
<p class="admonition-title">Note</p>
<div><p>Notes, warnings and questions are rendered as callouts. Use <code>::: warn</code> or <code>::: quiz</code> for the other kinds.</p>
</div>
</aside>
<p>To start a new post, run <code>npm run new -- your-slug</code>. It creates a dated file in <code>content/posts</code>.</p>
]]></content>
</entry>
</feed>
