Skip to content

Instantly share code, notes, and snippets.

View wrboyce's full-sized avatar

Will Boyce wrboyce

View GitHub Profile
@wrboyce
wrboyce / gist:2e28352faa56ed419890c8a8483f934e
Created September 19, 2020 15:54
YouTube PiP Bookmarklet
javascript:(function()%7Bdocument.body.innerHTML%20%3D%20'%3Ch1%3ELoading...%3C%2Fh1%3E'%3Bconst%20url%20%3D%20new%20URL(window.location.href)%3Bconst%20videoId%20%3D%20url.searchParams.get('v')%3Bconst%20xhr%20%3D%20new%20XMLHttpRequest()%3Bxhr.open('GET'%2C%20%60https%3A%2F%2Fwww.youtube.com%2Fget_video_info%3Fvideo_id%3D%24%7BvideoId%7D%26el%3Ddetailpage%60%2C%20false)%3Bxhr.send(null)%3Bconst%20response%20%3D%20decodeURIComponent(xhr.responseText).split(%22%26%22).filter((line)%20%3D%3E%20line.startsWith(%22player_response%22))%5B0%5D.split(%22player_response%3D%22)%5B1%5D%3Bconst%20info%20%3D%20JSON.parse(response)%3Bconst%20streams%20%3D%20info.streamingData.formats.sort((s1%2C%20s2)%20%3D%3E%20s1.height%20%3C%20s2.height)%3Bdocument.body.innerHTML%20%3D%20%60%3Cvideo%20style%3D%22width%3A%20100%25%3B%20max-width%3A%20500px%3B%22%20id%3D%22video%22%20controls%3D%22controls%22%20class%3D%22video-stream%22%20x-webkit-airplay%3D%22allow%22%20autoplay%20playsinline%20src%3D%22%24%7Bstreams%5B0%5D.url%7D%22%
@wrboyce
wrboyce / Dockerfile
Created February 6, 2020 13:56
Dockerfile experimental syntax for properly cached cargo builds
# syntax=docker/dockerfile:experimental
FROM rust:slim as builder
RUN apt-get update && \
apt-get install musl-tools -y && \
apt-get clean && rm -rf /var/lib/apt/lists/* && \
rustup target add x86_64-unknown-linux-musl
COPY . .
RUN --mount=type=cache,target=/usr/local/cargo,from=rust:slim,source=/usr/local/cargo \
--mount=type=cache,target=target \
RUSTFLAGS=-Clinker=musl-gcc \
@wrboyce
wrboyce / os-masterclass.md
Created October 24, 2019 08:43 — forked from ZubairLK/os-masterclass.md
os-masterclass

balenaOS Masterclass

Prerequisite Classes

This is the first balenaOS masterclass.

There are no prerequisites apart from basic linux knowledge and terminal access to a device running balenaOS.

Masterclass Type: Core Maximum Expected Time To Complete: 60 minutes

caff () {
if [ -z "$(docker images -q caff)" ]; then
# shellcheck disable=SC2016
echo 'Bootstrapping `caff` docker image'
docker run \
--detach \
--name caff \
debian \
bash -c 'apt-get update -y && apt-get install -y man signing-party && apt-get clean' &>/dev/null
while [ -n "$(docker ps -qf name=caff)" ]; do
switch:
- platform: template
switches:
lounge_tv:
friendly_name: Lounge TV
value_template: "{{ state_attr('switch.lounge_tv_plug', 'current_power_w') | float > 25 }}"
icon_template: mdi:television
turn_on:
service: remote.turn_on
entity_id: remote.lounge_tv

72 Parties!

sqlite> select * from parties;
id          name
----------  ----------
1           Lab
2           Con
3           PC
4           UKIP
@wrboyce
wrboyce / random_preroll.py
Created March 13, 2017 17:58
Plex Random Pre-Rolls
#!/usr/bin/env python
import random
import sys
import urllib
import requests
from lxml import etree
@wrboyce
wrboyce / nhc2016.xml
Created September 15, 2016 20:41
NHC 2016 Gold Medal Winners
<?xml version="1.0" encoding="ISO-8859-1"?><RECIPES>
<RECIPE>
<NAME>Barb&#39;s Hef</NAME>
<VERSION>1</VERSION>
<TYPE>All Grain</TYPE>
<BREWER>Nick Corona</BREWER>
<ASST_BREWER></ASST_BREWER>
<BATCH_SIZE>18.9271680</BATCH_SIZE>
<BOIL_SIZE>25.4333820</BOIL_SIZE>
<BOIL_TIME>60.0000000</BOIL_TIME>
@wrboyce
wrboyce / sync_github_stars.py
Created November 3, 2015 15:19
sync_github_stars.py
#!/usr/bin/env python
""" Fed up with GitHub stars being essentially useless, I decided to give them
some purpose.
Run this script occasionally (via cron or similar) to keep a local and
up-to-date copy of your starred repos (and even delete repos which
have been unstarred!).
Three variables may or may not need configuring to run this script in your
environment, they are ``github_username``, ``starred_dir`` and ``cleanup``.
function autoArchive() {
var archiveLabels = ["<...>"],
deleteLabels = ["<...>"],
maxAgeDays = 7,
log = DocumentApp.openById("<Log Document ID>"),
logger = log.getBody();
var maxDate = new Date();
logger.appendParagraph(maxDate.toString());
maxDate.setDate(maxDate.getDate()-maxAgeDays);