On hosting a video

When I published my one and only video on how to use Text Collector, YouTube was friendlier to small-time creators than it is today. In the end cards, for example, I could link to my Play Store listing, but that’s no longer allowed. My end cards are grandfathered, but I can’t change them unless I want to lose the link. Much worse, a couple years ago, Google started playing advertisements before my video, a significant change quietly tucked into a November 2020 terms-of-service update:

Ads can now appear on videos from channels not in the YouTube Partner Program (YPP), and we will begin gradually placing ads on brand safe videos… Because these channels are not in YPP, there is no creator revenue share, but creators can still apply to YPP once they hit the eligibility criteria, which remains the same.

For now, YouTube “Partners” can still demonetize videos if they like, but I don’t qualify for the YouTube Partner Program and probably never will. So viewers are stuck with seeing a pre-roll advertisement on my video and there’s nothing I can do about it short of taking down the video.

This isn’t really surprising. Google isn’t much more than an advertising broker, so they pepper their properties with ads. Hosting isn’t free and it doesn’t bother me that they make a little money on ads in the sidebar, but interrupting my content is another level of nuisance.

This is the same video that appears at the top of my listing on the Google Play Store for Legal Text Collector.

Play Store listing

Google’s strategy being a Web of monopolies, they require that the video on my Google Play listing be hosted on YouTube and their own guidelines concur that I shouldn’t have ads:

Disable ads for your video to be shown on Google Play. When users browse Google Play, we want them to see a video about your app, not someone else’s ad, as this can be confusing for users.

Wish I could disable ads, Google. I guess one hand can wash the other without knowing what the other’s doing.

So what are my alternatives?

YouTube’s stranglehold on Internet Video makes removing my video from YouTube unrealistic. In addition to YouTube, I’ve hosted the same video elsewhere now for more than a year, yet a Bing video search for “Legal Text Collector” only finds the YouTube version.

Bing shows 'There are no results for "legal text collector" -site:youtube.com'

I considered adding a block of offensive terms to the video description, hoping that the Algorithm would remove ads in the name of brand safety, but more likely I’ll just get unsavory advertisers.

No, despite the apparent futility, the best I can do is give people some alternative place to watch.


Vimeo is the best-known competitor, in the sense that a gnat is a competitor to an elephant, and they promised not to do this:

Vimeo never puts ads before, after, or on top of videos. However, we do have limited display advertising below the player on some vimeo.com pages.

They’re targeting those of us who wants to host a video that isn’t a product unto itself, but an extended advertisement for a product, so I put my video on Vimeo.

How did it do? In its three years on YouTube, my original video accumulated just shy of fifty thousand views, or roughly thirty per day. In nearly two years on Vimeo, it’s received twenty-eight, total.


I can drop the Vimeo link into a WordPress article and WordPress shows the video, easy:

But wait. In this blog, I don’t host pictures on a third party site: I can upload pictures directly to WordPress, I should be able to do the same with videos. And indeed I can, but it’s awkward. On WordPress.Com, the Classic editor lets me inline a video with the wpvideo shortcode:

But there are a couple problems. First, it doesn’t let me upload my .webm version, for “security reasons.” For those readers not steeped in computer jargon, “security reasons,” is an idiom  meaning, “can’t be bothered.”

WordPress.com’s rejection of .webm is a merely a nuisance; the important problem is that the shortcode provides no way at all to add captions1. So I have to abandon the shortcode and though I prefer to pretend the new “Gutenberg” editor doesn’t exist, Gutenberg does at least let me insert a video with captions:

At least, it lets me add captions to a video today. When I first drafted this post in 2021, it didn’t.

For a long time, the only way to add captions on a generic WordPress installation was via a tortuous workaround. With that in hand, I followed the steps its author generously called “needlessly opaque,” and I found myself blocked as WordPress.Com banned subtitle track upload, again for “security reasons.”

I wonder what they have to say for themselves.

Diversity typically includes, but is not limited to, differences in … physical disabilities and abilities… we welcome these differences and strive to increase the visibility of traditionally underrepresented groups.

we’ve established a Diversity and Inclusion committee


