andrew catellier


Building AVG DAY

In order to make simulated multiple exposures I wrote some Python code to average several images. Here’s a little more about how I made the images.


I thought about how to build the program so that it most accurately simulated a multiple exposure created in a film camera. When making a double exposure, a photographer adjusts all available camera settings so that two exposures will result in an image that properly exposes the film. Say that for a given camera and scene the proper exposure time would be on fiftieth of a second. One way to make a double exposure would be to take one image with an exposure time of one twenty-fifth of a second, rewind the film one frame, and take another image with the same exposure time.

That’s one way to do it. But a photographer needn’t split the exposure time among images equally. Besides that, part of the fun of making multiple exposures is that one doesn’t necessarily know how it’s going to turn out. It could even be that the photographer has so much experience making multiple exposures that they know exactly how to adjust the camera to create a specific image.

With all that in mind I decided that any weighting applied to individual images is purely an artistic choice—this gave me some freedom about how to implement multiple exposures in code.

Script Mechanics

In order to specify which images should be made into a multiple exposure, I put the desired group of images in a folder on my computer’s filesystem. Then I had the script get a list of all the images in the folder. The images aren’t guaranteed to have the same dimensions and I didn’t want to hard-code output image dimensions, so the script loops through all the files in the folder and gets each file’s dimensions in pixels and exposure time. I made a function that, based on an input argument, finds either the smallest or largest dimension in the group of photos. Before processing, each photo is either cropped to a square with the smallest dimension or padded to a square with the largest dimension. This ensures there are no matrix dimension errors when it comes time to add everything together.

I used Python Imaging Library (PIL) to crop, pad, and do math on the images. When PIL loads an image, each pixel has a red, green and blue component that are stored as integers. I learned that the ImageMath object only operates on single channel data, so the image’s split() method is needed to store each color channel separately. It’s also necessary to convert each channel’s pixel data to floats before multiplying by a fraction.

In a loop, the script loads each image one-at-a-time, splits the current image into its three color channels, multiplies each channel by some fraction and then adds the result to three variables containing the red, green and blue channel for the new composite image. Finally, all three color channels are converted back to the integer domain, the channels are merged into one RGB image, and the image is written to disk.

Finishing Touches

I tried a couple different ways to combine the images including scaling each image by its actual exposure time and doing a naive average. I also thought about compensating for ISO but like, nah. I settled for the naive average this time around.

When processed as described above the resulting image is often very dark. The result is stark and stunning, but there are lots of interesting details muddied by the lack of dynamic range. I tried a few different things to bring out details and balance the image. When I generated the images for my avg day gallery I applied a simple histogram equalization just before the three color channels were combined into one image. This means that the equalization was performed in the integer domain and this seemed to really exaggerate the nuance in the composite images. Additionally, by definition, the histogram equalization algorithm spans the available dynamic range. The effect is interesting, but certainly not subtle.

Having finished the image processing code I needed to get all the photos published to my 2016 dailies Flickr set sorted into twelve folders. I wrote another script to query the Flickr API, download all the folders in the set and sort them by month they were taken. Then the downloading script called the image combination script one time for each of the twelve folders it had just created.

I had a ton of fun working on this project. If you’d like to take a look at the code it’s posted on GitHub. I’m looking forward to working on different ways to bring out all the interesting details—and replace that simple histogram equalization—a little further down the road.


I recently finished processing the last of the photos for the 2016 version of my ongoing “dailies” project.

Earlier this year I messed around with the idea of simulating multiple exposures by averaging JPEG files in the pixel domain. I know you can do this in photo processing programs, but what if you wanted to make like, a 40 or 50 image exposure? It’s definitely not impossible but I’m lazy so I wrote some Python to do the work for me. I compiled the result for each month in a gallery.

Here’s an average day in December 2016:

The sum of the exposure times for all “daily” photos in December is 2.37362459597 seconds. 2,678,401 seconds passed in December 2016. The images I chose to represent my December comprise 8.9 x 10-5 percent of all the time in the month.

It’s hard for me to process how time seems to compress once it’s passed. On top of that I can’t believe how hard it can be to make sense of what we do remember. I know it’s unrealistic to expect our brains to remember every single moment. Still, I can’t fathom just how much is forgotten.

Even so, when I go through all my dailies for 2016 I’m reminded of a year’s worth of wonderful memories. Photos as a memory aid, even if they’re maybe a millionth of the time that passed, have been a welcome source of joy.

