PageSourceSearch

https://www.johnpapa.net/contact/

html johnpapa.net collected 2026-10-02 03:20:34 UTC 31,877 bytes, 582 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en" data-nav-visible="no">
3<head>
4
5    <meta charset="utf-8" />
6    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
7
8    <title>Contact</title>
9    <meta name="HandheldFriendly" content="True" />
10    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
11
12    <link rel="stylesheet" type="text/css" href="https://www.johnpapa.net/assets/built/app.css?v=8gOa4Gd_Qp02pMSG" />
13    <link rel="stylesheet" type="text/css" href="https://www.johnpapa.net/assets/prism.css?v=aWOkA510_46g8QNT" />
14    <link href="https://fonts.googleapis.com/css?family=Lato:300,300i,400,400i,700,700i|Source+Code+Pro:400&display=swap" rel="stylesheet">
15
16    <meta name="description" content="Here&#x27;s how to reach me on various communication channels">
17    <link rel="canonical" href="https://www.johnpapa.net/contact/">
18    <meta name="referrer" content="no-referrer-when-downgrade">
19    
20    <meta property="og:site_name" content="John Papa">
21    <meta property="og:type" content="website">
22    <meta property="og:title" content="Contact">
23    <meta property="og:description" content="Here&#x27;s how to reach me on various communication channels">
24    <meta property="og:url" content="https://www.johnpapa.net/contact/">
25    <meta property="og:image" content="https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w1200/2016/05/big-room.jpg">
26    <meta property="article:published_time" content="2016-05-15T17:32:41.000Z">
27    <meta property="article:modified_time" content="2020-03-29T02:10:56.000Z">
28    <meta name="twitter:card" content="summary_large_image">
29    <meta name="twitter:title" content="Contact">
30    <meta name="twitter:description" content="Here&#x27;s how to reach me on various communication channels">
31    <meta name="twitter:url" content="https://www.johnpapa.net/contact/">
32    <meta name="twitter:image" content="https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w1200/2016/05/big-room.jpg">
33    <meta name="twitter:label1" content="Written by">
34    <meta name="twitter:data1" content="John Papa">
35    <meta name="twitter:site" content="@john_papa">
36    <meta property="og:image:width" content="1200">
37    <meta property="og:image:height" content="268">
38    
39    
39<script type="application/ld+json">
40{
41    "@context": "https://schema.org",
42    "@type": "Article",
43    "publisher": {
44        "@type": "Organization",
45        "name": "John Papa",
46        "url": "https://www.johnpapa.net/",
47        "logo": {
48            "@type": "ImageObject",
49            "url": "https://www.johnpapa.net/favicon.ico",
50            "width": 48,
51            "height": 48
52        }
53    },
54    "author": {
55        "@type": "Person",
56        "name": "John Papa",
57        "url": "https://www.johnpapa.net/author/johnpapa/",
58        "sameAs": []
59    },
60    "headline": "Contact",
61    "url": "https://www.johnpapa.net/contact/",
62    "datePublished": "2016-05-15T17:32:41.000Z",
63    "dateModified": "2020-03-29T02:10:56.000Z",
64    "image": {
65        "@type": "ImageObject",
66        "url": "https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w1200/2016/05/big-room.jpg",
67        "width": 1200,
68        "height": 268
69    },
70    "description": "Thanks for wanting to get in touch with me! If you would like to engage in a\nconversation about your upcoming event, please refer to the channels below. I\nlook forward to hearing from you.\n\nPlease keep in mind that I get a huge amount of communications, so this page\nlists the channels I use and how I like to use them.\n\nTwitter: @john_papa [http://twitter.com/john_papa]\n\nI probably spend too much time here, but it has become my primary means of\nbroadcasting things to the world. Please follow me h",
71    "mainEntityOfPage": "https://www.johnpapa.net/contact/"
72}
73    </script>
73
74
75    <meta name="generator" content="Ghost 6.68">
76    <link rel="alternate" type="application/rss+xml" title="John Papa" href="https://www.johnpapa.net/rss/">
77    
77<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.71/umd/portal.min.js" data-i18n="true" data-ghost="https://www.johnpapa.net/" data-key="6b9cb8259c309397dfd16dac6d" data-api="https://johnpapa.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script>
77<style id="gh-members-styles">.gh-post-upgrade-cta-content,
78.gh-post-upgrade-cta {
79    display: flex;
80    flex-direction: column;
81    align-items: center;
82    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
83    text-align: center;
84    width: 100%;
85    color: #ffffff;
86    font-size: 16px;
87}
88
89.gh-post-upgrade-cta-content {
90    border-radius: 8px;
91    padding: 40px 4vw;
92}
93
94.gh-post-upgrade-cta h2 {
95    color: #ffffff;
96    font-size: 28px;
97    letter-spacing: -0.2px;
98    margin: 0;
99    padding: 0;
100}
101
102.gh-post-upgrade-cta p {
103    margin: 20px 0 0;
104    padding: 0;
105}
106
107.gh-post-upgrade-cta small {
108    font-size: 16px;
109    letter-spacing: -0.2px;
110}
111
112.gh-post-upgrade-cta a {
113    color: #ffffff;
114    cursor: pointer;
115    font-weight: 500;
116    box-shadow: none;
117    text-decoration: underline;
118}
119
120.gh-post-upgrade-cta a:hover {
121    color: #ffffff;
122    opacity: 0.8;
123    box-shadow: none;
124    text-decoration: underline;
125}
126
127.gh-post-upgrade-cta a.gh-btn {
128    display: block;
129    background: #ffffff;
130    text-decoration: none;
131    margin: 28px 0 0;
132    padding: 8px 18px;
133    border-radius: 4px;
134    font-size: 16px;
135    font-weight: 600;
136}
137
138.gh-post-upgrade-cta a.gh-btn:hover {
139    opacity: 0.92;
140}</style>
141    
141<script defer src="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/sodo-search.min.js" data-key="6b9cb8259c309397dfd16dac6d" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/main.css" data-sodo-search="https://johnpapa.ghost.io/" data-locale="en" crossorigin="anonymous"></script>
141
142    
143    <link href="https://www.johnpapa.net/webmentions/receive/" rel="webmention">
144    
144<script defer src="/public/cards.min.js?v=ShRHxgy4po8zN-Wf"></script>
144
145    <link rel="stylesheet" type="text/css" href="/public/cards.min.css?v=WwnU9jw5ancNC8Gc">
146    
146<script defer src="/public/member-attribution.min.js?v=AKG4hWena9j3yX3I"></script>
146
147    
147<script defer src="/public/ghost-stats.min.js?v=vFcCUf6ZQ0Hyhc8h" data-stringify-payload="false" data-datasource="analytics_events" data-storage="localStorage" data-host="https://www.johnpapa.net/.ghost/analytics/api/v1/page_hit"  tb_site_uuid="fa72fdbf-d221-41c6-98b6-52b6935978c9" tb_post_uuid="b2eef426-f9ea-4614-8a31-6a58928f40c8" tb_post_type="page" tb_member_uuid="undefined" tb_member_status="undefined" tb_gift_link=""></script>
147<style>:root {--ghost-accent-color: #15171A;}</style>
148    
148<script type="text/javascript">
vendor: 372 bytes, line 148
148(function (i, s, o, g, r, a, m) { i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); ga('create', '
148UA-18897867-1
vendor: 35 bytes, line 148
148', 'auto'); ga('send', 'pageview');
148</script>
148
149
150</head>
151<body class="page-template page-contact">
152
153  <header class="site-nav padded">
154  <div class="wrapper">
155    <nav class="site-nav-pages">
156      <span class="site-nav-image" style="background-image: url(https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w600/2021/05/papa-new-banner-3.png);"></span>
157        <ul class="nav">
158    <li class="nav-home"><a href="https://www.johnpapa.net/">Home</a></li>
159    <li class="nav-speaking"><a href="https://www.johnpapa.net/speaking/">Speaking</a></li>
160    <li class="nav-training"><a href="https://www.johnpapa.net/training/">Training</a></li>
161    <li class="nav-articles"><a href="https://www.johnpapa.net/articles/">Articles</a></li>
162    <li class="nav-about"><a href="https://www.johnpapa.net/about/">About</a></li>
163    <li class="nav-contact nav-current"><a href="https://www.johnpapa.net/contact/">Contact</a></li>
164</ul>
165
166      <button type="button" class="site-nav-close padded">
167        <div class="wrapper">
168          <svg width="24px" height="25px" viewBox="0 0 24 25" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
169            <g id="Mobile" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
170              <g id="Mobile-Nav" transform="translate(-335.000000, -13.000000)" fill="#FFFFFF">
171                <g id="Group-4" transform="translate(335.000000, 13.000000)">
172                  <rect id="Rectangle-Copy-3" transform="translate(12.000000, 12.500000) rotate(45.000000) translate(-12.000000, -12.500000) " x="-3" y="11" width="30" height="3"></rect>
173                  <rect id="Rectangle-Copy-4" transform="translate(12.000000, 12.500000) scale(-1, 1) rotate(45.000000) translate(-12.000000, -12.500000) " x="-3" y="11" width="30" height="3"></rect>
174                </g>
175              </g>
176            </g>
177          </svg>
178        </div>
179      </button>
180    </nav>
181    <ul class="site-nav-social">
182      <li>
183        <a class="twitter" href="https://twitter.com/john_papa">
184          <span class="hidden">Twitter</span>
185          <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
186  <title>Twitter icon</title>
187  <path
188    d="M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z" />
189</svg>        </a>
190      </li>
191      <li>
192        <a class="instagram" href="https://instagram.com/_john.papa">
193          <span class="hidden">Instagram</span>
194          <svg viewBox="6.746 8.301 20.821 20.821" width="20.821" height="20.821">
195  <g id="Instagram" transform="matrix(0.072619, 0, 0, 0.072619, -1.434176, 0.121547)" style="">
196    <path
197      d="M366.28,233.93h-25a88.22,88.22,0,1,1-170.64,0h-25V355.25a11,11,0,0,0,11,11H355.24a11,11,0,0,0,11-11Zm0-77.19a11,11,0,0,0-11-11H322.17a11,11,0,0,0-11,11v33.09a11,11,0,0,0,11,11h33.07a11,11,0,0,0,11-11ZM256,200.86A55.14,55.14,0,1,0,311.14,256,55.13,55.13,0,0,0,256,200.86m110.28,198.5H145.72a33.09,33.09,0,0,1-33.08-33.09V145.72a33.08,33.08,0,0,1,33.08-33.08H366.28a33.07,33.07,0,0,1,33.08,33.08V366.27a33.08,33.08,0,0,1-33.08,33.09">
198    </path>
199  </g>
200</svg>        </a>
201      </li>
202      <li>
203        <a class="devdotto" href="https://dev.to/john_papa">
204          <span class="hidden">Dev.to</span>
205          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" role="img"><title>dev.to icon</title><path d="M7.42 10.05c-.18-.16-.46-.23-.84-.23H6l.02 2.44.04 2.45.56-.02c.41 0 .63-.07.83-.26.24-.24.26-.36.26-2.2 0-1.91-.02-1.96-.29-2.18zM0 4.94v14.12h24V4.94H0zM8.56 15.3c-.44.58-1.
20506.77-2.53.77H4.71V8.53h1.4c1.67 0 2.16.18 2.6.9.27.43.29.6.32 2.57.05 2.23-.02 2.73-.47 3.3zm5.09-5.47h-2.47v1.77h1.52v1.28l-.72.04-.75.03v1.77l1.22.03 1.2.04v1.28h-1.6c-1.53 0-1.6-.01-1.87-.3l-.3-.28v-3.16c0-3.02.01-3.18.25-3.48.23-.31.25-.31 1.88-.31h1.64v1.3zm4.68 5.45c-.17.43-.64.79-1 .79-.18 0-.45-.15-.67-.39-.32-.32-.45-.63-.82-2.08l-.9-3.39-.45-1.67h.76c.4 0 .75.02.75.05 0 .06 1.16 4.54 1.26 4.83.04.15.32-.7.73-2.3l.66-2.52.74-.04c.4-.02.73 0 .73.04 0 .14-1.67 6.38-1.8 6.68z"/></svg>        </a>
206      </li>
207      <li>
208        <a class="linkedin" href="http://www.linkedin.com/in/papajohn">
209          <span class="hidden">LinkedIn</span>
210          <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>LinkedIn icon</title><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>        </a>
211      </li>
212      <li>
213        <a class="rss" href="http://feeds.feedburner.com/johnpapa">
214          <span class="hidden">RSS</span>
215          <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>RSS icon</title><path d="M19.199 24C19.199 13.467 10.533 4.8 0 4.8V0c13.165 0 24 10.835 24 24h-4.801zM3.291 17.415c1.814 0 3.293 1.479 3.293 3.295 0 1.813-1.485 3.29-3.301 3.29C1.47 24 0 22.526 0 20.71s1.475-3.294 3.291-3.295zM15.909 24h-4.665c0-6.169-5.075-11.245-11.244-11.245V8.09c8.727 0 15.909 7.184 15.909 15.91z"/></svg>        </a>
216      </li>
217    </ul>
218    <button type="button" class="site-menu-open">
219      <svg width="26px" height="23px" viewBox="0 0 26 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
220        <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
221          <g transform="translate(-334.000000, -14.000000)" fill="#FFFFFF">
222            <g transform="translate(334.000000, 14.000000)">
223              <rect id="Rectangle" x="0" y="0" width="26" height="3"></rect>
224              <rect id="Rectangle-Copy" x="0" y="10" width="26" height="3"></rect>
225              <rect id="Rectangle-Copy-2" x="0" y="20" width="26" height="3"></rect>
226            </g>
227          </g>
228        </g>
229      </svg>
230    </button>
231  </div>
232</header>
233
234    
235
236<style type="text/css">
237@media (min-width: 1001px) {
238  .site-header {
239    background-image: url(https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w2000/2016/05/big-room.jpg);
240  }
241}
242
243@media (min-width: 601px) and (max-width: 1000px) {
244  .site-header {
245    background-image: url(https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w1000/2016/05/big-room.jpg);
246    background-image: -webkit-image-set(
247      url(https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w1000/2016/05/big-room.jpg) 1x,
248      url(https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w2000/2016/05/big-room.jpg) 2x
249    );
250    background-image: image-set(
251      url(https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w1000/2016/05/big-room.jpg) 1x,
252      url(https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w2000/2016/05/big-room.jpg) 2x
253    );
254  }
255}
256@media (max-width: 600px) {
257  .site-header {
258    background-image: url(https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w600/2016/05/big-room.jpg);
259    background-image: -webkit-image-set(
260      url(https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w600/2016/05/big-room.jpg) 1x,
261      url(https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w1000/2016/05/big-room.jpg) 2x
262    );
263    background-image: image-set(
264      url(https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w600/2016/05/big-room.jpg) 1x,
265      url(https://storage.ghost.io/c/fa/72/fa72fdbf-d221-41c6-98b6-52b6935978c9/content/images/size/w1000/2016/05/big-room.jpg) 2x
266    );
267  }
268}
269</style>
270<header class="site-header has-image">
271
272    <div class="padded-wrapper">
273
274    </div>
275  </header>
276
277
278
279    <div class="site-wrapper">
280
281        <div class="site-main-outer padded">
282          
283
284<main id="site-main" class="site-main-inner">
285
286  <article class="post-full post ">
287
288    <header class="post-header">
289      <h1>Contact</h1>
290    </header>
291
292    <section class="post-full-content">
293      <div class="post-content nice-type">
294        <!--kg-card-begin: markdown--><p>Thanks for wanting to get in touch with me! If you would like to engage in a conversation about your upcoming event, please refer to the channels below. I look forward to hearing from you.</p>
295<p>Please keep in mind that I get a huge amount of communications, so this page lists the channels I use and how I like to use them.</p>
296<p><strong>Twitter: <a href="http://twitter.com/john_papa?ref=johnpapa.net">@john_papa</a></strong></p>
297<p>I probably spend too much time here, but it has become my primary means of broadcasting things to the world. Please follow me here. I don't see every mention so you may 
297not get a reply via a public tweet, but I'll try.</p>
298<p><strong>LinkedIn: <a href="https://www.linkedin.com/in/papajohn?ref=johnpapa.net">papajohn</a></strong></p>
299<p>My background is decently well covered here. I accept connections from people I've met, worked with, spoken with or otherwise had enough interaction to feel that I can call them a professional contact. I don't respond to requests from people I don't know.</p>
300<!--kg-card-end: markdown-->
301      </div>
302    </section>
303
304    <div class="post-ads">
305  <div id="ad3" data-type="ad" data-publisher="lqm.johnpapa.site" data-zone="post" data-format="728x90"></div>
306  <div id="ad4" data-type="ad" data-publisher="lqm.johnpapa.site" data-zone="post" data-format="728x90"></div>
307  <div id="ad5" data-type="ad" data-publisher="lqm.johnpapa.site" data-zone="post" data-format="300x250"></div>
308  <div id="ad6" data-type="ad" data-publisher="lqm.johnpapa.site" data-zone="post" data-format="300x250"></div>
309</div>
310
311  </article>
312
313</main>
314
315
316
317
318
319
320        </div>
321
322        <div class="site-sidebar-outer">
323          <div class="site-sidebar-inner">
324  <div class="sidebar-item sidebar-box">
325    <div class="sidebar-box-content">
326      <h3 class="thin">John Papa</h3>
327      <p>Hi, I&#x27;m John Papa. I author this blog, create courses for Pluralsight, and work in Developer Relations. I am a professional storyteller, I contribute to OSS, and I&#x27;m a Web technologist</p>
328    </div>
329  </div>
330
331  <div class="sidebar-item sidebar-ad">
332    <div id="ad1" class="panel" data-type="ad" data-publisher="lqm.johnpapa.site" data-zone="sidebar"
333      data-format="160x600"></div>
334    <div id="ad1b" class="panel" data-type="ad" data-publisher="lqm.johnpapa.site" data-zone="sidebar"
335      data-format="160x600"></div>
336  </div>
337
338  <div class="sidebar-item sidebar-box sidebar-projects">
339    <div class="sidebar-box-content">
340      <h3 class="thin">Latest Projects</h3>
341
342      <a class="column" target="_blank" href="https://webrush.io">
343        <img width="250" src="https://www.johnpapa.net/assets/images/webrush-horizontal.png?v=SzESMgI36mLp4eCJ" alt="">
344      </a>
345
346      <a href="//pluralsight.pxf.io/c/1355333/432941/7490">
347        <img src="https://www.johnpapa.net/assets/images/pluralsight.png?v=VXDwwvRTW-uNEfXG" alt="" width="250" />
348        <img class="hidden" src="//pluralsight.pxf.io/i/1355333/432941/7490" />
349      </a>
350
351      <a href="//pluralsight.pxf.io/QdWQo">
352        <img src="https://www.johnpapa.net/assets/images/vue-gs.png?v=i4H6P_QrRHE5aIj3" alt="" width="301" />
353        <img class="hidden" src="//pluralsight.pxf.io/i/1355333/432942/7490" />
354      </a>
355
356      <a href="//pluralsight.pxf.io/dGBMK">
357        <img src="https://www.johnpapa.net/assets/images/vue-cli.png?v=ZKV7CoLwTDHjeQVD" alt="" width="301" />
358        <img class="hidden" src="//pluralsight.pxf.io/i/1355333/432942/7490" />
359      </a>
360
361      <a href="//pluralsight.pxf.io/V9eR6">
362        <img src="https://www.johnpapa.net/assets/images/ts-async.png?v=HtDBaF3v2D9Quiks" alt="" width="301" />
363        <img class="hidden" src="//pluralsight.pxf.io/i/1355333/432942/7490" />
364      </a>
365
366      <a href="//pluralsight.pxf.io/WN5VX">
367        <img src="https://www.johnpapa.net/assets/images/angular-cli.png?v=oMrukzl7ZeBF8UDN" alt="" width="301" />
368        <img class="hidden" src="//pluralsight.pxf.io/i/1355333/432942/7490" />
369      </a>
370    </div>
371  </div>
372
373  <div class="sidebar-item sidebar-box sidebar-tabs">
374    <div class="sidebar-tab-nav">
375      <button type="button" data-tab="0" class="sidebar-tab-nav-item is-active"><span>Must Read</span></button>
376      <button type="button" data-tab="1" class="sidebar-tab-nav-item"><span>Most Recent</span></button>
377    </div>
378    <div class="sidebar-tab-boxes sidebar-box-content">
379      <div class="sidebar-tab-box" data-tab="0">
380        <ul>
381          <li><a href="/async-comparisons/">Comparing Callbacks, Promises and Async Await in TypeScript</a></li>
382          <li><a href="/debug-angular-9-interacting-with-components/">Debug Angular 9: Interacting with Components</a></li>
383          <li><a href="/render-html-2/">Vanilla JavaScript and HTML - No frameworks. No libraries. No problem.</a></li>
384          <li>
384<a href="/shifting-your-node-express-apis-to-serverless/">Shifting Your Node Express APIs to Serverless</a></li>
385          <li><a href="/predictive-preloading-of-your-angular-bundles/">Predictive Preloading Strategy for Your Angular Bundles</a></li>
386          <li><a href="/how-i-write-online-articles/">How I Write Online Articles</a></li>
387          <li><a href="/debugnodein60/">Debug Your Node.js App in 60 Seconds</a></li>
388        </ul>
389      </div>
390      <div class="sidebar-tab-box" data-tab="1" style="display: none;">
391        <ul>
392          <li><a href="/the-next-js-for-angular-analog-on-web-rush-290/">The Next.js for Angular - Analog on Web Rush #290</a></li>
393          <li><a href="/vs-code-to-the-cloud-in-60-seconds-on-web-rush-289/">VS Code to the Cloud in 60 Seconds on Web Rush #289</a></li>
394          <li><a href="/make-ai-useful-for-you-on-web-rush-288/">Make AI Useful For You on Web Rush #288</a></li>
395          <li><a href="/why-you-as-a-developer-must-care-about-managing-your-apis-on-web-rush-287/">Why You As A Developer Must Care About Managing Your APIs on Web Rush #287</a></li>
396          <li><a href="/fast-development-with-visual-studio-on-web-rush-286/">Fast Development with Visual Studio on Web Rush #286</a></li>
397          <li><a href="/the-best-of-build-for-developers-on-web-rush-285/">The Best of Build for Developers on Web Rush #285</a></li>
398          <li><a href="/app-spaces-new-way-you-can-developer-apps-in-the-cloud-on-web-rush-284/">App Spaces: Simplifying App Development in Azure on Web Rush #284</a></li>
399        </ul>
400      </div>
401    </div>
402  </div>
403
404  <div class="sidebar-item sidebar-ad">
405    <div id="ad2" class="panel" data-type="ad" data-publisher="lqm.johnpapa.site" data-zone="sidebar"
406      data-format="300x250"></div>
407  </div>
408</div>
409
410        </div>
411
412    </div>
413
414    <footer class="site-footer">
415      <div class="padded">
416        <ul class="site-footer-social">
417          <li>
418            <a class="twitter" href="https://twitter.com/john_papa">
419              <span class="hidden">Twitter</span>
420              <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
421  <title>Twitter icon</title>
422  <path
423    d="M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z" />
424</svg>            </a>
425          </li>
426          <li>
427            <a class="instagram" href="https://instagram.com/_john.papa">
428              <span class="hidden">Instagram</span>
429              <svg viewBox="6.746 8.301 20.821 20.821" width="20.821" height="20.821">
430  <g id="Instagram" transform="matrix(0.072619, 0, 0, 0.072619, -1.434176, 0.121547)" style="">
431    <path
432      d="M366.28,233.93h-25a88.22,88.22,0,1,1-170.64,0h-25V355.25a11,11,0,0,0,11,11H355.24a11,11,0,0,0,11-11Zm0-77.19a11,11,0,0,0-11-11H322.17a11,11,0,0,0-11,11v33.09a11,11,0,0,0,11,11h33.07a11,11,0,0,0,11-11ZM256,200.86A55.14,55.14,0,1,0,311.14,256,55.13,55.13,0,0,0,256,200.86m110.28,198.5H145.72a33.09,33.09,0,0,1-33.08-33.09V145.72a33.08,33.08,0,0,1,33.08-33.08H366.28a33.07,33.07,0,0,1,33.08,33.08V366.27a33.08,33.08,0,0,1-33.08,33.09">
433    </path>
434  </g>
435</svg>            </a>
436          </li>
437          <li>
438            <a class="devdotto" href="https://dev.to/john_papa">
439              <span class="hidden">Dev.to</span>
440              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" role="img"><title>dev.to icon</title><path d="M7.42 10.05c-.18-.16-.46-.23-.84-.23H6l.02 2.44.04 2.45.56-.02c.41 0 .63-.07.83-.26.24-.24.26-.36.26-2.2 0-1.91-.02-1.96-.29-2.18zM0 4.94v14.12h24V4.94H0zM8.56 15.3c-.44.58-1.
44006.77-2.53.77H4.71V8.53h1.4c1.67 0 2.16.18 2.6.9.27.43.29.6.32 2.57.05 2.23-.02 2.73-.47 3.3zm5.09-5.47h-2.47v1.77h1.52v1.28l-.72.04-.75.03v1.77l1.22.03 1.2.04v1.28h-1.6c-1.53 0-1.6-.01-1.87-.3l-.3-.28v-3.16c0-3.02.01-3.18.25-3.48.23-.31.25-.31 1.88-.31h1.64v1.3zm4.68 5.45c-.17.43-.64.79-1 .79-.18 0-.45-.15-.67-.39-.32-.32-.45-.63-.82-2.08l-.9-3.39-.45-1.67h.76c.4 0 .75.02.75.05 0 .06 1.16 4.54 1.26 4.83.04.15.32-.7.73-2.3l.66-2.52.74-.04c.4-.02.73 0 .73.04 0 .14-1.67 6.38-1.8 6.68z"/></svg>            </a>
441          </li>
442          <li>
443            <a class="linkedin" href="http://www.linkedin.com/in/papajohn">
444              <span class="hidden">LinkedIn</span>
445              <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>LinkedIn icon</title><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>            </a>
446          </li>
447          <li>
448            <a class="rss" href="http://feeds.feedburner.com/johnpapa">
449              <span class="hidden">RSS</span>
450              <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>RSS icon</title><path d="M19.199 24C19.199 13.467 10.533 4.8 0 4.8V0c13.165 0 24 10.835 24 24h-4.801zM3.291 17.415c1.814 0 3.293 1.479 3.293 3.295 0 1.813-1.485 3.29-3.301 3.29C1.47 24 0 22.526 0 20.71s1.475-3.294 3.291-3.295zM15.909 24h-4.665c0-6.169-5.075-11.245-11.244-11.245V8.09c8.727 0 15.909 7.184 15.909 15.91z"/></svg>            </a>
451          </li>
452        </ul>
453        <div class="site-footer-legal">
454          <h6>Copyright 2026 John Papa</h6>
455          <p>This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>. In other words, share generously but provide attribution.</p>
456        </div>
457        <div class="site-footer-disclaimer">
458          <h6>Disclaimer</h6>
459          <p>Opinions expressed here are my own.</p>
460        </div>
461        <div class="site-footer-cite">
462          <h6>Published with <a href="https://ghost.org">Ghost</a></h6>
463          <p>This site is hosted on <a href="http://ghost.io">Ghost.io</a><br>Theme by <a href="https://crossstroke.co">Cross Stroke</a>.</p>
464        </div>
465      </div>
466    </footer>
467
468    
468<script>
469      var images = document.querySelectorAll('.kg-gallery-image img');
470      images.forEach(function (image) {
471        var container = image.closest('.kg-gallery-image');
472        var width = image.attributes.width.value;
473        var height = image.attributes.height.value;
474        var ratio = width / height;
475        container.style.flex = ratio + ' 1 0%';
476      });
477    </script>
477
478
479    
479<script>
480      var html_elem = document.querySelector("html");
481      var nav_open = document.querySelector(".site-menu-open");
482      var nav_close = document.querySelector(".site-nav-close");
483
484      nav_open.addEventListener('click', function(e){
485        e.preventDefault();
486        html_elem.setAttribute("data-nav-visible", "yes");
487      });
488
489      nav_close.addEventListener('click', function(e){
490        e.preventDefault();
491        html_elem.setAttribute("data-nav-visible", "no");
492      });
493    </script>
493
494
495    
495<script>
496      function _dmBootstrap(t) {
497        var e = document.createElement("script");
498        e.type = "text/javascript", e.async = !0, e.src = ("https:" == document.location.protocol ? "https://" : "http://") + t, (document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]).appendChild(e)
499      }
500      function _dmFollowup(t) {
501        "undefined" == typeof DMAds && _dmBootstrap("cdn2.DeveloperMedia.com/a.min.js")
502      }
503      !function() {
504        _dmBootstrap("cdn1.DeveloperMedia.com/a.min.js"), setTimeout(_dmFollowup, 2e3)
505      }();
506    </script>
506
507
508
509      
509<script type="text/javascript" src="https://www.johnpapa.net/assets/built/reframe.js?v=JbJIZon-q9A6QJWR"></script>
509
510  
510<script>
511    (function() {
512      reframe(document.querySelectorAll('.post-full-content iframe'));
513    })();
514  </script>
514
515
516  
516<script type="text/javascript" src="https://www.johnpapa.net/assets/built/prism.js?v=qPmSzJzVgN55gmEh"></script>
516
517  
517<script type="text/javascript">
518    Prism.plugins.autoloader.languages_path = '/assets/prism-components/';
519    Prism.plugins.autoloader.use_minified = false;
520  </script>
520
521
522  
522<script src="https://www.johnpapa.net/assets/built/headroom.js?v=kCX1JppsstF6vyOq"></script>
522
523  
523<script>
524    (function() {
525
526      var elem = document.querySelector(".site-nav");
527      var headroom = new Headroom(elem, {
528        "offset": 10
529      });
530      headroom.init();
531
532    })();
533  </script>
533
534
535<script>
536  // Simple polyfill for forEach support on a nodelist in MS Edge
537  if (window.NodeList && !NodeList.prototype.forEach) {
538    NodeList.prototype.forEach = Array.prototype.forEach;
539  }
540
541  (function () {
542    var sidebar_tab_buttons = document.querySelectorAll('.sidebar-tab-nav-item');
543
544    for (var i = 0; i < sidebar_tab_buttons.length; i++) {
545      sidebar_tab_buttons[i].addEventListener('click', function (e) {
546        e.preventDefault();
547
548        // get the index for the clicked tab
549        var target_tab_index = this.getAttribute('data-tab');
550
551        // Get the content box with that index
552        var target_tab = document.querySelectorAll('.sidebar-tab-box')[target_tab_index];
553
554        // And get all the other content boxes, except the selected one
555        var other_tabs = document.querySelectorAll(".sidebar-tab-box:not([data-tab='" + target_tab_index + "'])");
556
557        // Oh, and the other buttons, except the one that was clicked
558        var other_sidebar_tab_buttons = document.querySelectorAll(".sidebar-tab-nav-item:not([data-tab='" + target_tab_index + "'])");
559
560        // Loop over the now-inactive tabs and content boxes, and hide/deactivate them
561        other_tabs.forEach(function (item, i) {
562          item.style.display = 'none';
563        });
564        other_sidebar_tab_buttons.forEach(function (item, i) {
565          item.classList.remove('is-active');
566        });
567
568        // Finally, show the selected content, and active the correct tab
569        target_tab.style.display = 'block';
570        this.classList.add('is-active');
571      });
572    }
573
574  })();
575</script>
575
576
577
578
579    
580
581</body>
582</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.