Spoilers in the age of Social Media and Ubiquitous Time Shifting

You know what really grinds my gears? Folks who complain about TV spoilers in social media. Quite often I will tweet something about an episode of The Walking Dead or Game of Thrones several hours, or even days after the original air date of the episode, and there is always someone who gives me shit about it because they haven’t watched it yet. We live in an age where DVR’s are more or less ubiquitous and most people “tape” their favorite shows and watch them later. Granted, DVR is far inferior to actual tape (as in VCR tape) in when it comes to actual portability and usability of the time shifted material. Of course this is mostly a concern only in principle since bit torrent sites provide even better time and format shifting services to the masses for free. Needless to say, there are many ways to watch your favorite show on your own schedule whether you own a DVR or not.

The problem with this is that TV watching has always been a social experience. With the mainstreaming of social media, many viewers such as me want to engage with friends and community at large via those channels and discuss the on-screen events as they unfold. Many TV networks such as AMC have noticed this trend and actually encourage it by posting Twitter hash tag suggestions during commercial breaks. It is actually a lot of fun to live tweet your favorite show, and bounce around jokes and/or speculations with other fans. But there is always someone in your social circle who is not watching the show right now and wont be able to watch the show for days and thus becomes very upset at all the spoilers in their feed.

You would think that if you happen to be a fan of some show, and friends with many other fans via social media would know better than to wade into the update stream as a new episode is on the air and expect not to be spoiled. But lets say that live tweeting is just a tad bit inconsiderate. Perhaps we ought to leave a small courtesy window between the original air date, and actual posting of the plot revealing spoilers? What should that window be though? Is the morning after an acceptable compromise? Two days later? Next weekend? A month?

The truth is that spoiler-complainers don’t actually want a compromise. They want their social media to be pristine clean and devoid of spoilers forever. They want to watch their shows on their own schedule (as is their right) and want everyone to hold off any and all discussion of said shows until that an undetermined and arbitrary date when they choose to watch them (which I would say is inconsiderate on their part). In fact, if you happen to be followed by a lot of people, almost invariably you will piss off someone who doesn’t even get the show you are discussing in their region. Yes, I have actually been yelled at by someone who never seen Game of Thrones but was considering “maybe downloading it one day”.

So realistically, the only way to avoid the ire of the spoiler-complainers is to keep your mouth shut, and never mention any of the series you like in your social media feeds, ever.

I got fed up by this and decided to do something about it. The simplest and most direct solution to this problem would of course be to gather all these whining spoiler haters, put them in a rocket and launch it into the center of the sun. But since I don’t have a rocket, I decided to code up a solution instead. Something that would allow me to post spoilers in my tweets without pissing anyone off in the process.

The big thing about posting plot twists and revelations in Tweets is that there is really no way to hide or filter them. Forums and blogs have a long standing tradition of using vertical white space (often known as “spoiler space”) to set the spoilers apart from regular post, or change the font color to obscure the text. Twitter’s limited nature does not allow you to do any of that. There is really no way to hide part of your tweet in any meaningful way… Except of the Twitter Cards functionality.

When you tweet a link to a site which implements Twitter Cards, the users can click on it and it expands to reveal an excerpt and a picture from said link. I figured I could exploit this functionality as a crude way to hide spoilers. So the idea was to design a service that would allow one to create a spoiler text, bind it to a unique URL and then automatically tweet that URL along with a non-spoiler teaser message. Let me show you an example – I could tweet something like this:

Spoiler Tweet

Spoiler Tweet

The link in the post would then link to a web page like this:



Note that I’m not showing Game of Thrones spoiler as an example for reasons that should probably be obvious by now. The Twitter Cards integration doesn’t work as of yet, because apparently it takes months for that functionality to get approved. The service however does integrate with Twitter so you don’t actually need to sign up for an account to start posting spoilers. You simply sign in with Twitter and you are ready to go.

I’m actually pretty happy with the URL I was able to nab for this service: dontspoil.us. What I really wish I was able to get was spoil.er but unfortunately the .er TLD is not open to the public yet.

This is how it looks

This is how it looks

As with most of my projects, this one is Open Source. You can peruse the code at your convenience over at GitHub.

The front end is my usual: clean HTML5 with a little bit of Twitter Boostrap which in this case I’m using primarily for the responsive grid and pretty buttons. I’m also using jQuery which drives some of the Bootstrap effects, and also lets me do very simple validation on user input.

The back end was written entirely in Ruby, using the excellently simple Sinatra as the web framework and Data Mapper as the ORM. I resisted the urge to host it on my old and busted Dreamhost account like I did with MarkdownJournal.com. As you probably seen that host has major stability problems, so I instead opted for something different: Heroku cloud hosting platform.

If you are not familiar with Heroku, it is basically Google App-Engine style service but with slightly different focus and a lot more flexibility. Whereas Google sort of binds you to its own proprietary API and it’s own proprietary NoSQL data storage, Heroku gives you a wide array of options. For example, in this project I’m using PostgreSQL database hosted and maintained entirely on the service, and running in fully distributed mode.

Heroku’s main strength as a hosting platform is the promise of almost infinite scalability, but that’s not really why I set my service up there. I don’t imagine it becoming popular enough to warrant more than a single Heroku dyno and a dev-mode database plan. I mostly made it to solve my own problem and picked the platform because I wanted to learn more about it. I created my Heroku account couple of years ago, when the service was still young but never really did anything with it until now.

I must say it is interesting environment. Working with it is a little weird at first because it doesn’t always behave as you would expect a regular platform to behave. Because if it’s decentralized nature and its limitations there are little quirks you need to keep in mind – like the differences between the way your app runs locally when you test it, and the way it works when deployed to the Heroku cloud.

