Day 20,647

Pizza breakfast
Me and the kiddo, digesting before I go to the gym.

Morning began with the soft sound of the cat’s impatient paws on the floor, reminding me that her kingdom runs on both wet and dry provisions. Once the queen was fed, I crowned myself with breakfast, leftover pizza with field roast faux pepperoni, red bell pepper, and jalapeño, the kind of breakfast that makes the day feel like it already has a story to tell.

I slept in later than planned, but the phone rang, my doctor’s office calling with a friendly voice to pin a future date for next month. Time marked in the calendar, then off to the gym.

I gave the machines their due, the quiet clank and hum of effort, before making my way to the pool. The water greeted me like an old friend, warm and welcoming. No one else in sight. Just me, ripples, and the echo of each stroke in the stillness.

Sometimes the best part of the day is the part where you are the only one in it.

Old Dan Tucker

Mr. Edwards doing his thing

Morning breakfast in hand, sky just starting to blush. Thought drifted to an old episode of Little House on the Prairie, the one where Mr. Edwards comes striding in with that half grin, a little twinkle of mischief in his eyes, and starts into “Old Dan Tucker.” Banjoless but somehow you hear the pluck and stomp in the air. Pa tapping a boot, Laura’s eyes bright, the room warmer than the fire makes it.

It is not about the words themselves, “Old Dan Tucker was a fine old man,” but about the cadence, the rolling river of syllables that makes you smile even before you catch the meaning. The way Edwards’ voice carries, a little gravel, a little laughter, like he is sharing an inside joke with the whole room.

I have always liked that in songs, the sense that they are not just being sung to you, but with you, across a long table lit by lamplight. The melody and the memory blend, and suddenly I am not in my home, I am in a prairie cabin, with woodsmoke in my clothes and the winter scratching at the walls outside.

The episode fades, but the rhythm lingers. Foot tapping still, coffee cooling, and a smile you cannot quite explain to anyone who was not there in that room, even if that room only ever existed on a soundstage in the 1970s.

Day 20, 645

Last weekend’s making table began with a scatter of blank package tags — plain white, each with a little hole at the top — and ended in a drift of color and string. We turned them into bookmarks, passing paints, markers, and brushes back and forth.

One was a joint creation: I drew the bee, she added the honeycomb, a soft watercolor wash, and the words, this hive shall thrive. Another held a wizard mid-spell, coaxing a tree to grow. When the ink dried, we tied red-and-white twine through each tag, threading on bright beads so they’d swing at the ends.

We bundled them up and drove to the little free art museum. As we began placing the bookmarks inside, a visitor leaned in, watching the new pieces find their places. The bee never even made it to the gallery shelf — the person smiled, claimed it instantly, and slipped it away. First flight.

Darkness provides the brightest stars
Rotated this hive shall thrive
Knit together
For yunny in costa rica
Random doodle and coloring
Wizard growing a tree

Hey there, dear journal. Today was one of those unremarkable magic days: simple, grounded, and oddly satisfying.

It was a mild, mostly pleasant day in Sale – nothing dramatic, just that calm kind of weather that makes you want to open all the windows and hear the world doing its thing. (See weather widget above.)

Cue my go-to headphone playlist, and what comes on, but “Harvest Moon” by Neil Young – its gentle guitar and soft vocals perfectly matched the pace of the day. It’s the kind of song that feels like a conversation with a good friend, somehow warm and timeless.

The day was stitched together by chores. First up: taking out the recycling. I stacked the bins, loaded up the car, and made my way to the center, listening to the distant hum of passing cars and the rustle of leaves. It felt oddly meditative – like a small, quiet triumph.

Then it was back inside to tackle the usual: stacking dishes, wiping counters, sorting the mail, and letting my mind drift in that empty space between tasks. There’s something peaceful in the routine—those little mundane bits that keep the place ticking.

