Month: July 2017

Who has two thumbs and ow, my thumb!

I've got some kind of carpal tunnel or arthritis or something going on, and my right thumb's been bothering me for days. I'm going to try and spend less time typing until it gets better.

Net Neutrality Day

Today's the Net Neutrality Day of Action.

Here's what I said about net neutrality during the open comment period in 2014, before the Title II rules passed, when the FCC was pushing a policy that would allow ISPs to charge websites for fast lanes:

This is exactly the kind of policy you get when you put a cable company lobbyist in charge of the FCC: a plan nobody but the cable companies could possibly want, and that seeks to make the Internet work like cable TV.

This plan has no benefit whatsoever to consumers. Cable companies demand extortion money from content providers; the providers who are willing and able to pay pass that cost on to their consumers (as Netflix has already done by raising its streaming subscription price), and the providers who aren't are put at a crippling disadvantage. You can bet the ever-increasing bottom dollar on your cable bill that if Comcast had had the opportunity to demand a premium from YouTube to stream video in 2005, we wouldn't be talking about YouTube today -- though maybe that would have been good news for Real Networks, as we'd probably still be limping along on the vastly inferior RealPlayer. Buffering...

This proposal is a government handout to the kind of companies that need it the least: monopolies and near-monopolies that already provide poor service at exorbitant prices, and suffer no market backlash for the simple reason that they provide a necessary service and have no competition.

Google doesn't want this. Microsoft doesn't want this. Netflix doesn't want this. Amazon doesn't want this. Consumers don't want this, and small businesses sure as hell don't want this. The only ones who DO want this are the cable companies who pick our pockets every month -- and their former employees like Chairman Wheeler.

And here's what I said during the open comment period this year, with the FCC preparing to repeal the Title II rules and, once again, proposing Internet fast lanes:

Seeking public comment? This is a farce. Chairman Pai heard exactly what the public had to say in 2014. The public responded, overwhelmingly, in support of net neutrality; indeed, the public interest was so high that the traffic brought down fcc.gov.

If Chairman Pai cared what the public thought, he would not be reversing a rule supported by the public in order to grant more power to internet service providers, some of the most despised companies in America. Nobody wants this except Comcast, AT&T, Charter, and Time Warner.

There is no free market competition in broadband Internet in America. There is no incentive for ISPs to compete on price or on service. We, as Americans, are a captive audience; our only choices are "use whatever ISP is available at our address" and "try to participate in twenty-first century America without Internet access".

We've already seen AT&T prioritizing its own traffic and Comcast banning protocols it didn't like. We need net neutrality protections to prevent predatory, monopolistic ISPs from engaging in that behavior. This is obvious to every American who's seen their monthly bill go up while the quality of service goes down.

But Chairman Pai has made it abundantly clear that he doesn't care what the American public has to say. If he did, he wouldn't even be considering repealing net neutrality.

I was wrong about Wheeler. He backed away from the fast-lane proposal, and passed Title II regulation. It wasn't perfect, but it was better than I ever thought we'd get.

I don't think I'm wrong about Pai. I'd love to be, but I think the fix is in. Pai doesn't give a fuck what the American public has to say.

But it's not about Pai. Pai won't last forever. Trump won't last forever. Even if the Republican majority in Congress sticks around, they're going to have to face their constituents sooner or later. And while net neutrality is a partisan issue on Capitol Hill, it's got broad bipartisan support everywhere else.

I don't think today's protests are going to make a damn bit of difference to Pai. But this is a long game. We need to keep the pressure on.

And hey, I've been surprised before. I thought SOPA and the TPP were foregone conclusions too. Maybe I'll be pleasantly surprised again.

Tracking

I wrote a post about VPNs a few months back, referring to the recent repeal of Obama-era regulations that would have prevented ISPs from selling customer browsing history.

There's a common refrain I've seen from people who favor the repeal, both in the government and in Internet comments sections: "Google and Facebook track you and sell your data, and the government doesn't stop them from doing it, so it's not fair to stop your ISP from doing it!"

