<?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>svg on S Anand</title>
    <link>https://www.s-anand.net/blog/tag/svg/</link>
    <description>Recent content in svg on S Anand</description>
    <generator>Hugo -- 0.164.0</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 06 Jun 2026 11:32:47 +0530</lastBuildDate>
    <atom:link href="https://www.s-anand.net/blog/tag/svg/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Editing images with code and AI</title>
      <link>https://www.s-anand.net/blog/editing-images-with-code-and-ai/</link>
      <pubDate>Sat, 06 Jun 2026 11:32:47 +0530</pubDate>
      <guid>https://www.s-anand.net/blog/editing-images-with-code-and-ai/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://a16z.com/&#34;&gt;Andreessen Horowitz&lt;/a&gt; published an interesting article titled &lt;a href=&#34;https://www.a16z.news/p/the-next-frontier-of-visual-ai-is&#34;&gt;The Next Frontier of Visual AI Is Code&lt;/a&gt;. Here&amp;rsquo;s the summary.&lt;/p&gt;
&lt;p&gt;A lot of our work is visual: ads, slides, dashboards, logos, videos, architecture, etc.&lt;/p&gt;
&lt;p&gt;We can generate visual output either as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pixels&lt;/strong&gt; (like Nano Banana a photo), or as&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code&lt;/strong&gt; (like Claude generating an SVG)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Code is more powerful: AI can inspect the output and improve fast in a loop: &lt;strong&gt;Code &amp;gt; Render &amp;gt; Inspect &amp;gt; Revise&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;For &lt;strong&gt;2D and UI&lt;/strong&gt;: AI can generate SVG logos, HTML/CSS pages, Figma layers, app, etc.
For &lt;strong&gt;animation and 3D&lt;/strong&gt;: AI can generate Lottie JSON, Blender scripts, USD scene graphs, shader code, or 3D programs.&lt;/p&gt;
&lt;p&gt;This means &lt;strong&gt;design, marketing, and product teams&lt;/strong&gt; are immediate prospects. Instead of static mockups, they&amp;rsquo;ll get &lt;em&gt;editable&lt;/em&gt; logos, landing pages, design prototypes, motion graphics, onboarding animations, etc.&lt;/p&gt;
&lt;p&gt;Emerging industries are &lt;strong&gt;robotics, manufacturing, architecture, gaming companies&lt;/strong&gt;. Agents can build 3D chairs, machine, room, or robot with the right materials, joints and constraints.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve seen some examples of this approach. Pavan used Blender MCP to &lt;a href=&#34;https://pavankumart18.github.io/ai-blender-design-journey/index.html&#34;&gt;build an entire building campus&lt;/a&gt; &lt;em&gt;solely by prompting Claude&lt;/em&gt;. Also to &lt;a href=&#34;https://pavankumart18.github.io/ai-blender-design-journey/index2.html&#34;&gt;design a mug from scratch&lt;/a&gt;. His approach is called &lt;a href=&#34;https://fugtemypt123.github.io/VIGA-website/&#34;&gt;VIGA: Vision-as-Inverse-Graphics Agent&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pavankumart18.github.io/ai-blender-design-journey/index.html&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-06-06-building-campus.avif&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you see anyone creating visual assets of any form - manually, or with AI as pixels - please remember this approach.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Using SVG favicons with Unicode</title>
      <link>https://www.s-anand.net/blog/using-svg-favicons-with-unicode/</link>
      <pubDate>Thu, 01 Jan 2026 13:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/using-svg-favicons-with-unicode/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-01-01-svg-favicons-unicode.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;Browsers support &lt;a href=&#34;https://caniuse.com/link-icon-svg&#34;&gt;SVG favicons&lt;/a&gt; as &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Schemes/data&#34;&gt;&lt;code&gt;data:&lt;/code&gt; URLs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For example, this SVG:&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-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;svg&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;xmlns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://www.w3.org/2000/svg&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;viewBox&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0 0 32 32&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;circle&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;cx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;16&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;cy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;16&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;15&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#2563eb&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#fff&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;m16 7 2 7 7 2-7 2-2 7-2-7-7-2 7-2Z&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;svg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 32 32&#34; width=&#34;128&#34;&gt;
  &lt;circle cx=&#34;16&#34; cy=&#34;16&#34; r=&#34;15&#34; fill=&#34;#2563eb&#34;/&gt;
  &lt;path fill=&#34;#fff&#34; d=&#34;m16 7 2 7 7 2-7 2-2 7-2-7-7-2 7-2Z&#34;/&gt;
&lt;/svg&gt;
&lt;p&gt;&amp;hellip; can be:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Compressed via &lt;a href=&#34;https://svgomg.net/&#34;&gt;svgomg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Converted to a &lt;code&gt;data:&lt;/code&gt; URL via &lt;a href=&#34;https://www.svgviewer.dev/svg-to-data-uri&#34;&gt;svgviewer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Inserted into HTML like this:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;icon&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;image/svg+xml&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2032%2032%22%3E%3Ccircle%20cx%3D%2216%22%20cy%3D%2216%22%20r%3D%2215%22%20fill%3D%22%232563eb%22%2F%3E%3Cpath%20fill%3D%22%23fff%22%20d%3D%22m16%207%202%207%207%202-7%202-2%207-2-7-7-2%207-2Z%22%2F%3E%3C%2Fsvg%3E&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The fun part is that you can use text inside the SVG, styled as you wish:&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-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;svg&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;xmlns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://www.w3.org/2000/svg&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;viewBox&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0 0 64 64&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;rect&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#2563eb&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;64&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;64&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;rx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;32&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;35&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;text-anchor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;middle&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;dominant-baseline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;middle&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;40&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;font-weight&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;800&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;white&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;DS&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;svg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;128&#34;&gt;
  &lt;rect fill=&#34;#2563eb&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;10&#34;/&gt;
  &lt;text x=&#34;32&#34; y=&#34;35&#34; text-anchor=&#34;middle&#34; dominant-baseline=&#34;middle&#34; font-size=&#34;40&#34; font-weight=&#34;800&#34; fill=&#34;white&#34;&gt;DS&lt;/text&gt;
&lt;/svg&gt;
&lt;p&gt;&amp;hellip; or even use Unicode characters:&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-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;svg&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;xmlns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://www.w3.org/2000/svg&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;viewBox&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0 0 64 64&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;rect&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#2563eb&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;64&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;64&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;rx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;32&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;35&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;text-anchor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;middle&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;dominant-baseline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;middle&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;40&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;🌈&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;svg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;128&#34;&gt;
  &lt;rect fill=&#34;#2563eb&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;10&#34;/&gt;
  &lt;text x=&#34;32&#34; y=&#34;35&#34; text-anchor=&#34;middle&#34; dominant-baseline=&#34;middle&#34; font-size=&#34;40&#34;&gt;🌈&lt;/text&gt;
&lt;/svg&gt;
&lt;p&gt;That can be converted into a HTML link like this:&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-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;icon&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;image/svg+xml&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20fill%3D%22%232563eb%22%20rx%3D%2210%22%2F%3E%3Ctext%20x%3D%2232%22%20y%3D%2235%22%20dominant-baseline%3D%22middle%22%20font-size%3D%2240%22%20text-anchor%3D%22middle%22%3E%F0%9F%8C%88%3C%2Ftext%3E%3C%2Fsvg%3E&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The variety is endless!&lt;/p&gt;
&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;oklch(0.4 0.15 0)&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;10&#34;/&gt;
  &lt;text x=&#34;32&#34; y=&#34;35&#34; text-anchor=&#34;middle&#34; dominant-baseline=&#34;middle&#34; font-size=&#34;40&#34; font-weight=&#34;800&#34; fill=&#34;white&#34;&gt;⚡&lt;/text&gt;
&lt;/svg&gt; &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;oklch(0.4 0.15 45)&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;10&#34;/&gt;
  &lt;text x=&#34;32&#34; y=&#34;35&#34; text-anchor=&#34;middle&#34; dominant-baseline=&#34;middle&#34; font-size=&#34;40&#34; font-weight=&#34;800&#34; fill=&#34;white&#34;&gt;🖱️&lt;/text&gt;
