PageSourceSearch

https://www.swaroopch.com/

html swaroopch.com collected 2026-09-24 08:37:12 UTC 21,001 bytes, 52 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3	<head>
4		<meta charset="utf-8">
5		<title>SwaroopCH.com</title>
6		<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
7		<meta name="description" content="Exploring books, mental models, travel, software engineering (craft, career, open source, side projects), ML & Generative AI.">
8		
9		<meta name="twitter:card" content="summary_large_image">
10		<meta name="twitter:title" content="SwaroopCH.com">
11		<meta name="twitter:description" content="Exploring books, mental models, travel, software engineering (craft, career, open source, side projects), ML & Generative AI.">
12		<meta name="twitter:url" content="https://www.swaroopch.com/SwaroopCH-com-11b0924249b1804e8171c5a52631dada">
13		<meta name="twitter:image" content="https://www.swaroopch.com/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbe942327-7867-4309-be80-04bafdd61d16%2F2e7e6b2a-db0c-48e9-ac2c-3348dc191fc2%2FSocialMediaPreviewImage.png?table=block&id=11b09242-49b1-804e-8171-c5a52631dada&spaceId=be942327-7867-4309-be80-04bafdd61d16&width=2000&userId=&cache=v2&imgBuildSrc=pageMetadataCover">
14		<meta property="og:site_name" content="commonplace book">
15		<meta property="og:type" content="article">
16		<meta property="og:url" content="https://www.swaroopch.com/SwaroopCH-com-11b0924249b1804e8171c5a52631dada">
17		<meta property="og:title" content="SwaroopCH.com">
18		<meta property="og:description" content="Exploring books, mental models, travel, softw
18are engineering (craft, career, open source, side projects), ML & Generative AI.">
19		<meta property="og:image" content="https://www.swaroopch.com/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbe942327-7867-4309-be80-04bafdd61d16%2F2e7e6b2a-db0c-48e9-ac2c-3348dc191fc2%2FSocialMediaPreviewImage.png?table=block&id=11b09242-49b1-804e-8171-c5a52631dada&spaceId=be942327-7867-4309-be80-04bafdd61d16&width=2000&userId=&cache=v2&imgBuildSrc=pageMetadataCover">
20		<meta property="og:locale" content="en_US">
21		<meta name="slack-app-id" content="A049JV0H0KC">
22		<link rel="shortcut icon" href="https://www.swaroopch.com/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fbe942327-7867-4309-be80-04bafdd61d16%2F823544bd-32aa-4951-bd85-623b5d939ad0%2Fae99295e-cbc1-408d-8d02-e5583f5d299f.png?table=block&id=11b09242-49b1-804e-8171-c5a52631dada&spaceId=be942327-7867-4309-be80-04bafdd61d16&width=2000&userId=&cache=v2&imgBuildSrc=pageMetadataIcon"/>
23		<link rel="canonical" href="https://www.swaroopch.com/SwaroopCH-com-11b0924249b1804e8171c5a52631dada" />
24		
25		<style> /* cspell:disable-file */ /* webkit printing magic: print all background colors */ html { -webkit-print-color-adjust: exact; } * { box-sizing: border-box; -webkit-print-color-adjust: exact; }  html, body { margin: 0; padding: 0; } @media only screen { body { margin: 2em auto; max-width: 900px; color: rgb(55, 53, 47); } }  body { line-height: 1.5; white-space: pre-wrap; }  a, a.visited { color: inherit; text-decoration: underline; }  .pdf-relative-link-path { font-size: 80%; color: #444; }  h1, h2, h3 { letter-spacing: -0.01em; line-height: 1.2; font-weight: 600; margin-bottom: 0; }  /* Override strong tags inside headings to maintain consistent weight */ h1 strong, h2 strong, h3 strong { font-weight: 600; }  .page-title { font-size: 2.5rem; font-weight: 700; margin-top: 0; margin-bottom: 0.75em; }  h1 { font-size: 1.875rem; margin-top: 1.875rem; }  h2 { font-size: 1.5rem; margin-top: 1.5rem; }  h3 { font-size: 1.25rem; margin-top: 1.25rem; }  .source { border: 1px solid #ddd; border-radius: 3px; padding: 1.5em; word-break: break-all; }  .callout { border-radius: 10px; padding: 1rem; /* Paint a complete callout box on every PDF page fragment. */ -webkit-box-decoration-break: clone; box-decoration-break: clone; }  /* For default-background callouts, render the border outline. */ .callout.block-color-default_background { border: 1px solid rgba(55, 53, 47, 0.09); }  figure { margin: 1.25em 0; page-break-inside: avoid; }  /*  * Toggles and callouts hold arbitrary content, so they can easily be taller  * than a page. They must stay breakable: avoiding breaks inside them makes  * Chromium push the whole block onto the next page, which leaves the previous  * page mostly empty before every long toggle.  */ details, aside { margin: 1.25em 0; }  /* Keep a toggle's title on the same page as the start of its content. */ summary { page-break-after: avoid; break-after: avoid; }  /*  * Toggle headings render as <h1/h2/h3 style="display:inline-block"> inside  * <summary>. Without this reset, the heading's margin-top pushes it below the  * ::marker (▼), so the triangle and the title appear on separate lines.  */ summary h1, summary h2, summary h3, summary h4 { margin-top: 0; }  figcaption { opacity: 0.5; font-size: 85%; margin-top: 0.5em; }  mark { background-color: transparent; }  .indented { padding-left: 1.5em; }  hr { background: transparent; display: block; width: 100%; height: 1px; visibility: visible; border: none; border-bottom: 1px solid rgba(55, 53, 47, 0.09); }  img { max-width: 100%; }  @media only print { img { max-height: 100vh; object-fit: contain; }  table.collection-content { width: 100%; table-layout: fixed; }  table.collection-content th, table.collection-content td { overflow-wrap: anywhere; }  table.collection-content td > .user, table.collection-content td > time { white-space: pre-wrap; } }  @page { margin: 1in; }  .collection-content-wrapper { overflow-x: auto; }  @media only print { .collection-content-wrapper { overflow-x: visible; } }  .collection-content { font-size: 0.875rem; }  .collection-content td { white-space: pre-wrap; word-break: break-word; }  .column-list { display: flex; gap: 46px; }  .column { min-width: 0; overflow: hidden; }  .column > *:first-child { margin-top: 0; }  .table_of_contents-item { display: block; font-size: 0.875rem; line-height: 1.3; padding-inline: 0.125rem; padding-block: 0.375rem; }  .table_of_contents-indent-1 { margin-left: 1.5rem; }  .table_of_contents-indent-2 { margin-left: 3rem; }  .table_of_contents-indent-3 { margin-left: 4.5rem; }  .table_of_contents-link { text-decoration: none; opacity: 0.7; border-bottom: 1px solid rgba(55, 53, 47, 0.18); }  table, th, td { border: 1px solid rgba(55, 53, 47, 0.09); }  table { border-collapse: collapse; border-left: none;
25 border-right: none; }  th, td { font-weight: normal; padding: 0.25em 0.5em; line-height: 1.5; min-height: 1.5em; text-align: left; }  th { color: rgba(55, 53, 47, 0.6); }  ol, ul { margin: 0; margin-block-start: 0.6em; margin-block-end: 0.6em; }  li > ol:first-child, li > ul:first-child { margin-block-start: 0.6em; }  ul > li { list-style: disc; }  ul.to-do-list { padding-inline-start: 0; }  ul.to-do-list > li { list-style: none; }  .to-do-children-checked { text-decoration: line-through; opacity: 0.375; }  ul.toggle > li { list-style: none; }  ul { padding-inline-start: 1.7em; }  ul > li { padding-left: 0.1em; }  ol { padding-inline-start: 1.6em; }  ol.numbered-list.numbered-list-digits-2 { padding-inline-start: 2em; }  ol.numbered-list.numbered-list-digits-3plus { padding-inline-start: 2.4em; }  ol > li { padding-left: 0.2em; }  .mono ol { padding-inline-start: 2em; }  .mono ol > li { text-indent: -0.4em; }  .toggle { padding-inline-start: 0em; list-style-type: none; }  /* Indent toggle children */ .toggle > li > details { padding-left: 1.7em; }  .toggle > li > details > summary { margin-left: -1.1em; }  .selected-value { display: inline-block; padding: 0 0.5em; background: rgba(206, 205, 202, 0.5); border-radius: 3px; margin-right: 0.5em; margin-top: 0.3em; margin-bottom: 0.3em; white-space: nowrap; }  .collection-title { display: inline-block; margin-right: 1em; }  .page-description { margin-bottom: 2em; }  .simple-table { margin-top: 1em; font-size: 0.875rem; empty-cells: show; } .simple-table td { height: 29px; min-width: 120px; }  .simple-table th { height: 29px; min-width: 120px; }  .simple-table-header-color { background: rgb(247, 246, 243); color: black; } .simple-table-header { font-weight: 500; }  time { opacity: 0.5; }  .icon { display: inline-flex; align-items: center; justify-content: center; max-width: 1.2em; max-height: 1.2em; text-decoration: none; vertical-align: text-bottom; margin-right: 0.5em; }  /*  * Render emoji icons using a ::before pseudo-element to keep the glyph  * out of the DOM textContent traversal. This avoids double-rendering icons  * in callouts and page titles.  * NOTE(slim/html-export-pseudo-icons): I can't tagref this because it will  * flag as a duplicate tag after codegen.  */ .icon[data-emoji]::before { content: attr(data-emoji); }  img.icon { border-radius: 3px; }  .callout img.notion-static-icon { width: 1em; height: 1em; }  .callout p { margin: 0; }  .callout h1, .callout h2, .callout h3 { margin: 0 0 0.6rem; }  .user-icon { width: 1.5em; height: 1.5em; border-radius: 100%; margin-right: 0.5rem; }  .user-icon-inner { font-size: 0.8em; }  .text-icon { border: 1px solid #000; text-align: center; }  .page-cover-image { display: block; object-fit: cover; width: 100%; max-height: 30vh; }  .page-header-icon { font-size: 3rem; margin-bottom: 1rem; }  .page-header-icon-with-cover { margin-top: -0.72em; margin-left: 0.07em; }  .page-header-icon img { border-radius: 3px; }  .link-to-page { margin: 1em 0; padding: 0; border: none; font-weight: 500; }  p > .user { opacity: 0.5; }  td > .user, td > time { white-space: nowrap; }  input[type="checkbox"] { margin-right: 0.4em; vertical-align: middle; }  p { margin-top: 0.5em; margin-bottom: 0.5em; }  .image { border: none; margin: 1.5em 0; padding: 0; border-radius: 0; text-align: center; }  .code, code { background: rgba(135, 131, 120, 0.15); border-radius: 3px; padding: 0.2em 0.4em; border-radius: 3px; font-size: 85%; tab-size: 2; }  code { color: #eb5757; }  .code { padding: 1.5em 1em; }  .code-wrap { white-space: pre-wrap; word-break: break-all; }  .code > code { background: none; padding: 0; font-size: 100%; color: inherit; }  blockquote { font-size: 1em; margin: 1em 0; padding-left: 1em; border-left: 3px solid rgb(55, 53, 47); }  blockquote.quote-large { font-size: 1.25em; }  .bookmark { text-decoration: none; max-height: 8em; padding: 0; display: flex; width: 100%; align-items: stretch; }  .bookmark-title { font-size: 0.85em; overflow: hidden; text-overflow: ellipsis; height: 1.75em; white-space: nowrap; }  .bookmark-text { display: flex; flex-direction: column; }  .bookmark-info { flex: 4 1 180px; padding: 12px 14px 14px; display: flex; flex-direction: column; justify-content: space-between; }  .bookmark-image { width: 33%; flex: 1 1 180px; display: block; position: relative; object-fit: cover; border-radius: 1px; }  .bookmark-description { color: rgba(55, 53, 47, 0.6); font-size: 0.75em; overflow: hidden; max-height: 4.5em; word-break: break-word; }  .bookmark-href { font-size: 0.75em; margin-top: 0.25em; }  .tab { margin: 1.25em 0; padding-inline: 1rem; border: 1px solid rgba(55, 53, 47, 0.09); }  .sans { font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI Variable Display", "Segoe UI", Helvetica, "Apple Color Emoji", "Noto Sans Arabic", "Noto Sans Hebrew", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; } .code { font-family: "SFMono-Regular", Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace; } .serif { font-family: Lyon-Text, Georgia, ui-serif, serif; } .mono { font-family: iawriter-mono, Nitti, Menlo, Courier, monospace; } .pdf .sans { font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI Variable Display", "Segoe UI", Helvetica, "Apple Color Emoji", "Noto Sans Arabic", "Noto Sans Hebrew", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol", 'Twemoji', 'Noto Color Emoji', 'Noto Sans CJK JP'; } .pdf:lang(zh-CN) .sans { font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI Variable Display", "Segoe UI", Helvetica, "Apple Color Emoji", "Noto Sans Arabic", "Noto Sans Hebrew", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol", 'Twemoji', 'Noto Color Emoji', 'Noto Sans CJK SC'; } .pdf:lang(zh-TW) .sans { font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI Variable Display", "Segoe UI", Helvetica, "Apple Color Emoji", "Noto Sans Arabic", "Noto Sans Hebrew", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol", 'Twemoji', 'Noto Color Emoji', 'Noto Sans CJK TC'; } .pdf:lang(ko-KR) .sans { font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI Variable Display", "Segoe UI", Helvetica, "Apple Color Emoji", "Noto Sans Arabic", "Noto Sans Hebrew", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol", 'Twemoji', 'Noto Color Emoji', 'Noto Sans CJK KR'; } .pdf .code { font-family: Source Code Pro, "SFMono-Regular", Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace, 'Twemoji', 'Noto Color Emoji', 'Noto Sans Mono CJK JP'; } .pdf:lang(zh-CN) .code { font-family: Source Code Pro, "SFMono-Regular", Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace, 'Twemoji', 'Noto Color Emoji', 'Noto Sans Mono CJK SC'; } .pdf:lang(zh-TW) .code { font-family: Source Code Pro, "SFMono-Regular", Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace, 'Twemoji', 'Noto Color Emoji', 'Noto Sans Mono CJK TC'; } .pdf:lang(ko-KR) .code { font-family: Source Code Pro, "SFMono-Regular", Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace, 'Twemoji', 'Noto Color Emoji', 'Noto Sans Mono CJK KR'; } .pdf .serif { font-family: PT Serif, Lyon-Text, Georgia, ui-serif, serif, 'Twemoji', 'Noto Color Emoji', 'Noto Serif CJK JP'; } .pdf:lang(zh-CN) .serif { font-family: PT Serif, Lyon-Text, Georgia, ui-serif, serif, 'Twemoji', 'Noto Color Emoji', 'Noto Serif CJK SC'; } .pdf:lang(zh-TW) .serif { font-family: PT Serif, Lyon-Text, Georgia, ui-serif, serif, 'Twemoji', 'Noto Color Emoji', 'Noto Serif CJK TC'; } .pdf:lang(ko-KR) .serif { font-family: PT Serif, Lyon-Text, Georgia, ui-serif, serif, 'Twemoji', 'Noto Color Emoji', 'Noto Serif CJK KR'; } .pdf .mono { font-family: PT Mono, iawriter-mono, Nitti, Menlo, Courier, monospace, 'Twemoji', 'Noto Color Emoji', 'Noto Sans Mono CJK JP'; } .pdf:lang(zh-CN) .mono { font-family: PT Mono, iawriter-mono, Nitti, Menlo, Courier, monospace, 'Twemoji', 'Noto Color Emoji', 'Noto Sans Mono CJK SC'; } .pdf:lang(zh-TW) .mono { font-family: PT Mono, iawriter-mono, Nitti, Menlo, Courier, monospace, 'Twemoji', 'Noto Color Emoji', 'Noto Sans Mono CJK TC'; } .pdf:lang(ko-KR) .mono { font-family: PT Mono, iawriter-mono, Nitti, Menlo, Courier, monospace, 'Twemoji', 'Noto Color Emoji', 'Noto Sans Mono CJK KR'; }
25 .highlight-default { color: rgba(44, 44, 43, 1); } .highlight-gray { color: rgba(125, 122, 117, 1); fill: rgba(125, 122, 117, 1); } .highlight-brown { color: rgba(159, 118, 90, 1); fill: rgba(159, 118, 90, 1); } .highlight-orange { color: rgba(210, 123, 45, 1); fill: rgba(210, 123, 45, 1); } .highlight-yellow { color: rgba(203, 148, 52, 1); fill: rgba(203, 148, 52, 1); } .highlight-teal { color: rgba(80, 148, 110, 1); fill: rgba(80, 148, 110, 1); } .highlight-blue { color: rgba(56, 125, 201, 1); fill: rgba(56, 125, 201, 1); } .highlight-purple { color: rgba(154, 107, 180, 1); fill: rgba(154, 107, 180, 1); } .highlight-pink { color: rgba(193, 76, 138, 1); fill: rgba(193, 76, 138, 1); } .highlight-red { color: rgba(207, 81, 72, 1); fill: rgba(207, 81, 72, 1); } .highlight-default_background { color: rgba(44, 44, 43, 1); } .highlight-gray_background { background: rgba(42, 28, 0, 0.07); } .highlight-brown_background { background: rgba(139, 46, 0, 0.086); } .highlight-orange_background { background: rgba(224, 101, 1, 0.129); } .highlight-yellow_background { background: rgba(211, 168, 0, 0.137); } .highlight-teal_background { background: rgba(0, 100, 45, 0.09); } .highlight-blue_background { background: rgba(0, 124, 215, 0.094); } .highlight-purple_background { background: rgba(102, 0, 178, 0.078); } .highlight-pink_background { background: rgba(197, 0, 93, 0.086); } .highlight-red_background { background: rgba(223, 22, 0, 0.094); } .block-color-default { color: inherit; fill: inherit; } .block-color-gray { color: rgba(125, 122, 117, 1); fill: rgba(125, 122, 117, 1); } .block-color-brown { color: rgba(159, 118, 90, 1); fill: rgba(159, 118, 90, 1); } .block-color-orange { color: rgba(210, 123, 45, 1); fill: rgba(210, 123, 45, 1); } .block-color-yellow { color: rgba(203, 148, 52, 1); fill: rgba(203, 148, 52, 1); } .block-color-teal { color: rgba(80, 148, 110, 1); fill: rgba(80, 148, 110, 1); } .block-color-blue { color: rgba(56, 125, 201, 1); fill: rgba(56, 125, 201, 1); } .block-color-purple { color: rgba(154, 107, 180, 1); fill: rgba(154, 107, 180, 1); } .block-color-pink { color: rgba(193, 76, 138, 1); fill: rgba(193, 76, 138, 1); } .block-color-red { color: rgba(207, 81, 72, 1); fill: rgba(207, 81, 72, 1); } .block-color-default_background { color: inherit; fill: inherit; } .block-color-gray_background { background: rgba(240, 239, 237, 1); } .block-color-brown_background { background: rgba(245, 237, 233, 1); } .block-color-orange_background { background: rgba(251, 235, 222, 1); } .block-color-yellow_background { background: rgba(249, 243, 220, 1); } .block-color-teal_background { background: rgba(232, 241, 236, 1); } .block-color-blue_background { background: rgba(229, 242, 252, 1); } .block-color-purple_background { background: rgba(243, 235, 249, 1); } .block-color-pink_background { background: rgba(250, 233, 241, 1); } .block-color-red_background { background: rgba(252, 233, 231, 1); } .select-value-color-default { background-color: rgba(42, 28, 0, 0.07); } .select-value-color-gray { background-color: rgba(28, 19, 1, 0.11); } .select-value-color-brown { background-color: rgba(127, 51, 0, 0.156); } .select-value-color-orange { background-color: rgba(196, 88, 0, 0.203); } .select-value-color-yellow { background-color: rgba(209, 156, 0, 0.282); } .select-value-color-green { background-color: rgba(0, 96, 38, 0.156); } .select-value-color-blue { background-color: rgba(0, 118, 217, 0.203); } .select-value-color-purple { background-color: rgba(92, 0, 163, 0.141); } .select-value-color-pink { background-color: rgba(183, 0, 78, 0.152); } .select-value-color-red { background-color: rgba(206, 24, 0, 0.164); }  .checkbox { display: inline-flex; vertical-align: text-bottom; width: 16; height: 16; background-size: 16px; margin-left: 2px; margin-right: 5px; }  .checkbox-on { background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%3Crect%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%2358A9D7%22%2F%3E%0A%3Cpath%20d%3D%22M6.71429%2012.2852L14%204.9995L12.7143%203.71436L6.71429%209.71378L3.28571%206.2831L2
25%207.57092L6.71429%2012.2852Z%22%20fill%3D%22white%22%2F%3E%0A%3C%2Fsvg%3E"); }  .checkbox-off { background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%3Crect%20x%3D%220.75%22%20y%3D%220.75%22%20width%3D%2214.5%22%20height%3D%2214.5%22%20fill%3D%22white%22%20stroke%3D%22%2336352F%22%20stroke-width%3D%221.5%22%2F%3E%0A%3C%2Fsvg%3E"); }  </style>
26	</head>
27	<body>
28		<p>&lt;aside&gt;
29&lt;img src=&quot;/icons/info-alternate_gray.svg&quot; alt=&quot;/icons/info-alternate_gray.svg&quot; width=&quot;40px&quot; /&gt;</p>
30<p>A personal blog by Swaroop Chitlur about life (books I read, ways of thinking, travel stories, parenting) &amp; coding (software development, ML, Generative AI).</p>
31<p>&lt;/aside&gt;</p>
32<h2>Books I’ve Written</h2>
33<ul>
34<li><a href="https://python.swaroopch.com/">A Byte of Python</a></li>
35<li><a href="https://vim.swaroopch.com/">A Byte of Vim</a></li>
36</ul>
37<p><a href="https://www.swaroopch.com/11b0924249b180ac9206d7c85d172859">Blog Posts (since 2004)</a></p>
38<p>&lt;aside&gt;
39&lt;img src=&quot;/icons/follow_gray.svg&quot; alt=&quot;/icons/follow_gray.svg&quot; width=&quot;40px&quot; /&gt;</p>
40<p>For updates, please follow via <a href="https://subscribe.swaroopch.com/subscribe">email</a> or <a href="https://rss.beehiiv.com/feeds/gJPBx7r44X.xml">RSS</a>.</p>
41<p>&lt;/aside&gt;</p>
42<p>&lt;aside&gt;
43&lt;img src=&quot;/icons/conversation_gray.svg&quot; alt=&quot;/icons/conversation_gray.svg&quot; width=&quot;40px&quot; /&gt;</p>
44<p>For comments, please respond via <a href="https://subscribe.swaroopch.com/subscribe">email</a> or <a href="https://x.com/swaroopch">Twitter/X</a> or <a href="https://t.me/+Rr5pJTis5XQzMjAx">Telegram</a>.</p>
45<p>&lt;/aside&gt;</p>
46<p><a href="https://www.swaroopch.com/11b0924249b180fba5a4d04a18f1cc79">Mental Models</a></p>
47<ul>
48<li>Pages</li>
49</ul>
50
51	</body>
52</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.