Latest writing
138 total posts Topics: Python, Jupyter, Air, FastHTML, Django, AI, web engineering
Post 3 of 138

The First Air Sprint

I co-led the first ever Air web framework sprint in Davao, Philippines, as part of Day 2 of PyCon Davao on October 26, 2025.

Continue reading
Post 15 of 138

Pi

Happy Pi Day. Here's pi from the stdlib math module and from Numpy.

Continue reading
Post 19 of 138

Excavating a Lost CLI Tool

I thought I had completely lost my new iteration on my notebook titler tool, but it turns out I'm finding bits and pieces in various places. Here I try to put it together again.

Continue reading
Post 45 of 138

Alarm Sounds App

Demo of adding sounds to a FastHTML app with Tone.js. Sounds make web apps come alive and feel interactive.

Continue reading
Post 51 of 138

NBClassic Keyboard Shortcuts: Command and Dual-Mode

I'm taking inventory of all the Command Mode and dual-mode nbclassic keyboard shortcuts on macOS, with my random musings about each. This is part of my deliberate practice to master all of the useful ones, and will serve as a reference for myself later.

Continue reading
Post 52 of 138

Understanding FastHTML Routes, Requests, and Redirects

In this tutorial we'll look at the simplest routes and route handlers you can create with FastHTML. We'll define the handlers as little functions, and then call them as we would any other Python function. After that, we'll make simple GET requests to a simple index route/handler, a parameterized one, and a parameterized one with a redirect.

Continue reading
Post 54 of 138

HTML Title Tag in FastHTML

I get so lazy about title tags. The point of today's notebook is to make me less lazy, so I actually fix the title of this site. Oh, and to explore Title and Titled in FastHTML.

Continue reading
Post 64 of 138

Note Box FastTag

I needed a quick note box for the index page of this site, without affecting the CSS of my notebooks that explore weird CSS stuff deeply.

Continue reading
Post 72 of 138

What Can `execnb` do?

This notebook is a SolveIt-style exploration of https://github.com/AnswerDotAI/execnb/. Here I am following the SolveIt process in a Jupyter notebook to learn new things.

Continue reading
Post 75 of 138

Daddy's Snowman Card

Here we are checking the numbers from our daughter's snowman card to Daddy. She gave him math problems to solve and a snowman joke.

Continue reading
Post 87 of 138

Setting Up a Blog With nbdev

I feel like Jupyter notebooks would be really nice for blogging or publishing "Today I Learned" posts. I had heard about Fastpages before via Jeremy Howard's blog or YouTube videos, but seeing that it was deprecated in favor of nbdev, I decided to try nbdev.

Continue reading
Post 90 of 138

Ride a Bike Today

My husband Daniel and I created this piece together during the holidays, and I forgot to post it so I'm doing so now. It started with a pen-and-ink drawing I drew. Then we transformed it several times, alternating photocopier distortion, gouache, watercolor, house paint, more pen and ink, and collage over and over.

Ride a Bike Today Continue reading
Post 91 of 138

Butterflies

Daniel and I painted these butterflies with gouache, pastels, and a brush pen. Originally my intent was to experiment with butterfly shapes for republishing my butterfly book, but then I decided to play around with brush shapes and mark-making. Daniel joined in the fun of giving the butterflies their beautiful coloration with me.

Butterflies Continue reading
Post 92 of 138

Real World Django Book Cover

Most of this cover design is admittedly from 2013. I updated parts of it. It may change dramatically as we flesh out the book, or it may stay mostly the same. I don't know yet.

Real World Django Book Cover Continue reading
Post 93 of 138

Impossible Hero Books Logo

We're moving all five of our fantasy novels to a new publishing imprint! Daniel and I came up with the name "Impossible Hero Books" and created this logo together on the plane ride back home.

Impossible Hero Books Logo Continue reading
Post 95 of 138

My Baby Is One Year Old!

I'm so proud of my daughter, Uma. She's so strong, smart, and lovely. Here she is at her first birthday party in her spacesuit. She's only been with me and Daniel for a short time, but it feels like our lives have just begun. She makes every new day so meaningful.

Continue reading
Post 96 of 138

Yummy Yummy in Your Tummy

This is the first page of Veggies for the Modern Baby, the book we're making for our baby daughter Uma. Pictured are the lyrics to the song Danny and I sing while feeding her.

Yummy Yummy in Your Tummy Continue reading
Post 98 of 138

Rediscovery

This painting represents my recent experiences. Paths in various uncertain directions are overlapped with spiraling curves revisiting the past and building upon it. Along the way, beauty shows up in the most unexpected places.

Rediscovery Continue reading
Post 100 of 138

