pushin broken build

This commit is contained in:
Nickiel12 2023-10-27 11:40:20 -07:00
parent 4c1da1497a
commit 8ab4099557
15 changed files with 3034 additions and 23 deletions

287
public/404.html Normal file
View file

@ -0,0 +1,287 @@
<!doctype html>
<html
dir="ltr"
lang="en"
>
<head>
<meta charset="utf-8" />
<meta http-equiv="content-language" content="en-us" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>404 Page not found &middot; Nickiel&#39;s Static Pages</title>
<meta name="title" content="404 Page not found &middot; Nickiel&#39;s Static Pages" />
<meta name="description" content="" />
<link rel="canonical" href="https://staticpages.nickiel.net/404.html" />
<link
type="text/css"
rel="stylesheet"
href="/css/main.css"
integrity=""
/>
<link rel="icon" sizes="192x192" href="/logo-192.png" />
<link rel="apple-touch-icon" href="/logo-192.png" />
<link rel="mask-icon" href="/logo.svg" color="blue" />
<link rel="manifest" href="/site.webmanifest" />
<meta property="og:title" content="404 Page not found" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://staticpages.nickiel.net/404.html" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="404 Page not found"/>
<meta name="twitter:description" content=""/>
<meta name="generator" content="Hugo 0.119.0">
<script
defer
src="/js/main.js"
integrity=""
></script>
<script>
if (!('theme' in localStorage)) {
localStorage.theme = "light";
}
if (localStorage.theme === 'dark' || ((!('theme' in localStorage) || localStorage.theme === 'auto') && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark');
}
</script>
</head>
<body class="min-h-full w-full" x-data="{ up: false }">
<div
x-data="{ open: false }"
@keydown.window.escape="open = false"
class="sticky inset-x-0 top-0 z-10 bg-neutral-50/50 text-neutral-900 after:absolute after:left-0 after:top-0 after:-z-10 after:h-full after:w-full after:backdrop-blur-xl after:content-[''] dark:bg-neutral-800/60 dark:text-neutral-200"
>
<div class="fixed z-10 flex h-screen w-48 lg:hidden" :class="open ? '' : 'hidden'" x-ref="dialog" aria-modal="true">
<div
class="fixed inset-0 bg-gray-950/25"
:class="open ? '' : 'hidden'"
x-show="open"
x-transition:enter="transition-opacity ease-linear duration-300"
x-transition:enter-start="opacity-0"
x-transition:enter-end="opacity-100"
x-transition:leave="transition-opacity ease-linear duration-300"
x-transition:leave-start="opacity-100"
x-transition:leave-end="opacity-0"
x-description="Off-canvas menu overlay, show/hide based on off-canvas menu state."
@click="open = false"
aria-hidden="true"
></div>
<div
class="fixed inset-0 flex h-full w-full max-w-xxs flex-col overflow-y-auto bg-neutral-50 pb-12 shadow-xl dark:bg-neutral-800"
:class="open ? '' : 'hidden'"
x-show="open"
x-transition:enter="transition ease-in-out duration-300"
x-transition:enter-start="-translate-x-full"
x-transition:enter-end="translate-x-0"
x-transition:leave="transition ease-in-out duration-300"
x-transition:leave-start="translate-x-0"
x-transition:leave-end="-translate-x-full"
x-description="Off-canvas menu, show/hide based on off-canvas menu state."
>
<div class="flex px-4 pb-2 pt-5">
<button
type="button"
title="Close menu"
class="-m-2 inline-flex items-center justify-center rounded-md p-2 text-neutral-400"
@click="open = false"
>
<span class="sr-only">Close menu</span>
<svg
class="h-6 w-6"
x-description="Heroicon name: outline/x"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
</svg>
</button>
</div>
<ul class="divide-y divide-neutral-200 py-4">
<li
class=" flow-root px-4 py-2"
>
<a href="/" title="Nickiel&#39;s Static Pages" class="-m-2 block p-2 font-medium">Home</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/posts/" title="Posts" class="-m-2 block p-2 font-medium">Blog</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/categories/" title="Categories" class="-m-2 block p-2 font-medium">Categories</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/tags/" title="Tags" class="-m-2 block p-2 font-medium">Tags</a>
</li>
</ul>
</div>
</div>
<header class="dark:shadow-dark shadow">
<nav class="container mx-auto flex max-w-7xl items-center px-6 leading-12 lg:px-8 xl:px-12" aria-label="Top">
<a
class="relative hidden p-2 align-middle lg:block"
rel="me"
href="/"
title="Nickiel&#39;s Static Pages"
>
<img src="/logo-192.png" class="h-8 w-auto" alt="Nickiel&#39;s Static Pages" />
</a>
<button class="lg:hidden" type="button" @click="open = true" aria-label="Open menu">
<svg
class="block h-6 w-6"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
</button>
<div class="mx-2 h-12 flex-grow">
<div class="relative h-full w-full">
<div class="absolute max-w-full" :class="up ? 'hidden' : ''" x-show="!up" x-transition.duration.750ms>
<span class="overflow-hidden text-ellipsis whitespace-nowrap font-semibold tracking-wider"
>Nickiel&#39;s Static Pages</span
>
</div>
<template x-if="true">
<div
class="absolute left-0 right-0 top-0 max-w-full"
:class="up ? '' : 'hidden'"
x-show="up"
x-transition.duration.750ms
>
<span class="overflow-hidden text-ellipsis whitespace-nowrap">404 Page not found</span>
</div>
</template>
</div>
</div>
<ul class="ml-7 hidden shrink list-none flex-row justify-end lg:flex">
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/" title="Nickiel&#39;s Static Pages">Home</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/posts/" title="Posts">Blog</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/categories/" title="Categories">Categories</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/tags/" title="Tags">Tags</a>
</li>
</ul>
<button id="switchTheme" class="flex h-8 w-8 items-center justify-center focus:outline-none">
<span class="sr-only">Switch theme</span>
<svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z"
clip-rule="evenodd"
></path>
</svg>
<span class="light"></span><span class="dark"></span>
</button>
<script>
document.getElementById("switchTheme").addEventListener("click", function () {
if (
localStorage.theme === "dark" ||
((!("theme" in localStorage) || localStorage.theme === "auto") &&
window.matchMedia("(prefers-color-scheme: dark)").matches)
) {
document.documentElement.classList.remove("dark");
localStorage.theme = "light";
} else if (
localStorage.theme === "light" ||
((!("theme" in localStorage) || localStorage.theme === "auto") &&
window.matchMedia("(prefers-color-scheme: light)").matches)
) {
document.documentElement.classList.add("dark");
localStorage.theme = "dark";
}
});
</script>
</nav>
</header>
</div>
<main class="container mx-auto my-6 flex max-w-7xl flex-row px-6 lg:px-8 xl:px-12">
<div class="mx-auto min-w-0 max-w-prose text-lg xl:text-xl">
<h1 class="mb-3 text-4xl font-extrabold">Page Not Found 😕</h1>
<p class="mb-12 mt-8 text-neutral-400 dark:text-neutral-500">Error 404</p>
<div class="prose dark:prose-invert">
<p>It seems that the page you've requested does not exist.</p>
</div>
</div>
</main>
<footer class="bg-neutral-200 text-neutral-500 dark:bg-neutral-900 dark:text-neutral-500">
<div class="container mx-auto flex max-w-7xl flex-row px-6 py-4 text-sm lg:px-8 xl:px-12">
<div class="flex-1">
<p>
&copy;
2023
</p>
<p class="text-sm">
Powered by <a class="hover:underline hover:text-primary-500" href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a> &amp; <a class="hover:underline hover:text-primary-500" href="https://canstand.github.io/compost" target="_blank" rel="noopener noreferrer">Compost</a>
</p>
</div>
<div class="flex-1">
</div>
</div>
</footer>
</body>
</html>

View file

@ -0,0 +1,298 @@
<!doctype html>
<html
dir="ltr"
lang="en"
>
<head>
<meta charset="utf-8" />
<meta http-equiv="content-language" content="en-us" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Categories &middot; Nickiel&#39;s Static Pages</title>
<meta name="title" content="Categories &middot; Nickiel&#39;s Static Pages" />
<meta name="description" content="" />
<link rel="canonical" href="https://staticpages.nickiel.net/categories/" />
<link rel="alternate" type="application/rss+xml" href="/categories/index.xml" title="Nickiel's Static Pages" />
<link
type="text/css"
rel="stylesheet"
href="/css/main.css"
integrity=""
/>
<link rel="icon" sizes="192x192" href="/logo-192.png" />
<link rel="apple-touch-icon" href="/logo-192.png" />
<link rel="mask-icon" href="/logo.svg" color="blue" />
<link rel="manifest" href="/site.webmanifest" />
<meta property="og:title" content="Categories" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://staticpages.nickiel.net/categories/" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Categories"/>
<meta name="twitter:description" content=""/>
<meta name="generator" content="Hugo 0.119.0">
<script
defer
src="/js/main.js"
integrity=""
></script>
<script>
if (!('theme' in localStorage)) {
localStorage.theme = "light";
}
if (localStorage.theme === 'dark' || ((!('theme' in localStorage) || localStorage.theme === 'auto') && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark');
}
</script>
</head>
<body class="min-h-full w-full" x-data="{ up: false }">
<div
x-data="{ open: false }"
@keydown.window.escape="open = false"
class="sticky inset-x-0 top-0 z-10 bg-neutral-50/50 text-neutral-900 after:absolute after:left-0 after:top-0 after:-z-10 after:h-full after:w-full after:backdrop-blur-xl after:content-[''] dark:bg-neutral-800/60 dark:text-neutral-200"
>
<div class="fixed z-10 flex h-screen w-48 lg:hidden" :class="open ? '' : 'hidden'" x-ref="dialog" aria-modal="true">
<div
class="fixed inset-0 bg-gray-950/25"
:class="open ? '' : 'hidden'"
x-show="open"
x-transition:enter="transition-opacity ease-linear duration-300"
x-transition:enter-start="opacity-0"
x-transition:enter-end="opacity-100"
x-transition:leave="transition-opacity ease-linear duration-300"
x-transition:leave-start="opacity-100"
x-transition:leave-end="opacity-0"
x-description="Off-canvas menu overlay, show/hide based on off-canvas menu state."
@click="open = false"
aria-hidden="true"
></div>
<div
class="fixed inset-0 flex h-full w-full max-w-xxs flex-col overflow-y-auto bg-neutral-50 pb-12 shadow-xl dark:bg-neutral-800"
:class="open ? '' : 'hidden'"
x-show="open"
x-transition:enter="transition ease-in-out duration-300"
x-transition:enter-start="-translate-x-full"
x-transition:enter-end="translate-x-0"
x-transition:leave="transition ease-in-out duration-300"
x-transition:leave-start="translate-x-0"
x-transition:leave-end="-translate-x-full"
x-description="Off-canvas menu, show/hide based on off-canvas menu state."
>
<div class="flex px-4 pb-2 pt-5">
<button
type="button"
title="Close menu"
class="-m-2 inline-flex items-center justify-center rounded-md p-2 text-neutral-400"
@click="open = false"
>
<span class="sr-only">Close menu</span>
<svg
class="h-6 w-6"
x-description="Heroicon name: outline/x"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
</svg>
</button>
</div>
<ul class="divide-y divide-neutral-200 py-4">
<li
class=" flow-root px-4 py-2"
>
<a href="/" title="Nickiel&#39;s Static Pages" class="-m-2 block p-2 font-medium">Home</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/posts/" title="Posts" class="-m-2 block p-2 font-medium">Blog</a>
</li>
<li
class="
bg-neutral-200 dark:bg-neutral-900
flow-root px-4 py-2"
>
<a href="/categories/" title="Categories" class="-m-2 block p-2 font-medium">Categories</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/tags/" title="Tags" class="-m-2 block p-2 font-medium">Tags</a>
</li>
</ul>
</div>
</div>
<header class="dark:shadow-dark shadow">
<nav class="container mx-auto flex max-w-7xl items-center px-6 leading-12 lg:px-8 xl:px-12" aria-label="Top">
<a
class="relative hidden p-2 align-middle lg:block"
rel="me"
href="/"
title="Nickiel&#39;s Static Pages"
>
<img src="/logo-192.png" class="h-8 w-auto" alt="Nickiel&#39;s Static Pages" />
</a>
<button class="lg:hidden" type="button" @click="open = true" aria-label="Open menu">
<svg
class="block h-6 w-6"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
</button>
<div class="mx-2 h-12 flex-grow">
<div class="relative h-full w-full">
<div class="absolute max-w-full" :class="up ? 'hidden' : ''" x-show="!up" x-transition.duration.750ms>
<span class="overflow-hidden text-ellipsis whitespace-nowrap font-semibold tracking-wider"
>Nickiel&#39;s Static Pages</span
>
</div>
<template x-if="true">
<div
class="absolute left-0 right-0 top-0 max-w-full"
:class="up ? '' : 'hidden'"
x-show="up"
x-transition.duration.750ms
>
<span class="overflow-hidden text-ellipsis whitespace-nowrap">Categories</span>
</div>
</template>
</div>
</div>
<ul class="ml-7 hidden shrink list-none flex-row justify-end lg:flex">
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/" title="Nickiel&#39;s Static Pages">Home</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/posts/" title="Posts">Blog</a>
</li>
<li
class="
border-primary-500
mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/categories/" title="Categories">Categories</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/tags/" title="Tags">Tags</a>
</li>
</ul>
<button id="switchTheme" class="flex h-8 w-8 items-center justify-center focus:outline-none">
<span class="sr-only">Switch theme</span>
<svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z"
clip-rule="evenodd"
></path>
</svg>
<span class="light"></span><span class="dark"></span>
</button>
<script>
document.getElementById("switchTheme").addEventListener("click", function () {
if (
localStorage.theme === "dark" ||
((!("theme" in localStorage) || localStorage.theme === "auto") &&
window.matchMedia("(prefers-color-scheme: dark)").matches)
) {
document.documentElement.classList.remove("dark");
localStorage.theme = "light";
} else if (
localStorage.theme === "light" ||
((!("theme" in localStorage) || localStorage.theme === "auto") &&
window.matchMedia("(prefers-color-scheme: light)").matches)
) {
document.documentElement.classList.add("dark");
localStorage.theme = "dark";
}
});
</script>
</nav>
</header>
</div>
<main class="container mx-auto my-6 flex max-w-7xl flex-row px-6 lg:px-8 xl:px-12">
<div class="mx-auto min-w-0 max-w-2xl flex-grow lg:max-w-3xl">
<header class="w-full">
<section class="prose max-w-full dark:prose-invert">
<h1 class="mb-3 text-4xl font-extrabold">Categories</h1>
</section>
</header>
<section class="-mx-2 flex flex-wrap overflow-hidden">
</section>
</div>
</main>
<footer class="bg-neutral-200 text-neutral-500 dark:bg-neutral-900 dark:text-neutral-500">
<div class="container mx-auto flex max-w-7xl flex-row px-6 py-4 text-sm lg:px-8 xl:px-12">
<div class="flex-1">
<p>
&copy;
2023
</p>
<p class="text-sm">
Powered by <a class="hover:underline hover:text-primary-500" href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a> &amp; <a class="hover:underline hover:text-primary-500" href="https://canstand.github.io/compost" target="_blank" rel="noopener noreferrer">Compost</a>
</p>
</div>
<div class="flex-1">
</div>
</div>
</footer>
</body>
</html>

310
public/index.html Normal file
View file

@ -0,0 +1,310 @@
<!doctype html>
<html
dir="ltr"
lang="en"
>
<head>
<meta charset="utf-8" />
<meta http-equiv="content-language" content="en-us" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Nickiel&#39;s Static Pages</title>
<meta name="title" content="Nickiel&#39;s Static Pages" />
<meta name="description" content="" />
<link rel="canonical" href="https://staticpages.nickiel.net/" />
<link rel="alternate" type="application/rss+xml" href="/index.xml" title="Nickiel's Static Pages" />
<link
type="text/css"
rel="stylesheet"
href="/css/main.css"
integrity=""
/>
<link rel="icon" sizes="192x192" href="/logo-192.png" />
<link rel="apple-touch-icon" href="/logo-192.png" />
<link rel="mask-icon" href="/logo.svg" color="blue" />
<link rel="manifest" href="/site.webmanifest" />
<meta property="og:title" content="Nickiel&#39;s Static Pages" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://staticpages.nickiel.net/" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Nickiel&#39;s Static Pages"/>
<meta name="twitter:description" content=""/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Nickiel\u0027s Static Pages",
"url": "https:\/\/staticpages.nickiel.net\/","inLanguage": "en-us","thumbnailUrl": "https:\/\/staticpages.nickiel.net\/logo-192.png",}
</script>
<meta name="generator" content="Hugo 0.119.0">
<script
defer
src="/js/main.js"
integrity=""
></script>
<script>
if (!('theme' in localStorage)) {
localStorage.theme = "light";
}
if (localStorage.theme === 'dark' || ((!('theme' in localStorage) || localStorage.theme === 'auto') && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark');
}
</script>
</head>
<body class="min-h-full w-full" x-data="{ up: false }">
<div
x-data="{ open: false }"
@keydown.window.escape="open = false"
class="sticky inset-x-0 top-0 z-10 bg-neutral-50/50 text-neutral-900 after:absolute after:left-0 after:top-0 after:-z-10 after:h-full after:w-full after:backdrop-blur-xl after:content-[''] dark:bg-neutral-800/60 dark:text-neutral-200"
>
<div class="fixed z-10 flex h-screen w-48 lg:hidden" :class="open ? '' : 'hidden'" x-ref="dialog" aria-modal="true">
<div
class="fixed inset-0 bg-gray-950/25"
:class="open ? '' : 'hidden'"
x-show="open"
x-transition:enter="transition-opacity ease-linear duration-300"
x-transition:enter-start="opacity-0"
x-transition:enter-end="opacity-100"
x-transition:leave="transition-opacity ease-linear duration-300"
x-transition:leave-start="opacity-100"
x-transition:leave-end="opacity-0"
x-description="Off-canvas menu overlay, show/hide based on off-canvas menu state."
@click="open = false"
aria-hidden="true"
></div>
<div
class="fixed inset-0 flex h-full w-full max-w-xxs flex-col overflow-y-auto bg-neutral-50 pb-12 shadow-xl dark:bg-neutral-800"
:class="open ? '' : 'hidden'"
x-show="open"
x-transition:enter="transition ease-in-out duration-300"
x-transition:enter-start="-translate-x-full"
x-transition:enter-end="translate-x-0"
x-transition:leave="transition ease-in-out duration-300"
x-transition:leave-start="translate-x-0"
x-transition:leave-end="-translate-x-full"
x-description="Off-canvas menu, show/hide based on off-canvas menu state."
>
<div class="flex px-4 pb-2 pt-5">
<button
type="button"
title="Close menu"
class="-m-2 inline-flex items-center justify-center rounded-md p-2 text-neutral-400"
@click="open = false"
>
<span class="sr-only">Close menu</span>
<svg
class="h-6 w-6"
x-description="Heroicon name: outline/x"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
</svg>
</button>
</div>
<ul class="divide-y divide-neutral-200 py-4">
<li
class="
bg-neutral-200 dark:bg-neutral-900
flow-root px-4 py-2"
>
<a href="/" title="Nickiel&#39;s Static Pages" class="-m-2 block p-2 font-medium">Home</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/posts/" title="Posts" class="-m-2 block p-2 font-medium">Blog</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/categories/" title="Categories" class="-m-2 block p-2 font-medium">Categories</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/tags/" title="Tags" class="-m-2 block p-2 font-medium">Tags</a>
</li>
</ul>
</div>
</div>
<header class="dark:shadow-dark shadow">
<nav class="container mx-auto flex max-w-7xl items-center px-6 leading-12 lg:px-8 xl:px-12" aria-label="Top">
<a
class="relative hidden p-2 align-middle lg:block"
rel="me"
href="/"
title="Nickiel&#39;s Static Pages"
>
<img src="/logo-192.png" class="h-8 w-auto" alt="Nickiel&#39;s Static Pages" />
</a>
<button class="lg:hidden" type="button" @click="open = true" aria-label="Open menu">
<svg
class="block h-6 w-6"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
</button>
<div class="mx-2 h-12 flex-grow">
<div class="relative h-full w-full">
<div class="absolute max-w-full" :class="up ? 'hidden' : ''" x-show="!up" x-transition.duration.750ms>
<span class="overflow-hidden text-ellipsis whitespace-nowrap font-semibold tracking-wider"
>Nickiel&#39;s Static Pages</span
>
</div>
<template x-if="true">
<div
class="absolute left-0 right-0 top-0 max-w-full"
:class="up ? '' : 'hidden'"
x-show="up"
x-transition.duration.750ms
>
<span class="overflow-hidden text-ellipsis whitespace-nowrap">Nickiel's Static Pages</span>
</div>
</template>
</div>
</div>
<ul class="ml-7 hidden shrink list-none flex-row justify-end lg:flex">
<li
class="
border-primary-500
mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/" title="Nickiel&#39;s Static Pages">Home</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/posts/" title="Posts">Blog</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/categories/" title="Categories">Categories</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/tags/" title="Tags">Tags</a>
</li>
</ul>
<button id="switchTheme" class="flex h-8 w-8 items-center justify-center focus:outline-none">
<span class="sr-only">Switch theme</span>
<svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z"
clip-rule="evenodd"
></path>
</svg>
<span class="light"></span><span class="dark"></span>
</button>
<script>
document.getElementById("switchTheme").addEventListener("click", function () {
if (
localStorage.theme === "dark" ||
((!("theme" in localStorage) || localStorage.theme === "auto") &&
window.matchMedia("(prefers-color-scheme: dark)").matches)
) {
document.documentElement.classList.remove("dark");
localStorage.theme = "light";
} else if (
localStorage.theme === "light" ||
((!("theme" in localStorage) || localStorage.theme === "auto") &&
window.matchMedia("(prefers-color-scheme: light)").matches)
) {
document.documentElement.classList.add("dark");
localStorage.theme = "dark";
}
});
</script>
</nav>
</header>
</div>
<main class="container mx-auto my-6 flex max-w-7xl flex-row px-6 lg:px-8 xl:px-12">
<div class="mx-auto w-full min-w-0 max-w-2xl lg:max-w-3xl">
<article class="prose max-w-none dark:prose-invert">
<header>
<h1>Nickiel's Static Pages</h1>
</header>
<section></section>
</article>
<section class="w-full">
</section>
</div>
</main>
<footer class="bg-neutral-200 text-neutral-500 dark:bg-neutral-900 dark:text-neutral-500">
<div class="container mx-auto flex max-w-7xl flex-row px-6 py-4 text-sm lg:px-8 xl:px-12">
<div class="flex-1">
<p>
&copy;
2023
</p>
<p class="text-sm">
Powered by <a class="hover:underline hover:text-primary-500" href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a> &amp; <a class="hover:underline hover:text-primary-500" href="https://canstand.github.io/compost" target="_blank" rel="noopener noreferrer">Compost</a>
</p>
</div>
<div class="flex-1">
</div>
</div>
</footer>
</body>
</html>

View file

@ -12,8 +12,8 @@
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate> <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://staticpages.nickiel.net/posts/chrono_track/</guid> <guid>https://staticpages.nickiel.net/posts/chrono_track/</guid>
<description>Chrono Track User Manual Welcome not so weary traveler! Odds are pretty high that you had no issue finding this, because if you did find it, odds are the creator gave it to you. <description>Chrono Track User Manual # Welcome not so weary traveler! Odds are pretty high that you had no issue finding this, because if you did find it, odds are the creator gave it to you.
Credential file The credential file for this script, looks like this: Credential file # The credential file for this script, looks like this:
user=&amp;#34;TheUserName&amp;#34; pswd=&amp;#34;theworldsmostsecurepasswordbecauseitislong&amp;#34; email_addr=&amp;#34;destination_addr@example.com&amp;#34; primary_note_id=&amp;#34;id of the source note&amp;#34; logging_note_id=&amp;#34;id of the output note&amp;#34; server_url=&amp;#34;the base domain of the server you are using&amp;#34; Put your logon username (not your display name) into the first line, your logon password on the second line, and the email address you wish to recieve emails on line three.</description> user=&amp;#34;TheUserName&amp;#34; pswd=&amp;#34;theworldsmostsecurepasswordbecauseitislong&amp;#34; email_addr=&amp;#34;destination_addr@example.com&amp;#34; primary_note_id=&amp;#34;id of the source note&amp;#34; logging_note_id=&amp;#34;id of the output note&amp;#34; server_url=&amp;#34;the base domain of the server you are using&amp;#34; Put your logon username (not your display name) into the first line, your logon password on the second line, and the email address you wish to recieve emails on line three.</description>
</item> </item>
@ -23,11 +23,10 @@ user=&amp;#34;TheUserName&amp;#34; pswd=&amp;#34;theworldsmostsecurepasswordbeca
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate> <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://staticpages.nickiel.net/posts/wgu_instructions/</guid> <guid>https://staticpages.nickiel.net/posts/wgu_instructions/</guid>
<description>Step 0: Clone the repository Before you can run this project, you will need to clone the git repository with the following command: <description>Step 0: Clone the repository # Before you can run this project, you will need to clone the git repository with the following command:
git clone https://git.nickiel.net/Nickiel/WGU-Capstone See Project Structure for more information on the repository you just cloned. git clone https://git.nickiel.net/Nickiel/WGU-Capstone See Project Structure for more information on the repository you just cloned.
See Step 1 - Prerequisites on what is required before you can run this project. See Step 1 - Prerequisites on what is required before you can run this project.
Project Structure Below you can find the default project folder structure after cloning it: Project Structure # Below you can find the default project folder structure after cloning it:</description>
WGU-Capstone ├.gitignore ├Main.py ├README.</description>
</item> </item>
</channel> </channel>

BIN
public/logo-192.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
public/logo-512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

63
public/logo.svg Executable file
View file

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<path style="fill:#9CAC74;" d="M462.353,474.112L435.965,50.311l-33.758-22.505L392.98,512h33.758
C447.623,512,463.647,494.952,462.353,474.112z"/>
<rect x="123.386" y="339.934" style="fill:#594B44;" width="231.469" height="149.56"/>
<g>
<rect x="332.35" y="339.934" style="fill:#4D3D36;" width="56.264" height="149.56"/>
<rect x="134.639" y="481.055" style="fill:#4D3D36;" width="242.722" height="16.879"/>
</g>
<path style="fill:#BCC987;" d="M428.595,474.112c1.294,20.84-14.73,37.888-35.615,37.888h-26.872V362.44H145.892V512H85.251
c-20.874,0-36.898-17.048-35.604-37.888L76.024,50.311l163.092-27.007l163.092,27.007L428.595,474.112z"/>
<path style="fill:#555843;" d="M429.281,0h-33.758l12.648,50.311h33.758V12.659C441.929,5.671,436.269,0,429.281,0z"/>
<g>
<path style="fill:#5D734F;" d="M408.171,12.659v37.652L395.523,0C402.511,0,408.171,5.671,408.171,12.659z"/>
<path style="fill:#5D734F;" d="M395.523,0l12.648,50.311H70.06V12.659C70.06,5.671,75.731,0,82.719,0H395.523z"/>
</g>
<polygon style="fill:#555843;" points="366.108,122.835 366.108,328.682 332.35,328.682 276.086,225.758 332.35,122.835 "/>
<rect x="145.892" y="122.835" style="fill:#5D734F;" width="186.458" height="205.847"/>
<path style="fill:#BCC987;" d="M301.822,160.8h-91.641c-4.572,0-8.279,3.707-8.279,8.279v24.629h108.199v-24.629
C310.1,164.505,306.393,160.8,301.822,160.8z"/>
<g>
<path style="fill:#4D3D36;" d="M282.049,92.51h-52.102c-4.662,0-8.44-3.779-8.44-8.44c0-4.661,3.778-8.44,8.44-8.44h52.102
c4.662,0,8.44,3.779,8.44,8.44C290.489,88.731,286.711,92.51,282.049,92.51z"/>
<path style="fill:#4D3D36;" d="M210.342,303.365c-4.662,0-8.44-3.779-8.44-8.44v-29.908c0-4.661,3.778-8.44,8.44-8.44
c4.662,0,8.44,3.779,8.44,8.44v29.908C218.782,299.586,215.003,303.365,210.342,303.365z"/>
<path style="fill:#4D3D36;" d="M255.998,303.365c-4.662,0-8.44-3.779-8.44-8.44v-29.908c0-4.661,3.778-8.44,8.44-8.44
c4.662,0,8.44,3.779,8.44,8.44v29.908C264.437,299.586,260.66,303.365,255.998,303.365z"/>
<path style="fill:#4D3D36;" d="M301.66,303.365c-4.662,0-8.44-3.779-8.44-8.44v-29.908c0-4.661,3.778-8.44,8.44-8.44
s8.44,3.779,8.44,8.44v29.908C310.1,299.586,306.322,303.365,301.66,303.365z"/>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -0,0 +1,522 @@
<!doctype html>
<html
dir="ltr"
lang="en"
>
<head>
<meta charset="utf-8" />
<meta http-equiv="content-language" content="en-us" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Chrono-Track User manual &middot; Nickiel&#39;s Static Pages</title>
<meta name="title" content="Chrono-Track User manual &middot; Nickiel&#39;s Static Pages" />
<meta name="description" content="" />
<link rel="canonical" href="https://staticpages.nickiel.net/posts/chrono_track/" />
<link
type="text/css"
rel="stylesheet"
href="/css/main.css"
integrity=""
/>
<link rel="icon" sizes="192x192" href="/logo-192.png" />
<link rel="apple-touch-icon" href="/logo-192.png" />
<link rel="mask-icon" href="/logo.svg" color="blue" />
<link rel="manifest" href="/site.webmanifest" />
<meta property="og:title" content="Chrono-Track User manual" />
<meta property="og:description" content="Chrono Track User Manual # Welcome not so weary traveler! Odds are pretty high that you had no issue finding this, because if you did find it, odds are the creator gave it to you.
Credential file # The credential file for this script, looks like this:
user=&#34;TheUserName&#34; pswd=&#34;theworldsmostsecurepasswordbecauseitislong&#34; email_addr=&#34;destination_addr@example.com&#34; primary_note_id=&#34;id of the source note&#34; logging_note_id=&#34;id of the output note&#34; server_url=&#34;the base domain of the server you are using&#34; Put your logon username (not your display name) into the first line, your logon password on the second line, and the email address you wish to recieve emails on line three." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://staticpages.nickiel.net/posts/chrono_track/" /><meta property="article:section" content="posts" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Chrono-Track User manual"/>
<meta name="twitter:description" content="Chrono Track User Manual # Welcome not so weary traveler! Odds are pretty high that you had no issue finding this, because if you did find it, odds are the creator gave it to you.
Credential file # The credential file for this script, looks like this:
user=&#34;TheUserName&#34; pswd=&#34;theworldsmostsecurepasswordbecauseitislong&#34; email_addr=&#34;destination_addr@example.com&#34; primary_note_id=&#34;id of the source note&#34; logging_note_id=&#34;id of the output note&#34; server_url=&#34;the base domain of the server you are using&#34; Put your logon username (not your display name) into the first line, your logon password on the second line, and the email address you wish to recieve emails on line three."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"articleSection": "Posts",
"name": "Chrono-Track User manual",
"headline": "Chrono-Track User manual",
"description": "Chrono Track User Manual # Welcome not so weary traveler! Odds are pretty high that you had no issue finding this, because if you did find it, odds are the creator gave it to you.\nCredential file # The credential file for this script, looks like this:\nuser=\u0026#34;TheUserName\u0026#34; pswd=\u0026#34;theworldsmostsecurepasswordbecauseitislong\u0026#34; email_addr=\u0026#34;destination_addr@example.com\u0026#34; primary_note_id=\u0026#34;id of the source note\u0026#34; logging_note_id=\u0026#34;id of the output note\u0026#34; server_url=\u0026#34;the base domain of the server you are using\u0026#34; Put your logon username (not your display name) into the first line, your logon password on the second line, and the email address you wish to recieve emails on line three.",
"inLanguage": "en-us",
"author" : {
"@type": "Person",
"name": ""
},
"creator" : {
"@type": "Person",
"name": ""
},
"copyrightHolder": "",
"url" : "https:\/\/staticpages.nickiel.net\/posts\/chrono_track\/",
"wordCount": "571",
"keywords": []
}
</script>
<meta name="generator" content="Hugo 0.119.0">
<script
defer
src="/js/main.js"
integrity=""
></script>
<script>
if (!('theme' in localStorage)) {
localStorage.theme = "light";
}
if (localStorage.theme === 'dark' || ((!('theme' in localStorage) || localStorage.theme === 'auto') && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark');
}
</script>
</head>
<body class="min-h-full w-full" x-data="{ up: false }">
<div
x-data="{ open: false }"
@keydown.window.escape="open = false"
class="sticky inset-x-0 top-0 z-10 bg-neutral-50/50 text-neutral-900 after:absolute after:left-0 after:top-0 after:-z-10 after:h-full after:w-full after:backdrop-blur-xl after:content-[''] dark:bg-neutral-800/60 dark:text-neutral-200"
>
<div class="fixed z-10 flex h-screen w-48 lg:hidden" :class="open ? '' : 'hidden'" x-ref="dialog" aria-modal="true">
<div
class="fixed inset-0 bg-gray-950/25"
:class="open ? '' : 'hidden'"
x-show="open"
x-transition:enter="transition-opacity ease-linear duration-300"
x-transition:enter-start="opacity-0"
x-transition:enter-end="opacity-100"
x-transition:leave="transition-opacity ease-linear duration-300"
x-transition:leave-start="opacity-100"
x-transition:leave-end="opacity-0"
x-description="Off-canvas menu overlay, show/hide based on off-canvas menu state."
@click="open = false"
aria-hidden="true"
></div>
<div
class="fixed inset-0 flex h-full w-full max-w-xxs flex-col overflow-y-auto bg-neutral-50 pb-12 shadow-xl dark:bg-neutral-800"
:class="open ? '' : 'hidden'"
x-show="open"
x-transition:enter="transition ease-in-out duration-300"
x-transition:enter-start="-translate-x-full"
x-transition:enter-end="translate-x-0"
x-transition:leave="transition ease-in-out duration-300"
x-transition:leave-start="translate-x-0"
x-transition:leave-end="-translate-x-full"
x-description="Off-canvas menu, show/hide based on off-canvas menu state."
>
<div class="flex px-4 pb-2 pt-5">
<button
type="button"
title="Close menu"
class="-m-2 inline-flex items-center justify-center rounded-md p-2 text-neutral-400"
@click="open = false"
>
<span class="sr-only">Close menu</span>
<svg
class="h-6 w-6"
x-description="Heroicon name: outline/x"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
</svg>
</button>
</div>
<ul class="divide-y divide-neutral-200 py-4">
<li
class=" flow-root px-4 py-2"
>
<a href="/" title="Nickiel&#39;s Static Pages" class="-m-2 block p-2 font-medium">Home</a>
</li>
<li
class="
bg-neutral-200 dark:bg-neutral-900
flow-root px-4 py-2"
>
<a href="/posts/" title="Posts" class="-m-2 block p-2 font-medium">Blog</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/categories/" title="Categories" class="-m-2 block p-2 font-medium">Categories</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/tags/" title="Tags" class="-m-2 block p-2 font-medium">Tags</a>
</li>
</ul>
</div>
</div>
<header class="dark:shadow-dark shadow">
<nav class="container mx-auto flex max-w-7xl items-center px-6 leading-12 lg:px-8 xl:px-12" aria-label="Top">
<a
class="relative hidden p-2 align-middle lg:block"
rel="me"
href="/"
title="Nickiel&#39;s Static Pages"
>
<img src="/logo-192.png" class="h-8 w-auto" alt="Nickiel&#39;s Static Pages" />
</a>
<button class="lg:hidden" type="button" @click="open = true" aria-label="Open menu">
<svg
class="block h-6 w-6"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
</button>
<div class="mx-2 h-12 flex-grow">
<div class="relative h-full w-full">
<div class="absolute max-w-full" :class="up ? 'hidden' : ''" x-show="!up" x-transition.duration.750ms>
<span class="overflow-hidden text-ellipsis whitespace-nowrap font-semibold tracking-wider"
>Nickiel&#39;s Static Pages</span
>
</div>
<template x-if="true">
<div
class="absolute left-0 right-0 top-0 max-w-full"
:class="up ? '' : 'hidden'"
x-show="up"
x-transition.duration.750ms
>
<span class="overflow-hidden text-ellipsis whitespace-nowrap">Chrono-Track User manual</span>
</div>
</template>
</div>
</div>
<ul class="ml-7 hidden shrink list-none flex-row justify-end lg:flex">
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/" title="Nickiel&#39;s Static Pages">Home</a>
</li>
<li
class="
border-primary-500
mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/posts/" title="Posts">Blog</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/categories/" title="Categories">Categories</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/tags/" title="Tags">Tags</a>
</li>
</ul>
<button id="switchTheme" class="flex h-8 w-8 items-center justify-center focus:outline-none">
<span class="sr-only">Switch theme</span>
<svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z"
clip-rule="evenodd"
></path>
</svg>
<span class="light"></span><span class="dark"></span>
</button>
<script>
document.getElementById("switchTheme").addEventListener("click", function () {
if (
localStorage.theme === "dark" ||
((!("theme" in localStorage) || localStorage.theme === "auto") &&
window.matchMedia("(prefers-color-scheme: dark)").matches)
) {
document.documentElement.classList.remove("dark");
localStorage.theme = "light";
} else if (
localStorage.theme === "light" ||
((!("theme" in localStorage) || localStorage.theme === "auto") &&
window.matchMedia("(prefers-color-scheme: light)").matches)
) {
document.documentElement.classList.add("dark");
localStorage.theme = "dark";
}
});
</script>
</nav>
</header>
</div>
<main class="container mx-auto my-6 flex max-w-7xl flex-row px-6 lg:px-8 xl:px-12">
<article class="mx-auto min-w-0 max-w-prose flex-grow text-lg lg:text-xl">
<header class="text-base">
<h1
class="my-3 text-3xl font-semibold text-neutral-800 dark:text-neutral-200"
x-intersect:enter="up = false"
x-intersect:leave="up = true"
>Chrono-Track User manual
</h1>
<div class="mb-6 text-base text-neutral-500 dark:text-neutral-400">
<div class="flex flex-row items-center">
<time datetime="0001-01-01 00:00:00 &#43;0000 UTC">1 January 0001</time><span class="px-2 text-primary-500">&middot;</span><span title="Reading time">3 mins</span>
</div>
</div>
</header>
<section class="prose max-w-none text-base dark:prose-invert">
<h1 id="chrono-track-user-manual">Chrono Track User Manual <a class="heading-anchor" href="#chrono-track-user-manual" aria-hidden="true">#</a></h1>
<p>Welcome not so weary traveler! Odds are pretty high that you had no issue finding this, because if you <em>did</em> find it, odds are the creator gave it to you.</p>
<h2 id="credential-file">Credential file <a class="heading-anchor" href="#credential-file" aria-hidden="true">#</a></h2>
<p>The credential file for this script, looks like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span><span style="color:#a6e22e">user</span>=<span style="color:#e6db74">&#34;TheUserName&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">pswd</span>=<span style="color:#e6db74">&#34;theworldsmostsecurepasswordbecauseitislong&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">email_addr</span>=<span style="color:#e6db74">&#34;destination_addr@example.com&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">primary_note_id</span>=<span style="color:#e6db74">&#34;id of the source note&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">logging_note_id</span>=<span style="color:#e6db74">&#34;id of the output note&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">server_url</span>=<span style="color:#e6db74">&#34;the base domain of the server you are using&#34;</span>
</span></span></code></pre></div><p>Put your logon username (not your display name) into the first line, your logon password on the second line, and the email address you wish to recieve emails on line three.</p>
<p>For the next part, you need to create two notes in your notes nextcloud. <a
href="https://staticpages.nickiel.net/"
data-rel="prefetch"
>See below for more information on actually setting it up</a>
. This section just shows how to get the ID.</p>
<h3 id="getting-a-notes-id">Getting a note&rsquo;s ID <a class="heading-anchor" href="#getting-a-notes-id" aria-hidden="true">#</a></h3>
<p>To get the ID of your notes, simply log into your nextcloud account, go to the notes tab, and navigate to the note you wish to get the id of. Then look at the URL, and grab the string of numbers at the end, and put that into the template above!</p>
<p>Simply do this for both of the notes you wish to use.</p>
<p><figure>
<img
src="file:./src/chrono_track/url-note-id-example.png"
loading="lazy"
alt="URL Example with note id circled"
/>
</figure>
</p>
<h2 id="setting-up-your-source-note">Setting up your source note <a class="heading-anchor" href="#setting-up-your-source-note" aria-hidden="true">#</a></h2>
<p>The source note, is the important one that the user interacts with. If you are the user, then yes! I am talking about you.</p>
<p>To set up the source note, all you need to know, is that Chrono Track ignores all lines except for checkboxes (<code>- [ ]</code> in markdown). So a source note might look like this!</p>
<p>(Note: The title of the note does not matter)</p>
<pre tabindex="0"><code>- [ ] Item 1
- [ ] Item 2
This line is ignored! But quillpad will automatically convert it into a checklist item.
</code></pre><p>Because of the quillpad issue, I personally would advise that you only put checklist items in this file (lines starting with the checklist markdown mark <code>- [ ]</code>). If you don&rsquo;t use quillpad, and are using something that does support checking items in non-list-only files, congratulations you lucky person! Ignore this line.</p>
<h2 id="setting-up-your-output-note">Setting up your output note <a class="heading-anchor" href="#setting-up-your-output-note" aria-hidden="true">#</a></h2>
<p>This file is 90% managed by Chrono Track, so you should only need to touch it once, and forget about it.</p>
<p>To start the file, please put the following:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span>*Last Updated*
</span></span><span style="display:flex;"><span># Automatically Generated
</span></span></code></pre></div><p>And that&rsquo;s it. In fact, you could go even more minimalistic, because this is all that it checks for:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span>*Last Updated
</span></span><span style="display:flex;"><span># &lt;Literally Anything&gt;
</span></span></code></pre></div>
<h1 id="warranty-agreement">Warranty Agreement <a class="heading-anchor" href="#warranty-agreement" aria-hidden="true">#</a></h1>
<p><em>Disclaimer: The Dubiously Digitized Dreamcatcher© Software Warranty Depletion Expedition</em></p>
<p><em>Congratulations on embarking on this software odyssey! We must inform you that this product, the Dubiously Digitized Dreamcatcher©, journeys through the labyrinth of warranty obfuscation. Herein, we are boldly committed to a perpetually transient warranty policy, which may challenge your very grasp of reality.</em></p>
<p><em>Initially, our warranty is as solid as a fleeting quantum particle, here and not here simultaneously. Over time, it metamorphoses into a spectral unicorn tap-dancing on the event horizon of a cosmic black hole.</em></p>
<p><em>Intriguingly, your warranty might transform into a probability cloud of wandering gnomes with abacuses, calculating the odds of a one-winged butterfly performing a symphony. Eventually, your warranty becomes a palindrome of gibberish.</em></p>
<p><em>Remember, we take pride in our commitment to the inexplicable. Use this software at your own risk, and may the warranty force be ever in your favor.</em></p>
<p><!-- raw HTML omitted --><!-- raw HTML omitted -->Thank you ChatGPT, that will do nicely<!-- raw HTML omitted --><!-- raw HTML omitted --></p>
</section>
<footer class="pt-8">
<div class="flex text-base text-neutral-500 dark:text-neutral-400">
<div class="place-self-center">
</div>
</div>
<div class="article-pagination">
<hr />
<div>
<span>
<a class="flex text-right" href="/posts/wgu_instructions/">
<span class="article-pagination-direction mr-3">&larr;</span>
<span class="flex flex-col">
<span class="article-pagination-title">WGU Capstone Setup Instructions</span>
<span class="article-pagination-date">
<time datetime="0001-01-01 00:00:00 &#43;0000 UTC">1 January 0001</time>
</span>
</span>
</a>
</span>
<span>
</span>
</div>
</div>
</footer>
</article>
<aside class="mt-3 hidden min-w-0 flex-auto space-y-6 pl-10 pr-4 text-sm lg:block xl:pl-16 xl:text-base">
<div class="sticky top-20 min-h-screen self-start overflow-y-auto truncate">
<label class="mb-4 text-lg font-bold">Table of contents</label>
<nav id="TableOfContents">
<ul>
<li><a href="#credential-file">Credential file</a>
<ul>
<li><a href="#getting-a-notes-id">Getting a note&rsquo;s ID</a></li>
</ul>
</li>
<li><a href="#setting-up-your-source-note">Setting up your source note</a></li>
<li><a href="#setting-up-your-output-note">Setting up your output note</a></li>
</ul>
</nav>
</div>
</aside>
<script>
window.addEventListener("DOMContentLoaded", () => {
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
const id = entry.target.getAttribute("id");
const elem = document.querySelector(`nav li a[href="#${id}"]`);
if (elem !== null) {
if (entry.intersectionRatio > 0) {
elem.parentElement.classList.add("active");
} else {
elem.parentElement.classList.remove("active");
}
}
});
});
const selectors = [];
for (let i = 1; i <= 6; i++) {
selectors.push(`article h${i}[id]`);
}
document.querySelectorAll(selectors.join()).forEach((h) => {
observer.observe(h);
});
});
</script>
</main>
<footer class="bg-neutral-200 text-neutral-500 dark:bg-neutral-900 dark:text-neutral-500">
<div class="container mx-auto flex max-w-7xl flex-row px-6 py-4 text-sm lg:px-8 xl:px-12">
<div class="flex-1">
<p>
&copy;
2023
</p>
<p class="text-sm">
Powered by <a class="hover:underline hover:text-primary-500" href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a> &amp; <a class="hover:underline hover:text-primary-500" href="https://canstand.github.io/compost" target="_blank" rel="noopener noreferrer">Compost</a>
</p>
</div>
<div class="flex-1">
</div>
</div>
</footer>
</body>
</html>

