1 2<!DOCTYPE html> 3<!-- 4 jay rosen's internet archive â an impossible press in view-source 5 "the impossible press: american journalism and the decline of public life" (1986) 6 7 a dissertation that sat in a drawer for 39 years, finally published december 2025. 8 jay would say that the press-public relationship is transactional, not just informational. 9 you opening view-source proves his point. 10 11 stack: zero-build react 18 via esm.sh + htm, no bundler, no npm 12 built by: joe amditis (archive curator) â [email protected] 13 more at: pressthink.org 14--> 15<html lang="en"> 16 <head> 17 <meta charset="UTF-8" /> 18 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 19 <title>Jay Rosen's Internet Archive</title> 20 <meta name="description" content="A curated public collection of the works, critiques, and teachings of Jay Rosen, professor of journalism at NYU. 25,000+ records spanning four decades." /> 21 <link rel="canonical" href="https://pressthink.org/j/rosen-archive/" /> 22 23 <!-- Open Graph --> 24 <meta property="og:title" content="Jay Rosen's Internet Archive" /> 25 <meta property="og:description" content="A curated public collection of the works, critiques, and teachings of Jay Rosen, professor of journalism at NYU. 25,000+ records spanning four decades of journalism criticism, media theory, and public life." /> 26 <meta property="og:url" content="https://pressthink.org/j/rosen-archive/" /> 27 <meta property="og:type" content="website" /> 28 <meta property="og:site_name" content="Jay Rosen's Internet Archive" /> 29 <meta property="og:image" content="https://pressthink.org/j/rosen-archive/og-image.png" /> 30 <meta property="og:image:width" content="1200" /> 31 <meta property="og:image:height" content="630" /> 32 33 <!-- Twitter Card --> 34 <meta name="twitter:card" content="summary_large_image" /> 35 <meta name="twitter:title" content="Jay Rosen's Internet Archive" /> 36 <meta name="twitter:description" content="A curated public collection of the works, critiques, and teachings of Jay Rosen, professor of journalism at NYU." /> 37 <meta name="twitter:image" content="https://pressthink.org/j/rosen-archive/og-image.png" /> 38 39 <link rel="icon" type="image/svg+xml" href="./favicon.svg" /> 40 <link rel="icon" href="./favicon.ico" /> 41 42 <!-- RSS Feed Autodiscovery (Dave Winer alignment) --> 43 <link rel="alternate" type="application/rss+xml" title="Jay Rosen's Internet Archive" href="./data/feeds/rss.xml" /> 44 <link rel="alternate" type="application/rss+xml" title="Jay Rosen's Internet Archive - Articles" href="./data/feeds/articles.xml" /> 45 46 <!-- Module CDN: warm the esm.sh TLS handshake before the first React import (#283) --> 47 <link rel="preconnect" href="https://esm.sh" crossorigin> 48 49 <!-- Google Fonts --> 50 <link rel="preconnect" href="https://fonts.googleapis.com"> 51 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 52 <link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@300;400;500;700&family=Special+Elite&display=swap" rel="stylesheet"> 53 54 <!-- External CSS (versioned for cache busting) --> 55 <link rel="stylesheet" href="./frontend/design-system/legacy-token-bridge.css?v=3.8.36" /> 56 <link rel="stylesheet" href="./frontend/design-system/tokens.css?v=3.8.36" /> 57 <link rel="stylesheet" href="./frontend/index.css?v=3.8.36" /> 58 59 <!-- Tailwind CSS (pre-built for production) --> 60 <link rel="stylesheet" href="./frontend/dist/tailwind.css?v=3.8.36" /> 61 <link rel="stylesheet" href="./frontend/design-system/recipes.css?v=3.8.36" /> 62 63 <!-- Import Map --> 64
64<script type="importmap"> 65{ 66 "imports": { 67 "react": "https://esm.sh/[email protected]", 68 "react-dom/client": "https://esm.sh/[email protected]/client", 69 "react-dom": "https://esm.sh/[email protected]", 70 "htm": "https://esm.sh/[email protected]", 71 "lucide-react": "https://esm.sh/[email protected][email protected]", 72 "sql.js": "https://esm.sh/[email protected]", 73 "idb-keyval": "https://esm.sh/[email protected]", 74 "minisearch": "https://esm.sh/[email protected]" 75 } 76} 77</script>
77 78</head> 79 <body class="antialiased font-body text-stone-900 min-h-screen flex flex-col"> 80 <div id="root"></div> 81 82 <!-- Main Entry Point (versioned for cache busting) --> 83
83<script type="module" src="./frontend/index.js?v=3.8.36"></script>
83 84 85 <!-- Easter egg for the curious --> 86
86<script> 87 console.log("%c jay rosen's internet archive ", 'background: #1c1917; color: #fdfbf7; font-weight: bold; font-size: 16px; padding: 4px 8px; border-radius: 2px; font-family: "Special Elite", serif;') 88 console.log('%c "the impossible press: american journalism and the decline of public life" (1986)', 'color: #78716c; font-style: italic; font-size: 13px;') 89 console.log('%c stack: zero-build react 18 · esm.sh · htm · no bundler · no npm', 'color: #a8a29e; font-size: 11px;') 90 console.log('%c built by joe amditis â [email protected] â pressthink.org', 'color: #a8a29e; font-size: 11px;') 91 </script>
91 92 93 <!-- Service Worker Registration (for offline support & fast caching) --> 94
94<script> 95 // #428: archive-details (~13 MB) and archive-data (~30 MB) are cached only 96 // by the service-worker Cache Storage -- they exceed Web Storage's ~5 MB 97 // quota and the IndexedDB cache holds only archive-core. So whenever the 98 // service worker is unavailable (no support, disabled by policy, or a 99 // failed registration) those large payloads have no client cache and are 100 // refetched on every navigation, regardless of IndexedDB. Surface that 101 // once instead of refetching silently. 102 const noteNoOfflineCache = () => console.info( 103 'Running without the service-worker cache: large archive data (>5 MB) is refetched on each navigation. See issue #428.' 104 ); 105 if ('serviceWorker' in navigator) { 106 const controlledAtEvaluation = Boolean(navigator.serviceWorker.controller); 107 if (controlledAtEvaluation) { 108 navigator.serviceWorker.addEventListener('controllerchange', () => { 109 window.__jrdaUpdateReady = true; 110 window.dispatchEvent(new Event('jrda:update-ready')); 111 }, { once: true }); 112 } 113 window.addEventListener('load', () => { 114 // Register the root bridge so the worker controls the archive page, 115 // not only /frontend/. Checking imported scripts without HTTP-cache 116 // reuse makes a frontend/sw.js CACHE_VERSION bump observable even 117 // though this small bridge intentionally stays stable. 118 navigator.serviceWorker.register('./sw.js', { updateViaCache: 'none' }) 119 .then(registration => { 120 console.log('SW registered:', registration.scope); 121 }) 122 .catch(err => { 123 console.log('SW registration failed:', err); 124 noteNoOfflineCache(); 125 }); 126 }); 127 } else { 128 noteNoOfflineCache(); 129 } 130 </script>
130 131 </body> 132</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.