Thursday, July 31, 2014

EPA: Please regulate carbon dioxide emssions

Text of my testimony before the EPA yesterday (July 30, 2014):

Good afternoon.  My name is Ross Cunniff.  I am a Fort Collins City Council member, but I am speaking only on my own behalf today.

My father was born and raised in Colorado.  Although he left Colorado to serve in the US Army, we returned frequently in the 1960s and 1970s to visit our family here.  I have vivid memories of Colorado from those days.  I remember startling blue skies, fast-running mountain streams, tree-covered hillsides, and snow-capped mountain-tops.  My wife and I moved to Colorado in 1987 to raise our family.  Although many more people lived here by then, the character of the state was much the same as I remembered, and we delighted in sharing it with our daughters as they grew up.

However, the past decade has seen significant change for the worse.  Colorado is not the same as it was when I was growing up.  The view of the Front Range is frequently obscured by haze.  The mountains are not snow-capped nearly as often as they used to be.  Glaciers in Rocky Mountain National Park have receded.  The forests have been devastated, first by the infestation of pine beetles, and then by wildfires.  Drought has alternated with severe flooding, the impacts of which are made worse by the newly barren hillsides.  And diseases like West Nile are now present in Colorado, where they never were before.

All of these impacts are related to the significantly warmer climate.  The proof is in the numbers.  The frequency and duration of record-breaking heat waves has increased dramatically.  Not only that, but the intensity and length of cold spells has decreased.  This has directly impacted our watershed, and has led to the spread of warmer-weather insects, parasites, and diseases which would not have survived the winters of the past.

This is not a natural disaster, or something that is “just happening” to us.  People are the direct cause of this rapid climate change.  Our carbon dioxide emissions continue to increase, creating an invisible blanket around the planet which keeps heat from escaping into space.

On the Fort Collins City Council, we spend significant time and money dealing with the effects of climate change.  We had to add new water treatment stages to deal with ash from the 2012 High Park fire.  We, along with most communities in Larimer County, are still working to recover from the 2013 flash floods.  We spend time, energy, and money on policies and procedures regarding West Nile Virus in our community.  Although we have an aggressive climate action plan, we understand that we only control a small part of the United States’ carbon dioxide production.

This is why we need the federal government to help.  We need to act together as a united country, and rapidly and dramatically reduce our production of carbon dioxide.  Coal-fired power plants are the biggest single producers of CO2.  The proposed EPA regulations are a necessary start to our action.

My wife and I recently discovered that we are soon to become grandparents.  This has made my resolve to address climate change that much more passionate.  I want my grandchildren - and all our grandchildren - to enjoy the same beautiful Earth that we enjoyed.  Please act to help make that happen.

Saturday, November 30, 2013

Time-correlated animated GIF of ISON from NASA/STEREO

Thursday, November 28, comet C/2012 S1 (ISON) went through perihelion.  It's not clear what happened to it, yet, but the world had a ringside view thanks to NASA's STEREO spacecraft.  These spacecraft orbit the Sun.  Right now, they are opposite the Sun from Earth:

I took the animated GIFs I found at and time-correlated them into a single animated GIF, which you may find here:

[Original image credit: NRL/NASA]

If ISON does emerge somewhat intact, expect a plethora of images from amateur astronomers around the world.  Stay tuned...

Friday, January 11, 2013

Running for City Council

Today, I announced my bid for Fort Collins City Council, in District 5 (the current councilmember, Kelly Ohlson, is term-limited).  You can read all about it at - it should be a great adventure!

Sunday, December 16, 2012

GoPro Hero3 Black Multi-Camera Timing

In the previous post, I explored the field-of-view of a GoPro Hero3 Black camera.  In this post, I explore the timing of two cameras, both paired with the same remote.  I set the cameras to 848x480 240Hz video, pointed them at a kitchen timer that has an LED blink once per second, and recorded.  Here are four images from each camera, composed together so you can see how the timing varies:

So, accurate to within 2 frames at 240 Hz - only about 8 milliseconds or so of difference.  Should be good enough for my purposes.  The bigger concern is the color shift apparent between them.  Note that the bottom image seems a little more saturated than the top.  Probably correctable, but annoying.

GoPro Hero3 Black Field of View

I got two GoPro Hero3 Black cameras and am planning a panoramic project with them.  However, to do the project correctly and accurately, I need a good read on their field-of-view.  So, I set up a tripod and a grid and a tape measure, and took a few photos.  Here they are, desaturated and contrast-enhanced, with central red dots and some annotations.  First, measuring the diagonal FOV:

Next, the horizontal FOV:

Finally, the vertical FOV:

The front of the camera lens was almost exactly 17 inches from the grid.  The camera body started about 17.25 inches from the grid.  Assuming the sensor is embedded some distance into the body, I used an estimated field-to-sensor distance of 17.5 inches.  This yields the following field-of-view, in degrees:

Diagonal: 146
Horizontal: 121
Vertical: 93

Doing a little interval math on the field-to-sensor distance shows these angles are accurate to about plus or minus 1.5 degrees.

Interestingly, Photoshop seems unable to correct the barrel distortion of the GoPro's built-in lens.  The EXIF information says it is a 2.77mm f/2.8.  I suspect it is some sort of a non-linear distortion (i.e. stronger toward the corners than in the middle).  I'll do a little math and see what I can figure out...

Edit - Dec 29 2012
I wrote a program to account for the spherical projection the lens uses.  It is a very straightforward projection, and works out to a horizontal field-of-view of roughly 114 degrees (i.e. a little smaller than I calculated, probably due to the difficulty of reading the tape measure numbers as they get squished toward the edge).  Basically, you can reproject the pixels to a flat plane by scaling the distance of each pixel from the center of the image proportional to the atan of that distance, divided by the constant which comes out to half the horizontal field-of-view:

r = atan(r) * (180 / (WIDTH_HALF_ANGLE*M_PI)) * (w/2);

Using this correction, here is the diagonal FOV image, reprojected:

The keystoning of the sewing board is due to the fact that the camera was not facing directly perpendicular to it, so there is a perspective distortion.  Two things show that this is the correct projection:

1. The left and right edges of the sewing board, reasonably straight in reality, are straight in this image
2. The tape measure is a consistent width across the entire image.

Edit 2 - Mar 28, 2013
To make it absolutely clear how I did this, here is a code fragment from the C program I hacked together for this.  Strictly point-sampled (no interpolation) but good enough to demonstrate the math.

/* Half of the horizontal field-of-view, in degrees */
#define WIDTH_HALF_ANGLE        57

