1<!doctype html> 2<!--[if !IE]> 3<html class="no-js non-ie" lang="en-GB"> <![endif]--> 4<!--[if IE 7 ]> 5<html class="no-js ie7" lang="en-GB"> <![endif]--> 6<!--[if IE 8 ]> 7<html class="no-js ie8" lang="en-GB"> <![endif]--> 8<!--[if IE 9 ]> 9<html class="no-js ie9" lang="en-GB"> <![endif]--> 10<!--[if gt IE 9]><!--> 11<html class="no-js" lang="en-GB"> <!--<![endif]--> 12<head> 13<meta charset="UTF-8"> 14<meta name="viewport" content="width=device-width, initial-scale=1"> 15<meta name="theme-color" content="#2a9fbc"> 16<link rel="profile" href="https://gmpg.org/xfn/11"> 17
18<script data-name="BMC-Widget" src="https://cdnjs.buymeacoffee.com/1.0.0/widget.prod.min.js" data-id="stevejgordon" data-description="Support me on Buy me a coffee!" data-message="If you found this blog helpful, please buy me a coffee!" data-color="#FF813F" data-position="left" data-x_margin="18" data-y_margin="18"></script>
18<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> 19 <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> 20 21 <!-- This site is optimized with the Yoast SEO plugin v24.6 - https://yoast.com/wordpress/plugins/seo/ --> 22 <title>Steve Gordon - Code with Steve - Adventures in .NET</title> 23 <meta name="description" content="My blog where I discuss software development, mostly using .NET Core and ASP.NET Core." /> 24 <link rel="canonical" href="https://www.stevejgordon.co.uk/" /> 25 <link rel="next" href="https://www.stevejgordon.co.uk/page/2" /> 26 <meta property="og:locale" content="en_GB" /> 27 <meta property="og:type" content="website" /> 28 <meta property="og:title" content="Steve Gordon - Code with Steve" /> 29 <meta property="og:description" content="My blog where I discuss ASP.NET Core and .NET Core development." /> 30 <meta property="og:url" content="https://www.stevejgordon.co.uk/" /> 31 <meta property="og:site_name" content="Steve Gordon - Code with Steve" /> 32 <meta name="twitter:card" content="summary_large_image" /> 33 <meta name="twitter:site" content="@stevejgordon" /> 34
34<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"CollectionPage","@id":"https://www.stevejgordon.co.uk/","url":"https://www.stevejgordon.co.uk/","name":"Steve Gordon - Code with Steve - Adventures in .NET","isPartOf":{"@id":"https://www.stevejgordon.co.uk/#website"},"about":{"@id":"https://www.stevejgordon.co.uk/#/schema/person/854225a21893fb73c1a216026c0e8c87"},"description":"My blog where I discuss software development, mostly using .NET Core and ASP.NET Core.","breadcrumb":{"@id":"https://www.stevejgordon.co.uk/#breadcrumb"},"inLanguage":"en-GB"},{"@type":"BreadcrumbList","@id":"https://www.stevejgordon.co.uk/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home"}]},{"@type":"WebSite","@id":"https://www.stevejgordon.co.uk/#website","url":"https://www.stevejgordon.co.uk/","name":"Steve Gordon - Code with Steve","description":"Adventures in .NET","publisher":{"@id":"https://www.stevejgordon.co.uk/#/schema/person/854225a21893fb73c1a216026c0e8c87"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.stevejgordon.co.uk/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https://www.stevejgordon.co.uk/#/schema/person/854225a21893fb73c1a216026c0e8c87","name":"Steve Gordon","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https://www.stevejgordon.co.uk/#/schema/person/image/","url":"https://www.stevejgordon.co.uk/wp-content/uploads/2019/03/Portrait-Small-Facing-Left.png","contentUrl":"https://www.stevejgordon.co.uk/wp-content/uploads/2019/03/Portrait-Small-Facing-Left.png","width":600,"height":601,"caption":"Steve Gordon"},"logo":{"@id":"https://www.stevejgordon.co.uk/#/schema/person/image/"},"description":"Steve Gordon is a Pluralsight author, 7x Microsoft MVP, and a .NET engineer at Elastic where he maintains the .NET APM agent and related libraries. Steve is passionate about community and all things .NET related, having worked with ASP.NET for over 21 years. Steve enjoys sharing his knowledge through his blog, in videos and by presenting talks at user groups and conferences. Steve is excited to participate in the active .NET community and founded .NET South East, a .NET Meetup group based in Brighton. He enjoys contributing to and maintaining OSS projects. You can find Steve on most social media platforms as @stevejgordon","sameAs":["https://www.stevejgordon.co.uk","https://www.linkedin.com/in/steve-j-gordon/","https://x.com/stevejgordon","https://www.youtube.com/c/stevegordon"]}]}</script>
34 35 <!-- / Yoast SEO plugin. --> 36 37 38<link rel='dns-prefetch' href='//www.stevejgordon.co.uk' /> 39<link rel='dns-prefetch' href='//fonts.googleapis.com' /> 40<link rel="alternate" type="application/rss+xml" title="Steve Gordon - Code with Steve » Feed" href="https://www.stevejgordon.co.uk/feed" /> 41<link rel="alternate" type="application/rss+xml" title="Steve Gordon - Code with Steve » Comments Feed" href="https://www.stevejgordon.co.uk/comments/feed" /> 42 <!-- This site uses the Google Analytics by MonsterInsights plugin v11.3.0 - Using Analytics tracking - https://www.monsterinsights.com/ -->
vendor: 59 bytes, lines 42-43
42 43 <script src="//www.googletagmanager.com/gtag/js?id=
43G-8TF3DGJTVD
vendor: 91 bytes, lines 43-44
43" data-cfasync="false" data-wpfc-render="false" type="text/javascript" async></script> 44
44<script data-cfasync="false" data-wpfc-render="false" type="text/javascript"> 45 var mi_version = '11.3.0'; 46 var mi_track_user = true; 47 var mi_no_track_reason = ''; 48 var MonsterInsightsDefaultLocations = {"page_location":"https:\/\/www.stevejgordon.co.uk\/"}; 49 if ( typeof MonsterInsightsPrivacyGuardFilter === 'function' ) { 50 var MonsterInsightsLocations = (typeof MonsterInsightsExcludeQuery === 'object') ? MonsterInsightsPrivacyGuardFilter( MonsterInsightsExcludeQuery ) : MonsterInsightsPrivacyGuardFilter( MonsterInsightsDefaultLocations ); 51 } else { 52 var MonsterInsightsLocations = (typeof MonsterInsightsExcludeQuery === 'object') ? MonsterInsightsExcludeQuery : MonsterInsightsDefaultLocations; 53 } 54 55 var disableStrs = [ 56 'ga-disable-G-8TF3DGJTVD', 57 ]; 58 59 /* Function to detect opted out users */ 60 function __gtagTrackerIsOptedOut() { 61 for (var index = 0; index < disableStrs.length; index++) { 62 if (document.cookie.indexOf(disableStrs[index] + '=true') > -1) { 63 return true; 64 } 65 } 66 67 return false; 68 } 69 70 /* Disable tracking if the opt-out cookie exists. */ 71 if (__gtagTrackerIsOptedOut()) { 72 for (var index = 0; index < disableStrs.length; index++) { 73 window[disableStrs[index]] = true; 74 } 75 } 76 77 /* Opt-out function */ 78 function __gtagTrackerOptout() { 79 for (var index = 0; index < disableStrs.length; index++) { 80 document.cookie = disableStrs[index] + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/'; 81 window[disableStrs[index]] = true; 82 } 83 } 84 85 if ('undefined' === typeof gaOptout) { 86 function gaOptout() { 87 __gtagTrackerOptout(); 88 } 89 } 90 window.dataLayer = window.dataLayer || []; 91 92 window.MonsterInsightsDualTracker = { 93 helpers: {}, 94 trackers: {}, 95 }; 96 if (mi_track_user) { 97 function __gtagDataLayer() { 98 dataLayer.push(arguments); 99 } 100 101 function __gtagTracker(type, name, parameters) { 102 if (!parameters) { 103 parameters = {}; 104 } 105 106 if (parameters.send_to) { 107 __gtagDataLayer.apply(null, arguments); 108 return; 109 } 110 111 if (type === 'event') { 112 parameters.send_to = monsterinsights_frontend.v4_id; 113 var hookName = name; 114 if (typeof parameters['event_category'] !== 'undefined') { 115 hookName = parameters['event_category'] + ':' + name; 116 } 117 118 if (typeof MonsterInsightsDualTracker.trackers[hookName] !== 'undefined') { 119 MonsterInsightsDualTracker.trackers[hookName](parameters); 120 } else { 121 __gtagDataLayer('event', name, parameters); 122 } 123 124 } else { 125 __gtagDataLayer.apply(null, arguments); 126 } 127 } 128 129 __gtagTracker('js', new Date()); 130 __gtagTracker('set', { 131 'developer_id.dZGIzZG': true, 132 }); 133 if ( MonsterInsightsLocations.page_location ) { 134 __gtagTracker('set', MonsterInsightsLocations); 135 } 136 __gtagTracker('config', 'G-8TF3DGJTVD', {"forceSSL":"true"} ); 137 window.gtag = __gtagTracker; (function () { 138 /* https://developers.google.com/analytics/devguides/collection/analyticsjs/ */ 139 /* ga and __gaTracker compatibility shim. */ 140 var noopfn = function () { 141 return null; 142 }; 143 var newtracker = function () { 144 return new Tracker(); 145 }; 146 var Tracker = function () { 147 return null; 148 }; 149 var p = Tracker.prototype; 150 p.get = noopfn; 151 p.set = noopfn; 152 p.send = function () { 153 var args = Array.prototype.slice.call(arguments); 154 args.unshift('send'); 155 __gaTracker.apply(null, args); 156 }; 157 var __gaTracker = function () { 158 var len = arguments.length; 159 if (len === 0) { 160 return; 161 } 162 var f = arguments[len - 1]; 163 if (typeof f !== 'object' || f === null || typeof f.hitCallback !== 'function') { 164 if ('send' === arguments[0]) { 165 var hitConverted, hitObject = false, action; 166 if ('event' === arguments[1]) { 167 if ('undefined' !== typeof arguments[3]) { 168 hitObject = { 169 'eventAction': arguments[3], 170 'eventCategory': arguments[2], 171 'eventLabel': arguments[4], 172 'value': arguments[5] ? arguments[5] : 1, 173 } 174 } 175 } 176 if ('pageview' === arguments[1]) { 177 if ('undefined' !== typeof arguments[2]) { 178 hitObject = { 179 'eventAction': 'page_view', 180 'page_path': arguments[2], 181 } 182 } 183 } 184 if (typeof arguments[2] === 'object') { 185 hitObject = arguments[2]; 186 } 187 if (typeof arguments[5] === 'object') { 188 Object.assign(hitObject, arguments[5]); 189 } 190 if ('undefined' !== typeof arguments[1].hitType) { 191 hitObject = arguments[1]; 192 if ('pageview' === hitObject.hitType) { 193 hitObject.eventAction = 'page_view'; 194 } 195 } 196 if (hitObject) { 197 action = 'timing' === arguments[1].hitType ? 'timing_complete' : hitObject.eventAction;
198 hitConverted = mapArgs(hitObject); 199 __gtagTracker('event', action, hitConverted); 200 } 201 } 202 return; 203 } 204 205 function mapArgs(args) { 206 var arg, hit = {}; 207 var gaMap = { 208 'eventCategory': 'event_category', 209 'eventAction': 'event_action', 210 'eventLabel': 'event_label', 211 'eventValue': 'event_value', 212 'nonInteraction': 'non_interaction', 213 'timingCategory': 'event_category', 214 'timingVar': 'name', 215 'timingValue': 'value', 216 'timingLabel': 'event_label', 217 'page': 'page_path', 218 'location': 'page_location', 219 'title': 'page_title', 220 'referrer' : 'page_referrer', 221 }; 222 for (arg in args) { 223 if (!(!args.hasOwnProperty(arg) || !gaMap.hasOwnProperty(arg))) { 224 hit[gaMap[arg]] = args[arg]; 225 } else { 226 hit[arg] = args[arg]; 227 } 228 } 229 return hit; 230 } 231 232 try { 233 f.hitCallback(); 234 } catch (ex) { 235 } 236 }; 237 __gaTracker.create = newtracker; 238 __gaTracker.getByName = newtracker; 239 __gaTracker.getAll = function () { 240 return []; 241 }; 242 __gaTracker.remove = noopfn; 243 __gaTracker.loaded = true; 244 window['__gaTracker'] = __gaTracker; 245 })(); 246 } else { 247 console.log(""); 248 (function () { 249 function __gtagTracker() { 250 return null; 251 } 252 253 window['__gtagTracker'] = __gtagTracker; 254 window['gtag'] = __gtagTracker; 255 })(); 256 } 257 </script>
257 258 <!-- / Google Analytics by MonsterInsights --> 259
259<script type="text/javascript"> 260/* <![CDATA[ */ 261window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/www.stevejgordon.co.uk\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.7.9"}}; 262/*! This file is auto-generated */ 263!function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings); 264/* ]]> */ 265</script>
265 266<style id='wp-emoji-styles-inline-css' type='text/css'> 267 268 img.wp-smiley, img.emoji { 269 display: inline !important; 270 border: none !important; 271 box-shadow: none !important; 272 height: 1em !important; 273 width: 1em !important; 274 margin: 0 0.07em !important; 275 vertical-align: -0.1em !important; 276 background: none !important; 277 padding: 0 !important; 278 } 279</style> 280<link rel='stylesheet' id='wp-block-library-css' href='https://www.stevejgordon.co.uk/wp-includes/css/dist/block-library/style.min.css?ver=6.7.9' type='text/css' media='all' /> 281<style id='classic-theme-styles-inline-css' type='text/css'> 282/*! This file is auto-generated */ 283.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} 284</style> 285<style id='global-styles-inline-css' type='text/css'> 286:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
286--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
286.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} 287:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} 288:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} 289:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} 290</style> 291<link rel='stylesheet' id='contact-form-7-css' href='https://www.stevejgordon.co.uk/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=6.0.5' type='text/css' media='all' /> 292<link rel='stylesheet' id='mailerlite_forms.css-css' href='https://www.stevejgordon.co.uk/wp-content/plugins/official-mailerlite-sign-up-forms/assets/css/mailerlite_forms.css?ver=1.7.26' type='text/css' media='all' /> 293<link rel='stylesheet' id='ce_responsive-css' href='https://www.stevejgordon.co.uk/wp-content/plugins/simple-embed-code/css/video-container.min.css?ver=2.5.1' type='text/css' media='all' /> 294<link rel='stylesheet' id='sparkling-bootstrap-css' href='https://www.stevejgordon.co.uk/wp-content/themes/sparkling/assets/css/bootstrap.min.css?ver=6.7.9' type='text/css' media='all' /> 295<link rel='stylesheet' id='sparkling-icons-css' href='https://www.stevejgordon.co.uk/wp-content/themes/sparkling/assets/css/fontawesome-all.min.css?ver=5.1.1.' type='text/css' media='all' /> 296<link rel='stylesheet' id='sparkling-fonts-css' href='//fonts.googleapis.com/css?family=Open+Sans%3A400italic%2C400%2C600%2C700%7CRoboto+Slab%3A400%2C300%2C700&ver=6.7.9' type='text/css' media='all' /> 297<link rel='stylesheet' id='sparkling-style-css' href='https://www.stevejgordon.co.uk/wp-content/themes/sparkling/style.css?ver=2.4.2' type='text/css' media='all' />
298<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-content/plugins/google-analytics-for-wordpress/assets/js/frontend-gtag.min.js?ver=11.3.0" id="monsterinsights-frontend-script-js" async="async" data-wp-strategy="async"></script>
vendor: 1 bytes, line 298
298
299<script data-cfasync="false" data-wpfc-render="false" type="text/javascript" id='monsterinsights-frontend-script-js-extra'>/* <![CDATA[ */ 300var monsterinsights_frontend = {"js_events_tracking":"true","download_extensions":"doc,pdf,ppt,zip,xls,docx,pptx,xlsx","inbound_paths":"[]","home_url":"https:\/\/www.stevejgordon.co.uk","hash_tracking":"false","v4_id":"G-8TF3DGJTVD"};/* ]]> */ 301</script>
vendor: 1 bytes, line 301
301
302<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
vendor: 1 bytes, line 302
302
303<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
vendor: 1 bytes, line 303
303
304<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-content/themes/sparkling/assets/js/vendor/bootstrap.min.js?ver=6.7.9" id="sparkling-bootstrapjs-js"></script>
vendor: 1 bytes, line 304
304
305<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-content/themes/sparkling/assets/js/functions.js?ver=20180503" id="sparkling-functions-js"></script>
305 306<link rel="https://api.w.org/" href="https://www.stevejgordon.co.uk/wp-json/" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.stevejgordon.co.uk/xmlrpc.php?rsd" /> 307<meta name="generator" content="WordPress 6.7.9" /> 308 <!-- MailerLite Universal --> 309
309<script> 310 (function (m, a, i, l, e, r) { 311 m['MailerLiteObject'] = e; 312 313 function f() { 314 var c = {a: arguments, q: []}; 315 var r = this.push(c); 316 return "number" != typeof r ? r : f.bind(c.q); 317 } 318 319 f.q = f.q || []; 320 m[e] = m[e] || f.bind(f.q); 321 m[e].q = m[e].q || f.q; 322 r = a.createElement(i); 323 var _ = a.getElementsByTagName(i)[0]; 324 r.async = 1; 325 r.src = l + '?' + (~~(new Date().getTime() / 10000000)); 326 _.parentNode.insertBefore(r, _); 327 })(window, document, 'script', 'https://static.mailerlite.com/js/universal.js', 'ml'); 328 329 var ml_account = ml('accounts', '2206765', 'i6t8a5v9b2', 'load'); 330 </script>
330 331 <!-- End MailerLite Universal --> 332 <style type="text/css" media="screen"> 333 /** 334 * Plugin Name: Subtitles 335 * Plugin URI: http://wordpress.org/plugins/subtitles/ 336 * Description: Easily add subtitles into your WordPress posts, pages, custom post types, and themes. 337 * Author: We Cobble 338 * Author URI: https://wecobble.com/ 339 * Version: 2.2.0 340 * License: GNU General Public License v2 or later 341 * License URI: http://www.gnu.org/licenses/gpl-2.0.html 342 */ 343 344 /** 345 * Be explicit about this styling only applying to spans, 346 * since that's the default markup that's returned by 347 * Subtitles. If a developer overrides the default subtitles 348 * markup with another element or class, we don't want to stomp 349 * on that. 350 * 351 * @since 1.0.0 352 */ 353 span.entry-subtitle { 354 display: block; /* Put subtitles on their own line by default. */ 355 font-size: 0.53333333333333em; /* Sensible scaling. It's assumed that post titles will be wrapped in heading tags. */ 356 } 357 /** 358 * If subtitles are shown in comment areas, we'll hide them by default. 359 * 360 * @since 1.0.5 361 */ 362 #comments .comments-title span.entry-subtitle { 363 display: none; 364 } 365 </style><style type="text/css">a, #infinite-handle span, #secondary .widget .post-content a, .entry-meta a {color:#5d1fc1}a:hover, a:focus, a:active, #secondary .widget .post-content a:hover, #secondary .widget .post-content a:focus, .woocommerce nav.woocommerce-pagination ul li a:focus, .woocommerce nav.woocommerce-pagination ul li a:hover, .woocommerce nav.woocommerce-pagination ul li span.current, #secondary .widget a:hover, #secondary .widget a:focus {color: #2abc90;}.btn-default, .label-default, .flex-caption h2, .btn.btn-default.read-more,button, 366 .navigation .wp-pagenavi-pagination span.current,.navigation .wp-pagenavi-pagination a:hover, 367 .woocommerce a.button, .woocommerce button.button, 368 .woocommerce input.button, .woocommerce #respond input#submit.alt, 369 .woocommerce a.button, .woocommerce button.button, 370 .woocommerce a.button.alt, .woocommerce button.button.alt, .woocommerce input.button.alt { background-color: #2abc90; border-color: #2abc90;}.site-main [class*="navigation"] a, .more-link, .pagination>li>a, .pagination>li>span, .cfa-button { color: #2abc90}.cfa-button {border-color: #2abc90;}.btn-default:hover, .btn-default:focus,.label-default[href]:hover, .label-default[href]:focus, .tagcloud a:hover, .tagcloud a:focus, button, .main-content [class*="navigation"] a:hover, .main-content [class*="navigation"] a:focus, #infinite-handle span:hover, #infinite-handle span:focus-within, .btn.btn-default.read-more:hover, .btn.btn-default.read-more:focus, .btn-default:hover, .btn-default:focus, .scroll-to-top:hover, .scroll-to-top:focus, .btn-default:active, .btn-default.active, .site-main [class*="navigation"] a:hover, .site-main [class*="navigation"] a:focus, .more-link:hover, .more-link:focus, #image-navigation .nav-previous a:hover, #image-navigation .nav-previous a:focus, #image-navigation .nav-next a:hover, #image-navigation .nav-next a:focus, .cfa-button:hover, .cfa-button:focus, .woocommerce a.button:hover, .woocommerce a.button:focus, .woocommerce button.button:hover, .woocommerce button.button:focus, .woocommerce input.button:hover, .woocommerce input.button:focus, .woocommerce #respond input#submit.alt:hover, .woocommerce #respond input#submit.alt:focus, .woocommerce a.button:hover, .woocommerce a.button:focus, .woocommerce button.button:hover, .woocommerce button.button:focus, .woocommerce input.button:hover, .woocommerce input.button:focus, .woocommerce a.button.alt:hover, .woocommerce a.button.alt:focus, .woocommerce button.button.alt:hover, .woocommerce button.button.alt:focus, .woocommerce input.button.alt:hover, .woocommerce input.button.alt:focus, a:hover .flex-caption h2 { background-color: #2a9fbc; border-color: #2a9fbc; }.pagination>li>a:focus, .pagination>li>a:hover, .pagination>li>span:focus-within, .pagination>li>span:hover {color: #2a9fbc;}h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6, .entry-title, .entry-title a {color: #2a9fbc;}.navbar.navbar-default, .navbar-default .navbar-nav .open .dropdown-menu > li > a {background-color: #2a9fbc;}.navbar-default .navbar-nav > li:hover > a, .navbar-default .navbar-nav > li:focus-within > a, .navbar-nav > li:hover > .caret, .navbar-nav > li:focus-within > .caret, .navbar-default .navbar-nav.sparkling-mobile-menu > li.open > a, .navbar-default .navbar-nav.sparkling-mobile-menu > li.open > .caret, .navbar-default .navbar-nav > li:hover, .navbar-default .navbar-nav > li:focus-within, .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > .caret, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus, .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus, .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {color: #0a0002;}@media (max-width: 767px){ .navbar-default .navbar-nav > li.open > a, .navbar-default .navbar-nav > li.open > .caret { color: #0a0002 !important; } }.social-icons li a {background-color: #2abc90 !important ;}
370body, .entry-content {color:#4c4c4c}</style> <style type="text/css"> 371 .navbar > .container .navbar-brand { 372 color: #a3a3a3; 373 } 374 </style> 375 <link rel="icon" href="https://www.stevejgordon.co.uk/wp-content/uploads/2019/07/cropped-Portrait-Small-32x32.png" sizes="32x32" /> 376<link rel="icon" href="https://www.stevejgordon.co.uk/wp-content/uploads/2019/07/cropped-Portrait-Small-192x192.png" sizes="192x192" /> 377<link rel="apple-touch-icon" href="https://www.stevejgordon.co.uk/wp-content/uploads/2019/07/cropped-Portrait-Small-180x180.png" /> 378<meta name="msapplication-TileImage" content="https://www.stevejgordon.co.uk/wp-content/uploads/2019/07/cropped-Portrait-Small-270x270.png" /> 379 <style type="text/css" id="wp-custom-css"> 380 .widget_sp_image img {border-radius: 50%; width: 200px 381} 382 383.navbar > .container .navbar-header .navbar-brand { color: white; font-family: 'Montserrat', sans-serif; text-transform: uppercase; } 384 385.syntaxhighlighter code { 386 color:#217b91; 387 background-color: #eaeffa; 388} 389 390.syntaxhighlighter table td.code 391{ vertical-align: top !important;} 392 393.syntaxhighlighter { 394 border: 1px solid #CDCDCD; 395 margin-bottom: 10px; 396 margin-top: 10px; 397 padding: 12px 2px; 398} 399 400.single_line table td.code { 401 padding-left: 8px !important; 402} 403 404.syntaxhighlighter .line { 405 line-height: 1.4 !important; 406} 407 408.syntaxhighlighter .line code { 409 font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace !important; 410} 411 412#secondary .widget ul li { color: #4f9ee3;} 413 414.navbar { 415 background: #2a9fbc; 416background: -moz-linear-gradient(-45deg, #2a9fbc 0%, #2abc90 100%); 417background: -webkit-linear-gradient(-45deg, #2a9fbc 0%,#2abc90 100%); 418background: linear-gradient(135deg, #2a9fbc 0%,#2abc90 100%); 419filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2a9fbc', endColorstr='#2abc90',GradientType=1 ); 420} 421 422#secondary .widget a { color: #2a56bc;} 423 424.entry-title a {color: #2A9FBC;} 425 426.entry-title a:hover { 427 color: #2ABC90; 428} 429 430.entry-title-primary { 431 font-family: 'Barlow Condensed', sans-serif; padding-top: 5px; text-transform: uppercase; letter-spacing: 1px 432} 433 434.site-main h1 { 435 font-family: 'Barlow Condensed', sans-serif; text-transform: uppercase; 436} 437 438.site-main h2 { 439 font-family: 'Barlow Condensed', sans-serif; text-transform: uppercase; 440} 441 442#secondary .widget > h3{ 443 font-family: 'Barlow', sans-serif; text-transform: uppercase; color: #2A9FBC; 444} 445 446#menu-social li a[href*="twitter.com"]:hover { 447 background-color: #dedede !important; 448} 449 450 451#menu-social li a[href*="github.com"]:hover { 452 background-color: #dedede !important; 453} 454 455 456#menu-social li a[href*="linkedin.com"]:hover { 457 background-color: #dedede !important; 458} 459 460#menu-social li a[href*="youtube.com"]:hover { 461 background-color: #dedede !important; 462} 463 464#menu-social li a[href*="fosstodon.org"]:hover { 465 background-color: #dedede !important; 466} 467 468.author-name { 469 font-family: 'Barlow Condensed', sans-serif; text-transform: uppercase; 470} 471 472.tagcloud a { background-color: #6c6c6c} 473 474 475.site-main h3 { 476 font-family: 'Barlow Condensed', sans-serif; text-transform: uppercase; 477} 478 479.entry-subtitle { 480 font-family: 'Barlow', sans-serif; padding-top: 5px; 481} 482 483.cta-button { 484 width: 100%; 485 text-align: center; 486} 487 488.cta-view-course { 489 margin-top: 15px; 490 background-color: #2abc90; 491 color: #fff; 492 font-size: 23px; 493 display: inline-block; 494 height: 60px; 495 line-height: 60px; 496 width: 50%; 497 margin-bottom: 25px; 498 border-radius: 5px; 499} 500.cta-view-course:hover { 501 color : #2abc90; 502 background-color: #dedede; 503} 504 505.twitter-tweet { 506 margin: auto; 507} 508 509code 510{ 511 color: #3f34a3; 512 background-color: #e8eafa; 513 font-size: 97%; 514 font-weight: bold; 515 padding: 3px 5px; 516} 517 518.wp-block-image 519{ 520 padding-top: 25px; 521 padding-bottom: 25px; 522} </style> 523 524</head> 525 526<body class="home blog"> 527 <a class="sr-only sr-only-focusable" href="#content">Skip to main content</a> 528<div id="page" class="hfeed site"> 529 530 <header id="masthead" class="site-header" role="banner"> 531 <nav class="navbar navbar-default" role="navigation"> 532 <div class="container"> 533 <div class="row"> 534 <div class="site-navigation-inner col-sm-12"> 535 <div class="navbar-header"> 536 537 538 <div id="logo"> 539 <h1 class="site-name"> <a class="navbar-brand" href="https://www.stevejgordon.co.uk/" title="Steve Gordon – Code with Steve" rel="home">Steve Gordon – Code with Steve</a> 540 </h1> </div><!-- end of #logo --> 541 542 <button type="button" class="btn navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse"> 543 <span class="sr-only">Toggle navigation</span> 544 <span class="icon-bar"></span> 545 <span class="icon-bar"></span> 546 <span class="icon-bar"></span> 547 </button> 548 </div> 549 550 551 552 <div class="collapse navbar-collapse navbar-ex1-collapse"><ul id="menu-main" class="nav navbar-nav"><li id="menu-item-12" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12"><a href="https://www.stevejgordon.co.uk/about">About Me</a></li> 553<li id="menu-item-150" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-150"><a href="https://www.stevejgordon.co.uk/?page_id=148">Contact</a></li> 554<li id="menu-item-2438" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2438"><a href="https://www.stevejgordon.co.uk/subscribe-for-updates">Subscribe</a></li> 555</ul></div> 556 557 558 </div> 559 </div> 560 </div> 561 </nav><!-- .site-navigation --> 562 </header><!-- #masthead --> 563
564 <div id="content" class="site-content"> 565 566 <div class="top-section"> 567 </div> 568 569 <div class="container main-content-area"> 570 <div class="row side-pull-left"> 571 <div class="main-content-inner col-sm-12 col-md-8"> 572 573 <div id="primary" class="content-area"> 574 <main id="main" class="site-main" role="main"> 575 576 577<article id="post-3213" class="post-3213 post type-post status-publish format-standard hentry category-net tag-encryption tag-json tag-system-text-json tag-typeinforesolver"> 578 <div class="blog-item-wrap"> 579 <a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-2" title="Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 2)" > 580 </a> 581 <div class="post-inner-content"> 582 <header class="entry-header page-header"> 583 584 <h2 class="entry-title"><a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-2" rel="bookmark">Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 2)</a></h2> 585 586 <div class="entry-meta"> 587 <span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-2" rel="bookmark"><time class="entry-date published" datetime="2026-02-05T15:15:17+00:00">5th February 2026</time><time class="updated" datetime="2026-02-05T15:15:18+00:00">5th February 2026</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://www.stevejgordon.co.uk/author/stevejgordon">Steve Gordon</a></span></span> 588 589 </div><!-- .entry-meta --> 590 </header><!-- .entry-header --> 591 592 <div class="entry-content"> 593 594 <p>In the previous post, we discussed the foundations for automatic data encryption of properties during serialisation using System.Text.Json. In this post, we’ll continue our journey, moving toward removing our fake “encryption” and replacing it with actual encryption. Along the way we’ll establish some abstractions and a design that allows us to develop flexible encryption and […]</p> 595 <p><a class="btn btn-default read-more" href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-2" title="Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 2)">Read More</a></p> 596 597 </div><!-- .entry-content --> 598 </div> 599 </div> 600</article><!-- #post-## --> 601 602<article id="post-3198" class="post-3198 post type-post status-publish format-standard hentry category-asp-net-core"> 603 <div class="blog-item-wrap"> 604 <a href="https://www.stevejgordon.co.uk/the-grand-mystery-of-the-missing-18-bytes" title="The Grand Mystery of the Missing 18 Bytes" > 605 </a> 606 <div class="post-inner-content"> 607 <header class="entry-header page-header"> 608 609 <h2 class="entry-title"><a href="https://www.stevejgordon.co.uk/the-grand-mystery-of-the-missing-18-bytes" rel="bookmark">The Grand Mystery of the Missing 18 Bytes</a></h2> 610 611 <div class="entry-meta"> 612 <span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://www.stevejgordon.co.uk/the-grand-mystery-of-the-missing-18-bytes" rel="bookmark"><time class="entry-date published" datetime="2026-01-28T15:33:29+00:00">28th January 2026</time><time class="updated" datetime="2026-01-28T15:33:30+00:00">28th January 2026</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://www.stevejgordon.co.uk/author/stevejgordon">Steve Gordon</a></span></span> 613 614 </div><!-- .entry-meta --> 615 </header><!-- .entry-header --> 616 617 <div class="entry-content"> 618 619 <p>In this brief blog post, I will share the tale of the mystery surrounding the missing 18 bytes. While preparing a new conference session on practical application performance optimisation, I reviewed my demo, which includes taking memory profiles as well as benchmarks during the performance optimisation loop. I like to be prepared for any and […]</p> 620 <p><a class="btn btn-default read-more" href="https://www.stevejgordon.co.uk/the-grand-mystery-of-the-missing-18-bytes" title="The Grand Mystery of the Missing 18 Bytes">Read More</a></p> 621 622 </div><!-- .entry-content --> 623 </div> 624 </div> 625</article><!-- #post-## --> 626 627<article id="post-3180" class="post-3180 post type-post status-publish format-standard hentry category-asp-net-core"> 628 <div class="blog-item-wrap"> 629 <a href="https://www.stevejgordon.co.uk/talk-application-performance-optimisation-in-practice-60-mins" title="Talk: Application Performance Optimisation in Practice (60 mins)" > 630 </a> 631 <div class="post-inner-content"> 632 <header class="entry-header page-header"> 633 634 <h2 class="entry-title"><a href="https://www.stevejgordon.co.uk/talk-application-performance-optimisation-in-practice-60-mins" rel="bookmark">Talk: Application Performance Optimisation in Practice (60 mins)</a></h2> 635 636 <div class="entry-meta"> 637 <span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://www.stevejgordon.co.uk/talk-application-performance-optimisation-in-practice-60-mins" rel="bookmark"><time class="entry-date published" datetime="2026-01-27T16:31:56+00:00">27th January 2026</time><time class="updated" datetime="2026-01-27T16:38:51+00:00">27th January 2026</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://www.stevejgordon.co.uk/author/stevejgordon">Steve Gordon</a></span></span> 638 639 </div><!-- .entry-meta --> 640 </header><!-- .entry-header --> 641 642 <div class="entry-content"> 643 644 <p>Abstract Application performance always matters. Sometimes critically, sometimes subtly, but itâs never irrelevant. While many developers rightly caution that âpremature optimisation is the root of all evil,â the opposite mistake, ignoring performance until it becomes a serious issue, can be just as problematic. This talk explores the practical aspects of performance optimisation in .NET. Weâll […]</p> 645 <p><a class="btn btn-default read-more" href="https://www.stevejgordon.co.uk/talk-application-performance-optimisation-in-practice-60-mins" title="Talk: Application Performance Optimisation in Practice (60 mins)">Read More</a></p> 646 647 </div><!-- .entry-content --> 648 </div> 649 </div> 650</article><!-- #post-## --> 651 652<article id="post-3171" class="post-3171 post type-post status-publish format-standard has-post-thumbnail hentry category-net tag-encryption tag-json tag-system-text-json tag-typeinforesolver"> 653 <div class="blog-item-wrap"> 654 <a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-1" title="Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 1)" > 655 <img width="750" height="410" src="https://www.stevejgordon.co.uk/wp-content/uploads/2026/01/Encrypting-Properties-with-System.Text_.Json-and-a-TypeInfoResolver-Modifier-750x410.png" class="single-featured wp-post-image" alt="Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier header image" decoding="async" fetchpriority="high" srcset="https://www.stevejgordon.co.uk/wp-content/uploads/2026/01/Encrypting-Properties-with-System.Text_.Json-and-a-TypeInfoResolver-Modifier-750x410.png 750w, https://www.stevejgordon.co.uk/wp-content/uploads/2026/01/Encrypting-Properties-with-System.Text_.Json-and-a-TypeInfoResolver-Modifier-300x164.png 300w, https://www.stevejgordon.co.uk/wp-content/uploads/2026/01/Encrypting-Properties-with-System.Text_.Json-and-a-TypeInfoResolver-Modifier-1024x559.png 1024w, https://www.stevejgordon.co.uk/wp-content/uploads/2026/01/Encrypting-Properties-with-System.Text_.Json-and-a-TypeInfoResolver-Modifier-768x419.png 768w, https://www.stevejgordon.co.uk/wp-content/uploads/2026/01/Encrypting-Properties-with-System.Text_.Json-and-a-TypeInfoResolver-Modifier.png 1123w" sizes="(max-width: 750px) 100v
655w, 750px" /> </a> 656 <div class="post-inner-content"> 657 <header class="entry-header page-header"> 658 659 <h2 class="entry-title"><a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-1" rel="bookmark">Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 1)</a></h2> 660 661 <div class="entry-meta"> 662 <span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-1" rel="bookmark"><time class="entry-date published" datetime="2026-01-14T15:09:54+00:00">14th January 2026</time><time class="updated" datetime="2026-01-14T15:14:54+00:00">14th January 2026</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://www.stevejgordon.co.uk/author/stevejgordon">Steve Gordon</a></span></span> 663 664 </div><!-- .entry-meta --> 665 </header><!-- .entry-header --> 666 667 <div class="entry-content"> 668 669 <p>In this multi-part blog series, we’ll build a reasonably full-featured code base for automatically encrypting/decrypting specific properties on types that are being serialised and deserialised using System.Text.Json. In future posts, we’ll eventually build up to a solution that utilises Azure Key Vault to secure the encryption key protecting the data. Today, we’ll begin with some […]</p> 670 <p><a class="btn btn-default read-more" href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-1" title="Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 1)">Read More</a></p> 671 672 </div><!-- .entry-content --> 673 </div> 674 </div> 675</article><!-- #post-## --> 676 677<article id="post-3123" class="post-3123 post type-post status-publish format-standard has-post-thumbnail hentry category-net tag-net tag-corehost tag-dotnet-exe tag-hostfxr tag-internals tag-muxer tag-runtime"> 678 <div class="blog-item-wrap"> 679 <a href="https://www.stevejgordon.co.uk/how-dotnet-muxer-resolves-and-loads-the-hostfxr-library" title="How dotnet.exe resolves and loads the hostfxr library – Exploring the .NET muxer" > 680 <img width="750" height="410" src="https://www.stevejgordon.co.uk/wp-content/uploads/2024/11/How-dotnet.exe-resolves-and-loads-the-hostfxr-library-750x410.png" class="single-featured wp-post-image" alt="Blog post header image with the title "How dotnet.exe resolves and loads the hostfxr library"" decoding="async" srcset="https://www.stevejgordon.co.uk/wp-content/uploads/2024/11/How-dotnet.exe-resolves-and-loads-the-hostfxr-library-750x410.png 750w, https://www.stevejgordon.co.uk/wp-content/uploads/2024/11/How-dotnet.exe-resolves-and-loads-the-hostfxr-library-300x164.png 300w, https://www.stevejgordon.co.uk/wp-content/uploads/2024/11/How-dotnet.exe-resolves-and-loads-the-hostfxr-library-1024x559.png 1024w, https://www.stevejgordon.co.uk/wp-content/uploads/2024/11/How-dotnet.exe-resolves-and-loads-the-hostfxr-library-768x419.png 768w, https://www.stevejgordon.co.uk/wp-content/uploads/2024/11/How-dotnet.exe-resolves-and-loads-the-hostfxr-library.png 1123w" sizes="(max-width: 750px) 100vw, 750px" /> </a> 681 <div class="post-inner-content"> 682 <header class="entry-header page-header"> 683 684 <h2 class="entry-title"><a href="https://www.stevejgordon.co.uk/how-dotnet-muxer-resolves-and-loads-the-hostfxr-library" rel="bookmark">How dotnet.exe resolves and loads the hostfxr library – Exploring the .NET muxer</a></h2> 685 686 <div class="entry-meta"> 687 <span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://www.stevejgordon.co.uk/how-dotnet-muxer-resolves-and-loads-the-hostfxr-library" rel="bookmark"><time class="entry-date published" datetime="2024-11-08T10:11:59+00:00">8th November 2024</time><time class="updated" datetime="2024-11-08T10:19:28+00:00">8th November 2024</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://www.stevejgordon.co.uk/author/stevejgordon">Steve Gordon</a></span></span> 688 689 </div><!-- .entry-meta --> 690 </header><!-- .entry-header --> 691 692 <div class="entry-content"> 693 694 <p>
694In this post, we will continue our journey into the functionality and implementation of dotnet.exe, specifically focusing on how the hostfxr library is resolved and loaded. This post follows part one of this series, “A Brief Introduction to the .NET Muxer (aka dotnet.exe)“. Note: These posts are a deep dive into .NET internals and wonât […]</p> 695 <p><a class="btn btn-default read-more" href="https://www.stevejgordon.co.uk/how-dotnet-muxer-resolves-and-loads-the-hostfxr-library" title="How dotnet.exe resolves and loads the hostfxr library – Exploring the .NET muxer">Read More</a></p> 696 697 </div><!-- .entry-content --> 698 </div> 699 </div> 700</article><!-- #post-## --> 701 702 <nav class="navigation pagination" aria-label="Posts pagination"> 703 <h2 class="screen-reader-text">Posts pagination</h2> 704 <div class="nav-links"><span aria-current="page" class="page-numbers current">1</span> 705<a class="page-numbers" href="https://www.stevejgordon.co.uk/page/2">2</a> 706<span class="page-numbers dots">…</span> 707<a class="page-numbers" href="https://www.stevejgordon.co.uk/page/36">36</a> 708<a class="next page-numbers" href="https://www.stevejgordon.co.uk/page/2">Older posts <i class="fa fa-chevron-right"></i></a></div> 709 </nav> 710 </main><!-- #main --> 711 </div><!-- #primary --> 712 713</div><!-- close .main-content-inner --> 714<div id="secondary" class="widget-area col-sm-12 col-md-4" role="complementary"> 715 <div class="well"> 716 <aside id="widget_sp_image-2" class="widget widget_sp_image"><img width="600" height="601" class="attachment-full aligncenter" style="max-width: 100%;" srcset="https://www.stevejgordon.co.uk/wp-content/uploads/2019/03/Portrait-Small-Facing-Left.png 600w, https://www.stevejgordon.co.uk/wp-content/uploads/2019/03/Portrait-Small-Facing-Left-150x150.png 150w, https://www.stevejgordon.co.uk/wp-content/uploads/2019/03/Portrait-Small-Facing-Left-300x300.png 300w, https://www.stevejgordon.co.uk/wp-content/uploads/2019/03/Portrait-Small-Facing-Left-60x60.png 60w" sizes="(max-width: 600px) 100vw, 600px" src="https://www.stevejgordon.co.uk/wp-content/uploads/2019/03/Portrait-Small-Facing-Left.png" /></aside><aside id="custom_html-3" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><a href="https://mvp.microsoft.com/en-us/PublicProfile/5002866"><img src="https://www.stevejgordon.co.uk/wp-content/uploads/2017/11/MVP_Logo_Horizontal_Preferred_Cyan300_RGB_300ppi.png" /></a></div></aside><aside id="custom_html-11" class="widget_text widget widget_custom_html"><h3 class="widget-title">Pluralsight Courses</h3><div class="textwidget custom-html-widget"><a href="https://pluralsight.pxf.io/AavkN"><img src="https://www.stevejgordon.co.uk/wp-content/uploads/2019/09/pluralsight.png" /></a> 717<div class="widget"> 718<br/> 719<ul> 720 <li><a href="https://pluralsight.pxf.io/k0zbg0"> 721Creating Background Services in ASP.NET Core and .NET 722 </a> 723 </li> 724 <li><a href="https://pluralsight.pxf.io/oqzbRo"> 725Dependency Injection in ASP.NET Core 6 726 </a> 727 </li> 728 <li><a href="https://pluralsight.pxf.io/XYdZyG">Configuration and Options in ASP.NET Core 6</a></li> 729 <li><a href="https://pluralsight.pxf.io/rnr99d"> 730String Manipulation and Regex in C#10 731 </a> 732 </li> 733 <li><a href="https://pluralsight.pxf.io/m5zbR7"> 734String Manipulation in C#: Best Practices 735 </a> 736 </li> 737 <li><a href="https://pluralsight.pxf.io/PyKk0j">Integration Testing ASP.NET Core Applications: Best Practices 738 </a> 739 </li> 740 <li><a href="https://pluralsight.pxf.io/1r1O5D"> 741Implementing Cross-cutting Concerns for ASP.NET Core Microservices 742 </a> 743 </li> 744 </ul> 745 </div></div></aside><aside id="sparkling-social-2" class="widget sparkling-social"><h3 class="widget-title">Follow me</h3> 746 <!-- social icons --> 747 <div class="social-icons sticky-sidebar-social"> 748 749 <nav id="menu-social" class="social-icons"><ul id="menu-social-items" class="social-menu"><li id="menu-item-73" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-73"><a target="_blank" href="https://twitter.com/stevejgordon"><i class="social_icon"><span>Twitter</span></i></a></li> 750<li id="menu-item-74" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-74"><a target="_blank" href="https://github.com/stevejgordon"><i class="social_icon"><span>Github</span></i></a></li> 751<li id="menu-item-510" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-510"><a href="https://www.linkedin.com/in/steve-gordon-a6691114/"><i class="social_icon"><span>LinkedIn</span></i></a></li> 752<li id="menu-item-1066" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1066"><a href="https://www.youtube.com/channel/UC_rMpypHGP8_J8AAo_bLCmA?&ytbChannel=null"><i class="social_icon"><span>YouTube</span></i></a></li> 753<li id="menu-item-2977" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2977"><a rel="me" href="https://fosstodon.org/@stevejgordon"><i class="social_icon"><span>Mastodon</span></i></a></li> 754</ul></nav>
755 </div><!-- end social icons --> 756 </aside><aside id="mailerlite_widget-2" class="widget widget_mailerlite_widget"> <div class="ml-form-embed" 757 data-account="2206765:i6t8a5v9b2" 758 data-form="2369968:y6z1y1"> 759 </div> 760 </aside><aside id="custom_html-8" class="widget_text widget widget_custom_html"><h3 class="widget-title">Support This Blog</h3><div class="textwidget custom-html-widget"><p><a href="https://www.patreon.com/bePatron?u=25212205" data-patreon-widget-type="become-patron-button">Become a Patron!</a>
760<script async src="https://c6.patreon.com/becomePatronButton.bundle.js"></script>
760 761</p> 762<p> 763 <style>.bmc-button img{width: 35px !important;margin-bottom: 1px !important;box-shadow: none !important;border: none !important;vertical-align: middle !important;}.bmc-button{padding: 7px 10px 7px 10px !important;line-height: 35px !important;height:51px !important;min-width:217px !important;text-decoration: none !important;display:inline-flex !important;color:#FFFFFF !important;background-color:#FF813F !important;border-radius: 5px !important;border: 1px solid transparent !important;padding: 7px 10px 7px 10px !important;font-size: 20px !important;letter-spacing:-0.08px !important;box-shadow: 0px 1px 2px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 1px 2px 2px rgba(190, 190, 190, 0.5) !important;margin: 0 auto !important;font-family:'Lato', sans-serif !important;-webkit-box-sizing: border-box !important;box-sizing: border-box !important;-o-transition: 0.3s all linear !important;-webkit-transition: 0.3s all linear !important;-moz-transition: 0.3s all linear !important;-ms-transition: 0.3s all linear !important;transition: 0.3s all linear !important;}.bmc-button:hover, .bmc-button:active, .bmc-button:focus {-webkit-box-shadow: 0px 1px 2px 2px rgba(190, 190, 190, 0.5) !important;text-decoration: none !important;box-shadow: 0px 1px 2px 2px rgba(190, 190, 190, 0.5) !important;opacity: 0.85 !important;color:#FFFFFF !important;}</style><link href="https://fonts.googleapis.com/css?family=Lato&subset=latin,latin-ext" rel="stylesheet"><a class="bmc-button" target="_blank" href="https://www.buymeacoffee.com/stevejgordon"><img src="https://cdn.buymeacoffee.com/buttons/bmc-new-btn-logo.svg" alt="Support this blog!"><span style="margin-left:15px;font-size:19px !important;">Buy me a coffee!</span></a> 764</p> 765</div></aside><aside id="search-2" class="widget widget_search"> 766<form role="search" method="get" class="form-search" action="https://www.stevejgordon.co.uk/"> 767 <div class="input-group"> 768 <label class="screen-reader-text" for="s">Search for:</label> 769 <input type="text" class="form-control search-query" placeholder="Search…" value="" name="s" title="Search for:" /> 770 <span class="input-group-btn"> 771 <button type="submit" class="btn btn-default" name="submit" id="searchsubmit" value="Search"><span class="glyphicon glyphicon-search"></span></button> 772 </span> 773 </div> 774</form> 775</aside> 776 <aside id="recent-posts-2" class="widget widget_recent_entries"> 777 <h3 class="widget-title">Recent Posts</h3> 778 <ul> 779 <li> 780 <a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-2">Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 2)</a> 781 </li> 782 <li> 783 <a href="https://www.stevejgordon.co.uk/the-grand-mystery-of-the-missing-18-bytes">The Grand Mystery of the Missing 18 Bytes</a> 784 </li> 785 <li> 786 <a href="https://www.stevejgordon.co.uk/talk-application-performance-optimisation-in-practice-60-mins">Talk: Application Performance Optimisation in Practice (60 mins)</a> 787 </li> 788 <li> 789 <a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-1">Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 1)</a> 790 </li> 791 <li> 792 <a href="https://www.stevejgordon.co.uk/how-dotnet-muxer-resolves-and-loads-the-hostfxr-library">How dotnet.exe resolves and loads the hostfxr library – Exploring the .NET muxer</a> 793 </li> 794 </ul> 795 796 </aside><aside id="custom_html-4" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget">
796<script src="https://apis.google.com/js/platform.js"></script>
796 797 798<div class="g-ytsubscribe" data-channelid="UC_rMpypHGP8_J8AAo_bLCmA" data-layout="default" data-count="default"></div></div></aside><aside id="text-3" class="widget widget_text"><h3 class="widget-title">.NET South East</h3> <div class="textwidget"><p><a href="https://www.meetup.com/dotnetsoutheast/"><img decoding="async" src="https://www.stevejgordon.co.uk/wp-content/uploads/2017/07/cropped-logo.png" /></a></p> 799<p>Please come and join our new .NET User  Group in Brighton, UK.</p> 800</div> 801 </aside><aside id="categories-2" class="widget widget_categories"><h3 class="widget-title">Categories</h3><form action="https://www.stevejgordon.co.uk" method="get"><label class="screen-reader-text" for="cat">Categories</label><select name='cat' id='cat' class='postform'> 802 <option value='-1'>Select Category</option> 803 <option class="level-0" value="375">.NET (35)</option> 804 <option class="level-0" value="434">.NET 5 (3)</option> 805 <option class="level-0" value="496">.NET 6 (2)</option> 806 <option class="level-0" value="517">.NET 8 (2)</option> 807 <option class="level-0" value="542">.NET 9 (2)</option> 808 <option class="level-0" value="223">.NET Core (26)</option> 809 <option class="level-0" value="381">.NET Core 3.0 (5)</option> 810 <option class="level-0" value="113">.NET South East (6)</option> 811 <option class="level-0" value="18">allReady (11)</option> 812 <option class="level-0" value="4">ASP.NET Core (86)</option> 813 <option class="level-0" value="219">ASP.NET Core 2.1 (7)</option> 814 <option class="level-0" value="289">ASP.NET Core 2.2 (2)</option> 815 <option class="level-0" value="365">ASP.NET Core 3.0 (6)</option> 816 <option class="level-0" value="429">ASP.NET Core 3.1 (1)</option> 817 <option class="level-0" value="435">ASP.NET Core 5.0 (2)</option> 818 <option class="level-0" value="66">ASP.NET Core Anatomy (6)</option> 819 <option class="level-0" value="8">ASP.NET Identity (2)</option> 820 <option class="level-0" value="90">AWS (11)</option> 821 <option class="level-0" value="313">C# (10)</option> 822 <option class="level-0" value="228">Dependency Injection (5)</option> 823 <option class="level-0" value="89">Docker (11)</option> 824 <option class="level-0" value="477">Elasticsearch (1)</option> 825 <option class="level-0" value="25">Entity Framework Core (1)</option> 826 <option class="level-0" value="3">General (5)</option> 827 <option class="level-0" value="179">Git and GitHub (2)</option> 828 <option class="level-0" value="17">GitHub (5)</option> 829 <option class="level-0" value="372">gRPC (3)</option> 830 <option class="level-0" value="346">HttpClient (2)</option> 831 <option class="level-0" value="268">Microservices (1)</option> 832 <option class="level-0" value="157">Microsoft MVP (1)</option> 833 <option class="level-0" value="535">OpenTelemetry (2)</option> 834 <option class="level-0" value="318">Performance (13)</option> 835 <option class="level-0" value="280">Polly (2)</option> 836 <option class="level-0" value="508">Roslyn APIs (1)</option> 837 <option class="level-0" value="422">Software Development Skills (4)</option> 838 <option class="level-0" value="110">Speaking (3)</option> 839 <option class="level-0" value="40">Things I’ve Learnt This Week (11)</option> 840 <option class="level-0" value="168">Video Production (1)</option> 841 <option class="level-0" value="67">Visual Studio (1)</option> 842 <option class="level-0" value="33">Visual Studio 2017 (4)</option> 843</select> 844</form>
844<script type="text/javascript"> 845/* <![CDATA[ */ 846 847(function() { 848 var dropdown = document.getElementById( "cat" ); 849 function onCatChange() { 850 if ( dropdown.options[ dropdown.selectedIndex ].value > 0 ) { 851 dropdown.parentNode.submit(); 852 } 853 } 854 dropdown.onchange = onCatChange; 855})(); 856 857/* ]]> */ 858</script>
858 859</aside><aside id="archives-2" class="widget widget_archive"><h3 class="widget-title">Archives</h3> <label class="screen-reader-text" for="archives-dropdown-2">Archives</label> 860 <select id="archives-dropdown-2" name="archive-dropdown"> 861 862 <option value="">Select Month</option> 863 <option value='https://www.stevejgordon.co.uk/2026/02'> February 2026 (1)</option> 864 <option value='https://www.stevejgordon.co.uk/2026/01'> January 2026 (3)</option> 865 <option value='https://www.stevejgordon.co.uk/2024/11'> November 2024 (1)</option> 866 <option value='https://www.stevejgordon.co.uk/2024/10'> October 2024 (3)</option> 867 <option value='https://www.stevejgordon.co.uk/2024/09'> September 2024 (2)</option> 868 <option value='https://www.stevejgordon.co.uk/2024/03'> March 2024 (1)</option> 869 <option value='https://www.stevejgordon.co.uk/2024/01'> January 2024 (1)</option> 870 <option value='https://www.stevejgordon.co.uk/2023/11'> November 2023 (2)</option> 871 <option value='https://www.stevejgordon.co.uk/2023/08'> August 2023 (1)</option> 872 <option value='https://www.stevejgordon.co.uk/2023/05'> May 2023 (1)</option> 873 <option value='https://www.stevejgordon.co.uk/2022/10'> October 2022 (1)</option> 874 <option value='https://www.stevejgordon.co.uk/2022/06'> June 2022 (1)</option> 875 <option value='https://www.stevejgordon.co.uk/2022/04'> April 2022 (1)</option> 876 <option value='https://www.stevejgordon.co.uk/2021/12'> December 2021 (1)</option> 877 <option value='https://www.stevejgordon.co.uk/2021/08'> August 2021 (1)</option> 878 <option value='https://www.stevejgordon.co.uk/2021/07'> July 2021 (3)</option> 879 <option value='https://www.stevejgordon.co.uk/2021/05'> May 2021 (3)</option> 880 <option value='https://www.stevejgordon.co.uk/2021/03'> March 2021 (1)</option> 881 <option value='https://www.stevejgordon.co.uk/2021/02'> February 2021 (3)</option> 882 <option value='https://www.stevejgordon.co.uk/2021/01'> January 2021 (1)</option> 883 <option value='https://www.stevejgordon.co.uk/2020/12'> December 2020 (1)</option> 884 <option value='https://www.stevejgordon.co.uk/2020/10'> October 2020 (4)</option> 885 <option value='https://www.stevejgordon.co.uk/2020/09'> September 2020 (1)</option> 886 <option value='https://www.stevejgordon.co.uk/2020/08'> August 2020 (1)</option> 887 <option value='https://www.stevejgordon.co.uk/2020/07'> July 2020 (3)</option> 888 <option value='https://www.stevejgordon.co.uk/2020/05'> May 2020 (2)</option> 889 <option value='https://www.stevejgordon.co.uk/2020/04'> April 2020 (4)</option> 890 <option value='https://www.stevejgordon.co.uk/2020/03'> March 2020 (7)</option> 891 <option value='https://www.stevejgordon.co.uk/2020/02'> February 2020 (1)</option> 892 <option value='https://www.stevejgordon.co.uk/2020/01'> January 2020 (5)</option> 893 <option value='https://www.stevejgordon.co.uk/2019/11'> November 2019 (3)</option> 894 <option value='https://www.stevejgordon.co.uk/2019/10'> October 2019 (3)</option> 895 <option value='https://www.stevejgordon.co.uk/2019/09'> September 2019 (3)</option> 896 <option value='https://www.stevejgordon.co.uk/2019/08'> August 2019 (2)</option> 897 <option value='https://www.stevejgordon.co.uk/2019/06'> June 2019 (2)</option> 898 <option value='https://www.stevejgordon.co.uk/2019/05'> May 2019 (4)</option> 899 <option value='https://www.stevejgordon.co.uk/2019/04'> April 2019 (1)</option> 900 <option value='https://www.stevejgordon.co.uk/2019/03'> March 2019 (2)</option> 901 <option value='https://www.stevejgordon.co.uk/2019/02'> February 2019 (5)</option> 902 <option value='https://www.stevejgordon.co.uk/2019/01'> January 2019 (2)</option> 903 <option value='https://www.stevejgordon.co.uk/2018/11'> November 2018 (1)</option> 904 <option value='https://www.stevejgordon.co.uk/2018/10'> October 2018 (1)</option> 905 <option value='https://www.stevejgordon.co.uk/2018/09'> September 2018 (1)</option> 906 <option value='https://www.stevejgordon.co.uk/2018/08'> August 2018 (2)</option> 907 <option value='https://www.stevejgordon.co.uk/2018/07'> July 2018 (2)</option> 908 <option value='https://www.stevejgordon.co.uk/2018/06'> June 2018 (3)</option> 909 <option value='https://www.stevejgordon.co.uk/2018/05'> May 2018 (4)</option> 910 <option value='https://www.stevejgordon.co.uk/2018/04'> April 2018 (3)</option> 911 <option value='https://www.stevejgordon.co.uk/2018/03'> March 2018 (2)</option> 912 <option value='https://www.stevejgordon.co.uk/2018/02'> February 2018 (2)</option> 913 <option value='https://www.stevejgordon.co.uk/2018/01'> January 2018 (8)</option> 914 <option value='https://www.stevejgordon.co.uk/2017/12'> December 2017 (4)</option> 915 <option value='https://www.stevejgordon.co.uk/2017/11'> November 2017 (2)</option> 916 <option value='https://www.stevejgordon.co.uk/2017/10'> October 2017 (3)</option> 917 <option value='https://www.stevejgordon.co.uk/2017/09'> September 2017 (2)</option> 918 <option value='https://www.stevejgordon.co.uk/2017/08'> August 2017 (2)</option> 919 <option value='https://www.stevejgordon.co.uk/2017/07'> July 2017 (4)</option> 920 <option value='https://www.stevejgordon.co.uk/2017/06'> June 2017 (4)</option> 921 <option value='https://www.stevejgordon.co.uk/2017/05'> May 2017 (5)</option> 922 <option value='https://www.stevejgordon.co.uk/2017/04'> April 2017 (3)</option> 923 <option value='https://www.stevejgordon.co.uk/2017/03'> March 2017 (9)</option> 924 <option value='https://www.stevejgordon.co.uk/2017/02'> February 2017 (6)</option> 925 <option value='https://www.stevejgordon.co.uk/2017/01'> January 2017 (1)</option> 926 <option value='https://www.stevejgordon.co.uk/2016/12'> December 2016 (2)</option> 927 <option value='https://www.stevejgordon.co.uk/2016/11'> November 2016 (2)</option> 928 <option value='https://www.stevejgordon.co.uk/2016/10'> October 2016 (3)</option> 929 <option value='https://www.stevejgordon.co.uk/2016/09'> September 2016 (1)</option> 930 <option value='https://www.stevejgordon.co.uk/2016/08'> August 2016 (1)</option> 931 <option value='https://www.stevejgordon.co.uk/2016/05'> May 2016 (1)</option> 932 <option value='https://www.stevejgordon.co.uk/2016/03'> March 2016 (1)</option> 933 <option value='https://www.stevejgordon.co.uk/2016/02'> February 2016 (3)</option> 934 <option value='https://www.stevejgordon.co.uk/2016/01'> January 2016 (2)</option> 935 936 </select> 937 938
938<script type="text/javascript"> 939/* <![CDATA[ */ 940 941(function() { 942 var dropdown = document.getElementById( "archives-dropdown-2" ); 943 function onSelectChange() { 944 if ( dropdown.options[ dropdown.selectedIndex ].value !== '' ) { 945 document.location.href = this.options[ this.selectedIndex ].value; 946 } 947 } 948 dropdown.onchange = onSelectChange; 949})(); 950 951/* ]]> */ 952</script>
952 953</aside> </div> 954</div><!-- #secondary --> 955 </div><!-- close .row --> 956 </div><!-- close .container --> 957</div><!-- close .site-content --> 958 959 <div id="footer-area"> 960 <div class="container footer-inner"> 961 <div class="row"> 962 963 </div> 964 </div> 965 966 <footer id="colophon" class="site-footer" role="contentinfo"> 967 <div class="site-info container"> 968 <div class="row"> 969 <nav id="menu-social" class="social-icons"><ul id="menu-social-items" class="social-menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-73"><a target="_blank" href="https://twitter.com/stevejgordon"><i class="social_icon"><span>Twitter</span></i></a></li> 970<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-74"><a target="_blank" href="https://github.com/stevejgordon"><i class="social_icon"><span>Github</span></i></a></li> 971<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-510"><a href="https://www.linkedin.com/in/steve-gordon-a6691114/"><i class="social_icon"><span>LinkedIn</span></i></a></li> 972<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1066"><a href="https://www.youtube.com/channel/UC_rMpypHGP8_J8AAo_bLCmA?&ytbChannel=null"><i class="social_icon"><span>YouTube</span></i></a></li> 973<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2977"><a rel="me" href="https://fosstodon.org/@stevejgordon"><i class="social_icon"><span>Mastodon</span></i></a></li> 974</ul></nav> <nav role="navigation" class="col-md-6"> 975 <ul id="menu-social" class="nav footer-nav clearfix"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-73"><a target="_blank" href="https://twitter.com/stevejgordon">Twitter</a></li> 976<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-74"><a target="_blank" href="https://github.com/stevejgordon">Github</a></li> 977<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-510"><a href="https://www.linkedin.com/in/steve-gordon-a6691114/">LinkedIn</a></li> 978<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1066"><a href="https://www.youtube.com/channel/UC_rMpypHGP8_J8AAo_bLCmA?&ytbChannel=null">YouTube</a></li> 979<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2977"><a rel="me" href="https://fosstodon.org/@stevejgordon">Mastodon</a></li> 980</ul> </nav> 981 <div class="copyright col-md-6"> 982 Copyright © Steve Gordon 2019 Theme by <a href="http://colorlib.com/" target="_blank" rel="nofollow noopener">Colorlib</a> Powered by <a href="http://wordpress.org/" target="_blank">WordPress</a> </div> 983 </div> 984 </div><!-- .site-info --> 985 <div class="scroll-to-top"><i class="fa fa-angle-up"></i></div>
985<!-- .scroll-to-top --> 986 </footer><!-- #colophon --> 987 </div> 988</div><!-- #page --> 989 990
990<script type="text/javascript"> 991 jQuery(document).ready(function ($) { 992 if ($(window).width() >= 767) { 993 $('.navbar-nav > li.menu-item > a').click(function () { 994 if ($(this).attr('target') !== '_blank') { 995 window.location = $(this).attr('href') 996 } 997 }) 998 } 999 }) 1000 </script>
1000 1001
1001<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-includes/js/dist/hooks.min.js?ver=4d63a3d491d11ffd8ac6" id="wp-hooks-js"></script>
vendor: 1 bytes, line 1001
1001
1002<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script>
vendor: 1 bytes, line 1002
1002
1003<script type="text/javascript" id="wp-i18n-js-after"> 1004/* <![CDATA[ */ 1005wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); 1006/* ]]> */ 1007</script>
vendor: 1 bytes, line 1007
1007
1008<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=6.0.5" id="swv-js"></script>
vendor: 1 bytes, line 1008
1008
1009<script type="text/javascript" id="contact-form-7-js-translations"> 1010/* <![CDATA[ */ 1011( function( domain, translations ) { 1012 var localeData = translations.locale_data[ domain ] || translations.locale_data.messages; 1013 localeData[""].domain = domain; 1014 wp.i18n.setLocaleData( localeData, domain ); 1015} )( "contact-form-7", {"translation-revision-date":"2024-05-21 11:58:24+0000","generator":"GlotPress\/4.0.1","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_GB"},"Error:":["Error:"]}},"comment":{"reference":"includes\/js\/index.js"}} ); 1016/* ]]> */ 1017</script>
vendor: 1 bytes, line 1017
1017
1018<script type="text/javascript" id="contact-form-7-js-before"> 1019/* <![CDATA[ */ 1020var wpcf7 = { 1021 "api": { 1022 "root": "https:\/\/www.stevejgordon.co.uk\/wp-json\/", 1023 "namespace": "contact-form-7\/v1" 1024 } 1025}; 1026/* ]]> */ 1027</script>
vendor: 1 bytes, line 1027
1027
1028<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-content/plugins/contact-form-7/includes/js/index.js?ver=6.0.5" id="contact-form-7-js"></script>
vendor: 1 bytes, line 1028
1028
1029<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-content/themes/sparkling/assets/js/skip-link-focus-fix.min.js?ver=20140222" id="sparkling-skip-link-focus-fix-js"></script>
1029 1030 1031</body> 1032</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.