Tuesday, September 5, 2017

Welcome, Cora

Our daughter Cora was born on Thursday, the best day of my entire life.


That's all for now.

Monday, March 20, 2017

Maui, Photography, Biology, Poetry

The Aristocrats
Simiao and I are on vacation in Maui, and I wanted to share a photo that has quickly become one of my favorite photos that I've ever taken.

I'm not a very good photographer.  My equipment is nothing special, I don't have the most artistic eye, and I lack the means to go exotic places that few have ever seen.  I always think it's odd that when people go on vacation, you see certain scenic areas that people swarm on and take photos of.  This makes sense if there are unusual conditions, if the photographer is using advanced equipment, or if the photographer is taking photos of friends and family.  In many cases, though, people are simply holding up an iPhone and snapping a picture.  In this case, why wouldn't one just Google an image of the location by a professional photographer or buy a postcard?  Better photographers with better equipment have probably waited out better conditions for the perfect photo of the canonical scenic vistas, so if you're not willing to invest that kind of time and money in a postcard-perfect shot, why bother?  This is certainly the case for the lovely scenery at the resorts at Wailea where we're staying, and this is why I tend to think small when I have my camera out on vacation.  I like to look for a subject that is uniquely mine rather than something that's been photographed a million times before by better artists than myself.  With that in mind, today when we went for a stroll I brought my macro lens.  It turned out that I photographed more than I bargained for.

The invader and the thief

On our walk, I spotted a member of one of my favorite genus of spiders, Argiope.  These spiders have a proclivity to draw unusual patterns called stabilimenta on their webs which are believed to play a role in drawing prey to their webs and perhaps in confusing parasitic wasps that might like to feed the spider to their young. The breeze was strong and the web was bouncing, but using a flash, a slightly higher F-stop and some patience I managed to get a photo where the web looked crisp and my subject was in focus.

When I researched the species of spider later, I learned that this girl is an argiope appensa, an introduced species in Hawaii.  One thing I noticed only after looking at the photos at home, though, was the tiny fly sitting on the spider's meal.  In this particular photo, the fly was kind enough to center itself on the cocooned meal of the spider, which adds to the pleasing composition of my photo.

I had one final question, though:  what business did this tiny fly have on the spider's meal?  Was it a parasite on the spider, a kleptoparasite on the meal, or just a coincidence?  After some research, I identified the fly as milichiella lacteipennis.  Indeed, milichella lacteipennis is a kleptoparasite, and in the picture above it is drinking the spider's meal right under its nose!

I found this scenario poetic after listening to This American Life #611, Act One about the Robinson family's administration of native Hawaiians on Niihau.  The island is entirely owned by the Robinsons who administrate the native Hawaiians on the island in a largely autocratic way since the natives live there at their luxury.  Their manner of rule as described in This American Life felt immoral at best and exploitative at worst, and I can only hope that someday the native Hawaiian residents are able to take back what is theirs from the invaders.

Saturday, December 31, 2016

2016 Vacation Roundup


With 2016 being almost over, I thought it would be a good idea to finally get around to posting pictures from our last three vacations to Scotland, Yosemite, and Clearwater which I hadn't bothered to do up until now.  I've been really busy with a few secret projects which I can reveal soon.

Until then, check out the highlight reel from our most recent 2016 vacations, and happy new year!





Theo came with us to Scotland!  On our first day, we found these awesome steps in Edinburgh.
A sheep dog demonstration at Leault Working Sheepdogs.

We stayed at a little mill house outside Elgin in Scotland, and this graceful old stone bridge sat just outside our back yard.
Pot stills at Glen Grant distillery.
The view from one of the murder-holes at Balvenie Castle.


Having fun with my neutral-density filter at Lower Yosemite Falls.


A great sundew at Loch Cluanie, Scotland.  Unfortunately, I didn't own a macro lens yet!  I would have loved to get some close-ups of the fascinating detail of the leaves.
Simiao and Theo stand by a stream at Loch Cluanie.
The Fairy Pools at the Isle of Skye.
A little lake near Mealt Falls on the Isle of Skye.  The ocean was pretty, but I think that this brooding sky mirrored in the placid lake was more interesting.



