Expand Cut Tags

No cut tags

Various Links 12/14 - 12/21

Dec. 21st, 2025 04:53 pm
senmut: 3 blue seahorse shapes of varying sizes on a dark background (General: Seahorse Triad)
[personal profile] senmut
Yesterday was eaten alive by yuletide pinch hits, so day late with these.

~ Samson and Delilah gifs - young Angela Lansbury the Hottie

~ Smokin' MoTown - Temptations, Miracles, Stevie, Smokey, Vandellas, and Supremes in one photo

~ Art of Dorian Pavus and the Iron Bull in a bath

~ Trans Art for Maevaris Tilani

~ Beowulf Essay titles? - anecdote from a professor

~ Xuanji Tu - A mathematical art of poetry

vital functions

Dec. 21st, 2025 10:49 pm
kaberett: Trans symbol with Swiss Army knife tools at other positions around the central circle. (Default)
[personal profile] kaberett

Reading. Nothing (quite) finished; various snippets. Scalzi, Bourke, Boddice, Cowart )

Watching. Wake Up Dead Man (the third instalment in the Benoit Blanc/Knives Out mysteries). Read more... )

Three episodes of Man vs. Bee, in company; this is... not for me.

Playing. Inkulinati! And, with the niblings: Match Madness, The Genius Square, Rummikub, Dixit.

Cooking. A new-to-me fruitcake recipe from one of my cookbooks; a dal from the cookbook I am not actually going to manage Making Everything From by the end of the calendar year (but I am pretty close).

Eating. I have now had A Mince Pie. Also a very long lunch at the Gardeners Arms. The brownies that all the reviews of the place we wound up staying in Ardlingy mentioned (which were indeed v good).

Exploring. Wakehurst Place, both at night for Glow Wild and during daylight (a little)!

Growing. Bought curry leaves. Proceeded to strip most of the stems (freezing the leaves) and Treat As Cuttings. There's at least one of them that doesn't look actually dead yet...

Observing. OWL OWL OWL. Very talkative tawny, as we were leaving Wakehurst on Friday night. Snowdrops, also at Wakehurst, to my mild horror. And, blessedly, NOT The Charity Tractor Parade...

trobadora: (Shen Wei - chains)
[personal profile] trobadora
[community profile] ficinabox author reveals have happened! And here is the first of the two stories I wrote.

I wanted to write something set in the later episodes, and [personal profile] gavilan had asked for smut, so I was brainstorming and rewatching things to find a suitable spot to make it happen. And in episode 31, during the Nightmare Master arc, there's this moment when Shen Wei, chained to the Sky Pillar in Dixing, can feel Zhao Yunlan's energies in turmoil even though Zhao Yunlan is far away in Haixing. So I thought, what if ...? I'd always meant to do something with the Nightmare Master's power anyway, because dream manipulation has so much potential! Also [personal profile] gavilan said they like angst, and what is angstier than the whole white energy plan? So I had an opportunity for canon divergence with larger impact ... *g*

With many thanks to [personal profile] china_shop, as usual, for beta-reading. ♥

**

To Make a Dream (9270 words)
Fandom: 镇魂 | Guardian (TV 2018)
Rating: Mature
Relationship: Shen Wei/Zhao Yunlan
Characters: Shen Wei, Zhao Yunlan, brief appearances by Ye Zun and the SID
Content Tags: Alternate Universe - Canon Divergence, Episode Related, Episode 31, Nightmare Master arc, Dream Sharing, Dixing Powers, Black and White Energy, First Kiss, First Time, Pre-Fix-It

Summary:

"You took a while to wake," Shen Wei said gently. "I brought you home." He ran a hand through his hair. "I needed rest, too."

So that was the fantasy: something Zhao Yunlan could almost, almost believe. His heart clenched. Suddenly he understood Zhu Hong's temptation to keep dreaming. But the true Shen Wei was still missing. Zhao Yunlan needed to wake up for real.
james_davis_nicoll: (Default)
[personal profile] james_davis_nicoll
Can they use their abilities in the course of their mandatory voluntary community service? Or maybe, the question is, how to use them without running into the bar on endangering other people or themselves?

