Updated themes and shortcodes.

This commit is contained in:
Zachary Billman 2024-10-13 08:43:23 -04:00
parent e5a9987aec
commit 888ca6fb8d
159 changed files with 10329 additions and 249 deletions

View File

@ -5,13 +5,12 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>404 Page not found | Zachary Billman&#39;s Blog</title>
<meta name="keywords" content="" />
<meta name="description" content="Where I talk a little about... not much.">
<meta name="author" content="Zachary Billman, who else?">
<link rel="canonical" href="https://www.zacharybillman.com/404.html" />
<link crossorigin="anonymous" href="/assets/css/stylesheet.min.48a18943c2fc15c38a372b8dde1f5e5dc0bc64fa6cb90f5a817d2f8c76b7f3ae.css" integrity="sha256-SKGJQ8L8FcOKNyuN3h9eXcC8ZPpsuQ9agX0vjHa3864=" rel="preload stylesheet" as="style">
<link rel="preload" href="/apple-touch-icon.png" as="image">
<title>404 Page not found | Zachary Billman</title>
<meta name="keywords" content="">
<meta name="description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/404.html">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
@ -19,6 +18,7 @@
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/404.html">
<noscript>
<style>
#theme-toggle,
@ -27,42 +27,15 @@
}
</style>
<style>
@media (prefers-color-scheme: dark) {
:root {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--hljs-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
}
.list {
background: var(--theme);
}
.list:not(.dark)::-webkit-scrollbar-track {
background: 0 0;
}
.list:not(.dark)::-webkit-scrollbar-thumb {
border-color: var(--theme);
}
}
</style>
</noscript><meta property="og:title" content="404 Page not found" />
<meta property="og:description" content="Where I talk a little about... not much." />
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="404 Page not found" />
<meta property="og:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.zacharybillman.com/404.html" /><meta property="og:site_name" content="Zachary Billman&#39;s Blog" />
<meta property="og:url" content="https://www.zacharybillman.com/404.html" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="404 Page not found"/>
<meta name="twitter:description" content="Where I talk a little about... not much."/>
<meta name="twitter:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy."/>
</head>
@ -70,10 +43,6 @@
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
} else if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
}
</script>
@ -81,17 +50,17 @@
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com" accesskey="h" title="Home (Alt + H)">
<img src="https://www.zacharybillman.com/apple-touch-icon.png" alt="logo" aria-label="logo"
height="35">Home</a>
<span class="logo-switches">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
@ -105,7 +74,7 @@
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</span>
</div>
</div>
<ul id="menu">
<li>
@ -119,8 +88,13 @@
</a>
</li>
<li>
<a href="https://www.zacharybillman.com" title="zacharybillman.com">
<span>zacharybillman.com</span>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
@ -131,11 +105,12 @@
</main>
<footer class="footer">
<span>&copy; 2022 <a href="https://www.zacharybillman.com">Zachary Billman&#39;s Blog</a></span>
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://git.io/hugopapermod" rel="noopener" target="_blank">PaperMod</a>
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">

BIN
public/apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 866 B

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,197 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Birding | Zachary Billman</title>
<meta name="keywords" content="">
<meta name="description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/categories/birding/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://www.zacharybillman.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://www.zacharybillman.com/categories/birding/index.xml">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/categories/birding/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="Birding" />
<meta property="og:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.zacharybillman.com/categories/birding/" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Birding"/>
<meta name="twitter:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy."/>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://www.zacharybillman.com/categories/" title="categories">
<span>categories</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/" title="tags">
<span>tags</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<header class="page-header"><div class="breadcrumbs"><a href="https://www.zacharybillman.com/">Home</a>&nbsp;»&nbsp;<a href="https://www.zacharybillman.com/categories/">Categories</a></div>
<h1>
Birding
</h1>
</header>
<article class="post-entry tag-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">The (un)common yellowthroat.
</h2>
</header>
<div class="entry-content">
<p>My partner and I took a trip to the Mason Farm Biological Reserve the other day, and what a glorious day it was. This year, Ive been quite busy in the lab, and missed a lot of the early spring warbler season, so I was very excited by the opportunity to check out the old stomping grounds.
I brought the camera with me despite the fact we were going to be there around midday when the birds are much less active. Im glad I did, because I got the best look at a common yellowthroat Ive ever had. Normally these guys are flighty, staying close to the ground in small brush or tall grasses, but this one was putting on a proper show for the mating season. Even when you get a glimpse of one, it is usually just that, as they have jumped away before you can pull out the camera, taunting you with their iconic call. I was very pleased to capture a few choice shots of the bird. Hopefully there are more to come. While we were out, I also got a nice picture of a hermit thrush and a king snake.
...</p>
</div>
<footer class="entry-footer"><span title='2022-05-01 00:00:00 +0000 UTC'>Sunday, May 1, 2022</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to The (un)common yellowthroat." href="https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/"></a>
</article>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Birding on Zachary Billman</title>
<link>https://www.zacharybillman.com/categories/birding/</link>
<description>Recent content in Birding on Zachary Billman</description>
<generator>Hugo -- 0.135.0</generator>
<language>en-us</language>
<lastBuildDate>Sun, 01 May 2022 00:00:00 +0000</lastBuildDate>
<atom:link href="https://www.zacharybillman.com/categories/birding/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>The (un)common yellowthroat.</title>
<link>https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/</link>
<pubDate>Sun, 01 May 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/</guid>
<description>&lt;p&gt;My partner and I took a trip to the &lt;a href=&#34;https://ncbg.unc.edu/visit/mason-farm-biological-reserve/&#34;&gt;Mason Farm Biological Reserve&lt;/a&gt; the other day, and what a glorious day it was. This year, I&amp;rsquo;ve been quite busy in the lab, and missed a lot of the early spring warbler season, so I was very excited by the opportunity to check out the old stomping grounds.&lt;/p&gt;
&lt;p&gt;I brought the camera with me despite the fact we were going to be there around midday when the birds are much less active. I&amp;rsquo;m glad I did, because I got the best look at a common yellowthroat I&amp;rsquo;ve ever had.
&lt;span class=&#34;sidenote-number&#34;&gt;&lt;small class=&#34;sidenote&#34;&gt;
Normally these guys are flighty, staying close to the ground in small brush or tall grasses, but this one was putting on a proper show for the mating season. Even when you get a glimpse of one, it is usually just that, as they have jumped away before you can pull out the camera, taunting you with their &lt;a href=&#34;https://ebird.org/species/comyel#Modal-playlist&#34;&gt;iconic call&lt;/a&gt;.
&lt;/small&gt;&lt;/span&gt;
I was very pleased to capture a few choice shots of the bird. Hopefully there are more to come. While we were out, I also got a nice picture of a hermit thrush and a king snake.&lt;/p&gt;</description>
</item>
</channel>
</rss>

View File

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

View File

@ -0,0 +1,196 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Coffee | Zachary Billman</title>
<meta name="keywords" content="">
<meta name="description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/categories/coffee/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://www.zacharybillman.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://www.zacharybillman.com/categories/coffee/index.xml">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/categories/coffee/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="Coffee" />
<meta property="og:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.zacharybillman.com/categories/coffee/" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Coffee"/>
<meta name="twitter:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy."/>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://www.zacharybillman.com/categories/" title="categories">
<span>categories</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/" title="tags">
<span>tags</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<header class="page-header"><div class="breadcrumbs"><a href="https://www.zacharybillman.com/">Home</a>&nbsp;»&nbsp;<a href="https://www.zacharybillman.com/categories/">Categories</a></div>
<h1>
Coffee
</h1>
</header>
<article class="post-entry tag-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">Roasting coffee at home. ☕
</h2>
</header>
<div class="entry-content">
<p>I, like many others, picked up a new hobby during the pandemic. Other peoples hobbies may bring them joy. This could be for many reasons. There is the joy of creating something from scratch. You can revel in your thriftiness. You can embrace the pride when you recognize that your creation is on par (or better!) than what you can buy. I feel like these are embodied in the sourdough craze that caught fire early on in COVID. Dare I say that I did this before it was cool? 😎 I baked two loaves of bread almost every weekend through med school. Maybe I should bring that back, its been a while since I brought out the ole starter. My pandemic hobby is similar, but different in that it often feels like a chore, costs more money, and often turns out worse than what I can buy. Of course, I am talking about how Ive started roasting my own coffee at home.
...</p>
</div>
<footer class="entry-footer"><span title='2022-07-14 00:00:00 +0000 UTC'>Thursday, July 14, 2022</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to Roasting coffee at home. ☕" href="https://www.zacharybillman.com/posts/roasting-coffee-at-home/"></a>
</article>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Coffee on Zachary Billman</title>
<link>https://www.zacharybillman.com/categories/coffee/</link>
<description>Recent content in Coffee on Zachary Billman</description>
<generator>Hugo -- 0.135.0</generator>
<language>en-us</language>
<lastBuildDate>Thu, 14 Jul 2022 00:00:00 +0000</lastBuildDate>
<atom:link href="https://www.zacharybillman.com/categories/coffee/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Roasting coffee at home. ☕</title>
<link>https://www.zacharybillman.com/posts/roasting-coffee-at-home/</link>
<pubDate>Thu, 14 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/roasting-coffee-at-home/</guid>
<description>&lt;p&gt;I, like many others, picked up a new hobby during the pandemic. Other people&amp;rsquo;s hobbies may bring them joy. This could be for many reasons. There is the joy of creating something from scratch. You can revel in your thriftiness. You can embrace the pride when you recognize that your creation is on par (or better!) than what you can buy. I feel like these are embodied in the sourdough craze that caught fire early on in COVID.
&lt;span class=&#34;sidenote-number&#34;&gt;&lt;small class=&#34;sidenote&#34;&gt;
Dare I say that I did this before it was cool? &amp;#x1f60e; I baked two loaves of bread almost every weekend through med school. Maybe I should bring that back, it&amp;rsquo;s been a while since I brought out the ole&amp;rsquo; starter.
&lt;/small&gt;&lt;/span&gt;
My pandemic hobby is similar, but different in that it often feels like a chore, costs more money, and often turns out worse than what I can buy. Of course, I am talking about how I&amp;rsquo;ve started roasting my own coffee at home.&lt;/p&gt;</description>
</item>
</channel>
</rss>

View File

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

View File

@ -5,13 +5,12 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Categories | Zachary Billman&#39;s Blog</title>
<meta name="keywords" content="" />
<meta name="description" content="Where I talk a little about... not much.">
<meta name="author" content="Zachary Billman, who else?">
<link rel="canonical" href="https://www.zacharybillman.com/categories/" />
<link crossorigin="anonymous" href="/assets/css/stylesheet.min.48a18943c2fc15c38a372b8dde1f5e5dc0bc64fa6cb90f5a817d2f8c76b7f3ae.css" integrity="sha256-SKGJQ8L8FcOKNyuN3h9eXcC8ZPpsuQ9agX0vjHa3864=" rel="preload stylesheet" as="style">
<link rel="preload" href="/apple-touch-icon.png" as="image">
<title>Categories | Zachary Billman</title>
<meta name="keywords" content="">
<meta name="description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/categories/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
@ -20,6 +19,7 @@
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://www.zacharybillman.com/categories/index.xml">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/categories/">
<noscript>
<style>
#theme-toggle,
@ -28,42 +28,15 @@
}
</style>
<style>
@media (prefers-color-scheme: dark) {
:root {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--hljs-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
}
.list {
background: var(--theme);
}
.list:not(.dark)::-webkit-scrollbar-track {
background: 0 0;
}
.list:not(.dark)::-webkit-scrollbar-thumb {
border-color: var(--theme);
}
}
</style>
</noscript><meta property="og:title" content="Categories" />
<meta property="og:description" content="Where I talk a little about... not much." />
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="Categories" />
<meta property="og:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.zacharybillman.com/categories/" /><meta property="og:site_name" content="Zachary Billman&#39;s Blog" />
<meta property="og:url" content="https://www.zacharybillman.com/categories/" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Categories"/>
<meta name="twitter:description" content="Where I talk a little about... not much."/>
<meta name="twitter:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy."/>
</head>
@ -71,10 +44,6 @@
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
} else if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
}
</script>
@ -82,17 +51,17 @@
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com" accesskey="h" title="Home (Alt + H)">
<img src="https://www.zacharybillman.com/apple-touch-icon.png" alt="logo" aria-label="logo"
height="35">Home</a>
<span class="logo-switches">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
@ -106,7 +75,7 @@
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</span>
</div>
</div>
<ul id="menu">
<li>
@ -120,8 +89,13 @@
</a>
</li>
<li>
<a href="https://www.zacharybillman.com" title="zacharybillman.com">
<span>zacharybillman.com</span>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
@ -133,15 +107,28 @@
</header>
<ul class="terms-tags">
<li>
<a href="https://www.zacharybillman.com/categories/birding/">birding <sup><strong><sup>1</sup></strong></sup> </a>
</li>
<li>
<a href="https://www.zacharybillman.com/categories/coffee/">coffee <sup><strong><sup>1</sup></strong></sup> </a>
</li>
<li>
<a href="https://www.zacharybillman.com/categories/science/">science <sup><strong><sup>1</sup></strong></sup> </a>
</li>
<li>
<a href="https://www.zacharybillman.com/categories/selfhosting/">selfhosting <sup><strong><sup>2</sup></strong></sup> </a>
</li>
</ul>
</main>
<footer class="footer">
<span>&copy; 2022 <a href="https://www.zacharybillman.com">Zachary Billman&#39;s Blog</a></span>
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://git.io/hugopapermod" rel="noopener" target="_blank">PaperMod</a>
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">

View File

@ -1,10 +1,40 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Categories on Zachary Billman&#39;s Blog</title>
<title>Categories on Zachary Billman</title>
<link>https://www.zacharybillman.com/categories/</link>
<description>Recent content in Categories on Zachary Billman&#39;s Blog</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language><atom:link href="https://www.zacharybillman.com/categories/index.xml" rel="self" type="application/rss+xml" />
<description>Recent content in Categories on Zachary Billman</description>
<generator>Hugo -- 0.135.0</generator>
<language>en-us</language>
<lastBuildDate>Thu, 14 Jul 2022 00:00:00 +0000</lastBuildDate>
<atom:link href="https://www.zacharybillman.com/categories/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Coffee</title>
<link>https://www.zacharybillman.com/categories/coffee/</link>
<pubDate>Thu, 14 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/categories/coffee/</guid>
<description></description>
</item>
<item>
<title>Science</title>
<link>https://www.zacharybillman.com/categories/science/</link>
<pubDate>Wed, 13 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/categories/science/</guid>
<description></description>
</item>
<item>
<title>Selfhosting</title>
<link>https://www.zacharybillman.com/categories/selfhosting/</link>
<pubDate>Sat, 02 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/categories/selfhosting/</guid>
<description></description>
</item>
<item>
<title>Birding</title>
<link>https://www.zacharybillman.com/categories/birding/</link>
<pubDate>Sun, 01 May 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/categories/birding/</guid>
<description></description>
</item>
</channel>
</rss>

View File

@ -0,0 +1,197 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Science | Zachary Billman</title>
<meta name="keywords" content="">
<meta name="description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/categories/science/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://www.zacharybillman.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://www.zacharybillman.com/categories/science/index.xml">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/categories/science/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="Science" />
<meta property="og:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.zacharybillman.com/categories/science/" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Science"/>
<meta name="twitter:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy."/>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://www.zacharybillman.com/categories/" title="categories">
<span>categories</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/" title="tags">
<span>tags</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<header class="page-header"><div class="breadcrumbs"><a href="https://www.zacharybillman.com/">Home</a>&nbsp;»&nbsp;<a href="https://www.zacharybillman.com/categories/">Categories</a></div>
<h1>
Science
</h1>
</header>
<article class="post-entry tag-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">Using RSS feeds to keep on top of science.
</h2>
</header>
<div class="entry-content">
<p>It is an age-old question: how can one keep up with the continuous output of science? I remember at the beginning of my PhD struggling to figure out how anyone found out when a new paper came out. 😵 Did they sit on nature.com and spam the refresh button? Did they know when each journal released their latest issue?
Behold the power of RSS! Most websites have a page that contains information about each subpage in a computer-readable format called RSS (Really Simple Syndication). Mine has one right here! These pages can be parsed by a number of RSS feed aggregators. The way these pages are set up make it such that they add any new information hosted at that domain. This is useful in the science world because you can find the RSS feed of a given journal, subscribe to it, then have every new article published online be delivered right to you.
...</p>
</div>
<footer class="entry-footer"><span title='2022-07-13 00:00:00 +0000 UTC'>Wednesday, July 13, 2022</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to Using RSS feeds to keep on top of science." href="https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/"></a>
</article>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Science on Zachary Billman</title>
<link>https://www.zacharybillman.com/categories/science/</link>
<description>Recent content in Science on Zachary Billman</description>
<generator>Hugo -- 0.135.0</generator>
<language>en-us</language>
<lastBuildDate>Wed, 13 Jul 2022 00:00:00 +0000</lastBuildDate>
<atom:link href="https://www.zacharybillman.com/categories/science/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Using RSS feeds to keep on top of science.</title>
<link>https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/</link>
<pubDate>Wed, 13 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/</guid>
<description>&lt;p&gt;It is an age-old question: how can one keep up with the continuous output of science? I remember at the beginning of my PhD struggling to figure out how anyone found out when a new paper came out. &amp;#x1f635; Did they sit on nature.com and spam the refresh button? Did they know when each journal released their latest issue?&lt;/p&gt;
&lt;h2 id=&#34;behold-the-power-of-rss&#34;&gt;Behold the power of RSS!&lt;/h2&gt;
&lt;p&gt;Most websites have a page that contains information about each subpage in a computer-readable format called RSS (Really Simple Syndication). &lt;a href=&#34;https://zacharybillman.com/index.xml&#34;&gt;Mine has one right here!&lt;/a&gt; These pages can be parsed by a number of RSS feed aggregators. The way these pages are set up make it such that they add any new information hosted at that domain. This is useful in the science world because you can find the RSS feed of a given journal, subscribe to it, then have every new article published online be delivered right to you.&lt;/p&gt;</description>
</item>
</channel>
</rss>

View File

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

View File

@ -0,0 +1,211 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Selfhosting | Zachary Billman</title>
<meta name="keywords" content="">
<meta name="description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/categories/selfhosting/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://www.zacharybillman.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://www.zacharybillman.com/categories/selfhosting/index.xml">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/categories/selfhosting/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="Selfhosting" />
<meta property="og:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.zacharybillman.com/categories/selfhosting/" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Selfhosting"/>
<meta name="twitter:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy."/>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://www.zacharybillman.com/categories/" title="categories">
<span>categories</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/" title="tags">
<span>tags</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<header class="page-header"><div class="breadcrumbs"><a href="https://www.zacharybillman.com/">Home</a>&nbsp;»&nbsp;<a href="https://www.zacharybillman.com/categories/">Categories</a></div>
<h1>
Selfhosting
</h1>
</header>
<article class="post-entry tag-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">My selfhosting journey.
</h2>
</header>
<div class="entry-content">
<p>My interest in self-hosting began in my with my interests in internet privacy. Plastered all over the internet are stories about how much Google, Facebook and Amazon know about you. I deleted my Facebook account years ago, and Im too paranoid to go back to the site because theres a real possibility that Facebook has cached my account, ready to spin it back up in case I try to login again. The ads served to me were too accurate for my liking. This is despite almost never clicking on them! I have become convinced of the idea that, if you are not paying for the product, you are the product. From this assumption, it follows that anywhere I trust with my data that I am not paying for (like Google Drive, Google Photos, Dropbox, Facebook, Twitter) is using my data to earn money. We know that Google uses the labels you add to Photos to train its AI, and Facebook uses (at least) Instagram photos to train its AI. For some, the value proposition of allowing a company to use your data for a useful service in return is an acceptable one. I find this to be a reasonable stance, but I took my growing interest in internet privacy as a chance to learn about how I can take control of my data.
...</p>
</div>
<footer class="entry-footer"><span title='2022-07-02 00:00:00 +0000 UTC'>Saturday, July 2, 2022</span>&nbsp;·&nbsp;5 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to My selfhosting journey." href="https://www.zacharybillman.com/posts/my-selfhosting-journey/"></a>
</article>
<article class="post-entry tag-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">What I&#39;m currently selfhosting.
</h2>
</header>
<div class="entry-content">
<p>N.B.: I hope to add screenshots for each of these eventually. For now, I hope links to each services website will suffice.
Seafile
This is a great tool for managing files. I moved to this from Nextcloud because I am of the philosophy that I would prefer services that do one thing excellently instead of many things well. Nextcloud is an incredible Office365 replacement, but I found myself using a fraction of what it was capable of providing. Enter Seafile. It is cloud file syncing with a robust encryption implementation, just what the doctor ordered.
...</p>
</div>
<footer class="entry-footer"><span title='2022-07-02 00:00:00 +0000 UTC'>Saturday, July 2, 2022</span>&nbsp;·&nbsp;6 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to What I&#39;m currently selfhosting." href="https://www.zacharybillman.com/posts/zpb-current-selfhosted/"></a>
</article>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Selfhosting on Zachary Billman</title>
<link>https://www.zacharybillman.com/categories/selfhosting/</link>
<description>Recent content in Selfhosting on Zachary Billman</description>
<generator>Hugo -- 0.135.0</generator>
<language>en-us</language>
<lastBuildDate>Sat, 02 Jul 2022 00:00:00 +0000</lastBuildDate>
<atom:link href="https://www.zacharybillman.com/categories/selfhosting/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>My selfhosting journey.</title>
<link>https://www.zacharybillman.com/posts/my-selfhosting-journey/</link>
<pubDate>Sat, 02 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/my-selfhosting-journey/</guid>
<description>&lt;p&gt;My interest in self-hosting began in my with my interests in internet privacy. Plastered all over the internet are stories about how much Google, Facebook and Amazon know about you. I deleted my Facebook account years ago, and I&amp;rsquo;m too paranoid to go back to the site because there&amp;rsquo;s &lt;a href=&#34;https://www.reddit.com/r/privacy/comments/6nmjfh/facebook_account_fully_recovered_3_years_after/&#34;&gt;a real possibility that Facebook has cached my account, ready to spin it back up&lt;/a&gt; in case I try to login again. The ads served to me were too accurate for my liking.
&lt;span class=&#34;sidenote-number&#34;&gt;&lt;small class=&#34;sidenote&#34;&gt;
This is despite almost never clicking on them!
&lt;/small&gt;&lt;/span&gt;
I have become convinced of the idea that, if you are not paying for the product, you are the product. From this assumption, it follows that anywhere I trust with my data that I am not paying for (like Google Drive, Google Photos, Dropbox, Facebook, Twitter) is using my data to earn money. We know that &lt;a href=&#34;https://www.theverge.com/2020/11/11/21559930/google-train-ai-photos-image-labelling-app-android-update&#34;&gt;Google uses the labels you add to Photos to train it&amp;rsquo;s AI&lt;/a&gt;, and &lt;a href=&#34;https://ai.facebook.com/blog/seer-the-start-of-a-more-powerful-flexible-and-accessible-era-for-computer-vision/&#34;&gt;Facebook uses (at least) Instagram photos to train it&amp;rsquo;s AI&lt;/a&gt;. For some, the value proposition of allowing a company to use your data for a useful service in return is an acceptable one. I find this to be a reasonable stance, but I took my growing interest in internet privacy as a chance to learn about how I can take control of my data.&lt;/p&gt;</description>
</item>
<item>
<title>What I&#39;m currently selfhosting.</title>
<link>https://www.zacharybillman.com/posts/zpb-current-selfhosted/</link>
<pubDate>Sat, 02 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/zpb-current-selfhosted/</guid>
<description>&lt;p&gt;&lt;em&gt;N.B.: I hope to add screenshots for each of these eventually. For now, I hope links to each services&amp;rsquo; website will suffice.&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.seafile.com/en/home/&#34;&gt;Seafile&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a great tool for managing files. I moved to this from Nextcloud because I am of the philosophy that I would prefer services that do one thing excellently instead of many things well. Nextcloud is an incredible Office365 replacement, but I found myself using a fraction of what it was capable of providing. Enter Seafile. It is cloud file syncing with a robust encryption implementation, just what the doctor ordered.&lt;/p&gt;</description>
</item>
</channel>
</rss>

