Skip to content

Instantly share code, notes, and snippets.


Josh Williams sjwilliams

View GitHub Profile
sjwilliams / gist:0b7345440b74087b77f8e2ea6eacb535
Created Feb 7, 2020
convert list of filenames into full URLs
View gist:0b7345440b74087b77f8e2ea6eacb535
for filename in *.mp4; do base=${filename#mp4} echo "${filename%.mp4}-900w.mp4"; done
sjwilliams / videostack
Created Apr 19, 2019
Stack video frames onto a single image
View videostack
mkdir -p $FRAMESDIR
sjwilliams / grid.jsx
Created Jan 31, 2019 — forked from hughsk/grid.jsx
Generating Large Image Grids in Photoshop using Javascript
View grid.jsx
var shuffleAndValidateFiles = function(files) {
var F = new Array();
while (files.length > 0) {
var N = Math.floor(Math.random()*files.length);
if ((files[N] instanceof File) && !files[N].hidden) {
sjwilliams / bayphotosizes.js
Last active Feb 15, 2018
Return BayPhoto print sizes as list of height/width ratios. Markup on the page.
View bayphotosizes.js
[]'#panel_content_4932_template li')).map(function(el){ return el.textContent.trim();}).filter(function(str){ return /^\S+x\S+$/.test(str) }).forEach(function(str){ var wh = str.split('x'); console.log(str, wh[1]/wh[0]) })
View isAutoplaySupported.js
const isAutoplaySupported = function (callback) {
var timeout;
var waitTime = 200;
var retries = 5;
var currentTry = 0;
var elem = document.createElement('video');
var elemStyle =;
function testAutoplay(arg) {
sjwilliams /
Created Jul 14, 2017 — forked from dergachev/
OS X Screencast to animated GIF

OS X Screencast to animated GIF

This gist shows how to create a GIF screencast using only free OS X tools: QuickTime, ffmpeg, and gifsicle.

Screencapture GIF


To capture the video (filesize: 19MB), using the free "QuickTime Player" application:



You don't really need a framework or fancy cutting-edge JavaScript features to do two-way data binding. Let's start basic - first and foremost, you need a way to tell when data changes. Traditionally, this is done via an Observer pattern, but a full-blown implementation of that is a little clunky for nice, lightweight JavaScript. So, if native getters/setters are out, the only mechanism we have are accessors:

var n = 5;
function getN() { return n; }
function setN(newN) { n = newN; }

console.log(getN()); // 5
sjwilliams /
Created Mar 2, 2017 — forked from xdamman/
Install latest ffmpeg on ubuntu 12.04 or 14.04
# Bash script to install latest version of ffmpeg and its dependencies on Ubuntu 12.04 or 14.04
# Inspired from
# Remove any existing packages:
sudo apt-get -y remove ffmpeg x264 libav-tools libvpx-dev libx264-dev
# Get the dependencies (Ubuntu Server or headless users):
sudo apt-get update
sjwilliams / amazonsum
Created Nov 27, 2016
Sum Amazon orders per page under "Your Orders"
View amazonsum'.a-span2 .value')).map(function(value){return Number(value.textContent.replace('$', '').trim())}).reduce(function(a,b){return a + b}, 0);
sjwilliams /
Created Sep 26, 2016 — forked from stevejenkins/
Simple shell script to remotely reboot a Ubiquiti UBNT UniFi Access Point (UAP, UAP-PRO, UAP-AC, etc.)
# A simple script for remotely rebooting a Ubiquiti UniFi access point
# Version 1.0 (Dec 15, 2015)
# by Steve Jenkins (
# Requires sshpass ( which
# is probably available via dnf, yum, or apt on your *nix distro.
You can’t perform that action at this time.