Download your photos from Facebook with EXIF data

If you've ever tried to export your photos from Facebook, you know it's a tough problem.

Facebook makes it possible to download a copy of your data on its Settings page.

Facebook download a copy of your data

Check the fine print!

This option exports low-resolution copies of your photos with no EXIF data, making it difficult to import into other photo storage like iPhoto, flickr, Google Photos, and so on.

I built a Facebook Photo Exporter to solve this problem. It lets you easily download all your photos in ZIP format. All photos are tagged with EXIF data such as time taken and location (when possible).

When you log in, it'll show you the photos you're tagged in. These are the ones that will be exported:

Facebook exporter

Then, press the download button:

Download your Facebook photos

Now I have hundreds of EXIF-tagged Facebook photos. Great!

Downloaded FB photos

Call Congress with one number: 1-844-USA-0234

I've created a toll-free phone number, 1-844-USA-0234, that will dial all your members of Congress, no matter where you are.

Instead of having to look up 3+ phone numbers and call them separately, this single number will connect you to your representatives one after another.

The United States is a representative democracy. If there's a policy you'd like to see changed as a US citizen, ask your senators and representatives to act.


Does calling Congress actually do anything?

Calling Congress counts for a bit, and it's better than sitting around and complaining, or watching the news and feeling helpless.

When the phone is answered, you'll probably speak to a Staff Assistant who will listen to what you have to say. The office keeps track of how many people have positions on the issues, and these numbers influence policy positions.

Make sure to state what issue you're calling about and why. Also, you may want to provide your address to prove you're a constituent (and possibly receive a letter in return).

call report

Example call report provided to member of Congress.

Good luck. The number 1-844-USA-0234 should be easy enough to save in your phone as "Congress". The next time you are sick of things being the way they are, give it a shot!

(p.s. this project is open source)

This year in side projects (2015)

This has been another great year for projects, old and new. The 2014 and 2013 posts went over pretty well, so here goes.

There's a lot this year. Projects worth talking about:

  • TextBelt - free outgoing sms api (40k texts/mo)
  • Asterank - 3D space visualizations (~500k views this year)
  • Alioth - more space analytics and visualization (just received a grant from NASA!)
  • Meteor Showers - see what meteor showers look like from space (NSF/PopSci competition finalist)
  • Pluto/Ceres/Mars - webgl visualizations of interesting solar system bodies
  • High-altitude weather balloons
  • The Space Potato - successful Kickstarter for a potato-powered near-space vehicle
  • Global health - writing software to strengthen national health systems in developing countries
  • Interview Club - marketplace for interviewers (won $14k at LAUNCH hackathon)
  • Harvest - aerial infrared photography for crop monitoring (won $5k at TechCrunch Disrupt)
  • Dinosaur Pictures - the official internet dino database
  • Ancient Earth - webgl viz of Earth over 1 billion years
  • Chatalyst - better web video conferencing
  • Neutral Gas - micro carbon offsets
  • College Lab - college assistance for students in China


Lots of new work in aerospace data analysis and visualization.


With a lot of patience, I managed to land a sizable 2-year grant from NASA for a project called AstroKit, which will provide open-source asteroid characterization tools for scientists.

NASA logo

Thanks NASA

I'd been doing enough work with NASA and others that it made sense to create a company, which I named Alioth LLC. There were minor legal and financial reasons to incorporate, but mostly it helps clients feel like they're working with a real company and not some 25-year-old.

Thanks to NASA's support, Alioth is here to stay and the future is bright.


I've been giving talks at JS conferences like OpenVisConf and EmpireJS on building 3D tools with webgl (here's a video).


Also gave a talk at NASA JPL in Pasadena, a place I'd wanted to visit ever since I was a kid and never thought I'd get to speak there.


Lastly, I gave a talk at University of South Carolina's Darla Moore School of Business.

Meteor Showers

This visualization uses my Asterank engine to show what meteor showers look like in the context of our solar system. I find that 3D visualizations often improve understanding of space because it's very abstract otherwise.