View File

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

BIN
public/favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 B

BIN
public/favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 866 B

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
google-site-verification: google946d86521890254a.html

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -0,0 +1,7 @@
<svg width="24" stroke-width="1.5" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18.5 15L5.5 15" stroke="currentColor" stroke-linejoin="round"/>
<path d="M16 4L8 4" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M9 4.5L9 10.2602C9 10.7376 8.82922 11.1992 8.51851 11.5617L3.48149 17.4383C3.17078 17.8008 3 18.2624 3 18.7398V19C3 20.1046 3.89543 21 5 21L19 21C20.1046 21 21 20.1046 21 19V18.7398C21 18.2624 20.8292 17.8008 20.5185 17.4383L15.4815 11.5617C15.1708 11.1992 15 10.7376 15 10.2602L15 4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 9.01L12.01 8.99889" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M11 2.01L11.01 1.99889" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 867 B

View File

@ -2,17 +2,16 @@
<html lang="en" dir="auto">
<head>
<meta name="generator" content="Hugo 0.95.0" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.135.0"><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Zachary Billman&#39;s Blog</title>
<meta name="keywords" content="Blog, Portfolio, PaperMod" />
<meta name="description" content="Where I talk a little about... not much.">
<meta name="author" content="Zachary Billman, who else?">
<link rel="canonical" href="https://www.zacharybillman.com/" />
<link crossorigin="anonymous" href="/assets/css/stylesheet.min.48a18943c2fc15c38a372b8dde1f5e5dc0bc64fa6cb90f5a817d2f8c76b7f3ae.css" integrity="sha256-SKGJQ8L8FcOKNyuN3h9eXcC8ZPpsuQ9agX0vjHa3864=" rel="preload stylesheet" as="style">
<link rel="preload" href="/apple-touch-icon.png" as="image">
<title>Zachary Billman</title>
<meta name="keywords" content="Blog, Portfolio, PaperMod, Zachary Billman, Zach Billman">
<meta name="description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
@ -21,6 +20,8 @@
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://www.zacharybillman.com/index.xml">
<link rel="alternate" type="application/json" href="https://www.zacharybillman.com/index.json">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/">
<noscript>
<style>
#theme-toggle,
@ -29,53 +30,26 @@
}
</style>
<style>
@media (prefers-color-scheme: dark) {
:root {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--hljs-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
}
.list {
background: var(--theme);
}
.list:not(.dark)::-webkit-scrollbar-track {
background: 0 0;
}
.list:not(.dark)::-webkit-scrollbar-thumb {
border-color: var(--theme);
}
}
</style>
</noscript><meta property="og:title" content="Zachary Billman&#39;s Blog" />
<meta property="og:description" content="Where I talk a little about... not much." />
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="Zachary Billman" />
<meta property="og:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.zacharybillman.com/" /><meta property="og:site_name" content="Zachary Billman&#39;s Blog" />
<meta property="og:url" content="https://www.zacharybillman.com/" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Zachary Billman&#39;s Blog"/>
<meta name="twitter:description" content="Where I talk a little about... not much."/>
<meta name="twitter:title" content="Zachary Billman"/>
<meta name="twitter:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Zachary Billman's Blog",
"url": "https://www.zacharybillman.com",
"description": "Where I talk a little about... not much.",
"name": "Zachary Billman",
"url": "https://www.zacharybillman.com/",
"description": "Zach Billman's blog, where I talk about birds, science, and what ever else catches my fancy.",
"thumbnailUrl": "https://www.zacharybillman.com/favicon.ico",
"sameAs": [
"https://twitter.com/zacharypbillman"
"https://twitter.com/zacharypbillman", "https://gitea.zacharybillman.com/zpb", "mailto:zach@zacharybillman.com"
]
}
</script>
@ -85,10 +59,6 @@
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
} else if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
}
</script>
@ -96,17 +66,17 @@
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com" accesskey="h" title="Home (Alt + H)">
<img src="https://www.zacharybillman.com/apple-touch-icon.png" alt="logo" aria-label="logo"
height="35">Home</a>
<span class="logo-switches">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
@ -120,7 +90,7 @@
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</span>
</div>
</div>
<ul id="menu">
<li>
@ -134,43 +104,74 @@
</a>
</li>
<li>
<a href="https://www.zacharybillman.com" title="zacharybillman.com">
<span class="active">zacharybillman.com</span>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<article class="first-entry home-info">
<header class="entry-header">
<h1>Greetings.</h1>
</header>
<section class="entry-content">
<p>Welcome to my humble blog, where I say a little about&hellip; not much.</p>
</section>
<footer class="entry-footer">
<div class="social-icons">
<a href="https://twitter.com/zacharypbillman" target="_blank" rel="noopener noreferrer me" title="Twitter">
<main class="main"><div class="profile">
<div class="profile_inner">
<img draggable="false" src="https://www.zacharybillman.com/homepage/2021_headshot.webp" alt="Headshot of Zachary Billman, the owner and maintainer of this website." title="Headshot of Zachary Billman, the owner and maintainer of this website."
height="360" width="360" />
<h1>Zachary Billman</h1>
<span>Welcome to my humble blog, where I say a little about&hellip; not much. Stay tuned for future updates on birds I&rsquo;ve seen lately, science I think is interesting, and my journey through my MD-PhD training.</span><div class="social-icons" >
<a href="https://twitter.com/zacharypbillman" target="_blank" rel="noopener noreferrer me"
title="Twitter">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round">
<path
d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z">
</path>
</svg>
</a>
<a href="https://gitea.zacharybillman.com/zpb" target="_blank" rel="noopener noreferrer me"
title="Gitea">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 20" fill="currentColor">
<path
d="M4.209 4.603c-.247 0-.525.02-.84.088-.333.07-1.28.283-2.054 1.027C-.403 7.25.035 9.685.089 10.052c.065.446.263 1.687 1.21 2.768 1.749 2.141 5.513 2.092 5.513 2.092s.462 1.103 1.168 2.119c.955 1.263 1.936 2.248 2.89 2.367 2.406 0 7.212-.004 7.212-.004s.458.004 1.08-.394c.535-.324 1.013-.893 1.013-.893s.492-.527 1.18-1.73c.21-.37.385-.729.538-1.068 0 0 2.107-4.471 2.107-8.823-.042-1.318-.367-1.55-.443-1.627-.156-.156-.366-.153-.366-.153s-4.475.252-6.792.306c-.508.011-1.012.023-1.512.027v4.474l-.634-.301c0-1.39-.004-4.17-.004-4.17-1.107.016-3.405-.084-3.405-.084s-5.399-.27-5.987-.324c-.187-.011-.401-.032-.648-.032zm.354 1.832h.111s.271 2.269.6 3.597C5.549 11.147 6.22 13 6.22 13s-.996-.119-1.641-.348c-.99-.324-1.409-.714-1.409-.714s-.73-.511-1.096-1.52C1.444 8.73 2.021 7.7 2.021 7.7s.32-.859 1.47-1.145c.395-.106.863-.12 1.072-.12zm8.33 2.554c.26.003.509.127.509.127l.868.422-.529 1.075a.686.686 0 0 0-.614.359.685.685 0 0 0 .072.756l-.939 1.924a.69.69 0 0 0-.66.527.687.687 0 0 0 .347.763.686.686 0 0 0 .867-.206.688.688 0 0 0-.069-.882l.916-1.874a.667.667 0 0 0 .237-.02.657.657 0 0 0 .271-.137 8.826 8.826 0 0 1 1.016.512.761.761 0 0 1 .286.282c.073.21-.073.569-.073.569-.087.29-.702 1.55-.702 1.55a.692.692 0 0 0-.676.477.681.681 0 1 0 1.157-.252c.073-.141.141-.282.214-.431.19-.397.515-1.16.515-1.16.035-.066.218-.394.103-.814-.095-.435-.48-.638-.48-.638-.467-.301-1.116-.58-1.116-.58s0-.156-.042-.27a.688.688 0 0 0-.148-.241l.516-1.062 2.89 1.401s.48.218.583.619c.073.282-.019.534-.069.657-.24.587-2.1 4.317-2.1 4.317s-.232.554-.748.588a1.065 1.065 0 0 1-.393-.045l-.202-.08-4.31-2.1s-.417-.218-.49-.596c-.083-.31.104-.691.104-.691l2.073-4.272s.183-.37.466-.497a.855.855 0 0 1 .35-.077z" />
</svg>
</a>
<a href="mailto:zach@zacharybillman.com" target="_blank" rel="noopener noreferrer me"
title="Email">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 21" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round">
<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path>
<polyline points="22,6 12,13 2,6"></polyline>
</svg>
</a>
</div>
</footer>
</article>
<div class="buttons">
<a class="button" href="/posts/about-me/" rel="noopener" title="About Me">
<span class="button-inner">
About Me
</span>
</a>
<a class="button" href="posts" rel="noopener" title="All Posts">
<span class="button-inner">
All Posts
</span>
</a>
</div>
</div>
</div>
</main>
<footer class="footer">
<span>&copy; 2022 <a href="https://www.zacharybillman.com">Zachary Billman&#39;s Blog</a></span>
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://git.io/hugopapermod" rel="noopener" target="_blank">PaperMod</a>
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">

1
public/index.json Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,10 +1,78 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Zachary Billman&#39;s Blog</title>
<title>Zachary Billman</title>
<link>https://www.zacharybillman.com/</link>
<description>Recent content on Zachary Billman&#39;s Blog</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language><atom:link href="https://www.zacharybillman.com/index.xml" rel="self" type="application/rss+xml" />
<description>Recent content on Zachary Billman</description>
<generator>Hugo -- 0.135.0</generator>
<language>en-us</language>
<lastBuildDate>Thu, 14 Jul 2022 00:00:00 +0000</lastBuildDate>
<atom:link href="https://www.zacharybillman.com/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>About me. 👋</title>
<link>https://www.zacharybillman.com/posts/about-me/</link>
<pubDate>Sun, 03 Apr 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/about-me/</guid>
<description>&lt;h2 id=&#34;welcome-to-my-site&#34;&gt;Welcome to my site!&lt;/h2&gt;
&lt;p&gt;My name is Zachary Billman. I&amp;rsquo;m an MD-PhD student at UNC Chapel Hill in Ed Miao&amp;rsquo;s lab. The curious reader may be thinking: &amp;ldquo;But Zach, Ed Miao&amp;rsquo;s lab is at Duke now! What does that make you?&amp;rdquo; What an astute question! I am a card-carrying UNC Microbiology and Immunology student who happens to have all of their research take place at Duke.
&lt;span class=&#34;sidenote-number&#34;&gt;&lt;small class=&#34;sidenote&#34;&gt;
This move was quite a trial, especially when compounded with the onset of the pandemic. I suspect my research timeline suffered, though this is an extremely minor inconvenience compared to the tragedy the pandemic caused.
&lt;/small&gt;&lt;/span&gt;
This makes for very interesting basketball viewing parties with my Duke friends!&lt;/p&gt;</description>
</item>
<item>
<title>Roasting coffee at home. ☕</title>
<link>https://www.zacharybillman.com/posts/roasting-coffee-at-home/</link>
<pubDate>Thu, 14 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/roasting-coffee-at-home/</guid>
<description>&lt;p&gt;I, like many others, picked up a new hobby during the pandemic. Other people&amp;rsquo;s hobbies may bring them joy. This could be for many reasons. There is the joy of creating something from scratch. You can revel in your thriftiness. You can embrace the pride when you recognize that your creation is on par (or better!) than what you can buy. I feel like these are embodied in the sourdough craze that caught fire early on in COVID.
&lt;span class=&#34;sidenote-number&#34;&gt;&lt;small class=&#34;sidenote&#34;&gt;
Dare I say that I did this before it was cool? &amp;#x1f60e; I baked two loaves of bread almost every weekend through med school. Maybe I should bring that back, it&amp;rsquo;s been a while since I brought out the ole&amp;rsquo; starter.
&lt;/small&gt;&lt;/span&gt;
My pandemic hobby is similar, but different in that it often feels like a chore, costs more money, and often turns out worse than what I can buy. Of course, I am talking about how I&amp;rsquo;ve started roasting my own coffee at home.&lt;/p&gt;</description>
</item>
<item>
<title>Using RSS feeds to keep on top of science.</title>
<link>https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/</link>
<pubDate>Wed, 13 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/</guid>
<description>&lt;p&gt;It is an age-old question: how can one keep up with the continuous output of science? I remember at the beginning of my PhD struggling to figure out how anyone found out when a new paper came out. &amp;#x1f635; Did they sit on nature.com and spam the refresh button? Did they know when each journal released their latest issue?&lt;/p&gt;
&lt;h2 id=&#34;behold-the-power-of-rss&#34;&gt;Behold the power of RSS!&lt;/h2&gt;
&lt;p&gt;Most websites have a page that contains information about each subpage in a computer-readable format called RSS (Really Simple Syndication). &lt;a href=&#34;https://zacharybillman.com/index.xml&#34;&gt;Mine has one right here!&lt;/a&gt; These pages can be parsed by a number of RSS feed aggregators. The way these pages are set up make it such that they add any new information hosted at that domain. This is useful in the science world because you can find the RSS feed of a given journal, subscribe to it, then have every new article published online be delivered right to you.&lt;/p&gt;</description>
</item>
<item>
<title>My selfhosting journey.</title>
<link>https://www.zacharybillman.com/posts/my-selfhosting-journey/</link>
<pubDate>Sat, 02 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/my-selfhosting-journey/</guid>
<description>&lt;p&gt;My interest in self-hosting began in my with my interests in internet privacy. Plastered all over the internet are stories about how much Google, Facebook and Amazon know about you. I deleted my Facebook account years ago, and I&amp;rsquo;m too paranoid to go back to the site because there&amp;rsquo;s &lt;a href=&#34;https://www.reddit.com/r/privacy/comments/6nmjfh/facebook_account_fully_recovered_3_years_after/&#34;&gt;a real possibility that Facebook has cached my account, ready to spin it back up&lt;/a&gt; in case I try to login again. The ads served to me were too accurate for my liking.
&lt;span class=&#34;sidenote-number&#34;&gt;&lt;small class=&#34;sidenote&#34;&gt;
This is despite almost never clicking on them!
&lt;/small&gt;&lt;/span&gt;
I have become convinced of the idea that, if you are not paying for the product, you are the product. From this assumption, it follows that anywhere I trust with my data that I am not paying for (like Google Drive, Google Photos, Dropbox, Facebook, Twitter) is using my data to earn money. We know that &lt;a href=&#34;https://www.theverge.com/2020/11/11/21559930/google-train-ai-photos-image-labelling-app-android-update&#34;&gt;Google uses the labels you add to Photos to train it&amp;rsquo;s AI&lt;/a&gt;, and &lt;a href=&#34;https://ai.facebook.com/blog/seer-the-start-of-a-more-powerful-flexible-and-accessible-era-for-computer-vision/&#34;&gt;Facebook uses (at least) Instagram photos to train it&amp;rsquo;s AI&lt;/a&gt;. For some, the value proposition of allowing a company to use your data for a useful service in return is an acceptable one. I find this to be a reasonable stance, but I took my growing interest in internet privacy as a chance to learn about how I can take control of my data.&lt;/p&gt;</description>
</item>
<item>
<title>What I&#39;m currently selfhosting.</title>
<link>https://www.zacharybillman.com/posts/zpb-current-selfhosted/</link>
<pubDate>Sat, 02 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/zpb-current-selfhosted/</guid>
<description>&lt;p&gt;&lt;em&gt;N.B.: I hope to add screenshots for each of these eventually. For now, I hope links to each services&amp;rsquo; website will suffice.&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.seafile.com/en/home/&#34;&gt;Seafile&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a great tool for managing files. I moved to this from Nextcloud because I am of the philosophy that I would prefer services that do one thing excellently instead of many things well. Nextcloud is an incredible Office365 replacement, but I found myself using a fraction of what it was capable of providing. Enter Seafile. It is cloud file syncing with a robust encryption implementation, just what the doctor ordered.&lt;/p&gt;</description>
</item>
<item>
<title>The (un)common yellowthroat.</title>
<link>https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/</link>
<pubDate>Sun, 01 May 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/</guid>
<description>&lt;p&gt;My partner and I took a trip to the &lt;a href=&#34;https://ncbg.unc.edu/visit/mason-farm-biological-reserve/&#34;&gt;Mason Farm Biological Reserve&lt;/a&gt; the other day, and what a glorious day it was. This year, I&amp;rsquo;ve been quite busy in the lab, and missed a lot of the early spring warbler season, so I was very excited by the opportunity to check out the old stomping grounds.&lt;/p&gt;
&lt;p&gt;I brought the camera with me despite the fact we were going to be there around midday when the birds are much less active. I&amp;rsquo;m glad I did, because I got the best look at a common yellowthroat I&amp;rsquo;ve ever had.
&lt;span class=&#34;sidenote-number&#34;&gt;&lt;small class=&#34;sidenote&#34;&gt;
Normally these guys are flighty, staying close to the ground in small brush or tall grasses, but this one was putting on a proper show for the mating season. Even when you get a glimpse of one, it is usually just that, as they have jumped away before you can pull out the camera, taunting you with their &lt;a href=&#34;https://ebird.org/species/comyel#Modal-playlist&#34;&gt;iconic call&lt;/a&gt;.
&lt;/small&gt;&lt;/span&gt;
I was very pleased to capture a few choice shots of the bird. Hopefully there are more to come. While we were out, I also got a nice picture of a hermit thrush and a king snake.&lt;/p&gt;</description>
</item>
</channel>
</rss>

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 B

View File