[ SECRET POST #6925 ]

Dec. 21st, 2025 03:55 pm
case: (Default)
[personal profile] case posting in [community profile] fandomsecrets

⌈ Secret Post #6925 ⌋

Warning: Some secrets are NOT worksafe and may contain SPOILERS.


01.



More! )


Notes:

Secrets Left to Post: 02 pages, 43 secrets from Secret Submission Post #989.
Secrets Not Posted: [ 0 - broken links ], [ 0 - not!secrets ], [ 0 - not!fandom ], [ 0 - too big ], [ 0 - repeat ].
Current Secret Submissions Post: here.
Suggestions, comments, and concerns should go here.

Culinary

Dec. 21st, 2025 08:01 pm
oursin: Frontispiece from C17th household manual (Accomplisht Lady)
[personal profile] oursin

This week's bread: a loaf of Bacheldre Rustic Country Bread Flour, quite nice, but not as nice as Dove's Farm Seedhouse.

Friday night supper: ersatz Thai fried rice with chorizo di navarra.

Saturday breakfast rolls: the ones based on James Beard's mother's raisin bread, 50/50% Marriages Golden Wholegrain (end of bag) and Strong Brown Flour, quite nice.

Today's lunch: lamb chops which I cooked thusly, except that as I had no small bottles of white wine I used red, turned out very well; served with Greek spinach rice and padron peppers.

runpunkrun: silverware laid out on a cloth napkin (gather yon utensils)
[personal profile] runpunkrun posting in [community profile] gluten_free
I adapted these muffins from a recipe in Katarina Cermelj's The Elements of Baking, making them dairy free and reducing the sugar. The result is a tender muffin with a domed top and a fluffy crumb, similar to a bakery muffin, but not as sticky or sweet.

Ingredients:

145 g tapioca starch
72 g sorghum flour
72 g millet flour
170 g granulated sugar
2 tsp baking powder
1 tsp baking soda
1 tsp xanthan gum
1/4 tsp fine salt

160 g non-dairy milk (175 ml)
150 g non-dairy yogurt (5.3 oz)
100 g neutral oil (1/2 cup)
2 large eggs (~100 g out of shell)
1/4 tsp almond extract

215 g fresh raspberries, rinsed and drained

recipe )

Questions? Ask 'em!

Link: Let's support trans children

Dec. 21st, 2025 10:47 am
sonia: Quilted wall-hanging (Default)
[personal profile] sonia
Kids Deserve a New Gender Paradigm by Kai Cheng Thom.
[I]n the trenches of trans health care, there is a growing idea that pushes back against the “one true gender for each individual” framing altogether—one that could allow us to resolve the bitterly divisive culture war over the psychological and medical care of transgender children. What if, instead of viewing gender as a fixed trait, we started to think of it as something that could evolve over the course of a lifetime? Or if detransitioning wasn’t considered a sign of failure and was instead regarded as a natural and healthy part of the gender development process?

Drawing Truchet tiles in SVG

Dec. 21st, 2025 06:06 pm
[syndicated profile] alexwlchandotnet_feed

Posted by Alex Chan

I recently read Ned Batchelder’s post about Truchet tiles, which are square tiles that make nice patterns when you tile them on the plane. I was experimenting with alternative headers for this site, and I thought maybe I’d use Truchet tiles. I decided to scrap those plans, but I still had fun drawing some pretty pictures.

One of the simplest Truchet tiles is a square made of two colours:

These can be arranged in a regular pattern, but they also look nice when arranged randomly:

The tiles that really caught my eye were Christopher Carlson’s. He created a collection of “winged tiles” that can be arranged with multiple sizes in the same grid. A tile can be overlaid with four smaller tiles with inverted colours and extra wings, and the pattern still looks seamless.

He defined fifteen tiles, which are seven distinct patterns and then various rotations:

The important thing to notice here is that every tile only really “owns” the red square in the middle. When laid down, you add the “wings” that extend outside the tile – this is what allows smaller tiles to seamlessly flow into the larger pattern.

