OS theme
Dark theme
Light theme
My iPhone battery
My iPhone Wi-Fi
Current motion
Click for current location
๐Ÿ‘ˆ๐Ÿผ ๐Ÿ•ธ๐Ÿ’ ๐Ÿ‘‰๐Ÿผ
Skip to main content

Learn more about me. Email me at

cleverdevil

cleverdevil

cleverdevil

cleverdevil

cleverdevil

cleverdevil

www.npmjs.com/~cleverdevil

cleverca.st

trakt.tv/users/cleverdevil

mastodon.social/@cleverdevil

$cleverdevil

 
 
 
 
 
 
 
 

Normal is a Privilege

4 min read

I just wish things would get back to normal.

Its a refrain weโ€™ve all heard since the emergence of COVID-19. The world has been thrown into chaos, our way of life has been threatened, and many people have lost their jobs. The best minds in medicine and science are encouraging life-altering precautions like social distancing, wearing masks, and staying home. People are having to adapt to this โ€œnew normalโ€ quickly, working from home, perhaps balancing the pressures of parenting children, or taking care of family members who are at higher risk. While its obviously the right thing to do to be cautious, and not re-open the country too quickly, protestors have taken to the streets to demand that things go back to โ€œnormal,โ€ even if it puts others at risk.

Life in a global pandemic is not comfortable, convenient, or fun. We can all agree on that. The โ€œnew normalโ€ sort of sucks.

But, what of the old normal? Well, consider George Floyd.

Last week, our chaotic world erupted into further chaos with the brutal murder of George Floyd by a Police Officer in Minneapolis. Make no mistake, I absolutely believe that this was a murder, and one that was the direct result of a fundamentally flawed system that demands reform. There must be justice for George Floyd, and it cannot just come in the form of punishment for the killers, it also must come in the form of radical, systematic change.

For many people, going back to โ€œnormalโ€ is, on the surface, quite appealing. Returning to our privileged lives, where we feel safe to go out to eat, walk with our friends and family at shopping malls, gather in our places of worship, and to do it all with a strong sense of securityย โ€“ย after all, the police, and all other systems of power, are there to protect us.

But, for a huge portion of our country, โ€œnormalโ€ means avoiding the police because they cannot be trusted to protect you. It means less opportunity at work. It means overcoming an unequal system to fight for the same benefits that others readily receive.

You know what? The old normal sucks, too.

It is no surprise to me that many people who are calling to โ€œre-open our countryโ€ in the midst of a global pandemic are also telling protestors to calm down, or to โ€œtone downโ€ their methods of protest. These demands often come from a position of privilege; of preserving a system that fundamentally benefits them at the expense of others. They like things just the way they were.

But, this time, we canโ€™t let the cries for a โ€œreturn to normalcyโ€ win. As an ally, I cannot sit idly by, or demand that the oppressed respond to their generations-long oppression with calm, non-violent protest. Itโ€™s been nearly 30 years since the police brutalization of Rodney King, and itโ€™s clear that nothing has fundamentally changed in that time. Peaceful protest isnโ€™t enough. Voting isnโ€™t enough. Patient conversation isnโ€™t enough. Incremental change isnโ€™t enough. Now, I am not advocating for violence, but I am advocating for persistent, enduring commitment to driving change.

We must listen to what Martin Luther King Jr. said in his Letter from a Birmingham Jail in August of 1963:

I have almost reached the regrettable conclusion that the Negroโ€™s great stumbling block in the stride toward freedom is not the White Citizens Councillor or the Ku Klux Klanner but the white moderate who is more devoted to order than to justice; who prefers a negative peace which is the absence of tension to a positive peace which is the presence of justice; who constantly says, โ€œI agree with you in the goal you seek, but I canโ€™t agree with your methods of direct actionโ€; who paternalistically feels that he can set the timetable for another manโ€™s freedom; who lives by the myth of time; and who constantly advises the Negro to wait until a โ€œmore convenient season.โ€

So, fellow white people, it is time to step up. Acknowledge your privilege, speak up, and demand radical, fundamental change. Amplify the voices of people of color. Fearlessly support Black Lives Matter. Embrace the fact that creating a more just, equitable, and fair society likely means that you will need to sacrifice your own privilege for the benefit of others.