Liberty cap and a ponderously blue, cloudless sky at Yosemite.  The water you see in the picture is just seconds from going over Nevada Falls.
A cricket we found at the Merced Grove of giant sequoias.
A giant sequoia, and a giant sequoia pine cone.
Simiao wouldn't crawl through the hollow interior of this fallen giant sequoia for me, so I just got a picture of her at the gnarled roots.
A Steller's Jay at Yosemite National Park.  We saw one swoop down from the trees, peck a mouse on the trail to death, then fly off with the mouse for dinner!
Worm shells that we found at the extreme North tip of Three Rooker Island.
I found a four leaf clover behind Glen Grant distillery.  Can you?
The ruins of Elgin Cathedral were in some ways more interesting than the intact St. Giles cathedral in Edinburgh.  The cathedral was apparently larger, the carvings and inscriptions more interesting, and the imagination can transform it into a much grander place.
A rock climbing break on our way up to Nevada Falls in Yosemite National Park.

A bold, thieving squirrel licks its fingers after a pilfered meal at the top of Vernal Falls in Yosemite National Park.

Tuesday, October 11, 2016

The Anniversary Box

Today is our two-year wedding anniversary!  At our wedding, we asked our guests to write a note on a card that we would then open up ostensibly on our first anniversary.  Unfortunately, we were on vacation at the time and didn't get a chance to and decided to wait for our next anniversary to open the box.

I thought a lot of the notes were insightful, funny, or just cute, and so I transcribed some favorite quotes here!  If you recognize yours, and would like to be credited, just let me know and I'll de-anonymize you.


The sweet compliments (I think!)

"Everything is the best."

"I'm so lucky to have known you guys during this tough time of intern year.  I'm sure we'll feel next year is even worse."

"Hold hands--we've always noticed you look better than any other couple doing that."

"One thing that won't change is that you'll both still be amazing people with a great sense of fun and impeccably destructive logic."


I think that last one was a compliment, at least.

The sage advice

"Personal space can be awesome."

"Fly a quadcopter somewhere romantic."

"Your spouse is like a good cup of coffee--you may have it every morning but you never stop enjoying it!"

I wish I never stopped enjoying it.  It runs out so quickly!

Our quirky friends

"I don't have chocolate on me."

"Aren't you glad I don't draw for a living?"

"Our minds were blown at Costco today."

I really have to know.  What was it that blew their minds at Costco?

Wow

"Once upon a time, we were all hanging out at the Morton Arboretum, celebrating your love when all of a sudden a squirrel invaded your reception.  It jumped up on the bar and sat down next to the bottle of Disaronno.  It then promptly began to pour drinks for everyone.  He said, 'I want to embody the generosity that Ben and Simiao show to one another.'  The squirrel then proceeded to pass out drinks to all of the guests.  They were very excited and amazed by this talking, bar tending, love celebrating squirrel.  As the drinks settled in, the talented squirrel recognized it was time to take the celebration to the next level.  He promptly had the DJ start the music and broke out a soul train dance line.  The winning move was a specially designed move for the happy new couple.  It involved pins and ended with a fantastic split.  Sadly, a rabid dog ate the squirrel; However, a giraffe emerged from the woodwork and with one fell swoop won the hearts and minds of all attendees!  They stood in accord and said, 'Giraffe, you are excellent, talented, amazing and kind, but Ben and Simiao are far, far better."

... I don't even know what to say about that one!  I guess our drinks were pretty great!

Saturday, September 24, 2016

Photos and Anti-Photos