Here’s an example of a Carlson Truchet tiling:

<input ... >

Conceptually, we’re giving the computer a bag of tiles, letting it pull tiles out at random, and watching what happens when it places them on the page.

In this post, I’ll explain how to do this: filling the bag of tiles with parametric SVGs, then placing them randomly at different sizes. I’m assuming you’re familiar with SVG and JavaScript, but I’ll explain the geometry as we go.

Filling the bag of tiles

Although Carlson’s set has fifteen different tiles, they’re made of just four primitives, which I call the base, the slash, the wedge, and the bar.

The first step is to write SVG definitions for each of these primitives that we can reuse.

Whenever I’m doing this sort of generative art, I like to define it parametrically – writing a template that takes inputs I can change, so I can always see the relationship between the inputs and the result, and I can tweak the settings later. There are lots of templating tools; I’m going to write pseudo-code rather than focus on one in particular.

For these primitives, there are two variables, which I call the inner radius and outer radius. The outer radius is the radius of the larger wings on the corner of the tile, while the inner radius is the radius of the foreground components on the middle of each edge. For the slash, the wedge, and the bar, the inner radius is half the width of the shape where it meets the edge of the tile.

This diagram shows the two variables, plus two variables I compute in the template:

outer radius inner radius tile size padding

Here’s the template for these primitives:

<!-- What's the length of one side of the tile, in the red dashed area?
     tileSize = (innerR + outerR) * 2 -->

<!-- How far is the tile offset from the edge of the symbol/path?
     padding = max(innerR, outerR) -->

<symbol id="base">
  <!--
    For the background, draw a square that fills the whole tile, then
    four circles on each of the corners.
    -->
  <g class="background">
    <rect x="{{ padding }}" y="{{ padding }}" width="{{ tileSize }}" height="{{ tileSize }}"/>
    <circle cx="{{ padding }}"            cy="{{ padding }}"            r="{{ outerR }}"/>
    <circle cx="{{ padding + tileSize }}" cy="{{ padding }}"            r="{{ outerR }}"/>
    <circle cx="{{ padding }}"            cy="{{ padding + tileSize }}" r="{{ outerR }}"/>
    <circle cx="{{ padding + tileSize }}" cy="{{ padding + tileSize }}" r="{{ outerR }}"/>
  </g>
  <!--
    For the foreground, draw four circles on the middle of each tile edge.
    -->
  <g class="foreground">
    <circle cx="{{ padding }}"            cy="{{ tileSize / 2 }}"       r="{{ innerR }}"/>
    <circle cx="{{ padding + tileSize }}" cy="{{ tileSize / 2 }}"       r="{{ innerR }}"/>
    <circle cx="{{ tileSize / 2 }}"       cy="{{ padding }}"            r="{{ innerR }}"/>
    <circle cx="{{ tileSize / 2 }}"       cy="{{ padding + tileSize }}" r="{{ innerR }}"/>
  </g>
</symbol>

<!--
  Slash:
    - Move to the top edge, left-hand vertex of the slash
    - Line to the top edge, right-hand vertex
    - Smaller arc to left egde, upper vertex
    - Line down to left edge, lower vertex
    - Larger arc back to the start
-->
<path
  id="slash"
  d="M {{ padding + outerR }} {{ padding }}
     l {{ 2 * innerR }} 0
     a {{ outerR }} {{ outerR }} 0 0 0 {{ outerR }} {{ outerR }}
     l 0 {{ 2 * innerR }}
     a {{ innerR*2 + outerR }} {{ innerR*2 + outerR }} 0 0 1 {{ -innerR*2 - outerR }} {{ -innerR*2 - outerR }}"/>

<!--
  wedge:
    - Move to the top edge, left-hand vertex of the slash
    - Line to the top edge, right-hand vertex
    - Smaller arc to left egde, upper vertex
    - Line to centre of the tile
    - Line back to the start
-->
<path
  id="wedge"
  d="M {{ padding + outerR }} {{ padding }}
     l {{ 2 * innerR }} 0
     a {{ outerR }} {{ outerR }} 0 0 0 {{ outerR }} {{ outerR }}
     l {{ 0 }} {{ 2 * innerR }}
     l {{ -innerR*2 - outerR }} 0"/>

