<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>technical-writing on S Anand</title>
    <link>https://www.s-anand.net/blog/tag/technical-writing/</link>
    <description>Recent content in technical-writing on S Anand</description>
    <generator>Hugo -- 0.164.0</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 20 Feb 2026 18:09:04 +0800</lastBuildDate>
    <atom:link href="https://www.s-anand.net/blog/tag/technical-writing/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Transcript AI-ded interviews</title>
      <link>https://www.s-anand.net/blog/transcript-ai-ded-interviews/</link>
      <pubDate>Fri, 20 Feb 2026 18:09:04 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/transcript-ai-ded-interviews/</guid>
      <description>&lt;!-- https://gemini.google.com/app/fc17155c3249516c --&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/in/priyankamishra20/&#34;&gt;Priyanka&lt;/a&gt; was ghost-writing an interview request from PC Quest for &lt;a href=&#34;https://www.linkedin.com/in/ankorrai/&#34;&gt;Ankor&lt;/a&gt;. Two questions were a bit technical:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Straive combines data engineering, analytics, AI, and content services. At a technical level, how are enterprises stitching these capabilities together architecturally and operationally when addressing complex business problems at scale?&lt;/li&gt;
&lt;li&gt;GenAI systems tend to behave unpredictably when exposed to real workloads. What engineering patterns, monitoring approaches, or runtime safeguards are becoming essential to maintain reliability, performance, and cost control in production settings?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;hellip; and she asked if I could review.&lt;/p&gt;
&lt;p&gt;These days, &amp;ldquo;rewrite&amp;rdquo; is easier than &amp;ldquo;review&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-02-20-transcript-ai-ded-interviews.avif&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;STEP 1&lt;/strong&gt;: Copy all my meeting transcripts with Ankor. Below is my process, but copy-paste or a coding agent works even better.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1a&lt;/strong&gt;: Download transcripts with &lt;a href=&#34;https://rclone.org/&#34;&gt;&lt;code&gt;rclone&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1b&lt;/strong&gt;: Convert Word to Markdown with &lt;a href=&#34;https://pandoc.org/&#34;&gt;&lt;code&gt;pandoc&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1c&lt;/strong&gt;: Combine using &lt;a href=&#34;https://github.com/simonw/files-to-prompt&#34;&gt;&lt;code&gt;uvx files-to-prompt&lt;/code&gt;&lt;/a&gt; and copy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;STEP 2&lt;/strong&gt;: Pass &lt;a href=&#34;https://gemini.google.com/&#34;&gt;Gemini&lt;/a&gt; (which accepts 1MB!) this prompt:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Based on the documents below (transcripts of my calls with Ankor),
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;and the contents of my Google Drive where you&amp;#39;ll find material about Straive,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;how would Ankor answer this question to PCQuest -
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;in a way that&amp;#39;s aligned with their audience?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Q: Straive combines data engineering, analytics, AI, and content services.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;At a technical level, how are enterprises stitching these capabilities together
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;architecturally and operationally when addressing complex business problems at scale?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(Paste the transcripts)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The answer was a bit long and not very insightful. So I added 2 prompts:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Share this as a 150-word summary suitable for a PCQuest audience.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Frame this in a way that&amp;#39;s insightful and evocative for a business audience.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Think about an approach that would make them think,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#34;Oh, yeah, that&amp;#39;s insightful, and wasn&amp;#39;t obvious until Ankor mentioned it.&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The final result was quite a good one, reflecting some of our recent conversations:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Most enterprises are making a critical mistake with AI right now: they are treating foundational models like marriages, when they should be treating them like batteries.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you hardwire your data and content pipelines directly to today’s best LLM, you are accumulating massive &amp;lsquo;&lt;strong&gt;AI Debt&lt;/strong&gt;.&amp;rsquo; When a better model drops next year, you’re stuck. The true enterprise differentiator isn&amp;rsquo;t the model—it’s building an agnostic orchestration layer. This middleware lets you swap out backend models instantly, without breaking your business.&lt;/p&gt;
&lt;p&gt;Once you decouple the model, you must stop trying to make legacy, linear assembly lines run faster. Instead, we use AI to &lt;strong&gt;&amp;lsquo;squish&amp;rsquo; the assembly line&lt;/strong&gt; entirely. AI co-pilots extract metadata and trigger multiple agents to execute tasks in parallel, not sequentially.&lt;/p&gt;
&lt;p&gt;This fundamentally shifts the workforce. We are no longer putting humans &lt;em&gt;in&lt;/em&gt; the loop to do the heavy lifting; we are elevating them &lt;strong&gt;&lt;em&gt;on&lt;/em&gt; the loop&lt;/strong&gt; as auditors. The AI executes the work and provides the citation trail; the human manages the risk. That is how you bypass theoretical six-month roadmaps and move from ideation to a secure, live enterprise deployment in just eight weeks.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;STEP 3&lt;/strong&gt;: For the next question:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Think about how Ankor could answer this question -
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;applying the same process, style and approach.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Q: GenAI systems tend to behave unpredictably when exposed to real workloads.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;What engineering patterns, monitoring approaches, or runtime safeguards are
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;becoming essential to maintain reliability, performance, and cost control in production settings?
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It again needed some tweaking:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Rewrite: about 150 words, slightly different style
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(to make it avoid looking like too close a clone of the earlier answer),
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;but just as evocative and insightful.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;hellip; and the answer, again, was quite close to some of our discussons:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;Most leaders try to fix GenAI unpredictability by endlessly tweaking prompts. That’s like trying to tame the weather instead of just building a stronger roof.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;At Straive, we assume models will hallucinate. The true enterprise differentiator is the &lt;em&gt;engineering harness&lt;/em&gt; built around them.&lt;/p&gt;
&lt;p&gt;We secure workloads through &lt;strong&gt;Verifiable Autonomy&lt;/strong&gt;. Instead of testing in live production, we run agents through simulated environments governed by strict policy-as-code. If an agent can’t deterministically pass the simulation, it doesn’t touch real data.&lt;/p&gt;
&lt;p&gt;To scale without exploding headcount, we use &lt;strong&gt;AI to govern AI&lt;/strong&gt;. We deploy a &amp;lsquo;Maker/Checker&amp;rsquo; architecture: a creative model generates the work, while a cheaper, constrained model instantly audits it for compliance and accurate citations. Humans only handle the exceptions.&lt;/p&gt;
&lt;p&gt;Finally, we stop treating every task like a real-time chatbot. By shifting latency-insensitive workloads to asynchronous batch processing, we bypass rate limits and slash compute costs by half. Reliability isn&amp;rsquo;t a model feature; it&amp;rsquo;s an architectural choice.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;The trick to re-purposing content quickly is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Keep data / docs handy&lt;/li&gt;
&lt;li&gt;Learn to quickly search &amp;amp; copy-paste&lt;/li&gt;
&lt;li&gt;Learn to quickly judge and give feedback to AI&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    <item>
      <title>How to extend Markdown with custom blocks</title>
      <link>https://www.s-anand.net/blog/how-to-extend-markdown-with-custom-blocks/</link>
      <pubDate>Fri, 08 Jan 2021 09:37:48 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/how-to-extend-markdown-with-custom-blocks/</guid>
      <description>&lt;p&gt;One problem I&amp;rsquo;ve had in Markdown is rendering a content in columns.&lt;/p&gt;