&lt;/svg&gt; &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;oklch(0.4 0.15 90)&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;10&#34;/&gt;
  &lt;text x=&#34;32&#34; y=&#34;35&#34; text-anchor=&#34;middle&#34; dominant-baseline=&#34;middle&#34; font-size=&#34;40&#34; font-weight=&#34;800&#34; fill=&#34;white&#34;&gt;✦&lt;/text&gt;
&lt;/svg&gt; &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;oklch(0.4 0.15 135)&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;10&#34;/&gt;
  &lt;text x=&#34;32&#34; y=&#34;35&#34; text-anchor=&#34;middle&#34; dominant-baseline=&#34;middle&#34; font-size=&#34;40&#34; font-weight=&#34;800&#34; fill=&#34;white&#34;&gt;◈&lt;/text&gt;
&lt;/svg&gt; &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;oklch(0.4 0.15 180)&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;10&#34;/&gt;
  &lt;text x=&#34;32&#34; y=&#34;35&#34; text-anchor=&#34;middle&#34; dominant-baseline=&#34;middle&#34; font-size=&#34;40&#34; font-weight=&#34;800&#34; fill=&#34;white&#34;&gt;↻&lt;/text&gt;
&lt;/svg&gt; &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;oklch(0.4 0.15 225)&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;10&#34;/&gt;
  &lt;text x=&#34;32&#34; y=&#34;35&#34; text-anchor=&#34;middle&#34; dominant-baseline=&#34;middle&#34; font-size=&#34;40&#34; font-weight=&#34;800&#34; fill=&#34;white&#34;&gt;⭕&lt;/text&gt;
&lt;/svg&gt; &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;oklch(0.4 0.15 270)&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;10&#34;/&gt;
  &lt;text x=&#34;32&#34; y=&#34;35&#34; text-anchor=&#34;middle&#34; dominant-baseline=&#34;middle&#34; font-size=&#34;40&#34; font-weight=&#34;800&#34; fill=&#34;white&#34;&gt;🕒&lt;/text&gt;
&lt;/svg&gt; &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;oklch(0.4 0.15 315)&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;10&#34;/&gt;
  &lt;text x=&#34;32&#34; y=&#34;35&#34; text-anchor=&#34;middle&#34; dominant-baseline=&#34;middle&#34; font-size=&#34;40&#34; font-weight=&#34;800&#34; fill=&#34;white&#34;&gt;👨‍👦&lt;/text&gt;
&lt;/svg&gt;
&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;#1e3a5f&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;12&#34;&gt;&lt;/rect&gt;
  &lt;text x=&#34;32&#34; y=&#34;24&#34; text-anchor=&#34;middle&#34; font-size=&#34;24&#34; font-weight=&#34;800&#34; fill=&#34;#dbeafe&#34;&gt;T&lt;/text&gt;
  &lt;text x=&#34;32&#34; y=&#34;52&#34; text-anchor=&#34;middle&#34; font-size=&#34;24&#34; font-weight=&#34;800&#34; fill=&#34;#dbeafe&#34;&gt;L&lt;/text&gt;
&lt;/svg&gt; &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;#3b82f6&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;12&#34;&gt;&lt;/rect&gt;
  &lt;text x=&#34;32&#34; y=&#34;42&#34; text-anchor=&#34;middle&#34; font-family=&#34;Georgia, serif&#34; font-size=&#34;38&#34; font-weight=&#34;700&#34; fill=&#34;white&#34;&gt;T&lt;/text&gt;
  &lt;text x=&#34;48&#34; y=&#34;54&#34; text-anchor=&#34;middle&#34; font-size=&#34;16&#34; font-weight=&#34;500&#34; fill=&#34;rgba(255,255,255,0.7)&#34;&gt;l&lt;/text&gt;
&lt;/svg&gt; &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;#1e1e1e&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;12&#34;&gt;&lt;/rect&gt;
  &lt;rect x=&#34;8&#34; y=&#34;16&#34; width=&#34;23&#34; height=&#34;32&#34; rx=&#34;2&#34; fill=&#34;rgba(255,255,255,0.05)&#34; stroke=&#34;rgba(255,255,255,0.1)&#34; stroke-width=&#34;1&#34;&gt;&lt;/rect&gt;
  &lt;rect x=&#34;33&#34; y=&#34;16&#34; width=&#34;23&#34; height=&#34;32&#34; rx=&#34;2&#34; fill=&#34;rgba(255,255,255,0.05)&#34; stroke=&#34;rgba(255,255,255,0.1)&#34; stroke-width=&#34;1&#34;&gt;&lt;/rect&gt;
  &lt;text x=&#34;19.5&#34; y=&#34;40&#34; text-anchor=&#34;middle&#34; font-family=&#34;monospace&#34; font-size=&#34;24&#34; font-weight=&#34;600&#34; fill=&#34;#3b82f6&#34;&gt;T&lt;/text&gt;
  &lt;text x=&#34;44.5&#34; y=&#34;40&#34; text-anchor=&#34;middle&#34; font-family=&#34;monospace&#34; font-size=&#34;24&#34; font-weight=&#34;600&#34; fill=&#34;#3b82f6&#34;&gt;L&lt;/text&gt;
&lt;/svg&gt; &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;#1e3a5f&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;12&#34;&gt;&lt;/rect&gt;
  &lt;text x=&#34;22&#34; y=&#34;42&#34; text-anchor=&#34;middle&#34; font-size=&#34;32&#34; font-weight=&#34;200&#34; fill=&#34;#dbeafe&#34;&gt;T&lt;/text&gt;
  &lt;text x=&#34;44&#34; y=&#34;42&#34; text-anchor=&#34;middle&#34; font-size=&#34;32&#34; font-weight=&#34;900&#34; fill=&#34;#dbeafe&#34;&gt;L&lt;/text&gt;
&lt;/svg&gt; &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;#3b82f6&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;12&#34;&gt;&lt;/rect&gt;
  &lt;text x=&#34;28&#34; y=&#34;48&#34; text-anchor=&#34;middle&#34; font-size=&#34;52&#34; font-weight=&#34;900&#34; fill=&#34;white&#34;&gt;T&lt;/text&gt;
  &lt;text x=&#34;52&#34; y=&#34;20&#34; text-anchor=&#34;middle&#34; font-size=&#34;14&#34; font-weight=&#34;600&#34; fill=&#34;rgba(255,255,255,0.6)&#34;&gt;L&lt;/text&gt;
&lt;/svg&gt; &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;#1e3a5f&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;12&#34;&gt;&lt;/rect&gt;
  &lt;text x=&#34;26&#34; y=&#34;44&#34; text-anchor=&#34;middle&#34; font-size=&#34;40&#34; font-weight=&#34;900&#34; fill=&#34;#3b82f6&#34;&gt;T&lt;/text&gt;
  &lt;text x=&#34;38&#34; y=&#34;44&#34; text-anchor=&#34;middle&#34; font-size=&#34;40&#34; font-weight=&#34;900&#34; fill=&#34;#dbeafe&#34; opacity=&#34;0.9&#34;&gt;L&lt;/text&gt;
&lt;/svg&gt; &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;#dbeafe&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;12&#34;&gt;&lt;/rect&gt;
  &lt;text x=&#34;20&#34; y=&#34;32&#34; text-anchor=&#34;middle&#34; font-size=&#34;28&#34; font-weight=&#34;800&#34; fill=&#34;#1e3a5f&#34;&gt;T&lt;/text&gt;
  &lt;text x=&#34;44&#34; y=&#34;46&#34; text-anchor=&#34;middle&#34; font-size=&#34;28&#34; font-weight=&#34;800&#34; fill=&#34;#1e3a5f&#34;&gt;L&lt;/text&gt;