<!--
  Bar: horizontal rectangle that spans the tile width and is the same height
  as a circle on the centre of an edge.
  -->
<rect
  id="bar"
  x="{{ padding }}" y="{{ padding + outerR }}"
  width="{{ tileSize }}"
  height="{{ 2 * innerR }}"/>

The foreground/background classes are defined in CSS, so I can choose the colour of each.

This template is more verbose than the rendered SVG, but I can see all the geometric expressions – I find this far more readable than a file full of numbers. This also allows easy experimentation – I can change an input, re-render the template, and instantly see the new result.

I can then compose the tiles by referencing these primitive shapes with a <use> element. For example, the “T” tile is made of a base and two wedge shapes:

<!-- The centre of rotation is the centre of the whole tile, including padding.
     centreRotation = outerR + innerR -->

<symbol id="carlsonT">
  <use href="#base"/>
  <use href="#wedge" class="foreground"/>
  <use href="#wedge" class="foreground" transform="rotate(90 {{ centreRotation }} {{ centreRotation }})"/>
</symbol>

After this, I write a similar <symbol> definition for all the other tiles, plus inverted versions that swap the background and foreground.

Now we have a bag full of tiles, let’s tell the computer how to place them.

Placing the tiles on the page

Suppose the computer has drawn a tile from the bag. To place it on the page, it needs to know:

  • The x, y position, and
  • The layer – should it place a full-size tile, or is it a smaller tile subdividing a larger tile

From these two properties, it can work out everything else – in particular, whether to invert the tile, and how large to scale it.

The procedure is straightforward: get the position of all the tiles in a layer, then decide if any of those tiles are going to be subdivided into smaller tiles. Use those to position the next layer, and repeat. Continue until the next layer is empty, or you hit the maximum number of layers you want.

Here’s an implementation of that procedure in JavaScript:

function getTilePositions({
  columns,
  rows,
  tileSize,
  maxLayers,
  subdivideChance,
}) {
  let tiles = [];
  
  // Draw layer 1 of tiles, which is a full-sized tile for
  // every row and column.
  for (i = 0; i < columns; i++) {
    for (j = 0; j < rows; j++) {
      tiles.push({ x: i * tileSize, y: j * tileSize, layer: 1 });
    }
  }
  
  // Now go through each layer up to maxLayers, and decide which
  // tiles from the previous layer to subdivide into four smaller tiles.
  for (layer = 2; layer <= maxLayers; layer++) {
    let previousLayer = tiles.filter(t => t.layer === layer - 1);
    
    // The size of tiles halves with each layer.
    // On layer 2, the tiles are 1/2 the size of the top layer.
    // On layer 3, the tiles are 1/4 the size of the top layer.
    // And so on.
    let layerTileSize = tileSize * (0.5 ** (layer - 1));
    
    previousLayer.forEach(tile => {
      if (Math.random() < subdivideChance) {
        tiles.push(
          { layer, x: tile.x,                 y: tile.y                 },
          { layer, x: tile.x + layerTileSize, y: tile.y                 },
          { layer, x: tile.x,                 y: tile.y + layerTileSize },
          { layer, x: tile.x + layerTileSize, y: tile.y + layerTileSize },
        )
      }
    })
  }
  
  return tiles;
}

Once we know the positions, we can lay them out in our SVG element.

We need to make sure we scale down smaller tiles to fit, and adjust the position – remember each Carlson tile only “owns” the red square in the middle, and the wings are meant to spill out of the tile area. Here’s the code:

function drawTruchetTiles(svg, tileTypes, tilePositions, padding) {
  tilePositions.forEach(c => {
    // We need to invert the tiles every time we subdivide, so we use
    // the inverted tiles on even-numbered layers.
    let tileName = c.layer % 2 === 0
      ? tileTypes[Math.floor(Math.random() * tileTypes.length)] + "-inverted"
      : tileTypes[Math.floor(Math.random() * tileTypes.length)];
      
    // The full-sized tiles are on layer 1, and every layer below
    // that halves the tile size.
    const scale = 0.5 ** (c.layer - 1);
    
    // We don't want to draw a tile exactly at (x, y) because that
    // would include the wings -- we add negative padding to offset.
    //
    // At layer 1, adjustment = padding
    // At layer 2, adjustment = padding * 1/2
    // At layer 3, adjustment = padding * 1/2 + padding * 1/4
    //
    const adjustment = -padding * Math.pow(0.5, c.layer - 1);

    svg.innerHTML += `
      <use
        href="${tileName}"
        x="${c.x / scale}"
        y="${c.y / scale}"
        transform="translate(${adjustment} ${adjustment}) scale(${scale})"/>`;
  });
}

The padding was fiddly and took me a while to work out, but now it works fine. The tricky bits are another reason I like defining my SVGs parametrically – it forces me to really understand what’s going on, rather than tweaking values until I get something that looks correct.

Demo

Here’s a drawing that uses this code to draw Carlson truchet tiles:

<input ... > <input ... >

It was generated by your browser when you loaded the page, and there are so many possible combinations that it’s a unique image.

If you want a different picture, reload the page, or tell the computer to draw some new tiles.

These pictures put me in mind of an alien language – something I’d expect to see etched on the wall in a sci-fi movie. I can imagine eyes, tentacles, roads, and warnings left by a long-gone civilisation.

It’s fun, but not really the tone I want for this site – I’ve scrapped my plan to use Truchet tiles as header images. I’ll save them for something else, and in the meantime, I had a lot of fun.

[If the formatting of this post looks odd in your feed reader, visit the original article]

Done Since 2025-12-14

Dec. 21st, 2025 06:26 pm
mdlbear: blue fractal bear with text "since 2002" (Default)
[personal profile] mdlbear

Damned if I know how to summarize this week. Mixed?

Embarrassingly, I managed to confuse two deliveries (see Monday) -- I think because they had the same last digit or so in their package numbers -- so I had to delete a couple of annoyed-sounding posts. Hopefully before anyone noticed. The Roamate (combo rollator/powered wheelchair) arrived less than an hour later. Karma, I guess. The device itself seems pretty good, modulo some wierd design decisions, but will take some getting used to before I can write a proper review.

On the other hand, Bronx has been becoming an absolute cuddle-bug. He likes to be picked up and carried, which can be very useful. He doesn't always settle down into my lap after that, but when he does he has a nice rumbly purr. And my medication is still being adjusted; I seem to be getting into somewhat better shape. It's still not great, but I'm not complaining.

On the gripping hand, (covered mobility scooter)Scarlet the Carlet is broken, with a circuit breaker that doesn't want to stay reset. N, G, and j managed to push her home (under a kilometer, and NL is basically flat) -- we'll call for repairs tomorrow sometime.

In the links: MIT physicists peer inside an atom’s nucleus using the fact that Radium monofluoride's electron cloud extends inside the Radium's somewhat pear-shaped nucleus. Wild. Both the technique, and the fact that that compound exists at all. At least it's nowhere near as unstable as FOOF.

The Star Gauge is fascinating. (m sent us a link on the family Discord, but it was to tumblr -- the wikipedia article is less problematic.)

Notes & links, as usual )

lannamichaels: Astronaut Dale Gardner holds up For Sale sign after EVA. (Default)
[personal profile] lannamichaels


Title: Pillar Of The Community.
Author: [personal profile] lannamichaels
Fandom: Wake Up Dead Man (2025)
Rating: G
Archives: Archive Of Our Own, SquidgeWorld (To be added when the site is back up)

Summary: Martha Grace Wicks, from her first murder to her last.


Flashfic! )

I was today years old

Dec. 21st, 2025 11:02 am
james_davis_nicoll: (Default)
[personal profile] james_davis_nicoll
When I discovered Olivia Newton-John's father took Rudolf Hess into custody during World War II.
[syndicated profile] cakewrecks_feed

Posted by Jen

By now many of you are no doubt in that stress-filled haze of pre-Christmas panic - the one that results from too much shopping and too little eggnog. (Because, seriously, EGGNOG FIXES EVERYTHING.)

