<?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>deno on S Anand</title>
    <link>https://www.s-anand.net/blog/tag/deno/</link>
    <description>Recent content in deno on S Anand</description>
    <generator>Hugo -- 0.164.0</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 08 Feb 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.s-anand.net/blog/tag/deno/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Things I Learned - 08 Feb 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-08-feb-2026/</link>
      <pubDate>Sun, 08 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-08-feb-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://ploum.net/2026-01-31-offline-git-send-email.html&#34;&gt;The Disconnected Git Workflow&lt;/a&gt; explains how to use the &lt;a href=&#34;https://git-send-email.io/&#34;&gt;&lt;code&gt;git send-email&lt;/code&gt;&lt;/a&gt; workflow. That&amp;rsquo;s like using email instead of GitHub as the collaboration mechanism - decentralizing and reducing dependencies.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://grok.com/&#34;&gt;Grok&lt;/a&gt; throws a &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/431&#34;&gt;HTTP 431&lt;/a&gt; when you pass it a query over 6,890 characters in the URL. Here&amp;rsquo;s &lt;a href=&#34;https://grok.com/?q=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&#34;&gt;an example with 6,900 characters&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;As of now, there&amp;rsquo;s no way to tell &lt;code&gt;uv&lt;/code&gt; to use the cache and install only missing repos (&lt;a href=&#34;https://github.com/astral-sh/uv/issues/15454&#34;&gt;#15454&lt;/a&gt;). But this is &lt;a href=&#34;https://docs.deno.com/runtime/fundamentals/modules/#reloading-modules&#34;&gt;Deno&amp;rsquo;s default behavior&lt;/a&gt;, making Deno a slightly better choice in this regard.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://julialang.org/blog/2012/03/shelling-out-sucks/&#34;&gt;Shelling Out Sucks&lt;/a&gt; shares common pitfalls when calling the shell from programs. Suggestion: Shell-escape ALL inputs. Use &lt;code&gt;set -o pipefail&lt;/code&gt; to detect failures in the middle of a pipe chain. Explicitly check the error code, not just stderr.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/dsherret/dax&#34;&gt;dax&lt;/a&gt;, which is based on &lt;a href=&#34;https://github.com/google/zx&#34;&gt;zx&lt;/a&gt;, is a simpler Deno-based alternative to shell scripts. &lt;a href=&#34;https://matklad.github.io/2026/01/27/make-ts.html&#34;&gt;See examples&lt;/a&gt;. &lt;a href=&#34;https://chatgpt.com/share/69814971-d900-8003-a36c-9b656c83b0b2&#34;&gt;ChatGPT&lt;/a&gt;. However, scripting language matters more when humans maintain shell scripts. Since I&amp;rsquo;m using AI, it&amp;rsquo;s easier to use &lt;code&gt;bash&lt;/code&gt; scripts and let it handle any complexities.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git push --force-with-lease&lt;/code&gt; is like &lt;code&gt;git push --force&lt;/code&gt; but won&amp;rsquo;t overwrite if others have pushed in the meantime. Default to this instead of &lt;code&gt;--force&lt;/code&gt; &amp;ndash; it&amp;rsquo;s safer.&lt;/li&gt;
&lt;li&gt;Microsoft&amp;rsquo;s &lt;a href=&#34;https://github.com/microsoft/docfind&#34;&gt;docfind&lt;/a&gt; generates a WASM search index for documents, building a dependency free browser based compact and fast search.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://diffs.com/docs&#34;&gt;diffs&lt;/a&gt; seems a promising library for rendering diffs in the browser.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bsky.app/profile/did:plc:flxq4uyjfotciovpw3x3fxnu/post/3mdlhstvnjc2r&#34;&gt;Genie 3 seems pretty good&lt;/a&gt;. We should expect to see World Models becoming usable in a few months.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>How to build and deploy custom GitHub Pages</title>
      <link>https://www.s-anand.net/blog/how-to-build-and-deploy-custom-github-pages/</link>
      <pubDate>Tue, 01 Apr 2025 05:59:18 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/how-to-build-and-deploy-custom-github-pages/</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s the &lt;a href=&#34;https://github.com/features/actions&#34;&gt;GitHub Actions&lt;/a&gt; file (&lt;code&gt;.github/workflows/deploy.yaml&lt;/code&gt;) I use to publish to &lt;a href=&#34;https://pages.github.com/&#34;&gt;GitHub pages&lt;/a&gt;.&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-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Deploy to GitHub Pages&lt;/span&gt;&lt;span class=&#34;w&#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;w&#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;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Run when pushed. Use { branches: [main, master] } to run only on specific branches&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Allow manual triggering of the workflow&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;workflow_dispatch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# OPTIONAL: Run at a specific cron schedule, e.g. first day of every month at 12:00 UTC (noon)&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;schedule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0 12 1 * *&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#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;w&#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;nt&#34;&gt;permissions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# To deploy to GitHub Pages&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# To verify that deployment originated from the right source&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;id-token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;w&#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;w&#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;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Run as a single build + deploy job to reduce setup time&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;deploy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Specify the deployment environment. Displays the URL in the GitHub Actions UI&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;github-pages&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ steps.deployment.outputs.page_url }}&lt;/span&gt;&lt;span class=&#34;w&#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;w&#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;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Run on the latest Ubuntu LTS&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runs-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ubuntu-latest&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Checkout the repository&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/checkout@v4&lt;/span&gt;&lt;span class=&#34;w&#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;w&#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;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Run whatever commands you want&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;echo &amp;#39;&amp;lt;h1&amp;gt;Hello World&amp;lt;/h1&amp;gt;&amp;#39; &amp;gt; index.html&lt;/span&gt;&lt;span class=&#34;w&#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;w&#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;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Upload a specific page to GitHub Pages. Defaults to _site&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/upload-pages-artifact@v3&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#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;w&#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;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Deploy the built site to GitHub Pages. The `id:` is required to show the URL in the GitHub Actions UI&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;deployment&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/deploy-pages@v4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is based on &lt;a href=&#34;https://til.simonwillison.net/github-actions/github-pages&#34;&gt;Simon Willison&amp;rsquo;s workflow&lt;/a&gt; and some of my earlier actions.&lt;/p&gt;