@ -0,0 +1,351 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>About me. 👋 | Zachary Billman</title>
<meta name="keywords" content="">
<meta name="description" content="Welcome to my site!
My name is Zachary Billman. I&rsquo;m an MD-PhD student at UNC Chapel Hill in Ed Miao&rsquo;s lab. The curious reader may be thinking: &ldquo;But Zach, Ed Miao&rsquo;s lab is at Duke now! What does that make you?&rdquo; What an astute question! I am a card-carrying UNC Microbiology and Immunology student who happens to have all of their research take place at Duke.
This move was quite a trial, especially when compounded with the onset of the pandemic. I suspect my research timeline suffered, though this is an extremely minor inconvenience compared to the tragedy the pandemic caused.
This makes for very interesting basketball viewing parties with my Duke friends!">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/posts/about-me/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://www.zacharybillman.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/posts/about-me/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="About me. 👋" />
<meta property="og:description" content="Welcome to my site!
My name is Zachary Billman. I&rsquo;m an MD-PhD student at UNC Chapel Hill in Ed Miao&rsquo;s lab. The curious reader may be thinking: &ldquo;But Zach, Ed Miao&rsquo;s lab is at Duke now! What does that make you?&rdquo; What an astute question! I am a card-carrying UNC Microbiology and Immunology student who happens to have all of their research take place at Duke.
This move was quite a trial, especially when compounded with the onset of the pandemic. I suspect my research timeline suffered, though this is an extremely minor inconvenience compared to the tragedy the pandemic caused.
This makes for very interesting basketball viewing parties with my Duke friends!" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://www.zacharybillman.com/posts/about-me/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2022-04-03T00:00:00+00:00" />
<meta property="article:modified_time" content="2022-04-03T00:00:00+00:00" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="About me. 👋"/>
<meta name="twitter:description" content="Welcome to my site!
My name is Zachary Billman. I&rsquo;m an MD-PhD student at UNC Chapel Hill in Ed Miao&rsquo;s lab. The curious reader may be thinking: &ldquo;But Zach, Ed Miao&rsquo;s lab is at Duke now! What does that make you?&rdquo; What an astute question! I am a card-carrying UNC Microbiology and Immunology student who happens to have all of their research take place at Duke.
This move was quite a trial, especially when compounded with the onset of the pandemic. I suspect my research timeline suffered, though this is an extremely minor inconvenience compared to the tragedy the pandemic caused.
This makes for very interesting basketball viewing parties with my Duke friends!"/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1 ,
"name": "Posts",
"item": "https://www.zacharybillman.com/posts/"
},
{
"@type": "ListItem",
"position": 2 ,
"name": "About me. 👋",
"item": "https://www.zacharybillman.com/posts/about-me/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "About me. 👋",
"name": "About me. 👋",
"description": "Welcome to my site! My name is Zachary Billman. I\u0026rsquo;m an MD-PhD student at UNC Chapel Hill in Ed Miao\u0026rsquo;s lab. The curious reader may be thinking: \u0026ldquo;But Zach, Ed Miao\u0026rsquo;s lab is at Duke now! What does that make you?\u0026rdquo; What an astute question! I am a card-carrying UNC Microbiology and Immunology student who happens to have all of their research take place at Duke. This move was quite a trial, especially when compounded with the onset of the pandemic. I suspect my research timeline suffered, though this is an extremely minor inconvenience compared to the tragedy the pandemic caused. This makes for very interesting basketball viewing parties with my Duke friends!\n",
"keywords": [
],
"articleBody": "Welcome to my site! My name is Zachary Billman. Im an MD-PhD student at UNC Chapel Hill in Ed Miaos lab. The curious reader may be thinking: “But Zach, Ed Miaos lab is at Duke now! What does that make you?” What an astute question! I am a card-carrying UNC Microbiology and Immunology student who happens to have all of their research take place at Duke. This move was quite a trial, especially when compounded with the onset of the pandemic. I suspect my research timeline suffered, though this is an extremely minor inconvenience compared to the tragedy the pandemic caused. This makes for very interesting basketball viewing parties with my Duke friends!\nMy research and scientific interests. I am broadly interested in innate immunology. I am in the 4th year of my PhD studying the host-pathogen interaction between the intracellular fungus Histoplasma capsulatum and macrophages. There are many unstudied curiosities regarding the innate immune response to Histoplasma spp. and other intracellular fungi that I think are quite interesting. Stay tuned, hopefully there is a major breakthrough to report here someday.\nHobbies I may write about. Besides my science, I am interested in birding, baking sourdough bread (I swear I began years before the pandemic, though hearing of people baking bread brings me joy no matter when they first began!), board games, roasting coffee, and self-hosting free and open source software. Over the course of the pandemic, I have learned how to maintain a basic suite of services on a server I rent that have replaced my need for Google Photos and Google Drive. Im hoping to be able to move away from these platforms entirely soon. I think they provide a great service, but at a substantial cost to privacy. Hopefully more to be said about my thoughts on FOSS soon! I also transitioned my old, (and quite frankly, embarassingly slow) managed Wordpress site with this lean, static site made in Hugo that I host myself. Now that I have mangled together some CSS to get my precious sidenotes up and running again, Im ready to begin putting some ideas to paper. I love marginalia. Im not sure if this is unique to me, but I seem to get caught up in parenthetical / tangential thoughts very often, and I think using an Edward Tufte-esque sidenote is a great way for me to communicate in this way without distracting the reader too much. It seems marginalia such as this have been used throughout history, so perhaps it is normal, but most people can keep their thoughts focused better than me. The implementation I use is inspired by the Tufte CSS project and largely taken from this incredibly helpful post found at scripter.co. Im quite proud of my progress in administering my server and self-hosting useful services.\nThe future of this site. On this site I plan to post updates about my journey through med school, grad school, and self-hosting I would like to share with the world. I have been helped immensely by many others advice and I hope to impart similar tips to others someday. I suspect most posts will be about much lighter fare, like whatever hobbies tickle my fancy at the time.\n",
"wordCount" : "536",
"inLanguage": "en",
"datePublished": "2022-04-03T00:00:00Z",
"dateModified": "2022-04-03T00:00:00Z",
"author":[{
"@type": "Person",
"name": "Zachary Billman"
}],
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://www.zacharybillman.com/posts/about-me/"
},
"publisher": {
"@type": "Organization",
"name": "Zachary Billman",
"logo": {
"@type": "ImageObject",
"url": "https://www.zacharybillman.com/favicon.ico"
}
}
}
</script>
</head>
<body class="" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://www.zacharybillman.com/categories/" title="categories">
<span>categories</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/" title="tags">
<span>tags</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<article class="post-single">
<header class="post-header">
<div class="breadcrumbs"><a href="https://www.zacharybillman.com/">Home</a>&nbsp;»&nbsp;<a href="https://www.zacharybillman.com/posts/">Posts</a></div>
<h1 class="post-title entry-hint-parent">
About me. 👋
</h1>
<div class="post-meta"><span title='2022-04-03 00:00:00 +0000 UTC'>Sunday, April 3, 2022</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Zachary Billman
</div>
</header>
<div class="post-content"><h2 id="welcome-to-my-site">Welcome to my site!<a hidden class="anchor" aria-hidden="true" href="#welcome-to-my-site">#</a></h2>
<p>My name is Zachary Billman. I&rsquo;m an MD-PhD student at UNC Chapel Hill in Ed Miao&rsquo;s lab. The curious reader may be thinking: &ldquo;But Zach, Ed Miao&rsquo;s lab is at Duke now! What does that make you?&rdquo; What an astute question! I am a card-carrying UNC Microbiology and Immunology student who happens to have all of their research take place at Duke.
<span class="sidenote-number"><small class="sidenote">
This move was quite a trial, especially when compounded with the onset of the pandemic. I suspect my research timeline suffered, though this is an extremely minor inconvenience compared to the tragedy the pandemic caused.
</small></span>
This makes for very interesting basketball viewing parties with my Duke friends!</p>
<h2 id="my-research-and-scientific-interests-dot">My research and scientific interests.<a hidden class="anchor" aria-hidden="true" href="#my-research-and-scientific-interests-dot">#</a></h2>
<p>I am broadly interested in innate immunology. I am in the 4th year of my PhD studying the host-pathogen interaction between the intracellular fungus <em>Histoplasma capsulatum</em> and macrophages. There are many unstudied curiosities regarding the innate immune response to <em>Histoplasma spp.</em> and other intracellular fungi that I think are quite interesting. Stay tuned, hopefully there is a major breakthrough to report here someday.</p>
<h2 id="hobbies-i-may-write-about-dot">Hobbies I may write about.<a hidden class="anchor" aria-hidden="true" href="#hobbies-i-may-write-about-dot">#</a></h2>
<p>Besides my science, I am interested in birding, baking sourdough bread (I swear I began years before the pandemic, though hearing of people baking bread brings me joy no matter when they first began!), board games, roasting coffee, and self-hosting free and open source software. Over the course of the pandemic, I have learned how to maintain a basic suite of services on a server I rent that have replaced my need for Google Photos and Google Drive.
<span class="sidenote-number"><small class="sidenote">
I&rsquo;m hoping to be able to move away from these platforms entirely soon. I think they provide a great service, but at a substantial cost to privacy. Hopefully more to be said about my thoughts on FOSS soon!
</small></span>
I also transitioned my old, (and quite frankly, embarassingly slow) managed Wordpress site with this lean, static site made in Hugo that I host myself. Now that I have mangled together some CSS to get my precious sidenotes up and running again, I&rsquo;m ready to begin putting some ideas to paper.
<span class="sidenote-number"><small class="sidenote">
I love marginalia. I&rsquo;m not sure if this is unique to me, but I seem to get caught up in parenthetical / tangential thoughts very often, and I think using an <a href="https://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0000ld">Edward Tufte-esque</a> sidenote is a great way for me to communicate in this way without distracting the reader too much. It seems<a href="https://en.wikipedia.org/wiki/Marginalia"> marginalia</a> such as this have been used throughout history, so perhaps it is normal, but most people can keep their thoughts focused better than me. The implementation I use is inspired by the <a href="https://github.com/edwardtufte/tufte-css">Tufte CSS project</a> and largely taken from <a href="https://scripter.co/sidenotes-using-only-css/">this incredibly helpful post found at scripter.co</a>.
</small></span>
I&rsquo;m quite proud of my progress in administering my server and self-hosting useful services.</p>
<h2 id="the-future-of-this-site-dot">The future of this site.<a hidden class="anchor" aria-hidden="true" href="#the-future-of-this-site-dot">#</a></h2>
<p>On this site I plan to post updates about my journey through med school, grad school, and self-hosting I would like to share with the world. I have been helped immensely by many others&rsquo; advice and I hope to impart similar tips to others someday. I suspect most posts will be about much lighter fare, like whatever hobbies tickle my fancy at the time.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="paginav">
<a class="next" href="https://www.zacharybillman.com/posts/roasting-coffee-at-home/">
<span class="title">Next »</span>
<br>
<span>Roasting coffee at home. ☕</span>
</a>
</nav>
</footer><script defer src="https://commento.zacharybillman.com/js/commento.js"></script>
<noscript>
Please enable JavaScript to view the
<a href="https://commento.io" rel="nofollow">
comments powered by Commento++.
</a>
</noscript>
<div id="commento"></div>
</article>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

280
public/posts/index.html Normal file
View File

@ -0,0 +1,280 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Posts | Zachary Billman</title>
<meta name="keywords" content="">
<meta name="description" content="Posts - Zachary Billman">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/posts/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://www.zacharybillman.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://www.zacharybillman.com/posts/index.xml">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/posts/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="Posts" />
<meta property="og:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.zacharybillman.com/posts/" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Posts"/>
<meta name="twitter:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1 ,
"name": "Posts",
"item": "https://www.zacharybillman.com/posts/"
}
]
}
</script>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://www.zacharybillman.com/categories/" title="categories">
<span>categories</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/" title="tags">
<span>tags</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span class="active">posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<header class="page-header"><div class="breadcrumbs"><a href="https://www.zacharybillman.com/">Home</a></div>
<h1>
Posts
</h1>
</header>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">About me. 👋
</h2>
</header>
<div class="entry-content">
<p>Welcome to my site! My name is Zachary Billman. Im an MD-PhD student at UNC Chapel Hill in Ed Miaos lab. The curious reader may be thinking: “But Zach, Ed Miaos lab is at Duke now! What does that make you?” What an astute question! I am a card-carrying UNC Microbiology and Immunology student who happens to have all of their research take place at Duke. This move was quite a trial, especially when compounded with the onset of the pandemic. I suspect my research timeline suffered, though this is an extremely minor inconvenience compared to the tragedy the pandemic caused. This makes for very interesting basketball viewing parties with my Duke friends!
...</p>
</div>
<footer class="entry-footer"><span title='2022-04-03 00:00:00 +0000 UTC'>Sunday, April 3, 2022</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to About me. 👋" href="https://www.zacharybillman.com/posts/about-me/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">Roasting coffee at home. ☕
</h2>
</header>
<div class="entry-content">
<p>I, like many others, picked up a new hobby during the pandemic. Other peoples hobbies may bring them joy. This could be for many reasons. There is the joy of creating something from scratch. You can revel in your thriftiness. You can embrace the pride when you recognize that your creation is on par (or better!) than what you can buy. I feel like these are embodied in the sourdough craze that caught fire early on in COVID. Dare I say that I did this before it was cool? 😎 I baked two loaves of bread almost every weekend through med school. Maybe I should bring that back, its been a while since I brought out the ole starter. My pandemic hobby is similar, but different in that it often feels like a chore, costs more money, and often turns out worse than what I can buy. Of course, I am talking about how Ive started roasting my own coffee at home.
...</p>
</div>
<footer class="entry-footer"><span title='2022-07-14 00:00:00 +0000 UTC'>Thursday, July 14, 2022</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to Roasting coffee at home. ☕" href="https://www.zacharybillman.com/posts/roasting-coffee-at-home/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">Using RSS feeds to keep on top of science.
</h2>
</header>
<div class="entry-content">
<p>It is an age-old question: how can one keep up with the continuous output of science? I remember at the beginning of my PhD struggling to figure out how anyone found out when a new paper came out. 😵 Did they sit on nature.com and spam the refresh button? Did they know when each journal released their latest issue?
Behold the power of RSS! Most websites have a page that contains information about each subpage in a computer-readable format called RSS (Really Simple Syndication). Mine has one right here! These pages can be parsed by a number of RSS feed aggregators. The way these pages are set up make it such that they add any new information hosted at that domain. This is useful in the science world because you can find the RSS feed of a given journal, subscribe to it, then have every new article published online be delivered right to you.
...</p>
</div>
<footer class="entry-footer"><span title='2022-07-13 00:00:00 +0000 UTC'>Wednesday, July 13, 2022</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to Using RSS feeds to keep on top of science." href="https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">My selfhosting journey.
</h2>
</header>
<div class="entry-content">
<p>My interest in self-hosting began in my with my interests in internet privacy. Plastered all over the internet are stories about how much Google, Facebook and Amazon know about you. I deleted my Facebook account years ago, and Im too paranoid to go back to the site because theres a real possibility that Facebook has cached my account, ready to spin it back up in case I try to login again. The ads served to me were too accurate for my liking. This is despite almost never clicking on them! I have become convinced of the idea that, if you are not paying for the product, you are the product. From this assumption, it follows that anywhere I trust with my data that I am not paying for (like Google Drive, Google Photos, Dropbox, Facebook, Twitter) is using my data to earn money. We know that Google uses the labels you add to Photos to train its AI, and Facebook uses (at least) Instagram photos to train its AI. For some, the value proposition of allowing a company to use your data for a useful service in return is an acceptable one. I find this to be a reasonable stance, but I took my growing interest in internet privacy as a chance to learn about how I can take control of my data.
...</p>
</div>
<footer class="entry-footer"><span title='2022-07-02 00:00:00 +0000 UTC'>Saturday, July 2, 2022</span>&nbsp;·&nbsp;5 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to My selfhosting journey." href="https://www.zacharybillman.com/posts/my-selfhosting-journey/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">What I&#39;m currently selfhosting.
</h2>
</header>
<div class="entry-content">
<p>N.B.: I hope to add screenshots for each of these eventually. For now, I hope links to each services website will suffice.
Seafile
This is a great tool for managing files. I moved to this from Nextcloud because I am of the philosophy that I would prefer services that do one thing excellently instead of many things well. Nextcloud is an incredible Office365 replacement, but I found myself using a fraction of what it was capable of providing. Enter Seafile. It is cloud file syncing with a robust encryption implementation, just what the doctor ordered.
...</p>
</div>
<footer class="entry-footer"><span title='2022-07-02 00:00:00 +0000 UTC'>Saturday, July 2, 2022</span>&nbsp;·&nbsp;6 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to What I&#39;m currently selfhosting." href="https://www.zacharybillman.com/posts/zpb-current-selfhosted/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">The (un)common yellowthroat.
</h2>
</header>
<div class="entry-content">
<p>My partner and I took a trip to the Mason Farm Biological Reserve the other day, and what a glorious day it was. This year, Ive been quite busy in the lab, and missed a lot of the early spring warbler season, so I was very excited by the opportunity to check out the old stomping grounds.
I brought the camera with me despite the fact we were going to be there around midday when the birds are much less active. Im glad I did, because I got the best look at a common yellowthroat Ive ever had. Normally these guys are flighty, staying close to the ground in small brush or tall grasses, but this one was putting on a proper show for the mating season. Even when you get a glimpse of one, it is usually just that, as they have jumped away before you can pull out the camera, taunting you with their iconic call. I was very pleased to capture a few choice shots of the bird. Hopefully there are more to come. While we were out, I also got a nice picture of a hermit thrush and a king snake.
...</p>
</div>
<footer class="entry-footer"><span title='2022-05-01 00:00:00 +0000 UTC'>Sunday, May 1, 2022</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to The (un)common yellowthroat." href="https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/"></a>
</article>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>

78
public/posts/index.xml Normal file
View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Posts on Zachary Billman</title>
<link>https://www.zacharybillman.com/posts/</link>
<description>Recent content in Posts on Zachary Billman</description>
<generator>Hugo -- 0.135.0</generator>
<language>en-us</language>
<lastBuildDate>Thu, 14 Jul 2022 00:00:00 +0000</lastBuildDate>
<atom:link href="https://www.zacharybillman.com/posts/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>About me. 👋</title>
<link>https://www.zacharybillman.com/posts/about-me/</link>
<pubDate>Sun, 03 Apr 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/about-me/</guid>
<description>&lt;h2 id=&#34;welcome-to-my-site&#34;&gt;Welcome to my site!&lt;/h2&gt;
&lt;p&gt;My name is Zachary Billman. I&amp;rsquo;m an MD-PhD student at UNC Chapel Hill in Ed Miao&amp;rsquo;s lab. The curious reader may be thinking: &amp;ldquo;But Zach, Ed Miao&amp;rsquo;s lab is at Duke now! What does that make you?&amp;rdquo; What an astute question! I am a card-carrying UNC Microbiology and Immunology student who happens to have all of their research take place at Duke.
&lt;span class=&#34;sidenote-number&#34;&gt;&lt;small class=&#34;sidenote&#34;&gt;
This move was quite a trial, especially when compounded with the onset of the pandemic. I suspect my research timeline suffered, though this is an extremely minor inconvenience compared to the tragedy the pandemic caused.
&lt;/small&gt;&lt;/span&gt;
This makes for very interesting basketball viewing parties with my Duke friends!&lt;/p&gt;</description>
</item>
<item>
<title>Roasting coffee at home. ☕</title>
<link>https://www.zacharybillman.com/posts/roasting-coffee-at-home/</link>
<pubDate>Thu, 14 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/roasting-coffee-at-home/</guid>
<description>&lt;p&gt;I, like many others, picked up a new hobby during the pandemic. Other people&amp;rsquo;s hobbies may bring them joy. This could be for many reasons. There is the joy of creating something from scratch. You can revel in your thriftiness. You can embrace the pride when you recognize that your creation is on par (or better!) than what you can buy. I feel like these are embodied in the sourdough craze that caught fire early on in COVID.
&lt;span class=&#34;sidenote-number&#34;&gt;&lt;small class=&#34;sidenote&#34;&gt;
Dare I say that I did this before it was cool? &amp;#x1f60e; I baked two loaves of bread almost every weekend through med school. Maybe I should bring that back, it&amp;rsquo;s been a while since I brought out the ole&amp;rsquo; starter.
&lt;/small&gt;&lt;/span&gt;
My pandemic hobby is similar, but different in that it often feels like a chore, costs more money, and often turns out worse than what I can buy. Of course, I am talking about how I&amp;rsquo;ve started roasting my own coffee at home.&lt;/p&gt;</description>
</item>
<item>
<title>Using RSS feeds to keep on top of science.</title>
<link>https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/</link>
<pubDate>Wed, 13 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/</guid>
<description>&lt;p&gt;It is an age-old question: how can one keep up with the continuous output of science? I remember at the beginning of my PhD struggling to figure out how anyone found out when a new paper came out. &amp;#x1f635; Did they sit on nature.com and spam the refresh button? Did they know when each journal released their latest issue?&lt;/p&gt;
&lt;h2 id=&#34;behold-the-power-of-rss&#34;&gt;Behold the power of RSS!&lt;/h2&gt;
&lt;p&gt;Most websites have a page that contains information about each subpage in a computer-readable format called RSS (Really Simple Syndication). &lt;a href=&#34;https://zacharybillman.com/index.xml&#34;&gt;Mine has one right here!&lt;/a&gt; These pages can be parsed by a number of RSS feed aggregators. The way these pages are set up make it such that they add any new information hosted at that domain. This is useful in the science world because you can find the RSS feed of a given journal, subscribe to it, then have every new article published online be delivered right to you.&lt;/p&gt;</description>
</item>
<item>
<title>My selfhosting journey.</title>
<link>https://www.zacharybillman.com/posts/my-selfhosting-journey/</link>
<pubDate>Sat, 02 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/my-selfhosting-journey/</guid>
<description>&lt;p&gt;My interest in self-hosting began in my with my interests in internet privacy. Plastered all over the internet are stories about how much Google, Facebook and Amazon know about you. I deleted my Facebook account years ago, and I&amp;rsquo;m too paranoid to go back to the site because there&amp;rsquo;s &lt;a href=&#34;https://www.reddit.com/r/privacy/comments/6nmjfh/facebook_account_fully_recovered_3_years_after/&#34;&gt;a real possibility that Facebook has cached my account, ready to spin it back up&lt;/a&gt; in case I try to login again. The ads served to me were too accurate for my liking.
&lt;span class=&#34;sidenote-number&#34;&gt;&lt;small class=&#34;sidenote&#34;&gt;
This is despite almost never clicking on them!
&lt;/small&gt;&lt;/span&gt;
I have become convinced of the idea that, if you are not paying for the product, you are the product. From this assumption, it follows that anywhere I trust with my data that I am not paying for (like Google Drive, Google Photos, Dropbox, Facebook, Twitter) is using my data to earn money. We know that &lt;a href=&#34;https://www.theverge.com/2020/11/11/21559930/google-train-ai-photos-image-labelling-app-android-update&#34;&gt;Google uses the labels you add to Photos to train it&amp;rsquo;s AI&lt;/a&gt;, and &lt;a href=&#34;https://ai.facebook.com/blog/seer-the-start-of-a-more-powerful-flexible-and-accessible-era-for-computer-vision/&#34;&gt;Facebook uses (at least) Instagram photos to train it&amp;rsquo;s AI&lt;/a&gt;. For some, the value proposition of allowing a company to use your data for a useful service in return is an acceptable one. I find this to be a reasonable stance, but I took my growing interest in internet privacy as a chance to learn about how I can take control of my data.&lt;/p&gt;</description>
</item>
<item>
<title>What I&#39;m currently selfhosting.</title>
<link>https://www.zacharybillman.com/posts/zpb-current-selfhosted/</link>
<pubDate>Sat, 02 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/zpb-current-selfhosted/</guid>
<description>&lt;p&gt;&lt;em&gt;N.B.: I hope to add screenshots for each of these eventually. For now, I hope links to each services&amp;rsquo; website will suffice.&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.seafile.com/en/home/&#34;&gt;Seafile&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a great tool for managing files. I moved to this from Nextcloud because I am of the philosophy that I would prefer services that do one thing excellently instead of many things well. Nextcloud is an incredible Office365 replacement, but I found myself using a fraction of what it was capable of providing. Enter Seafile. It is cloud file syncing with a robust encryption implementation, just what the doctor ordered.&lt;/p&gt;</description>
</item>
<item>
<title>The (un)common yellowthroat.</title>
<link>https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/</link>
<pubDate>Sun, 01 May 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/</guid>
<description>&lt;p&gt;My partner and I took a trip to the &lt;a href=&#34;https://ncbg.unc.edu/visit/mason-farm-biological-reserve/&#34;&gt;Mason Farm Biological Reserve&lt;/a&gt; the other day, and what a glorious day it was. This year, I&amp;rsquo;ve been quite busy in the lab, and missed a lot of the early spring warbler season, so I was very excited by the opportunity to check out the old stomping grounds.&lt;/p&gt;
&lt;p&gt;I brought the camera with me despite the fact we were going to be there around midday when the birds are much less active. I&amp;rsquo;m glad I did, because I got the best look at a common yellowthroat I&amp;rsquo;ve ever had.
&lt;span class=&#34;sidenote-number&#34;&gt;&lt;small class=&#34;sidenote&#34;&gt;
Normally these guys are flighty, staying close to the ground in small brush or tall grasses, but this one was putting on a proper show for the mating season. Even when you get a glimpse of one, it is usually just that, as they have jumped away before you can pull out the camera, taunting you with their &lt;a href=&#34;https://ebird.org/species/comyel#Modal-playlist&#34;&gt;iconic call&lt;/a&gt;.
&lt;/small&gt;&lt;/span&gt;
I was very pleased to capture a few choice shots of the bird. Hopefully there are more to come. While we were out, I also got a nice picture of a hermit thrush and a king snake.&lt;/p&gt;</description>
</item>
</channel>
</rss>

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

File diff suppressed because one or more lines are too long

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

View File