So listen, I want you to just sit back, relax, and let allll that holiday stress go. Because this, my friends, is your happy place.

See? LOOK HOW HAPPY:

(By Karla's Little Bakery)

Is this not the sweetest, artsiest bit of edible quilling you've ever seen? So perfect! Now I want to try quilling again just to make this pattern into next year's Christmas cards.

 

And speaking of cards, doesn't this remind you of all those vintage-styled pretties - the ones on thick cream paper with embossed lettering?

(By Alliance Bakery)

I think it's all the handpainting; it's just SO perfect it looks printed.

 

And now, ruffly goodness:

(By Inspired by Michelle Cake Designs)

See that pattern on the white? I love that pattern. I want it covered in crystals and made into wrapping paper - which I will then hoard, Smaug-style, along with thousands of rolls of sparkly Christmas ribbon, because I seriously can't stop buying that stuff.

Ahem.

 

You may have heard that the Three Wise Men brought the baby Jesus gifts of gold, frankincense, and myrrh, but did you know they also brought something a little more festive?

(By Yuma Couture Cakes)

Because it's not a birthday party 'til there are balloons, dangit.
(That silhouette is too, too cool.)

 

This one makes me hum "Walking in a Winter Wonderland" - and with the right words, even!

(By Chanata sweets 'n Decoration)

That pop of lime green in the middle with the teal is just about the cheeriest thing ever, and I love the dusting of powered sugar snow on the chocolate pinecones. And did you notice this is an anniversary cake? SO SWEET.

 

This next one is as cozy as your favorite Christmas sweater:

(Photography by Simone van Den Berg, cake by Evelien Keijer)

It's also baffling the heck out of me, since I have no idea how the baker did it. She couldn't have individually piped every single "stitch," right? Right?? Please, someone tell me; I may lose sleep over this.

 

Another handpainted beauty with a vintage vibe:

(Found here, anyone know the baker?)

I'm digging the "snow" dripping off those berries and branches.

 

And this one manages to be modern and classic at the same time:

(Artwork by Illustree and cake by Three Little Blackbirds Cakes)

Black, white, and sparkly red glitter will never go out of style, people. NEVER.

 

And don't underestimate the power of a little red accent on a soft gray palette, either:

(By Of Cakes and Cupcake (and Apollo too))

Airbrushing done right makes me all happy inside.

 

You know, I've seen a lot of cakes, and I generally pride myself on being able to spot what's edible and what's not. This next one, though? Completely fooled me:

(By Gateaux Inc.)

I thought those were stacked hat boxes, but nope; it's cake, and everything on it is edible. The bells, the silky gold robe, and of course the sheet music sides. Plus the solid side has this gorgeous shimmer you can really only see up close:

Wowza.

 

And if you thought that was stunning, then hold on to your giant pearly antlers:

(By Cake Heart)

[gasp]

OooooOOOOoooooh.
And just like that, blue is my new favorite color.

Well, I hope you enjoyed, my friends, because your happy place is now closing. So get on out there, and go drink some eggnog. [lifting cup] Cheers!

*****

P.S. For my fellow fans of blue, purple, and gorgeous galaxy prints:

Galaxy Throw Blanket

There are lots of galaxy print blankets out there, but this one has the best reviews I've found. Vibrant, super soft, and not too thick!

******

And from my other blog, Epbot:

This Week's SF news

Dec. 21st, 2025 09:40 am
james_davis_nicoll: (Default)
[personal profile] james_davis_nicoll
It turns out if you really want to raise the profile of your writers' union, all you need to do is announce LLM-generated works are eligible for awards, as long as they are not entirely LLM-generated.

Profile

azurelunatic: Vivid pink Alaskan wild rose. (Default)
Azure Jane Lunatic (Azz) 🌺

December 2025

S M T W T F S
 123456
78910111213
14 15161718 1920
21222324252627
28293031   

Most Popular Tags

Style Credit

Page generated Dec. 21st, 2025 11:20 pm
Powered by Dreamwidth Studios