Featured
Fri, Mar 13, 2026
This is an early release. Staticware does something very satisfyingly today: it serves static files with content-hashed URLs for cache busting. That means when you edit your CSS then redeploy and restart your server, visitors get the latest CSS without forcing a refresh. More will come.
Continue reading →
Post 2 of 148
Tue, Mar 10, 2026
Lately I've been catching up on open source. This is the backstory behind the Cookiecutter release cascade. One quick release turned into four all-consuming releases, a licensing dispute, chardet removal, a new decision tree classifier in binaryornot, and my new interest in becoming an expert at designing classifiers.
Continue reading →
Post 3 of 148
Mon, Mar 9, 2026
BinaryOrNot identifies binary files three ways: by extension, by file signature, and by content analysis. Pass it any file path and it tells you binary or text, accurately, across PNGs, PDFs, executables, archives, fonts, CJK-encoded text, and hundreds of other formats.
Continue reading →
Post 4 of 148
Sat, Mar 7, 2026
If you've ever had BinaryOrNot misidentify a UTF-16 file, choke on a CJK-encoded document, or crash because chardet changed its API, this release is for you.
Continue reading →
Post 5 of 148
Wed, Mar 4, 2026
You know that thing where you release an album, it's on the shelves, people are buying it, and then someone points out the spine says it's your previous album? That's what happened with Cookiecutter 2.7.0. We put out the long-awaited release with 27 improvements and 17 contributors, and cookiecutter -V proudly announced: **2.6.0**.
Continue reading →
Post 6 of 148
Tue, Mar 3, 2026
Cookiecutter 2.7.0 is tested on Python 3.10 through 3.14, ships with a security policy documenting the trust model for template hook scripts, and publishes to PyPI with cryptographic provenance so you can verify every release. Seventeen contributors from the community helped build it.
Continue reading →
Post 7 of 148
Thu, Feb 19, 2026
Air Web Framework exists not just because we created it, but because of the support we got soft-launching it at Python Philippines and running its first sprint at PyCon Davao. Now, Air is a PythonAsia 2026 community partner.
Continue reading →
Post 8 of 148
Wed, Feb 18, 2026
If you maintain a Cookiecutter template that generates GitHub Actions workflows, you have a quiet problem: Dependabot keeps your outer repo's action SHAs current, but it completely ignores the template's workflows. The generated projects ship with whatever versions you happened to pin last.
Continue reading →
Post 9 of 148
Tue, Feb 17, 2026
I've put out the biggest release of cookiecutter-pypackage since the modern rewrite. Generated projects now ship with a documentation site, type checking, cross-version coverage enforcement, and security-hardened CI, all configured and working out of the box.
Continue reading →
Post 10 of 148
Wed, Feb 11, 2026
Last month Danny had a bad head injury. Sometimes he seems totally fine, other times he's not.
Continue reading →
Post 11 of 148
Tue, Dec 16, 2025
We recently reviewed a pull request from contributor Martin Saizar that refactored our Python tests. The goal was to enable the PyTest (PT) linter rule in Ruff, our code formatter and linter.
Continue reading →
Post 12 of 148
Wed, Nov 26, 2025
On a recent flight from Japan to the Philippines, Pydanny and I started coding a new project. The result is **AirDragon**, a layout and component library for the Air web framework.
Continue reading →
Post 13 of 148
Sun, Oct 26, 2025
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 14 of 148
Sat, Oct 25, 2025
Slides from my keynote at PyCon Davao 2025, the first regional Filipino conference for Python programming enthusiasts.
Continue reading →
Post 15 of 148
Mon, Oct 6, 2025
Air is a pioneering AI-first Python web framework that represents the next evolution in web frameworks to be deeply AI-native.
Continue reading →
Post 16 of 148
Thu, Oct 2, 2025
If you need to run Python applications from PyPI without installing them permanently, uvx provides a convenient way to execute Python tools without having to manage dependencies manually.
Continue reading →
Post 17 of 148
Sun, Jul 27, 2025
Here is a sample settings.json file for the Gemini CLI, configured with the Git and GitHub MCP servers.
Continue reading →
Post 18 of 148
Fri, May 9, 2025
How to retrieve the CSS classes for a FastHTML FastTag instance.
Continue reading →
Post 19 of 148
Tue, May 6, 2025
How to get JSON into a local SQLite database fast.
Continue reading →
Post 20 of 148
Mon, May 5, 2025
How to find and kill an old process running on a particular port.
Continue reading →
Post 21 of 148
Tue, Apr 15, 2025
Continuing the Sentence Transformers exploration, I use a cross-encoder model to rank my notebooks by similarity to search queries.
Continue reading →
Post 22 of 148
Mon, Apr 14, 2025
Here I use sentence transformers and a bi-encoder model to encode my notebooks as embeddings and implement semantic search.
Continue reading →
Post 23 of 148
Tue, Apr 8, 2025
When working in notebooks, you'll occasionally need to access the notebook's own filename. Here's code to do it, which I've verified works in Jupyter Notebook Classic.
Continue reading →
Post 24 of 148
Thu, Mar 20, 2025
How to record screen capture videos on Mac OS, using the screencapture command or the Cmd+Shift+5 shortcut.
Continue reading →
Post 25 of 148
Fri, Mar 14, 2025
Happy Pi Day. Here's pi from the stdlib math module and from Numpy.
Continue reading →
Post 26 of 148
Thu, Feb 20, 2025
How to remove stale .pyc files and __pycache__ directories, using uvx + pyclean.
Continue reading →
Post 27 of 148
Sat, Feb 15, 2025
Here I create a local titlecase model based on Mistral, using a local Ollama modelfile and a solid prompt.
Continue reading →
Post 28 of 148
Fri, Feb 14, 2025
Title-casing text is one of those hard problems no one ever gets right, yet no one considers worthy enough to solve with AI. Here I experiment to see if I can improve upon the latest best solutions with a local Ollama modelfile and a solid prompt.
Continue reading →
Post 29 of 148
Thu, Feb 13, 2025
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 30 of 148
Wed, Feb 12, 2025
I fell off the wagon with creating a new notebook every day, but it's not too late to get back on. Today's post is for me to figure out how to make this more sustainable.
Continue reading →
Post 31 of 148
Sun, Feb 9, 2025
Now that I have a lot of notebooks, it would be nice to have a more compact index page. I want to see more of my posts from mobile all at once. I'm going to prototype it in Tailwind.
Continue reading →
Post 32 of 148
Sat, Feb 8, 2025
Here I play with using Pynput as a system level keylogger, from within my Jupyter notebook version of this.
Continue reading →
Post 33 of 148
Fri, Feb 7, 2025
I add a mini-nav to the vanilla non-MonsterUI version of notebook detail pages (used for in-depth CSS experiments). I also now export main.py from within this notebook.
Continue reading →
Post 34 of 148
Thu, Feb 6, 2025
I make a lightweight vanilla InlineNav FT with FastHTML, using the HTML nav element and as minimal styling as I can get away with.
Continue reading →
Post 35 of 148
Wed, Feb 5, 2025
Fastcore's call_parse decorator turns Python functions into CLI tools quickly. It's nowhere near as fancy as Typer or Click, but it's super quick to use.
Continue reading →
Post 36 of 148
Tue, Feb 4, 2025
Here I turn this Jupyter notebook into a Python script, using nbdev's nb_export function from the notebook itself.
Continue reading →
Post 37 of 148
Mon, Feb 3, 2025
A FastHTML app that converts times to different timezones, and to Discord timestamps.
Continue reading →
Post 38 of 148
Sun, Feb 2, 2025
I use Gemini's text-embedding-004 model to generate embeddings for sentences. Then I define a cosine similarity function and see what it returns for a few related and unrelated sentences.
Continue reading →
Post 39 of 148
Sat, Feb 1, 2025
I'm starting to accumulate many UntitledX.ipynb files. Here I use the Gemini 1.5 Flash language model from Google to rename each one based on its contents.
Continue reading →
Post 40 of 148
Fri, Jan 31, 2025
This is a proof-of-concept of moving MonsterUI's HTML class injection from lxml post-processing to a custom Mistletoe renderer. Looks like we can get 3x faster Markdown rendering using this simple MonsterHTMLRenderer vs. parsing the rendered HTML to inject the classes.
Continue reading →
Post 41 of 148
Thu, Jan 30, 2025
Just little tweaks to make sure the site still works with all the new MonsterUI stuff.
Continue reading →
Post 42 of 148
Wed, Jan 29, 2025
Here I update audrey.feldroy.com with some of the latest MonsterUI text presets.
Continue reading →
Post 43 of 148
Tue, Jan 28, 2025
I define various useful datetime utilities with the help of fastcore's L and map, and functools' partial. Then I extend that to generate Discord timestamps, which localize Unix timestamps to the reader's timezone.
Continue reading →
Post 44 of 148
Mon, Jan 27, 2025
Here I improve audrey.feldroy.com in small, subtle ways.
Continue reading →
Post 45 of 148
Sun, Jan 26, 2025
Using Pygments, CSS and Ruff to improve how code blocks are displayed on my daily notebook blog.
Continue reading →
Post 46 of 148
Sat, Jan 25, 2025
Here I clean up the code, back-integrate the manual fixes I've since made, and reduce the steps it takes to export.
Continue reading →
Post 47 of 148
Fri, Jan 24, 2025
Here I use the Python Imaging Library to create and display an image in-notebook, so that it's rendered as part of the blog post on audrey.feldroy.com.
Continue reading →
Post 48 of 148
Thu, Jan 23, 2025
My first MonsterUI notebook wasn't rendering correctly. I started to debug it in this notebook, but ended up just using this as a test notebook for the next one.
Continue reading →
Post 49 of 148
Thu, Jan 23, 2025
Here in this Jupyter notebook I rewrite audrey.feldroy.com and use nb_export to export it as my new main.py for arg-blog-fasthtml.
Continue reading →
Post 50 of 148
Wed, Jan 22, 2025
Iterating through the ButtonT enum to show all MonsterUI button types visually.
Continue reading →
Post 51 of 148
Wed, Jan 22, 2025
Can we customize a FastHTML app to set different headers when rendering notebooks with nb2fasthtml, based on what the notebook actually needs for its headers?
Continue reading →
Post 52 of 148
Tue, Jan 21, 2025
Exploring how to make basic SVG animations work with FastHTML.
Continue reading →
Post 53 of 148
Mon, Jan 20, 2025
How to make a website check the user's preferred mode and set the background appropriately.
Continue reading →
Post 54 of 148
Sun, Jan 19, 2025
Working with Anki flashcard decks in Python, with genanki to work with the decks and fastcore for ease of use.
Continue reading →
Post 55 of 148
Sat, Jan 18, 2025
Demo of adding sounds to a FastHTML app with Tone.js. Sounds make web apps come alive and feel interactive.
Continue reading →
Post 56 of 148
Fri, Jan 17, 2025
FastHTML MonsterUI example app that uses Tone.js to make different alarm clock sounds.
Continue reading →
Post 57 of 148
Thu, Jan 16, 2025
A mathematical breakdown of cosine similarity, with copy-pastable LaTeX.
Continue reading →
Post 58 of 148
Tue, Jan 14, 2025
SQLite full text search setup via APSW for all the notebooks on this website, inspired by the APSW FTS5 Tour).
Continue reading →
Post 59 of 148
Mon, Jan 13, 2025
The SQLite FTS5 (full-text search) extension includes the built-in tokenizers unicode61, ascii, porter, and trigram, implemented in fts5_tokenize.c. APSW provides a Python API to use those.
Continue reading →
Post 60 of 148
Sun, Jan 12, 2025
I've made good progress on creating a notebook every day. Now I have so many notebooks that my index page needs an overhaul, including:
Continue reading →
Post 61 of 148
Sat, Jan 11, 2025
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 62 of 148
Fri, Jan 10, 2025
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 63 of 148
Thu, Jan 9, 2025
I'm starting with a snippet of code from the bottom of execnb's 01_nbio.ipynb, breaking it down into pieces and seeing each part.
Continue reading →
Post 64 of 148
Wed, Jan 8, 2025
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 65 of 148
Tue, Jan 7, 2025
I just changed my Bluesky to @audrey.feldroy.com. To verify my domain ownership, I added this route handler to my FastHTML website:
Continue reading →
Post 66 of 148
Mon, Jan 6, 2025
FastHTML provides default headers for every page, which are also fully customizable. This notebook explores how this works.
Continue reading →
Post 67 of 148
Sun, Jan 5, 2025
In my terminal (Ghostty) when I run shell scripts that update multiple repos, I get asked my SSH key passphrase over and over. It gets annoying with 20+ repos.
Continue reading →
Post 68 of 148
Sat, Jan 4, 2025
I prompted Claude 3.5 Sonnet to make an HTML and vanilla JS birthday app for my daughter who just turned six. Then I figured out how to show the artifact inline in a Jupyter notebook.
Continue reading →
Post 69 of 148
Fri, Jan 3, 2025
The zip docs say that zip(*iterables, strict=False):
Continue reading →
Post 70 of 148
Thu, Jan 2, 2025
Adding a settings bar with a volume slider and waveform selector to the piano.
Continue reading →
Post 71 of 148
Thu, Jan 2, 2025
In Part 1 we defined piano keys. Now let's improve them with hover effects, mouse events, and JavaScript audio.
Continue reading →
Post 72 of 148
Wed, Jan 1, 2025
My adaptation of https://developer.mozilla.org/en-US/play to FastHTML, with improvements.
Continue reading →
Post 73 of 148
Wed, Jan 1, 2025
## Simple Command Substitution
Continue reading →
Post 74 of 148
Tue, Dec 31, 2024
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 75 of 148
Mon, Dec 30, 2024
This notebook uses images in every possible way.
Continue reading →
Post 76 of 148
Sun, Dec 29, 2024
## Variables
Continue reading →
Post 77 of 148
Sat, Dec 28, 2024
When using pico=False and no CSS framework, a FastHTML page doesn't look great. Can we use minimal typography to make it look decent, without dependencies?
Continue reading →
Post 78 of 148
Fri, Dec 27, 2024
I have Jupyter notebooks in nbs/. I want to turn them into cards from the filenames, without having to read the file contents.
Continue reading →
Post 79 of 148
Fri, Dec 27, 2024
This notebook shows how to:
Continue reading →
Post 80 of 148
Thu, Dec 26, 2024
## Understand the Problem
Continue reading →
Post 81 of 148
Wed, Dec 25, 2024
## Understand the Problem
Continue reading →
Post 82 of 148
Tue, Dec 24, 2024
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 83 of 148
Tue, Dec 24, 2024
Having fun with fastcore's L (list) class and holiday lyrics.
Continue reading →
Post 84 of 148
Mon, Dec 23, 2024
Exploring how execnb reads notebooks and nb2fasthtml renders them, to understand the tools I'm building on.
Continue reading →
Post 85 of 148
Mon, Dec 23, 2024
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 86 of 148
Mon, Aug 5, 2024
I'm here to learn the new web framework FastHTML by Jeremy Howard, and I'm using Claudette to help me explore it.
Continue reading →
Post 87 of 148
Sun, Aug 4, 2024
Studying https://claudette.answer.ai/
Continue reading →
Post 88 of 148
Mon, Jul 29, 2024
Studying https://docs.fastht.ml/tutorials/by_example.html more
Continue reading →
Post 89 of 148
Mon, Jul 29, 2024
My study of the @delegates decorator and GetAttr from fastcore.
Continue reading →
Post 90 of 148
Mon, Jul 29, 2024
My early attempts to figure out auth in FastHTML. Things have likely changed a lot since.
Continue reading →
Post 91 of 148
Tue, Jul 16, 2024
My early exploration of the xtend notebook in FastHTML.
Continue reading →
Post 92 of 148
Mon, Jul 15, 2024
Reading through fastcore's xml.py source to figure out how FastHTML components print and render, and what to_xml and highlight do.
Continue reading →
Post 93 of 148
Sun, Jul 14, 2024
Caution: I’ve learned better patterns since I wrote this. Leaving this here for posterity.
Continue reading →
Post 94 of 148
Tue, Dec 19, 2023
A painting of a squishy, colorful world.
Continue reading →
Post 95 of 148
Mon, Dec 18, 2023
I made this Kotlin cheatsheet today:
Continue reading →
Post 96 of 148
Fri, Dec 15, 2023
I've been using Android phones for several years now, and it has always been on my bucket list to write myself some productivity apps. This morning I thought I'd get reacquainted with Android app development.
Continue reading →
Post 97 of 148
Sat, Jul 29, 2023
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 98 of 148
Fri, Jun 16, 2023
In data science, EDA is an exploratory analysis of a data set. The goal is to better understand the stories that the data tells, and to uncover interesting ideas that may turn into new hypotheses to explore.
Continue reading →
Post 99 of 148
Sun, Jun 21, 2020
I 3D-printed these earrings using a cool little hack of setting top and bottom wall thickness to 0.
Continue reading →
Post 100 of 148
Fri, Jan 31, 2020
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.
Continue reading →
Post 101 of 148
Fri, Jan 10, 2020
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.
Continue reading →
Post 102 of 148
Mon, Jan 6, 2020
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.
Continue reading →
Post 103 of 148
Sun, Jan 5, 2020
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.
Continue reading →
Post 104 of 148
Sat, Jan 4, 2020
My husband Daniel designed this lovely book cover. The veggies are my illustrations from the book interior.
Continue reading →
Post 105 of 148
Sat, Jan 4, 2020
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 106 of 148
Fri, Jan 3, 2020
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.
Continue reading →
Post 107 of 148
Thu, Jan 2, 2020
Our logo for Roy Greenfeld, Inc. has been evolving. This is the latest iteration:
Continue reading →
Post 108 of 148
Wed, Nov 20, 2019
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.
Continue reading →
Post 109 of 148
Sat, Nov 9, 2019
Today I experimented with making timelapse video and iMovie effects.
Continue reading →
Post 110 of 148
Wed, Sep 18, 2019
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.
Continue reading →
Post 111 of 148
Wed, Sep 18, 2019
SciPy has tools for creating Voronoi tessellations. Besides the obvious data science applications, you can use them to make pretty art like this:
Continue reading →
Post 112 of 148
Thu, Apr 28, 2016
In Django terms, a QuerySet is an iterable of database records. What's nice about them is that they are evaluated only when you're ready for the results.
Continue reading →
Post 113 of 148
Mon, Nov 9, 2015
A common thing to do in Python is to go through a directory tree, opening each file and doing something with the file's text. Here's what to do when you hit a UnicodeDecodeError from accidentally opening a binary file.
Continue reading →
Post 114 of 148
Tue, Nov 3, 2015
Daniel and I just returned from a trip to San Antonio, Texas, where we taught one of our intensive Django training workshops at Lackland Air Force Base.
Continue reading →
Post 115 of 148
Tue, May 26, 2015
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 116 of 148
Tue, May 12, 2015
The fourth piece in my series of watercolors inspired by Tolkien's illustrations.
Continue reading →
Post 117 of 148
Mon, May 11, 2015
A simple doodle of circle flowers bending in the wind.
Continue reading →
Post 118 of 148
Sun, May 10, 2015
A third piece inspired by Tolkien's artwork, depicting a plateau with a small house overlooking a gigantic waterfall.
Continue reading →
Post 119 of 148
Sat, May 9, 2015
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.
Continue reading →
Post 120 of 148
Fri, May 8, 2015
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.
Continue reading →
Post 121 of 148
Thu, May 7, 2015
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.
Continue reading →
Post 122 of 148
Wed, May 6, 2015
For Day 18 of 100 days of watercolor.
Continue reading →
Post 123 of 148
Wed, May 6, 2015
For day 19 of 100 days of watercolor.
Continue reading →
Post 124 of 148
Tue, May 5, 2015
I've been doing hand lettering for a long time as a side hobby. You might have seen some of my lettering before, including the famous Pyladies script logo.
Continue reading →
Post 125 of 148
Mon, May 4, 2015
Here's an earlier snapshot of a work-in-progress version of the Two Scoops of Django 1.8 book cover. This one was a watercolor painting.
Continue reading →
Post 126 of 148
Sun, May 3, 2015
Here's the cover illustration for our latest book, Two Scoops of Django: Best Practices for Django 1.8. It depicts vines growing ice cream cones.
Continue reading →
Post 127 of 148
Thu, Apr 30, 2015
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.
Continue reading →
Post 128 of 148
Wed, Apr 29, 2015
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.
Continue reading →
Post 129 of 148
Sun, Apr 19, 2015
For Day 12 of my "100 Days of Watercolor" project.
Continue reading →
Post 130 of 148
Sat, Apr 18, 2015
Book cover for a story about a giant flying dog who drools all over a quiet suburb, causing chaos and evacuations.
Continue reading →
Post 131 of 148
Fri, Apr 17, 2015
Another fictional book cover. This one is a parody of a real book that you may have heard of :)
Continue reading →
Post 132 of 148
Thu, Apr 16, 2015
A book cover for a story is about a garden where all the plants have feelings.
Continue reading →
Post 133 of 148
Tue, Apr 14, 2015
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.
Continue reading →
Post 134 of 148
Mon, Apr 13, 2015
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.
Continue reading →
Post 135 of 148
Sun, Apr 12, 2015
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.
Continue reading →
Post 136 of 148
Fri, Apr 10, 2015
Awhile back, I wrote a humorous story about Danielle and Andrew, two cheese connoisseurs who set out on a pilgrimage in search of the world's greatest cheese.
Continue reading →
Post 137 of 148
Fri, Apr 10, 2015
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.
Continue reading →
Post 138 of 148
Thu, Apr 9, 2015
Lately I've been working on the inside design for the paperback version of Into the Brambles.
Continue reading →
Post 139 of 148
Wed, Apr 8, 2015
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.
Continue reading →
Post 140 of 148
Tue, Apr 7, 2015
When I close my eyes and picture waves, this is what I imagine. The shells are intentionally oversized because they are giant shellfish.
Continue reading →
Post 141 of 148
Mon, Apr 6, 2015
I tried to make the light appear foggy and iridescent, with sea sprays glistening in the light.
Continue reading →
Post 142 of 148
Sat, Apr 4, 2015
I did the cover design for Into the Brambles, the first book of Daniel's forthcoming epic fantasy series The Brambles.
Continue reading →
Post 143 of 148
Thu, Feb 12, 2015
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.
Continue reading →
Post 144 of 148
Wed, Feb 11, 2015
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.
Continue reading →
Post 145 of 148
Mon, Feb 9, 2015
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.
Continue reading →
Post 146 of 148
Fri, Feb 6, 2015
Last year, Danny and I spent almost a month in Split, Croatia. It was the end of the summer, so it was pretty quiet.
Continue reading →
Post 147 of 148
Tue, Feb 3, 2015
This bird was half of a pair of two, an engagement gift from Aunt Lois in October of 2011.
Continue reading →
Post 148 of 148
Mon, Feb 2, 2015
Hi! This will be where I post my art: paintings, sculpture, mixed media, woodworking, etc. Enjoy!
Continue reading →