@ -0,0 +1,730 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Roasting coffee at home. ☕ | Zachary Billman</title>
<meta name="keywords" content="coffee">
<meta name="description" content="I, like many others, picked up a new hobby during the pandemic. Other people&rsquo;s hobbies may bring them joy. This could be for many reasons. There is the joy of creating something from scratch. You can revel in your thriftiness. You can embrace the pride when you recognize that your creation is on par (or better!) than what you can buy. I feel like these are embodied in the sourdough craze that caught fire early on in COVID.
Dare I say that I did this before it was cool? &#x1f60e; I baked two loaves of bread almost every weekend through med school. Maybe I should bring that back, it&rsquo;s been a while since I brought out the ole&rsquo; starter.
My pandemic hobby is similar, but different in that it often feels like a chore, costs more money, and often turns out worse than what I can buy. Of course, I am talking about how I&rsquo;ve started roasting my own coffee at home.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/posts/roasting-coffee-at-home/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://www.zacharybillman.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/posts/roasting-coffee-at-home/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="Roasting coffee at home. ☕" />
<meta property="og:description" content="I, like many others, picked up a new hobby during the pandemic. Other people&rsquo;s hobbies may bring them joy. This could be for many reasons. There is the joy of creating something from scratch. You can revel in your thriftiness. You can embrace the pride when you recognize that your creation is on par (or better!) than what you can buy. I feel like these are embodied in the sourdough craze that caught fire early on in COVID.
Dare I say that I did this before it was cool? &#x1f60e; I baked two loaves of bread almost every weekend through med school. Maybe I should bring that back, it&rsquo;s been a while since I brought out the ole&rsquo; starter.
My pandemic hobby is similar, but different in that it often feels like a chore, costs more money, and often turns out worse than what I can buy. Of course, I am talking about how I&rsquo;ve started roasting my own coffee at home." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://www.zacharybillman.com/posts/roasting-coffee-at-home/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2022-07-14T00:00:00+00:00" />
<meta property="article:modified_time" content="2022-07-14T00:00:00+00:00" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Roasting coffee at home. ☕"/>
<meta name="twitter:description" content="I, like many others, picked up a new hobby during the pandemic. Other people&rsquo;s hobbies may bring them joy. This could be for many reasons. There is the joy of creating something from scratch. You can revel in your thriftiness. You can embrace the pride when you recognize that your creation is on par (or better!) than what you can buy. I feel like these are embodied in the sourdough craze that caught fire early on in COVID.
Dare I say that I did this before it was cool? &#x1f60e; I baked two loaves of bread almost every weekend through med school. Maybe I should bring that back, it&rsquo;s been a while since I brought out the ole&rsquo; starter.
My pandemic hobby is similar, but different in that it often feels like a chore, costs more money, and often turns out worse than what I can buy. Of course, I am talking about how I&rsquo;ve started roasting my own coffee at home."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1 ,
"name": "Posts",
"item": "https://www.zacharybillman.com/posts/"
},
{
"@type": "ListItem",
"position": 2 ,
"name": "Roasting coffee at home. ☕",
"item": "https://www.zacharybillman.com/posts/roasting-coffee-at-home/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Roasting coffee at home. ☕",
"name": "Roasting coffee at home. ☕",
"description": "I, like many others, picked up a new hobby during the pandemic. Other people\u0026rsquo;s hobbies may bring them joy. This could be for many reasons. There is the joy of creating something from scratch. You can revel in your thriftiness. You can embrace the pride when you recognize that your creation is on par (or better!) than what you can buy. I feel like these are embodied in the sourdough craze that caught fire early on in COVID. Dare I say that I did this before it was cool? \u0026#x1f60e; I baked two loaves of bread almost every weekend through med school. Maybe I should bring that back, it\u0026rsquo;s been a while since I brought out the ole\u0026rsquo; starter. My pandemic hobby is similar, but different in that it often feels like a chore, costs more money, and often turns out worse than what I can buy. Of course, I am talking about how I\u0026rsquo;ve started roasting my own coffee at home.\n",
"keywords": [
"coffee"
],
"articleBody": "I, like many others, picked up a new hobby during the pandemic. Other peoples hobbies may bring them joy. This could be for many reasons. There is the joy of creating something from scratch. You can revel in your thriftiness. You can embrace the pride when you recognize that your creation is on par (or better!) than what you can buy. I feel like these are embodied in the sourdough craze that caught fire early on in COVID. Dare I say that I did this before it was cool? 😎 I baked two loaves of bread almost every weekend through med school. Maybe I should bring that back, its been a while since I brought out the ole starter. My pandemic hobby is similar, but different in that it often feels like a chore, costs more money, and often turns out worse than what I can buy. Of course, I am talking about how Ive started roasting my own coffee at home.\nIm not sure where this idea was planted into my brain. I dont think I know anyone who roasts their own beans, and I certainly didnt know how. I didnt even drink coffee regularly until after college! I guess that extra time on the computer sent me down a rabbithole I have yet to emerge from.\nFirst, I want to preface the following with a disclaimer: This is not a detailed guide about how to roast your own coffee. If you are interested, I recommend checking out the How To Roast Your Own Coffee guide at Sweet Marias as a starting point. There is also the /r/roasting subreddit if that is your cup of tea. My only warning is there will be a lot of smoke. Roast your coffee outside, for Petes sake!\nIt all started with a trusty popcorn popper. There are a few things you want when you roast coffee:\nAir hot enough to roast coffee Remove the chaff from the beans Turns out that a classic popcorn popper fits the bill, as long as it has an upwards airflow and doesnt let the chaff fall into the heating element. There is a bit of a cult following for the West Bend Poppery 2 model, but that one seemed a bit pricey, so I settled for a very capable popper from Nostalgia.\nFigure 1: I got a good bit of milage out of my popcorn popper. If you are interested in roasting your own coffee I would give it a whirl.\nThings were simple back then. I still bought most of the coffee I drank, but I roasted enough to enjoy some freshly roasted coffee as an occasional treat. I ordered 10 pounds of green beans from Sweet Marias and life was good.\nThen I became a bit of a coffee snob.\nI could only roast 100 grams of coffee at a time in the popcorn popper, which is only enough for one pot of coffee in the morning for me. So it was time to upgrade.\nI bought the SR800 fluid bed roaster, which upped my roasting capacity and gave me finer control on temperature and airflow. Suffice to say my roasts improved a lot! At this point, I would consider my coffee good enough to sell at a farmers market to break even.\nIf you ever find yourself on a coffee roasting forum and bring up the SR800, someone is bound to bring up the famous RazzoRoasting extension tube. If you look for advice for how to use the SR800, I swear its assumed that you have this very specific accessory. …And so I bought one.\nDont worry, that is the extent of all of my coffee spending (for now). I am a very satisfied coffee roaster now. Check out this quick series of images going from the green beans to a nearly finished product! I can spend about 45 minutes and go from nothing to nearly 2 pounds of roasted beans, enough for about a week and a half of coffee. Not bad! The only downside is that now I feel like I need to buy coffee from local roasters to get my fix. There are certainly crueler fates.\nAs a sign off, I will share something that surprised me about coffee roasting. When I roast coffee, the most important cue to determine if the coffee is roasted is the sound. Thats right, not the color, not the smell, but the sound. When heating up a coffee bean, the water trapped inside eventually bursts out of the bean in a rapid expansion. This is called “first crack”, and indicates that the coffee is roasted enough to be drinkable. The expansion also releases the chaff from the bean. If you continue heating up the bean, you will eventually reach “second crack”. I think a solid medium roast is taken out just before second crack, so I try to take my coffee out to this point and it hasnt proved me wrong yet.\nHappy coffee-ing! ☕\n",
"wordCount" : "831",
"inLanguage": "en",
"datePublished": "2022-07-14T00:00:00Z",
"dateModified": "2022-07-14T00:00:00Z",
"author":[{
"@type": "Person",
"name": "Zachary Billman"
}],
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://www.zacharybillman.com/posts/roasting-coffee-at-home/"
},
"publisher": {
"@type": "Organization",
"name": "Zachary Billman",
"logo": {
"@type": "ImageObject",
"url": "https://www.zacharybillman.com/favicon.ico"
}
}
}
</script>
</head>
<body class="" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://www.zacharybillman.com/categories/" title="categories">
<span>categories</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/" title="tags">
<span>tags</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<article class="post-single">
<header class="post-header">
<div class="breadcrumbs"><a href="https://www.zacharybillman.com/">Home</a>&nbsp;»&nbsp;<a href="https://www.zacharybillman.com/posts/">Posts</a></div>
<h1 class="post-title entry-hint-parent">
Roasting coffee at home. ☕
</h1>
<div class="post-meta"><span title='2022-07-14 00:00:00 +0000 UTC'>Thursday, July 14, 2022</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;Zachary Billman
</div>
</header>
<div class="post-content"><p>I, like many others, picked up a new hobby during the pandemic. Other people&rsquo;s hobbies may bring them joy. This could be for many reasons. There is the joy of creating something from scratch. You can revel in your thriftiness. You can embrace the pride when you recognize that your creation is on par (or better!) than what you can buy. I feel like these are embodied in the sourdough craze that caught fire early on in COVID.
<span class="sidenote-number"><small class="sidenote">
Dare I say that I did this before it was cool? &#x1f60e; I baked two loaves of bread almost every weekend through med school. Maybe I should bring that back, it&rsquo;s been a while since I brought out the ole&rsquo; starter.
</small></span>
My pandemic hobby is similar, but different in that it often feels like a chore, costs more money, and often turns out worse than what I can buy. Of course, I am talking about how I&rsquo;ve started roasting my own coffee at home.</p>
<p>I&rsquo;m not sure where this idea was planted into my brain. I don&rsquo;t think I know anyone who roasts their own beans, and I certainly didn&rsquo;t know how. I didn&rsquo;t even drink coffee regularly until after college! I guess that extra time on the computer sent me down a rabbithole I have yet to emerge from.</p>
<p>First, I want to preface the following with a disclaimer: This is not a detailed guide about how to roast your own coffee. If you are interested, I recommend checking out the <a href="https://library.sweetmarias.com/how-to-roast-your-own-coffee/">How To Roast Your Own Coffee guide at Sweet Maria&rsquo;s</a> as a starting point. There is also the /r/roasting subreddit if that is your cup of tea. My only warning is <strong>there will be a lot of smoke</strong>. Roast your coffee outside, for Pete&rsquo;s sake!</p>
<p>It all started with a trusty popcorn popper. There are a few things you want when you roast coffee:</p>
<ol>
<li>Air hot enough to roast coffee</li>
<li>Remove the chaff from the beans</li>
</ol>
<p>Turns out that a classic popcorn popper fits the bill, as long as it has an upwards airflow and doesn&rsquo;t let the chaff fall into the heating element. There is a bit of a cult following for the <a href="https://www.ebay.com/sch/i.html?_from=R40&amp;_trksid=p2334524.m570.l1313&amp;_nkw=west+bend+poppery+ii+82102&amp;_sacat=0&amp;LH_TitleDesc=0&amp;_odkw=west+bend+poppery+ii+82102&amp;_osacat=0">West Bend Poppery 2 model</a>, but that one seemed a bit pricey, so I settled for <a href="https://nostalgiaproducts.com/collections/popcorn/products/aph200red">a very capable popper from Nostalgia</a>.</p>
<figure><a href="./images/popcorn-popper.webp">
<img loading="lazy" src="./images/popcorn-popper.webp"
alt="Figure 1: I got a good bit of milage out of my popcorn popper. If you are interested in roasting your own coffee I would give it a whirl."/> </a><figcaption>
<p><span class="figure-number">Figure 1: </span>I got a good bit of milage out of my popcorn popper. If you are interested in roasting your own coffee I would give it a whirl.</p>
</figcaption>
</figure>
<p>Things were simple back then. I still bought most of the coffee I drank, but I roasted enough to enjoy some freshly roasted coffee as an occasional treat. I ordered 10 pounds of green beans from Sweet Maria&rsquo;s and life was good.</p>
<p>Then I became a bit of a coffee snob.</p>
<p>I could only roast 100 grams of coffee at a time in the popcorn popper, which is only enough for one pot of coffee in the morning for me. So it was time to upgrade.</p>
<p>I bought the <a href="https://www.sweetmarias.com/fresh-roast-sr800.html">SR800 fluid bed roaster</a>, which upped my roasting capacity and gave me finer control on temperature and airflow. Suffice to say my roasts improved a lot! At this point, I would consider my coffee good enough to sell at a farmer&rsquo;s market to break even.</p>
<p>If you ever find yourself on a coffee roasting forum and bring up the SR800, someone is bound to bring up the <a href="https://www.etsy.com/shop/RazzoRoasting?ref=simple-shop-header-name&amp;listing_id=1105001328">famous RazzoRoasting extension tube</a>. If you look for advice for how to use the SR800, I swear it&rsquo;s assumed that you have this very specific accessory. &hellip;And so I bought one.</p>
<p>Don&rsquo;t worry, that is the extent of all of my coffee spending (for now). I am a very satisfied coffee roaster now. Check out this quick series of images going from the green beans to a nearly finished product! I can spend about 45 minutes and go from nothing to nearly 2 pounds of roasted beans, enough for about a week and a half of coffee. Not bad! The only downside is that now I feel like I need to buy coffee from local roasters to get my fix. There are certainly crueler fates.</p>
<script src="/shortcode-gallery/jquery-3.7.1.min.js"></script>
<script src="/shortcode-gallery/lazy/jquery.lazy.min.js"></script>
<script src="/shortcode-gallery/swipebox/js/jquery.swipebox.min.js"></script>
<link rel="stylesheet" href="/shortcode-gallery/swipebox/css/swipebox.min.css">
<script src="/shortcode-gallery/justified_gallery/jquery.justifiedGallery.min.js"></script>
<link rel="stylesheet" href="/shortcode-gallery/justified_gallery/justifiedGallery.min.css"/>
<style>
</style>
<div id="gallery-2577ba5f2c5cee4b4a2ebe93e0d270fb-2-wrapper" class="gallery-wrapper">
<div id="gallery-2577ba5f2c5cee4b4a2ebe93e0d270fb-2" class="justified-gallery">
<div>
<a href="/posts/roasting-coffee-at-home/images/sr800/20210813_230329_F69FBAB6.jpg.modified.jpeg"
class="galleryImg"
data-description="SM-G981U<br/>27/5mm f/1.8 1/59sec ISO 64"
>
<img
width="450" height="600"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIACAAGAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&#43;Tl5ufo6ery8/T19vf4&#43;fr/2gAMAwEAAhEDEQA/AMLxUL231&#43;51S3hJE37xZCd5UHjHt&#43;HTise31rWvtQa0aZp2PVNxYn8K63UP7SWTS4IbZHkmVlYSOFyFAJ57dPStTbcy2jwswikYkMUboSByDV1GlsyIpvcs6eGe&#43;ja8WVpmsFEnJBDZ/wDrVo/Zrb/nnP8A9/3/APiqx7UGOad/mYxxJuJ9gTzS/wBrR&#43;q/99CvKlKtf3TVNPoY3iKTUnmsUjPmXKS712IVVQRjBOT1BNQWWu2728pluVLhhgITuxkE8fTNafhy6k1G9nnlQBo2ZgfQEcLXOaZZahaXhWOwdLd32u5fGMHH1/DvXqKHOtTKM77HV3sU1lLdWjSH95tRmPfIA/qazP7HT/nsK6HXSF1GzkkAaKdCCD2de/16VFvi/wBv/vqsnQcW&#43;VlRvbQ//9k="
class="lazy"
data-src="/posts/roasting-coffee-at-home/images/sr800/20210813_230329_F69FBAB6.jpg.modified_hu6402744208075864913.jpeg"
>
</a>
</div>
<div>
<a href="/posts/roasting-coffee-at-home/images/sr800/20210813_230602_992EAEDF.jpg.modified.jpeg"
class="galleryImg"
data-description="SM-G981U<br/>27/5mm f/1.8 1/59sec ISO 64"
>
<img
width="450" height="600"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIACAAGAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&#43;Tl5ufo6ery8/T19vf4&#43;fr/2gAMAwEAAhEDEQA/AMzxLruoafrVy1s91Hp9zuka3wArFhhtx5Gcj/DFRw/ELVNR1i2Zo1divkqqoOFJH61o6g15FbWUos1leWRYHjkOA271PbofzqxBb8&#43;X5UdvIrAusKhe4OM9/SnWlGKJgpNF6ZYU0DU0EI3rPIEYtyMkDH61x32ef&#43;7XV&#43;WWs5FAwr3YXnv84NWP7Nj9F/OuFVJR3LUrGPrU2pXmmWkasTNdyoY1SMfuzkEEntzjnis&#43;z1dvtV1bukkk0L&#43;XIeFAIbnnPsQBW1bXqaj4lNsq/LbP8rA9QvJ/UVm3fh67i8QzT&#43;YypLKZEWOEnzATkgt0BrvjTU91sZqpq7GxfWstpqDWWWKCYspHP8OQad5E3/PST8jV7X1aGa0vl6FTBL6eoP6H9KzvtkX99f8AvqsamFjzbgkpK5//2Q=="
class="lazy"
data-src="/posts/roasting-coffee-at-home/images/sr800/20210813_230602_992EAEDF.jpg.modified_hu14164182481772047530.jpeg"
>
</a>
</div>
<div>
<a href="/posts/roasting-coffee-at-home/images/sr800/20210813_230804_E30C896B.jpg.modified.jpeg"
class="galleryImg"
data-description="SM-G981U<br/>27/5mm f/1.8 1/59sec ISO 64"
>
<img
width="450" height="600"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIACAAGAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&#43;Tl5ufo6ery8/T19vf4&#43;fr/2gAMAwEAAhEDEQA/AIfGeq6jc/ZdQ057i282LDm3b5mCkMORggfN79KwD471I29rb8eVauGRdoOTnOSfxrpNSS80zRvOgi8xrSTbHu6FeRk85x92preHMWJrW2guCzcR4JHXocA8VVRxirkxTZZ0iUX2&#43;7uYmR5rWNmCZXBJY5OCO1XPJs/70n/fx/8A4uqTFki1CRAflULk8c7eP/QqwftF56NXnrnl5FpJ7mp4h&#43;3SaabeKaeZrtxEqhF&#43;UE9TgcdqwINRuI9aninWW4ltcpKY1wNw4ODjAGQeTXR295HqPiE2yplbVshh3xyT&#43;dZF3od0niGeZpo41llMijy8mUE5wOxPavQjHnvdGan2Nq9hltbh7Ri22eVWBbq3yg/&#43;y037K3&#43;R/wDWrS1jdFcWlzj5XjML&#43;m4cg/z/ACqr9oX&#43;8351hUw3vaOw0ro//9k="
class="lazy"
data-src="/posts/roasting-coffee-at-home/images/sr800/20210813_230804_E30C896B.jpg.modified_hu6780815551728018626.jpeg"
>
</a>
</div>
</div>
</div>
<script>
if (!("HSCGjQuery" in window)) {
if (!window.jQuery) {
throw new Error("jQuery is not loaded, hugo-shortcode-gallery wont work without it!");
}
window.HSCGjQuery = window.jQuery.noConflict(true);
}
;(function($) {
$( document ).ready(() => {
const gallery = $("#gallery-2577ba5f2c5cee4b4a2ebe93e0d270fb-2");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
$.extend({},
{ }
)
);
});
gallery.justifiedGallery($.extend(
{
rowHeight : "150",
margins : "5",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "justify",
captions : false,
},
{ }
));
});
})(window.HSCGjQuery)
</script>
<p>As a sign off, I will share something that surprised me about coffee roasting. When I roast coffee, the most important cue to determine if the coffee is roasted is the <em>sound</em>. That&rsquo;s right, not the color, not the smell, but the sound. When heating up a coffee bean, the water trapped inside eventually bursts out of the bean in a rapid expansion. This is called &ldquo;first crack&rdquo;, and indicates that the coffee is roasted enough to be drinkable. The expansion also releases the chaff from the bean. If you continue heating up the bean, you will eventually reach &ldquo;second crack&rdquo;. I think a solid medium roast is taken out just before second crack, so I try to take my coffee out to this point and it hasn&rsquo;t proved me wrong yet.</p>
<p>Happy coffee-ing! &#x2615;</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
<li><a href="https://www.zacharybillman.com/tags/coffee/">Coffee</a></li>
</ul>
<nav class="paginav">
<a class="prev" href="https://www.zacharybillman.com/posts/about-me/">
<span class="title">« Prev</span>
<br>
<span>About me. 👋</span>
</a>
<a class="next" href="https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/">
<span class="title">Next »</span>
<br>
<span>Using RSS feeds to keep on top of science.</span>
</a>
</nav>
</footer><script defer src="https://commento.zacharybillman.com/js/commento.js"></script>
<noscript>
Please enable JavaScript to view the
<a href="https://commento.io" rel="nofollow">
comments powered by Commento++.
</a>
</noscript>
<div id="commento"></div>
</article>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@ -0,0 +1,378 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Using RSS feeds to keep on top of science. | Zachary Billman</title>
<meta name="keywords" content="science">
<meta name="description" content="It is an age-old question: how can one keep up with the continuous output of science? I remember at the beginning of my PhD struggling to figure out how anyone found out when a new paper came out. &#x1f635; Did they sit on nature.com and spam the refresh button? Did they know when each journal released their latest issue?
Behold the power of RSS!
Most websites have a page that contains information about each subpage in a computer-readable format called RSS (Really Simple Syndication). Mine has one right here! These pages can be parsed by a number of RSS feed aggregators. The way these pages are set up make it such that they add any new information hosted at that domain. This is useful in the science world because you can find the RSS feed of a given journal, subscribe to it, then have every new article published online be delivered right to you.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://www.zacharybillman.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="Using RSS feeds to keep on top of science." />
<meta property="og:description" content="It is an age-old question: how can one keep up with the continuous output of science? I remember at the beginning of my PhD struggling to figure out how anyone found out when a new paper came out. &#x1f635; Did they sit on nature.com and spam the refresh button? Did they know when each journal released their latest issue?
Behold the power of RSS!
Most websites have a page that contains information about each subpage in a computer-readable format called RSS (Really Simple Syndication). Mine has one right here! These pages can be parsed by a number of RSS feed aggregators. The way these pages are set up make it such that they add any new information hosted at that domain. This is useful in the science world because you can find the RSS feed of a given journal, subscribe to it, then have every new article published online be delivered right to you." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2022-07-13T00:00:00+00:00" />
<meta property="article:modified_time" content="2022-07-13T00:00:00+00:00" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Using RSS feeds to keep on top of science."/>
<meta name="twitter:description" content="It is an age-old question: how can one keep up with the continuous output of science? I remember at the beginning of my PhD struggling to figure out how anyone found out when a new paper came out. &#x1f635; Did they sit on nature.com and spam the refresh button? Did they know when each journal released their latest issue?
Behold the power of RSS!
Most websites have a page that contains information about each subpage in a computer-readable format called RSS (Really Simple Syndication). Mine has one right here! These pages can be parsed by a number of RSS feed aggregators. The way these pages are set up make it such that they add any new information hosted at that domain. This is useful in the science world because you can find the RSS feed of a given journal, subscribe to it, then have every new article published online be delivered right to you."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1 ,
"name": "Posts",
"item": "https://www.zacharybillman.com/posts/"
},
{
"@type": "ListItem",
"position": 2 ,
"name": "Using RSS feeds to keep on top of science.",
"item": "https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Using RSS feeds to keep on top of science.",
"name": "Using RSS feeds to keep on top of science.",
"description": "It is an age-old question: how can one keep up with the continuous output of science? I remember at the beginning of my PhD struggling to figure out how anyone found out when a new paper came out. \u0026#x1f635; Did they sit on nature.com and spam the refresh button? Did they know when each journal released their latest issue?\nBehold the power of RSS! Most websites have a page that contains information about each subpage in a computer-readable format called RSS (Really Simple Syndication). Mine has one right here! These pages can be parsed by a number of RSS feed aggregators. The way these pages are set up make it such that they add any new information hosted at that domain. This is useful in the science world because you can find the RSS feed of a given journal, subscribe to it, then have every new article published online be delivered right to you.\n",
"keywords": [
"science"
],
"articleBody": "It is an age-old question: how can one keep up with the continuous output of science? I remember at the beginning of my PhD struggling to figure out how anyone found out when a new paper came out. 😵 Did they sit on nature.com and spam the refresh button? Did they know when each journal released their latest issue?\nBehold the power of RSS! Most websites have a page that contains information about each subpage in a computer-readable format called RSS (Really Simple Syndication). Mine has one right here! These pages can be parsed by a number of RSS feed aggregators. The way these pages are set up make it such that they add any new information hosted at that domain. This is useful in the science world because you can find the RSS feed of a given journal, subscribe to it, then have every new article published online be delivered right to you.\nThere are a plethora of RSS feed aggregators you can pick from manage your feeds. I have previously used Feedly and Inoreader, which are great free solutions, but have moved on to selfhosting my own instance of FreshRSS.\nAfter making an account at your friendly local RSS feed aggregator, you can add whatever feeds your heart desires. To find a journals rss feed, I often just search “$JOURNAL_NAME rss feed” and poke around until I find something that looks right. Most of the aggregators will test the feed out first to make sure that you are trying to add a legitimate one. Here are a few of the heavy hitters to get you started:\nhttp://feeds.nature.com/nature/rss/current https://www.science.org/rss/express.xml https://www.cell.com/cell/inpress.rss Nothing like a constant stream of Cell, Science, and Nature to make your project feel like a real winner, eh?\nHere is what my own site looks like.\nFigure 1: My current FreshRSS setup. On the left I have my feeds separated into folders. In the middle you can see the titles of papers that appear in my feed.\nAnd after I hit J to move to the first item in the feed.\nFigure 2: With a title selected, you can see the abstract and authors.\nAfter collecting all of your desired RSS feeds, you cannot forego your responsibility of actually reading them! Most RSS feed aggregators have shortcuts to move through titles quickly (Typically J to move on to the next one and K to move up.) They always seem to use vi keybindings. A bunch of computer nerds have really cornered the keybinding market. I have let them take over my computing life. Each morning when I get into the lab, I quickly set up something, then head to my desk to hit J until the counter reaches zero.\nBut what about my very specific field? You can subscribe to all of the journals you want, but that doesnt make the papers with your specific interests pop out. Fortunately, the NIH has this exact circumstance in mind.\nWhen you make a new search on PubMed you might notice the “Create RSS” button. Give it a click, then you will have a personal link you can add to your favorite RSS feed aggregator.\nFigure 3: Somehow I never noticed this button until I needed it.\nThis changed the game for me for keeping up with papers. Unfortunately, it doesnt solve the problem of library management, or actually getting around to reading the papers you care about. I will leave library management as an exercise for the interested reader. Heres a tip, the best solution uses the Zotero citation manager. Bonus points for using Zotfile for renaming your PDFs and Better BibTex for Zotero. 😉 I hope this helps you get your eyeballs on that science you crave. If you have solved the problem of accruing papers to read faster than you read them, let me know.\n",
"wordCount" : "638",
"inLanguage": "en",
"datePublished": "2022-07-13T00:00:00Z",
"dateModified": "2022-07-13T00:00:00Z",
"author":[{
"@type": "Person",
"name": "Zachary Billman"
}],
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/"
},
"publisher": {
"@type": "Organization",
"name": "Zachary Billman",
"logo": {
"@type": "ImageObject",
"url": "https://www.zacharybillman.com/favicon.ico"
}
}
}
</script>
</head>
<body class="" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://www.zacharybillman.com/categories/" title="categories">
<span>categories</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/" title="tags">
<span>tags</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<article class="post-single">
<header class="post-header">
<div class="breadcrumbs"><a href="https://www.zacharybillman.com/">Home</a>&nbsp;»&nbsp;<a href="https://www.zacharybillman.com/posts/">Posts</a></div>
<h1 class="post-title entry-hint-parent">
Using RSS feeds to keep on top of science.
</h1>
<div class="post-meta"><span title='2022-07-13 00:00:00 +0000 UTC'>Wednesday, July 13, 2022</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Zachary Billman
</div>
</header>
<div class="post-content"><p>It is an age-old question: how can one keep up with the continuous output of science? I remember at the beginning of my PhD struggling to figure out how anyone found out when a new paper came out. &#x1f635; Did they sit on nature.com and spam the refresh button? Did they know when each journal released their latest issue?</p>
<h2 id="behold-the-power-of-rss">Behold the power of RSS!<a hidden class="anchor" aria-hidden="true" href="#behold-the-power-of-rss">#</a></h2>
<p>Most websites have a page that contains information about each subpage in a computer-readable format called RSS (Really Simple Syndication). <a href="https://zacharybillman.com/index.xml">Mine has one right here!</a> These pages can be parsed by a number of RSS feed aggregators. The way these pages are set up make it such that they add any new information hosted at that domain. This is useful in the science world because you can find the RSS feed of a given journal, subscribe to it, then have every new article published online be delivered right to you.</p>
<p>There are a plethora of RSS feed aggregators you can pick from manage your feeds. I have previously used <a href="https://feedly.com/">Feedly</a> and <a href="https://www.inoreader.com/">Inoreader</a>, which are great free solutions, but have moved on to selfhosting my own instance of <a href="https://www.freshrss.org/">FreshRSS</a>.</p>
<p>After making an account at your friendly local RSS feed aggregator, you can add whatever feeds your heart desires. To find a journal&rsquo;s rss feed, I often just search &ldquo;$JOURNAL_NAME rss feed&rdquo; and poke around until I find something that looks right. Most of the aggregators will test the feed out first to make sure that you are trying to add a legitimate one. Here are a few of the heavy hitters to get you started:</p>
<ol>
<li><a href="http://feeds.nature.com/nature/rss/current">http://feeds.nature.com/nature/rss/current</a></li>
<li><a href="https://www.science.org/rss/express.xml">https://www.science.org/rss/express.xml</a></li>
<li><a href="https://www.cell.com/cell/inpress.rss">https://www.cell.com/cell/inpress.rss</a></li>
</ol>
<p>Nothing like a constant stream of Cell, Science, and Nature to make your project feel like a real winner, eh?</p>
<p>Here is what my own site looks like.</p>
<p><a id="figure--feed1"></a></p>
<figure><a href="./images/feed1.webp">
<img loading="lazy" src="./images/feed1.webp"
alt="Figure 1: My current FreshRSS setup. On the left I have my feeds separated into folders. In the middle you can see the titles of papers that appear in my feed."/> </a><figcaption>
<p><span class="figure-number">Figure 1: </span>My current FreshRSS setup. On the left I have my feeds separated into folders. In the middle you can see the titles of papers that appear in my feed.</p>
</figcaption>
</figure>
<p>And after I hit <code>J</code> to move to the first item in the feed.</p>
<p><a id="figure--feed2"></a></p>
<figure><a href="./images/feed2.webp">
<img loading="lazy" src="./images/feed2.webp"
alt="Figure 2: With a title selected, you can see the abstract and authors."/> </a><figcaption>
<p><span class="figure-number">Figure 2: </span>With a title selected, you can see the abstract and authors.</p>
</figcaption>
</figure>
<p>After collecting all of your desired RSS feeds, you cannot forego your responsibility of actually reading them! Most RSS feed aggregators have shortcuts to move through titles quickly (Typically <code>J</code> to move on to the next one and <code>K</code> to move up.)
<span class="sidenote-number"><small class="sidenote">
They always seem to use <a href="https://hea-www.harvard.edu/~fine/Tech/vi.html">vi keybindings</a>. A bunch of computer nerds have really cornered the keybinding market. I have let them take over my computing life.
</small></span>
Each morning when I get into the lab, I quickly set up something, then head to my desk to hit <code>J</code> until the counter reaches zero.</p>
<h2 id="but-what-about-my-very-specific-field">But what about my very specific field?<a hidden class="anchor" aria-hidden="true" href="#but-what-about-my-very-specific-field">#</a></h2>
<p>You can subscribe to all of the journals you want, but that doesn&rsquo;t make the papers with your specific interests pop out. Fortunately, the NIH has this <em>exact</em> circumstance in mind.</p>
<p>When you make a new search on PubMed you might notice the &ldquo;Create RSS&rdquo; button. Give it a click, then you will have a personal link you can add to your favorite RSS feed aggregator.</p>
<p><a id="figure--feed3"></a></p>
<figure><a href="./images/feed3.webp">
<img loading="lazy" src="./images/feed3.webp"
alt="Figure 3: Somehow I never noticed this button until I needed it."/> </a><figcaption>
<p><span class="figure-number">Figure 3: </span>Somehow I never noticed this button until I needed it.</p>
</figcaption>
</figure>
<p>This changed the game for me for keeping up with papers. Unfortunately, it doesn&rsquo;t solve the problem of library management, or actually getting around to reading the papers you care about. I will leave library management as an exercise for the interested reader.
<span class="sidenote-number"><small class="sidenote">
Here&rsquo;s a tip, the best solution uses the <a href="https://www.zotero.org/">Zotero citation manager</a>. Bonus points for using <a href="http://zotfile.com/">Zotfile for renaming your PDFs</a> and <a href="https://retorque.re/zotero-better-bibtex/">Better BibTex for Zotero</a>. &#x1f609;
</small></span>
I hope this helps you get your eyeballs on that science you crave. If you have solved the problem of accruing papers to read faster than you read them, let me know.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
<li><a href="https://www.zacharybillman.com/tags/science/">Science</a></li>
</ul>
<nav class="paginav">
<a class="prev" href="https://www.zacharybillman.com/posts/roasting-coffee-at-home/">
<span class="title">« Prev</span>
<br>
<span>Roasting coffee at home. ☕</span>
</a>
<a class="next" href="https://www.zacharybillman.com/posts/my-selfhosting-journey/">
<span class="title">Next »</span>
<br>
<span>My selfhosting journey.</span>
</a>
</nav>
</footer><script defer src="https://commento.zacharybillman.com/js/commento.js"></script>
<noscript>
Please enable JavaScript to view the
<a href="https://commento.io" rel="nofollow">
comments powered by Commento++.
</a>
</noscript>
<div id="commento"></div>
</article>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 638 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 818 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

