1<!DOCTYPE html> 2<html data-wf-page="slides-gallery" data-wf-site="5fff4548993f61212dec8c3a"> 3<head> 4 <meta charset="utf-8"> 5 <title>Library - Nathan Lambert</title> 6 <meta content="Nathan Lambert's library of talk slides, recordings, and presentations on reinforcement learning, language models, and AI research." name="description"> 7 <meta content="Library - Nathan Lambert" property="og:title"> 8 <meta content="Nathan Lambert's library of talk slides, recordings, and presentations on reinforcement learning, language models, and AI research." property="og:description"> 9 <meta content="Library - Nathan Lambert" property="twitter:title"> 10 <meta content="Nathan Lambert's library of talk slides, recordings, and presentations on reinforcement learning, language models, and AI research." property="twitter:description"> 11 <meta property="og:type" content="website"> 12 <meta content="summary_large_image" name="twitter:card"> 13 <meta content="width=device-width, initial-scale=1" name="viewport"> 14 <link href="style.css" rel="stylesheet" type="text/css"> 15 <link href="https://fonts.googleapis.com" rel="preconnect"> 16 <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous"> 17 <link href="https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&family=Merriweather:ital,wght@0,300;0,400;0,700;0,900;1,300;1,400;1,700;1,900&family=Exo:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet"> 18 <link href="assets/icons/favicon.png" rel="shortcut icon" type="image/x-icon"> 19 <link href="assets/icons/webclip.png" rel="apple-touch-icon"> 20 <link href="https://natolambert.com/slides" rel="canonical">
vendor: 69 bytes, lines 20-21
20 21 <script async="" src="https://www.googletagmanager.com/gtag/js?id=
21G-4V75Z4K57V
vendor: 14 bytes, lines 21-22
21"></script> 22
22<script type="text/javascript"> 23
vendor: 142 bytes, lines 23-26
23window.dataLayer = window.dataLayer || []; 24 function gtag() { dataLayer.push(arguments); } 25 gtag('js', new Date()); 26 gtag('config', '
26G-4V75Z4K57V
vendor: 30 bytes, lines 26-27
26', {'anonymize_ip': true}); 27
27</script>
27 28 <style> 29 .slides-grid { 30 display: grid; 31 grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); 32 gap: 24px; 33 margin-top: 24px; 34 } 35 .slide-card { 36 border: 1px solid #e0e0e0; 37 border-radius: 8px; 38 overflow: hidden; 39 transition: box-shadow 0.2s ease, transform 0.2s ease; 40 background: #fff; 41 } 42 .slide-card:hover { 43 box-shadow: 0 4px 12px rgba(0,0,0,0.15); 44 transform: translateY(-2px); 45 } 46 .slide-card a.slide-link { 47 text-decoration: none; 48 color: inherit; 49 display: block; 50 } 51 .slide-thumbnail-container { 52 position: relative; 53 width: 100%; 54 aspect-ratio: 16/9; 55 background: #f5f5f5; 56 overflow: hidden; 57 } 58 .slide-thumbnail-link-overlay { 59 position: absolute; 60 inset: 0; 61 z-index: 1; 62 } 63 .slide-thumbnail { 64 width: 100%; 65 height: 100%; 66 object-fit: cover; 67 display: block; 68 } 69 .slide-iframe-preview { 70 position: absolute; 71 top: 0; 72 left: 0; 73 width: 1280px; 74 height: 720px; 75 border: 0; 76 display: block; 77 background: #fff; 78 pointer-events: none; 79 transform: scale(var(--preview-scale, 0.25)); 80 transform-origin: top left; 81 } 82 .slide-thumbnail-placeholder { 83 width: 100%; 84 height: 100%; 85 background: linear-gradient(135deg, #e8e8e8 0%, #f5f5f5 100%); 86 display: flex; 87 align-items: center; 88 justify-content: center; 89 color: #999; 90 font-size: 14px; 91 font-style: italic; 92 } 93 .recording-badge { 94 position: absolute; 95 top: 8px; 96 right: 8px; 97 background: rgba(0, 0, 0, 0.75); 98 color: #fff; 99 font-size: 11px; 100 font-weight: 500; 101 padding: 4px 8px; 102 border-radius: 4px; 103 text-decoration: none; 104 display: flex; 105 align-items: center; 106 gap: 4px; 107 transition: background 0.2s ease; 108 } 109 .recording-badge:hover { 110 background: rgba(0, 0, 0, 0.9); 111 } 112 .recording-badge svg { 113 width: 12px; 114 height: 12px; 115 fill: currentColor; 116 } 117 .pdf-badge { 118 position: absolute; 119 top: 8px; 120 left: 8px; 121 background: rgba(255, 255, 255, 0.92); 122 color: #222; 123 font-size: 11px; 124 font-weight: 600; 125 padding: 4px 8px; 126 border-radius: 4px; 127 text-decoration: none; 128 transition: background 0.2s ease; 129 z-index: 2; 130 } 131 .pdf-badge:hover { 132 background: rgba(255, 255, 255, 1); 133 } 134 .slide-info { 135 padding: 16px; 136 } 137 .slide-title { 138 font-size: 16px; 139 font-weight: 600; 140 margin: 0 0 8px 0; 141 line-height: 1.3; 142 color: #333; 143 } 144 .slide-meta { 145 font-size: 13px; 146 color: #666; 147 margin: 0; 148 line-height: 1.4; 149 } 150 .slide-date { 151 font-weight: 500; 152 color: #555; 153 } 154 .year-section { 155 margin-top: 40px; 156 } 157 .year-section:first-of-type { 158 margin-top: 24px; 159 } 160 .year-heading { 161 font-size: 24px; 162 font-weight: 600; 163 color: #333; 164 margin-bottom: 16px; 165 padding-bottom: 8px; 166 border-bottom: 2px solid #333; 167 } 168 </style> 169</head> 170<body class="body"> 171 <div class="content-wrapper"> 172 <div class="w-container"> 173 <div class="white-wrapper"> 174 <div style="display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 20px;"> 175 <h1 class="heading-tight" style="margin: 0;">Library</h1> 176 <a href='/' style='text-decoration: none; color: #666; font-size: 14px;'>â Home</a> 177 </div> 178 <div class="blog-body w-richtext"> 179 <p>Talks, slides, and recordings. Click any card to open the full presentation. Recordings available on my <a href="https://www.youtube.com/@natolambert">YouTube page</a> and <a href="https://youtube.com/@interconnects">Interconnects</a>.</p> 180 </div> 181 <div id="slides-container"></div> 182 </div> 183 </div> 184 </div> 185 <footer style="text-align: center; padding: 20px; border-top: 1px solid #eee; margin-top: 20px;"> 186 <div style="margin-bottom: 10px;"> 187 <a href='/' style='margin: 0 15px; text-decoration: none; color: #333;'>Home</a> 188 <a href='/contact' style='margin: 0 15px; text-decoration: none; color: #333;'>Contact</a> 189 </div> 190 <div style="font-size: 14px; color: #666;"> 191 Copyright © 2021-2026 Nathan Lambert. 192 </div> 193 </footer> 194
194<script> 195 const playIcon = '<svg viewBox="0 0 24 24"><path d="M8 5v14l11-7z"/></svg>'; 196 197 function getSlidesUrl(slide) { 198 return slide.slidesUrl || `https://docs.google.com/presentation/d/${slide.slidesId}/edit`; 199 } 200 201 function getThumbnailUrl(id) { 202 return `https://lh3.googleusercontent.com/d/${id}=w1200`; 203 } 204 205 function getPreviewUrl(slide) { 206 if (!slide.previewUrl) return ''; 207 try { 208 const url = new URL(slide.previewUrl, window.location.href); 209 url.searchParams.set('capture', '1'); 210 return url.toString(); 211 } catch (err) { 212 return slide.previewUrl; 213 } 214 } 215 216 function createSlideCard(slide) { 217 const slidesUrl = getSlidesUrl(slide); 218 const previewUrl = getPreviewUrl(slide); 219 const previewHtml = slide.previewUrl 220 ? `<iframe class="slide-iframe-preview" src="${previewUrl}" title="${slide.title} preview" loading="lazy"></iframe>` 221 : slide.noPreview 222 ? '<div class="slide-thumbnail-placeholder">No preview available</div>' 223 : `<img class="slide-thumbnail" src="${getThumbnailUrl(slide.slidesId)}" alt="${slide.title} slides" loading="lazy">`; 224 225 const recordingBadge = slide.recordingUrl 226 ? `<a href="${slide.recordingUrl}" target="_blank" class="recording-badge">${playIcon} Recording</a>` 227 : ''; 228 const pdfBadge = slide.pdfUrl 229 ? `<a href="${slide.pdfUrl}" target="_blank" class="pdf-badge">PDF</a>` 230 : ''; 231 const thumbnailWrapper = slide.previewUrl 232 ? `${previewHtml}<a href="${slidesUrl}" target="_blank" class="slide-thumbnail-link-overlay" aria-label="Open ${slide.title} slides"></a>` 233 : `<a href="${slidesUrl}" target="_blank">${previewHtml}</a>`; 234 235 return ` 236 <div class="slide-card"> 237 <div class="slide-thumbnail-container"> 238 ${thumbnailWrapper} 239 ${pdfBadge} 240 ${recordingBadge} 241 </div> 242 <a href="${slidesUrl}" target="_blank" class="slide-link"> 243 <div class="slide-info"> 244 <h3 class="slide-title">${slide.title}</h3> 245 <p class="slide-meta"><span class="slide-date">${slide.month} ${slide.year}</span> · ${slide.location}</p> 246 </div> 247 </a> 248 </div> 249 `; 250 } 251 252 function resizePreviewIframes() { 253 document.querySelectorAll('.slide-iframe-preview').forEach(iframe => { 254 const container = iframe.closest('.slide-thumbnail-container'); 255 if (!container) return; 256 iframe.style.setProperty('--preview-scale', container.clientWidth / 1280); 257 }); 258 } 259
260 function renderSlides(slides) { 261 const container = document.getElementById('slides-container'); 262 const years = [...new Set(slides.map(s => s.year))].sort((a, b) => b - a); 263 264 let html = ''; 265 for (const year of years) { 266 const yearSlides = slides.filter(s => s.year === year); 267 html += ` 268 <div class="year-section"> 269 <h2 class="year-heading">${year}</h2> 270 <div class="slides-grid"> 271 ${yearSlides.map(createSlideCard).join('')} 272 </div> 273 </div> 274 `; 275 } 276 container.innerHTML = html; 277 resizePreviewIframes(); 278 } 279 280 window.addEventListener('resize', resizePreviewIframes); 281 282 fetch('data/slides-data.json') 283 .then(res => res.json()) 284 .then(renderSlides) 285 .catch(err => console.error('Failed to load slides:', err)); 286 </script>
286 287</body> 288</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.