Captions on a video aren’t an esoteric issue, people. Sadly, the eight years between WordPress getting video hosting ability and being able to add captions on WordPress.Com is all too typical. Consider that to this day, Medium doesn’t allow tables, which is why so many Medium articles use images where they ought to use tables; for that matter, Medium didn’t even allow alt text on images for years. Why not punch a blind guy while you’re at it.


But wait. I have a website for Legal Text Collector already. It serves files and videos are nothing but files. Browsers display them with a simple tag:

<video controls width=600 poster=_static/video/youtube_banner.png >
<source src=_static/video/howto.webm type=video/webm >
<source src=_static/video/howto.mp4 type=video/mp4 >
<track label="English" kind=captions srclang=en src=_static/video/howto-en.vtt >

Html doesn’t yet directly support “adaptive bitrate” streaming: the way that a video starts fuzzy and then gets more clear as the buffer catches up, but I don’t think I need it and if I really wanted it, there are JavaScript libraries out there that can do it.

Small price to pay for avoiding the web of arbitrary policies when you host elsewhere.


  1. In the time since I drafted this article, they seem to have retrofitted the shortcode to use the captioned video. I maintain this was embarrassingly late, but I’m happy to see a positive move.

Archive links

Schroot cheatsheet

I don’t always install software whose idea of installation instructions is curl ... | sudo, but when I do, I jail it. In this case, I’m setting up a chroot for Nodejs:

sudo apt install schroot debootstrap
sudo mkdir /srv/npm-chroot
sudo debootstrap stable /srv/npm-chroot
sudo mkdir -p /srv/npm-chroot/home/joe/projects
sudo chown -R joe:joe /srv/npm-chroot/home/joe/

In these examples, “joe” is my username.

The “s” in “schroot” stands for “securely,” but it might as well be “simple” because “schroot” handles fiddly bookkeeping tasks for setting up your environment, based on its config file.

Edit /etc/schroot/schroot.conf:

description=npm projects

Normally, schroot mounts /home from the host as /home in the chroot. I don’t want programs in jail to muck about with my home on the host though, so I edit the setup.fstab option. Its default lives in /etc/schroot/default/fstab.

For my purposes, the schroot’s default configuration is a good start, so:

sudo mkdir /etc/schroot/joe-projects
sudo cp /etc/schroot/default/fstab /etc/schroot/joe-projects/

Edit /etc/schroot/joe-projects/fstab, removing the /home line and adding instead:

/home/joe/projects /home/joe/projects none rw,bind 0 0

Finally, enter the chroot, as root.

schroot -c npm -u root

I like to install sudo so it feels like a normal Ubuntu:

# now in the schroot
apt update
apt install sudo

Then log in as my normal user:

# in the host
schroot -c npm

From here I can install npm in relative isolation; this is not sufficient for isolating malicious software, but it’s a nice way to avoid inconsiderate programs from pooping all over your system.

Why Is Worse Than How

When we use software, we operate in a binary tree. At the root, we could be in success or failure mode, where we are either doing whatever we meant to do, or distracted by some idiosyncrasy of our tool. In success mode, our productivity flows. We could be CTRL+Spacing to auto-complete or ESC, colon, w, q-ing to save and exit, and doing what we meant to do.

In failure mode, we have another couple of options:

  1. Why does this suck?
  2. Where is the option to make a zero-based list in WordPress?

I want a zero-based list because it appeals to my binary metaphor. The first item, zero, equals bad software. It is the tool that you wish you could will into nonexistence. You imagine the deepest levels of hell holding those who inflicted this impediment on you.

While you use them, you usually do not think about good tools. Your drill lets you swap bits without thinking about the drill. You only wonder whether this bit will work for that material and do you want 5/16 or 1/4?

Sometimes your tool cannot meet the challenge. You want to bore a new dryer vent through your cinder block or put drywall around the entirely bare laundry room and your minuscule battery-powered appliance will fight valiantly and fail. This is where you leave the text editor and open the IDE, but it is not a failure mode; you have simply exceeded your tool’s capability, and you need to go get that spiffy hammer drill.

You encounter tool failure mode when you do not immediately know how to accomplish your immediate task with the tool you are using, and you do not immediately have another tool that does it. You now find yourself in one of two camps, but you have no idea  which:

  1. Your tool cannot do it
  2. You do not know that ESC, y, y copies a line

So you have to feel your way through, based on your prior experience with that package. In the good programs, you, like the Little Engine, believe that you can.