2024-05-24 02:29:14 -07:00
|
|
|
<!doctype html>
|
2024-05-22 22:17:41 -07:00
|
|
|
<html lang="$lang$">
|
|
|
|
<head>
|
|
|
|
<title>$title$</title>
|
|
|
|
|
2024-05-24 02:29:14 -07:00
|
|
|
<meta charset="utf-8" />
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
|
|
<meta name="description" content="$desc$" />
|
2024-05-22 22:17:41 -07:00
|
|
|
$if(author)$
|
2024-05-24 02:29:14 -07:00
|
|
|
<meta name="author" content="$author$" />
|
|
|
|
$endif$ $if(keywords)$
|
|
|
|
<meta name="keywords" content="$keywords$" />
|
2024-05-22 22:17:41 -07:00
|
|
|
$endif$
|
|
|
|
|
2024-05-24 02:29:14 -07:00
|
|
|
<meta property="og:site_name" content="$siteName$" />
|
|
|
|
<meta property="og:title" content="$title$" />
|
|
|
|
<meta property="og:url" content="$root$$url$" />
|
|
|
|
<meta property="og:description" content="$desc$" />
|
2024-05-22 22:17:41 -07:00
|
|
|
$if(image)$
|
2024-05-24 02:29:14 -07:00
|
|
|
<meta property="og:image" content="$root$$image$" />
|
|
|
|
$endif$ $if(type)$
|
|
|
|
<meta property="og:type" content="$type$" />
|
2024-05-22 22:17:41 -07:00
|
|
|
$else$
|
2024-05-24 02:29:14 -07:00
|
|
|
<meta property="og:type" content="website" />
|
|
|
|
$endif$ $if(image)$
|
|
|
|
<meta property="twitter:card" content="summary_large_image" />
|
|
|
|
<meta property="twitter:image" content="$root$$image$" />
|
2024-05-22 22:17:41 -07:00
|
|
|
$endif$
|
2024-05-24 02:29:14 -07:00
|
|
|
<meta property="twitter:site" content="$siteName$" />
|
|
|
|
<meta property="twitter:title" content="$title$" />
|
|
|
|
<meta property="twitter:description" content="$desc$" />
|
2024-05-22 22:17:41 -07:00
|
|
|
$if(authorTwitter)$
|
2024-05-24 02:29:14 -07:00
|
|
|
<meta property="twitter:creator" content="$authorTwitter$" />
|
2024-05-22 22:17:41 -07:00
|
|
|
$endif$
|
|
|
|
|
2024-05-24 02:29:14 -07:00
|
|
|
<link rel="shortcut icon" href="/favicon.ico" />
|
|
|
|
<link rel="canonical" href="$root$$url$" />
|
2024-05-22 22:17:41 -07:00
|
|
|
|
2024-05-24 02:29:14 -07:00
|
|
|
<link
|
|
|
|
rel="alternate"
|
|
|
|
href="./atom.xml"
|
|
|
|
title="$feedTitle$"
|
|
|
|
type="application/atom+xml"
|
|
|
|
/>
|
|
|
|
<link
|
|
|
|
rel="alternate"
|
|
|
|
href="./rss.xml"
|
|
|
|
title="$feedTitle$"
|
|
|
|
type="application/rss+xml"
|
|
|
|
/>
|
2024-05-24 20:08:20 -07:00
|
|
|
<link rel="stylesheet" href="./out/bundle.css" />
|
2024-05-22 22:17:41 -07:00
|
|
|
<link rel="stylesheet" href="./css/code.css" />
|
2024-05-25 00:29:01 -07:00
|
|
|
<link
|
|
|
|
rel="stylesheet"
|
|
|
|
href="https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/katex.min.css"
|
|
|
|
integrity="sha384-wcIxkf4k558AjM3Yz3BBFQUbk/zgIYC2R0QpeeYb+TwlBVMrlgLqwRjRtGZiK7ww"
|
|
|
|
crossorigin="anonymous"
|
|
|
|
/>
|
2024-05-24 21:55:11 -07:00
|
|
|
|
|
|
|
<script>
|
|
|
|
if (
|
|
|
|
localStorage.theme === "dark" ||
|
|
|
|
(!("theme" in localStorage) &&
|
|
|
|
window.matchMedia("(prefers-color-scheme: dark)").matches)
|
|
|
|
) {
|
|
|
|
document.documentElement.classList.add("dark")
|
|
|
|
} else {
|
|
|
|
document.documentElement.classList.remove("dark")
|
|
|
|
}
|
|
|
|
window.onload = () => {
|
|
|
|
var themeButton = document.getElementById("theme-toggle")
|
|
|
|
const theme = localStorage.getItem("theme")
|
|
|
|
if (theme === "light") {
|
|
|
|
themeButton.innerText = "theme: light"
|
|
|
|
} else if (theme === "dark") {
|
|
|
|
themeButton.innerText = "theme: dark"
|
|
|
|
} else {
|
|
|
|
themeButton.innerText = "theme: system"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
2024-05-22 22:17:41 -07:00
|
|
|
</head>
|
2024-05-24 22:16:12 -07:00
|
|
|
<body
|
|
|
|
class="container max-w-3xl mx-auto px-4 transition-colors duration-[2s]"
|
|
|
|
>
|
2024-05-24 02:29:14 -07:00
|
|
|
<header class="mt-14 md:mt-24 mb-14">
|
|
|
|
<h1 class="text-4xl md:text-5xl font-serif font-medium">
|
2024-05-24 21:55:11 -07:00
|
|
|
<a href="/" class="dark:hover:text-muted-dark transition-colors"
|
2024-05-24 02:29:14 -07:00
|
|
|
>Gradient Ascent</a
|
|
|
|
>
|
|
|
|
</h1>
|
|
|
|
<p class="mt-8 mb-3 px-1 italic">
|
2024-05-24 22:56:18 -07:00
|
|
|
writing about computers, math, hacks, games, and life.
|
2024-05-24 02:29:14 -07:00
|
|
|
</p>
|
|
|
|
<a class="text-sm external-link" href="https://youwen.dev"
|
|
|
|
>by Youwen Wu</a
|
|
|
|
>
|
2024-05-24 21:55:11 -07:00
|
|
|
<span class="ml-2 font-serif">|</span>
|
|
|
|
<button
|
|
|
|
id="theme-toggle"
|
|
|
|
class="ml-2 text-sm hover:bg-secondary-light dark:hover:bg-secondary-dark rounded-sm transition-colors p-1"
|
|
|
|
></button>
|
2024-05-24 02:29:14 -07:00
|
|
|
</header>
|
2024-05-22 22:17:41 -07:00
|
|
|
$body$
|
2024-05-24 02:29:14 -07:00
|
|
|
<footer class="mt-14 md:mt-24 pb-12">
|
2024-05-24 21:55:11 -07:00
|
|
|
<hr
|
|
|
|
class="border-0 dark:bg-muted-dark bg-muted-light rounded-xl h-0.5 mb-4"
|
|
|
|
/>
|
|
|
|
<p class="text-sm leading-relaxed">
|
|
|
|
© 2024 Youwen Wu. Generated by
|
2024-05-24 02:29:14 -07:00
|
|
|
<a
|
|
|
|
href="https://jaspervdj.be/hakyll/"
|
|
|
|
class="external-link"
|
|
|
|
target="__blank"
|
|
|
|
>Hakyll.</a
|
|
|
|
>
|
2024-05-24 21:55:11 -07:00
|
|
|
View the source
|
|
|
|
<a
|
|
|
|
href="https://github.com/couscousdude/blog"
|
|
|
|
class="external-link"
|
|
|
|
target="__blank"
|
|
|
|
>on GitHub.</a
|
|
|
|
>
|
2024-05-24 22:10:14 -07:00
|
|
|
<br class="my-2" />
|
|
|
|
Content freely available under
|
2024-05-24 02:29:14 -07:00
|
|
|
<a
|
|
|
|
class="external-link"
|
|
|
|
target="__blank"
|
|
|
|
href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en"
|
|
|
|
><span class="smallcaps">CC BY-NC-SA</span> 4.0</a
|
|
|
|
>
|
|
|
|
unless otherwise noted.
|
|
|
|
</p>
|
|
|
|
</footer>
|
2024-05-24 20:08:20 -07:00
|
|
|
<script defer src="./out/bundle.js"></script>
|
2024-05-22 22:17:41 -07:00
|
|
|
</body>
|
|
|
|
</html>
|