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.