View File

@ -0,0 +1,855 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>The (un)common yellowthroat. | Zachary Billman</title>
<meta name="keywords" content="masonfarm, yellowthroat, birding">
<meta name="description" content="My partner and I took a trip to the Mason Farm Biological Reserve the other day, and what a glorious day it was. This year, I&rsquo;ve been quite busy in the lab, and missed a lot of the early spring warbler season, so I was very excited by the opportunity to check out the old stomping grounds.
I brought the camera with me despite the fact we were going to be there around midday when the birds are much less active. I&rsquo;m glad I did, because I got the best look at a common yellowthroat I&rsquo;ve ever had.
Normally these guys are flighty, staying close to the ground in small brush or tall grasses, but this one was putting on a proper show for the mating season. Even when you get a glimpse of one, it is usually just that, as they have jumped away before you can pull out the camera, taunting you with their iconic call.
I was very pleased to capture a few choice shots of the bird. Hopefully there are more to come. While we were out, I also got a nice picture of a hermit thrush and a king snake.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://www.zacharybillman.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="The (un)common yellowthroat." />
<meta property="og:description" content="My partner and I took a trip to the Mason Farm Biological Reserve the other day, and what a glorious day it was. This year, I&rsquo;ve been quite busy in the lab, and missed a lot of the early spring warbler season, so I was very excited by the opportunity to check out the old stomping grounds.
I brought the camera with me despite the fact we were going to be there around midday when the birds are much less active. I&rsquo;m glad I did, because I got the best look at a common yellowthroat I&rsquo;ve ever had.
Normally these guys are flighty, staying close to the ground in small brush or tall grasses, but this one was putting on a proper show for the mating season. Even when you get a glimpse of one, it is usually just that, as they have jumped away before you can pull out the camera, taunting you with their iconic call.
I was very pleased to capture a few choice shots of the bird. Hopefully there are more to come. While we were out, I also got a nice picture of a hermit thrush and a king snake." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2022-05-01T00:00:00+00:00" />
<meta property="article:modified_time" content="2022-05-01T00:00:00+00:00" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="The (un)common yellowthroat."/>
<meta name="twitter:description" content="My partner and I took a trip to the Mason Farm Biological Reserve the other day, and what a glorious day it was. This year, I&rsquo;ve been quite busy in the lab, and missed a lot of the early spring warbler season, so I was very excited by the opportunity to check out the old stomping grounds.
I brought the camera with me despite the fact we were going to be there around midday when the birds are much less active. I&rsquo;m glad I did, because I got the best look at a common yellowthroat I&rsquo;ve ever had.
Normally these guys are flighty, staying close to the ground in small brush or tall grasses, but this one was putting on a proper show for the mating season. Even when you get a glimpse of one, it is usually just that, as they have jumped away before you can pull out the camera, taunting you with their iconic call.
I was very pleased to capture a few choice shots of the bird. Hopefully there are more to come. While we were out, I also got a nice picture of a hermit thrush and a king snake."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1 ,
"name": "Posts",
"item": "https://www.zacharybillman.com/posts/"
},
{
"@type": "ListItem",
"position": 2 ,
"name": "The (un)common yellowthroat.",
"item": "https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "The (un)common yellowthroat.",
"name": "The (un)common yellowthroat.",
"description": "My partner and I took a trip to the Mason Farm Biological Reserve the other day, and what a glorious day it was. This year, I\u0026rsquo;ve been quite busy in the lab, and missed a lot of the early spring warbler season, so I was very excited by the opportunity to check out the old stomping grounds.\nI brought the camera with me despite the fact we were going to be there around midday when the birds are much less active. I\u0026rsquo;m glad I did, because I got the best look at a common yellowthroat I\u0026rsquo;ve ever had. Normally these guys are flighty, staying close to the ground in small brush or tall grasses, but this one was putting on a proper show for the mating season. Even when you get a glimpse of one, it is usually just that, as they have jumped away before you can pull out the camera, taunting you with their iconic call. I was very pleased to capture a few choice shots of the bird. Hopefully there are more to come. While we were out, I also got a nice picture of a hermit thrush and a king snake.\n",
"keywords": [
"masonfarm", "yellowthroat", "birding"
],
"articleBody": "My partner and I took a trip to the Mason Farm Biological Reserve the other day, and what a glorious day it was. This year, Ive been quite busy in the lab, and missed a lot of the early spring warbler season, so I was very excited by the opportunity to check out the old stomping grounds.\nI brought the camera with me despite the fact we were going to be there around midday when the birds are much less active. Im glad I did, because I got the best look at a common yellowthroat Ive ever had. Normally these guys are flighty, staying close to the ground in small brush or tall grasses, but this one was putting on a proper show for the mating season. Even when you get a glimpse of one, it is usually just that, as they have jumped away before you can pull out the camera, taunting you with their iconic call. I was very pleased to capture a few choice shots of the bird. Hopefully there are more to come. While we were out, I also got a nice picture of a hermit thrush and a king snake.\nThese images have been compressed quite a bit for a lighter internet footprint. These have all been resized to 25% of their original size. If you would like the full sized images, let me know and I will send you a link!\n",
"wordCount" : "237",
"inLanguage": "en",
"datePublished": "2022-05-01T00:00:00Z",
"dateModified": "2022-05-01T00:00:00Z",
"author":[{
"@type": "Person",
"name": "Zachary Billman"
}],
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/"
},
"publisher": {
"@type": "Organization",
"name": "Zachary Billman",
"logo": {
"@type": "ImageObject",
"url": "https://www.zacharybillman.com/favicon.ico"
}
}
}
</script>
</head>
<body class="" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://www.zacharybillman.com/categories/" title="categories">
<span>categories</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/" title="tags">
<span>tags</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<article class="post-single">
<header class="post-header">
<div class="breadcrumbs"><a href="https://www.zacharybillman.com/">Home</a>&nbsp;»&nbsp;<a href="https://www.zacharybillman.com/posts/">Posts</a></div>
<h1 class="post-title entry-hint-parent">
The (un)common yellowthroat.
</h1>
<div class="post-meta"><span title='2022-05-01 00:00:00 +0000 UTC'>Sunday, May 1, 2022</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Zachary Billman
</div>
</header>
<div class="post-content"><p>My partner and I took a trip to the <a href="https://ncbg.unc.edu/visit/mason-farm-biological-reserve/">Mason Farm Biological Reserve</a> the other day, and what a glorious day it was. This year, I&rsquo;ve been quite busy in the lab, and missed a lot of the early spring warbler season, so I was very excited by the opportunity to check out the old stomping grounds.</p>
<p>I brought the camera with me despite the fact we were going to be there around midday when the birds are much less active. I&rsquo;m glad I did, because I got the best look at a common yellowthroat I&rsquo;ve ever had.
<span class="sidenote-number"><small class="sidenote">
Normally these guys are flighty, staying close to the ground in small brush or tall grasses, but this one was putting on a proper show for the mating season. Even when you get a glimpse of one, it is usually just that, as they have jumped away before you can pull out the camera, taunting you with their <a href="https://ebird.org/species/comyel#Modal-playlist">iconic call</a>.
</small></span>
I was very pleased to capture a few choice shots of the bird. Hopefully there are more to come. While we were out, I also got a nice picture of a hermit thrush and a king snake.</p>
<script src="/shortcode-gallery/jquery-3.7.1.min.js"></script>
<script src="/shortcode-gallery/lazy/jquery.lazy.min.js"></script>
<script src="/shortcode-gallery/swipebox/js/jquery.swipebox.min.js"></script>
<link rel="stylesheet" href="/shortcode-gallery/swipebox/css/swipebox.min.css">
<script src="/shortcode-gallery/justified_gallery/jquery.justifiedGallery.min.js"></script>
<link rel="stylesheet" href="/shortcode-gallery/justified_gallery/justifiedGallery.min.css"/>
<style>
</style>
<div id="gallery-68aaf778aad9fccc5fd7ac06d930c32d-1-wrapper" class="gallery-wrapper">
<div id="gallery-68aaf778aad9fccc5fd7ac06d930c32d-1" class="justified-gallery">
<div>
<a href="/posts/the-uncommon-yellowthroat/images/IMG_3028.JPG"
class="galleryImg"
data-description="Canon EOS REBEL T3i + EF-S55-250mm f/4-5.6 IS STM<br/>250mm f/5.6 1/320sec ISO 500"
>
<img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&#43;Tl5ufo6ery8/T19vf4&#43;fr/2gAMAwEAAhEDEQA/AK/l2k5W3lyiqoG0LtII45/Lr9aBJJFuilMjGNsiQjABx6U3T55Y9MjlktdyyKFkOOueCOo/&#43;v6064VIAHhlBWQbQARhm554PBHT/wDXXmJWbTMWV7yQTrG0qooaQZXIBGSM5x3I7HNZ00sKB1eFGx8yNnpznHT3P4VfeApbrI0SIA2BIWyWI5HHf8OuRWHdOSsnyOHBwCO3Pp&#43;IreNnogudBpt7NcJDvdv32dwznOAMZ9epp9jc&#43;dLJGIkURhdp6nrj&#43;VVNG&#43;5Z/wDAv/QVqTSv&#43;Pu4&#43;i/&#43;hCs60UoXQ2Nvd0qNEJZB5sjRsS2Rkd8f0&#43;lYaP5ySEfL5UDHAPXqfwrdm/1if9fT/wBKwLX/AFd1/wBcG/ka1pDR/9k="
class="lazy"
data-src="/posts/the-uncommon-yellowthroat/images/IMG_3028_hu4412704915955603894.JPG"
>
</a>
</div>
<div>
<a href="/posts/the-uncommon-yellowthroat/images/IMG_3012.JPG"
class="galleryImg"
data-description="Canon EOS REBEL T3i + EF-S55-250mm f/4-5.6 IS STM<br/>200mm f/5.6 1/250sec ISO 500"
>
<img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&#43;Tl5ufo6ery8/T19vf4&#43;fr/2gAMAwEAAhEDEQA/AK0VskcCPbFQjDJA53ZGcH1FRQQIlykTnK7wM44AOTtx&#43;ntimadJFHGysCTI2BvOQB/j1HarTwQSiR1uBhHABwQTkdccdMH8DXnrQxLhtA2lOJwPPSI4ZcnAxyOOv/16wJ7AJugIMI4ZmZh8xI7DsMjvWrc70tkt42LHdtLtkKSOwHfpWdqEMjS&#43;a0wmaZfmAYgL6bu3UVpztq1yrkWnJHK8bYf5t2QWyOn/AOqtHUClu7uqBcxgME&#43;UEknms/SOsP0b&#43;VXtY6P/ALi/zNY3ftLCJQyz3y2soYi2ZolIbHTGOPof/r1W1CxVZfKEh5K8kerHjjtzU8P/ACHJ/wDr5f8A9lp&#43;o/8AH6PrH/6FTk7bdv8AIZ//2Q=="
class="lazy"
data-src="/posts/the-uncommon-yellowthroat/images/IMG_3012_hu5786597775758153856.JPG"
>
</a>
</div>
<div>
<a href="/posts/the-uncommon-yellowthroat/images/IMG_3004.JPG"
class="galleryImg"
data-description="Canon EOS REBEL T3i + EF-S55-250mm f/4-5.6 IS STM<br/>55mm f/4.5 1/160sec ISO 100"
>
<img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&#43;Tl5ufo6ery8/T19vf4&#43;fr/2gAMAwEAAhEDEQA/APM9N0y61Cby4IzheZJCpKxj1bAOBXTap4Nl0jyt04m83/VuP&#43;WnTOB/CBkZz61Boc&#43;p2dnPax7Y7Wf/AFquuS/H1z&#43;VdZo2uWVhasbyKaWXzDIqnBAZskkc8HIXP1rBzV7Csc1q&#43;jXmkQwXRtCgkdiA6jkhzjH4Afhj1rNO68dtyqHY7cKMfpXZ&#43;K9Vttakj8mBgFjXDljyTgkbeg5J/Ksu106BUfLkh2B&#43;VeuD0Oe3P6VlKUU9ASuxmnxiZd2WXCbxz3qbUQIzCAB&#43;9JB9BgHn&#43;VR6R/qz/wBcf61Jqv37T/eb&#43;Rrnfx2FLcfplut9dw2j/KGK5ZevIX/E10fiO5jsrCDT7O2SGFlBPJLEcNgnjI571g&#43;H/wDkMwfWP&#43;S1reK/v23/AFzH/oK1qnaDsKJ//9k="
class="lazy"
data-src="/posts/the-uncommon-yellowthroat/images/IMG_3004_hu13587546115196505792.JPG"
>
</a>
</div>
<div>
<a href="/posts/the-uncommon-yellowthroat/images/IMG_3003.JPG"
class="galleryImg"
data-description="Canon EOS REBEL T3i + EF-S55-250mm f/4-5.6 IS STM<br/>169mm f/5.6 1/320sec ISO 2500"
>
<img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&#43;Tl5ufo6ery8/T19vf4&#43;fr/2gAMAwEAAhEDEQA/AMTw4kKzpvZBGSF3EZB9&#43;fSuz1JFgCyRyM0EjMqsxByRweR1rgrGN7Z3IuYxIv3lZh&#43;XB4rROpXj4Z5IoxJyNiltxJ75OM&#43;9Yyhczsa0lwnOGJx15/pVgeKItIs2tJ4Fl4YxybQSCwGOG7jNc/c3Tch50Z3Xd5bAKy&#43;3HfNQKqQzw3s0RUyoThCcjB68g8/nThBRGlYz9GuAr5WFD5ZBO/5snPXNaOoXLapcrcSZV3IBIb0GB/KsjR/vSfh/StBP&#43;WP&#43;9/jVjGQ7IopFC5dcsHJyRiq1xdO1ukhRCJMqyleODjI9KsDrN/ut/WqE3/HjB/vv/OgaP//Z"
class="lazy"
data-src="/posts/the-uncommon-yellowthroat/images/IMG_3003_hu6247510896505031628.JPG"
>
</a>
</div>
<div>
<a href="/posts/the-uncommon-yellowthroat/images/IMG_3000.JPG"
class="galleryImg"
data-description="Canon EOS REBEL T3i + EF-S55-250mm f/4-5.6 IS STM<br/>250mm f/5.6 1/400sec ISO 1000"
>
<img
width="600" height="400"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&#43;Tl5ufo6ery8/T19vf4&#43;fr/2gAMAwEAAhEDEQA/AMmwsSdRjjlZYsxZDNkg7WB59vmrWbRotzNcEswZWZlyoPr/AErIuS&#43;m6uiTH97bYUc9QRx3&#43;lbG65mWSJAAsqkli3OcZA4HFcc&#43;e/KgTRBd6W8JKoTMnlFtoJzjIrEvbJ2Z1DOSsRJCDjPORn8BXQTXcixQpvRpfKcSMONpHBzz2Bzn&#43;dZdxJd3Ec0kgjUyqfMzH91SQMj8x&#43;tRDR2KZDq17Le615soQMWOdq43YGOa27O7PnXKModVBHJxkAY7Vzl1/wAhT8WrbtP&#43;Pm7&#43;r/0rbmfN/XmZ2MW8lY3BUHapj6D3FO1BWSKRHcuclQQSOgB/Hmorr/j6H/XNan1T&#43;P8A32/9BFTGKsyj/9k="
class="lazy"
data-src="/posts/the-uncommon-yellowthroat/images/IMG_3000_hu16922268096441393674.JPG"
>
</a>
</div>
</div>
</div>
<script>
if (!("HSCGjQuery" in window)) {
if (!window.jQuery) {
throw new Error("jQuery is not loaded, hugo-shortcode-gallery wont work without it!");
}
window.HSCGjQuery = window.jQuery.noConflict(true);
}
;(function($) {
$( document ).ready(() => {
const gallery = $("#gallery-68aaf778aad9fccc5fd7ac06d930c32d-1");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
$.extend({},
{ }
)
);
});
gallery.justifiedGallery($.extend(
{
rowHeight : "150",
margins : "5",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "justify",
captions : false,
},
{ }
));
});
})(window.HSCGjQuery)
</script>
<p>These images have been compressed quite a bit for a lighter internet footprint. These have all been resized to 25% of their original size. If you would like the full sized images, let me know and I will send you a link!</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
<li><a href="https://www.zacharybillman.com/tags/masonfarm/">Masonfarm</a></li>
<li><a href="https://www.zacharybillman.com/tags/yellowthroat/">Yellowthroat</a></li>
<li><a href="https://www.zacharybillman.com/tags/birding/">Birding</a></li>
</ul>
<nav class="paginav">
<a class="prev" href="https://www.zacharybillman.com/posts/zpb-current-selfhosted/">
<span class="title">« Prev</span>
<br>
<span>What I&#39;m currently selfhosting.</span>
</a>
</nav>
</footer><script defer src="https://commento.zacharybillman.com/js/commento.js"></script>
<noscript>
Please enable JavaScript to view the
<a href="https://commento.io" rel="nofollow">
comments powered by Commento++.
</a>
</noscript>
<div id="commento"></div>
</article>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

