PageSourceSearch

https://www.josephguadagno.net/about-joseph-guadagno/

html josephguadagno.net collected 2026-10-02 04:40:36 UTC 34,718 bytes, 891 lines download raw bytes

1
2
3<!doctype html>
4<!--
5  Minimal Mistakes Jekyll Theme 4.28.0 by Michael Rose
6  Copyright 2013-2026 Michael Rose - mademistakes.com | @mmistakes
7  Copyright 2024-2026 iBug - ibugone.com | @iBug
8  Free for personal and commercial use under the MIT license
9  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
10-->
11
12<html lang="en" class="no-js">
13  <head>
14    
15<meta charset="utf-8">
16
17
18<!-- begin _includes/seo.html --><title>About Joseph Guadagno - JosephGuadagno.net</title>
19<meta name="description" content="Vice President of Technology, Head of Engineering, Microsoft MVP, Driving Engineering Excellence through AI-Assisted Workflows &amp; GitHub Copilot, Scaling High-Performance, Remote-First Teams, Passionate about .NET, Azure, and Open Source, Speaker &amp; Mentor, Building the Future of Software Development">
20
21
22  <meta name="author" content="Joseph Guadagno">
23  
24
25
26<meta property="og:type" content="website">
27<meta property="og:locale" content="en_US">
28<meta property="og:site_name" content="JosephGuadagno.net">
29<meta property="og:title" content="About Joseph Guadagno">
30<meta property="og:url" content="https://www.josephguadagno.net/about-joseph-guadagno/">
31
32
33  <meta property="og:description" content="Vice President of Technology, Head of Engineering, Microsoft MVP, Driving Engineering Excellence through AI-Assisted Workflows &amp; GitHub Copilot, Scaling High-Performance, Remote-First Teams, Passionate about .NET, Azure, and Open Source, Speaker &amp; Mentor, Building the Future of Software Development">
34
35
36
37  <meta property="og:image" content="https://www.josephguadagno.net/assets/images/pages/about-joseph-guadagno.png">
38  
39
40
41
42  <meta name="twitter:site" content="@jguadagno">
43  <meta name="twitter:title" content="About Joseph Guadagno">
44  <meta name="twitter:description" content="Vice President of Technology, Head of Engineering, Microsoft MVP, Driving Engineering Excellence through AI-Assisted Workflows &amp; GitHub Copilot, Scaling High-Performance, Remote-First Teams, Passionate about .NET, Azure, and Open Source, Speaker &amp; Mentor, Building the Future of Software Development">
45  <meta name="twitter:url" content="https://www.josephguadagno.net/about-joseph-guadagno/">
46
47  
48    <meta name="twitter:card" content="summary_large_image">
49    <meta name="twitter:image" content="https://www.josephguadagno.net/assets/images/pages/about-joseph-guadagno.png">
50    
51  
52
53  
54
55
56
57
58
59
60
61
62
63  
64    <meta property="article:publisher" content="1580735823">
65  
66
67  
68    <meta property="fb:app_id" content="266442613419593">
69  
70
71
72<link rel="canonical" href="https://www.josephguadagno.net/about-joseph-guadagno/">
73
74
75
76
77
78
79
80
81  <meta name="msvalidate.01" content="7EC9949296748CD8737FFF69FC74B369">
82
83
84
85
86
87<!-- end _includes/seo.html -->
88
89
90
91  <link href="https://feeds.feedburner.com/JosephGuadagno" type="application/atom+xml" rel="alternate" title="JosephGuadagno.net Feed">
92<meta name="viewport" content="width=device-width, initial-scale=1.0">
93
94<script>
95  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
96  window.enable_copy_code_button = true;
97</script>
97
98
99<!-- For all browsers -->
100<link rel="stylesheet" href="/assets/css/main.css">
101<link rel="preload" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@latest/css/all.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
102<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@latest/css/all.min.css"></noscript>
103
104
105  
106    
106<script src="/assets/js/ai.js"></script>
106
107  
108
109
110    <link rel="alternate" title="JosephGuadagno.net" type="application/json" href="https://www.josephguadagno.net/feed.json" />
111<!-- Generated by https://realfavicongenerator.net/ -->
112<link rel="apple-touch-icon" sizes="57x57" href="/assets/icons/apple-icon-57x57.png">
113<link rel="apple-touch-icon" sizes="60x60" href="/assets/icons/apple-icon-60x60.png">
114<link rel="apple-touch-icon" sizes="72x72" href="/assets/icons/apple-icon-72x72.png">
115<link rel="apple-touch-icon" sizes="76x76" href="/assets/icons/apple-icon-76x76.png">
116<link rel="apple-touch-icon" sizes="114x114" href="/assets/icons/apple-icon-114x114.png">
117<link rel="apple-touch-icon" sizes="120x120" href="/assets/icons/apple-icon-120x120.png">
118<link rel="apple-touch-icon" sizes="144x144" href="/assets/icons/apple-icon-144x144.png">
119<link rel="apple-touch-icon" sizes="152x152" href="/assets/icons/apple-icon-152x152.png">
120<link rel="apple-touch-icon" sizes="180x180" href="/assets/icons/apple-icon-180x180.png">
121<link rel="icon" type="image/png" sizes="192x192"  href="/assets/icons/android-icon-192x192.png">
122<link rel="icon" type="image/png" sizes="32x32" href="/assets/icons/favicon-32x32.png">
123<link rel="icon" type="image/png" sizes="96x96" href="/assets/icons/favicon-96x96.png">
124<link rel="icon" type="image/png" sizes="16x16" href="/assets/icons/favicon-16x16.png">
125<link rel="icon" type="image/svg+xml" href="/assets/icons/favicon.svg" />
126
127
128<link rel="manifest" href="/assets/icons/site.webmanifest">
129<link rel="mask-icon" href="/assets/icons/safari-pinned-tab.svg" color="#5bbad5">
130<link rel="shortcut icon" href="/assets/icons/favicon.ico">
131<meta name="msapplication-TileColor" content="#2d89ef">
132<meta name="msapplication-TileImage" content="/assets/icons/ms-icon-144x144.png">
133<meta name="msapplication-config" content="/assets/icons/browserconfig.xml">
134<meta name="theme-color" content="#ffffff">
135<meta name="facebook-domain-verification" content="yq2el43ug3oykuejgtxq1p7kgopbxx" />
136<meta name="apple-mobile-web-app-title" content="JosephGuadagno.NET" />
137
138<!-- Generated by https://realfavicongenerator.net/social/#.XGBFaFxKiUk -->
139<meta property="og:image:width" content="128">
140<meta property="og:image:height" content="128">
141
142  </head>
143
144  <body class="layout--single wide" dir="ltr">
145    
146<nav class="skip-links" aria-label="Skip links">
147  <ul>
148    <li><a href="#site-nav" class="screen-reader-shortcut">Skip to primary navigation</a></li>
149    <li><a href="#main" class="screen-reader-shortcut">Skip to content</a></li>
150    <li><a href="#footer" class="screen-reader-shortcut">Skip to footer</a></li>
151  </ul>
152</nav>
153
154    
155
156
157<div class="masthead">
158  <div class="masthead__inner-wrap">
159    <div class="masthead__menu">
160      <nav id="site-nav" class="greedy-nav" aria-label="Primary navigation">
161        
162          <a class="site-logo" href="/"><img src="/assets/icons/android-chrome-96x96.png" alt="JosephGuadagno.net"></a>
163        
164        <a class="site-title" href="/">
165          JosephGuadagno.net
166          
167        </a>
168        <ul class="visible-links"><li class="masthead__menu-item">
169              <a
170                href="/about-joseph-guadagno"
171                 title="About Joseph Guadagno"
172                
173              >About Me</a>
174            </li><li class="masthead__menu-item">
175              <a
176                href="/resume"
177                 title="The resume of Joseph Guadagno"
178                
179              >Resume</a>
180            </li><li class="masthead__menu-item">
181              <a
182                href="/presentations"
183                 title="Topics/Presentations that Joseph Guadagno can present"
184                
185              >Presentations</a>
186            </li><li class="masthead__menu-item">
187              <a
188                href="/speaking-engagements"
189                 title="Events that Joseph Guadagno will be speaking, or has spoken, at"
190                
191              >Speaking</a>
192            </li><li class="masthead__menu-item">
193              <a
194                href="/contact"
195                 title="Contact Joseph Guadagno"
196                
197              >Contact</a>
198            </li><li class="masthead__menu-item">
199              <a
200                href="/categories"
201                 title="See all the posts by categories"
202                
203              >Categories</a>
204            </li><li class="masthead__menu-item">
205              <a
206                href="/tags"
207                 title="See all posts around a tag"
208                
209              >Tags</a>
210            </li><li class="masthead__menu-item">
211              <a
212                href="/year-archive"
213                 title="See all posts by year"
214                
215              >By Year</a>
216            </li></ul>
217        
218        <button class="search__toggle" type="button">
219          <span class="visually-hidden">Toggle search</span>
220          <i class="fas fa-search"></i>
221        </button>
222        
223        <button class="greedy-nav__toggle hidden" type="button">
224          <span class="visually-hidden">Toggle menu</span>
225          <div class="navicon"></div>
226        </button>
227        <ul class="hidden-links hidden"></ul>
228      </nav>
229    </div>
230  </div>
231</div>
232
233
234    <div class="initial-content">
235      
236
237
238
239
240
241
242  
243    
244
245
246
247
248<nav class="breadcrumbs" aria-label="Breadcrumb">
249  <ol itemscope itemtype="https://schema.org/BreadcrumbList">
250    
251    
252    
253      
254        <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
255          <a href="/" itemprop="item"><span itemprop="name">Home</span></a>
256
257          <meta itemprop="position" content="1" />
258        </li>
259        <span class="sep">/</span>
260      
261      
262        <li class="current">About Joseph Guadagno</li>
263      
264    
265  </ol>
266</nav>
267
268  
269
270
271<div id="main" role="main">
272  
273
274  <div class="sidebar sticky">
275  
276
277
278
279<div itemscope itemtype="https://schema.org/Person" class="h-card">
280
281  
282    <div class="author__avatar">
283      <a href="https://www.josephguadagno.net/">
284        <img src="/assets/images/authors/Joe_Guadagno_512x512.jpg" alt="Joseph Guadagno" itemprop="image" class="u-photo">
285      </a>
286    </div>
287  
288
289  <div class="author__content">
290    <h3 class="author__name p-name" itemprop="name">
291      <a class="u-url" rel="me" href="https://www.josephguadagno.net/" itemprop="url">Joseph Guadagno</a>
292    </h3>
293    
294      <div class="author__bio p-note" itemprop="description">
295        <p>Vice President of Technology, Head of Engineering, Microsoft MVP, Driving Engineering Excellence through AI-Assisted Workflows &amp; GitHub Copilot, Scaling High-Performance, Remote-First Teams</p>
296
297      </div>
298    
299  </div>
300
301  <div class="author__urls-wrapper">
302    <button class="btn btn--inverse">Follow</button>
303    <ul class="author__urls social-icons">
304      
305        <li itemprop="homeLocation" itemscope itemtype="https://schema.org/Place">
306          <i class="fas fa-fw fa-location-dot" aria-hidden="true"></i> <span itemprop="name" class="p-locality">Chandler, AZ, USA</span>
307        </li>
308      
309
310      
311        
312          
313            <li><a href="mailto:[email protected]" rel="nofollow noopener noreferrer me"><i class="fas fa-fw fa-envelope" aria-hidden="true"></i><span class="label">Email</span></a></li>
314          
315        
316          
317            <li><a href="https://www.josephguadagno.net" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fa-solid fa-globe" aria-hidden="true"></i><span class="label">Website</span></a></li>
318          
319        
320          
321            <li><a href="https://www.linkedin.com/in/josephguadagno/" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span class="label">LinkedIn</span></a></li>
322          
323        
324          
325            <li><a href="https://bsky.app/profile/jguadagno.com" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-bluesky" aria-hidden="true"></i><span class="label">Bluesky</span></a></li>
326          
327        
328          
329            <li><a href="https://github.com/jguadagno" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-github" aria-hidden="true"></i><span class="label">GitHub</span></a></li>
330          
331        
332          
333            <li><a href="https://www.facebook.com/JosephGuadagnoNet" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-facebook" aria-hidden="true"></i><span class="label">Facebook</span></a></li>
334          
335        
336          
337            <li><a href="https://x.com/jguadagno" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-x-twitter" aria-hidden="true"></i><span class="label">X</span></a></li>
338          
339        
340          
341            <li><a href="https://www.youtube.com/playlist?list=PLESGit66MnblZW06pJQwB_VPFZnOT-gG2" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-youtube" aria-hidden="true"></i><span class="label">'Coding with JoeG' Videos</span></a></li>
342          
343        
344          
345            <li><a href="https://www.youtube.com/playlist?list=PLESGit66MnbmnDhXdTZicVFF2Pql430pJ" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-youtube" aria-hidden="true"></i><span class="label">Previous Presentations</span></a></li>
346          
347        
348          
349            <li><a href="https://www.twitch.tv/jguadagno" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-twitch" aria-hidden="true"></i><span class="label">'Coding with JoeG' stream</span></a></li>
350          
351        
352          
353            <li><a href="https://www.paypal.me/jguadagno" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-paypal" aria-hidden="true"></i><span class="label">Sponsor - PayPal</span></a></li>
354          
355        
356          
357            <li><a href="https://buymeacoffee.com/jguadagno" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fas fa-fw fa-coffee" aria-hidden="true"></i><span class="label">Sponsor - Buy Me a Tea</span></a></li>
358          
359        
360          
361            <li><a href="https://jjg.me/headshots" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fas fa-fw fa-camera" aria-hidden="true"></i><span class="label">Headshots</span></a></li>
362          
363        
364      
365
366      
367
368      
369
370      
371
372      
373
374      
375
376      
377
378      
379
380      
381
382      
383
384      
385
386      
387
388      
389
390      
391
392      
393
394      
395
396      
397
398      
399
400      
401
402      
403
404      
405
406      
407
408      
409
410      
411
412      
413
414      <!--
415  <li>
416    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs" rel="nofollow noopener noreferrer me">
417      <i class="fas fa-fw" aria-hidden="true"></i> Custom Social Profile Link
418    </a>
419  </li>
420-->
421    </ul>
422  </div>
423</div>
424
425  
426  
427  </div>
428
429
430
431  <article class="page h-entry" itemscope itemtype="https://schema.org/CreativeWork">
432    <meta itemprop="headline" content="About Joseph Guadagno">
433    
434    
435    
436
437    <div class="page__inner-wrap">
438      
439        <header>
440          <h1 id="page-title" class="page__title p-name" itemprop="headline">
441            <a href="https://www.josephguadagno.net/about-joseph-guadagno/" itemprop="url">About Joseph Guadagno
442</a>
443          </h1>
444          
445
446
447
448        </header>
449      
450
451      <section class="page__content e-content" itemprop="text">
452        
453        <p>Joseph Guadagno is a <strong>senior technology executive</strong>, <strong>international public speaker</strong>, and <strong>
453long‑time community leader</strong> with more than 25 years of experience building high‑performing engineering organizations and empowering developers around the world. He blends strategic leadership with hands‑on technical depth, helping companies modernize their engineering practices, adopt AI‑assisted development, and deliver reliable, scalable software.</p>
454
455<p>As a <strong>Senior Vice President of Technology</strong>, Joseph has led cross‑functional engineering, QA, SRE, and platform teams, driving clarity, accountability, and innovation across global organizations. He is known for establishing strong engineering cultures, maturing delivery practices, and aligning technology strategy with business outcomes. His leadership includes defining technology roadmaps, guiding architectural transformation, improving developer experience, and mentoring emerging leaders.</p>
456
457<p>Joseph is also a <strong>Microsoft Developer Services MVP</strong> (since 2007) and a <strong>former President and Vice President of the .NET Foundation</strong>, where he helped strengthen the open‑source .NET ecosystem and support thousands of contributors and community leaders. He has been an active force in developer communities for decades—founding the Southeast Valley .NET User Group, organizing Desert Code Camp, contributing to open‑source projects, and supporting global volunteer initiatives such as GeekGive and GiveCamp.</p>
458
459<p>A seasoned <strong>international speaker</strong>, Joseph has delivered hundreds of sessions across the United States and abroad on topics including .NET, Azure, cloud architecture, AI‑assisted development, engineering leadership, and modern developer productivity. His approachable style, practical insights, and real‑world experience make him a frequent speaker at conferences, user groups, and corporate events.</p>
460
461<p>Joseph continues to invest in the next generation of speakers and community leaders through <strong>MoreSpeakers.com</strong>, a platform he created to connect aspiring presenters with experienced mentors. He also shares technical content, leadership insights, and demos through his blog, livestreams, and open‑source repositories.</p>
462
463<p>When he’s not leading teams or speaking at events, Joseph enjoys spending time with his family, exploring home automation, and contributing to projects that make the developer community stronger.</p>
464
465<h2 id="some-of-my-notable-achievements">Some of my notable achievements</h2>
466
467<ul>
468  <li>Microsoft Developer Services <a href="https://jjg.me/MVPLink" target="_blank">MVP</a> – Since January 2007</li>
469  <li>Previously served on the <a href="https://dotnetfoundation.org/" target="_blank">.NET Foundation</a> Board of Directors
470    <ul>
471      <li>President (July 2023 - July 2024)</li>
472      <li>Vice President (October 2022 – June 2023)</li>
473    </ul>
474  </li>
475  <li>Occasionally streaming ‘<em>Coding with JoeG</em>’ on <a href="https://twitch.tv/jguadagno" target="_blank">Twitch</a></li>
476  <li><a href="https://www.progress.com/" target="_blank">Progress</a> <a href="https://www.progress.com/champion" target="_blank">Champion</a> - Since January 2022</li>
477  <li><a href="https://www.telerik.com/" target="_blank">Telerik</a> <a href="https://www.telerik.com/ninjas" target="_blank">Ninja</a> - (August 2020 - January 2022)</li>
478  <li><a href="https://www.c-sharpcorner.com/" target="_blank">C# Corner</a> <a href="https://www.c-sharpcorner.com/article/how-to-become-a-csharp-corner-mvp/" target="_blank">MVP</a> - Since Sept 2020</li>
479  <li>Friend of Redgate <a href="https://www.red-gate.com/community/friends-of-rg" target="_blank">program</a> (2015 to 2018)</li>
480  <li><a href="https://dotnetfoundation.org/">.NET Foundation</a> <a href="https://github.com/dotnet-foundation/wg-membership" target="_blank">Membership Committee</a> volunteer (2015 to 2018)</li>
481  <li>Former President, Vice President, and Marketing Director of <a href="https://ineta.org/" target="_blank">INETA</a> North America (2007-2015)</li>
482  <li>Founder of the Southeast Valley .NET User Group (<a href="https://sevdnug.org/home.aspx" target="_blank">SEVDNUG</a>) in Chandler, AZ (2007-2013)</li>
483  <li>Previously served on the <a href="https://www.chandleraz.gov/" target="_blank">City of Chandler</a>’s <a href="https://www.chandleraz.gov/default.aspx?pageid=287" target="_blank">Parks</a> and <a href="https://www.chandleraz.gov/default.aspx?pageid=732" target="_blank">Recreation</a> <a href="https://www.chandleraz.gov/default.aspx?pageid=268" target="_blank">board</a> (2010 to 2018)</li>
484  <li><a href="https://www.telerik.com/community/client-profile.aspx?cI
484d=187651" target="_blank">Telerik MVP</a> (2010 to 2012)</li>
485  <li>Microsoft Visual Basic MVP (1996)</li>
486</ul>
487
488<h3 id="open-source-projects-httpsgithubcomjguadagno">Open-Source Projects (<a href="https://github.com/jguadagno" target="_blank">https://github.com/jguadagno</a>)</h3>
489
490<ul>
491  <li><a href="https://github.com/jguadagno/jjgnet-broadcast" target="_blank">JJG.NET Broadcasting</a> - Repository for the automated broadcasting of blog post, conferences, and streams.</li>
492  <li><a href="https://github.com/jguadagno/JosephGuadagno.Extensions" target="_blank">JosephGuadagno.Extensions</a> - A collection of extensions for .NET.</li>
493  <li><a href="https://github.com/jguadagno/JosephGuadagno.AzureHelpers.Cosmos" target="_blank">JosephGuadagno.AzureHelpers.Cosmos</a> - A collection of helpers for Azure Cosmos DB Table storage.</li>
494  <li><a href="https://github.com/jguadagno/JosephGuadagno.AzureHelpers.Storage" target="_blank">JosephGuadagno.AzureHelpers.Storage</a> - A collection of helpers for Azure Storage Queues and Blobs.</li>
495  <li><a href="https://github.com/jguadagno/JosephGuadagno.AzureHelpers" target="_blank">JosephGuadagno.AzureHelpers</a> - A collection of helpers for using Microsoft Azure.</li>
496  <li><a href="https://github.com/jguadagno/bootstrapThemeSwitcher" target="_blank">bootstrapThemeSwitcher</a>: jquery plugin to dynamically load Bootstrap themes.</li>
497  <li><a href="https://github.com/jguadagno/twbs-flickrCarousel" target="_blank">twbs-flickrCarousel</a>: a bootstrap carousel to loop through Flickr pictures.</li>
498</ul>
499
500<p>You can see more of my work on <a href="https://www.github.com/jguadagno" target="_blank">GitHub</a>.</p>
501
502<h3 id="events-i-organize-or-participate-in">Events I organize or participate in</h3>
503
504<ul>
505  <li><a href="https://desertcodecamp.com/" target="_blank">Desert Code Camp</a></li>
506  <li><a href="https://azgivecamp.org/" target="_blank">AZGiveCamp</a></li>
507  <li>Organizer for the 1st Time MVP event at the MVP Summit</li>
508  <li><a href="/mvp-summit-2011-c-mvp-2-mvp-sessions/" target="_blank">MVP 2 MVP Sessions</a> at MVP Summit.</li>
509  <li>Awesome bean pusher at <a href="https://geekgive.org/project/mvpsummit2012.aspx" target="_blank">GeekGive</a> at the MVP Summit.</li>
510</ul>
511
512<h2 id="resume">Resume</h2>
513
514<p><a href="/resume/">Resume of Joseph Guadagno</a></p>
515
516<h2 id="book-reviews">Book Reviews</h2>
517
518<p>If you want me to review your book or product on this site.
519Please contact me at <a href="mailto:[email protected]?Subject=%27Product%20Review%20Request%27" title="Send me an email">[email protected]</a></p>
520
521<h2 id="other">Other</h2>
522
523<p>If you wish to contact me, email <a href="mailto:[email protected]">[email protected]</a>.
524If you are curious about what technologies were used to build this site,
525please visit the <a href="/site-technologies/">Site Technologies</a> page.</p>
526
527        
528      </section>
529
530      <footer class="page__meta">
531        
532        
533
534  
535
536  
537
538
539        
540
541
542
543      </footer>
544
545      <section class="page__share">
546    <h4 class="page__share-title">Share on</h4>
547
548    <a href="https://bsky.app/intent/compose?text=About+Joseph+Guadagno%20https%3A%2F%2Fwww.josephguadagno.net%2Fabout-joseph-guadagno%2F" class="btn btn--bluesky" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="Share on Bluesky">
549        <i class="fab fa-fw fa-bluesky" aria-hidden="true"></i><span> Bluesky</span>
550    </a>
551
552    <a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.josephguadagno.net%2Fabout-joseph-guadagno%2F" class="btn btn--facebook" aria-label="Share on Facebook" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="Share on Facebook">
553        <i class="fab fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span>
554    </a>
555
556    <a href="https://www.linkedin.com/shareArticle?mini=true&url=https://www.josephguadagno.net/about-joseph-guadagno/" class="btn btn--linkedin" aria-label="Share on LinkedIn" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="Share on LinkedIn">
557        <i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span>
558    </a>
559
560    <a href="https://www.reddit.com/submit?url=https%3A%2F%2Fwww.josephguadagno.net%2Fabout-joseph-guadagno%2F&title=About Joseph Guadagno" class="btn btn--primary" title=" Reddit"><i class="fab fa-fw fa-reddit" aria-hidden="true"></i><span> Reddit</span></a>
561
562    <a href="https://x.com/intent/tweet?via=jguadagno&text=About+Joseph+Guadagno%20https%3A%2F%2Fwww.josephguadagno.net%2Fabout-joseph-guadagno%2F" class="btn btn--x" aria-label="Share on X" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="Share on X">
563        <i class="fab fa-fw fa-x-twitter" aria-hidden="true"></i><span> X</span>
564    </a>
565    
566    <h4 class="page__share-title">Like what you read?</h4>
567    <p>Please consider sponsoring this blog.</p>
568    <a href="https://www.buymeacoffee.com/jguadagno"><img src="https://user-images.githubusercontent.com/1376749/120938564-50c59780-c6e1-11eb-814f-22a0399623c5.png" alt="Buy me a Coffee"></a>
569    <a href="https://www.paypal.me/jguadagno" title="Support via PayPal"><img src="https://cdn.jsdelivr.net/gh/twolfson/[email protected]/
569dist/button.svg" alt="Support via PayPal"></a>
570    <iframe src="https://github.com/sponsors/jguadagno/button" title="Sponsor jguadagno" height="32" width="114" style="border: 0; border-radius: 6px; vertical-align: middle;"></iframe>
571</section>
572
573      
574
575
576    </div>
577
578    
579  </article>
580
581  
582  
583</div>
584
585      
586    </div>
587
588    
589      <div class="search-content">
590        
591<div class="search-content__inner-wrap"><form class="search-content__form" onkeydown="return event.key != 'Enter';" role="search">
592    <label class="sr-only" for="search">
593      Enter your search term...
594    </label>
595    <input type="search" id="search" class="search-input" tabindex="-1" placeholder="Enter your search term..." />
596  </form>
597  <div id="results" class="results"></div></div>
598
599      </div>
600    
601
602    <div id="footer" class="page__footer">
603      <footer>
604        <!-- Replaced entire file with my updated version. Dan's Customizations START and END for entire file.
605	Google Analytics introduced new required consent tags in 2023, so we had to update the code to account for them.
606	More info: https://developers.google.com/tag-platform/security/guides/consent?consentmode=basic#gtag.js
607-->
608
609<script>
610	window.dataLayer = window.dataLayer || [];
611	function gtag() { dataLayer.push(arguments); }
612
613	// Consent not granted by default.
614	gtag('consent', 'default', {
615		'ad_user_data': 'denied',
616		'ad_personalization': 'denied',
617		'ad_storage': 'denied',
618		'analytics_storage': 'denied',
619		// Wait 500ms to allow consent function to update consent values before calling Google Analytics.
620		'wait_for_update': 500,
621	});
622
623	gtag('js', new Date());
624	gtag('config', 'G-HKYKNTCV88', {'anonymize_ip': true});
625</script>
vendor: 65 bytes, lines 625-627
625
626
627<script async src="https://www.googletagmanager.com/gtag/js?id=
627G-HKYKNTCV88
vendor: 12 bytes, line 627
627"></script>
628<script>
629	function RunGoogleAnalyticsJavaScript()
630	{
631		window.dataLayer = window.dataLayer || [];
632		function gtag() { dataLayer.push(arguments); }
633
634		// Update consent values from denied to granted.
635		gtag('consent', 'update', {
636			ad_user_data: 'granted',
637			ad_personalization: 'granted',
638			ad_storage: 'granted',
639			analytics_storage: 'granted'
640		});
641	}
642</script>
642
643
644<!-- Microsoft Clarity script for analytics (https://clarity.microsoft.com) -->
645<script type="text/javascript">
646	function RunMsClarityJavaScript()
647	{
648		// Code copied from the MS Clarity website.
649		(function (c, l, a, r, i, t, y)
650		{
651			c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments) };
652			t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i;
653			y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y);
654		})(window, document, "clarity", "script", "9ykk4t8vq2");
655
656		// Let MS Clarity know the user consented so it can setup it's cookie tracking.
657		// More info: https://learn.microsoft.com/en-us/clarity/setup-and-installation/clarity-consent-api-v2
658		window.clarity('consentv2', {
659			ad_storage: "granted",
660			analytics_storage: "granted"
661		});
662	}
663</script>
663
664
665<!-- Put an advertisement in the site's footer. -->
666<!-- The advertisement shown at the bottom of a blog post. -->
667<div style="text-align: center; margin-top: 1rem">
668	<span>
669		
669<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2734487984973844"
670			crossorigin="anonymous"></script>
670
671		<!-- Blog.DansKingdom.com Responsive Ad 1 -->
672		<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2734487984973844" data-ad-slot="7917470839"
673			data-ad-format="auto" data-full-width-responsive="true"></ins>
674		
674<script>
675			function RunGoogleAdsensePostAdvertisementJavaScript()
676			{
677				(adsbygoogle = window.adsbygoogle || []).push({});
678			}
679		</script>
679
680	</span>
681</div>
682
683<!-- Put an advertisement in the site's footer. -->
684<div style="text-align: center; margin-bottom: 1rem;">
685	<span>
686		
686<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2734487984973844"
687     crossorigin="anonymous"></script>
687
688		<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2734487984973844" data-ad-slot="1591735639"
689			data-ad-format="auto" data-full-width-responsive="true"></ins>
690		
690<script>
691			function RunGoogleAdsenseFooterAdvertisementJavaScript()
692			{
693				(adsbygoogle = window.adsbygoogle || []).push({});
694			}
695		</script>
695
696	</span>
697</div>
698
699<!-- Original code taken from https://jekyllcodex.org/without-plugin/cookie-consent/ then modified. -->
700<style>
701	#cookie-notice {
702		padding: 0.5rem 1rem;
703		display: none;
704		text-align: center;
705		position: fixed;
706		bottom: 0;
707		width: 100%;
708		background: #222;
709		color: rgba(255, 255, 255, 0.8);
710	}
711
712	#cookie-notice a {
713		display: inline-block;
714		cursor: pointer;
715		margin-left: 0.5rem;
716	}
717
718	#cookie-notice-accept {
719		background: #07a21c;
720		color: white;
721	}
722
723	#cookie-notice-more-info {
724		background: #007bff;
725		color: white;
726	}
727
728	#cookie-notice-reject {
729		background: #dc3545;
730		color: white;
731	}
732
733	#cookie-notice-buttons {
734		display: inline-block;
735	}
736</style>
737
738<div id="cookie-notice">
739	<span>This website uses cookies to ensure you get the best experience.</span>
740	<span id="cookie-notice-buttons">
741		<a id="cookie-notice-more-info" class="btn btn-primary btn-sm" href="/privacy">More info</a>
742		<a id="cookie-notice-accept" class="btn btn-primary btn-sm">OK</a>
743	</span>
744</div>
745
746<script>
747	function createCookie(name, value, days)
748	{
749		var expires = "";
750		if (days)
751		{
752			var date = new Date();
753			date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
754			expires = "; expires=" + date.toUTCString();
755		}
756		document.cookie = name + "=" + value + expires + "; path=/";
757	}
758
759	function readCookie(name)
760	{
761		var nameEQ = name + "=";
762		var ca = document.cookie.split(';');
763		for (var i = 0; i < ca.length; i++)
764		{
765			var c = ca[i];
766			while (c.charAt(0) == ' ') c = c.substring(1, c.length);
767			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
768		}
769		return null;
770	}
771
772	function eraseCookie(name)
773	{
774		createCookie(name, "", -1);
775	}
776
777	function RunThirdPartyCodeThatUsesCookies()
778	{
779		// Call the functions that should not be ran until the user has accepted cookies.
780
781// If the user is not viewing a post, the Post Ad function will not be defined, so only call it if it is defined.
782if (typeof(RunGoogleAdsensePostAdvertisementJavaScript) === typeof(Function))
783{
784	RunGoogleAdsensePostAdvertisementJavaScript()
785}
786RunGoogleAdsenseFooterAdvertisementJavaScript()
787
788RunMsClarityJavaScript()
789
790// Google Analytics are not included when running locally/debugging, so to avoid an error only call this function if it is defined.
791if (typeof (RunGoogleAdsensePostAdvertisementJavaScript) === typeof(Function))
792{
793	RunGoogleAnalyticsJavaScript();
794}
795
796	}
797
798	// Rather than requiring consent, we just display a notice and assume consent if the user continues to use the website.
799	// Google displays its own consent automatically for countries that require it: https://umbracocommunity.social/@steve_gibe/111925508834045878
800	RunThirdPartyCodeThatUsesCookies()
801
802	if (readCookie('cookie-notice-response') != 'accepted')
803	{
804		// Display the cookie notice.
805		document.getElementById('cookie-notice').style.display = 'block';
806	}
807
808	document.getElementById('cookie-notice-accept').addEventListener("click", function ()
809	{
810		// Persist cookie acceptance for 180 days and hide the cookie notice.
811		createCookie('cookie-notice-response', 'accepted', 180);
812		document.getElementById('cookie-notice').style.display = 'none';
813
814		// Reload the page so the analytics scripts, etc. are ran on this page, not just future pages.
815		// I considered just calling the RunThirdPartyCodeThatUsesCookies() function here, but was
816		// not sure how that would affect some analytics metrics, like the time to load the page, etc.
817		location.reload();
818	});
819</script>
819
820
821        
822
823
824<div class="page__footer-follow">
825  <ul class="social-icons">
826    
827
828    
829      
830        
831          <li><a href="https://bsky.app/profile/jguadagno.com" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-bluesky" aria-hidden="true"></i> Bluesky</a></li>
832        
833      
834        
835          <li><a href="https://github.com/jguadagno" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-github" aria-hidden="true"></i> GitHub</a></li>
836        
837      
838        
839          <li><a href="https://www.facebook.com/JosephGuadagnoNet" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-facebook" aria-hidden="true"></i> Facebook</a></li>
840        
841      
842    
843
844    
845      <li><a href="https://feeds.feedburner.com/JosephGuadagno"><i class="fas fa-fw fa-square-rss" aria-hidden="true"></i> Feed</a></li>
846    
847  </ul>
848</div>
849
850
851<div class="page__footer-copyright">&copy; 2026 <a href="https://www.josephguadagno.net">JosephGuadagno.net</a>. Powered by <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/jekyll-themes/minimal-mistakes/" rel="nofollow">Minimal Mistakes</a>.</div>
852
853      </footer>
854    </div>
855
856    
857
858  
858<script src="/assets/js/main.min.js"></script>
858
859
860
861
862
863
864<script src="/assets/js/lunr/lunr.min.js"></script>
vendor: 1 bytes, line 864
864
865<script src="/assets/js/lunr/lunr-store.js"></script>
vendor: 1 bytes, line 865
865
866<script src="/assets/js/lunr/lunr-en.js"></script>
866
867
868
869
870
871
872  <!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 64 bytes, lines 872-873
872
873<script async src="https://www.googletagmanager.com/gtag/js?id=
873G-HKYKNTCV88
vendor: 12 bytes, line 873
873"></script>
874<script>
875  
vendor: 134 bytes, lines 875-879
875window.dataLayer = window.dataLayer || [];
876  function gtag(){dataLayer.push(arguments);}
877  gtag('js', new Date());
878
879  gtag('config', '
879G-HKYKNTCV88
vendor: 30 bytes, line 879
879', { 'anonymize_ip': false});
880</script>
880
881
882
883
884
885
886
887
888
889
890  </body>
891</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.