diff --git a/.gitattributes b/.gitattributes index 0b5b3d4..90fc636 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,5 @@ *.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 diff --git a/.gitignore b/.gitignore index 2ca23d2..2073fc6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +LightroomExports/ node_modules/ public/ /documentation/mirrors/ diff --git a/Makefile b/Makefile index 413dece..fea5233 100644 --- a/Makefile +++ b/Makefile @@ -21,9 +21,11 @@ site: hugo --buildFuture --enableGitInfo --destination "$(BUILD_DIR)" 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 deploy-$(shell date +%Y-%m-%d) + git tag -f $(shell ./scripts/website deployment next-tag) deployall: nethack deploy @@ -38,13 +40,5 @@ endif nethack-commit: $(NETHACK_LOGFILE_DATA_FILE) if ! git diff --quiet $<; then git commit -m "Update Nethack logfile for $(HOSTNAME)" -- $<; fi -weeknotes: YEAR=$(shell date '+%Y') -weeknotes: WEEK_NUMBER=$(shell date '+%V') -weeknotes: UPCOMING_SUNDAY=$(shell scripts/weeknotes show --date) -weeknotes: PAGE_PATH=$(shell scripts/weeknotes show) -weeknotes: $(PAGE_PATH) - hugo new -k weeknotes --clock "$(UPCOMING_SUNDAY)" -c "$(CONTENT_PATH)" "$(PAGE_PATH)" - sed -I -e "s/%%WEEK_NUMBER%%/$(WEEK_NUMBER)/" "$(PAGE_PATH)" - clean: rm -rf "$(BUILD_DIR)/" diff --git a/archetypes/link.md b/archetypes/link.md new file mode 100644 index 0000000..5a8d835 --- /dev/null +++ b/archetypes/link.md @@ -0,0 +1,9 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +slug: link-{{ .Name }} +date: {{ .Date }} +categories: links +draft: true +tags: [] +--- + diff --git a/archetypes/weeknotes.md b/archetypes/weeknotes.md index 93bbb34..1bae5a0 100644 --- a/archetypes/weeknotes.md +++ b/archetypes/weeknotes.md @@ -1,9 +1,10 @@ --- -title: "Weeknotes for {{ time.Now.Format "2006" }}W%%WEEK_NUMBER%%" +title: "Notes on {{ time.Now.Format "2006" }}W%%WEEK_NUMBER%%" slug: weeknotes-{{ time.Now.Format "2006" }}w%%WEEK_NUMBER%% -date: {{ .Date }} +date: {{ .Date | time.Format "2006-01-02" }} categories: weeknotes -tags: [] +tags: + - Weeknotes draft: true --- diff --git a/assets/css/099_format_tweaks.css b/assets/css/099_format_tweaks.css new file mode 100644 index 0000000..453f2cc --- /dev/null +++ b/assets/css/099_format_tweaks.css @@ -0,0 +1,18 @@ + + + + + +/************************ + * PARAGRAPH-SPACED LIST + ************************/ + +p + .paragraph-spaced-list { + margin-block-start: var(--space-paragraph); +} + +.paragraph-spaced-list { + li + li { + margin-block-start: var(--space-paragraph); + } +} diff --git a/assets/images/memes/not-doing-it.png b/assets/images/memes/not-doing-it.png new file mode 100644 index 0000000..0dd9974 Binary files /dev/null and b/assets/images/memes/not-doing-it.png differ diff --git a/assets/scripts/rubiks/scrambler.js b/assets/scripts/rubiks/scrambler.js new file mode 100644 index 0000000..10a03c3 --- /dev/null +++ b/assets/scripts/rubiks/scrambler.js @@ -0,0 +1,123 @@ +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); diff --git a/config/_default/permalinks.yaml b/config/_default/permalinks.yaml index 8efe757..7d4b0bc 100644 --- a/config/_default/permalinks.yaml +++ b/config/_default/permalinks.yaml @@ -1,2 +1,3 @@ blog: blog/:year/:month/:slug/ photos: photos/:year/:month/:slug/ +twitter: twitter/:year/:month/:slug/ diff --git a/config/_default/privacy.yaml b/config/_default/privacy.yaml index 86268a6..ad42382 100644 --- a/config/_default/privacy.yaml +++ b/config/_default/privacy.yaml @@ -1,2 +1,2 @@ -twitter: +x: enableDNT: true diff --git a/config/_default/services.yaml b/config/_default/services.yaml index 4ad50c5..4738995 100644 --- a/config/_default/services.yaml +++ b/config/_default/services.yaml @@ -1,2 +1,2 @@ -twitter: +x: disableInlineCSS: true diff --git a/content/_index.es.md b/content/_index.es.md index 4812de4..dec3a59 100644 --- a/content/_index.es.md +++ b/content/_index.es.md @@ -1,8 +1,20 @@ --- -title: Eryn Rachel Wells layout: single +draft: true +params: + renderHeadingAnchors: false --- -{{< nobreak >}}Ingeniera de software,{{< /nobreak >}} -alfarera, música, y -{{< nobreak >}}nerd en general.{{< /nobreak >}} +¡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 diff --git a/content/_index.md b/content/_index.md index 320c794..e4ca8ce 100644 --- a/content/_index.md +++ b/content/_index.md @@ -6,53 +6,61 @@ params: 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 trans woman, {{< tess >}}' partner, and mom of [two cats][cats]. I +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][ob] +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][a] in 2016, where I currently work +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 -coding other project][gh]. I'm also a musician, and play piano, Irish tin -whistle, and modular synthesizer. Occasionally I [record][bc] [things][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 iaido, a traditional Japanese -sword art, since early 2024. Other things I've been into include: bread baking, +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. -[a]: https://apple.com + +[Apple]: https://apple.com [ab]: {{< ref "/about" >}} [b]: {{< ref "/blog" >}} [bc]: https://erynwells.bandcamp.com/releases [cats]: {{< ref "/cats" >}} [eml]: mailto:Eryn%20Wells -[gh]: https://github.com/erynofwales +[src]: https://source.erynwells.me/eryn [ig]: https://www.instagram.com/erynofwales [m]: https://mastodon.social/@erynofwales [n]: {{< ref "/now" >}} -[ob]: https://www.oberlin.edu +[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 diff --git a/content/about/_index.md b/content/about/_index.md index c0e779f..5c1da98 100644 --- a/content/about/_index.md +++ b/content/about/_index.md @@ -1,17 +1,16 @@ --- title: "Hi! 👋🏻" +layout: single 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=flow %}} - -{{< circular_image id=me name=me class="float-right" width=200 >}} +{{% section class=content--small-right-column %}} 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, @@ -21,6 +20,8 @@ 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 diff --git a/content/about/where-am-i.md b/content/about/where-am-i.md index 660a718..a033245 100644 --- a/content/about/where-am-i.md +++ b/content/about/where-am-i.md @@ -3,11 +3,16 @@ title: "Where to Find Me" date: 2022-11-11T08:35:26-08:00 --- -Here's a list of places you can find me online. +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. ## Social Media -- Cohost: [@eryn](https://cohost.org/eryn) +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) - Instagram: [@erynofwales](https://instagram.com/erynofwales) - Mastodon: [@erynofwales](https://mastodon.social/@erynofwales) - Twitter: [@erynofwales](https://twitter.com/erynofwales) @@ -15,9 +20,10 @@ Here's a list of places you can find me online. ## Content - Bandcamp: [erynwells](https://erynwells.bandcamp.com/releases) -- Soundcloud: [purlsnbeeps](https://soundcloud.com/purlsnbeeps) -- YouTube: [Eryn Wells](https://www.youtube.com/channel/UCWb2pTDlC27R1PucyUPrypA) - 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) ## The Old Fashioned Way diff --git a/content/blog/2023/netscape-meteors/index.md b/content/blog/2023/netscape-meteors/index.md index ceaeed6..3f1598d 100644 --- a/content/blog/2023/netscape-meteors/index.md +++ b/content/blog/2023/netscape-meteors/index.md @@ -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×60 px glory: -{{< figures/image name=netscape60 shouldShowTitle=false >}} +{{< figures/image name=netscape60 shouldShowTitle=false size=small >}} I started out doing some web searches that turned up several versions. One was promising but far too big: 400×400 px. Worse, after some shoddy resize attempts, the "pixels" had become rectangular. -{{< figures/image name=rectangular-pixels shouldShowTitle=false >}} +{{< figures/image name=rectangular-pixels shouldShowTitle=false size=small >}} This would not do. @@ -81,7 +81,10 @@ that replaces those pixels with ones that match the surrounding pixels. Here's the modified 60×60 one and a bigger 240×240 px one, for good measure: -{{< figures/image names="netscape-modified60,netscape-modified240" shouldShowTitle=false >}} +{{< 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 >}} diff --git a/content/blog/2023/pajaro-dunes/index.md b/content/blog/2023/pajaro-dunes/index.md index 39a5da2..f4c0785 100644 --- a/content/blog/2023/pajaro-dunes/index.md +++ b/content/blog/2023/pajaro-dunes/index.md @@ -1,8 +1,7 @@ --- title: "Pajaro Dunes" date: 2023-05-30T08:31:34-07:00 -categories: Travel -tags: [Beaches, Tess, EJ, Vacations] +tags: [Travel, Beaches, Tess, EJ, Vacations] --- {{< tess >}}, EJ, and I took a weekend trip down the coast over Memorial Day diff --git a/content/blog/2023/trip-to-japan/index.md b/content/blog/2023/trip-to-japan/index.md index 41b74ee..48777d7 100644 --- a/content/blog/2023/trip-to-japan/index.md +++ b/content/blog/2023/trip-to-japan/index.md @@ -1,8 +1,10 @@ --- -title: "Trip to Japan" +title: Trip to Japan date: 2023-04-14T21:40:21+09:00 categories: Travel -tags: ["日本"] +tags: + - Travel + - japan --- At the beginning of April, {{< tess >}} and I took a trip to Japan for two diff --git a/content/blog/2024/books/index.md b/content/blog/2024/books/index.md new file mode 100644 index 0000000..63eb5a9 --- /dev/null +++ b/content/blog/2024/books/index.md @@ -0,0 +1,64 @@ +--- +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 diff --git a/content/blog/2024/cat-in-the-cream-cookies.md b/content/blog/2024/cat-in-the-cream-cookies.md new file mode 100644 index 0000000..3751f02 --- /dev/null +++ b/content/blog/2024/cat-in-the-cream-cookies.md @@ -0,0 +1,69 @@ +--- +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 diff --git a/content/blog/2024/chicago/index.md b/content/blog/2024/chicago/index.md new file mode 100644 index 0000000..dcf1469 --- /dev/null +++ b/content/blog/2024/chicago/index.md @@ -0,0 +1,68 @@ +--- +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/ diff --git a/content/blog/2024/chicago/quincy.jpg b/content/blog/2024/chicago/quincy.jpg new file mode 100644 index 0000000..11b1039 --- /dev/null +++ b/content/blog/2024/chicago/quincy.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b6c19b8a5f589b21a7ab8ee846e2c23c364335142c04457998cc89e948ac39e +size 1843640 diff --git a/content/blog/2024/chicago/tess-kerryman.jpg b/content/blog/2024/chicago/tess-kerryman.jpg new file mode 100644 index 0000000..a85126f --- /dev/null +++ b/content/blog/2024/chicago/tess-kerryman.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad7dcfa33b5a9df82ae941f970324bcac5a25dbd36e900051032724a2af15bb2 +size 2452294 diff --git a/content/blog/2024/chicago/wedding.jpg b/content/blog/2024/chicago/wedding.jpg new file mode 100644 index 0000000..88e8463 --- /dev/null +++ b/content/blog/2024/chicago/wedding.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08c30e5304a8341e6734eb5ce53c3249c935eb1eaa0401e90726ff660f8cf0e8 +size 2870428 diff --git a/content/blog/2024/christmas-in-massachusetts/bluey-erin-kathleen.jpg b/content/blog/2024/christmas-in-massachusetts/bluey-erin-kathleen.jpg new file mode 100644 index 0000000..9dc868a --- /dev/null +++ b/content/blog/2024/christmas-in-massachusetts/bluey-erin-kathleen.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d3444135aab32635f480ee8ca4a6797821ff9b6f0f68e51aa4dd0f9b5d6383e +size 3407880 diff --git a/content/blog/2024/christmas-in-massachusetts/bluey-green-door.jpg b/content/blog/2024/christmas-in-massachusetts/bluey-green-door.jpg new file mode 100644 index 0000000..83d88a6 --- /dev/null +++ b/content/blog/2024/christmas-in-massachusetts/bluey-green-door.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c17df7d3f75b0f3b18f9b5d73c1aa63b54ce5d856742f7121f4b9e9c8632e54 +size 3836629 diff --git a/content/blog/2024/christmas-in-massachusetts/bowling.jpg b/content/blog/2024/christmas-in-massachusetts/bowling.jpg new file mode 100644 index 0000000..7ae2121 --- /dev/null +++ b/content/blog/2024/christmas-in-massachusetts/bowling.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19005c6eb5ef6da85eafcfe5abc92cff98bd4a7b53156fee94204f0e100db359 +size 1129641 diff --git a/content/blog/2024/christmas-in-massachusetts/erin-snowballs.jpg b/content/blog/2024/christmas-in-massachusetts/erin-snowballs.jpg new file mode 100644 index 0000000..0c7a73f --- /dev/null +++ b/content/blog/2024/christmas-in-massachusetts/erin-snowballs.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e171f8b999e0af9bf949e391397a78ef6c7dd34bffa127c62f78ad57917f185 +size 2557799 diff --git a/content/blog/2024/christmas-in-massachusetts/index.md b/content/blog/2024/christmas-in-massachusetts/index.md new file mode 100644 index 0000000..6f77a69 --- /dev/null +++ b/content/blog/2024/christmas-in-massachusetts/index.md @@ -0,0 +1,117 @@ +--- +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/ diff --git a/content/blog/2024/christmas-in-massachusetts/minot.jpg b/content/blog/2024/christmas-in-massachusetts/minot.jpg new file mode 100644 index 0000000..d97f476 --- /dev/null +++ b/content/blog/2024/christmas-in-massachusetts/minot.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60395d73a2aa641b7d3f033474685bd2f9ef3128bb328f52456f432db579c1a3 +size 1976740 diff --git a/content/blog/2024/christmas-in-massachusetts/old-brigade.jpg b/content/blog/2024/christmas-in-massachusetts/old-brigade.jpg new file mode 100644 index 0000000..6684f09 --- /dev/null +++ b/content/blog/2024/christmas-in-massachusetts/old-brigade.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3b5bd5931bdec32c2b54f7a63c6761d6951ee7e75891af6863aa127b2ed20ae +size 3163986 diff --git a/content/blog/2024/christmas-in-massachusetts/sand-hills.jpg b/content/blog/2024/christmas-in-massachusetts/sand-hills.jpg new file mode 100644 index 0000000..d58eebe --- /dev/null +++ b/content/blog/2024/christmas-in-massachusetts/sand-hills.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c190c6ac37402e683c61715a71a1c4494c81a659a63403329a871017d9bf156 +size 3017239 diff --git a/content/blog/2024/christmas-in-massachusetts/snow-friend.jpg b/content/blog/2024/christmas-in-massachusetts/snow-friend.jpg new file mode 100644 index 0000000..d08759f --- /dev/null +++ b/content/blog/2024/christmas-in-massachusetts/snow-friend.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:812fcea1bf412ac0fd89d790095ae641dcc0461c14caa11e5f7f53a3f479240a +size 2395627 diff --git a/content/blog/2024/departure-mono/index.md b/content/blog/2024/departure-mono/index.md new file mode 100644 index 0000000..5f74514 --- /dev/null +++ b/content/blog/2024/departure-mono/index.md @@ -0,0 +1,28 @@ +--- +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 diff --git a/content/blog/2024/departure-mono/screenshot.png b/content/blog/2024/departure-mono/screenshot.png new file mode 100644 index 0000000..210aae2 Binary files /dev/null and b/content/blog/2024/departure-mono/screenshot.png differ diff --git a/content/blog/2024/eclipse/breanna-reading.jpg b/content/blog/2024/eclipse/breanna-reading.jpg new file mode 100644 index 0000000..ef77dae --- /dev/null +++ b/content/blog/2024/eclipse/breanna-reading.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c8907530f730f800e59101b9b26cd200b6f73c9bb045560ed0354ac4a73bf41 +size 1933691 diff --git a/content/blog/2024/eclipse/comadre-concha.jpg b/content/blog/2024/eclipse/comadre-concha.jpg new file mode 100644 index 0000000..0c9a71c --- /dev/null +++ b/content/blog/2024/eclipse/comadre-concha.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25ea86cacf4d35397f8dddfe949c83bf7abd1c8df23cf447820603abb4e40b50 +size 2144929 diff --git a/content/blog/2024/eclipse/diamondring.jpg b/content/blog/2024/eclipse/diamondring.jpg new file mode 100644 index 0000000..874875d --- /dev/null +++ b/content/blog/2024/eclipse/diamondring.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3f95920dc571ee9ac3fae17bd190d2a45e4fa85a94e50ea488bd79f9b5cb988 +size 1925477 diff --git a/content/blog/2024/eclipse/index.md b/content/blog/2024/eclipse/index.md new file mode 100644 index 0000000..5854fd9 --- /dev/null +++ b/content/blog/2024/eclipse/index.md @@ -0,0 +1,96 @@ +--- +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 diff --git a/content/blog/2024/eclipse/preparing.jpg b/content/blog/2024/eclipse/preparing.jpg new file mode 100644 index 0000000..508d388 --- /dev/null +++ b/content/blog/2024/eclipse/preparing.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2148bc15896769676fe90239e5ca9db6d8dfecddf6b81aeebbf744dcd1c23c89 +size 2674771 diff --git a/content/blog/2024/eclipse/ringoffire.jpg b/content/blog/2024/eclipse/ringoffire.jpg new file mode 100644 index 0000000..d4547e3 --- /dev/null +++ b/content/blog/2024/eclipse/ringoffire.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e80cba7115954aff0f0b9273ba6dffc88718bd503c9417be326f6e5224096a20 +size 2896916 diff --git a/content/blog/2024/eclipse/sol.jpg b/content/blog/2024/eclipse/sol.jpg new file mode 100644 index 0000000..7c11191 --- /dev/null +++ b/content/blog/2024/eclipse/sol.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5e0ab1a47e9458ee74915c2f590304dfef1abc274a9abe8e40d96ad58dffe4a +size 145056 diff --git a/content/blog/2024/jackson-and-other-holes/sunset.mov b/content/blog/2024/jackson-and-other-holes/sunset.mov index bbde40a..2e20598 100644 Binary files a/content/blog/2024/jackson-and-other-holes/sunset.mov and b/content/blog/2024/jackson-and-other-holes/sunset.mov differ diff --git a/content/blog/2024/make-pattern-rules/Makefile b/content/blog/2024/make-pattern-rules/Makefile new file mode 100644 index 0000000..ba4db9d --- /dev/null +++ b/content/blog/2024/make-pattern-rules/Makefile @@ -0,0 +1,67 @@ +# A Makefile that explores pattern and grouped rules. This Makefile expects the +# GNU version of Make. + +# Relevant docs: +# https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html +# https://www.gnu.org/software/make/manual/html_node/Pattern-Match.html +# https://www.gnu.org/software/make/manual/html_node/Pattern-Intro.html +# https://www.gnu.org/software/make/manual/html_node/Multiple-Targets.html + + +NAMES=zip zap + +.PHONY: all clean + +all: $(NAMES:%=%.x) $(NAMES:%=%.y) + + +# Here's a simple pattern rule that generates a .txt file from a name. In this +# rule % represents the name (the 'stem' in Makefile lingo) in the targets and +# prerequisites, and $* represents the stem in the recipe. + +%.txt: + @echo "=> Making $*.txt" + python -c 'print("$*!".title())' > "$@" + + +# Here are a couple explicit rules that generate a single file given some input +# files. Note the input files (prerequisites) will be generated with the pattern +# rule above. + +zip.a : florp.txt + @echo "=> Making $@ with $<" + cat "$<" > "$@" + +zap.a : bloop.txt + @echo "=> Making $@ with $<" + cat "$<" > "$@" + + +# This is a Grouped rule, marked with &:. It indicates that the two target files +# are produced together in one invocation of the rule, rather than two separate +# files produced by the same rule. + +zip.x zip.y &: zip.a + @echo "=> Making XY files from $< with explicit rule" + echo "[X]" > zip.x + cat "$<" >> zip.x + echo "[Y]" > zip.y + cat "$<" >> zip.y + + +# Pattern rules with multiple targets are always Grouped, so you don't need the +# &: separator. + +%.x %.y : %.a + @echo "=> Making XY files from $< with pattern rule" + echo "[X]" > $*.x + cat "$<" >> $*.x + echo "[Y]" > $*.y + cat "$<" >> $*.y + + +clean: + rm -f bloop.txt florp.txt + rm -f $(NAMES:%=%.a) + rm -f $(NAMES:%=%.x) + rm -f $(NAMES:%=%.y) diff --git a/content/blog/2024/make-pattern-rules/index.md b/content/blog/2024/make-pattern-rules/index.md new file mode 100644 index 0000000..f41465b --- /dev/null +++ b/content/blog/2024/make-pattern-rules/index.md @@ -0,0 +1,127 @@ +--- +title: "Makefile Pattern Rules" +date: 2024-12-04T14:26:57-08:00 +publishDate: 2024-12-05 +resources: + - name: makefile + src: Makefile +tags: + - TIL + - Make + - Software +--- + +I recently found myself hacking on a Makefile (the GNU kind, not the [BSD +kind][bsdmake]) that made heavy use of pattern rules and grouped rules. These +are concepts I haven't spent a lot of time with so I wrote myself a small test +Makefile to explore them in a little more detail. + + +## Pattern Rules + +[Pattern rules][patterns] drive most of the usage of `make` as a tool for +building software. `make` includes a bunch of pattern rules for many of the +kinds of source files you're likely to encounter. For example, it has implicit +rules for building `.o` files out of `.c` files. + +Here's a simple pattern rule that generates text files: + +```make +%.txt: + @echo "=> Making $*.txt" + python -c 'print("$*!".title())' > $@ +``` + +The `%` is tells `make` that this is a patten rule. It's a placeholder for a +string of non-whitespace characters, which `make` calls a _stem_. You can +reference the stem in the body of the rule with the [automatic variable][auto] +`$*`. + +This particular rule creates a text file with a particular stem by echoing a +string to a file with this little Python snippet. + +Here's a slightly more complex pattern rule: + +```make +%.x : %.a + @echo "=> Making X file from $< with pattern rule" + echo "[X]" > $*.x + cat "$<" >> $*.x +``` + +The major difference with this rule is that it has a prerequisite (the part +after the colon) that also has a `%`. So, this rule defines how to build a `.x` +file from a `.a` file with the same stem. + +Later on, if I write a rule like this: + +```make +zip.a : florp.txt + @echo "=> Making $@ with $<" + cat $< > $@ +``` + +`make` will understand that it first needs to generate `florp.txt` with the +pattern rule for `%.txt`. Then it can execute this rule to build `zip.a`. + + +## Grouped Rules + +Grouped rules are another feature of `make` that lets you specify [more than one +output][multiples] for a given rule. If you're writing C family languages, this +is useful for generating a header and source file pair, and making sure that +they get updated together. + +```make +zip.x zip.y &: zip.a + @echo "=> Making XY files from $< with explicit rule" + echo "[X]" > zip.x + cat "$<" >> zip.x + echo "[Y]" > zip.y + cat "$<" >> zip.y +``` + +Generally when you write a rule with more than one output, `make` understands +that each of the ouput files is built separately with the same rule. However, a +rule with a `&:` separator indicates that the outputs are built from a single +invocation of the rule. `make` will rebuild the rule if any of the outputs is +out-of-date. + + +## Altogether Now + +You can combine pattern rules and group rules into a single rule too. This rule +creates a pattern for building a pair of `.x` and `.y` files from a `.a` file +with a particular stem. + +```make +%.x %.y : %.a + @echo "=> Making XY files from $< with pattern rule" + echo "[X]" > $*.x + cat "$<" >> $*.x + echo "[Y]" > $*.y + cat "$<" >> $*.y +``` + +These rules are always treated as a group. It doesn't matter if you use `:` or +`&:`. + + +## Rule Precedence + +The way `make` decides which rule to use to produce a file are a little subtle, +especially when you combine pattern rules and explicit rules. In general an +explicit rule should take precedence over a pattern. In my Makefile, the rule +that explicitly builds `zip.x` and `zip.y` will win over the pattern for `%.x` +and `%.y`. When multiple pattern rules match a target, the rules are [more +complex][matching]. + +--- + +Download the full [Makefile]({{< page/resource-ref makefile >}}). + +[bsdmake]: {{< ref "blog/2024/bsd-make" >}} +[auto]: https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html +[patterns]: https://www.gnu.org/software/make/manual/html_node/Pattern-Intro.html +[multiples]: https://www.gnu.org/software/make/manual/html_node/Multiple-Targets.html +[matching]: https://www.gnu.org/software/make/manual/html_node/Pattern-Match.html diff --git a/content/blog/2024/milk-bread-rolls/IMG_5143.jpeg b/content/blog/2024/milk-bread-rolls/IMG_5143.jpeg new file mode 100644 index 0000000..586a053 --- /dev/null +++ b/content/blog/2024/milk-bread-rolls/IMG_5143.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed6f2af4f217fa35c9043bd67884a44b36fea840957c86b095bd02590e8a7c56 +size 2691385 diff --git a/content/blog/2024/milk-bread-rolls/index.md b/content/blog/2024/milk-bread-rolls/index.md new file mode 100644 index 0000000..ed03ced --- /dev/null +++ b/content/blog/2024/milk-bread-rolls/index.md @@ -0,0 +1,36 @@ +--- +title: Milk Bread Rolls for Thanksgiving +date: 2024-12-01 +resources: + - name: rolls + title: + src: IMG_5143.jpeg + params: + alt: > + A set of ten rolls with golden brown tops arranged in a circular + cake pan. +tags: + - Cooking + - Recipes + - Baking + - Bread + - Thanksgiving +--- + +I made [Japanese Milk Bread Rolls][r] from King Arthur Baking for Thanksgiving. +They were a big hit! + +{{< figures/image name=rolls >}} + +The weirdest part for most Western bakers is probably the tangzhong, but it's a +pretty straight-forward roux, like you'd use to make gravy. The recipe has some +good instructions on how to do it. + +The most difficult part -- at least for me -- is probably the shaping because of +the coordination you need to turn the lump of dough in a circular motion on the +counter between your fingers. It took me a little while to get that, but now it +comes almost second nature. + +Totally recommend this one for holiday dinner! + +[r]: https://www.kingarthurbaking.com/recipes/japanese-milk-bread-rolls-recipe diff --git a/content/blog/2024/moon.md b/content/blog/2024/moon.md new file mode 100644 index 0000000..327e4b7 --- /dev/null +++ b/content/blog/2024/moon.md @@ -0,0 +1,13 @@ +--- +title: Moon +date: 2024-12-22T14:41:48-08:00 +tags: + - Space + - Moon +--- + +This post from Bartosz Ciechanowski all about the [Moon][moon] is as delightful +as it is educational. Their blog is full of extremely detailed posts about all +sorts of things. + +[moon]: https://ciechanow.ski/moon/ diff --git a/content/blog/2024/orlando-pride-nwsl-final/index.md b/content/blog/2024/orlando-pride-nwsl-final/index.md new file mode 100644 index 0000000..3745b45 --- /dev/null +++ b/content/blog/2024/orlando-pride-nwsl-final/index.md @@ -0,0 +1,30 @@ +--- +title: "Orlando Pride Win the NWSL Final!" +date: 2024-11-24T08:44:08-08:00 +resources: + - name: marta + src: marta.jpg + title: + params: + shouldResize: false + linksToFullSize: false + source: + url: https://www.instagram.com/p/DCvb5qzOi-E/ +tags: + - Sports + - Football + - NWSL + - Orlando Pride +--- + +On Saturday we watched the Orlando Pride play the Washington Spirit in the +final. They won 1-0 in an exciting game! + +{{< figures/image name=marta size=small >}} + +The Pride have had an amazing season, finishing first in the league standings +with a 18-2-6 record. + +I think my favorite part of the game was seeing Marta's mom in the stands. It +was her first trip to the United States. I love that she was able to be here for +such a big moment in her daughter's career. diff --git a/content/blog/2024/orlando-pride-nwsl-final/marta.jpg b/content/blog/2024/orlando-pride-nwsl-final/marta.jpg new file mode 100644 index 0000000..6aec92d --- /dev/null +++ b/content/blog/2024/orlando-pride-nwsl-final/marta.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94b7a35e57bb06ec34e35c2d2201b998e3e5eef315db06d192a7f2abccb1ff3c +size 445408 diff --git a/content/blog/2024/rubiks-scrambler.md b/content/blog/2024/rubiks-scrambler.md new file mode 100644 index 0000000..a0ac788 --- /dev/null +++ b/content/blog/2024/rubiks-scrambler.md @@ -0,0 +1,30 @@ +--- +title: Rubik's Cube Scrambler +date: 2024-11-13T15:34:22-08:00 +tags: + - Tech + - Puzzles + - Rubik's Cube + - HTML + - JavaScript + - CSS + - Web Components +--- + +Here's a silly thing I made while I was home sick today. It's a widget that +produces a randomized pattern of [moves][rmoves] to scramble a 3×3 [Rubik's +Cube][rcube]. + +
+ {{< rubiks/scrambler >}} +
+ +This thing is a [Web Component][wc]. The interactive logic lives inside a custom +[HTMLElement][htmlelement], and the content and styling are specified inside a +[`