Evening rolled around and I made taco salad—crisp lettuce, seasoned ground impossible beef,  beans, olives, lettuce, a scattering of cheese, and a dollop of sour cream. It’s not haute cuisine, but it’s reliable and satisfying in its crunchy, savory way. I piled it high, brought it to the table, and sat down with that Neil Young playing low in the background. It was just right.


There’s beauty in the ordinary, you know? Yesterday didn’t bring fireworks, but it brought that gentle sense of everything being handled: chores done, dinner made, music playing, and the world quietly moving outside.

Hope your day had a few of these subtle wins too, dear journal.

Warm afternoon in Roanoke, the sky doing that hazy watercolor thing, blue bleeding into gold like someone tipped a jar. The air smelled faintly of creosote from the rail yard, cut with the sweetness of honeysuckle climbing the chain-link fences, green tendrils writing in cursive on the metal.

Downtown, the brick walls carried their ghosts well — fading ads for biscuits and soda, a recently repainted mishmash of colors and textures. Market Square dozed in the heat: a man tuning his guitar under the shade awning, the notes weaving into the lazy air like dragonflies; two teenagers hunched over a chessboard that might have remembered other games in other summers. Somewhere, a train lumbered past, each car a rolling chapter in a book that never ends.

Then the sky cracked open — a short, silver rain burst. Pavement and brick drank deep, and the air filled with steam. Streetlights flickered on early, humming. The world smelled like wet stone and coffee from the café on Campbell Ave. For a moment, the sidewalk shimmered, and I thought I saw koi swimming in the rain puddles.

Walking home, I found the heron in the creek again, unmoving, waiting for something only it knew. Behind it, the water ran smooth and black, carrying the last bits of daylight away like loose change in a current.



Late start – sun already high and warm enough to soften the edges of the morning. Wandered to the farmers market, where the air smelled like basil and raw onions. Stopped for an iced tea and an egg sandwich from Dunkin’ Donuts, the kind of breakfast that feels like a little hand-held anchor before drifting further into the day.

On the way back, a street-side vendor under a shade umbrella had tables crowded with treasures – plastic tubs of plums the color of bruised twilight, small yellow cherries that glowed like marbles in the sun, and some other nameless fruits that looked like they belonged in another climate. I left with coconut and mango, the vendor’s machete flashing in quick, practiced motions on another coconut. 

Lunch came from the morning’s shopping: a “turkey” and muenster cheese sandwich on spelt bread from Ritual Breads, brightened with sweet peppers from Thornfield Farmer, and a generous splash of Fermented Fire’s tangy hot sauce. Summer’s bounty compressed between slices.

Weather: Mostly sunny, 77°F, light breeze from the west. A few lazy clouds drifting like unhurried passengers.
Mood: Slow and pleasantly unmoored.
Found Object: A mango that smells like a whole day at the beach.

Old Southwest free art gallery stop today by the fountain, tentacle benches in stone. Warm air, sound of water carrying down a quiet street. Glass-front little library of tiny art. Left a space cat and spider-legged 3D printed bowl (looked like it might scuttle off if I turned away), took handmade paper with soft edges, flecks of color pressed in. Quiet art barter, no words. Visit it, and share your art, and take some!

Drove over to Nakhon Thai, the table outside under just enough shade to make the sun friendly. Cloverdale traffic hum, a light breeze threading between cars. Door opening now and then, letting out a gust of lemongrass and curry like someone cracked a window into summer. Spring rolls crisply hot and cool dips.  Fried tofu, gold shell over soft middle. Pad prik king,  beans still-crisp, slow red curry heat. Drunken noodles with basil bright, trace of wok char. Cold drinks sweating in time with me, so glad August was being gentle. Second visit, just as good as the first. Will return.

Bakery stop for a sweet before heading home. More on that later.

