This commit is contained in:
2026-02-19 14:51:06 -08:00
parent f142098f1d
commit 895eb9b314
56 changed files with 1185 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

BIN
src/img/2025/bouquet.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 558 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
src/img/2025/loon-print.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 723 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

BIN
src/img/2025/rockery.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 975 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 827 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 818 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 754 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1024 KiB

View File

@ -0,0 +1,11 @@
---
title: kestrel zine
image:
src: 2025/kestrel-zine.jpg
alt: "A 5 photo collage showing the front and back cover as well as 3 full spreads of a folded zine about Kestrel, my dog, who is a 65lb Malinois with a goofy smile and floppy ears. it is printed in two layers of color, blue and orange, and each image depicts Kestrel in various posts... alert and watchful, resting, looking mopey, wearing a sweatshirt."
tags:
- gallery
- print
- zine
- highlight
---

View File

@ -0,0 +1,10 @@
---
title: loon
image:
src: 2025/loon-print.jpg
alt: "A print of a loon rearing up with wings spread"
tags:
- gallery
- print
---

View File

@ -0,0 +1,74 @@
---
title: give to trans orgs and people
image:
src: 2025/bouquet.jpg
alt: "Image unrelated to post. A close up on a flower bouquet in shades of purple, pink, and white. Centered is a large, almost soft-looking pink flower that is still partially closed up."
tags:
- reference
- gender
---
This is a collation of responses to a fediverse post I made.
For reference, I also have a list set up at [/give](/give) that lists a number of great nonprofits.
## Collections
- [17 Black-Led LGBTQ+ Services and Groups You Can Support Right Now](https://www.marieclaire.com/politics/a32827051/black-lgbtq-organizations-groups/){target="_blank" rel="external"}
- [Black Trans-Led Organizations](https://blackaids.org/black-trans-organizations/){target="_blank" rel="external"}
- [Donate to These Orgs to Support Black Trans People](https://www.vice.com/en/article/tony-mcdade-nina-pop-how-to-help/){target="_blank" rel="external"}
## Orgs
- [Advocates for Trans Equality (A4TE)](https://transequality.org){target="_blank" rel="external"} (formerly National Center for Transgender Equality (NCTE) and Transgender Legal Defense and Education Fund (TLDEF))
- [Black Trans Fund](https://groundswellfund.org/funds/black-trans-fund/){target="_blank" rel="external"}
- [For the Gworls](https://www.forthegworls.party/home){target="_blank" rel="external"}
- [Gays and Lesbians Living in a Transgender Society (GLITS)](https://www.glitsinc.org){target="_blank" rel="external"}
- [Gender Justice League](https://www.genderjusticeleague.org){target="_blank" rel="external"}
- [HRT- Harm Reduction Toolkit](https://www.omprakash.org/global/distribute-aid/crowdfund/hrt---harm-reduction-toolkit){target="_blank" rel="external"}
- [Lambda Legal](https://lambdalegal.org){target="_blank" rel="external"}
- [Point of Pride](https://www.pointofpride.org){target="_blank" rel="external"}
- [Project Rainbow Turtle](https://www.gofundme.com/f/help-fund-project-rainbow-turtles-mission){target="_blank" rel="external"}
- [Trans Justice Funding Project](https://www.transjusticefundingproject.org/){target="_blank" rel="external"} - also worth looking at their **grantees** for further ideas
- [Trans Lifeline](https://translifeline.org/){target="_blank" rel="external"}
- [Trans Rescue](https://transrescue.org){target="_blank" rel="external"}
- [Trans Youth Emergency Project](https://southernequality.org/tyep/){target="_blank" rel="external"}
- [TransFamily Support Services](https://transfamilysos.org){target="_blank" rel="external"}
- [Transgender Law Center](https://transgenderlawcenter.org){target="_blank" rel="external"}
- [True Colors United](https://truecolorsunited.org){target="_blank" rel="external"}
## People
If you are listed here and would like to be removed, just [get in touch with me](/contact).
### Aldercone Studio
- [liberapay/heckinTech](https://liberapay.com/heckinTech/){target="_blank" rel="external"}
- [buymeacoffee/Aldercone](https://buymeacoffee.com/aldercone/membership){target="_blank" rel="external"}
- [ko-fi/aldercone](https://ko-fi.com/aldercone){target="_blank" rel="external"}
- [patreon/aldercone](https://www.patreon.com/aldercone){target="_blank" rel="external"}
### héctor
- [ko-fi/binomech](https://ko-fi.com/binomech){target="_blank" rel="external"}
### Luke Orion
- [hyperfollow/LukeOrion](https://hyperfollow.com/LukeOrion){target="_blank" rel="external"}
### Pixel
- [liberapay/Pixouls](https://liberapay.com/Pixouls/){target="_blank" rel="external"}
### Taj
- [ko-fi/erosdiscordia](https://ko-fi.com/erosdiscordia){target="_blank" rel="external"}
## Credit
Thank you to these wonderful folks (and many more who chose to remain uncredited) for the links/orgs:
- [Athena](https://parthen.online){target="_blank" rel="external"}
- [a.tony](https://wenotfreeyet.itch.io){target="_blank" rel="external"}
- [mika](https://birdon.social/@sqrl_23){target="_blank" rel="external"}
- [Nora](https://nora.zone){target="_blank" rel="external"}

View File

@ -0,0 +1,26 @@
---
title: networks of trans care
image:
src: 2025/mushrooms-and-moss.jpg
alt: "Image unrelated to post. Close up on a cluster of orange-brown mushrooms on a mossy tree trunk."
tags:
- reference
- gender
---
These are collated USA-based resources I have found while seeking out trans surgical care networks.
## Doulas
- [Eli Lawliet](https://www.thegenderdoula.com/meet-the-gender-doula){target="_blank" rel="external"}
- [Ken McGee](https://b3ptco.com){target="_blank" rel="external"} (Seattle)
## Surgical care networks
- [t4t caregiving](https://www.t4tcaregiving.org){target="_blank" rel="external"}
- [Quest House](https://questhousesf.org){target="_blank" rel="external"} (San Francisco)
- [Queer Care](https://queercareinc.bigcartel.com){target="_blank" rel="external"}
## Other support
- [Trans Youth Emergency Project](https://southernequality.org/tyep/){target="_blank" rel="external"}

View File

@ -0,0 +1,9 @@
---
title: fix your hearts
image:
src: 2025/fix-your-hearts-print.jpg
alt: "2 copies of the same print, one in black ink and one in dark teal. The print is text that reads 'fix your hearts or die', with the text shaped into a somewhat long and narrow heart."
tags:
- gallery
- print
---

View File

@ -0,0 +1,343 @@
---
title: azure locations and file crawling
image:
src: 2025/azure-locations.jpg
alt: "A Linux terminal. There is a fun rainbow flag in ascii art at the top, and then the user has called a command asking Azure for a list of resources applicable to a specific resource type"
tags:
- reference
- software
- highlight
---
{% raw %}
## context
Azure is Microsoft's cloud offering. Each possible resource that can be deployed in Azure has a location it's deployed in, such as "East US" or "Italy." While some resources can be deployed in all locations, other resources have location constraints.
It's common, when deploying, to have a whole ecosystem of resources that will work together. However, this introduces a problem: which locations work for all resources in a deployment?
Let's dig in. (Want just the outcome? Check the [summary](#summary).)
### bicep
[Bicep](https://learn.microsoft.com/azure/azure-resource-manager/bicep/overview?tabs=bicep) is a language for describing Azure resources. A Bicep file sets out a series of resources with preset or parameterized properties in order to deploy said resources.
A minimal Bicep file that creates a resource group might look like this:
```bicep
param resourceGroupName string = 'myResourceGroup'
param location string = "westus2"
resource resourceGroup 'Microsoft.Resources/resourceGroups@2022-09-01' = {
name: resourceGroupName
location: location
}
```
This is easy to start parsing - I can use `grep` to find that `Microsoft.Resources/resourceGroups@2022-09-01` string and go from there.
#### nesting
However, minimal is uncommon. As stated above, deployments of multiple resources are much more common.
When working with large deployments, certain resources may be needed more than once. You can repeat your earlier storage account declaration, or, instead, you can template out how to deploy a storage account with given parameters, then reuse that template. This is called a `module`, and it's fundamental to organizing Bicep files.
Let's say this is our file structure. Ignore the lack of parameter files or READMEs, this is just an example.
```txt
.
|--infra
|--env
| |--dev
| | |--main.bicep
| |--prod
| |--main.bicep
|--modules
|--rg
| |--main.bicep
|--vm
| |--modules
| | |--network.bicep
| | |--virtual-machine.bicep
| |--main.bicep
|--kv
|--modules
| |--role-assignment.bicep
| |--key-vault.bicep
|--main.bicep
```
Bicep files use relative references for local modules, so `infra/env/dev/main.bicep` references `../../modules/vm/main.bicep`, which references `./modules/network.bicep`. While the directory structure in this example *could* be flattened, my point is: modules can nest, and each module refers relatively to the module(s) it relies on.
## finding all resources
Okay, let's backtrack. From a given Bicep file, we want:
1. All referenced resource types
1. All referenced modules
### grep
Resources and modules both have patterns in how they are declared. Thankfully, they're pretty simple regexes. `grep` will spit out lines in a file that match a given regex.
```sh
# this gets us strings like
# resource resourceGroup 'Microsoft.Resources/resourceGroups@2022-09-01' = {
grep -E "^resource " "$file"
# this gets us strings like
# module vm '../../modules/vm/main.bicep' = {
grep -E "^module " "$file"
```
### cut
From there, let's use `cut` to strip off the parts we don't want.
```sh
# this gets us strings like
# Microsoft.Resources/resourceGroups
grep -E "^resource " "$file" \
| cut -d "'" -f 2 - \
| cut -d "@" -f 1 -
# this gets us strings like
# ../../modules/vm/main.bicep
grep -E "^module " "$file" \
| cut -d "'" -f 2 -
```
These calls are a little opaque. `-d` sets a **delimiter** (what to split on). `-f` picks a **field** to return, numbered from 1.
### mapfile
We'll save these values to variables. `mapfile` reads a file, putting each line into a new array element. `-t` **trims** newline characters. The `<`s do some redirection, and yes, the space between them *matters*.
```sh
mapfile -t resources < <(grep -E "^resource " "$file" \
| cut -d "'" -f 2 - \
| cut -d "@" -f 1 -)
mapfile -t modules < <(grep -E "^module " "$file" \
| cut -d "'" -f 2 -)
```
### dirname (& more)
We can't just stop there. We need to search each module in turn. Using `dirname`, we can get the directory of the file we're searching, then append the relative module path.
```sh
get_resources () {
# ... grep, cut, etc ...
directory=$(dirname "$file")
for module in "${modules[@]}"
do
mapfile -t -O "${#resources[@]}" resources < <(get_resources "$directory/$module")
done
}
```
A lot just happened there besides `dirname`. `{modules[@]}` is all the array elements (as opposed to just `$modules`, which evaluates to the first element). `${#modules[@]}`, on the other hand - note the pound sign - is the number of elements in the array.
Additionally, `mapfile` usually writes from index 0 onwards. But with the `-O` argument, we can specify an **origin**. By setting the starting point to the length of the array, we append to the array rather than writing over existing data.
Finally, we got some recursion going! `get_resources` calls `get_resources` for every module found.
### the get_resources function
So far, our code looks like this:
```sh
get_resources () {
mapfile -t resources < <(grep -E "^resource " "$file" \
| cut -d "'" -f 2 - \
| cut -d "@" -f 1 -)
mapfile -t modules < <(grep -E "^module " "$file" \
| cut -d "'" -f 2 -)
directory=$(dirname "$file")
for module in "${modules[@]}"
do
mapfile -t -O "${#resources[@]}" resources < <(get_resources "$directory/$module")
done
for resource in "${resources[@]}"; do; echo "$resource"; done
}
```
That last one-liner just returns our results. Note that we don't just `echo "${resources[@]}"` - this results in a space-delimited string and it'll be helpful later to have a newline-delimited string.
## finding locations
Now we need to use these resource types to get available locations. First, actually call our function from above. We'll assume we're in a directory with a top-level `main.bicep` file.
```sh
mapfile -t resources < <(get_resources "main.bicep")
```
### sort
Does sorting matter? Not really, but `sort` has a useful feature, `-u`, which returns **u**nique items (aka, it deduplicates). Looking up the same resource type twice slows us down.
```sh
mapfile -t resources < <(get_resources "main.bicep" | sort -u)
```
`sort` is one reason it helps to have newlines as delimiters - it expects that.
### az
We'll use `az` to list *all* the locations - just to give ourselves a starting point. You could also use the locations for the first resource type.
```sh
mapfile -t locations < <(az account list-locations --query "[].displayName" \
--out tsv)
```
We can then use an `az` command to find available locations for a given resource type:
```sh
mapfile -t newLocations < <(az provider show --namespace "$namespace" \
--query "resourceTypes[?resourceType=='$resourceType'].locations | [0]" \
--out tsv)
```
`--out tsv` means we will get a list with no decoration whatsoever - it's vital for programmatic handling of `az` command output.
### cut (again)
We'll need to get those `$namespace` and `$resourceType` variables. `cut` comes back in handy:
```sh
# remember, $resource is something like Microsoft.Resources/resourceGroups
# this gets us strings like
# Microsoft.Resources
namespace=$(echo "$resource" | cut -d "/" -f 1 -)
# this gets us strings like
# resourceGroups
resourceType=$(echo "$resource" | cut -d "/" -f 2 -)
```
### comm
Okay, we can get locations. How do we handle finding their intersection?
`comm` to the rescue. It finds **common** lines between two *sorted* files. Its default output is three columns - lines only in file 1, lines only in file 2, and lines common to both. We can suppress the first two columns with `-12`.
`comm` expects files, so we'll reuse our redirection `<(someCommand)` from earlier.
```sh
mapfile -t locations < <(comm -12 \
<(for location in "${locations[@]}"; do echo "$location"; done) \
<(for location in "${newLocations[@]}"; do echo "$location"; done) )
```
`comm` also likes newline-delimited input, so we're again looping through the array rather than echoing all values at once.
### catching errors
With functionality as it is, many deployments will come back with 0 locations available. Turns out some basic resource types, like role assignments, don't have locations. So let's filter those.
```sh
if [[ ${#newLocations[@]} -eq 0 ]]
then
# handle
fi
```
### tee
We'll print the locations to the shell. We can even use `tee` to print them to a file for good measure:
```sh
for location in "${locations[@]}"; do echo "$location"; done | tee locations.txt
```
### the location code
Here's our code for this section:
```sh
mapfile -t resources < <(get_resources "main.bicep" | sort -u)
mapfile -t locations < <(az account list-locations --query "[].displayName" \
--out tsv)
for resource in "${resources[@]}"
do
namespace=$(echo "$resource" | cut -d "/" -f 1 -)
resourceType=$(echo "$resource" | cut -d "/" -f 2 -)
mapfile -t newLocations < <(az provider show --namespace "$namespace" \
--query "resourceTypes[?resourceType=='$resourceType'].locations | [0]" \
--out tsv)
if [[ ${#newLocations[@]} -eq 0 ]]
then
continue
fi
mapfile -t locations < <(comm -12 \
<(for location in "${locations[@]}"; do echo "$location"; done) \
<(for location in "${newLocations[@]}"; do echo "$location"; done) )
done
for location in "${locations[@]}"; do echo "$location"; done | tee locations.txt
```
---
## summary
Here's our final script:
```sh
# Recursively crawls bicep files to find all referenced resources
get_resources () {
mapfile -t resources < <(grep -E "^resource " "$file" \
| cut -d "'" -f 2 - \
| cut -d "@" -f 1 -)
mapfile -t modules < <(grep -E "^module " "$file" \
| cut -d "'" -f 2 -)
directory=$(dirname "$file")
for module in "${modules[@]}"
do
mapfile -t -O "${#resources[@]}" resources < <(get_resources "$directory/module")
done
for resource in "${resources[@]}"; do echo "$resource"; done
}
# Execution starts here
mapfile -t resources < <(get_resources "main.bicep" | sort -u)
mapfile -t locations < <(az account list-locations --query "[].displayName" \
--out tsv)
for resource in "${resources[@]}"
do
namespace=$(echo "$resource" | cut -d "/" -f 1 -)
resourceType=$(echo "$resource" | cut -d "/" -f 2 -)
mapfile -t newLocations < <(az provider show --namespace "$namespace" \
--query "resourceTypes[?resourceType=='$resourceType'].locations | [0]" \
--out tsv)
if [[ ${#newLocations[@]} -eq 0 ]]
then
continue
fi
mapfile -t locations < <(comm -12 \
<(for location in "${locations[@]}"; do echo "$location"; done) \
<(for location in "${newLocations[@]}"; do echo "$location"; done) )
done
for location in "${locations[@]}"; do echo "$location"; done | tee locations.txt
```
{% endraw %}

View File

@ -0,0 +1,110 @@
---
title: redirections
image:
src: 2025/angle-brackets-uwu.jpg
alt: "Ascii art of an emoticon with pinched eyes and a small mouth made with two angle brackets."
tags:
- reference
- software
---
## baseline
```sh
cat tempest.md
```
```txt
You do look, my son, in a moved sort,
As if you were dismay'd: be cheerful, sir.
Our revels now are ended. These our actors,
As I foretold you, were all spirits and
Are melted into air, into thin air:
And, like the baseless fabric of this vision,
The cloud-capp'd towers, the gorgeous palaces,
The solemn temples, the great globe itself,
Ye all which it inherit, shall dissolve
And, like this insubstantial pageant faded,
Leave not a rack behind. We are such stuff
As dreams are made on, and our little life
Is rounded with a sleep.
```
## direct
`grep` takes a file or files as an argument.
```sh
grep "'d" tempest.md
```
```txt
As if you were dismay'd: be cheerful, sir.
The cloud-capp'd towers, the gorgeous palaces,
```
## redirect
If there's no files, or if `-` is passed as an argument, `grep` reads from standard input. `<` reads a file into standard input (this is shorthand for `0<`, `0` being the file descriptor of `stdin`).
```sh
grep "'d" < tempest.md
# or
grep "'d" - < tempest.md
```
```txt
As if you were dismay'd: be cheerful, sir.
The cloud-capp'd towers, the gorgeous palaces,
```
## re-redirect
`<(command)` creates a file descriptor for the output of `command`.
```sh
grep "'d" - < <(cat tempest.md)
```
```txt
As if you were dismay'd: be cheerful, sir.
The cloud-capp'd towers, the gorgeous palaces,
```
(In this case, you could substitute `cat tempest.md | grep "'d" -` but `<(command)` is handy for cases where commands don't take `stdin`, or need to take in multiple files (such as [`comm`](/azure-locations#comm)).
## re-re-redirect
`cat` can also take `stdin` when given `-` or no arguments.
```sh
grep "'d" < <(cat < tempest.md)
# or
grep "'d" < <(cat - < tempest.md)
```
```txt
As if you were dismay'd: be cheerful, sir.
The cloud-capp'd towers, the gorgeous palaces,
```
## conclusion
it's `<`s all the way down.
---
## postscript: heredoc
```sh
grep "'d" << tempest.md
heredoc> oh are we interactive now
heredoc> what am i 'doing' anyway
heredoc> tempest.md
```
```txt
what am i 'doing' anyway
```
(`<<` starts an ephemeral document or `heredoc`. The first argument given is the delimiter, and is more commonly `EOF` (**e**nd **o**f **f**ile).)

View File

@ -0,0 +1,14 @@
---
title: textures unite
image:
src: 2025/textures-unite.jpg
alt: "a largely unseen person holds up an expansive knitted shawl, built in 6 sections of different textures and colors. in the background, trees and dappled sunlight."
tags:
- gallery
- knit
- highlight
---
[pattern by stephen west](https://www.westknits.com/products/textures-unite){target="_blank" rel="external"}.
[yarn from hazelknits](https://www.hazelknits.com){target="_blank" rel="external"}.

View File

@ -0,0 +1,29 @@
---
title: art shows and events
image:
src: 2025/pink-yellow-flowers.jpg
alt: "Image unrelated to post. A cluster of small, four-petaled flowers, varying in color between a purpley-pink and yellow."
---
## 2023
- [Vashon Summer Arts Fest](https://gallery.vashoncenterforthearts.org/event-works.php?eventId=22954&event=Summer+Arts+Fest){target="_blank" rel="external"} (displayed artist)
- [T4T: All Trans and Nonbinary Drag Show](https://www.kremwerk.com/upcoming/2023/12/09/t4t-all-trans-and-non-brinary-drag-show){target="_blank" rel="external"} (vendor)
## 2024
- [Cutiefest April](https://cutiefoundation.com){target="_blank" rel="external"} (vendor)
- [Stanza 2024: Non-binary](https://www.pushpullseattle.com/news/stanza-2024-non-binary){target="_blank" rel="external"} (displayed artist)
- [VIVA Spring Tour](https://vivartists.com/viva/events/spring-tour-2024/){target="_blank" rel="external"} (vendor)
- [VIVA Holiday Tour](https://vivartists.com/viva/events/holiday-tour-2024/){target="_blank" rel="external"} (vendor)
## 2025
- [Seattle Erotic Art Festival](https://www.seaf.art){target="_blank" rel="external"} (displayed artist)
- [VIVA Spring Tour](https://vivartists.com/viva/events/spring-tour-2025/){target="_blank" rel="external"} (vendor)
- [Seattle Zine Fest](https://www.instagram.com/seattle.zine.fest){target="_blank" rel="external"} (vendor)
- [Solstice Market at Beall Greenhouses](https://beall-greenhouses-market.pages.dev/events/2025-solstice){target="_blank" rel="external"} (vendor, web and print marketing)
## 2026
- [Imbolc Celebration & Market at Beall Greenhouses](https://beall-greenhouses-market.pages.dev/events/2026-imbolc){target="_blank" rel="external"} (vendor, web marketing)

View File

@ -0,0 +1,143 @@
---
title: keffiyah fishing net pattern
image:
src: 2025/keffiyah-nets.jpg
alt: "a knitted swatch. it's mostly white yarn, but a grid of dark red- purple- green yarn that looks like a chain link fence is built into it. the diagonal lines are achieved with floats of yarn from one row, then picked up and knit into several rows later."
tags:
- reference
- knit
---
## give
this pattern is offered at no cost, but I highly encourage giving to Palestinian relief work.
- [Palestine Children's Relief Fund](https://www.pcrf.net){target="_blank" rel="external"}
## abbreviations
| abbr | term |
| --- | --- |
| **MC** | main color (light in swatch shown) |
| **CC** | contrast color (dark in swatch shown) |
| **RS** | right side |
| **WS** | wrong side |
| **k** | knit |
| **sl** | slip |
| **wyif** | with yarn in front |
| **p** | purl |
## techniques
### knit into a float
in this pattern, you will be creating floats on the front of the work, then picking them up and knitting into them 3 rows later. **Do this as part of the stitch you are working, not instead of!** You should have the same number of stitches afterwards.
when you pick up a float, you want it to sit **in front of the worked stitch, and untwisted.** To achieve this, I have been catching the float on my right needle by dipping the needle down and under the float, from the front to the back. From there, I work the stitch, then slip the float over the new stitch on my right needle.
## knit flat
### cast on
knit flat, the pattern repeat uses 6n + 1 stitches. In the swatch shown, I cast on 29 stitches - 2 on each side for selvedge, then 25 -- 6 \* 4 + 1. To simplify things, I'll write the pattern for the swatch, selvedge and all - but please adapt as you see fit.
with MC, cast on 29 stitches.
### establish the pattern
- **row 0 (WS):** with MC, knit to last stitch, sl1 wyif
- **row 1 (RS):**
- with MC, k2
- [with CC, k1; with MC, k5] \* 4, then with CC, k1
- with MC, k1, sl1 wyif
- **row 2 (WS):**
- with MC, k1, p1
- [with CC, k1 and leave working yarn on RS; with MC, p5] \* 4, then with CC, k1 and bring working yarn back to WS
- with MC, p1, sl1 wyif
### pattern repeat
- **row 3 (RS):** with MC, knit to last stitch, sl1 wyif
- **row 4 (WS):** with MC, k1, purl to last stitch, sl1 wyif
- **row 5 (RS):**
- with MC, k5
- [with CC, k1 into the float from 3 rows below; with MC, k5] \* 4
- with MC, k4, sl1 wyif
- **row 6 (RS):**
- with MC, k1, p4
- [with CC, k1 and leave working yarn on RS; with MC, p5] \* 4 -- on the last repeat, move working yarn back to WS before purling
- with MC, p4, sl1 wyif
- **rows 7-8:** repeat rows 3-4
- **row 9 (RS):**
- with MC, k2
- [with CC, k1 into the float from 3 rows below; with MC, k5] \* 4, then with CC, k1
- with MC, k1, sl1 wyif
- **row 10 (WS):**
- with MC, k1, p1
- [with CC, k1 and leave working yarn on RS; with MC, p5] \* 4, then with CC, k1 and bring working yarn back to WS
- with MC, p1, sl1 wyif
### close the pattern
end after rows 5 or 9 of the pattern repeat. replace row 6 or 10 with the following:
- **row 6 alteration:**
- with MC, k1, p4
- [with CC, k1; with MC, p5] \* 4
- with MC, p4, sl1 wyif
- **row 10 alteration:**
- with MC, k1, p1
- [with CC, k1; with MC, p5] \* 4, then with CC, k1
- with MC, p1, sl1 wyif
to end my swatch, I did the following:
- **row (RS):** with MC, knit to last stitch, sl1 wyif
- **row (WS):** with MC, k1, purl to last stitch, sl1 wyif
- **row (RS):** with MC, bind off
## knit in the round
### cast on
with MC, cast on a multiple of 6 stitches. knit in plain stockinette until you are ready to start the pattern.
### establish the pattern
- **row 1:**
- [with CC, k1; with MC, k5] repeat to last 6 stitches
- with CC, k1 and leave working yarn on RS; with MC, k5
- **row 2:**
- [with CC, p1 and leave working yarn on RS; with MC, k5] repeat to last 6 stitches
- with CC, p1 and move working yarn to WS; with MC, k5
### pattern repeat
- **rows 3-4:** with MC, knit all stitches
- **row 5:**
- with MC, k3
- [with CC, k1 into the float from 3 rows below; with MC, k5] repeat to last 3 stitches
- with CC, k1 and leave working yarn on RS; with MC, k2
- **row 6:**
- with MC, k3
- [with CC, p1 and leave working yarn on RS; with MC, k5] repeat to last 3 stitches
- with CC, p1 and moving working yarn to WS; with MC, k2
- **rows 7-8:** repeat rows 3-4
- **row 9:**
- [with CC, k1 into the float from 3 rows below; with MC, k5] repeat to last 6 stitches
- with CC, k1 into the float from 3 rows below and leave working yarn on RS; with MC, k5
- **rows 10:**
- [with CC, p1 and leave working yarn on RS; with MC, k5] repeat to last 6 stitches
- with CC, p1 and move working yarn to WS; with MC, k5
### close the pattern
end after rows 5 or 9 of the pattern repeat. replace row 6 or 10 with the following:
- **row 6 alteration:**
- with MC, k3
- [with CC, p1; with MC, k5] repeat to last 3 stitches
- with CC, p1; with MC, k2
- **row 10 alteration:** [with CC, p1; with MC, k5] repeat for all stitches
with MC, knit in plain stockinette until you want to bind off, then bind off.

View File

@ -0,0 +1,9 @@
---
title: scrap patches
image:
src: 2025/scrap-patches.jpg
alt: "a collage of 4 images, each showing a fabric patch created by collaging 5 or 6 scraps of fabric and joining them with a simple running stitch in white thread. patches of running stitch go back and forth both horizontally and vertically."
tags:
- gallery
- patch
---

View File

@ -0,0 +1,13 @@
---
title: sideways canvas shirt
image:
src: 2025/sideways-canvas.jpg
alt: "someone's torso in a knitted short sleeve shirt. the front is teal, and the bit of back we can see is mustard yellow. looking closely, it's notable that the stitches are turned 90 degrees from a standard knit garment."
tags:
- gallery
- knit
---
Pattern: [Sideways Canvas](https://www.ravelry.com/patterns/library/sideways-canvas-hand){target="_blank" rel="external"}
Yarn: [De Rerum Natura *Antigone*](https://www.dererumnatura.fr/en/yarns/136-antigone.html){target="_blank" rel="external"}

View File

@ -0,0 +1,12 @@
---
title: on the shoulders of giants
image:
src: 2025/on-the-shoulders.jpg
alt: "ok so. five image collage showing the front, 3 inner spreads, and back of a riso-printed zine in green and light blue. it's called 'on the shoulders of giants' and it's about a knitting technique I learned from Stephen west and how I built on that technique. it talks about joining two adjacent panels without seaming, instead knitting the second panel onto the selvedge of the first. then it uses that technique to approach two panels knit with significantly different weights of yarn"
tags:
- gallery
- zine
- knit
---
Riso printed!

View File

@ -0,0 +1,11 @@
---
title: acadia mitts
image:
src: 2025/acadia-mitts.jpg
alt: "a hand wearing a knitted fingerless mitten. it's knit in a slubby, almost tweedy yarn, with the body being blue grey stockinette and the cuffs and tips a vibrant green rib."
tags:
- gallery
- knit
---
Yarn: [The Fibre Co. Acadia](https://thefibreco.com/products/acadia){target="_blank" rel="external"}

View File

@ -0,0 +1,10 @@
---
title: wrap bracelets
image:
src: 2025/leather-wrap-bracelets.jpg
alt: "two wrists, each wearing a black leather wrap bracelet. the upper bracelet is a thin strap wrapped 3 times around the wrist. the lower bracelet wraps twice, with a thicker strap, and has carefully placed spikes that avoid the wrap spots."
tags:
- gallery
- leather
---

View File

@ -0,0 +1,11 @@
---
title: brooke's suspenders
image:
src: 2025/brooke-suspenders.jpg
alt: "a two image collage showing the front and back of a person, neck to waist. she's wearing leather suspenders with a button attachment, buckles for adjustment, and a stitched diamond where the straps cross in the back."
tags:
- gallery
- leather
---
for our 3 year anniversary :)

View File

@ -0,0 +1,34 @@
---
title: designing a bag
image:
src: 2025/shoelace-bag.jpg
alt: "a 3-image collage showcasing a leather crossbody bag. the leather body is brown and fairly simple. up the narrow sides, rope is laced through grommets in a style resembling a shoe lacing. the rope forms the handle and loops seamlessly through the other side of the bag, joining in one point in a figure-8 follow-through knot. At the bottom corners, there are small diagonal lines of stitching to give the bag a small lip around the base and ensure small objects don't slide out."
tags:
- reference
- leather
- software
---
## begin by testing
the first step in any design is small tests. For leatherwork, this usually means working with paper - cheaper than leather, but with some of the same inflexibility.
## build up from basic facts
my grommets, laid out on paper, spaced out cleanly at 1/2" away from edges and 1" apart. My tablet is ~10"x8". I started with these facts.
## template, template, template
don't measure out the same spacing any more than you have to. Templating is your friend for both ease of use and regularity.
## mind the order of your work
the corners should be stitched before lacing in order to get into tight spaces easily. Grommets are set most easily before the work is 3-dimensional. It's cleanest to cut before grommets are installed so as to work on a smooth and level surface. Hold all this in your mind when choosing your next move, and ensure you don't step on your own toes.
## consider v2
even if you won't be making one, what would you do differently? Where does your design fail? Where does it *succeed?*
## take notes
easier said than done.

View File

@ -0,0 +1,11 @@
---
title: intro to wireframing
image:
src: 2025/aggregator-wireframes.jpg
alt: "a figma page with 4 major sections titled aggregator, aggregator mobile, aggregator color, and aggregator mobile color. each section has 7 pages in it - all sections pretty clearly have the same 7 pages, with the mobile sections shown on mobile screens and the color sections in a rainbow of pastels rather than grayscale."
tags:
- gallery
- software
---
learning figma! isn't it fun!

View File

@ -0,0 +1,12 @@
---
title: dragon mask
image:
src: 2025/dragon-mask.jpg
alt: "lee (a white person with glasses and a side shave) holds up a leather dragon mask in black and dark green. ze sticks hir tongue out at it."
tags:
- gallery
- leather
- highlight
---
pattern by [PaintYee](https://www.etsy.com/listing/831499316/pdf-pattern-leather-dragon-mask){target="_blank" rel="external"}

View File

@ -0,0 +1,57 @@
---
title: my favorite git flag
image:
src: 2025/shelf-mushrooms.jpg
alt: "Picture unrelated to post. Creamy beige shelf mushrooms on a mossy tree trunk."
tags:
- reference
- software
---
do you have a favorite git flag? I do. let's talk about `git add -p`.
## the p stands for partial
okay, it totally doesn't. it's short for `--patch`. but 'partial' is my mental trick because it makes a little more sense to me, and it might help you remember it too.
also, [TIL](https://xkcd.com/1053/){target="_blank" rel="external"}: this command is a shortcut to the `patch` subcommand of the `--interactive` flag - a flag I have never in my life used. wild the things you learn when you read the documentation.
## the primary purpose
a classic scenario: you've realized your uncommitted work doesn't just encapsulate one change, and it's not so easily split as to be separable per-file. `git add -p` instead lets you choose to stage changes chunk-by-chunk, or, as `git` terms it, hunk-by-hunk.
### hunks
...are not perfect. you can split hunks, but only so much, and there's going to be cases where your changes are *so* mixed in as to be inseparable.
## a secondary purpose
I use `-p` almost every time I use `git add`, not because I know I will need to split up my work, but to review what changes I made.
## a tertiary purpose
the output from `git add -p` highlights extraneous trailing spaces!
## how it works
every hunk `-p` shows you comes with the following single-character choices:
### y and n
**yes** and **no** respectively. either add the hunk, or don't.
### q
**quit**. exit the whole `-p` process.
### a and d
I rarely use these two. that said, I try to remember these two as **all** and **done**. stage all of the hunks in the current file, or be done with the current file.
### s
only shows up sometimes, because it lets you **split** the current hunk. if unsplittable, you won't see this option.
### e
**edit**. [read the documentation for manually editing](https://git-scm.com/docs/git-add#_editing_patches){target="_blank" rel="external"} if curious because I don't use this and can't advise on it.

View File

@ -0,0 +1,19 @@
---
title: brooke's scarf
image:
src: 2025/brooke-scarf.jpg
alt: "A diaphanous knit lacework scarf draped over the back of a chair. It is split down the long way into two colors - one tinted orange and one tinted mint blue. Both colors, the orange and the blue, are held double with the same variegated gray, making the piece more cohesive. The yarn overs in the lacework create airy repeating holes."
tags:
- gallery
- knit
---
## pattern
[Open Air Wrap by Purl Soho](https://www.purlsoho.com/create/2014/05/22/whits-knits-open-air-wrap/){target="_blank" rel="external"}
## yarns
- Hedgehog Fibres Kidsilk Lace in Goblin
- ITO Sensai in Pale Blue
- Rowan Kidsilk Haze in Mineral

View File

@ -0,0 +1,115 @@
---
title: siblinghood of the traveling greeting card
image:
src: 2025/rockery.jpg
alt: "Image unrelated to post. A surprisingly neat pile of rounded beach rocks, mainly speckly grey-white-bluish ones, with trees in the background."
tags:
- reference
- stationery
---
welcome to the siblinghood of the traveling greeting card. it now has a home at [siblinghood.quest](https://siblinghood.quest){target="_blank" rel="external"}.
originated on the fediverse - see the [#siblinghoodOfTheTravelingGreetingCard hashtag](https://flipping.rocks/tags/siblinghoodOfTheTravelingGreetingCard){target="_blank" rel="external"} - with original idea thanks to [noctiluca@scholar.social](https://scholar.social/@noctiluca){:target="_blank"}
## table of contents
- [objective](#objective)
- [outline](#outline)
- [timeline](#timeline)
- [participants](#participants)
- [on randomization](#on-randomization)
- [card guidelines](#card-guidelines)
- [address privacy](#address-privacy)
- [what I'll need from participants](#what-ill-need-from-participants)
- [signing the card](#signing-the-card)
- [mailing it back out](#mailing-it-back-out)
- [status checks](#status-checks)
- [what I'll send participants](#what-ill-send-participants)
- [guidelines](#guidelines)
- [recipient and loop order assignment](#recipient-and-loop-order-assignment)
- [reminders](#reminders)
- [I want in!](#i-want-in)
## objective
send a greeting card around the world. maybe more than one. we'll see.
## outline
from a group of participants, a random list will be formed. every person is given the address of the next person in the list (the last person receives the first person's address). first person picks a greeting card, signs it, and sends it to their designated recipient; that person receives, signs, sends on, etc.
this continues on to the last person, who finally signs and sends back to the first, closing the loop and ending the adventure. the first person gets to keep the card they originally sent out.
if we want to, this can be easily re-run - add folks who want to be added, drop folks who want to be dropped, scramble the list, and start again.
### timeline
accepting new applications for this first round until **December 15th, 2025**. After the 15th, you may still put in for future rounds, but be aware future rounds are not confirmed yet and will not be confirmed for at least 6 months most likely.
your marching orders (recipient address, order in loop) will arrive by email no later than **January 1st, 2026**.
### participants
any number, but in the case of signups reaching 26 or greater people, the cohort will be split. Why 26? I'd like this to not run significantly longer than a year, and I'm *very loosely* estimating that each person will add 2 weeks to the timeline.
**update:** we closed signups at 32 participants and will be running two loops! Don't worry, that doesn't change what you as participants do.
### on randomization
I will edit the list as needed to accommodate any mailing restrictions. I will also re-roll if I am placed first on the list.
### card guidelines
4x6 inches/10x15 centimeters minimum size recommended so there is space for everyone to sign. please nothing wildly vulgar, I guess?
you are allowed to include stickers or similar flat items for future recipients if you so desire. Please ensure your package meets weight guidelines for flat mail (in the US, forever/international stamped mail must be under 1oz; outside of the US please look into local guidelines - if you're struggling to be sure let me know and I'll do my best to help).
### address privacy
the only people who will see your address are:
- me
- the person who is sending directly to you
- if you put a return address (which I really would recommend), your recipient
## what I'll need from participants
### signing the card
Sign in any way you find meaningful. Please don't hog the card space - remember that as many as ~2 dozen people will be signing it!
**IMPORTANT!** Only put a name, nickname, doodle, fedi handle, etc. on the card that you are comfortable having displayed publicly. In any posts that I make, it will not be directly connected to you. However, as this likely has a small cohort, please be aware that how you sign could be tied back to your fedi account.
### mailing it back out
This will require a fresh envelope and stamp(s) as needed for postage.
### status checks
this is, at the end of the day, pretty flexible, but what I would *really, really like* is:
- 2 emails, one on receipt and one on re-sending. This allows me to check in on progress and ensure the card doesn't get too stalled, or lost.
- more optionally, but fun for seeing how things are going: a picture of the card (**not** the envelope!)
## what I'll send participants
### guidelines
all guidelines (which you can always find here!) will be repeated over email so you have a local copy. They may *additionally* be ported over to a standalone site if we find we want somewhere not-on-this-website for pictures and travel deets (don't worry, no addresses. Nothing more specific than country or state).
### recipient and loop order assignment
each participant will be sent the name and address of the next person in the loop. They will *also* be sent their place in the loop, numbered from **0**.
### reminders
I'll be doing my level best to track the card's movement, so as it is sent around (assuming I get check-ins from y'all! please help me out here!) I will send out reminders to folks to either check their mail or make sure the card gets sent out again. Some folks have specifically asked for this support and I don't want to let them down, so more communication is always better.
## I want in!
read all that? too long, didn't bother? either way.
[sign up for the siblinghood of the traveling greeting card](https://airtable.com/appdoHZsRDUzgYu9q/pagsr9LVAqKx29gDl/form){target="_blank" rel="external"}
(if airtable is for any reason inaccessible to you, please [reach out directly](/contact))

View File

@ -0,0 +1,47 @@
---
title: stationery exchange
image:
src: 2025/clustered-brown-mushrooms.jpg
alt: "Picture unrelated to post. A tight close-up on a cluster of tannish brown mushrooms."
tags:
- reference
- stationery
---
do you, like me, have a stash of greeting cards and stickers you'll never use? Too many notebooks and pens?
let's do a stationery exchange! You'll still have too much stationery, but some will be new to you.
originated on the fediverse - see the [#stationeryExchange hashtag](https://flipping.rocks/tags/stationeryExchange){target="_blank" rel="external"}.
## outline
similar to a Secret Santa (but not holiday-oriented), each participant is assigned a recipient. Participants assemble an envelope or package (estimate around $20-25 in value (not incl. shipping), but you are *highly encouraged* to pull from your own supplies, thrift, or make things yourself before buying new) and send to their recipients.
because of international shipping prices, participants will opt in to broad location categories that they are able to ship to (US, EU, and rest of world). You are encouraged to provide more detail about your shipping abilities in a free text field following the opt-in question - if you'd like to check where you are unable to send mail to, try [postcrossing's postal monitor](https://www.postcrossing.com/postal-monitor){target="_blank" rel="external"}. I will do my absolute best to accommodate shipping restrictions and needs. If you are unable to be matched with a gifter and/or a giftee I will reach out.
### timeline
sign up form will close on **December 15th, 2025**. Participants will receive their giftee's details by **January 1st, 2026**.
ship-by date of **February 15th, 2026**, giving participants **1 and a half months** to prepare and send their package. Packages will be expected to arrive by **March 15th, 2026**. If any recipient hasn't received a package by that time, I will follow up with their designated gifter.
reach out if you need flexibility regarding timeline!
### shipping
if you are struggling with shipping costs, please feel free to put together a flat envelope with things such as greeting cards and stickers rather than more 3-dimensional items.
if you are shipping **ink**, please be aware that liquids often have specific shipping rules. Look up the relevant rules for your location.
if you are in the US, I quite recommend [Pirate Ship](https://www.pirateship.com){target="_blank" rel="external"} which can help you get discounted rates with USPS and other services. You must make an account, but there is no fee for doing so.
### backups
in the event of a drop-out or other issue, I will be providing one or two backup gifts. Participants may also opt-in to being backups as well to take some load off me. If backups are needed, I will cover the first one, then round-robin a randomized list of those who have opted in to backups.
## let's do it!
[sign up for the stationery exchange](https://airtable.com/appdTQoPQRBcMTPk7/pagT8xLSSk6XPC6eJ/form){target="_blank" rel="external"}
(if airtable is for any reason inaccessible to you, please [reach out directly](/contact))

View File

@ -0,0 +1,11 @@
---
title: happy solstice 2025
image:
src: 2025/solstice-2025.jpg
alt: "front and back of our solstice card from this year, designed in postcard format. long alt incoming... front - 4 picture collage. 1 - i'm standing in the woods, looking to one side, wearing an elaborate knit scarf. 2 - silhouetted thistle-like flowers in front of a pink-purple sky. 3 - my wife brooke crouches down to draw a heart in charcoal on a beach log, with 'L + B' written inside. 4 - brooke stands on a driftwood-covered beach looking hella cool in mirrored shades. our dog kes stands in front of her and looks off to one side eagerly. overlaid is the words 'happy solstice' in cursive. back - split down the center like the back of a postcard. on the left side, a 5 picture collage. 1 - i stand on a rock at the edge of a calm alpine lake. overlaid is the words 'lee, brooke, kestrel, & the flock' in print lettering. 2 - an early spring fern curl. 3 - our six ducks, all facing to the left, not in a row but still very organized. 4 - brooke grins at the camera while hugging kestrel's head. kestrel looks maybe a bit distraught. 5 - silhouette of a heron in flight across an early morning blue sky. on the address side, i've added a dahlia to represent the stamp, and written 'you!' in the field that would normally hold the mailing address."
tags:
- gallery
- highlight
---
Happy Solstice to you and yours.

View File

@ -0,0 +1,11 @@
---
title: handcombed jacobs handspun
image:
src: 2025/handcombed-jacobs.jpg
alt: "a skein of dark grey handspun yarn"
tags:
- gallery
- yarn
---
Fiber: Jacobs wool that I scoured and combed myself.

View File

@ -0,0 +1,11 @@
---
title: icelandic lamb handspun
image:
src: 2025/icelandic-lamb.jpg
alt: "a skein of black handspun yarn"
tags:
- gallery
- yarn
---
Fiber: Icelandic Lamb from Skagit Woolen Works

View File

@ -0,0 +1,11 @@
---
title: light grey jacobs handspun
image:
src: 2025/light-grey-jacobs.jpg
alt: "a skein of light grey handspun yarn"
tags:
- gallery
- yarn
---
Fiber: Jacobs (light grey) from Skagit Woolen Works

View File

@ -0,0 +1,11 @@
---
title: petrichor handspun
image:
src: 2025/petrichor-handspun.jpg
alt: "3 skeins of handspun yarn, 2 large and 1 small. the large ones are a rich earth-tone blend of reds, pinks, browns, and hints of green and gold. the smaller skein is similar but with a decidedly greener hue"
tags:
- gallery
- yarn
---
Fiber: Malabrigo Nube in colorway petrichor