<?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>docker on S Anand</title>
    <link>https://www.s-anand.net/blog/tag/docker/</link>
    <description>Recent content in docker on S Anand</description>
    <generator>Hugo -- 0.164.0</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 14 Mar 2026 12:30:35 +0530</lastBuildDate>
    <atom:link href="https://www.s-anand.net/blog/tag/docker/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Hardening my Dev Container Setup</title>
      <link>https://www.s-anand.net/blog/hardening-my-dev-container-setup/</link>
      <pubDate>Sat, 14 Mar 2026 12:30:35 +0530</pubDate>
      <guid>https://www.s-anand.net/blog/hardening-my-dev-container-setup/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-03-14-hardening-my-dev-container-setup.avif&#34;&gt; &lt;!-- https://gemini.google.com/app/9162b7c405fcd5ee --&gt;&lt;/p&gt;
&lt;p&gt;I run AI coding agents inside a &lt;a href=&#34;https://github.com/sanand0/scripts/blob/dbdf328bb0e960367d45f9f8580d921159be3e9e/dev.dockerfile&#34;&gt;Docker container&lt;/a&gt; for safety.&lt;/p&gt;
&lt;p&gt;The setup is&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/blob/dbdf328bb0e960367d45f9f8580d921159be3e9e/dev.dockerfile&#34;&gt;&lt;code&gt;dev.dockerfile&lt;/code&gt;&lt;/a&gt;: builds the image&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/blob/dbdf328bb0e960367d45f9f8580d921159be3e9e/dev.sh&#34;&gt;&lt;code&gt;dev.sh&lt;/code&gt;&lt;/a&gt;: launches the container with the right mounts and env vars&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/blob/dbdf328bb0e960367d45f9f8580d921159be3e9e/dev.test.sh&#34;&gt;&lt;code&gt;dev.test.sh&lt;/code&gt;&lt;/a&gt;: verifies everything works.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I wrote them semi-manually and it had bugs. I had GitHub Copilot + GPT-5.4 High update tests and actually &lt;em&gt;run&lt;/em&gt; the commands to verify the setup.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what I learned from the process.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Make it easier to review&lt;/strong&gt;. The first run took long. I pressed &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;C&lt;/kbd&gt;, told Copilot to &amp;ldquo;add colored output, timing, and a live status line&amp;rdquo;. Then I re-ran. Instead of a bunch of &lt;code&gt;ERROR:&lt;/code&gt; lines, I now got a color-coded output with timing + a live status line showing what&amp;rsquo;s running.&lt;/p&gt;
&lt;pre&gt;&lt;div style=&#39;color: #cccccc; background-color: #000000; font-family: FiraCode Nerd Font, Maple Mono, Inconsolata, Consolas, monospace, monospace; font-size: 14px;&#39;&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&#39;color: #0dbc79;&#39;&gt;PASS&lt;/span&gt;&lt;span&gt;   2.495s  markitdown --help&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&#39;color: #cd3131;&#39;&gt;FAIL&lt;/span&gt;&lt;span&gt;   0.003s  playwright --version&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&#39;color: #ffbc03;&#39;&gt;note&lt;/span&gt;&lt;span&gt; /home/sanand/code/scripts/dev.test.sh: line 148: playwright: command not found&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&#39;color: #cd3131;&#39;&gt;FAIL&lt;/span&gt;&lt;span&gt;   0.003s  copilot version&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&#39;color: #ffbc03;&#39;&gt;note&lt;/span&gt;&lt;span&gt; /home/sanand/code/scripts/dev.test.sh: line 148: copilot: command not found&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;2. Run in the target environment&lt;/strong&gt;. Tests reported that &lt;code&gt;fd&lt;/code&gt; and &lt;code&gt;node&lt;/code&gt; were missing, though they were &lt;em&gt;obviously&lt;/em&gt; in the image. Why? The test script was running on &lt;em&gt;my laptop&lt;/em&gt;, not in the container. It was checking the host, not the container. I didn&amp;rsquo;t realize that.&lt;/p&gt;
&lt;p&gt;Copilot added a check to see if we&amp;rsquo;re already inside a container:&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;running_in_container&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#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;o&#34;&gt;[&lt;/span&gt; -f /.dockerenv &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; grep -qaE &lt;span class=&#34;s1&#34;&gt;&amp;#39;(docker|containerd|kubepods)&amp;#39;&lt;/span&gt; /proc/1/cgroup 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#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&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;if&lt;/span&gt; ! running_in_container&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&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;nb&#34;&gt;exec&lt;/span&gt; bash &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;SCRIPT_DIR&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/dev.sh&amp;#34;&lt;/span&gt; -- &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SCRIPT_PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --inside-container
&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;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;3. Check for conflicting commands&lt;/strong&gt;. &lt;code&gt;fd&lt;/code&gt; and &lt;code&gt;node&lt;/code&gt; were still missing. Why? &lt;code&gt;dev.sh&lt;/code&gt; was mounting my host &lt;code&gt;mise&lt;/code&gt; and &lt;code&gt;bin&lt;/code&gt; directories, overshadowing the image&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-v &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/.local/share/mise:/home/vscode/.local/share/mise&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;-v &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/.local/bin:/home/vscode/.local/bin&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It doesn&amp;rsquo;t matter what&amp;rsquo;s installed in the container - only the host binaries are visible. Copilot removed the first line, and copied &lt;code&gt;mise&lt;/code&gt; into &lt;code&gt;~/.local/overrides/&lt;/code&gt; to override the &lt;code&gt;~/.local/bin&lt;/code&gt; PATH.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Use the right packages&lt;/strong&gt;. The default ImageMagick binary at &lt;code&gt;https://imagemagick.org/archive/binaries/magick&lt;/code&gt; is an AppImage. It doesn&amp;rsquo;t work in containers. So it hat to switch to &lt;code&gt;apt-get install -y imagemagick&lt;/code&gt; instead.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Use the right paths&lt;/strong&gt;. &lt;code&gt;npm install -g wscat playwright ...&lt;/code&gt; ran but to add them to the PATH, you need to &lt;code&gt;mise reshum node&lt;/code&gt;. Copilot added that.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;These are good practices, but since agents can fix them, they&amp;rsquo;re less important to learn.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vibe-coding good tests&lt;/strong&gt; enabled Copilot to fix them.&lt;br&gt;
&lt;strong&gt;Making output easy to read&lt;/strong&gt; enabled me to steer Copilot.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s what I&amp;rsquo;d recommend if you&amp;rsquo;re trying to optimize setup / deployments.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 16 Mar 2025</title>
      <link>https://www.s-anand.net/blog/things-i-learned-16-mar-2025/</link>
      <pubDate>Sun, 16 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-16-mar-2025/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Here is a &lt;a href=&#34;https://todogroup.org/resources/training/&#34;&gt;training program on open source corporate policy&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/mgdm/htmlq&#34;&gt;htmlq&lt;/a&gt; and &lt;a href=&#34;https://github.com/ericchiang/pup&#34;&gt;pup&lt;/a&gt; query HTML. They&amp;rsquo;re like &lt;code&gt;jq&lt;/code&gt; for HTML.&lt;/li&gt;