We started the evening at the free little art gallery in Old Southwest, the one by the fountain with the tentacle-wrapped benches carved from limestone and marble. Quiet street, water sound carrying in the warm air. The glass-fronted box was full of tiny works. We left a 3D printed bowl on spider legs and took a packet of homemade paper, soft-edged with flecks of color pressed in. A quiet trade between strangers.

From there we headed to Nakhon Thai Cuisine and sat at the little table out front, shaded just enough to keep the sun gentle. The steady hum of Cloverdale traffic, and now and then the door opening to let a wave of lemongrass and curry drift out. We started with spring rolls, crisp and fresh with a cool dipping sauce, and fried tofu with a soft middle and golden shell.

Pad prik king came out rich with red curry, green beans still crisp, the heat slow to build. Drunken noodles on the other plate, wide and tender with that hint of char from the wok, basil bright in the mix. Cold drinks kept pace with the spice. It was our second visit, and the food was equally excellent both times. The value was very good for both the quality and the quantity, the sort of meal that feels worth coming back for.

Afterward, we continued on to the bakery for a little sweet treat before heading home. There will be more on that later.

Edited revision

Here’s the updated Scottobear-style entry with your cooler August weather detail worked in so it feels natural to the scene.




2025-08-08 21:37
Mood: content, lightly sun-warmed
Weather: 77°F, comfortably cool for August, whisper of a breeze, fountain splash soundtrack

We drove to the Old Southwest free art gallery by the fountain, where stone tentacle benches curled in lazy spirals. The mild air carried the sound of water spilling into a basin, drifting down the quiet street. A glass-front little art library held shelves of tiny treasures. I left a spider-legged 3D printed bowl that looked like it might scuttle off if you blinked, and in return I took handmade paper with soft deckled edges, flecks of color suspended like tiny petals. It was a silent trade, understood without words.

From there we headed over to Nakhon Thai and found a small table out front, shaded just enough to make the sun feel friendly. The Cloverdale traffic hummed in the background while a light breeze moved between the parked cars. Each time the door opened, a rush of lemongrass and curry spilled into the street, like someone had briefly opened a window into summer.

The spring rolls were crisp and cool, the fried tofu wore a gold shell over a cloud-soft middle, and the pad prik king arrived with beans that still had a snap and a slow-building red curry heat. Drunken noodles came fragrant with bright basil and carried a trace of wok char. Cold drinks sweated on the table at the same pace I did. This was our second visit, and it was every bit as good as the first. We will be back.


Before heading home we stopped at the bakery for something sweet, but that is a story for later.


Sycamore Station

When the moon hits your knees
And you mispronounce trees
Sycamore

Sycamore Station on Dutch Oven Road — a place of gentle wonder, where a door opens into something more than retail. I wandered in one morning when the air still held dew, and found myself in a light-splashed space where food smells like home, curiosity lingers on every shelf, and time tilts just a fraction slower.

The blueberry grilled cheese was a whisper of pastel heaven: jam and goat cheese, basil’s quiet hum, jalapeño offering a gentle nudge. I sipped a cold brew, deep and rich, and let the warmth from the wood-floored room settle in my chest.

Around me—pottery that feels hand-warmed by the artist’s fingers, candles that glow like hidden geodes, bowls carved from wood that once lived in forest twilight. The air carried the memory of markets past, of vendors setting up under suns that only half-remembered themselves.

In the back, a community room awaited: its tables folding into stillness or gathering space for readers and painters and dreamers. Soon I discovered — it was all of us, drawn there to breathe.

This is more than a stop. It’s a threshold between trail and table, quiet and connection. I left with a sticker in my pocket, a card for a sign‑making class in my bag, and the feeling that someone had saved a corner of Roanoke for moments like this.

I’ll be back. Maybe next time I’ll bring a friend, or linger over books and floated root beer. Sycamore Station isn’t just a place to pause — it’s one to return to.

Day 20,639

[Wednesday, August 6, 2025]

Happy lil frog, enjoying a good book.