int i, j; // loop counters
int w, h, c; // input: image width & height & # of components (typically 3 or 4)
int nw, nh; // Expanded width-height range to pick up all the pixels
double x, y, r, ang; // temporary floating point variables
int ix, iy; // calculated indices
unsigned char *img, *dst;  // Source and destination raster images

    nw = w * 2.5;
    nh = h * 2.5;

    for (i = 0; i < nh; i++) {
        for (j = 0; j < nw; j++) {
            // Calculate fractional x/y coords - (0,0) is the center of the image
            x = (j - nw*0.5) / (0.5 * w);
            y = (nh*0.5 - i) / (0.5 * w);

            // Calculate distance from center, and normalize to a unit vector
            r = sqrt(x*x + y*y);
            if (r > 0.0) { x /= r; y /= r; }

            // Calculate the angle of this unit vector from
            // horizontal-to-the-right
            ang = atan(r) * 180 / (WIDTH_HALF_ANGLE*M_PI);

            // Calculate adjusted distance this pixel really was
            r = ang * w/2;

            // Figure out where in the image that distance is
            // (nearest neighbor sampling)
            ix = x*r + w/2 + 0.5;
            iy = h/2 - y*r + 0.5;

            // If that source pixel is within the image bounds...
            if ((ix >= 0) && (iy >= 0) && (ix < w) && (iy < h)) {
                // ... then copy it over
                for (n = 0; n < c; n++) {
                    dst[c*(i*nw + j) + n] = img[c*(iy*w + ix) + n];

Sunday, August 26, 2012

Apollo Inception

I found out this weekend (Aug 25/26) that everything goes better with Inception. So, in honor of Neil Armstrong's passing, I made this montage of Apollo 11 footage from NASA footage ( ) and the music Mind Heist by Zack Hemsey ( ) The only concession to timing was that I cut a few seconds of Walter Cronkeit's face out to match the length.

Everything *does* go better with Inception!

Saturday, August 25, 2012

Neil Armstrong, 1930-2012

July 20, 1969.  I was 5, and my father had just returned from Vietnam.  He took me outside that night to see the Moon.  It was not quite this full - 6 days instead of 8 as pictured here - but still stunning.  A person was walking on the moon!  The Apollo program had a huge impact on my childhood, and strongly influenced my choice of engineering as a career.

There will be plenty of tributes to Neil Armstrong today, but for me, it is enough to say that a giant of American history has passed.

I took this photo this evening in memory of Neil.  May we honor his memory by continuing to explore the Universe.

Tuesday, June 12, 2012

Venus Transit Images

As documented in my Expedition Notes, I was on the summit of Haleakala for the 2012 Transit of Venus.  Here are a couple of representative images.  First, the beginning of the transit, in white light - a stack of 10 images taken with a Canon EOS 40D and aligned and processed in Photoshop.  Click on the image to see it full-size:

This is the color of light the Sun puts out.  It is not yellow or orange - people only think it is because the only time you can actually stand to see the Sun is when it is rising or setting, especially through clouds (and it is still not safe to look at it this way!).  At those times, the light is significantly reddened from the passage through very thick layers of air and dust.  Note the sunspots and other details - white light is interesting.  But what is *very* interesting is Hydrogen Alpha light.  This image of the end of the Transit is a stack of 7 images taken with a Sony NEX 5N camera and aligned and processed in Photoshop.  Again, click on the image to see it full-size:

Hydrogen Alpha is a specific wavelength of red light emitted by Hydrogen when one of its electrons makes a specific quantum transition.  It is used because it shows very different details than white light.  Notice again the sunspots - they are not quite as visible.  However, much more surface detail is visible on the disk of the Sun.  In addition - notice the (heavily-processed!) red flames around the disk of the sun.  These are real - they are called "prominences".  The exposures I was taking were not optimized for prominences, so there is not much detail there - but you can see them!  I chose an orange color for this image because, to my eye, I can see more details than I can with a pure red image.

Finally, I assembled an animation of 75 images from both scopes, side-by-side.  The left (red) image is the Hydrogen Alpha image and the right is the white light.  Apologies for the shakiness - I'm still on vacation and my laptop is the only tool I have available.  Perhaps some day I'll make a much nicer, smoother video:

And that's about it for now. Stay tuned, I may play with this data some more in the coming weeks...

June 25, 2012 edit: Edward Plumer, my brother-in-law, has posted his observations on his blog.

Venus Transit Expedition 2012

This year, we planned a family outing to Hawaii.  Being a science geek, I said, "If we are going to Hawaii this summer, let's make sure we are there on June 5 for the Transit of Venus".  Hawaii is one of only a couple of spots in the United States where the entire transit would be visible.  And so, we chose early June for our vacation.  Our target was Maui; specifically, the summit of Haleakala, the highest peak on Maui:

View Larger Map

We chose Haleakala for several reasons.  First, Maui is indeed a tropical paradise, an excellent spot for a family vacation.  Second, at 10,023 feet, Haleakala is almost always above the clouds.  Finally, we anticipated that the world + dog would descend upon (ascend up to?) Mauna Kea on the Big Island, making it very difficult to find a good spot to set up telescopes - in fact, we heard later that only shuttle buses were allowed to the summit, so we were quite likely the highest-altitude amateur observers of the transit on Hawaii!  Possibly even the highest-altitude amateur observers in the United States?

The hard part about going several thousand miles for an event like this is figuring out what equipment to bring and how to get it there.  I decided on the following main components:

  1. A Baader Herschel Wedge attached to an Orion ED80T telescope (80mm f/6 apochromatic)
  2. A Coronado Personal Solar Telescope (40mm f/10 monochromatic Hydrogen Alpha)
  3. A Canon EOS 40D (attached to the ED80T/Herschel Wedge via a 1/2x Barlow + T Ring)
  4. A Sony NEX 5N (attached to the PST via a 1/2x Barlow + T Ring)
  5. An iOptron Minitower Pro alt-azimuth tracking mount

This is a substantial amount of equipment to schlep about.  The scopes and cameras fit into a carry-on camera backpack, but the mount does not, and it is rather heavy.  And I did not want to drag it through the airports in Denver, Maui, Kauai, Oahu, ...  So I built a crate to fit, using construction insulation foam as structural material to hold the tripod legs in place:

The crate got sealed up, and sent UPS:

There were anxious moments as I had mis-addressed the crate to the wrong resort management company.  However, UPS was very helpful, and I was able to retrieve the crate from near the Kahului airport.  I of course immediately set it up to make sure it was functioning.  Here is everything attached with Maalaea Bay and Kahoolawe in the background:

The next morning we were up near dawn, and my sister, her husband, and I made the long trek up to the top.  The target was the building on the very summit of Pu'u Ula'ula - Red Hill - at 10,023 feet:

This was almost certain to be above the clouds.  Unfortunately, it was also several hundred feet and about a mile distant from the restrooms:

The views from the summit are stunning.  Here is a view down into Haleakala "Crater" with clouds roiling about the edge (we later learned that most other viewing on Maui was mostly cloudy):

We got permission from the Park Service to set up our scopes in the lee of the summit building (it was very windy that day!).  You can barely see them set up in this photo:

Here is my setup (on the left) and my sister and brother-in-law's setup (on the right), shortly into the Transit (the scopes are nearly vertical):

Surprisingly, not many people were there for the transit.  However, fortunately, a science and math teacher from Seabury Hall (a local private secondary school) was there - he brought a Sunspotter, a great device for such events, and it showed the transit quite well (you can see the black dot of Venus on the projected disk of the Sun):

Although not many people had come up specifically for the transit, everybody who showed up was interested.  Between the SunSpotter and having people look through my camera viewfinders (plus a few other scopes that showed up as the day progressed) we managed to keep people informed.

The advantage of having two trusted teams of trained amateur astronomers is that you can take turns making the multi-mile round trip to the restroom.  On one trip, I spotted a Chukar near the visitor center parking lot:

The transit went spectacularly well - see the next post for some pictures and animations - we had clear weather until the very end of the day (notice that the scopes are nearly horizontal now):

After the Transit was over, I took the time to make a couple of panoramic photos.  Here is the shadow of the summit over Haleakala Crater:

And here is the view to the west - the buildings on the left are the US Air Force Maui Space Surveillance Complex:

As night fell, the big toys in the Space Surveillance Complex came out:

And that was our expedition.  Thanks to the whole family for making it possible, and thanks to my sister and brother-in-law for braving the summit with me!  Thanks, too, to all the curious travelers who shared the day with us.

We've been on vacation all the past week, so this is the first chance I've had to blog.  Apologies to anyone who has been waiting anxiously for the info... and see you again in 2117!

June 25, 2012 edit: Edward Plumer, my brother-in-law, has posted his experiences on his blog, and I've posted some processed images on the next post.