Watercolor and Stenciled Paper Mandalas

I love using recycled materials. I cut out these snowflakes from the heavy cardstock backing piece of a pack of markers. I estimate it as 120-150lb cardstock. The 3-inch piece cut well, but the 2-inch one didn't cut cleanly.

Watercolor and Stenciled Paper Mandalas Continue reading
Post 101 of 138

Voronoi Mandalas

SciPy has tools for creating Voronoi tessellations. Besides the obvious data science applications, you can use them to make pretty art like this:

Voronoi Mandalas Continue reading
Post 105 of 138

Our Trip to DjangoGirls Ensenada, Mexico

This weekend, Daniel and I drove down to Ensenada, Mexico to speak and coach at DjangoGirls Ensenada. It was a 2-day workshop for women of any level of experience to get a taste of web application development.

Continue reading
Post 109 of 138

Land of Five Suns

This is another piece inspired by Tolkien's illustrations. I wanted it to be a scene from another planet, though, so I gave it five suns and tried to make the land a bit otherworldly.

Land of Five Suns Continue reading
Post 110 of 138

River and Mountains

Few are aware that J. R. R. Tolkien was as great an artist as a writer. His art is incredibly inspiring. It inspired me to paint this piece.

River and Mountains Continue reading
Post 111 of 138

Flowers and a Blue Potato

I've painted yet another tribute to a Chris Foss illustration I'm obsessed with. This version has flowers instead of an explosion, and the asteroid is actually a blue potato.

Flowers and a Blue Potato Continue reading
Post 117 of 138

Strawberries

One of my favorite plates at home has a strawberry pattern printed on it. This is sort of loosely inspired by seeing that pattern almost every day.

Strawberries Continue reading
Post 118 of 138

Metallic Flower Doodles

Just playing around with metallic watercolor pencils. They don't really look metallic. They're like regular watercolor pencils, but with the colors just a bit desaturated.

Metallic Flower Doodles Continue reading
Post 120 of 138

Giant Flying Dog

Book cover for a story about a giant flying dog who drools all over a quiet suburb, causing chaos and evacuations.

Giant Flying Dog Continue reading
Post 123 of 138

Flying Dog Sketches

I started writing a short story about flying dogs awhile back. The story is a work-in-progress, but I hope to finish it soon and post it on Wattpad.

Flying Dog Sketches Continue reading
Post 124 of 138

Endless Food

This is a draft of a cover for another short story about food teleportation. For some reason I'm stuck on that idea. Not sure why.

Endless Food Continue reading
Post 125 of 138

Simple Garden

I have a confession to make. Sometimes when I work on my paintings for the 100 day project, I do them at night right before bed when I'm completely exhausted. My state of mind in these situations is wanting to get the painting over with as quickly as possible so I can get to bed.

Simple Garden Continue reading
Post 127 of 138

Spring Garden

Abstract art is deceptively hard to create. It always looks so easy that a child could do it, yet it practice it's one of the hardest things.

Spring Garden Continue reading
Post 129 of 138

Ice Cream Cake With Starfish

Everyone has a default doodle or two that they make when they can't think of what to draw. Sometimes when I can't think of what to draw, my default is ice cream. I blame Two Scoops of Django for this.

Ice Cream Cake With Starfish Continue reading
Post 130 of 138

Waves From My Dreams

When I close my eyes and picture waves, this is what I imagine. The shells are intentionally oversized because they are giant shellfish.

Waves From My Dreams Continue reading
Post 133 of 138

Palace Dome, From the Presidio

The Presidio is a large area of parkland on the northwest side San Francisco. It used to be a military base, but now it's occupied by a mixture of residential and commercial buildings. I woke up early today to try painting from a coffee shop there, which turned out to be filled with employees of Intel, ILM, and other Presidio corporate tenants.

Palace Dome, From the Presidio Continue reading
Post 134 of 138

Golden Gate Bridge II

The other day, while I was painting the Golden Gate Bridge in the distance, I kept thinking about how I wanted to get closer to it and then do another painting.

Golden Gate Bridge II Continue reading
Post 135 of 138

Golden Gate Bridge I

The Golden Gate Bridge is one of those landmarks that's irresistible to watercolor painters, especially me. Even with all the other closer, brighter scenery around, the bridge and hills of in the far distance lured me to paint them.

Golden Gate Bridge I Continue reading
Post 136 of 138

The Boatyard

Last year, Danny and I spent almost a month in Split, Croatia. It was the end of the summer, so it was pretty quiet.

The Boatyard Continue reading
Post 138 of 138

Welcome!

Hi! This will be where I post my art: paintings, sculpture, mixed media, woodworking, etc. Enjoy!

Continue reading