Pete Souza

Pete Souza, the White House photographer for the past 8 years, published a personal selection of photos from this past year. The collection contains many wonderful and touching photographs. He’s a talented photographer and story teller.

Pete’s technical prowess lends his photos a sense of precision you don’t often see. His eye for composition engages the viewer while making them a fly on the wall. Many photographers must be jealous of his instinct for sniffing out interesting, decisive moments.

Pete’s photography early in the Obama administration is what inspired me to buy a DSLR in 2009. I took that camera everywhere hoping I’d be able to make photographs half as interesting as his.

Thank you, Mr. Souza for being a source of inspiration to me and for your diligent work—my life has been enriched because of it.


With Power

Comes responsibility. Walt Mossberg:

My fourth wish is for some sort of optical zoom that doesn’t require a heavy telescoping lens. The rumored dual-lens camera might provide this. Previous efforts at unobtrusive optical zooming by other phone makers haven’t been good, so Apple has a real opportunity here.

Apple has an opportunity here? Unless there’s some breakthrough in physics I don’t know about, nobody has an opportunity to make a good “optical zoom” in a small package (though you can get pretty creative with optics). I guess a two-camera phone could have two different focal lengths and that could be marketed as “optical zoom.” I have a feeling that’s not what Mossberg is expecting when he proposes that idea.

I can’t very well expect everybody to know everything. But is it too much to ask of a major media outlet like The Verge to run some of this stuff by their in-house experts before publishing?

What I really want is for people to understand that tradeoffs have to be made in product design, that those tradeoffs result in compromises and that not everything you desire is possible.

A superstar tech reviewer literally asking for the impossible is irresponsible at best.


Thoughts on Five Years of Daily Photos

It’s that time of year again—I’m pointing to the tumblr I use to post photos of my every day life. Dailies, I call them. I take a picture of what I see most days and then put it somewhere. So yeah, you can find them at the following confrontational complete sentence dot net: All of my dailies ever should be there unless I made a mistake (of course I did).

My first incarnation of dailies began nearly five years ago. In 2010 I followed some advice, fed off some quality inspiration and started taking a picture of myself every day. It was as difficult as it was vain. I found myself lugging a tripod around everywhere I went and remember feeling uncomfortable (it’s kind of a silly thing to do) in potentially awkward public situations. Giving myself daily, hard deadlines like this stressed me out a good deal but it wasn’t without rewards. That year I probably learned more about the mechanics of photography and composition than in any subsequent year. I even won second place in a photo contest with one of the selfies.

After I finished that project I gave myself a break and then started up again. This time around I relaxed the rules—basically just keep my eye open for things that look neat and try to get one photo per day and if I don’t no big deal but seriously try to get a good one every day.

I was using either my DSLR or my rangefinder to work on the project. I learned even more about composition, logged some serious hours with my Cinch and wore some paint off of that brass block of a seeing machine that I hold in high esteem. I even made 4x6” prints of my 2013 dailies and compiled them into a photo album. That was pretty neat.

I kept up with that incarnation pretty well until about last January. As you may know, workflows dealing with so-called RAW files are not without friction. I found myself falling behind and sometimes uploading photos a month after the fact. According to the rules there was nothing wrong with that, but the friction kept me from spending time on developing other ideas and ambitions—I really want to get into portraits and need to organize my photos into cohesive groups.

In light of all that I changed the rules again. In 2014 I’d do the whole thing on my phone. Not a novel concept, but the idea was that I could take a photo, edit it, upload it and be done in a short amount of time. In practice I ended up editing and uploading the dailies in batches but I did manage to begin work on grouping photos in a cohesive way.

So here we are in 2015. Over these five years my dailies blog has gained 418 followers (compared to 363 following my main tumblr account). I’ve posted about 1503 dailies which amounts to roughly 0.82 photos per day. However, I did take a six month break in 2011. That means that while I was actively trying to do dailies, I didn’t take a photo 0.86% of the time.

I often feel guilty for not getting a photo for the day. The way I framed my “rules,” not getting a photo implied that I didn’t see anything worth capturing or that I didn’t take time that day to enjoy the world around me. Actually crunching the numbers provides some perspective on that guilt: I didn’t live up to the rules < 1% of the time. Given all that’s happened for/to me in the past few years, I’ll take it.