Now, this argument is fundamentally dishonest, for the following reasons, off the top of my head:

  • Your ISP sits between you and every single site you visit. Google and Facebook have extensive tracking operations, but not that extensive.

  • You can use the Internet without using Facebook or Google. It may not be easy, but it's possible. You can't use the Internet without your ISP.

  • Google and Facebook's business model is that they provide a service and, in exchange, you allow them to gather your personal data and resell it to third parties. Your ISP's business model is that it provides service and, in exchange, you pay them eighty fucking dollars a month. Did I say eighty? They just kicked it up to one-thirty, if you want unlimited data.

    When you give your personal data to Facebook or Google to sell to third parties, you get their service in return. When you give your personal data to your ISP to sell to third parties, you get fucking nothing in return, because you're already paying your ISP money in exchange for Internet service. Is your ISP going to lower your bill in exchange for taking your personal information to sell to third parties? LOLno.

  • Google and Facebook have competitors. Those competitors don't have the dominant market position that Google and Facebook do; hell, maybe they're just plain not as good. But they exist. They're options.

    There is no significant broadband competition in the US. If I don't like my ISP, I can't just switch to another one, because there is no other one available at my address. My choices consist of Cox, no Internet, and moving.

    There's no incentive for your ISP to behave ethically. There's no incentive for your ISP to charge you fairly. There's no incentive for your ISP to provide quality service. My ISP is a monopoly. Yours probably is too. Or, at best, it might have one competitor that does all the same shit.

  • Google and Facebook have pages where you can opt out of tracking.

But. Despite the intellectual dishonesty of the "but Google and Facebook track you!" argument, there is a kernel of truth in there: yes, Google and Facebook track you, yes it's difficult to avoid that tracking, and no, there are no regulations in place to protect your data. This is a problem.

So, shortly after writing that post, I removed the Google Analytics code from this site. And now I've also updated the site so that the fonts it uses are hosted here at corporate-sellout.com, not called from Google Fonts (hat tip to the Disable Google Fonts WordPress plugin). I'm still using a Google Captcha on the Contact page for now, but I'm looking at alternatives. Plus, there are YouTube videos embedded on this site...and, well, there's nothing I can really do about preventing Google from tracking you when you load YouTube videos. Sorry about that.

I'm also planning on adding SSL to the site, eventually, but I haven't gotten around to it yet.

This blog's not a business. Occasionally somebody buys something through an Amazon Associates link, or buys my book (thanks!), but I've got a day job; I'm not here to make money. I write stuff here because I like to write stuff. Sometimes people like it, and that's cool, and it's cool to know that people are reading. But that's as far as my interest in analytics goes.

I don't resell data; I don't do SEO or A/B headlines or clickbait or any other kind of crap to try and drive people here -- hell, I hate all that shit. But I like looking at site stats once in awhile to see where people are coming from, where somebody's mentioned me, and to laugh at search terms like "did stan lee bone at jack kirby's wife".

So I'm looking for a new stats package. Server-side; just for me, not Google.

Meanwhile, I am looking for ways to use Google as little as possible, not just on this site but in general. I think I can probably get a few more posts out of that subject.

Hide Techdirt Comments

Updated 2022-02-28: Updated script for the new Techdirt comment engine.


Updated 2021-04-30: Fixed a bug that was preventing some replies from being hidden.


Updated 2019-09-11: Minor update because the site layout has changed slightly and the old version was no longer working.


Updated 2019-04-11: General cleanup; change to OOP.

Remove some techniques that are no longer needed since recent Techdirt update; add handling for some new types of predictable troll behavior.

Better blocking of flagged users who aren't logged in.


Updated 2018-08-19: Hide comments that have already been hidden by user flagging (this is mostly useful if the hideReplies boolean is set true).