I created this meteor showers visualization for the Perseids meteor shower in August and coded most of it on

all meteor showers

This is my favorite project this year.

It's also a finalist in some NSF/Popular Science visualization competition, and it's open-source.


A friend and I thought New Horizons' flyby was awesome, so we built this Pluto globe (github).

pluto pic

This viz shows our view of Pluto from 1930 to present.

I also adapted it for Mars (incomplete) and Ceres.


Hello, Ceres.


Asterank, an analytics and visualization tool for asteroids, was how I originally got into the space industry.

I sold it to Planetary Resources over 2 years ago now, but still maintain the open-source repository and make minor changes.

Here's a cool visualization of open-source work done over the years:

Traffic to Asterank remains generally strong, punctuated by moments of media coverage.

Asterank traffic

100,000+ visitor days still happen sometimes.


Not really a side project, but deserves mention: the satellite I worked on at Planetary Resources launched twice. The first time, the rocket carrying it exploded.


Null pointer exception.

The second launch went fine and it was eventually deployed from the International Space Station.

My interest in satellites led to a few interesting high-altitude side projects...

Weather balloon #1

I've always wanted to build and launch my own satellite. A friend and I decided that a high-altitude balloon was a good first step.

The goal was to send something up to around 75-100k ft and get a picture with the black of space and the curvature of Earth. Together we designed, assembled, and launched a high-altitude vehicle.

first balloon

Me looking nerdy with the first balloon.

Our first attempt cost about $250 (largest expense is helium). We got two cheap Android phones and programmed a custom Android app that recorded GPS, sent text updates, and took pictures.

first picture

One of the pictures we took.

We let it go, received a few pings, and then it was gone for good. Our theory was that the batteries failed due to cold because the payload was just insulated by a children's lunchbox!

Months later we got a call from a farmer in Stockton who noticed our little package in his field. We were able to recover some awesome pictures from both phones and confirmed our battery theory - they cut out ~15 min before landing.

Weather balloon #2

Immediately after #1 went MIA, we put together another balloon.

This time, we used a styrofoam cooler, dedicated GPS, and a cheap Canon point-and-shoot. Everything worked great. We recovered it on a farm about 2.5 hours later (the farmer gave us a call, but we already knew where it was).

Photo quality was low - mostly overexposed. We had custom firmware on the camera and wrote a script to handle the picture taking, but our configuration needed further tweaking.

first balloon pic

The pictures from balloon #1 were better, but we didn't get them til months later.

Space Potato kickstarter

Our success with the balloons got me excited to do more. I convinced a group of friends to do a Kickstarter to support a larger and more interesting high-altitude project.

The twist: all the electronics would be charged/powered by a potato.

In the end, we raised about $1,800 to send up a potato-powered near-space balloon dubbed "The Space Potato."

potato science

The balloon flew with a potato onboard.

The full space potato write-up and post-mortem is here. It was a huge success in my book:

space potato pic

Thanks to potato power and lots of help from friends, I got the beautiful "Earth from near-space" picture I always wanted!

space potato logo

"From the Earth to the Stars," or something like that.

Global health

I spent 2 weeks in Ethiopia as part of a project with UCSF and a representative from the UN. We worked with their Ministry of Health and other international organizations to create tools that analyze data and provide critical support for national healthcare decisions.

Ethiopia map

The trip went very well and while I can't go into detail, we made a huge impact and intend to continue working with their government.

Interview Club

A few friends and I built Interview Club at the LAUNCH hackathon.

It solves a problem we all had when we worked together at Room 77 before we were acquired by Google. Technical phone screens are a huge timesink and it's very resource intensive to screen the top of the funnel. We built a marketplace where experienced engineers sign up and companies pay them to do technical interviews.

In less than 48 hours, we had over 100 engineers signup and 8 companies who needed help screening tech talent.

We won nearly $14,000 (!) and got to present as finalists. It was a real whirlwind (pitch/demo here).


One of several prizes.

For more on Interview Club, check out the post I wrote on it.