3
public/robots.txt Normal file
View File

@ -0,0 +1,3 @@
User-agent: *
Disallow:
Sitemap: https://www.zacharybillman.com/sitemap.xml

244
public/search/index.html Normal file
View File

@ -0,0 +1,244 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Search | Zachary Billman</title>
<meta name="keywords" content="">
<meta name="description" content="search">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/search/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style"><link crossorigin="anonymous" rel="preload" as="fetch" href="../index.json">
<script defer crossorigin="anonymous" src="/assets/js/search.64f876b979a1e5faa72d8509772757a2752847c30d6fed862cd77b3d912cc135.js" integrity="sha256-ZPh2uXmh5fqnLYUJdydXonUoR8MNb&#43;2GLNd7PZEswTU="></script>
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://www.zacharybillman.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/search/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="Search" />
<meta property="og:description" content="search" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://www.zacharybillman.com/search/" /><meta property="article:section" content="" />
<meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Search"/>
<meta name="twitter:description" content="search"/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1 ,
"name": "Search",
"item": "https://www.zacharybillman.com/search/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Search",
"name": "Search",
"description": "search",
"keywords": [
],
"articleBody": "",
"wordCount" : "0",
"inLanguage": "en",
"datePublished": "0001-01-01T00:00:00Z",
"dateModified": "0001-01-01T00:00:00Z",
"author":{
"@type": "Person",
"name": "Zachary Billman"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://www.zacharybillman.com/search/"
},
"publisher": {
"@type": "Organization",
"name": "Zachary Billman",
"logo": {
"@type": "ImageObject",
"url": "https://www.zacharybillman.com/favicon.ico"
}
}
}
</script>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://www.zacharybillman.com/categories/" title="categories">
<span>categories</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/" title="tags">
<span>tags</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span class="active">search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<header class="page-header">
<h1>Search <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="11" cy="11" r="8"></circle>
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
</svg>
</h1>
<div class="post-meta"></div>
</header>
<div id="searchbox">
<input id="searchInput" autofocus placeholder="Search posts."
aria-label="search" type="search" autocomplete="off" maxlength="64">
<ul id="searchResults" aria-label="search results"></ul>
</div>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,22 @@
Copyright (c) 2018 Miro Mannino
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,96 @@
/*!
* justifiedGallery - v3.7.0
* http://miromannino.github.io/Justified-Gallery/
* Copyright (c) 2018 Miro Mannino
* Licensed under the MIT license.
*/
.justified-gallery {
width: 100%;
position: relative;
overflow: hidden;
}
.justified-gallery > a,
.justified-gallery > div,
.justified-gallery > figure {
position: absolute;
display: inline-block;
overflow: hidden;
/* background: #888888; To have gray placeholders while the gallery is loading with waitThumbnailsLoad = false */
filter: "alpha(opacity=10)";
opacity: 0.1;
margin: 0;
padding: 0;
}
.justified-gallery > a > img,
.justified-gallery > div > img,
.justified-gallery > figure > img,
.justified-gallery > a > a > img,
.justified-gallery > div > a > img,
.justified-gallery > figure > a > img {
position: absolute;
top: 50%;
left: 50%;
margin: 0;
padding: 0;
border: none;
filter: "alpha(opacity=0)";
opacity: 0;
}
.justified-gallery > a > .caption,
.justified-gallery > div > .caption,
.justified-gallery > figure > .caption {
display: none;
position: absolute;
bottom: 0;
padding: 5px;
background-color: #000000;
left: 0;
right: 0;
margin: 0;
color: white;
font-size: 12px;
font-weight: 300;
font-family: sans-serif;
}
.justified-gallery > a > .caption.caption-visible,
.justified-gallery > div > .caption.caption-visible,
.justified-gallery > figure > .caption.caption-visible {
display: initial;
filter: "alpha(opacity=70)";
opacity: 0.7;
transition: opacity 500ms ease-in;
}
.justified-gallery > .entry-visible {
filter: "alpha(opacity=100)";
opacity: 1;
background: none;
}
.justified-gallery > .entry-visible > img,
.justified-gallery > .entry-visible > a > img {
filter: "alpha(opacity=100)";
opacity: 1;
transition: opacity 500ms ease-in;
}
.justified-gallery > .jg-filtered {
display: none;
}
.justified-gallery > .spinner {
position: absolute;
bottom: 0;
margin-left: -24px;
padding: 10px 0 10px 0;
left: 50%;
filter: "alpha(opacity=100)";
opacity: 1;
overflow: initial;
}
.justified-gallery > .spinner > span {
display: inline-block;
filter: "alpha(opacity=0)";
opacity: 0;
width: 8px;
height: 8px;
margin: 0 4px 0 4px;
background-color: #000;
border-radius: 6px;
}

View File

@ -0,0 +1,6 @@
/*!
* justifiedGallery - v3.7.0
* http://miromannino.github.io/Justified-Gallery/
* Copyright (c) 2018 Miro Mannino
* Licensed under the MIT license.
*/.justified-gallery{width:100%;position:relative;overflow:hidden}.justified-gallery>a,.justified-gallery>div,.justified-gallery>figure{position:absolute;display:inline-block;overflow:hidden;filter:"alpha(opacity=10)";opacity:.1;margin:0;padding:0}.justified-gallery>a>a>img,.justified-gallery>a>img,.justified-gallery>div>a>img,.justified-gallery>div>img,.justified-gallery>figure>a>img,.justified-gallery>figure>img{position:absolute;top:50%;left:50%;margin:0;padding:0;border:none;filter:"alpha(opacity=0)";opacity:0}.justified-gallery>a>.caption,.justified-gallery>div>.caption,.justified-gallery>figure>.caption{display:none;position:absolute;bottom:0;padding:5px;background-color:#000;left:0;right:0;margin:0;color:#fff;font-size:12px;font-weight:300;font-family:sans-serif}.justified-gallery>a>.caption.caption-visible,.justified-gallery>div>.caption.caption-visible,.justified-gallery>figure>.caption.caption-visible{display:initial;filter:"alpha(opacity=70)";opacity:.7;transition:opacity .5s ease-in}.justified-gallery>.entry-visible{filter:"alpha(opacity=100)";opacity:1;background:0 0}.justified-gallery>.entry-visible>a>img,.justified-gallery>.entry-visible>img{filter:"alpha(opacity=100)";opacity:1;transition:opacity .5s ease-in}.justified-gallery>.jg-filtered{display:none}.justified-gallery>.spinner{position:absolute;bottom:0;margin-left:-24px;padding:10px 0;left:50%;filter:"alpha(opacity=100)";opacity:1;overflow:initial}.justified-gallery>.spinner>span{display:inline-block;filter:"alpha(opacity=0)";opacity:0;width:8px;height:8px;margin:0 4px;background-color:#000;border-radius:6px}

View File

@ -0,0 +1,872 @@
/*!
* jQuery & Zepto Lazy - v1.7.10
* http://jquery.eisbehr.de/lazy/
*
* Copyright 2012 - 2018, Daniel 'Eisbehr' Kern
*
* Dual licensed under the MIT and GPL-2.0 licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl-2.0.html
*
* $("img.lazy").lazy();
*/
;(function(window, undefined) {
"use strict";
// noinspection JSUnresolvedVariable
/**
* library instance - here and not in construct to be shorter in minimization
* @return void
*/
var $ = window.jQuery || window.Zepto,
/**
* unique plugin instance id counter
* @type {number}
*/
lazyInstanceId = 0,
/**
* helper to register window load for jQuery 3
* @type {boolean}
*/
windowLoaded = false;
/**
* make lazy available to jquery - and make it a bit more case-insensitive :)
* @access public
* @type {function}
* @param {object} settings
* @return {LazyPlugin}
*/
$.fn.Lazy = $.fn.lazy = function(settings) {
return new LazyPlugin(this, settings);
};
/**
* helper to add plugins to lazy prototype configuration
* @access public
* @type {function}
* @param {string|Array} names
* @param {string|Array|function} [elements]
* @param {function} loader
* @return void
*/
$.Lazy = $.lazy = function(names, elements, loader) {
// make second parameter optional
if ($.isFunction(elements)) {
loader = elements;
elements = [];
}
// exit here if parameter is not a callable function
if (!$.isFunction(loader)) {
return;
}
// make parameters an array of names to be sure
names = $.isArray(names) ? names : [names];
elements = $.isArray(elements) ? elements : [elements];
var config = LazyPlugin.prototype.config,
forced = config._f || (config._f = {});
// add the loader plugin for every name
for (var i = 0, l = names.length; i < l; i++) {
if (config[names[i]] === undefined || $.isFunction(config[names[i]])) {
config[names[i]] = loader;
}
}
// add forced elements loader
for (var c = 0, a = elements.length; c < a; c++) {
forced[elements[c]] = names[0];
}
};
/**
* contains all logic and the whole element handling
* is packed in a private function outside class to reduce memory usage, because it will not be created on every plugin instance
* @access private
* @type {function}
* @param {LazyPlugin} instance
* @param {object} config
* @param {object|Array} items
* @param {object} events
* @param {string} namespace
* @return void
*/
function _executeLazy(instance, config, items, events, namespace) {
/**
* a helper to trigger the 'onFinishedAll' callback after all other events
* @access private
* @type {number}
*/
var _awaitingAfterLoad = 0,
/**
* visible content width
* @access private
* @type {number}
*/
_actualWidth = -1,
/**
* visible content height
* @access private
* @type {number}
*/
_actualHeight = -1,
/**
* determine possibly detected high pixel density
* @access private
* @type {boolean}
*/
_isRetinaDisplay = false,
/**
* dictionary entry for better minimization
* @access private
* @type {string}
*/
_afterLoad = 'afterLoad',
/**
* dictionary entry for better minimization
* @access private
* @type {string}
*/
_load = 'load',
/**
* dictionary entry for better minimization
* @access private
* @type {string}
*/
_error = 'error',
/**
* dictionary entry for better minimization
* @access private
* @type {string}
*/
_img = 'img',
/**
* dictionary entry for better minimization
* @access private
* @type {string}
*/
_src = 'src',
/**
* dictionary entry for better minimization
* @access private
* @type {string}
*/
_srcset = 'srcset',
/**
* dictionary entry for better minimization
* @access private
* @type {string}
*/
_sizes = 'sizes',
/**
* dictionary entry for better minimization
* @access private
* @type {string}
*/
_backgroundImage = 'background-image';
/**
* initialize plugin
* bind loading to events or set delay time to load all items at once
* @access private
* @return void
*/
function _initialize() {
// detect actual device pixel ratio
// noinspection JSUnresolvedVariable
_isRetinaDisplay = window.devicePixelRatio > 1;
// prepare all initial items
items = _prepareItems(items);
// if delay time is set load all items at once after delay time
if (config.delay >= 0) {
setTimeout(function() {
_lazyLoadItems(true);
}, config.delay);
}
// if no delay is set or combine usage is active bind events
if (config.delay < 0 || config.combined) {
// create unique event function
events.e = _throttle(config.throttle, function(event) {
// reset detected window size on resize event
if (event.type === 'resize') {
_actualWidth = _actualHeight = -1;
}
// execute 'lazy magic'
_lazyLoadItems(event.all);
});
// create function to add new items to instance
events.a = function(additionalItems) {
additionalItems = _prepareItems(additionalItems);
items.push.apply(items, additionalItems);
};
// create function to get all instance items left
events.g = function() {
// filter loaded items before return in case internal filter was not running until now
return (items = $(items).filter(function() {
return !$(this).data(config.loadedName);
}));
};
// create function to force loading elements
events.f = function(forcedItems) {
for (var i = 0; i < forcedItems.length; i++) {
// only handle item if available in current instance
// use a compare function, because Zepto can't handle object parameter for filter
// var item = items.filter(forcedItems[i]);
/* jshint loopfunc: true */
var item = items.filter(function() {
return this === forcedItems[i];
});
if (item.length) {
_lazyLoadItems(false, item);
}
}
};
// load initial items
_lazyLoadItems();
// bind lazy load functions to scroll and resize event
// noinspection JSUnresolvedVariable
$(config.appendScroll).on('scroll.' + namespace + ' resize.' + namespace, events.e);
}
}
/**
* prepare items before handle them
* @access private
* @param {Array|object|jQuery} items
* @return {Array|object|jQuery}
*/
function _prepareItems(items) {
// fetch used configurations before loops
var defaultImage = config.defaultImage,
placeholder = config.placeholder,
imageBase = config.imageBase,
srcsetAttribute = config.srcsetAttribute,
loaderAttribute = config.loaderAttribute,
forcedTags = config._f || {};
// filter items and only add those who not handled yet and got needed attributes available
items = $(items).filter(function() {
var element = $(this),
tag = _getElementTagName(this);
return !element.data(config.handledName) &&
(element.attr(config.attribute) || element.attr(srcsetAttribute) || element.attr(loaderAttribute) || forcedTags[tag] !== undefined);
})
// append plugin instance to all elements
.data('plugin_' + config.name, instance);
for (var i = 0, l = items.length; i < l; i++) {
var element = $(items[i]),
tag = _getElementTagName(items[i]),
elementImageBase = element.attr(config.imageBaseAttribute) || imageBase;
// generate and update source set if an image base is set
if (tag === _img && elementImageBase && element.attr(srcsetAttribute)) {
element.attr(srcsetAttribute, _getCorrectedSrcSet(element.attr(srcsetAttribute), elementImageBase));
}
// add loader to forced element types
if (forcedTags[tag] !== undefined && !element.attr(loaderAttribute)) {
element.attr(loaderAttribute, forcedTags[tag]);
}
// set default image on every element without source
if (tag === _img && defaultImage && !element.attr(_src)) {
element.attr(_src, defaultImage);
}
// set placeholder on every element without background image
else if (tag !== _img && placeholder && (!element.css(_backgroundImage) || element.css(_backgroundImage) === 'none')) {
element.css(_backgroundImage, "url('" + placeholder + "')");
}
}
return items;
}
/**
* the 'lazy magic' - check all items
* @access private
* @param {boolean} [allItems]
* @param {object} [forced]
* @return void
*/
function _lazyLoadItems(allItems, forced) {
// skip if no items where left
if (!items.length) {
// destroy instance if option is enabled
if (config.autoDestroy) {
// noinspection JSUnresolvedFunction
instance.destroy();
}
return;
}
var elements = forced || items,
loadTriggered = false,
imageBase = config.imageBase || '',
srcsetAttribute = config.srcsetAttribute,
handledName = config.handledName;
// loop all available items
for (var i = 0; i < elements.length; i++) {
// item is at least in loadable area
if (allItems || forced || _isInLoadableArea(elements[i])) {
var element = $(elements[i]),
tag = _getElementTagName(elements[i]),
attribute = element.attr(config.attribute),
elementImageBase = element.attr(config.imageBaseAttribute) || imageBase,
customLoader = element.attr(config.loaderAttribute);
// is not already handled
if (!element.data(handledName) &&
// and is visible or visibility doesn't matter
(!config.visibleOnly || element.is(':visible')) && (
// and image source or source set attribute is available
(attribute || element.attr(srcsetAttribute)) && (
// and is image tag where attribute is not equal source or source set
(tag === _img && (elementImageBase + attribute !== element.attr(_src) || element.attr(srcsetAttribute) !== element.attr(_srcset))) ||
// or is non image tag where attribute is not equal background
(tag !== _img && elementImageBase + attribute !== element.css(_backgroundImage))
) ||
// or custom loader is available
customLoader))
{
// mark element always as handled as this point to prevent double handling
loadTriggered = true;
element.data(handledName, true);
// load item
_handleItem(element, tag, elementImageBase, customLoader);
}
}
}
// when something was loaded remove them from remaining items
if (loadTriggered) {
items = $(items).filter(function() {
return !$(this).data(handledName);
});
}
}
/**
* load the given element the lazy way
* @access private
* @param {object} element
* @param {string} tag
* @param {string} imageBase
* @param {function} [customLoader]
* @return void
*/
function _handleItem(element, tag, imageBase, customLoader) {
// increment count of items waiting for after load
++_awaitingAfterLoad;
// extended error callback for correct 'onFinishedAll' handling
var errorCallback = function() {
_triggerCallback('onError', element);
_reduceAwaiting();
// prevent further callback calls
errorCallback = $.noop;
};
// trigger function before loading image
_triggerCallback('beforeLoad', element);
// fetch all double used data here for better code minimization
var srcAttribute = config.attribute,
srcsetAttribute = config.srcsetAttribute,
sizesAttribute = config.sizesAttribute,
retinaAttribute = config.retinaAttribute,
removeAttribute = config.removeAttribute,
loadedName = config.loadedName,
elementRetina = element.attr(retinaAttribute);
// handle custom loader
if (customLoader) {
// on load callback
var loadCallback = function() {
// remove attribute from element
if (removeAttribute) {
element.removeAttr(config.loaderAttribute);
}
// mark element as loaded
element.data(loadedName, true);
// call after load event
_triggerCallback(_afterLoad, element);
// remove item from waiting queue and possibly trigger finished event
// it's needed to be asynchronous to run after filter was in _lazyLoadItems
setTimeout(_reduceAwaiting, 1);
// prevent further callback calls
loadCallback = $.noop;
};
// bind error event to trigger callback and reduce waiting amount
element.off(_error).one(_error, errorCallback)
// bind after load callback to element
.one(_load, loadCallback);
// trigger custom loader and handle response
if (!_triggerCallback(customLoader, element, function(response) {
if(response) {
element.off(_load);
loadCallback();
}
else {
element.off(_error);
errorCallback();
}
})) {
element.trigger(_error);
}
}
// handle images
else {
// create image object
var imageObj = $(new Image());
// bind error event to trigger callback and reduce waiting amount
imageObj.one(_error, errorCallback)
// bind after load callback to image
.one(_load, function() {
// remove element from view
element.hide();
// set image back to element
// do it as single 'attr' calls, to be sure 'src' is set after 'srcset'
if (tag === _img) {
element.attr(_sizes, imageObj.attr(_sizes))
.attr(_srcset, imageObj.attr(_srcset))
.attr(_src, imageObj.attr(_src));
}
else {
element.css(_backgroundImage, "url('" + imageObj.attr(_src) + "')");
}
// bring it back with some effect!
element[config.effect](config.effectTime);
// remove attribute from element
if (removeAttribute) {
element.removeAttr(srcAttribute + ' ' + srcsetAttribute + ' ' + retinaAttribute + ' ' + config.imageBaseAttribute);
// only remove 'sizes' attribute, if it was a custom one
if (sizesAttribute !== _sizes) {
element.removeAttr(sizesAttribute);
}
}
// mark element as loaded
element.data(loadedName, true);
// call after load event
_triggerCallback(_afterLoad, element);
// cleanup image object
imageObj.remove();
// remove item from waiting queue and possibly trigger finished event
_reduceAwaiting();
});
// set sources
// do it as single 'attr' calls, to be sure 'src' is set after 'srcset'
var imageSrc = (_isRetinaDisplay && elementRetina ? elementRetina : element.attr(srcAttribute)) || '';
imageObj.attr(_sizes, element.attr(sizesAttribute))
.attr(_srcset, element.attr(srcsetAttribute))
.attr(_src, imageSrc ? imageBase + imageSrc : null);
// call after load even on cached image
imageObj.complete && imageObj.trigger(_load); // jshint ignore : line
}
}
/**
* check if the given element is inside the current viewport or threshold
* @access private
* @param {object} element
* @return {boolean}
*/
function _isInLoadableArea(element) {
var elementBound = element.getBoundingClientRect(),
direction = config.scrollDirection,
threshold = config.threshold,
vertical = // check if element is in loadable area from top
((_getActualHeight() + threshold) > elementBound.top) &&
// check if element is even in loadable are from bottom
(-threshold < elementBound.bottom),
horizontal = // check if element is in loadable area from left
((_getActualWidth() + threshold) > elementBound.left) &&
// check if element is even in loadable area from right
(-threshold < elementBound.right);
if (direction === 'vertical') {
return vertical;
}
else if (direction === 'horizontal') {
return horizontal;
}
return vertical && horizontal;
}
/**
* receive the current viewed width of the browser
* @access private
* @return {number}
*/
function _getActualWidth() {
return _actualWidth >= 0 ? _actualWidth : (_actualWidth = $(window).width());
}
/**
* receive the current viewed height of the browser
* @access private
* @return {number}
*/
function _getActualHeight() {
return _actualHeight >= 0 ? _actualHeight : (_actualHeight = $(window).height());
}
/**
* get lowercase tag name of an element
* @access private
* @param {object} element
* @returns {string}
*/
function _getElementTagName(element) {
return element.tagName.toLowerCase();
}
/**
* prepend image base to all srcset entries
* @access private
* @param {string} srcset
* @param {string} imageBase
* @returns {string}
*/
function _getCorrectedSrcSet(srcset, imageBase) {
if (imageBase) {
// trim, remove unnecessary spaces and split entries
var entries = srcset.split(',');
srcset = '';
for (var i = 0, l = entries.length; i < l; i++) {
srcset += imageBase + entries[i].trim() + (i !== l - 1 ? ',' : '');
}
}
return srcset;
}
/**
* helper function to throttle down event triggering
* @access private
* @param {number} delay
* @param {function} callback
* @return {function}
*/
function _throttle(delay, callback) {
var timeout,
lastExecute = 0;
return function(event, ignoreThrottle) {
var elapsed = +new Date() - lastExecute;
function run() {
lastExecute = +new Date();
// noinspection JSUnresolvedFunction
callback.call(instance, event);
}
timeout && clearTimeout(timeout); // jshint ignore : line
if (elapsed > delay || !config.enableThrottle || ignoreThrottle) {
run();
}
else {
timeout = setTimeout(run, delay - elapsed);
}
};
}
/**
* reduce count of awaiting elements to 'afterLoad' event and fire 'onFinishedAll' if reached zero
* @access private
* @return void
*/
function _reduceAwaiting() {
--_awaitingAfterLoad;
// if no items were left trigger finished event
if (!items.length && !_awaitingAfterLoad) {
_triggerCallback('onFinishedAll');
}
}
/**
* single implementation to handle callbacks, pass element and set 'this' to current instance
* @access private
* @param {string|function} callback
* @param {object} [element]
* @param {*} [args]
* @return {boolean}
*/
function _triggerCallback(callback, element, args) {
if ((callback = config[callback])) {
// jQuery's internal '$(arguments).slice(1)' are causing problems at least on old iPads
// below is shorthand of 'Array.prototype.slice.call(arguments, 1)'
callback.apply(instance, [].slice.call(arguments, 1));
return true;
}
return false;
}
// if event driven or window is already loaded don't wait for page loading
if (config.bind === 'event' || windowLoaded) {
_initialize();
}
// otherwise load initial items and start lazy after page load
else {
// noinspection JSUnresolvedVariable
$(window).on(_load + '.' + namespace, _initialize);
}
}
/**
* lazy plugin class constructor
* @constructor
* @access private
* @param {object} elements
* @param {object} settings
* @return {object|LazyPlugin}
*/
function LazyPlugin(elements, settings) {
/**
* this lazy plugin instance
* @access private
* @type {object|LazyPlugin|LazyPlugin.prototype}
*/
var _instance = this,
/**
* this lazy plugin instance configuration
* @access private
* @type {object}
*/
_config = $.extend({}, _instance.config, settings),
/**
* instance generated event executed on container scroll or resize
* packed in an object to be referenceable and short named because properties will not be minified
* @access private
* @type {object}
*/
_events = {},
/**
* unique namespace for instance related events
* @access private
* @type {string}
*/
_namespace = _config.name + '-' + (++lazyInstanceId);
// noinspection JSUndefinedPropertyAssignment
/**
* wrapper to get or set an entry from plugin instance configuration
* much smaller on minify as direct access
* @access public
* @type {function}
* @param {string} entryName
* @param {*} [value]
* @return {LazyPlugin|*}
*/
_instance.config = function(entryName, value) {
if (value === undefined) {
return _config[entryName];
}
_config[entryName] = value;
return _instance;
};
// noinspection JSUndefinedPropertyAssignment
/**
* add additional items to current instance
* @access public
* @param {Array|object|string} items
* @return {LazyPlugin}
*/
_instance.addItems = function(items) {
_events.a && _events.a($.type(items) === 'string' ? $(items) : items); // jshint ignore : line
return _instance;
};
// noinspection JSUndefinedPropertyAssignment
/**
* get all left items of this instance
* @access public
* @returns {object}
*/
_instance.getItems = function() {
return _events.g ? _events.g() : {};
};
// noinspection JSUndefinedPropertyAssignment
/**
* force lazy to load all items in loadable area right now
* by default without throttle
* @access public
* @type {function}
* @param {boolean} [useThrottle]
* @return {LazyPlugin}
*/
_instance.update = function(useThrottle) {
_events.e && _events.e({}, !useThrottle); // jshint ignore : line
return _instance;
};
// noinspection JSUndefinedPropertyAssignment
/**
* force element(s) to load directly, ignoring the viewport
* @access public
* @param {Array|object|string} items
* @return {LazyPlugin}
*/
_instance.force = function(items) {
_events.f && _events.f($.type(items) === 'string' ? $(items) : items); // jshint ignore : line
return _instance;
};
// noinspection JSUndefinedPropertyAssignment
/**
* force lazy to load all available items right now
* this call ignores throttling
* @access public
* @type {function}
* @return {LazyPlugin}
*/
_instance.loadAll = function() {
_events.e && _events.e({all: true}, true); // jshint ignore : line
return _instance;
};
// noinspection JSUndefinedPropertyAssignment
/**
* destroy this plugin instance
* @access public
* @type {function}
* @return undefined
*/
_instance.destroy = function() {
// unbind instance generated events
// noinspection JSUnresolvedFunction, JSUnresolvedVariable
$(_config.appendScroll).off('.' + _namespace, _events.e);
// noinspection JSUnresolvedVariable
$(window).off('.' + _namespace);
// clear events
_events = {};
return undefined;
};
// start using lazy and return all elements to be chainable or instance for further use
// noinspection JSUnresolvedVariable
_executeLazy(_instance, _config, elements, _events, _namespace);
return _config.chainable ? elements : _instance;
}
/**
* settings and configuration data
* @access public
* @type {object|*}
*/
LazyPlugin.prototype.config = {
// general
name : 'lazy',
chainable : true,
autoDestroy : true,
bind : 'load',
threshold : 500,
visibleOnly : false,
appendScroll : window,
scrollDirection : 'both',
imageBase : null,
defaultImage : 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==',
placeholder : null,
delay : -1,
combined : false,
// attributes
attribute : 'data-src',
srcsetAttribute : 'data-srcset',
sizesAttribute : 'data-sizes',
retinaAttribute : 'data-retina',
loaderAttribute : 'data-loader',
imageBaseAttribute : 'data-imagebase',
removeAttribute : true,
handledName : 'handled',
loadedName : 'loaded',
// effect
effect : 'show',
effectTime : 0,
// throttle
enableThrottle : true,
throttle : 250,
// callbacks
beforeLoad : undefined,
afterLoad : undefined,
onError : undefined,
onFinishedAll : undefined
};
// register window load event globally to prevent not loading elements
// since jQuery 3.X ready state is fully async and may be executed after 'load'
$(window).on('load', function() {
windowLoaded = true;
});
})(window);

View File

@ -0,0 +1 @@
(function(t,e){"use strict";function r(r,a,i,u,l){function f(){L=t.devicePixelRatio>1,i=c(i),a.delay>=0&&setTimeout(function(){s(!0)},a.delay),(a.delay<0||a.combined)&&(u.e=v(a.throttle,function(t){"resize"===t.type&&(w=B=-1),s(t.all)}),u.a=function(t){t=c(t),i.push.apply(i,t)},u.g=function(){return i=n(i).filter(function(){return!n(this).data(a.loadedName)})},u.f=function(t){for(var e=0;e<t.length;e++){var r=i.filter(function(){return this===t[e]});r.length&&s(!1,r)}},s(),n(a.appendScroll).on("scroll."+l+" resize."+l,u.e))}function c(t){var i=a.defaultImage,o=a.placeholder,u=a.imageBase,l=a.srcsetAttribute,f=a.loaderAttribute,c=a._f||{};t=n(t).filter(function(){var t=n(this),r=m(this);return!t.data(a.handledName)&&(t.attr(a.attribute)||t.attr(l)||t.attr(f)||c[r]!==e)}).data("plugin_"+a.name,r);for(var s=0,d=t.length;s<d;s++){var A=n(t[s]),g=m(t[s]),h=A.attr(a.imageBaseAttribute)||u;g===N&&h&&A.attr(l)&&A.attr(l,b(A.attr(l),h)),c[g]===e||A.attr(f)||A.attr(f,c[g]),g===N&&i&&!A.attr(E)?A.attr(E,i):g===N||!o||A.css(O)&&"none"!==A.css(O)||A.css(O,"url('"+o+"')")}return t}function s(t,e){if(!i.length)return void(a.autoDestroy&&r.destroy());for(var o=e||i,u=!1,l=a.imageBase||"",f=a.srcsetAttribute,c=a.handledName,s=0;s<o.length;s++)if(t||e||A(o[s])){var g=n(o[s]),h=m(o[s]),b=g.attr(a.attribute),v=g.attr(a.imageBaseAttribute)||l,p=g.attr(a.loaderAttribute);g.data(c)||a.visibleOnly&&!g.is(":visible")||!((b||g.attr(f))&&(h===N&&(v+b!==g.attr(E)||g.attr(f)!==g.attr(F))||h!==N&&v+b!==g.css(O))||p)||(u=!0,g.data(c,!0),d(g,h,v,p))}u&&(i=n(i).filter(function(){return!n(this).data(c)}))}function d(t,e,r,i){++z;var o=function(){y("onError",t),p(),o=n.noop};y("beforeLoad",t);var u=a.attribute,l=a.srcsetAttribute,f=a.sizesAttribute,c=a.retinaAttribute,s=a.removeAttribute,d=a.loadedName,A=t.attr(c);if(i){var g=function(){s&&t.removeAttr(a.loaderAttribute),t.data(d,!0),y(T,t),setTimeout(p,1),g=n.noop};t.off(I).one(I,o).one(D,g),y(i,t,function(e){e?(t.off(D),g()):(t.off(I),o())})||t.trigger(I)}else{var h=n(new Image);h.one(I,o).one(D,function(){t.hide(),e===N?t.attr(C,h.attr(C)).attr(F,h.attr(F)).attr(E,h.attr(E)):t.css(O,"url('"+h.attr(E)+"')"),t[a.effect](a.effectTime),s&&(t.removeAttr(u+" "+l+" "+c+" "+a.imageBaseAttribute),f!==C&&t.removeAttr(f)),t.data(d,!0),y(T,t),h.remove(),p()});var m=(L&&A?A:t.attr(u))||"";h.attr(C,t.attr(f)).attr(F,t.attr(l)).attr(E,m?r+m:null),h.complete&&h.trigger(D)}}function A(t){var e=t.getBoundingClientRect(),r=a.scrollDirection,n=a.threshold,i=h()+n>e.top&&-n<e.bottom,o=g()+n>e.left&&-n<e.right;return"vertical"===r?i:"horizontal"===r?o:i&&o}function g(){return w>=0?w:w=n(t).width()}function h(){return B>=0?B:B=n(t).height()}function m(t){return t.tagName.toLowerCase()}function b(t,e){if(e){var r=t.split(",");t="";for(var a=0,n=r.length;a<n;a++)t+=e+r[a].trim()+(a!==n-1?",":"")}return t}function v(t,e){var n,i=0;return function(o,u){function l(){i=+new Date,e.call(r,o)}var f=+new Date-i;n&&clearTimeout(n),f>t||!a.enableThrottle||u?l():n=setTimeout(l,t-f)}}function p(){--z,i.length||z||y("onFinishedAll")}function y(t,e,n){return!!(t=a[t])&&(t.apply(r,[].slice.call(arguments,1)),!0)}var z=0,w=-1,B=-1,L=!1,T="afterLoad",D="load",I="error",N="img",E="src",F="srcset",C="sizes",O="background-image";"event"===a.bind||o?f():n(t).on(D+"."+l,f)}function a(a,o){var u=this,l=n.extend({},u.config,o),f={},c=l.name+"-"+ ++i;return u.config=function(t,r){return r===e?l[t]:(l[t]=r,u)},u.addItems=function(t){return f.a&&f.a("string"===n.type(t)?n(t):t),u},u.getItems=function(){return f.g?f.g():{}},u.update=function(t){return f.e&&f.e({},!t),u},u.force=function(t){return f.f&&f.f("string"===n.type(t)?n(t):t),u},u.loadAll=function(){return f.e&&f.e({all:!0},!0),u},u.destroy=function(){return n(l.appendScroll).off("."+c,f.e),n(t).off("."+c),f={},e},r(u,l,a,f,c),l.chainable?a:u}var n=t.jQuery||t.Zepto,i=0,o=!1;n.fn.Lazy=n.fn.lazy=function(t){return new a(this,t)},n.Lazy=n.lazy=function(t,r,i){if(n.isFunction(r)&&(i=r,r=[]),n.isFunction(i)){t=n.isArray(t)?t:[t],r=n.isArray(r)?r:[r];for(var o=a.prototype.config,u=o._f||(o._f={}),l=0,f=t.length;l<f;l++)(o[t[l]]===e||n.isFunction(o[t[l]]))&&(o[t[l]]=i);for(var c=0,s=r.length;c<s;c++)u[r[c]]=t[0]}},a.prototype.config={name:"lazy",chainable:!0,autoDestroy:!0,bind:"load",threshold:500,visibleOnly:!1,appendScroll:t,scrollDirection:"both",imageBase:null,defaultImage:"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==",placeholder:null,delay:-1,combined:!1,attribute:"data-src",srcsetAttribute:"data-srcset",sizesAttribute:"data-sizes",retinaAttribute:"data-retina",loaderAttribute:"data-loader",imageBaseAttribute:"data-imagebase",removeAttribute:!0,handledName:"handled",loadedName:"loaded",effect:"show",effectTime:0,enableThrottle:!0,throttle:250,beforeLoad:e,afterLoad:e,onError:e,onFinishedAll:e},n(t).on("load",function(){o=!0})})(window);

View File

@ -0,0 +1,332 @@
/*! Swipebox v1.3.0 | Constantin Saguin csag.co | MIT License | github.com/brutaldesign/swipebox */
html.swipebox-html.swipebox-touch {
overflow: hidden !important;
}
#swipebox-overlay img {
border: none !important;
}
#swipebox-overlay {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 99999 !important;
overflow: hidden;
user-select: none;
}
#swipebox-container {
position: relative;
width: 100%;
height: 100%;
}
#swipebox-slider {
transition: transform 0.4s ease;
height: 100%;
left: 0;
top: 0;
width: 100%;
white-space: nowrap;
position: absolute;
display: none;
cursor: pointer;
}
#swipebox-slider .slide {
height: 100%;
width: 100%;
line-height: 1px;
text-align: center;
display: inline-block;
}
#swipebox-slider .slide:before {
content: "";
display: inline-block;
height: 50%;
width: 1px;
margin-right: -1px;
}
#swipebox-slider .slide img,
#swipebox-slider .slide .swipebox-video-container,
#swipebox-slider .slide .swipebox-inline-container {
display: inline-block;
max-height: 100%;
max-width: 100%;
margin: 0;
padding: 0;
width: auto;
height: auto;
vertical-align: middle;
}
#swipebox-slider .slide .swipebox-video-container {
background: none;
max-width: 1140px;
max-height: 100%;
width: 100%;
padding: 5%;
box-sizing: border-box;
}
#swipebox-slider .slide .swipebox-video-container .swipebox-video {
width: 100%;
height: 0;
padding-bottom: 56.25%;
overflow: hidden;
position: relative;
}
#swipebox-slider .slide .swipebox-video-container .swipebox-video iframe {
width: 100% !important;
height: 100% !important;
position: absolute;
top: 0;
left: 0;
}
/*
* Non-css loading animation using an animated GIF
*/
#swipebox-overlay:not(.useCssLoadingAnimation) #swipebox-slider .slide-loading {
background: url(../img/loader.gif) no-repeat center center;
}
/*
* Styling for loading-animation-wrapper and fade in animation when the corrsepsong slide get visible (= is current slide)
*/
#swipebox-slider .loading-animation-wrapper {
position: absolute;
width: 100%;
}
#swipebox-slider .slide.current .loading-animation-wrapper {
animation: loader-fadein ease-in 2s;
}
@keyframes loader-fadein {
from { opacity: 0; }
to { opacity: 1; }
}
/*
* The loading animation.
* This was extracted from here https://github.com/maxbeier/text-spinners/blob/master/spinners.css
* and afterwards modified.
*/
.loading-animation-wrapper .loading {
display: inline-block;
overflow: hidden;
height: 1.3em;
margin-top: -0.3em;
line-height: 1.5em;
vertical-align: text-bottom;
font-size: 40px;
}
.loading-animation-wrapper .loading::after {
display: inline-table;
white-space: pre;
text-align: left;
content: "◇◇◇\A◈◇◇\A◇◈◇\A◇◇◈";
animation: loader-spin4 1s steps(4) infinite;
}
@keyframes loader-spin4 {to { transform: translateY( -6.0em); } }
#swipebox-bottom-bar,
#swipebox-top-bar {
transition: 0.5s;
position: absolute;
left: 0;
z-index: 999;
height: 50px;
width: 100%;
}
#swipebox-bottom-bar {
bottom: -50px;
}
#swipebox-bottom-bar.visible-bars {
transform: translate3d(0, -50px, 0);
}
#swipebox-top-bar {
top: -50px;
}
#swipebox-top-bar.visible-bars {
transform: translate3d(0, 50px, 0);
}
#swipebox-title {
display: block;
width: 100%;
text-align: center;
}
#swipebox-description {
color: white !important;
display: flex;
align-items: center;
justify-content: center;
height: 100%;
text-align: center;
font-size: 0.8em;
line-height: 1.5em;
}
#swipebox-prev,
#swipebox-next,
#swipebox-close {
background-image: url(../img/icons.png);
background-repeat: no-repeat;
border: none !important;
text-decoration: none !important;
cursor: pointer;
width: 50px;
height: 50px;
top: 0;
}
.useSvg #swipebox-prev,
.useSvg #swipebox-next,
.useSvg #swipebox-close{
background-image: url(../img/icons.svg);
}
#swipebox-arrows {
display: block;
margin: 0 auto;
width: 100%;
height: 50px;
}
#swipebox-prev {
background-position: -32px 13px;
float: left;
}
#swipebox-next {
background-position: -78px 13px;
float: right;
}
#swipebox-close {
top: 0;
right: 0;
position: absolute;
z-index: 9999;
background-position: 15px 12px;
}
.swipebox-no-close-button #swipebox-close {
display: none;
}
#swipebox-prev.disabled,
#swipebox-next.disabled {
opacity: 0.3;
}
.swipebox-no-touch #swipebox-overlay.rightSpring #swipebox-slider {
animation: rightSpring 0.3s;
}
.swipebox-no-touch #swipebox-overlay.leftSpring #swipebox-slider {
animation: leftSpring 0.3s;
}
.swipebox-touch #swipebox-container:before,
.swipebox-touch #swipebox-container:after {
backface-visibility: hidden;
transition: all .3s ease;
content: ' ';
position: absolute;
z-index: 999;
top: 0;
height: 100%;
width: 20px;
opacity: 0;
}
.swipebox-touch #swipebox-container:before {
left: 0;
box-shadow: inset 10px 0px 10px -8px #656565;
}
.swipebox-touch #swipebox-container:after {
right: 0;
box-shadow: inset -10px 0px 10px -8px #656565;
}
.swipebox-touch #swipebox-overlay.leftSpringTouch #swipebox-container:before {
opacity: 1;
}
.swipebox-touch #swipebox-overlay.rightSpringTouch #swipebox-container:after {
opacity: 1;
}
@keyframes rightSpring {
0% {
left: 0;
}
50% {
left: -30px;
}
100% {
left: 0;
}
}
@keyframes leftSpring {
0% {
left: 0;
}
50% {
left: 30px;
}
100% {
left: 0;
}
}
@media screen and (min-width: 800px) {
#swipebox-close {
right: 10px;
}
#swipebox-arrows {
width: 92%;
max-width: 800px;
}
}
/* Skin
--------------------------*/
#swipebox-overlay {
background: #0d0d0d;
}
#swipebox-bottom-bar,
#swipebox-top-bar {
text-shadow: 1px 1px 1px black;
background: #000;
opacity: 0.95;
}
#swipebox-top-bar {
color: white !important;
line-height: 43px;
}