&lt;/svg&gt; &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 64 64&#34; width=&#34;64&#34;&gt;
  &lt;rect fill=&#34;#0f0f0f&#34; width=&#34;64&#34; height=&#34;64&#34; rx=&#34;12&#34;&gt;&lt;/rect&gt;
  &lt;text x=&#34;12&#34; y=&#34;42&#34; text-anchor=&#34;middle&#34; font-family=&#34;monospace&#34; font-size=&#34;28&#34; font-weight=&#34;300&#34; fill=&#34;#666&#34;&gt;[&lt;/text&gt;
  &lt;text x=&#34;32&#34; y=&#34;42&#34; text-anchor=&#34;middle&#34; font-family=&#34;monospace&#34; font-size=&#34;22&#34; font-weight=&#34;700&#34; letter-spacing=&#34;-1&#34; fill=&#34;#3b82f6&#34;&gt;TL&lt;/text&gt;
  &lt;text x=&#34;52&#34; y=&#34;42&#34; text-anchor=&#34;middle&#34; font-family=&#34;monospace&#34; font-size=&#34;28&#34; font-weight=&#34;300&#34; fill=&#34;#666&#34;&gt;]&lt;/text&gt;
&lt;/svg&gt;
&lt;p&gt;What makes this powerful is that:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You can create entire families of favicons using typography, Unicode characters, and colors.&lt;/li&gt;
&lt;li&gt;The favicons are tiny (a few hundred bytes).&lt;/li&gt;
&lt;li&gt;They&amp;rsquo;re easy to edit and maintain (just edit the SVG text).&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    <item>
      <title>Creating a favicon from SVG</title>
      <link>https://www.s-anand.net/blog/creating-a-favicon-from-svg/</link>
      <pubDate>Thu, 01 Jan 2026 02:03:52 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/creating-a-favicon-from-svg/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Favicon PNG sizes&#34; loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-01-01-favicon-png-sizes.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;I use a &lt;em&gt;tiny&lt;/em&gt; SVG &lt;code&gt;favicon.svg&lt;/code&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-svg&#34; data-lang=&#34;svg&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;svg&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;xmlns=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://www.w3.org/2000/svg&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;viewBox=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0 0 32 32&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;circle&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;cx=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;16&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;cy=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;16&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;r=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;15&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;fill=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#2563eb&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;path&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;fill=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#fff&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;d=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;m16 7 2 7 7 2-7 2-2 7-2-7-7-2 7-2Z&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/svg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It&amp;rsquo;s small enough that I usually inline it in HTML:&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-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;icon&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;data:image/svg+xml,&amp;lt;svg xmlns=&amp;#39;http://www.w3.org/2000/svg&amp;#39; viewBox=&amp;#39;0 0 32 32&amp;#39;&amp;gt;&amp;lt;circle cx=&amp;#39;16&amp;#39; cy=&amp;#39;16&amp;#39; r=&amp;#39;15&amp;#39; fill=&amp;#39;%232563eb&amp;#39;/&amp;gt;&amp;lt;path fill=&amp;#39;%23fff&amp;#39; d=&amp;#39;m16 7 2 7 7 2-7 2-2 7-2-7-7-2 7-2Z&amp;#39;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But sometimes I need a &lt;code&gt;/favicon.ico&lt;/code&gt; because I don&amp;rsquo;t want to change the HTML (e.g. generated content, others&amp;rsquo; code, too many files to change) and &lt;a href=&#34;https://html.spec.whatwg.org/multipage/links.html#rel-icon&#34;&gt;&lt;code&gt;/favicon.ico&lt;/code&gt; is the default&lt;/a&gt; browsers look for.&lt;/p&gt;
&lt;p&gt;Most online favicon SVG to ICO generators produce &lt;strong&gt;bloated&lt;/strong&gt; favicons with uncompressed BMP entries that are over 100KB. But &lt;a href=&#34;https://devblogs.microsoft.com/oldnewthing/20101022-00/?p=12473&#34;&gt;ICO files support PNG compression&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ICO files support multiple files sizes, e.g. &lt;a href=&#34;https://learn.microsoft.com/en-us/windows/win32/uxguide/vis-icons&#34;&gt;4 layers of size 16, 32, 48, 256&lt;/a&gt;. But you don&amp;rsquo;t need all. A 32x32 for tabs and 256x256 for desktop is common.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s how I created a small (4.6K) &lt;code&gt;favicon.ico&lt;/code&gt; from my SVG:&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;&lt;span class=&#34;c1&#34;&gt;# Convert SVG to PNGs of various sizes. You can pick any set of sizes you want&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; s in &lt;span class=&#34;m&#34;&gt;32&lt;/span&gt; 128&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  magick -background none -density &lt;span class=&#34;m&#34;&gt;512&lt;/span&gt; favicon.svg -resize &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;x&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; -strip PNG32:icon-&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;.png
&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;done&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;c1&#34;&gt;# oxipng is great for lossess PNG compression.&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;c1&#34;&gt;# I use mise but you can use oxipng any other way.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mise x oxipng -- oxipng -o6 --strip all icon-*.png
&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;c1&#34;&gt;# Build favicon.ico with PNG-compressed entries&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;c1&#34;&gt;# Install icoutils if required, e.g. sudo apt-get install icoutils&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;icotool -c -o favicon.ico --raw&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;icon-128.png --raw&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;icon-32.png
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;PS: I discovered another technique - throwaway web pages to create featured images. This featured image was generated via initially on Claude Code, then on Codex:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Create a simple page that displays all the .png files in this page along with the file size and image dimensions. These are part of a favicon. I want the user to, at a glance, understand the impact of resolution and file size trade-offs. Therefore, render all the images at the same visual size, e.g. icon-*.png could be rendered all at 128x128 for comparability of sizes.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 19 Oct 2025</title>
      <link>https://www.s-anand.net/blog/things-i-learned-19-oct-2025/</link>
      <pubDate>Sun, 19 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-19-oct-2025/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;⭐ &amp;ldquo;&amp;hellip; most engineers don’t have public commits. Senior engineers at large tech companies don’t work on open-source projects for the most part.&amp;rdquo; &lt;a href=&#34;https://interviewing.io/blog/why-ai-cant-do-hiring&#34;&gt;Why AI Can&amp;rsquo;t Do Hiring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cloudflare&amp;rsquo;s &lt;a href=&#34;https://sandbox.cloudflare.com/&#34;&gt;Sandbox&lt;/a&gt; feature in their Workers looks impressive. It supports streaming, web access to the container, and long-running processes. So we can spawn off a task and have it run a server (at least for a while) or a scraper.&lt;/li&gt;