I've always had a long-standing vision of monitoring crops and other things using aerial infrared cameras. Now that my friends and I were experts in weather balloons, we were able to build it at TechCrunch Disrupt.

tethered balloon

The balloon was tethered as it monitored vegetation below.

Disrupt was great and we won ~$5000 and 3rd place overall.

harvest gif

Infrared analysis highlights problem areas.

I wrote a more detailed post on Harvest, or check out the pitch video at Disrupt.




TextBelt, my open-source SMS API, steadily grew from 30,000 to 40,000 texts per month this year. An unknown number of texts are also sent via the self-hosted node module.

It reached 50k texts/mo in October but plummeted in November when some providers blocked it and I didn't address the issue quickly.

Textbelt growth

Two years of Textbelt usage.

In the past year, I've had discussions with IT managers, doctor's offices, and even a police department (!) on their usage of Textbelt.

Now that it's popular, abuse is a perennial issue with Textbelt. People are using it to spam friends, enemies, and strangers. At some point I'll have to shut it down or start charging, which is a shame because many use it for legitimate reasons.

Last spring, I was looking for dinosaur pictures and came to the conclusion that there weren't any good dinosaur picture websites.

That's why I created Dinosaur Pictures, the #1 source for illustrations of dinosaurs and other ancient reptiles.


This was pretty timely as Jurassic World came out over the summer.

Creating this site was an interesting process. I hired a freelancer to curate some of the content, but eventually wound up programmatically curating content and scraping Bing Images. I also integrated some paleontology databases and papers.

My end goal is to figure out a way to give a talk at a paleontology conference.

Ancient Earth

Ancient Earth is an interactive globe that shows the continents moving around over the past billion years. It also includes a narrative of how life evolved on Earth.

This went viral (especially in Spanish-speaking countries for some reason).

Ancient Earth

This was actually just an SEO ploy for, but it didn't really work and people liked the visualization more. It's open-source.

Neutral Gas

Neutral Gas lets you buy "micro-offsets" to counteract carbon emissions from small purchases, like a single tank of gas. I collect these tiny payments until I have enough to purchase a large carbon offset for cheap.

neutral gas

This was a quickie. I was too scared/embarrassed to post it anywhere.


Chatalyst is a meeting planner and video chat tool. Meetings are the worst part of work. Chatalyst enforces best practices (and preserves sanity) with a built-in agenda, timer, and seamless file sharing. It's the best video conference tool out there IMO.

Chatalyst was built in a weekend as part of Sprinkle Camp, an all expenses paid hackathon-type thing in Detroit. Detroit was actually really great, and I had a good time hacking this together with my friends and other Sprinkle folks.


College Lab

College Lab is a service that a friend of mine launched this fall to help students in China apply to schools in the US. It was well received - I helped her answer a bunch of students' questions - and I'm excited to see where this goes.

college lab


I wrote a pagerank checker npm module and a CLI for exporting data from Mixpanel, rewrote my personal homepage as an isomorphic react app (static page would suffice but I wanted to learn). Also created a Chrome extension that replaces gmail pings with old-school AIM sounds...


Can't believe I got this much done and definitely couldn't have done it without all the help from friends. 2015 was the year of everything. In 2016, I want to focus!

Building a winner at TechCrunch Disrupt

Disrupt is a 20 hour hackathon that took place this September in San Francisco. This post describes an unusual hardware/software project and how it managed to win a handful of prizes.

Inside Disrupt

The dream

For the past year, I'd been doing a lot of high-altitude balloon projects, even sending a potato to 100,000 ft via Kickstarter. I was looking for a way to parlay high-altitude imaging into social good, with an idea on the backburner for balloons to monitor crop health and water in infrared.

Near-infrared imaging spots plants made unhealthy by irrigation problems and other causes, which is particularly topical here in California due to drought. Well-watered photosynthesizing plants scatter solar radiation in near-infrared.

After some debate, I convinced a few friends it was worth building. We called it Harvest, a toolkit that helps farmers understand plant health and spot water waste using infrared aerial photography.

