I’ve written before about the swallowtail caterpillar that rose from the dead, whom I named “Lazarus“. First was the sad entry about accidentally letting a caterpillar drown: Day 13: Loss. Then a few days later I wrote about the discovery of the caterpillar after I had dumped its body into our compost bin: Day 17: Lazarus. The caterpillar grew until it was ready to pupate, and I posted images of it in its chrysalis: Day 20: Lazarus Update. That was exactly 3 months and one day ago.
Lazarus had a bright green chrysalis; they can range in color from green to dark brown. Yesterday I noticed that the color had visibly darkened, which is usually a sign that the adult butterfly is about to emerge.
Sure enough, this morning when I checked the enclosure this morning, there was a brand-new butterfly!
Sorry for the blurry image, but the enclosure is a nylon mesh that gives you visibility, but not a great photographic view. I waited a while for the new adult to dry out and get its wings ready, and then learned the truth: Lazarus is a girl!
She was in no hurry to leave, so she hung around for about 2 1/2 hours before finally taking flight. So I had a great opportunity to take pictures!
I’ve never gotten so involved with any individual caterpillar before this one, and I can’t begin to explain how happy I am to have been able to watch her fly off on her own after all she’s been through. It did seem that she was in no hurry to leave, so I figured she wouldn’t mind one final photo: a selfie of the two of us!
I’ve never been a serious baker, but in the past I have dabbled a bit with bread making. Mostly I made simple whole grain loaves that were meant to be consumed for daily meals. I came upon a recipe for challah, and remembered how much I liked that kind of bread when I had eaten it at friends’ homes as a kid. It turned out not to be very difficult to make, and I got good at the braiding. I was hosting a New Year’s Eve party to welcome in 1981, and made this as the centerpiece of the food spread:
But over the years I pretty much stopped baking, mostly due to time constraints. But this past spring the dual whammy of getting laid off at the beginning of the pandemic lockdown left me with lots of time on my hands.
I have always been fascinated by sourdough bread: using the natural yeast and bacteria in the air around us to not only introduce air into the dough, but to transform the nutrients locked up in the wheat kernel into a form that we humans can digest. In particular, the book Cooked by Michael Pollan (now also a Netflix series) really made me want to learn how to do this myself.
So I googled around to compare different techniques for making a sourdough starter, and settled on one that seemed the best (they’re all pretty much the same, though). Within a week I had a pretty healthy batch of starter, and made my first loaves from it. They tasted fine, but were very flat, and lacked that killer crust that is the hallmark of a good sourdough. I read various articles on different techniques, and what I seemed to be missing was the entire shaping process that builds the structure of the dough. Who knew that dough needed structure?
I watched a lot of videos, and liked this one the best. I’ve made many loaves since then, and they’ve always come out delicious! They look pretty good, too:
Besides the taste, I love to see the intricate structure of the bread – it’s amazing to think of the millions and millions of cells that went into generating the gas to raise the bread, and the intricate structure of the wheat to trap that gas. Just look at that detail!
I have taken lots of macro photos of these loaves, and created a gallery on my website called Sourdough Porn that is filled with shots like these.
So while baking sourdough bread during the lockdown is a bit of a cliché, it’s definitely a fun and delicious cliché!
There is one aspect of economics that everyone understands: the law of Supply and Demand. It’s pretty obvious: useful/desirable things will be valued more highly than stuff that isn’t as in demand, and scarce things will cause people to offer to pay more.
I’ve found something No one else is looking for I’ve found something That there’s no use for And what’s more I’m keeping it to myself
For this discussion let’s assume that the art in question is “desirable”, so that there is a certain level of demand for it. The determinant for price will therefore be how scarce it is.
There is a fundamental difference between a painting, in which the creative effort results in a single item, and a recording of a performance, which can be duplicated and replayed an infinite number of times. The artist can only sell their painting once, but can sell as many videos as people want.
This same issue comes up with media such as photography and print making: there really is no limit to the number of copies of a single art work that can be made. In the days of negatives, the act of making a positive print was itself part of the creative process, because the printer (usually the photographer) had to have a feel for how to balance overall exposure with local dodging and burning. The great photographer Edward Weston trained his son Cole to learn his precise printing techniques, so that Cole could continue to make prints that would be as close to the artist’s vision as possible. So while in theory an infinite number of prints could be made, there is a practical limit.
But digital photography throws all of that out the window. The artist can make whatever corrections or other changes they want to the digital file, which can then be reproduced without loss forever. So how does one determine a price for something like this?
I’ve recently begun to submit my work to several galleries, and have had some success – just yesterday I got notice that one of my photos was accepted for a show! But I’ve seen several Calls for Entry for exhibits that have a requirement that any submitted work be part of a limited edition. A Limited Edition is when the artist decides that there will only ever be a certain number of prints made, and each print is “numbered” so that they buyer knows that they are one of the few owners of that piece.
I call bullshit.
Art’s value is in the piece itself. If it moves you, makes you think, or just is stimulating to look at, it has value. The fact that only a few other people can enjoy that particular piece doesn’t change the experience; it just creates an artificial scarcity to prop up prices that otherwise can’t be justified.
Paintings are scarce, by their very nature. Digital photographs are not.
I’m not playing this game. Sure, this might keep me out of some galleries, but those are probably not compatible in spirit with me. With a calibrated monitor, I can create a digital file that can be printed exactly the same anywhere in the world. If you like my work and want a print, I will sell you a print. I won’t say “sorry, but I’ve sold all the prints I can make of that image. You’ll have to find one from some art dealer or collector”.
The digital transformation calls for new ways of thinking about art. The music business learned that lesson with the advent of the .mp3 file. The photographic business will need to grow to accommodate this new digital reality.
Recently an online discussion about film vs. digital photography got me thinking. I absolutely love digital photography, and would never consider going back to film. Sure, it’s really tough to match the richness of color of Kodachrome 64, or the detail and subtle gradation of 4×5 black and white film, but to me, those are not the most important things when creating art. Those considerations are more like a measure of craftmanship than critical elements for conveying an idea.
However, I am so grateful that I grew up in the age of film photography because of the discipline it instilled in me. Every time you pressed the shutter button, you were spending money. Period. Contrast that to today, where images cost nothing: take a bunch of bad shots, who cares? Click the little trash can icon, and they’re gone. Doesn’t cost a cent.
If you were a poor, struggling student, as I was at the time, buying film was a good chunk of what was left of your money after paying for rent, food, and other essentials. So if I saw something interesting to photograph, I didn’t fire away, taking several exposures from a few different angles in the hope that one would be what I needed. Instead, I composed the image in the viewfinder, looking at it from various angles, and through this process learned to recognize what was important for the final image. Most of the time I walked away without taking the shot, because on further reflection, it didn’t seem worth it.
What if I had had lots of money to spend? I believe that I would not have developed the visual discipline that I have today, as there would never have been a need to limit what I shot. Without that discipline, I don’t believe that I would have become as good a photographer. Even today, with all my digital equipment, I still shoot as though every exposure means something.
In general, scarcity forces one to become disciplined. For example, when you grow up in an environment where food is in short supply, you learn not to waste anything, and to only eat enough to keep going. Back in the early days of computing, when both disk storage and RAM were expensive, you coded in a way to ensure that your program would fit into memory, and would require as little space as possible when written to disk. That parsimonious approach resulted in the “640K Ought to be Enough for Anyone” quote that Bill Gates never said, but keeps getting repeated anyway.
There’s something to be said for learning how to get through tough times. It’s a delicate balance, though – too much scarcity can damage you physically and/or psychologically. My mom grew up as one of six kids in a family during the Great Depression, and it definitely left its mark on her. She wasn’t a full-blown hoarder, but she definitely had a hard time throwing things away – “you never know when you might need it!” was her refrain. And we were not allowed to be fussy about the food we were served at mealtimes: you had to eat every bit on your plate before you could leave the table. That experience has had an effect on me, as I really hate to throw food out. Maybe it’s my mom’s voice still echoing in my mind.
etcd is a database originally developed by CoreOS, and is most famously used as the database at the heart of Kubernetes. It is a distributed key-value store, which in itself is not all that remarkable. The thing about etcd that makes it so attractive is the ability to watch a key for changes.
Other key/value stores, such as Redis, have implemented a similar feature, and may work just as well for you. I’ve been using etcd for years, and it’s worked well for me, so I’ve never had a reason to try these other tools.
For most data stores, the only way to find if a particular value has changed is to poll. You issue a query for that value on a regular basis, and compare it to the last value returned to see if it has changed. This is terribly inefficient, especially with values that don’t change often. It’s also inexact with respect time, because your system’s reaction to a changed value depends on the interval between polls. Longer intervals, while less chatty, mean that more time will elapse between when the value changes, and when your application responds to that change.
Enter etcd. Instead of polling an etcd server for changes, you can watch for changes. This is essentially a pubsub system that requires almost no configuration to work. When a key is written to etcd, if there are any watchers for that key, a message is sent to them with the new value.
This is kind of dry in theory, so let’s look at a real-world application using this system: my photoviewer and photoserver applications. These applications allow me to display photographs on monitors that can be anywhere with an internet connection, and control each of those displays from a central server. They represent the ultimate convergence of my work as an artist and my love of programming.
Each display consists of a monitor (actually a TV, but all I want is an HDMI input) and a Raspberry Pi that runs the photoviewer application. Each display has a unique ID to identify it, and when a display starts up, it registers itself with the server. The server contains the settings for that display, such as the list of photos to display, and how often to change the displayed photo.
I have one such display in the kitchen of my home, and like to change the photos displayed on it from time to time. To do that, I go into my photoserver app and change the album for that display. Almost instantly the image on the display changes. How did that happen? The server is a virtual machine running in the Digital Ocean cloud, not local to the kitchen display.
The reason this works is that I’m also running an etcd server on another cloud instance. When I change any setting for a display, the photoserver app writes a new value for that display’s key. The key consists of the unique ID of the display plus the type of value being changed. For example, if I change the photos I want displayed for a display with the ID of 65febdde-3e8a-4c76-ab8f-d8a653e466c7, the server would write a value of a list of the names of those images to the key /551a441f-8aba-44b5-b70b-349af0be5b67:images.
That application uses the etcd3 library to watch my etcd server for changes to any key beginning with /<unique ID>. The watch() method is called with a callback method, and when a new key is written beginning with that display’s prefix, the value is sent to the callback.
The callback method sees that the full key ends with :images, so it passes the value (the list of image names) to the photo display method, which then retrieves the image and displays it. This happens in real time, without any polling of the server needed.
The original version of these apps used the traditional polling method, which seemed wasteful, considering that it was typically weeks between any changes being made. Switching to an etcd watch makes much more sense from a design perspective, and it greatly simplified the code.
Look for cases in your applications where a response is needed to a change in data. Using etcd as a mediator might be a good approach.