Simiao holds an inverse egg at the narrows
at Zion national park.
We don't give taking a photograph much thought these days.  We take our cell phone out of our pocket, point it at what we want to remember, and press a button.  We don't think about what's going on behind the scenes:  light hits the charge-counting device (CCD) for some amount of time, then at the end the image equals how many photons hit the charge-counting device over that period of time.  The world doesn't actually stand still for the CCD, though.  Time still passes, things move, life goes on.  The CCD, therefore, is actually reporting an average of what it saw while it was counting.  This can be apparent through motion blur or ruined photos if the photographer happened to be moving quickly while taking the picture.  When one takes a typical long exposure, this becomes even more pronounced because the transient things tend to disappear:  you get a picture of a city street with no cars, or a sidewalk with no pedestrians because the sidewalk and the street spent more time in the frame than the people or the cars.

What if we were able to take a picture of just the things that changed, and not the things that didn't?  You can perhaps imagine a landscape where you can see the clouds going by but not the mountains, where you could see the river going by but not the shore, where you could see the leaves blowing in the wind but not the tree trunks, and where you could see the people playing soccer but not the field.

This is what I call an anti-photo.

Part 1:  Solargraphs and Time-Lapse Video


This entire process can be done with a camera using a timer, but at the start of this project I actually just wanted something to do with old Android cell phones.  It turns out that an old cell phone is actually a great platform for taking long exposures and time lapses:  it's basically disposable because I wasn't doing anything with it anyway, it has a decent camera and amount of storage space, and is easy to set up as a time-lapse.

In order to take time lapses with an Android cell phone, I installed the excellent, free program Time and Tide - Lapse for Camera.  It can be configured to take a photograph at a configurable time interval, and gives you some essential controls over the camera settings:  for instance, if you intend on making a synthetic solargraph or anti-photo, you will probably want to turn off flash.  You will also want to set the focus to infinity, because otherwise the frame will subtly change over the time-lapse and lead to a blurry finished product once you composite the images.  It may also be worthwhile to set the ISO to 100 or otherwise something constant so that the same brightness on the image always corresponds to the same brightness of light.

Finally, simply set your camera up somewhere that it won't get bumped and let Time and Tide - Lapse run.  Once you have taken the desired series of photos, transfer them to your computer and the fun can begin!  It is straightforward to composite these images into a video in Linux using, for instance:

avconv -i %08d.JPG output.mkv





Next I wanted to make synthetic solargraphs from these collections of short exposures.  The solargraphs I made in previous posts are different from simply averaging the pixels in each photo in the series:  if I were to average each pixel, then a bright pixel in one photo would eventually be darkened if it was dark in subsequent photos.  In a solargraph, a pixel, once exposed, will never darken, only brighten with repeated exposure.  Thus, I wrote a special piece of code to sum up each pixel and then normalize the result to the brightest pixel in the series.  Here, for example, is a solargraph composite of the final video shown above:

A synthetic solargraph taken out the window of the old Google Chicago office.  Note how it has the tendency to sharpen the otherwise low-quality images coming from the repurposed Android phone.

The program that generated these images is provided for your utility.  It turns out that it is actually the same program that generates the anti-photos in the next section!

This is the point where the original intent of this post went awry.  It turns out that the re-purposed Android phones were great for doing traditional long exposures by taking many pictures and then integrating them with my solargraph program.  However, anti-photos were a bit trickier:  not only were the Android phones' cameras very noisy compared to a modern DSLR or electronic viewfinder camera, but the compression noise in the JPEG images they took made their images exhibit noise down to the pixel which made the resulting anti-photos unacceptable.

Part 2:  Anti-photos


It's now relevant to discuss why the same program generates both solargraphs and anti-photos, and how these two things are actually similar in some ways.

In a solargraph, every single pixel in a series of photos has its value added to that of the others, then a normalization happens at the end.  In an anti-photo, we only take into account pixels that have changed sufficiently from the previous photo; these are added to a running total, then normalized at the end.  The definition of "changed sufficiently" is left open to interpretation.  In an anti-photo, the definition of "sufficient change" is selected to be high enough so that in consecutive photos we throw out unchanged parts of the image.  If "sufficient change" was set high enough, then every picture would come out black because no pixel could ever change enough to trigger accepting it.  Generally, though, the higher "sufficient change" is defined to be, the darker the image will become.

