Compare commits

..

1 commit

Author SHA1 Message Date
667a105b2e Add a <ul> of available translation for the page to the content header
Attempt to style it.
2024-03-11 08:30:15 -07:00
371 changed files with 2500 additions and 5571 deletions

2
.gitattributes vendored
View file

@ -1,5 +1,3 @@
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.pxm filter=lfs diff=lfs merge=lfs -text
*.mov filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text

5
.gitignore vendored
View file

@ -1,12 +1,7 @@
LightroomExports/
node_modules/
public/
/documentation/mirrors/
/resources/
.hugo_build.lock
*.log
*.orig
*~
# Backup files for Markdown files processed in-place with sed
*.md-e

18
.gitmodules vendored
View file

@ -1,18 +0,0 @@
[submodule "themes/platters"]
path = themes/platters
url = nutmeg:git/hugo-theme-platters.git
[submodule "themes/termlite"]
path = themes/termlite
url = git@github.com:erynofwales/hugo-theme-termlite.git
[submodule "themes/resource-builders"]
path = themes/resource-builders
url = git@github.com:erynofwales/hugo-resource-builders.git
[submodule "themes/image-utils"]
path = themes/image-utils
url = git@github.com:erynofwales/hugo-image-utilities.git
[submodule "themes/photostream"]
path = themes/photostream
url = git@github.com:erynofwales/hugo-theme-photostream.git
[submodule "themes/feeds"]
path = themes/feeds
url = git@github.com:erynofwales/hugo-theme-feeds.git

View file

@ -2,7 +2,7 @@
local filetypedetectGroup = vim.api.nvim_create_augroup("HugoHTMLTemplates", {clear = true})
vim.api.nvim_create_autocmd({"BufRead", "BufNewFile"}, {
pattern = {"**/layouts/**/*.html"},
pattern = {"*/layouts/*.html"},
group = filetypedetectGroup,
command = "set ft=gohtmltmpl",
})

View file

@ -1,9 +1,5 @@
# Eryn Wells <eryn@erynwells.me>
BUILD_DIR=public
CONTENT_PATH=content
DEPLOY_USER=eryn
DEPLOY_HOSTNAME=nutmeg.erynwells.me
DEPLOY_PATH=/srv/www/erynwells.me/html
@ -16,18 +12,14 @@ NETHACK_LOGFILE_DATA_FILE=data/nethack/logfile/$(HOSTNAME).json
.PHONY: site deploy clean
site:
site: nethack
@echo "Building site"
hugo --buildFuture --enableGitInfo --destination "$(BUILD_DIR)"
hugo
deploy: site
@echo "Removing .DS_Store files from $(DEPLOY_LOCATION)"
find "$(BUILD_DIR)" -name .DS_Store -print -delete
@echo "Deploying to $(DEPLOY_LOCATION)"
rsync -avz --no-times --no-perms --delete "$(BUILD_DIR)/" "$(DEPLOY_LOCATION)"
git tag -f $(shell ./scripts/website deployment next-tag)
deployall: nethack deploy
rsync -avz --no-times --no-perms --delete public/ $(DEPLOY_LOCATION)
git tag -f deploy-$(shell date +%Y-%m-%d)
nethack: nethack-logfile nethack-commit
@ -41,4 +33,4 @@ nethack-commit: $(NETHACK_LOGFILE_DATA_FILE)
if ! git diff --quiet $<; then git commit -m "Update Nethack logfile for $(HOSTNAME)" -- $<; fi
clean:
rm -rf "$(BUILD_DIR)/"
rm -rf public/

View file

@ -1,9 +0,0 @@
---
title: "{{ replace .Name "-" " " | title }}"
slug: link-{{ .Name }}
date: {{ .Date }}
categories: links
draft: true
tags: []
---

View file

@ -1,10 +0,0 @@
---
title: "Notes on {{ time.Now.Format "2006" }}W%%WEEK_NUMBER%%"
slug: weeknotes-{{ time.Now.Format "2006" }}w%%WEEK_NUMBER%%
date: {{ .Date | time.Format "2006-01-02" }}
categories: weeknotes
tags:
- Weeknotes
draft: true
---

View file

@ -1,18 +0,0 @@
/************************
* PARAGRAPH-SPACED LIST
************************/
p + .paragraph-spaced-list {
margin-block-start: var(--space-paragraph);
}
.paragraph-spaced-list {
li + li {
margin-block-start: var(--space-paragraph);
}
}

View file

@ -1,42 +0,0 @@
.home-latest {
display: grid;
grid-column: main-start / main-end;
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-template-rows: min-content min-content;
grid-template-areas:
"blog1 blog1 blog2 blog2"
"photo1 photo2 photo3 photo4";
.home-latest__blog {
margin-block-end: var(--space-m);
}
.home-latest__blog:nth-of-type(1) {
grid-area: blog1;
border-right: 2px dashed var(--gray6);
padding-inline-end: var(--space-s);
}
.home-latest__blog:nth-of-type(2) {
grid-area: blog2;
padding-inline-start: var(--space-s);
}
.home-latest__photo {
}
}
@media screen and (max-width: 480px) {
.home-latest {
grid-template-columns: 1fr 1fr;
grid-template-rows: repeat(min-content, 4);
grid-template-areas:
"blog1 blog2"
"photo1 photo2"
"photo3 photo4";
}
}
p + .home-latest {
margin-block-start: var(--space-paragraph);
}

View file

@ -1,100 +0,0 @@
/******************
* NETHACK LOGFILE
******************/
#dungeon-background {
width: 100vw;
height: 100vh;
position: fixed;
top: 0;
left: 0;
z-index: -1;
filter: brightness(0.3);
}
.nethack-logfile {
margin-inline-start: 0;
padding-inline-start: 0;
.nethack-logentry {
align-items: first baseline;
display: grid;
grid-template-columns: min-content min-content auto min-content;
grid-template-areas:
"list-marker entry-marker entry-date entry-character-descriptor"
". . entry-description entry-description"
". . entry-stats entry-stats";
gap: var(--space-xs);
margin-inline-start: 0;
}
}
.nethack-logentry {
&:not(:last-child) {
margin-block-end: var(--space-l);
}
&::before {
grid-area: list-marker;
}
.nethack-logentry__marker {
grid-area: entry-marker;
}
.nethack-logentry__date {
grid-area: entry-date;
line-height: 1;
margin: 0;
padding: 0;
}
.nethack-logentry__character-descriptor {
font-family: var(--font-family-monospace);
font-size: var(--text-s);
grid-area: entry-character-descriptor;
line-height: 1;
white-space: nowrap;
}
.nethack-logentry__description {
grid-area: entry-description;
margin: 0;
}
.nethack-logentry__stats {
border: 0;
color: var(--text-color-secondary);
font-family: var(--font-family-monospace);
font-size: var(--text-s);
grid-area: entry-stats;
margin-block: 0;
width: 100%;
-webkit-border-horizontal-spacing: 0;
-webkit-border-vertical-spacing: 0;
}
.nethack-logentry__stats {
padding: 0;
text-transform: uppercase;
vertical-align: bottom;
white-space: nowrap;
thead {
font-weight: bolder;
}
.nethack-logentry__score,
.nethack-logentry__hp,
.nethack-logentry__level {
width: 16rem;
text-align: right;
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 464 KiB

View file

@ -402,11 +402,11 @@ class TunnelGenerator {
}
/**
* Dig a corridor from fromPoint to toPoint, assuming that both points are
* adjacent to valid locations for doors on the map.
* Dig a corridor from fromPoint to toPoint, assuming that both points are adjacent to valid locations for doors on
* the map.
*
* This is as close a copy of dig_corridor in the Nethack source as I could
* muster. It's not exactly pretty. This method assumed
* This is as close a copy of dig_corridor in the Nethack source as I could muster. It's not exactly pretty. This
* method assumed
*/
#digCorridorFromPointToPoint(p, fromPoint, toPoint) {
const MAX_STEPS = 500;
@ -711,8 +711,6 @@ new p5(p => {
p.setup = () => {
const container = document.querySelector('#dungeon-background');
console.assert(container, "Missing #dungeon-background element");
canvasWidth = parseFloat(getComputedStyle(container).width);
canvasHeight = parseFloat(getComputedStyle(container).height);
@ -733,11 +731,9 @@ new p5(p => {
grid = new Grid(gridBounds.size.width, gridBounds.size.height);
grid.generate(p, NRandomRoomsGenerator, TunnelGenerator);
};
}
p.draw = () => {
console.log("Drawing");
p.textSize(CELL_HEIGHT);
for (let y = 0; y < grid.height; y++) {

View file

@ -1,123 +0,0 @@
class RubiksCubeScrambler extends HTMLElement {
static #RandomMoveHysteresisMaxLength = 2;
#shadowRoot;
#movesListElement;
#numberOfMovesToGenerate = 25;
constructor() {
super();
this.#shadowRoot = this.attachShadow({ mode: "open" });
}
scramble() {
console.log("Randomizing Rubik's cube...");
const movesList = this.#movesListElement;
while (movesList.childElementCount > this.#numberOfMovesToGenerate) {
movesList.removeChild(movesList.lastChild);
}
let randomMoveHysteresis = [];
for (let i = 0; i < this.#numberOfMovesToGenerate; i++) {
const randomMove = this.#randomMove(randomMoveHysteresis);
let moveItem;
if (i < movesList.childElementCount) {
moveItem = movesList.children[i];
} else {
moveItem = document.createElement("li");
movesList.appendChild(moveItem);
}
moveItem.classList.add("scrambler__move");
moveItem.classList.remove("scrambler__move--start", "scrambler__move--end");
if (randomMove.includes("2")) {
moveItem.classList.add("scrambler__move--start");
} else if (randomMove.includes("'")) {
moveItem.classList.add("scrambler__move--end");
}
moveItem.innerText = randomMove;
}
}
#randomMove(hysteresis) {
const faces = "FBLRUD";
let move;
do {
move = faces.charAt(Math.floor(Math.random() * faces.length));
} while (hysteresis && hysteresis.includes(move));
if (hysteresis) {
hysteresis.unshift(move);
while (hysteresis.length > RubiksCubeScrambler.#RandomMoveHysteresisMaxLength) {
hysteresis.pop();
}
}
const modifierFactor = Math.random();
if (modifierFactor < 0.33333) {
move = "2" + move;
} else if (modifierFactor < 0.666666) {
move = move + "'";
}
return move;
}
#removeAllMoves() {
const element = this.#movesListElement;
while (element.hasChildNodes()) {
element.removeChild(element.lastChild);
}
}
// MARK: Custom Element
connectedCallback() {
let template = document.getElementById("rubiks-cube-scrambler-template");
console.assert(template, "Couldn't find RubiksCubeScrambler component template in the document");
const shadowRoot = this.#shadowRoot;
shadowRoot.appendChild(template.content.cloneNode(true));
this.#movesListElement = shadowRoot.querySelector(".scrambler__move-list");
shadowRoot
.querySelector("button[name='scramble']")
.addEventListener("click", () => this.scramble());
const patternLengthInputElement = shadowRoot.querySelector(".scrambler__pattern-length > input");
patternLengthInputElement.value = this.#numberOfMovesToGenerate;
patternLengthInputElement.addEventListener("input", event => {
try {
const integerValue = parseInt(event.target.value);
this.#numberOfMovesToGenerate = integerValue;
} catch (e) {
console.error("Non-integer value of pattern length field", e);
}
});
this.scramble();
}
attributeChangedCallback(name, oldValue, newValue) {
console.debug("RubiksCubeScrambler attribute changed", name, oldValue, newValue);
if (name === "count") {
try {
let newIntValue = parseInt(newValue);
this.#numberOfMovesToGenerate = newIntValue;
} catch (e) {
console.error("`count` attribute should have an integer value.", e);
}
}
}
}
window.customElements.define("rubiks-cube-scrambler", RubiksCubeScrambler);

View file

@ -0,0 +1,9 @@
/* Eryn Wells <eryn@erynwells.me> */
article > :is(h1, h2, h3, h4, h5, h6) {
grid-column: content-start / content-end;
}
.blog.list {
gap: 4rem 0;
}

View file

@ -0,0 +1,105 @@
/* Eryn Wells <eryn@erynwells.me> */
details:has(.photo-params.debug) {
width: 100%;
}
.draft {
color: red;
display: inline-block;
font-family: 'SF Pro', sans-serif;
font-size: 1.5rem;
font-weight: bold;
letter-spacing: 3px;
text-transform: uppercase;
}
.draft:before {
content: "[";
}
.draft:after {
content: "]";
}
#debug-page-info {
background-color: var(--background-color);
border: 1px solid var(--separator-color);
border-radius: 6px;
box-shadow: 4px 5px 5px var(--box-shadow-color);
box-sizing: border-box;
font-size: 12px;
padding: 0.5rem;
position: fixed;
left: 12px;
bottom: 12px;
width: max-content;
}
#debug-page-info > details {
margin: 0.5rem;
}
#debug-page-info > summary {
font-family: var(--font-family-heading);
}
#debug-page-info h4 {
margin-block: 1rem;
margin-inline-start: 2rem;
}
#debug-page-info table {
border: 0;
border-color: rgb(var(--dk-gray));
display: block;
margin-inline-start: 2rem;
width: 100%;
}
#debug-page-info table > tbody {
border: 1px solid;
}
#debug-page-info table > tbody + tbody {
border-top: 1px solid;
}
#debug-page-info td {
border: 1px dotted;
border-left: 1px solid;
padding: 0.3em;
}
#debug-page-info table > tbody > tr:nth-child(even) {
background-color: var(--separator-color);
}
table.photo-params.debug {
--inline-start-padding: 2rem;
box-sizing: border-box;
width: calc(100% - var(--inline-start-padding));
margin-block-start: 1rem;
margin-inline-start: var(--inline-start-padding);
}
.photo-params.debug > thead {
font-size: 2rem;
font-weight: bold;
border-bottom: 2px solid rgb(var(--dk-gray));
}
.photo-params.debug > tbody > tr > td {
border: 1px solid var(--photo-params-border-color);
vertical-align: top;
}
.photo-params.debug > tbody > tr > td:first-of-type {
width: max-content;
}
.photo-params.debug > tbody > tr > td:last-of-type {
word-wrap: anywhere;
overflow: scroll;
}

207
assets/styles/home.css Normal file
View file