In less than 20 hours, we built:

  1. a cheap infrared imaging device,

  2. processing software that takes infrared and runs NDVI analysis, which indicates whether plants are healthy.

  3. an interface to tie it all together.

Harvest NDVI

Harvest's Normalized Difference Vegetation Index (NDVI) view.


The project sounds complex but was very doable after breaking it into parts. The most difficult part was that we needed to finish the hardware and collect images within the first ~6 hours before sundown.

I had ordered a balloon, rope, etc. beforehand, as well as a cheap Canon point-and-shoot from eBay and a replacement "infrablue" filter, which shifts infrared light into the red part of the spectrum, so the camera records it. The total cost of all this was $12 for a used camera, $10 for the filter, $10 for a small weather balloon (on sale), and $10 for 500 ft of rope, for a total of ~$42.

It was a pain to find helium in SF but we managed to get 55 cu ft, more than enough (thanks SF Party).

I flashed the camera with special firmware called the Canon Hack Development Kit and put a Lua script on it that adjusted the focus, flash, and most importantly, took a picture every 10 seconds.

The field test

We went to a nearby park and got to work. Though it wasn't a farm, we figured there'd be enough grass/trees/pavement to show variation in watering and plant happiness.

Everything was secured with rubber bands and tape and we filled up the balloon.

It was a 5ft, 150g weather balloon.

The camera was just put in a cardboard box with a hole.

Serious cardboard cutting.

Tying off a weather balloon is always pretty scary. We managed to not have everything fly away by accident.

After being secured to a rope, the balloon was tethered to the ground. The payload flew smoothly, balanced by the downward-facing camera.

Field test balloon in flight

Field test in progress over Dogpatch, SF.

We didn't fly it to the full 500 feet because the balloon was underinflated and we were worried about power lines. It would've been too annoying to undo the seal and fill up the balloon more.

The software

Now that we had a bunch of near-infrared images of a nearby park, we had to process them. NDVI processing is a well-known technique, for every pixel:

NDVI = ((IR - R)/(IR + R))
IR = pixel values from the infrared band
R = pixel values from the red band

PublicLab is an excellent resource for DIY-NDVI projects and provided a lot of the knowledge and inspiration necessary to complete this. They have code, pre-made kits, and a great community around aerial observation and data collection.

I used the Python Imaging Library (PIL) to do this, scaled the coloring to best fit our field test data, and built a pipeline that converted all images.

The frontend then displayed these images nicely:

Infrared and processed NDVI imagery.

Our frontend whiz also did this awesome slider view.

And we incorporated satellite imagery from LandSat.

The pitch

It helps to start your pitch early, practice pitching to strangers, and build a good landing page. These were all done by ~10pm the first day.

These needs were compounded by the fact that Disrupt is only 20 hours and everything was judged solely on 1 minute presentations with no Q&A. This was a bit surprising - I think science-fair style judging like at LAUNCH or YC Hacks does a better job of fully evaluating a hack.

I worried the balloon was too much of a gimmick. It was just a demo; the meat of the project is not balloon-related at all and I wanted people to realize that. Our device could go on an airplane, drone, or even a very long pole!

Overall, the pitch basically went fine. There is only so much you can say/do/screw up in 60 seconds.

The outcome

We won prizes from CircleCI, Weather Underground, and PCH. We were 3rd overall, so we got to return later that week and present to the conference as hackathon winners. All in all, I felt silly carrying around a red balloon all weekend but it was totally worth it to see the idea come to fruition and achieve recognition.

With the CircleCI team, who singlehandedly restored my faith in CI.

The future of Harvest

I feel Q&A would've helped this hack shine more, plus maybe a modified pitch. The only feedback we got from judges was that it was an interesting idea, not a ready-made business. Which makes me think the goal of the Disrupt Hackathon could be better clarified.

Agricultural crop loss is a huge problem measured in billions of dollars. Existing businesses do thermal and infrared imaging via airplane, drone, and satellite at anywhere between 100-10,000x the cost. Every farmer we spoke with at the local market said they were interested in the product, so I think there's a potentially sizable market for a cheap infrared imaging solution that requires no training.

