0 min read
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.
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.
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:
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!
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!
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.
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').
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.
1 min read
1 min read
1 min read
There is a bug in Sunlit 2.0, which supports Micropub.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
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.
1 min read
1 min read
1 min read
3 min read
In today's church service, our pastor delivered a message about the biblical sacrament of baptism. After the message, the congregation was invited to the front of the church to participate in what the United Methodist Church refers to as the "Congressional Reaffirmation of the Baptismal Covenant." Following the process outlined in the UMC Book of Worship, I reaffirmed my baptism in Christ today. Before approaching the baptismal font, I read the following:
Renunciation of Sin and Profession of Faith
On behalf of the whole church, I ask you: Do you renounce the spiritual forces of wickedness, reject the evil powers of this world, and repent of your sin?
Do you accept the freedom and power God gives you to resist evil, injustice, and oppression in whatever forms they present themselves?
Do you confess Jesus Christ as your Savior, put your whole trust in his grace, and promise to serve him as your Lord, in union with the church which Christ has opened to people of all ages, nations, and races?
According the to grace given to you, will you remain faithful members of Christ’s holy church and serve as Christ’s representatives to the world?
This past year has been extremely trying for me in my faith in the wake of the 2016 Presidential election. Each passing day, I watch as many evangelicals enable injustice and oppression, and fail to reject the evil powers of this world, as the President of the United States spouts overtly racist, isolationist, and sexist words. I watch as many churches and Christians say nothing as the President pushes policies that harm the poor and deepen racial and gender inequality. Evangelicals, especially white evangelicals, voted hugely in favor of this man, and are enabling him every step of the way. I'm personally sick of it.
As I walked through the process of reaffirming my baptism today, I also am renewing my commitment to resist this despicible administration. I have made a promise to God to serve as Christ’s representative, to reject the evil forces of this world, to resist evil, injustice, and oppression in whatever forms they present themselves, and to do it all together with the church, which is open to all ages, nations, and races. Therefore I choose to resist this President, his hateful and isolationist agenda, and all who support him. I wish to do this together with the church, just as I am called. I encourage you to join me.
Note: I am not advocating that the Church should be "democrat" or "republican," or even political. I'm advocating that Christians, as Christ's representatives in the world, are called to fight injustice, oppression, and evil, no matter what form it takes. Right now, one of the most pressing forms of oppression and injustice in the world is Donald Trump, and his administration. Resist.
1 min read
Last week, I shared that I have decided to move on from DreamHost, and its been a crazy week tying up loose ends, meeting with colleagues to remember our time together, and reflecting on the past.
Now, its time to focus on what's next.
On January 16th, I start as Chief Technology Officer at Reliam, a managed cloud service provider based out of Los Angeles, CA. Reliam has just secured up to $75 Million of investment from Great Hill Partners to drive growth. Simon Anderson, former CEO of DreamHost, and my ex-boss, has joined Reliam as CEO. I am thrilled by the possibilities that are ahead of us!
Why does this opportunity excite me? Well, that requires some storytelling that will come later. Suffice it to say, the tectonic shift to public cloud is a huge opportunity, and I believe that this team and company have what it takes to help businesses of all shapes and sizes make the move.
Looking forward to an amazing 2018!
1 min read
Its our first ever Micro Monday, people! Thanks to @manton and @macgenie for deciding to make this happen. I think its a great way to grow the community of Indie Bloggers and Micro.blog itself. My first recommendation for my followers is @eddiehinkle.
Indigenous is an iOS app that is in development. It’s goal is to provide a native iOS interface to the indieweb movement.
Indigenous is open source, written in Apple's Swift programming language. If you're an IndieWeb-curious developer on Apple platforms, I'd encourage you to get involved with Eddie, and help him with Indigenous!
In addition to his work on the IndieWeb, I also appreciate following Eddie because he writes thoughtful posts about, you know, being a human. Its always refreshing to see someone share how their faith informs their life in an open and honest, accepting way.
Thanks for being awesome, Eddie!
2 min read
Late in December, I tendered my resignation to the founders of DreamHost. My last day is Friday, January 12th. After over six years, it’s time to move on to my next adventure. But, before I do, I want to spend some time reflecting on my time at DreamHost.
DreamHost is the reason I moved my wife and infant daughter from Atlanta to Los Angeles. We spent our first year in the heart of Venice Beach, in a little condo on Abbot Kinney Blvd., the trendiest street in the trendiest neighborhood in LA. We now have settled into a lovely home in a great family neighborhood in South Redondo Beach, and couldn’t be happier.
In my six years at DreamHost, I’ve held five different positions, covering a huge variety of disciplines and responsibilities – software development, product management, operations, and even managing an entire business unit. I’ve had the pleasure of helping DreamHost become a company with disciplined engineering, product, and marketing teams. I’ve helped guide the company to embrace modern cloud infrastructure, and been part of releasing some of our fastest growing products on top of that infrastructure. We launched two spinoff companies based on open source technology we created, one of which became one of the greatest commercial open source successes ever.
In my six year run, DreamHost has also gone through a major reorganization, redefined our core values, and defined a Noble Cause, Vision, and Mission. We even stood up for the freedom of our customers in a landmark battle with the Department of Justice! We’ve become a company that knows who we are, what we stand for, and how we fit into the world. I’m immensely proud and gratified to have been a part of it.
Today’s DreamHost has an incredible culture, a caring leadership team, and a bright future. It’s been a joy. Keep on dreaming, DreamHost! I’ll miss you all!
What’s next for me? Well, that’s a different story...
4 min read
Earlier this month, I began experimenting with cutting the cord, starting by evaluating over-the-air options. Early indications had me optimistic that between a solid indoor antenna, an HDHomeRun Connect tuner, and Live TV and DVR functionality from Plex, I'd at least have my problems solved when it comes to the major networks. Sadly, that's turned out not to be true.
As I mentioned before, the HDHomeRun is great, and the antenna does pull in many channels, but its not nearly as reliable as I had hoped, with my local NBC and CBS affiliates being far too spotty. In addition, Plex's DVR and Live TV functionality is extremely unreliable, with recordings going hours over time, hanging completely, or causing my Plex Media Server to crash. I could certainly continue down the rabbit hole by investing in a more powerful outdoor antenna, but they're costly, and there's still the matter of Plex's buggy support for DVR and Live TV. At this point, I don't recommend this path for most people.
With OTA off the table, it was time to start investigating streaming services that offer live TV functionality and cloud DVR. My priorities were:
First, I took a look at Sling TV, which provides a highly-recommended a-la-carte service that meets many of my criteria. Many, but not all, unfortunately, as Sling hasn't managed to strike a deal with every local affiliate in my area.
Next, I signed up for PlayStation Vue, which on the surface, ticked all of the boxes. However, my free trial of the service was a total disaster. It took days for my account to activate, and my attempts to contact support resulted in announced hold times measured in hours. When I finally was able to get things working, the quality was pretty low, and the app experience left a lot to be desired. Once my trial was up, moved on.
Enter Hulu with Live TV, a new offering now in beta from one of the oldest and most respected names in streaming entertainment. Hulu with Live TV met all of my requirements on paper, so I decided to dive right in and put it to the test.
At this point, I'd love to tell you that Hulu is a perfect solution. The truth is, it isn't. That said, it meets all of my requirements, and its shortcomings are tolerable enough that I've officially cut the cord, and cancelled my DirecTV service. Overall, Hulu is great, with an extensive streaming catalog that is, in essence, like a massive "on-demand" library from a traditional provider. The client app is available on every platform that I use, and works well enough.
My wishlist for Hulu, however, is long:
The good news is that most of these problems are fixable with software updates, and even with these shortcomings, its still "good enough."
I'm going to keep my eye on Plex and its DVR functionality. If it ever manages to stabilize, I'll spend the time and money to set up a more powerful antenna, so I'll have the highest possible quality option for things like NFL and NCAA football games on the major broadcast networks. This would also give me a chance to re-evaluate Sling, and cut my costs even further. But, for now, I'm going to enjoy being free of AT&T/DirecTV.
3 min read
Giving hundreds of dollars a month to AT&T / DirecTV has been on my list of expenses to shave for years, now. The kids mostly watch shows from Netflix or my family Plex server, and occasionally will want to watch Disney Channel. Lacey doesn't watch much TV anymore, but when she does, its largely shows on the national broadcast networks. That's pretty true for me, as well, but I have two main vices that I can't shake: sports and HBO.
I've decided to experiment with cutting the cord, starting with the option that has the lowest ongoing cost: over the air programming. Thankfully, my aforementioned Plex server supports Live TV and DVR functionality through the use of a network-connected tuner and an antenna. I purchased an inexpensive HDHomeRun Connect tuner off of eBay for about $75, and bought a $10 antenna from Amazon, the Channel Master Flatenna, which was the recommended "cheap" antenna from the Wirecutter. Here are my quick takeaways so far:
The HDHomeRun is great. It was easy to set up, is compact, and responsive. The client application for macOS is barebones, but works really well. I recommend it without hesitation, especially at the price. Just make sure to get a good antenna.
That brings me to the cheap antenna I bought. How'd it go? Well, you get what you pay for. It picked up some channels, but completely failed to pull in ABC and Fox. After spending far too much time moving the antenna around the house trying to get it to work, I broke down and did what I should have done from the beginning, and bought the more expensive, amplified antenna recommendation from the Wirecutter, the ClearStream Eclipse from Antennas Direct. Now, I pull in every available channel with a strong, reliable signal.
Plex Live TV and DVR shows a lot of promise, but also needs a lot of work. Live TV and DVR are only supported in a few of their client apps right now. Sadly, support doesn't yet exist in Fire TV or Plex Media Player, both of which we use in our house. The Apple TV support is pretty good, as is the iOS client. The user experience is a mixed bag, as well, with Plex choosing to eschew the traditional "grid" approach to presenting live TV content, instead breaking things down to a more Netflix-like experience. I see what they're trying to do, and it sort of works, but frankly they need a grid guide in addition to the more Netflix-like experience. Overall, its fine, not amazing, but I'm optimistic that it will continue to evolve.
With the addition of an Apple TV or two, I think this solution will work well enough to cut the cord, at least for local broadcast content. Apple is rumored to be releasing an updated Apple TV with 4K support, which would work great for us in our great room, where we currently use a Fire TV for our 4K TV. Its entirely possible that Apple will also still offer a 1080p version for cheaper, which we could then place into our home theater, which uses a 1080p native projector.
I'm going to continue tinkering with this setup for the next week or two, and then I will be exploring a solutuion for the rest of our content – sports and HBO. I've chosen Sling TV as the first service to test. That'll be part two, so keep your eye out for my post on that in a few weeks.
1 min read
By Emma Lazarus, 1883
Not like the brazen giant of Greek fame,
With conquering limbs astride from land to land;
Here at our sea-washed, sunset gates shall stand
A mighty woman with a torch, whose flame
Is the imprisoned lightning, and her name
Mother of Exiles. From her beacon-hand
Glows world-wide welcome; her mild eyes command
The air-bridged harbor that twin cities frame.
"Keep, ancient lands, your storied pomp!" cries she
With silent lips. "Give me your tired, your poor,
Your huddled masses yearning to breathe free,
The wretched refuse of your teeming shore.
Send these, the homeless, tempest-tost to me,
I lift my lamp beside the golden door!"
3 min read
On June 24-25, I attended my first ever IndieWeb Summit in Portland, Oregon. IWS is:
...an annual gathering for independent web creators of all kinds, from graphic artists, to designers, UX engineers, coders, hackers, to share ideas, actively work on creating for their own personal websites, and build upon each others creations.
IWS 2017 was graciously hosted by Mozilla in their very cool Portland office, which provided fantastic video conferencing gear enabling people from around the world to join in. Day one kicked off with keynotes providing an overview of the IndieWeb, the state of the IndieWeb, and real-world examples of IndieWeb sites. Following the keynotes, attendees had an opportunity to introduce themselves and show a demo of their own personal websites. In my introduction, I showed off my On This Day implementation, along with a live demo of my website automatically logging when I watch media on my Plex server.
The group then adjourns for lunch, followed by a Barcamp-style scheduling session, where individuals can propose topics of conversation, where we quickly filled four tracks with amazing hour-long sessions for the day. Topics included WordPress, specialized Micropub clients, personal website designs, voice and the IndieWeb, and a session that I proposed on creating a timeline for the open web. Every session was fun, engaging, and thought-provoking. In the evening, I joined a group of attendees for dinner and drinks, and then headed over to Ground Kontrol for some classic arcade games before calling it a night.
Day two gave attendees some time for hands-on assistance with their personal websites. I joined David Shanske and Ryan Barrett in leading a session to help people interesting in IndieWeb-ifying their WordPress websites. The afternoon was all about personal hack time and projects before we wrapped the day up with demos. I contributed a Micropub Media endpoint implementation to Known and then started working on a new Indie-reader called "together" with Grant Richmond and a few others. To wrap up, there was an afterparty at Voicebox Karaoke sponsored by DreamHost, which was an absolute blast.
I have attended many conferences over the years, and IndieWeb Summit 2017 was one of my all time favorites. Kudos to organizers Tantek Çelik and Aaron Parecki for doing an incredible job putting the event together. Everything was top notch!
Probably the best news of all is that nearly every moment of the event was recorded and posted online, along with detailed notes of each session. I've been catching up on sessions that I missed over the last few days, and my appreciation for the event is only growing.
Can't wait for next year!
5 min read
I've recently been thinking about the smart-speaker category, musing about Amazon's recently announced Echo Show, and speculating about if and when Apple would get into the game. Earlier this week, I got an answer when Apple announced the HomePod, a smart speaker with voice control powered by Siri. So, has the announcement of HomePod made my choice clear? Will I buy a HomePod, an Echo Show, or another smart-speaker?
Well. Its complicated.
In theory, smart speakers have several appealing features for me:
On the other hand, there are some significant theoretical drawbacks, the most significant of which is security and privacy. Having an internet-connected microphone in my house that is always listening is a bit scary. Is my information safe? Is the company that I am sharing it with a good steward of my data?
HomePod has really muddied the waters for me. I absolutely love the convenience, integrations, features, developer story, and screen on the Echo Show, but the dismal audio quality and significant concerns with privacy and security give me pause. The Echo Show is also not particularly well integrated with Apple's ecosystem, in which I am thoroughly entrenched, though that seems to be changing.
The HomePod has addressed my privacy concern very effectively. Apple made it abundantly clear that they don't send any audio up to their servers until you say "Hey, Siri," and that all information is encrypted in transit, and is anonymized to protect its users. I trust Apple more than I trust Amazon, Google, or pretty much any other major technology and services company. They're interested in selling me their products to improve my life, not in sharing my information with advertisers, or more effectively mining my information to enhance its retail offerings.
Audio quality is also huge focus for Apple with the HomePod. In fact, their marketing site introduces it as "the new sound of home," and spends significant time and effort discussing the internal speakers and adaptive audio features that use its onboard processing to optimize the sound to the room. While there's no way to beat, or even match, a properly tuned multi-speaker audio system, I am betting that Apple's engineers can make the HomePod sound pretty great. Certainly, much better than the Echo. In addition, Apple has built in multi-room audio features that put competitors like Sonos to shame, thanks to tight integration with iOS.
So, HomePod addresses my two main concerns of Smart Speakers with ease! Yet, the HomePod leaves me very conflicted. Why? Because, frankly, its not particularly smart. I was expecting to hear about a total overhaul of Siri, focused on improving accuracy, opening up the platform to developers, and closing the gap with Alexa. Yet, the HomePod has, in many ways, delivered the "same old Siri," which has no developer story to speak of. The only integrations you'll find are those with HomeKit, which thus far hasn't really taken off. Meanwhile, the Alexa Skills library is growing at a massive clip.
Finally, the HomePod clocks in at $349. Ouch. The Echo series ranges from $49 for the Echo Dot, $179 for the full size Echo, and $229 for the Echo Show, which features a touch screen and an integrated HD video camera. Now, Apple can always demand a premium price point, and I have no doubt that the industrial design and engineering quality of the HomePod will put the Echo to shame, but given the feature disparity, I am a bit disappointed in the price.
Given the tradeoffs and price point of the HomePod, I am almost certain to pass on the first generation. If Apple puts significant time and effort into Siri and the developer story, that may change. Early signs from WWDC are that they're interested in opening up HomeKit more, so I'm optimistic. I'm also hopeful that Apple will eventually release a HomePod with a screen with integrated Facetime support, which would be ideal for my kitchen.
Conclusion? Well, I think that the smart speaker category is pretty nascent, and its going to take a few more years to shake out. Amazon has the early lead, and both Google and Apple now have entrants that are playing catch up with varying degrees of success. As of now, I'm sitting 2017 out to see how things change before committing to a platform.
3 min read
I've long been a believer in the power of the open web, but my passion for saving it has been ignited by the IndieWeb movement, as of late. More and more people are discovering their distaste for creepy, ad-driven content silos like Facebook. Today's post by Dave Winer on the evils of Facebook, and John Gruber's hilariously sardonic "Fuck Facebook" reply do an excellent job of encapsulating my own frustrations. That said, there are reasons for hope.
The IndieWeb movement itself has been chipping away at the problem for years, but I've been particularly encouraged over the past few weeks by a few new developments.
First is the successful launch of Manton Reece's Micro.blog project to his Kickstarter backers. I'm a backer myself, as is my employer, and I've had the pleasure of using the platform for a few weeks now. Its early, but the project is already bearing fruit, with a rapid development pace, a vibrant community, and lots of excellent people to follow. Micro.blog is built on the notion of independence and respects your ownership of your data.
Next is the announcement and early success of the JSON Feed format created by Manton and Brent Simmons. JSON Feed is a new format designed for content syndication, similar to RSS and Atom, but based upon the JSON serialization format, which is popular with developers these days for being extremely easy to properly generate and parse. Since its announcement, there's been a flurry of activity around JSON Feed, including outcry about "yet another standard," and those who are upset that JSON Feed was created at all when there are other JSON-based syndication formats in existence. Over all of the noise, though, the adoption rate has been impressive. Many projects have been updated or created to generate and parse JSON Feed, and consumers are starting to adopt the format as well, including Feedbin, News Explorer, NewsBlur, Inoreader, and a few podcast apps. I've even jumped into the fray, creating an initial implementation of JSON Feed for the Known CMS that runs this website, and a second pass that aims to build in additional information through JSON Feed extensions. Regardless of competing standards, shortcomings in the format itself, etc., its undeniable that JSON Feed is generating real, palpable excitement for the open web, and that's undoubtedly a good thing.
Finally, in the midst of all of this, Brent Simmons has announced that he's working on a new, open source feed reader for macOS called Evergreen. Brent was the original creator of NetNewsWire, which was at one time my favorite app. In fact, I created several themes for NetNewsWire back in the day, and was a member of the beta testing and feedback group that Brent set up. Evergreen has a chance to take a fresh look at the problem of consuming feeds, and with JSON Feed and the new capabilities it could support through extensions, I am hoping that Brent takes a crack at solving the bigger picture that I blogged about in March. Imagine an open source app that bundles consumption (through feeds, including JSON Feed) with content creation and interaction (leveraging Micropub, a newly minted W3C recommendation, and Webmention). I'm looking forward to seeing what Brent produces!
So, yes, I lament the state of the web, thanks to walled gardens like Facebook, but I'm optimistic about the future.