I’ve tried and failed many times to synthesize what taking daily photos means to me. (In fact, I recently realized that jumping wholeheartedly into something without fully understanding why is something I tend to do.) I think at first it really was about learning how to use a camera and to start building up a body of work that I could be proud of. Over time (and as I’ve grown), however, my understanding of the purpose of this project has evolved.

Looking back at these dailies gives me a small taste of the state of my brain on that day in the past. It reminds me about the world as it existed, people that entered my life, people that I pushed away and friends that have always been there. I’ve found that going through old dailies can be an anxiety-inducing experience. But I’ve also found that the entire process helps me to deal with that anxiety in a way that’s healthy for me.

On the front page of my personal website the link that points to my dailies is labeled “i keep a diary.” Late last year a friend of mine saw the link and the dailies and confronted me: “No you don’t,” she said. Needless to say, that made me think. The text posted along with the dailies varies from tautologically descriptive to intentionally obtuse. There’s generally very little indication of how I’m actually feeling, what I’m actually thinking or what actually happened at the time of the photo. I can see how an outsider would find it to be a boring read.

Ignoring the most obvious response (a diary is meaningful to the person who writes it and not necessarily anybody else), that question, in a way, cemented my understanding of the purpose of the whole project.

I’m not on Facebook and I don’t use Twitter for actual status updates, but I want those close to me to be able to check up on me if they want to. I’m concerned about privacy—mine and that of those around me—so I want control over the details associated with each post. I need an outlet to say things I sometimes need to say and a way to remember all the time that’s ruthlessly sucked away from the present. I need a place to practice seeing and make mistakes with minimal consequences.

This project has been all of these things to my multimedia brain.

2014 was an uncomfortable year for me. One thing in particular overshadowed most of the year. I struggled to make sense of relationships and pondered if what lies at the end of the path is what I want it to be. But damn if there weren’t some downright pleasant times as well. There was a wildlife photobomb and there were endearing ocean moments. I rode my bike all over the place and took a couple selfies. I was very often in awe of nature (specifically the sky and clouds). I took my camera with me nearly everywhere and took pictures of things that have changed or disappeared since. I explored and did new things on my own and even talked to my representative about net neutrality.

Thankfully and perhaps most importantly, I woke up every day and kept takin’ those photos.

So if you’re interested, feel free to follow along. Even better, start your own dailies project and let’s notice the beautiful world around us together.

New Year, Blank Slate.

Well kind of. There’s this infrastructure but it’s not immediately helpful. It’s more like an empty template.

The arrangement of the infrastructure appears to be random; seemingly placed without thought. Of course, that’s really not the case. This piece is here because the available HVAC capacity is most efficiently utilized when distributed in this spot and that piece must go there because it services the room above. That other piece—well, it was supposed to be over there but we made a mistake.

The infrastructure, as we see it now, is the way it is because it is the sum of some specific set of events progressing towards some goal that can only be met if specific constraints are met. That goal, its constraints and the formative events are never directly communicated to onlookers.

Expectations, traditions and preconceptions are projected onto the template with stunning fidelity yet none of them quite match what the template is or what it will be. The fact is, these expectations come from a place of external (from the perspective of the template) desire. Traditions come from a time when the rules were only partially defined and mostly unknown. Preconceptions come from a pattern recognition algorithm trained using only patterns exhibited before those external desires even existed and before we solidified and discovered the rules we currently know.

But, just like the unexplained state of the infrastructure, failure to match these projections inevitably seems to draw criticism. Onlookers won’t recognize the template for what it is until it finally becomes a finished product, if or when that happens.

Seeing yourself in all of this from a third-person perspective is jarring and uncomfortable. Criticism from onlookers isn’t particularly useful. The projections don’t cede any comfort because you don’t identify with them—they’re not what you are or want to be.

It’s not really clear how this additional input should influence progress towards achieving a goal. Processing these external opinions can call into question the tradeoffs that resulted in this empty template, thus endangering forward movement.

There’s a fine line between self-acceptance and stalemate. There’s also a fine line between working towards achieving goals and not being overwhelmed by the opportunity costs of participating in society. The intersection of these lines is a locale at the apex of Maslow’s hierarchy that few even have the opportunity to find.

Perhaps in search of this intersection you’ve found what looks to be a good compromise. But then you take stock of the landscape revealed by your new vantage point and realize suddenly that the only thing you’ve got to show for your 31 years on this planet is a wash basin and only a wash basin, in a not particularly useful or aesthetic location. If not heart breaking, this realization certainly induces anxiety.