@ -0,0 +1,207 @@
@layer page {
:root {
--animation-offset: 6px;
--font-size-max: 12px;
--line-height: 1.85;
}
body {
display: flex;
font-size: 2rem;
justify-content: center;
margin: auto;
}
h1 {
font-size: 5rem;
line-height: 1.3;
margin: 0;
padding: 0;
}
@media (max-width: 599px) {
h1 {
font-size: 4.25rem;
}
}
header.site h1 { white-space: normal; }
@media (max-width: 599px) {
html {
--font-size-scale-factor: 1.33vmax;
}
}
main {
display: block;
line-height: var(--landing-line-height);
margin-block-start: 10vh;
width: inherit;
}
main header {
align-items: first baseline;
display: grid;
gap: 0 2rem;
grid-template-columns: minmax(min-content, 1fr) minmax(min-content, 2fr);
grid-template-rows: repeat(2, max-content);
grid-template-areas:
"title blurb"
"title nav";
padding-inline: 1em;
margin-inline: 2rem;
max-width: 40rem;
}
@media (max-width: 599px) {
main header {
gap: 1rem 0;
grid-template-columns: 1fr;
grid-template-rows: repeat(3, max-content);
grid-template-areas:
"title"
"blurb"
"nav";
justify-items: center;
text-align: center;
}
}
main h1 {
letter-spacing: 0.025em;
text-align: end;
}
@media (max-width: 599px) {
main h1 {
text-align: center;
}
}
nav {
align-items: baseline;
justify-self: center;
display: flex;
font-size: 90%;
list-style: none;
text-transform: lowercase;
}
nav > li::before {
}
p {
margin: 0;
line-height: var(--line-height);
}
h1 {
grid-area: title;
}
#content {
grid-area: blurb
}
nav {
grid-area: nav
}
h1,
#content>p,
nav {
position: relative;
}
h1 {
animation: left-fade-in var(--transition-duration) ease-in-out;
}
@media (max-width: 599px) {
h1 {
animation: top-fade-in var(--transition-duration) ease-in-out;
}
}
#content>p,
nav {
animation: right-fade-in var(--transition-duration) ease-in-out;
}
@media (max-width: 599px) {
#content>p,
nav {
animation: bottom-fade-in var(--transition-duration) ease-in-out;
}
}
@keyframes left-fade-in {
from {
opacity: 0%;
left: var(--animation-offset);
}
33% {
opacity: 0%;
left: var(--animation-offset);
}
to {
opacity: 100%;
left: 0;
}
}
@keyframes right-fade-in {
from {
opacity: 0%;
left: calc(-1 * var(--animation-offset));
}
33% {
opacity: 0%;
left: calc(-1 * var(--animation-offset));
}
to {
opacity: 100%;
left: 0;
}
}
@keyframes top-fade-in {
from {
opacity: 0%;
bottom: calc(-1 * var(--animation-offset));
}
33% {
opacity: 0%;
bottom: calc(-1 * var(--animation-offset));
}
to {
opacity: 100%;
bottom: 0;
}
}
@keyframes bottom-fade-in {
from {
opacity: 0%;
bottom: var(--animation-offset);
}
33% {
opacity: 0%;
bottom: var(--animation-offset);
}
to {
opacity: 100%;
bottom: 0;
}
}
.platter {
padding: 1.5rem 3rem;
}
}

198
assets/styles/monokai.css Normal file
View file