&lt;p&gt;This &lt;strong&gt;combines build and deploy&lt;/strong&gt; jobs. For simple sites, that&amp;rsquo;s simpler and more efficient. For complex builds with parallel execution or need for better error recovery, multiple jobs will help.&lt;/p&gt;
&lt;p&gt;I build sites with &lt;a href=&#34;https://github.com/astral-sh/uv&#34;&gt;uv&lt;/a&gt;, &lt;a href=&#34;https://nodejs.org/&#34;&gt;node&lt;/a&gt;, or &lt;a href=&#34;https://deno.com/&#34;&gt;deno&lt;/a&gt;. Here are examples of each&lt;/p&gt;
&lt;p&gt;A sample &lt;a href=&#34;https://github.com/sanand0/webfeatures/blob/main/.github/workflows/deploy.yml&#34;&gt;uv-based deployment&lt;/a&gt;.&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-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Install uv&lt;/span&gt;&lt;span class=&#34;w&#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;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;astral-sh/setup-uv@v5&lt;/span&gt;&lt;span class=&#34;w&#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;c&#34;&gt;# Run a Python script&lt;/span&gt;&lt;span class=&#34;w&#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;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;uv run scraper.py&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A sample &lt;a href=&#34;https://github.com/gramener/gramex-network/blob/main/.github/workflows/deploy.yml&#34;&gt;node package.json deployment&lt;/a&gt; and an &lt;a href=&#34;https://github.com/sanand0/llmhallucinations/blob/main/.github/workflows/deploy.yml&#34;&gt;npx deployment&lt;/a&gt;.&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-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Install node&lt;/span&gt;&lt;span class=&#34;w&#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;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/setup-node@v4&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;node-version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;registry-url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://npm.pkg.github.com/&lt;/span&gt;&lt;span class=&#34;w&#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;c&#34;&gt;# Install and build via package.json&lt;/span&gt;&lt;span class=&#34;w&#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;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;npm install&lt;/span&gt;&lt;span class=&#34;w&#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;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;npm run build&lt;/span&gt;&lt;span class=&#34;w&#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;c&#34;&gt;# Or, directly use npx. For example, generate HTML with Marp&lt;/span&gt;&lt;span class=&#34;w&#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;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;npx -y @marp-team/marp-cli@latest README.md -o index.html&lt;/span&gt;&lt;span class=&#34;w&#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;c&#34;&gt;# Update content directly, e.g. add an SVG favicon as a data URL&lt;/span&gt;&lt;span class=&#34;w&#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;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;sed -i &amp;#39;s/&amp;lt;\/head&amp;gt;/&amp;lt;link rel=&amp;#34;icon&amp;#34; type=&amp;#34;image\/svg+xml&amp;#34; href=&amp;#34;data:image\/svg+xml;base64,...&amp;#34;\/&amp;gt;&amp;lt;\/head&amp;gt;/g&amp;#39; index.html&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A sample &lt;a href=&#34;https://github.com/sanand0/til/blob/main/.github/workflows/deploy.yml&#34;&gt;deno deployment&lt;/a&gt;.&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-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Install deno&lt;/span&gt;&lt;span class=&#34;w&#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;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;denoland/setup-deno@v1&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;deno-version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1.x&lt;/span&gt;&lt;span class=&#34;w&#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;c&#34;&gt;# Run a Deno script. Use environment variables if needed&lt;/span&gt;&lt;span class=&#34;w&#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;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ secrets.OPENAI_API_KEY }}&lt;/span&gt;&lt;span class=&#34;w&#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;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;deno run --allow-read --allow-write --allow-env --allow-net script.js&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Things I Learned - 24 Nov 2024</title>
      <link>https://www.s-anand.net/blog/things-i-learned-24-nov-2024/</link>
      <pubDate>Sun, 24 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-24-nov-2024/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenAI lets you download GPT instructions and execute arbitrary code in their containerized environment. This is not a bug. &lt;a href=&#34;https://0din.ai/blog/prompt-injecting-your-way-to-shell-openai-s-containerized-chatgpt-environment&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;BM25 works as follows: &lt;a href=&#34;https://emschwartz.me/understanding-the-bm25-full-text-search-algorithm/&#34;&gt;Ref&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;For each query term in the query, sum up the product of:
&lt;ul&gt;
&lt;li&gt;Inverse document frequency = LN(% of docs without the query term + 1) &amp;ndash; with a small tweak&lt;/li&gt;
&lt;li&gt;Term frequency = freq / (freq + k) &amp;ndash; where k is usually between 1.2 to 2. Returns 0-1 with diminishing frequency benefit
&lt;ul&gt;
&lt;li&gt;k is multiplied by Document length normalization = 1 - b(1- DocLength/AvgDocLength). Longer documents have larger k, dampening frequency benefits.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Some implications:
&lt;ul&gt;
&lt;li&gt;The actual BM25 score has no meaning. It&amp;rsquo;s just useful for ordering&lt;/li&gt;
&lt;li&gt;BM25 scores for 2 queries can be compared ONLY IF the document sets don&amp;rsquo;t change&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A list of Markdown to Website converters on &lt;a href=&#34;https://news.ycombinator.com/item?id=36531937&#34;&gt;this thread&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://jekyllrb.com/&#34;&gt;Jekyll&lt;/a&gt; - Ruby - 2008&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.mkdocs.org/&#34;&gt;MkDocs&lt;/a&gt; - Python - 2014&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.gitbook.com/&#34;&gt;GitBook&lt;/a&gt; - JavaScript (Node.js) - 2014&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://squidfunk.github.io/mkdocs-material/&#34;&gt;MkDocs Material&lt;/a&gt; - Python (MkDocs-based) - 2016&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docsify.js.org/&#34;&gt;Docsify&lt;/a&gt; - JavaScript - 2016&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://rust-lang.github.io/mdBook/&#34;&gt;MdBook&lt;/a&gt; - Rust - 2017&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://antora.org/&#34;&gt;Antora&lt;/a&gt; - JavaScript (Node.js) - 2017&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docusaurus.io/&#34;&gt;Docusaurus&lt;/a&gt; - JavaScript (React) - 2017&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jupyterbook.org/&#34;&gt;JupyterBook&lt;/a&gt; - Python - 2019&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/DaveJarvis/keenwrite&#34;&gt;Keenwrite&lt;/a&gt; - Java - ~2019&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/honkit/honkit&#34;&gt;Honkit&lt;/a&gt; - JavaScript (GitBook fork) - 2019&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nextra.site/&#34;&gt;Nextra&lt;/a&gt; - JavaScript (Next.js) - 2020&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://astro.build/&#34;&gt;Astro&lt;/a&gt; - JavaScript/TypeScript - 2021&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/alex-shpak/hugo-book&#34;&gt;Hugo Book&lt;/a&gt; - Go (Hugo-based) - ~2020&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/secretGeek/clowncar&#34;&gt;Clowncar&lt;/a&gt; - JavaScript/Node.js - ~2021&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://quarto.org/&#34;&gt;Quarto&lt;/a&gt; - R and Python - 2022&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://starlight.astro.build/&#34;&gt;Starlight&lt;/a&gt; - JavaScript/TypeScript - 2023&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://duckdb.org/duckdb-docs.md&#34;&gt;DuckDB has an LLMs.txt&lt;/a&gt;.
Today, &lt;a href=&#34;https://github.com/search?q=path%3A**%2Fllms.txt&amp;amp;type=code&#34;&gt;38 repos on GitHub support it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;When identifying LLM use cases, it helps to tell LLMs what they can do. I use one or more of a list like below:
&lt;ul&gt;
&lt;li&gt;Core capabilities:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Text Generation:&lt;/strong&gt; Produce coherent and contextually relevant text across various domains.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Image Generation:&lt;/strong&gt; Create realistic images that match the style and content of a given reference image.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Text to Speech:&lt;/strong&gt; Convert text into natural-sounding speech with appropriate intonation and rhythm.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speech to Text:&lt;/strong&gt; Transcribe and interpret spoken language.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vision:&lt;/strong&gt; Analyze and describe visual content from images.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Video Analysis:&lt;/strong&gt; Summarize and extract information from video content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Text to Video:&lt;/strong&gt; Generate realistic (and surrealistic) videos from text descriptions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function Calling:&lt;/strong&gt; Execute predefined functions or access external tools to perform specific tasks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structured Output:&lt;/strong&gt; Generate structured outputs like JSON, XML, HTML, YAML, DSLs, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tool Use:&lt;/strong&gt; Utilize external applications or APIs to enhance functionality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code Generation:&lt;/strong&gt; Write and debug code snippets in various programming languages.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cross-domain use cases:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Summarization:&lt;/strong&gt; Understand and condense lengthy documents into concise summaries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Translation:&lt;/strong&gt; Convert text between multiple languages with high accuracy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Question Answering:&lt;/strong&gt; Provide precise answers to user queries based on provided information.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reasoning and Planning:&lt;/strong&gt; Solve complex problems and develop step-by-step plans.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personalization:&lt;/strong&gt; Tailor responses based on user preferences and historical interactions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dialogue Management:&lt;/strong&gt; Engage in context-aware, multi-turn conversations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Analysis:&lt;/strong&gt; Interpret and generate insights from structured data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content Moderation:&lt;/strong&gt; Identify and filter inappropriate or harmful content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sentiment Analysis:&lt;/strong&gt; Detect and interpret emotions and opinions in text.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Robotics Integration:&lt;/strong&gt; Interface with robotic systems for control and decision-making.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Knowledge Retrieval:&lt;/strong&gt; Access and present information from vast datasets or knowledge bases.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Creative Writing:&lt;/strong&gt; Generate poetry, stories, and other creative content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Educational Assistance:&lt;/strong&gt; Provide explanations and tutoring across various subjects.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ethical Reasoning:&lt;/strong&gt; Assess scenarios for ethical considerations and implications.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accessibility Support:&lt;/strong&gt; Assist users with disabilities through tailored interactions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simulation and Modeling:&lt;/strong&gt; Create predictive models and simulate scenarios.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Domain-specific use cases:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Legal and Medical Assistance:&lt;/strong&gt; Offer information and guidance within legal and medical domains.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gaming:&lt;/strong&gt; Generate narratives, dialogues, and scenarios for interactive entertainment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scientific Research:&lt;/strong&gt; Aid in literature reviews, hypothesis generation, and data interpretation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Financial Analysis:&lt;/strong&gt; Analyze market trends and provide investment insights.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cultural Competence:&lt;/strong&gt; Understand and respect diverse cultural contexts in interactions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Applications:&lt;/strong&gt; Detect and respond to potential cybersecurity threats.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environmental Monitoring:&lt;/strong&gt; Analyze data related to environmental changes and sustainability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Healthcare Support:&lt;/strong&gt; Assist in patient monitoring, diagnostics, and personalized treatment plans.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Supply Chain Optimization:&lt;/strong&gt; Enhance logistics and inventory management through predictive analysis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customer Service:&lt;/strong&gt; Provide automated support and resolve customer inquiries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Market Research:&lt;/strong&gt; Analyze consumer behavior and market trends for business insights.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content Creation:&lt;/strong&gt; Generate articles, blogs, and marketing materials.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Virtual Assistance:&lt;/strong&gt; Manage schedules, reminders, and personal tasks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Social Media Management:&lt;/strong&gt; Craft posts and engage with audiences across platforms.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Human Resources:&lt;/strong&gt; Assist in recruitment, training, and employee engagement strategies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Event Planning:&lt;/strong&gt; Organize and coordinate events, including logistics and communication.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Travel Planning:&lt;/strong&gt; Provide itineraries, booking assistance, and destination information.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Real Estate:&lt;/strong&gt; Analyze property markets and assist in buying or selling decisions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agriculture:&lt;/strong&gt; Monitor crop health and optimize farming practices through data analysis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Energy Management:&lt;/strong&gt; Optimize energy consumption and monitor renewable energy sources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transportation:&lt;/strong&gt; Enhance route planning and traffic management systems.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Urban Planning:&lt;/strong&gt; Assist in designing sustainable and efficient urban infrastructures.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Disaster Response:&lt;/strong&gt; Provide real-time information and coordination during emergencies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Public Policy:&lt;/strong&gt; Analyze data to inform policy decisions and predict societal impacts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Art and Design:&lt;/strong&gt; Generate visual art concepts and assist in creative design processes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Music Composition:&lt;/strong&gt; Create original music pieces and assist in songwriting.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Language Learning:&lt;/strong&gt; Facilitate language acquisition through interactive exercises and feedback.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Historical Analysis:&lt;/strong&gt; Interpret historical data and provide insights into past events.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Philanthropy:&lt;/strong&gt; Identify charitable opportunities and assess the impact of donations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sports Analytics:&lt;/strong&gt; Analyze player performance and game strategies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fashion:&lt;/strong&gt; Predict trends and assist in clothing design and merchandising.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Culinary Arts:&lt;/strong&gt; Generate recipes and provide cooking guidance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Astronomy:&lt;/strong&gt; Analyze celestial data and assist in space exploration research.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Psychology:&lt;/strong&gt; Offer insights into human behavior and mental health support.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linguistics:&lt;/strong&gt; Analyze language patterns and assist in translation studies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Archaeology:&lt;/strong&gt; Assist in artifact analysis and historical site interpretations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Literature Analysis:&lt;/strong&gt; Interpret literary works and provide critical analyses.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Philosophy:&lt;/strong&gt; Engage in discussions on ethical dilemmas and existential questions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mathematics:&lt;/strong&gt; Solve complex equations and assist in theoretical research.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Physics:&lt;/strong&gt; Model physical phenomena and assist in experimental design.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chemistry:&lt;/strong&gt; Analyze chemical compounds and predict reactions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Biology:&lt;/strong&gt; Assist in genetic research and ecological studies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Geology:&lt;/strong&gt; Analyze geological data and assist in natural resource exploration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Meteorology:&lt;/strong&gt; Predict weather patterns and analyze climate data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Oceanography:&lt;/strong&gt; Study marine ecosystems and assist in ocean exploration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anthropology:&lt;/strong&gt; Analyze cultural data and assist in ethnographic research.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Style of writing impacts output style a lot. E.g. Adding an evil laugh makes Claude more creative. &lt;a href=&#34;https://bsky.app/profile/emollick.bsky.social/post/3lbj766ewsc2c&#34;&gt;Ethan Mollick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;For good structured mode output, we need good prompting.
&lt;ul&gt;
&lt;li&gt;Mentioning examples and schema and &amp;ldquo;JSON&amp;rdquo; helps. When providing examples, using (user, assistant) message pairs helps (I think it&amp;rsquo;s because it&amp;rsquo;s easier for the LLM to parse).&lt;/li&gt;
&lt;li&gt;Using a {reasoning, answer} schema (with reasoning first) helps. Make reasoning concise and relevant &lt;a href=&#34;https://blog.dottxt.co/say-what-you-mean.html&#34;&gt;Ref&lt;/a&gt; &lt;a href=&#34;https://arxiv.org/html/2408.05093v1&#34;&gt;Arxiv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;We already know code in JSON is not a great idea. &lt;a href=&#34;https://aider.chat/2024/08/14/code-in-json.html&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Just adding 3 real examples and regurgitation helped GPT 4o play chess much better. Both techniques may have more general use in prompting. &lt;a href=&#34;https://simonwillison.net/2024/Nov/21/llm-chess/#atom-everything&#34;&gt;Simon Willison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;With Deno 2.0, the same &lt;code&gt;.js&lt;/code&gt; file can run in Node.js as well as Deno. &lt;a href=&#34;https://chatgpt.com/share/673f44f0-cd54-800c-b9d7-7f68f7666958&#34;&gt;Example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jspm.org/&#34;&gt;jspm&lt;/a&gt; lets you generate import maps against any CDN.&lt;/li&gt;
&lt;li&gt;You can click on &lt;code&gt;htop&lt;/code&gt; columns on the terminal to sort by that column! Mouse events work on command line apps. &lt;a href=&#34;https://social.jvns.ca/@b0rk/113510202564987943&#34;&gt;Julia Evans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Alt Text will very likely be a browser feature. It&amp;rsquo;s important for the Alt text to &lt;em&gt;flow&lt;/em&gt; as part of the content when listening to the page. Perhaps even become a part of the browser APIs like speechRecognition.&lt;/li&gt;
&lt;li&gt;Langchain suggests multiple levels of agentic behaviour. LLM Call &amp;lt; LLM Chain &amp;lt; LLM Rounter &amp;lt; State Machine &amp;lt; Autonomous &lt;a href=&#34;https://blog.langchain.dev/what-is-an-agent/&#34;&gt;Langchain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A &lt;a href=&#34;https://secretgeek.github.io/html_wysiwyg/html.html&#34;&gt;HTML quine&lt;/a&gt;: A page that, when rendered as HTML, shows the HTML source code of the page!&lt;/li&gt;
&lt;li&gt;You can enable syntax highlighting &lt;em&gt;just using fonts&lt;/em&gt;. &lt;a href=&#34;https://blog.glyphdrawing.club/font-with-built-in-syntax-highlighting/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://maxbo.me/a-html-file-is-all-you-need.html&#34;&gt;HTML is all you need&lt;/a&gt; shows examples of using HTML for notebooks instead of Jupyter, Observable, etc.&lt;/li&gt;
&lt;li&gt;Straive evaluated Gemini 1.5 Flash 002 and GPT 4o Mini for translation.
&lt;ul&gt;
&lt;li&gt;Portugese: Flash is better than GPT 4o Mini. BLEU Word Overlap is 65.5% &amp;gt; 64.6% and METEOR (Semantic) is 84.9% &amp;gt; 78.9%&lt;/li&gt;
&lt;li&gt;Mandarin: Flash is better than GPT 4o Mini. BLEU Word Overlap is 25.0% &amp;gt; 15.9% and METEOR (Semantic) is 54.7% &amp;gt; 51.1%&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The problem with Accept headers is that you can&amp;rsquo;t link to them. &lt;a href=&#34;https://fedi.simonwillison.net/@simon/113484569366205490&#34;&gt;Simon Willison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Recraft v3 supports vector (SVG) generation &lt;a href=&#34;https://simonwillison.net/2024/Nov/15/recraft-v3/&#34;&gt;Simon Willison&lt;/a&gt;. The output is 100% &lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt; elements (even for text). You get 50 free credits daily. Creating 1 image is ~2 credits. The API costs $1 per 1K credits. Some things I can create with it are:
&lt;ul&gt;
&lt;li&gt;Base data visualizations that I can animate with code&lt;/li&gt;
&lt;li&gt;Icons in a specific style&lt;/li&gt;
&lt;li&gt;Comic strips&lt;/li&gt;
&lt;li&gt;Explainers for talks or student material&lt;/li&gt;
&lt;li&gt;Featured images for blog posts&lt;/li&gt;
&lt;li&gt;Architecture diagrams?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 13 Oct 2024</title>
      <link>https://www.s-anand.net/blog/things-i-learned-13-oct-2024/</link>
      <pubDate>Sun, 13 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-13-oct-2024/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://duckdb.org/docs/sql/functions/overview.html#function-chaining-via-the-dot-operator&#34;&gt;DuckDB supports function chaining&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://duckdb.org/docs/sql/statements/create_macro.html&#34;&gt;DuckDB lets you create functions = macros&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://htmlforpeople.com/&#34;&gt;HTML for People&lt;/a&gt; is a nice introduction to HTML.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.flightradar24.com/&#34;&gt;FlightRadar24&lt;/a&gt; lets you watch airplanes live.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sq.io/&#34;&gt;sq&lt;/a&gt; is like &lt;code&gt;jq&lt;/code&gt; but for SQL.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://deno.com/&#34;&gt;Deno 2&lt;/a&gt; is fully backward compatible with Node! &lt;a href=&#34;https://deno.com/blog/v2.0&#34;&gt;via&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;O1 is good at solving problems where the solution is easy to verify and generating options helps get closer to the solution&lt;/li&gt;