Letโ€™s not go back to normal. Letโ€™s create a better normal.

 
 
 
 
 

Hey, Siri... Don't Bother Daddy!

2 min read

In the new world, where many of us are working 100% from home, it can be really difficult to find quiet and focus. Distractions abound, especially if you have kids. As I mentioned yesterday, closed office doors don't seem to get the message across to my children, so I thought it would be great if I could have a digital sign on my offce door. Well, I made it happen.

I'm really happy with how it turned out! How did I do it? It was pretty simple, really. I had a really old Amazon Fire tablet that hasn't been used in years, as the kids have both transitioned over to iPads. So, I charged it up, installed a "full screen browser" app and a hack that lets you keep the screen awake perpetually. Then, I wrote a quick web service to track state, and hooked it into HomeKit and Siri using Homebridge and this excellent plugin.

Tada! Now I can toggle the state of the sign using just my voice, or with automations. I can even automatically flip the status to "Don't Bother Daddy" when my calendar shows that I am scheduled for a meeting.

Update: the source code is available for the web service.

 
 
 
 
 
 

๐Ÿ“บ Automatically Downloading YouTube Content to Plex

4 min read

I have a small number of content creators that I enjoy following on YouTube, but I fundamentally dislike YouTube's shady algorithms, poor user experience, and invasive ads. These days, most of the content I watch is stored on my Plex server, so I decided to find a way to automatically download and add my favorite YouTube content to my Plex server. After a bit of searching, I found this guide from DIY Futurism which outlined a nice approach to the problem.

My Plex YouTube library

My approach is similar, and makes use of the excellent youtube-dl project, along with a personal media scanner and personal media agent for Plex. I run my Plex Media Server on my Synology DS1019+ NAS, which I absolutely adore, so that's where I set everything up. The process was quite simple:

  1. Installed the aforementioned personal media scanner and personal media agent in my Plex server and enabled them in my Plex server settings.
  2. Created a "TV Shows" library in Plex that uses the scanner and agent. I called mine "YouTube."
  3. Installed youtube-dl on my Synology. I already have Python installed there, so it was as simple as running pip install youtube-dl.

At this point, I was ready to create a script that would download the content and add it to Plex. The key is to take advantage of all of the great features in youtube-dl, including the ability to provide a "batch" file containing target channels, the ability to embed metadata and download thumbnails, and an "archive" feature which tracks what has already been downloaded. My script is a variation on the one from DIY Futurism:

#!/bin/sh

cd /var/services/homes/admin/Media/YouTube
/volume1/@appstore/python3/bin/youtube-dl --playlist-reverse \
ย  --dateafter now-2weeks \
ย  --download-archive /var/services/homes/admin/Media/YouTube/downloaded.txt \
ย  -i \
ย  -o "%(uploader)s/%(playlist)s/%(playlist)s - S01E%(playlist_index)s - %(title)s [%(id)s].%(ext)s" \
ย  --add-metadata \
ย  --write-thumbnail \
ย  --batch-file=/var/services/homes/admin/Media/YouTube/channel_list.txt

Let's walk through the script. First, I change directories to where I want all of my content downloaded. This is the same directory that I configured in Plex for my "YouTube" library that I created earlier. Next, I specify that I want to process the videos in the playlist chronologically (in "reverse"). I also specify that I only want to download videos that were published in the last two weeks using the --dateafterย parameter. You can tweak this to download as much or as little of the content as you'd like.

Next, I point youtube-dl to a text file containing a list of all content that I've already downloaded using the --download-archive parameter, which youtube-dl will automatically maintain for me. Because I am limiting my downloads to the last two weeks, I did need to pre-populate this text file with all of the historical content to avoid having to scan through thousands of videos on each run of the script.

Next, I specify a format for where to store the downloaded content and what to name the files and directories, instruct youtube-dl to embed metadata, and to write a thumbnail image as well. This data will be used by the personal media scanner and agent to help Plex index the content.

Finally, I specify a "batch file," which contains a list of channels that I want to download content from. The format is simply one YouTube URL per line.

After an initial run that I performed manually, I scheduled the script to run every four hours, and now my Plex server is my central location for my YouTube content.