&lt;p&gt;On Bootstrap, the markup would look like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-markup&#34; data-lang=&#34;markup&#34;&gt;&amp;lt;div class=&amp;#34;row&amp;#34;&amp;gt;
  &amp;lt;div class=&amp;#34;col&amp;#34;&amp;gt;...&amp;lt;/div&amp;gt;
  &amp;lt;div class=&amp;#34;col&amp;#34;&amp;gt;...&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;How do we get that into Markdown without writing HTML?&lt;/p&gt;
&lt;p&gt;On Python, the &lt;a href=&#34;https://python-markdown.github.io/extensions/attr_list/&#34;&gt;attribute lists extension&lt;/a&gt; lets you add a class. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;This is some content
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{: .row}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;hellip; renders &lt;code&gt;&amp;lt;p class=&amp;quot;row&amp;quot;&amp;gt;This is some content&amp;lt;/p&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;But I can&amp;rsquo;t do that to multiple paragraphs. Nor can I next content, i.e. add a &lt;code&gt;.col&lt;/code&gt; inside the &lt;code&gt;.row&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Enter &lt;a href=&#34;https://pypi.org/project/markdown-customblocks/&#34;&gt;markdown-customblocks&lt;/a&gt;. It&amp;rsquo;s a Python module that extends &lt;a href=&#34;https://python-markdown.github.io/&#34;&gt;Python Markdown&lt;/a&gt;. This lets me write:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;::: row
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;::: col
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Content in column 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;::: col
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Content in column 2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;::: row
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;::: col
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Content in column 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;::: col
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Content in column 2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This translates to:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-markup&#34; data-lang=&#34;markup&#34;&gt;&amp;lt;div class=&amp;#34;row&amp;#34;&amp;gt;
  &amp;lt;div class=&amp;#34;col&amp;#34;&amp;gt;Content in column 1&amp;lt;/div&amp;gt;
  &amp;lt;div class=&amp;#34;col&amp;#34;&amp;gt;Content in column 2&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Better yet, we can create our own custom HTML block types. For example, this code:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;markdown&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Markdown&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;customblocks&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CustomBlocksExtension&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;audio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;audio/mp3&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&amp;#39;&amp;lt;audio src=&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#34; type=&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;lt;/audio&amp;gt;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Markdown&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extensions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;CustomBlocksExtension&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generators&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;audio&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;audio&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;hellip; lets you convert this piece of Markdown:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;::: audio src=&amp;#34;mymusic.ogg&amp;#34; type=&amp;#34;audio/ogg&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Your browser does not support `audio`.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;hellip; into this HTML:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-markup&#34; data-lang=&#34;markup&#34;&gt;&amp;lt;audio src=&amp;#34;mymusic.ogg&amp;#34; type=&amp;#34;audio/ogg&amp;#34;&amp;gt;
  Your browser does not support &amp;lt;code&amp;gt;audio&amp;lt;/code&amp;gt;.
&amp;lt;/audio&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://pypi.org/project/markdown-customblocks/&#34;&gt;markdown-customblocks&lt;/a&gt; is easily the most useful Python module I discovered last quarter.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Tech books for free</title>
      <link>https://www.s-anand.net/blog/tech-books-for-free/</link>
      <pubDate>Wed, 07 Dec 2005 12:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/tech-books-for-free/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.techbooksforfree.com/&#34;&gt;Tech books for free&lt;/a&gt; from O&amp;rsquo;Reilly. Speaking of which, it looks like you can &lt;a href=&#34;http://digg.com/technology/Hacking_Google_Print_-_Easily_View_Whole_Books&#34;&gt;read whole books on Google Print&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Laymen want documentation they understand</title>
      <link>https://www.s-anand.net/blog/laymen-want-documentation-they-understand/</link>
      <pubDate>Wed, 04 Sep 2002 12:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/laymen-want-documentation-they-understand/</guid>
      <description>&lt;p&gt;Programmers: learn from this. &lt;a href=&#34;http://advogato.org/article/374.html&#34;&gt;Laymen want documentation they understand&lt;/a&gt;. (Wish someone told me 5 years ago.)&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>