Doctor’s appointment first thing this morning — a quick check-in, mostly routine. A waiting room with daytime television turned down too low to make out the words, just enough to let the commercials feel like a soft menace. The nurse was kind, and the doctor efficient. Blood pressure fine, meds adjusted slightly.

Afterward, I swung past the CVS drive-through on Chestnut, where the speaker always feels like it’s underwater. Picked up my prescriptions — the usual refills. A little more traffic than expected, but the breeze today helped. Not quite fall yet, but the air is thinking about it. A hint of cool under the sun. Maybe just wishful thinking. It’s nice that the person at the window knows me enough to ask after family, and if the meds are for me or she.

Kroger pickup went smoothly. Ordered last night, a few substitutions — they were out of my usual crackers, but replaced them with the off-brand cousins, which might be even better. The carhop, cheerful and quick, packed the back with grocery bags and said, “‘Preciate ya!” with that familiar local warmth that makes the transaction feel more like a favor than a job. Made me smile more than I expected.There’s something solid about groceries in the trunk, even if I’m too tired to put them away right away. A pantry restocked is its own kind of comfort.

Wore out by early afternoon. Still, it’s a kind of satisfaction. Appointments handled, fridge fuller, pills lined up. Some days are built for maintenance.

Now, just watching the shadows stretch out, letting the day drift into night. Dinner plan: faux fried chicken salad tonight. Got the plant-based nugs in the freezer, the good kind that crisp up just right in the air fryer. Gotta remember to wash the lettuce before I forget again — it’s waiting in the crisper drawer like it always is, pretending to be invisible until dinner hour comes creeping up.

#quiettasks #roanokeva  #groceryrun #doctorvisit #doodle #frog

Day 20,638

Scarecrow in the blue ridge

cool winds and checkups

Started the day early, the kind of morning where the light slants just right and the air carries a whisper of cooler times ahead. A string of doctor visits had me pinging across town—one stop, then another, and another still. Everyone kind, mostly. Long waits balanced with short conversations. Questions asked, vitals taken, a nod here, a hmm there.

There’s something about medical errands that wears you out differently—not dramatic or loud, just a quiet drain that settles in the shoulders. I’m feeling it now. A little wrung out. Tired and sore.

But the weather helped. Cooler today, like the first leaf of fall might peek out if you looked hard enough. The kind of breeze that doesn’t push, just glides by and lets you know things are changing. No crunch underfoot yet, but it’s coming. I can feel it in my back.

Home now. Cat curled up beside me like she’s guarding the perimeter. I’m looking forward to more days like this—less the appointments, more the cool air and slowing down. The edge of summer is softening. Autumn is lining up backstage, waiting for its cue.

#windingdown
#coolbreeze
#almostautumn
#longdayquietnight 🍂

Cookie

Drove over to Crystal Spring Market this afternoon. Just wanted a few things—vegetarian curry rice for me, a turkey sandwich for my date, mineral water, and some chocolate chunk cookies for later. Ate the curry at the window inside the store, watching the slow rhythm of the neighborhood shuffle past. No chickpeas, no sweet potato, just rice and sauce—plain and grounding.

Book club met in the evening, though there were far fewer folks than usual. Summer colds, the lack of a light fiction book, or schedule tangles, maybe, or just the pull of a quiet Monday. We gathered anyway, circling up to talk about Everything Is Tuberculosis by John Green—a nonfiction dive into how disease doesn’t move evenly through the world. How race, poverty, and systemic neglect decide who suffers longer, who gets overlooked, who’s left in the waiting room too long. No easy answers, just a lot of hard truths strung together with clarity. A few of us sat with that silence you get when a book says something you always knew, but didn’t have the words for until now.

Afterward, my date and I shared the cookies back home. Soft, just enough chocolate. A small sweetness at the end of a dense day.

The cat blinked at us like we’d come back from something important. Maybe we had.

lone voice, steady drum