&lt;li&gt;Reverb ASR does diarration as well as transcription. It seems the state of art right now.&lt;/li&gt;
&lt;li&gt;Gemini Flash and Gemini Flash 8b can be fine-tuned at zero cost. Inference is at the same price! &lt;a href=&#34;https://ai.google.dev/pricing&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Flux 1.1 Pro is released. I tried my Calvin &amp;amp; Hobbes test on it. Not great. ImageGen3 is better, ChatGPT is the best. &lt;a href=&#34;https://www.s-anand.net/blog/image-generation-gets-better-at-comics/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Revisiting text to speech models. Nothing much has changed since July 2024.
&lt;ul&gt;
&lt;li&gt;OpenAI TTS: $15/1M chars &lt;a href=&#34;https://openai.com/api/pricing/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Deepgram Aura: $15/1M chars &lt;a href=&#34;https://deepgram.com/pricing&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Azure AI Speech: $15/1M chars &lt;a href=&#34;https://azure.microsoft.com/en-us/pricing/details/cognitive-services/speech-services/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Google TTS Neural2: $16/1M chars &lt;a href=&#34;https://cloud.google.com/text-to-speech/pricing?hl=en&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AWS Polly Neural TTS: $16/1M chars &lt;a href=&#34;https://aws.amazon.com/polly/pricing/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cartesia Pro: $50/1M chars &lt;a href=&#34;https://www.cartesia.ai/pricing&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Elevenlabs Scale: $300/1M chars &lt;a href=&#34;https://elevenlabs.io/pricing&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GitHub co-pilot workspaces let you code using your mobile with AI and deploy it at one shot&lt;/li&gt;
&lt;li&gt;If you need an Ubuntu Docker container with Python, install it via uv rather than compiling from source. &lt;a href=&#34;https://mkennedy.codes/posts/python-docker-images-using-uv-s-new-python-features/&#34;&gt;via&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.visioncortex.org/vtracer/&#34;&gt;VTracer&lt;/a&gt; is an open source library (and tool) to convert raster images to SVGs. &lt;a href=&#34;https://simonwillison.net/2024/Oct/7/vtracer/&#34;&gt;via&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;If you want to create a &lt;code&gt;console.llm()&lt;/code&gt; function, a browser extension is the best way, because some pages have Content-Security-Policy that block eval, form submission, fetch from other domains, and script execution.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.pypi.org/trusted-publishers/adding-a-publisher/&#34;&gt;PyPi lets you publish from GitHub Actions&lt;/a&gt; without a token. Also from Gitlab.com CI/CD and Google Cloud.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/ActiveState&#34;&gt;ActiveState&lt;/a&gt; which made ActivePython, ActivePerl, etc. made these products paid for commercial use around 2013 after a series of acquisitions.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://marimo.app/&#34;&gt;Marimo&lt;/a&gt; supports:
&lt;ul&gt;
&lt;li&gt;Publishing any notebook to static.marimo.app as a static app&lt;/li&gt;
&lt;li&gt;Creating a SINGLE link that embeds the ENTIRE notebook in the URL!&lt;/li&gt;
&lt;li&gt;Runnable via &lt;code&gt;uvx marimo edit&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/eaAonE58sLU&#34;&gt;Parables on the Power of Planning in AI&lt;/a&gt;: Giving models about 30 seconds of thinking time consistently improves results - as much as increasing parameter size by a factor of 1,000 to 100,000!
&lt;ul&gt;
&lt;li&gt;This works particularly well for verifiable results (code, math, etc.)&lt;/li&gt;
&lt;li&gt;Technique: Ask an LLM hundreds of times at low temperature and pick the most common one. (Google&amp;rsquo;s Minerva used this on the MATH dataset.)&lt;/li&gt;
&lt;li&gt;Better Technique: Ask an LLM hundreds of times. Pick the best solution based on an evaluation metric (reward model)&lt;/li&gt;
&lt;li&gt;Better Technique: Apply a reward model at EACH step of the process. OpenAI&amp;rsquo;s &amp;ldquo;Let&amp;rsquo;s Verify Step by Step&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jina.ai/news/late-chunking-in-long-context-embedding-models/&#34;&gt;Late chunking&lt;/a&gt; is an interesting approach to adding context to embeddings. (I don&amp;rsquo;t understand it, but it&amp;rsquo;s cheap and effective.)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://deepinfra.com/models/embeddings&#34;&gt;DeepInfra offers embedding models as APIs&lt;/a&gt; at about 0.5 to 1 cent per MTok in an OpenAI compatible API.
It also supports &lt;a href=&#34;https://deepinfra.com/models/text-to-image&#34;&gt;text-to-image models&lt;/a&gt; like flux.dev and
&lt;a href=&#34;https://deepinfra.com/models/automatic-speech-recognition&#34;&gt;speech recognition models&lt;/a&gt; like Whisper.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=eBVi_sLaYsc&#34;&gt;Jake Heller&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;One of the things we learned is (an LLM app) after it passes passes frankly even 100 tests, the odds that it will do, on any random distribution of user inputs, the next 100,000 100% accurately is very high.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OpenAI&amp;rsquo;s O1 is like Daniel Kahneman&amp;rsquo;s System 2 thinking - as against other LLMs&amp;rsquo; System 1 thinking.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.continue.dev/&#34;&gt;Continue.dev&lt;/a&gt; is another AI coding editor. It supports OpenRouter. So now I have heard good things about:
&lt;ul&gt;
&lt;li&gt;Github Copilot&lt;/li&gt;
&lt;li&gt;Cursor&lt;/li&gt;
&lt;li&gt;Cody&lt;/li&gt;
&lt;li&gt;Continue.dev (supports OpenRouter)&lt;/li&gt;
&lt;li&gt;Aider (supports OpenRouter)&lt;/li&gt;
&lt;li&gt;Maybe:
&lt;ul&gt;
&lt;li&gt;Codeium&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Not:
&lt;ul&gt;
&lt;li&gt;Amazon Q Developer&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 08 Sep 2024</title>
      <link>https://www.s-anand.net/blog/things-i-learned-08-sep-2024/</link>
      <pubDate>Sun, 08 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-08-sep-2024/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When running a Hello world app:
&lt;ul&gt;
&lt;li&gt;FastAPI takes ~26K RAM, 3% CPU&lt;/li&gt;
&lt;li&gt;NodeJS + Express takes ~62K RAM, 2% CPU&lt;/li&gt;
&lt;li&gt;Deno + Express takes ~62K RAM, 1% CPU&lt;/li&gt;
&lt;li&gt;Deno + Fresh takes ~54K RAM, 0.4% CPU&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I was testing out different video LLMs:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://lumalabs.ai/&#34;&gt;Luma Labs&lt;/a&gt; lets you create videos from text&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://runwayml.com/&#34;&gt;Runwal ML&lt;/a&gt; lets you create video from an image + text&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://viggle.ai/&#34;&gt;Viggle&lt;/a&gt; lets you add images to a video or move a character in a certain way&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.veed.io/&#34;&gt;Veed.io&lt;/a&gt; is a video editor that offers AI video editing features&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.deepmotion.com&#34;&gt;Deepmotion&lt;/a&gt; generates 3D animations from video&lt;/li&gt;
&lt;li&gt;Wonder Dynamics may be similar to DeepMotion&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I tested out a few audio LLMs:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://suno.com/&#34;&gt;Suno&lt;/a&gt; is fast, has a better UI, lots of examples&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.udio.com/&#34;&gt;Udio&lt;/a&gt; is slow, poor UI, creates richer music&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://x.com/mattshumer_/status/1831767014341538166&#34;&gt;Reflection 70b is one of the top models now, and is open source!&lt;/a&gt;. It works by making the LLM reflect on its answer inside &lt;code&gt;&amp;lt;reflection&amp;gt;...&amp;lt;/reflection&amp;gt;&lt;/code&gt; tags.&lt;/li&gt;
&lt;li&gt;The best diarization model today is &lt;a href=&#34;https://github.com/m-bain/whisperX&#34;&gt;whisperX&lt;/a&gt;. Run on &lt;a href=&#34;https://colab.research.google.com/drive/1I2hwOqb08s_otWIUAmPRmb3EA9Z4bCtF&#34;&gt;Colab T4 GPU&lt;/a&gt; with:&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://scale.com/leaderboard&#34;&gt;Scale&amp;rsquo;s SEAL Leaderboards&lt;/a&gt; seem fairly good.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://huggingface.co/grammarly/coedit-xxl&#34;&gt;coedit-xxl&lt;/a&gt; is Grammarly&amp;rsquo;s fine-tuned google/flan-t5-xxl model run on &lt;a href=&#34;https://github.com/vipulraheja/coedit&#34;&gt;CoEdit&lt;/a&gt; - text editing dataset. It&amp;rsquo;s mainly for single-line editing, though, and far from a full-document or full-email zero-shot editor.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 28 Apr 2024</title>
      <link>https://www.s-anand.net/blog/things-i-learned-28-apr-2024/</link>
      <pubDate>Sun, 28 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-28-apr-2024/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tough prompt to test: &lt;code&gt;Gr brx vshdn Fdhvdu flskhu?&lt;/code&gt; is a quick way to assess LLM capability. &lt;a href=&#34;https://www.s-anand.net/blog/a-quick-way-to-assess-llm-capabilities/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/simonw/status/1780668642574897396&#34;&gt;Cheap cloud GPU services thread on Twitter&lt;/a&gt; lists:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.runpod.io/&#34;&gt;Runpod&lt;/a&gt; (17)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://vast.ai/&#34;&gt;Vast.ai&lt;/a&gt; (17)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://modal.com/&#34;&gt;Modal Labs&lt;/a&gt; (8)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fly.io/&#34;&gt;fly.io&lt;/a&gt; (4)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lightning.ai/&#34;&gt;LightningAI&lt;/a&gt; (4)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://colab.research.google.com/&#34;&gt;Colab&lt;/a&gt; (4)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://akash.network/&#34;&gt;AkashNet&lt;/a&gt; (4)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lambdalabs.com/&#34;&gt;Lambda Labs&lt;/a&gt; (4)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.shadeform.ai/&#34;&gt;ShadeFormAI&lt;/a&gt; (3)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.apple.com/mac-mini/&#34;&gt;Mac Mini&lt;/a&gt; (3)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tensordock.com/&#34;&gt;Tensor Dock&lt;/a&gt; (2)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.hetzner.com/&#34;&gt;Hetzner&lt;/a&gt; (2)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://brev.dev/&#34;&gt;BrevDev&lt;/a&gt; (2)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;JSR lets you publish Deno packages that can be imported by npm &lt;a href=&#34;https://deno.com/blog/jsr-is-not-another-package-manager&#34;&gt;via&lt;/a&gt;. It also auto-evaluates documentation and scores it! &lt;a href=&#34;https://jsr.io/docs/scoring&#34;&gt;via&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/snowflake/snowflake-arctic-cookbook-series-exploring-mixture-of-experts-moe-c7d6b8f14d16&#34;&gt;Snowflake Arctic Cookbook explains how mixture of experts models work&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/aishwaryanr/awesome-generative-ai-guide?tab=readme-ov-file#book-list-of-free-genai-courses&#34;&gt;A long list of LLM courses online&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Embeddings can be averaged. So, to embed large documents, average the embeddings of their chunks! &lt;a href=&#34;https://github.com/openai/openai-cookbook/blob/main/examples/Embedding_long_inputs.ipynb&#34;&gt;OpenAI suggests this.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
  </channel>
</rss>