@ -0,0 +1,198 @@
:root {
--highlight-background-color: rgb(250, 250, 250);
--highlight-foreground-color: var(--foreground-body-color);
}
.chroma {
line-height: var(--line-height);
}
.bg {
color: var(--highlight-foreground-color);
background-color: var(--highlight-background-color);
}
.chroma {
color: var(--highlight-foreground-color);
background-color: var(--highlight-background-color);
}
/* Other */ .chroma .x { }
/* Error */ .chroma .err { color: #960050; background-color: #1e0010 }
/* CodeLine */ .chroma .cl { }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
/* LineHighlight */ .chroma .hl { background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineNumbers */
.chroma .ln {
color: #7f7f7f;
background-color: var(--background-color);
padding: 0 0.4em 0 0.4em;
user-select: none;
white-space: pre;
}
.chroma .ln a[href] {
color: inherit;
}
/* Keyword */ .chroma .k { color: #00a8c8 }
/* KeywordConstant */ .chroma .kc { color: #00a8c8 }
/* KeywordDeclaration */ .chroma .kd { color: #00a8c8 }
/* KeywordNamespace */ .chroma .kn { color: #f92672 }
/* KeywordPseudo */ .chroma .kp { color: #00a8c8 }
/* KeywordReserved */ .chroma .kr { color: #00a8c8 }
/* KeywordType */ .chroma .kt { color: #00a8c8 }
/* Name */ .chroma .n { color: #111111 }
/* NameAttribute */ .chroma .na { color: #75af00 }
/* NameBuiltin */ .chroma .nb { color: #111111 }
/* NameBuiltinPseudo */ .chroma .bp { color: #111111 }
/* NameClass */ .chroma .nc { color: #75af00 }
/* NameConstant */ .chroma .no { color: #00a8c8 }
/* NameDecorator */ .chroma .nd { color: #75af00 }
/* NameEntity */ .chroma .ni { color: #111111 }
/* NameException */ .chroma .ne { color: #75af00 }
/* NameFunction */ .chroma .nf { color: #75af00 }
/* NameFunctionMagic */ .chroma .fm { color: #111111 }
/* NameLabel */ .chroma .nl { color: #111111 }
/* NameNamespace */ .chroma .nn { color: #111111 }
/* NameOther */ .chroma .nx { color: #75af00 }
/* NameProperty */ .chroma .py { color: #111111 }
/* NameTag */ .chroma .nt { color: #f92672 }
/* NameVariable */ .chroma .nv { color: #111111 }
/* NameVariableClass */ .chroma .vc { color: #111111 }
/* NameVariableGlobal */ .chroma .vg { color: #111111 }
/* NameVariableInstance */ .chroma .vi { color: #111111 }
/* NameVariableMagic */ .chroma .vm { color: #111111 }
/* Literal */ .chroma .l { color: #ae81ff }
/* LiteralDate */ .chroma .ld { color: #d88200 }
/* LiteralString */ .chroma .s { color: #d88200 }
/* LiteralStringAffix */ .chroma .sa { color: #d88200 }
/* LiteralStringBacktick */ .chroma .sb { color: #d88200 }
/* LiteralStringChar */ .chroma .sc { color: #d88200 }
/* LiteralStringDelimiter */ .chroma .dl { color: #d88200 }
/* LiteralStringDoc */ .chroma .sd { color: #d88200 }
/* LiteralStringDouble */ .chroma .s2 { color: #d88200 }
/* LiteralStringEscape */ .chroma .se { color: #8045ff }
/* LiteralStringHeredoc */ .chroma .sh { color: #d88200 }
/* LiteralStringInterpol */ .chroma .si { color: #d88200 }
/* LiteralStringOther */ .chroma .sx { color: #d88200 }
/* LiteralStringRegex */ .chroma .sr { color: #d88200 }
/* LiteralStringSingle */ .chroma .s1 { color: #d88200 }
/* LiteralStringSymbol */ .chroma .ss { color: #d88200 }
/* LiteralNumber */ .chroma .m { color: #ae81ff }
/* LiteralNumberBin */ .chroma .mb { color: #ae81ff }
/* LiteralNumberFloat */ .chroma .mf { color: #ae81ff }
/* LiteralNumberHex */ .chroma .mh { color: #ae81ff }
/* LiteralNumberInteger */ .chroma .mi { color: #ae81ff }
/* LiteralNumberIntegerLong */ .chroma .il { color: #ae81ff }
/* LiteralNumberOct */ .chroma .mo { color: #ae81ff }
/* Operator */ .chroma .o { color: #f92672 }
/* OperatorWord */ .chroma .ow { color: #f92672 }
/* Punctuation */ .chroma .p { color: #111111 }
/* Comment */ .chroma .c { color: #75715e }
/* CommentHashbang */ .chroma .ch { color: #75715e }
/* CommentMultiline */ .chroma .cm { color: #75715e }
/* CommentSingle */ .chroma .c1 { color: #75715e }
/* CommentSpecial */ .chroma .cs { color: #75715e }
/* CommentPreproc */ .chroma .cp { color: #75715e }
/* CommentPreprocFile */ .chroma .cpf { color: #75715e }
/* Generic */ .chroma .g { }
/* GenericDeleted */ .chroma .gd { }
/* GenericEmph */ .chroma .ge { font-style: italic }
/* GenericError */ .chroma .gr { }
/* GenericHeading */ .chroma .gh { }
/* GenericInserted */ .chroma .gi { }
/* GenericOutput */ .chroma .go { }
/* GenericPrompt */ .chroma .gp { }
/* GenericStrong */ .chroma .gs { font-weight: bold }
/* GenericSubheading */ .chroma .gu { }
/* GenericTraceback */ .chroma .gt { }
/* GenericUnderline */ .chroma .gl { }
/* TextWhitespace */ .chroma .w { }
@media (prefers-color-scheme: dark) {
/* Background */ .bg { color: #f8f8f2; background-color: #272822 }
/* PreWrapper */ .chroma { color: #f8f8f2; background-color: #272822; }
/* Other */ .chroma .x { }
/* Error */ .chroma .err { color: #960050; background-color: #1e0010 }
/* CodeLine */ .chroma .cl { }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
/* LineHighlight */ .chroma .hl { background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* Keyword */ .chroma .k { color: #66d9ef }
/* KeywordConstant */ .chroma .kc { color: #66d9ef }
/* KeywordDeclaration */ .chroma .kd { color: #66d9ef }
/* KeywordNamespace */ .chroma .kn { color: #f92672 }
/* KeywordPseudo */ .chroma .kp { color: #66d9ef }
/* KeywordReserved */ .chroma .kr { color: #66d9ef }
/* KeywordType */ .chroma .kt { color: #66d9ef }
/* Name */ .chroma .n { }
/* NameAttribute */ .chroma .na { color: #a6e22e }
/* NameBuiltin */ .chroma .nb { color: inherit; }
/* NameBuiltinPseudo */ .chroma .bp { }
/* NameClass */ .chroma .nc { color: #a6e22e }
/* NameConstant */ .chroma .no { color: #66d9ef }
/* NameDecorator */ .chroma .nd { color: #a6e22e }
/* NameEntity */ .chroma .ni { }
/* NameException */ .chroma .ne { color: #a6e22e }
/* NameFunction */ .chroma .nf { color: #a6e22e }
/* NameFunctionMagic */ .chroma .fm { }
/* NameLabel */ .chroma .nl { }
/* NameNamespace */ .chroma .nn { }
/* NameOther */ .chroma .nx { color: #a6e22e }
/* NameProperty */ .chroma .py { }
/* NameTag */ .chroma .nt { color: #f92672 }
/* NameVariable */ .chroma .nv { color: inherit; }
/* NameVariableClass */ .chroma .vc { }
/* NameVariableGlobal */ .chroma .vg { }
/* NameVariableInstance */ .chroma .vi { }
/* NameVariableMagic */ .chroma .vm { }
/* Literal */ .chroma .l { color: #ae81ff }
/* LiteralDate */ .chroma .ld { color: #e6db74 }
/* LiteralString */ .chroma .s { color: #e6db74 }
/* LiteralStringAffix */ .chroma .sa { color: #e6db74 }
/* LiteralStringBacktick */ .chroma .sb { color: #e6db74 }
/* LiteralStringChar */ .chroma .sc { color: #e6db74 }
/* LiteralStringDelimiter */ .chroma .dl { color: #e6db74 }
/* LiteralStringDoc */ .chroma .sd { color: #e6db74 }
/* LiteralStringDouble */ .chroma .s2 { color: #e6db74 }
/* LiteralStringEscape */ .chroma .se { color: #ae81ff }
/* LiteralStringHeredoc */ .chroma .sh { color: #e6db74 }
/* LiteralStringInterpol */ .chroma .si { color: #e6db74 }
/* LiteralStringOther */ .chroma .sx { color: #e6db74 }
/* LiteralStringRegex */ .chroma .sr { color: #e6db74 }
/* LiteralStringSingle */ .chroma .s1 { color: #e6db74 }
/* LiteralStringSymbol */ .chroma .ss { color: #e6db74 }
/* LiteralNumber */ .chroma .m { color: #ae81ff }
/* LiteralNumberBin */ .chroma .mb { color: #ae81ff }
/* LiteralNumberFloat */ .chroma .mf { color: #ae81ff }
/* LiteralNumberHex */ .chroma .mh { color: #ae81ff }
/* LiteralNumberInteger */ .chroma .mi { color: #ae81ff }
/* LiteralNumberIntegerLong */ .chroma .il { color: #ae81ff }
/* LiteralNumberOct */ .chroma .mo { color: #ae81ff }
/* Operator */ .chroma .o { color: #f92672 }
/* OperatorWord */ .chroma .ow { color: #f92672 }
/* Punctuation */ .chroma .p { color: inherit; }
/* Comment */ .chroma .c { color: #75715e }
/* CommentHashbang */ .chroma .ch { color: #75715e }
/* CommentMultiline */ .chroma .cm { color: #75715e }
/* CommentSingle */ .chroma .c1 { color: #75715e }
/* CommentSpecial */ .chroma .cs { color: #75715e }
/* CommentPreproc */ .chroma .cp { color: #75715e }
/* CommentPreprocFile */ .chroma .cpf { color: #75715e }
/* Generic */ .chroma .g { }
/* GenericDeleted */ .chroma .gd { color: #f92672 }
/* GenericEmph */ .chroma .ge { font-style: italic }
/* GenericError */ .chroma .gr { }
/* GenericHeading */ .chroma .gh { }
/* GenericInserted */ .chroma .gi { color: #a6e22e }
/* GenericOutput */ .chroma .go { }
/* GenericPrompt */ .chroma .gp { }
/* GenericStrong */ .chroma .gs { font-weight: bold }
/* GenericSubheading */ .chroma .gu { color: #75715e }
/* GenericTraceback */ .chroma .gt { }
/* GenericUnderline */ .chroma .gl { }
/* TextWhitespace */ .chroma .w { }
}

113
assets/styles/nethack.css Normal file
View file

@ -0,0 +1,113 @@
/* Eryn Wells <eryn@erynwells.me> */
:root {
--logentry-background-color: var(--tag-background-color);
--logentry-foreground-color: var(--tag-text-color);
--separator-color: rgb(var(--dk-gray));
--box-shadow-color: rgba(var(--dk-gray), 0.8);
--body-code-background-color: rgb(var(--dk-gray));
--heading-color: rgb(var(--white));
--header-series-arrow-foreground-color: rgb(var(--super-dk-gray));
--html-background-color: rgb(var(--black));
--color: rgba(var(--white), 0.8);
--platter-background-color: rgba(var(--black), var(--platter-background-opacity));
--platter-backdrop-filter: brightness(0.66) blur(10px);
--tag-foreground-color: rgb(var(--sub-lt-gray));
--tag-background-color: rgb(var(--dk-gray));
--tag-spacer-foreground-color: rgb(var(--super-dk-gray));
--tag-hover-background-color: rgb(var(--super-dk-gray));
--tag-hover-foreground-color: rgb(var(--mid-gray));
}
main {
background: rgba(var(--black), 0.6);
}
#dungeon-background {
width: 100vw;
height: 100vh;
position: fixed;
top: 0;
left: 0;
z-index: -1;
filter: brightness(0.3);
}
.logfile {
margin-block-start: 0;
margin-inline-start: 0;
padding-inline-start: 0;
}
.logfile > li {
align-items: first baseline;
color: var(--logentry-foreground-color);
background-color: var(--logentry-background-color);
border-radius: 6px;
display: grid;
grid-template-columns: 32px auto auto;
row-gap: 1rem;
margin-block-start: 2rem;
margin-inline-start: 0;
padding: 3rem;
}
.logfile > li > .date {
grid-column-start: 2;
grid-row-start: 1;
}
.logfile > li > h4.date {
margin: 0;
padding: 0;
}
.logfile > li > .character-descriptor {
color: #aaa;
font-size: 1.5rem;
font-weight: 700;
grid-column-start: 3;
grid-row-start: 1;
text-align: right;
text-transform: uppercase;
}
.logfile > li > p {
grid-column-start: 2;
grid-column-end: 4;
grid-row-start: 2;
margin: 0;
}
.logfile > li > table.stats {
border: 0;
grid-column-start: 2;
grid-column-end: 4;
grid-row-start: 3;
margin-block-end: 0;
width: 100%;
-webkit-border-horizontal-spacing: 0;
-webkit-border-vertical-spacing: 0;
}
.logfile > li > table.stats > tbody > tr > td {
border: 0;
color: #aaa;
font-size: 1.5rem;
font-weight: 700;
padding: 0;
text-transform: uppercase;
vertical-align: bottom;
}
.logfile > li > table.stats > tbody > tr > td.score,
.logfile > li > table.stats > tbody > tr > td.hp,
.logfile > li > table.stats > tbody > tr > td.level {
width: 16rem;
text-align: right;
}

View file

@ -0,0 +1,87 @@
{{ $gridSize := site.Params.photos.gridSize }}
:root {
--date-item-background-color: rgb(var(--lt-gray));
--photo-params-background-color: rgb(var(--lt-gray));
--photo-params-container-background-color: rgb(var(--super-lt-gray));
--photo-params-color: rgb(var(--sub-dk-gray));
--photo-params-border-color: rgb(var(--super-lt-gray));
}
@media (prefers-color-scheme: dark) {
:root {
--date-item-background-color: rgb(var(--dk-gray));
--photo-params-background-color: rgb(var(--dk-gray));
--photo-params-container-background-color: rgb(var(--sub-dk-gray));
--photo-params-color: rgb(var(--super-lt-gray));
--photo-params-border-color: rgb(var(--sub-dk-gray));
}
}
.photos.list {
box-sizing: border-box;
max-width: none;
padding: 0 var(--body-item-spacing);
width: 100%;
}
.photos.list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax({{ printf "%dpx" $gridSize }}, 1fr));
gap: 4px;
}
.photos.list > * {
margin-block-end: 0;
grid-column: auto;
}
.photos.list > a {
display: block;
line-height: 0;
}
.photos.list > a > img {
image-orientation: from-image;
}
.photos.list > div {
background-color: var(--date-item-background-color);
width: 100%;
height: 100%;
display: flex;
align-items: center;
}
.photos.list > div > h6 {
display: block;
font-size: 5rem;
margin: 0 auto;
letter-spacing: 0;
}
.photos.list > div > h6 > span {
text-align: end;
width: min-content;
position: relative;
display: inline-block;
padding-inline-end: 20px;
}
.photos.list > div > h6 > span::after {
top: 6px;
right: 0px;
position: absolute;
display: block;
content: "⏵︎";
font-size: 80%;
}
@media (max-width: calc(24px + 400px + 4px)) {
.photos.list > div > h6 > span {
width: max-content;
padding-block: calc(0.25 * var(--body-item-spacing));
}
.photos.list > div > h6 > span::after {
content: "";
}
}

View file

@ -0,0 +1,34 @@
@layer section {
.photos.page {
gap: var(--body-item-spacing) 0;
}
.photos.page > article > :not(:last-child) {
margin-block-end: var(--body-item-spacing);
}
.photos.page > article > h1 {
font-size: var(--h3-size);
}
.photos.page > nav {
margin-block-end: var(--body-item-spacing);
}
.photos.page > :not(figure) {
grid-column: content-start / content-end;
}
.photos.page > figure {
grid-column: wide-content-start / wide-content-end;
}
@media (max-width: 960px) {
figure, img {
border-radius: 0;
}
}
.photos.page :is(figure, figure > img) {
max-width: none;
}
}

View file

@ -0,0 +1,68 @@
.photo-params {
padding-inline: calc(var(--body-item-spacing) / 2);
}
.photo-params > .container {
display: block;
background-color: var(--photo-params-container-background-color);
border-radius: 10px;
margin: auto;
padding: calc(var(--body-item-spacing) / 2);
max-width: calc(0.66 * var(--content-width));
}
.photo-params > .container > table {
background-color: var(--photo-params-background-color);
color: var(--photo-params-color);
border-collapse: collapse;
border-radius: 6px;
table-layout: fixed;
text-align: center;
width: 100%;
}
.photo-params thead td {
border-bottom: 1px solid var(--photo-params-border-color);
font-size: 80%;
font-weight: bold;
}
.photo-params tbody tr > td {
border: none;
border-bottom: 1px solid var(--photo-params-border-color);
}
.photo-params tr.exposure-attributes > td {
border: none;
border-top: 1px solid var(--photo-params-border-color);
border-left: 1px solid var(--photo-params-border-color);
}
.photo-params tr.exposure-attributes > td:first-child {
border-left: none;
}
.photo-params td {
font-size: 75%;
padding: 1rem;
}
.photo-params td:last-child {
text-align: end;
}
.photo-params td:first-child {
text-align: start;
}
.photo-params .make-model {
font-weight: bold;
}
.photo-params .size {
border-left: 0;
}
.photo-params .location {
border-right: 0;
}

View file

@ -0,0 +1,64 @@
:root {
--rect-fill: rgba(var(--mid-blue), 0.1);
}
@media (prefers-color-scheme: dark) {
:root {
--rect-fill: rgb(var(--mid-blue), 0.9);
}
}
svg.railroad-diagram path {
stroke-width: 2;
stroke: var(--color);
fill: none;
}
svg.railroad-diagram text {
font-family: var(--font-family-monospace);
text-anchor: middle;
white-space: pre;
fill: var(--color);
}
svg.railroad-diagram text.diagram-text {
font-size: 11px;
}
svg.railroad-diagram text.diagram-arrow {
font-size: 16px;
}
svg.railroad-diagram text.label {
text-anchor: start;
}
svg.railroad-diagram text.comment {
font: italic 12px var(--font-family-monospace);
}
svg.railroad-diagram g.non-terminal text {
/*font-style: italic;*/
}
svg.railroad-diagram rect {
stroke-width: 2;
stroke: var(--color);
fill: var(--rect-fill);
}
svg.railroad-diagram rect.group-box {
stroke: gray;
stroke-dasharray: 10 5;
fill: none;
}
svg.railroad-diagram path.diagram-text {
stroke-width: 2;
stroke: var(--color);
fill: var(--html-background-color);
cursor: help;
}
svg.railroad-diagram g.diagram-text:hover path.diagram-text {
fill: var(--rect-fill);
}

View file

@ -0,0 +1 @@
@layer reset, typography, root, layout, section, page, utility;

View file

@ -0,0 +1,7 @@
@layer reset {
body, button, h1, h2, h3, h4, h5, h6, input, ol, ul, p, pre, textarea {
padding: 0; margin: 0;
}
figure, figure .youtube { line-height: 1; }
}

View file

@ -0,0 +1,224 @@
:root {
--black: 0, 0, 0;
--sub-dk-gray: 16, 16, 16;
--dk-gray: 32, 32, 32;
--super-dk-gray: 80, 80, 80;
--mid-gray: 128, 128, 128;
--sub-lt-gray: 175, 175, 175;
--lt-gray: 223, 223, 223;
--super-lt-gray: 240, 240, 240;
--white: 255, 255, 255;
--lt-blue: 69, 212, 243;
--mid-blue: 26, 169, 239;
--dk-blue: 63, 46, 231;
--purple: 161, 49, 232;
--lilac: 187, 121, 245;
--background: var(--white);
--color: rgba(var(--black), 0.8);
--a-color: rgb(var(--mid-blue));
--a-underline-color: rgb(var(--sub-lt-gray));
--a-ruby-color: var(--color);
--body-code-background-color: rgb(var(--super-lt-gray));
--box-shadow-color: rgba(var(--lt-gray), 0.8);
--separator-color: rgb(var(--lt-gray));
--header-border-color: var(--separator-color);
--footer-border-color: var(--separator-color);
--header-anchor-link-color: rgb(var(--sub-lt-gray));
--header-box-shadow-color: var(--box-shadow-color);
--header-series-arrow-foreground-color: rgb(var(--sub-dk-gray));
--heading-color: rgb(var(--black));
--html-background-color: rgb(var(--background));
--platter-background-color: rgba(var(--white), var(--platter-background-opacity));
--platter-background-opacity: 0.6;
--platter-backdrop-filter: blur(10px);
--site-nav-link-color: var(--a-color);
--tag-foreground-color: rgb(var(--super-dk-gray));
--tag-background-color: rgb(var(--super-lt-gray));
--tag-spacer-foreground-color: rgb(var(--super-dk-gray));
--tag-hover-background-color: rgb(var(--sub-lt-gray));
}
@media (prefers-color-scheme: dark) {
:root {
--background: var(--black);
--color: rgba(var(--white), 0.8);
--separator-color: rgb(var(--dk-gray));
--box-shadow-color: rgba(var(--dk-gray), 0.8);
--body-code-background-color: rgb(var(--dk-gray));
--header-anchor-link-color: rgb(var(--super-dk-gray));
--header-series-arrow-foreground-color: rgb(var(--super-dk-gray));
--heading-color: rgb(var(--white));
--html-background-color: rgb(var(--background));
--platter-background-color: rgba(var(--black), var(--platter-background-opacity));
--platter-backdrop-filter: brightness(0.66) blur(10px);
--tag-foreground-color: rgb(var(--sub-lt-gray));
--tag-background-color: rgb(var(--dk-gray));
--tag-spacer-foreground-color: rgb(var(--super-dk-gray));
--tag-hover-background-color: rgb(var(--super-dk-gray));
--tag-hover-foreground-color: rgb(var(--mid-gray));
}
}
@layer root {
a rt,
a:hover rt {
color: var(--a-ruby-color);
}
a[href] {
color: var(--a-color);
}
a[href]:visited {
color: var(--a-color);
}
a.hover-only {
color: var(--color);
transition: color 0.2s;
}
a.hover-only:hover {
color: var(--a-color);
transition: color 0.2s;
}
code {
background-color: var(--body-code-background-color);
}
code.nobg {
background: none;
}
details:has(#TableOfContents) {
border: 1px solid var(--separator-color);
}
fieldset {
border: 1px solid var(--separator-color);
}
h1, h2, h3, h4, h5, h6 {
color: var(--heading-color);
}
h1.gradient {
--site-title-color1: rgb(103, 128, 229);
--site-title-color2: rgb(130, 90, 227);
--site-title-color3: rgb(135, 101, 228);
--site-title-color4: rgb(125, 115, 229);
--site-title-color5: rgb(107, 130, 230);
--site-title-color6: rgb(77, 153, 232);
--site-title-color7: rgb(74, 136, 230);
--site-title-color8: rgb(71, 128, 228);
--site-title-color9: rgb(65, 80, 224);
--site-title-color10: rgb(61, 58, 223);
color: rgb(var(--mid-blue));
}
@supports not ((background-clip: text) or (-webkit-background-clip: text)) {
h1.gradient span:nth-child(10n + 1) { color: var(--site-title-color1); }
h1.gradient span:nth-child(10n + 2) { color: var(--site-title-color2); }
h1.gradient span:nth-child(10n + 3) { color: var(--site-title-color3); }
h1.gradient span:nth-child(10n + 4) { color: var(--site-title-color4); }
h1.gradient span:nth-child(10n + 5) { color: var(--site-title-color5); }
h1.gradient span:nth-child(10n + 6) { color: var(--site-title-color6); }
h1.gradient span:nth-child(10n + 7) { color: var(--site-title-color7); }
h1.gradient span:nth-child(10n + 8) { color: var(--site-title-color8); }
h1.gradient span:nth-child(10n + 9) { color: var(--site-title-color9); }
h1.gradient span:nth-child(10n) { color: var(--site-title-color10); }
}
@supports (background-clip: text) or (-webkit-background-clip: text) {
h1.gradient {
background:
radial-gradient(circle at 20% 70%, rgb(var(--purple)), transparent 40%),
radial-gradient(circle at 30% 30%, rgb(var(--lt-blue)), rgb(var(--mid-blue)) 20%, transparent 80%),
radial-gradient(ellipse at 95% 20%, rgb(var(--dk-blue)), rgb(var(--mid-blue)) 70%, transparent 80%),
radial-gradient(circle at 100% 100%, rgb(var(--purple)), rgb(var(--lilac)) 100%),
radial-gradient(circle at 45% 100%, rgb(var(--lilac)), rgb(var(--purple)) 60%),
radial-gradient(ellipse at 50% 50%, rgb(var(--dk-blue)), transparent 80%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
h1.gradient a[href] {
color: inherit;
}
}
header.site nav > li {
color: var(--site-nav-link-color);
}
html {
background-color: var(--html-background-color);
color: var(--color);
}
main > :is(h1, h2, h3, h4, h5, h6) > a[href],
main > :is(h1, h2, h3, h4, h5, h6) > a[href]:visited {
color: inherit;
}
nav.bulleted > li:first-child::before {
color: var(--color);
}
nav.bulleted > li::before {
color: var(--heading-color);
opacity: 80%;
}
ruby:hover rt {
color: var(--color);
}
@media (prefers-color-scheme: dark) {
rt {
color: rgba(var(--white), 0.5);
}
}
table {
border: 1px solid var(--separator-color);
}
td, th {
border: 1px solid var(--separator-color);
}
figure.code code {
background-color: inherit;
}
.post header a,
.post header a:visited {
color: inherit;
}
.social > li + li:before {
color: var(--dark);
}
.title, .title a {
color: var(--color);
}
}

View file

@ -0,0 +1,476 @@
:root {
--body-item-spacing: 2rem;
--content-width: 80rem;
--content-columns: 5;
--gutter-width: 3rem;
--list-item-block-gap: var(--body-item-spacing);
--margin-min-width: var(--body-item-spacing);
--margin-max-width: 1fr;
--menu-icon-size: 20px;
--nav-bulleted-spacing: 0.75rem;
}
@layer root {
main {
display: grid;
grid-template-columns:
[margin-left]
minmax(var(--margin-min-width), var(--margin-max-width))
[wide-content-start wide-content-left-start]
1fr
[wide-content-left-end gutter-start gutter-left-start]
var(--gutter-width)
[gutter-left-end content-start]
repeat(var(--content-columns),
[column-start]
min(
calc((100% - 2 * var(--gutter-width)) / var(--content-columns)),
calc(var(--content-width) / var(--content-columns))
)
[column-end]
)
[content-end gutter-right-start]
var(--gutter-width)
[gutter-right-end gutter-end wide-content-right-start]
1fr
[wide-content-right-end wide-content-end]
minmax(var(--margin-min-width), var(--margin-max-width))
[margin-right];
}
@media (max-width: 960px) {
main {
--margin-min-width: 0;
--margin-max-width: 0;
}
}
@media (max-width: 519px) {
/* Collapse the margin and wide content tracks */
main {
--content-columns: 3;
grid-template-columns:
[margin-left wide-content-start wide-content-left-start wide-content-left-end gutter-start gutter-left-start]
var(--gutter-width)
[gutter-left-end content-start]
repeat(
var(--content-columns),
[column-start]
min(
calc((100% - 2 * var(--gutter-width)) / var(--content-columns)),
calc(var(--content-width) / var(--content-columns))
)
[column-end]
)
[content-end gutter-right-start]
var(--gutter-width)
[gutter-right-end gutter-end wide-content-right-start wide-content-right-end wide-content-end margin-right];
}
}
@media (max-width: 415px) {
main {
--content-columns: 1;
display: grid;
grid-template-columns:
[margin-left wide-content-start wide-content-left-start wide-content-left-end gutter-start gutter-left-start]
var(--gutter-width)
[gutter-left-end content-start]
calc(100% - 2 * var(--gutter-width))
[content-end gutter-right-start]
var(--gutter-width)
[gutter-right-end gutter-end wide-content-right-start wide-content-right-end wide-content-end margin-right];
}
}
}
@layer root {
main > .grid2 {
display: grid;
grid-template-columns: repeat(2, 1fr);
}
}
@layer layout {
aside#table-of-contents {
grid-column: content-start / content-end;
}
blockquote {
--line-width: 4px;
border-inline-start: var(--line-width) solid var(--separator-color);
padding-inline-start: calc(3rem - var(--line-width));
margin: 0;
}
p code {
padding-block-start: 0.1em;
padding-inline: 0.25em;
}
code.nobg {
display: inline-block;
margin: 0;
padding: 0;
}
details {
width: 100%;
}
details:has(#TableOfContents) {
box-sizing: border-box;
padding: var(--body-item-spacing);
}
details > summary + #TableOfContents {
margin-top: 1rem;
}
fieldset {
box-sizing: border-box;
padding: var(--body-item-spacing);
padding-top: calc(var(--body-item-spacing) / 10);
}
figcaption:not(:empty) {
margin-block-start: 0.2em;
}
figure {
grid-column: gutter-start / gutter-end;
margin: 0;
margin-inline: 0;
min-width: fit-content;
overflow: hidden;
}
@media (max-width: 415px) {
figure {
grid-column: wide-content-start / wide-content-end;
}
}
figure.code {
grid-column: content-start / content-end;
}
figure.code pre {
overflow: auto;
padding: 1rem;
}
figure > .container {
align-items: center;
display: flex;
gap: var(--body-item-spacing);
justify-content: center;
min-width: fit-content;
}
figure img {
display: block;
}
@media (max-width: 414px) {
figure img {
max-width: 100%;
}
}
figure svg {
width: 100%;
height: auto;
}
figure .youtube {
overflow: hidden;
width: 100%;
}
header.site {
display: flex;
width: 100%;
}
header.site h1 {
margin: 0;
order: 1;
}
header.site > .grid {
align-items: baseline;
display: flex;
flex-wrap: wrap;
gap: 0 0.5em;
margin: 0 auto;
max-width: var(--content-width);
padding: 1.5rem 3rem;
width: 100%;
}
header.site > .grid > nav {
align-items: center;
display: flex;
justify-content: start;
list-style: none;
}
header.site nav > li { display: block; }
header.site nav:first-of-type {
justify-content: start;
order: 2;
}
@media (max-width: 435px) {
header.site nav:first-of-type { order: 5; }
}
header.site nav:last-of-type {
justify-content: end;
order: 3;
}
@media (max-width: 516px) {
header.site > .platter {
border-left: none;
border-radius: 0;
border-right: none;
border-top: none;
}
header.site > .grid { max-width: none; }
}
img {
height: auto;
max-width: 100%;
width: 100%;
}
main {
box-sizing: border-box;
margin-block-start: var(--body-item-spacing);
width: 100%;
}
main > * {
grid-column: content-start / content-end;
}
main > figure:not(.code),
main > a.to-photo-post {
grid-column: wide-content-start / wide-content-end;
}
main > header > .translations {
display: flex;
gap: 1rem;
list-style: none;
margin-inline: 0;
width: 100%;
}
main > header > .translations > li {
margin-inline-start: 0;
}
main > header > .series {
margin-inline-start: 0.5em;
width: 100%;
}
main > header > .series::before {
margin-inline-end: 0.25em;
}
main > :is(h1, h2, h3, h4, h5, h6):not(:first-child) {
padding-block-start: 0.5em;
}
nav.bulleted > li:not(:first-child)::before {
margin-inline-start: var(--nav-bulleted-spacing);
}
nav.social > li {
margin-inline-start: var(--nav-bulleted-spacing);
}
nav.social > li:first-child {
margin-inline-start: 0;
}
section.flow {
display: block flow;
}
main ul, ol {
list-style-position: inside;
}
main ul,
main ol,
main dl,
main :is(ul, ol) > li {
margin-inline-start: var(--body-item-spacing);
}
main dl {
margin: 0;
}
main dd {
line-height: var(--line-height);
margin-inline-start: calc(2 * var(--body-item-spacing));
}
main :is(ul, ol) > li:not(:last-child),
main dd:has(+ dt) {
margin-block-end: calc(var(--body-item-spacing) / 2);
}
main :is(ul, ol) > li > :is(ul, ol) {
margin-inline-start: 0;
margin-block-start: calc(var(--body-item-spacing) / 2);
}
table {
border-collapse: collapse;
margin-inline: auto;
width: 50%;
}
td,
th {
padding-inline: 1rem;
}
.list .post header {
grid-column: wide-content-start / content-end;
}
@supports (grid-template-columns: subgrid) {
.list .post header {
display: grid;
grid-template-columns: subgrid;
}
.list .post header h1 {
grid-column: content-start / content-end;
}
}
.list .post time {
grid-column: wide-content-start;
justify-self: end;
}
@media (max-width: 960px) {
.list .post time {
grid-column: content-start / content-end;
justify-self: start;
}
}
.list {
gap: var(--list-item-block-gap) 0;
}
.list > h1,
.list > header {
grid-column: content-start / content-end;
}
.list > .post {
grid-column: wide-content-start / wide-content-end;
}
@supports (grid-template-columns: subgrid) {
.list > .post {
display: grid;
grid-template-columns: subgrid;
gap: var(--body-item-spacing) 0;
}
}
.list .post time {
font-variant-numeric: tabular-nums;
}
@media (max-width: 960px) {
.list .post time {
line-height: var(--line-height);
}
}
.p5-sketch {
display: block;
position: relative;
width: 100%;
}
.page {
gap: var(--body-item-spacing) 0;
}
.page > header {
}
@media (max-width: 539px) {
.page > header {
grid-template-columns: auto;
}
}
.page > footer {
grid-column: content-start / content-end;
}
.page > article > * {
grid-column: gutter-start / gutter-end;
}
.page > article > :not(:last-child) {
margin-block-end: var(--body-item-spacing);
}
.post {
grid-column: gutter-start / gutter-end;
}
.post > * {
grid-column: content-start / content-end;
}
.social {
display: block flex;
margin-left: auto;
order: 2;
}
.social > li > a {
display: block;
height: var(--menu-icon-size);
width: var(--menu-icon-size);
}
.social > li > a > span {
display: none;
}
.social > li + li:before {
padding: 0 0.5rem;
}
.youtube iframe {
aspect-ratio: 16 / 9;
margin-bottom: -3px;
width: 100%;
}
}
@layer utility {
.grid-item {
grid-column: unset;
}
}

View file

@ -0,0 +1,14 @@
/* Eryn Wells <eryn@erynwells.me> */
:root {
--transition-duration: 0.7s;
}
@layer root {
figure.code .ln a {
-webkit-user-select: none;
-moz-use-select: none;
-ms-user-select: none;
user-select: none;
}
}

View file

@ -0,0 +1,25 @@
@layer root {
body:has(ruby-switch[value=none]) rt {
display: none;
}
/* When the ruby switch is set to "hidden", hide the ruby base and only show the <rt>. */
body:has(ruby-switch[value=hidden]) ruby > span {
display: none;
}
body:has(ruby-switch[value=hidden]) rt {
color: inherit;
display: inline;
font-size: inherit;
white-space: inherit;
}
body:has(ruby-switch[value=hidden]) :is(h1, h2, h3, h4, h5, h6) rt {
font-family: var(--font-family-heading);
font-weight: bold;
}
rt { transition: color 0.3s; }
ruby:hover rt { transition: color 0.3s; }
}

View file

@ -0,0 +1,41 @@
@layer root {
footer.site {
align-items: center;
display: flex;
flex-direction: column;
row-gap: 0.25rem;
margin-block: var(--body-item-spacing);
text-align: center;
}
footer.site > ul {
align-items: center;
display: flex;
flex-wrap: wrap;
justify-content: center;
list-style: none;
}
footer.site > .slogans {
margin-block-end: 0;
}
footer.site > .slogans > li {
margin-block-end: 0;
margin-inline-start: 0.5em;
}
footer.site > p {
margin: 0;
}
footer.site p + p {
margin-top: 0.25rem;
}
@media (max-width: 740px) {
footer.site .slogans span {
white-space: nowrap;
}
}
}

View file

@ -0,0 +1,29 @@
@layer root {
:root {
--mastodon-icon: url(/icons/mastodon.svg);
--github-icon: url(/icons/github.svg);
--instagram-icon: url(/icons/instagram.svg);
--feed-icon: url(/icons/feed.svg);
--social-menu-padding: 1rem;
}
@media (prefers-color-scheme: dark) {
:root {
--mastodon-icon: url(/icons/mastodon-dark.svg);
--github-icon: url(/icons/github-dark.svg);
--instagram-icon: url(/icons/instagram-dark.svg);
--feed-icon: url(/icons/feed-dark.svg);
}
}
#social-menu-mastodon img { content: var(--mastodon-icon); }
#social-menu-github img { content: var(--github-icon); }
#social-menu-instagram img { content: var(--instagram-icon); }
#social-menu-feed img { content: var(--feed-icon); }
#social-menu-mastodon img {
position: relative;
top: 1px;
}
}

View file

@ -0,0 +1,60 @@
.taxonomies {
align-items: first baseline;
display: flex;
grid-column: content-start / content-end;
height: min-content;
position: relative;
}
ul.tags {
display: flex;
flex-wrap: wrap;
gap: 1rem 1rem;
height: min-content;
margin-inline-start: 0;
padding-inline-start: 0;
}
ul.tags > li {
background-color: var(--tag-background-color);
color: var(--tag-foreground-color);
border-radius: 4px;
display: inline-block;
font-size: 75%;
letter-spacing: 1px;
margin: 0;
}
ul.tags > li:hover {
background-color: var(--tag-hover-background-color);
}
ul.tags > li > a {
color: inherit;
display: block;
height: 100%;
width: 100%;
padding: 0.6rem 1rem;
text-decoration: none;
}
ul.tags > li > a:hover {
color: var(--tag-hover-foreground-color);
text-decoration: none;
}
ul.tags > li + li { margin-inline-start: 0; }
.taxonomies > .chevron {
align-items: center;
border: 0;
border-radius: 0;
color: var(--tag-spacer-foreground-color);
background-color: inherit;
display: flex;
justify-content: center;
margin-inline-start: 0;
position: relative;
top: 2px;
width: 2rem;
}

View file

@ -0,0 +1,188 @@
@font-face {
font-family: "Museo_Slab";
src: url("{{ `/fonts/Museo_Slab_500.woff2` | relURL }}") format("woff2"),
url("{{ `/fonts/Museo_Slab_500.woff` | relURL }}") format("woff");
font-weight: normal;
font-style: normal;
}
@layer typography {
:root {
--font-family: Verdana, Helvetica, sans-serif;
--font-family-heading: Museo_Slab, Tahoma, "Hiragino Mincho ProN", serif;
--font-family-monospace: "Courier New", Courier, monospace;
--font-family-site-heading: Museo_Slab, Tahoma, sans-serif;
--font-size: 2rem;
--font-size-max: 8px;
--font-size-min: 6px;
--font-size-scale-factor: 1vmax;
--site-header-font-size: 200%;
--h1-size: 305%;
--h2-size: 244%;
--h3-size: 195%;
--h4-size: 156%;
--h5-size: 125%;
--h6-size: 100%;
--line-height: 1.5;
--heading-line-height: 1;
/* A little extra line height so the descenders don't get clipped */
--site-heading-line-height: 1.1;
}
a {
text-decoration: none;
}
a[href]:hover {
text-decoration: underline;
text-decoration-style: solid;
}
a.hover-only:hover {
text-decoration: underline;
}
body {
font-size: var(--font-size);
}
code {
font-family: var(--font-family-monospace);
}
dt {
font-weight: bold;
}
figcaption {
font-size: 80%;
line-height: var(--line-height);
text-align: center;
}
figure.code .cl {
white-space: pre-wrap;
}
footer.site {
font-size: 80%;
line-height: 1;
}
h1 { font-size: var(--h1-size); }
h2 { font-size: var(--h2-size); }
h3 { font-size: var(--h3-size); }
h4 { font-size: var(--h4-size); }
h5 { font-size: var(--h5-size); }
h6 { font-size: var(--h6-size); }
h5, h6 { font-family: var(--font-family-body); }
header > span.series::before {
content: "↳";
}
header.site h1 > a:hover {
text-decoration: none;
}
header.site nav {
list-style: none;
}
header.site nav > .active {
font-weight: bold;
}
h1, h2, h3, h4, h5, h6 {
font-family: var(--font-family-heading);
font-weight: 600;
letter-spacing: 1pt;
line-height: var(--heading-line-height);
}
h1.gradient {
font-family: var(--font-family-site-heading);
}
h1.gradient > a { color: inherit; }
header.site h1.site {
font-size: var(--site-header-font-size);
line-height: var(--site-heading-line-height);
white-space: nowrap;
}
header.site nav {
font-size: max(1.5rem, 80%);
letter-spacing: 0.10em;
text-transform: lowercase;
}
header.site nav > li {
color: var(--site-nav-link-color);
}
:is(h1, h2, h3, h4, h5, h6) rt {
font-family: var(--font-family);
font-weight: normal;
letter-spacing: 0;
}
header > span.series {
font-size: 1.75rem;
letter-spacing: 1px;
}
header > span.series::before {
color: var(--header-series-arrow-foreground-color);
}
html {
font-family: var(--font-family);
font-size: clamp(var(--font-size-min), var(--font-size-scale-factor), var(--font-size-max));
}
main:has(header > .post-title > h1) h1 { font-size: 244%; }
main:has(header > .post-title > h1) h2 { font-size: 195%; }
main:has(header > .post-title > h1) h3 { font-size: 156%; }
main:has(header > .post-title > h1) h4 { font-size: 125%; }
main:has(header > .post-title > h1) h5 { font-size: 100%; }
main:has(header > .post-title > h1) h6 { font-size: 100%; }
main:has(header > .post-title > h1) :is(h5, h6) {
font-family: var(--font-family-body);
}
nav.bulleted>li:first-child::before {
content: "";
}
nav.bulleted > li::before {
content: "•";
font-size: 60%;
font-weight: normal;
}
p {
line-height: var(--line-height);
}
p > code {
white-space: pre;
}
#TableOfContents ul {
list-style-type: none;
}
.social {
letter-spacing: 2px;
}
.title {
font-size: var(--h5-size);
}
}

View file

@ -0,0 +1,43 @@
@layer utility {
.centered { text-align: center; }
.content-width { grid-column: content-start / content-end; }
.float-right {
float: right;
justify-self: end;
}
.nobreak { white-space: nowrap; }
.noselect {
cursor: default;
-webkit-user-select: none;
-moz-use-select: none;
-ms-user-select: none;
user-select: none;
}
.platter {
-webkit-backdrop-filter: var(--platter-backdrop-filter);
backdrop-filter: var(--platter-backdrop-filter);
background-color: var(--platter-background-color);
border: 1px solid var(--header-border-color);
border-radius: 12px;
box-shadow: 3px 4px 4px var(--header-box-shadow-color);
}
.visible { visibility: visible; }
article.two-column { columns: 2; }
img.circular {
shape-outside: circle(50%);
-webkit-clip-path: circle(50%);
clip-path: circle(50%);
}
.column5 {
grid-column: span content-start 4;
}
}

View file

@ -1,6 +1,5 @@
baseURL: https://erynwells.me/
languageCode: en-US
title: ~eryn
copyright: Copyright © 2020—2024 Eryn Wells
title: Eryn Rachel Wells
copyright: Copyright © 2020—2023 Eryn Wells
defaultContentLanguage: en
enableEmoji: true

View file

@ -1,10 +1,6 @@
goldmark:
renderer:
unsafe: true
parser:
attribute:
block: true
title: true
highlight:
anchorLineNos: true
lineNos: false

View file

@ -11,12 +11,6 @@ main:
name: About
url: /about/
weight: 30
- identifier: feed
name: feed
url: /feed.atom
weight: 40
params:
style: file
social:
- identifier: mastodon
name: Mastodon
@ -37,7 +31,7 @@ social:
params:
shortName: ig
- identifier: feed
name: feed
name: Feed
url: /feed.atom
weight: 40
params:

View file

@ -1,15 +0,0 @@
hugoVersion:
extended: false
min: "0.116.0"
replacements: >-
github.com/erynofwales/hugo-theme-feeds/v2 -> feeds,
github.com/erynofwales/hugo-theme-termlite/v2 -> termlite,
github.com/erynofwales/hugo-theme-photostream/v2 -> photostream,
github.com/erynofwales/hugo-resource-builders/v2 -> resource-builders,
github.com/erynofwales/hugo-image-utilities/v2 -> image-utils
imports:
- path: github.com/erynofwales/hugo-theme-termlite/v2
- path: github.com/erynofwales/hugo-theme-feeds/v2
- path: github.com/erynofwales/hugo-theme-photostream/v2
- path: github.com/erynofwales/hugo-resource-builders/v2
- path: github.com/erynofwales/hugo-image-utilities/v2

View file

@ -1,4 +1,3 @@
home: [HTML, Atom]
section: [HTML, Atom]
taxonomy: [HTML]
term: [HTML]
home: [HTML, Atom, RSS]
page: [HTML, JSON]
section: [HTML, Atom, RSS]

View file

@ -9,12 +9,6 @@ github: erynofwales
instagram: erynofwales
description: Home page of Eryn Rachel Wells
blog:
yearLimit: 3
photostream:
yearLimit: 3
photos:
gridSize: 200
thumbnailSize: 600

View file

@ -1,3 +1,2 @@
blog: blog/:year/:month/:slug/
photos: photos/:year/:month/:slug/
twitter: twitter/:year/:month/:slug/

View file

@ -1,2 +1,2 @@
x:
twitter:
enableDNT: true

View file

@ -1,2 +1,2 @@
x:
twitter:
disableInlineCSS: true

View file

@ -1,20 +1,7 @@
---
layout: single
draft: true
params:
renderHeadingAnchors: false
title: Eryn Rachel Wells
---
¡Hola! Me llamo Eryn Wells. Este es mi sitio web. ¡Bienvenidos!
## Personal
Soy mujer queer,
## Profesional
Desde 2011, he trabajado como ingeniera de software en varios companías alrededor del área
del Bahía de San Francisco. En 2016, me uní a [Apple][]. Hoy, trabajo en
tecnologías que
{{< nobreak >}}Ingeniera de software,{{< /nobreak >}}
alfarera, música, y
{{< nobreak >}}nerd en general.{{< /nobreak >}}

View file

@ -1,66 +1,5 @@
---
layout: single
params:
renderHeadingAnchors: false
title: Eryn Rachel Wells
---
Hi, I'm Eryn Wells. This is my website. Welcome!
## Latest
Here are some of my most recent posts.
{{< home/latest >}}
## Personal
I'm a queer woman, {{< tess >}}' partner, and mom of [two cats][cats]. I
was born in Seattle, {{< abbr Washington >}}WA{{< /abbr >}} and grew up in
Phoenix, {{< abbr Arizona >}}AZ{{< /abbr >}}. I attended [Oberlin College][]
where I got a degree in Computer Science. My pronouns are [she/her][pronouns].
You can read more about me on my [about][ab] page, or [get in touch][where-am-i].
## Professional
I've worked as a software engineer since 2011 for a variety of companies around
the San Francisco Bay Area. I joined [Apple][] in 2016, where I currently work
on password management and authentication technologies.
My [résumé][r] has all the details.
## Hobbies
When I'm not working, you can reliably find me hacking on this website or [some
other coding project][src]. I'm also a musician: I play piano, Irish tin
whistle, and modular synthesizer. Occasionally I [record things][sc] or offer
them [for sale][sc]. I love outer space and astronomy; I will always get excited
to look at the moon with you, or check out anything through a telescope. I enjoy
[photograhy][p], mostly as a travel hobby. And I've been practicing
[iaidō][mjer], a traditional Japanese sword art, at [Nishi Kaigan Iaidō
Dōjō][nkid] since early 2024. Other things I've been into include: bread baking,
bicycling, calligraphy, ceramics, and knitting.
[Apple]: https://apple.com
[ab]: {{< ref "/about" >}}
[b]: {{< ref "/blog" >}}
[bc]: https://erynwells.bandcamp.com/releases
[cats]: {{< ref "/cats" >}}
[eml]: mailto:Eryn%20Wells<eryn@erynwells.me>
[src]: https://source.erynwells.me/eryn
[ig]: https://www.instagram.com/erynofwales
[m]: https://mastodon.social/@erynofwales
[n]: {{< ref "/now" >}}
[Oberlin College]: https://www.oberlin.edu
[p]: {{< ref "/photos" >}}
[pronouns]: http://pronoun.is/she
[r]: {{< ref "/resume" >}}
[sc]: https://soundcloud.com/purlsnbeeps
[where-am-i]: {{< ref "/about/where-am-i" >}}
[mjer]: https://en.wikipedia.org/wiki/Mus%C5%8D_Jikiden_Eishin-ry%C5%AB
[nkid]: https://iaido.org
Software engineer, potter, musician, and overall nerd.

View file

@ -1,16 +1,18 @@
---
title: "Hi! 👋🏻"
layout: single
date: 2022-09-03T12:14:32-07:00
resources:
- name: me
src: me.jpeg
params:
alt: >
Me, wearing a hat and smiling slightly, standing in front of a stone
background.
alt: "
Me, wearing a hat and smiling slightly, standing in front of a stone background.
"
---
{{% section class=content--small-right-column %}}
{{% section class=flow %}}
{{< circular_image id=me name=me class="float-right" width=200 >}}
I'm Eryn. My pronouns are [she/her][p]. I'm a queer trans woman. I live in San
Francisco, CA, on the unceded ancestral lands of the Ramaytush Ohlone people,
@ -20,8 +22,6 @@ I attended [Oberlin College][ob] where I got a degree in Computer Science.
I speak English natively, and Spanish too, though I always need more practice.
{{< circular_image id=me name=me class="content--right-column" width=200 >}}
{{% /section %}}
## Hobbies

View file

@ -3,16 +3,11 @@ title: "Where to Find Me"
date: 2022-11-11T08:35:26-08:00
---
Here's a list of places you can find me online. You can often find me on
services not listed here with the `erynofwales` or `erynrwells` handles.
Here's a list of places you can find me online.
## Social Media
I'm really only on Instagram and Mastodon these days. My Twitter account is
still live, as an archive, but I don't post on it or look at it. Ditto for
Facebook.
- Facebook: [erynofwales](https://www.facebook.com/erynofwales)
- Cohost: [@eryn](https://cohost.org/eryn)
- Instagram: [@erynofwales](https://instagram.com/erynofwales)
- Mastodon: [@erynofwales](https://mastodon.social/@erynofwales)
- Twitter: [@erynofwales](https://twitter.com/erynofwales)
@ -20,10 +15,9 @@ Facebook.
## Content
- Bandcamp: [erynwells](https://erynwells.bandcamp.com/releases)
- GitHub: [erynofwales](https://github.com/erynofwales)
- Soundcloud: [purlsnbeeps](https://soundcloud.com/purlsnbeeps)
- StoryGraph: [erynrwells](https://app.thestorygraph.com/profile/erynrwells)
- YouTube: [Eryn Wells](https://www.youtube.com/channel/UCWb2pTDlC27R1PucyUPrypA)
- GitHub: [erynofwales](https://github.com/erynofwales)
## The Old Fashioned Way

View file

@ -1,4 +0,0 @@
---
title: 2020
date: 2020-01-01
---

View file

@ -7,7 +7,7 @@ categories: ["Music"]
tags: ["Synthesizers", "Electronics", "DIY", "Compositions"]
---
{{< youtube id="gCSwWsxzy_c" title="A timelapse video of me building an Oskitone Scout, set to music produced using the Scout itself" >}}
{{< figures/youtube id="gCSwWsxzy_c" title="A timelapse video of me building an Oskitone Scout, set to music produced using the Scout itself">}}
[Oskitone][oskitone] recently released a new synthesizer: the [Scout][scout].
It's a small monophonic keyboard synth built around an Arduino. It was a quick

View file

@ -41,4 +41,4 @@ I'm so grateful for every one of these people. We've been friends for years and
even though our lives have taken us in so many different directions, we've found
each other again and that is so wonderful.
{{< twitter user=erynofwales id=1447951049076056071 >}}
{{< twitter erynofwales 1447951049076056071 >}}

View file

@ -1,4 +0,0 @@
---
title: 2021
date: 2021-01-01
---

View file

@ -7,7 +7,7 @@ categories: ["Music"]
tags: ["Eurorack", "Synthesizers", "Recordings", "Performances", "Compositions"]
---
{{< youtube id="sqr7g4P85aM" title="A top-down video of me operating a small Eurorack system made of only three modules. Lights flash, an incorporeal hand turns knobs to sculpt the sound." >}}
{{< figures/youtube id="sqr7g4P85aM" title="A top-down video of me operating a small Eurorack system made of only three modules. Lights flash, an incorporeal hand turns knobs to sculpt the sound." >}}
This is my submission to the [Three Module Challenge][3mc] show put on by
Colorado Modular Synth Society in late January 2022. This is my first time

View file

@ -18,7 +18,7 @@ estuve hecho.
Es posible que me entusiasme un poco.
{{< twitter user=erynofwales id=1510763278691016705 >}}
{{< twitter erynofwales 1510763278691016705 >}}
He mejorado mucho en las últimas semanas. Mis puntajes han crecidos desde 1,000
hasta el mejor juego hasta ahora en que [obtuve 9401 puntos][over9000]. Quién

View file

@ -23,7 +23,7 @@ packed with [NetHackWiki][nethackwiki] tabs too, including a pinned one for the
I may have gotten a little carried away a time or two.
{{< twitter user=erynofwales id=1510763278691016705 >}}
{{< twitter erynofwales 1510763278691016705 >}}
I've gotten much better in that time. My scores have increased from the
1000-2000 range to my best game so far in which [I scored 9401

View file

@ -1,36 +0,0 @@
<svg class="railroad-diagram" width="408" height="62" viewBox="0 0 408 62">
<g transform="translate(.5 .5)">
<g>
<path d="M20 21v20m10 -20v20m-10 -10h20"></path>
</g>
<path d="M40 31h10"></path>
<g>
<path d="M50 31h0"></path>
<path d="M358 31h0"></path>
<g class="terminal ">
<path d="M50 31h0"></path>
<path d="M126 31h0"></path>
<rect x="50" y="20" width="76" height="22" rx="10" ry="10"></rect>
<text x="88" y="35">&#60;audio></text>
</g>
<path d="M126 31h10"></path>
<path d="M136 31h10"></path>
<g class="terminal ">
<path d="M146 31h0"></path>
<path d="M230 31h0"></path>
<rect x="146" y="20" width="84" height="22" rx="10" ry="10"></rect>
<text x="188" y="35">Analyzer</text>
</g>
<path d="M230 31h10"></path>
<path d="M240 31h10"></path>
<g class="terminal ">
<path d="M250 31h0"></path>
<path d="M358 31h0"></path>
<rect x="250" y="20" width="108" height="22" rx="10" ry="10"></rect>
<text x="304" y="35">destination</text>
</g>
</g>
<path d="M358 31h10"></path>
<path d="M 368 31 h 20 m -10 -10 v 20 m 10 -20 v 20"></path>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1 KiB

View file

@ -88,7 +88,22 @@ node to the input of the analyzer node, and the output of the analyzer node to
the audio context's `destination` node that routes to the computer's speakers.
Our audio processing graph looks like this:
![](diagram.svg)
{{< figures/railroad id="audioContextDiagram" >}}
{{< scripts/railroad >}}
return rr.Diagram(
rr.Sequence(
rr.Terminal("<audio>"),
rr.Terminal("Analyzer"),
rr.Terminal("destination")));
{{< /scripts/railroad >}}
{{< scripts/railroad narrow=1 >}}
return rr.Diagram(
rr.Stack(
rr.Terminal("<audio>"),
rr.Terminal("Analyzer"),
rr.Terminal("destination")));
{{< /scripts/railroad >}}
{{< /figures/railroad >}}
By itself the AudioContext doesn't actually play any audio. I'll tackle that
next.

View file

@ -1,4 +0,0 @@
---
title: 2022
date: 2022-01-01
---

View file

@ -1,4 +0,0 @@
---
title: 2023
date: 2023-01-01
---

View file

@ -23,7 +23,7 @@ also post quick notes and sketches of ideas. I've enjoyed reading some quicker
posts from {{< tess >}} and [Elaine][e] this past year, and I'd like to follow
their example.
{{< youtube zSgiXGELjbc >}}
{{< figures/youtube zSgiXGELjbc content-width >}}
I'm not setting myself a specific goal here. The idea is just "more" in a
certain general direction. I don't want to commit to a specific frequency or

View file

@ -0,0 +1,8 @@
---
resources:
- name: cover
src: cover.jpg
title:
---
{{< figures/image name=cover >}}

View file

@ -26,13 +26,13 @@ Navigator "meteors" animation. This one has a special place in my head and
heart because it is so clearly connected to my memories of discovering the
web as a kid. Here it is in its original 60&times;60 px glory:
{{< figures/image name=netscape60 shouldShowTitle=false size=small >}}
{{< figures/image name=netscape60 shouldShowTitle=false >}}
I started out doing some web searches that turned up several versions. One was
promising but far too big: 400&times;400 px. Worse, after some shoddy resize
attempts, the "pixels" had become rectangular.
{{< figures/image name=rectangular-pixels shouldShowTitle=false size=small >}}
{{< figures/image name=rectangular-pixels shouldShowTitle=false >}}
This would not do.
@ -81,10 +81,7 @@ that replaces those pixels with ones that match the surrounding pixels. Here's
the modified 60&times;60 one and a bigger 240&times;240 px one, for good
measure:
{{< content-grid columns=2 >}}
{{< figures/image name="netscape-modified60" shouldShowTitle=false shouldResize=false size=small >}}
{{< figures/image name="netscape-modified240" shouldShowTitle=false shouldResize=false size=small >}}
{{< /content-grid >}}
{{< figures/image names="netscape-modified60,netscape-modified240" shouldShowTitle=false >}}
<script src="https://mastodon.social/embed.js" async="async"></script>

View file

@ -1,7 +1,8 @@
---
title: "Pajaro Dunes"
date: 2023-05-30T08:31:34-07:00
tags: [Travel, Beaches, Tess, EJ, Vacations]
categories: Travel
tags: [Beaches, Tess, EJ, Vacations]
---
{{< tess >}}, EJ, and I took a weekend trip down the coast over Memorial Day

View file

@ -1,10 +1,8 @@
---
title: Trip to Japan
title: "Trip to Japan"
date: 2023-04-14T21:40:21+09:00
categories: Travel
tags:
- Travel
- japan
tags: ["日本"]
---
At the beginning of April, {{< tess >}} and I took a trip to Japan for two

View file

@ -1,4 +0,0 @@
---
title: 2024
date: 2024-01-01
---

View file

@ -1,56 +0,0 @@
---
title: ¡Ay Carmela!
description: |
Pero nada pueden bombas<br>
Donde sobra corazón
date: 2024-11-06T08:30:22-08:00
categories: Politics
tags:
- Music
- United States
- España
- Guerra Civil Española
---
> ```text
> El ejército del Ebro
> Rumbala rumbala rum-ba-la
> El ejército del Ebro
> Rumbala rumbala rum-ba-la
>
> Una noche el río pasó
> ¡Ay Carmela! ¡Ay Carmela!
> Una noche el río pasó
> ¡Ay Carmela! ¡Ay Carmela!
>
> Pero nada pueden bombas
> Rumbala rumbala rum-ba-la
> Pero nada pueden bombas
> Rumbala rumbala rum-ba-la
>
> Donde sobra corazón
> ¡Ay Carmela! ¡Ay Carmela!
> Donde sobra corazón
> ¡Ay Carmela! ¡Ay Carmela!
>
> Contraataques muy rabiosos
> Rumbala rumbala rum-ba-la
> Contraataques muy rabiosos
> Rumbala rumbala rum-ba-la
>
> <strong>Deberemos resistir</strong>
> ¡Ay Carmela! ¡Ay Carmela!
> Deberemos resistir
> ¡Ay Carmela! ¡Ay Carmela!
>
> Pero igual que combatimos
> Rumbala rumbala rum-ba-la
> Pero igual que combatimos
> Rumbala rumbala rum-ba-la
>
> <strong>Prometemos resistir</strong>
> ¡Ay Carmela! ¡Ay Carmela!
> Prometemos resistir
> ¡Ay Carmela! ¡Ay Carmela!
> ```
{cite="https://music.apple.com/us/album/ay-carmela/1119265269?i=1119265947" caption="Traditional; emphasis mine"}

View file

@ -1,5 +1,5 @@
---
title: B612
title: "B612"
date: 2024-03-09T08:38:03-08:00
description: An open source font I rediscovered recently.
categories: Tech

View file

@ -1,5 +1,5 @@
---
title: B612
title: "B612"
date: 2024-03-09T08:38:03-08:00
description: An open source font I rediscovered recently.
categories: Tech

View file

@ -1,64 +0,0 @@
---
title: Books I Read in 2024
slug: books
date: 2024-12-31
tags:
- Books
- Reading
---
I enjoy reading quite a bit. Nevertheless, it's something I need to be
intentional about incorporating into my life. I usually to finish a modest
number of books in a year. This year I made it to a nice round ten.
A big theme of the year is the [Murderbot Diaries][murderbot]. My friend Jess
recommended them to me a while back, and I finally got around to [All Systems
Red][murderbot1] last year. I was hooked enough that {{< tess >}} bought me the
subsequent three for Christmas last year. So you're gonna see almost all the
Murderbot books on this list.
[Bindle Punk Bruja](https://marthawells.com/networkeffect.htm) by Desideria Mesa
: Mesa's debut novel is set in 1920s Kansas City and centers around Rose, the
daughter of Mexican immigrants who takes on the city's mob bosses with the help
of friends and some witchy magical powers. This was a gift from my sister
[Anna][anna] for Christmas last year.
[The Deep Sky](https://www.yumekitasei.com/projects-6) by Yume Kitasei
: A murder mystery that takes place in space on a one-way mission to colonize a
far-off planet. A gift from my sister.
[Wolfsong](https://www.tjklunebooks.com/wolfsong) by TJ Klune
: Warewolves, magic, queerness, and family. A gift from my sister.
[Fingersmith](https://www.penguinrandomhouse.com/books/348400/fingersmith-by-sarah-waters/) by Sarah Waters
: Mystery, intrigue, gay ladies, and some incredible plot twists. Tess gave me
this one.
[Artificial Condition](https://marthawells.com/murderbot2.htm) by Martha Wells
: Murderbot investigates its past.
[Rogue Protocol](https://marthawells.com/murderbot3.htm) by Martha Wells
: Murderbot goes digging for evidence against its former corporate master,
GrayCris.
[Exit Strategy](https://marthawells.com/murderbot4.htm) by Martha Wells
: Murderbot attempts to save its former owner from GrayCris.
[Network Effect](https://marthawells.com/networkeffect.htm) by Martha Wells
: Continuing the Murderbot obsession, I picked up this one from a [Books
Inc][booksinc] in San Francisco's Marina district.
[I'm Starting to Worry About This Black Box of Doom](https://us.macmillan.com/books/9781250285959/imstartingtoworryaboutthisblackboxofdoom/) by Jason Pargin
: Anna and I decided to read this together, book club style. It's a ridiculous
romp across the US with some deep commentary on the perils of social media: how
it promotes dogpiling in ways that can destroy lives, and the groupthink that
arises from being terminally online.
[The Full Moon Coffee Shop](https://www.penguinrandomhouse.com/books/746333/the-full-moon-coffee-shop-by-mai-mochizuki/) by Mai Mochizuki
: A cute, short read about a mysterious popup coffee shop that appears in Kyōto
during the full moon.
[murderbot]: https://marthawells.com/murderbot.htm
[murderbot1]: https://marthawells.com/murderbot1.htm
[anna]: https://www.instagram.com/anna.e.az/
[booksinc]: https://booksinc.net

View file

@ -1,26 +0,0 @@
---
title: BSD `make` != GNU `make`
date: 2024-07-31T07:27:50-07:00
description: Discussing some differences between the BSD and GNU variants of `make(1)`.
categories: Tech
tags: [BSD, GNU, Make, Software]
---
While working on a little home networking project, I found myself having to
write a Makefile in a FreeBSD environment.
Having written only GNU Makefiles over the course of my life, I was surprised to
find that my recipes just ... didn't work.
Some resources that helped me make the jump to writing BSD style Makefiles are:
* The [`make(1)`][man] man page that ships with FreeBSD. It's surprisingly
thorough, but difficult to search through if you don't know exactly what
you're looking for.
* This FreeBSD mailing list post quoting [GNU make's summary of
differences][diffs] from BSD `make`.
* And [PMake: A Tutorial][pmake], hosted on FreeBSD.org.
[man]: https://man.freebsd.org/cgi/man.cgi?make(1)
[diffs]: https://lists.freebsd.org/pipermail/freebsd-questions/2007-April/147533.html
[pmake]: https://docs-archive.freebsd.org/44doc/psd/12.make/paper.pdf

View file

@ -1,69 +0,0 @@
---
title: "Cat in the Cream Cookies"
date: 2024-11-18
tags:
- Cooking
- Cookies
- Oberlin
- Recipes
---
One of my favorite memories from my time as a student at [Oberlin][ob] was going
to the [Cat in the Cream][cat]. I saw a lot of great plays, improv shows, and
jazz ensembles by students, and several performances by visiting musical guests.
The other highlight of these memories was the oatmeal chocolate chip cookies you
could get for $1. They're somewhere between a small cake and a cookie, often
fresh-baked (they often had a hard time keeping up with demand on show nights).
Honestly they're everything I want in a cookie. I think the recipe was printed
in an edition of the [Alumni Magazine][mag] at some point in the last several
years, but this [video][video] I found online was the closest I had to hand, so
I'm copying it here.
## Recipe
**Yield:** 20 cookies
### Tools
* Measuring cups and spoons
* 2 large mixing bowls
* Spoon or electric mixer to mix wet ingredients
* Whisk to combine dry ingredients (optional)
* 1 or 2 half-size sheet pans for baking
### Ingredients
* 2 cups butter, softened
* 1 cup granulated sugar
* 2 cups brown sugar or 2 tablespoons of molasses
* 4 eggs, lightly beaten
* 2 teaspoons vanilla
* 4 cups flour
* 2 teaspoons baking soda
* 2 teaspoons salt
* Dash cinnamon
* 4 cups oats
* 3 cups chocolate chips
### Method
1. Preheat oven to 375°.
1. Combine butter, sugars, and/or molasses in a bowl.
1. Add eggs and vanilla. Stir to combine.
1. Mix flour, baking soda, salt, and cinnamon in a separate bowl.
1. Add dry ingredients above to the wet. Stir to combine.
1. Add in oats and chocolate chips. Stir to combine.
1. Drop in large hunks (about 1/4 cup) onto ungreased baking sheets. They don't
spread during baking, but you'll only get six cookies on a half sheet.
1. Bake until the edges are slightly brown. The original recipe says 20 minutes,
but 15 was enough in my oven.
[ob]: https://www.oberlin.edu
[cat]: https://www.thecatinthecream.com/our-menu.html
[video]: https://vimeo.com/827645032
[mag]: https://www.oberlin.edu/communications/editorial/alumni-magazine

View file

@ -1,68 +0,0 @@
---
title: Chicago
date: 2024-10-05T18:58:05-05:00
description: >
Tess and I traveled to Chicago to attend the wedding of one of my oldest
friends, visit some family, and do a little sightseeing.
resources:
- src: wedding.jpg
title: Bill and Ashley walked each other in. My dad officiated.
params:
alt: >
To the left, a man wearing a suit and white pastoral stole stands near a
mic. To the right, a woman in a white dress, and a man in a tuxedo walk
into the frame. Everyone is smiling.
- src: quincy.jpg
title: >
Wood plank platforms, Copperplate lettering, and wingding-style hands to
direct you where you need to go.
params:
alt: >
A large station sign, framed with a simple wood frame, hanging on the
railing around a station platform stairway. It declares the station's
name, Quincy, and points to exits to the left and right.
- src: tess-kerryman.jpg
title: >
The Kerryman is a great Irish bar in River North, owned and operated by
one of Tess' distant Irish cousins.
params:
alt: >
Tess, on the left, stands outside a large pub on a stree corner. The pub
has outdoor seating.
tags:
- Travel
- Friends
- Family
- "Chicago, IL"
- Illinois
---
This past week {{< tess >}} and I traveled to Chicago to attend the wedding of
Bill, one of my oldest friends, and his partner Ashley.
{{< figures/image name=wedding.jpg >}}
They've been a couple for a long time. I'm thrilled that they've decided to take
this step together, and grateful to have been invited to witness it. Bill also
asked my dad to perform the ceremony, and I think he did an excellent job.
{{< figures/image name=quincy.jpg >}}
After the wedding day, we spent several days in Chicago sightseeing and visiting
with friends and family. We went record shopping at [Reckless][reckless], walked
down Navy Pier and Michigan Avenue, rode the L (including a stop a the
delightfully old timey [Quincy Station][quincy]), took selfies at the
[Bean][bean], and caught Hokusai's [Great Wave Off Kanagawa][wave] at the [Art
Institute of Chicago][artic] on a limited exhibition. We had breakfast at
[Tary][tary], and stopped in for pints at [The Kerryman][kerryman], a pub owned
by one of Tess' distant Irish cousins.
{{< figures/image name=tess-kerryman.jpg >}}
[reckless]: https://www.reckless.com
[bean]: https://millenniumparkfoundation.org/art-architecture/cloud-gate/
[artic]: https://www.artic.edu
[tary]: https://tarycoffee.com/menu
[kerryman]: https://kerrymanchicago.com/drinks/
[wave]: https://en.wikipedia.org/wiki/The_Great_Wave_off_Kanagawa
[quincy]: https://www.transitchicago.com/station/quin/

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3b6c19b8a5f589b21a7ab8ee846e2c23c364335142c04457998cc89e948ac39e
size 1843640

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ad7dcfa33b5a9df82ae941f970324bcac5a25dbd36e900051032724a2af15bb2
size 2452294

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:08c30e5304a8341e6734eb5ce53c3249c935eb1eaa0401e90726ff660f8cf0e8
size 2870428

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1d3444135aab32635f480ee8ca4a6797821ff9b6f0f68e51aa4dd0f9b5d6383e
size 3407880

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5c17df7d3f75b0f3b18f9b5d73c1aa63b54ce5d856742f7121f4b9e9c8632e54
size 3836629

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:19005c6eb5ef6da85eafcfe5abc92cff98bd4a7b53156fee94204f0e100db359
size 1129641

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3e171f8b999e0af9bf949e391397a78ef6c7dd34bffa127c62f78ad57917f185
size 2557799

View file

@ -1,117 +0,0 @@
---
title: "Christmas in Massachusetts"
description: This year, I spent Christmas with Tess and Erin in Massachusetts.
date: 2024-12-25
resources:
- src: snow-friend.jpg
title: The tiniest snow friend
- src: erin-snowballs.jpg
title: Erin making snowballs
- src: minot.jpg
title: Minot Light sits on an undersea ledge far out from shore
- src: sand-hills.jpg
title: The sea wall along Sand Hills Beach, where Tess spent many summers
- src: bluey-erin-kathleen.jpg
title: Heading into the Heeler's living room with Auntie Kathleen
- src: bluey-green-door.jpg
title: Waiting to go through the secret door!
- src: bowling.jpg
title: Erin's first game of candlepin bowling
- src: old-brigade.jpg
title: Danny (on the center mic) and the Old Brigade at Fox & Hound in Quincy, MA
tags:
- Holidays
- Christmas
- Family
- Tess
- Erin
- Candlepin Bowling
- Massachusetts
---
This year, {{< tess >}}, Erin, and I traveled to Massachusetts to spend
Christmas with Tess' family. This was my first year spending Christmas away from
my family in Arizona, and my first with Tess and Erin.
One of my hopes for Christmas in a cold place was to see some snow. As luck
would have it, I woke up on Christmas Eve to find a light dusting! Erin and I
couldn't help ourselves: we rushed outside to make a few snowballs and the
tiniest snow man you've ever seen.
{{< 2col >}}
{{< figures/image name=erin-snowballs.jpg >}}
{{< figures/image name=snow-friend.jpg >}}
{{< /2col >}}
We opened presents and had a lazy Christmas morning. We had dinner at Tess'
parents' house, and then went over for Christmas dessert at her cousin's house
-- a truly massive family event with many extended family members attending.
The next day, Tess and I went "down harbor" for lunch and a little walk around.
We stopped at [Lucky Finn](https://www.luckyfinncafe.com) for a coffee, and Tess
took me around to see some of her old summer stomping grounds. I asked her to
help me get a good view of [Minot Light][minot], but it turns out it's really
damn far out so I only managed a little speck on the horizon.
{{< 2col >}}
{{< figures/image name=minot.jpg >}}
{{< figures/image name=sand-hills.jpg >}}
{{< /2col >}}
On Friday, Tess, Erin, and I went candlepin bowling at [Alley Kat
Lane][alleykat] in Kingston. Despite some initial hesitation, Erin had a lot of
fun. It was my first time at candlepin bowling too, and I found it really fun!
Harder than "big ball" bowling, but also more approachable because of the
lighter, smaller ball. The opportunities to strategize how to use the fallen
pins to your advantage add an interesting element too.
{{< 2col >}}
{{< figures/image name=bluey-erin-kathleen.jpg >}}
{{< figures/image name=bluey-green-door.jpg >}}
{{< /2col >}}
On Saturday, Tess, Kathleen, and I took Erin to an immersive [Bluey camp][bluey]
in Burlington. She had a great time building a fort out of the big cushy
oversized "blocks" in Bluey and Bingo's playroom.
{{< 2col >}}
{{< figures/image name=bowling.jpg >}}
{{< figures/image name=old-brigade.jpg >}}
{{< /2col >}}
Our last day in town, we went out to brunch at [The Tinker's Son][tinker], and
went up to [The Fox & Hound][fox] in Quincy to watch Tess' cousin
[Danny][brigade] play Irish music.
---
I had a lot of feelings going into this Christmas. Apart from one pandemic year,
I've spent every year with my family in Arizona. I was worried about being in a
new place with people I didn't know well, breaking long-standing traditions with
my own family, letting them down, and feeling homesick.
Everyone in Tess' family was welcoming and supportive. Tess' mom even got me a
stocking for their fireplce with my name on it, and her dad filled it with many
of the same things he gives to the rest of the family members. I also got to
watch Erin experience Christmas as a kid for the first time: opening presents,
playing in the snow, snuggling and reading books or watching TV together.
I was able to keep some of my family traditions too. Mom sent me a box of full
of cookies; I shopped for presents for my parents and sister. And when we
returned to California, I was able to have a video call with my family to open
presents together.
The older I get the more see the point of Christmas to be about the
relationships to family, and the sense of home and community you get from being
with people you love. Despite a whole new experience, I really felt that this
year. In fact, I think being in a new place, enacting different traditions, let
me hold the traditions and rituals of Christmas as I've experienced up to now a
little more loosely, and to focus on the people that bring meaning to the
holiday and make those rituals happen.
[minot]: https://en.wikipedia.org/wiki/Minot%27s_Ledge_Light
[bluey]: https://camp.com/bluey-x-camp-boston
[alleykat]: https://alleykatlane.com
[tinker]: https://www.thetinkersson.com
[fox]: https://www.foxandhoundquincy.com
[brigade]: https://www.instagram.com/theoldbrigade/

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:60395d73a2aa641b7d3f033474685bd2f9ef3128bb328f52456f432db579c1a3
size 1976740

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a3b5bd5931bdec32c2b54f7a63c6761d6951ee7e75891af6863aa127b2ed20ae
size 3163986

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8c190c6ac37402e683c61715a71a1c4494c81a659a63403329a871017d9bf156
size 3017239

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:812fcea1bf412ac0fd89d790095ae641dcc0461c14caa11e5f7f53a3f479240a
size 2395627

View file

@ -1,28 +0,0 @@
---
title: "Departure Mono"
description: >
A fun fixed-width font evoking old school terminals and pixel fonts
from early computing.
date: 2024-12-28T08:19:53-05:00
resources:
- src: screenshot.png
title:
params:
alt: >
A screenshot of the Departure Mono website. On the left, a small caption
"Departure Mono is a monospaced pixel font with a lo-fi technical vibe".
On the right are two examples: a personal letter on continuous feed
paper, and a notice on small stationary.
tags:
- Fonts
- Design
- Web Design
---
Here's a fun fixed-width pixel font I came across the other day: [Departure
Mono][dep]. It's got a neat old school terminal vibe, think VT100 or Commodore
64.
{{< figures/image name=screenshot.png >}}
[dep]: https://departuremono.com

Binary file not shown.

Before

Width:  |  Height:  |  Size: 568 KiB

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7c8907530f730f800e59101b9b26cd200b6f73c9bb045560ed0354ac4a73bf41
size 1933691

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:25ea86cacf4d35397f8dddfe949c83bf7abd1c8df23cf447820603abb4e40b50
size 2144929

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c3f95920dc571ee9ac3fae17bd190d2a45e4fa85a94e50ea488bd79f9b5cb988
size 1925477

View file

@ -1,96 +0,0 @@
---
title: Eclipse
date: 2024-04-09T20:26:31-05:00
description: >
I traveled to Austin, TX to watch the total solar eclipse that passed over
North America, and visit my friend Breanna Carzoo.
tags:
- Travel
- Space
- Eclipse
- "Austin, TX"
- Texas
- Food
- Conchas
- Books
- Reading
resources:
- name: preparing
src: preparing.jpg
title:
- name: sol
src: sol.jpg
title: Sol
- name: ringoffire
src: ringoffire.jpg
title: The Ring of Fire
- name: diamondring
src: diamondring.jpg
title: Diamond Ring
- src: breanna-reading.jpg
title: Breanna read Greenlight to a room full of kids wearing bee antennae.
- name: concha
src: comadre-concha.jpg
title: >
An earl grey concha from Comadre. The most delicate, flavorful pan dulce
I've ever had.
params:
alt: >
A small round bun with a pinkish topping sittin on a napkin in front of
a traditional cardboard donut box.
---
{{< figures/image name=preparing >}}
On April 8, the earth experienced a [total solar eclipse][nasa] tracking over
North America. I was so excited to be able to travel to the path of totality and
observe the eclipse with my friend and fellow space nerd, [Breanna
Carzoo][breanna].
My setup for all my eclipse photos was a [Fujifilm X-T5][xt5], with a [Canon EF
100mm Macro][lens] lens. I used a [Fringer EF-XT converter][converter] to mount
the EF lens on the X-T5. Of course I also had a solar filter.
Here's one of my first test images. You can see a sun spot!
{{< figures/image name=sol >}}
During totality, when the moon fully covers the disc of the sun, a phenomenon
known as the "Ring of Fire" occurse. The sky is dark and most of the Sun's light
is hidden. In this state, it's possible to see the Sun's corona.
{{< figures/image name=ringoffire >}}
Just before and after totality is the "Diamond Ring" phase, when the last bit of
light from the Sun's disc shines through the craters and valleys of the moon's
surface.
{{< figures/image name=diamondring >}}
Austin, TX was pretty cloudy that day. I'm grateful we were able to see as much
of the eclipse as we did. The clouds made for some awesome effects too. I'm
particularly proud of my Diamond Ring image (above) with the additional drama
the clouds brought to an already stunning event.
Apart from the eclipse, I got to see Breanna do a book event in Bee Cave, TX.
This town is adorable and leans hard into its name -- everything has a bee
theme.
{{< figures/image name=breanna-reading.jpg >}}
I was also eager to try [Comadre Panadería](https://comadrepanaderia.com) after
hearing about it from Claire Saffitz on [one of her videos][comadre-yt] on her
Dessert Person YouTube channel. I have a huge soft spot for conchas -- Mexican
pan dulces shaped like shells -- and these were _incredible_.
{{< figures/image name=concha >}}
All told, a very successful trip! Breanna and I had a great time hanging out
together, and despite the clouds we got some great views of the eclipse.
[nasa]: https://science.nasa.gov/eclipses/future-eclipses/eclipse-2024/
[breanna]: https://www.breannacarzoo.com
[xt5]: https://fujifilm-x.com/en-us/products/cameras/x-t5/
[lens]: https://www.usa.canon.com/shop/p/ef-100mm-f-2-8l-macro-is-usm
[converter]: https://www.fringeradapter.com/canon-ef-to-fujifilm-x
[comadre-yt]: https://www.youtube.com/watch?v=kJTHTfJ-91E

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2148bc15896769676fe90239e5ca9db6d8dfecddf6b81aeebbf744dcd1c23c89
size 2674771

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e80cba7115954aff0f0b9273ba6dffc88718bd503c9417be326f6e5224096a20
size 2896916

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d5e0ab1a47e9458ee74915c2f590304dfef1abc274a9abe8e40d96ad58dffe4a
size 145056

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:13194315d6a2fac61f53e90d38ebe33fd47d003d139234228612a480381c61c7
size 7053052

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0b565d8e066e23fab93d9a5fd608fe0e02c1e0bf0b489df01db9b826c6393fc0
size 4674598

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c62241b3f869bd12929c110b35ad56068efe0fe8cd5ffec63471b923783dcfba
size 1791979

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:63f08d4ed12e50711aa7de6ff40cb93a557171e8401c228dd575490b57def1b5
size 4768284

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8282aa52129a604bcf64a794de2024f708ca7cbf99f631dbc5c884f565393d9d
size 15916253

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:50afe7102da154cb2a1264896b5b2899cbbbb0c5569d3ae60baf68337ddeb3c2
size 5995046

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4aa281761426a6a147f9b1ef0cc00b9261352783b3e7a3189e27638f4250053e
size 8341406

View file

@ -1,387 +0,0 @@
---
title: Jackson and Other Holes
date: 2024-10-28T16:16:28-06:00
description: >
My fourth annual trip with a group of high school friends took us to
Yellowstone and Grand Teton National Parks.
categories: Travel
tags:
- Friends
- Idaho
- Wyoming
- Montana
- National Parks
- Yellowstone
- Grand Teton
resources:
- name: tetons-plane
src: tetons-plane.jpg
title: The view of the Grand Tetons on approach to JAC.
params:
alt: >
Four craggy peaks rise into a low cloud layer. A streak of flow streaks
off of the tallest peak like smoke from a candle. The foothills around
these mountains are covered in trees.
- name: tetons-airbnb
src: tetons-airbnb.jpg
title: The Grand Tetons from the Teton Valley, where our Airbnb was.
params:
alt: >
The four Teton peaks appear dramatically above a cluster of buildings in
the middle of a field.
- name: jackson-drug-co
src: jackson-drug-co.jpg
title: Jackson's town square is full of quaint shops and local color.
params:
alt: >
The Jackson Drug Company storefront at the corner of Cache and Deloney
in Jackson, Wyoming. There are white benches out front and clusters of
Halloween pumpkins decorating the doorway. The windows advertise ice
cream, meals, and alcohol for purchase.
- src: cowboy-bar-group-photo.jpg
title: >
The Million Dollar Cowboy Bar is quite a place. All the seats along the
bar are saddles!
params:
alt: >
Nine people sitting along a bar, smiling at the camera. The restaurant
is full of old-timey western decorations. Behind the group is a set of
pool tables with red felt.
- src: sunrise.jpg
title: >
The sunrise this morning was stunning, with the mountains lit from
behind.
params:
alt: >
The Teton mountains lit from behind by the rising sun. The sky is
colored dramatically in blues, pinks, and purples. In front of the
mountains is a mist layer and sillouettes of several farm buildings.
- src: prismatic-spring.jpg
title: The Grand Prismatic Spring
params:
alt: >
A large hot spring surrounded by flat barren fields. Around the rim are
dramatic orange, blue, and yellow rings. Steam billows from the surface.
- src: barry-profile.jpg
title: >
We spotted Barry the Bison grazing on the grasses along the Fairy Falls
trail, on the way up to the Grand Prismatic Spring observation point.
params:
alt: >
A bison in a field. In the background, steam rises from unknown sources.
- src: grand-canyon.jpg
title: >
The Grand Canyon of Yellowstone
params:
alt: >
A V-shaped canyon of solid yellow stone. A large waterfall pours water
into a river running along the bottom of the canyon. Trees cover the
canyon walls.
- src: buck.jpg
title: >
This guy kept circling back to the ditch on the far side of this road to
attack a traffic cone that, presumably, had committed some egregious
offense.
params:
alt: >
A young elk with a small set of antlers stands in the middle of a road.
Cars wait for him to pass.
- src: jenny-lake-panorama.jpg
title: A panorama of Jenny Lake. Photobomb by Alex.
params:
alt: >
A paraoramic photo of a clear, blue lake. Immediately behind it are
tree-covered mountains. On the far right of the frame, a person makes a
peace sign and sticks out their tongue at the camera.
- src: leigh-lake.jpg
title: Leigh Lake
params:
alt: >
A still lake reflects the image of the mountains behind it. In the near
foreground are various water plants.
- src: signal-mountain-1.jpg
title:
params:
alt: >
A broad landscape perspective showing a river running through a thick
forest.
- src: signal-mountain-2.jpg
title:
params:
alt: >
A landscape perspective showing a wide flat plain, partially covered in
trees. Roughly in the middle is a lake.
- src: mormon-row-out-buildings.jpg
title: >
A couple of the farm buildings in the Mormon Row area. These were built in
the early 20<sup>th</sup> century, and lived in until the 1970s!
params:
alt: >
Two weathered cabin-style buildings. The Teton mountains are in the
background.
- src: mormon-row-barn.jpg
title: >
One of the barns at the farthest-out settlement along Mormon Row. Hard to
complain about the view, but the wind out here was brutal.
params:
alt: >
A two-story barn with a variety of siding on each level. The roof of the
main part is a traditional barn shape. On the left is a small
trapezoidal extension. The Teton mountains are visible in the
background.
- src: mormon-row-cow-path.jpg
title: Following the cow paths through the fields.
params:
alt: >
In a dead field of short grasses a small path cuts through. Farther
along the path a person wearing a white shirt follows the cut. In the
background are a few buildings and one person.
- src: duck-butts.jpg
title: Butts. Lol.
params:
alt: >
Five ducks in a pond. Four of them have bobbed down into the water, with
their tail feathers pointing up.
- src: schwabacher-group.jpg
title: Most of our group, minus Tess and me (taking the photo).
params:
alt: >
Seven people almost all wearing sunglasses standing on a fallen tree.
The tree has numerous branches off of the main trunk.
- src: moose.jpg
title: Oh my god, there's a moose on the loose!
params:
alt: A moose stands in a field of sagebrush near a single tree.
- name: sunset-video
src: sunset.mov
title: The sunset from Schwabacher Landing
- src: genevieve.jpg
title: >
The Most Noble Pig, proprietor (I assume) of Cafe Genevieve in Jackson,
Wyoming.
params:
alt: >
A framed painting of a pig on a dark background. The pig looks sideways
at the viewer. The painting has a small caption plate saying "A Most
Noble Pig". The painting is mounted on a wall covered in a busy
wallpaper showing leaves, mushrooms, flowers, and pigs.
---
I recently returned from a trip with a group of my high school friends. This is
the fourth annual trip we've taken as a group, and we covered a lot of ground,
visiting three states and two national parks. Here's what we got up to.
## Day 1
We arrived at [Jackson Hole Airport][jac] (JAC) on Wednesday afternoon. This
airport is the only one [located in a national park][jacwp]. That fact coupled
with a flight path that brings planes in from the north means we got a stunning
first look at the Teton[^1] mountains from the plane.
{{< figures/image name=tetons-plane >}}
We stopped for beers at [Snake River Brewing][snakeriverbrew] in Jackson,
Wyoming before heading over the [Teton Pass][tetonpass] to our AirBnb, about six
miles outside of [Driggs, Idaho][driggs].
{{< figures/image name=tetons-airbnb >}}
The [Teton mountains][tetons] are quite striking. I couldnt get enough photos
of them, especially with the pastoral foregrounds of farm buildings and fields.
The photo above is from the deck of our Airbnb, on the opposite side of the
range from the one I took from the plane.
## Day 2
Our first full day was a relaxed tourist day in Jackson. We had lunch at [Grand
Teton Brewing][gtbrew] in [Victor, Idaho][victor], then drove over the pass to
Jackson. The town is situated around a central square that's surrounded by shops
and restaurants.
{{< figures/image name=jackson-drug-co >}}
We spent the afternoon wandering in and out of the local stores, and stopped in
the delightfully kitschy [Million Dollar Cowboy Bar][cowboy-bar] for drinks and
a round of pool.
{{< figures/image name=cowboy-bar-group-photo.jpg >}}
Dinner was pizza from [Pinky G's][pinkyg] in Victor.
## Day 3
We were up early today to drive into [Yellowstone National Park][yellowstonenp].
{{< figures/image name=sunrise.jpg >}}
We opted to spend our day in the west and south side of the park, touring the
[Grand Prismatic][prismaticnps] [Spring][prismaticwp] and [Old
Faithful][oldfaithful]. I enjoyed reading about the geology of the area, and how
the volcanic activity below the surface drives the geysers, mud pots, and hot
springs the park is best known for.
The Prismatic Spring was a bucket list item for me, so I was thrilled to get to
see it.
{{< figures/image name=prismatic-spring.jpg >}}
We hiked along the Fairy Falls trail to the overlook and spotted our first
megafauna of the trip: a bison! He was grazing along the trail. We named him
Barry.
{{< figures/image name=barry-profile.jpg >}}
From there we drove down the road to the [Old Faithful Visitor Education
Center][oldfaithfulvec]. Wed just missed an eruption, so we opted to hang out
until the next one. Meanwhile we had some lunch and wandered the visitor
center's exhibit on the various geothermal features in the geyser basin.
Our last stops of the day were the [Grand Canyon of Yellowstone][grandcanyon]
a name this group of Arizonans found somewhat bewildering and Hayden Valley.
The Canyon didnt disappoint; is indeed grand.
{{< figures/image name=grand-canyon.jpg >}}
On the way out of the park, we came across a group of elk, including a
particularly feisty young male who was determined to put a traffic cone in its
place.
{{< figures/image name=buck.jpg >}}
We stopped for dinner at the [Slippery Otter][slipperyotter] in West Yellowstone
before heading home.
## Day 4
The first of two days at [Grand Teton National Park][gtnp] started with
sandwiches from a small deli in [Moose, Wyoming][moosewy]. This town, along with
the airport, also sits within the national park boundaries. A little ways down
the road we came to [Jenny Lake][jennylake].
{{< figures/image name=jenny-lake-panorama.jpg >}}
We also hiked around [Leigh Lake][leighlake], the next in a chain of lakes at
the immediate base of the mountains.
{{< figures/image name=leigh-lake.jpg >}}
We wrapped up this day with a drive up [Signal Mountain][signalmtn][^2] and an
unsuccessful moose-spotting drive down the Moose-Wilson Road.
{{< figures/image name=signal-mountain-1.jpg >}}
{{< figures/image name=signal-mountain-2.jpg >}}
Before bed, a bunch of us enjoyed the hot tub and beautifully clear night skies.
We found Jupiter and Saturn, as well as several constellations. The Milky Way
was overhead as well. I *always* enjoy stargazing, and dont get to do it nearly
enough under dark skies. This was a real treat.
## Day 5
Our first stop in the park was Mormon Row, a chain of houses and farm buildings
constructed by Mormon homesteaders in the early 20<sup>th</sup> century.
{{< figures/image name=mormon-row-out-buildings.jpg >}}
{{< figures/image name=mormon-row-barn.jpg >}}
Seeing how these people carved a living out of a relatively harsh
environment[^3] is awe inspiring.
{{< figures/image name=mormon-row-cow-path.jpg >}}
We drove further down the road to [Lower Slide Lake][lowerslide] to spend a
little time relaxing and waiting for sunset. We skipped rocks and built cairns
at the lakeshore, and admired the scenic views of the farms across the lake.
Our last scheduled stop was an attempt to catch the sun setting behind the
peaks. We drove out to [Schwabacher Landing][schwabacher] and hiked a little
ways in. This spot was a gorgeous place to wait for the sun. A bunch of the
group climbed into a fallen tree for a particularly silly group photo.
{{< figures/image name=schwabacher-group.jpg >}}
We also caught some duck butts!
{{< figures/image name=duck-butts.jpg >}}
I managed to take a time lapse video of the sun setting. It was going great
until the wind blew it off its jaunty perch on a branch.
{{< figures/image name=sunset-video >}}
On the way home we took another shot at catching a moose along the Moose-Wilson
Road, and this time we were successful! A short way down the road, we came to a
clearing where not one but two moose were grazing in the sagebrush.
{{< figures/image name=moose.jpg >}}
Given our prior unsuccessful attempt, several of us had tempered our
expectations going into this drive. That made seeing two moose so quickly into
the drive all the more exciting.
## Day 6
Time to head home. 😢 We broke camp at the Airbnb in the morning and said
goodbyes to a few of our group with flights out of Bozeman, Montana. Due to a
complication with our rental cars, I drove twice over Teton Pass to get everyone
to JAC who needed to be there.
{{< figures/image name=genevieve.jpg >}}
Trent, Tess, and I had a last lunch at [Cafe Genevieve][genevieve] in Jackson.
Then, we returned the rental car and caught our flights home.
## Hasta Luego
This group means a lot to me. Weve hung together through the worst of the
pandemic, and make time every year to spend a few days together. There are
challenges and small conflicts every year, but we always make it through and
continue to put in the work to make these trips happen. Im so grateful for
that.
[^1]: Tess informed me shortly after landing of the meaning of the French word
_téton_. A fact that delighted me for the entirety of the trip. Two lesbians
traveling to the middle of the country to check out "the great tits" is about as
on the nose as it gets, isnt it?
[^2]: The view from the top of signal mountain is breathtaking, however I
couldnt help notice one of the water features bears a certain phallic
resemblance.
[^3]: Some of the signage here explained that the homesteaders picked this spot
because the nearby butte sheltered them from the wind. Several of us found
this fact unbelievable considering how windy it was that day.
[jac]: https://www.jacksonholeairport.com
[jacwp]: https://en.m.wikipedia.org/wiki/Jackson_Hole_Airport
[snakeriverbrew]: https://www.snakeriverbrewing.com
[tetons]: https://en.wikipedia.org/wiki/Teton_Range
[tetonpass]: https://en.wikipedia.org/wiki/Teton_Pass
[victor]: https://victoridaho.gov
[gtbrew]: https://grandtetonbrewing.com
[pinkyg]: https://pinkygs.com
[driggs]: http://www.driggs.govoffice.com/
[yellowstonenp]: https://www.nps.gov/yell/index.htm
[prismaticnps]: https://www.nps.gov/places/000/grand-prismatic-spring.htm
[prismaticwp]: https://en.wikipedia.org/wiki/Grand_Prismatic_Spring
[oldfaithful]: https://www.nps.gov/yell/planyourvisit/exploreoldfaithful.htm
[oldfaithfulvec]: https://www.nps.gov/yell/planyourvisit/oldfaithfulvec.htm
[grandcanyon]: https://www.nps.gov/yell/planyourvisit/canyonplan.htm
[slipperyotter]: https://www.yelp.com/biz/slippery-otter-pub-west-yellowstone
[gtnp]: https://www.nps.gov/grte/index.htm
[moosewy]: https://en.wikipedia.org/wiki/Moose,_Wyoming
[jennylake]: https://www.nps.gov/grte/planyourvisit/jennylakeplan.htm
[leighlake]: https://www.nps.gov/grte/planyourvisit/stringleighplan.htm
[signalmtn]: https://www.nps.gov/grte/planyourvisit/signalmountainplan.htm
[cowboy-bar]: https://www.milliondollarcowboybar.com/
[lowerslide]: https://en.wikipedia.org/wiki/Lower_Slide_Lake
[schwabacher]: https://www.nps.gov/places/000/schwabacher-landing.htm
[genevieve]: https://genevievejh.com

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