&lt;li&gt;Here are time-tested and robust ways to leverage serendipity: &lt;a href=&#34;https://chatgpt.com/share/67d4df37-d30c-800c-bf25-e33f94dc53b0&#34;&gt;ChatGPT&lt;/a&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Place&lt;/strong&gt;. Be in places with high, diverse, talent density. Bell Labs (1950s), MIT (1970s), Pixar (1990s).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;People&lt;/strong&gt;. Meet diverse, talented people. Da Vinci&amp;rsquo;s Renaissance circles, Lockheed Martin&amp;rsquo;s Skunk Works.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Free time&lt;/strong&gt; for unstructured work. 3M&amp;rsquo;s 15% rule, Google&amp;rsquo;s 20% time, Edison&amp;rsquo;s Invention Factory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Curiosity&lt;/strong&gt;. Learn unrelated fields. Darwin&amp;rsquo;s earthworm research, Ben Franklin&amp;rsquo;s ocean currents work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Serendipity&lt;/strong&gt;. Systematically add randomness. Brian Eno&amp;rsquo;s Oblique Strategies, IDEO&amp;rsquo;s Deep Dives.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reframe failure&lt;/strong&gt; as opportunities. Penicillin, Velcro, Post-it Notes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ceremonies&lt;/strong&gt;. Hackathons, lightning talks, coffee trials.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;What makes client-side computing on the browser powerful is
&lt;ul&gt;
&lt;li&gt;There&amp;rsquo;s nothing to install&lt;/li&gt;
&lt;li&gt;Private by default: data stays with client&lt;/li&gt;
&lt;li&gt;Speed: no latency&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://semgrep.dev/&#34;&gt;SemGrep&lt;/a&gt; is a lot less open source than it used to be. &lt;a href=&#34;https://chatgpt.com/share/67d525e5-eea0-800c-a382-4aa5a19b609d&#34;&gt;ChatGPT&lt;/a&gt;. That&amp;rsquo;s a pity. It was a good tool.&lt;/li&gt;
&lt;li&gt;Site builders and headless CMSs are gently eating into the dominant market share of open source CMSs (via &lt;a href=&#34;https://www.youtube.com/live/dXhHtsW8qjo?si=WiEuwrxiyoaQ3D2Y&amp;amp;t=2460&#34;&gt;PretaGov&lt;/a&gt;).
&lt;ul&gt;
&lt;li&gt;WordPress is pretty much the dominant CMS in the world, followed by Drupal.&lt;/li&gt;
&lt;li&gt;WordPress is now VC backed and is not growing, so they seem to be attacking their own community.&lt;/li&gt;
&lt;li&gt;Umbraco CMS is the only open source CMS that&amp;rsquo;s growing. Maybe because it&amp;rsquo;s the only .NET one&lt;/li&gt;
&lt;li&gt;Craft CMS is the only proprietary CMS that&amp;rsquo;s growing.&lt;/li&gt;
&lt;li&gt;Site builders are growing as a category. SquareSpace is the leading one.&lt;/li&gt;
&lt;li&gt;Headless CMS is growing too. Statamic. Next.js. Nuxt.js, Contentful, Prismic, Storyblok, Gatsby, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Here&amp;rsquo;s a &lt;a href=&#34;https://gitlab.com/kitarp29/buaji/-/jobs/8416107396&#34;&gt;sample CI/CD pipeline with automated code review&lt;/a&gt;.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gitlab.com/kitarp29/buaji/-/blob/e9211bd619bd238f4b32c4a3509b78c199937f8d/.gitlab-ci.yml#L84-113&#34;&gt;Here is the script that generated it&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Note the use of &lt;a href=&#34;https://catalog.ngc.nvidia.com/orgs/nvidia/containers/&#34;&gt;NVIDIA&amp;rsquo;s GPU Docker containers&lt;/a&gt; via &lt;code&gt;nvcr.io&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Things I learnt about robotics.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/TheRobotStudio/SO-ARM100&#34;&gt;SO-ARM100&lt;/a&gt; is an open-source 3D printable robot arm. Takes ~20 hours to print, ~1 hour to assemble. Costs ~$120.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/SIGRobotics-UIUC/LeKiwi&#34;&gt;LeKiwi&lt;/a&gt; is a mobile version of this arm&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/huggingface/lerobot&#34;&gt;LeRobot&lt;/a&gt; is a set of HuggingFace models and datasets. The idea is, you can use one &amp;ldquo;control&amp;rdquo; robot to control the other. Do stuff manually, teach it ~50 times, and it learns how to do what you&amp;rsquo;re do.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://huggingface.co/blog/pi0&#34;&gt;Pi0&lt;/a&gt; is an LLM equivalent for robotics that predicts actions. HuggingFace ported that to LeRobot&lt;/li&gt;
&lt;li&gt;Most real robotics work is on SIMILATED &amp;ldquo;gym&amp;rdquo; environments, not costly/slow physical environments.&lt;a href=&#34;https://github.com/huggingface/gym-pusht&#34;&gt;PushT&lt;/a&gt; is a simple 2D version. &lt;a href=&#34;https://github.com/huggingface/gym-aloha&#34;&gt;ALOHA&lt;/a&gt; is a 3D one.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ros.org/&#34;&gt;ROS&lt;/a&gt; is a nightmare to install and run - on Windows &lt;em&gt;and&lt;/em&gt; Mac.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jderobot.github.io/RoboticsAcademy/&#34;&gt;Robotics Academy&lt;/a&gt; is an open collection of easier ROS exercises.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pslab.io/&#34;&gt;PSLab - Pocket Science Lab&lt;/a&gt; is a sensor kit for the phone / PC. Costs ~$100 but isn&amp;rsquo;t available anywhere. Getting it to work requires too much mucking around with USB drivers and it just doesn&amp;rsquo;t work. (BBC &lt;a href=&#34;https://microbit.org/&#34;&gt;micro:bit&lt;/a&gt; may be more promising.)&lt;/li&gt;
&lt;li&gt;Getting stuff done with electronics is still &lt;em&gt;really&lt;/em&gt; hard unless it&amp;rsquo;s well designed.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s FASCINATING that robots can have arbitrary joints. Our intuitions (or even biomimicry) on how to move and do stuff is a POOR intuitive guide for how robots should act.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MathML Core is a language &lt;em&gt;and&lt;/em&gt; layout specification, distinct from MathML 2/3. It&amp;rsquo;s not fully compatible with JATS XML.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://tmke8.github.io/math-core/&#34;&gt;&lt;code&gt;latexmlmath&lt;/code&gt;&lt;/a&gt; converts TeX to MathML.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;m|math { font-family: &amp;quot;Noto Sans Math&amp;quot;, &amp;quot;Noto Sans&amp;quot; }&lt;/code&gt; is a popular OpenType Math font. Browsers default to native fonts: e.g. Cambria Math on windows. Explore at &lt;a href=&#34;https://fred-wang.github.io/MathFonts/&#34;&gt;https://fred-wang.github.io/MathFonts/&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The people working on this at arXiv are: Deyan Ginev, Fred Wang, and &lt;a href=&#34;mailto:norbert@arxiv.org&#34;&gt;Norbert Preining&lt;/a&gt;. Their work is sponsored by NSF.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s a &lt;a href=&#34;https://pdfa.org/iso-14289-2-pdfua-2/&#34;&gt;PDF UA2&lt;/a&gt; standard for accessibility but there aren&amp;rsquo;t enough tools to generate it.&lt;/li&gt;
&lt;li&gt;LibreOffice is now on WASM. &lt;a href=&#34;https://www.npmjs.com/package/zetajs&#34;&gt;ZetaJS&lt;/a&gt; provides office in the browser. Has a CDN (that was down from our IP). 35M packaged binary. 100M of in-memory file-system loaded.
&lt;ul&gt;
&lt;li&gt;Useful for: Document conversion, Thumbnail generation, Text extraction, Merging / splitting documents&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://en.wikipedia.org/wiki/Poincar%C3%A9_conjecture&#34;&gt;Poincare Conjecture&lt;/a&gt; says that any finite 3D blob with has no holes can be deformed into a sphere. It took until 2003 to prove it because we didn&amp;rsquo;t have the tools to manipulate 3D shapes.&lt;/li&gt;
&lt;li&gt;Playbook driven agents are another approach to agentic workflows. &lt;a href=&#34;https://simonwillison.net/2025/Mar/13/xata-agent/&#34;&gt;Simon Willison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twinery.org/&#34;&gt;Twine&lt;/a&gt; (&lt;a href=&#34;https://twinery.org/reference/en/index.html&#34;&gt;docs&lt;/a&gt;) is an open source interactive fiction / story writing tool.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://videlais.github.io/snowman/&#34;&gt;Snowman&lt;/a&gt; is a browser-based Twine 2 story template format.&lt;/li&gt;
&lt;li&gt;These enable behavioural experimentation. Cheaper than using tools like &lt;a href=&#34;https://gorilla.sc/&#34;&gt;Gorilla.sc&lt;/a&gt; and &lt;a href=&#34;https://pavlovia.org/&#34;&gt;Pavlovia&lt;/a&gt; for behavioral experiments&lt;/li&gt;
&lt;li&gt;For example, you can present a social or political issue and see if people change their opinions more or less depending on the content/path they see. Or, if it varies by demographics. Or, check if repeated mentions or emotional hooks improve memory / retention. &lt;a href=&#34;https://chatgpt.com/share/67d3fe6f-aff4-800c-bb02-2cb72d8f6e16&#34;&gt;More research ideas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Techniques to reduce Docker image sizes:
&lt;ul&gt;
&lt;li&gt;Native Linux &lt;code&gt;mount&lt;/code&gt; supports overlaying directories! Lower layer is read-only. Edits (including deletions) affect upper layer only. Docker uses this. &lt;code&gt;docker image inspect&lt;/code&gt; shows layers.&lt;/li&gt;
&lt;li&gt;Always run &lt;code&gt;RUN apt-get update &amp;amp;&amp;amp; apt-get [packages]&lt;/code&gt; rather than in separate lines. Else &lt;code&gt;RUN apt-get update&lt;/code&gt; gets cached with OLD update cache.&lt;/li&gt;
&lt;li&gt;Defer &lt;code&gt;COPY&lt;/code&gt; till as late as possible, and COPY &lt;em&gt;minimally&lt;/em&gt; - since it typically invalidates the cache.&lt;/li&gt;
&lt;li&gt;Skip development dependencies and temporary caches.&lt;/li&gt;
&lt;li&gt;Docker Dive via &lt;code&gt;dive [IMAGE]&lt;/code&gt; analyzes image details and shows the file system in each layer.&lt;/li&gt;
&lt;li&gt;Use multi-stage builds. A: Create an image using &lt;code&gt;FROM some-image AS builder&lt;/code&gt; and do what you want. Then, after that, B: &lt;code&gt;FROM scratch&lt;/code&gt; (or &lt;code&gt;FROM node:22-slim&lt;/code&gt;) use &lt;code&gt;COPY --from=builder what-you-want&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;a href=&#34;https://github.com/GoogleContainerTools/distroless&#34;&gt;distroless images&lt;/a&gt; from GCR. It doesn&amp;rsquo;t have shells, package managers, etc. Fewer vulnerabilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://playwright.dev/&#34;&gt;Playwright&lt;/a&gt; seems to be the emerging standard for modern browser testing/automation, beating &lt;a href=&#34;https://www.cypress.io/&#34;&gt;Cypress&lt;/a&gt; and &lt;a href=&#34;https://www.selenium.dev/&#34;&gt;Selenium&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Openwashing&amp;rdquo; is a term where something is termed open source but is not.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://drive.google.com/drive/folders/1Bk9vILFYUjqxS2jHxBvY148yWSuC5WWm&#34;&gt;Photos from FOSSASIA&lt;/a&gt; are public.&lt;/li&gt;
&lt;li&gt;To publish images long-term
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/&#34;&gt;GitHub&lt;/a&gt; is an option. Likely to last long-term. Clone-able.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://archive.org/&#34;&gt;Archive.org&lt;/a&gt; is a good too but may suffer from bandwidth constraints.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://imgur.com/&#34;&gt;Imgur&lt;/a&gt; remains popular but it&amp;rsquo;s unclear if it will remain unrestricted.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://flickr.com/&#34;&gt;Flickr&lt;/a&gt; has had a flaky history with limits and commercialization.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://commons.wikimedia.org/wiki/Special:UploadWizard&#34;&gt;WikiMedia Commons&lt;/a&gt; deletes personal uploads by first-time contributors. Only files &lt;em&gt;clearly&lt;/em&gt; useful for a large audience are retained.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This &lt;a href=&#34;https://www.rosenthal.ch/downloads/VISCHER_ai-tools-03-25.pdf&#34;&gt;table of LLM API data protection&lt;/a&gt; lists what use cases each provider&amp;rsquo;s terms of service allow from a security perspective.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://unsloth.ai/&#34;&gt;Unsloth&lt;/a&gt; might be one of the simplest ways of fine-tuning.&lt;/li&gt;
&lt;li&gt;For LLM UIs, &lt;a href=&#34;https://github.com/open-webui/open-webui&#34;&gt;Open Web UI&lt;/a&gt; seems most popular. Run via &lt;code&gt;WEBUI_SECRET_KEY=... uvx --python 3.11 open-webui serve&lt;/code&gt;
&lt;a href=&#34;https://github.com/oobabooga/text-generation-webui&#34;&gt;Text generation Web UI&lt;/a&gt; is less so.
&lt;a href=&#34;https://github.com/KoboldAI/KoboldAI-Client&#34;&gt;KoboldAI&lt;/a&gt;,
&lt;a href=&#34;https://github.com/eth-sri/lmql&#34;&gt;LMQL&lt;/a&gt;,
&lt;a href=&#34;https://lmstudio.ai/&#34;&gt;LM Studio&lt;/a&gt;,
GPT4All, etc are far behind.&lt;/li&gt;
&lt;li&gt;GPT 4o Mini is probably a 8b parameter model. &lt;a href=&#34;https://aiexpjourney.substack.com/p/the-number-of-parameters-of-gpt-4o&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;SRM&amp;quot;s are Small Reasoning Models - like Small Language Models. Phi-4 and DeepScaleR are SRMs. Gemma 3 is a multi-modal SLM.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://developers.googleblog.com/en/gemini-embedding-text-model-now-available-gemini-api/&#34;&gt;&lt;code&gt;gemini-embedding-exp-03-07&lt;/code&gt;&lt;/a&gt; leads the &lt;a href=&#34;https://huggingface.co/spaces/mteb/leaderboard&#34;&gt;MTEB&lt;/a&gt; and is currently the top embedding model by a big margin.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://apify.com/&#34;&gt;Apify&lt;/a&gt; is a cloud scraper platform. Here&amp;rsquo;s how they optimize their &lt;a href=&#34;https://apify.com/apify/ai-web-agent&#34;&gt;AI Web agent&lt;/a&gt; - &lt;a href=&#34;https://github.com/apify/actor-web-automation-agent&#34;&gt;Source&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;Remove redundant tags and attributes (e.g. accessibility, etc.). Explore readability.&lt;/li&gt;
&lt;li&gt;Add a unique &lt;code&gt;gid&lt;/code&gt; to each element.&lt;/li&gt;
&lt;li&gt;Add the screenshot WITH a &amp;ldquo;Set of Marks&amp;rdquo; - &amp;ldquo;SoM&amp;rdquo; (read research paper) highlighting important clickable elements.&lt;/li&gt;
&lt;li&gt;Code output is brittle. Use tools / DSL - e.g. visit_url(url), click_element(text, gid, tagName), etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://microsoft.github.io/genaiscript/&#34;&gt;GenAIScript&lt;/a&gt; increasingly looks like a promising way to automate LLM workflows in the browser.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ollama.com/download/windows&#34;&gt;Ollama has a Windows download&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://marp.app/&#34;&gt;Marp&lt;/a&gt; is my new favorite way to generate slides from Markdown. Reveal.js is not easy with Markdown (though HTML works well.)
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=marp-team.marp-vscode&#34;&gt;VS Code plugin&lt;/a&gt; makes development very easy&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/marp-team/marp-cli/&#34;&gt;Marp CLI&lt;/a&gt; makes deployment easy.&lt;/li&gt;
&lt;li&gt;I used it for my talk on &lt;a href=&#34;https://sanand0.github.io/llmhallucinations/&#34;&gt;LLM Hallucinations&lt;/a&gt; (&lt;a href=&#34;https://github.com/sanand0/llmhallucinations/&#34;&gt;source&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Supports all &lt;a href=&#34;https://github.com/bespokejs/bespoke&#34;&gt;bespoke&lt;/a&gt; features and &lt;a href=&#34;https://www.npmjs.com/search?q=keywords:bespoke-plugin&#34;&gt;plugins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/marp-team/marp-cli/blob/main/docs/bespoke-transitions/README.md&#34;&gt;Transitions&lt;/a&gt;. Requires OS animation effects to be enabled&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.svgator.com/blog/animated-svg-backgrounds-examples/&#34;&gt;Animated SVG backgrounds&lt;/a&gt; are a good add-on.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A mental model to consider is: each chat conversation with an LLM is a person or a personality in itself. A day in the life of a model, where its personality evolves.&lt;/li&gt;
&lt;li&gt;Bots need structured content (e.g. Markdown, XML). Humans need rich content (e.g. HTML). Here are 4 ways to serve both, roughly in increasing order of sophistication:
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Different URLs&lt;/strong&gt;. E.g. &lt;a href=&#34;https://example.org/about/&#34;&gt;https://example.org/about/&lt;/a&gt; vs &lt;a href=&#34;https://example.org/about.md&#34;&gt;https://example.org/about.md&lt;/a&gt; (this is how Jekyll or Hugo work). Use for static sites generators.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JavaScript&lt;/strong&gt;. Inject after Markdown: &lt;code&gt;&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/marked/marked.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;script&amp;gt;document.body.innerHTML = marked(document.body.textContent);&amp;lt;/script&amp;gt;&lt;/code&gt;. Use for dynamically generated static sites.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;URL query parameters&lt;/strong&gt;. E.g. &lt;code&gt;?format=markdown&lt;/code&gt; vs &lt;code&gt;?format=html&lt;/code&gt; vs &lt;code&gt;?format=json&lt;/code&gt;. Use in APIs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content Negotiation&lt;/strong&gt;. Based on the user agent and &lt;code&gt;Accept&lt;/code&gt; header, serve Markdown or HTML. Send &lt;code&gt;Vary: Accept&lt;/code&gt; to indicate that the response depends on the &lt;code&gt;Accept&lt;/code&gt; header. Use for dynamic web apps.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Notes from The Knowledge Project: &lt;a href=&#34;https://fs.blog/knowledge-project-podcast/josh-wolfe-2/&#34;&gt;Josh Wolfe: Human Advantage in the World of AI&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Agent optimization might become as popular as search engine optimization in the future.&lt;/li&gt;
&lt;li&gt;APIs are likely to be replaced by just chat requests that will do the same thing.&lt;/li&gt;
&lt;li&gt;APIs might be replaced by RPA, where somebody uses a chatbot to do the equivalence instead.&lt;/li&gt;
&lt;li&gt;Today, blue-collar workers may be more protected from AI than white-collar workers. Robots still can&amp;rsquo;t serve a meal well enough and aren&amp;rsquo;t progressing as fast as AI yet.&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s a lot of tacit knowledge in craftsmanship that will take a long time for machines to replace.&lt;/li&gt;
&lt;li&gt;Margins are fleeting. The only time you have large sustainable margins is when you truly have a monopoly.&lt;/li&gt;
&lt;li&gt;Cost is going down so quickly right now that all you have to do is wait, and stuff will become available for a very affordable or even a free price.&lt;/li&gt;
&lt;li&gt;The moat is really in the data. The models are not an advantage. Engineering and services on top of that are marginal.&lt;/li&gt;
&lt;li&gt;Machines will be doing science 24/7. All of the science data that we have will probably be the biggest leverage for humanity.&lt;/li&gt;
&lt;li&gt;The discovery of penicillin, Viagra, and rubber were all serendipitous. Machines should run with a little bit of randomness to benefit from this.&lt;/li&gt;
&lt;li&gt;Tesla might have gotten away with accounting fraud on warranty claims. But short sellers are likely to be after Elon Musk.&lt;/li&gt;
&lt;li&gt;With LLMs, the value of our social network has gone up considerably. Remember: The reason we believe things is not because we have thought through and analyzed them. It&amp;rsquo;s because the people around us believe in those things.&lt;/li&gt;
&lt;li&gt;It is now practical for a person to live on forever by sharing all their thoughts into an LLM. Kids can have a &amp;ldquo;Dad AI&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;One good use of meeting recordings is to see where there are biases in the conversations and where the engagement is not high enough or how there are unproductive power balances.&lt;/li&gt;
&lt;li&gt;A great virtue of college is that it allows you to break free from your previous personality. For those four years, nobody knows who you are or cares what you wear. And you can be or grow into a very different person. The more content we put in into AI or social media, the harder it is to change ourselves.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;People are reporting that &lt;a href=&#34;https://github.com/RooVetGit/Roo-Code&#34;&gt;Roo Code&lt;/a&gt; is better than Windsurf.
&lt;ul&gt;
&lt;li&gt;Roo Code is open source. Available as a VS Code extension and run-nable via &lt;code&gt;git clone&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Roo Code supports Computer Use. It can read files, take screenshots from a built-in browser, controls it, and reads browser console logs.&lt;/li&gt;
&lt;li&gt;Opinions are mixed. A team member reported that it takes 10 LLM queries to do what Cursor does in 2. Another reported that it does in 1 query what Cursor does in 2.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Notes from &lt;a href=&#34;https://youtu.be/rXoGpUyD1Jg&#34;&gt;Thursday AI, 6 Mar 2025&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Google&amp;rsquo;s AI overviews now use Gemini 2.0. They&amp;rsquo;ve introduced an AI mode that functions like a mini deep research tool, incorporating planning and search. (A Perplexity-killer). It&amp;rsquo;s a fine-tuned model that is extra cautious with topics like healthcare and always verifies information.&lt;/li&gt;
&lt;li&gt;QWQ from Quen competes with DeepSeq R1, but with only 32b parameters compared to R1&amp;rsquo;s several hundred billion.&lt;/li&gt;
&lt;li&gt;AI models are becoming less restrictive. Gemini and GPT-4.5 have relaxed some constraints, shifting more responsibility onto users, similar to Grok.&lt;/li&gt;
&lt;li&gt;What&amp;rsquo;s GPT-4.5 good for? It seems to excel in creativity, humor, education, emotional intelligence, and teaching. It follows instructions better and understands intent better. However, it&amp;rsquo;s not a major leap in coding or math.&lt;/li&gt;
&lt;li&gt;OpenAI&amp;rsquo;s Deep Research mode always uses O3, regardless of the model selected in the UI.&lt;/li&gt;
&lt;li&gt;Tencent has released a new video model available at &lt;a href=&#34;https://aivideo.hunyuan.tencent.com/&#34;&gt;https://aivideo.hunyuan.tencent.com/&lt;/a&gt; and it appears to be quite good.&lt;/li&gt;
&lt;li&gt;Many &lt;em&gt;clients&lt;/em&gt; now support Model Context Protocol (MCP), including Cursor, Claude Code, and Claude Desktop. The &lt;a href=&#34;https://modelcontextprotocol.io/clients&#34;&gt;clients&lt;/a&gt; list is long. Some MCP uses include:
&lt;ul&gt;
&lt;li&gt;Interact with GitHub using the GitHub API.&lt;/li&gt;
&lt;li&gt;Using Knowledge Graph memory to premember previous conversations&lt;/li&gt;
&lt;li&gt;Using the Cloudflare MCP server to perform Cloudflare actions.&lt;/li&gt;
&lt;li&gt;File retrieval and custom prompts &amp;ndash; which MCP supports in addition to tools.&lt;/li&gt;
&lt;li&gt;Calling other MCPs or LLMs (conditionally) from an MCP, enabling the creation of full-fledged workflows.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Composio offers a &lt;a href=&#34;https://docs.composio.dev/mcp/overview&#34;&gt;Hosted MCP service&lt;/a&gt;. CloudFlare lets you build &lt;a href=&#34;https://blog.cloudflare.com/model-context-protocol/&#34;&gt;remote MCP servers&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://electricalexis.github.io/notagen-demo/&#34;&gt;Notagen&lt;/a&gt; is an open-source note generation engine that produces high-quality classical sheet music.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.sesame.com/research/crossing_the_uncanny_valley_of_voice&#34;&gt;Sesame&lt;/a&gt; has an &lt;a href=&#34;https://github.com/SesameAILabs/csm&#34;&gt;open-source&lt;/a&gt; voice model worth exploring.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/ASLP-lab/DiffRhythm&#34;&gt;DiffRhythm&lt;/a&gt; is a music generation model that appears to be quite good.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2 pass bounding box approach. Have an LLM generate bounding boxes. Then fix it. &lt;a href=&#34;https://bsky.app/profile/emollick.bsky.social/post/3ljt3gk3i422u&#34;&gt;Ethan Mollick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv tool install&lt;/code&gt; and &lt;code&gt;uv tool ensure-path&lt;/code&gt; are useful commands for installing and ensuring path for tools. &lt;a href=&#34;https://til.simonwillison.net/jupyter/jupyterlab-uv-tool-install&#34;&gt;Simon Willison&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 08 Dec 2024</title>
      <link>https://www.s-anand.net/blog/things-i-learned-08-dec-2024/</link>
      <pubDate>Sun, 08 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-08-dec-2024/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ChatGPT uses several unusual unicode characters for citations. &lt;a href=&#34;https://github.com/sanand0/openai-conversations/blob/main/private-unicode-control-characters.md&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;NumLock can be dangerous. An IT support team member took control of Radheya&amp;rsquo;s screen while debugging and had turned on NumLock. Radheya&amp;rsquo;s login failed after that. After 5 tries, he was locked out.&lt;/li&gt;
&lt;li&gt;With LLMs, most architectural decisions are no longer one-way doors. &lt;a href=&#34;https://simonwillison.net/2024/Dec/4/steve-yegge/&#34;&gt;Steve Yegge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The cost of intelligence is trending to zero. How do we plan for this? &lt;a href=&#34;https://x.com/OfficialLoganK/status/1864508209769390238?t=OwjvTL6T55sh6VZGoMBtoQ&#34;&gt;Logan Kilpatrick&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;If you are not planning for the price of intelligence to go to zero, the next 3-5 years are going to incredibly disruptive to your business / life.&lt;/li&gt;
&lt;li&gt;The important but not stated caveat: consumer willingness to pay for AI is going to go up (a lot). It will be fascinating to watch consumer willingness, cost, and the amount of AI being used all move in different directions.&lt;/li&gt;
&lt;li&gt;Everyone building things with AI has an economic incentive to limit the amount of AI because of cost, which inherent limits the value prop. This will change as intelligence goes up and cost goes down.&lt;/li&gt;
&lt;li&gt;What this means is:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Admin automation&lt;/strong&gt;: Administrative tasks vanish into background AI. Booking meetings, managing finances, or even planning family activities will require less thought.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hyper-personalization&lt;/strong&gt;: Individuals get tailor-made everything—from medical advice to product recommendations to daily schedules. Systems learn your quirks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI co-brains&lt;/strong&gt;: AI co-worker “assistants support you at any moment. Productivity soars in knowledge work. “I’ll have my AI follow up becomes a normal response.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Humanity valued more&lt;/strong&gt;: As AI handles rote tasks, humans move up the value chain, focusing on creativity, empathy, or the “last-mile decisions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New business models&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;AI experts as a service&lt;/li&gt;
&lt;li&gt;Embedded AI Solutions&lt;/li&gt;
&lt;li&gt;AI micro-services for smart-calls&lt;/li&gt;
&lt;li&gt;Distributed AI&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://huggingface.co/spaces/lmarena-ai/arena-hard-browser&#34;&gt;Arena Hard&lt;/a&gt; is a set of hard prompts to test LLMs. &lt;a href=&#34;https://github.com/lmarena/arena-hard-auto&#34;&gt;Here is the code and evaluation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;LLMs can detect clear outliers easily. PROMPT: Which is the outlier in this dataset: (1,7), (2,7), (3,6), (4,6), (5,5), (6,1), (7,5), (8,3), (9,1), (10,1) (ANS: (6,1))
&lt;ul&gt;
&lt;li&gt;🟢 GPT-4o on ChatGPT gets this. GPT-4o Mini on the API gets it too.&lt;/li&gt;
&lt;li&gt;🟢 Gemini Pro, Flash, Flash 8b gets this right straight away, without even thinking.&lt;/li&gt;
&lt;li&gt;🟢 Claude 3.5 Sonnet, Claude 3 Haiku, Claude 3.5 Haiku get it on LLM Foundry. 🔴 Claude.ai, where it visualizes it and gets it wrong.&lt;/li&gt;
&lt;li&gt;🟢 Nova Micro, Lite, and Pro get it right.&lt;/li&gt;
&lt;li&gt;🟢 Llama 3.1 70b gets it right. 🔴 Llama 3.2 8b gets it wrong. Llama 3.2 70b, Llama 3.1 8b enter repetition.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;To install Docker on Windows without admin privileges, use &lt;a href=&#34;https://stackoverflow.com/a/63290821/100904&#34;&gt;&lt;code&gt;net localgroup docker-users &amp;quot;your-user-id&amp;quot; /ADD&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A non-administrator in a Google Groups domain can only add 200 emails to a group from the UI directly without invitation at a time. The only programmatic way to add users is for an administrator to add them. Even apps that use the Google Admin SDK need an admin to log in to access the relevant API.&lt;/li&gt;
&lt;li&gt;Take 100% of your work, including complex, multi step processes and put it into an LLM. It might fail at some but you will discover the limitations.&lt;/li&gt;
&lt;li&gt;I emailed Straive employees about their use of &lt;a href=&#34;https://llmfoundry.straive.com/&#34;&gt;LLM Foundry&lt;/a&gt; - the internal LLM portal. I picked ~500 non-users from teams that &lt;em&gt;otherwise&lt;/em&gt; have high (30%+) usage.
&lt;ul&gt;
&lt;li&gt;Reasons they didn&amp;rsquo;t use it were:
&lt;ul&gt;
&lt;li&gt;40% had not heard of it.&lt;/li&gt;
&lt;li&gt;40% were unclear of the benefits&lt;/li&gt;
&lt;li&gt;20% didn&amp;rsquo;t have time&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;45% feel they don&amp;rsquo;t have enough information and training to use it&lt;/li&gt;
&lt;li&gt;Some feedback
&lt;ul&gt;
&lt;li&gt;Sharing training videos will help&lt;/li&gt;
&lt;li&gt;Live training sessions that allows for Q&amp;amp;A will help&lt;/li&gt;
&lt;li&gt;Developers prefer detailed documentation&lt;/li&gt;
&lt;li&gt;The same prompt gives different results&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Possible solution: Email non-users introducing the tool and sharing a quick 15-minute tutorial and a 1-page quick start.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;My notes on the Amazon Nova models. &lt;a href=&#34;https://news.ycombinator.com/item?id=42309121&#34;&gt;More on Hacker News&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Nova Micro (3.75c/MTok) has the same cost as Gemini 1.5 Flash 8b but does not support images or documents.&lt;/li&gt;
&lt;li&gt;Nova Lite (6c/MTok) has about the same cost as Gemini 1.5 Flash 002 and supports images and documents (but not audio or video). It may be a good alternative. But GPT-4o mini, which is 2.5X costlier, is much better. (It partly passes the &lt;code&gt;Gr brx vshdn Fdhvdu flskhu?&lt;/code&gt; test which Nova Lite fails.)&lt;/li&gt;
&lt;li&gt;Nova Pro (80c/MTok) is cheaper than Gemini 1.5 Pro and a lot cheaper than GPT 4o, but does not match their quality.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LLMs are great at convincing you of wrong things. A danger and something to be wary of. &lt;a href=&#34;https://bsky.app/profile/emollick.bsky.social/post/3lcepstbuck2z&#34;&gt;Ethan Mollick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fish eye text summary is a great way to read text while summarizing context. &lt;a href=&#34;https://wattenberger.com/thoughts/fish-eye&#34;&gt;Amelia Wattenberger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DuckDB&amp;rsquo;s JavaScript API is still under development. For example, &lt;a href=&#34;https://github.com/duckdb/duckdb-node-neo/blob/cb5be3d27b8aedfac7f2c9d0eec360891fb9e1f7/api/src/DuckDBAppender.ts&#34;&gt;JSON, ARRAY are not insertable&lt;/a&gt;. Plus, re-creating persistent HNSW indices crashes.&lt;/li&gt;
&lt;li&gt;What&amp;rsquo;s a good text splitter library to use in JS?
&lt;ul&gt;
&lt;li&gt;LangChain: If you use it, use it with a simple wrapper decoupled from the implementation (e.g. your own parameters) that you can replace later.
&lt;ul&gt;
&lt;li&gt;Popular&lt;/li&gt;
&lt;li&gt;Fit-for-purpose. MarkdownTextSplitter which inherits from RecursiveCharacterTextSplitter is what&amp;rsquo;s needed in most cases.&lt;/li&gt;
&lt;li&gt;Unstable&lt;/li&gt;
&lt;li&gt;Poorly maintained &lt;a href=&#34;https://github.com/langchain-ai/langchain/tree/c2f1d022a2e55dfddd313e54d01250d3f64c6eb2/libs/text-splitters&#34;&gt;Python docs indicate version 0.0 but it is in 0.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Under-maintained &lt;a href=&#34;https://www.npmjs.com/package/@langchain/textsplitters&#34;&gt;Last update was 3 months ago, 13 Sep 2024&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LlamaIndex:
&lt;ul&gt;
&lt;li&gt;Popular&lt;/li&gt;
&lt;li&gt;Not an ideal fit. MarkdownNodeParser does not support chunk size. SentenceWindowNodeParser does not capture Markdown headings.&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 - 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 - 18 Feb 2024</title>
      <link>https://www.s-anand.net/blog/things-i-learned-18-feb-2024/</link>
      <pubDate>Sun, 18 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-18-feb-2024/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fine tuning makes economic sense only if the input tokens SAVED is twice the output token size on each call.&lt;/li&gt;
&lt;li&gt;Docker container memory usage on WSL2 &lt;code&gt;docker stats&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;frolvlad/alpine-glibc:alpine-3.17: 540KB&lt;/li&gt;
&lt;li&gt;ubuntu: 1MB (python3: +5MB)&lt;/li&gt;
&lt;li&gt;nikolaik/python-nodejs:python3.10-nodejs18-bullseye: 1.4MB (python3: +5MB)&lt;/li&gt;
&lt;li&gt;python:3-alpine: 612KB (python3: +7.5MB)&lt;/li&gt;
&lt;li&gt;python:3: 500KB (python3: +11.2MB)&lt;/li&gt;
&lt;li&gt;continuumio/miniconda3: 7.6MB (+6.5MB)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Discussion with Vinu Yamunan
&lt;ul&gt;
&lt;li&gt;Databuck by FirstEigen. Autolysis plus monitoring&lt;/li&gt;
&lt;li&gt;Quality council has the data steward (maintainer of each dataset) coming together with the uses on a weekly basis to understand what quality problems to users are facing. Data owners jaundice at a lower frequency to get an understanding&lt;/li&gt;
&lt;li&gt;#TODO Automate rules for data quality in our projects and intranet&lt;/li&gt;
&lt;li&gt;Convert a config rule into business language. Explain SQL. These are good use cases for llm&amp;rsquo;s&lt;/li&gt;
&lt;li&gt;Graph DBs are powerful for flexible data structures, but query generation needs AI or expertise. Check the Neo4J language cypher&lt;/li&gt;
&lt;li&gt;Explore storing SAME data in relational DBs AND in graph DBs / document DBs for different use cases&lt;/li&gt;
&lt;li&gt;Dallas rocketry challenge. Build a rocket that can take an egg to 800 feet exactly and land without breaking it&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Discussion with Karthik A
&lt;ul&gt;
&lt;li&gt;#TODO Ask IIT students to do internship tasks. Use advent of code is a qualifying criterion&lt;/li&gt;
&lt;li&gt;Tata motors unionized DB admins for longevity. No one can take their jobs. Hires people who LIKE their jobs&lt;/li&gt;
&lt;li&gt;Rust gives me typing. It&amp;rsquo;s very efficient. Pola.rs is interesting but Pandas as good enough.&lt;/li&gt;
&lt;li&gt;Explore alerts from CCTV feeds. Karthik sends email alerts with pictures for:
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Is the machine on or off&amp;rdquo;? for productivity&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Are people not wearing helmets?&amp;rdquo; for safety at Cummins&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;#TODO Integrate with WhatsApp. Use LLMs with function calling for responses&lt;/li&gt;
&lt;li&gt;Use expiring links (to pictures or content). It increases engagement&lt;/li&gt;
&lt;li&gt;Check Deno licensing. Is there a commercial clause? #ANS No - it&amp;rsquo;s MIT license&lt;/li&gt;
&lt;li&gt;Centre or excellence for zero emission tech at IIT. Karthik is part of it&lt;/li&gt;
&lt;li&gt;Explore auth0. 7000 users are free&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toml&lt;/code&gt; is part of the Python 3.11 standard library!&lt;/li&gt;
&lt;li&gt;If copilot writes code we don&amp;rsquo;t understand we are screwed. Hence expertise matters&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Discussion with Vikas Kedia
&lt;ul&gt;
&lt;li&gt;#TODO Plan an AMA&lt;/li&gt;
&lt;li&gt;The mind becomes lazy with financial success. Vikas is treating his podcast as a startup&lt;/li&gt;
&lt;li&gt;Hire a professional videographer for your content&lt;/li&gt;
&lt;li&gt;Financial RoI in financial markets is the highest. Programming is high too but FS is even better&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Performative power&amp;rdquo; &amp;ndash; when you&amp;rsquo;re forced to perform, you get better ideas&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://observablehq.com/blog/observable-2-0&#34;&gt;Observable 2.0 is an open source static site generator for data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.python.org/3/library/dataclasses.html&#34;&gt;Python dataclasses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://openai.com/sora&#34;&gt;SORA&lt;/a&gt; is OpenAI&amp;rsquo;s video generation model, and is stunning!&lt;/li&gt;
&lt;li&gt;If Appa comes to Singapore even for a week, he will feel better and can boast to his friends. At over 90, it may be better to move Appa to where I am since many of his friends would be no more and shops, doctors, etc can be managed and getting an independent house nearby is not hard.&lt;/li&gt;
&lt;li&gt;There is an SEZ in Gujarat where Indians can invest like in Mauritius without forex restraint&lt;/li&gt;
&lt;li&gt;Shubha: Media sites are moving away from Vickrey auctions to first-price auctions for ads. That&amp;rsquo;s because they send the auction price &lt;em&gt;forward&lt;/em&gt; to a search engine and the winning second-price value can lose even though the owner is willing to pay more. Second-price auctions don&amp;rsquo;t work unless ALL bidders are in the SAME auction. Ad networks are a hierarchy of auctions!&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://developers.googleblog.com/2024/02/gemini-15-available-for-private-preview-in-google-ai-studio.html&#34;&gt;Gemini 1.5 launched&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fly.io/blog/gpu-ga/&#34;&gt;Fly.io offers GPU hosting&lt;/a&gt; and auto stop when they have nothing to do.&lt;/li&gt;
&lt;li&gt;Embeddings in random forest are very effective at classification &amp;ndash; much better than dot product.&lt;/li&gt;
&lt;li&gt;To deploy apps with OAuth + templating support in a small Docker container, use Caddy&lt;/li&gt;
&lt;li&gt;Deno has native TypeScript, browser APIs, and compiles to multiple OSs&lt;/li&gt;
&lt;li&gt;Ruff is a MUCH faster flake8&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://minimaxir.com/2023/12/chatgpt-structured-data/#two-pass-generation&#34;&gt;Two pass generation&lt;/a&gt; is a clever technique to get multiple SEQUENTIAL answers in a single API request. For example the schema &lt;code&gt;{&#39;code&#39;, &#39;optimized_code&#39;}&lt;/code&gt; will generate &lt;code&gt;code&lt;/code&gt; and then optimize it.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://minimaxir.com/2023/12/chatgpt-reestructured-data/#unions-and-chain-of-thoughts&#34;&gt;Unions in function calling&lt;/a&gt; allows flexible multi-step prompts in a single API.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 11 Feb 2024</title>
      <link>https://www.s-anand.net/blog/things-i-learned-11-feb-2024/</link>
      <pubDate>Sun, 11 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-11-feb-2024/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dockerfile can have &lt;code&gt;FROM scratch&lt;/code&gt; and you can add specific binaries rather than an entire OS. &lt;a href=&#34;https://berthub.eu/articles/posts/trifecta-technology/&#34;&gt;via&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fine-tuning session by Dan. &lt;a href=&#34;https://colab.research.google.com/drive/1ts9Ar63sFK49oSz3dcw2EkivL0ZJesKi&#34;&gt;Notebook&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://colab.research.google.com/drive/15iFBr1xWgztXvhrj5I9fBv20c7CFOPBE&#34;&gt;Example of fine-tuning Mistral&lt;/a&gt;. Consumed &lt;del&gt;28 computes (&lt;/del&gt;$2.8)&lt;/li&gt;
&lt;li&gt;Axlotl is what the top fine-tuned LLMs are trained on&lt;/li&gt;
&lt;li&gt;Deepspeed provides distributed training&lt;/li&gt;
&lt;li&gt;Flash attention lets data stay on GPU&lt;/li&gt;
&lt;li&gt;Sample packing packs samples of different lengths into equal length tensors&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Visualize the RANK of a token in a generated stream instead of logprob&lt;/li&gt;
&lt;li&gt;The Knowledge Project. Tomorrow Gayner
&lt;ul&gt;
&lt;li&gt;What I&amp;rsquo;d like in my obituary: Anand was happiness. A guru. Generous.&lt;/li&gt;
&lt;li&gt;To get what we seek we must deserve this. Build, measure, learn&lt;/li&gt;
&lt;li&gt;If you did the same thing daily for 50 years, would it be a great thing? If yes, do it. If not, stop. Do this in daily retrospectives&lt;/li&gt;
&lt;li&gt;My new role should be productivity through technology innovation. That may mean a CTO role. But be specific otherwise no one will understand it&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Hidden brain podcast. Us 2.0. Win hearts, then minds
&lt;ul&gt;
&lt;li&gt;When in an interaction, ask yourself. Can I learn and change myself? Can I win their hearts, then mines, so their behavior will change. That identity will change&lt;/li&gt;
&lt;li&gt;Notice when you get emotionally triggered. That&amp;rsquo;s exactly when you should not get emotionally triggered&lt;/li&gt;
&lt;li&gt;Try model humility and moral&lt;/li&gt;
&lt;li&gt;Look for close to people&amp;rsquo;s identities in our conversations. What are things they like? What does it mean for them? Simply ask. With that understanding of identity, it becomes easier to reframe things in a way they will understand&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Bard can talk to Gmail and Google Drive!&lt;/li&gt;
&lt;li&gt;#PREDICTION As automation takes over these mainstream activities, people will take over the niches. Since expertise like knowledge is fractal, there will be many more segments of one in the future and it will be easier to automate clusters of similar abilities. Recommenders and brands will become even more important&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://observablehq.com/@osserman&#34;&gt;Stephen Osserman&amp;rsquo;s Observables&lt;/a&gt; have some nice notes.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://observablehq.com/@osserman/visualizing-partial-election-results&#34;&gt;Visualizing partial election results&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://observablehq.com/@osserman/d3-force-dilemmas-data-distortion&#34;&gt;D3 Force Dilemmas: Data Distortion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://observablehq.com/@sandraviz/30_days_d3_dataviz&#34;&gt;Sandra Becker&amp;rsquo;s 30 day D3 course&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
  </channel>
</rss>
