PageSourceSearch

https://overengineered.fm/episodes/storing-files-in-the-database-w-bogdan-kharchenko-and-skyler-katz

html overengineered.fm collected 2026-10-05 07:31:52 UTC 50,174 bytes, 530 lines download raw bytes

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 &quot;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 &quot;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 &quot;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 &raquo;</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.