Updated 2018-08-15: Added hideLoggedOut. If set true, then the script will hide any user who isn't logged in, unless their name is in the whitelist array.

Added hideReplies. If set true, then when the script hides a comment it will also hide all the replies to the comment.

If you set both hideLoggedOut and hideReplies to true, then the Techdirt comments section gets much quieter.


Updated 2018-08-09: Some doofus has been impersonating me. Script will now automatically flag and hide posts by fake Thad.

In addition to hiding posts if their subject line is too long, the script will now also hide posts if the username is too long. Additionally, the script can automatically flag posts if the subject or username exceeds a specified length.

This thing's gotten complicated enough that I think it's probably subject to copyright now. I've added a license. I chose a 3-Clause BSD License.


Updated 2018-06-20: Ignore mixed-case and non-alpha characters.


Updated 2018-03-06: Fixed case where usernames inside links were not being blocked.


Updated 2018-03-04: Added function to hide long subject lines, because some trolls like to write manifesto-length gibberish in the Subject: line.

There is now a maxSubjectLength variable (default value: 50). Any subject line exceeding that length will be hidden. If you reply to a post with a subject line exceeding that length, your reply's subject line will default to "Re: tl;dr".


Updated 2017-07-12: Added @include.


In my previous post, I mentioned that I spend too much of my life responding to trolls on Techdirt.

With that realization, I whipped up a quick Greasemonkey/Tampermonkey script to block all posts from specified usernames.

// ==UserScript==
// @name          Hide Techdirt Comments
// @namespace     https://corporate-sellout.com
// @description	  Hide comments on Techdirt, based on user and other criteria.
// @include       https://www.techdirt.com/*
// @require       https://c0.wp.com/c/5.9.1/wp-includes/js/jquery/jquery.min.js
// ==/UserScript==

const $ = jQuery;

// Boolean settings:
// if true, hide all posts from users who aren't logged in
const hideLoggedOut = true,

// if true, hide all replies to hidden posts
  hideReplies = true;

// List of users whose comments you want to hide -- collect 'em all!
const blacklistedUsers = [
  'btr1701',
  'Koby',
  'Richard Bennett'
],

// If an anonymous post begins with one of these strings, hide it
blacklistedStrings = [
  'out_of_the_blue',
  'Nothing to hide, nothing to fear'
],

// List of users whose comments you don't want to hide
whitelistedUsers = [
  'Chip',
  'Thad'
];

// global variable for storing gravatars of non-logged-in posters who have been blocked
let blockedGravatars = [],

// global variable for storing comments that aren't hidden
comments = [];

// check all non-hidden comments for a blocked gravatar
// (check each time a gravatar is blocked)
function checkCommentsForBlockedGravatar(blockedGravatar) {
  for(let i=0; i<comments.length; i++) {
    if(comments[i].gravatar === blockedGravatar) {
      comments[i].gravatarBlocked = true;
      comments[i].removeComment();
    }
  }
}


// Comment class
// Constructor
function Comment(node) {
  this.container = node;
  this.body = $('> .comment-body', this.container);
  this.nameBlock = $('.comment-author', this.body);
  this.name = $('> .fn', this.nameBlock).text();
  this.linkNode = $('> .url', this.nameBlock);
  this.loggedIn = this.linkNode.length > 0
    && this.linkNode.attr('href').startsWith('https://www.techdirt.com/user/');
  this.gravatar = $('> img', this.nameBlock).attr('src');
  this.gravatarBlocked = false;
  this.flagBtn = $('.report-button', this.body);
  this.alreadyHidden = this.container.hasClass('flagged');
  this.alreadyFlagged = this.flagBtn.hasClass('has-rating');
  this.postContent = $('.comment-content', this.body).text().trim();
  
  // If I click on the "Flag" button, remove the comment
  var that = this;
  that.flagBtn.one('click', function() {
    that.removeComment();
  });
}