Irrigation problems in a field.

Some interesting takeaways from surveying farmers:

  1. Agriculture is not technologically backwards by any stretch. One farmer said infrared imaging tech sounds like it's far away, but he would've said the same thing about GPS 10 years ago. Now he can't imagine planting without GPS. Farmers are eager to adopt technology where it helps.

  2. Farmers constantly worry about their crops. One described how she compulsively checks the few statistics she has. She would love to be able to do more electronic monitoring.

  3. Watering is the most important knowledge in agriculture. This makes sense but you don't get it until you talk to farmers. Different plants like to be watered in different ways. These systems leak and fail in different ways, and catching a variety of problems is hard. One farmer remarked that we would've caught a recent pump problem, which would've been huge.

Hackathon tips

Hackathons are great but can be overwhelming. Here are some thoughts:

  1. Pitch strangers early. People at unrelated sponsor booths are usually willing to listen.

  2. Optimize for demos. For a 20 hour event, you need to be realistic about cutting corners. This means terrible code is sometimes ok.

  3. Sleep a lot. Powering through the night is unhealthy and I doubt the returns are worth it. We slept about 7 hours.

  4. Talk with sponsors and try to get a relationship going. This helps problem solve and puts your project in their minds.

That's it...for now

If you liked this, follow me on twitter, check out my other projects, or read another hackathon post.

Sending a potato to near-space

It began with a dream: launch a potato and some other equipment to over 100,000 feet, taking pictures with onboard electronics charged by potatoes.

A year later, 42 Kickstarter backers made history with the first potato-powered balloon over 100,000 feet.

"Making history" is a bit over the top, but we did do something really fun and sciency: charged some electronics with potatoes and then flew them to the stratosphere while taking pictures. We're really thankful to the backers who supported this ridiculous experiment.

I'm writing this post mostly for the benefit of our backers, but also as a postmortem and a fun recap of everything we went through.

Capsule prep

On Friday evening, the weather models showed a good flight was possible on Saturday or Sunday, so we gathered in our workshop to assemble everything.

Putting together a lightweight weather balloon capsule is relatively straightforward. The only challenge with the extra potato mass was keeping it under 4 lbs, so it was technically unregulated.

The first step was to create the structure. We had a bunch of different sized styrofoam coolers, so we drilled some practice holes and tried different techniques. Because GoPros are pretty flat in the front, we wound up having to shave the walls thinner with an X-acto knife.

Drilling a camera hole

Aside from that, there was mostly just a lot of rope and tape. Securing the cameras, phone, gps tracker, and other electronics was a task that had to wait til we were onsite with everything powered on.

The prepared capsule, onsite

In the workshop, we made sure that everything more or less fit, and weighed everything so we could get a better sense of what to expect (and more accurate models).

Potato prep

Now for the "meat and potatoes" of the project...we were entering new territory here, so we started just by making a bunch of simple potato batteries.

This felt like a cooking show.

One of our team members worked on batteries for a spacecraft in low-Earth orbit. So he was in charge here. Even so, there were a lot of unknowns.

We determined that the ideal potato potato battery is quite long, so we cut the potatoes lengthwise and cut sheets of metal to fit. Personally, I also learned that potato batteries are really more about the metal that you use rather than the potatoes themselves.

Cutting potato battery sheet metal with a dremel.

With this technique, we actually used surprisingly few potatoes. By cutting them lengthwise and separating each sheet of potato with a sheet of metal, we maximized potato efficiency.

Initial testing and wiring things together

We eventually created Frankenpotato, an electronics-charging monstrosity that produced enough current to charge some batteries.

A Frankenpotato battery, and the backer-named "Leeroy Jenkins" potato.

We discovered, perhaps not surprisingly, that it was unrealistic to charge all the electronics (GPS tracker, 2 GoPros, cell phone, cell phone backup battery) in a single night. The amount of power produced by potatoes is quite low. Nevertheless we were able to charge nontrivial amounts of electronics using potatoes.

Potato whisperer

