William Became “Undie Man” and Ate Pizza

0 min read

Freeing Myself from Facebook

5 min read

Ever since my discovery of the IndieWeb movement, I've wanted to free myself from Facebook (and Instagram) and their brand of surveillance capitalism. I want to own my own data, and be in control of how it is shared, and I don't want it to be used for advertising.

I've had this incarnation of a personal website for a few years, and have mostly been following the POSSE publishing model, publishing most forms of content on my website, and then automatically (or manually) syndicating that content to silos like Facebook and Twitter. But, much of my content still remains trapped inside of Facebook and Instagram.

Until now.

As of March 4, 2018, I've pulled the vast majority of my Facebook content into my website, and all of my Instagram photos into my website, paving the way for me to delete myself from Facebook (and potentially Instagram) by the end of 2018. What follows is a high-level overview of how I made the move.


Exporting Data from Facebook

While Facebook does offer an export feature, its extremely limited, only includes very low resolution versions of your photos, and is generally very difficult to process programmatically. After some research, I discovered the excellent fb-export project on GitHub. Once installed, this tool will dump a huge amount (though, not quite all) of your Facebook data into machine-readable JSON files.

Since my website is compatible with the Micropub publishing standard, I then needed to convert this Facebook-native JSON data into microformats2 formatted JSON. Enter granary, an amazing swiss-army knife of IndieWeb by Ryan Barrett. Using granary, I whipped up a quick script that transforms the exported data into native microformats2 formatted JSON:

Publishing Liberated Data

At this point, I had a directory full of data ready to publish. Sort of. Unfortunately, not all of the data is easily translatable, or even desirable, to publish to my website. As a result, I created another script that let me, on a case by case basis, publish a piece of content, choose to skip it entirely, or save it to deal with later.

After running this script, I had a significant amount of my data copied from Facebook to my website. Huzzah!

Dealing with Photo Albums

Facebook has a "photo albums" feature, and I definitely wanted to get those memories onto my website. Again, I wrote a script that processes the exported data, and selectively allows me to upload all of the photos in an album to my website via Micropub, and then drops microformats2 JSON out that I could publish later.

Once I finished processing and uploading all of the photos for the albums I wished to copy over, I ran a simple utility script I keep around to publish all of the albums as new posts to my website.

Here are some of the results:

Notice, one of these comes all the way back from 2009!

Almost There

There are still quite a few photos and other types of posts that I haven't yet been able to figure out how to migrate. Notably, Facebook has strange special albums such as "iOS Uploads," "Mobile Uploads," and "iPhoto Uploads" that represent how the photos were uploaded, not so much a group of related photos. Unfortunately, the data contained in the export produced by fb-export isn't quite adequate to deal with these yet.

Still, I am quite pleased with my progress so far. Time to move on to Instagram!


Instagram has been slowly deteriorating as a service for years, so much so that I decided to completely stop publishing to Instagram earlier this year. It turns out, dealing with Instagram is a lot easier than Facebook when it comes to liberating your data.

Downloading My Data

After some research, I found instaLooter on GitHub, which allowed me to quickly export every single photo in its original resolution, along with nearly every bit of data I needed... except the photo captions. I ran instaLooter, and embedded the unique identifier in the filenames (which instaLooter refers to as the "code').

Getting Metadata and Publishing

I wrote a script that used granary to lookup the photo metadata and publish to my website via Micropub:

Note, I used the non-JSON form of Micropub in this case, because Known's Micropub implementation doesn't properly handle JSON for photos yet.


It turns out, that with a little knowhow, and a lot of persistence, you can liberate much of your data from Facebook and Instagram. I feel well on target to my goal of leaving Facebook (and maybe Instagram) entirely.

Kiddo Concentration

1 min read

William and Colette have been asking for “homework,” since they’ve heard about it from others. William is practicing his fine motor skills and Colette remains goofy.

Special Lunch With William

1 min read

Colette had rehearsal for a children’s musical, so Lacey and I took William to lunch at Playa Hermosa on the Hermosa Beach Pier. Good food and lots of smiles with my sweet boy.

This keyboard is finally just how I want it

Sassy Valentine Colette 💕

Editing a post in Known can have destructive side effects on content

1 min read

There is a bug in Known which causes HTML posts published via Micropub to be changed (usually in bad ways) when "editing" the post, even when you don't actually make any changes to the post. I discovered this issue when publishing via Sunlit 2.0, which supports Micropub.

I published two stories:

Because Sunlit doesn't yet support syndication via Micropub, I clicked "edit" on one of the posts, and toggled on syndication to Twitter and Facebook, and then clicked "save." The result was that the post's content was changed (in a destructive way, resulting in visual regressions), even though I hadn't actually edited the content, or even clicked into the content editor.

Seems like this is a bug.

Car Museum with William

1 min read

Last week I took William to the car museum in El Segundo for a Hot Wheels event. The event was fine, but we had a lot more fun in the museum itself. William even had the chance to sit in a Deloreon.

San Diego with Lacey

1 min read


Dinner and drinks before our second viewing of Hamilton at the San Diego Civic Theatre.


Late brunch “the morning after.” The view was far better than the food.

Another night with Pink Martini 🎶💗🍸

Hello Palm Desert 👋🏼🌴🌵

I've connected Siri to my Big Green Egg 🗣🔥

Spicy Pork Belly 🐷🌶

HomeKit bridge for my BBQ Controller lives! 🐷🔥🤖

New keyboard cable from ZapCables ⚡️💥

Colette is seven years old today!

1955 Jaguar XKSS

1 min read

Season two of Amazon’s The Grand Tour has been a huge improvement over the lackluster debut season. The latest episode featured the Jaguar XKSS, which was originally released in 1955, and is being rereleased this year by Jaguar. The XKSS is easily one of the best looking cars of all time.

I’m totally 1337