View File

@ -0,0 +1 @@
/*! Swipebox v1.3.0 | Constantin Saguin csag.co | MIT License | github.com/brutaldesign/swipebox */html.swipebox-html.swipebox-touch{overflow:hidden!important}#swipebox-overlay img{border:none!important}#swipebox-overlay{width:100%;height:100%;position:fixed;top:0;left:0;z-index:99999!important;overflow:hidden;user-select:none}#swipebox-container{position:relative;width:100%;height:100%}#swipebox-slider{transition:transform .4s ease;height:100%;left:0;top:0;width:100%;white-space:nowrap;position:absolute;display:none;cursor:pointer}#swipebox-slider .slide{height:100%;width:100%;line-height:1px;text-align:center;display:inline-block}#swipebox-slider .slide:before{content:"";display:inline-block;height:50%;width:1px;margin-right:-1px}#swipebox-slider .slide .swipebox-inline-container,#swipebox-slider .slide .swipebox-video-container,#swipebox-slider .slide img{display:inline-block;max-height:100%;max-width:100%;margin:0;padding:0;width:auto;height:auto;vertical-align:middle}#swipebox-slider .slide .swipebox-video-container{background:0 0;max-width:1140px;max-height:100%;width:100%;padding:5%;box-sizing:border-box}#swipebox-slider .slide .swipebox-video-container .swipebox-video{width:100%;height:0;padding-bottom:56.25%;overflow:hidden;position:relative}#swipebox-slider .slide .swipebox-video-container .swipebox-video iframe{width:100%!important;height:100%!important;position:absolute;top:0;left:0}#swipebox-overlay:not(.useCssLoadingAnimation) #swipebox-slider .slide-loading{background:url(../img/loader.gif) no-repeat center center}#swipebox-slider .loading-animation-wrapper{position:absolute;width:100%}#swipebox-slider .slide.current .loading-animation-wrapper{animation:loader-fadein ease-in 2s}@keyframes loader-fadein{from{opacity:0}to{opacity:1}}.loading-animation-wrapper .loading{display:inline-block;overflow:hidden;height:1.3em;margin-top:-.3em;line-height:1.5em;vertical-align:text-bottom;font-size:40px}.loading-animation-wrapper .loading::after{display:inline-table;white-space:pre;text-align:left;content:"◇◇◇\A◈◇◇\A◇◈◇\A◇◇◈";animation:loader-spin4 1s steps(4) infinite}@keyframes loader-spin4{to{transform:translateY(-6em)}}#swipebox-bottom-bar,#swipebox-top-bar{transition:.5s;position:absolute;left:0;z-index:999;height:50px;width:100%}#swipebox-bottom-bar{bottom:-50px}#swipebox-bottom-bar.visible-bars{transform:translate3d(0,-50px,0)}#swipebox-top-bar{top:-50px}#swipebox-top-bar.visible-bars{transform:translate3d(0,50px,0)}#swipebox-title{display:block;width:100%;text-align:center}#swipebox-description{color:#fff!important;display:flex;align-items:center;justify-content:center;height:100%;text-align:center;font-size:.8em;line-height:1.5em}#swipebox-close,#swipebox-next,#swipebox-prev{background-image:url(../img/icons.png);background-repeat:no-repeat;border:none!important;text-decoration:none!important;cursor:pointer;width:50px;height:50px;top:0}.useSvg #swipebox-close,.useSvg #swipebox-next,.useSvg #swipebox-prev{background-image:url(../img/icons.svg)}#swipebox-arrows{display:block;margin:0 auto;width:100%;height:50px}#swipebox-prev{background-position:-32px 13px;float:left}#swipebox-next{background-position:-78px 13px;float:right}#swipebox-close{top:0;right:0;position:absolute;z-index:9999;background-position:15px 12px}.swipebox-no-close-button #swipebox-close{display:none}#swipebox-next.disabled,#swipebox-prev.disabled{opacity:.3}.swipebox-no-touch #swipebox-overlay.rightSpring #swipebox-slider{animation:rightSpring .3s}.swipebox-no-touch #swipebox-overlay.leftSpring #swipebox-slider{animation:leftSpring .3s}.swipebox-touch #swipebox-container:after,.swipebox-touch #swipebox-container:before{backface-visibility:hidden;transition:all .3s ease;content:' ';position:absolute;z-index:999;top:0;height:100%;width:20px;opacity:0}.swipebox-touch #swipebox-container:before{left:0;box-shadow:inset 10px 0 10px -8px #656565}.swipebox-touch #swipebox-container:after{right:0;box-shadow:inset -10px 0 10px -8px #656565}.swipebox-touch #swipebox-overlay.leftSpringTouch #swipebox-container:before{opacity:1}.swipebox-touch #swipebox-overlay.rightSpringTouch #swipebox-container:after{opacity:1}@keyframes rightSpring{0%{left:0}50%{left:-30px}100%{left:0}}@keyframes leftSpring{0%{left:0}50%{left:30px}100%{left:0}}@media screen and (min-width:800px){#swipebox-close{right:10px}#swipebox-arrows{width:92%;max-width:800px}}#swipebox-overlay{background:#0d0d0d}#swipebox-bottom-bar,#swipebox-top-bar{text-shadow:1px 1px 1px #000;background:#000;opacity:.95}#swipebox-top-bar{color:#fff!important;line-height:43px}

Binary file not shown.

After

