More from Liz Denys
When I was glazing this v60-style cone, I was thinking of rising sea levels, eroding beaches, and melting ice caps. Trying to tackle large challenges like climate change is overwhelming in the best of times, and these are not the best of times. There are many things we can personally do to reduce our carbon footprints and fight climate change, but If we want to have any chance to succeed, we need to join together and organize. If you're new to organizing, connect with local groups already doing the work you're interested in, and don't forget to look for groups pushing for change outside of just the national stage. Creating more dense walkable, transit-oriented communities is one of our strongest tools for a sustainable, climate friendly future. Generally, the bulk this work in the US happens at the state and local levels. In addition to the climate benefits, it's essential work to keep communities together and fight displacement. I personally spend a lot of my spare time organizing locally around this issue to help ensure NYC and New York State stay places everyone can thrive. I focus especially on pro-housing policies and improving transportation options and reliability so climate-friendly, less car-dependent lifestyles - and New York's relative safety - can be for everyone.
Clay shrinks as it dries and even more as it's fired, so it's useful to have a way to estimate the final size of in-progress work - especially if you're making multiples or trying to fit pieces together. One way to do this is with shrinkage rulers. I figured I'd design my own shrinkage rulers and provide a way for folks to make them themselves since ceramic tool costs can add up. To make your shrinkage rulers: Download either the colorful printable shrinkage rulers or black and white printable shrinkage rulers. Print at 100% size. (These files are both 400 dpi.) Verify that the 0% shrinkage standard ruler at the top matches the size of an existing regular ruler you have. This quick calibration step will make sure nothing out of scale during printing! Cut out your rulers. Optionally, laminate or cover in packing tape to help them last longer. To use your shrinkage rulers: If you're using commercial clay, look up how much your clay is estimated to shrink. If you're using a blend of clays or custom clays, you'll have to calculate how much your clay shrinks. An easy way to do this is measure the length of a wet piece right after you form them and again after it's been through its glaze firing. You can then calculate the estimated shrinkage rate: Pick the shrinkage ruler that corresponds to your clay's shrinkage rate. If you're between shrinkage rates, you can estimate with a nearby size. Remember that shrinkage rates are estimates, and a piece's actual shrinkage depends on many variables, including how wet your clay is and how close it is to it's original composition (this can change with repeated recycling). Measure your wet piece with the shrinkage ruler! The length shown is the expected length your piece's dimension will be when fired. The fine print: Reminder that shrinkage rulers only give estimated lengths! You're welcome to print these shrinkage rulers for yourself or your business. You may use the printed shrinkage rulers privately, even in commercial applications (I hope they help your ceramic art and business!), provided you do not redistribute or resell the shrinkage rulers themselves in any form, digital or physical. Footnotes If you're working on a jar or something else that needs to fit together tightly, it's better not to rely on shrinkage rulers to get a perfect fit. In my experiences, you ideally want to make the vessel and the lid as close in time as possible and have them dry together and fire together through as many phases as possible.↩
I'm continuing my clay body reviews series with two very heavily grogged "sculpture" clays I've used. Note that I currently practice in a community studio that glaze fires to cone 6 in oxidation, so my observations reflect that. Standard 420 Sculpture: Cone 6: average shrinkage 8.0%, absorption 1.5% Light straw when fired to cone 6: more yellow/beige than most white stonewares so the color is something to consider in your final vision (or engobe in something else) So much grog that it’s best described as working with wet sand, non-derogatory I've made complicated open coil-based structures with this clay that have been formed across many studio sessions over a couple days, and they've survived without cracking! Wet clay attaches readily to leather hard and even slightly dry clay. Wrapping my works in dry cleaning bags until done and dry before bisque was enough - I was worried I'd have to make a damp box, but not with this clay! The grog is white and grey, and it comes in a variety of sizes, including some that is visually rather large. The grog really shows if you sand to smooth the surface. I typically dislike how this looks - the result ends up looking more like concrete than clay. If you use this for functional ware or anything you move around a lot, you'll certainly want to sand the bottom since the groggy surface is extra rough to protect tables and counters. Burnishing alone doesn't usually make this clay smooth. Can be thrown when very soft, but your hands will feel scratched if you're not used to it! Angled slab joins join readily, and support coils press in quickly and easily. Some members of my studio prefer to make plates with this clay because the high level of grog significantly reduces warping. I personally prefer to make plates with clays with far less grog that I dry very slowly. High palpable grog content means a weaker object, and I prefer more strength in objects that are handled frequently. Can be marbled with 798, but needs to dry slowly. Standard 420's straw color shows in the unglazed section of this planter's drip tray, and there's also some flashing from the glaze near the edges. I sanded the base of this piece so the slightly rough surface of Standard 420 wouldn't scratch tables, and you can see the contrast between the sanded bottom (outside) layer where the varied grogs are revealed and the rougher surfaces of the other layers where they are still covered by clay particles. This handbuilt planter was made of Standard 798 over multiple studio sessions. The sculptural coil structures attached readily with my regular slip and score process, and it dried evenly enough to not crack with my regular process of drying under a single plastic dry-cleaning bag. This coiled wall art piece was made out of equal parts Standard 112 and Standard 420 wedged fully together. There's still ample grog in this hybrid clay body to work the same as the Standard 798 planter's coiled structure. Standard 798 Black Sculpture: Cone 6: average shrinkage 10%, absorption 1.0% Dark brown when wet, fires to a gorgeous black at cone 6 when unglazed. Clear glazes will make this clay look brown, so you need to use a black like Coyote Black or Amaco Obsidian to preserve the black color if you want to glaze it. So much grog that it’s best described as working with wet sand, non-derogatory. The grog is white, and provides a lovely contrast when on the surface or sanded to be revealed. Like 420, you'll probably want to sand the bottom of anything you'll pick up and put down more than once. Very similar working qualities to 420 - a true joy for handbuilding! Can be marbled with 420, but needs to dry slowly.
Starlit sky on a clear night / the milky way / eternity / clarity / raindrops sticking to window glass
More in programming
A deep dive into Testing Library's .toBeVisible() and .toBeInTheDocument() matchers, exploring their differences, use cases, and best practices
At first, it sounds obvious: if we want to save the planet, we should do less. Fewer people, less consumption, smaller footprints. I believed this too—so much so that I once thought having kids was irresponsible. But the more I looked into it, the less sense it made.
A week ago, somebody added malicious code to the tj-actions/changed-files GitHub Action. If you used the compromised action, it would leak secrets to your build log. Those build logs are public for public repositories, so anybody could see your secrets. Scary! Mutable vs immutable references This attack was possible because it’s common practice to refer to tags in a GitHub Actions workflow, for example: jobs: changed_files: ... steps: - name: Get changed files id: changed-files uses: tj-actions/changed-files@v2 ... At a glance, this looks like an immutable reference to an already-released “version 2” of this action, but actually this is a mutable Git tag. If somebody changes the v2 tag in the tj-actions/changed-files repo to point to a different commit, this action will run different code the next time it runs. If you specify a Git commit ID instead (e.g. a5b3abf), that’s an immutable reference that will run the same code every time. Tags vs commit IDs is a tradeoff between convenience and security. Specifying an exact commit ID means the code won’t change unexpectedly, but tags are easier to read and compare. Do I have any mutable references? I wasn’t worried about this particular attack because I don’t use tj-actions, but I was curious about what other GitHub Actions I’m using. I ran a short shell script in the folder where I have local clones of all my repos: find . -path '*/.github/workflows/*' -type f -name '*.yml' -print0 \ | xargs -0 grep --no-filename "uses:" \ | sed 's/\- uses:/uses:/g' \ | tr '"' ' ' \ | awk '{print $2}' \ | sed 's/\r//g' \ | sort \ | uniq --count \ | sort --numeric-sort This prints a tally of all the actions I’m using. Here’s a snippet of the output: 1 hashicorp/setup-terraform@v3 2 dtolnay/rust-toolchain@v1 2 taiki-e/create-gh-release-action@v1 2 taiki-e/upload-rust-binary-action@v1 4 actions/setup-python@v4 6 actions/cache@v4 9 ruby/setup-ruby@v1 31 actions/setup-python@v5 58 actions/checkout@v4 I went through the entire list and thought about how much I trust each action and its author. Is it from a large organisation like actions or ruby? They’re not perfect, but they’re likely to have good security procedures in place to protect against malicious changes. Is it from an individual developer or small organisation? Here I tend to be more wary, especially if I don’t know the author personally. That’s not to say that individuals can’t have good security, but there’s more variance in the security setup of random developers on the Internet than among big organisations. Do I need to use somebody else’s action, or could I write my own script to replace it? This is what I generally prefer, especially if I’m only using a small subset of the functionality offered by the action. It’s a bit more work upfront, but then I know exactly what it’s doing and there’s less churn and risk from upstream changes. I feel pretty good about my list. Most of my actions are from large organisations, and the rest are a few actions specific to my Rust command-line tools which are non-critical toys, where the impact of a compromised GitHub repo would be relatively slight. How this script works This is a classic use of Unix pipelines, where I’m chaining together a bunch of built-in text processing tools. Let’s step through how it works. find . -path '*/.github/workflows/*' -type f -name '*.yml' -print0 .yml in a folder like .github/workflows/. It prints a list of filenames, like: ./alexwlchan.net/.github/workflows/build_site.yml \0) between them, which makes it possible to split the filenames in the next step. By default it uses a newline, but a null byte is a bit safer, in case you have filenames which include newline characters. .yml as a file extension, but if you sometimes use .yaml, you can replace -name '*.yml' with \( -name '*.yml' -o -name '*.yaml' \) -path rules, like -not -path './cpython/*'. xargs -0 grep --no-filename "uses:" xargs to go through the filenames one-by-one. The `-0` flag tells it to split on the null byte, and then it runs grep to look for lines that include "uses:" – this is how you use an action in your workflow file. --no-filename option means this just prints the matching line, and not the name of the file it comes from. Not all of my files are formatted or indented consistently, so the output is quite messy: - uses: actions/checkout@v4 sed 's/\- uses:/uses:/g' \ uses: is the first key in the YAML dictionary. This sed command replaces "- uses:" with "uses:" to start tidying up the data. uses: actions/checkout@v4 sed is a pretty powerful tool for making changes to text, but I only know a couple of simple commands, like this pattern for replacing text: sed 's/old/new/g'. tr '"' ' ' uses: actions/checkout@v4 sed to make this substitution as well. I reached for tr because I've been using it for longer, and the syntax is simpler for doing single character substitutions: tr '<oldchar>' '<newchar>' awk '{print $2}' actions/checkout@v4 awk is another powerful text utility that I’ve never learnt properly – I only know how to print the nth word in a string. It has a lot of pattern-matching features I’ve never tried. sed 's/\r//g' \r), and those were included in the awk output. This command gets rid of them, which makes the data more consistent for the final step. sort | uniq --count | sort --numeric-sort tally. 6 actions/cache@v4 This step-by-step approach is how I build Unix text pipelines: I can write a step at a time, and gradually refine and tweak the output until I get the result I want. There are lots of ways to do it, and because this is a script I’ll use once and then discard, I don’t have to worry too much about doing it in the “purest” way – as long as it gets the right result, that’s good enough. If you use GitHub Actions, you might want to use this script to check your own actions, and see what you’re using. But more than that, I recommend becoming familiar with the Unix text processing tools and pipelines – even in the age of AI, they’re still a powerful and flexible way to cobble together one-off scripts for processing data. [If the formatting of this post looks odd in your feed reader, visit the original article]
JavaScript went against the grain in only using floating point numbers initially, and now we pay the price
Immortality always sounded like a curse to me. But especially now, having passed the halfway point of the average wealthy male life expectancy. Another scoop of life as big as the one I've already been served seems more than enough, thank you very much. Does that strike you as morbid? It's funny, people seem to have no problem understanding satiation when it comes to the individual parts of life. Enough delicious cake, no more rides on the rollercoaster, the end of a great party. But not life itself. Why? The eventual end strikes me as beautiful relief. Framing the idea that you can see enough, do enough, be enough. And have enjoyed the bulk of it, without wanting it to go on forever. Have you seen Highlander? It got panned on its initial release in the 80s. Even Sean Connery couldn't save it with the critics at the time. But I love it. It's one of my all-time favorite movies. It's got a silly story about a worldwide tournament of immortal Highlanders who live forever, lest they get their heads chopped off, and then the last man standing wins... more life? Yeah, it doesn't actually make a lot of sense. But it nails the sadness of forever. The loneliness, the repetition, the inevitable cynicism with humanity. Who wants to live forever, indeed. It's the same theme in Björk's wonderfully melancholic song I've Seen It All. It's a great big world, but eventually every unseen element will appear as but a variation on an existing theme. Even surprise itself will succumb to familiarity. Even before the last day, you can look forward to finality, too. I love racing, but I'm also drawn to the day when the reflexes finally start to fade, and I'll hang up the helmet. One day I will write the last line of Ruby code, too. Sell the last subscription. Write the last tweet. How merciful. It gets harder with people you love, of course. Harder to imagine the last day with them. But I didn't know my great-great-grandfather, and can easily picture him passing with the satisfaction of seeing his lineage carry on without him. One way to think of this is to hold life with a loose grip. Like a pair of drumsticks. I don't play, but I'm told that the music flows better when you avoid strangling them in a death grip. And then you enjoy keeping the beat until the song ends. Amor fati. Amor mori.