Interestingly, if the definition of "changed sufficiently" is set to "no change", an anti-photo actually becomes a solargraph because every pixel is always included!  So, the same program is actually capable of doing both solargraphs and anti-photos.

Let's look at some examples!
A very early version of an antiphoto--I like that you can see the people walking down the sidewalk and the cars driving by, but there were a few issues with this series as well.  The compression noise at the edges of objects means that buildings are much more pronounced than they would be if I had shot in RAW mode.  The frame changed vastly in brightness over time besides, so you can see bright images in the reflections on the buildings.  Further, the intended subject--the people and the cars--were not well-centered in the shot.

Melting ice in three different glasses, illuminated by candelight.  You can see the shape of the surface of the ice cubes as they shrank and melted.
Little fish swimming around in a stream.  The fish are dark-colored, so taking a series of anti-photos revealed the bright stream bed rather than the dark fish.

The Chicago skyline in broad daylight.  During the series of photos, a cloud obscured the sun.  So, only the parts of the city directly illuminated by the sun (as opposed to illuminated by reflected light) survived the anti-photo procedure.  The net result?  Using the sun as the world's largest flash-bulb.

So, how do you take a good anti-photo, and how can you make your own?  The basic technique is simple.  Set your camera up on a tripod with a timer, then set the timer to take a picture periodically--perhaps every minute in the case of melting ice, or every second in the case of swimming fish.  Choose an interval that makes sense based on the rate at which your subject is moving.  Set the camera to have a constant shutter speed, a constant ISO, and set it to manual focus so that you always get the same frame and illumination.  Be sure to shoot in RAW mode, as the compression noise from lossy encoding like JPEG will add a significant amount of unwanted noise to the anti-photo algorithm.  As few as 30 photos can be assembled to make a great anti-photo.

The above techniques will go a long way towards taking an appropriate series of photos to make a good anti-photo, but I picked up a few extra tips from repeated practice:
  • Be sure to select a scene that, as much as possible, is uniformly illuminated over the series of photos.  Otherwise, you will pick up the changes in illumination as opposed to the change in subject.
  • Landscapes don't tend to make great anti-photos (the skyline above being a rare exception).  Try to select a subject that is the only thing changing in the frame, such as the fish or the ice.
  • The normal rules of framing a photo don't make sense for anti-photos.  Try to think about how the subject is moving and frame that motion, not the scene at large.  

Using my program to make an anti-photo is straightforward.  See the GitHub repository for a download link and instructions!

If you're into photography, I hope you will decide to try your hand and your eye at seeing the world's motion instead of seeing the world as a static image and make your own anti-photos.  When you do, please let me know what you come up with--I'll be happy to add some links to your work here!

Sunday, April 24, 2016

Ben Li-Sauerwine 2016


My good friend Chris Gaiteri made this awesome photoshop for me, which obviously needs to be shared with the world.  Vote Ben in 2016!

Sunday, April 10, 2016

Goodbye, Google

Friday was my final day as a software engineer at Google.  It's been an exciting 3 years!  I discovered a bug so big that it made the news.  I wrote code that ground over multiple terabytes of data in parallel to help with business decisions.  I helped with the Google Code Jam competitions.  I even wrote internal services that monitored our internal code quality to help with keeping our codebase clean and manageable.  I launched brand-new products and made meaningful improvements to old ones.  Most importantly,  I worked with wonderful colleagues in an environment where I felt appreciated and respected and where I learned to be a better coder every day.

Google isn't by any means a perfect company, but the internal culture is such that one can be candid and open about problems and as such it is constantly improving.  I think that this is not only a lesson that other companies could stand to take an example from, but an example that could be followed in one's personal relationships as well.

So, why did I leave?  After 3 years, I felt that it was time for a new challenge.  I've joined a startup as a partner with two former colleagues.  I'll be making strategic and hiring decisions as well as design and technical decisions and working directly with customers and investors.  Overall, it's a chance to develop new skills besides just my technical ones, and that's pretty exciting!  You'll be hearing more about it soon (there's no attractive website yet,) but you can check out my newly updated CV if you want a hint!