I fully expected it to be the most annoying part of the project, but it wasn’t. That distinction goes to Twitter. When I was writing the application I kept running into Twitter API rate limits. I didn’t know this when I set out to create this service but each Twitter app is limited to 15 API requests per minute for each unique Twitter user. This of course includes authentication and any look-ups you may want to do.

For example, in the early version of the app I would authenticate the user using the Twitter OAUth, then look up some information about the account that just signed in such as Twitter username, display name and the profile picture URL. This actually counted as five requests, so I could only refresh the page 3 times per minute. If I accidentally made one request too many, I would get locked out for 15 minutes during which all my requests would be rejected. I quickly learned to cache everything and use as few requests as possible but it was extremely annoying at first.

Anyway, the service is now up and running. The Twitter Cards integration isn’t there yet so for now you have to click on the link to see the spoilers. Eventually I’m hoping you will just be able to expand them. This will have double benefit – it will make it easier for users to consume the spoilers, and it will lessen the traffic on my end allowing me to keep the service on a cheep (and preferably free) Heroku plan.

As usual, comments and suggestions are appreciated. If you manage to break the service, please submit a bug report and I’ll get right on fixing it. Or, if you can code in Ruby feel free to fix the bug yourself and just issue a pull request for faster turnaround time.

This entry was posted in programming. Bookmark the permalink.

7 Responses to Spoilers in the age of Social Media and Ubiquitous Time Shifting

  1. My favorite part of your service is the domain name. That’s clever.

    If only I used Twitter, then I wouldn’t need to continue keeping my mouth shut about the identity of Luke’s (Skywalker, that is) father, out of fear of spoiling it for someone. 30 years is still too soon to risk it!

    Reply  |  Quote
  2. Peter SWITZERLAND Google Chrome Mac OS says:

    What? Snape kills Dumbledore?
    Now you’ve spoiled it…

    Reply  |  Quote
  3. Luke Maciak UNITED STATES Google Chrome Linux Terminalist says:

    @ Chris Wellons:

    Yeah, I was kinda bummed out when I found out that spoil.me and dontspoil.me were already taken, but then I remembered about the much underused .us domains. :)

    @ Peter:

    Yep! Also Hermoine turns out to be a dude in the last movie.

    Reply  |  Quote
  4. Mitlik UNITED STATES Mozilla Firefox Windows says:

    Full disclosure: I believe that the statute of limitations on spoilers never expires.

    You know what really grinds my gears? Folks who complain about TV spoilers in social media… several hours, or even days after the original air date of the episode…

    Luke, I never would have imagined you taking this stance. I would expect you to understand that, with the advantages of asynchronous communication and changes in video story distribution would mean, the etiquette surrounding the discussion of stories would need to evolve. I agree that consuming stories is a social experience. But you wouldn’t walk up to your friend and blurt “Can you believe Mr. Y did thing X?!” You would probe first, to make sure they had seen it. Why would you be any less courteous on social media?

    I love the underlying idea here, maintaining the spoiler shield is a commendable endeavor. Though I am sorry you were whined at enough to do something about it.

    Reply  |  Quote
  5. Luke Maciak UNITED STATES Google Chrome Linux Terminalist says:

    Mitlik wrote:

    But you wouldn’t walk up to your friend and blurt “Can you believe Mr. Y did thing X?!” You would probe first, to make sure they had seen it.

    Well, I think there is a little bit of a difference here. Social media is more like a water cooler type discussion. So I view the scenario more along the lines of this:

    You and few of your work buddies are standing in the lunch room getting coffee and discuss latest episode of, say, Game of Thrones. Suddenly another coworker appears in the lunch room and proceeds to get coffee.

    You continue your conversation, and the newly arrived person inches in to listen to what you are saying… He even chuckles a bit when you make a joke about something on the show. Then someone says something about the latest plot twist and the new guy looses his shit. He throws the coffee cup on the ground, says mean things about your mothers and storms out of the room.

    I guess my point is that Facebook and Twitter feeds are not actively piped into your neural cortex (yet) so they require a little bit of active participation. And yes, I do agree that you should exercise at least some common courtesy and try not to tweet blatant spoilers outright. I did get in trouble however for tweeting very vague things like “OMG, Carl is such a badass now!” or posting a spoilish reply in the Facebook comments (which I always assumed was OK since you usually have to expand the post to see all the comments anyway, and comments do not show up on timelines).

    You would think that people would be smart enough to avoid show related FB threads if they haven’t seen the latest episode, and maybe be careful scanning their feed the night the show airs.

    Sunday night I missed the 9pm EST showing of Game of Thrones. Did I get spoiled? Nope. I simply avoided /r/GameOfThrones and stayed off of Twitter and FB till 11pm when I was finally able to watch it. Same goes for Bioshock Infinite – I picked it up weeks after it came out, but I knew nothing about the plot. I was actually surprised the “hanging” scene from the TV commercials was not in the final game.

    But yeah, I get it. I understand the issue, which is why I’m always mindful of spoilers here on this site. And that’s why I created the service. :)

    Reply  |  Quote
  6. Adrian BELGIUM Google Chrome Linux says:

    Why don’t you get an Italian domain? Dontspoil.it

    Reply  |  Quote
  7. Luke Maciak UNITED STATES Mozilla Firefox Windows Terminalist says:

    @ Adrian:

    Damn… Didn’t think of that. That’s a really good one too. :)

    Reply  |  Quote

Leave a Reply

Your email address will not be published. Required fields are marked *