The night wasn't over. One of the Kickstarter rewards was "potato whisperer," which promised to use a computer program to speak the names of backers to the potato on the eve of the flight. The goal here was to inundate the potato with good vibes.

One thing that I didn't plan for during the Kickstarter is that I now have a housemate. So to avoid disturbing the household, I had to keep the potato whisperer in my room overnight.

It was a tough night. The names of our backers are branded in my memory forever, on repeat. Here's a short preview (now imagine falling asleep as this played for 12+ hours).

I regret nothing.

The journey

This part was pretty simple. We knew we wanted to launch in California's Central Valley because it's a huge open area with high chance of recovery.

We learned from past balloon launches to remain pretty flexible in terms of our launch site. We knew we were launching in the Central Valley, but even as we were driving out there we didn't know where we'd do it.

Once we picked up our helium from a party store and our ETA became clear, we ran a bunch of flight path simulations with varying weights and amounts of helium from different parks between Stockton and Modesto. We wound up choosing Raymus Village Park in Manteca, with a predicted landing west of Sacramento.

One predicted flight path.

The launch

It took about an hour to put everything together at the park. This involved slowly inflating the balloon, starting all the electronics and verifying they were working, and connecting all the various components.

On a whim (and after some debate), we decided to add a second GoPro. This means we had to do some payload surgery on the spot (scraping out another hole for the GoPro). This proved to be a fortunate decision because it turned out one of the GoPros overheated before it even left the ground, which is why we have 5,000 still pictures but no video. No real regrets here as the video would have been pretty nauseating, with the camera swinging around wildly.

Critical moment: tying off the balloon.

We spent too much time getting everything set up. A formal checklist would've made things smoother and easier. The GoPro likely overheated because it was really hot out and the payload was packed with chemical hand warmers. In our effort to keep the payload from getting too cold in the upper atmosphere, we overheated our electronics on the ground.

All things considered though, it went quite well. In the past we've had problems with helium leaks, ripped balloons, and so on. In general, we knew what we were doing here and the park was a great place to set up (not pictured: convenient shaded picnic tables).

Balloon setup area with helium tanks.

The recovery

We launched near Manteca, CA and flew about 55 miles (88km) to the appropriately-named Yolo Bypass Wildlife Area, reaching over 100,000 feet along the way.

We had a SPOT GPS tracker and a flip phone tracker on board, so we had a good sense of where things were during the flight. However, there were dark periods that were extremely nerve-wracking: phones, which reports GPS via 3G, stop working at roughly 5-10k feet, and GPS trackers typically stop working at roughly 20k. I think we got particularly lucky, as our tracking data is fairly complete. There is a hardcoded 60k ft ceiling to GPS as specified by US law, so that explains the gap in the mapping below of flight waypoints.

The balloon flight path data, headed northwest. Note the general similarity to prediction above.

The potato itself was recovered on a farm by a field of cows. It required a bunch of searching, but we were lucky that it was close to an aqueduct. We attempted to contact the landowner, but as no one was home and it seemed fairly close to the road, we recovered it by walking along and eventually jumping a barbed wire fence.

Brave heroes.

The results

Although the pictures are pretty similar to those from other high altitude balloons, they are nothing short of spectacular.

Who knew a potato-charged balloon could take pictures this nice?

Looking west, Pacific under the clouds

Balloon pop

North Bay

Descending to farmland

Thank you from the entire space potato team for making this possible!! And big thanks to my friends who were an essential part of the project.

Lessons learned

  • Potato batteries are pretty cool.
  • GoPros can overheat.
  • Kickstarters are work. Money raised is misleading due to fulfillment costs. Physical rewards take a huge amount of time.
  • Helium is expensive. We knew this going in, but it's jarring each time how your helium costs can be as much as everything else combined (although it's pretty cheap for a non-renewable resource, helium prices have nearly tripled in the last 10 years). Working with party stores can be confusing at times because they sell things in units of normally-sized balloons.

The fate of the leftover potatoes.

If you liked this post, follow me on Twitter for more fun projects!