430
public/posts/index.html Normal file
View file

@ -0,0 +1,430 @@
<!doctype html>
<html
dir="ltr"
lang="en"
>
<head>
<meta charset="utf-8" />
<meta http-equiv="content-language" content="en-us" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Posts &middot; Nickiel&#39;s Static Pages</title>
<meta name="title" content="Posts &middot; Nickiel&#39;s Static Pages" />
<meta name="description" content="" />
<link rel="canonical" href="https://staticpages.nickiel.net/posts/" />
<link rel="alternate" type="application/rss+xml" href="/posts/index.xml" title="Nickiel's Static Pages" />
<link
type="text/css"
rel="stylesheet"
href="/css/main.css"
integrity=""
/>
<link rel="icon" sizes="192x192" href="/logo-192.png" />
<link rel="apple-touch-icon" href="/logo-192.png" />
<link rel="mask-icon" href="/logo.svg" color="blue" />
<link rel="manifest" href="/site.webmanifest" />
<meta property="og:title" content="Posts" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://staticpages.nickiel.net/posts/" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Posts"/>
<meta name="twitter:description" content=""/>
<meta name="generator" content="Hugo 0.119.0">
<script
defer
src="/js/main.js"
integrity=""
></script>
<script>
if (!('theme' in localStorage)) {
localStorage.theme = "light";
}
if (localStorage.theme === 'dark' || ((!('theme' in localStorage) || localStorage.theme === 'auto') && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark');
}
</script>
</head>
<body class="min-h-full w-full" x-data="{ up: false }">
<div
x-data="{ open: false }"
@keydown.window.escape="open = false"
class="sticky inset-x-0 top-0 z-10 bg-neutral-50/50 text-neutral-900 after:absolute after:left-0 after:top-0 after:-z-10 after:h-full after:w-full after:backdrop-blur-xl after:content-[''] dark:bg-neutral-800/60 dark:text-neutral-200"
>
<div class="fixed z-10 flex h-screen w-48 lg:hidden" :class="open ? '' : 'hidden'" x-ref="dialog" aria-modal="true">
<div
class="fixed inset-0 bg-gray-950/25"
:class="open ? '' : 'hidden'"
x-show="open"
x-transition:enter="transition-opacity ease-linear duration-300"
x-transition:enter-start="opacity-0"
x-transition:enter-end="opacity-100"
x-transition:leave="transition-opacity ease-linear duration-300"
x-transition:leave-start="opacity-100"
x-transition:leave-end="opacity-0"
x-description="Off-canvas menu overlay, show/hide based on off-canvas menu state."
@click="open = false"
aria-hidden="true"
></div>
<div
class="fixed inset-0 flex h-full w-full max-w-xxs flex-col overflow-y-auto bg-neutral-50 pb-12 shadow-xl dark:bg-neutral-800"
:class="open ? '' : 'hidden'"
x-show="open"
x-transition:enter="transition ease-in-out duration-300"
x-transition:enter-start="-translate-x-full"
x-transition:enter-end="translate-x-0"
x-transition:leave="transition ease-in-out duration-300"
x-transition:leave-start="translate-x-0"
x-transition:leave-end="-translate-x-full"
x-description="Off-canvas menu, show/hide based on off-canvas menu state."
>
<div class="flex px-4 pb-2 pt-5">
<button
type="button"
title="Close menu"
class="-m-2 inline-flex items-center justify-center rounded-md p-2 text-neutral-400"
@click="open = false"
>
<span class="sr-only">Close menu</span>
<svg
class="h-6 w-6"
x-description="Heroicon name: outline/x"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
</svg>
</button>
</div>
<ul class="divide-y divide-neutral-200 py-4">
<li
class=" flow-root px-4 py-2"
>
<a href="/" title="Nickiel&#39;s Static Pages" class="-m-2 block p-2 font-medium">Home</a>
</li>
<li
class="
bg-neutral-200 dark:bg-neutral-900
flow-root px-4 py-2"
>
<a href="/posts/" title="Posts" class="-m-2 block p-2 font-medium">Blog</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/categories/" title="Categories" class="-m-2 block p-2 font-medium">Categories</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/tags/" title="Tags" class="-m-2 block p-2 font-medium">Tags</a>
</li>
</ul>
</div>
</div>
<header class="dark:shadow-dark shadow">
<nav class="container mx-auto flex max-w-7xl items-center px-6 leading-12 lg:px-8 xl:px-12" aria-label="Top">
<a
class="relative hidden p-2 align-middle lg:block"
rel="me"
href="/"
title="Nickiel&#39;s Static Pages"
>
<img src="/logo-192.png" class="h-8 w-auto" alt="Nickiel&#39;s Static Pages" />
</a>
<button class="lg:hidden" type="button" @click="open = true" aria-label="Open menu">
<svg
class="block h-6 w-6"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
</button>
<div class="mx-2 h-12 flex-grow">
<div class="relative h-full w-full">
<div class="absolute max-w-full" :class="up ? 'hidden' : ''" x-show="!up" x-transition.duration.750ms>
<span class="overflow-hidden text-ellipsis whitespace-nowrap font-semibold tracking-wider"
>Nickiel&#39;s Static Pages</span
>
</div>
<template x-if="true">
<div
class="absolute left-0 right-0 top-0 max-w-full"
:class="up ? '' : 'hidden'"
x-show="up"
x-transition.duration.750ms
>
<span class="overflow-hidden text-ellipsis whitespace-nowrap">Posts</span>
</div>
</template>
</div>
</div>
<ul class="ml-7 hidden shrink list-none flex-row justify-end lg:flex">
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/" title="Nickiel&#39;s Static Pages">Home</a>
</li>
<li
class="
border-primary-500
mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/posts/" title="Posts">Blog</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/categories/" title="Categories">Categories</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/tags/" title="Tags">Tags</a>
</li>
</ul>
<button id="switchTheme" class="flex h-8 w-8 items-center justify-center focus:outline-none">
<span class="sr-only">Switch theme</span>
<svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z"
clip-rule="evenodd"
></path>
</svg>
<span class="light"></span><span class="dark"></span>
</button>
<script>
document.getElementById("switchTheme").addEventListener("click", function () {
if (
localStorage.theme === "dark" ||
((!("theme" in localStorage) || localStorage.theme === "auto") &&
window.matchMedia("(prefers-color-scheme: dark)").matches)
) {
document.documentElement.classList.remove("dark");
localStorage.theme = "light";
} else if (
localStorage.theme === "light" ||
((!("theme" in localStorage) || localStorage.theme === "auto") &&
window.matchMedia("(prefers-color-scheme: light)").matches)
) {
document.documentElement.classList.add("dark");
localStorage.theme = "dark";
}
});
</script>
</nav>
</header>
</div>
<main class="container mx-auto my-6 flex max-w-7xl flex-row px-6 lg:px-8 xl:px-12">
<section class="mx-auto min-w-0 max-w-2xl flex-grow lg:max-w-3xl">
<header class="w-full">
<section class="prose max-w-full dark:prose-invert">
<h1 class="mb-3 text-4xl font-extrabold">Posts</h1>
</section>
</header>
<h2 class="mt-12 text-2xl font-bold text-neutral-700 first:mt-8 dark:text-neutral-300">
0001
</h2>
<hr class="max-w-none border-double border-neutral-400" />
<div class="divide-y divide-neutral-300 overflow-hidden dark:divide-neutral-600">
<article class="py-4">
<h3 class="flex items-center text-xl font-semibold">
<a
class="text-neutral-800 hover:underline hover:decoration-primary-500 hover:underline-offset-auto dark:text-neutral-200"
href="/posts/wgu_instructions/"
>WGU Capstone Setup Instructions</a
>
</h3>
<div class="my-2">
Step 0: Clone the repository # Before you can run this project, you will need to clone the git repository with the following command:
git clone https://git.nickiel.net/Nickiel/WGU-Capstone See Project Structure for more information on the repository you just cloned.
See Step 1 - Prerequisites on what is required before you can run this project.
Project Structure # Below you can find the default project folder structure after cloning it:
</div>
<div class="text-sm text-neutral-400 dark:text-neutral-500">
<div class="flex flex-row items-center">
<time datetime="0001-01-01 00:00:00 &#43;0000 UTC">1 January 0001</time><span class="px-2 text-primary-500">&middot;</span><span title="Reading time">10 mins</span>
</div>
</div>
</article>
<article class="py-4">
<h3 class="flex items-center text-xl font-semibold">
<a
class="text-neutral-800 hover:underline hover:decoration-primary-500 hover:underline-offset-auto dark:text-neutral-200"
href="/posts/chrono_track/"
>Chrono-Track User manual</a
>
</h3>
<div class="my-2">
Chrono Track User Manual # Welcome not so weary traveler! Odds are pretty high that you had no issue finding this, because if you did find it, odds are the creator gave it to you.
Credential file # The credential file for this script, looks like this:
user=&#34;TheUserName&#34; pswd=&#34;theworldsmostsecurepasswordbecauseitislong&#34; email_addr=&#34;destination_addr@example.com&#34; primary_note_id=&#34;id of the source note&#34; logging_note_id=&#34;id of the output note&#34; server_url=&#34;the base domain of the server you are using&#34; Put your logon username (not your display name) into the first line, your logon password on the second line, and the email address you wish to recieve emails on line three.
</div>
<div class="text-sm text-neutral-400 dark:text-neutral-500">
<div class="flex flex-row items-center">
<time datetime="0001-01-01 00:00:00 &#43;0000 UTC">1 January 0001</time><span class="px-2 text-primary-500">&middot;</span><span title="Reading time">3 mins</span>
</div>
</div>
</article>
</div>
</section>
</main>
<footer class="bg-neutral-200 text-neutral-500 dark:bg-neutral-900 dark:text-neutral-500">
<div class="container mx-auto flex max-w-7xl flex-row px-6 py-4 text-sm lg:px-8 xl:px-12">
<div class="flex-1">
<p>
&copy;
2023
</p>
<p class="text-sm">
Powered by <a class="hover:underline hover:text-primary-500" href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a> &amp; <a class="hover:underline hover:text-primary-500" href="https://canstand.github.io/compost" target="_blank" rel="noopener noreferrer">Compost</a>
</p>
</div>
<div class="flex-1">
</div>
</div>
</footer>
</body>
</html>

View file

@ -12,8 +12,8 @@
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate> <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://staticpages.nickiel.net/posts/chrono_track/</guid> <guid>https://staticpages.nickiel.net/posts/chrono_track/</guid>
<description>Chrono Track User Manual Welcome not so weary traveler! Odds are pretty high that you had no issue finding this, because if you did find it, odds are the creator gave it to you. <description>Chrono Track User Manual # Welcome not so weary traveler! Odds are pretty high that you had no issue finding this, because if you did find it, odds are the creator gave it to you.
Credential file The credential file for this script, looks like this: Credential file # The credential file for this script, looks like this:
user=&amp;#34;TheUserName&amp;#34; pswd=&amp;#34;theworldsmostsecurepasswordbecauseitislong&amp;#34; email_addr=&amp;#34;destination_addr@example.com&amp;#34; primary_note_id=&amp;#34;id of the source note&amp;#34; logging_note_id=&amp;#34;id of the output note&amp;#34; server_url=&amp;#34;the base domain of the server you are using&amp;#34; Put your logon username (not your display name) into the first line, your logon password on the second line, and the email address you wish to recieve emails on line three.</description> user=&amp;#34;TheUserName&amp;#34; pswd=&amp;#34;theworldsmostsecurepasswordbecauseitislong&amp;#34; email_addr=&amp;#34;destination_addr@example.com&amp;#34; primary_note_id=&amp;#34;id of the source note&amp;#34; logging_note_id=&amp;#34;id of the output note&amp;#34; server_url=&amp;#34;the base domain of the server you are using&amp;#34; Put your logon username (not your display name) into the first line, your logon password on the second line, and the email address you wish to recieve emails on line three.</description>
</item> </item>
@ -23,11 +23,10 @@ user=&amp;#34;TheUserName&amp;#34; pswd=&amp;#34;theworldsmostsecurepasswordbeca
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate> <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://staticpages.nickiel.net/posts/wgu_instructions/</guid> <guid>https://staticpages.nickiel.net/posts/wgu_instructions/</guid>
<description>Step 0: Clone the repository Before you can run this project, you will need to clone the git repository with the following command: <description>Step 0: Clone the repository # Before you can run this project, you will need to clone the git repository with the following command:
git clone https://git.nickiel.net/Nickiel/WGU-Capstone See Project Structure for more information on the repository you just cloned. git clone https://git.nickiel.net/Nickiel/WGU-Capstone See Project Structure for more information on the repository you just cloned.
See Step 1 - Prerequisites on what is required before you can run this project. See Step 1 - Prerequisites on what is required before you can run this project.
Project Structure Below you can find the default project folder structure after cloning it: Project Structure # Below you can find the default project folder structure after cloning it:</description>
WGU-Capstone ├.gitignore ├Main.py ├README.</description>
</item> </item>
</channel> </channel>

View file

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<title>https://staticpages.nickiel.net/posts/</title>
<link rel="canonical" href="https://staticpages.nickiel.net/posts/">
<meta name="robots" content="noindex">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=https://staticpages.nickiel.net/posts/">
</head>
</html>

View file

@ -0,0 +1,767 @@
<!doctype html>
<html
dir="ltr"
lang="en"
>
<head>
<meta charset="utf-8" />
<meta http-equiv="content-language" content="en-us" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>WGU Capstone Setup Instructions &middot; Nickiel&#39;s Static Pages</title>
<meta name="title" content="WGU Capstone Setup Instructions &middot; Nickiel&#39;s Static Pages" />
<meta name="description" content="" />
<link rel="canonical" href="https://staticpages.nickiel.net/posts/wgu_instructions/" />
<link
type="text/css"
rel="stylesheet"
href="/css/main.css"
integrity=""
/>
<link rel="icon" sizes="192x192" href="/logo-192.png" />
<link rel="apple-touch-icon" href="/logo-192.png" />
<link rel="mask-icon" href="/logo.svg" color="blue" />
<link rel="manifest" href="/site.webmanifest" />
<meta property="og:title" content="WGU Capstone Setup Instructions" />
<meta property="og:description" content="Step 0: Clone the repository # Before you can run this project, you will need to clone the git repository with the following command:
git clone https://git.nickiel.net/Nickiel/WGU-Capstone See Project Structure for more information on the repository you just cloned.
See Step 1 - Prerequisites on what is required before you can run this project.
Project Structure # Below you can find the default project folder structure after cloning it:" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://staticpages.nickiel.net/posts/wgu_instructions/" /><meta property="article:section" content="posts" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="WGU Capstone Setup Instructions"/>
<meta name="twitter:description" content="Step 0: Clone the repository # Before you can run this project, you will need to clone the git repository with the following command:
git clone https://git.nickiel.net/Nickiel/WGU-Capstone See Project Structure for more information on the repository you just cloned.
See Step 1 - Prerequisites on what is required before you can run this project.
Project Structure # Below you can find the default project folder structure after cloning it:"/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"articleSection": "Posts",
"name": "WGU Capstone Setup Instructions",
"headline": "WGU Capstone Setup Instructions",
"description": "Step 0: Clone the repository # Before you can run this project, you will need to clone the git repository with the following command:\ngit clone https:\/\/git.nickiel.net\/Nickiel\/WGU-Capstone See Project Structure for more information on the repository you just cloned.\nSee Step 1 - Prerequisites on what is required before you can run this project.\nProject Structure # Below you can find the default project folder structure after cloning it:",
"inLanguage": "en-us",
"author" : {
"@type": "Person",
"name": ""
},
"creator" : {
"@type": "Person",
"name": ""
},
"copyrightHolder": "",
"url" : "https:\/\/staticpages.nickiel.net\/posts\/wgu_instructions\/",
"wordCount": "1971",
"keywords": []
}
</script>
<meta name="generator" content="Hugo 0.119.0">
<script
defer
src="/js/main.js"
integrity=""
></script>
<script>
if (!('theme' in localStorage)) {
localStorage.theme = "light";
}
if (localStorage.theme === 'dark' || ((!('theme' in localStorage) || localStorage.theme === 'auto') && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark');
}
</script>
</head>
<body class="min-h-full w-full" x-data="{ up: false }">
<div
x-data="{ open: false }"
@keydown.window.escape="open = false"
class="sticky inset-x-0 top-0 z-10 bg-neutral-50/50 text-neutral-900 after:absolute after:left-0 after:top-0 after:-z-10 after:h-full after:w-full after:backdrop-blur-xl after:content-[''] dark:bg-neutral-800/60 dark:text-neutral-200"
>
<div class="fixed z-10 flex h-screen w-48 lg:hidden" :class="open ? '' : 'hidden'" x-ref="dialog" aria-modal="true">
<div
class="fixed inset-0 bg-gray-950/25"
:class="open ? '' : 'hidden'"
x-show="open"
x-transition:enter="transition-opacity ease-linear duration-300"
x-transition:enter-start="opacity-0"
x-transition:enter-end="opacity-100"
x-transition:leave="transition-opacity ease-linear duration-300"
x-transition:leave-start="opacity-100"
x-transition:leave-end="opacity-0"
x-description="Off-canvas menu overlay, show/hide based on off-canvas menu state."
@click="open = false"
aria-hidden="true"
></div>
<div
class="fixed inset-0 flex h-full w-full max-w-xxs flex-col overflow-y-auto bg-neutral-50 pb-12 shadow-xl dark:bg-neutral-800"
:class="open ? '' : 'hidden'"
x-show="open"
x-transition:enter="transition ease-in-out duration-300"
x-transition:enter-start="-translate-x-full"
x-transition:enter-end="translate-x-0"
x-transition:leave="transition ease-in-out duration-300"
x-transition:leave-start="translate-x-0"
x-transition:leave-end="-translate-x-full"
x-description="Off-canvas menu, show/hide based on off-canvas menu state."
>
<div class="flex px-4 pb-2 pt-5">
<button
type="button"
title="Close menu"
class="-m-2 inline-flex items-center justify-center rounded-md p-2 text-neutral-400"
@click="open = false"
>
<span class="sr-only">Close menu</span>
<svg
class="h-6 w-6"
x-description="Heroicon name: outline/x"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
</svg>
</button>
</div>
<ul class="divide-y divide-neutral-200 py-4">
<li
class=" flow-root px-4 py-2"
>
<a href="/" title="Nickiel&#39;s Static Pages" class="-m-2 block p-2 font-medium">Home</a>
</li>
<li
class="
bg-neutral-200 dark:bg-neutral-900
flow-root px-4 py-2"
>
<a href="/posts/" title="Posts" class="-m-2 block p-2 font-medium">Blog</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/categories/" title="Categories" class="-m-2 block p-2 font-medium">Categories</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/tags/" title="Tags" class="-m-2 block p-2 font-medium">Tags</a>
</li>
</ul>
</div>
</div>
<header class="dark:shadow-dark shadow">
<nav class="container mx-auto flex max-w-7xl items-center px-6 leading-12 lg:px-8 xl:px-12" aria-label="Top">
<a
class="relative hidden p-2 align-middle lg:block"
rel="me"
href="/"
title="Nickiel&#39;s Static Pages"
>
<img src="/logo-192.png" class="h-8 w-auto" alt="Nickiel&#39;s Static Pages" />
</a>
<button class="lg:hidden" type="button" @click="open = true" aria-label="Open menu">
<svg
class="block h-6 w-6"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
</button>
<div class="mx-2 h-12 flex-grow">
<div class="relative h-full w-full">
<div class="absolute max-w-full" :class="up ? 'hidden' : ''" x-show="!up" x-transition.duration.750ms>
<span class="overflow-hidden text-ellipsis whitespace-nowrap font-semibold tracking-wider"
>Nickiel&#39;s Static Pages</span
>
</div>
<template x-if="true">
<div
class="absolute left-0 right-0 top-0 max-w-full"
:class="up ? '' : 'hidden'"
x-show="up"
x-transition.duration.750ms
>
<span class="overflow-hidden text-ellipsis whitespace-nowrap">WGU Capstone Setup Instructions</span>
</div>
</template>
</div>
</div>
<ul class="ml-7 hidden shrink list-none flex-row justify-end lg:flex">
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/" title="Nickiel&#39;s Static Pages">Home</a>
</li>
<li
class="
border-primary-500
mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/posts/" title="Posts">Blog</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/categories/" title="Categories">Categories</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/tags/" title="Tags">Tags</a>
</li>
</ul>
<button id="switchTheme" class="flex h-8 w-8 items-center justify-center focus:outline-none">
<span class="sr-only">Switch theme</span>
<svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z"
clip-rule="evenodd"
></path>
</svg>
<span class="light"></span><span class="dark"></span>
</button>
<script>
document.getElementById("switchTheme").addEventListener("click", function () {
if (
localStorage.theme === "dark" ||
((!("theme" in localStorage) || localStorage.theme === "auto") &&
window.matchMedia("(prefers-color-scheme: dark)").matches)
) {
document.documentElement.classList.remove("dark");
localStorage.theme = "light";
} else if (
localStorage.theme === "light" ||
((!("theme" in localStorage) || localStorage.theme === "auto") &&
window.matchMedia("(prefers-color-scheme: light)").matches)
) {
document.documentElement.classList.add("dark");
localStorage.theme = "dark";
}
});
</script>
</nav>
</header>
</div>
<main class="container mx-auto my-6 flex max-w-7xl flex-row px-6 lg:px-8 xl:px-12">
<article class="mx-auto min-w-0 max-w-prose flex-grow text-lg lg:text-xl">
<header class="text-base">
<h1
class="my-3 text-3xl font-semibold text-neutral-800 dark:text-neutral-200"
x-intersect:enter="up = false"
x-intersect:leave="up = true"
>WGU Capstone Setup Instructions
</h1>
<div class="mb-6 text-base text-neutral-500 dark:text-neutral-400">
<div class="flex flex-row items-center">
<time datetime="0001-01-01 00:00:00 &#43;0000 UTC">1 January 0001</time><span class="px-2 text-primary-500">&middot;</span><span title="Reading time">10 mins</span>
</div>
</div>
</header>
<section class="prose max-w-none text-base dark:prose-invert">
<h1 id="step-0-clone-the-repository">Step 0: Clone the repository <a class="heading-anchor" href="#step-0-clone-the-repository" aria-hidden="true">#</a></h1>
<p>Before you can run this project, you will need to clone the git repository with the following command:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>git clone https://git.nickiel.net/Nickiel/WGU-Capstone
</span></span></code></pre></div><p>See <a
href="https://staticpages.nickiel.net/"
data-rel="prefetch"
>Project Structure</a>
for more information on the repository you just cloned.</p>
<p>See <a
href="https://staticpages.nickiel.net/"
data-rel="prefetch"
>Step 1 - Prerequisites</a>
on what is required before you can run this project.</p>
<h1 id="project-structure">Project Structure <a class="heading-anchor" href="#project-structure" aria-hidden="true">#</a></h1>
<p>Below you can find the default project folder structure after cloning it:</p>
<pre tabindex="0"><code>WGU-Capstone
├.gitignore
├Main.py
├README.md
├WGU-Capstone-User-Guide.html
├requirements.txt
├shell.nix
├cascades
│ ├ cascade_1.xml
│ ├ cascade_2.xml
│ ├ cascade_5.xml
│ └ cascade_10.xml
├training_data
│ ├ positives
│ └ training_data_setup.py
└validation
├ TestVideo.mp4
├ compare_to_gt.py
├ create_ground_truth.py
└ ground_truth.txt
</code></pre><p><a
href="https://staticpages.nickiel.net/"
data-rel="prefetch"
>Click here to skip the detailed file structure explaination</a>
</p>
<h2 id="top-level">Top Level <a class="heading-anchor" href="#top-level" aria-hidden="true">#</a></h2>
<p>In the top-level of the cloned repository, you will find most of the files required for the core-fuctionality.</p>
<h4 id="gitignore">.gitignore <a class="heading-anchor" href="#gitignore" aria-hidden="true">#</a></h4>
<p>This file excludes files we don&rsquo;t want to check into git - such as the training data.
These files continue to exist on machine, but they are not uploaded to the remote git repository. This is very helpful to keep the clone sizes down, and upload/download speeds up.</p>
<h4 id="mainpy">Main.py <a class="heading-anchor" href="#mainpy" aria-hidden="true">#</a></h4>
<p>The main file of interest for this project. This file contains all of the code for the finished product.
As long as this file is in the same folder as the <code>./cascades</code> folder, it can be copied and run anywhere with the prerequisites installed.</p>
<h4 id="readmemd">README.md <a class="heading-anchor" href="#readmemd" aria-hidden="true">#</a></h4>
<p>The file you are reading in a format that most git hosting servers automatically render as the home-page.</p>
<h4 id="wgu-capstone-user-guidehtml">WGU-Capstone-User-Guide.html <a class="heading-anchor" href="#wgu-capstone-user-guidehtml" aria-hidden="true">#</a></h4>
<p>The html version of the README.md file that was bundled with CSS and hyper-links.</p>
<h4 id="requirementstxt">requirements.txt <a class="heading-anchor" href="#requirementstxt" aria-hidden="true">#</a></h4>
<p>The file that contains all of the python pip requiremnts to run. This packages in this file can either be installed by hand (e.g. <code>pip install opencv-python</code>), or can all be installed at once with <code>pip install -r requirements.txt</code> which will install all of the modules needed to run this project that are not included in the standard library.</p>
<h4 id="shellnix">shell.nix <a class="heading-anchor" href="#shellnix" aria-hidden="true">#</a></h4>
<p>A file that can be used on <a
href="https://nixos.org"
target="_blank" rel="noopener"
>Nix and NixOS</a>
systems to create a reproducable environement with all of the requirements to run the <code>Main.py</code> file.</p>
<h2 id="cascades">./Cascades <a class="heading-anchor" href="#cascades" aria-hidden="true">#</a></h2>
<p>This folder contains the final trained models created by this project in the model training step.
For more information on how they were created, see <a
href="https://staticpages.nickiel.net/"
data-rel="prefetch"
>Training your own Haar file</a>
below.</p>
<p>This folder needs to be in the same directory as the <code>Main.py</code> file for the <code>Main.py</code> file to be able to run.</p>
<h2 id="traning_data">./Traning_data <a class="heading-anchor" href="#traning_data" aria-hidden="true">#</a></h2>
<p>This folder contains all of the requirements for creating a new model from a few un-catagorized positive images, and a large dataset of negatives.</p>
<p>NOTE: Before anything in this folder can be run, please see <a
href="https://staticpages.nickiel.net/"
data-rel="prefetch"
>the section on training the haar files</a>
for several prerequisites.</p>
<h4 id="training_data_setuppy">./Training_data_setup.py <a class="heading-anchor" href="#training_data_setuppy" aria-hidden="true">#</a></h4>
<p>This python file takes a large data-set of negative images from the <code>./training_data/negatives</code> folder and creates .vec files that can be passed as an arguement to the utility that trains the final Haar file.</p>
<h4 id="positives">./Positives <a class="heading-anchor" href="#positives" aria-hidden="true">#</a></h4>
<p>This folder contains the 10 images that were used to create the cascade files included in this project. These files were included because the 10 images are a very small dataset in comparison to the required negatives.</p>
<h2 id="validation">./Validation <a class="heading-anchor" href="#validation" aria-hidden="true">#</a></h2>
<p>The folder contains all of the scripts and files used to measure the performance and accuracy of the generated models.</p>
<h4 id="testvideomp4">TestVideo.mp4 <a class="heading-anchor" href="#testvideomp4" aria-hidden="true">#</a></h4>
<p>This minute-long video was used to test the trained models.</p>
<h4 id="compare_to_gtpy">Compare_to_gt.py <a class="heading-anchor" href="#compare_to_gtpy" aria-hidden="true">#</a></h4>
<p>This file compares the output of a <code>--validate</code> output file generated by <code>Main.py</code> of a run with the provided <code>ground_truth.txt</code> file.
The output of this file is a .csv file that describes the average deviation from the boxes described by the <code>ground_truth.txt</code> file. See <a
href="https://staticpages.nickiel.net/"
data-rel="prefetch"
>Validation and Testing</a>
for more information on this process.</p>
<h4 id="create_ground_truthpy">Create_ground_truth.py <a class="heading-anchor" href="#create_ground_truthpy" aria-hidden="true">#</a></h4>
<p>This is the file used to create the <code>ground_truth.txt</code> file from the provided <code>TestVideo.mp4</code>.</p>
<h1 id="step-1---prerequisites">Step 1 - Prerequisites <a class="heading-anchor" href="#step-1---prerequisites" aria-hidden="true">#</a></h1>
<p>Before you can run this project, you need a python environment with the required packages installed.</p>
<p>If you are using Nix or NixOS, simply run <code>nix shell</code> in the <code>WGU-Capstone</code> folder, and all of the packages required to run <code>Main.py</code> will be installed for that shell session.</p>
<p>However, if you are not on a Nix system, continue reading.</p>
<p>The steps below detail how to set up a virtual environment that can be used to run this project, but a system-wide install of python with the packages detailed in <code>requirements.txt</code> installed will also suffice.</p>
<h3 id="set-up-virtual-environment">Set up virtual environment <a class="heading-anchor" href="#set-up-virtual-environment" aria-hidden="true">#</a></h3>
<p>This project was created with python 3.11, and other versions are not garunteed to work. So to ensure the project works as designed, install python 3.11 from the official python download page.</p>
<p>Once you have python 3.11 installed on your system, navigate to the cloned repository&rsquo;s root directory, and run the following command to create a new virtual environement:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>python <span style="color:#f92672">-</span>m venv <span style="color:#f92672">./</span>venv
</span></span></code></pre></div><p>You can now run the following commands to enter the virtual environment, and any python commands will be run inside the virtual environment instead of your system-wide installation.</p>
<p>On windows run the following if you are using a cmd prompt:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>.<span style="color:#ae81ff">\v</span>env<span style="color:#ae81ff">\S</span>cripts<span style="color:#ae81ff">\a</span>ctivate.bat
</span></span></code></pre></div><p>On windows in powershell:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>.<span style="color:#ae81ff">\v</span>env<span style="color:#ae81ff">\S</span>cripts<span style="color:#ae81ff">\A</span>ctivate.ps1
</span></span></code></pre></div><p>If you are on a linux based operating system, enter the virtual environment with:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>.<span style="color:#ae81ff">\v</span>env<span style="color:#ae81ff">\S</span>cripts<span style="color:#ae81ff">\a</span>ctivate
</span></span></code></pre></div>
<h3 id="install-requirements">Install requirements <a class="heading-anchor" href="#install-requirements" aria-hidden="true">#</a></h3>
<p>Now that you have activated the virtual environment, install the non-standard library requirements with the below command:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>pip install -r ./requirements.txt
</span></span></code></pre></div>
<h1 id="step-2---running-the-project">Step 2 - Running the project <a class="heading-anchor" href="#step-2---running-the-project" aria-hidden="true">#</a></h1>
<p>Now that the pre-requisites have been installed, you can run the project. For a full list of command-line arguements, run <code>python Main.py --help</code>.</p>
<p>Run the project with the dashboard enabled with the following command from the root of the project directory:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>python Main.py -d
</span></span></code></pre></div><p>You should see the web-cam of your computer turn on, and a window appear showing the view of the webcam, with boxes around any detected faces.</p>
<p>To display the calculated adjustment amounts generated by this project, enable the print-to-stoud feature with the <code>-o</code> flag:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>python Main.py -d -o
</span></span></code></pre></div><p>This command will output the calculated output commands for every detected face, and also show the summary statistics.</p>
<h1 id="additional-flags">Additional flags <a class="heading-anchor" href="#additional-flags" aria-hidden="true">#</a></h1>
<p>This section will describe, in greater depth, the available feature flags shown by the <code>--help</code> screen.</p>
<h2 id="help">Help <a class="heading-anchor" href="#help" aria-hidden="true">#</a></h2>
<p><code>-h</code> or <code>--help</code></p>
<p>Displays all of the available parameters and a quick description</p>
<h2 id="version">Version <a class="heading-anchor" href="#version" aria-hidden="true">#</a></h2>
<p><code>-v</code> or <code>--version</code></p>
<p>Prints the version of the program and exits</p>
<h2 id="show-dashboard">Show Dashboard <a class="heading-anchor" href="#show-dashboard" aria-hidden="true">#</a></h2>
<p><code>-d</code> or <code>--dasbboard</code></p>
<p>Display the run-summary statistics, these are off by default.</p>
<h2 id="output-adjustment-instructions">Output Adjustment Instructions <a class="heading-anchor" href="#output-adjustment-instructions" aria-hidden="true">#</a></h2>
<p><code>-o</code> or <code>--output</code></p>
<p>Print the calculated adjustment instructions generated by the program. This output demonstrates the generated values that will be sent to the motorized camera platform.</p>
<h2 id="use-video-file">Use Video File <a class="heading-anchor" href="#use-video-file" aria-hidden="true">#</a></h2>
<p><code>-f &lt;file_path&gt;</code> or <code>--file &lt;file_path&gt;</code></p>
<p>Use a video file (such as ./validation/TestVideo.mp4) instead of the computer&rsquo;s webcam. Useful for generating validation files and on machines without a working webcam.</p>
<h2 id="headless-mode">Headless Mode <a class="heading-anchor" href="#headless-mode" aria-hidden="true">#</a></h2>
<p><code>-s</code> or <code>--no-screen</code></p>
<p>Run the program without the window displaying processed video frames.</p>
<h2 id="save-frames-for-training-data">Save Frames for Training Data <a class="heading-anchor" href="#save-frames-for-training-data" aria-hidden="true">#</a></h2>
<p><code>-t</code> or <code>--training-data</code></p>
<p>Save frames where faces were found to <code>./output</code> as .jpg files, and save the located face&rsquo;s location to a .csv file.
This feature will be used to generate positive images automatically for training future models.</p>
<h2 id="generate-validation-file">Generate Validation File <a class="heading-anchor" href="#generate-validation-file" aria-hidden="true">#</a></h2>
<p><code>--validate</code></p>
<p>Outputs all discovered boxes, the frame they were found on, and the box coordinates so the model can be validated against the ground truth. See <a
href="https://staticpages.nickiel.net/"
data-rel="prefetch"
>validation and testing</a>
for more information on this process.</p>
<h1 id="training-your-own-haar-file">Training Your Own Haar File <a class="heading-anchor" href="#training-your-own-haar-file" aria-hidden="true">#</a></h1>
<p>This project contains the scripts required to train your own Haar cascade files, but it does not contain several of the dependencies.</p>
<p>NOTE: These steps only apply to Windows devices.</p>
<h2 id="prerequisites">Prerequisites <a class="heading-anchor" href="#prerequisites" aria-hidden="true">#</a></h2>
<p>The first requirement needed before you can train your own Haar file, is a large number of negative images. For this project, I used <a
href="https://www.kaggle.com/datasets/arnaud58/landscape-pictures"
target="_blank" rel="noopener"
>this Kaggle dataset of landscape images</a>
as my negatives datasource. After downloading this file, unzip it and deposit all of the raw images into the <code>./training_data/negatives</code> folder - create it if needed.</p>
<p>Next we need to download the windows OpenCV binary distributable and put it in our training_data folder.</p>
<p>You can download the 3.4.15 binary executable <a
href="https://sourceforge.net/projects/opencvlibrary/files/3.4.15/opencv-3.4.15-vc14_vc15.exe/download"
target="_blank" rel="noopener"
>here</a>
. (You can also go <a
href="https://opencv.org/releases"
target="_blank" rel="noopener"
>here</a>
and find the 3.4.15 release and choose &ldquo;windows&rdquo; to get to the same page).</p>
<p>After the .exe file has downloaded, open it and go through the steps to unzip it. After it has been unzipped, copy the folder to <code>./training_data/opencv</code>. So you should be able to run this from the training_data directory:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>.<span style="color:#ae81ff">\o</span>pencv<span style="color:#ae81ff">\b</span>uild<span style="color:#ae81ff">\x</span>64<span style="color:#ae81ff">\v</span>c15<span style="color:#ae81ff">\b</span>in<span style="color:#ae81ff">\o</span>pencv_createsamples.exe
</span></span></code></pre></div><p>If you do not get an error running the above command, then it was installed correctly.</p>
<h2 id="generating-positive-images">Generating positive images <a class="heading-anchor" href="#generating-positive-images" aria-hidden="true">#</a></h2>
<p>Now that we have the create_samples utility provided by OpenCV (they stopped distributing executables of it after 3.4.15) and the negatives folder full of negative images, we can use the <code>training_data_setup.py</code> file to create several different sized datasets ready for training Haar cascade files on.</p>
<p>The python file will run the create_samples tool for every positive image in <code>./positives</code>, creating many positive images.
The script will do all of the steps up through creating the .vec files that the train_cascade exectuable requires.</p>
<p>Before exiting, training_data_setup outputs the commands that need to be run to train the models. Run these commands from the training_data folder, and after they have finished training, you can use the generated Haar cascades instead of the ones provided.</p>
<h1 id="validation-and-testing">Validation and Testing <a class="heading-anchor" href="#validation-and-testing" aria-hidden="true">#</a></h1>
<p>The following describes the process I used to test the precision and accuracy of the generated cascade files.</p>
<h2 id="generate-the-ground-truth-file">Generate the Ground Truth file <a class="heading-anchor" href="#generate-the-ground-truth-file" aria-hidden="true">#</a></h2>
<p>I have included a generated <code>ground_truth.txt</code> file, so you don&rsquo;t need to do this step. But if you would like to generate the ground truth file from the provided test video, navigate to root of the project, and run the create ground truth script:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>python create_ground_truth.py
</span></span></code></pre></div><p>A window will open and display the process as it creates the file. This script does not utilize Haar files, but the MIL tracking algorithm, which results in much more accurate results, but a slower processing speed for the video.</p>
<p>All of these settings have been hard-coded so it will always output the same ground truth file.</p>
<h2 id="getting-the-model-validation-file">Getting the model validation file <a class="heading-anchor" href="#getting-the-model-validation-file" aria-hidden="true">#</a></h2>
<p>Now that we have the ground truth for our Test Video, we need to generate the same file with our trained model.</p>
<p>To do this, edit the <code>Main.py</code> file so that it uses the new cascade, then run the python file with the <code>--validate</code> option set, and the test video passed to the <code>-f</code> flag. The command used to generate the statistics with the test video provided is this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>python ./Main.py -d -f ./validation/TestVideo.mp4 --validate
</span></span></code></pre></div><p>(Notice that we can still display the dashboard while it outputs validation info)</p>
<p>This will create a new file in the <code>./validation</code> folder describing the faces and locations found in each frame.</p>
<h2 id="comparing-it-to-the-ground-truth">Comparing it to the ground truth <a class="heading-anchor" href="#comparing-it-to-the-ground-truth" aria-hidden="true">#</a></h2>
<p>I have created a script to automatically compare a validation file with a ground truth file, and output the average absolute deviation in adjustment instructions.
It requires two arguements, and has one optional output. You can see the options with the <code>--help</code> flag, but I will demonstrate all of the options below.</p>
<p>You can use <code>./validation/compare_to_gt.py</code> like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>cd ./validation
</span></span><span style="display:flex;"><span>python compare_to_gt ./ground_truth.txt ./20231012-081235.txt ./output.csv --faces_count_file ./faces_count_output.csv
</span></span></code></pre></div><p>This script will then take the generated test validation file, and get what the generated adjustment output would be, and gets the absolute difference between it and the ground truth, then it adds together all results for each frame - this last part penalizes false positives. We can then take the generated output file, and open it in Excel. We can take the average of it to see what the average deviation from the ground truth would be. The generated faces_count_output file contains the number of faces found in each frame, and can be used to measure the number of false positives.</p>
</section>
<footer class="pt-8">
<div class="flex text-base text-neutral-500 dark:text-neutral-400">
<div class="place-self-center">
</div>
</div>
<div class="article-pagination">
<hr />
<div>
<span>
</span>
<span>
<a class="flex" href="/posts/chrono_track/">
<span class="flex flex-col">
<span class="article-pagination-title">Chrono-Track User manual</span>
<span class="article-pagination-date">
<time datetime="0001-01-01 00:00:00 &#43;0000 UTC">1 January 0001</time>
</span>
</span>
<span class="article-pagination-direction ml-3">&rarr;</span>
</a>
</span>
</div>
</div>
</footer>
</article>
<aside class="mt-3 hidden min-w-0 flex-auto space-y-6 pl-10 pr-4 text-sm lg:block xl:pl-16 xl:text-base">
<div class="sticky top-20 min-h-screen self-start overflow-y-auto truncate">
<label class="mb-4 text-lg font-bold">Table of contents</label>
<nav id="TableOfContents">
<ul>
<li><a href="#top-level">Top Level</a>
<ul>
<li></li>
</ul>
</li>
<li><a href="#cascades">./Cascades</a></li>
<li><a href="#traning_data">./Traning_data</a>
<ul>
<li></li>
</ul>
</li>
<li><a href="#validation">./Validation</a>
<ul>
<li></li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li><a href="#set-up-virtual-environment">Set up virtual environment</a></li>
<li><a href="#install-requirements">Install requirements</a></li>
</ul>
</li>
</ul>
<ul>
<li><a href="#help">Help</a></li>
<li><a href="#version">Version</a></li>
<li><a href="#show-dashboard">Show Dashboard</a></li>
<li><a href="#output-adjustment-instructions">Output Adjustment Instructions</a></li>
<li><a href="#use-video-file">Use Video File</a></li>
<li><a href="#headless-mode">Headless Mode</a></li>
<li><a href="#save-frames-for-training-data">Save Frames for Training Data</a></li>
<li><a href="#generate-validation-file">Generate Validation File</a></li>
</ul>
<ul>
<li><a href="#prerequisites">Prerequisites</a></li>
<li><a href="#generating-positive-images">Generating positive images</a></li>
</ul>
<ul>
<li><a href="#generate-the-ground-truth-file">Generate the Ground Truth file</a></li>
<li><a href="#getting-the-model-validation-file">Getting the model validation file</a></li>
<li><a href="#comparing-it-to-the-ground-truth">Comparing it to the ground truth</a></li>
</ul>
</nav>
</div>
</aside>
<script>
window.addEventListener("DOMContentLoaded", () => {
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
const id = entry.target.getAttribute("id");
const elem = document.querySelector(`nav li a[href="#${id}"]`);
if (elem !== null) {
if (entry.intersectionRatio > 0) {
elem.parentElement.classList.add("active");
} else {
elem.parentElement.classList.remove("active");
}
}
});
});
const selectors = [];
for (let i = 1; i <= 6; i++) {
selectors.push(`article h${i}[id]`);
}
document.querySelectorAll(selectors.join()).forEach((h) => {
observer.observe(h);
});
});
</script>
</main>
<footer class="bg-neutral-200 text-neutral-500 dark:bg-neutral-900 dark:text-neutral-500">
<div class="container mx-auto flex max-w-7xl flex-row px-6 py-4 text-sm lg:px-8 xl:px-12">
<div class="flex-1">
<p>
&copy;
2023
</p>
<p class="text-sm">
Powered by <a class="hover:underline hover:text-primary-500" href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a> &amp; <a class="hover:underline hover:text-primary-500" href="https://canstand.github.io/compost" target="_blank" rel="noopener noreferrer">Compost</a>
</p>
</div>
<div class="flex-1">
</div>
</div>
</footer>
</body>
</html>