Downtown Roanoke, Williamson Road, just past noon — red light hanging overhead, the world paused for a breath.

And there she is.

One woman, one handmade sign, one American flag, standing at the corner like a lighthouse. Yellow board with words inked bold:


“RISE UP — CHANGE COURSE OF HISTORY — EVERYDAY PPL LIKE YOU + ME”

I do not know her name, but I know her rhythm. If I’m not mistaken, she’s led before — chants at the protests I’ve been to. A voice strong and sure, one we all follow when our own get tired. Today she stands alone, but not quietly. This is not silence — it’s signal.

People pass in cars, in buses, on foot. Some honk, some stare, some don’t see her at all. But she’s out there anyway, carrying her sign and flag, with the steady kind of presence that says: “I’m not here for the crowd. I’m here for the cause.”

You don’t always need thousands to start change. Sometimes one voice is the ember.
She’s awesome.

#Roanoke #EverydayHero #Protest

August 3rd, 2025 – late summer light filtering through the trees like golden syrup, slow and thick and a little sticky. A breeze now and then, enough to keep the bugs confused. One of those afternoons where the world feels paused between chapters.

🧶📚 We made our way to Dragon Bite Books, where the paperbacks lean in like old friends sharing secrets and the air smells like stories. Betty Grable, the shop cat, was very much on duty—zipping between shelves, brushing our legs with friendly purpose, pausing just long enough for a head bump before darting off to patrol her realm. Skittish, but sociable, like a librarian who’s short on time but still wants to say hello.

The take-home haul was a lovely one—some back issues of spinning magazines full of wooly dreams, a couple of gently-used novels, and a pleasing handful of art supplies. The wooden spheres clacked comfortingly in their little bag, the new stencil set looked ready to shape some fresh ideas, and the Halloween ribbon—orange and black plaid with a thin gold thread stitched through—caught the light in a way that felt like a wink from October. No pumpkins, no ghosts—just that subtle seasonal suggestion.

🐈‍⬛✨🎃

The Little Free Art Library was a bit bare today—just a bent paperclip and a sticker that said “You tried.” We tucked in three 3D printed llamas, all different sizes, ready to be adopted by passing hands. The kind of tiny thing that might make someone’s day brighter, or at least weirder in a good way.

We split a croissant from BreadCraft by the fountain, layers crisp and warm, little flakes tumbling into the water like edible confetti. A couple of pigeons watched us with obvious judgment. One tried to edge closer. We did not share.

Currently listening: the soft clack of wooden spheres and passing cicadas
Currently planning: what to stencil first
Currently grateful for: Betty Grable the shop cat, art surprises, and the quiet delight of orange and gold plaid

#scottobearstyle #salemva #dragonbitebooks #littlefreeartlibrary #3dprintedllamas #autumninspo #bookshopcat #breadcraftbreak

Game of life, pydroid v.2

import pygame
import pickle
import os
import copy

# — Configuration —
SCREEN_WIDTH, SCREEN_HEIGHT = 800, 600
CELL_SIZE = 10
GRID_WIDTH = SCREEN_WIDTH // CELL_SIZE
GRID_HEIGHT = (SCREEN_HEIGHT – 100) // CELL_SIZE # Reserve space for buttons

# Colors
COLOR_WHITE = (255, 255, 255)
COLOR_BLACK = (0, 0, 0)
COLOR_GRAY = (40, 40, 40)
COLOR_GREEN = (0, 255, 0)
COLOR_BLUE = (30, 144, 255)
COLOR_RED = (255, 69, 0)

# — Game of Life Logic (using standard lists) —
def create_grid(width, height):
    “””Creates a 2D list to represent the grid.”””
    return [[0 for _ in range(height)] for _ in range(width)]

