GitHub.com
tcp/443 tcp/80
cloudflare
tcp/443 tcp/80 tcp/8443
No description available
Fingerprint: 33fc8a384ee3c2e750c951cf50c951cf12b9434352341a7052341a7052341a70
Nuclei scan report for tags nginx, wordpress, php: wordpress-xmlrpc-listmethods : Wordpress XML-RPC List System Methods by 0ut0fb4nd -------------
Open service 2606:50c0:8002::153:80 · jmnorlund.net
2026-02-07 08:42
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: DDFD:21F556:10D6EF:11E805:6986FAF6 Accept-Ranges: bytes Date: Sat, 07 Feb 2026 08:42:30 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-sin-wsat1880024-SIN X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1770453751.879386,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: f4b41caf1fc1ea7612e657a85ca3cf905d67c71b Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 216.24.57.7:8443 · pub.jmnorlund.net
2026-01-23 12:48
HTTP/1.1 403 Forbidden
Date: Fri, 23 Jan 2026 12:48:07 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 4515
Connection: close
X-Frame-Options: SAMEORIGIN
Referrer-Policy: same-origin
Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Server: cloudflare
CF-RAY: 9c2767506972b7a0-EWR
alt-svc: h3=":8443"; ma=86400
Page title: Attention Required! | Cloudflare
<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en-US"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en-US"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en-US"> <!--<![endif]-->
<head>
<title>Attention Required! | Cloudflare</title>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="robots" content="noindex, nofollow" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/cf.errors.css" />
<!--[if lt IE 9]><link rel="stylesheet" id='cf_styles-ie-css' href="/cdn-cgi/styles/cf.errors.ie.css" /><![endif]-->
<style>body{margin:0;padding:0}</style>
<!--[if gte IE 10]><!-->
<script>
if (!navigator.cookieEnabled) {
window.addEventListener('DOMContentLoaded', function () {
var cookieEl = document.getElementById('cookie-alert');
cookieEl.style.display = 'block';
})
}
</script>
<!--<![endif]-->
</head>
<body>
<div id="cf-wrapper">
<div class="cf-alert cf-alert-error cf-cookie-error" id="cookie-alert" data-translate="enable_cookies">Please enable cookies.</div>
<div id="cf-error-details" class="cf-error-details-wrapper">
<div class="cf-wrapper cf-header cf-error-overview">
<h1 data-translate="block_headline">Sorry, you have been blocked</h1>
<h2 class="cf-subheadline"><span data-translate="unable_to_access">You are unable to access</span> onrender.com</h2>
</div><!-- /.header -->
<div class="cf-section cf-highlight">
<div class="cf-wrapper">
<div class="cf-screenshot-container cf-screenshot-full">
<span class="cf-no-screenshot error"></span>
</div>
</div>
</div><!-- /.captcha-container -->
<div class="cf-section cf-wrapper">
<div class="cf-columns two">
<div class="cf-column">
<h2 data-translate="blocked_why_headline">Why have I been blocked?</h2>
<p data-translate="blocked_why_detail">This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.</p>
</div>
<div class="cf-column">
<h2 data-translate="blocked_resolve_headline">What can I do to resolve this?</h2>
<p data-translate="blocked_resolve_detail">You can email the site owner to let them know you were blocked. Please include what you were doing when this page came up and the Cloudflare Ray ID found at the bottom of this page.</p>
</div>
</div>
</div><!-- /.section -->
<div class="cf-error-footer cf-wrapper w-240 lg:w-full py-10 sm:py-4 sm:px-8 mx-auto text-center sm:text-left border-solid border-0 border-t border-gray-300">
<p class="text-13">
<span class="cf-footer-item sm:block sm:mb-1">Cloudflare Ray ID: <strong class="font-semibold">9c2767506972b7a0</strong></span>
<span class="cf-footer-separator sm:hidden">•</span>
<span id="cf-footer-item-ip" class="cf-footer-item hidden sm:block sm:mb-1">
Your IP:
<button type="button" id="cf-footer-ip-reveal" class="cf-footer-ip-reveal-btn">Click to reveal</button>
<span class="hidden" id="cf-footer-ip">134.122.28.88</span>
<span class="cf-footer-separator sm:hidden">•</span>
</span>
<span class="cf-footer-item sm:block sm:mb-1"><span>Performance & security by</span> <a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing" id="brand_link" target="_blank">Cloudflare</a></span>
</p>
<script>(function(){function d(){var b=a.getElementById("cf-footer-item-ip"),c=a.getElementById("cf-footer-ip-reveal");b&&"classList"in b&&(b.classLis
Open service 216.24.57.7:80 · pub.jmnorlund.net
2026-01-23 12:48
HTTP/1.1 301 Moved Permanently Date: Fri, 23 Jan 2026 12:48:07 GMT Content-Type: text/html; charset=utf-8 Content-Length: 61 Connection: close CF-RAY: 9c2767510a8fe640-EWR Location: https://pub.jmnorlund.net/ CF-Cache-Status: HIT Age: 1 Server: cloudflare alt-svc: h3=":443"; ma=86400 <a href="https://pub.jmnorlund.net/">Moved Permanently</a>.
Open service 216.24.57.7:443 · pub.jmnorlund.net
2026-01-23 12:48
HTTP/1.1 200 OK
Date: Fri, 23 Jan 2026 12:48:07 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
CF-RAY: 9c27675149b44b05-EWR
Cache-Control: public, max-age=0, s-maxage=300
etag: W/"a38ee0e32b4dd5347ff381cc9f179043"
last-modified: Tue, 11 Jun 2024 00:03:00 UTC
vary: Accept-Encoding
vary: Accept-Encoding
x-content-type-options: nosniff
CF-Cache-Status: HIT
Age: 32
Server: cloudflare
alt-svc: h3=":443"; ma=86400
Page title: jmn public notes
<!DOCTYPE html>
<html lang="en" dir="auto">
<head>
<meta name="generator" content="Hugo 0.107.0"><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>jmn public notes</title>
<meta name="description" content="">
<meta name="author" content="">
<link rel="canonical" href="https://pub.jmnorlund.net/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.86fbf5e3cf62784c08059bbc5af053529d3354c05108987ea70c553096a0940f.css" integrity="sha256-hvv1489ieEwIBZu8WvBTUp0zVMBRCJh+pwxVMJaglA8=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://pub.jmnorlund.net/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://pub.jmnorlund.net/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://pub.jmnorlund.net/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://pub.jmnorlund.net/apple-touch-icon.png">
<link rel="mask-icon" href="https://pub.jmnorlund.net/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://pub.jmnorlund.net/index.xml">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
<style>
@media (prefers-color-scheme: dark) {
:root {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--hljs-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
}
.list {
background: var(--theme);
}
.list:not(.dark)::-webkit-scrollbar-track {
background: 0 0;
}
.list:not(.dark)::-webkit-scrollbar-thumb {
border-color: var(--theme);
}
}
</style>
</noscript>
<link href="//fonts.googleapis.com/css?family=Fira+Code:400,700|Overpass+Mono:400,400i,700,700i" rel="stylesheet">
<meta property="og:title" content="jmn public notes" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://pub.jmnorlund.net/" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="jmn public notes"/>
<meta name="twitter:description" content=""/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "jmn public notes",
"url": "https://pub.jmnorlund.net/",
"description": "",
"thumbnailUrl": "https://pub.jmnorlund.net/favicon.ico",
"sameAs": [
]
}
</script>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
} else if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://pub.jmnorlund.net/" accesskey="h" title="jmn public notes (Alt + H)">jmn public notes</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79
Open service 216.24.57.251:80 · pub.jmnorlund.net
2026-01-23 12:48
HTTP/1.1 301 Moved Permanently Date: Fri, 23 Jan 2026 12:48:08 GMT Content-Type: text/html; charset=utf-8 Content-Length: 61 Connection: close CF-RAY: 9c276753ed61d233-FRA Location: https://pub.jmnorlund.net/ CF-Cache-Status: HIT Age: 1 Server: cloudflare alt-svc: h3=":443"; ma=86400 <a href="https://pub.jmnorlund.net/">Moved Permanently</a>.
Open service 216.24.57.251:8443 · pub.jmnorlund.net
2026-01-23 12:48
HTTP/1.1 403 Forbidden
Date: Fri, 23 Jan 2026 12:48:07 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 4516
Connection: close
X-Frame-Options: SAMEORIGIN
Referrer-Policy: same-origin
Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Server: cloudflare
CF-RAY: 9c2767502f691cb0-AMS
alt-svc: h3=":8443"; ma=86400
Page title: Attention Required! | Cloudflare
<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en-US"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en-US"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en-US"> <!--<![endif]-->
<head>
<title>Attention Required! | Cloudflare</title>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="robots" content="noindex, nofollow" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/cf.errors.css" />
<!--[if lt IE 9]><link rel="stylesheet" id='cf_styles-ie-css' href="/cdn-cgi/styles/cf.errors.ie.css" /><![endif]-->
<style>body{margin:0;padding:0}</style>
<!--[if gte IE 10]><!-->
<script>
if (!navigator.cookieEnabled) {
window.addEventListener('DOMContentLoaded', function () {
var cookieEl = document.getElementById('cookie-alert');
cookieEl.style.display = 'block';
})
}
</script>
<!--<![endif]-->
</head>
<body>
<div id="cf-wrapper">
<div class="cf-alert cf-alert-error cf-cookie-error" id="cookie-alert" data-translate="enable_cookies">Please enable cookies.</div>
<div id="cf-error-details" class="cf-error-details-wrapper">
<div class="cf-wrapper cf-header cf-error-overview">
<h1 data-translate="block_headline">Sorry, you have been blocked</h1>
<h2 class="cf-subheadline"><span data-translate="unable_to_access">You are unable to access</span> onrender.com</h2>
</div><!-- /.header -->
<div class="cf-section cf-highlight">
<div class="cf-wrapper">
<div class="cf-screenshot-container cf-screenshot-full">
<span class="cf-no-screenshot error"></span>
</div>
</div>
</div><!-- /.captcha-container -->
<div class="cf-section cf-wrapper">
<div class="cf-columns two">
<div class="cf-column">
<h2 data-translate="blocked_why_headline">Why have I been blocked?</h2>
<p data-translate="blocked_why_detail">This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.</p>
</div>
<div class="cf-column">
<h2 data-translate="blocked_resolve_headline">What can I do to resolve this?</h2>
<p data-translate="blocked_resolve_detail">You can email the site owner to let them know you were blocked. Please include what you were doing when this page came up and the Cloudflare Ray ID found at the bottom of this page.</p>
</div>
</div>
</div><!-- /.section -->
<div class="cf-error-footer cf-wrapper w-240 lg:w-full py-10 sm:py-4 sm:px-8 mx-auto text-center sm:text-left border-solid border-0 border-t border-gray-300">
<p class="text-13">
<span class="cf-footer-item sm:block sm:mb-1">Cloudflare Ray ID: <strong class="font-semibold">9c2767502f691cb0</strong></span>
<span class="cf-footer-separator sm:hidden">•</span>
<span id="cf-footer-item-ip" class="cf-footer-item hidden sm:block sm:mb-1">
Your IP:
<button type="button" id="cf-footer-ip-reveal" class="cf-footer-ip-reveal-btn">Click to reveal</button>
<span class="hidden" id="cf-footer-ip">142.93.129.190</span>
<span class="cf-footer-separator sm:hidden">•</span>
</span>
<span class="cf-footer-item sm:block sm:mb-1"><span>Performance & security by</span> <a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing" id="brand_link" target="_blank">Cloudflare</a></span>
</p>
<script>(function(){function d(){var b=a.getElementById("cf-footer-item-ip"),c=a.getElementById("cf-footer-ip-reveal");b&&"classList"in b&&(b.classLi
Open service 216.24.57.251:443 · pub.jmnorlund.net
2026-01-23 12:48
HTTP/1.1 200 OK
Date: Fri, 23 Jan 2026 12:48:08 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
CF-RAY: 9c2767530951d291-FRA
Cache-Control: public, max-age=0, s-maxage=300
etag: W/"a38ee0e32b4dd5347ff381cc9f179043"
last-modified: Tue, 11 Jun 2024 00:03:00 UTC
vary: Accept-Encoding
vary: Accept-Encoding
x-content-type-options: nosniff
CF-Cache-Status: HIT
Age: 1
Server: cloudflare
alt-svc: h3=":443"; ma=86400
Page title: jmn public notes
<!DOCTYPE html>
<html lang="en" dir="auto">
<head>
<meta name="generator" content="Hugo 0.107.0"><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>jmn public notes</title>
<meta name="description" content="">
<meta name="author" content="">
<link rel="canonical" href="https://pub.jmnorlund.net/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.86fbf5e3cf62784c08059bbc5af053529d3354c05108987ea70c553096a0940f.css" integrity="sha256-hvv1489ieEwIBZu8WvBTUp0zVMBRCJh+pwxVMJaglA8=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://pub.jmnorlund.net/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://pub.jmnorlund.net/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://pub.jmnorlund.net/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://pub.jmnorlund.net/apple-touch-icon.png">
<link rel="mask-icon" href="https://pub.jmnorlund.net/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://pub.jmnorlund.net/index.xml">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
<style>
@media (prefers-color-scheme: dark) {
:root {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--hljs-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
}
.list {
background: var(--theme);
}
.list:not(.dark)::-webkit-scrollbar-track {
background: 0 0;
}
.list:not(.dark)::-webkit-scrollbar-thumb {
border-color: var(--theme);
}
}
</style>
</noscript>
<link href="//fonts.googleapis.com/css?family=Fira+Code:400,700|Overpass+Mono:400,400i,700,700i" rel="stylesheet">
<meta property="og:title" content="jmn public notes" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://pub.jmnorlund.net/" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="jmn public notes"/>
<meta name="twitter:description" content=""/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "jmn public notes",
"url": "https://pub.jmnorlund.net/",
"description": "",
"thumbnailUrl": "https://pub.jmnorlund.net/favicon.ico",
"sameAs": [
]
}
</script>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
} else if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://pub.jmnorlund.net/" accesskey="h" title="jmn public notes (Alt + H)">jmn public notes</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79
Open service 2606:50c0:8002::153:443 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 200 OK
Connection: close
Content-Length: 12820
Server: GitHub.com
Content-Type: text/html; charset=utf-8
x-origin-cache: HIT
Last-Modified: Sat, 25 Oct 2025 19:01:54 GMT
Access-Control-Allow-Origin: *
ETag: "68fd1ea2-3214"
expires: Wed, 21 Jan 2026 19:54:51 GMT
Cache-Control: max-age=600
x-proxy-cache: HIT
X-GitHub-Request-Id: 5C39:158099:577479:59895C:69712CB3
Accept-Ranges: bytes
Date: Wed, 21 Jan 2026 19:44:52 GMT
Via: 1.1 varnish
Age: 1
X-Served-By: cache-pao-kpao1770071-PAO
X-Cache: HIT
X-Cache-Hits: 1
X-Timer: S1769024693.756018,VS0,VE1
Vary: Accept-Encoding
X-Fastly-Request-ID: 736b5de6494488d4b216dd7b4b7e97ec206a7211
Page title: jmnorlund.net
<!DOCTYPE html><html lang="en" class="false"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="canonical" href="https://www.jmnorlund.net/"><meta name="generator" content="Astro v4.2.1"><!-- General Meta Tags --><title>jmnorlund.net</title><meta name="title" content="jmnorlund.net"><meta name="description" content="My personal site."><meta name="author" content="jmn"><link rel="sitemap" href="/sitemap-index.xml"><!-- Open Graph / Facebook --><meta property="og:title" content="jmnorlund.net"><meta property="og:description" content="My personal site."><meta property="og:url" content="https://www.jmnorlund.net/"><meta property="og:image" content="https://www.jmnorlund.net/og.png"><!-- Article Published/Modified time --><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://www.jmnorlund.net/"><meta property="twitter:title" content="jmnorlund.net"><meta property="twitter:description" content="My personal site."><meta property="twitter:image" content="https://www.jmnorlund.net/og.png"><!-- Google Font --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,500;0,600;0,700;1,400;1,600&display=swap" rel="stylesheet"><meta name="theme-color" content=""><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><script src="/toggle-theme.js"></script><link rel="stylesheet" href="/_astro/about.SRwIS1HR.css" />
<style>#hero:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:2rem}#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:1rem;margin-bottom:1rem;display:inline-block;font-size:1.875rem;line-height:2.25rem;font-weight:700}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;font-size:3rem;line-height:1}}#hero:where(.astro-j7pv25f6) .rss-link:where(.astro-j7pv25f6){margin-bottom:1.5rem}#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.5rem;height:1.5rem;width:1.5rem;--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));fill:rgb(var(--color-accent))}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.75rem;--tw-scale-x: 1.25;--tw-scale-y: 1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}#hero:where(.astro-j7pv25f6) p:where(.astro-j7pv25f6){margin-top:.5rem;margin-bottom:.5rem}.social-wrapper:where(.astro-j7pv25f6){margin-top:1rem;display:flex;flex-direction:column}@media (min-width: 640px){.social-wrapper:where(.astro-j7pv25f6){flex-direction:row;align-items:center}}.social-links:where(.astro-j7pv25f6){margin-bottom:.25rem;margin-right:.5rem;white-space:nowrap}@media (min-width: 640px){.social-links:where(.astro-j7pv25f6){margin-bottom:0}}#featured:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:3rem}#featured:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6){font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:.025em}.all-posts-btn-wrapper:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;text-align:center}
</style><script type="module" src="/_astro/hoisted.o4LUDjyO.js"></script></head> <body> <header class="astro-3ef6ksr2"> <a id="skip-to-content" href="#main-content" class="astro-3ef6ksr2">Skip to content</a> <div class="nav-container astro-3ef6ksr2"> <div class="top-nav-wrap astro-3ef6ksr2"> <a href="/" class="logo whitespace-nowrap astro-3ef6ksr2"
Open service 2606:50c0:8000::153:80 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html x-origin-cache: HIT Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 6D2E:50E24:8BAEAC:94B7D0:69712CB3 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-yyz4564-YYZ X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.803168,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: 5fcdbfde889633be742f0eb9b678e0882d308bdf Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8002::153:80 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 597C:26DC0F:8E0491:970543:69712CB3 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-lga21935-LGA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.727407,VS0,VE14 Vary: Accept-Encoding X-Fastly-Request-ID: 40cb9f429958516963bd2c45e124b2ab9a8e66dc Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8003::153:80 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html x-origin-cache: HIT Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 6D2E:50E24:8BAEAC:94B7D0:69712CB3 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-yyz4531-YYZ X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.714486,VS0,VE2 Vary: Accept-Encoding X-Fastly-Request-ID: 1a68d84cf889a207193b8a288444ee529a5c0c84 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.108.153:80 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html x-origin-cache: HIT Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 6D2E:50E24:8BAEAC:94B7D0:69712CB3 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-yyz4543-YYZ X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.711616,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: 661750c3285dd9e358e90fa03d12cad25c519985 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8003::153:443 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 200 OK
Connection: close
Content-Length: 12820
Server: GitHub.com
Content-Type: text/html; charset=utf-8
Last-Modified: Sat, 25 Oct 2025 19:01:54 GMT
Access-Control-Allow-Origin: *
ETag: "68fd1ea2-3214"
expires: Wed, 21 Jan 2026 19:54:51 GMT
Cache-Control: max-age=600
x-proxy-cache: MISS
X-GitHub-Request-Id: F02A:1EDD9B:218DB0:22A207:69712CB3
Accept-Ranges: bytes
Date: Wed, 21 Jan 2026 19:44:52 GMT
Via: 1.1 varnish
Age: 1
X-Served-By: cache-sin-wsat1880073-SIN
X-Cache: HIT
X-Cache-Hits: 1
X-Timer: S1769024693.917202,VS0,VE1
Vary: Accept-Encoding
X-Fastly-Request-ID: 0e2134e8e2a50c1c4abd271619b7d821f76998cd
Page title: jmnorlund.net
<!DOCTYPE html><html lang="en" class="false"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="canonical" href="https://www.jmnorlund.net/"><meta name="generator" content="Astro v4.2.1"><!-- General Meta Tags --><title>jmnorlund.net</title><meta name="title" content="jmnorlund.net"><meta name="description" content="My personal site."><meta name="author" content="jmn"><link rel="sitemap" href="/sitemap-index.xml"><!-- Open Graph / Facebook --><meta property="og:title" content="jmnorlund.net"><meta property="og:description" content="My personal site."><meta property="og:url" content="https://www.jmnorlund.net/"><meta property="og:image" content="https://www.jmnorlund.net/og.png"><!-- Article Published/Modified time --><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://www.jmnorlund.net/"><meta property="twitter:title" content="jmnorlund.net"><meta property="twitter:description" content="My personal site."><meta property="twitter:image" content="https://www.jmnorlund.net/og.png"><!-- Google Font --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,500;0,600;0,700;1,400;1,600&display=swap" rel="stylesheet"><meta name="theme-color" content=""><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><script src="/toggle-theme.js"></script><link rel="stylesheet" href="/_astro/about.SRwIS1HR.css" />
<style>#hero:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:2rem}#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:1rem;margin-bottom:1rem;display:inline-block;font-size:1.875rem;line-height:2.25rem;font-weight:700}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;font-size:3rem;line-height:1}}#hero:where(.astro-j7pv25f6) .rss-link:where(.astro-j7pv25f6){margin-bottom:1.5rem}#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.5rem;height:1.5rem;width:1.5rem;--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));fill:rgb(var(--color-accent))}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.75rem;--tw-scale-x: 1.25;--tw-scale-y: 1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}#hero:where(.astro-j7pv25f6) p:where(.astro-j7pv25f6){margin-top:.5rem;margin-bottom:.5rem}.social-wrapper:where(.astro-j7pv25f6){margin-top:1rem;display:flex;flex-direction:column}@media (min-width: 640px){.social-wrapper:where(.astro-j7pv25f6){flex-direction:row;align-items:center}}.social-links:where(.astro-j7pv25f6){margin-bottom:.25rem;margin-right:.5rem;white-space:nowrap}@media (min-width: 640px){.social-links:where(.astro-j7pv25f6){margin-bottom:0}}#featured:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:3rem}#featured:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6){font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:.025em}.all-posts-btn-wrapper:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;text-align:center}
</style><script type="module" src="/_astro/hoisted.o4LUDjyO.js"></script></head> <body> <header class="astro-3ef6ksr2"> <a id="skip-to-content" href="#main-content" class="astro-3ef6ksr2">Skip to content</a> <div class="nav-container astro-3ef6ksr2"> <div class="top-nav-wrap astro-3ef6ksr2"> <a href="/" class="logo whitespace-nowrap astro-3ef6ksr2"
Open service 185.199.110.153:80 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: BFD4:AD6DD:98430E:A1483D:69712CB3 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-lga21981-LGA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.678070,VS0,VE2 Vary: Accept-Encoding X-Fastly-Request-ID: d9d7d23804dd5cdec6b1db620bff475702810bae Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.111.153:80 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 721D:31BF7E:8D0E34:9617D2:69712CB1 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-yyz4568-YYZ X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.700406,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: a2022e09ae5626995d8a504a066b4ab37dad106f Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.109.153:80 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: F44A:93292:91079E:92E372:69712CB3 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 2 X-Served-By: cache-fra-eddf8230051-FRA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.659407,VS0,VE9 Vary: Accept-Encoding X-Fastly-Request-ID: 1348e6d1b422b704eb8dbb40553254809e2519b7 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8003::153:443 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html x-origin-cache: HIT Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 9AE0:2E0AAF:913456:93152C:69712CB2 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-fra-eddf8230147-FRA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.805760,VS0,VE4 Vary: Accept-Encoding X-Fastly-Request-ID: 1a165e644c4797edbf0c524652d853a8b1862b0c Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.111.153:80 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: F44A:93292:91079E:92E372:69712CB3 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 2 X-Served-By: cache-fra-eddf8230100-FRA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.664487,VS0,VE5 Vary: Accept-Encoding X-Fastly-Request-ID: 6552eb46bdc37a512f6cd821ad29fdb2e78b9c0c Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8000::153:80 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 597C:26DC0F:8E0491:970543:69712CB3 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-lga21976-LGA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.650242,VS0,VE2 Vary: Accept-Encoding X-Fastly-Request-ID: 54a17aef7d33451182778ef49126391f39ec5105 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8000::153:443 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 200 OK
Connection: close
Content-Length: 12820
Server: GitHub.com
Content-Type: text/html; charset=utf-8
x-origin-cache: HIT
Last-Modified: Sat, 25 Oct 2025 19:01:54 GMT
Access-Control-Allow-Origin: *
ETag: "68fd1ea2-3214"
expires: Wed, 21 Jan 2026 19:54:51 GMT
Cache-Control: max-age=600
x-proxy-cache: HIT
X-GitHub-Request-Id: 5C39:158099:577479:59895C:69712CB3
Accept-Ranges: bytes
Date: Wed, 21 Jan 2026 19:44:52 GMT
Via: 1.1 varnish
Age: 1
X-Served-By: cache-pao-kpao1770052-PAO
X-Cache: HIT
X-Cache-Hits: 1
X-Timer: S1769024693.774647,VS0,VE1
Vary: Accept-Encoding
X-Fastly-Request-ID: 31b1cbe552cebb0f52fe6e1348f730842938e4eb
Page title: jmnorlund.net
<!DOCTYPE html><html lang="en" class="false"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="canonical" href="https://www.jmnorlund.net/"><meta name="generator" content="Astro v4.2.1"><!-- General Meta Tags --><title>jmnorlund.net</title><meta name="title" content="jmnorlund.net"><meta name="description" content="My personal site."><meta name="author" content="jmn"><link rel="sitemap" href="/sitemap-index.xml"><!-- Open Graph / Facebook --><meta property="og:title" content="jmnorlund.net"><meta property="og:description" content="My personal site."><meta property="og:url" content="https://www.jmnorlund.net/"><meta property="og:image" content="https://www.jmnorlund.net/og.png"><!-- Article Published/Modified time --><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://www.jmnorlund.net/"><meta property="twitter:title" content="jmnorlund.net"><meta property="twitter:description" content="My personal site."><meta property="twitter:image" content="https://www.jmnorlund.net/og.png"><!-- Google Font --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,500;0,600;0,700;1,400;1,600&display=swap" rel="stylesheet"><meta name="theme-color" content=""><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><script src="/toggle-theme.js"></script><link rel="stylesheet" href="/_astro/about.SRwIS1HR.css" />
<style>#hero:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:2rem}#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:1rem;margin-bottom:1rem;display:inline-block;font-size:1.875rem;line-height:2.25rem;font-weight:700}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;font-size:3rem;line-height:1}}#hero:where(.astro-j7pv25f6) .rss-link:where(.astro-j7pv25f6){margin-bottom:1.5rem}#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.5rem;height:1.5rem;width:1.5rem;--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));fill:rgb(var(--color-accent))}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.75rem;--tw-scale-x: 1.25;--tw-scale-y: 1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}#hero:where(.astro-j7pv25f6) p:where(.astro-j7pv25f6){margin-top:.5rem;margin-bottom:.5rem}.social-wrapper:where(.astro-j7pv25f6){margin-top:1rem;display:flex;flex-direction:column}@media (min-width: 640px){.social-wrapper:where(.astro-j7pv25f6){flex-direction:row;align-items:center}}.social-links:where(.astro-j7pv25f6){margin-bottom:.25rem;margin-right:.5rem;white-space:nowrap}@media (min-width: 640px){.social-links:where(.astro-j7pv25f6){margin-bottom:0}}#featured:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:3rem}#featured:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6){font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:.025em}.all-posts-btn-wrapper:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;text-align:center}
</style><script type="module" src="/_astro/hoisted.o4LUDjyO.js"></script></head> <body> <header class="astro-3ef6ksr2"> <a id="skip-to-content" href="#main-content" class="astro-3ef6ksr2">Skip to content</a> <div class="nav-container astro-3ef6ksr2"> <div class="top-nav-wrap astro-3ef6ksr2"> <a href="/" class="logo whitespace-nowrap astro-3ef6ksr2"
Open service 185.199.108.153:443 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 200 OK
Connection: close
Content-Length: 12820
Server: GitHub.com
Content-Type: text/html; charset=utf-8
x-origin-cache: HIT
Last-Modified: Sat, 25 Oct 2025 19:01:54 GMT
Access-Control-Allow-Origin: *
ETag: "68fd1ea2-3214"
expires: Wed, 21 Jan 2026 19:54:51 GMT
Cache-Control: max-age=600
x-proxy-cache: HIT
X-GitHub-Request-Id: 5C39:158099:577479:59895C:69712CB3
Accept-Ranges: bytes
Date: Wed, 21 Jan 2026 19:44:52 GMT
Via: 1.1 varnish
Age: 1
X-Served-By: cache-pao-kpao1770029-PAO
X-Cache: HIT
X-Cache-Hits: 1
X-Timer: S1769024693.775304,VS0,VE1
Vary: Accept-Encoding
X-Fastly-Request-ID: 5b5499c39676d12ebcec7885be13f58d1cc80334
Page title: jmnorlund.net
<!DOCTYPE html><html lang="en" class="false"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="canonical" href="https://www.jmnorlund.net/"><meta name="generator" content="Astro v4.2.1"><!-- General Meta Tags --><title>jmnorlund.net</title><meta name="title" content="jmnorlund.net"><meta name="description" content="My personal site."><meta name="author" content="jmn"><link rel="sitemap" href="/sitemap-index.xml"><!-- Open Graph / Facebook --><meta property="og:title" content="jmnorlund.net"><meta property="og:description" content="My personal site."><meta property="og:url" content="https://www.jmnorlund.net/"><meta property="og:image" content="https://www.jmnorlund.net/og.png"><!-- Article Published/Modified time --><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://www.jmnorlund.net/"><meta property="twitter:title" content="jmnorlund.net"><meta property="twitter:description" content="My personal site."><meta property="twitter:image" content="https://www.jmnorlund.net/og.png"><!-- Google Font --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,500;0,600;0,700;1,400;1,600&display=swap" rel="stylesheet"><meta name="theme-color" content=""><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><script src="/toggle-theme.js"></script><link rel="stylesheet" href="/_astro/about.SRwIS1HR.css" />
<style>#hero:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:2rem}#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:1rem;margin-bottom:1rem;display:inline-block;font-size:1.875rem;line-height:2.25rem;font-weight:700}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;font-size:3rem;line-height:1}}#hero:where(.astro-j7pv25f6) .rss-link:where(.astro-j7pv25f6){margin-bottom:1.5rem}#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.5rem;height:1.5rem;width:1.5rem;--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));fill:rgb(var(--color-accent))}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.75rem;--tw-scale-x: 1.25;--tw-scale-y: 1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}#hero:where(.astro-j7pv25f6) p:where(.astro-j7pv25f6){margin-top:.5rem;margin-bottom:.5rem}.social-wrapper:where(.astro-j7pv25f6){margin-top:1rem;display:flex;flex-direction:column}@media (min-width: 640px){.social-wrapper:where(.astro-j7pv25f6){flex-direction:row;align-items:center}}.social-links:where(.astro-j7pv25f6){margin-bottom:.25rem;margin-right:.5rem;white-space:nowrap}@media (min-width: 640px){.social-links:where(.astro-j7pv25f6){margin-bottom:0}}#featured:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:3rem}#featured:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6){font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:.025em}.all-posts-btn-wrapper:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;text-align:center}
</style><script type="module" src="/_astro/hoisted.o4LUDjyO.js"></script></head> <body> <header class="astro-3ef6ksr2"> <a id="skip-to-content" href="#main-content" class="astro-3ef6ksr2">Skip to content</a> <div class="nav-container astro-3ef6ksr2"> <div class="top-nav-wrap astro-3ef6ksr2"> <a href="/" class="logo whitespace-nowrap astro-3ef6ksr2"
Open service 185.199.110.153:443 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 200 OK
Connection: close
Content-Length: 12820
Server: GitHub.com
Content-Type: text/html; charset=utf-8
x-origin-cache: HIT
Last-Modified: Sat, 25 Oct 2025 19:01:54 GMT
Access-Control-Allow-Origin: *
ETag: "68fd1ea2-3214"
expires: Wed, 21 Jan 2026 19:54:51 GMT
Cache-Control: max-age=600
x-proxy-cache: HIT
X-GitHub-Request-Id: 5C39:158099:577479:59895C:69712CB3
Accept-Ranges: bytes
Date: Wed, 21 Jan 2026 19:44:52 GMT
Via: 1.1 varnish
Age: 1
X-Served-By: cache-pao-kpao1770062-PAO
X-Cache: HIT
X-Cache-Hits: 1
X-Timer: S1769024693.794227,VS0,VE1
Vary: Accept-Encoding
X-Fastly-Request-ID: 40d69136bb6ff39c1fd651325902d591a5f611ed
Page title: jmnorlund.net
<!DOCTYPE html><html lang="en" class="false"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="canonical" href="https://www.jmnorlund.net/"><meta name="generator" content="Astro v4.2.1"><!-- General Meta Tags --><title>jmnorlund.net</title><meta name="title" content="jmnorlund.net"><meta name="description" content="My personal site."><meta name="author" content="jmn"><link rel="sitemap" href="/sitemap-index.xml"><!-- Open Graph / Facebook --><meta property="og:title" content="jmnorlund.net"><meta property="og:description" content="My personal site."><meta property="og:url" content="https://www.jmnorlund.net/"><meta property="og:image" content="https://www.jmnorlund.net/og.png"><!-- Article Published/Modified time --><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://www.jmnorlund.net/"><meta property="twitter:title" content="jmnorlund.net"><meta property="twitter:description" content="My personal site."><meta property="twitter:image" content="https://www.jmnorlund.net/og.png"><!-- Google Font --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,500;0,600;0,700;1,400;1,600&display=swap" rel="stylesheet"><meta name="theme-color" content=""><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><script src="/toggle-theme.js"></script><link rel="stylesheet" href="/_astro/about.SRwIS1HR.css" />
<style>#hero:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:2rem}#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:1rem;margin-bottom:1rem;display:inline-block;font-size:1.875rem;line-height:2.25rem;font-weight:700}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;font-size:3rem;line-height:1}}#hero:where(.astro-j7pv25f6) .rss-link:where(.astro-j7pv25f6){margin-bottom:1.5rem}#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.5rem;height:1.5rem;width:1.5rem;--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));fill:rgb(var(--color-accent))}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.75rem;--tw-scale-x: 1.25;--tw-scale-y: 1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}#hero:where(.astro-j7pv25f6) p:where(.astro-j7pv25f6){margin-top:.5rem;margin-bottom:.5rem}.social-wrapper:where(.astro-j7pv25f6){margin-top:1rem;display:flex;flex-direction:column}@media (min-width: 640px){.social-wrapper:where(.astro-j7pv25f6){flex-direction:row;align-items:center}}.social-links:where(.astro-j7pv25f6){margin-bottom:.25rem;margin-right:.5rem;white-space:nowrap}@media (min-width: 640px){.social-links:where(.astro-j7pv25f6){margin-bottom:0}}#featured:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:3rem}#featured:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6){font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:.025em}.all-posts-btn-wrapper:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;text-align:center}
</style><script type="module" src="/_astro/hoisted.o4LUDjyO.js"></script></head> <body> <header class="astro-3ef6ksr2"> <a id="skip-to-content" href="#main-content" class="astro-3ef6ksr2">Skip to content</a> <div class="nav-container astro-3ef6ksr2"> <div class="top-nav-wrap astro-3ef6ksr2"> <a href="/" class="logo whitespace-nowrap astro-3ef6ksr2"
Open service 2606:50c0:8001::153:443 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html x-origin-cache: HIT Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: B838:E585A:1CF630:1DFCF6:69712CB4 Accept-Ranges: bytes Age: 0 Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish X-Served-By: cache-lon420103-LON X-Cache: MISS X-Cache-Hits: 0 X-Timer: S1769024693.695048,VS0,VE85 Vary: Accept-Encoding X-Fastly-Request-ID: f010f421a17e3dcadf728cfc3a746c496fc6f30a Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.109.153:443 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html x-origin-cache: HIT Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 9AE0:2E0AAF:913456:93152C:69712CB2 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-fra-eddf8230164-FRA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.724577,VS0,VE4 Vary: Accept-Encoding X-Fastly-Request-ID: cac8e24b871fcc0f3dd4d444ec426f1ad0e00823 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.109.153:443 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 200 OK
Connection: close
Content-Length: 12820
Server: GitHub.com
Content-Type: text/html; charset=utf-8
x-origin-cache: HIT
Last-Modified: Sat, 25 Oct 2025 19:01:54 GMT
Access-Control-Allow-Origin: *
ETag: "68fd1ea2-3214"
expires: Wed, 21 Jan 2026 19:54:51 GMT
Cache-Control: max-age=600
x-proxy-cache: HIT
X-GitHub-Request-Id: 5C39:158099:577479:59895C:69712CB3
Accept-Ranges: bytes
Date: Wed, 21 Jan 2026 19:44:52 GMT
Via: 1.1 varnish
Age: 1
X-Served-By: cache-pao-kpao1770038-PAO
X-Cache: HIT
X-Cache-Hits: 1
X-Timer: S1769024693.706445,VS0,VE4
Vary: Accept-Encoding
X-Fastly-Request-ID: d3192e9f088c9bce027f0b53574800e09cdea4b3
Page title: jmnorlund.net
<!DOCTYPE html><html lang="en" class="false"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="canonical" href="https://www.jmnorlund.net/"><meta name="generator" content="Astro v4.2.1"><!-- General Meta Tags --><title>jmnorlund.net</title><meta name="title" content="jmnorlund.net"><meta name="description" content="My personal site."><meta name="author" content="jmn"><link rel="sitemap" href="/sitemap-index.xml"><!-- Open Graph / Facebook --><meta property="og:title" content="jmnorlund.net"><meta property="og:description" content="My personal site."><meta property="og:url" content="https://www.jmnorlund.net/"><meta property="og:image" content="https://www.jmnorlund.net/og.png"><!-- Article Published/Modified time --><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://www.jmnorlund.net/"><meta property="twitter:title" content="jmnorlund.net"><meta property="twitter:description" content="My personal site."><meta property="twitter:image" content="https://www.jmnorlund.net/og.png"><!-- Google Font --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,500;0,600;0,700;1,400;1,600&display=swap" rel="stylesheet"><meta name="theme-color" content=""><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><script src="/toggle-theme.js"></script><link rel="stylesheet" href="/_astro/about.SRwIS1HR.css" />
<style>#hero:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:2rem}#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:1rem;margin-bottom:1rem;display:inline-block;font-size:1.875rem;line-height:2.25rem;font-weight:700}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;font-size:3rem;line-height:1}}#hero:where(.astro-j7pv25f6) .rss-link:where(.astro-j7pv25f6){margin-bottom:1.5rem}#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.5rem;height:1.5rem;width:1.5rem;--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));fill:rgb(var(--color-accent))}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.75rem;--tw-scale-x: 1.25;--tw-scale-y: 1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}#hero:where(.astro-j7pv25f6) p:where(.astro-j7pv25f6){margin-top:.5rem;margin-bottom:.5rem}.social-wrapper:where(.astro-j7pv25f6){margin-top:1rem;display:flex;flex-direction:column}@media (min-width: 640px){.social-wrapper:where(.astro-j7pv25f6){flex-direction:row;align-items:center}}.social-links:where(.astro-j7pv25f6){margin-bottom:.25rem;margin-right:.5rem;white-space:nowrap}@media (min-width: 640px){.social-links:where(.astro-j7pv25f6){margin-bottom:0}}#featured:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:3rem}#featured:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6){font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:.025em}.all-posts-btn-wrapper:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;text-align:center}
</style><script type="module" src="/_astro/hoisted.o4LUDjyO.js"></script></head> <body> <header class="astro-3ef6ksr2"> <a id="skip-to-content" href="#main-content" class="astro-3ef6ksr2">Skip to content</a> <div class="nav-container astro-3ef6ksr2"> <div class="top-nav-wrap astro-3ef6ksr2"> <a href="/" class="logo whitespace-nowrap astro-3ef6ksr2"
Open service 2606:50c0:8001::153:80 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: D4FF:2AC85C:1D6EC0:1E758B:69712CB3 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-lcy-egml8630064-LCY X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.740565,VS0,VE2 Vary: Accept-Encoding X-Fastly-Request-ID: 3a53cb17083c4fc7a8504a34187ba34735633901 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.110.153:443 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: AC54:2ED7A1:1D49F9:1E50B3:69712CB3 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-lcy-egml8630073-LCY X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.694512,VS0,VE9 Vary: Accept-Encoding X-Fastly-Request-ID: d7f1886be8f0fa6507aff1441549571001db6ef8 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.109.153:80 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 4B3B:2EBF55:89C3F9:8BA363:69712CB1 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-fra-eddf8230150-FRA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.610365,VS0,VE3 Vary: Accept-Encoding X-Fastly-Request-ID: 448b21e5380b5e3131f2fbfa162d78f1652a1e17 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.111.153:443 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 2423:2F52C7:91623D:9A6D7D:69712CB1 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-yyz4529-YYZ X-Cache: HIT X-Cache-Hits: 2 X-Timer: S1769024693.600999,VS0,VE0 Vary: Accept-Encoding X-Fastly-Request-ID: ea063e1f259cfef4ad9537a06578b249f373aadb Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8002::153:80 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: BFD4:AD6DD:98430E:A1483D:69712CB3 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-lga21983-LGA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.571777,VS0,VE12 Vary: Accept-Encoding X-Fastly-Request-ID: ba0212f89e0cfcbbf78b71b9cfe61f16dd1d6add Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.111.153:443 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 200 OK
Connection: close
Content-Length: 12820
Server: GitHub.com
Content-Type: text/html; charset=utf-8
x-origin-cache: HIT
Last-Modified: Sat, 25 Oct 2025 19:01:54 GMT
Access-Control-Allow-Origin: *
ETag: "68fd1ea2-3214"
expires: Wed, 21 Jan 2026 19:54:51 GMT
Cache-Control: max-age=600
x-proxy-cache: MISS
X-GitHub-Request-Id: CF93:AD6DD:984310:A1483E:69712CB3
Accept-Ranges: bytes
Date: Wed, 21 Jan 2026 19:44:52 GMT
Via: 1.1 varnish
Age: 1
X-Served-By: cache-lga21924-LGA
X-Cache: HIT
X-Cache-Hits: 1
X-Timer: S1769024693.654768,VS0,VE1
Vary: Accept-Encoding
X-Fastly-Request-ID: 49a961a1d07154f2be6d66044a1383b4a657acb9
Page title: jmnorlund.net
<!DOCTYPE html><html lang="en" class="false"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="canonical" href="https://www.jmnorlund.net/"><meta name="generator" content="Astro v4.2.1"><!-- General Meta Tags --><title>jmnorlund.net</title><meta name="title" content="jmnorlund.net"><meta name="description" content="My personal site."><meta name="author" content="jmn"><link rel="sitemap" href="/sitemap-index.xml"><!-- Open Graph / Facebook --><meta property="og:title" content="jmnorlund.net"><meta property="og:description" content="My personal site."><meta property="og:url" content="https://www.jmnorlund.net/"><meta property="og:image" content="https://www.jmnorlund.net/og.png"><!-- Article Published/Modified time --><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://www.jmnorlund.net/"><meta property="twitter:title" content="jmnorlund.net"><meta property="twitter:description" content="My personal site."><meta property="twitter:image" content="https://www.jmnorlund.net/og.png"><!-- Google Font --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,500;0,600;0,700;1,400;1,600&display=swap" rel="stylesheet"><meta name="theme-color" content=""><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><script src="/toggle-theme.js"></script><link rel="stylesheet" href="/_astro/about.SRwIS1HR.css" />
<style>#hero:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:2rem}#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:1rem;margin-bottom:1rem;display:inline-block;font-size:1.875rem;line-height:2.25rem;font-weight:700}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;font-size:3rem;line-height:1}}#hero:where(.astro-j7pv25f6) .rss-link:where(.astro-j7pv25f6){margin-bottom:1.5rem}#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.5rem;height:1.5rem;width:1.5rem;--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));fill:rgb(var(--color-accent))}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.75rem;--tw-scale-x: 1.25;--tw-scale-y: 1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}#hero:where(.astro-j7pv25f6) p:where(.astro-j7pv25f6){margin-top:.5rem;margin-bottom:.5rem}.social-wrapper:where(.astro-j7pv25f6){margin-top:1rem;display:flex;flex-direction:column}@media (min-width: 640px){.social-wrapper:where(.astro-j7pv25f6){flex-direction:row;align-items:center}}.social-links:where(.astro-j7pv25f6){margin-bottom:.25rem;margin-right:.5rem;white-space:nowrap}@media (min-width: 640px){.social-links:where(.astro-j7pv25f6){margin-bottom:0}}#featured:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:3rem}#featured:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6){font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:.025em}.all-posts-btn-wrapper:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;text-align:center}
</style><script type="module" src="/_astro/hoisted.o4LUDjyO.js"></script></head> <body> <header class="astro-3ef6ksr2"> <a id="skip-to-content" href="#main-content" class="astro-3ef6ksr2">Skip to content</a> <div class="nav-container astro-3ef6ksr2"> <div class="top-nav-wrap astro-3ef6ksr2"> <a href="/" class="logo whitespace-nowrap astro-3ef6ksr2"
Open service 185.199.108.153:443 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html x-origin-cache: HIT Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: FD6C:1625E8:946CE4:9D73BD:69712CB3 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-lga21958-LGA X-Cache: HIT X-Cache-Hits: 3 X-Timer: S1769024693.558591,VS0,VE0 Vary: Accept-Encoding X-Fastly-Request-ID: 043ca74d58085232cb031e23678996b5a4b672c5 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8002::153:443 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html x-origin-cache: HIT Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: FD6C:1625E8:946CE4:9D73BD:69712CB3 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-lga21989-LGA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.556507,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: 74ac9ddf738da8594f36ea16f3d411e12b1fc340 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8003::153:80 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: B819:205A80:1D1AA0:1E20F9:69712CB3 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-lcy-egml8630078-LCY X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.612426,VS0,VE3 Vary: Accept-Encoding X-Fastly-Request-ID: abd59f179385a38ca23d9f49d5895d84c9369d35 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8001::153:443 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 200 OK
Connection: close
Content-Length: 12820
Server: GitHub.com
Content-Type: text/html; charset=utf-8
Last-Modified: Sat, 25 Oct 2025 19:01:54 GMT
Access-Control-Allow-Origin: *
ETag: "68fd1ea2-3214"
expires: Wed, 21 Jan 2026 19:54:51 GMT
Cache-Control: max-age=600
x-proxy-cache: MISS
X-GitHub-Request-Id: 42A1:35ECE4:8DBD41:8F9D4A:69712CB2
Accept-Ranges: bytes
Date: Wed, 21 Jan 2026 19:44:52 GMT
Via: 1.1 varnish
Age: 1
X-Served-By: cache-fra-eddf8230182-FRA
X-Cache: HIT
X-Cache-Hits: 1
X-Timer: S1769024693.703341,VS0,VE3
Vary: Accept-Encoding
X-Fastly-Request-ID: 96d4ca2c838cdda67edb94f04f9536770ade73e3
Page title: jmnorlund.net
<!DOCTYPE html><html lang="en" class="false"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="canonical" href="https://www.jmnorlund.net/"><meta name="generator" content="Astro v4.2.1"><!-- General Meta Tags --><title>jmnorlund.net</title><meta name="title" content="jmnorlund.net"><meta name="description" content="My personal site."><meta name="author" content="jmn"><link rel="sitemap" href="/sitemap-index.xml"><!-- Open Graph / Facebook --><meta property="og:title" content="jmnorlund.net"><meta property="og:description" content="My personal site."><meta property="og:url" content="https://www.jmnorlund.net/"><meta property="og:image" content="https://www.jmnorlund.net/og.png"><!-- Article Published/Modified time --><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://www.jmnorlund.net/"><meta property="twitter:title" content="jmnorlund.net"><meta property="twitter:description" content="My personal site."><meta property="twitter:image" content="https://www.jmnorlund.net/og.png"><!-- Google Font --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,500;0,600;0,700;1,400;1,600&display=swap" rel="stylesheet"><meta name="theme-color" content=""><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><script src="/toggle-theme.js"></script><link rel="stylesheet" href="/_astro/about.SRwIS1HR.css" />
<style>#hero:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:2rem}#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:1rem;margin-bottom:1rem;display:inline-block;font-size:1.875rem;line-height:2.25rem;font-weight:700}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;font-size:3rem;line-height:1}}#hero:where(.astro-j7pv25f6) .rss-link:where(.astro-j7pv25f6){margin-bottom:1.5rem}#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.5rem;height:1.5rem;width:1.5rem;--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));fill:rgb(var(--color-accent))}@media (min-width: 640px){#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){margin-bottom:.75rem;--tw-scale-x: 1.25;--tw-scale-y: 1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}#hero:where(.astro-j7pv25f6) p:where(.astro-j7pv25f6){margin-top:.5rem;margin-bottom:.5rem}.social-wrapper:where(.astro-j7pv25f6){margin-top:1rem;display:flex;flex-direction:column}@media (min-width: 640px){.social-wrapper:where(.astro-j7pv25f6){flex-direction:row;align-items:center}}.social-links:where(.astro-j7pv25f6){margin-bottom:.25rem;margin-right:.5rem;white-space:nowrap}@media (min-width: 640px){.social-links:where(.astro-j7pv25f6){margin-bottom:0}}#featured:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6){padding-bottom:1.5rem;padding-top:3rem}#featured:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6){font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:.025em}.all-posts-btn-wrapper:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;text-align:center}
</style><script type="module" src="/_astro/hoisted.o4LUDjyO.js"></script></head> <body> <header class="astro-3ef6ksr2"> <a id="skip-to-content" href="#main-content" class="astro-3ef6ksr2">Skip to content</a> <div class="nav-container astro-3ef6ksr2"> <div class="top-nav-wrap astro-3ef6ksr2"> <a href="/" class="logo whitespace-nowrap astro-3ef6ksr2"
Open service 185.199.108.153:80 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 4B3B:2EBF55:89C3F9:8BA363:69712CB1 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-fra-eddf8230190-FRA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.566088,VS0,VE3 Vary: Accept-Encoding X-Fastly-Request-ID: 88d6afb4fcecb9eb937996ed472b8647a4b44042 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.110.153:80 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 4B3B:2EBF55:89C3F9:8BA363:69712CB1 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-fra-eddf8230151-FRA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.567443,VS0,VE2 Vary: Accept-Encoding X-Fastly-Request-ID: 7fb5ef01908280a2c2ebacacbaf8d044f54b31b5 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8000::153:443 · jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 2423:2F52C7:91623D:9A6D7D:69712CB1 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-yyz4529-YYZ X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.538659,VS0,VE2 Vary: Accept-Encoding X-Fastly-Request-ID: 7c7bee4e3bb6e6c76d30fe0bf6ca2e8f7f19bdfe Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8001::153:80 · www.jmnorlund.net
2026-01-21 19:44
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 4B3B:2EBF55:89C3F9:8BA363:69712CB1 Accept-Ranges: bytes Date: Wed, 21 Jan 2026 19:44:52 GMT Via: 1.1 varnish Age: 1 X-Served-By: cache-fra-eddf8230105-FRA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1769024693.569325,VS0,VE2 Vary: Accept-Encoding X-Fastly-Request-ID: 3304735d119978db038714ca4f221272b84efa88 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8002::153:443 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html x-origin-cache: HIT Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: BEFC:335AB4:C6FB651:C9A51AC:69574B09 Accept-Ranges: bytes Date: Fri, 02 Jan 2026 04:35:22 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-sin-wsat1880049-SIN X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1767328522.227551,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: 81a0f9df8c67b35cb573a56ea15289b907da24ac Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8003::153:80 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html x-origin-cache: HIT Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: AB68:2AB4A1:5567377:56FD0F1:69574B08 Accept-Ranges: bytes Date: Fri, 02 Jan 2026 04:35:21 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-sin-wsat1880050-SIN X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1767328521.129100,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: 58a1b8e6028a87d35b60da45bb4f770f2814031a Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.110.153:443 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 7B96:2F054D:6347AE1:6660450:69574B08 Accept-Ranges: bytes Date: Fri, 02 Jan 2026 04:35:20 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-sjc1000098-SJC X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1767328521.895515,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: 7eabcc9092321eb290abea302f4de7df60ef3f16 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.111.153:80 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: A223:264611:2EBE:3D43:69574B08 Accept-Ranges: bytes Date: Fri, 02 Jan 2026 04:35:20 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-yyz4536-YYZ X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1767328521.744659,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: cdcc5050afd281afd0192fa67b5ab0a5eba78720 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.108.153:443 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 31AD:361F1F:07C1:0C65:69574B08 Accept-Ranges: bytes Date: Fri, 02 Jan 2026 04:35:20 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-lga21990-LGA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1767328521.744376,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: 4f656806ce1d2d44fbba1fc8810fa16573d6ca35 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.109.153:443 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 6D10:36FD72:5554504:56EA211:69574B07 Accept-Ranges: bytes Date: Fri, 02 Jan 2026 04:35:20 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-lcy-egml8630067-LCY X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1767328521.789470,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: bbb7075348f7d50e1e3348357e1b16d8307c5d98 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.110.153:80 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: A819:2056B:C2D1393:C573B91:69574B08 Accept-Ranges: bytes Age: 0 Date: Fri, 02 Jan 2026 04:35:20 GMT Via: 1.1 varnish X-Served-By: cache-vie6325-VIE X-Cache: MISS X-Cache-Hits: 0 X-Timer: S1767328521.708400,VS0,VE103 Vary: Accept-Encoding X-Fastly-Request-ID: ad0b3fdea48abaf2debb40fd78c7ddaf5a82b7e0 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.109.153:80 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: A819:2056B:C2D1393:C573B91:69574B08 Accept-Ranges: bytes Date: Fri, 02 Jan 2026 04:35:20 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-vie6363-VIE X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1767328521.894498,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: 33da6206ab3317fa618da9d1826f61527eb279c6 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8001::153:80 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: A223:264611:2EBE:3D43:69574B08 Accept-Ranges: bytes Date: Fri, 02 Jan 2026 04:35:20 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-yyz4524-YYZ X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1767328521.771345,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: 0174edd6bda18559541b7dd01dd6436c2361c34b Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8002::153:80 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 1C3E:335AB4:C6FB4E9:C9A5045:69574B08 Accept-Ranges: bytes Date: Fri, 02 Jan 2026 04:35:20 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-rtm-ehrd2290025-RTM X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1767328521.774142,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: 404493fbffdf67037af7f5f735bf0de721acad59 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.108.153:80 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: A223:264611:2EBE:3D43:69574B08 Accept-Ranges: bytes Date: Fri, 02 Jan 2026 04:35:20 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-yyz4578-YYZ X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1767328521.650692,VS0,VE2 Vary: Accept-Encoding X-Fastly-Request-ID: 1ae5e1281cfe6ab889f93d7deabbb74552300ef8 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8000::153:443 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html x-origin-cache: HIT Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: A5A1:32E205:C78CB30:CA2EC66:69574B07 Accept-Ranges: bytes Age: 0 Date: Fri, 02 Jan 2026 04:35:20 GMT Via: 1.1 varnish X-Served-By: cache-vie6326-VIE X-Cache: MISS X-Cache-Hits: 0 X-Timer: S1767328521.734212,VS0,VE107 Vary: Accept-Encoding X-Fastly-Request-ID: ea980307e093f3f1bc770bd28e5ed4de75a69cbd Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8003::153:443 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 177F:35D5BF:C243564:C4ED399:69574B08 Accept-Ranges: bytes Date: Fri, 02 Jan 2026 04:35:20 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-fra-eddf8230075-FRA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1767328521.701613,VS0,VE3 Vary: Accept-Encoding X-Fastly-Request-ID: 66c858dae223a783ebba40462ca79428d0f743a1 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8001::153:443 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 177F:35D5BF:C243564:C4ED399:69574B08 Accept-Ranges: bytes Date: Fri, 02 Jan 2026 04:35:20 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-fra-eddf8230106-FRA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1767328521.774502,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: eb969b5025afa286a86e0f33169f78e46b89c444 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 185.199.111.153:443 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 31AD:361F1F:07C1:0C65:69574B08 Accept-Ranges: bytes Date: Fri, 02 Jan 2026 04:35:20 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-lga21921-LGA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1767328521.603188,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: 46a0e6d5c9d5c0e2f35457f478f3579c6cb540a7 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2606:50c0:8000::153:80 · jmnorlund.net
2026-01-02 04:35
HTTP/1.1 301 Moved Permanently Connection: close Content-Length: 162 Server: GitHub.com Content-Type: text/html Location: https://www.jmnorlund.net/ X-GitHub-Request-Id: 26BA:8FD0D:C243268:C4ED344:69574B08 Accept-Ranges: bytes Date: Fri, 02 Jan 2026 04:35:20 GMT Via: 1.1 varnish Age: 0 X-Served-By: cache-fra-eddf8230108-FRA X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1767328521.564212,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: 66cc475f7baa211ca6b11171053be26cbe174287 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>