12
public/site.webmanifest Normal file
View file

@ -0,0 +1,12 @@
{
"name": "Hugo Compost",
"short_name": "Compost",
"start_url": "/",
"icons": [
{ "src": "/logo-192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "/logo-512.png", "sizes": "512x512", "type": "image/png" }
],
"theme_color": "#fff",
"background_color": "#fff",
"display": "standalone"
}

View file

@ -1,17 +1,33 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <?xml version="1.0" encoding="utf-8" standalone="yes"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"> xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url> <url>
<loc>https://staticpages.nickiel.net/categories/</loc>
</url><url>
<loc>https://staticpages.nickiel.net/posts/chrono_track/</loc> <loc>https://staticpages.nickiel.net/posts/chrono_track/</loc>
</url><url> </url>
<url>
<loc>https://staticpages.nickiel.net/</loc> <loc>https://staticpages.nickiel.net/</loc>
</url><url> </url>
<url>
<loc>https://staticpages.nickiel.net/posts/</loc> <loc>https://staticpages.nickiel.net/posts/</loc>
</url><url> </url>
<loc>https://staticpages.nickiel.net/tags/</loc>
</url><url>
<url>
<loc>https://staticpages.nickiel.net/posts/wgu_instructions/</loc> <loc>https://staticpages.nickiel.net/posts/wgu_instructions/</loc>
</url> </url>
</urlset> </urlset>

298
public/tags/index.html Normal file
View file

@ -0,0 +1,298 @@
<!doctype html>
<html
dir="ltr"
lang="en"
>
<head>
<meta charset="utf-8" />
<meta http-equiv="content-language" content="en-us" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Tags &middot; Nickiel&#39;s Static Pages</title>
<meta name="title" content="Tags &middot; Nickiel&#39;s Static Pages" />
<meta name="description" content="" />
<link rel="canonical" href="https://staticpages.nickiel.net/tags/" />
<link rel="alternate" type="application/rss+xml" href="/tags/index.xml" title="Nickiel's Static Pages" />
<link
type="text/css"
rel="stylesheet"
href="/css/main.css"
integrity=""
/>
<link rel="icon" sizes="192x192" href="/logo-192.png" />
<link rel="apple-touch-icon" href="/logo-192.png" />
<link rel="mask-icon" href="/logo.svg" color="blue" />
<link rel="manifest" href="/site.webmanifest" />
<meta property="og:title" content="Tags" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://staticpages.nickiel.net/tags/" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Tags"/>
<meta name="twitter:description" content=""/>
<meta name="generator" content="Hugo 0.119.0">
<script
defer
src="/js/main.js"
integrity=""
></script>
<script>
if (!('theme' in localStorage)) {
localStorage.theme = "light";
}
if (localStorage.theme === 'dark' || ((!('theme' in localStorage) || localStorage.theme === 'auto') && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark');
}
</script>
</head>
<body class="min-h-full w-full" x-data="{ up: false }">
<div
x-data="{ open: false }"
@keydown.window.escape="open = false"
class="sticky inset-x-0 top-0 z-10 bg-neutral-50/50 text-neutral-900 after:absolute after:left-0 after:top-0 after:-z-10 after:h-full after:w-full after:backdrop-blur-xl after:content-[''] dark:bg-neutral-800/60 dark:text-neutral-200"
>
<div class="fixed z-10 flex h-screen w-48 lg:hidden" :class="open ? '' : 'hidden'" x-ref="dialog" aria-modal="true">
<div
class="fixed inset-0 bg-gray-950/25"
:class="open ? '' : 'hidden'"
x-show="open"
x-transition:enter="transition-opacity ease-linear duration-300"
x-transition:enter-start="opacity-0"
x-transition:enter-end="opacity-100"
x-transition:leave="transition-opacity ease-linear duration-300"
x-transition:leave-start="opacity-100"
x-transition:leave-end="opacity-0"
x-description="Off-canvas menu overlay, show/hide based on off-canvas menu state."
@click="open = false"
aria-hidden="true"
></div>
<div
class="fixed inset-0 flex h-full w-full max-w-xxs flex-col overflow-y-auto bg-neutral-50 pb-12 shadow-xl dark:bg-neutral-800"
:class="open ? '' : 'hidden'"
x-show="open"
x-transition:enter="transition ease-in-out duration-300"
x-transition:enter-start="-translate-x-full"
x-transition:enter-end="translate-x-0"
x-transition:leave="transition ease-in-out duration-300"
x-transition:leave-start="translate-x-0"
x-transition:leave-end="-translate-x-full"
x-description="Off-canvas menu, show/hide based on off-canvas menu state."
>
<div class="flex px-4 pb-2 pt-5">
<button
type="button"
title="Close menu"
class="-m-2 inline-flex items-center justify-center rounded-md p-2 text-neutral-400"
@click="open = false"
>
<span class="sr-only">Close menu</span>
<svg
class="h-6 w-6"
x-description="Heroicon name: outline/x"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
</svg>
</button>
</div>
<ul class="divide-y divide-neutral-200 py-4">
<li
class=" flow-root px-4 py-2"
>
<a href="/" title="Nickiel&#39;s Static Pages" class="-m-2 block p-2 font-medium">Home</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/posts/" title="Posts" class="-m-2 block p-2 font-medium">Blog</a>
</li>
<li
class=" flow-root px-4 py-2"
>
<a href="/categories/" title="Categories" class="-m-2 block p-2 font-medium">Categories</a>
</li>
<li
class="
bg-neutral-200 dark:bg-neutral-900
flow-root px-4 py-2"
>
<a href="/tags/" title="Tags" class="-m-2 block p-2 font-medium">Tags</a>
</li>
</ul>
</div>
</div>
<header class="dark:shadow-dark shadow">
<nav class="container mx-auto flex max-w-7xl items-center px-6 leading-12 lg:px-8 xl:px-12" aria-label="Top">
<a
class="relative hidden p-2 align-middle lg:block"
rel="me"
href="/"
title="Nickiel&#39;s Static Pages"
>
<img src="/logo-192.png" class="h-8 w-auto" alt="Nickiel&#39;s Static Pages" />
</a>
<button class="lg:hidden" type="button" @click="open = true" aria-label="Open menu">
<svg
class="block h-6 w-6"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
</button>
<div class="mx-2 h-12 flex-grow">
<div class="relative h-full w-full">
<div class="absolute max-w-full" :class="up ? 'hidden' : ''" x-show="!up" x-transition.duration.750ms>
<span class="overflow-hidden text-ellipsis whitespace-nowrap font-semibold tracking-wider"
>Nickiel&#39;s Static Pages</span
>
</div>
<template x-if="true">
<div
class="absolute left-0 right-0 top-0 max-w-full"
:class="up ? '' : 'hidden'"
x-show="up"
x-transition.duration.750ms
>
<span class="overflow-hidden text-ellipsis whitespace-nowrap">Tags</span>
</div>
</template>
</div>
</div>
<ul class="ml-7 hidden shrink list-none flex-row justify-end lg:flex">
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/" title="Nickiel&#39;s Static Pages">Home</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/posts/" title="Posts">Blog</a>
</li>
<li
class=" mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/categories/" title="Categories">Categories</a>
</li>
<li
class="
border-primary-500
mr-7 border-b-2 border-transparent text-right hover:border-primary-500"
>
<a class="" href="/tags/" title="Tags">Tags</a>
</li>
</ul>
<button id="switchTheme" class="flex h-8 w-8 items-center justify-center focus:outline-none">
<span class="sr-only">Switch theme</span>
<svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z"
clip-rule="evenodd"
></path>
</svg>
<span class="light"></span><span class="dark"></span>
</button>
<script>
document.getElementById("switchTheme").addEventListener("click", function () {
if (
localStorage.theme === "dark" ||
((!("theme" in localStorage) || localStorage.theme === "auto") &&
window.matchMedia("(prefers-color-scheme: dark)").matches)
) {
document.documentElement.classList.remove("dark");
localStorage.theme = "light";
} else if (
localStorage.theme === "light" ||
((!("theme" in localStorage) || localStorage.theme === "auto") &&
window.matchMedia("(prefers-color-scheme: light)").matches)
) {
document.documentElement.classList.add("dark");
localStorage.theme = "dark";
}
});
</script>
</nav>
</header>
</div>
<main class="container mx-auto my-6 flex max-w-7xl flex-row px-6 lg:px-8 xl:px-12">
<div class="mx-auto min-w-0 max-w-2xl flex-grow lg:max-w-3xl">
<header class="w-full">
<section class="prose max-w-full dark:prose-invert">
<h1 class="mb-3 text-4xl font-extrabold">Tags</h1>
</section>
</header>
<section class="-mx-2 flex flex-wrap overflow-hidden">
</section>
</div>
</main>
<footer class="bg-neutral-200 text-neutral-500 dark:bg-neutral-900 dark:text-neutral-500">
<div class="container mx-auto flex max-w-7xl flex-row px-6 py-4 text-sm lg:px-8 xl:px-12">
<div class="flex-1">
<p>
&copy;
2023
</p>
<p class="text-sm">
Powered by <a class="hover:underline hover:text-primary-500" href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a> &amp; <a class="hover:underline hover:text-primary-500" href="https://canstand.github.io/compost" target="_blank" rel="noopener noreferrer">Compost</a>
</p>
</div>
<div class="flex-1">
</div>
</div>
</footer>
</body>
</html>