1<!DOCTYPE html> 2<html lang=" en-US" data-theme="dark"> 3 4<head> 5
5<script> 6 (function () { 7 var saved = localStorage.getItem('theme') || 'dark'; 8 document.documentElement.setAttribute('data-theme', saved); 9 })(); 10 </script>
10 11 <meta charset="UTF-8"> 12 <!-- Begin Jekyll SEO tag v2.8.0 --> 13<title>Search | Daniel Opitz - Blog</title> 14<meta name="generator" content="Jekyll v3.10.0" /> 15<meta property="og:title" content="Search" /> 16<meta property="og:locale" content="en_US" /> 17<meta name="description" content="Search" /> 18<meta property="og:description" content="Search" /> 19<link rel="canonical" href="https://odan.github.io/search.html" /> 20<meta property="og:url" content="https://odan.github.io/search.html" /> 21<meta property="og:site_name" content="Daniel Opitz - Blog" /> 22<meta property="og:type" content="article" /> 23<meta property="article:published_time" content="2019-10-20T00:00:00+00:00" /> 24<meta name="twitter:card" content="summary" /> 25<meta property="twitter:title" content="Search" />
26<script type="application/ld+json"> 27{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2019-10-20T00:00:00+00:00","datePublished":"2019-10-20T00:00:00+00:00","description":"Search","headline":"Search","mainEntityOfPage":{"@type":"WebPage","@id":"https://odan.github.io/search.html"},"url":"https://odan.github.io/search.html"}</script>
27 28<!-- End Jekyll SEO tag --> 29 30 <meta name="viewport" content="width=device-width, initial-scale=1"> 31 <meta name="theme-color" content="#1e293b"> 32 <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> 33 34 <meta name="keywords" content="search" /> 35 36 <link rel="alternate" type="application/rss+xml" title="Subscribe to What's New" 37 href="https://odan.github.io/feed.xml" /> 38 <link rel="preconnect" href="https://fonts.bunny.net"> 39 <link rel="stylesheet" href="/assets/css/style.css?v=e9a526afe686618291ddcbf01fc2dc3799c141f8"> 40 <link href="https://fonts.bunny.net/css?family=inter:400,500,600,700,800|jetbrains-mono:400,500" rel="stylesheet" /> 41 <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?"> 42
42<script type="module" 43 src="https://cdn.jsdelivr.net/npm/@hotwired/turbo@latest/dist/turbo.es2017-esm.min.js"></script>
43 44 <meta name="view-transition" content="same-origin"> 45 <meta name="turbo-prefetch" content="false"> 46 <meta name="turbo-refresh-method" content="morph"> 47 <meta name="turbo-refresh-scroll" content="preserve"> 48</head> 49 50<body> 51 <nav> 52 <div class="nav-inner"> 53 <a href="/" class="nav-logo">odan/blog</a> 54 <div class="nav-links" id="nav-links"> 55 <a href="/">Blog</a> 56 <a href="/about.html">About</a> 57 <a href="/donate.html">Donate</a> 58 <a href="/search.html">Search</a> 59 </div> 60 <button class="theme-btn" id="toggle-mode" aria-label="Toggle dark/light mode">☾</button> 61 <button class="hamburger" id="hamburger" aria-label="Menu">☰</button> 62 </div> 63 <div class="nav-overlay" id="nav-overlay"></div> 64 </nav> 65 66 <header class="hero" role="banner"> 67 <div class="hero-bg"></div> 68 <div class="hero-content"> 69 <h1>Daniel Opitz - Blog</h1> 70 <p>Developer, Trainer, Open Source Contributor</p> 71 </div> 72 </header> 73 74 <main id="content" class="container-wide" role="main"> 75 <h1 class="page-heading">Search</h1> 76 77<form class="search-form" action=""> 78 <label for="search">Search term:</label> 79 <input id="search" type="text" name="search" placeholder="" autocomplete="off" tabindex="0"> 80 <ul class="search-results" id="list"></ul> 81</form> 82 83<!--
84<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8731878573760439" 85 crossorigin="anonymous"> 86</script>
86 87--> 88<!-- 89<iframe src="https://rcm-eu.amazon-adsystem.com/e/cm?o=3&p=26&l=ez&f=ifr&linkID=abb0f54a7e918b0807606332fe09d652&t=28031982-21&tracking_id=28031982-21" width="468" height="60" scrolling="no" border="0" marginwidth="0" style="border:none;" frameborder="0"></iframe> 90--> 91 92<!-- 93<iframe src="https://rcm-eu.amazon-adsystem.com/e/cm?o=3&p=26&l=ur1&category=gift_certificates&banner=1FRYA4Y34G5SPX4CXAR2&f=ifr&linkID=d02832eeac1478aae87ef3f420acc971&t=28031982-21&tracking_id=28031982-21" width="468" height="60" scrolling="no" border="0" marginwidth="0" style="border:none;" frameborder="0"></iframe> 94--> 95
96<script src="/assets/fetch.js"></script>
vendor: 1 bytes, line 96
96
97<script src="/assets/search.js"></script>
vendor: 1 bytes, line 97
97
98<script> 99 var search = new jekyllSearch( 100 '/assets/search.json', 101 '#search', 102 '#list', 103 'https://odan.github.io' 104 ); 105 search.init(); 106 107 window.setTimeout(function () { 108 document.getElementById('search').focus(); 109 }, 100); 110</script>
110 111 112<noscript>Please enable JavaScript to use the search form.</noscript> 113 114 115 <footer> 116 © 2026 Daniel Opitz 117 | <a href="https://x.com/dopitz" target="_blank">X</a> 118 | <a href="https://github.com/odan" target="_blank">GitHub</a> 119 | <a href="https://www.linkedin.com/in/daniel-opitz-493816111" target="_blank">LinkedIn</a> 120 | <a href="https://odan.github.io/feed.xml" target="_blank">RSS</a> 121 </footer> 122 </main> 123 124
124<script> 125 (function () { 126 document.getElementById('toggle-mode').addEventListener('click', function (e) { 127 var cur = document.documentElement.getAttribute('data-theme'); 128 var next = cur === 'dark' ? 'light' : 'dark'; 129 document.documentElement.setAttribute('data-theme', next); 130 localStorage.setItem('theme', next); 131 }); 132 133 var hamburger = document.getElementById('hamburger'); 134 var navLinks = document.getElementById('nav-links'); 135 var overlay = document.getElementById('nav-overlay'); 136 if (hamburger && navLinks) { 137 function closeMenu() { 138 navLinks.classList.remove('open'); 139 overlay.classList.remove('open'); 140 document.body.classList.remove('nav-open'); 141 } 142 hamburger.addEventListener('click', function () { 143 navLinks.classList.toggle('open'); 144 overlay.classList.toggle('open'); 145 document.body.classList.toggle('nav-open'); 146 }); 147 overlay.addEventListener('click', closeMenu); 148 navLinks.querySelectorAll('a').forEach(function (link) { 149 link.addEventListener('click', closeMenu); 150 }); 151 } 152 })(); 153 </script>
153 154</body> 155 156</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.