https://overengineered.fm/episodes/storing-files-in-the-database-w-bogdan-kharchenko-and-skyler-katz
1<!DOCTYPE html> 2<html lang="en" dir="ltr"> 3 <head> 4
4<script src="https://overengineered.fm/theme-assets/theme-graphite-1790961770.js" data-turbo-track="reload"></script>
4 5 <meta name="transistor-theme" content="graphite" /> 6 <link rel="shortcut icon" type="image/x-icon" href="https://assets.transistor.fm/assets/favicon-636b619b27c8932b15adac78178e70ebdf1f2c3a33de896176872b88cb3a5e48.ico" /> 7 8 9 <!-- Twitter --> 10<meta name="twitter:site" content="@TransistorFM"> 11<meta name="twitter:title" content="Over Engineered | Storing Files in the Database w/ Bogdan Kharchenko and Skyler Katz"> 12<meta name="twitter:description" content="Sometimes you have files or other large chunks of data that you need to associate with a record in your database. It might be convenient to just store that as base64-encoded data or HTML in a "long..."> 13<meta name="twitter:card" content="player"> 14<meta name="twitter:image" content="https://img.transistorcdn.com/OV6BR02O-rQW-wGuL2AGLtGMnib41UvXdTC1__mqoJs/rs:fill:0:0:1/w:800/h:800/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS82MTcz/ZTdkZDU3OGNhMjA2/ZjczMGZlMTMxMDRk/ZGM1NC5wbmc.webp"> 15<meta name="twitter:player" content="https://share.transistor.fm/e/4f60b376"> 16<meta name="twitter:player:width" content="500"> 17<meta name="twitter:player:height" content="180"> 18<meta name="twitter:image:alt" content="Over Engineered | Storing Files in the Database w/ Bogdan Kharchenko and Skyler Katz"> 19<meta name="twitter:player:stream" content="https://media.transistor.fm/4f60b376/dd6508ea.mp3?src=site"> 20<meta name="twitter:player:stream:content_type" content="audio/mpeg"> 21<!-- /Twitter --> 22 23 <!-- Open Graph --> 24<meta property="og:url" content="https://overengineered.fm/episodes/storing-files-in-the-database-w-bogdan-kharchenko-and-skyler-katz"> 25 26 <meta property="og:image" content="https://img.transistorcdn.com/OV6BR02O-rQW-wGuL2AGLtGMnib41UvXdTC1__mqoJs/rs:fill:0:0:1/w:800/h:800/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS82MTcz/ZTdkZDU3OGNhMjA2/ZjczMGZlMTMxMDRk/ZGM1NC5wbmc.webp"> 27 <meta property="og:image:width" content="800"> 28 <meta property="og:image:height" content="800"> 29 30<meta property="og:type" content="website"> 31<meta property="og:site_name" content="Over Engineered"> 32<meta property="og:description" content="Sometimes you have files or other large chunks of data that you need to associate with a record in your database. It might be convenient to just store that as base64-encoded data or HTML in a "long..."> 33<meta property="og:title" content="Over Engineered | Storing Files in the Database w/ Bogdan Kharchenko and Skyler Katz"> 34<!-- /Open Graph --> 35 36 <meta content="Sometimes you have files or other large chunks of data that you need to associate with a record in your database. It might be convenient to just store that as base64-encoded data or HTML in a "long..." name="description" /> 37 <meta content="php,laravel,programming" name="keywords" /> 38 39 <!-- iTunes Banner --> 40 <meta content="app-id=1671924478" name="apple-itunes-app"> 41 <!-- /iTunes Banner --> 42 43 <link rel="alternate" type="application/rss+xml" title="Over Engineered" href="https://feeds.transistor.fm/over-engineered-fm" /> 44
44<script src="https://assets.transistor.fm/assets/sites-a37463b4c1de0b10ae6440d149f938b5190d166967847660dfe758c0ac28c6a8.js" defer data-turbo-track="reload"></script>
44 45
45<script> 46 document.addEventListener('alpine:init', () => { 47 transistor.translations.add({ comments: {"headline":"Comments and Discussion","loading":"Loading comments\u0026hellip;","view_and_reply":"View post and reply on Bluesky","likes":"likes","reposts":"reposts","replies":"replies","join_discussion":"Reply on Bluesky \u003ca :href=\"postUrl\" :title=\"t('comments.view_and_reply')\" target=\"_bsky\"\u003ehere\u003c/a\u003e to join the discussion.","no_comments":"No comments yet. Be the first by \u003ca :href=\"postUrl\" :title=\"t('comments.view_and_reply')\" target=\"_bsky\" class=\"episode-comments-reply-link\"\u003ereplying on Bluesky\u003c/a\u003e!","error_loading":"There was a problem loading the comments. Please try again soon."} }) 48 }) 49 </script>
49 50 51 <title>Over Engineered | Storing Files in the Database w/ Bogdan Kharchenko and Skyler Katz</title> 52 <meta content="width=device-width, initial-scale=1.0, viewport-fit=cover, user-scalable=yes" name="viewport" /> 53 <style> 54 :root { 55 --color-header: #1E293B; 56 --color-secondary: #3B82F6; 57 --color-background: #F1F5F9; 58 --color-header-text: #FFFFFF; 59 --color-link: #222222; 60 --color-player: #475569; 61 --color-transistor: #111827; 62 --color-text-secondary: #FFFFFF; 63 } 64 </style> 65 <link rel="stylesheet" media="all" href="https://overengineered.fm/theme-assets/theme-graphite-1790961770.css" type="text/css" data-turbo-track="reload" /> 66 67 68
68<script defer data-domain="overengineered.fm" src="https://plausible.io/js/script.js"></script>
68 69 70 </head> 71 <body x-data="{ mobileNavOpen: false }" class="episode"> 72 73 <header class="site-header"> 74 <div class="site-container"> 75 <div class="site-header-intro"> 76 77 <a href="/" class="site-header-artwork" title="Home"><img src="https://img.transistorcdn.com/GSTkHXHMb86BPLEBtKgldgjAybYIYWmSvjP4YhtNnZw/rs:fill:0:0:1/w:800/h:800/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS9zaG93/LzQ3NjE2LzE3MDIw/NjAzMTEtYXJ0d29y/ay5qcGc.webp" alt="Over Engineered"></a> 78 79 <hgroup> 80 81 <h1 class="site-header-title">Over Engineered</h1> 82 83 <nav class="site-nav"> 84 85 <a title="Home" class="" href="/">Home</a> 86 <a title="Episodes" class="current" href="/episodes">Episodes</a> 87 <a title="People" class="" href="/people">People</a> 88 <a title="Subscribe" class="" href="/subscribe">Subscribe</a> 89 90 </nav> 91 </hgroup> 92 </div> 93 </div> 94 <span x-show="!mobileNavOpen" class="site-mobile-nav-trigger" @click="mobileNavOpen = true"> 95 <svg role="img" class="icon-menu" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor"><title>menu</title><path fill-rule="evenodd" d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 15a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z" clip-rule="evenodd" /></svg> 96 97</span> 98 <span x-cloak x-show="mobileNavOpen" class="site-mobile-nav-trigger" @click="mobileNavOpen = false"> 99 <svg role="img" class="icon-close" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><title>close</title><path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd" /></svg> 100 101</span> 102 </header> 103 <nav x-cloak @click.outside="mobileNavOpen = false" class="site-mobile-nav" x-show="mobileNavOpen" x-transition:enter="transition ease-out duration-100" x-transition:enter-start="transform opacity-0 scale-95" x-transition:enter-end="transform opacity-100 scale-100" x-transition:leave="transition ease-in duration-75" x-transition:leave-start="transform opacity-100 scale-100" x-transition:leave-end="transform opacity-0 scale-95"> 104 105 <a title="Home" class="" href="/">Home</a> 106 <a title="Episodes" class="current" href="/episodes">Episodes</a> 107 <a title="People" class="" href="/people">People</a> 108 <a title="Subscribe" class="" href="/subscribe">Subscribe</a> 109 110 </nav> 111 112 <main class="site-container site-container-main"> 113 <section class="site-content-main"> 114 <section class="site-content"> 115 <div class="site-episode"> 116 <header class="site-episode-header"> 117 <button x-show="!($store.player.playing && $store.player.audio_url === 'https://media.transistor.fm/4f60b376/dd6508ea.mp3?src=site')" data-url="https://media.transistor.fm/4f60b376/dd6508ea.mp3?src=site" data-title="Storing Files in the Database w/ Bogdan Kharchenko and Skyler Katz" data-show-title="Over Engineered" data-duration="4186" data-artwork="https://img.transistorcdn.com/OV6BR02O-rQW-wGuL2AGLtGMnib41UvXdTC1__mqoJs/rs:fill:0:0:1/w:800/h:800/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS82MTcz/ZTdkZDU3OGNhMjA2/ZjczMGZlMTMxMDRk/ZGM1NC5wbmc.webp" title="Play Episode" role="button" @click.prevent="$dispatch('play-episode', $event.currentTarget.dataset); $store.player.audio_url = $el.dataset.url; $store.player.playing = true" class="player-button site-episode-play"> 118 119 <svg role="img" class="icon-play" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><title>play</title><path fill-rule="evenodd" d="M8,16 C12.4183,16 16,12.4183 16,8 C16,3.58172 12.4183,0 8,0 C3.58172,0 0,3.58172 0,8 C0,12.4183 3.58172,16 8,16 Z M7.5547,5.16795 C7.24784,4.96338 6.8533,4.94431 6.52814,5.11833 C6.20298,5.29235 6,5.63121 6,6.00000106 L6,10.0000011 C6,10.3688 6.20298,10.7077 6.52814,10.8817 C6.8533,11.0557 7.24784,11.0366 7.5547,10.8321 L10.5547,8.8321 C10.8329,8.6466 11,8.3344 11,8.00000106 C11,7.66565 10.8329,7.35342 10.5547,7.16795 L7.5547,5.16795 Z"></path></svg> 120 121 122</button> 123<button x-show="$store.player.playing && $store.player.audio_url == 'https://media.transistor.fm/4f60b376/dd6508ea.mp3?src=site'" title="Pause Episode" role="button" @click.prevent="$dispatch('pause-episode')" class="player-button site-episode-play"> 124 125 <svg role="img" class="icon-pause" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><title>pause</title><path fill-rule="evenodd" d="M16,8 C16,12.4183 12.4183,16 8,16 C3.58172,16 0,12.4183 0,8 C0,3.58172 3.58172,0 8,0 C12.4183,0 16,3.58172 16,8 Z M5,6 C5,5.44772 5.44772,5 6,5 C6.55228,5 7,5.44772 7,6 L7,10 C7,10.5523 6.55228,11 6,11 C5.44772,11 5,10.5523 5,10 L5,6 Z M10,5 C9.4477,5 9,5.44772 9,6 L9,10 C9,10.5523 9.4477,11 10,11 C10.5523,11 11,10.5523 11,10
125L11,6 C11,5.44772 10.5523,5 10,5 Z"></path></svg> 126 127 128</button> 129 130 <hgroup> 131 <h2 class="site-episode-title">Storing Files in the Database w/ Bogdan Kharchenko and Skyler Katz</h2> 132 <span class="site-episode-metadata"> 133 <time>October 15, 2025</time> 134<span>/</span> 135<span>01:09:46</span><span>/</span><span>E33</span> 136 </span> 137 138 </hgroup> 139 </header> 140 141 <div class="site-two-col-grid"> 142 <div class="site-episode-grid-content"> 143 144 145 146 <nav class="site-episode-nav"> 147 <a href="/episodes/storing-files-in-the-database-w-bogdan-kharchenko-and-skyler-katz" class="site-episode-notes-link" title="View episode details">Show Notes</a> <span>/</span> 148 <a href="/episodes/storing-files-in-the-database-w-bogdan-kharchenko-and-skyler-katz/transcript" class="site-episode-transcript-link" title="View episode transcript">Transcript</a> 149 </nav> 150 151 152 <div class="site-content-text site-episode-show-notes"> 153 154 <div>Sometimes you have files or other large chunks of data that you need to associate with a record in your database. It might be convenient to just store that as base64-encoded data or HTML in a "longtext" column, but that can eventually cause issuesâespecially as the table grows. What other options are there?<br><br>In this episode of Over Engineered, we go back to the show's roots and try to find the absolute best solution to a problem we already have an acceptable solution for.</div> 155 156 157 158 <iframe class="site-video-embed" src="https://www.youtube-nocookie.com/embed/rOJFNR5Xn5w" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe> 159 160 161 162 163 </div> 164 165 166 <section id="bluesky-comments" data-bluesky-url="https://bsky.app/profile/did:plc:fzu63lqxi2nofr5oaedvmfbb/post/3m3aphww27e2d" data-bluesky-comments-enabled="true"></section> 167 168 169 170 <div class="site-episode-people"> 171 <h3>Creators and Guests</h3> 172 173 <div class="site-people"> 174 175 176 177<div class="site-person"> 178 <a href="/people/chris-morrell" title="Chris Morrell" class="site-person-avatar"> 179 180 <img src="https://img.transistorcdn.com/Ia72Joc2twgKsU2LJD_IFLf4TJ3R4ba1cSk9HBM3oFQ/rs:fill:0:0:1/w:400/h:400/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS9wZXJz/b24vMTM5ZDc4ODgt/MjUyMC00YjcyLWJk/NzQtNjRlYTFjYmQw/NTA1LzE3MDI1Nzk5/NDItaW1hZ2UuanBn.webp" alt="Chris Morrell" class="site-person-image"> 181 182 <div class="site-person-role">Host</div> 183 </a> 184 185 <div class="site-person-details"> 186 <a class="site-person-name" href="/people/chris-morrell" title="Chris Morrell">Chris Morrell</a> 187 188 <div class="site-person-bio">Father of two. CEO/CTO at InterNACHI. Host of Over Engineered.</div> 189 190 191 <div class="site-person-links"> 192 193 <a href="https://rtsn.dev/@chris" title="Mastodon" target="_mastodon"> 194 195 <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Mastodon</title><path d="M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z"/></svg> 196 197 198 </a> 199 200 <a href="https://bsky.app/profile/cmorrell.com" title="Bluesky" target="_bluesky"> 201 202 <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Bluesky</title><path d="M12 10.8c-1.087-2.114-4.046-6.053-6.798-7.995C2.566.944 1.561 1.266.902 1.565.139 1.908
2020 3.08 0 3.768c0 .69.378 5.65.624 6.479.815 2.736 3.713 3.66 6.383 3.364.136-.02.275-.039.415-.056-.138.022-.276.04-.415.056-3.912.58-7.387 2.005-2.83 7.078 5.013 5.19 6.87-1.113 7.823-4.308.953 3.195 2.05 9.271 7.733 4.308 4.267-4.308 1.172-6.498-2.74-7.078a8.741 8.741 0 0 1-.415-.056c.14.017.279.036.415.056 2.67.297 5.568-.628 6.383-3.364.246-.828.624-5.79.624-6.478 0-.69-.139-1.861-.902-2.206-.659-.298-1.664-.62-4.3 1.24C16.046 4.748 13.087 8.687 12 10.8Z"/></svg> 203 204 205 </a> 206 207 <a href="https://www.youtube.com/@cmorrell" title="Youtube" target="_youtube"> 208 209 <svg role="img" fill="#FF0000" class="icon-youtube" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>YouTube</title><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg> 210 211 212 </a> 213 214 <a href="https://github.com/inxilpro/" title="Github" target="_github"> 215 216 <svg role="img" viewBox="0 0 24 24" class="icon-github" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg> 217 218 219 </a> 220 221 <a href="https://cmorrell.com" title="Website" target="_website"> 222 223 <svg role="img" viewBox="0 0 20 20"><title>Website Link</title><path fill-rule="evenodd" d="M12.586 4.586a2 2 0 112.828 2.828l-3 3a2 2 0 01-2.828 0 1 1 0 00-1.414 1.414 4 4 0 005.656 0l3-3a4 4 0 00-5.656-5.656l-1.5 1.5a1 1 0 101.414 1.414l1.5-1.5zm-5 5a2 2 0 012.828 0 1 1 0 101.414-1.414 4 4 0 00-5.656 0l-3 3a4 4 0 105.656 5.656l1.5-1.5a1 1 0 10-1.414-1.414l-1.5 1.5a2 2 0 11-2.828-2.828l3-3z" clip-rule="evenodd"></path></svg> 224 225 226 </a> 227 228 </div> 229 </div> 230</div> 231 232 233 234 235<div class="site-person"> 236 <a href="/people/bogdan-kharchenko" title="Bogdan Kharchenko" class="site-person-avatar"> 237 238 <img src="https://img.transistorcdn.com/GxKe4Eg18OMe3pKNdD4ONfYrlmBY9K0QsCvkr1zkH_M/rs:fill:0:0:1/w:400/h:400/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS9wZXJz/b24vZWIwZmY1NGQt/M2M0Mi00NjgzLWJi/NmMtMWViNjBlYzZm/YzVlLzE3MDI1Nzk5/MTktaW1hZ2UuanBn.webp" alt="Bogdan Kharchenko" class="site-person-image"> 239 240 <div class="site-person-role">Guest</div> 241 </a> 242 243 <div class="site-person-details"> 244 <a class="site-person-name" href="/people/bogdan-kharchenko" title="Bogdan Kharchenko">Bogdan Kharchenko</a> 245 246 247 <div class="site-person-links"> 248 249 <a href="https://x.com/boggybot" title="Twitter" target="_twitter"> 250 251 <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>X</title><path d="M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z"/></svg> 252 253 254 </a> 255 256 </div> 257 </div> 258</div> 259 260 261 262 263<div class="site-person"> 264 <a href="/people/skyler-katz" title="Skyler Katz" class="site-person-avatar"> 265 266 <img src="https://img.transistorcdn.com/jHvrYs1YB2bMoE5JeBnG3t10b7Zd6tJXdGh9NRV0vmM/rs:fill:0:0:1/w:400/h:400/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS9wZXJz/b24vYTJmOWYyYjct/NWQ2Ni00Nzk2LWFh/MTktYmMwZDI2NTdi/OGYzLzE3MDI1Nzk4/ODQtaW1hZ2UuanBn.webp" alt="Skyler Katz" class="site-person-image"> 267 268 <div class="site-person-role">Guest</div> 269 </a> 270
271 <div class="site-person-details"> 272 <a class="site-person-name" href="/people/skyler-katz" title="Skyler Katz">Skyler Katz</a> 273 274 <div class="site-person-bio">YIMBY | PHP | Improv | Cycling | Civics | He/Him</div> 275 276 277 <div class="site-person-links"> 278 279 <a href="https://x.com/skylerkatz" title="Twitter" target="_twitter"> 280 281 <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>X</title><path d="M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z"/></svg> 282 283 284 </a> 285 286 <a href="https://mastodon.cloud/@skylerkatz" title="Mastodon" target="_mastodon"> 287 288 <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Mastodon</title><path d="M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z"/></svg> 289 290 291 </a> 292 293 </div> 294 </div> 295</div> 296 297 298 </div> 299 </div> 300 301 </div> 302 303 <div class="site-episode-grid-artwork"> 304 <img src="https://img.transistorcdn.com/OV6BR02O-rQW-wGuL2AGLtGMnib41UvXdTC1__mqoJs/rs:fill:0:0:1/w:800/h:800/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS82MTcz/ZTdkZDU3OGNhMjA2/ZjczMGZlMTMxMDRk/ZGM1NC5wbmc.webp" alt="Storing Files in the Database w/ Bogdan Kharchenko and Skyler Katz"> 305 </div> 306 307 <div class="site-episode-grid-subscribe"> 308 <h2 class="site-content-subheader"> 309 310 <svg role="img" class="icon-headphones" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>headphones</title><g><path d="M7,12a3,3,0,0,0-3,3v6a3,3,0,0,0,6,0V15A3,3,0,0,0,7,12Zm10,0a3,3,0,0,0-3,3v6a3,3,0,0,0,6,0V15A3,3,0,0,0,17,12ZM12,0A12,12,0,0,0,0,12v5a1,1,0,0,0,2,0V12a10,10,0,0,1,20,0v5a1,1,0,0,0,2,0V12A12,12,0,0,0,12,0Z"></path></g></svg> 311 312 313 <span>Listen Anywhere</span> 314 </h2> 315 <nav class="site-subscribe"> 316 <a href="https://podcasts.apple.com/us/podcast/over-engineered/id1671924478?uo=4" class="site-subscribe-link apple_podcasts" target="_apple_podcasts" title="Listen to Over Engineered on Apple Podcasts"> 317 <svg role="img" fill="#9933CC" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Apple Podcasts</title><path d="M5.34 0A5.328 5.328 0 000 5.34v13.32A5.328 5.328 0 005.34 24h13.32A5.328 5.328 0 0024 18.66V5.34A5.328 5.328 0 0018.66 0zm6.525 2.568c2.336 0 4.448.902 6.056 2.587 1.224 1.272 1.912 2.619 2.264 4.392.12.59.12 2.2.007 2.864a8.506 8.506 0 01-3.24 5.296c-.608.46-2.096 1.261-2.336 1.261-.088 0-.096-.091-.056-.46.072-.592.144-.715.48-.856.536-.224 1.448-.874 2.008-1.435a7.644 7.644 0 002.008-3.536c.208-.824.184-2.656-.048-3.504-.728-2.696-2.928-4.792-5.624-5.352-.784-.16-2.208-.16-3 0-2.728.56-4.984 2.76-5.672 5.528-.184.752-.184 2.584 0 3.336.456 1.832 1.64 3.512 3.192 4.512.304.2.672.408.824.472.336.144.408.264.472.856.04.36.03.464-.056.464-.056 0-.464-.176-.896-.384l-.04-.03c-2.472-1.216-4.056-3.274-4.632-6.012-.144-.706-.168-2.392-.03-3.04.36-1.74 1.048-3.1 2.192-4.304 1.648-1.737 3.768-2.656 6.128-2.656zm.134 2.81c.409.004.803.04 1.106.106 2.784.62 4.76 3.408 4.376 6.174-.152 1.114-.536 2.03-1.216 2.88-.336.43-1.152 1.15-1.296 1.15-.023 0-.048-.272-.048-.603v-.605l.416-.496c1.568-1.878 1.456-4.502-.256-6.224-.664-.67-1.432-1.064-2.424-1.246-.64-.118-.776-.118-1.448-.008-1.02.167-1.81.562-2.512 1.256-1.72 1.704-1.832 4.342-.264 6.222l.413.496v.608c0 .336-.027.608-.06.608-.03 0-.264-.16-.512-.36l-.034-.011c-.832-.664-1.568-1.842-1.872-2.997-.184-.698-.184-2.024.008-2.72.504-1.878 1.888-3.335 3.808-4.019.41-.145 1.133-.22 1.814-.211zm-.13 2.99c.31 0 .62.06.844.178.488.253.888.745 1.04 1.259.464 1.578-1.208 2.96-2.72 2.254h-.015c-.712-.331-1.096-.956-1.104-1.77 0-.733.408-1.371 1.112-1.745.224-.117.534-.176.844-.176zm-.011 4.728c.988-.004 1.706.349 1.97.97.198.464.124 1.932-.218 4.302-.232 1.656-.36 2.074-.68 2.356-.44.39-1.064.498-1.656.288h-.003c-.716-.257-.87-.605-1.164-2.644-.341-2.37-.416-3.838-.218-4.302.262-.616.974-.966 1.97-.97z"/></svg> 318 319<label>
320 <span>Listen On</span> 321 <b>Apple Podcasts</b> 322 </label> 323 </a><a href="https://open.spotify.com/show/5heRwfbviFyfUisWjvNDpK" class="site-subscribe-link spotify" target="_spotify" title="Listen to Over Engineered on Spotify"> 324 <svg role="img" fill="#1DB954" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Spotify</title><path d="M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.66 0 12 0zm5.521 17.34c-.24.359-.66.48-1.021.24-2.82-1.74-6.36-2.101-10.561-1.141-.418.122-.779-.179-.899-.539-.12-.421.18-.78.54-.9 4.56-1.021 8.52-.6 11.64 1.32.42.18.479.659.301 1.02zm1.44-3.3c-.301.42-.841.6-1.262.3-3.239-1.98-8.159-2.58-11.939-1.38-.479.12-1.02-.12-1.14-.6-.12-.48.12-1.021.6-1.141C9.6 9.9 15 10.561 18.72 12.84c.361.181.54.78.241 1.2zm.12-3.36C15.24 8.4 8.82 8.16 5.16 9.301c-.6.179-1.2-.181-1.38-.721-.18-.601.18-1.2.72-1.381 4.26-1.26 11.28-1.02 15.721 1.621.539.3.719 1.02.419 1.56-.299.421-1.02.599-1.559.3z"/></svg> 325 326<label> 327 <span>Listen On</span> 328 <b>Spotify</b> 329 </label> 330 </a><a href="https://overcast.fm/itunes1671924478" class="site-subscribe-link overcast" target="_overcast" title="Listen to Over Engineered on Overcast"> 331 <svg role="img" fill="#FC7E0F" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Overcast</title><path d="M12 24C5.389 24.018.017 18.671 0 12.061V12C0 5.35 5.351 0 12 0s12 5.35 12 12c0 6.649-5.351 12-12 12zm0-4.751l.9-.899-.9-3.45-.9 3.45.9.899zm-1.15-.05L10.4 20.9l1.05-1.052-.6-.649zm2.3 0l-.6.601 1.05 1.051-.45-1.652zm.85 3.102L12 20.3l-2 2.001c.65.1 1.3.199 2 .199s1.35-.05 2-.199zM12 1.5C6.201 1.5 1.5 6.201 1.5 12c-.008 4.468 2.825 8.446 7.051 9.899l2.25-8.35c-.511-.372-.809-.968-.801-1.6 0-1.101.9-2.001 2-2.001s2 .9 2 2.001c0 .649-.301 1.2-.801 1.6l2.25 8.35c4.227-1.453 7.06-5.432 7.051-9.899 0-5.799-4.701-10.5-10.5-10.5zm6.85 15.7c-.255.319-.714.385-1.049.15-.313-.207-.4-.628-.194-.941.014-.021.028-.04.044-.06 0 0 1.35-1.799 1.35-4.35s-1.35-4.35-1.35-4.35c-.239-.289-.198-.719.091-.957.02-.016.039-.031.06-.044.335-.235.794-.169 1.049.15.1.101 1.65 2.15 1.65 5.2S18.949 17.1 18.85 17.2zm-3.651-1.95c-.3-.3-.249-.85.051-1.15 0 0 .75-.799.75-2.1s-.75-2.051-.75-2.1c-.3-.301-.3-.801-.051-1.15.232-.303.666-.357.969-.125.029.022.056.047.082.074C16.301 8.75 17.5 10 17.5 12s-1.199 3.25-1.25 3.301c-.301.299-.75.25-1.051-.051zm-6.398 0c-.301.301-.75.35-1.051.051C7.699 15.199 6.5 14 6.5 12s1.199-3.199 1.25-3.301c.301-.299.801-.299 1.051.051.3.3.249.85-.051 1.15 0 .049-.75.799-.75 2.1s.75 2.1.75 2.1c.3.3.351.799.051 1.15zm-2.602 2.101c-.335.234-.794.169-1.05-.15C5.051 17.1 3.5 15.05 3.5 12s1.551-5.1 1.649-5.2c.256-.319.715-.386 1.05-.15.313.206.4.628.194.941-.013.02-.028.04-.043.059C6.35 7.65 5 9.449 5 12s1.35 4.35 1.35 4.35c.25.3.15.75-.151 1.001z"/></svg> 332 333<label> 334 <span>Listen On</span> 335 <b>Overcast</b> 336 </label> 337 </a><a href="https://pca.st/itunes/1671924478" class="site-subscribe-link pocket_casts" target="_pocket_casts" title="Listen to Over Engineered on Pocket Casts"> 338 <svg role="img" fill="#F43E37" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Pocket Casts</title><path d="M12,0C5.372,0,0,5.372,0,12c0,6.628,5.372,12,12,12c6.628,0,12-5.372,12-12 C24,5.372,18.628,0,12,0z M15.564,12c0-1.968-1.596-3.564-3.564-3.564c-1.968,0-3.564,1.595-3.564,3.564 c0,1.968,1.595,3.564,3.564,3.564V17.6c-3.093,0-5.6-2.507-5.6-5.6c0-3.093,2.507-5.6,5.6-5.6c3.093,0,5.6,2.507,5.6,5.6H15.564z M19,12c0-3.866-3.134-7-7-7c-3.866,0-7,3.134-7,7c0,3.866,3.134,7,7,7v2.333c-5.155,0-9.333-4.179-9.333-9.333 c0-5.155,4.179-9.333,9.333-9.333c5.155,0,9.333,4.179,9.333,9.333H19z"/></svg> 339 340<label> 341 <span>Listen On</span> 342 <b>Pocket Casts</b> 343 </label> 344 </a><a href="https://music.amazon.com/podcasts/ff174916-71f8-431c-a28a-5505ff03d308" class="site-subscribe-link amazon_music" target="_amazon_music" title="Listen to Over Engineered on Amazon Music"> 345 <svg role="img" viewBox="2.167 .438 251.038 259.969" xmlns="http://www.w3.org/2000/svg"><title>Amazon Music</title><g fill="none" fill-rule="evenodd"><path d="m221.503 210.324c-105.235 50.083-170.545 8.18-212.352-17.271-2.587-1.604-6.984.375-3.169 4.757 13.928 16.888 59.573 57.593 119.153 57.593 59.621 0 95.09-32.532 99.527-38.207 4.407-5.627 1.294-8.731-3.16-6.872zm29.555-16.322c-2.826-3.68-17.184-4.366-26.22-3.256-9.05 1.078-22.634 6.609-21.453 9.93.606 1.244 1.843.686 8.06.127 6.234-.622 23.698-2.826 27.337 1.931 3.656 4.79-5.57 27.608-7.255 3
3451.288-1.628 3.68.622 4.629 3.68 2.178 3.016-2.45 8.476-8.795 12.14-17.774 3.639-9.028 5.858-21.622 3.71-24.424z" fill="#4BA5DC" fill-rule="nonzero"/><path d="m150.744 108.13c0 13.141.332 24.1-6.31 35.77-5.361 9.489-13.853 15.324-23.341 15.324-12.952 0-20.495-9.868-20.495-24.432 0-28.75 25.76-33.968 50.146-33.968zm34.015 82.216c-2.23 1.992-5.456 2.135-7.97.806-11.196-9.298-13.189-13.615-19.356-22.487-18.502 18.882-31.596 24.527-55.601 24.527-28.37 0-50.478-17.506-50.478-52.565 0-27.373 14.85-46.018 35.96-55.126 18.313-8.066 43.884-9.489 63.43-11.718v-4.365c0-8.018.616-17.506-4.08-24.432-4.128-6.215-12.003-8.777-18.93-8.777-12.856 0-24.337 6.594-27.136 20.257-.57 3.037-2.799 6.026-5.835 6.168l-32.735-3.51c-2.751-.618-5.787-2.847-5.028-7.07 7.543-39.66 43.36-51.616 75.43-51.616 16.415 0 37.858 4.365 50.81 16.795 16.415 15.323 14.849 35.77 14.849 58.02v52.565c0 15.798 6.547 22.724 12.714 31.264 2.182 3.036 2.657 6.69-.095 8.966-6.879 5.74-19.119 16.415-25.855 22.393l-.095-.095" fill="#000"/><path d="m221.503 210.324c-105.235 50.083-170.545 8.18-212.352-17.271-2.587-1.604-6.984.375-3.169 4.757 13.928 16.888 59.573 57.593 119.153 57.593 59.621 0 95.09-32.532 99.527-38.207 4.407-5.627 1.294-8.731-3.16-6.872zm29.555-16.322c-2.826-3.68-17.184-4.366-26.22-3.256-9.05 1.078-22.634 6.609-21.453 9.93.606 1.244 1.843.686 8.06.127 6.234-.622 23.698-2.826 27.337 1.931 3.656 4.79-5.57 27.608-7.255 31.288-1.628 3.68.622 4.629 3.68 2.178 3.016-2.45 8.476-8.795 12.14-17.774 3.639-9.028 5.858-21.622 3.71-24.424z" fill="#4BA5DC" fill-rule="nonzero"/><path d="m150.744 108.13c0 13.141.332 24.1-6.31 35.77-5.361 9.489-13.853 15.324-23.341 15.324-12.952 0-20.495-9.868-20.495-24.432 0-28.75 25.76-33.968 50.146-33.968zm34.015 82.216c-2.23 1.992-5.456 2.135-7.97.806-11.196-9.298-13.189-13.615-19.356-22.487-18.502 18.882-31.596 24.527-55.601 24.527-28.37 0-50.478-17.506-50.478-52.565 0-27.373 14.85-46.018 35.96-55.126 18.313-8.066 43.884-9.489 63.43-11.718v-4.365c0-8.018.616-17.506-4.08-24.432-4.128-6.215-12.003-8.777-18.93-8.777-12.856 0-24.337 6.594-27.136 20.257-.57 3.037-2.799 6.026-5.835 6.168l-32.735-3.51c-2.751-.618-5.787-2.847-5.028-7.07 7.543-39.66 43.36-51.616 75.43-51.616 16.415 0 37.858 4.365 50.81 16.795 16.415 15.323 14.849 35.77 14.849 58.02v52.565c0 15.798 6.547 22.724 12.714 31.264 2.182 3.036 2.657 6.69-.095 8.966-6.879 5.74-19.119 16.415-25.855 22.393l-.095-.095" fill="#000"/></g></svg> 346 347<label> 348 <span>Listen On</span> 349 <b>Amazon Music</b> 350 </label> 351 </a><a href="https://www.youtube.com/playlist?list=PLfp8k2-5wAK7W2oR7IlRDSbFDRzz8IW5z" class="site-subscribe-link youtube" target="_youtube" title="Listen to Over Engineered on YouTube"> 352 <svg role="img" fill="#FF0000" class="icon-youtube" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>YouTube</title><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg> 353 354<label> 355 <span>Listen On</span> 356 <b>YouTube</b> 357 </label> 358 </a> 359 </nav> 360 <a href="/subscribe" class="site-simple-link">More Options »</a> 361 </div> 362 </div> 363</div> 364 365 </section> 366 <footer class="site-footer"> 367 <div class="site-footer-container"> 368 <div class="site-social-credits"> 369 370 371 <nav class="site-social"> 372 373 374 375 376 377 378 <a href="https://www.youtube.com/playlist?list=PLfp8k2-5wAK7W2oR7IlRDSbFDRzz8IW5z" class="site-social-link site-social-youtube" target="_youtube" title="View Over Engineered on Youtube"> 379 380 <svg role="img" fill="#FF0000" class="icon-youtube" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>YouTube</title><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg> 381 382 383 </a> 384 385 386 387 388 389 390 <a href="https://bsky.app/profile/overengineered.fm" class="site-social-link site-social-bluesky" target="_bluesky" title="View Over Engineered on Bluesky"> 391 392 <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Bluesky</title><path d="M12 10.8c-1.087-2.114-4.046-6.053-6.798-7.995C2.566.944 1.561 1.266.902 1.565.139 1.908
3920 3.08 0 3.768c0 .69.378 5.65.624 6.479.815 2.736 3.713 3.66 6.383 3.364.136-.02.275-.039.415-.056-.138.022-.276.04-.415.056-3.912.58-7.387 2.005-2.83 7.078 5.013 5.19 6.87-1.113 7.823-4.308.953 3.195 2.05 9.271 7.733 4.308 4.267-4.308 1.172-6.498-2.74-7.078a8.741 8.741 0 0 1-.415-.056c.14.017.279.036.415.056 2.67.297 5.568-.628 6.383-3.364.246-.828.624-5.79.624-6.478 0-.69-.139-1.861-.902-2.206-.659-.298-1.664-.62-4.3 1.24C16.046 4.748 13.087 8.687 12 10.8Z"/></svg> 393 394 395 </a> 396 397 398 399 400 </nav> 401 402 <section class="site-credits"> 403 404 <span class="site-copyright">Copyright 2023-2025 Chris Morrell</span> 405 </section> 406 </div> 407 408 </div> 409 <nav class="site-footer-nav"> 410 411 <a title="Home" class="" href="/">Home</a> 412 <a title="Episodes" class="current" href="/episodes">Episodes</a> 413 <a title="People" class="" href="/people">People</a> 414 <a title="â¤ï¸ on Ripple.fm" target="_blank" class="" href="https://ripple.fm/podcasts/over-engineered-1671924478">â¤ï¸ on Ripple.fm</a> 415 <a title="Subscribe" class="" href="/subscribe">Subscribe</a> 416 417 </nav> 418 </footer> 419 </section> 420 421 <div class="site-powered-by"> 422 <a href="https://transistor.fm" target="_transistor" title="Transistor.fm - Podcast Hosting and Analytics"> 423 424 <span>Broadcast by</span> 425 426 427 <svg class="transistor-logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 547 144"><title>transistor logo</title><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="transistor-horizontal-logo" fill-rule="nonzero" fill="#FFFFFF"><g transform="translate(191.000000, 42.000000)"><polygon points="0.7 10.4 0.7 1.8 38.6 1.8 38.6 10.4 24.5 10.4 24.5 58.3 14.7 58.3 14.7 10.4"></polygon><path d="M63.3,26.2 C62.1,26 60.7,25.8 58.7,25.8 C52.4,25.8 48.7,29.9 48.7,38.2 L48.7,58.2 L39.4,58.2 L39.4,18.6 L48.5,18.6 L48.5,24.2 L48.7,24.2 C50.5,20.8 54.5,17.3 59.8,17.3 C61.3,17.3 62.3,17.4 63.3,17.5 L63.3,26.2 L63.3,26.2 Z"></path><path d="M107.8,58.2 L98.8,58.2 L98.8,53.2 L98.6,53.2 C95.9,56.6 91.6,59.7 85,59.7 C76.1,59.7 66,52.6 66,38.4 C66,25.8 74.9,17.4 85.7,17.4 C92.3,17.4 96.3,20.9 98.7,24 L98.9,24 L98.9,18.6 L107.9,18.6 L107.9,58.2 L107.8,58.2 Z M87.4,51.5 C93.5,51.5 99.2,46.2 99.2,38.6 C99.2,30.6 94,25.3 87.5,25.3 C79.3,25.3 75.4,31.9 75.4,38.4 C75.4,45 79.2,51.5 87.4,51.5 Z"></path><path d="M118.6,18.6 L127.8,18.6 L127.8,23.6 L128,23.6 C131.1,19.1 135.7,17.3 140.1,17.3 C148.3,17.3 155.5,22.7 155.5,35.4 L155.5,58.2 L146.2,58.2 L146.2,35.9 C146.2,29.1 143,25.5 137.7,25.5 C131.9,25.5 127.9,29.6 127.9,37.3 L127.9,58.3 L118.6,58.3 L118.6,18.6 L118.6,18.6 Z"></path><path d="M183.6,28.8 C183.2,25.9 181,24 178.3,24 C175.1,24 173.3,26 173.3,28.2 C173.3,30.6 174.5,32.3 181.4,34.6 C189.9,37.3 192.9,41.7 192.9,47.3 C192.9,54.6 187.4,59.7 178.3,59.7 C168.8,59.7 164.1,54.5 163.4,47.1 L172,47.1 C172.4,50.4 174.4,52.9 178.5,52.9 C182,52.9 184,50.7 184,48 C184,45 182.3,43.1 175.7,40.9 C168.3,38.5 164.5,34.8 164.5,28.6 C164.5,22.1 169.6,17.3 178,17.3 C186.5,17.3 191,22.3 192,28.8 L183.6,28.8 L183.6,28.8 Z"></path><path d="M201,0.4 L211.3,0.4 L211.3,9.8 L201,9.8 L201,0.4 Z M201.5,18.6 L210.8,18.6 L210.8,58.3 L201.5,58.3 L201.5,18.6 Z"></path><path d="M239.5,28.8 C239.1,25.9 236.9,24 234.2,24 C231,24 229.2,26 229.2,28.2 C229.2,30.6 230.4,32.3 237.3,34.6 C245.8,37.3 248.8,41.7 248.8,47.3 C248.8,54.6 243.3,59.7 234.2,59.7 C224.7,59.7 220,54.5 219.3,47.1 L227.9,47.1 C228.3,50.4 230.3,52.9 234.4,52.9 C237.9,52.9 239.9,50.7 239.9,48 C239.9,45 238.2,43.1 231.6,40.9 C224.2,38.5 220.4,34.8 220.4,28.6 C220.4,22.1 225.5,17.3 233.9,17.3 C242.4,17.3 246.9,22.3 247.9,28.8 L239.5,28.8 L239.5,28.8 Z"></path><path d="M252.8,18.6 L257.8,18.6 L257.8,5.9 L267.1,5.9 L267.1,18.6 L277,18.6 L277,26.4 L267,26.4 L267,44.1 C267,49.5 268.7,51 272.5,51 C274.1,51 275.9,50.7 277.3,50.3 L277.3,57.8 C275.2,58.4 272.6,58.7 270.3,58.7 C260.4,58.7 257.8,52.7 257.8,44.6 L257.8,26.4 L252.8,26.4 L252.8,18.6 Z"></path><path d="M302.3,17.3 C314.7,17.3 323.5,26.4 323.5,38.4 C323.5,50.1 314.6,59.7 302.3,59.7 C290.2,59.7 281.1,50.4 281.1,38.4 C281.1,26.1 290.3,17.3 302.3,17.3 Z M302.3,51.4 C309.3,51.4 314.1,45.8 314.1,38.4 C314.1,31.4 309.6,25.5 302.3,25.5 C295.2,25.5 290.5,31 290.5,38.4 C290.5,46 295.9,51.4 302.3,51.4 Z"></path><path d="M350.9,25.8 C344.6,25.8 340.9,29.9 340.9,38.2 L340.9,58.2 L331.6,58.2 L331.6,18.6 L340.7,18.6 L340.7,24.2 L340.9,24.2 C342.7,20.8 346.7,17.3 352,17.3 C353.5,17.3 354.5,17.4 355.5,17.5 L355.5,26.2 C354.3,26 352.9,25.8 350.9,25.8 Z"></path></g><g><g transform="translate(24.000000, 24.000000)"><path d="M48,95.9 C45.4,95.9 43.2,93.8 43.2,91.1 L43.2,4.9 C43.2,2.3 45.3,0.1 48,0.1 C50.6,0.1 52.8,2.2 52.8,4.9 L52.8,91.1 C52.8,93.7 50.6,95.9 48,95.9 Z"></path><path d="M28,52.8 L5,52.8 C2.4,52.8 0.2,50.7 0.2,48 C0.2,45.3 2.3,43.2 5,43.2 L28,43.2 C30.6,43.2 32.8,45.3 32.8,48 C32.8,50.7 30.6,52.8 28,52.8 Z"></path><path d="M91.1,52.8 L68,52.8 C65.4,52.8 63.2,50.7 63.2,48 C63.2,45.3 65.3,43.2 68,43.2 L91,43.2 C93.6,43.2 95.8,45.3 95.8,48 C95.8,50.7 93.7,52.8 91.1,52.8 Z"></path></g><path d="M72,144 C32.3,144 0,111.7 0,72 C0,32.3 32.3,0 72,0 C111.7,0 144,32.3 144,72 C144,111.7 111.7,144 72,144 Z M72,9.6 C37.6,9.6 9.6,37.6 9.6,72 C9.6,106.4 37.6,134.4 72,134.4 C106.4,134.4 134.4,106.4 134.4,72 C134.4,37.6 106.4,9.6 72,9.6 Z"></path></g></g></g></svg> 428 429 430 </a> 431</div> 432 433 434 </main> 435 <span id="default-audio" data-default-audio-url="https://media.transistor.fm/4f60b376/dd6508ea.mp3?src=site" data-default-audio-title="Storing Files in the Database w/ Bogdan Kharchenko and Skyler Katz" data-default-audio-duration="4186"></span> 436<footer 437 data-turbo-permanent 438 id="site-sticky-player" 439 class="site-sticky-player" 440 aria-label="Audio Player" 441 tabindex="0" 442 x-data="transistor.audioPlayer()"
443 @play-episode.window="playEpisode($event.detail)" 444 @pause-episode.window="pause; $store.player.playing = false" 445 @timejump.window="seekToSeconds($event.detail.timestamp); active = true" 446 :class="{ 'open': active }" 447 :style="{ 448 '--player-progress': `${progressPercentage()}%`, 449 }" 450> 451 <audio 452 x-ref="audio" 453 preload="none" 454 @volumechange="updateVolume" 455 @waiting="waiting" 456 @canplaythrough="canPlayThrough = true" 457 @play="play(false, true); $store.player.playing = true" 458 @pause="pause; $store.player.playing = false" 459 @ended="reset; $store.player.playing = false" 460 @loadedmetadata="init; $store.player.audio_url = $refs.audio.src" 461 @keyup.document.right="seekBySeconds(30)" 462 @keyup.document.left="seekBySeconds(-10)" 463 @keyup.document.m="toggleMute" 464 @keyup.document.s="toggleSpeed" 465 > 466 </audio> 467 <nav class="site-sticky-player-buttons"> 468 <button x-show="!playing && !loading" title="Play" @click="play; $store.player.playing = true" class="player-button site-sticky-player-play"> 469 470 <svg role="img" class="icon-play" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><title>play</title><path fill-rule="evenodd" d="M8,16 C12.4183,16 16,12.4183 16,8 C16,3.58172 12.4183,0 8,0 C3.58172,0 0,3.58172 0,8 C0,12.4183 3.58172,16 8,16 Z M7.5547,5.16795 C7.24784,4.96338 6.8533,4.94431 6.52814,5.11833 C6.20298,5.29235 6,5.63121 6,6.00000106 L6,10.0000011 C6,10.3688 6.20298,10.7077 6.52814,10.8817 C6.8533,11.0557 7.24784,11.0366 7.5547,10.8321 L10.5547,8.8321 C10.8329,8.6466 11,8.3344 11,8.00000106 C11,7.66565 10.8329,7.35342 10.5547,7.16795 L7.5547,5.16795 Z"></path></svg> 471 472 473 </button> 474 <button x-show="playing && !loading" @click="pause; $store.player.playing = false" title="Pause" class="player-button site-sticky-player-pause"> 475 476 <svg role="img" class="icon-pause" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><title>pause</title><path fill-rule="evenodd" d="M16,8 C16,12.4183 12.4183,16 8,16 C3.58172,16 0,12.4183 0,8 C0,3.58172 3.58172,0 8,0 C12.4183,0 16,3.58172 16,8 Z M5,6 C5,5.44772 5.44772,5 6,5 C6.55228,5 7,5.44772 7,6 L7,10 C7,10.5523 6.55228,11 6,11 C5.44772,11 5,10.5523 5,10 L5,6 Z M10,5 C9.4477,5 9,5.44772 9,6 L9,10 C9,10.5523 9.4477,11 10,11 C10.5523,11 11,10.5523 11,10 L11,6 C11,5.44772 10.5523,5 10,5 Z"></path></svg> 477 478 479 </button> 480 <span x-show="loading" class="site-sticky-player-loading"> 481 <svg class="site-sticky-player-spinner-background" fill="currentColor" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M8,16 C12.4183,16 16,12.4183 16,8 C16,3.58172 12.4183,0 8,0 C3.58172,0 0,3.58172 0,8 C0,12.4183 3.58172,16 8,16 Z"></path></svg> 482 <span class="site-sticky-player-spinner"> 483 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"> 484 <circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle> 485 <path fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path> 486 </svg> 487 </span> 488 </span> 489 </nav> 490 491 <div class="site-sticky-player-progress-controls"> 492 <div class="site-sticky-player-currently-playing"> 493 <div class="site-sticky-player-title" x-text="title"></div> 494 </div> 495 496 <div class="site-sticky-player-progress" :class="{ 'seeking-by-touch': seekingByTouch }" role="progressbar" > 497 <div title="Seek within Episode" role="button" class="site-sticky-player-progress-bar" @click="seekTo" @mousemove="hoverSeekTo" @touchmove.prevent="touchDragSeekTo" @touchend="touchDragEnd"> 498 <span></span> 499 </div> 500 <t class="seek-tooltip" x-text="formatTime(duration * seekHoverPercent)" :style="`left: ${seekHoverPercent * 100}%`"></t> 501 </div> 502 503 <div class="site-sticky-player-controls-duration"> 504 <div class="site-sticky-player-controls"> 505 <button @click="seekBySeconds(-10)" title="Rewind 10 seconds" class="site-sticky-player-rewind"> 506 507 <svg role="img" class="icon-rewind" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>rewind</title>
507<path d="M19.419962,2.57 L20.789962,1.21 L20.789962,1.20999999 C21.066111,0.931608989 21.064293,0.482064989 20.7859019,0.205919989 C20.6539209,0.0750019893 20.4758579,0.00106998926 20.2899619,2.98926377e-06 L14.9999619,2.98926377e-06 L14.9999619,5.29000299 L14.9999619,5.2900038 C15.0022111,5.6821198 15.3219069,5.9981688 15.7140229,5.9959198 C15.8999189,5.99485348 16.0779819,5.9209207 16.2099629,5.7900028 L17.9999629,4.00000299 L17.9999633,4.00000299 C22.4115033,7.32267305 23.2942133,13.5924931 19.9715433,18.0040031 C16.6488733,22.4155431 10.3790533,23.2982531 5.96754326,19.9755831 C1.55600326,16.6529131 0.67329326,10.3830931 3.99596326,5.97158305 C5.50733326,3.96493305 7.71859326,2.60063305 10.1899933,2.15000305 L10.1899934,2.15000303 C10.7422784,2.05059173 11.1094044,1.52228803 11.0099934,0.970003035 C10.9105821,0.417718035 10.3822784,0.0505920346 9.82999335,0.150003035 L9.82999275,0.150003146 C3.31278275,1.35360315 -0.994707248,7.61255315 0.208852752,14.1298031 C1.41245275,20.6470131 7.67140275,24.9545031 14.1886528,23.7509431 C20.7058628,22.5473431 25.0133528,16.2883931 23.8097928,9.77114315 C23.2799238,6.90203315 21.7229128,4.32424315 19.4300328,2.52000315 L19.419962,2.57 Z M8.99996191,16 L8.99996191,16 C9.55224696,16 9.99996191,15.552285 9.99996191,15 L9.99996191,8 L6.99996191,8 L6.99996191,8 C6.44767691,8 5.99996191,8.447715 5.99996191,9 C5.99996191,9.552285 6.44767691,10 6.99996191,10 L7.99996191,10 L7.99996191,15 L7.99996191,15 C7.99996191,15.5522848 8.44767691,16 8.99996191,16 C8.99996191,16 8.99996191,16 8.99996191,16 L8.99996191,16 Z M13.9999619,16 L13.9999619,16 C15.6568119,16 16.9999619,14.65685 16.9999619,13 L16.9999619,11 L16.9999619,11 C16.9999619,9.34315 15.6568119,8 13.9999619,8 C12.3431119,8 10.9999619,9.34315 10.9999619,11 L10.9999619,13 L10.9999619,13 C10.9999619,14.6568505 12.3431119,16 13.9999619,16 C13.9999619,16 13.9999619,16 13.9999619,16 L13.9999619,16 Z M12.999962,11.0000002 L12.999962,11.0000002 C12.999962,10.4477152 13.447677,10.0000002 13.999962,10.0000002 C14.552247,
50710.0000002 14.999962,10.4477152 14.999962,11.0000002 C14.999962,11.0000002 14.999962,11.0000002 14.999962,11.0000002 L14.999962,13.0000002 L14.999962,13.0000002 C14.999962,13.5522852 14.552247,14.0000002 13.999962,14.0000002 C13.447677,14.0000002 12.999962,13.5522852 12.999962,13.0000002 L12.999962,11.0000002 Z"></path></svg> 508 509 510 </button> 511 <button @click="toggleSpeed" title="Change Playback Speed" class="site-sticky-player-speed" x-text="`${displaySpeed}x`"></button> 512 <button @click="seekBySeconds(30)" title="Fast Forward 30 seconds" class="site-sticky-player-fastforward"> 513 514 <svg role="img" class="icon-fastforward" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>fast forward</title><path d="M15.0000099,16 L15.0000099,16 C16.6568599,16 18.0000099,14.65685 18.0000099,13 L18.0000099,11 L18.0000099,11 C18.0000099,9.34315 16.6568599,8 15.0000099,8 C13.3431599,8 12.0000099,9.34315 12.0000099,11 L12.0000099,13 L12.0000099,13 C12.0000099,14.6568505 13.3431599,16 15.0000099,16 C15.0000099,16 15.0000099,16 15.0000099,16 L15.0000099,16 Z M14.00001,11.0000002 L14.00001,11.0000002 C14.00001,10.4477152 14.447725,10.0000002 15.00001,10.0000002 C15.552295,10.0000002 16.00001,10.4477152 16.00001,11.0000002 C16.00001,11.0000002 16.00001,11.0000002 16.00001,11.0000002 L16.00001,13.0000002 L16.00001,13.0000002 C16.00001,13.5522852 15.552295,14.0000002 15.00001,14.0000002 C14.447725,14.0000002 14.00001,13.5522852 14.00001,13.0000002 L14.00001,11.0000002 Z M7.00000983,7.99999762 L7.00000983,7.99999762 C6.44772496,7.99999762 6.00000983,8.447715 6.00000983,8.99999762 C6.00000983,9.552285 6.44772496,9.99999762 7.00000983,9.99999762 L8.50000983,9.99999762 L8.50000983,9.99999762 C8.77615193,9.99999762 9.00000983,10.223858 9.00000983,10.4999976 C9.00000983,10.776142 8.77615193,10.9999976 8.50000983,10.9999976 L7.00000983,10.9999976 L7.00000983,10.9999976 C6.44772489,10.9999976 6.00000983,11.447715 6.00000983,11.9999976 C6.00000983,12.552285 6.44772489,12.9999976 7.00000983,12.9999976 L8.50000983,12.9999976 L8.50000983,12.9999976 C8.77615187,12.9999976 9.00000983,13.223858 9.00000983,13.4999976 C9.00000983,13.776142 8.77615187,13.9999976 8.50000983,13.9999976 L7.00000983,13.9999976 L7.00000983,13.9999976 C6.44772483,13.9999976 6.00000983,14.447715 6.00000983,14.9999976 C6.00000983,15.552285 6.44772483,15.9999976 7.00000983,15.9999976 L8.50000983,15.9999976 L8.50000983,15.9999976 C9.88071972,15.9999976 11.0000098,14.88071 11.0000098,13.4999976 L11.0000098,13.5000078 C10.9949875,12.9583018 10.8162208,12.4325078 10.4900148,12.0000078 L10.4900147,12.0000079 C10.8162217,11.5675019 10.9949887,11.0417099 11.0000098,10.4999976 L11.0000098,10.4999976 C11.0000098,9.11928762 9.88071974,7.99999762 8.50000983,7.99999762 C8.50000983,7.99999762 8.50000983,7.99999762 8.50000983,7.99999762 L7.00000983,7.99999762 Z M14.18001,0.2 L14.1800101,0.200000017 C13.6277251,0.100588717 13.0994201,0.467715017 13.0000101,1.02000002 C12.9005988,1.57228502 13.2677251,2.10059002 13.8200101,2.20000002 L13.8200112,2.20000022 C19.2469712,3.22467022 22.8157312,8.45476022 21.7910512,13.8817002 C20.7663812,19.3086602 15.5362912,22.8774202 10.1093512,21.8527402 C4.68239119,20.8280702 1.11363119,15.5979802 2.13831119,10.1710402 C2.60451319,7.70190022 3.98319119,5.49877022 6.00003119,4.00000013 L7.79003119,5.79000022 L7.79003121,5.79000024 C8.06842221,6.06614924 8.51796621,6.06433124 8.79411121,5.78594013 C8.92502921,5.65395913 8.99896121,5.47589613 9.00002821,5.29000013 L9.00002821,1.31893483e-07 L3.71002821,1.31893483e-07 L3.71002824,1.31893483e-07 C3.31791224,0.00224888189 3.00186324,0.321944132 3.00411124,0.714060132 C3.00517734,0.899956132 3.07910994,1.07801913 3.21002824,1.21000013 L4.58002824,2.57000013 L4.58002779,2.57000049 C-0.628262215,6.66833049 -1.52806221,14.2128005 2.57026779,19.4211005 C6.66859779,24.6293905 14.2130678,25.5291905 19.4213678,21.4308605 C24.6296578,17.3325305 25.5294578,9.78806049 21.4311278,4.57976049 C19.6268878,2.28688049 17.0490978,0.729870486 14.1799878,0.200000486 L14.18001,0.2 Z"></path></svg> 515 516 517 </button> 518 </div> 519 <div class="site-sticky-player-duration"> 520 <div x-text="formatTime(currentTime)"></div> 521 <div>|</div>
522 <div :datetime="formatTime(duration)" x-text="formatTime(duration)"></div> 523 </div> 524 </div> 525 </div> 526</footer> 527 528
528<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"4a26c4a6f9a34cb9bd8daa49474c59a9","r":1,"spa":2}' crossorigin="anonymous"></script>
528 529</body> 530</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.