// Functions
Comment.prototype = {
  constructor: Comment,
  
  checkForBlockedGravatar: function() {
    if(this.loggedIn) {
      return false;
    } else if(this.gravatarBlocked !== true) {
      // only need to find gravatar in blockedGravatars array once;
      // once this.gravatarBlocked is set true, then it will always be true.
      this.gravatarBlocked = blockedGravatars.includes(this.gravatar);
    }
    return this.gravatarBlocked;
  },
  
  blockGravatar: function() {
    this.gravatarBlocked = true;
    blockedGravatars.push(this.gravatar);
    checkCommentsForBlockedGravatar(this.gravatar);
  },
  
  removeComment: function() {
    if(hideReplies === true) {
      this.container.remove();
    } else {
      // replace comment with 'removed'
      // -- because replies will still be visible, this is necessary
      // so you can tell there's a missing post that they're replying to.
      this.body.text('removed');
    }
    if(!this.loggedIn && !this.gravatarBlocked) {
      this.blockGravatar();
    }
  },
  
  badStart: function() {
    for(let i=0; i<blacklistedStrings.length; i++) {
      if(this.postContent.startsWith(blacklistedStrings[i])) {
        return true;
      }
    }
    return false;
  },
  
  check: function() {
    if(
      this.alreadyHidden
      || this.alreadyFlagged
      || this.checkForBlockedGravatar() === true
      || blacklistedUsers.includes(this.name)
      || (this.loggedIn === false && hideLoggedOut === true && !whitelistedUsers.includes(this.name))
      || (this.name === 'Anonymous Coward' && this.badStart())
    ) {
      this.removeComment();
      return true;
    }
    return false;
  }
};

$('div.comment').each(function() {
  // skip comment if it's already been removed
  if(document.contains($(this)[0])) {
    const cmt = new Comment($(this));
    if(cmt.check() === false) {
      comments.push(cmt);
    }
  }
});

License

Copyright 2017-2021 Thaddeus R R Boyd

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Further Thoughts

(Note: The script was much smaller when I originally wrote this part of the post.)

This is a blunt instrument; it took about five minutes to write. It lacks subtlety and nuance.

Blocking all anonymous posters on Techdirt is not an ideal solution; most anons aren't trolls. (Most trolls, however, are anons.) I apologize to all the innocent anons blocked by this script.

I could make the script more precise. Techdirt's trolls are creatures of habit with certain noticeable verbal tics (more on that below); if I had a good parser, I think I could whip up a scoring system that could recognize troll posts with a high degree of accuracy.

The question is, how much time do I want to spend on that?

On the one hand, "five minutes in a text editor" is the appropriate amount of time for dealing with forum trolls. Anything else seems like more effort and attention than they deserve.

On the other hand, it's a potentially interesting project, I've always wanted to spend some time studying natural language processing, and any programming project is time well-spent if it teaches you a new skill.

So I haven't decided yet. Here's the script as it stands, in its initial, blunt-instrument-that-took-five-minutes form. If I update the script, I'll update this post.

Chip Tips

Lastly, as I can no longer see anonymous posts, this means I will likely have to give up my beloved sockpuppet, Chip, the man who hates all government regulations and loves to eat leaded paint chips. To anyone and everyone else who wants to keep the spirit of Chip alive, you have my blessing to post under his name.

A few tips on how to write as Chip:

  • Never use the backspace key.
  • Remember to add random Capital Letters and "quotation marks" to your posts, in Places where they "don't" make Sense!
  • Most sentences should end with Exclamation Points!
  • I told you So!
  • I have "lots" of Solutions! So many I can't Name a single "one"!
  • Sycophantic Idiots!
  • Every Nation eats the Paint chips it Deserves!

Boy, my regular readers are going to have no fucking idea what I'm talking about in this post.

Come back tomorrow; I plan on having a post about online privacy that should be a little less niche.

Fanmail from Some Flounder

I've been meaning to blog more.