&lt;li&gt;Gemini API has a Google Maps tool that it can refer to - like Google Search. &lt;a href=&#34;https://ai.google.dev/gemini-api/docs/maps-grounding&#34;&gt;Maps Grounding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Earlier we needed humans to label data for RLHF. Now we don&amp;rsquo;t since AI can simulate it. This is a pattern. Once AI learns from a human, that human skill can be automated. &lt;a href=&#34;https://youtu.be/RqWIvvv3SnQ&#34;&gt;How GPT-5 Thinks — OpenAI VP of Research Jerry Tworek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/output&#34;&gt;&lt;code&gt;&amp;lt;output&amp;gt;&lt;/code&gt;&lt;/a&gt; element has a &lt;code&gt;for=&lt;/code&gt; attribute indicating which &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; elements it is linked to and a &lt;code&gt;form=&lt;/code&gt; attribute indicating which form it belongs to. This &lt;a href=&#34;https://denodell.com/blog/html-best-kept-secret-output-tag&#34;&gt;works well with screen readers&lt;/a&gt;. A good reason to use it more. &lt;a href=&#34;https://rud.is/drop/output.html&#34;&gt;Examples&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Meta built a &lt;a href=&#34;https://ai.meta.com/research/publications/cwm-an-open-weights-llm-for-research-on-code-generation-with-world-models/&#34;&gt;Code World Model&lt;/a&gt;. Basically an LLM that acts like a Python interpreter!&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo apt install moreutils&lt;/code&gt; installs a set of useful packages:
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;chronic&lt;/strong&gt;. Runs a command quietly (suppressing output) unless it fails — good for cron jobs where you only want noise on errors. &lt;code&gt;chronic backup.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;combine&lt;/strong&gt;. Combines lines from two input streams/files using boolean operations (AND, OR, XOR). &lt;code&gt;combine AND fileA fileB&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;errno&lt;/strong&gt;. Look up symbolic names, numeric codes, and descriptions for standard errno values. &lt;code&gt;errno -l; errno ENOENT; errno 2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ifdata&lt;/strong&gt;. Query network interface properties (IP, byte counts, errors) in a script-friendly format. &lt;code&gt;ifdata -sip eth0; ifdata -bops eth0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ifne&lt;/strong&gt;. Run a command only if stdin is not empty, passing the input through. &lt;code&gt;find . -name core | ifne mail -s &amp;quot;Core files found&amp;quot; admin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;isutf8&lt;/strong&gt;. Check whether a file or stdin is valid UTF-8. &lt;code&gt;isutf8 somefile.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;lckdo&lt;/strong&gt;. Run a command while holding an exclusive lock to prevent concurrent runs. &lt;code&gt;lckdo /var/run/mylockfile.cmd myscript.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mispipe&lt;/strong&gt;. Pipe two commands, but return the exit status of the first one (useful in pipelines). &lt;code&gt;cmd1 mispipe cmd2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;parallel&lt;/strong&gt;. Run multiple commands in parallel, reading them from stdin or arguments. &lt;code&gt;parallel &amp;lt; jobs.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pee&lt;/strong&gt;. Like &lt;code&gt;tee&lt;/code&gt;, but sends stdin to multiple commands in parallel. &lt;code&gt;echo &amp;quot;foo&amp;quot; | pee cmd1 cmd2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;⭐ &lt;strong&gt;sponge&lt;/strong&gt;. Soak up all input before writing to output — enables in-place edits safely. &lt;code&gt;sort file | sponge file&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;⭐ &lt;strong&gt;ts&lt;/strong&gt;. Prefix each input line with a timestamp. &lt;code&gt;tail -f logfile | ts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vidir&lt;/strong&gt;. Edit a directory listing in your editor to rename, move, or delete files in bulk. &lt;code&gt;vidir ~/myfolder&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vipe&lt;/strong&gt;. Insert a text editor into a pipeline to manually edit streamed input before output. &lt;code&gt;cat file | vipe | wc -l&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zrun&lt;/strong&gt;. Transparently decompress compressed files before passing them to a command. &lt;code&gt;zrun cat file.gz&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Despite 20 years of SVG experience, I learnt new things from &lt;a href=&#34;https://www.joshwcomeau.com/svg/friendly-introduction-to-svg/&#34;&gt;A Friendly Introduction to SVG&lt;/a&gt; and &lt;a href=&#34;https://www.joshwcomeau.com/svg/interactive-guide-to-paths/&#34;&gt;A Friendly Introduction to Paths&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Setting a &lt;code&gt;&amp;lt;rect&amp;gt;&lt;/code&gt; width/height or a &lt;code&gt;&amp;lt;circle&amp;gt;&lt;/code&gt; radius to zero &lt;em&gt;removes&lt;/em&gt; the element instead of drawing a point.&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s no option to draw the stroke on the inside or outside of a shape/path. Only the center.&lt;/li&gt;
&lt;li&gt;You can override a path&amp;rsquo;s &lt;code&gt;pathLength&lt;/code&gt; attribute to create a new internal scale for its length. It&amp;rsquo;s unclear where I can use this.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt; arcs have this syntax: &lt;code&gt;A [rx],[ry] [rotation] [large-arc-flag] [sweep-flag] [end-x],[end-y]&lt;/code&gt;. SVG first fits an ellipse to these parameters and then draws the arc.
&lt;ul&gt;
&lt;li&gt;If &lt;code&gt;rx&lt;/code&gt; and &lt;code&gt;ry&lt;/code&gt; of an arc is too small to connect the points, the SVG spec scales up &lt;code&gt;rx&lt;/code&gt; and &lt;code&gt;ry&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[large-arc-flag]=1&lt;/code&gt; literally uses the larger arc of the fitting ellipse. This is less common.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[sweep-flag]=1&lt;/code&gt; its the ellipse to make the connecting arc go clockwise. &lt;code&gt;0&lt;/code&gt; is anti-clockwise.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[rotation]&lt;/code&gt; is rarely used because we usually draw arcs and &lt;em&gt;then&lt;/em&gt; rotate them.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stroke-linejoin&lt;/code&gt; automatically flips from &lt;code&gt;miter&lt;/code&gt; (sharp) to &lt;code&gt;bevel&lt;/code&gt; (cut) if the sharp edge protrudes too long (e.g. small angles). Increasing &lt;code&gt;stroke-miterlimit&lt;/code&gt; increases the cutoff (default: 4)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⭐ Always include a thoughtful gallery of examples with tools / libraries. This does more than showing what a tool can do.
&lt;ul&gt;
&lt;li&gt;It&amp;rsquo;s use-case / domain transfer: showing &lt;strong&gt;what&lt;/strong&gt; it&amp;rsquo;s useful for in real life - opening ideas, suggesting workflows.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s style transfer: showing &lt;strong&gt;how&lt;/strong&gt; to use it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⭐ Here&amp;rsquo;s what expert AI coders increasingly focus on. &lt;a href=&#34;https://ashtom.github.io/developers-reinvented&#34;&gt;Thomas Dohmke&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Delegation: context engineering agents for success; parallelizing.&lt;/li&gt;
&lt;li&gt;Verification: efficiently reviewing and testing code/output; setting stop-points.&lt;/li&gt;
&lt;li&gt;Expanding scope: instead of time saved as the metric.&lt;/li&gt;
&lt;li&gt;Education: teaching AI-based coding, debugging, reviewing/testing.&lt;/li&gt;
&lt;li&gt;Product management: combining requirements + UI design + architecture + engineering + deployment.&lt;/li&gt;
&lt;li&gt;Cross-discipline: blending code with design, governance, finance, marketing, &amp;hellip; (&amp;ldquo;computational creators&amp;rdquo;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Notes from Taylor&amp;rsquo;s &lt;a href=&#34;https://heytaylor.dev/posts/202510052056_how-i-m-using-coding-agents-october-2025/&#34;&gt;How I&amp;rsquo;m using coding agents: October 2025&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Left monitor: 2-4 desktops (e.g. work, side-project). Right monitor: things I always want available&lt;/li&gt;
&lt;li&gt;Plan next task while first executes.&lt;/li&gt;
&lt;li&gt;Use plan mode to write to a plan file.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t start big tasks if you have meetings scheduled soon.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Recent open source package hack methods seem to work more because of people/process than systems (&lt;a href=&#34;https://words.filippo.io/compromise-survey/&#34;&gt;Filippo&lt;/a&gt;):
&lt;ol&gt;
&lt;li&gt;Phishing the author&lt;/li&gt;
&lt;li&gt;Pull requests running unsafe code in CI&lt;/li&gt;
&lt;li&gt;Taking over expired domain / user ID&lt;/li&gt;
&lt;li&gt;Stealing long-lived tokens&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv run --python 3.14 --isolated --with-editable &#39;.[test]&#39; pytest&lt;/code&gt; runs pytest on a local project with a specific Python version. &lt;a href=&#34;https://til.simonwillison.net/python/uv-tests&#34;&gt;Simon Willison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Notes from the &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit&#34;&gt;State of AI Report 2025&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;Reasoning models are more fragile. Irrelevant phrases make reasoning models spend &lt;em&gt;FAR&lt;/em&gt; more tokens and get wrong answers &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g36532dfa542_1_5&#34;&gt;#21&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AI systems are able to teach experts new concepts &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g38724ed57c0_1_0#slide=id.g38724ed57c0_1_0&#34;&gt;#41&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;An environment providing feedback / rewards enables continuous learning &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g379a362bd85_0_132#slide=id.g379a362bd85_0_132&#34;&gt;#52&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;E.g. Multi-robot chemical labs at U.Liverpool and NCSU &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g37cf129d69d_2_44#slide=id.g37cf129d69d_2_44&#34;&gt;#60&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;RLHF has a fundamental flaw: humans reward sycophancy &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g34531ae1448_0_79#slide=id.g34531ae1448_0_79&#34;&gt;#71&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;We can read what people are typing from brain signals outside the skull &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g377f1927a71_0_0#slide=id.g377f1927a71_0_0&#34;&gt;#73&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Model intelligence-to-price ratio doubles every ~6 months &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g38918b607ca_0_426#slide=id.g38918b607ca_0_426&#34;&gt;#94&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The AI companies&amp;rsquo; valuations are also roughly doubling every ~6 months &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g38918b607ca_0_750#slide=id.g38918b607ca_0_750&#34;&gt;#181&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenAI is offering Governments giga-watt campuses to run OpenAI models for citizens &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g38918b607ca_0_199#slide=id.g38918b607ca_0_199&#34;&gt;#122&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A 1GW clusters costs $50bn capex and $11bn per annum &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g3668e08c71a_0_66#slide=id.g3668e08c71a_0_66&#34;&gt;#130&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;China has added ~10X the energy capacity as the US in 2024 &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g34898aa15b3_0_0#slide=id.g34898aa15b3_0_0&#34;&gt;#146&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;NVIDIA challengers are still far away &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g3747fb01779_1_100#slide=id.g3747fb01779_1_100&#34;&gt;#161&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;LLMs can &amp;ldquo;read between the lines&amp;rdquo; even if training data is censored &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g38409c5a29e_1_1097#slide=id.g38409c5a29e_1_1097&#34;&gt;#268&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;LLMs can pass information via hidden signals &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g379453733bb_0_59#slide=id.g379453733bb_0_59&#34;&gt;#270&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Prediction: A major retailer reports &amp;gt;5% of online sales from agentic checkout. AI agent advertising spend hits $5B. &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g38918b607ca_4_400#slide=id.g38918b607ca_4_400&#34;&gt;#304&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cdn.openai.com/pdf/ae250928-4029-4f26-9e23-afac1fcee14c/staying-ahead-in-the-age-of-ai.pdf&#34;&gt;OpenAI&amp;rsquo;s leadership guide&lt;/a&gt; says:
&lt;ul&gt;
&lt;li&gt;Align
&lt;ul&gt;
&lt;li&gt;Explain &lt;strong&gt;WHY&lt;/strong&gt; AI thoughtfully.&lt;/li&gt;
&lt;li&gt;Set a goal, e.g. everyone uses ChatGPT 20 times/day (Moderna).&lt;/li&gt;
&lt;li&gt;Use it yourself. Show how.&lt;/li&gt;
&lt;li&gt;Have &lt;strong&gt;business&lt;/strong&gt; leaders run AI sessions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Activate
&lt;ul&gt;
&lt;li&gt;Launch an AI skills proram&lt;/li&gt;
&lt;li&gt;Set up an AI champions network&lt;/li&gt;
&lt;li&gt;Encourage experimentation (dedicated time, workshops, hackathons, &amp;hellip;)&lt;/li&gt;
&lt;li&gt;Link to performance evaluations&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Amplify
&lt;ul&gt;
&lt;li&gt;Create an AI knowledge base&lt;/li&gt;
&lt;li&gt;Share success stories (weekly)&lt;/li&gt;
&lt;li&gt;Create internal groups (Teams, Slack, &amp;hellip;)&lt;/li&gt;
&lt;li&gt;Celebrate AI wins&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Accelerate
&lt;ul&gt;
&lt;li&gt;Unblock AI tools and data access&lt;/li&gt;
&lt;li&gt;Simplify project selection. Quick feedback, clear priorities&lt;/li&gt;
&lt;li&gt;Unblock projects with a cross-functional council&lt;/li&gt;
&lt;li&gt;Give resources to successful teams&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Govern
&lt;ul&gt;
&lt;li&gt;Publish a responsible AI playbook (what&amp;rsquo;s safe to try)&lt;/li&gt;
&lt;li&gt;Audit AI practices quarterly&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title></title>
      <link>https://www.s-anand.net/blog/powerpoint-can-do-anything/</link>
      <pubDate>Fri, 23 Apr 2021 16:12:55 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/powerpoint-can-do-anything/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve a theory. PowerPoint can do anything. (Excel too).&lt;/p&gt;
&lt;p&gt;Shape operations are especially powerful. In this tutorial, I create an address card icon and export it as SVG.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t need Sketch / Illustrator for this. They&amp;rsquo;re great. But no, thanks. I&amp;rsquo;m pretty good with PowerPoint 😄&lt;/p&gt;
&lt;p&gt;Have you seen PowerPoint do anything that made you go &amp;ldquo;Wow! This is cool!&amp;rdquo;? Do share. I&amp;rsquo;d love to hear about it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.s-anand.net/blog/designing-complex-shapes-in-powerpoint/&#34;&gt;http://www.s-anand.net/blog/designing-complex-shapes-in-powerpoint/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/feed/update/urn%3Ali%3Ashare%3A6791393446859952129&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Designing Complex Shapes in PowerPoint</title>
      <link>https://www.s-anand.net/blog/designing-complex-shapes-in-powerpoint/</link>
      <pubDate>Sun, 18 Apr 2021 04:26:11 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/designing-complex-shapes-in-powerpoint/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Designing Complex Shapes in PowerPoint&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/image-28.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;I use PowerPoint instead of Adobe Illustrator or Sketch. I&amp;rsquo;m familiar with it, and it does everything I need.&lt;/p&gt;
&lt;p&gt;One of the features I&amp;rsquo;m really excited by in PowerPoint is the ability to manipulate shapes.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/image-19.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s say you have a rectangle and a circle. You can select both of these shapes and in the Shape Format &amp;gt; Merge Shapes dropdown, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;merge them with a &lt;strong&gt;union&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;combine&lt;/strong&gt; them (like an XOR operation in Boolean algebra)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fragment&lt;/strong&gt; them, which breaks them up into pieces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;intersect&lt;/strong&gt; them&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;subtract&lt;/strong&gt; them&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is so powerful that you can create any kind of shape. Let&amp;rsquo;s take an icon from &lt;a href=&#34;https://fontawesome.com/&#34;&gt;Font Awesome&lt;/a&gt; at random &amp;ndash; say an &lt;a href=&#34;https://fontawesome.com/icons/address-card&#34;&gt;address card&lt;/a&gt; &amp;ndash; and create it.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/image-21.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the video of the process. I&amp;rsquo;ll explain it step-by-step below.&lt;/p&gt;
&lt;div class=&#34;video-embed&#34;&gt;&lt;iframe src=&#34;https://www.youtube.com/embed/Kwa0N5M-3ag&#34; title=&#34;YouTube video&#34; loading=&#34;lazy&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;First, let&amp;rsquo;s take a screenshot of this and copy it into PowerPoint.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/image-23.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s draw over this. So we&amp;rsquo;ll start with a rounded rectangular box with the same color as the address card. We can use the &lt;a href=&#34;https://support.microsoft.com/en-us/office/use-eyedropper-to-match-colors-on-your-slide-d5e7a32a-da6c-4bed-9f1e-8797f07174e9&#34;&gt;eyedropper&lt;/a&gt; to pick the right color. Remove the outline. Then match the edges as closely as you can. (Add a bit of transparency so you can see through it &amp;ndash; that helps match edges closely.)&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/image-24.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;Move this card boundary to a new page.&lt;/p&gt;
&lt;p&gt;Now, on top of the original image we copy-pasted from Font Awesome, trace 3 rounded rectangles for the address lines. Trace a circle over the head. Fill them white. Remove the outline. It should look like these.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/image-28.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;Next, let&amp;rsquo;s create the body. We&amp;rsquo;ll create a rounded rectangle that matches the bottom half of the body, another that matches the top half of the body, and intersect them, like this:&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/ppt-shapes-bust.gif&#34;&gt;&lt;/p&gt;
&lt;p&gt;Then, draw a large circle around the head and subtract it from the body, like this:&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/ppt-shapes-neck.gif&#34;&gt;&lt;/p&gt;
&lt;p&gt;Finally, copy all these shapes over the card boundary on the next page. Select the card boundary first. Then select these copied shapes (3 address lines, head, and bust). Select Shape Format &amp;gt; Merge Shapes &amp;gt; Subtract.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/ppt-shapes-address-card.gif&#34;&gt;&lt;/p&gt;
&lt;p&gt;With that, we have a single shape that contains the entire address card. The white areas are transparent.&lt;/p&gt;
&lt;p&gt;You can download the Merge-Shapes.pptx file below with each of the steps.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://files.s-anand.net/images/Merge-Shapes.pptx&#34;&gt;Merge-Shapes&lt;/a&gt; (Download)&lt;/p&gt;
&lt;p&gt;Like I said, I don&amp;rsquo;t bother with Adobe Illustrator or Sketch. PowerPoint does it all for me 😊.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Create SVG with PowerPoint</title>
      <link>https://www.s-anand.net/blog/create-svg-with-powerpoint/</link>
      <pubDate>Mon, 21 Dec 2020 16:24:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/create-svg-with-powerpoint/</guid>
      <description>&lt;p&gt;With Office 365, &lt;a href=&#34;https://support.microsoft.com/en-us/office/edit-svg-images-in-microsoft-office-365-69f29d39-194a-4072-8c35-dbe5e7ea528c&#34;&gt;PowerPoint supports SVG editing&lt;/a&gt;. This is really powerful. It means you can draw in PowerPoint and render it on the web &amp;ndash; including as interactive or animated visuals.&lt;/p&gt;
&lt;p&gt;For example, the SVG in this &lt;a href=&#34;https://gramener.com/processmonitor/simulator&#34;&gt;simulator&lt;/a&gt; was created just with PowerPoint.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gramener.com/processmonitor/simulator&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/proxy.gif&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The process is simple. Draw anything. Select any shapes and right-click. Select Save As Picture&amp;hellip; and choose SVG.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/image-6.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;For example, you can use PowerPoint to create Smart Art, export it as SVG, and embed it into a page. See this example on &lt;a href=&#34;https://codepen.io/sanand0/pen/poEwYYy&#34;&gt;CodePen&lt;/a&gt;.&lt;/p&gt;
&lt;iframe allowfullscreen=&#34;true&#34; allowtransparency=&#34;true&#34; frameborder=&#34;no&#34; height=&#34;480&#34; loading=&#34;lazy&#34; scrolling=&#34;no&#34; src=&#34;https://codepen.io/sanand0/embed/poEwYYy?height=480&amp;amp;theme-id=light&amp;amp;default-tab=result&#34; style=&#34;width: 100%;&#34; title=&#34;Smart Art SVG&#34;&gt;
  See the Pen &lt;a href=&#34;https://codepen.io/sanand0/pen/poEwYYy&#34;&gt;Smart Art SVG&lt;/a&gt; by S Anand
  (&lt;a href=&#34;https://codepen.io/sanand0&#34;&gt;@sanand0&lt;/a&gt;) on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.
&lt;/iframe&gt;
&lt;p&gt;The SVG is fairly well structured and easy to edit. The code generated for these 2 simple shapes:&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/image-png-8.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;&amp;hellip; is quite straight-forward &amp;ndash; just two SVG shapes.&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-svg&#34; data-lang=&#34;svg&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;rect&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;x=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;125.5&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;y=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;185.5&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;width=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;107&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;height=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;107&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;stroke=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#2F528F&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;stroke-width=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;1.33333&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;stroke-miterlimit=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;8&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;fill=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#4472C4&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;path&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;d=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;M243.5 292.5 297 185.5 350.5 292.5Z&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;stroke=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#2F528F&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;stroke-width=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;1.33333&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;stroke-miterlimit=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;8&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;fill=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#4472C4&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;fill-rule=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;evenodd&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I was worried about the lack of SVG authoring tools in Windows. (InkScape is not usable, and Adobe&amp;rsquo;s tools are complex and expensive.) PowerPoint fits perfectly.&lt;/p&gt;
&lt;div class=&#34;video-embed&#34;&gt;&lt;iframe src=&#34;https://www.youtube.com/embed/5ndouHSYGxA&#34; title=&#34;YouTube video&#34; loading=&#34;lazy&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
</description>
    </item>
    <item>
      <title>India district map</title>
      <link>https://www.s-anand.net/blog/india-district-map/</link>
      <pubDate>Thu, 21 Jul 2011 16:50:33 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/india-district-map/</guid>
      <description>&lt;p&gt;I put together a &lt;a href=&#34;https://bitbucket.org/sanand0/districts/src/tip/districts.svg&#34;&gt;district map of India in SVG&lt;/a&gt; this weekend.&lt;/p&gt;
&lt;h3 id=&#34;so-what&#34;&gt;So what?&lt;/h3&gt;
&lt;p&gt;You can now plot data available at a district level on a map, like the temperature in India over the last century (via &lt;a href=&#34;http://www.indiawaterportal.org/met_data/&#34;&gt;IndiaWaterPortal&lt;/a&gt;). The rows are years (1901, 1911, … 2001) and the columns are months (Jan, Feb, … Dec). Red is hot, green is cold.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/temperature.webp&#34;&gt;&lt;img alt=&#34;temperature&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/temperature.webp&#34; title=&#34;temperature&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(Yeah, the west coast is a great place to live in, but I probably need to look into the rainfall.)&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bitbucket.org/sanand0/districts/src/tip/districts.svg&#34;&gt;districts.svg&lt;/a&gt; has has 640 districts (I’ve no idea what &lt;a href=&#34;http://en.wikipedia.org/wiki/Chhatrapati_Shahuji_Maharaj_Nagar_district&#34;&gt;the 641st&lt;/a&gt; looks like) and is tagged with the State and District names as titles:&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-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;g&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;title=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Madhya Pradesh&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;path&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;title=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Alirajpur&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;d=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;path&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;title=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Jhabua&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;d=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ...
&lt;/span&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;&amp;lt;/g&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;how&#34;&gt;How?&lt;/h3&gt;
&lt;p&gt;I made it from the &lt;a href=&#34;http://www.censusindia.gov.in/2011census/maps/maps2011.html&#34;&gt;2011 census&lt;/a&gt; &lt;a href=&#34;http://www.censusindia.gov.in/2011census/maps/administrative_maps/INDIA2011.pdf&#34;&gt;map&lt;/a&gt; (0.4MB PDF). I opened it in &lt;a href=&#34;http://inkscape.org/&#34;&gt;Inkscape&lt;/a&gt;, removed the labels, added a layer for the districts, and used the &lt;a href=&#34;http://wiki.inkscape.org/wiki/index.php/ReleaseNotes046#Paint_Bucket_tool&#34;&gt;paint bucket&lt;/a&gt; to fill each district’s area. I then saved the districts layer, cleaning it up a big. Then I labelled each district with a title. (Seemed like the easiest way to get this done.)&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&#34;https://twitter.com/planemad&#34;&gt;@planemad&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/gkjohn&#34;&gt;@gkjohn&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/arjunram&#34;&gt;@arjunram&lt;/a&gt; for inputs. Play around. Feedback welcome.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;comments&#34;&gt;Comments&lt;/h2&gt;
&lt;!-- wp-comments-start --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;http://thejeshgn.com&#34;&gt;Thejesh GN&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;22 Jul 2011 9:27 am&lt;/em&gt;:
Thanks for the map. Very useful.
Btw you can cname map your bitbucket account. Its free.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;http://www.s-anand.net/&#34;&gt;S Anand&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;23 Jul 2011 9:39 am&lt;/em&gt;:
@Thej &amp;ndash; AHA! Didn&amp;rsquo;t know about the CNAMEing bitbucket. Thanks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rishi&lt;/strong&gt; &lt;em&gt;23 Jul 2011 9:15 am&lt;/em&gt;:
Wonderful stuff Anand!!!
I would say - upload this on Wikipedia - but then we would have several flamewars with our dear neighbours on the borders shown.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;http://tuxcoder.wordpress.com&#34;&gt;Arulalan.T&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;29 Dec 2011 10:17 am&lt;/em&gt;:
Thanks a lot for the India District Map in pdf and svg. From this post I got few ideas to generate shape (shp) files. I edited the India map in CDAT [1] shape files by generate the lat,lon points by hand itself [2]. I want to develop the India district shape file by automatic.
Your project and code lights in my way.
Thanks a lot.
[1] &lt;a href=&#34;http://www2-pcmdi.llnl.gov/cdat&#34;&gt;http://www2-pcmdi.llnl.gov/cdat&lt;/a&gt;
[2] &lt;a href=&#34;http://tuxworld.wordpress.com/2010/02/13/how-to-edit-world-map-in-cdat-documentation/&#34;&gt;http://tuxworld.wordpress.com/2010/02/13/how-to-edit-world-map-in-cdat-documentation/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dibyo&lt;/strong&gt; &lt;em&gt;11 Aug 2011 4:29 am&lt;/em&gt;:
Awesome - I&amp;rsquo;ve struggled with this for a while now.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Minh&lt;/strong&gt; &lt;em&gt;12 Dec 2012 8:11 pm&lt;/em&gt;:
Thanks a lot. Do you have the shapefiles for your svg data? I could not find the new district level (2011 census) anywhere? Can you share with me?
Many thanks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mahir&lt;/strong&gt; &lt;em&gt;19 Dec 2012 6:11 am&lt;/em&gt;:
Dear Anand,
Great work. I have made a tool to translate these location names using wikipedia&amp;rsquo;s toolserver. people can translate these svg maps from &lt;a href=&#34;http://toolserver.org/~mahir/&#34;&gt;http://toolserver.org/~mahir/&lt;/a&gt;
I have successfully translated India political map from english to tamil for tamil wikipedia.
&lt;a href=&#34;http://ta.wikipedia.org/wiki/&#34;&gt;http://ta.wikipedia.org/wiki/&lt;/a&gt;படிமம்:Ta_India_National_Highway_17.png
Please try once.
thanks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arijit Upadhyay&lt;/strong&gt; &lt;em&gt;26 Dec 2013 3:37 am&lt;/em&gt;:
Some district names have changed since you posted this. Do you have an update for this map. Or how to edit them. Linkscape destroys the XML tags.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prakash&lt;/strong&gt; &lt;em&gt;18 Jan 2014 10:43 am&lt;/em&gt;:
Dear Friend would it be possible to get shp and dbf file of indian state with undivided bihar, up and mp.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- wp-comments-end --&gt;
</description>
    </item>
    <item>
      <title>Visualising student performance 2</title>
      <link>https://www.s-anand.net/blog/visualising-student-performance-2/</link>
      <pubDate>Mon, 03 Jan 2011 16:02:49 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/visualising-student-performance-2/</guid>
      <description>&lt;p&gt;This &lt;a href=&#34;https://www.s-anand.net/blog/visualising-student-performance/&#34;&gt;earlier visualisation&lt;/a&gt; was revised based feedback from teachers. It’s split into two parts: one focused on performance by subject, and another on performance of each student.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Students’ performance by subject&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/visualisationsubject.webp&#34;&gt;&lt;img alt=&#34;Visualisation by subject&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/visualisationsubject.webp&#34; title=&#34;Visualisation by subject&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is fairly simple. Under each subject, we have a list of students, sorted by marks and grouped by grade. The primary use of this is to identify top performers and bottom performers at a glance. It also gives an indication of the grade distribution.&lt;/p&gt;
&lt;p&gt;For example, here’s mathematics.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/visualisationsubject1.webp&#34;&gt;&lt;img alt=&#34;Student scores in a subject&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/visualisationsubject1.webp&#34; title=&#34;Student scores in a subject&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Grades are colour-coded intuitively, like rainbow colours. Violet is high, Red is low.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/visualisationgrades.webp&#34;&gt;&lt;img alt=&#34;Colour coding of grades&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/visualisationgrades.webp&#34; title=&#34;Colour coding of grades&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The little graphs on the left show the performance in individual exams, and can be used to identify trends. For example, from the graph to the left of Karen’s score:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/visualisationstudent1.webp&#34;&gt;&lt;img alt=&#34;A single student&amp;rsquo;s score&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/visualisationstudent1.webp&#34; title=&#34;A single student&amp;#39;s score&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;… you can see that she’d have been an A1 student (the first two bars are coloured A1) but for the dip in the last exam (which is coloured A2).&lt;/p&gt;
&lt;p&gt;Finally, there’s a histogram showing the grades within the subject.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/visualisationsubjecthistogram.webp&#34;&gt;&lt;img alt=&#34;Histogram of grades&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/visualisationsubjecthistogram.webp&#34; title=&#34;Histogram of grades&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Incidentally, while the names are fictitious, the data is not. This graph shows a &lt;a href=&#34;http://en.wikipedia.org/wiki/Bimodal_distribution&#34;&gt;bimodal distribution&lt;/a&gt; and &lt;a href=&#34;http://www.americanrhetoric.com/speeches/richardquinnucfcheatinglecture.htm&#34;&gt;may indicate cheating&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Students’ performance&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/visualisationstudent.webp&#34;&gt;&lt;img alt=&#34;Visualisation by student&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/visualisationstudent.webp&#34; title=&#34;Visualisation by student&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is useful when you want to take a closer look at a single student. On the left are the total scores across subjects.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/visualisationtotalscores.webp&#34;&gt;&lt;img alt=&#34;Visualisation of total scores&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/visualisationtotalscores.webp&#34; title=&#34;Visualisation of total scores&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Because of the colour coding, it’s easy to get a visual sense of a performance across subjects. For example, in the first row, Kristina is having some trouble with Mathematics. And on the last row, Elsie is doing quite well.&lt;/p&gt;
&lt;p&gt;To give a better sense of the performance, the next visualisation plots the relative performance of each student.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/visualisationrelativeperformance.webp&#34;&gt;&lt;img alt=&#34;Visualisation of relative performance&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/visualisationrelativeperformance.webp&#34; title=&#34;Visualisation of relative performance&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;From this, it’s easy to see that Kristina is the the bottom quarter of the class in English and Science, and isn’t doing to well in Mathematics either. Gretchen and Elsie, on the other hand, are consistently doing well. Patrick may need some help with Mathematics as well. (Incidentally, the colours have no meaning. They just make it overlaps less confusing.)&lt;/p&gt;
&lt;p&gt;Next to that is the break-up of each subject’s score.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/visualisationscorebreakup.webp&#34;&gt;&lt;img alt=&#34;Visualisation of score break-up&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/visualisationscorebreakup.webp&#34; title=&#34;Visualisation of score break-up&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The first number in each subject is the total score. The colour indicates the grade. The graph next to it, as before, is the trend in marks across exams. The same scores are shown alongside as numbers inside circles. The colour of the circle is the grade for that exam.&lt;/p&gt;
&lt;p&gt;In some ways, this visualisation is less information-dense than the &lt;a href=&#34;https://www.s-anand.net/blog/visualising-student-performance/&#34;&gt;earlier visualisation&lt;/a&gt;. But this is intentional. Redundancy can help with speed of interpretation, and a reduced information density is also less intimidating to first-time readers.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;comments&#34;&gt;Comments&lt;/h2&gt;
&lt;!-- wp-comments-start --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Venkatesh&lt;/strong&gt; &lt;em&gt;19 Jan 2011 5:56 pm&lt;/em&gt;:
Anand,
I was searching for BCG and landed on your blog, retraced and landed up in this page. I currently work for an AID India (&lt;a href=&#34;https://www.aidindia.in&#34;&gt;www.aidindia.in&lt;/a&gt;) in TN. The above gui/code looks extremely useful for a particular initiative we have taken up recently. If you are okay with it, i would drop in a mail explaining the exact idea. If you are up for it, then lets take it from there&amp;hellip;
Thanks.
Venkatesh Krishnamoorthy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;http://blizzardzblogs.blogspot.com/&#34;&gt;V&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;4 Jan 2011 1:12 pm&lt;/em&gt;:
Is this something that you plan to release in the open source?
Also, just curious : how did you generate the chart?Protovis?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;http://www.s-anand.net/&#34;&gt;S Anand&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;9 Jan 2011 10:12 am&lt;/em&gt;:
Just SVG and Python, actually. The code is at &lt;a href=&#34;http://github.com/sanand0/reportbee-dashboard&#34;&gt;http://github.com/sanand0/reportbee-dashboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;http://blizzardzblogs.blogspot.com/&#34;&gt;V&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;9 Jan 2011 11:43 am&lt;/em&gt;:
SVG is neat, but i have offlate fallen in love with protovis. Check it out.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- wp-comments-end --&gt;
</description>
    </item>
    <item>
      <title>Visualising student performance</title>
      <link>https://www.s-anand.net/blog/visualising-student-performance/</link>
      <pubDate>Mon, 13 Dec 2010 11:51:34 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/visualising-student-performance/</guid>
      <description>&lt;p&gt;I’ve been helping with visualising student scores for &lt;a href=&#34;http://www.reportbee.com/&#34;&gt;ReportBee&lt;/a&gt;, and here’s what we’ve currently come up with.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/classscores.webp&#34;&gt;&lt;img alt=&#34;class-scores&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/classscores.webp&#34; title=&#34;class-scores&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Each row is a student’s performance across subjects. Let’s walk through each element here.&lt;/p&gt;
&lt;p&gt;The first column shows their relative performance across different subjects. Each dot is their rank in a subject. The dots are colour coded based on the subject (and you can see the colours on the image at the top: English is black, Mathematics is dark blue, etc.)&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/classscores2.webp&#34;&gt;&lt;img alt=&#34;class-scores-2&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/classscores2.webp&#34; title=&#34;class-scores-2&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The grey boxes in the middle shows the quartiles. A dot on the left side means that the student is in the bottom quartile. Student 30 is in the bottom quartile in almost every subject. The grey boxes indicate the 2nd and 3rd quartiles. Dots on the right indicate the top quartile.&lt;/p&gt;
&lt;p&gt;This view lets teachers quickly explain how a student is performing – either to the headmistress, or parents, or the student. There is a big difference between a consistently good performer, a consistently poor performer, and one that is very good in some subjects, very poor in others. This view lets the teachers identify which type the student falls under.&lt;/p&gt;
&lt;p&gt;For example, student 29 is doing very well in a few subjects, OK is some, but is very bad at computer science. This is clearly an intelligent student, so perhaps a different teaching method might help with computer science. Student 30 is doing badly in almost every subject. So the problem is not subject-specific – it is more general (perhaps motivation, home atmosphere, ability, etc.) Student 31 is consistently in the middle, but above average.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/classscores3.webp&#34;&gt;&lt;img alt=&#34;class-scores-3&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/classscores3.webp&#34; title=&#34;class-scores-3&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The bars in the middle show a more detailed view, using the students’ marks. The zoomed view above shows the English, Mathematics and Social Science marks for the same 3 students (29, 30, 31). The grey boxes have the same meaning. Anyone to the right of those is in the top quarter. Anyone to the left is in the bottom quarter.&lt;/p&gt;
&lt;p&gt;Some of bars have a red or a green circle at the end&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/classscores5.webp&#34;&gt;&lt;img alt=&#34;class-scores-5&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/classscores5.webp&#34; title=&#34;class-scores-5&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The green circle indicates that the student has a top score in the subject. The red circle indicates that the student has a bottom score in the subject. This lets teachers quickly narrow down to the best and worst performers in each subject.&lt;/p&gt;
&lt;p&gt;The bars on top of the subjects show the histogram of students’ performances. It is a useful view to get a sense of the spread of marks.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/assets/classscores4.webp&#34;&gt;&lt;img alt=&#34;class-scores-4&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/classscores4.webp&#34; title=&#34;class-scores-4&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For example, English is significantly biased towards the top half than Mathematics or Science. Mathematics has main “trailing” students at the bottom, while English has fewer, and Social Science has many more.&lt;/p&gt;
&lt;p&gt;Most of this explanation is intuitive, really. Once explained (and often, even when not explained), they are easy to remember and apply.&lt;/p&gt;
&lt;p&gt;So far, this visualisation answers descriptive questions, like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Where does this student stand with respect to the class?&lt;/li&gt;
&lt;li&gt;Is this student a consistent performer, or does his performance vary a lot?&lt;/li&gt;
&lt;li&gt;Does this subject have a consistent performance, or does it vary a lot?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’re now working on drawing insights from this data. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is there a difference between the performance across sections?&lt;/li&gt;
&lt;li&gt;Do students who perform well in science also do well in mathematics?&lt;/li&gt;
&lt;li&gt;Can we group students into “types” or clusters based on their performances?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Will share those shortly.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;comments&#34;&gt;Comments&lt;/h2&gt;
&lt;!-- wp-comments-start --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;http://nullpointers.wordpress.com&#34;&gt;Sathya&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;14 Dec 2010 5:36 am&lt;/em&gt;:
Very nice post as always !
I was wondering if the bars for the individual subject marks are needed.
I mean, the first columns provides this information ( implicitly though).
Perhaps a Ruler beneath ( from 0 to 200 ) would help identify the individual score.
In an online interface, a tooltip on the dots would suffice. A Ruler may help in the printable version.
The advantage is that the report would look less cluttered.
May be distinction of subjects etc based on shapes (colors cans till be retained) would make it accessible for color blinded persons.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shankar V&lt;/strong&gt; &lt;em&gt;14 Dec 2010 5:21 am&lt;/em&gt;:
Interesting visual representation of performance.
On the same count, is it possible to visually represent a class performance in different subjects and see how a teacher can positively or negatively influence performance? If the class does significantly worse/better in one specific subject, maybe the teacher or the syllabus is to blame.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;V&lt;/strong&gt; &lt;em&gt;13 Dec 2010 12:47 pm&lt;/em&gt;:
Interesting. Liked the way Red and Blue dots are shown on the mark line to denote the top/bottom marks.
How did you create the leftmost-dots(relative perf across subjects) - I mean, which tool?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;http://www.s-anand.net/&#34;&gt;S Anand&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;13 Dec 2010 1:45 pm&lt;/em&gt;:
The workflow is CSV -&amp;gt; Python -&amp;gt; SVG -&amp;gt; PDF. The CSV file contains scores. I use a simple templating system (like Tornado/Django/Jinja2) to create the visualisation in SVG. Those dots are circles in SVG. This is converted into PDF using wkhtmltopdf (thanks to &lt;a href=&#34;http://manu-j.com&#34;&gt;http://manu-j.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;http://blizzardzblogs.blogspot.com/&#34;&gt;V&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;14 Dec 2010 2:45 pm&lt;/em&gt;:
Ok. Thanks. a small nit : Readability is affected with the dots on the left - the one which show the percentiles; though this is a nice representation otherwise.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;http://www.s-anand.net/&#34;&gt;S Anand&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;14 Dec 2010 5:21 pm&lt;/em&gt;:
@Shankar &amp;ndash; we&amp;rsquo;re trying to do that by comparing performance across sections. Will post what we come up with next week.
@Sathya &amp;ndash; excellent point. I now suspect I put it in only to fill the space in a visually appealing way. There are other ways of compactly representing the marks, including the ruler you mentioned. Will check with some teachers for feedback.
@V, did you mean because the dots overlapped each other? Or made it less easy to read horizontally? Or something else?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;http://www.thedatarevolution.com&#34;&gt;Dan Murray&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;22 Dec 2010 6:21 pm&lt;/em&gt;:
Very interesting use of Sparklines. I find myself wanting to build two separate sets of visualizations for this data. I find myself wanting to create an individual student dashboard with overall score and then the separate subject scores with additional details being made available via pop-ups.
Nice work though.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sanketh&lt;/strong&gt; &lt;em&gt;23 Dec 2010 10:46 pm&lt;/em&gt;:
Nice job! The histograms at the top are a nice addition to judge whether the class grading is biased to one side. I agree with @Sathya that the data in the middle is kind of unnecessarily dominant. I am guessing there is some cute way to combine the bars with an additional dimension (hue, tinge) to add the percentile data to the bars themselves and show all subject data together, but I can&amp;rsquo;t think of anything concrete right now.
Keep up the awesome posts!&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- wp-comments-end --&gt;
</description>
    </item>
  </channel>
</rss>