Width:  |  Height:  |  Size: 729 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8"?> <!-- Generator: IcoMoon.io --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg width="120" height="24" viewBox="0 0 120 24" fill="#ffffff" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M 17.384,17.705q0.00,0.536 -0.375,0.911l-1.821,1.821q-0.375,0.375 -0.911,0.375t-0.911-0.375l-3.938-3.938l-3.938,3.938q-0.375,0.375 -0.911,0.375t-0.911-0.375l-1.821-1.821q-0.375-0.375 -0.375-0.911t 0.375-0.911l 3.938-3.938l-3.938-3.938q-0.375-0.375 -0.375-0.911t 0.375-0.911l 1.821-1.821q 0.375-0.375 0.911-0.375t 0.911,0.375l 3.938,3.938l 3.938-3.938q 0.375-0.375 0.911-0.375t 0.911,0.375l 1.821,1.821q 0.375,0.375 0.375,0.911 t-0.375,0.911l-3.938,3.938l 3.938,3.938q 0.375,0.375 0.375,0.911zM 57.938,21.067l-8.732-8.719q-0.496-0.496 -0.496-1.212t 0.496-1.212l 8.732-8.719q 0.496-0.496 1.212-0.496t 1.212,0.496l 1.004,1.004q 0.496,0.496 0.496,1.212t-0.496,1.212l-6.509,6.509l 6.509,6.496q 0.496,0.509 0.496,1.219t-0.496,1.205l-1.004,1.004q-0.496,0.496 -1.212,0.496t-1.212-0.496zM 110.719,11.143q0.00,0.696 -0.496,1.219l-8.732,8.719q-0.496,0.496 -1.205,0.496t-1.205-0.496l-1.018-1.004q-0.496-0.522 -0.496-1.219q0.00-0.71 0.496-1.205l 6.509-6.509l-6.509-6.496q-0.496-0.522 -0.496-1.219q0.00-0.71 0.496-1.205l 1.018-1.004q 0.482-0.509 1.205-0.509t 1.205,0.509l 8.732,8.719q 0.496,0.496 0.496,1.205z"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -2,10 +2,69 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://www.zacharybillman.com/posts/about-me/</loc>
<lastmod>2022-04-03T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/categories/</loc>
<lastmod>2022-07-14T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/tags/coffee/</loc>
<lastmod>2022-07-14T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/categories/coffee/</loc>
<lastmod>2022-07-14T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/posts/</loc>
<lastmod>2022-07-14T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/posts/roasting-coffee-at-home/</loc>
<lastmod>2022-07-14T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/tags/</loc>
<lastmod>2022-07-14T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/</loc>
<lastmod>2022-07-14T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/tags/science/</loc>
<lastmod>2022-07-13T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/categories/science/</loc>
<lastmod>2022-07-13T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/posts/rss-feeds-to-find-science-papers/</loc>
<lastmod>2022-07-13T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/tags/foss/</loc>
<lastmod>2022-07-02T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/posts/my-selfhosting-journey/</loc>
<lastmod>2022-07-02T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/tags/selfhosting/</loc>
<lastmod>2022-07-02T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/categories/selfhosting/</loc>
<lastmod>2022-07-02T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/posts/zpb-current-selfhosted/</loc>
<lastmod>2022-07-02T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/tags/birding/</loc>
<lastmod>2022-05-01T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/categories/birding/</loc>
<lastmod>2022-05-01T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/tags/masonfarm/</loc>
<lastmod>2022-05-01T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/</loc>
<lastmod>2022-05-01T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/tags/yellowthroat/</loc>
<lastmod>2022-05-01T00:00:00+00:00</lastmod>
</url><url>
<loc>https://www.zacharybillman.com/search/</loc>
</url>
</urlset>

View File

@ -0,0 +1,197 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Birding | Zachary Billman</title>
<meta name="keywords" content="">
<meta name="description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/tags/birding/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://www.zacharybillman.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://www.zacharybillman.com/tags/birding/index.xml">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/tags/birding/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="Birding" />
<meta property="og:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.zacharybillman.com/tags/birding/" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Birding"/>
<meta name="twitter:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy."/>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://www.zacharybillman.com/categories/" title="categories">
<span>categories</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/" title="tags">
<span>tags</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<header class="page-header"><div class="breadcrumbs"><a href="https://www.zacharybillman.com/">Home</a>&nbsp;»&nbsp;<a href="https://www.zacharybillman.com/tags/">Tags</a></div>
<h1>
Birding
</h1>
</header>
<article class="post-entry tag-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">The (un)common yellowthroat.
</h2>
</header>
<div class="entry-content">
<p>My partner and I took a trip to the Mason Farm Biological Reserve the other day, and what a glorious day it was. This year, Ive been quite busy in the lab, and missed a lot of the early spring warbler season, so I was very excited by the opportunity to check out the old stomping grounds.
I brought the camera with me despite the fact we were going to be there around midday when the birds are much less active. Im glad I did, because I got the best look at a common yellowthroat Ive ever had. Normally these guys are flighty, staying close to the ground in small brush or tall grasses, but this one was putting on a proper show for the mating season. Even when you get a glimpse of one, it is usually just that, as they have jumped away before you can pull out the camera, taunting you with their iconic call. I was very pleased to capture a few choice shots of the bird. Hopefully there are more to come. While we were out, I also got a nice picture of a hermit thrush and a king snake.
...</p>
</div>
<footer class="entry-footer"><span title='2022-05-01 00:00:00 +0000 UTC'>Sunday, May 1, 2022</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to The (un)common yellowthroat." href="https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/"></a>
</article>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Birding on Zachary Billman</title>
<link>https://www.zacharybillman.com/tags/birding/</link>
<description>Recent content in Birding on Zachary Billman</description>
<generator>Hugo -- 0.135.0</generator>
<language>en-us</language>
<lastBuildDate>Sun, 01 May 2022 00:00:00 +0000</lastBuildDate>
<atom:link href="https://www.zacharybillman.com/tags/birding/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>The (un)common yellowthroat.</title>
<link>https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/</link>
<pubDate>Sun, 01 May 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/</guid>
<description>&lt;p&gt;My partner and I took a trip to the &lt;a href=&#34;https://ncbg.unc.edu/visit/mason-farm-biological-reserve/&#34;&gt;Mason Farm Biological Reserve&lt;/a&gt; the other day, and what a glorious day it was. This year, I&amp;rsquo;ve been quite busy in the lab, and missed a lot of the early spring warbler season, so I was very excited by the opportunity to check out the old stomping grounds.&lt;/p&gt;
&lt;p&gt;I brought the camera with me despite the fact we were going to be there around midday when the birds are much less active. I&amp;rsquo;m glad I did, because I got the best look at a common yellowthroat I&amp;rsquo;ve ever had.
&lt;span class=&#34;sidenote-number&#34;&gt;&lt;small class=&#34;sidenote&#34;&gt;
Normally these guys are flighty, staying close to the ground in small brush or tall grasses, but this one was putting on a proper show for the mating season. Even when you get a glimpse of one, it is usually just that, as they have jumped away before you can pull out the camera, taunting you with their &lt;a href=&#34;https://ebird.org/species/comyel#Modal-playlist&#34;&gt;iconic call&lt;/a&gt;.
&lt;/small&gt;&lt;/span&gt;
I was very pleased to capture a few choice shots of the bird. Hopefully there are more to come. While we were out, I also got a nice picture of a hermit thrush and a king snake.&lt;/p&gt;</description>
</item>
</channel>
</rss>

View File

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

View File

@ -0,0 +1,196 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Coffee | Zachary Billman</title>
<meta name="keywords" content="">
<meta name="description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/tags/coffee/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://www.zacharybillman.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://www.zacharybillman.com/tags/coffee/index.xml">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/tags/coffee/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="Coffee" />
<meta property="og:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.zacharybillman.com/tags/coffee/" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Coffee"/>
<meta name="twitter:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy."/>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://www.zacharybillman.com/categories/" title="categories">
<span>categories</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/" title="tags">
<span>tags</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<header class="page-header"><div class="breadcrumbs"><a href="https://www.zacharybillman.com/">Home</a>&nbsp;»&nbsp;<a href="https://www.zacharybillman.com/tags/">Tags</a></div>
<h1>
Coffee
</h1>
</header>
<article class="post-entry tag-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">Roasting coffee at home. ☕
</h2>
</header>
<div class="entry-content">
<p>I, like many others, picked up a new hobby during the pandemic. Other peoples hobbies may bring them joy. This could be for many reasons. There is the joy of creating something from scratch. You can revel in your thriftiness. You can embrace the pride when you recognize that your creation is on par (or better!) than what you can buy. I feel like these are embodied in the sourdough craze that caught fire early on in COVID. Dare I say that I did this before it was cool? 😎 I baked two loaves of bread almost every weekend through med school. Maybe I should bring that back, its been a while since I brought out the ole starter. My pandemic hobby is similar, but different in that it often feels like a chore, costs more money, and often turns out worse than what I can buy. Of course, I am talking about how Ive started roasting my own coffee at home.
...</p>
</div>
<footer class="entry-footer"><span title='2022-07-14 00:00:00 +0000 UTC'>Thursday, July 14, 2022</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to Roasting coffee at home. ☕" href="https://www.zacharybillman.com/posts/roasting-coffee-at-home/"></a>
</article>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Coffee on Zachary Billman</title>
<link>https://www.zacharybillman.com/tags/coffee/</link>
<description>Recent content in Coffee on Zachary Billman</description>
<generator>Hugo -- 0.135.0</generator>
<language>en-us</language>
<lastBuildDate>Thu, 14 Jul 2022 00:00:00 +0000</lastBuildDate>
<atom:link href="https://www.zacharybillman.com/tags/coffee/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Roasting coffee at home. ☕</title>
<link>https://www.zacharybillman.com/posts/roasting-coffee-at-home/</link>
<pubDate>Thu, 14 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/roasting-coffee-at-home/</guid>
<description>&lt;p&gt;I, like many others, picked up a new hobby during the pandemic. Other people&amp;rsquo;s hobbies may bring them joy. This could be for many reasons. There is the joy of creating something from scratch. You can revel in your thriftiness. You can embrace the pride when you recognize that your creation is on par (or better!) than what you can buy. I feel like these are embodied in the sourdough craze that caught fire early on in COVID.
&lt;span class=&#34;sidenote-number&#34;&gt;&lt;small class=&#34;sidenote&#34;&gt;
Dare I say that I did this before it was cool? &amp;#x1f60e; I baked two loaves of bread almost every weekend through med school. Maybe I should bring that back, it&amp;rsquo;s been a while since I brought out the ole&amp;rsquo; starter.
&lt;/small&gt;&lt;/span&gt;
My pandemic hobby is similar, but different in that it often feels like a chore, costs more money, and often turns out worse than what I can buy. Of course, I am talking about how I&amp;rsquo;ve started roasting my own coffee at home.&lt;/p&gt;</description>
</item>
</channel>
</rss>

View File

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

196
public/tags/foss/index.html Normal file
View File

@ -0,0 +1,196 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>FOSS | Zachary Billman</title>
<meta name="keywords" content="">
<meta name="description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/tags/foss/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://www.zacharybillman.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://www.zacharybillman.com/tags/foss/index.xml">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/tags/foss/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="FOSS" />
<meta property="og:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.zacharybillman.com/tags/foss/" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="FOSS"/>
<meta name="twitter:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy."/>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://www.zacharybillman.com/categories/" title="categories">
<span>categories</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/" title="tags">
<span>tags</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<header class="page-header"><div class="breadcrumbs"><a href="https://www.zacharybillman.com/">Home</a>&nbsp;»&nbsp;<a href="https://www.zacharybillman.com/tags/">Tags</a></div>
<h1>
FOSS
</h1>
</header>
<article class="post-entry tag-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">My selfhosting journey.
</h2>
</header>
<div class="entry-content">
<p>My interest in self-hosting began in my with my interests in internet privacy. Plastered all over the internet are stories about how much Google, Facebook and Amazon know about you. I deleted my Facebook account years ago, and Im too paranoid to go back to the site because theres a real possibility that Facebook has cached my account, ready to spin it back up in case I try to login again. The ads served to me were too accurate for my liking. This is despite almost never clicking on them! I have become convinced of the idea that, if you are not paying for the product, you are the product. From this assumption, it follows that anywhere I trust with my data that I am not paying for (like Google Drive, Google Photos, Dropbox, Facebook, Twitter) is using my data to earn money. We know that Google uses the labels you add to Photos to train its AI, and Facebook uses (at least) Instagram photos to train its AI. For some, the value proposition of allowing a company to use your data for a useful service in return is an acceptable one. I find this to be a reasonable stance, but I took my growing interest in internet privacy as a chance to learn about how I can take control of my data.
...</p>
</div>
<footer class="entry-footer"><span title='2022-07-02 00:00:00 +0000 UTC'>Saturday, July 2, 2022</span>&nbsp;·&nbsp;5 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to My selfhosting journey." href="https://www.zacharybillman.com/posts/my-selfhosting-journey/"></a>
</article>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>FOSS on Zachary Billman</title>
<link>https://www.zacharybillman.com/tags/foss/</link>
<description>Recent content in FOSS on Zachary Billman</description>
<generator>Hugo -- 0.135.0</generator>
<language>en-us</language>
<lastBuildDate>Sat, 02 Jul 2022 00:00:00 +0000</lastBuildDate>
<atom:link href="https://www.zacharybillman.com/tags/foss/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>My selfhosting journey.</title>
<link>https://www.zacharybillman.com/posts/my-selfhosting-journey/</link>
<pubDate>Sat, 02 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/posts/my-selfhosting-journey/</guid>
<description>&lt;p&gt;My interest in self-hosting began in my with my interests in internet privacy. Plastered all over the internet are stories about how much Google, Facebook and Amazon know about you. I deleted my Facebook account years ago, and I&amp;rsquo;m too paranoid to go back to the site because there&amp;rsquo;s &lt;a href=&#34;https://www.reddit.com/r/privacy/comments/6nmjfh/facebook_account_fully_recovered_3_years_after/&#34;&gt;a real possibility that Facebook has cached my account, ready to spin it back up&lt;/a&gt; in case I try to login again. The ads served to me were too accurate for my liking.
&lt;span class=&#34;sidenote-number&#34;&gt;&lt;small class=&#34;sidenote&#34;&gt;
This is despite almost never clicking on them!
&lt;/small&gt;&lt;/span&gt;
I have become convinced of the idea that, if you are not paying for the product, you are the product. From this assumption, it follows that anywhere I trust with my data that I am not paying for (like Google Drive, Google Photos, Dropbox, Facebook, Twitter) is using my data to earn money. We know that &lt;a href=&#34;https://www.theverge.com/2020/11/11/21559930/google-train-ai-photos-image-labelling-app-android-update&#34;&gt;Google uses the labels you add to Photos to train it&amp;rsquo;s AI&lt;/a&gt;, and &lt;a href=&#34;https://ai.facebook.com/blog/seer-the-start-of-a-more-powerful-flexible-and-accessible-era-for-computer-vision/&#34;&gt;Facebook uses (at least) Instagram photos to train it&amp;rsquo;s AI&lt;/a&gt;. For some, the value proposition of allowing a company to use your data for a useful service in return is an acceptable one. I find this to be a reasonable stance, but I took my growing interest in internet privacy as a chance to learn about how I can take control of my data.&lt;/p&gt;</description>
</item>
</channel>
</rss>

View File

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

View File

@ -5,13 +5,12 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Tags | Zachary Billman&#39;s Blog</title>
<meta name="keywords" content="" />
<meta name="description" content="Where I talk a little about... not much.">
<meta name="author" content="Zachary Billman, who else?">
<link rel="canonical" href="https://www.zacharybillman.com/tags/" />
<link crossorigin="anonymous" href="/assets/css/stylesheet.min.48a18943c2fc15c38a372b8dde1f5e5dc0bc64fa6cb90f5a817d2f8c76b7f3ae.css" integrity="sha256-SKGJQ8L8FcOKNyuN3h9eXcC8ZPpsuQ9agX0vjHa3864=" rel="preload stylesheet" as="style">
<link rel="preload" href="/apple-touch-icon.png" as="image">
<title>Tags | Zachary Billman</title>
<meta name="keywords" content="">
<meta name="description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/tags/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
@ -20,6 +19,7 @@
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://www.zacharybillman.com/tags/index.xml">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/tags/">
<noscript>
<style>
#theme-toggle,
@ -28,42 +28,15 @@
}
</style>
<style>
@media (prefers-color-scheme: dark) {
:root {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--hljs-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
}
.list {
background: var(--theme);
}
.list:not(.dark)::-webkit-scrollbar-track {
background: 0 0;
}
.list:not(.dark)::-webkit-scrollbar-thumb {
border-color: var(--theme);
}
}
</style>
</noscript><meta property="og:title" content="Tags" />
<meta property="og:description" content="Where I talk a little about... not much." />
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="Tags" />
<meta property="og:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.zacharybillman.com/tags/" /><meta property="og:site_name" content="Zachary Billman&#39;s Blog" />
<meta property="og:url" content="https://www.zacharybillman.com/tags/" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Tags"/>
<meta name="twitter:description" content="Where I talk a little about... not much."/>
<meta name="twitter:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy."/>
</head>
@ -71,10 +44,6 @@
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
} else if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
}
</script>
@ -82,17 +51,17 @@
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com" accesskey="h" title="Home (Alt + H)">
<img src="https://www.zacharybillman.com/apple-touch-icon.png" alt="logo" aria-label="logo"
height="35">Home</a>
<span class="logo-switches">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
@ -106,7 +75,7 @@
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</span>
</div>
</div>
<ul id="menu">
<li>
@ -120,8 +89,13 @@
</a>
</li>
<li>
<a href="https://www.zacharybillman.com" title="zacharybillman.com">
<span>zacharybillman.com</span>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
@ -133,15 +107,37 @@
</header>
<ul class="terms-tags">
<li>
<a href="https://www.zacharybillman.com/tags/birding/">birding <sup><strong><sup>1</sup></strong></sup> </a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/coffee/">coffee <sup><strong><sup>1</sup></strong></sup> </a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/foss/">FOSS <sup><strong><sup>1</sup></strong></sup> </a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/masonfarm/">masonfarm <sup><strong><sup>1</sup></strong></sup> </a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/science/">science <sup><strong><sup>1</sup></strong></sup> </a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/selfhosting/">selfhosting <sup><strong><sup>1</sup></strong></sup> </a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/yellowthroat/">yellowthroat <sup><strong><sup>1</sup></strong></sup> </a>
</li>
</ul>
</main>
<footer class="footer">
<span>&copy; 2022 <a href="https://www.zacharybillman.com">Zachary Billman&#39;s Blog</a></span>
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://git.io/hugopapermod" rel="noopener" target="_blank">PaperMod</a>
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">

View File

@ -1,10 +1,61 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Tags on Zachary Billman&#39;s Blog</title>
<title>Tags on Zachary Billman</title>
<link>https://www.zacharybillman.com/tags/</link>
<description>Recent content in Tags on Zachary Billman&#39;s Blog</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language><atom:link href="https://www.zacharybillman.com/tags/index.xml" rel="self" type="application/rss+xml" />
<description>Recent content in Tags on Zachary Billman</description>
<generator>Hugo -- 0.135.0</generator>
<language>en-us</language>
<lastBuildDate>Thu, 14 Jul 2022 00:00:00 +0000</lastBuildDate>
<atom:link href="https://www.zacharybillman.com/tags/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Coffee</title>
<link>https://www.zacharybillman.com/tags/coffee/</link>
<pubDate>Thu, 14 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/tags/coffee/</guid>
<description></description>
</item>
<item>
<title>Science</title>
<link>https://www.zacharybillman.com/tags/science/</link>
<pubDate>Wed, 13 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/tags/science/</guid>
<description></description>
</item>
<item>
<title>FOSS</title>
<link>https://www.zacharybillman.com/tags/foss/</link>
<pubDate>Sat, 02 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/tags/foss/</guid>
<description></description>
</item>
<item>
<title>Selfhosting</title>
<link>https://www.zacharybillman.com/tags/selfhosting/</link>
<pubDate>Sat, 02 Jul 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/tags/selfhosting/</guid>
<description></description>
</item>
<item>
<title>Birding</title>
<link>https://www.zacharybillman.com/tags/birding/</link>
<pubDate>Sun, 01 May 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/tags/birding/</guid>
<description></description>
</item>
<item>
<title>Masonfarm</title>
<link>https://www.zacharybillman.com/tags/masonfarm/</link>
<pubDate>Sun, 01 May 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/tags/masonfarm/</guid>
<description></description>
</item>
<item>
<title>Yellowthroat</title>
<link>https://www.zacharybillman.com/tags/yellowthroat/</link>
<pubDate>Sun, 01 May 2022 00:00:00 +0000</pubDate>
<guid>https://www.zacharybillman.com/tags/yellowthroat/</guid>
<description></description>
</item>
</channel>
</rss>

View File

@ -0,0 +1,197 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Masonfarm | Zachary Billman</title>
<meta name="keywords" content="">
<meta name="description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy.">
<meta name="author" content="Zachary Billman">
<link rel="canonical" href="https://www.zacharybillman.com/tags/masonfarm/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.2501c2c03e4bf83dbcd5f4c6f8fda43d8c7d579cf54417793281f3c19df525fb.css" integrity="sha256-JQHCwD5L&#43;D281fTG&#43;P2kPYx9V5z1RBd5MoHzwZ31Jfs=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://www.zacharybillman.com/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://www.zacharybillman.com/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://www.zacharybillman.com/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://www.zacharybillman.com/apple-touch-icon.png">
<link rel="mask-icon" href="https://www.zacharybillman.com/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://www.zacharybillman.com/tags/masonfarm/index.xml">
<link rel="alternate" hreflang="en" href="https://www.zacharybillman.com/tags/masonfarm/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script async defer data-website-id="cfe9001f-a59d-4e57-9df0-10551852558b" src="https://umami.zacharybillman.com/umami.js"></script>
<meta property="og:title" content="Masonfarm" />
<meta property="og:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.zacharybillman.com/tags/masonfarm/" /><meta property="og:site_name" content="Zachary Billman" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Masonfarm"/>
<meta name="twitter:description" content="Zach Billman&#39;s blog, where I talk about birds, science, and what ever else catches my fancy."/>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://www.zacharybillman.com/" accesskey="h" title="Zachary Billman (Alt + H)">
<img src="https://www.zacharybillman.com/homepage/flask.svg" alt="" aria-label="logo"
height="35">Zachary Billman</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://www.zacharybillman.com/categories/" title="categories">
<span>categories</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/tags/" title="tags">
<span>tags</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/posts/" title="posts">
<span>posts</span>
</a>
</li>
<li>
<a href="https://www.zacharybillman.com/search/" title="search (Alt &#43; /)" accesskey=/>
<span>search</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<header class="page-header"><div class="breadcrumbs"><a href="https://www.zacharybillman.com/">Home</a>&nbsp;»&nbsp;<a href="https://www.zacharybillman.com/tags/">Tags</a></div>
<h1>
Masonfarm
</h1>
</header>
<article class="post-entry tag-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">The (un)common yellowthroat.
</h2>
</header>
<div class="entry-content">
<p>My partner and I took a trip to the Mason Farm Biological Reserve the other day, and what a glorious day it was. This year, Ive been quite busy in the lab, and missed a lot of the early spring warbler season, so I was very excited by the opportunity to check out the old stomping grounds.
I brought the camera with me despite the fact we were going to be there around midday when the birds are much less active. Im glad I did, because I got the best look at a common yellowthroat Ive ever had. Normally these guys are flighty, staying close to the ground in small brush or tall grasses, but this one was putting on a proper show for the mating season. Even when you get a glimpse of one, it is usually just that, as they have jumped away before you can pull out the camera, taunting you with their iconic call. I was very pleased to capture a few choice shots of the bird. Hopefully there are more to come. While we were out, I also got a nice picture of a hermit thrush and a king snake.
...</p>
</div>
<footer class="entry-footer"><span title='2022-05-01 00:00:00 +0000 UTC'>Sunday, May 1, 2022</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Zachary Billman</footer>
<a class="entry-link" aria-label="post link to The (un)common yellowthroat." href="https://www.zacharybillman.com/posts/the-uncommon-yellowthroat/"></a>
</article>
</main>
<footer class="footer">
<span>&copy; 2024 <a href="https://www.zacharybillman.com/">Zachary Billman</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More