def next_generation(grid):
    “””Computes the next generation of the grid based on the rules.”””
    width = len(grid)
    height = len(grid[0])
    new_grid = copy.deepcopy(grid) # Use deepcopy for lists of lists

    for x in range(width):
        for y in range(height):
            # Count live neighbors, handling wrapping at the edges (toroidal array)
            total = 0
            for i in range(-1, 2):
                for j in range(-1, 2):
                    if i == 0 and j == 0:
                        continue
                    # Calculate wrapped coordinates
                    nx, ny = (x + i) % width, (y + j) % height
                    total += grid[nx][ny]

            # Apply Conway’s rules
            if grid[x][y] == 1:
                if (total < 2) or (total > 3):
                    new_grid[x][y] = 0
            else:
                if total == 3:
                    new_grid[x][y] = 1
    return new_grid

# — Classic Patterns —
def get_patterns():
    “””Returns a dictionary of classic Game of Life patterns.”””
    patterns = {
        “Gosper Glider Gun”: [
            (5, 1), (5, 2), (6, 1), (6, 2), (5, 11), (6, 11), (7, 11),
            (4, 12), (8, 12), (3, 13), (9, 13), (3, 14), (9, 14), (6, 15),
            (4, 16), (8, 16), (5, 17), (6, 17), (7, 17), (6, 18),
            (3, 21), (4, 21), (5, 21), (3, 22), (4, 22), (5, 22),
            (2, 23), (6, 23), (1, 25), (2, 25), (6, 25), (7, 25),
            (3, 35), (4, 35), (3, 36), (4, 36)
        ],
        “Glider”: [(0, 1), (1, 2), (2, 0), (2, 1), (2, 2)],
        “Pulsar”: [
            (2,4),(3,4),(4,4),(8,4),(9,4),(10,4), (2,5),(7,5),(9,5),(14,5),
            (2,6),(7,6),(9,6),(14,6), (4,7),(5,7),(6,7),(10,7),(11,7),(12,7),
            (4,9),(5,9),(6,9),(10,9),(11,9),(12,9), (2,10),(7,10),(9,10),(14,10),
            (2,11),(7,11),(9,11),(14,11), (2,12),(3,12),(4,12),(8,12),(9,12),(10,12)
        ],
        “Clear”: []
    }
    return patterns

def place_pattern(grid, pattern_name, offset_x=10, offset_y=5):
    “””Places a pattern onto the grid.”””
    patterns = get_patterns()
    pattern = patterns.get(pattern_name)
    width = len(grid)
    height = len(grid[0])
   
    # Clear grid before placing pattern
    for x in range(width):
        for y in range(height):
            grid[x][y] = 0
           
    if pattern:
        for pos in pattern:
            # Ensure pattern fits on screen
            if 0 <= pos[0] + offset_x < width and 0 <= pos[1] + offset_y < height:
                grid[pos[0] + offset_x][pos[1] + offset_y] = 1

# — Pygame Setup —
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption(“Conway’s Game of Life”)
clock = pygame.time.Clock()
font = pygame.font.SysFont(“sans”, 20)

# — Button Class —
class Button:
    def __init__(self, x, y, width, height, text, color):
        self.rect = pygame.Rect(x, y, width, height)
        self.text = text
        self.color = color

    def draw(self, surface):
        pygame.draw.rect(surface, self.color, self.rect)
        pygame.draw.rect(surface, COLOR_WHITE, self.rect, 2)
        text_surf = font.render(self.text, True, COLOR_WHITE)
        text_rect = text_surf.get_rect(center=self.rect.center)
        surface.blit(text_surf, text_rect)

    def is_clicked(self, pos):
        return self.rect.collidepoint(pos)

