407 lines
75 KiB
HTML
407 lines
75 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en-US">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<meta name="robots" content="max-image-preview:large">
|
||
<title>Blog – hackanooga</title>
|
||
<link rel="alternate" type="application/rss+xml" title="hackanooga » Feed" href="/feed/">
|
||
<link rel="alternate" type="application/rss+xml" title="hackanooga » Comments Feed" href="/comments/feed/">
|
||
<script>
|
||
window._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":"\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.6.2"}};
|
||
/*! This file is auto-generated */
|
||
!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,"🏳️⚧️","🏳️⚧️")?!1:!n(e,"🇺🇳","🇺🇳")&&!n(e,"🏴","🏴");case"emoji":return!n(e,"🐦⬛","🐦⬛")}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);
|
||
</script>
|
||
<style id="wp-block-site-title-inline-css">:root :where(.wp-block-site-title a){color:inherit}</style>
|
||
<style id="wp-block-group-inline-css">.wp-block-group{box-sizing:border-box}:where(.wp-block-group.wp-block-group-is-layout-constrained){position:relative}</style>
|
||
<style id="wp-block-navigation-link-inline-css">.wp-block-navigation .wp-block-navigation-item__label{overflow-wrap:break-word}.wp-block-navigation .wp-block-navigation-item__description{display:none}.link-ui-tools{border-top:1px solid #f0f0f0;padding:8px}.link-ui-block-inserter{padding-top:8px}.link-ui-block-inserter__back{margin-left:8px;text-transform:uppercase}</style>
|
||
<link rel="stylesheet" id="wp-block-navigation-css" href="/wp-includes/blocks/navigation/style.min.css?ver=6.6.2" media="all">
|
||
<link rel="stylesheet" id="wp-block-social-links-css" href="/wp-includes/blocks/social-links/style.min.css?ver=6.6.2" media="all">
|
||
<style id="wp-block-post-title-inline-css">.wp-block-post-title{box-sizing:border-box;word-break:break-word}.wp-block-post-title a{display:inline-block}</style>
|
||
<style id="wp-block-post-featured-image-inline-css">.wp-block-post-featured-image{margin-left:0;margin-right:0}.wp-block-post-featured-image a{display:block;height:100%}.wp-block-post-featured-image :where(img){box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom;width:100%}.wp-block-post-featured-image.alignfull img,.wp-block-post-featured-image.alignwide img{width:100%}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim{background-color:#000;inset:0;position:absolute}.wp-block-post-featured-image{position:relative}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient{background-color:initial}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0{opacity:0}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10{opacity:.1}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20{opacity:.2}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30{opacity:.3}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40{opacity:.4}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50{opacity:.5}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60{opacity:.6}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70{opacity:.7}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80{opacity:.8}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90{opacity:.9}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100{opacity:1}.wp-block-post-featured-image:where(.alignleft,.alignright){width:100%}</style>
|
||
<style id="wp-block-paragraph-inline-css">.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg}</style>
|
||
<style id="wp-block-heading-inline-css">h1.has-background,h2.has-background,h3.has-background,h4.has-background,h5.has-background,h6.has-background{padding:1.25em 2.375em}h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){rotate:180deg}</style>
|
||
<style id="wp-block-post-excerpt-inline-css">:where(.wp-block-post-excerpt){margin-bottom:var(--wp--style--block-gap);margin-top:var(--wp--style--block-gap)}.wp-block-post-excerpt__excerpt{margin-bottom:0;margin-top:0}.wp-block-post-excerpt__more-text{margin-bottom:0;margin-top:var(--wp--style--block-gap)}.wp-block-post-excerpt__more-link{display:inline-block}</style>
|
||
<style id="wp-block-post-date-inline-css">.wp-block-post-date{box-sizing:border-box}</style>
|
||
<style id="wp-block-quote-inline-css">.wp-block-quote{box-sizing:border-box;overflow-wrap:break-word}.wp-block-quote.is-large:where(:not(.is-style-plain)),.wp-block-quote.is-style-large:where(:not(.is-style-plain)){margin-bottom:1em;padding:0 1em}.wp-block-quote.is-large:where(:not(.is-style-plain)) p,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) p{font-size:1.5em;font-style:italic;line-height:1.6}.wp-block-quote.is-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-large:where(:not(.is-style-plain)) footer,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) footer{font-size:1.125em;text-align:right}.wp-block-quote>cite{display:block}</style>
|
||
<style id="wp-block-preformatted-inline-css">.wp-block-preformatted{box-sizing:border-box;white-space:pre-wrap}:where(.wp-block-preformatted.has-background){padding:1.25em 2.375em}</style>
|
||
<style id="wp-block-post-template-inline-css">.wp-block-post-template{list-style:none;margin-bottom:0;margin-top:0;max-width:100%;padding:0}.wp-block-post-template.is-flex-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:1.25em}.wp-block-post-template.is-flex-container>li{margin:0;width:100%}@media (min-width:600px){.wp-block-post-template.is-flex-container.is-flex-container.columns-2>li{width:calc(50% - .625em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-3>li{width:calc(33.33333% - .83333em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-4>li{width:calc(25% - .9375em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-5>li{width:calc(20% - 1em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-6>li{width:calc(16.66667% - 1.04167em)}}@media (max-width:600px){.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid{grid-template-columns:1fr}}.wp-block-post-template-is-layout-constrained>li>.alignright,.wp-block-post-template-is-layout-flow>li>.alignright{float:right;margin-inline-end:0;margin-inline-start:2em}.wp-block-post-template-is-layout-constrained>li>.alignleft,.wp-block-post-template-is-layout-flow>li>.alignleft{float:left;margin-inline-end:2em;margin-inline-start:0}.wp-block-post-template-is-layout-constrained>li>.aligncenter,.wp-block-post-template-is-layout-flow>li>.aligncenter{margin-inline-end:auto;margin-inline-start:auto}</style>
|
||
<style id="wp-block-columns-inline-css">.wp-block-columns{align-items:normal!important;box-sizing:border-box;display:flex;flex-wrap:wrap!important}@media (min-width:782px){.wp-block-columns{flex-wrap:nowrap!important}}.wp-block-columns.are-vertically-aligned-top{align-items:flex-start}.wp-block-columns.are-vertically-aligned-center{align-items:center}.wp-block-columns.are-vertically-aligned-bottom{align-items:flex-end}@media (max-width:781px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:100%!important}}@media (min-width:782px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{flex-grow:0}}.wp-block-columns.is-not-stacked-on-mobile{flex-wrap:nowrap!important}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{flex-grow:0}:where(.wp-block-columns){margin-bottom:1.75em}:where(.wp-block-columns.has-background){padding:1.25em 2.375em}.wp-block-column{flex-grow:1;min-width:0;overflow-wrap:break-word;word-break:break-word}.wp-block-column.is-vertically-aligned-top{align-self:flex-start}.wp-block-column.is-vertically-aligned-center{align-self:center}.wp-block-column.is-vertically-aligned-bottom{align-self:flex-end}.wp-block-column.is-vertically-aligned-stretch{align-self:stretch}.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{width:100%}</style>
|
||
<style id="wp-emoji-styles-inline-css">img.wp-smiley, img.emoji {
|
||
display: inline !important;
|
||
border: none !important;
|
||
box-shadow: none !important;
|
||
height: 1em !important;
|
||
width: 1em !important;
|
||
margin: 0 0.07em !important;
|
||
vertical-align: -0.1em !important;
|
||
background: none !important;
|
||
padding: 0 !important;
|
||
}</style>
|
||
<style id="wp-block-library-inline-css">:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip:auto!important;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}</style>
|
||
<style id="global-styles-inline-css">: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--color--foreground: #FFF;--wp--preset--color--background: #2C2C2C;--wp--preset--color--primary: #FF502D;--wp--preset--color--secondary: #AAA;--wp--preset--color--tertiary: #555;--wp--preset--color--quaternary: #444;--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%);--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--gradient--foreground-to-background: linear-gradient(160deg, var(--wp--preset--color--foreground), var(--wp--preset--color--background));--wp--preset--gradient--foreground-to-primary: linear-gradient(160deg, var(--wp--preset--color--foreground), var(--wp--preset--color--primary));--wp--preset--gradient--foreground-to-secondary: linear-gradient(160deg, var(--wp--preset--color--foreground), var(--wp--preset--color--secondary));--wp--preset--gradient--foreground-to-quaternary: linear-gradient(160deg, var(--wp--preset--color--foreground), var(--wp--preset--color--quaternary));--wp--preset--gradient--foreground-to-tertiary: linear-gradient(160deg, var(--wp--preset--color--foreground), var(--wp--preset--color--tertiary));--wp--preset--gradient--background-to-foreground: linear-gradient(160deg, var(--wp--preset--color--background), var(--wp--preset--color--foreground));--wp--preset--gradient--background-to-primary: linear-gradient(160deg, var(--wp--preset--color--background), var(--wp--preset--color--primary));--wp--preset--gradient--background-to-secondary: linear-gradient(160deg, var(--wp--preset--color--background), var(--wp--preset--color--secondary));--wp--preset--gradient--background-to-quaternary: linear-gradient(160deg, var(--wp--preset--color--background), var(--wp--preset--color--quaternary));--wp--preset--gradient--background-to-tertiary: linear-gradient(160deg, var(--wp--preset--color--background), var(--wp--preset--color--tertiary));--wp--preset--gradient--primary-to-background: linear-gradient(160deg, var(--wp--preset--color--primary), var(--wp--preset--color--background));--wp--preset--gradient--primary-to-foreground: linear-gradient(160deg, var(--wp--preset--color--primary), var(--wp--preset--color--foreground));--wp--preset--gradient--primary-to-secondary: linear-gradient(160deg, var(--wp--preset--color--primary), var(--wp--preset--color--secondary));--wp--preset--gradient--primary-to-quaternary: linear-gradient(160deg, var(--wp--preset--color--primary), var(--wp--preset--color--quaternary));--wp--preset--gradient--primary-to-tertiary: linear-gradient(160deg, var(--wp--preset--color--primary), var(--wp--preset--color--tertiary));--wp--preset--gradient--secondary-to-background: linear-gradient(160deg, var(--wp--preset--color--secondary), var(--wp--preset--color--background));--wp--preset--gradient--secondary-to-foreground: linear-gradient(160deg, var(--wp--preset--color--secondary), var(--wp--preset--color--foreground));--wp--preset--gradient--secondary-to-primary: linear-gradient(160deg, var(--wp--preset--color--secondary), var(--wp--preset--color--primary));--wp--preset--gradient--secondary-to-quaternary: linear-gradient(160deg, var(--wp--preset--color--secondary), var(--wp--preset--color--quaternary));--wp--preset--gradient--secondary-to-tertiary: linear-gradient(160deg, var(--wp--preset--color--secondary), var(--wp--preset--color--tertiary));--wp--preset--gradient--tertiary-to-background: linear-gradient(160deg, var(--wp--preset--color--tertiary), var(--wp--preset--color--background));--wp--preset--gradient--tertiary-to-foreground: linear-gradient(160deg, var(--wp--preset--color--tertiary), var(--wp--preset--color--foreground));--wp--preset--gradient--tertiary-to-primary: linear-gradient(160deg, var(--wp--preset--color--tertiary), var(--wp--preset--color--primary));--wp--preset--gradient--tertiary-to-secondary: linear-gradient(160deg, var(--wp--preset--color--tertiary), var(--wp--preset--color--secondary));--wp--preset--gradient--tertiary-to-quaternary: linear-gradient(160deg, var(--wp--preset--color--tertiary), var(--wp--preset--color--quaternary));--wp--preset--gradient--quaternary-to-background: linear-gradient(160deg, var(--wp--preset--color--quaternary), var(--wp--preset--color--background));--wp--preset--gradient--quaternary-to-foreground: linear-gradient(160deg, var(--wp--preset--color--quaternary), var(--wp--preset--color--foreground));--wp--preset--gradient--quaternary-to-primary: linear-gradient(160deg, var(--wp--preset--color--quaternary), var(--wp--preset--color--primary));--wp--preset--gradient--quaternary-to-secondary: linear-gradient(160deg, var(--wp--preset--color--quaternary), var(--wp--preset--color--secondary));--wp--preset--gradient--quaternary-to-tertiary: linear-gradient(160deg, var(--wp--preset--color--quaternary), var(--wp--preset--color--tertiary));--wp--preset--font-size--small: clamp(16px, 1rem + ((1vw - 3.2px) * 0.147), 18px);--wp--preset--font-size--medium: clamp(17px, 1.063rem + ((1vw - 3.2px) * 0.294), 21px);--wp--preset--font-size--large: clamp(21px, 1.313rem + ((1vw - 3.2px) * 0.221), 24px);--wp--preset--font-size--x-large: clamp(25.014px, 1.563rem + ((1vw - 3.2px) * 1.249), 42px);--wp--preset--font-size--tiny: clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.147), 16px);--wp--preset--font-size--extra-large: clamp(24px, 1.5rem + ((1vw - 3.2px) * 0.588), 32px);--wp--preset--font-size--huge: clamp(36px, 2.25rem + ((1vw - 3.2px) * 2.059), 64px);--wp--preset--font-size--gigantic: clamp(64px, 4rem + ((1vw - 3.2px) * 2.353), 96px);--wp--preset--font-size--heading-1: clamp(36px, 2.25rem + ((1vw - 3.2px) * 2.059), 64px);--wp--preset--font-size--heading-2: clamp(33px, 2.063rem + ((1vw - 3.2px) * 1.691), 56px);--wp--preset--font-size--heading-3: clamp(30px, 1.875rem + ((1vw - 3.2px) * 1.324), 48px);--wp--preset--font-size--heading-4: clamp(27px, 1.688rem + ((1vw - 3.2px) * 0.956), 40px);--wp--preset--font-size--heading-5: clamp(24px, 1.5rem + ((1vw - 3.2px) * 0.588), 32px);--wp--preset--font-size--heading-6: clamp(21px, 1.313rem + ((1vw - 3.2px) * 0.441), 27px);--wp--preset--font-family--default: "Albert Sans", ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;--wp--preset--font-family--system-sans-serif: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;--wp--preset--font-family--system-serif: ui-serif, Georgia, serif;--wp--preset--font-family--system-monospace: ui-monospace, Menlo, Consolas, Monaco, "Liberation Mono", "Lucida Console", monospace;--wp--preset--spacing--20: 12px;--wp--preset--spacing--30: 16px;--wp--preset--spacing--40: 24px;--wp--preset--spacing--50: 32px;--wp--preset--spacing--60: clamp(32px, 7.5vw, 40px);--wp--preset--spacing--70: clamp(48px, 9vw, 64px);--wp--preset--spacing--80: clamp( 64px, 6.666vw, 96px );--wp--preset--spacing--10: 8px;--wp--preset--spacing--body-gutter: clamp( 32px, 5vw, 64px );--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);--wp--custom--spacing--baseline: 16px;--wp--custom--spacing--small: min(32px, 6.4vw);--wp--custom--spacing--gutter: clamp( calc( 2 * var( --wp--custom--spacing--baseline ) ), 6.666vw, calc( 4 * var( --wp--custom--spacing--baseline ) ) );--wp--custom--spacing--outer: var( --wp--custom--spacing--gutter );--wp--custom--typography--letter-spacing--body: -0.01em;--wp--custom--typography--letter-spacing--heading: -0.02em;--wp--custom--typography--letter-spacing--gigantic: -0.03em;--wp--custom--typography--letter-spacing--uppercase: 0;--wp--custom--typography--line-height--body: 1.5em;--wp--custom--typography--line-height--headings--gigantic: 1.05;--wp--custom--typography--line-height--headings--large: 1.15;--wp--custom--typography--line-height--headings--small: 1.25;}:root { --wp--style--global--content-size: 1300px;--wp--style--global--wide-size: 1680px; }:where(body) { margin: 0; }.wp-site-blocks { padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom); }.has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) { padding-right: 0; padding-left: 0; }.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) > .alignfull { margin-left: 0; margin-right: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: min(32px, 6.4vw); margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: min(32px, 6.4vw); }:root :where(.is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.is-layout-flow) > *{margin-block-start: min(32px, 6.4vw);margin-block-end: 0;}:root :where(.is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.is-layout-constrained) > *{margin-block-start: min(32px, 6.4vw);margin-block-end: 0;}:root :where(.is-layout-flex){gap: min(32px, 6.4vw);}:root :where(.is-layout-grid){gap: min(32px, 6.4vw);}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}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;}body{background-color: var(--wp--preset--color--background);color: var(--wp--preset--color--foreground);font-family: var(--wp--preset--font-family--default);font-size: var(--wp--preset--font-size--medium);font-weight: 500;letter-spacing: var(--wp--custom--typography--letter-spacing--body);line-height: var(--wp--custom--typography--line-height--body);--wp--style--root--padding-top: var(--wp--preset--spacing--body-gutter);--wp--style--root--padding-right: var(--wp--preset--spacing--body-gutter);--wp--style--root--padding-bottom: var(--wp--preset--spacing--body-gutter);--wp--style--root--padding-left: var(--wp--preset--spacing--body-gutter);}a:where(:not(.wp-element-button)){color: inherit;text-decoration: underline;}:root :where(a:where(:not(.wp-element-button)):hover){text-decoration: none;}h1, h2, h3, h4, h5, h6{font-weight: 600;letter-spacing: var(--wp--custom--typography--letter-spacing--gigantic);margin-top: .75em;margin-bottom: 1em;}h1{font-size: var(--wp--preset--font-size--heading-1);line-height: var(--wp--custom--typography--line-height--headings--large);}h2{font-size: var(--wp--preset--font-size--heading-2);line-height: var(--wp--custom--typography--line-height--headings--large);}h3{font-size: var(--wp--preset--font-size--heading-3);line-height: var(--wp--custom--typography--line-height--headings--large);}h4{font-size: var(--wp--preset--font-size--heading-4);line-height: var(--wp--custom--typography--line-height--headings--large);}h5{font-size: var(--wp--preset--font-size--heading-5);line-height: var(--wp--custom--typography--line-height--headings--small);}h6{font-size: var(--wp--preset--font-size--heading-6);line-height: var(--wp--custom--typography--line-height--headings--small);}:root :where(.wp-element-button, .wp-block-button__link){background-color: var(--wp--preset--color--primary);border-radius: 999px;border-width: 0;color: var(--wp--preset--color--background);font-family: inherit;font-size: var(--wp--preset--font-size--small);font-weight: 600;line-height: var(--wp--custom--typography--line-height--headings--large);padding: calc(0.667em + 2px) calc(1.333em + 2px);text-decoration: none;}:root :where(.wp-element-caption, .wp-block-audio figcaption, .wp-block-embed figcaption, .wp-block-gallery figcaption, .wp-block-image figcaption, .wp-block-table figcaption, .wp-block-video figcaption){color: var(--wp--preset--color--secondary);font-size: var(--wp--preset--font-size--small);margin-top: .75em;margin-bottom: 0;}cite{font-size: var(--wp--preset--font-size--medium);font-style: normal;text-transform: none;}.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-foreground-color{color: var(--wp--preset--color--foreground) !important;}.has-background-color{color: var(--wp--preset--color--background) !important;}.has-primary-color{color: var(--wp--preset--color--primary) !important;}.has-secondary-color{color: var(--wp--preset--color--secondary) !important;}.has-tertiary-color{color: var(--wp--preset--color--tertiary) !important;}.has-quaternary-color{color: var(--wp--preset--color--quaternary) !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-foreground-background-color{background-color: var(--wp--preset--color--foreground) !important;}.has-background-background-color{background-color: var(--wp--preset--color--background) !important;}.has-primary-background-color{background-color: var(--wp--preset--color--primary) !important;}.has-secondary-background-color{background-color: var(--wp--preset--color--secondary) !important;}.has-tertiary-background-color{background-color: var(--wp--preset--color--tertiary) !important;}.has-quaternary-background-color{background-color: var(--wp--preset--color--quaternary) !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-foreground-border-color{border-color: var(--wp--preset--color--foreground) !important;}.has-background-border-color{border-color: var(--wp--preset--color--background) !important;}.has-primary-border-color{border-color: var(--wp--preset--color--primary) !important;}.has-secondary-border-color{border-color: var(--wp--preset--color--secondary) !important;}.has-tertiary-border-color{border-color: var(--wp--preset--color--tertiary) !important;}.has-quaternary-border-color{border-color: var(--wp--preset--color--quaternary) !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;}.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-foreground-to-background-gradient-background{background: var(--wp--preset--gradient--foreground-to-background) !important;}.has-foreground-to-primary-gradient-background{background: var(--wp--preset--gradient--foreground-to-primary) !important;}.has-foreground-to-secondary-gradient-background{background: var(--wp--preset--gradient--foreground-to-secondary) !important;}.has-foreground-to-quaternary-gradient-background{background: var(--wp--preset--gradient--foreground-to-quaternary) !important;}.has-foreground-to-tertiary-gradient-background{background: var(--wp--preset--gradient--foreground-to-tertiary) !important;}.has-background-to-foreground-gradient-background{background: var(--wp--preset--gradient--background-to-foreground) !important;}.has-background-to-primary-gradient-background{background: var(--wp--preset--gradient--background-to-primary) !important;}.has-background-to-secondary-gradient-background{background: var(--wp--preset--gradient--background-to-secondary) !important;}.has-background-to-quaternary-gradient-background{background: var(--wp--preset--gradient--background-to-quaternary) !important;}.has-background-to-tertiary-gradient-background{background: var(--wp--preset--gradient--background-to-tertiary) !important;}.has-primary-to-background-gradient-background{background: var(--wp--preset--gradient--primary-to-background) !important;}.has-primary-to-foreground-gradient-background{background: var(--wp--preset--gradient--primary-to-foreground) !important;}.has-primary-to-secondary-gradient-background{background: var(--wp--preset--gradient--primary-to-secondary) !important;}.has-primary-to-quaternary-gradient-background{background: var(--wp--preset--gradient--primary-to-quaternary) !important;}.has-primary-to-tertiary-gradient-background{background: var(--wp--preset--gradient--primary-to-tertiary) !important;}.has-secondary-to-background-gradient-background{background: var(--wp--preset--gradient--secondary-to-background) !important;}.has-secondary-to-foreground-gradient-background{background: var(--wp--preset--gradient--secondary-to-foreground) !important;}.has-secondary-to-primary-gradient-background{background: var(--wp--preset--gradient--secondary-to-primary) !important;}.has-secondary-to-quaternary-gradient-background{background: var(--wp--preset--gradient--secondary-to-quaternary) !important;}.has-secondary-to-tertiary-gradient-background{background: var(--wp--preset--gradient--secondary-to-tertiary) !important;}.has-tertiary-to-background-gradient-background{background: var(--wp--preset--gradient--tertiary-to-background) !important;}.has-tertiary-to-foreground-gradient-background{background: var(--wp--preset--gradient--tertiary-to-foreground) !important;}.has-tertiary-to-primary-gradient-background{background: var(--wp--preset--gradient--tertiary-to-primary) !important;}.has-tertiary-to-secondary-gradient-background{background: var(--wp--preset--gradient--tertiary-to-secondary) !important;}.has-tertiary-to-quaternary-gradient-background{background: var(--wp--preset--gradient--tertiary-to-quaternary) !important;}.has-quaternary-to-background-gradient-background{background: var(--wp--preset--gradient--quaternary-to-background) !important;}.has-quaternary-to-foreground-gradient-background{background: var(--wp--preset--gradient--quaternary-to-foreground) !important;}.has-quaternary-to-primary-gradient-background{background: var(--wp--preset--gradient--quaternary-to-primary) !important;}.has-quaternary-to-secondary-gradient-background{background: var(--wp--preset--gradient--quaternary-to-secondary) !important;}.has-quaternary-to-tertiary-gradient-background{background: var(--wp--preset--gradient--quaternary-to-tertiary) !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;}.has-tiny-font-size{font-size: var(--wp--preset--font-size--tiny) !important;}.has-extra-large-font-size{font-size: var(--wp--preset--font-size--extra-large) !important;}.has-huge-font-size{font-size: var(--wp--preset--font-size--huge) !important;}.has-gigantic-font-size{font-size: var(--wp--preset--font-size--gigantic) !important;}.has-heading-1-font-size{font-size: var(--wp--preset--font-size--heading-1) !important;}.has-heading-2-font-size{font-size: var(--wp--preset--font-size--heading-2) !important;}.has-heading-3-font-size{font-size: var(--wp--preset--font-size--heading-3) !important;}.has-heading-4-font-size{font-size: var(--wp--preset--font-size--heading-4) !important;}.has-heading-5-font-size{font-size: var(--wp--preset--font-size--heading-5) !important;}.has-heading-6-font-size{font-size: var(--wp--preset--font-size--heading-6) !important;}.has-default-font-family{font-family: var(--wp--preset--font-family--default) !important;}.has-system-sans-serif-font-family{font-family: var(--wp--preset--font-family--system-sans-serif) !important;}.has-system-serif-font-family{font-family: var(--wp--preset--font-family--system-serif) !important;}.has-system-monospace-font-family{font-family: var(--wp--preset--font-family--system-monospace) !important;}
|
||
:root :where(.wp-block-navigation a:where(:not(.wp-element-button))){text-decoration: none;}
|
||
:root :where(.wp-block-navigation a:where(:not(.wp-element-button)):hover){text-decoration: underline;}
|
||
:root :where(p){line-height: var(--wp--custom--typography--line-height--body);}
|
||
:root :where(.wp-block-post-date a:where(:not(.wp-element-button))){text-decoration: none;}
|
||
:root :where(.wp-block-post-date a:where(:not(.wp-element-button)):hover){text-decoration: underline;}
|
||
:root :where(.wp-block-post-title a:where(:not(.wp-element-button))){text-decoration: none;}
|
||
:root :where(.wp-block-post-title a:where(:not(.wp-element-button)):hover){text-decoration: underline;}
|
||
:root :where(.wp-block-preformatted){font-size: var(--wp--preset--font-size--small);}
|
||
:root :where(.wp-block-quote){border-left-color: var(--wp--preset--color--tertiary);border-left-width: 1px;border-left-style: solid;padding-left: 1.5em;}
|
||
:root :where(.wp-block-site-title){font-family: inherit;font-style: inherit;font-weight: 600;margin-top: 0px;margin-bottom: 0px;text-transform: inherit;}
|
||
:root :where(.wp-block-site-title a:where(:not(.wp-element-button))){text-decoration: none;}
|
||
:root :where(.wp-block-site-title a:where(:not(.wp-element-button)):hover){text-decoration: underline;}
|
||
:root :where(.wp-block-social-links-is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.wp-block-social-links-is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.wp-block-social-links-is-layout-flow) > *{margin-block-start: .66em;margin-block-end: 0;}:root :where(.wp-block-social-links-is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.wp-block-social-links-is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.wp-block-social-links-is-layout-constrained) > *{margin-block-start: .66em;margin-block-end: 0;}:root :where(.wp-block-social-links-is-layout-flex){gap: .66em;}:root :where(.wp-block-social-links-is-layout-grid){gap: .66em;}
|
||
pre.wp-block-code {
|
||
background: #333333;
|
||
color: #4e9a06;
|
||
}</style>
|
||
<style id="core-block-supports-inline-css">.wp-container-core-navigation-is-layout-1{flex-direction:column;align-items:flex-start;}.wp-container-core-group-is-layout-2{flex-wrap:nowrap;gap:2em;justify-content:space-between;}.wp-container-core-navigation-is-layout-2{gap:0.25em;flex-direction:column;align-items:flex-start;}.wp-container-core-social-links-is-layout-1{gap:1em 1em;justify-content:flex-start;}.wp-container-core-group-is-layout-4{gap:2em;flex-direction:column;align-items:flex-start;}.wp-container-core-post-template-is-layout-1{grid-template-columns:repeat(1, minmax(0, 1fr));}.wp-container-core-group-is-layout-16{gap:0.5em;justify-content:flex-start;}.wp-container-core-group-is-layout-17{gap:1.5em;}.wp-container-core-group-is-layout-18{gap:1em;justify-content:space-between;}.wp-container-core-column-is-layout-2 > *{margin-block-start:0;margin-block-end:0;}.wp-container-core-column-is-layout-2 > * + *{margin-block-start:var(--wp--preset--spacing--70);margin-block-end:0;}.wp-container-core-columns-is-layout-1{flex-wrap:nowrap;}</style>
|
||
<style id="wp-block-template-skip-link-inline-css">.skip-link.screen-reader-text {
|
||
border: 0;
|
||
clip: rect(1px,1px,1px,1px);
|
||
clip-path: inset(50%);
|
||
height: 1px;
|
||
margin: -1px;
|
||
overflow: hidden;
|
||
padding: 0;
|
||
position: absolute !important;
|
||
width: 1px;
|
||
word-wrap: normal !important;
|
||
}
|
||
|
||
.skip-link.screen-reader-text:focus {
|
||
background-color: #eee;
|
||
clip: auto !important;
|
||
clip-path: none;
|
||
color: #444;
|
||
display: block;
|
||
font-size: 1em;
|
||
height: auto;
|
||
left: 5px;
|
||
line-height: normal;
|
||
padding: 15px 23px 14px;
|
||
text-decoration: none;
|
||
top: 5px;
|
||
width: auto;
|
||
z-index: 100000;
|
||
}</style>
|
||
<link rel="stylesheet" id="bjork-styles-css" href="/wp-content/themes/bjork/style.css?ver=0.2.3" media="all">
|
||
<link rel="https://api.w.org/" href="/wp-json/">
|
||
<link rel="alternate" title="JSON" type="application/json" href="/wp-json/wp/v2/pages/452">
|
||
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="/xmlrpc.php?rsd">
|
||
<meta name="generator" content="WordPress 6.6.2">
|
||
<link rel="canonical" href="/blog/">
|
||
<link rel="shortlink" href="/?p=452">
|
||
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="/wp-json/oembed/1.0/embed?url=https%3A%2F%2F%2Fblog%2F">
|
||
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="/wp-json/oembed/1.0/embed?url=https%3A%2F%2F%2Fblog%2F#038;format=xml">
|
||
<script id="wp-load-polyfill-importmap">
|
||
( HTMLScriptElement.supports && HTMLScriptElement.supports("importmap") ) || document.write( '<script src="/wp-includes/js/dist/vendor/wp-polyfill-importmap.min.js?ver=1.8.2"><\/scr' + 'ipt>' );
|
||
</script>
|
||
<script type="importmap" id="wp-importmap">{"imports":{"@wordpress\/interactivity":"\/wp-includes\/js\/dist\/interactivity.min.js?ver=6.6.2"}}</script>
|
||
<script type="module" src="/wp-includes/blocks/navigation/view.min.js?ver=6.6.2" id="@wordpress/block-library/navigation-js-module"></script>
|
||
<link rel="modulepreload" href="/wp-includes/js/dist/interactivity.min.js?ver=6.6.2" id="@wordpress/interactivity-js-modulepreload">
|
||
<style id="wp-fonts-local">@font-face{font-family:"Albert Sans";font-style:normal;font-weight:100 900;font-display:fallback;src:url('/wp-content/themes/bjork/assets/fonts/AlbertSans-VariableFont_wght.woff2') format('woff2');font-stretch:normal;}
|
||
@font-face{font-family:"Albert Sans";font-style:italic;font-weight:100 900;font-display:fallback;src:url('/wp-content/themes/bjork/assets/fonts/AlbertSans-Italic-VariableFont_wght.woff2') format('woff2');font-stretch:normal;}</style>
|
||
<link rel="icon" href="/wp-content/uploads/2024/03/cropped-cropped-avatar-32x32.png" sizes="32x32">
|
||
<link rel="icon" href="/wp-content/uploads/2024/03/cropped-cropped-avatar-192x192.png" sizes="192x192">
|
||
<link rel="apple-touch-icon" href="/wp-content/uploads/2024/03/cropped-cropped-avatar-180x180.png">
|
||
<meta name="msapplication-TileImage" content="/wp-content/uploads/2024/03/cropped-cropped-avatar-270x270.png">
|
||
</head>
|
||
|
||
<body class="page-template-default page page-id-452 wp-custom-logo wp-embed-responsive">
|
||
|
||
<div class="wp-site-blocks">
|
||
<header class="site-header wp-block-template-part">
|
||
<div class="wp-block-group alignfull has-global-padding is-layout-constrained wp-block-group-is-layout-constrained" style="margin-top:0;margin-bottom:0;padding-bottom:var(--wp--preset--spacing--70)">
|
||
<div class="wp-block-group alignwide is-content-justification-space-between is-nowrap is-layout-flex wp-container-core-group-is-layout-2 wp-block-group-is-layout-flex">
|
||
<div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained"><h1 style="font-style:normal;" class="wp-block-site-title has-heading-5-font-size"><a href="/" target="_self" rel="home">hackanooga</a></h1></div>
|
||
|
||
|
||
<nav class="has-large-font-size is-responsive items-justified-left is-vertical wp-block-navigation has-large-font-size is-content-justification-left is-layout-flex wp-container-core-navigation-is-layout-1 wp-block-navigation-is-layout-flex" aria-label="Navigation 5" data-wp-interactive="core/navigation" data-wp-context='{"overlayOpenedBy":{"click":false,"hover":false,"focus":false},"type":"overlay","roleAttribute":"","ariaLabel":"Menu"}'><button aria-haspopup="dialog" aria-label="Open menu" class="wp-block-navigation__responsive-container-open always-shown" data-wp-on-async--click="actions.openMenuOnClick" data-wp-on--keydown="actions.handleMenuKeydown"><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" aria-hidden="true" focusable="false"><rect x="4" y="7.5" width="16" height="1.5"></rect><rect x="4" y="15" width="16" height="1.5"></rect></svg></button>
|
||
<div class="wp-block-navigation__responsive-container hidden-by-default " id="modal-1" data-wp-class--has-modal-open="state.isMenuOpen" data-wp-class--is-menu-open="state.isMenuOpen" data-wp-watch="callbacks.initMenu" data-wp-on--keydown="actions.handleMenuKeydown" data-wp-on-async--focusout="actions.handleMenuFocusout" tabindex="-1">
|
||
<div class="wp-block-navigation__responsive-close" tabindex="-1">
|
||
<div class="wp-block-navigation__responsive-dialog" data-wp-bind--aria-modal="state.ariaModal" data-wp-bind--aria-label="state.ariaLabel" data-wp-bind--role="state.roleAttribute">
|
||
<button aria-label="Close menu" class="wp-block-navigation__responsive-container-close" data-wp-on-async--click="actions.closeMenuOnClick"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" width="24" height="24" aria-hidden="true" focusable="false"><path d="M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"></path></svg></button>
|
||
<div class="wp-block-navigation__responsive-container-content" data-wp-watch="callbacks.focusFirstElement" id="modal-1-content">
|
||
<ul class="wp-block-navigation__container has-large-font-size is-responsive items-justified-left is-vertical wp-block-navigation has-large-font-size">
|
||
<li class="has-large-font-size wp-block-navigation-item current-menu-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/blog/" aria-current="page"><span class="wp-block-navigation-item__label">Blog</span></a></li>
|
||
<li class="has-large-font-size wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/wp-content/uploads/2024/03/mikeconrad-devops.pdf"><span class="wp-block-navigation-item__label">Resume</span></a></li>
|
||
<li class="has-large-font-size wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/portfolio/"><span class="wp-block-navigation-item__label">Portfolio</span></a></li>
|
||
<li class="has-large-font-size wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="https://linkedin.com/in/mikeenxo"><span class="wp-block-navigation-item__label">Connect</span></a></li>
|
||
<li class="has-large-font-size wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="https://meetup.com/chadevs"><span class="wp-block-navigation-item__label">Chadev</span></a></li>
|
||
<li class="has-large-font-size wp-block-navigation-item current-menu-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/" aria-current="page"><span class="wp-block-navigation-item__label">Home</span></a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div></nav>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
|
||
|
||
<div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained" style="margin-top:0;margin-bottom:0">
|
||
<div class="wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex" style="margin-bottom:0px">
|
||
<div class="wp-block-column site-sidebar-col is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:23%"><aside class="site-sidebar wp-block-template-part">
|
||
<div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-4 wp-block-group-is-layout-flex" style="margin-top:0px;margin-bottom:0px">
|
||
<h1 style="font-style:normal;" class="wp-block-site-title has-heading-5-font-size"><a href="/" target="_self" rel="home">hackanooga</a></h1>
|
||
|
||
<nav class="has-large-font-size is-responsive is-vertical wp-block-navigation has-large-font-size is-layout-flex wp-container-core-navigation-is-layout-2 wp-block-navigation-is-layout-flex" aria-label="Navigation 4" data-wp-interactive="core/navigation" data-wp-context='{"overlayOpenedBy":{"click":false,"hover":false,"focus":false},"type":"overlay","roleAttribute":"","ariaLabel":"Menu"}'><button aria-haspopup="dialog" aria-label="Open menu" class="wp-block-navigation__responsive-container-open " data-wp-on-async--click="actions.openMenuOnClick" data-wp-on--keydown="actions.handleMenuKeydown"><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" aria-hidden="true" focusable="false"><rect x="4" y="7.5" width="16" height="1.5"></rect><rect x="4" y="15" width="16" height="1.5"></rect></svg></button>
|
||
<div class="wp-block-navigation__responsive-container " id="modal-2" data-wp-class--has-modal-open="state.isMenuOpen" data-wp-class--is-menu-open="state.isMenuOpen" data-wp-watch="callbacks.initMenu" data-wp-on--keydown="actions.handleMenuKeydown" data-wp-on-async--focusout="actions.handleMenuFocusout" tabindex="-1">
|
||
<div class="wp-block-navigation__responsive-close" tabindex="-1">
|
||
<div class="wp-block-navigation__responsive-dialog" data-wp-bind--aria-modal="state.ariaModal" data-wp-bind--aria-label="state.ariaLabel" data-wp-bind--role="state.roleAttribute">
|
||
<button aria-label="Close menu" class="wp-block-navigation__responsive-container-close" data-wp-on-async--click="actions.closeMenuOnClick"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" width="24" height="24" aria-hidden="true" focusable="false"><path d="M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"></path></svg></button>
|
||
<div class="wp-block-navigation__responsive-container-content" data-wp-watch="callbacks.focusFirstElement" id="modal-2-content">
|
||
<ul class="wp-block-navigation__container has-large-font-size is-responsive is-vertical wp-block-navigation has-large-font-size">
|
||
<li class="has-large-font-size wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/"><span class="wp-block-navigation-item__label">Intro</span></a></li>
|
||
<li class="has-large-font-size wp-block-navigation-item current-menu-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/blog/" aria-current="page"><span class="wp-block-navigation-item__label">Blog</span></a></li>
|
||
<li class="has-large-font-size wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/wp-content/uploads/2024/03/mikeconrad-devops.pdf"><span class="wp-block-navigation-item__label">Resume</span></a></li>
|
||
<li class="has-large-font-size wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/portfolio/"><span class="wp-block-navigation-item__label">Portfolio</span></a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div></nav>
|
||
|
||
|
||
<ul class="wp-block-social-links has-icon-color is-style-logos-only is-content-justification-left is-layout-flex wp-container-core-social-links-is-layout-1 wp-block-social-links-is-layout-flex" style="margin-top:0px;margin-bottom:0px">
|
||
<li style="color: inherit; " class="wp-social-link wp-social-link-linkedin has-foreground-color wp-block-social-link"><a href="https://linkedin.com/in/mikeenxo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewbox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg><span class="wp-block-social-link-label screen-reader-text">LinkedIn</span></a></li>
|
||
|
||
<li style="color: inherit; " class="wp-social-link wp-social-link-github has-foreground-color wp-block-social-link"><a href="https://github.com/enxoco" class="wp-block-social-link-anchor"><svg width="24" height="24" viewbox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z"></path></svg><span class="wp-block-social-link-label screen-reader-text">GitHub</span></a></li>
|
||
</ul>
|
||
</div>
|
||
</aside></div>
|
||
|
||
|
||
|
||
<div class="wp-block-column is-layout-flow wp-container-core-column-is-layout-2 wp-block-column-is-layout-flow" style="flex-basis:77%">
|
||
<div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained"><h1 class="has-text-align-left wp-block-post-title">Blog</h1></div>
|
||
|
||
|
||
|
||
|
||
<div class="entry-content wp-block-post-content has-global-padding is-layout-constrained wp-block-post-content-is-layout-constrained">
|
||
<p></p>
|
||
|
||
|
||
|
||
<div class="wp-block-query is-layout-flow wp-block-query-is-layout-flow"><ul class="columns-1 wp-block-post-template is-layout-grid wp-container-core-post-template-is-layout-1 wp-block-post-template-is-layout-grid">
|
||
<li class="wp-block-post post-619 post type-post status-publish format-standard hentry category-automation category-iac category-open-source category-security category-self-hosted category-software-engineering category-ssh tag-blog-post">
|
||
|
||
<div class="wp-block-group is-layout-flow wp-block-group-is-layout-flow" style="padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px">
|
||
<h2 class="wp-block-post-title"><a href="/standing-up-a-wireguard-vpn/" target="_self">Standing up a Wireguard VPN</a></h2>
|
||
|
||
<div class="wp-block-post-excerpt">
|
||
<p class="wp-block-post-excerpt__excerpt">VPN’s have traditionally been slow, complex and hard to set up and configure. That all changed several years ago when Wireguard was officially merged into the mainline Linux kernel (src). I won’t go over all the reasons for why you should want to use Wireguard in this article, instead I will be focusing on just…</p>
|
||
<p class="wp-block-post-excerpt__more-text"><a class="wp-block-post-excerpt__more-link" href="/standing-up-a-wireguard-vpn/">Read More</a></p>
|
||
</div>
|
||
|
||
<div class="wp-block-post-date"><time datetime="2024-09-25T09:56:04-04:00">September 25, 2024</time></div>
|
||
</div>
|
||
|
||
</li>
|
||
<li class="wp-block-post post-607 post type-post status-publish format-standard hentry category-cloudflare category-networking category-security category-software-engineering tag-blog-post">
|
||
|
||
<div class="wp-block-group is-layout-flow wp-block-group-is-layout-flow" style="padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px">
|
||
<h2 class="wp-block-post-title"><a href="/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/" target="_self">Hardening your web server by only allowing traffic from Cloudflare</a></h2>
|
||
|
||
<div class="wp-block-post-excerpt">
|
||
<p class="wp-block-post-excerpt__excerpt">Harden your origin server by only allowing access from Cloudflare IP addresses.</p>
|
||
<p class="wp-block-post-excerpt__more-text"><a class="wp-block-post-excerpt__more-link" href="/hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/">Read More</a></p>
|
||
</div>
|
||
|
||
<div class="wp-block-post-date"><time datetime="2024-08-01T17:02:29-04:00">August 1, 2024</time></div>
|
||
</div>
|
||
|
||
</li>
|
||
<li class="wp-block-post post-596 post type-post status-publish format-standard has-post-thumbnail hentry category-docker category-networking category-self-hosted tag-blog-post">
|
||
|
||
<div class="wp-block-group is-layout-flow wp-block-group-is-layout-flow" style="padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px">
|
||
<h2 class="wp-block-post-title"><a href="/debugging-running-nginx-config/" target="_self">Debugging running Nginx config</a></h2>
|
||
|
||
<div class="wp-block-post-excerpt">
|
||
<p class="wp-block-post-excerpt__excerpt">I was recently working on project where a client had cPanel/WHM with Nginx and Apache. They had a large number of sites managed by Nginx with a large number of includes. I created a custom config to override a location block and needed to be certain that my changes where actually being picked up. Anytime…</p>
|
||
<p class="wp-block-post-excerpt__more-text"><a class="wp-block-post-excerpt__more-link" href="/debugging-running-nginx-config/">Read More</a></p>
|
||
</div>
|
||
|
||
<div class="wp-block-post-date"><time datetime="2024-07-16T21:42:43-04:00">July 16, 2024</time></div>
|
||
</div>
|
||
|
||
</li>
|
||
<li class="wp-block-post post-576 post type-post status-publish format-standard hentry category-cloudflare category-networking category-open-source category-security category-ssh tag-blog-post">
|
||
|
||
<div class="wp-block-group is-layout-flow wp-block-group-is-layout-flow" style="padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px">
|
||
<h2 class="wp-block-post-title"><a href="/fun-with-bots-ssh-tarpitting/" target="_self">Fun with bots – SSH tarpitting</a></h2>
|
||
|
||
<div class="wp-block-post-excerpt">
|
||
<p class="wp-block-post-excerpt__excerpt">For those of you who aren’t familiar with the concept of a network tarpit it is a fairly simple concept. Wikipedia defines it like this: A tarpit is a service on a computer system (usually a server) that purposely delays incoming connections. The technique was developed as a defense against a computer worm, and the idea is that network abuses such as spamming or broad…</p>
|
||
<p class="wp-block-post-excerpt__more-text"><a class="wp-block-post-excerpt__more-link" href="/fun-with-bots-ssh-tarpitting/">Read More</a></p>
|
||
</div>
|
||
|
||
<div class="wp-block-post-date"><time datetime="2024-06-24T09:37:43-04:00">June 24, 2024</time></div>
|
||
</div>
|
||
|
||
</li>
|
||
<li class="wp-block-post post-564 post type-post status-publish format-standard hentry category-ansible category-automation category-docker category-software-engineering category-traefik tag-blog-post">
|
||
|
||
<div class="wp-block-group is-layout-flow wp-block-group-is-layout-flow" style="padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px">
|
||
<h2 class="wp-block-post-title"><a href="/traefik-3-0-service-discovery-in-docker-swarm-mode/" target="_self">Traefik 3.0 service discovery in Docker Swarm mode</a></h2>
|
||
|
||
<div class="wp-block-post-excerpt">
|
||
<p class="wp-block-post-excerpt__excerpt">I recently decided to set up a Docker swarm cluster for a project I was working on. If you aren’t familiar with Swarm mode, it is similar in some ways to k8s but with much less complexity and it is built into Docker. If you are looking for a fairly straightforward way to deploy containers…</p>
|
||
<p class="wp-block-post-excerpt__more-text"><a class="wp-block-post-excerpt__more-link" href="/traefik-3-0-service-discovery-in-docker-swarm-mode/">Read More</a></p>
|
||
</div>
|
||
|
||
<div class="wp-block-post-date"><time datetime="2024-05-11T09:44:01-04:00">May 11, 2024</time></div>
|
||
</div>
|
||
|
||
</li>
|
||
<li class="wp-block-post post-557 post type-post status-publish format-standard has-post-thumbnail hentry category-automation category-docker category-software-engineering tag-blog-post">
|
||
|
||
<div class="wp-block-group is-layout-flow wp-block-group-is-layout-flow" style="padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px">
|
||
<h2 class="wp-block-post-title"><a href="/stop-all-running-containers-with-docker/" target="_self">Stop all running containers with Docker</a></h2>
|
||
|
||
<div class="wp-block-post-excerpt">
|
||
<p class="wp-block-post-excerpt__excerpt">These are some handy snippets I use on a regular basis when managing containers. I have one server in particular that can sometimes end up with 50 to 100 orphaned containers for various reasons. The easiest/quickest way to stop all of them is to do something like this: Let me break this down in case…</p>
|
||
<p class="wp-block-post-excerpt__more-text"><a class="wp-block-post-excerpt__more-link" href="/stop-all-running-containers-with-docker/">Read More</a></p>
|
||
</div>
|
||
|
||
<div class="wp-block-post-date"><time datetime="2024-04-03T09:12:41-04:00">April 3, 2024</time></div>
|
||
</div>
|
||
|
||
</li>
|
||
<li class="wp-block-post post-393 post type-post status-publish format-standard hentry category-ansible category-automation category-ci-cd category-teamcity tag-blog-post">
|
||
|
||
<div class="wp-block-group is-layout-flow wp-block-group-is-layout-flow" style="padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px">
|
||
<h2 class="wp-block-post-title"><a href="/automating-ci-cd-with-teamcity-ansible/" target="_self">Automating CI/CD with TeamCity and Ansible</a></h2>
|
||
|
||
<div class="wp-block-post-excerpt">
|
||
<p class="wp-block-post-excerpt__excerpt">In part one of this series we are going to explore a CI/CD option you may not be familiar with but should definitely be on your radar. I used Jetbrains TeamCity for several months at my last company and really enjoyed my time with it. A couple of the things I like most about it…</p>
|
||
<p class="wp-block-post-excerpt__more-text"><a class="wp-block-post-excerpt__more-link" href="/automating-ci-cd-with-teamcity-ansible/">Read More</a></p>
|
||
</div>
|
||
|
||
<div class="wp-block-post-date"><time datetime="2024-03-11T09:37:47-04:00">March 11, 2024</time></div>
|
||
</div>
|
||
|
||
</li>
|
||
<li class="wp-block-post post-413 post type-post status-publish format-standard hentry category-automation category-docker category-oci category-self-hosted tag-blog-post">
|
||
|
||
<div class="wp-block-group is-layout-flow wp-block-group-is-layout-flow" style="padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px">
|
||
<h2 class="wp-block-post-title"><a href="/self-hosted-package-registries-with-gitea/" target="_self">Self hosted package registries with Gitea</a></h2>
|
||
|
||
<div class="wp-block-post-excerpt">
|
||
<p class="wp-block-post-excerpt__excerpt">I am a big proponent of open source technologies. I have been using Gitea for a couple years now in my homelab. A few years ago I moved most of my code off of Github and onto my self hosted instance. I recently came across a really handy feature that I didn’t know Gitea had…</p>
|
||
<p class="wp-block-post-excerpt__more-text"><a class="wp-block-post-excerpt__more-link" href="/self-hosted-package-registries-with-gitea/">Read More</a></p>
|
||
</div>
|
||
|
||
<div class="wp-block-post-date"><time datetime="2024-03-07T10:07:07-05:00">March 7, 2024</time></div>
|
||
</div>
|
||
|
||
</li>
|
||
<li class="wp-block-post post-425 post type-post status-publish format-standard hentry category-automation category-cloudflare category-docker category-traefik tag-blog-post">
|
||
|
||
<div class="wp-block-group is-layout-flow wp-block-group-is-layout-flow" style="padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px">
|
||
<h2 class="wp-block-post-title"><a href="/traefik-with-lets-encrypt-and-cloudflare-pt-2/" target="_self">Traefik with Let’s Encrypt and Cloudflare (pt 2)</a></h2>
|
||
|
||
<div class="wp-block-post-excerpt">
|
||
<p class="wp-block-post-excerpt__excerpt">In this article we are gonna get into setting up Traefik to request dynamic certs from Lets Encrypt. I had a few issues getting this up and running and the documentation is a little fuzzy. In my case I decided to go with the DNS challenge route. Really the only reason I went with this…</p>
|
||
<p class="wp-block-post-excerpt__more-text"><a class="wp-block-post-excerpt__more-link" href="/traefik-with-lets-encrypt-and-cloudflare-pt-2/">Read More</a></p>
|
||
</div>
|
||
|
||
<div class="wp-block-post-date"><time datetime="2024-02-15T15:19:12-05:00">February 15, 2024</time></div>
|
||
</div>
|
||
|
||
</li>
|
||
<li class="wp-block-post post-422 post type-post status-publish format-standard hentry category-cloudflare category-docker category-self-hosted category-traefik tag-blog-post">
|
||
|
||
<div class="wp-block-group is-layout-flow wp-block-group-is-layout-flow" style="padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px">
|
||
<h2 class="wp-block-post-title"><a href="/traefik-with-lets-encrypt-and-cloudflare-pt-1/" target="_self">Traefik with Let’s Encrypt and Cloudflare (pt 1)</a></h2>
|
||
|
||
<div class="wp-block-post-excerpt">
|
||
<p class="wp-block-post-excerpt__excerpt">Recently I decided to rebuild one of my homelab servers. Previously I was using Nginx as my reverse proxy but I decided to switch to Traefik since I have been using it professionally for some time now. One of the reasons I like Traefik is that it is stupid simple to set up certificates and…</p>
|
||
<p class="wp-block-post-excerpt__more-text"><a class="wp-block-post-excerpt__more-link" href="/traefik-with-lets-encrypt-and-cloudflare-pt-1/">Read More</a></p>
|
||
</div>
|
||
|
||
<div class="wp-block-post-date"><time datetime="2024-02-01T14:35:00-05:00">February 1, 2024</time></div>
|
||
</div>
|
||
|
||
</li>
|
||
</ul></div>
|
||
</div>
|
||
|
||
<footer class="site-footer wp-block-template-part">
|
||
<div class="wp-block-group has-small-font-size is-content-justification-space-between is-layout-flex wp-container-core-group-is-layout-18 wp-block-group-is-layout-flex" style="padding-top:var(--wp--preset--spacing--70)">
|
||
<div class="wp-block-group is-layout-flex wp-container-core-group-is-layout-17 wp-block-group-is-layout-flex">
|
||
<div class="wp-block-group is-content-justification-left is-layout-flex wp-container-core-group-is-layout-16 wp-block-group-is-layout-flex" style="font-weight:700/">
|
||
<p>© 2023</p>
|
||
|
||
|
||
<p style="font-weight:700;" class="wp-block-site-title"><a href="/" target="_self" rel="home">hackanooga</a></p>
|
||
</div>
|
||
|
||
|
||
|
||
<p class="theme-credit has-secondary-color has-text-color">Theme by <a href="https://andersnoren.se/">Anders Norén</a></p>
|
||
</div>
|
||
|
||
|
||
|
||
<p>Powered by <a href="https://wordpress.org/">WordPress</a></p>
|
||
</div>
|
||
|
||
|
||
<script src="https://openpanel.dev/op.js" defer async></script>
|
||
<script src="/wp-content/themes/bjork/assets/js/openpanel.js" defer async></script></footer>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
<script id="wp-block-template-skip-link-js-after">( function() {
|
||
var skipLinkTarget = document.querySelector( 'main' ),
|
||
sibling,
|
||
skipLinkTargetID,
|
||
skipLink;
|
||
|
||
// Early exit if a skip-link target can't be located.
|
||
if ( ! skipLinkTarget ) {
|
||
return;
|
||
}
|
||
|
||
/*
|
||
* Get the site wrapper.
|
||
* The skip-link will be injected in the beginning of it.
|
||
*/
|
||
sibling = document.querySelector( '.wp-site-blocks' );
|
||
|
||
// Early exit if the root element was not found.
|
||
if ( ! sibling ) {
|
||
return;
|
||
}
|
||
|
||
// Get the skip-link target's ID, and generate one if it doesn't exist.
|
||
skipLinkTargetID = skipLinkTarget.id;
|
||
if ( ! skipLinkTargetID ) {
|
||
skipLinkTargetID = 'wp--skip-link--target';
|
||
skipLinkTarget.id = skipLinkTargetID;
|
||
}
|
||
|
||
// Create the skip link.
|
||
skipLink = document.createElement( 'a' );
|
||
skipLink.classList.add( 'skip-link', 'screen-reader-text' );
|
||
skipLink.href = '#' + skipLinkTargetID;
|
||
skipLink.innerHTML = 'Skip to content';
|
||
|
||
// Inject the skip link.
|
||
sibling.parentElement.insertBefore( skipLink, sibling );
|
||
}() );</script>
|
||
<script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8d21077effcd6738',t:'MTcyODg0MDMzMC4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
|
||
</body>
|
||
</html> |