Explaining the context of the infrastructure and its slapdash state becomes exhausting but leaving details to the imagination of those around you is alienating. The feeling that you need to build up so much background before you can talk or interact with someone on a meaningful level—even family or someone who you’ve known forever—is crippling. It’s a positive feedback loop that shuts you off from the world.

Perhaps more frustrating is the fact that the mental model that many people use as a representation of you is a finished product. Along with this representation is a set of expectations that can be completely unfair and unrealistic. Knowing that there are those who are judging you based on the haphazard state of your infrastructure can decimate self-confidence.

The extent to which long-term investments are undervalued in our society is a crying shame. It is of course very important see projects through to completion and to carefully weigh costs and benefits. Still, we need to retrain ourselves to be much less averse to the long slog.

So if you’re out there in the world looking at people looking at the state of their infrastructure, see what you can do to make sure that the version of the ugly duckling unfolding before your eyes resolves with the happy ending. Stop dismissing your friend who’s writing a novel. Ask the other friend about the completion status of that project, but don’t be judgmental about it. Don’t assume that the ultimate goal of that girl’s hobby is to make a business of it. If you’re asking questions about some ethereal desire, “I don’t really know,” is a completely acceptable answer.

If you’re out there in the world feeling bad while looking at the state of your infrastructure, try and shake it off but do whatever it takes to not get stuck. Take a snapshot at precise intervals and devote time to looking at the snapshots. It’s pretty amazing how progress seems to sneak in right before your eyes.

Hello 2015.

You dapper rascal you.

Here’s to the new narrative: getting better.


Thoughts on Perceived Scarcity

This scarcity mindset can also be debilitating. It shortens a person’s horizons and narrows his perspective, creating a dangerous tunnel vision. Anxiety also saps brainpower and willpower, reducing mental “bandwidth”, as the authors call it.


(Clearing out the linkblog backlog shamalama bing bang.)


Crank Up the Internet Outrage Machine

The FCC has recently changed its position on net neutrality and frankly it’s a bad deal. It’s time to contact your representatives and senators. I did.

Despite the fact that the current FCC chairman was formerly a lobbyist for the industry he is now supposed to regulate, the arguments concerning this topic are largely based on court decisions resulting from lawsuits filed against cable TV companies.1

Cable companies secure rights to broadcast content to all their users from the producers of the content. These rights are a significant expense. Additionally, the cable companies were the only party delivering content to their customers. Under these conditions, the court orders cited make sense.

The internet, however, is quite a different beast. Content can and does come from anybody, from your neighbor to Netflix. An ISP’s right to distribute content (via IP or in traditional cable TV fashion) should in no way influence how it delivers other content requested by customers. Your neighbor has the right to send any or all Caturday pictures to whomever he or she wishes. Netflix has already secured rights to distribute content to its customers. If you request either of them, why should an ISP stand in the way?

I could go on and on. Instead, I’ll point to three ways you can protest the proposed rules:

What are you waiting for! This is the internet! Kittens are at stake!

  1. See Section I, page 8.

Mobile Device Pixel Density as It Relates to Video Quality

Joshua Ho writes for AnandTech about when an increase in mobile device pixel density provides no further benefits for its user. Considering some of the tradeoffs inherent in a system comprised of the human visual system and a mobile device, he concludes that screens with a resolution of around 90-100 pixels per degree are a good compromise for typical, RGB-pattern LCD screens.

Ho arrives at his conclusion through a discussion of visual acuity studies. I don’t disagree with him, at least when talking about text and images consisting of simple geometry. More complex static images and videos are different animals, of course.

The human visual system is extremely complex and delving into its complexities are well outside the scope of his (and this) article. That said, I just happen to know about research where a panel of viewers subjectively rated video quality on many different devices, including high and low DPI devices. One of the findings was that viewers judged video quality on both high and low DPI devices (each with the exact same screen size—an iPhone 4 and an iPod Touch) to be statistically similar.

Put differently, a theoretical video service provider could send a 480x320 pixel video to a device with a 960x640 pixel screen and the theoretical viewer would be just as happy as if the service provider had sent a 960x640 pixel video.

In terms of this discussion, high DPI mobile devices passed the point of diminishing returns where video is concerned long ago.