# — UI Elements —
buttons = {
    “play_pause”: Button(10, SCREEN_HEIGHT – 80, 100, 30, “Play”, COLOR_BLUE),
    “step”: Button(120, SCREEN_HEIGHT – 80, 70, 30, “Step”, COLOR_BLUE),
    “save”: Button(10, SCREEN_HEIGHT – 40, 70, 30, “Save”, COLOR_BLUE),
    “load”: Button(90, SCREEN_HEIGHT – 40, 70, 30, “Load”, COLOR_BLUE),
}
pattern_buttons = {}
pattern_names = list(get_patterns().keys())
x_offset = 200
for i, name in enumerate(pattern_names):
    pattern_buttons[name] = Button(x_offset + (i * 120), SCREEN_HEIGHT – 80, 110, 30, name, COLOR_GRAY)

# — Main Game Loop —
def main():
    grid = create_grid(GRID_WIDTH, GRID_HEIGHT)
    running = True
    paused = True
    drawing = False
    speed = 10  # Generations per second

    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT: running = False
            if event.type == pygame.KEYDOWN and event.key == pygame.K_AC_BACK: running = False

            if event.type == pygame.MOUSEBUTTONDOWN:
                pos = pygame.mouse.get_pos()
                on_button = any(btn.is_clicked(pos) for btn in list(buttons.values()) + list(pattern_buttons.values()))

                if on_button:
                    # Handle UI buttons
                    if buttons[“play_pause”].is_clicked(pos):
                        paused = not paused
                        buttons[“play_pause”].text = “Play” if paused else “Pause”
                        buttons[“play_pause”].color = COLOR_BLUE if paused else COLOR_RED
                    elif buttons[“step”].is_clicked(pos) and paused:
                        grid = next_generation(grid)
                    elif buttons[“save”].is_clicked(pos):
                        try:
                            with open(“life_save.dat”, “wb”) as f:
                                pickle.dump(grid, f)
                            print(“Grid saved!”)
                        except Exception as e:
                            print(f”Error saving file: {e}”)
                    elif buttons[“load”].is_clicked(pos):
                        try:
                            if os.path.exists(“life_save.dat”):
                                with open(“life_save.dat”, “rb”) as f:
                                    grid = pickle.load(f)
                                print(“Grid loaded!”)
                        except Exception as e:
                            print(f”Error loading file: {e}”)
                   
                    for name, btn in pattern_buttons.items():
                        if btn.is_clicked(pos):
                            place_pattern(grid, name)
                else:
                    # Handle drawing on the grid
                    drawing = True
                    x, y = pos[0] // CELL_SIZE, pos[1] // CELL_SIZE
                    if 0 <= x < GRID_WIDTH and 0 <= y < GRID_HEIGHT:
                        grid[x][y] = 1 – grid[x][y] # Toggle cell

            if event.type == pygame.MOUSEBUTTONUP:
                drawing = False

            if event.type == pygame.MOUSEMOTION and drawing:
                pos = pygame.mouse.get_pos()
                x, y = pos[0] // CELL_SIZE, pos[1] // CELL_SIZE
                if 0 <= x < GRID_WIDTH and 0 <= y < GRID_HEIGHT:
                    grid[x][y] = 1 # Draw live cells

        if not paused:
            grid = next_generation(grid)

        # — Drawing —
        screen.fill(COLOR_BLACK)
        for x in range(GRID_WIDTH):
            for y in range(GRID_HEIGHT):
                if grid[x][y] == 1:
                    pygame.draw.rect(screen, COLOR_GREEN, (x*CELL_SIZE, y*CELL_SIZE, CELL_SIZE, CELL_SIZE))
                pygame.draw.rect(screen, COLOR_GRAY, (x*CELL_SIZE, y*CELL_SIZE, CELL_SIZE, CELL_SIZE), 1)

        pygame.draw.rect(screen, (50,50,50), (0, SCREEN_HEIGHT – 100, SCREEN_WIDTH, 100))
        for btn in buttons.values():
            btn.draw(screen)
        for btn in pattern_buttons.values():
            btn.draw(screen)
       
        pygame.display.flip()
        clock.tick(speed)

    pygame.quit()

if __name__ == ‘__main__’:
    main()

Welcome to my wall scrawls.