I like blogging. I like writing about shit. People seem to enjoy reading it. My friends keep telling me I should start blogging again (hi Friday!).

And I've been reading Nathan Rabin's Happy Place and really enjoying what Rabin has to say, and his enthusiasm about just being able to write about whatever he feels like.

But the kicker? Oh man.

The other day, I was checking replies to my Disqus posts.

And -- in response to a post I had written in the AV Club comments section five months ago, concerning the Black Panther: World of Wakanda comic -- some nice young fellow had written this:

Your blog sucks. Go back to sucking Ken Penders' dick.

Sonic the Hedgehog fandom is weird, you guys.

So okay, dude's obviously a troll; a quick gander at his posting history shows basically everything else he's ever written on Disqus has been arguing with atheists.

But the Penders thing? That's not random. It's far too specific.

My most recent Penders post was in 2015. At the time of this writing, it is on page 4 of this blog. So this is not a guy who decided, at random, to troll me, clicked on my name, and picked one of the posts on my blog to talk shit about.

And neither is this a guy who just now saw my Penders posts -- saw a link to them, found them on Google, whatever --, got incensed by them, and decided to write me a nastygram. Even assuming the gentlemen in question failed to notice the "Contact" link at the top of the page and instead, inexplicably, decided to look up my Disqus profile, he would have replied to one of my recent Disqus posts, not one that was five months old.

No. This is a dude who saw my posts about Ken Penders at some earlier date. Maybe as far back as 2013. And remembered them. And remembered my name. And, when he was randomly reading the comments section of an AV Club article, saw my name and felt the need to tell me off because, four years ago, I wrote some blog posts explaining that Ken Penders had a valid legal case against Archie Comics and Sega (or, as it's known in Sonic Fanboy-ese, "sucked Ken Penders' dick").

You know what? That is weirdly fucking flattering. I made an impact on this guy. People read my blog, and it matters to them.

I mean, sure, this guy is a troll and, clearly, a Sonic the Hedgehog fanboy -- those dudes are intense. I am sure he is not a representative member of my audience.

But the thing about writing whatever the hell I feel like is, I never know what's going to resonate with people.

The most attention I've ever gotten was when the online comic book press picked up on my posts about the never-finished-or-published 1990s Final Fantasy comic -- which, at that point, were already more than two years old.

And, in that same vein, my Final Fantasy 7 retrospective series continues to be popular. (Or at least did the last time I looked at my site stats. I've removed Google Analytics from this site -- that's a subject for another post -- but I'd like to get a new stats tool set up, because I like seeing what people are reading, where they're coming from, and what search terms they're using to get here.)

But these creators' rights pieces seem to get a pretty good amount of attention, too. People used to link my post on Marvel v Kirby all the time. And I once got a very nice E-Mail from Marc Tyler Nobleman for my Not My Batman post and its recognition of Bill Finger. (By the way: Batman & Bill is good; you should watch it.)

And so I'd like to get on back to yammering on about just whatever the hell it is I feel like yammering on about at the moment. Because what the hell; if I don't yammer here, I'm just going to yammer somewhere else, and frankly I spend far more time responding to trolls in the Techdirt comments section than a healthy person should.

I don't know if I'll manage 5-day-a-week posting like I used to. Maybe I will, maybe I won't. (Today I am posting on a Saturday. Whee!)

Course, if I do start blogging regularly again now, there's probably something to psychoanalyze in my doing it in response to our good friend Mr. "Your blog sucks" up there. I think humans are wired to notice criticism more than praise, and I suppose I'm no exception.

But what the hell; like I said, I've been planning to get back to blogging for awhile now anyway. And as criticism goes, I'm pretty sure this is the most fun hate mail I've ever gotten. Even better than the last unsolicited hate mail I got from a disgruntled Sonic fan, which was over 20 years ago and, in keeping with the whole "casual homophobia" theme, contained the phrase "You hump Robotnik's ugly butt!"

Sonic the Hedgehog fandom is weird, you guys.