PageSourceSearch

https://gvrkiran.github.io/publications.html

html gvrkiran.github.io collected 2026-10-03 09:15:54 UTC 2,807 bytes, 60 lines download raw bytes

1<!doctype html>
2<html lang="en">
3<head>
4  <meta charset="utf-8" />
5  <meta name="viewport" content="width=device-width, initial-scale=1" />
6  <title>Publications · Kiran Garimella</title>
7  <meta name="description" content="Publications by Kiran Garimella." />
8  
8<script>
9    /* publications design router — same spirit as js/theme-engine.js:
10       - picks one of the six designs below, avoiding the previous pick
11       - design pages opened here carry ?rotation=1; refreshing them rerolls
12       - the "↻ shuffle" button on each design also links here with ?reroll=1
13       - ?pub=N forces a specific design */
14    (function () {
15      const DESIGNS = [
16        { n: 1, href: 'publications-classic.html', name: 'Classic list' },
17        { n: 2, href: 'publications-grove.html',   name: 'The Orchard' },
18        { n: 3, href: 'publications-stamps.html',  name: 'The Stamp Collection' },
19        { n: 4, href: 'publications-field-guide.html', name: 'The Field Guide' },
20        { n: 5, href: 'publications-library.html', name: 'Book view' },
21        { n: 6, href: 'publications-cave.html',    name: 'The Cave' },
22      ];
23      const MAX = DESIGNS.length;
24      const url = new URL(location.href);
25      const q = parseInt(url.searchParams.get('pub'), 10);
26      const reroll = url.searchParams.has('reroll');
27      const sess = parseInt(sessionStorage.getItem('current_pub') || '', 10);
28      const last = parseInt(localStorage.getItem('last_pub') || '', 10);
29      let pick;
30      if (q >= 1 && q <= MAX) {
31        pick = q;
32      } else if (!reroll && sess >= 1 && sess <= MAX) {
33        pick = sess;                                   // keep the design within a session
34      } else {
35        const avoid = reroll ? (sess || last) : last;  // never repeat what you just saw
36        const candidates = DESIGNS.map(d => d.n).filter(n => n !== avoid);
37        pick = candidates[Math.floor(Math.random() * candidates.length)];
38      }
39      sessionStorage.setItem('current_pub', String(pick));
40      localStorage.setItem('last_pub', String(pick));
41      const target = new URL(DESIGNS[pick - 1].href, location.href);
42      target.searchParams.set('rotation', '1');
43      location.replace(target.href);
44    })();
45  </script>
45
46</head>
47<body>
48  <noscript>
49    <p style="font-family: Georgia, serif; max-width: 60ch; margin: 4rem auto; padding: 0 1rem;">
50      Publications come in six designs:
51      <a href="publications-classic.html">the classic list</a>,
52      <a href="publications-grove.html">the orchard</a>,
53      <a href="publications-stamps.html">the stamp collection</a>,
54      <a href="publications-field-guide.html">the field guide</a>,
55      <a href="publications-library.html">the book view</a>, or
56      <a href="publications-cave.html">the cave</a>.
57    </p>
58  </noscript>
59</body>
60</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.